From 1cc916c53cf62951f6fd62a8e41e37524f15b4c1 Mon Sep 17 00:00:00 2001 From: ym1026 <1539963735@qq.com> Date: Thu, 4 Sep 2025 16:04:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=88=86=E6=9E=90?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/Home/Alarm.vue | 19 +- web/src/components/Home/Charge.vue | 20 +- web/src/components/Home/Energy.vue | 20 +- web/src/components/Home/Map.vue | 3 +- web/src/components/Home/Modal.vue | 253 +++--- web/src/components/Home/Modal/DisCharge.vue | 22 +- web/src/components/Home/Modal/Revenue.vue | 23 +- .../components/Home/Modal/StatisticalInfo.vue | 12 +- web/src/components/Home/Modal/Utilization.vue | 21 +- web/src/components/Home/Pv.vue | 19 +- web/src/components/Home/onLine.vue | 4 + web/src/components/SearchBox.vue | 5 + .../statisticalAnalysis/energyEchart.vue | 220 +---- web/src/router/index.js | 2 +- web/src/utils/dealWithData.js | 37 + web/src/views/statisticalAnalysis.vue | 755 +++++++----------- web/src/views/sub/Home.vue | 29 +- web/src/views/system/user.vue | 12 +- 18 files changed, 517 insertions(+), 959 deletions(-) create mode 100644 web/src/utils/dealWithData.js diff --git a/web/src/components/Home/Alarm.vue b/web/src/components/Home/Alarm.vue index 95128e5..5e5a0ea 100644 --- a/web/src/components/Home/Alarm.vue +++ b/web/src/components/Home/Alarm.vue @@ -12,6 +12,7 @@ @@ -253,8 +187,6 @@ export default { justify-content: space-between; } - - .content-left, .content-right { height: 100%; @@ -270,15 +202,15 @@ export default { width: 100%; height: calc(40% - 10px); z-index: 20; - -&:nth-child(2n){ + + &:nth-child(2n) { // height:calc(33% - 10px)!important; -} + } .tool { background: url('@/assets/home/modal-header-bg.png'); - background-size: contain; - background-repeat: no-repeat; - background-position: center; + background-size: contain; + background-repeat: no-repeat; + background-position: center; display: flex; justify-content: space-between; @@ -286,7 +218,7 @@ export default { height: 45px; .linear-text { - margin-bottom: 7px; + margin-bottom: 7px; background: linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, rgba(40, 235, 231, 1) 100%); color: transparent; -webkit-background-clip: text; @@ -315,7 +247,7 @@ export default { .title { display: flex; - + i { margin-left: 10px; } @@ -336,19 +268,14 @@ export default { color: transparent; } } - - } - .operation-status{ +.operation-status { height: calc(25% - 10px); - - } - .statistical{ +} +.statistical { height: calc(18% - 10px); - - } - .envInfo{ - height: calc(15% - 10px); - - } +} +.envInfo { + height: calc(15% - 10px); +} diff --git a/web/src/components/Home/Modal/DisCharge.vue b/web/src/components/Home/Modal/DisCharge.vue index 2af9149..e10d1ea 100644 --- a/web/src/components/Home/Modal/DisCharge.vue +++ b/web/src/components/Home/Modal/DisCharge.vue @@ -5,6 +5,8 @@ diff --git a/web/src/main.js b/web/src/main.js index 3126b87..95d1d9a 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -8,9 +8,13 @@ import 'ant-design-vue/dist/reset.css' import '@/style/index.scss' // import '@/assets/iconfont/iconfont.css' import * as echarts from 'echarts' +import { setWidth } from '@/utils/column' +import { getBtns } from '@/utils/btnList' import VueTianditu from 'vue-tianditu' const app = createApp(App) app.config.globalProperties.$echarts = echarts // 挂载到全局属性 +app.config.globalProperties.$setWidth = setWidth // 挂载到全局属性 +app.config.globalProperties.$getBtns = getBtns app.use(store).use(router).use(Antd).use(VueTianditu).mount('#app') diff --git a/web/src/store/index.js b/web/src/store/index.js index 100073a..0fc07f8 100644 --- a/web/src/store/index.js +++ b/web/src/store/index.js @@ -1,9 +1,10 @@ -import { createStore } from "vuex"; +import { createStore } from 'vuex' +import systemUser from './systemUser' export default createStore({ state: {}, getters: {}, mutations: {}, actions: {}, - modules: {}, -}); + modules: { systemUser } +}) diff --git a/web/src/store/systemUser.js b/web/src/store/systemUser.js new file mode 100644 index 0000000..6d8706f --- /dev/null +++ b/web/src/store/systemUser.js @@ -0,0 +1,17 @@ +export default { + namespaced: true, + tate: { + page: 'main', //main or detail + detailType: 'add', // add or edit or view + title: '新增', // 新增 or 查看 + type: 'user' // menu or authority role + }, + mutations: { + updateState(state, playload) { + Object.entries(playload).forEach((item) => { + const [key, value] = item + state[key] = value + }) + } + } +} diff --git a/web/src/utils/btnList.js b/web/src/utils/btnList.js new file mode 100644 index 0000000..2d4440c --- /dev/null +++ b/web/src/utils/btnList.js @@ -0,0 +1,54 @@ +const btnList = [ + { label: '', type: '', disFlag: '' }, + { label: '新增', type: 'add', disFlag: 'isEdit', icon: 'icon-add' }, + { label: '更新', type: 'edit', disFlag: 'isEdit' }, + { label: '查看', type: 'detail', disFlag: 'isQuery' }, + { label: '编辑', type: 'edit', disFlag: 'isEdit' }, + { label: '删除', type: 'del', disFlag: 'isEdit', icon: 'icon-del' }, + { label: '批量删除', type: 'del', disFlag: 'isEdit', icon: 'icon-del' }, + { label: '导入', type: 'upload', disFlag: 'isEdit', icon: 'icon-import' }, + { label: '导出', type: 'download', disFlag: 'isEdit', icon: 'icon-export' }, + { label: '上传', type: 'upload', disFlag: 'isEdit', icon: 'icon-upload' }, + { label: '下载', type: 'download', disFlag: 'isEdit', icon: 'icon-download' }, + { label: '下发', type: 'xf', disFlag: 'isControl' }, + { label: '批量下载', type: 'download', disFlag: 'isEdit', icon: 'icon-download' }, + { label: '下载模版', type: 'downTemplate', disFlag: 'isControl', icon: 'icon-download' }, + { label: '重置密码', type: 'reset', disFlag: 'isEdit' }, + { label: '派发', type: 'distribute', disFlag: 'isControl' }, + { label: '处理', type: 'dealWith', disFlag: 'isControl' }, + { label: '审核', type: 'audit', disFlag: 'isControl' }, + { label: '标记为已读', type: 'setTagR', disFlag: 'isControl', icon: 'icon-chulizhuangtai' }, + { label: '标记为已处理', type: 'setTagD', disFlag: 'isControl' }, + { label: '启动', type: 'start', disFlag: 'isControl' }, + { label: '停止', type: 'stop', disFlag: 'isControl' }, + { label: '重启', type: 'restart', disFlag: 'isControl' }, + { label: '批量启动', type: 'start', disFlag: 'isControl' }, + { label: '批量停止', type: 'stop', disFlag: 'isControl' }, + { label: '批量重启', type: 'restart', disFlag: 'isControl' }, + { label: '监控日志', type: 'log', disFlag: 'isControl' }, + { label: '新建备份', type: 'backups', disFlag: 'isEdit', icon: 'icon-add' }, + { label: '导入备份', type: 'importBackups', disFlag: 'isEdit', icon: 'icon-import' }, + { label: '还原', type: 'restore', disFlag: 'isEdit' }, + { label: '批量启用', type: 'enable', disFlag: 'isControl', icon: 'icon-a-qiyong' }, + { label: '批量禁用', type: 'disable', disFlag: 'isControl', icon: 'icon-a-jinyong' } +] + +// arr:按钮数组 +// permissions:{ +// isControl: true; +// isEdit: true; +// isQuery: true; +// } +function getBtns(arr) { + const permissions = + JSON.parse(localStorage.getItem('user')).userExtend.role.permissionList[0] || {} + const btns = [] + btnList.forEach((item) => { + if (arr.includes(item.label)) { + item.disabled = !Boolean(permissions[item.disFlag]) + btns.push(item) + } + }) + return btns +} +export { btnList, getBtns } diff --git a/web/src/utils/column.js b/web/src/utils/column.js new file mode 100644 index 0000000..d5afe8b --- /dev/null +++ b/web/src/utils/column.js @@ -0,0 +1,93 @@ +const colWidth = [ + { + label: '用户', + width: 120, + align: 'left' + }, + { + label: '名称', + width: 200, + align: 'left', + sorter: (a, b) => { + return a.name.localeCompare(b.name) + }, + sortDirections: ['ascend', 'descend'] + }, + { + label: '所属', + width: 150, + align: 'left' + }, + { + label: '类型', + width: 120, + align: 'left' + }, + { + label: 'ip', + width: 120, + align: 'left' + }, + { + label: '状态', + width: 120, + align: 'center' + }, + { + label: '是否', + width: 120, + align: 'center' + }, + { + label: '服务', + width: 120, + align: 'left' + }, + { + label: '手机号', + width: 200, + align: 'left' + }, + { + label: '时间', + width: 200, + align: 'center' + }, + { + label: '文件路径', + width: 400 + }, + { + label: '内容', + width: 350 + }, + { + label: '通知方式', + width: 240, + align: 'center' + }, + { + label: '操作', + align: 'center', + width: 130, + fixed: 'right', + resizable: false + } +] + +function setWidth(val) { + let info = {} + const Item = colWidth.find((item) => val.title.search(item.label) !== -1) || null + if (Item) { + if (val.title == '操作') { + info = { ...Item, ...val, resizable: true } + } else { + info = { ...val, ...Item, resizable: true, ellipsis: true } + } + } else { + info = { ...val, align: 'left', ellipsis: true, resizable: true, width: 150 } + } + return info +} + +export { colWidth, setWidth } diff --git a/web/src/views/MainView.vue b/web/src/views/MainView.vue index 192319e..3cf142d 100644 --- a/web/src/views/MainView.vue +++ b/web/src/views/MainView.vue @@ -143,7 +143,7 @@ export default { .subMenu { display: flex; color: #fff; - margin-left: 10px; + // margin-left: 10px; padding-bottom: 20px; .subItem { width: 96px; diff --git a/web/src/views/sub/Home.vue b/web/src/views/sub/Home.vue index 9536932..29a1e54 100644 --- a/web/src/views/sub/Home.vue +++ b/web/src/views/sub/Home.vue @@ -1,12 +1,7 @@