Merge remote-tracking branch 'ruoyi-vue/master' into dev
# Conflicts:
# pom.xml
# ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
# ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
# ruoyi-generator/pom.xml
# ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
# ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
# ruoyi-generator/src/main/resources/vm/js/api.js.vm
# ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
# ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
# ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
# ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
# ruoyi-ui/package.json
# ruoyi-ui/src/api/monitor/server.js
# ruoyi-ui/src/components/RuoYi/Doc/index.vue
# ruoyi-ui/src/components/RuoYi/Git/index.vue
# ruoyi-ui/src/components/SizeSelect/index.vue
# ruoyi-ui/src/layout/components/Sidebar/Logo.vue
# ruoyi-ui/src/layout/components/TagsView/index.vue
# ruoyi-ui/src/layout/index.vue
# ruoyi-ui/src/main.js
# ruoyi-ui/src/plugins/download.js
# ruoyi-ui/src/router/index.js
# ruoyi-ui/src/store/modules/permission.js
# ruoyi-ui/src/store/modules/settings.js
# ruoyi-ui/src/store/modules/tagsView.js
# ruoyi-ui/src/store/modules/user.js
# ruoyi-ui/src/views/login.vue
# ruoyi-ui/src/views/monitor/job/log.vue
# ruoyi-ui/src/views/system/dict/data.vue
# ruoyi-ui/src/views/system/role/index.vue
# ruoyi-ui/src/views/system/user/authRole.vue
# ruoyi-ui/src/views/system/user/index.vue
# ruoyi-ui/src/views/system/user/profile/resetPwd.vue
# ruoyi-ui/src/views/system/user/profile/userAvatar.vue
# ruoyi-ui/src/views/system/user/profile/userInfo.vue
| | |
| | | <swagger-annotations.version>1.5.22</swagger-annotations.version> |
| | | <poi.version>4.1.2</poi.version> |
| | | <easyexcel.version>2.2.11</easyexcel.version> |
| | | <velocity.version>1.7</velocity.version> |
| | | <velocity.version>2.3</velocity.version> |
| | | <jwt.version>0.9.1</jwt.version> |
| | | <mybatis-plus.version>3.4.3.4</mybatis-plus.version> |
| | | <p6spy.version>3.9.1</p6spy.version> |
| | |
| | | <!-- velocity代ç çæä½¿ç¨æ¨¡æ¿ --> |
| | | <dependency> |
| | | <groupId>org.apache.velocity</groupId> |
| | | <artifactId>velocity</artifactId> |
| | | <artifactId>velocity-engine-core</artifactId> |
| | | <version>${velocity.version}</version> |
| | | </dependency> |
| | | |
| | |
| | | LoginUser loginUser = getLoginUser(); |
| | | SysUser sysUser = userService.selectUserById(loginUser.getUserId()); |
| | | user.setUserId(sysUser.getUserId()); |
| | | user.setUserName(null); |
| | | user.setPassword(null); |
| | | if (userService.updateUserProfile(user) > 0) { |
| | | return AjaxResult.success(); |
| | |
| | | <!--velocity代ç çæä½¿ç¨æ¨¡æ¿ --> |
| | | <dependency> |
| | | <groupId>org.apache.velocity</groupId> |
| | | <artifactId>velocity</artifactId> |
| | | <artifactId>velocity-engine-core</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- éç¨å·¥å
·--> |
| | |
| | | Properties p = new Properties(); |
| | | try { |
| | | // å è½½classpathç®å½ä¸çvmæä»¶ |
| | | p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); |
| | | p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); |
| | | // å®ä¹å符é |
| | | p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); |
| | | p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8); |
| | | // åå§åVelocityå¼æï¼æå®é
ç½®Properties |
| | | Velocity.init(p); |
| | | } catch (Exception e) { |
| | |
| | | List<String> dicts = new ArrayList<String>(); |
| | | for (GenTableColumn column : columns) { |
| | | if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( |
| | | column.getHtmlType(), new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO})) { |
| | | column.getHtmlType(), |
| | | new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) { |
| | | dicts.add("'" + column.getDictType() + "'"); |
| | | } |
| | | } |
| | |
| | | #elseif($column.list && $column.dictType && "" != $column.dictType) |
| | | <el-table-column label="${comment}" align="center" prop="${javaField}"> |
| | | <template slot-scope="scope"> |
| | | #if($column.htmlType == "checkbox") |
| | | <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/> |
| | | #else |
| | | <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/> |
| | | #end |
| | | </template> |
| | | </el-table-column> |
| | | #elseif($column.list && "" != $javaField) |
| | |
| | | queryParams: { |
| | | #foreach ($column in $columns) |
| | | #if($column.query) |
| | | $column.javaField: null#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: null#if($foreach.count != $columns.size()),#end |
| | | #end |
| | | #end |
| | | }, |
| | |
| | | #end |
| | | $column.javaField: [ |
| | | { required: true, message: "$commentä¸è½ä¸ºç©º", trigger: #if($column.htmlType == "select")"change"#else"blur"#end } |
| | | ]#if($velocityCount != $columns.size()),#end |
| | | |
| | | ]#if($foreach.count != $columns.size()),#end |
| | | #end |
| | | #end |
| | | } |
| | |
| | | this.form = { |
| | | #foreach ($column in $columns) |
| | | #if($column.htmlType == "radio") |
| | | $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($velocityCount != $columns.size()),#end |
| | | $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end |
| | | |
| | | #elseif($column.htmlType == "checkbox") |
| | | $column.javaField: []#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: []#if($foreach.count != $columns.size()),#end |
| | | #else |
| | | $column.javaField: null#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: null#if($foreach.count != $columns.size()),#end |
| | | #end |
| | | #end |
| | | }; |
| | |
| | | #elseif($column.list && $column.dictType && "" != $column.dictType) |
| | | <el-table-column label="${comment}" align="center" prop="${javaField}"> |
| | | <template slot-scope="scope"> |
| | | #if($column.htmlType == "checkbox") |
| | | <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/> |
| | | #else |
| | | <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/> |
| | | #end |
| | | </template> |
| | | </el-table-column> |
| | | #elseif($column.list && "" != $javaField) |
| | |
| | | pageSize: 10, |
| | | #foreach ($column in $columns) |
| | | #if($column.query) |
| | | $column.javaField: undefined#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: undefined#if($foreach.count != $columns.size()),#end |
| | | #end |
| | | #end |
| | | }, |
| | |
| | | #end |
| | | $column.javaField: [ |
| | | { required: true, message: "$commentä¸è½ä¸ºç©º", trigger: #if($column.htmlType == "select")"change"#else"blur"#end } |
| | | ]#if($velocityCount != $columns.size()),#end |
| | | |
| | | ]#if($foreach.count != $columns.size()),#end |
| | | #end |
| | | #end |
| | | } |
| | |
| | | this.form = { |
| | | #foreach ($column in $columns) |
| | | #if($column.htmlType == "radio") |
| | | $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end |
| | | #elseif($column.htmlType == "checkbox") |
| | | $column.javaField: []#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: []#if($foreach.count != $columns.size()),#end |
| | | #else |
| | | $column.javaField: undefined#if($velocityCount != $columns.size()),#end |
| | | |
| | | $column.javaField: undefined#if($foreach.count != $columns.size()),#end |
| | | #end |
| | | #end |
| | | }; |
| | |
| | | "fuse.js": "6.4.3", |
| | | "highlight.js": "9.18.5", |
| | | "js-beautify": "1.13.0", |
| | | "js-cookie": "2.2.1", |
| | | "js-cookie": "3.0.1", |
| | | "jsencrypt": "3.2.1", |
| | | "nprogress": "0.2.0", |
| | | "quill": "1.3.7", |
| | |
| | | "vue": "2.6.12", |
| | | "vue-count-to": "1.0.13", |
| | | "vue-cropper": "0.5.5", |
| | | "vue-meta": "^2.4.0", |
| | | "vue-meta": "2.4.0", |
| | | "vue-router": "3.4.9", |
| | | "vuedraggable": "2.24.3", |
| | | "vuex": "3.6.0" |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢æå¡å¨è¯¦ç» |
| | | // è·åæå¡ä¿¡æ¯ |
| | | export function getServer() { |
| | | return request({ |
| | | url: '/monitor/server', |
| | | method: 'get' |
| | | }) |
| | | } |
| | | } |
| | |
| | | <el-breadcrumb class="app-breadcrumb" separator="/"> |
| | | <transition-group name="breadcrumb"> |
| | | <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path"> |
| | | <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span> |
| | | <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span> |
| | | <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> |
| | | </el-breadcrumb-item> |
| | | </transition-group> |
| | |
| | | },
|
| | | // å³ä¾§å表å
ç´ åå
|
| | | dataChange(data) {
|
| | | for (var item in this.columns) {
|
| | | for (let item in this.columns) {
|
| | | const key = this.columns[item].key;
|
| | | this.columns[item].visible = !data.includes(key);
|
| | | }
|
| | |
| | | <template> |
| | | <div> |
| | | <svg-icon icon-class="question" @click="goto"/> |
| | | <svg-icon icon-class="question" @click="goto" /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <template> |
| | | <div> |
| | | <svg-icon icon-class="github" @click="goto"/> |
| | | <svg-icon icon-class="github" @click="goto" /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | </div> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value"> |
| | | {{ |
| | | item.label }} |
| | | {{ item.label }} |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | |
| | | variables() { |
| | | return variables; |
| | | }, |
| | | sideTheme() { |
| | | sideTheme() { |
| | | return this.$store.state.settings.sideTheme |
| | | } |
| | | }, |
| | |
| | | }) |
| | | }, |
| | | refreshSelectedTag(view) { |
| | | this.$store.dispatch('tagsView/delCachedView', view).then(() => { |
| | | const { fullPath } = view |
| | | this.$nextTick(() => { |
| | | this.$router.replace({ |
| | | path: '/redirect' + fullPath |
| | | }) |
| | | }) |
| | | }) |
| | | this.$tab.refreshPage(view); |
| | | }, |
| | | closeSelectedTag(view) { |
| | | this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => { |
| | | this.$tab.closePage(view).then(({ visitedViews }) => { |
| | | if (this.isActive(view)) { |
| | | this.toLastView(visitedViews, view) |
| | | } |
| | | }) |
| | | }, |
| | | closeRightTags() { |
| | | this.$store.dispatch('tagsView/delRightTags', this.selectedTag).then(visitedViews => { |
| | | this.$tab.closeRightPage(this.selectedTag).then(visitedViews => { |
| | | if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { |
| | | this.toLastView(visitedViews) |
| | | } |
| | | }) |
| | | }, |
| | | closeLeftTags() { |
| | | this.$store.dispatch('tagsView/delLeftTags', this.selectedTag).then(visitedViews => { |
| | | this.$tab.closeLeftPage(this.selectedTag).then(visitedViews => { |
| | | if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { |
| | | this.toLastView(visitedViews) |
| | | } |
| | |
| | | }, |
| | | closeOthersTags() { |
| | | this.$router.push(this.selectedTag).catch(()=>{}); |
| | | this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => { |
| | | this.$tab.closeOtherPage(this.selectedTag).then(() => { |
| | | this.moveToCurrentTag() |
| | | }) |
| | | }, |
| | | closeAllTags(view) { |
| | | this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => { |
| | | this.$tab.closeAllPage().then(({ visitedViews }) => { |
| | | if (this.affixTags.some(tag => tag.path === this.$route.path)) { |
| | | return |
| | | } |
| | |
| | | } |
| | | |
| | | .hideSidebar .fixed-header { |
| | | width: calc(100% - 54px) |
| | | width: calc(100% - 54px); |
| | | } |
| | | |
| | | .mobile .fixed-header { |
| | |
| | | import App from './App' |
| | | import store from './store' |
| | | import router from './router' |
| | | import directive from './directive' //directive |
| | | import directive from './directive' // directive |
| | | import plugins from './plugins' // plugins |
| | | import { download } from '@/utils/request' |
| | | |
| | |
| | | import tab from './tab'
|
| | | import auth from './auth'
|
| | | import cache from './cache'
|
| | | import modal from './modal'
|
| | |
| | |
|
| | | export default {
|
| | | install(Vue) {
|
| | | // é¡µç¾æä½
|
| | | Vue.prototype.$tab = tab
|
| | | // 认è¯å¯¹è±¡
|
| | | Vue.prototype.$auth = auth
|
| | | // ç¼å对象
|
¶Ô±ÈÐÂÎļþ |
| | |
| | | import store from '@/store'
|
| | | import router from '@/router';
|
| | |
|
| | | export default {
|
| | | // å·æ°å½åtab页ç¾
|
| | | refreshPage(obj) {
|
| | | const { path, matched } = router.currentRoute;
|
| | | if (obj === undefined) {
|
| | | matched.forEach((m) => {
|
| | | if (m.components && m.components.default && m.components.default.name) {
|
| | | if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
|
| | | obj = { name: m.components.default.name, path: path };
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | return store.dispatch('tagsView/delCachedView', obj).then(() => {
|
| | | const { path } = obj
|
| | | router.replace({
|
| | | path: '/redirect' + path
|
| | | })
|
| | | })
|
| | | },
|
| | | // å
³éå½åtab页ç¾ï¼æå¼æ°é¡µç¾
|
| | | closeOpenPage(obj) {
|
| | | store.dispatch("tagsView/delView", router.currentRoute);
|
| | | if (obj !== undefined) {
|
| | | return router.push(obj);
|
| | | }
|
| | | },
|
| | | // å
³éæå®tab页ç¾
|
| | | closePage(obj) {
|
| | | if (obj === undefined) {
|
| | | return store.dispatch('tagsView/delView', router.currentRoute).then(({ lastPath }) => {
|
| | | return router.push(lastPath || '/');
|
| | | });
|
| | | }
|
| | | return store.dispatch('tagsView/delView', obj);
|
| | | },
|
| | | // å
³éæætab页ç¾
|
| | | closeAllPage() {
|
| | | return store.dispatch('tagsView/delAllViews');
|
| | | },
|
| | | // å
³é左侧tab页ç¾
|
| | | closeLeftPage(obj) {
|
| | | return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute);
|
| | | },
|
| | | // å
³éå³ä¾§tab页ç¾
|
| | | closeRightPage(obj) {
|
| | | return store.dispatch('tagsView/delRightTags', obj || router.currentRoute);
|
| | | },
|
| | | // å
³éå
¶ä»tab页ç¾
|
| | | closeOtherPage(obj) {
|
| | | return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute);
|
| | | },
|
| | | // æ·»å tab页ç¾
|
| | | openPage(title, url) {
|
| | | var obj = { path: url, meta: { title: title } }
|
| | | store.dispatch('tagsView/addView', obj);
|
| | | return router.push(url);
|
| | | },
|
| | | // ä¿®æ¹tab页ç¾
|
| | | updatePage(obj) {
|
| | | return store.dispatch('tagsView/updateVisitedView', obj);
|
| | | }
|
| | | }
|
| | |
| | | path: 'role/:userId(\\d+)', |
| | | component: (resolve) => require(['@/views/system/user/authRole'], resolve), |
| | | name: 'AuthRole', |
| | | meta: { title: 'åé
è§è²', activeMenu: '/system/user'} |
| | | meta: { title: 'åé
è§è²', activeMenu: '/system/user' } |
| | | } |
| | | ] |
| | | }, |
| | |
| | | path: 'user/:roleId(\\d+)', |
| | | component: (resolve) => require(['@/views/system/role/authUser'], resolve), |
| | | name: 'AuthUser', |
| | | meta: { title: 'åé
ç¨æ·', activeMenu: '/system/role'} |
| | | meta: { title: 'åé
ç¨æ·', activeMenu: '/system/role' } |
| | | } |
| | | ] |
| | | }, |
| | |
| | | path: 'index/:dictId(\\d+)', |
| | | component: (resolve) => require(['@/views/system/dict/data'], resolve), |
| | | name: 'Data', |
| | | meta: { title: 'åå
¸æ°æ®', activeMenu: '/system/dict'} |
| | | meta: { title: 'åå
¸æ°æ®', activeMenu: '/system/dict' } |
| | | } |
| | | ] |
| | | }, |
| | |
| | | path: 'index', |
| | | component: (resolve) => require(['@/views/tool/gen/editTable'], resolve), |
| | | name: 'GenEdit', |
| | | meta: { title: 'ä¿®æ¹çæé
ç½®', activeMenu: '/tool/gen'} |
| | | meta: { title: 'ä¿®æ¹çæé
ç½®', activeMenu: '/tool/gen' } |
| | | } |
| | | ] |
| | | } |
| | |
| | | import { constantRoutes } from '@/router' |
| | | import { getRouters } from '@/api/menu' |
| | | import Layout from '@/layout/index' |
| | | import ParentView from '@/components/ParentView'; |
| | | import ParentView from '@/components/ParentView' |
| | | import InnerLink from '@/layout/components/InnerLink' |
| | | |
| | | const permission = { |
| | |
| | | // é¡¶é¨å¯¼èªèåé»è®¤æ·»å ç»è®¡æ¥è¡¨æ æåé¦é¡µ |
| | | const index = [{ |
| | | path: 'index', |
| | | meta: { title: 'ç»è®¡æ¥è¡¨', icon: 'dashboard'} |
| | | meta: { title: 'ç»è®¡æ¥è¡¨', icon: 'dashboard' } |
| | | }] |
| | | state.topbarRouters = routes.concat(index); |
| | | }, |
| | |
| | | theme: storageSetting.theme || '#409EFF', |
| | | sideTheme: storageSetting.sideTheme || sideTheme, |
| | | showSettings: showSettings, |
| | | topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, |
| | | topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, |
| | | tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, |
| | | fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, |
| | | sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, |
| | |
| | | }, |
| | | ADD_CACHED_VIEW: (state, view) => { |
| | | if (state.cachedViews.includes(view.name)) return |
| | | if (!view.meta.noCache) { |
| | | if (view.meta && !view.meta.noCache) { |
| | | state.cachedViews.push(view.name) |
| | | } |
| | | }, |
| | |
| | | } |
| | | } |
| | | }, |
| | | |
| | | |
| | | DEL_RIGHT_VIEWS: (state, view) => { |
| | | const index = state.visitedViews.findIndex(v => v.path === view.path) |
| | | if (index === -1) { |
| | |
| | | mergeOptions(options)
|
| | | Vue.mixin({
|
| | | data() {
|
| | | if (this.$options.dicts === undefined || this.$options.dicts === null) {
|
| | | if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) {
|
| | | return {}
|
| | | }
|
| | | const dict = new Dict()
|
| | |
| | | <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> |
| | | <h3 class="title">RuoYi-Vue-Plusåå°ç®¡çç³»ç»</h3> |
| | | <el-form-item prop="username"> |
| | | <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="è´¦å·"> |
| | | <el-input |
| | | v-model="loginForm.username" |
| | | type="text" |
| | | auto-complete="off" |
| | | placeholder="è´¦å·" |
| | | > |
| | | <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> |
| | | </el-input> |
| | | </el-form-item> |
| | |
| | | data() { |
| | | return { |
| | | codeUrl: "", |
| | | cookiePassword: "", |
| | | loginForm: { |
| | | username: "admin", |
| | | password: "admin123", |
| | |
| | | v-model="queryParams.ipaddr" |
| | | placeholder="请è¾å
¥ç»å½å°å" |
| | | clearable |
| | | size="small" |
| | | style="width: 240px;" |
| | | size="small" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | |
| | | v-model="queryParams.userName" |
| | | placeholder="请è¾å
¥ç¨æ·åç§°" |
| | | clearable |
| | | size="small" |
| | | style="width: 240px;" |
| | | size="small" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | |
| | | v-model="queryParams.title" |
| | | placeholder="请è¾å
¥ç³»ç»æ¨¡å" |
| | | clearable |
| | | style="width: 240px;" |
| | | size="small" |
| | | style="width: 240px;" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | |
| | | v-model="queryParams.operName" |
| | | placeholder="请è¾å
¥æä½äººå" |
| | | clearable |
| | | style="width: 240px;" |
| | | size="small" |
| | | style="width: 240px;" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | |
| | | isExpandAll: true, |
| | | // éæ°æ¸²æè¡¨æ ¼ç¶æ |
| | | refreshTable: true, |
| | | // æ¯å¦å±å¼ |
| | | expand: false, |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | deptName: undefined, |
| | |
| | | this.open = true; |
| | | this.title = "æ·»å é¨é¨"; |
| | | listDept().then(response => { |
| | | this.deptOptions = this.handleTree(response.data, "deptId"); |
| | | this.deptOptions = this.handleTree(response.data, "deptId"); |
| | | }); |
| | | }, |
| | | /** å±å¼/æå æä½ */ |
| | |
| | | this.title = "ä¿®æ¹é¨é¨"; |
| | | }); |
| | | listDeptExcludeChild(row.deptId).then(response => { |
| | | this.deptOptions = this.handleTree(response.data, "deptId"); |
| | | this.deptOptions = this.handleTree(response.data, "deptId"); |
| | | }); |
| | | }, |
| | | /** æäº¤æé® */ |
| | |
| | | v-hasPermi="['system:dict:export']" |
| | | >导åº</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-close" |
| | | size="mini" |
| | | @click="handleClose" |
| | | >å
³é</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** è¿åæé®æä½ */ |
| | | handleClose() { |
| | | const obj = { path: "/system/dict" }; |
| | | this.$tab.closeOpenPage(obj); |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.resetForm("queryForm"); |
| | |
| | | </el-table-column> |
| | | <el-table-column label="æä½" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item v-if="form.menuType != 'F'" label="èå徿 "> |
| | | <el-col :span="24" v-if="form.menuType != 'F'"> |
| | | <el-form-item label="èå徿 "> |
| | | <el-popover |
| | | placement="bottom-start" |
| | | width="460" |
| | |
| | | <el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType != 'F'"> |
| | | <el-col :span="12" v-if="form.menuType != 'F'"> |
| | | <el-form-item> |
| | | <span slot="label"> |
| | | <el-tooltip content="éæ©æ¯å¤é¾åè·¯ç±å°åéè¦ä»¥`http(s)://`å¼å¤´" placement="top"> |
| | | <i class="el-icon-question"></i> |
| | |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType != 'F'" prop="path"> |
| | | <el-col :span="12" v-if="form.menuType != 'F'"> |
| | | <el-form-item prop="path"> |
| | | <span slot="label"> |
| | | <el-tooltip content="访é®çè·¯ç±å°åï¼å¦ï¼`user`ï¼å¦å¤ç½å°åéå
é¾è®¿é®å以`http(s)://`å¼å¤´" placement="top"> |
| | | <i class="el-icon-question"></i> |
| | |
| | | <el-input v-model="form.component" placeholder="请è¾å
¥ç»ä»¶è·¯å¾" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType != 'M'"> |
| | | <el-col :span="12" v-if="form.menuType != 'M'"> |
| | | <el-form-item> |
| | | <el-input v-model="form.perms" placeholder="请è¾å
¥æéæ è¯" maxlength="100" /> |
| | | <span slot="label"> |
| | | <el-tooltip content="æ§å¶å¨ä¸å®ä¹çæéå符ï¼å¦ï¼@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top"> |
| | |
| | | </span> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType == 'C'"> |
| | | <el-col :span="12" v-if="form.menuType == 'C'"> |
| | | <el-form-item> |
| | | <el-input v-model="form.query" placeholder="请è¾å
¥è·¯ç±åæ°" maxlength="255" /> |
| | | <span slot="label"> |
| | | <el-tooltip content='访é®è·¯ç±çé»è®¤ä¼ éåæ°ï¼å¦ï¼`{"id": 1, "name": "ry"}`' placement="top"> |
| | |
| | | </span> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType == 'C'"> |
| | | <el-col :span="12" v-if="form.menuType == 'C'"> |
| | | <el-form-item> |
| | | <span slot="label"> |
| | | <el-tooltip content="éæ©æ¯åä¼è¢«`keep-alive`ç¼åï¼éè¦å¹é
ç»ä»¶ç`name`åå°åä¿æä¸è´" placement="top"> |
| | | <i class="el-icon-question"></i> |
| | |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType != 'F'"> |
| | | <el-col :span="12" v-if="form.menuType != 'F'"> |
| | | <el-form-item> |
| | | <span slot="label"> |
| | | <el-tooltip content="éæ©éèåè·¯ç±å°ä¸ä¼åºç°å¨ä¾§è¾¹æ ï¼ä½ä»ç¶å¯ä»¥è®¿é®" placement="top"> |
| | | <i class="el-icon-question"></i> |
| | |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item v-if="form.menuType != 'F'"> |
| | | <el-col :span="12" v-if="form.menuType != 'F'"> |
| | | <el-form-item> |
| | | <span slot="label"> |
| | | <el-tooltip content="éæ©åç¨åè·¯ç±å°ä¸ä¼åºç°å¨ä¾§è¾¹æ ï¼ä¹ä¸è½è¢«è®¿é®" placement="top"> |
| | | <i class="el-icon-question"></i> |
| | |
| | | },
|
| | | // è¿åæé®
|
| | | handleClose() {
|
| | | this.$store.dispatch("tagsView/delView", this.$route);
|
| | | this.$router.push({ path: "/system/role" });
|
| | | const obj = { path: "/system/role" };
|
| | | this.$tab.closeOpenPage(obj);
|
| | | },
|
| | | /** æç´¢æé®æä½ */
|
| | | handleQuery() {
|
| | |
| | | /** æ¥è¯¢è§è²å表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | listRole(this.addDateRange(this.queryParams, this.dateRange)).then( |
| | | response => { |
| | | listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => { |
| | | this.roleList = response.rows; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | |
| | | handleSelectUser() {
|
| | | const roleId = this.queryParams.roleId;
|
| | | const userIds = this.userIds.join(",");
|
| | | if (userIds == "") {
|
| | | this.$modal.msgError("è¯·éæ©è¦åé
çç¨æ·");
|
| | | return;
|
| | | }
|
| | | authUserSelectAll({ roleId: roleId, userIds: userIds }).then(res => {
|
| | | this.$modal.msgSuccess(res.msg);
|
| | | if (res.code === 200) {
|
| | |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | |
| | | <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" /> |
| | | |
| | | <el-form label-width="100px"> |
| | |
| | | }, |
| | | /** å
³éæé® */ |
| | | close() { |
| | | this.$store.dispatch("tagsView/delView", this.$route); |
| | | this.$router.push({ path: "/system/user" }); |
| | | const obj = { path: "/system/user" }; |
| | | this.$tab.closeOpenPage(obj); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | </script> |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- æ·»å æä¿®æ¹åæ°é
ç½®å¯¹è¯æ¡ --> |
| | | <!-- æ·»å æä¿®æ¹ç¨æ·é
ç½®å¯¹è¯æ¡ --> |
| | | <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-row> |
| | |
| | | /** ä¸è½½æ¨¡æ¿æä½ */ |
| | | importTemplate() { |
| | | this.download('system/user/importTemplate', { |
| | | ...this.queryParams |
| | | }, `user_template_${new Date().getTime()}.xlsx`) |
| | | }, |
| | | // æä»¶ä¸ä¼ ä¸å¤ç |
| | |
| | | } |
| | | }; |
| | | return { |
| | | test: "1test", |
| | | user: { |
| | | oldPassword: undefined, |
| | | newPassword: undefined, |
| | |
| | | submit() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | updateUserPwd(this.user.oldPassword, this.user.newPassword).then( |
| | | response => { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } |
| | | ); |
| | | updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | close() { |
| | | this.$store.dispatch("tagsView/delView", this.$route); |
| | | this.$router.push({ path: "/index" }); |
| | | this.$tab.closePage(); |
| | | } |
| | | } |
| | | }; |
| | |
| | | <template> |
| | | <div> |
| | | <div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="ç¹å»ä¸ä¼ 头å" class="img-circle img-lg" /></div> |
| | | <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog()"> |
| | | <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog"> |
| | | <el-row> |
| | | <el-col :xs="24" :md="12" :style="{height: '350px'}"> |
| | | <vue-cropper |
| | |
| | | // å
³éçªå£ |
| | | closeDialog() { |
| | | this.options.img = store.getters.avatar |
| | | this.visible = false; |
| | | this.visible = false; |
| | | } |
| | | } |
| | | }; |
| | |
| | | line-height: 110px; |
| | | border-radius: 50%; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-form ref="form" :model="user" :rules="rules" label-width="80px"> |
| | | <el-form-item label="ç¨æ·æµç§°" prop="nickName"> |
| | | <el-input v-model="user.nickName" maxlength="30" /> |
| | | </el-form-item> |
| | | </el-form-item> |
| | | <el-form-item label="ææºå·ç " prop="phonenumber"> |
| | | <el-input v-model="user.phonenumber" maxlength="11" /> |
| | | </el-form-item> |
| | |
| | | }); |
| | | }, |
| | | close() { |
| | | this.$store.dispatch("tagsView/delView", this.$route); |
| | | this.$router.push({ path: "/index" }); |
| | | this.$tab.closePage(); |
| | | } |
| | | } |
| | | }; |
| | |
| | | }, |
| | | /** å
³éæé® */ |
| | | close() { |
| | | this.$store.dispatch("tagsView/delView", this.$route); |
| | | this.$router.push({ path: "/tool/gen", query: { t: Date.now(), pageNum: this.$route.query.pageNum } }) |
| | | const obj = { path: "/tool/gen", query: { t: Date.now(), pageNum: this.$route.query.pageNum } }; |
| | | this.$tab.closeOpenPage(obj); |
| | | } |
| | | }, |
| | | mounted() { |