{{ ruleForm[row.prop] ? ruleForm[row.prop] : - '请点击选择' }} + @click="elDialogClick(row, index, indexRow)" + >{{ + ruleForm[row.prop] ? ruleForm[row.prop] : + '请点击选择' + }}
+ v-if="!row.disabled && !ruleForm[row.prop]" + > + @click.stop="resetField(row.prop)" style="margin-left: 10px;" + >" + content + "
"); - marker.addEventListener("click", function () { - this.openInfoWindow(infoWindow); - }); + var infoWindow = new BMap.InfoWindow('' + content + '
') + marker.addEventListener('click', function() { + this.openInfoWindow(infoWindow) + }) // marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画 - }); - localSearch.search(keyword); + }) + localSearch.search(keyword) } }, @@ -269,21 +301,21 @@ export default { }, // 获取图片 getImage(imagePath) { - let licenseImg = imagePath.join(",") + let licenseImg = imagePath.join(',') }, // 处置前照片 getbeforeImgList(imagePath) { - let licenseImg = imagePath.join(",") + let licenseImg = imagePath.join(',') this.$set(this.ruleForm, 'beforeImgList', licenseImg) }, // 处置材料 getmaterialsList(imagePath) { - let licenseImg = imagePath.join(",") + let licenseImg = imagePath.join(',') this.$set(this.ruleForm, 'materialsList', licenseImg) }, // 处置后材料 getmaterialsListAfter(imagePath) { - let licenseImg = imagePath.join(",") + let licenseImg = imagePath.join(',') this.$set(this.ruleForm, 'materialsListAfter', licenseImg) }, revealPhoto(licenseImg) { @@ -298,10 +330,12 @@ export default { let newJson = [].concat.apply([], jsonData) newJson.forEach(item => { if (this.ruleForm.factoryInFlag == 1) { - for (let i = 0; i < this.formRow[8].elCol.length; i++) { } + for (let i = 0; i < this.formRow[8].elCol.length; i++) { + } } if (this.ruleForm.factoryInFlag == 0) { - for (let i = 0; i < this.formRow[8].elCol.length; i++) { } + for (let i = 0; i < this.formRow[8].elCol.length; i++) { + } } this.$set(this.ruleForm, item.prop, echoData[item.prop]) }) @@ -349,15 +383,15 @@ export default { resetField(field) { if (this.ruleForm[field]) { this.$set(this.ruleForm, field, '') - this.$refs['ruleForm'].clearValidate(field); // 清除表单特定属性 + this.$refs['ruleForm'].clearValidate(field) // 清除表单特定属性 } }, resetFields() { this.choiceAssignment({}) - this.$refs.ruleForm.resetFields(); + this.$refs.ruleForm.resetFields() }, // 下拉框更改,可根据 index 与 indexRow 定位具体位置 - selectChange(val, index, indexRow, options) { + selectChange(val, index, indexRow, options, row) { let obj = {} options.forEach((item) => { if (item.value == val) { @@ -365,7 +399,10 @@ export default { } }) this.$emit('onSelect', val, index, indexRow, obj) - this.$forceUpdate(); + if (row.changeRemind) { + this.$emit('changeRemind', this.ruleForm) + } + this.$forceUpdate() }, switchChange(val, index, indexRow, row) { this.$emit('switchChange', val, index, indexRow, row) @@ -380,10 +417,10 @@ export default { if (valid) { this.$emit('onSubmit', this.ruleForm) } else { - console.log('error submit!!'); - return false; + console.log('error submit!!') + return false } - }); + }) }, // 表单重置 resetForm(formName) { @@ -408,10 +445,10 @@ export default { // row.elDialogHoverType = false }, // 单选按钮组input事件 - changeRadio(val, index, indexRow, row){ + changeRadio(val, index, indexRow, row) { this.$emit('onChangeRadio', val, index, indexRow, row) }, - normalizer(node,row) { + normalizer(node, row) { //去掉children=null的属性 if (node.children == null || node.children == 'null') { delete node.children @@ -424,10 +461,10 @@ export default { selectTree(node, instanceId) { this.$emit('selectTree', node) }, - treeSelectClear(){ + treeSelectClear() { this.$refs.selectTree.clear() } - }, + } } - diff --git a/src/directive/index.js b/src/directive/index.js index b2901d7..138f2cd 100644 --- a/src/directive/index.js +++ b/src/directive/index.js @@ -4,7 +4,7 @@ import dialogDrag from './dialog/drag' import dialogDragWidth from './dialog/dragWidth' import dialogDragHeight from './dialog/dragHeight' import clipboard from './module/clipboard' - +import btnPermission from "@/directive/permission/btnPermission"; const install = function(Vue) { Vue.directive('hasRole', hasRole) Vue.directive('hasPermi', hasPermi) @@ -12,6 +12,7 @@ const install = function(Vue) { Vue.directive('dialogDrag', dialogDrag) Vue.directive('dialogDragWidth', dialogDragWidth) Vue.directive('dialogDragHeight', dialogDragHeight) + Vue.directive("btnPermission", btnPermission); } if (window.Vue) { diff --git a/src/directive/permission/btnPermission.js b/src/directive/permission/btnPermission.js new file mode 100644 index 0000000..2080c17 --- /dev/null +++ b/src/directive/permission/btnPermission.js @@ -0,0 +1,17 @@ +import store from "@/store"; + +export default { + inserted(el, bindling) { + let perVal = bindling.value.btnID; + let routeId = bindling.value.routeId; + if (perVal && routeId) { + let perObj = store.getters.getButtonPre; + if (Object.keys(perObj).length) { + let hasPer = perObj[routeId] && perObj[routeId].includes(perVal); + if (!hasPer) { + el.parentNode.removeChild(el); + } + } + } + }, +}; diff --git a/src/directive/permission/index.js b/src/directive/permission/index.js new file mode 100644 index 0000000..d798b91 --- /dev/null +++ b/src/directive/permission/index.js @@ -0,0 +1,11 @@ +import btnPermission from "@/directive/permission/btnPermission"; +const directives = { + btnPermission, +}; +export default { + install(Vue) { + Object.keys(directives).forEach((key) => { + Vue.directive(key, directives[key]); + }); + }, +}; diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index c149399..9709182 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -15,7 +15,7 @@ - + @@ -273,6 +273,8 @@ export default { .then(() => { this.$store.dispatch("LogOut").then(() => { Cookies.remove("automaticLogin"); + this.$store.commit("REMOVE_ROUTER"); + this.$store.dispatch("tagsView/delAllViews"); // location.href = '/login'; this.$router.replace({ path: "/login" }); // this.$router.push("/login"); diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue index 72e2b9d..9823038 100644 --- a/src/layout/components/Sidebar/SidebarItem.vue +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -5,25 +5,25 @@{{ childrenList }}
{{ item.meta.title }}
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index f077d32..69e8c46 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -370,7 +370,7 @@ export default { //width: 16px; //height: 16px; left: -14px; - top: -3px; + top: 0px; position: absolute; vertical-align: 2px; border-radius: 50%; diff --git a/src/layout/components_new/Sidebar/SidebarItem.vue b/src/layout/components_new/Sidebar/SidebarItem.vue index 72e2b9d..9823038 100644 --- a/src/layout/components_new/Sidebar/SidebarItem.vue +++ b/src/layout/components_new/Sidebar/SidebarItem.vue @@ -5,25 +5,25 @@{{ item.meta.title }}
diff --git a/src/layout/components_new/Sidebar/newsSiderApp.vue b/src/layout/components_new/Sidebar/newsSiderApp.vue index d360366..66f744e 100644 --- a/src/layout/components_new/Sidebar/newsSiderApp.vue +++ b/src/layout/components_new/Sidebar/newsSiderApp.vue @@ -14,7 +14,7 @@{{ item.meta.title }}
diff --git a/src/main.js b/src/main.js index 607ec82..dde5e4f 100644 --- a/src/main.js +++ b/src/main.js @@ -38,7 +38,11 @@ import nodeWrap from '@/components/nodeWrap' import { delTreeChildren } from '@/utils/util' Vue.use(nodeWrap) Vue.component('NodeWrap', nodeWrap) // 初始化组件 - +// 柱状图、折线图组件 +import BarChart from "@/components/Echarts/BarChart"; +import BarChartBlack from "@/components/Echarts/BarChartBlack.vue"; +Vue.component("BarChart", BarChart); +Vue.component("BarChartBlack", BarChartBlack); import followWorkShow from '@/components/nodeWrapShow' Vue.use(followWorkShow) Vue.component('FollowWorkShow', followWorkShow) // 初始化组件 @@ -62,6 +66,8 @@ Vue.directive('enterNumber', { }) } }) +import Directives from "@/directive/permission/index"; +Vue.use(Directives); import { download } from '@/utils/request' import { openLoading, closeLoading } from '@/utils/loading' diff --git a/src/permission.js b/src/permission.js index 50c19b5..f780f19 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,76 +1,130 @@ -import router from "./router"; -import store from "./store"; -import { Message } from "element-ui"; -import NProgress from "nprogress"; -import "nprogress/nprogress.css"; -import { getToken, getCompanyId } from "@/utils/auth"; -import { isRelogin, getButtonLish } from "@/utils/request"; +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken, getCompanyId } from '@/utils/auth' +import { isRelogin, getButtonLish } from '@/utils/request' +import { authApi } from '@/api/apis/auth' +import { getInfo } from '@/utils/auth' NProgress.configure({ - showSpinner: false, -}); + showSpinner: false +}) const whiteList = [ - "/login", - "/test", - "/auth-redirect", - "/bind", - "/contractAssistant", - "/register", - "/systemInit", - "/databaseLogin", -]; + '/login', + '/test', + '/auth-redirect', + '/bind', + '/contractAssistant', + '/register', + '/systemInit', + '/databaseLogin', + '/apiLogs' + +] router.beforeEach((to, from, next) => { - NProgress.start(); + NProgress.start() if (getToken()) { - to.meta.title && store.dispatch("settings/setTitle", to.meta.title); + to.meta.title && store.dispatch('settings/setTitle', to.meta.title) /* has token*/ - if (to.path === "/login") { + if (to.path === '/login') { next({ - path: "/", - }); - NProgress.done(); + path: '/' + }) + NProgress.done() } else { - let routeList = localStorage.getItem("routeList") - ? localStorage.getItem("routeList") - : null; + let routeList = localStorage.getItem('routeList') + ? localStorage.getItem('routeList') + : null // store.dispatch("GenerateRoutes").then((accessRoutes) => { // next() // }) if (store.getters.permission_routes.length == 0) { - store.dispatch("GenerateRoutes").then((accessRoutes) => { + store.dispatch('GenerateRoutes').then((accessRoutes) => { // 根据roles权限生成可访问的路由表 // for (let i = 0, length = accessRoutes.length; i < length; i += 1) { // const element = accessRoutes[i]; // // router.addRoutes(accessRoutes); // 动态添加可访问路由表 // } - router.addRoutes(accessRoutes); // 动态添加可访问路由表 + router.addRoutes(accessRoutes) // 动态添加可访问路由表 // router.addRoutes(accessRoutes) // 动态添加可访问路由表 - localStorage.setItem("routeList", JSON.stringify(accessRoutes)); - next({ - ...to, - replace: true, - }); // hack方法 确保addRoutes已完成 - }); + localStorage.setItem('routeList', JSON.stringify(accessRoutes)) + //获取当前已获取的权限按钮 + let perObj = store.getters.getButtonPre + //获取当前权限按钮 + if (to.meta.id && !perObj[to.meta.id]) { + let userId = JSON.parse(getInfo()).id + authApi('sysButtonConfigService', '', 'getUserButton', '', { + menuId: to.meta.id, + userId: userId + }).then((res) => { + // 处理接口 格式为:{路由id:[按钮id,按钮id],....} + let tempObj = {} + let tempArr = [] + res.attribute.forEach((item) => { + tempArr.push(item.nameEn) + }) + tempObj.id = to.meta.id + tempObj.value = tempArr + store.commit('perButton/SET_BUTTONOBJ', tempObj) + next({ + ...to, + replace: true + }) + }) + } else { + next({ + ...to, + replace: true + }) + } + // next({ + // ...to, + // replace: true + // }) // hack方法 确保addRoutes已完成 + }) } else { - next(); + //获取当前已获取的权限按钮 + let perObj = store.getters.getButtonPre + if (to.meta.id && !perObj[to.meta.id]) { + let userId = JSON.parse(getInfo()).id + authApi('sysButtonConfigService', '', 'getUserButton', '', { + menuId: to.meta.id, + userId: userId + }).then((res) => { + // 处理接口 格式为:{路由id:[按钮id,按钮id],....} + let tempObj = {} + let tempArr = [] + res.attribute.forEach((item) => { + tempArr.push(item.nameEn) + }) + tempObj.id = to.meta.id + tempObj.value = tempArr + store.commit('perButton/SET_BUTTONOBJ', tempObj) + next() + }) + } else { + next() + } } } } else { // 没有token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入 - next(); + next() } else { - next(`/login?redirect=${to.fullPath}`); // 否则全部重定向到登录页 - NProgress.done(); + next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 + NProgress.done() } } -}); +}) router.afterEach(() => { - NProgress.done(); -}); + NProgress.done() +}) diff --git a/src/router/index.js b/src/router/index.js index ccae5ae..e81993f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,12 +1,12 @@ -import Vue from "vue"; -import Router from "vue-router"; +import Vue from 'vue' +import Router from 'vue-router' -Vue.use(Router); +Vue.use(Router) /* Layout */ -import Layout from "@/layout/index.vue"; -import ParentView from "@/components/ParentView"; -import ApiAdmin from "@/views/integrationApi/apiAdmin" +import Layout from '@/layout/index.vue' +import ParentView from '@/components/ParentView' +import ApiAdmin from '@/views/integrationApi/apiAdmin' /** * Note: 路由配置项 @@ -22,101 +22,111 @@ import ApiAdmin from "@/views/integrationApi/apiAdmin" * roles: ['admin', 'common'] // 访问路由的角色权限 * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 * meta : { - noCache: true // 如果设置为true,则不会被