Merge branch 'master' of http://192.168.1.136:82/monitor_v3/hg-monitor-web into wuhl-master
# Conflicts: # hg-monitor-web-zj/src/main/resources/static/vue3/src/router/index.js
Showing
36 changed files
with
3804 additions
and
464 deletions
Too many changes to show.
To preserve performance only 36 of 36+ files are displayed.
1 | <el-dialog :top="top" :title="title" v-model="show" custom-class="config-dialog" | 1 | <el-dialog :top="top" :title="title" v-model="show" custom-class="config-dialog" |
2 | - :fullscreen="fullscreen" :show-close="showFooter" | 2 | + :fullscreen="fullscreen" :show-close="showFooter" @close="hideElDialog" |
3 | :width="width" destroy-on-close @before-close="hideElDialog" :close-on-click-modal="false" :close-on-press-escape="false"> | 3 | :width="width" destroy-on-close @before-close="hideElDialog" :close-on-click-modal="false" :close-on-press-escape="false"> |
4 | <slot>弹框内容</slot> | 4 | <slot>弹框内容</slot> |
5 | 5 | ||
6 | <template #footer v-if="showFooter"> | 6 | <template #footer v-if="showFooter"> |
7 | <span class="dialog-footer"> | 7 | <span class="dialog-footer"> |
8 | - <el-button @click="hideElDialog">{{cancelText}}</el-button> | ||
9 | - <el-button type="primary" @click="okFunc">{{okText}}</el-button> | 8 | + <el-button @click="hideElDialog" v-if="showCancelBtn">{{cancelText}}</el-button> |
9 | + <el-button type="primary" @click="okFunc" v-if="showOkBtn">{{okText}}</el-button> | ||
10 | </span> | 10 | </span> |
11 | </template> | 11 | </template> |
12 | </el-dialog> | 12 | </el-dialog> |
@@ -15,11 +15,21 @@ export default { | @@ -15,11 +15,21 @@ export default { | ||
15 | type: String, | 15 | type: String, |
16 | default: "新建" | 16 | default: "新建" |
17 | }, | 17 | }, |
18 | + // 展示取消按钮 | ||
19 | + showCancelBtn: { | ||
20 | + type: Boolean, | ||
21 | + default: true | ||
22 | + }, | ||
18 | // 取消文本 | 23 | // 取消文本 |
19 | cancelText: { | 24 | cancelText: { |
20 | type: String, | 25 | type: String, |
21 | default: "取消" | 26 | default: "取消" |
22 | }, | 27 | }, |
28 | + // 展示确定按钮 | ||
29 | + showOkBtn: { | ||
30 | + type: Boolean, | ||
31 | + default: true | ||
32 | + }, | ||
23 | // 确定文本 | 33 | // 确定文本 |
24 | okText: { | 34 | okText: { |
25 | type: String, | 35 | type: String, |
@@ -6,10 +6,9 @@ | @@ -6,10 +6,9 @@ | ||
6 | <div style="text-align: left;padding-left: 10px;padding-top: 3px;font-weight: bold"> | 6 | <div style="text-align: left;padding-left: 10px;padding-top: 3px;font-weight: bold"> |
7 | <el-link type="info" :underline="false"><i class="iconfont icon-ziliaoku"></i> 文档管理</el-link> | 7 | <el-link type="info" :underline="false"><i class="iconfont icon-ziliaoku"></i> 文档管理</el-link> |
8 | </div> | 8 | </div> |
9 | - <!--:default-expanded-keys="[currentNodeData.id]"--> | 9 | + <!----> |
10 | <el-tree ref="tree" style="padding:6px;" :props="props" :data="treeData" node-key="id" | 10 | <el-tree ref="tree" style="padding:6px;" :props="props" :data="treeData" node-key="id" |
11 | - :expand-on-click-node="false" :expand-on-click-node="true" | ||
12 | - > | 11 | + :expand-on-click-node="false" :expand-on-click-node="true" :default-expanded-keys="defaultExpandedKeys"> |
13 | <template #default="{ node, data }"> | 12 | <template #default="{ node, data }"> |
14 | <div style="display: flex;flex-direction: row;width: 100%;"> | 13 | <div style="display: flex;flex-direction: row;width: 100%;"> |
15 | <div style="width: calc(100% - 85px);max-width: calc(100% - 85px);overflow: hidden;text-overflow: ellipsis;text-align: left;" @click="nodeClick(node, data)" :title="node.label"> | 14 | <div style="width: calc(100% - 85px);max-width: calc(100% - 85px);overflow: hidden;text-overflow: ellipsis;text-align: left;" @click="nodeClick(node, data)" :title="node.label"> |
@@ -9,7 +9,7 @@ export default { | @@ -9,7 +9,7 @@ export default { | ||
9 | // 展示文档类型,默认展示类型 | 9 | // 展示文档类型,默认展示类型 |
10 | types: { | 10 | types: { |
11 | type: Array, | 11 | type: Array, |
12 | - default: ['fxbg', 'gf', 'gzgl', 'jkjc', 'lxwh', 'pzgl', '', 'rcxj'] | 12 | + default: ['fxbg', 'gf', 'gzgl', 'jkjc', 'lxwh', 'pzgl', 'rcxj'] |
13 | }, | 13 | }, |
14 | // 是否是预览模式 | 14 | // 是否是预览模式 |
15 | // 预览模式不展示授权按钮 | 15 | // 预览模式不展示授权按钮 |
@@ -22,7 +22,12 @@ export default { | @@ -22,7 +22,12 @@ export default { | ||
22 | viewTypeId: { | 22 | viewTypeId: { |
23 | type: String, | 23 | type: String, |
24 | default: '' | 24 | default: '' |
25 | + }, | ||
26 | + fileIds: { | ||
27 | + type: Array, | ||
28 | + default: [] | ||
25 | } | 29 | } |
30 | + | ||
26 | }, | 31 | }, |
27 | data() { | 32 | data() { |
28 | return { | 33 | return { |
@@ -90,8 +95,12 @@ export default { | @@ -90,8 +95,12 @@ export default { | ||
90 | 'vob': 'icon-avi', | 95 | 'vob': 'icon-avi', |
91 | 'zip': 'icon-zip-full', | 96 | 'zip': 'icon-zip-full', |
92 | } | 97 | } |
98 | + // 树数据 | ||
93 | let treeData = Vue.ref([]); | 99 | let treeData = Vue.ref([]); |
100 | + // 当前节点数据 | ||
94 | let currentNodeData = Vue.ref({}); | 101 | let currentNodeData = Vue.ref({}); |
102 | + // 默认打开节点 | ||
103 | + let defaultExpandedKeys = Vue.ref([]); | ||
95 | 104 | ||
96 | // 获取文件列表或者打开文件 | 105 | // 获取文件列表或者打开文件 |
97 | let getFile = (item) => { | 106 | let getFile = (item) => { |
@@ -148,26 +157,30 @@ export default { | @@ -148,26 +157,30 @@ export default { | ||
148 | // 左侧树 | 157 | // 左侧树 |
149 | let getTree = () => { | 158 | let getTree = () => { |
150 | // 加载列表 | 159 | // 加载列表 |
151 | - proxy.$http.get("/inspection-report/doc/type/tree", {}, function (res) { | 160 | + proxy.$http.get("/inspection-report/doc/type/tree", {types: props.types.join(',')}, function (res) { |
152 | if (res && res.data) { | 161 | if (res && res.data) { |
153 | - | ||
154 | treeData.value = res.data; | 162 | treeData.value = res.data; |
155 | - | ||
156 | let first = res.data[0]; | 163 | let first = res.data[0]; |
157 | currentNodeData.value = first; | 164 | currentNodeData.value = first; |
158 | 165 | ||
159 | - // 加载所有 | ||
160 | - getPage('0'); | 166 | + let arr = []; |
167 | + arr.push(first.id); | ||
168 | + defaultExpandedKeys.value = arr; | ||
169 | + | ||
170 | + // 加载第一个节点数据 | ||
171 | + getPage(first.id); | ||
161 | } | 172 | } |
162 | }) | 173 | }) |
163 | } | 174 | } |
164 | 175 | ||
165 | // 获取表格树 | 176 | // 获取表格树 |
166 | let getPage = (id) => { | 177 | let getPage = (id) => { |
178 | + let docIds = props.fileIds.length == 0 ? '' : props.fileIds.join(',') | ||
167 | let params = { | 179 | let params = { |
168 | id: id, | 180 | id: id, |
169 | name: keyWord.value, | 181 | name: keyWord.value, |
170 | - types: props.types.join(',') | 182 | + types: props.types.join(','), |
183 | + docIds:docIds | ||
171 | } | 184 | } |
172 | // 加载列表 | 185 | // 加载列表 |
173 | proxy.$http.get(`/inspection-report/file/document/list`, params, function (res) { | 186 | proxy.$http.get(`/inspection-report/file/document/list`, params, function (res) { |
@@ -185,6 +198,10 @@ export default { | @@ -185,6 +198,10 @@ export default { | ||
185 | let nodeClick = (node, data) => { | 198 | let nodeClick = (node, data) => { |
186 | let id = data.id; | 199 | let id = data.id; |
187 | currentNodeData.value = data; | 200 | currentNodeData.value = data; |
201 | + | ||
202 | + let arr = []; | ||
203 | + arr.push(id); | ||
204 | + defaultExpandedKeys.value = arr; | ||
188 | getPage(id); | 205 | getPage(id); |
189 | } | 206 | } |
190 | 207 | ||
@@ -236,7 +253,6 @@ export default { | @@ -236,7 +253,6 @@ export default { | ||
236 | params = info; | 253 | params = info; |
237 | } | 254 | } |
238 | proxy.$global.confirm(msg, function () { | 255 | proxy.$global.confirm(msg, function () { |
239 | - debugger | ||
240 | // ok | 256 | // ok |
241 | proxy.$http.post(`/inspection-report/file/change`,params , function (res) { | 257 | proxy.$http.post(`/inspection-report/file/change`,params , function (res) { |
242 | if (res && res.code == 0) { | 258 | if (res && res.code == 0) { |
@@ -379,8 +395,6 @@ export default { | @@ -379,8 +395,6 @@ export default { | ||
379 | proxy.$global.showMsg('授权失败!', 'warning'); | 395 | proxy.$global.showMsg('授权失败!', 'warning'); |
380 | } | 396 | } |
381 | }) | 397 | }) |
382 | - // 隐藏授权弹框 | ||
383 | - showUserDialog(false); | ||
384 | } | 398 | } |
385 | 399 | ||
386 | // 上传 | 400 | // 上传 |
@@ -393,7 +407,8 @@ export default { | @@ -393,7 +407,8 @@ export default { | ||
393 | } | 407 | } |
394 | let uploadCallBack = ({document,fileInfo}) => { | 408 | let uploadCallBack = ({document,fileInfo}) => { |
395 | reload(false); | 409 | reload(false); |
396 | - console.log(111111111111,document,fileInfo); | 410 | + // 执行回调 |
411 | + emit('callback',{document,fileInfo}); | ||
397 | } | 412 | } |
398 | 413 | ||
399 | /** | 414 | /** |
@@ -435,6 +450,11 @@ export default { | @@ -435,6 +450,11 @@ export default { | ||
435 | left: 0, | 450 | left: 0, |
436 | right: 24 | 451 | right: 24 |
437 | } | 452 | } |
453 | + currentNodeData.value = { | ||
454 | + docType: props.viewTypeId, | ||
455 | + docNo: props.viewTypeId, | ||
456 | + id: props.viewTypeId | ||
457 | + } | ||
438 | getPage(props.viewTypeId); | 458 | getPage(props.viewTypeId); |
439 | } | 459 | } |
440 | }) | 460 | }) |
@@ -460,6 +480,7 @@ export default { | @@ -460,6 +480,7 @@ export default { | ||
460 | 480 | ||
461 | downloadFile, | 481 | downloadFile, |
462 | 482 | ||
483 | + defaultExpandedKeys, | ||
463 | currentNodeData, | 484 | currentNodeData, |
464 | docForm, | 485 | docForm, |
465 | addFolder, | 486 | addFolder, |
@@ -14,10 +14,10 @@ | @@ -14,10 +14,10 @@ | ||
14 | 14 | ||
15 | <div v-if="typeof(item.render) == 'function'" > | 15 | <div v-if="typeof(item.render) == 'function'" > |
16 | <div v-if="typeof(item.click) == 'function'"> | 16 | <div v-if="typeof(item.click) == 'function'"> |
17 | - <el-link type="primary" @click="item.click(scope.row)" v-html="item.render(scope.row)"></el-link> | 17 | + <el-link :type="linkType" :underline="isLink" @click="item.click(scope.row)" v-html="item.render(scope.row)"></el-link> |
18 | </div> | 18 | </div> |
19 | <div v-else> | 19 | <div v-else> |
20 | - <el-link type="primary" v-html="item.render(scope.row)"></el-link> | 20 | + <el-link :type="linkType" :underline="isLink" v-html="item.render(scope.row)"></el-link> |
21 | </div> | 21 | </div> |
22 | </div> | 22 | </div> |
23 | <span v-else> | 23 | <span v-else> |
@@ -45,7 +45,7 @@ export default { | @@ -45,7 +45,7 @@ export default { | ||
45 | // 默认展示 | 45 | // 默认展示 |
46 | pageSize: { | 46 | pageSize: { |
47 | type: Number, | 47 | type: Number, |
48 | - default: 100 | 48 | + default: 50 |
49 | }, | 49 | }, |
50 | // 总数 | 50 | // 总数 |
51 | total: { | 51 | total: { |
@@ -67,10 +67,21 @@ export default { | @@ -67,10 +67,21 @@ export default { | ||
67 | type: Array, | 67 | type: Array, |
68 | default: [] | 68 | default: [] |
69 | }, | 69 | }, |
70 | + // 是否展示加载 | ||
70 | loading:{ | 71 | loading:{ |
71 | type: Boolean, | 72 | type: Boolean, |
72 | default: false | 73 | default: false |
73 | }, | 74 | }, |
75 | + // 是否展示链接 | ||
76 | + isLink:{ | ||
77 | + type: Boolean, | ||
78 | + default: false | ||
79 | + }, | ||
80 | + // 是否展示链接 | ||
81 | + linkType:{ | ||
82 | + type: String, | ||
83 | + default: 'primary' | ||
84 | + }, | ||
74 | }, | 85 | }, |
75 | data() { | 86 | data() { |
76 | return {} | 87 | return {} |
1 | -<cm-dialog title="文件上传" width="500px" :showDialogVisible="show" @hidedialog="hidedialog" @okfunc="uploadFile" okText="上传"> | 1 | +<cm-dialog v-if="!isInset" title="文件上传" width="500px" :showDialogVisible="show" @hidedialog="hidedialog" @okfunc="uploadFile" okText="上传"> |
2 | <template v-slot> | 2 | <template v-slot> |
3 | 3 | ||
4 | <el-upload | 4 | <el-upload |
@@ -6,9 +6,10 @@ | @@ -6,9 +6,10 @@ | ||
6 | ref="upload" | 6 | ref="upload" |
7 | :http-request="getFile" | 7 | :http-request="getFile" |
8 | :multiple="true" | 8 | :multiple="true" |
9 | + :before-upload="beforeUpload" | ||
9 | :auto-upload="false"> | 10 | :auto-upload="false"> |
10 | <template #trigger> | 11 | <template #trigger> |
11 | - <el-button size="small" type="primary">选择文件</el-button> | 12 | + <el-button size="small" type="primary">{{btnText}}</el-button> |
12 | </template> | 13 | </template> |
13 | 支持格式: | 14 | 支持格式: |
14 | <el-tooltip placement="top" effect="light"> | 15 | <el-tooltip placement="top" effect="light"> |
@@ -25,3 +26,14 @@ | @@ -25,3 +26,14 @@ | ||
25 | </el-upload> | 26 | </el-upload> |
26 | </template> | 27 | </template> |
27 | </cm-dialog> | 28 | </cm-dialog> |
29 | + | ||
30 | +<!--页面嵌套方式--> | ||
31 | +<el-upload | ||
32 | + v-if="isInset" | ||
33 | + :show-file-list="false" | ||
34 | + :before-upload="beforeUpload" | ||
35 | + :multiple="false" | ||
36 | + :http-request="getInsetFile" | ||
37 | + :auto-upload="true"> | ||
38 | + <el-button size="small" type="primary">上传照片</el-button> | ||
39 | +</el-upload> |
@@ -6,6 +6,15 @@ export default { | @@ -6,6 +6,15 @@ export default { | ||
6 | template: '', | 6 | template: '', |
7 | components: {}, | 7 | components: {}, |
8 | props: { | 8 | props: { |
9 | + // 嵌套方式 | ||
10 | + isInset: { | ||
11 | + type: Boolean, | ||
12 | + default: false | ||
13 | + }, | ||
14 | + btnText:{ | ||
15 | + type: String, | ||
16 | + default: '选择文件' | ||
17 | + }, | ||
9 | showDialogVisible: { | 18 | showDialogVisible: { |
10 | type: Boolean, | 19 | type: Boolean, |
11 | default: false | 20 | default: false |
@@ -126,6 +135,17 @@ export default { | @@ -126,6 +135,17 @@ export default { | ||
126 | let uploadFile = () => { | 135 | let uploadFile = () => { |
127 | proxy.$refs.upload.submit() | 136 | proxy.$refs.upload.submit() |
128 | } | 137 | } |
138 | + | ||
139 | + // 提交前的验证 | ||
140 | + let beforeUpload = (file) =>{ | ||
141 | + return emit('beforeUpload',file) | ||
142 | + } | ||
143 | + | ||
144 | + let getInsetFile = (param) =>{ | ||
145 | + let fileObj = param.file | ||
146 | + emit('callback',fileObj) | ||
147 | + } | ||
148 | + | ||
129 | // 监听编辑状态 | 149 | // 监听编辑状态 |
130 | Vue.watch( | 150 | Vue.watch( |
131 | () => props.showDialogVisible, (newValue, oldVlaue) => { | 151 | () => props.showDialogVisible, (newValue, oldVlaue) => { |
@@ -142,10 +162,12 @@ export default { | @@ -142,10 +162,12 @@ export default { | ||
142 | 162 | ||
143 | 163 | ||
144 | return { | 164 | return { |
165 | + getInsetFile, | ||
145 | getFile, | 166 | getFile, |
146 | show, | 167 | show, |
147 | uploadFile, | 168 | uploadFile, |
148 | - hidedialog | 169 | + hidedialog, |
170 | + beforeUpload | ||
149 | } | 171 | } |
150 | } | 172 | } |
151 | } | 173 | } |
1 | -<cm-dialog title="用户授权" width="900px" :showDialogVisible="show" @hidedialog="hidedialog" @okfunc="getUser"> | 1 | +<cm-dialog :title="title" width="900px" :showDialogVisible="show" @hidedialog="hidedialog" @okfunc="getUser"> |
2 | <template v-slot> | 2 | <template v-slot> |
3 | <el-transfer v-model="value" :props="props" filterable | 3 | <el-transfer v-model="value" :props="props" filterable |
4 | :render-content="renderFunc" | 4 | :render-content="renderFunc" |
5 | - :data="userArr" :titles="['所有用户/角色', '已授权用户/角色']" | ||
6 | - :button-texts="['取消', '授权']"> | 5 | + :data="userArr" :titles="titles" |
6 | + :button-texts="buttonTexts"> | ||
7 | <!--<template #left-footer> | 7 | <!--<template #left-footer> |
8 | <el-button class="transfer-footer" size="small">Operation</el-button> | 8 | <el-button class="transfer-footer" size="small">Operation</el-button> |
9 | </template>--> | 9 | </template>--> |
@@ -13,7 +13,29 @@ export default { | @@ -13,7 +13,29 @@ export default { | ||
13 | users: { | 13 | users: { |
14 | type: Array, | 14 | type: Array, |
15 | default: [] | 15 | default: [] |
16 | - } | 16 | + }, |
17 | + // 加载用户数据 | ||
18 | + loadUserDta: { | ||
19 | + type: Boolean, | ||
20 | + default: true | ||
21 | + }, | ||
22 | + title: { | ||
23 | + type: String, | ||
24 | + default: '添加授权' | ||
25 | + }, | ||
26 | + // 加载角色数据 | ||
27 | + loadRoleDta: { | ||
28 | + type: Boolean, | ||
29 | + default: true | ||
30 | + }, | ||
31 | + titles: { | ||
32 | + type: Array, | ||
33 | + default: ['所有用户/角色', '已授权用户/角色'] | ||
34 | + }, | ||
35 | + buttonTexts: { | ||
36 | + type: Array, | ||
37 | + default: ['取消', '授权'] | ||
38 | + }, | ||
17 | }, | 39 | }, |
18 | data() { | 40 | data() { |
19 | return { | 41 | return { |
@@ -26,53 +48,59 @@ export default { | @@ -26,53 +48,59 @@ export default { | ||
26 | let v = Vue.ref(props.users); | 48 | let v = Vue.ref(props.users); |
27 | let userArr = Vue.ref([]); | 49 | let userArr = Vue.ref([]); |
28 | const getAllUser = () => { | 50 | const getAllUser = () => { |
29 | - // 查询全部用户 | ||
30 | - proxy.$http.get("/api-user/users?page=1&limit=10000&username=&nickname=&enabled=&orgId=&roles=", {}, function (res) { | ||
31 | - if (res && res.data) { | ||
32 | - res.data.map(function (v) { | ||
33 | - let desc = []; | ||
34 | - let orgName = v.orgName; | ||
35 | - let nickname = v.nickname; | ||
36 | - if (orgName) { | ||
37 | - desc.push(orgName); | ||
38 | - } | ||
39 | - if (nickname) { | ||
40 | - desc.push(nickname); | ||
41 | - } | ||
42 | - | ||
43 | - userArr.value.push({ | ||
44 | - value: v.username, | ||
45 | - type:'USER', | ||
46 | - desc: `${desc.join(' / ')}`, | ||
47 | - props : v | ||
48 | - }) | ||
49 | - }); | ||
50 | - } | ||
51 | - }) | 51 | + if(props.loadUserDta){ |
52 | + // 查询全部用户 | ||
53 | + proxy.$http.get("/api-user/users?page=1&limit=10000&username=&nickname=&enabled=&orgId=&roles=", {}, function (res) { | ||
54 | + if (res && res.data) { | ||
55 | + res.data.map(function (v) { | ||
56 | + let desc = []; | ||
57 | + let orgName = v.orgName; | ||
58 | + let nickname = v.nickname; | ||
59 | + if (orgName) { | ||
60 | + desc.push(orgName); | ||
61 | + } | ||
62 | + if (nickname) { | ||
63 | + desc.push(nickname); | ||
64 | + } | ||
65 | + | ||
66 | + userArr.value.push({ | ||
67 | + value: v.username, | ||
68 | + type:'USER', | ||
69 | + desc: `${desc.join(' / ')}`, | ||
70 | + props : v | ||
71 | + }) | ||
72 | + }); | ||
73 | + } | ||
74 | + },function (){},false) | ||
75 | + } | ||
76 | + | ||
77 | + if(props.loadRoleDta){ | ||
78 | + // 查询全部角色 | ||
79 | + proxy.$http.get("/api-user/roles?page=1&limit=10000", {}, function (res) { | ||
80 | + if (res && res.data) { | ||
81 | + res.data.map(function (v) { | ||
82 | + let desc = []; | ||
83 | + let code = v.code; | ||
84 | + let name = v.name; | ||
85 | + if (name) { | ||
86 | + desc.push(name); | ||
87 | + } | ||
88 | + if (code) { | ||
89 | + desc.push(code); | ||
90 | + } | ||
91 | + | ||
92 | + userArr.value.push({ | ||
93 | + value: v.id, | ||
94 | + type:'ROLE', | ||
95 | + desc: `${desc.join(' / ')}`, | ||
96 | + props : v | ||
97 | + }) | ||
98 | + }); | ||
99 | + } | ||
100 | + },function (){},false) | ||
101 | + } | ||
102 | + | ||
52 | 103 | ||
53 | - // 查询全部角色 | ||
54 | - proxy.$http.get("/api-user/roles?page=1&limit=10000", {}, function (res) { | ||
55 | - if (res && res.data) { | ||
56 | - res.data.map(function (v) { | ||
57 | - let desc = []; | ||
58 | - let code = v.code; | ||
59 | - let name = v.name; | ||
60 | - if (name) { | ||
61 | - desc.push(name); | ||
62 | - } | ||
63 | - if (code) { | ||
64 | - desc.push(code); | ||
65 | - } | ||
66 | - | ||
67 | - userArr.value.push({ | ||
68 | - value: v.id, | ||
69 | - type:'ROLE', | ||
70 | - desc: `${desc.join(' / ')}`, | ||
71 | - props : v | ||
72 | - }) | ||
73 | - }); | ||
74 | - } | ||
75 | - }) | ||
76 | 104 | ||
77 | } | 105 | } |
78 | 106 | ||
@@ -106,6 +134,8 @@ export default { | @@ -106,6 +134,8 @@ export default { | ||
106 | } | 134 | } |
107 | 135 | ||
108 | emit('callback', data); | 136 | emit('callback', data); |
137 | + | ||
138 | + emit('hideDialog', false); | ||
109 | } | 139 | } |
110 | 140 | ||
111 | let renderFunc = (h, option) =>{ | 141 | let renderFunc = (h, option) =>{ |
@@ -165,7 +195,7 @@ export default { | @@ -165,7 +195,7 @@ export default { | ||
165 | userArr, | 195 | userArr, |
166 | value: v, | 196 | value: v, |
167 | getUser, | 197 | getUser, |
168 | - renderFunc | 198 | + renderFunc, |
169 | } | 199 | } |
170 | } | 200 | } |
171 | } | 201 | } |
@@ -94,6 +94,18 @@ global.confirm = (msg,okFunc,cancelFunc) =>{ | @@ -94,6 +94,18 @@ global.confirm = (msg,okFunc,cancelFunc) =>{ | ||
94 | */ | 94 | */ |
95 | global.getQueryVariable = (variable) => { | 95 | global.getQueryVariable = (variable) => { |
96 | var query = window.location.search.substring(1); | 96 | var query = window.location.search.substring(1); |
97 | + | ||
98 | + if(query == ''){ | ||
99 | + query = document.location.href | ||
100 | + let arr = query.split('?'); | ||
101 | + for (var i = 0; i < arr.length; i++) { | ||
102 | + var pair = arr[i].split("="); | ||
103 | + if (pair[0] == variable) { | ||
104 | + return pair[1]; | ||
105 | + } | ||
106 | + } | ||
107 | + return (false); | ||
108 | + } | ||
97 | var vars = query.split("&"); | 109 | var vars = query.split("&"); |
98 | for (var i = 0; i < vars.length; i++) { | 110 | for (var i = 0; i < vars.length; i++) { |
99 | var pair = vars[i].split("="); | 111 | var pair = vars[i].split("="); |
@@ -104,10 +116,38 @@ global.getQueryVariable = (variable) => { | @@ -104,10 +116,38 @@ global.getQueryVariable = (variable) => { | ||
104 | return (false); | 116 | return (false); |
105 | } | 117 | } |
106 | 118 | ||
119 | +/** | ||
120 | + * 文件预览 | ||
121 | + * @param path | ||
122 | + */ | ||
107 | global.viewer = (path) =>{ | 123 | global.viewer = (path) =>{ |
108 | window.open("/src/lib/extend/pdfjs/web/viewer.html?test=" + encodeURIComponent(path)); | 124 | window.open("/src/lib/extend/pdfjs/web/viewer.html?test=" + encodeURIComponent(path)); |
109 | } | 125 | } |
110 | 126 | ||
127 | +/** | ||
128 | + * 将文件转成base64 | ||
129 | + * @param file | ||
130 | + * @returns {Promise<String>} | ||
131 | + */ | ||
132 | +global.getBase64 = (file) =>{ | ||
133 | + return new Promise(function(resolve, reject) { | ||
134 | + let reader = new FileReader(); | ||
135 | + let imgResult = ""; | ||
136 | + reader.readAsDataURL(file); | ||
137 | + reader.onload = function() { | ||
138 | + imgResult = reader.result; | ||
139 | + }; | ||
140 | + reader.onerror = function(error) { | ||
141 | + reject(error); | ||
142 | + }; | ||
143 | + reader.onloadend = function() { | ||
144 | + resolve(imgResult); | ||
145 | + }; | ||
146 | + }); | ||
147 | +} | ||
148 | + | ||
149 | + | ||
150 | + | ||
111 | // 组件默认大小 | 151 | // 组件默认大小 |
112 | global.elementSize = 'small'; | 152 | global.elementSize = 'small'; |
113 | 153 |
@@ -12,13 +12,19 @@ let http = { | @@ -12,13 +12,19 @@ let http = { | ||
12 | window.location.reload(); | 12 | window.location.reload(); |
13 | } | 13 | } |
14 | }, | 14 | }, |
15 | - post: function (requestUrl, data, callback) { | 15 | + post: function (requestUrl, data, callback, errFunc,showLoadding) { |
16 | if (http.proxy == null) { | 16 | if (http.proxy == null) { |
17 | const {proxy} = Vue.getCurrentInstance() | 17 | const {proxy} = Vue.getCurrentInstance() |
18 | http.proxy = proxy; | 18 | http.proxy = proxy; |
19 | } | 19 | } |
20 | - | ||
21 | - const loading = http.proxy.$global.showLoading(); | 20 | + // 默认展示加载狂 |
21 | + if(showLoadding == undefined){ | ||
22 | + showLoadding = true; | ||
23 | + } | ||
24 | + let loading = null; | ||
25 | + if(showLoadding && showLoadding == true){ | ||
26 | + loading = http.proxy.$global.showLoading(); | ||
27 | + } | ||
22 | var access_token = 'access_token=' + http.getToken(); | 28 | var access_token = 'access_token=' + http.getToken(); |
23 | if (requestUrl.indexOf('?') == -1) { | 29 | if (requestUrl.indexOf('?') == -1) { |
24 | requestUrl += '?' + access_token; | 30 | requestUrl += '?' + access_token; |
@@ -34,7 +40,12 @@ let http = { | @@ -34,7 +40,12 @@ let http = { | ||
34 | async: true, | 40 | async: true, |
35 | data: JSON.stringify(data), | 41 | data: JSON.stringify(data), |
36 | error: function (xhr, textStatus) { | 42 | error: function (xhr, textStatus) { |
37 | - loading.close(); | 43 | + if(showLoadding && showLoadding == true){ |
44 | + loading.close(); | ||
45 | + } | ||
46 | + if (errFunc) { | ||
47 | + errFunc(); | ||
48 | + } | ||
38 | console.log("==>", requestUrl, xhr, textStatus) | 49 | console.log("==>", requestUrl, xhr, textStatus) |
39 | http.reqErr(textStatus.status); | 50 | http.reqErr(textStatus.status); |
40 | }, | 51 | }, |
@@ -42,19 +53,28 @@ let http = { | @@ -42,19 +53,28 @@ let http = { | ||
42 | if (callback) { | 53 | if (callback) { |
43 | callback(data); | 54 | callback(data); |
44 | } | 55 | } |
45 | - loading.close() | 56 | + if(showLoadding && showLoadding == true){ |
57 | + loading.close(); | ||
58 | + } | ||
46 | //console.log("==>", requestUrl, jqXHR, textStatus) | 59 | //console.log("==>", requestUrl, jqXHR, textStatus) |
47 | 60 | ||
48 | } | 61 | } |
49 | }); | 62 | }); |
50 | 63 | ||
51 | }, | 64 | }, |
52 | - get: function (requestUrl, data, callback, errFunc) { | 65 | + get: function (requestUrl, data, callback, errFunc,showLoadding) { |
53 | if (http.proxy == null) { | 66 | if (http.proxy == null) { |
54 | const {proxy} = Vue.getCurrentInstance() | 67 | const {proxy} = Vue.getCurrentInstance() |
55 | http.proxy = proxy; | 68 | http.proxy = proxy; |
56 | } | 69 | } |
57 | - const loading = http.proxy.$global.showLoading(); | 70 | + // 默认展示加载狂 |
71 | + if(showLoadding == undefined){ | ||
72 | + showLoadding = true; | ||
73 | + } | ||
74 | + let loading = null; | ||
75 | + if(showLoadding == true){ | ||
76 | + loading = http.proxy.$global.showLoading(); | ||
77 | + } | ||
58 | var access_token = 'access_token=' + http.getToken(); | 78 | var access_token = 'access_token=' + http.getToken(); |
59 | if (requestUrl.indexOf('?') == -1) { | 79 | if (requestUrl.indexOf('?') == -1) { |
60 | requestUrl += '?' + access_token; | 80 | requestUrl += '?' + access_token; |
@@ -69,7 +89,9 @@ let http = { | @@ -69,7 +89,9 @@ let http = { | ||
69 | }, | 89 | }, |
70 | data: data, | 90 | data: data, |
71 | error: function (xhr, textStatus) { | 91 | error: function (xhr, textStatus) { |
72 | - loading.close(); | 92 | + if(showLoadding && showLoadding == true){ |
93 | + loading.close(); | ||
94 | + } | ||
73 | console.log("==>", requestUrl, xhr, textStatus) | 95 | console.log("==>", requestUrl, xhr, textStatus) |
74 | http.reqErr(textStatus.status); | 96 | http.reqErr(textStatus.status); |
75 | 97 | ||
@@ -82,7 +104,9 @@ let http = { | @@ -82,7 +104,9 @@ let http = { | ||
82 | if (callback) { | 104 | if (callback) { |
83 | callback(data); | 105 | callback(data); |
84 | } | 106 | } |
85 | - loading.close(); | 107 | + if(showLoadding && showLoadding == true){ |
108 | + loading.close(); | ||
109 | + } | ||
86 | //console.log("==>", requestUrl, jqXHR, textStatus) | 110 | //console.log("==>", requestUrl, jqXHR, textStatus) |
87 | } | 111 | } |
88 | }); | 112 | }); |
@@ -146,9 +170,7 @@ let http = { | @@ -146,9 +170,7 @@ let http = { | ||
146 | return `${keys}`; | 170 | return `${keys}`; |
147 | } | 171 | } |
148 | let p = formart(parmas); | 172 | let p = formart(parmas); |
149 | - debugger | ||
150 | window.open(sessionStorage.getItem('domainName') + requestUrl + "&" + p); | 173 | window.open(sessionStorage.getItem('domainName') + requestUrl + "&" + p); |
151 | - | ||
152 | }, | 174 | }, |
153 | getToken() { | 175 | getToken() { |
154 | return localStorage.getItem('access_token'); | 176 | return localStorage.getItem('access_token'); |
@@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; | @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
5 | 5 | ||
6 | @SpringBootApplication | 6 | @SpringBootApplication |
7 | public class HGMonitorZJWebApplication { | 7 | public class HGMonitorZJWebApplication { |
8 | - | 8 | + |
9 | public static void main(String[] args) { | 9 | public static void main(String[] args) { |
10 | SpringApplication.run(HGMonitorZJWebApplication.class, args); | 10 | SpringApplication.run(HGMonitorZJWebApplication.class, args); |
11 | } | 11 | } |
@@ -12,12 +12,14 @@ server: | @@ -12,12 +12,14 @@ server: | ||
12 | key-store-password: Hg0801.. | 12 | key-store-password: Hg0801.. |
13 | key-password: Hg0801.. | 13 | key-password: Hg0801.. |
14 | url: | 14 | url: |
15 | - gateway: http://192.168.0.41:8080 | 15 | + gateway: http://172.16.20.43:8080 |
16 | inspection_web: http://127.0.0.1:8082 | 16 | inspection_web: http://127.0.0.1:8082 |
17 | assetsweb: http://127.0.0.1:8082 | 17 | assetsweb: http://127.0.0.1:8082 |
18 | mxgraph_editor: http://127.0.0.1:8085 | 18 | mxgraph_editor: http://127.0.0.1:8085 |
19 | tingyun: http://127.0.0.1:8088 | 19 | tingyun: http://127.0.0.1:8088 |
20 | bigScreen: http://127.0.0.1:8081 | 20 | bigScreen: http://127.0.0.1:8081 |
21 | + # 一体化视图 | ||
22 | + ythView: http://192.168.0.69:18089 | ||
21 | #流程系统路径,当ssl.enabled=true时,http要改为https,并修改流程nginx的conf文件 | 23 | #流程系统路径,当ssl.enabled=true时,http要改为https,并修改流程nginx的conf文件 |
22 | workflow: http://192.168.0.248:8002 | 24 | workflow: http://192.168.0.248:8002 |
23 | # 积木报表工具 | 25 | # 积木报表工具 |
1 | +// 业务类型管理 | ||
2 | +layui.define(['table', 'form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions', 'commonDetail', 'treeTable', 'xmSelect', 'userlist', 'reslist'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var layer = layui.layer; | ||
6 | + var admin = layui.admin; | ||
7 | + var table = layui.table; | ||
8 | + var treeTable = layui.treeTable; | ||
9 | + var xmSelect = layui.xmSelect; | ||
10 | + var laytpl = layui.laytpl; | ||
11 | + var view = layui.view; | ||
12 | + var common = layui.common; | ||
13 | + var commonDetail = layui.commonDetail; | ||
14 | + var domainName = common.domainName; | ||
15 | + // 业务类型展示表格 | ||
16 | + var busTypeTable; | ||
17 | + // 对外暴露的接口 | ||
18 | + exports('bustype', function (data) { | ||
19 | + var sessions = layui.sessions; | ||
20 | + var accessToken = sessions.getToken()['access_token']; | ||
21 | + | ||
22 | + var cutoverId = '', targetType = ''; | ||
23 | + if (data && data.cutoverId) { | ||
24 | + cutoverId = data.cutoverId; | ||
25 | + targetType = data.targetType; | ||
26 | + } | ||
27 | + var mode = (data && data.mode) ? data.mode : ''; | ||
28 | + var username = (data && data.username) ? data.username : ''; | ||
29 | + //展示类型 | ||
30 | + var showTypeList=[]; | ||
31 | + var dataBusType=[]; | ||
32 | + initShowType(); | ||
33 | + | ||
34 | + // 查询条件 | ||
35 | + var conditions = {busTypeName: ''}; | ||
36 | + // 加载遮罩 | ||
37 | + var loading; | ||
38 | + var checkList = common.checkPermission(accessToken); | ||
39 | + | ||
40 | + loadBusTypeTable(); | ||
41 | + // 查询条件框回车查询事件 | ||
42 | + $('#condition-bustype-name').keydown(function (e) { | ||
43 | + if (e.keyCode === 13) { | ||
44 | + loadBusTypeTable(); | ||
45 | + return false; | ||
46 | + } | ||
47 | + }); | ||
48 | + | ||
49 | + //查询按钮点击事件 joke add 20210428 | ||
50 | + $('#bustypeQueryBtn').on('click',function () { | ||
51 | + loadBusTypeTable(); | ||
52 | + }); | ||
53 | + | ||
54 | + // 删除按钮删除事件 | ||
55 | + $('#btn-bustype-delete').click(function () { | ||
56 | + var checks = busTypeTable.checkStatus(false); | ||
57 | + var busId = $.map(checks, function (item) { | ||
58 | + return item.busId; | ||
59 | + }); | ||
60 | + deleteBusTypeByIds(busId); | ||
61 | + }); | ||
62 | + //授权按钮事件 | ||
63 | + $("#btn-bustype-authorization").click(function () { | ||
64 | + var checks = busTypeTable.checkStatus(false); | ||
65 | + var busId = []; | ||
66 | + var j = 0; | ||
67 | + var number = 0; | ||
68 | + for (var i = 0; i < checks.length; i++) { | ||
69 | + if (checks[i].children != null) { | ||
70 | + j++; | ||
71 | + number = checks[i].children.length; | ||
72 | + } | ||
73 | + } | ||
74 | + if (j = 1 && checks.length - number == 1) { | ||
75 | + busId = checks[0].busId; | ||
76 | + } else { | ||
77 | + busId = $.map(checks, function (item) { | ||
78 | + return item.busId; | ||
79 | + }); | ||
80 | + } | ||
81 | + if (busId.length == 0) { | ||
82 | + layer.msg('请先选择数据', {icon: 0, timeout: 3000}); | ||
83 | + return; | ||
84 | + } else if (busId.length == 1) { | ||
85 | + busId = busId[0]; | ||
86 | + } else { | ||
87 | + busId = busId.toString(); | ||
88 | + } | ||
89 | + authorizationIndex(busId) | ||
90 | + }) | ||
91 | + | ||
92 | + var cols = [] | ||
93 | + if (!mode) { | ||
94 | + cols.push({ | ||
95 | + type: 'checkbox' | ||
96 | + }) | ||
97 | + } | ||
98 | + cols = cols.concat([{ | ||
99 | + type: 'numbers', title: '序号', align: 'center', width: 70 | ||
100 | + }, { | ||
101 | + field: 'busTypeName', title: '名称', align: 'left', | ||
102 | + templet: | ||
103 | + '<div>' + | ||
104 | + ' <span' + | ||
105 | + ' data-code="{{d.busTypeCode}}"' + | ||
106 | + ' class="layui-table-link btn-bustype-edit">{{d.busTypeName}}' + | ||
107 | + ' </span>' + | ||
108 | + '</div>' | ||
109 | + }, { | ||
110 | + field: 'nickname', title: '负责人', align: 'center' | ||
111 | + }, { | ||
112 | + field: 'busTypeDesc', title: '业务类型描述', align: 'left' | ||
113 | + }, { | ||
114 | + field: 'isOps', title: '乙方运维', align: 'center',width: 120, | ||
115 | + templet: function (d) { | ||
116 | + if(d.isOps==0){ | ||
117 | + return '否'; | ||
118 | + }else{ | ||
119 | + return '是'; | ||
120 | + } | ||
121 | + | ||
122 | + } | ||
123 | + }, { | ||
124 | + field: 'isUse', title: '是否使用', align: 'center',width: 120, | ||
125 | + templet: function (d) { | ||
126 | + switch (d.isUse) { | ||
127 | + case 0: | ||
128 | + return '否'; | ||
129 | + case 1: | ||
130 | + return '是'; | ||
131 | + default: | ||
132 | + return ''; | ||
133 | + } | ||
134 | + } | ||
135 | + }, { | ||
136 | + field: 'important', title: '重要程度', align: 'center', width: 120, | ||
137 | + templet: function (d) { | ||
138 | + switch (d.important) { | ||
139 | + case 1: | ||
140 | + return '核心'; | ||
141 | + case 2: | ||
142 | + return '重要'; | ||
143 | + case 3: | ||
144 | + return '一般'; | ||
145 | + case 9: | ||
146 | + return '虚拟业务'; | ||
147 | + default: | ||
148 | + return ''; | ||
149 | + } | ||
150 | + } | ||
151 | + }, { | ||
152 | + field: 'sort', title: '排序', align: 'right', width: 120, | ||
153 | + }]) | ||
154 | + if (!mode) { | ||
155 | + cols.push({ | ||
156 | + title: '操作', align: 'center', fixed: 'right', width: '10%', | ||
157 | + templet: function (d) { | ||
158 | + if (d.isLeaf) { | ||
159 | + return '' + | ||
160 | + '<div>' + | ||
161 | + '<button data-id="' + d.busId + '" lay-tips="删除" type="button" class="layui-btn layui-btn-xs layui-btn-normal btn-bustype-delete"><i class="layui-icon layui-icon-delete"></i></button>' + | ||
162 | + '<button data-id="' + d.busId + '" lay-tips="资源分配" type="button" class="layui-btn layui-btn-xs layui-btn-normal btn-bustype-res-config"><i class="layui-icon layui-icon-menu-fill"></i></button>' + | ||
163 | + '<button data-id="' + d.busId + '" lay-tips="授权" type="button" class="layui-btn layui-btn-xs layui-btn-normal btn-bustype-authorize"><i class="layui-icon layui-icon-auz"></i></button>' + | ||
164 | + '<button data-id="' + d.busId + '" lay-tips="乙方运维配置" type="button" class="layui-btn layui-btn-xs layui-btn-normal btn-bustype-yf-config"><i class="layui-icon layui-icon-auz"></i></button>' + | ||
165 | + '</div>' | ||
166 | + } else { | ||
167 | + return '' + | ||
168 | + '<div class="layui-row">' + | ||
169 | + '<button data-id="' + d.busId + '" lay-tips="删除" type="button" class="layui-btn layui-btn-xs layui-btn-normal btn-bustype-delete"><i class="layui-icon layui-icon-delete"></i></button>' + | ||
170 | + '<button data-id="' + d.busId + '" lay-tips="授权" type="button" class="layui-btn layui-btn-xs layui-btn-normal btn-bustype-authorize"><i class="layui-icon layui-icon-auz"></i></button>' + | ||
171 | + '</div>' | ||
172 | + } | ||
173 | + } | ||
174 | + }); | ||
175 | + } else { | ||
176 | + cols.push({field: 'showType', title: '展示类型', align: 'center',sort:true,width:210, | ||
177 | + templet: function (d) { | ||
178 | + if(d.parentId == '0' && dataBusType.indexOf(d.busId)>-1){ | ||
179 | + return ''; | ||
180 | + }else{ | ||
181 | + //初始化select内容 | ||
182 | + var html='<div><select lay-ignore data-index="99" name="showType" class="layui-input resourceType_showType" style="min-width: 150px;display:inline">'; | ||
183 | + $.each(showTypeList,function (i,v) { | ||
184 | + if(d.showType == v.value){ | ||
185 | + html += '<option value="' + v.value + '" selected>' + v.name + '</option> ' | ||
186 | + }else{ | ||
187 | + html += '<option value="' + v.value + '">' + v.name + '</option> ' | ||
188 | + } | ||
189 | + }); | ||
190 | + html+='</select></div>'; | ||
191 | + return html; | ||
192 | + } | ||
193 | + } | ||
194 | + }); | ||
195 | + cols.push({ | ||
196 | + title: '操作', align: 'center', fixed: 'right', width: '10%', | ||
197 | + templet: function (d) { | ||
198 | + if (d.userCount) { | ||
199 | + return '' + | ||
200 | + '<div class="layui-row">' + | ||
201 | + '<button data-id="' + d.busId + '" type="button" class="layui-btn layui-btn-xs btn-bustype-bind hide" lay-tips="未授权,点击授权"><i class="layui-icon layui-icon-link"></i> 添加授权</button>' + | ||
202 | + '<button data-id="' + d.busId + '" type="button" style="margin-left: 0" class="layui-btn layui-btn-xs layui-btn-danger btn-bustype-unbind" lay-tips="已授权,点击解除授权"><i class="layui-icon layui-icon-unlink"></i> 解除授权</button>' + | ||
203 | + '</div>'; | ||
204 | + } else { | ||
205 | + return '' + | ||
206 | + '<div class="layui-row">' + | ||
207 | + '<button data-id="' + d.busId + '" type="button" class="layui-btn layui-btn-xs btn-bustype-bind" lay-tips="未授权,点击授权"><i class="layui-icon layui-icon-link"></i> 添加授权</button>' + | ||
208 | + '<button data-id="' + d.busId + '" type="button" style="margin-left: 0" class="layui-btn layui-btn-xs layui-btn-danger btn-bustype-unbind hide" lay-tips="已授权,点击解除授权"><i class="layui-icon layui-icon-unlink"></i> 解除授权</button>' + | ||
209 | + '</div>'; | ||
210 | + } | ||
211 | + } | ||
212 | + }); | ||
213 | + } | ||
214 | + | ||
215 | + /** | ||
216 | + * 加载业务类型表格 | ||
217 | + */ | ||
218 | + function loadBusTypeTable() { | ||
219 | + conditions = { | ||
220 | + busTypeName: $('#condition-bustype-name').val() ? $('#condition-bustype-name').val().trim() : '', | ||
221 | + access_token: accessToken, | ||
222 | + cutoverId: cutoverId, | ||
223 | + targetType: targetType, | ||
224 | + username: username, | ||
225 | + page: -1, | ||
226 | + limit: -1 | ||
227 | + }; | ||
228 | + conditions.limit = -1; | ||
229 | + admin.req({ | ||
230 | + url: domainName + '/api-web/manage/bustype/page', | ||
231 | + data: conditions | ||
232 | + }).done(function (response) { | ||
233 | + $.each(response.data,function (i,v) { | ||
234 | + dataBusType.push(v.parentId); | ||
235 | + }) | ||
236 | + // 设置总数 | ||
237 | + $('#span-bustype-total').html('共 ' + response.data.length + ' 个业务'); | ||
238 | + // 渲染表格 | ||
239 | + busTypeTable = treeTable.render({ | ||
240 | + elem: '#bustype-table', | ||
241 | + data: response.data, | ||
242 | + page: { | ||
243 | + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'], | ||
244 | + theme: '#1E9FFF' | ||
245 | + }, | ||
246 | + tree: { | ||
247 | + iconIndex: mode ? 1 : 2, // 折叠图标显示在第几列 | ||
248 | + isPidData: true, // 是否是id、pid形式数据 | ||
249 | + idName: 'busId', // id字段名称 | ||
250 | + pidName: 'parentId', // pid字段名称 | ||
251 | + onlyIconControl: true // 仅允许点击图标折叠 | ||
252 | + }, | ||
253 | + cols: cols | ||
254 | + }); | ||
255 | + | ||
256 | + //回填数据 | ||
257 | + if (data && data.username) { | ||
258 | + if (data.username.length == 1) { | ||
259 | + $.ajax({ | ||
260 | + type: "get", | ||
261 | + url: domainName + "/api-web/manage/bustype/getBusTypeByUser?access_token=" + accessToken + "&username=" + data.username[0], | ||
262 | + success: function (res) { | ||
263 | + if (res && res.success) { | ||
264 | + var busTypeData = res.data; | ||
265 | + busTypeTable.setChecked(busTypeData.map(item => item.busId)) | ||
266 | + } | ||
267 | + }, | ||
268 | + }) | ||
269 | + } | ||
270 | + } | ||
271 | + | ||
272 | + // 点击编号编辑事件 | ||
273 | + $('.btn-bustype-edit').click(function () { | ||
274 | + if ($.inArray('back:bustype:update', checkList) == -1) { | ||
275 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
276 | + return; | ||
277 | + } | ||
278 | + var busTypeCode = $(this).data('code'); | ||
279 | + saveBusType(busTypeCode); | ||
280 | + }); | ||
281 | + // 删除事件 | ||
282 | + $('.btn-bustype-delete').click(function () { | ||
283 | + var busId = $(this).data('id'); | ||
284 | + deleteBusTypeByIds([busId]); | ||
285 | + }); | ||
286 | + // 授权事件 | ||
287 | + $('.btn-bustype-authorize').click(function () { | ||
288 | + loading = layer.load(2); | ||
289 | + var busId = $(this).data('id') | ||
290 | + | ||
291 | + authorizationIndex(busId) | ||
292 | + }); | ||
293 | + // 乙方运维配置 | ||
294 | + $('.btn-bustype-yf-config').click(function () { | ||
295 | + var busId = $(this).data('id'); | ||
296 | + layer.open({ | ||
297 | + type: 2 | ||
298 | + ,title: "乙方运维配置" | ||
299 | + ,closeBtn: true | ||
300 | + ,area: ['50%', '70%'] | ||
301 | + ,shade: 0.8 | ||
302 | + ,id: 'operationMaintenance-config' //设定一个id,防止重复弹出 | ||
303 | + ,content:`/vue3/index.html#/operationMaintenance/config?id=${busId}` | ||
304 | + , success: function (layero, index) { | ||
305 | + } | ||
306 | + ,yes: function(index, layero){ | ||
307 | + layer.closeAll(); | ||
308 | + return false; | ||
309 | + } | ||
310 | + }); | ||
311 | + | ||
312 | + }); | ||
313 | + | ||
314 | + $('.btn-bustype-bind').unbind('click').on('click', function () { | ||
315 | + var $this = $(this); | ||
316 | + var busId = $this.data('id') | ||
317 | + | ||
318 | + layer.load(2); | ||
319 | + admin.req({ | ||
320 | + url: domainName + '/api-web/manage/bustype/bindUser/' + busId, | ||
321 | + data: {username}, | ||
322 | + success(response) { | ||
323 | + layer.closeAll('loading'); | ||
324 | + if (response && response.success) { | ||
325 | + $this.addClass('hide'); | ||
326 | + $this.parent().find('.btn-bustype-unbind').removeClass('hide') | ||
327 | + var $child = $('tr[data-pid="' + busId + '"] .btn-bustype-bind'); | ||
328 | + $child.addClass('hide') | ||
329 | + $child.parent().find('.btn-bustype-unbind').removeClass('hide') | ||
330 | + } else { | ||
331 | + layer.msg('授权失败!', {icon: 2}); | ||
332 | + } | ||
333 | + }, | ||
334 | + error() { | ||
335 | + layer.closeAll('loading'); | ||
336 | + } | ||
337 | + }) | ||
338 | + }); | ||
339 | + $('.btn-bustype-unbind').unbind('click').on('click', function () { | ||
340 | + var $this = $(this); | ||
341 | + var busId = $this.data('id') | ||
342 | + | ||
343 | + layer.load(2); | ||
344 | + admin.req({ | ||
345 | + url: domainName + '/api-web/manage/bustype/unBindUser/' + busId, | ||
346 | + data: {username}, | ||
347 | + success(response) { | ||
348 | + layer.closeAll('loading'); | ||
349 | + if (response && response.success) { | ||
350 | + $this.addClass('hide'); | ||
351 | + $this.parent().find('.btn-bustype-bind').removeClass('hide') | ||
352 | + } else { | ||
353 | + layer.msg('取消授权失败!', {icon: 2}); | ||
354 | + } | ||
355 | + }, | ||
356 | + error() { | ||
357 | + layer.closeAll('loading'); | ||
358 | + } | ||
359 | + }) | ||
360 | + }); | ||
361 | + // 资源分配事件 | ||
362 | + // $('.btn-bustype-res-config').click(function () { | ||
363 | + // var busId = $(this).data('id'); | ||
364 | + // var bustypeReslist = layui.reslist({busId: busId, idSuffix: 1}) | ||
365 | + // // 展示资源页面layerindex | ||
366 | + // var bustypeReslayerIndex; | ||
367 | + // common.openWin("template/res/reslist", "当前绑定的资源", {busId: busId, idSuffix: 1}, ["完成", "取消"], function () { | ||
368 | + // layer.close(bustypeReslayerIndex); | ||
369 | + // }, null, ['80%', '90%'], | ||
370 | + // function (layero, layerIndex) { | ||
371 | + // bustypeReslayerIndex = layerIndex; | ||
372 | + // // 新增按钮 | ||
373 | + // $("#bustype-reslist-add").click(function () { | ||
374 | + // var reslist = layui.reslist(); | ||
375 | + // // 添加绑定页面的layerindex | ||
376 | + // var addResLayerIndex; | ||
377 | + // common.openWin("template/res/reslist", "添加绑定", {}, ["添加", "取消"], function () { | ||
378 | + // loading = layer.load(2); | ||
379 | + // // 当前选中的资源 | ||
380 | + // var checks = reslist.getData(); | ||
381 | + // // 之前已经选择过的资源 | ||
382 | + // var oldResIdList = []; | ||
383 | + // admin.req({ | ||
384 | + // url: domainName + '/api-web/manage/bustype/resourceList/' + busId, | ||
385 | + // async: false, | ||
386 | + // error: function () { | ||
387 | + // layer.close(loading); | ||
388 | + // } | ||
389 | + // }).done(function (response) { | ||
390 | + // $.each(response.data, function (index, value) { | ||
391 | + // oldResIdList.push(value.resId); | ||
392 | + // }); | ||
393 | + // }); | ||
394 | + // // 需要进行插入的资源 | ||
395 | + // var inserts = []; | ||
396 | + // var insertCount = 0; | ||
397 | + // var isExistCount = 0; | ||
398 | + // $.each(checks, function (index, value) { | ||
399 | + // if (oldResIdList.indexOf(value.resId) === -1) { | ||
400 | + // inserts.push(value.resId); | ||
401 | + // insertCount++; | ||
402 | + // } else { | ||
403 | + // isExistCount++; | ||
404 | + // } | ||
405 | + // }); | ||
406 | + // if (inserts.length === 0) { | ||
407 | + // layer.msg('所选的都已存在,无需重复添加!', {icon: 7, time: 5000}); | ||
408 | + // layer.close(loading); | ||
409 | + // return; | ||
410 | + // } | ||
411 | + // // 发送请求添加绑定 | ||
412 | + // admin.req({ | ||
413 | + // url: domainName + '/api-web/manage/bustype/addResource/' + busId + '?access_token=' + accessToken, | ||
414 | + // type: 'POST', | ||
415 | + // contentType: 'application/json', | ||
416 | + // data: JSON.stringify(inserts), | ||
417 | + // error: function () { | ||
418 | + // layer.close(loading); | ||
419 | + // } | ||
420 | + // }).done(function (response) { | ||
421 | + // layer.close(loading); | ||
422 | + // if (response.success) { | ||
423 | + // layer.msg('添加绑定成功!此次添加了' + insertCount + '个新资源' + (isExistCount > 0 ? ',有' + isExistCount + '个已经存在。' : ''), {icon: 1, time: 5000}); | ||
424 | + // layer.close(addResLayerIndex); | ||
425 | + // bustypeReslist.reloadResTable(); | ||
426 | + // } else { | ||
427 | + // layer.msg('添加绑定失败!', {icon: 2, time: 3000}); | ||
428 | + // } | ||
429 | + // }); | ||
430 | + // }, null, ['90%', '80%'], function (layero, layerIndex) { | ||
431 | + // addResLayerIndex = layerIndex | ||
432 | + // }); | ||
433 | + // }); | ||
434 | + // // 取消绑定按钮 | ||
435 | + // $("#bustype-reslist-unbind").click(function () { | ||
436 | + // // 需要取消绑定的资源id集合 | ||
437 | + // var deletes = []; | ||
438 | + // $.each(bustypeReslist.getData(), function (index, value) { | ||
439 | + // deletes.push(value.resId); | ||
440 | + // }); | ||
441 | + // admin.req({ | ||
442 | + // url: domainName + '/api-web/manage/bustype/deleteResource/' + busId + '?access_token=' + accessToken, | ||
443 | + // type: 'POST', | ||
444 | + // contentType: 'application/json', | ||
445 | + // data: JSON.stringify(deletes) | ||
446 | + // }).done(function (response) { | ||
447 | + // if (response.success) { | ||
448 | + // layer.msg('取消绑定成功!', {icon: 1, time: 3000}); | ||
449 | + // bustypeReslist.reloadResTable(); | ||
450 | + // } else { | ||
451 | + // layer.msg('取消绑定失败!', {icon: 2, time: 3000}); | ||
452 | + // } | ||
453 | + // }); | ||
454 | + // }); | ||
455 | + // }); | ||
456 | + // }); | ||
457 | + | ||
458 | + //资源分配 | ||
459 | + $('.btn-bustype-res-config').click(function () { | ||
460 | + if ($.inArray('back:bustype:resource', checkList) == -1) { | ||
461 | + layer.closeAll(); | ||
462 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
463 | + return; | ||
464 | + } | ||
465 | + var busId = $(this).data('id'); | ||
466 | + layer.open({ | ||
467 | + title: '当前绑定的资源', | ||
468 | + type: 1, | ||
469 | + content: $('#bustype-reslist-table').html(), | ||
470 | + btn: ['完成'], | ||
471 | + area: ['80%', '90%'], | ||
472 | + success: function () { | ||
473 | + // 表格 | ||
474 | + var resType = 'all'; | ||
475 | + $("#bustype_reslist_resListBizTypes").attr("disabled",true); | ||
476 | + form.render(); | ||
477 | + //绑定业务下拉选择数据 | ||
478 | + common.bizTypeSelect("bustype_reslist_resListBizTypes",function () { | ||
479 | + $("#bustype_reslist_resListBizTypes").val(busId); | ||
480 | + form.render("select"); | ||
481 | + }); | ||
482 | + //绑定资源类型下拉选择 | ||
483 | + common.resTypeSelect("bustype_reslist_restype",function () { | ||
484 | + form.render("select"); | ||
485 | + }); | ||
486 | + //回车搜索 | ||
487 | + $('#bustype_reslist_keyword').keydown(function (e) { | ||
488 | + if (e.keyCode === 13) { | ||
489 | + reloadTable(resType); | ||
490 | + } | ||
491 | + }); | ||
492 | + //选择框搜索事件 | ||
493 | + bindSelectEvent(); | ||
494 | + //渲染表格 | ||
495 | + table.render({ | ||
496 | + elem: '#bustype_reslist_resListTable' | ||
497 | + , url: common.domainName + '/api-web/home/res-list/' + resType | ||
498 | + , where: { | ||
499 | + access_token: accessToken, | ||
500 | + resName: $("#bustype_reslist_keyword").val(), | ||
501 | + busId: busId, | ||
502 | + resHealth: $("#bustype_reslist_resStatus").val() | ||
503 | + } | ||
504 | + , height: 'full-300' | ||
505 | + , cellMinWidth: 80 | ||
506 | + , page: { | ||
507 | + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'] | ||
508 | + , theme: '#1E9FFF' | ||
509 | + } | ||
510 | + , limit: common.limit | ||
511 | + , limits: common.limits | ||
512 | + , cols: [[ | ||
513 | + {type: 'checkbox'}, | ||
514 | + {type: 'numbers', title: '序号', align: 'center'} | ||
515 | + , {field: 'resName', title: '资源名称', minWidth: 300, align: 'center'} | ||
516 | + , {field: 'ip', title: 'IP地址', align: 'center'} | ||
517 | + , {field: 'admin', title: '负责人', align: 'center'} | ||
518 | + , {field: 'resTypeName', title: '资源类型', align: 'center'} | ||
519 | + , {field: 'healthDesc', title: '资源状态', align: 'center'} | ||
520 | + ]] | ||
521 | + }); | ||
522 | + //绑定下拉搜索事件 | ||
523 | + function bindSelectEvent() { | ||
524 | + // 资源状态 | ||
525 | + form.on('select(bustype_reslist_resStatus)', function(data){ | ||
526 | + reloadTable(resType); | ||
527 | + }); | ||
528 | + // 资源类型 | ||
529 | + form.on('select(bustype_reslist_restype)', function(data){ | ||
530 | + resType = data.value; | ||
531 | + reloadTable(resType); | ||
532 | + }); | ||
533 | + } | ||
534 | + //刷新表格 | ||
535 | + function reloadTable(resType) { | ||
536 | + table.reload('bustype_reslist_resListTable', { | ||
537 | + url: common.domainName + '/api-web/home/res-list/' + (resType ? resType : 'all'), | ||
538 | + where: { | ||
539 | + access_token: accessToken, | ||
540 | + resName: $("#bustype_reslist_keyword").val(), | ||
541 | + busId: busId, | ||
542 | + resHealth: $("#bustype_reslist_resStatus").val() | ||
543 | + } | ||
544 | + }); | ||
545 | + } | ||
546 | + | ||
547 | + | ||
548 | + // 新增按钮 | ||
549 | + $("#bustype-reslist-add").click(function () { | ||
550 | + var reslist = layui.reslist(); | ||
551 | + // 添加绑定页面的layerindex | ||
552 | + var addResLayerIndex; | ||
553 | + common.openWin("template/res/reslist", "添加绑定", {}, ["添加", "取消"], function () { | ||
554 | + loading = layer.load(2); | ||
555 | + // 当前选中的资源 | ||
556 | + var checks = reslist.getData(); | ||
557 | + if (checks.length ==0) { | ||
558 | + layer.msg('请先选择资源后,再进行添加!', {icon: 7, time: 3000}); | ||
559 | + layer.close(loading); | ||
560 | + return; | ||
561 | + } | ||
562 | + // 之前已经选择过的资源 | ||
563 | + var oldResIdList = []; | ||
564 | + admin.req({ | ||
565 | + url: domainName + '/api-web/manage/bustype/resourceList/' + busId, | ||
566 | + async: false, | ||
567 | + error: function () { | ||
568 | + layer.close(loading); | ||
569 | + } | ||
570 | + }).done(function (response) { | ||
571 | + $.each(response.data, function (index, value) { | ||
572 | + oldResIdList.push(value.resId); | ||
573 | + }); | ||
574 | + }); | ||
575 | + // 需要进行插入的资源 | ||
576 | + var inserts = []; | ||
577 | + var insertCount = 0; | ||
578 | + var isExistCount = 0; | ||
579 | + var resTypes=[]; | ||
580 | + var parentIds=[]; | ||
581 | + $.each(checks, function (index, value) { | ||
582 | + if (oldResIdList.indexOf(value.resId) === -1) { | ||
583 | + resTypes.push(value.resType); | ||
584 | + parentIds.push(value.parentId); | ||
585 | + inserts.push(value.resId); | ||
586 | + insertCount++; | ||
587 | + } else { | ||
588 | + isExistCount++; | ||
589 | + } | ||
590 | + }); | ||
591 | + if (inserts.length === 0) { | ||
592 | + layer.msg('所选的都已存在,无需重复添加!', {icon: 7, time: 5000}); | ||
593 | + layer.close(loading); | ||
594 | + return; | ||
595 | + } | ||
596 | + var ArrIndex=[]; | ||
597 | + if(resTypes.length>0){ | ||
598 | + var identify=0; | ||
599 | + $.each(resTypes,function (i,v) { | ||
600 | + if(v=='MIDDLEWARE_WEBLOGIC' && parentIds[i]==''){ | ||
601 | + identify=1; | ||
602 | + ArrIndex.push(i); | ||
603 | + } | ||
604 | + }); | ||
605 | + if(identify==1){ | ||
606 | + //询问框 | ||
607 | + layer.confirm('选择的资源中包含weblogic控制台,是否将控制台下的服务一起分配到当前业务下?', { | ||
608 | + btn: ['是','否'] //按钮 | ||
609 | + }, function(){//是 | ||
610 | + //获得控制台下所有服务的resID | ||
611 | + //如果选择将控制台下的服务一起分配到当前业务下 | ||
612 | + var arrResIds=[]; | ||
613 | + $.each(ArrIndex,function (i,v) { | ||
614 | + arrResIds.push(inserts[v]); | ||
615 | + }) | ||
616 | + var map={ | ||
617 | + resIds: arrResIds.toString() | ||
618 | + }; | ||
619 | + admin.req({ | ||
620 | + url: common.domainName + '/api-web/bResource/resourceByResId?access_token='+accessToken, | ||
621 | + type:'post', | ||
622 | + data:JSON.stringify(map), | ||
623 | + contentType: "application/json;charset=utf-8", | ||
624 | + async:false, | ||
625 | + error: function () { | ||
626 | + layer.msg('获取控制台下所有服务失败', {icon: 2}); | ||
627 | + layer.close(layer.index); | ||
628 | + } | ||
629 | + }).done(function (response) { | ||
630 | + if(response.success && response.data && response.data.length>0){ | ||
631 | + $.each(response.data,function (i,v) { | ||
632 | + inserts.push(v.resId); | ||
633 | + insertCount++; | ||
634 | + }); | ||
635 | + } | ||
636 | + inserts=Array.from(new Set(inserts)); | ||
637 | + isExistCount = insertCount-inserts; | ||
638 | + add(addResLayerIndex,inserts,busId,insertCount,isExistCount,resType); | ||
639 | + layer.close(layer.index); | ||
640 | + }) | ||
641 | + }, function(){//否 | ||
642 | + add(addResLayerIndex,inserts,busId,insertCount,isExistCount,resType); | ||
643 | + layer.close(layer.index); | ||
644 | + }); | ||
645 | + }else{ | ||
646 | + add(addResLayerIndex,inserts,busId,insertCount,isExistCount,resType); | ||
647 | + } | ||
648 | + } | ||
649 | + | ||
650 | + }, null, ['90%', '80%'], function (layero, layerIndex) { | ||
651 | + addResLayerIndex = layerIndex | ||
652 | + }); | ||
653 | + }); | ||
654 | + // 取消绑定按钮 | ||
655 | + $("#bustype-reslist-unbind").click(function () { | ||
656 | + // 需要取消绑定的资源id集合 | ||
657 | + var deletes = []; | ||
658 | + var resTypes=[]; | ||
659 | + var parentIds=[]; | ||
660 | + $.each(table.checkStatus('bustype_reslist_resListTable').data, function (index, value) { | ||
661 | + deletes.push(value.resId); | ||
662 | + resTypes.push(value.resType); | ||
663 | + parentIds.push(value.parentId); | ||
664 | + }); | ||
665 | + if(deletes.length<1){ | ||
666 | + layer.msg('请选择要解除绑定的数据!', {icon: 7, time: 3000}); | ||
667 | + layer.close(loading); | ||
668 | + return; | ||
669 | + } | ||
670 | + var ArrIndex=[]; | ||
671 | + if(resTypes.length>0){ | ||
672 | + var identify=0; | ||
673 | + $.each(resTypes,function (i,v) { | ||
674 | + if(v=='MIDDLEWARE_WEBLOGIC' && parentIds[i]==''){ | ||
675 | + identify=1; | ||
676 | + ArrIndex.push(i); | ||
677 | + } | ||
678 | + }); | ||
679 | + if(identify==1){ | ||
680 | + //询问框 | ||
681 | + layer.confirm('选择的资源中包含weblogic控制台,是否将控制台下的服务一起取消?', { | ||
682 | + btn: ['是','否'] //按钮 | ||
683 | + }, function(){//是 | ||
684 | + //获得控制台下所有服务的resID | ||
685 | + //如果选择将控制台下的服务一起取消 | ||
686 | + var arrResIds=[]; | ||
687 | + $.each(ArrIndex,function (i,v) { | ||
688 | + arrResIds.push(deletes[v]); | ||
689 | + }) | ||
690 | + var map={ | ||
691 | + resIds: arrResIds.toString() | ||
692 | + }; | ||
693 | + admin.req({ | ||
694 | + url: common.domainName + '/api-web/bResource/resourceByResId?access_token='+accessToken, | ||
695 | + type:'post', | ||
696 | + data:JSON.stringify(map), | ||
697 | + contentType: "application/json;charset=utf-8", | ||
698 | + async:false, | ||
699 | + error: function () { | ||
700 | + layer.msg('获取控制台下所有服务失败', {icon: 2}); | ||
701 | + layer.close(layer.index); | ||
702 | + } | ||
703 | + }).done(function (response) { | ||
704 | + if(response.success && response.data && response.data.length>0){ | ||
705 | + $.each(response.data,function (i,v) { | ||
706 | + deletes.push(v.resId); | ||
707 | + }); | ||
708 | + } | ||
709 | + deletes=Array.from(new Set(deletes)); | ||
710 | + del(busId,deletes,resType); | ||
711 | + layer.close(layer.index); | ||
712 | + }) | ||
713 | + }, function(){//否 | ||
714 | + del(busId,deletes,resType); | ||
715 | + layer.close(layer.index); | ||
716 | + }); | ||
717 | + }else{ | ||
718 | + del(busId,deletes,resType); | ||
719 | + } | ||
720 | + } | ||
721 | + | ||
722 | + }); | ||
723 | + }, | ||
724 | + yes: function (index) { | ||
725 | + layer.close(index); | ||
726 | + } | ||
727 | + }); | ||
728 | + }); | ||
729 | + }); | ||
730 | + } | ||
731 | + | ||
732 | + //授权页面 | ||
733 | + function authorizationIndex(busId) { | ||
734 | + if ($.inArray('back:bustype:impower', checkList) == -1) { | ||
735 | + layer.closeAll(); | ||
736 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
737 | + return; | ||
738 | + } | ||
739 | + var params = { | ||
740 | + oldUsers: [], | ||
741 | + bindUrl: '/api-web/manage/bustype/bindUser/' + busId, | ||
742 | + unBindUrl: '/api-web/manage/bustype/unBindUser/' + busId | ||
743 | + }; | ||
744 | + // 获取当前资源类型的权限用于回显 | ||
745 | + admin.req({ | ||
746 | + url: domainName + '/api-web/manage/bustype/getUsersByBusId', | ||
747 | + async: false, | ||
748 | + data: { | ||
749 | + busId: busId | ||
750 | + } | ||
751 | + }).done(function (response) { | ||
752 | + $.each(response.data, function (index, value) { | ||
753 | + params.oldUsers.push(value.userAccount); | ||
754 | + }) | ||
755 | + return false; | ||
756 | + }); | ||
757 | + layer.close(loading); | ||
758 | + var userlist; | ||
759 | + layer.open({ | ||
760 | + title: '授权', | ||
761 | + id: 'busType-role-config-layer', | ||
762 | + type: 1, | ||
763 | + area: ['80%', '90%'], | ||
764 | + btn: ['关闭'], | ||
765 | + scrollbar: false, | ||
766 | + success: function () { | ||
767 | + view(this.id).render('/template/user/userlist').done(function () { | ||
768 | + userlist = layui.userlist(params); | ||
769 | + }); | ||
770 | + }, | ||
771 | + yes: function (index, layero) { | ||
772 | + layer.close(index); | ||
773 | + } | ||
774 | + }); | ||
775 | + } | ||
776 | + | ||
777 | + // 新增按钮 | ||
778 | + $('#bustype-create').click(function () { | ||
779 | + if ($.inArray('back:bustype:save', checkList) == -1) { | ||
780 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
781 | + return; | ||
782 | + } | ||
783 | + saveBusType(); | ||
784 | + }); | ||
785 | + | ||
786 | + // 刷新表格按钮 | ||
787 | + $('#btn-bustype-reload-table').click(function () { | ||
788 | + loadBusTypeTable(); | ||
789 | + }); | ||
790 | + | ||
791 | + /** | ||
792 | + * 新增或者编辑业务类型 | ||
793 | + * | ||
794 | + * @param busTypeCode 业务类型编号 | ||
795 | + */ | ||
796 | + function saveBusType(busTypeCode) { | ||
797 | + // 打开(新增/编辑)窗口 | ||
798 | + common.openWin('/baseconfig/bustype/add', '<a class="layui-icon layui-icon-edit win_title_icon"></a>' + busTypeCode ? '编辑' : '新增', | ||
799 | + {busTypeCode: busTypeCode}, ['保存', '取消'], function () { | ||
800 | + $('#btn-bustype-submit').click(); | ||
801 | + }, null, ['40%', 'auto']); | ||
802 | + } | ||
803 | + | ||
804 | + function deleteBusTypeByIds(busIds) { | ||
805 | + if ($.inArray('back:bustype:delete', checkList) == -1) { | ||
806 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
807 | + return; | ||
808 | + } | ||
809 | + if (busIds.length == 0) { | ||
810 | + layer.msg('请先选择数据,再点击删除。', {icon: 0, timeout: 3000}); | ||
811 | + return; | ||
812 | + } | ||
813 | + layer.confirm('确认要删除吗?', {icon: 3, title: '提示'}, function () { | ||
814 | + loading = layer.load(2); | ||
815 | + admin.req({ | ||
816 | + url: domainName + '/api-web/manage/bustype/deleteByIds?access_token=' + accessToken, | ||
817 | + type: 'POST', | ||
818 | + contentType: 'application/json', | ||
819 | + data: JSON.stringify(busIds), | ||
820 | + success: function () { | ||
821 | + layer.close(loading); | ||
822 | + }, | ||
823 | + error: function () { | ||
824 | + layer.close(loading); | ||
825 | + } | ||
826 | + }).done(function (response) { | ||
827 | + if (response.success) { | ||
828 | + layer.msg('删除成功!', {icon: 1, time: 3000}); | ||
829 | + loadBusTypeTable(); | ||
830 | + } else { | ||
831 | + layer.msg('删除失败!', {icon: 2, time: 3000}); | ||
832 | + } | ||
833 | + }); | ||
834 | + }); | ||
835 | + } | ||
836 | + //添加绑定 | ||
837 | + function add(addResLayerIndex,inserts,busId,insertCount,isExistCount,resType) { | ||
838 | + // 发送请求添加绑定 | ||
839 | + admin.req({ | ||
840 | + url: domainName + '/api-web/manage/bustype/addResource/' + busId + '?access_token=' + accessToken, | ||
841 | + type: 'POST', | ||
842 | + async: false, | ||
843 | + contentType: 'application/json', | ||
844 | + data: JSON.stringify(inserts), | ||
845 | + error: function () { | ||
846 | + layer.close(layer.index); | ||
847 | + } | ||
848 | + }).done(function (response) { | ||
849 | + layer.close(loading); | ||
850 | + if (response.success) { | ||
851 | + layer.msg('添加绑定成功!此次添加了' + insertCount + '个新资源' + (isExistCount > 0 ? ',有' + isExistCount + '个已经存在。' : ''), {icon: 1, time: 5000}); | ||
852 | + layer.close(addResLayerIndex); | ||
853 | + reloadTable(resType,busId); | ||
854 | + } else { | ||
855 | + layer.msg('添加绑定失败!', {icon: 2, time: 3000}); | ||
856 | + } | ||
857 | + }); | ||
858 | + } | ||
859 | + | ||
860 | + //取消绑定 | ||
861 | + function del(busId,deletes,resType) { | ||
862 | + admin.req({ | ||
863 | + url: domainName + '/api-web/manage/bustype/deleteResource/' + busId + '?access_token=' + accessToken, | ||
864 | + type: 'POST', | ||
865 | + async: false, | ||
866 | + contentType: 'application/json', | ||
867 | + data: JSON.stringify(deletes) | ||
868 | + }).done(function (response) { | ||
869 | + if (response.success) { | ||
870 | + layer.msg('取消绑定成功!', {icon: 1, time: 3000}); | ||
871 | + | ||
872 | + reloadTable(resType,busId); | ||
873 | + } else { | ||
874 | + layer.msg('取消绑定失败!', {icon: 2, time: 3000}); | ||
875 | + } | ||
876 | + }); | ||
877 | + } | ||
878 | + //获取展示类型的字典数据 | ||
879 | + function initShowType(){ | ||
880 | + if(mode){//如果不展示字段就不去请求 | ||
881 | + admin.req({ | ||
882 | + url: domainName + '/api-web/manage/ddic/findSucDdics/DETAILS_POWER' | ||
883 | + , method: 'POST' | ||
884 | + , async: false | ||
885 | + , success: function (res) { | ||
886 | + $.each(res.data, function (i, v) { | ||
887 | + showTypeList.push({ | ||
888 | + name: v.ddicName | ||
889 | + ,value: v.ddicCode.substring(v.ddicCode.lastIndexOf("_")+1,v.ddicCode.length) | ||
890 | + }) | ||
891 | + }); | ||
892 | + } | ||
893 | + }); | ||
894 | + } | ||
895 | + } | ||
896 | + //刷新表格 | ||
897 | + function reloadTable(resType,busId) { | ||
898 | + table.reload('bustype_reslist_resListTable', { | ||
899 | + url: common.domainName + '/api-web/home/res-list/' + (resType ? resType : 'all'), | ||
900 | + where: { | ||
901 | + access_token: accessToken, | ||
902 | + resName: $("#bustype_reslist_keyword").val(), | ||
903 | + busId: busId, | ||
904 | + resHealth: $("#bustype_reslist_resStatus").val() | ||
905 | + } | ||
906 | + }); | ||
907 | + } | ||
908 | + //获取选中的数据 | ||
909 | + function getCheckData() { | ||
910 | + if(mode){ | ||
911 | + //获取改变的值 | ||
912 | + var str=''; | ||
913 | + var $tr=$('#bustype-table').next().find('tbody tr'); | ||
914 | + $.each($tr,function (i,v) { | ||
915 | + var $btn=$(this).find('.btn-bustype-unbind'); | ||
916 | + var showType=$(this).find('.resourceType_showType') && $(this).find('.resourceType_showType').eq(0) && $(this).find('.resourceType_showType').eq(0).val() ? $(this).find('.resourceType_showType').eq(0).val():'<'; | ||
917 | + if(!$btn.hasClass('hide')){ | ||
918 | + str += $btn.attr("data-id")+'_'+showType+','; | ||
919 | + } | ||
920 | + }); | ||
921 | + if(str!=''){ | ||
922 | + str=str.substring(0,str.length-1); | ||
923 | + } | ||
924 | + return str; | ||
925 | + }else{ | ||
926 | + return busTypeTable.checkStatus(false); | ||
927 | + } | ||
928 | + | ||
929 | + } | ||
930 | + | ||
931 | + return {getData: getCheckData}; | ||
932 | + }); | ||
933 | +}); |
1 | +/** | ||
2 | + | ||
3 | + @Name:layuiAdmin 核心模块 | ||
4 | + @Author:贤心 | ||
5 | + @Site:http://www.layui.com/admin/ | ||
6 | + @License:LPPL | ||
7 | + | ||
8 | + */ | ||
9 | + | ||
10 | +layui.define(['view'], function(exports){ | ||
11 | + var $ = layui.jquery | ||
12 | + ,laytpl = layui.laytpl | ||
13 | + ,element = layui.element | ||
14 | + ,setter = layui.setter | ||
15 | + ,view = layui.view | ||
16 | + ,layer = layui.layer | ||
17 | + ,sessions = layui.sessions | ||
18 | + ,device = layui.device() | ||
19 | + | ||
20 | + ,$win = $(window), $body = $('body') | ||
21 | + ,container = $('#'+ setter.container) | ||
22 | + | ||
23 | + ,SHOW = 'layui-show', HIDE = 'layui-hide', THIS = 'layui-this', DISABLED = 'layui-disabled', TEMP = 'template' | ||
24 | + ,APP_BODY = '#LAY_app_body', APP_FLEXIBLE = 'LAY_app_flexible' | ||
25 | + ,FILTER_TAB_TBAS = 'layadmin-layout-tabs' | ||
26 | + ,APP_SPREAD_SM = 'layadmin-side-spread-sm', TABS_BODY = 'layadmin-tabsbody-item' | ||
27 | + ,ICON_SHRINK = 'layui-icon-shrink-right', ICON_SPREAD = 'layui-icon-spread-left' | ||
28 | + ,SIDE_SHRINK = 'layadmin-side-shrink', SIDE_MENU = 'LAY-system-side-menu' | ||
29 | + // ,accessToken = sessions.getToken()['access_token'] | ||
30 | + | ||
31 | + //通用方法 | ||
32 | + ,admin = { | ||
33 | + domainName: sessionStorage.getItem('domainName'), // gateway地址 | ||
34 | + v: '1.2.1 pro' | ||
35 | + | ||
36 | + //数据的异步请求 | ||
37 | + ,req: view.req | ||
38 | + | ||
39 | + //清除本地 token,并跳转到登入页 | ||
40 | + ,exit: view.exit | ||
41 | + | ||
42 | + //xss 转义 | ||
43 | + ,escape: function(html){ | ||
44 | + return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') | ||
45 | + .replace(/</g, '<').replace(/>/g, '>') | ||
46 | + .replace(/'/g, ''').replace(/"/g, '"'); | ||
47 | + } | ||
48 | + | ||
49 | + //事件监听 | ||
50 | + ,on: function(events, callback){ | ||
51 | + return layui.onevent.call(this, setter.MOD_NAME, events, callback); | ||
52 | + } | ||
53 | + | ||
54 | + //弹出面板 | ||
55 | + ,popup: view.popup | ||
56 | + | ||
57 | + //右侧面板 | ||
58 | + ,popupRight: function(options){ | ||
59 | + //layer.close(admin.popup.index); | ||
60 | + return admin.popup.index = layer.open($.extend({ | ||
61 | + type: 1 | ||
62 | + ,id: 'LAY_adminPopupR' | ||
63 | + ,anim: -1 | ||
64 | + ,title: false | ||
65 | + ,closeBtn: false | ||
66 | + ,offset: 'r' | ||
67 | + ,shade: 0.1 | ||
68 | + ,shadeClose: true | ||
69 | + ,skin: 'layui-anim layui-anim-rl layui-layer-adminRight' | ||
70 | + ,area: '300px' | ||
71 | + }, options)); | ||
72 | + } | ||
73 | + | ||
74 | + //发送验证码 | ||
75 | + ,sendAuthCode: function(options){ | ||
76 | + options = $.extend({ | ||
77 | + seconds: 60 | ||
78 | + ,elemPhone: '#LAY_phone' | ||
79 | + ,elemVercode: '#LAY_vercode' | ||
80 | + }, options); | ||
81 | + | ||
82 | + var seconds = options.seconds | ||
83 | + ,token = null | ||
84 | + ,timer, countDown = function(loop){ | ||
85 | + var btn = $(options.elem) | ||
86 | + seconds--; | ||
87 | + if(seconds < 0){ | ||
88 | + btn.removeClass(DISABLED).html('获取验证码'); | ||
89 | + seconds = options.seconds; | ||
90 | + clearInterval(timer); | ||
91 | + } else { | ||
92 | + btn.addClass(DISABLED).html(seconds + '秒后重获'); | ||
93 | + } | ||
94 | + | ||
95 | + if(!loop){ | ||
96 | + timer = setInterval(function(){ | ||
97 | + countDown(true); | ||
98 | + }, 1000); | ||
99 | + } | ||
100 | + }; | ||
101 | + | ||
102 | + $body.off('click', options.elem).on('click', options.elem, function(){ | ||
103 | + options.elemPhone = $(options.elemPhone); | ||
104 | + options.elemVercode = $(options.elemVercode); | ||
105 | + | ||
106 | + var elemPhone = options.elemPhone | ||
107 | + ,value = elemPhone.val(); | ||
108 | + | ||
109 | + if(seconds !== options.seconds || $(this).hasClass(DISABLED)) return; | ||
110 | + | ||
111 | + if(!/^1\d{10}$/.test(value)){ | ||
112 | + elemPhone.focus(); | ||
113 | + return layer.msg('请输入正确的手机号') | ||
114 | + }; | ||
115 | + | ||
116 | + if(typeof options.ajax === 'object'){ | ||
117 | + var success = options.ajax.success; | ||
118 | + delete options.ajax.success; | ||
119 | + } | ||
120 | + | ||
121 | + admin.req($.extend(true, { | ||
122 | + url: '/auth/code' | ||
123 | + ,type: 'get' | ||
124 | + ,data: { | ||
125 | + phone: value | ||
126 | + } | ||
127 | + ,success: function(res){ | ||
128 | + layer.msg('验证码已发送至你的手机,请注意查收', { | ||
129 | + icon: 1 | ||
130 | + ,shade: 0 | ||
131 | + }); | ||
132 | + options.elemVercode.focus(); | ||
133 | + countDown(); | ||
134 | + success && success(res); | ||
135 | + } | ||
136 | + }, options.ajax)); | ||
137 | + }); | ||
138 | + } | ||
139 | + | ||
140 | + //屏幕类型 | ||
141 | + ,screen: function(){ | ||
142 | + var width = $win.width(); | ||
143 | + if(width > 1200){ | ||
144 | + return 3; //大屏幕 | ||
145 | + } else if(width > 992){ | ||
146 | + return 2; //中屏幕 | ||
147 | + } else if(width > 768){ | ||
148 | + return 1; //小屏幕 | ||
149 | + } else { | ||
150 | + return 0; //超小屏幕 | ||
151 | + } | ||
152 | + } | ||
153 | + | ||
154 | + //侧边伸缩 | ||
155 | + ,sideFlexible: function(status){ | ||
156 | + var app = container | ||
157 | + ,iconElem = $('#'+ APP_FLEXIBLE) | ||
158 | + ,screen = admin.screen(); | ||
159 | + | ||
160 | + //设置状态,PC:默认展开、移动:默认收缩 | ||
161 | + if(status === 'spread'){ | ||
162 | + //切换到展开状态的 icon,箭头:← | ||
163 | + iconElem.removeClass(ICON_SPREAD).addClass(ICON_SHRINK); | ||
164 | + | ||
165 | + //移动:从左到右位移;PC:清除多余选择器恢复默认 | ||
166 | + if(screen < 2){ | ||
167 | + app.addClass(APP_SPREAD_SM); | ||
168 | + } else { | ||
169 | + app.removeClass(APP_SPREAD_SM); | ||
170 | + } | ||
171 | + | ||
172 | + app.removeClass(SIDE_SHRINK) | ||
173 | + } else { | ||
174 | + //切换到搜索状态的 icon,箭头:→ | ||
175 | + iconElem.removeClass(ICON_SHRINK).addClass(ICON_SPREAD); | ||
176 | + | ||
177 | + //移动:清除多余选择器恢复默认;PC:从右往左收缩 | ||
178 | + if(screen < 2){ | ||
179 | + app.removeClass(SIDE_SHRINK); | ||
180 | + } else { | ||
181 | + app.addClass(SIDE_SHRINK); | ||
182 | + } | ||
183 | + | ||
184 | + app.removeClass(APP_SPREAD_SM) | ||
185 | + } | ||
186 | + | ||
187 | + layui.event.call(this, setter.MOD_NAME, 'side({*})', { | ||
188 | + status: status | ||
189 | + }); | ||
190 | + } | ||
191 | + | ||
192 | + //重置主体区域表格尺寸 | ||
193 | + ,resizeTable: function(delay){ | ||
194 | + var that = this, runResizeTable = function(){ | ||
195 | + that.tabsBody(admin.tabsPage.index).find('.layui-table-view').each(function(){ | ||
196 | + var tableID = $(this).attr('lay-id'); | ||
197 | + layui.table.resize(tableID); | ||
198 | + }); | ||
199 | + }; | ||
200 | + if(!layui.table) return; | ||
201 | + delay ? setTimeout(runResizeTable, delay) : runResizeTable(); | ||
202 | + } | ||
203 | + | ||
204 | + //主题设置 | ||
205 | + ,theme: function(options){ | ||
206 | + var theme = setter.theme | ||
207 | + ,local = layui.data(setter.tableName) | ||
208 | + ,id = 'LAY_layadmin_theme' | ||
209 | + ,style = document.createElement('style') | ||
210 | + ,styleText = laytpl([ | ||
211 | + //主题色 | ||
212 | + '.layui-side-menu,' | ||
213 | + ,'.layadmin-pagetabs .layui-tab-title li:after,' | ||
214 | + ,'.layadmin-pagetabs .layui-tab-title li.layui-this:after,' | ||
215 | + ,'.layui-layer-admin .layui-layer-title,' | ||
216 | + ,'.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>.layui-nav-child' | ||
217 | + ,'{background-color:{{d.color.main}} !important;}' | ||
218 | + | ||
219 | + //选中色 | ||
220 | + ,'.layui-nav-tree .layui-this,' | ||
221 | + ,'.layui-nav-tree .layui-this>a,' | ||
222 | + ,'.layui-nav-tree .layui-nav-child dd.layui-this,' | ||
223 | + ,'.layui-nav-tree .layui-nav-child dd.layui-this a' | ||
224 | + ,'{background-color:{{d.color.selected}} !important;}' | ||
225 | + | ||
226 | + //logo | ||
227 | + ,'.layui-layout-admin .layui-logo{background-color:{{d.color.logo || d.color.main}} !important;}' | ||
228 | + | ||
229 | + //头部色 | ||
230 | + ,'{{# if(d.color.header){ }}' | ||
231 | + ,'.layui-layout-admin .layui-header{background-color:{{ d.color.header }};}' | ||
232 | + ,'.layui-layout-admin .layui-header a,' | ||
233 | + ,'.layui-layout-admin .layui-header a cite{color: #f8f8f8;}' | ||
234 | + ,'.layui-layout-admin .layui-header a:hover{color: #fff;}' | ||
235 | + ,'.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-top-color: #fbfbfb;}' | ||
236 | + ,'.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color: transparent; border-bottom-color: #fbfbfb;}' | ||
237 | + ,'.layui-layout-admin .layui-header .layui-nav .layui-this:after, .layui-layout-admin .layui-header .layui-nav-bar{background-color: #fff; background-color: rgba(255,255,255,.5);}' | ||
238 | + ,'.layadmin-pagetabs .layui-tab-title li:after{display: none;}' | ||
239 | + ,'{{# } }}' | ||
240 | + ].join('')).render(options = $.extend({}, local.theme, options)) | ||
241 | + ,styleElem = document.getElementById(id); | ||
242 | + | ||
243 | + //添加主题样式 | ||
244 | + if('styleSheet' in style){ | ||
245 | + style.setAttribute('type', 'text/css'); | ||
246 | + style.styleSheet.cssText = styleText; | ||
247 | + } else { | ||
248 | + style.innerHTML = styleText; | ||
249 | + } | ||
250 | + style.id = id; | ||
251 | + | ||
252 | + styleElem && $body[0].removeChild(styleElem); | ||
253 | + $body[0].appendChild(style); | ||
254 | + $body.attr('layadmin-themealias', options.color.alias); | ||
255 | + | ||
256 | + //本地存储记录 | ||
257 | + local.theme = local.theme || {}; | ||
258 | + layui.each(options, function(key, value){ | ||
259 | + local.theme[key] = value; | ||
260 | + }); | ||
261 | + layui.data(setter.tableName, { | ||
262 | + key: 'theme' | ||
263 | + ,value: local.theme | ||
264 | + }); | ||
265 | + } | ||
266 | + | ||
267 | + //初始化主题 | ||
268 | + ,initTheme: function(index){ | ||
269 | + var theme = setter.theme; | ||
270 | + index = index || 0; | ||
271 | + if(theme.color[index]){ | ||
272 | + theme.color[index].index = index; | ||
273 | + admin.theme({ | ||
274 | + color: theme.color[index] | ||
275 | + }); | ||
276 | + } | ||
277 | + } | ||
278 | + | ||
279 | + //记录最近一次点击的页面标签数据 | ||
280 | + ,tabsPage: {} | ||
281 | + //wtc 给主页判断使用 | ||
282 | + ,mainTabsPage: {} | ||
283 | + //获取标签页的头元素 | ||
284 | + ,tabsHeader: function(index){ | ||
285 | + return $('#LAY_app_tabsheader').children('li').eq(index || 0); | ||
286 | + } | ||
287 | + | ||
288 | + //获取页面标签主体元素 | ||
289 | + ,tabsBody: function(index){ | ||
290 | + return $(APP_BODY).find('.'+ TABS_BODY).eq(index || 0); | ||
291 | + } | ||
292 | + | ||
293 | + //切换页面标签主体 | ||
294 | + ,tabsBodyChange: function(index){ | ||
295 | + admin.tabsHeader(index).attr('lay-attr', layui.router().href); | ||
296 | + admin.tabsBody(index).addClass(SHOW).siblings().removeClass(SHOW); | ||
297 | + events.rollPage('auto', index); | ||
298 | + } | ||
299 | + | ||
300 | + //resize事件管理 | ||
301 | + ,resize: function(fn){ | ||
302 | + var router = layui.router() | ||
303 | + ,key = router.path.join('-'); | ||
304 | + | ||
305 | + if(admin.resizeFn[key]){ | ||
306 | + $win.off('resize', admin.resizeFn[key]); | ||
307 | + delete admin.resizeFn[key]; | ||
308 | + } | ||
309 | + | ||
310 | + if(fn === 'off') return; //如果是清除 resize 事件,则终止往下执行 | ||
311 | + | ||
312 | + fn(), admin.resizeFn[key] = fn; | ||
313 | + $win.on('resize', admin.resizeFn[key]); | ||
314 | + } | ||
315 | + ,resizeFn: {} | ||
316 | + ,runResize: function(){ | ||
317 | + var router = layui.router() | ||
318 | + ,key = router.path.join('-'); | ||
319 | + admin.resizeFn[key] && admin.resizeFn[key](); | ||
320 | + } | ||
321 | + ,delResize: function(){ | ||
322 | + this.resize('off'); | ||
323 | + } | ||
324 | + | ||
325 | + //关闭当前 pageTabs | ||
326 | + ,closeThisTabs: function(){ | ||
327 | + if(!admin.tabsPage.index) return; | ||
328 | + $(TABS_HEADER).eq(admin.tabsPage.index).find('.layui-tab-close').trigger('click'); | ||
329 | + } | ||
330 | + | ||
331 | + //全屏 | ||
332 | + ,fullScreen: function(){ | ||
333 | + var ele = document.documentElement | ||
334 | + ,reqFullScreen = ele.requestFullScreen || ele.webkitRequestFullScreen | ||
335 | + || ele.mozRequestFullScreen || ele.msRequestFullscreen; | ||
336 | + if(typeof reqFullScreen !== 'undefined' && reqFullScreen) { | ||
337 | + reqFullScreen.call(ele); | ||
338 | + }; | ||
339 | + } | ||
340 | + | ||
341 | + //退出全屏 | ||
342 | + ,exitScreen: function(){ | ||
343 | + var ele = document.documentElement | ||
344 | + if (document.exitFullscreen) { | ||
345 | + document.exitFullscreen(); | ||
346 | + } else if (document.mozCancelFullScreen) { | ||
347 | + document.mozCancelFullScreen(); | ||
348 | + } else if (document.webkitCancelFullScreen) { | ||
349 | + document.webkitCancelFullScreen(); | ||
350 | + } else if (document.msExitFullscreen) { | ||
351 | + document.msExitFullscreen(); | ||
352 | + } | ||
353 | + } | ||
354 | + | ||
355 | + //纠正单页路由格式 | ||
356 | + ,correctRouter: function(href){ | ||
357 | + if(!/^\//.test(href)) href = '/' + href; | ||
358 | + | ||
359 | + //纠正首尾 | ||
360 | + return href.replace(/^(\/+)/, '/') | ||
361 | + .replace(new RegExp('\/' + setter.entry + '$'), '/'); //过滤路由最后的默认视图文件名(如:index) | ||
362 | + } | ||
363 | + | ||
364 | + //…… | ||
365 | + }; | ||
366 | + | ||
367 | + //事件 | ||
368 | + var events = admin.events = { | ||
369 | + //伸缩 | ||
370 | + flexible: function(othis){ | ||
371 | + var iconElem = othis.find('#'+ APP_FLEXIBLE) | ||
372 | + ,isSpread = iconElem.hasClass(ICON_SPREAD); | ||
373 | + admin.sideFlexible(isSpread ? 'spread' : null); //控制伸缩 | ||
374 | + admin.resizeTable(350); | ||
375 | + | ||
376 | + setTimeout(function () { | ||
377 | + // 伸缩导致页面变化重新绘制下页面上对尺寸敏感的元素 | ||
378 | + window.resizeEventFn(); | ||
379 | + }, 500); | ||
380 | + } | ||
381 | + | ||
382 | + //刷新 | ||
383 | + ,refresh: function(){ | ||
384 | + layui.index.render(); | ||
385 | + } | ||
386 | + | ||
387 | + //输入框搜索 | ||
388 | + ,serach: function(othis){ | ||
389 | + othis.off('keypress').on('keypress',function(e){ | ||
390 | + if(!this.value.replace(/\s/g, '')) return; | ||
391 | + //回车跳转 | ||
392 | + if(e.keyCode === 13){ | ||
393 | + var href = othis.attr('lay-action') | ||
394 | + ,text = othis.attr('lay-text') || '搜索'; | ||
395 | + | ||
396 | + href = href + this.value; | ||
397 | + text = text + ' <span style="color: #FF5722;">'+ admin.escape(this.value) +'</span>'; | ||
398 | + | ||
399 | + //打开标签页 | ||
400 | + location.hash = admin.correctRouter(href) | ||
401 | + | ||
402 | + //如果搜索关键词已经打开,则刷新页面即可 | ||
403 | + events.serach.keys || (events.serach.keys = {}); | ||
404 | + events.serach.keys[admin.tabsPage.index] = this.value; | ||
405 | + if(this.value === events.serach.keys[admin.tabsPage.index]){ | ||
406 | + events.refresh(othis); | ||
407 | + } | ||
408 | + | ||
409 | + //清空输入框 | ||
410 | + this.value = ''; | ||
411 | + } | ||
412 | + }); | ||
413 | + } | ||
414 | + | ||
415 | + //点击消息 | ||
416 | + ,message: function(othis){ | ||
417 | + othis.find('.layui-badge-dot').remove(); | ||
418 | + } | ||
419 | + | ||
420 | + //弹出主题面板 | ||
421 | + ,theme: function(){ | ||
422 | + admin.popupRight({ | ||
423 | + id: 'LAY_adminPopupTheme' | ||
424 | + ,success: function(){ | ||
425 | + view(this.id).render('system/theme') | ||
426 | + } | ||
427 | + }); | ||
428 | + } | ||
429 | + | ||
430 | + //便签 | ||
431 | + ,note: function(othis){ | ||
432 | + var mobile = admin.screen() < 2 | ||
433 | + ,note = layui.data(setter.tableName).note; | ||
434 | + | ||
435 | + events.note.index = admin.popup({ | ||
436 | + title: '便签' | ||
437 | + ,shade: 0 | ||
438 | + ,offset: [ | ||
439 | + '41px' | ||
440 | + ,(mobile ? null : (othis.offset().left - 250) + 'px') | ||
441 | + ] | ||
442 | + ,anim: -1 | ||
443 | + ,id: 'LAY_adminNote' | ||
444 | + ,skin: 'layadmin-note layui-anim layui-anim-upbit' | ||
445 | + ,content: '<textarea placeholder="内容"></textarea>' | ||
446 | + ,resize: false | ||
447 | + ,success: function(layero, index){ | ||
448 | + var textarea = layero.find('textarea') | ||
449 | + ,value = note === undefined ? '便签中的内容会存储在本地,这样即便你关掉了浏览器,在下次打开时,依然会读取到上一次的记录。是个非常小巧实用的本地备忘录' : note; | ||
450 | + | ||
451 | + textarea.val(value).focus().on('keyup', function(){ | ||
452 | + layui.data(setter.tableName, { | ||
453 | + key: 'note' | ||
454 | + ,value: this.value | ||
455 | + }); | ||
456 | + }); | ||
457 | + } | ||
458 | + }) | ||
459 | + } | ||
460 | + | ||
461 | + //全屏 | ||
462 | + ,fullscreen: function(othis){ | ||
463 | + var SCREEN_FULL = 'layui-icon-screen-full' | ||
464 | + ,SCREEN_REST = 'layui-icon-screen-restore' | ||
465 | + ,iconElem = othis.children("i"); | ||
466 | + | ||
467 | + if(iconElem.hasClass(SCREEN_FULL)){ | ||
468 | + admin.fullScreen(); | ||
469 | + iconElem.addClass(SCREEN_REST).removeClass(SCREEN_FULL); | ||
470 | + } else { | ||
471 | + admin.exitScreen(); | ||
472 | + iconElem.addClass(SCREEN_FULL).removeClass(SCREEN_REST); | ||
473 | + } | ||
474 | + } | ||
475 | + | ||
476 | + //弹出关于面板 | ||
477 | + ,about: function(){ | ||
478 | + admin.popupRight({ | ||
479 | + id: 'LAY_adminPopupAbout' | ||
480 | + ,success: function(){ | ||
481 | + view(this.id).render('system/about') | ||
482 | + } | ||
483 | + }); | ||
484 | + } | ||
485 | + | ||
486 | + //弹出更多面板 | ||
487 | + ,more: function(){ | ||
488 | + admin.popupRight({ | ||
489 | + id: 'LAY_adminPopupMore' | ||
490 | + ,success: function(){ | ||
491 | + view(this.id).render('system/more') | ||
492 | + } | ||
493 | + }); | ||
494 | + } | ||
495 | + | ||
496 | + //返回上一页 | ||
497 | + ,back: function(){ | ||
498 | + history.back(); | ||
499 | + } | ||
500 | + | ||
501 | + //主题设置 | ||
502 | + ,setTheme: function(othis){ | ||
503 | + var index = othis.data('index') | ||
504 | + ,nextIndex = othis.siblings('.layui-this').data('index'); | ||
505 | + | ||
506 | + if(othis.hasClass(THIS)) return; | ||
507 | + | ||
508 | + othis.addClass(THIS).siblings('.layui-this').removeClass(THIS); | ||
509 | + admin.initTheme(index); | ||
510 | + } | ||
511 | + | ||
512 | + //左右滚动页面标签 | ||
513 | + ,rollPage: function(type, index){ | ||
514 | + var tabsHeader = $('#LAY_app_tabsheader') | ||
515 | + ,liItem = tabsHeader.children('li') | ||
516 | + ,scrollWidth = tabsHeader.prop('scrollWidth') | ||
517 | + ,outerWidth = tabsHeader.outerWidth() | ||
518 | + ,tabsLeft = parseFloat(tabsHeader.css('left')); | ||
519 | + | ||
520 | + //右左往右 | ||
521 | + if(type === 'left'){ | ||
522 | + if(!tabsLeft && tabsLeft <=0) return; | ||
523 | + | ||
524 | + //当前的left减去可视宽度,用于与上一轮的页标比较 | ||
525 | + var prefLeft = -tabsLeft - outerWidth; | ||
526 | + | ||
527 | + liItem.each(function(index, item){ | ||
528 | + var li = $(item) | ||
529 | + ,left = li.position().left; | ||
530 | + | ||
531 | + if(left >= prefLeft){ | ||
532 | + tabsHeader.css('left', -left); | ||
533 | + return false; | ||
534 | + } | ||
535 | + }); | ||
536 | + } else if(type === 'auto'){ //自动滚动 | ||
537 | + (function(){ | ||
538 | + var thisLi = liItem.eq(index), thisLeft; | ||
539 | + | ||
540 | + if(!thisLi[0]) return; | ||
541 | + thisLeft = thisLi.position().left; | ||
542 | + | ||
543 | + //当目标标签在可视区域左侧时 | ||
544 | + if(thisLeft < -tabsLeft){ | ||
545 | + return tabsHeader.css('left', -thisLeft); | ||
546 | + } | ||
547 | + | ||
548 | + //当目标标签在可视区域右侧时 | ||
549 | + if(thisLeft + thisLi.outerWidth() >= outerWidth - tabsLeft){ | ||
550 | + var subLeft = thisLeft + thisLi.outerWidth() - (outerWidth - tabsLeft); | ||
551 | + liItem.each(function(i, item){ | ||
552 | + var li = $(item) | ||
553 | + ,left = li.position().left; | ||
554 | + | ||
555 | + //从当前可视区域的最左第二个节点遍历,如果减去最左节点的差 > 目标在右侧不可见的宽度,则将该节点放置可视区域最左 | ||
556 | + if(left + tabsLeft > 0){ | ||
557 | + if(left - tabsLeft > subLeft){ | ||
558 | + tabsHeader.css('left', -left); | ||
559 | + return false; | ||
560 | + } | ||
561 | + } | ||
562 | + }); | ||
563 | + } | ||
564 | + }()); | ||
565 | + } else { | ||
566 | + //默认向左滚动 | ||
567 | + liItem.each(function(i, item){ | ||
568 | + var li = $(item) | ||
569 | + ,left = li.position().left; | ||
570 | + | ||
571 | + if(left + li.outerWidth() >= outerWidth - tabsLeft){ | ||
572 | + tabsHeader.css('left', -left); | ||
573 | + return false; | ||
574 | + } | ||
575 | + }); | ||
576 | + } | ||
577 | + } | ||
578 | + , globalSearch: function (type, index) { | ||
579 | + var othis = $(this); | ||
580 | + var href="globalSearch/index" | ||
581 | + //搜索框检索,暂时不用 | ||
582 | + // var keywords = $('#allSearchKeywords').val(); | ||
583 | + // if (keywords.trim() === '') { | ||
584 | + // return false; | ||
585 | + // } else { | ||
586 | + // var loading = layer.load(2); | ||
587 | + // $.ajax({ | ||
588 | + // url: admin.domainName + '/api-web/home/hasResult?keywords=' + keywords + '&access_token=' + localStorage.getItem('access_token'), | ||
589 | + // type: 'get', | ||
590 | + // async: false, | ||
591 | + // success: function (res) { | ||
592 | + // layer.close(loading); | ||
593 | + // if (res) { | ||
594 | + // if (res.count === 0) { | ||
595 | + // layer.msg('未查到任何数据!', { offset: '15px' , icon: 7, time: 2000}); | ||
596 | + // } else { | ||
597 | + // admin.tabsPage.elem = othis; | ||
598 | + // //执行跳转 | ||
599 | + // sessionStorage.setItem('keywords',keywords); | ||
600 | + // href = admin.correctRouter(href); | ||
601 | + // if(location.hash !== '#' + href) { | ||
602 | + // location.hash = href; | ||
603 | + // } else { | ||
604 | + // layui.index.render(); | ||
605 | + // } | ||
606 | + // } | ||
607 | + // } | ||
608 | + // } | ||
609 | + // }) | ||
610 | + // } | ||
611 | + layer.prompt({ | ||
612 | + id: "all_search_id", | ||
613 | + title: '全局关键字搜索', | ||
614 | + formType: 0, | ||
615 | + area: ['300px','200px'], | ||
616 | + offset: 'auto' | ||
617 | + }, function (value, index) { | ||
618 | + if (value.trim() !== '') { | ||
619 | + layer.close(index); | ||
620 | + var loading = layer.load(2); | ||
621 | + $.ajax({ | ||
622 | + url: admin.domainName + '/api-web/home/hasResult?keywords=' + value + '&access_token=' + localStorage.getItem('access_token'), | ||
623 | + type: 'get', | ||
624 | + async: false, | ||
625 | + success: function (res) { | ||
626 | + layer.close(loading); | ||
627 | + if (res) { | ||
628 | + if (res.count === 0) { | ||
629 | + layer.msg('未查到任何数据!', { offset: '15px' , icon: 7, time: 2000}); | ||
630 | + } else { | ||
631 | + admin.tabsPage.elem = othis; | ||
632 | + //执行跳转 | ||
633 | + sessionStorage.setItem('keywords',value); | ||
634 | + href = admin.correctRouter(href); | ||
635 | + if(location.hash !== '#' + href) { | ||
636 | + location.hash = href; | ||
637 | + } else { | ||
638 | + layui.index.render(); | ||
639 | + } | ||
640 | + } | ||
641 | + } | ||
642 | + } | ||
643 | + }) | ||
644 | + } else { | ||
645 | + return false; | ||
646 | + } | ||
647 | + }); | ||
648 | + $("#all_search_id").find('input.layui-layer-input').attr("placeholder", "关键字查询(必填)").attr("autocomplete","off"); | ||
649 | + $("#all_search_id").find('input.layui-layer-input').attr("id", "allSearchConfirm"); | ||
650 | + $("#all_search_id").find('input.layui-layer-input').css("width",'96%'); | ||
651 | + $("#all_search_id").append('<br/>' + | ||
652 | + '<div style="margin-top: 25px"><span>注:支持资源名称、别名、资源类型、业务类型、ip地址等关键字查询!</span></div>'); | ||
653 | + //全局搜索框弹窗回车事件 | ||
654 | + $("#all_search_id").find('input.layui-layer-input').keydown(function (e) { | ||
655 | + if (e.keyCode === 13) { | ||
656 | + $("#all_search_id").next().next().find('.layui-layer-btn0').trigger("click"); | ||
657 | + } | ||
658 | + }) | ||
659 | + | ||
660 | + } | ||
661 | + , toBigScreen: function () { | ||
662 | + window.open(sessionStorage.getItem("bigScreen") + '?access_token=' + localStorage.getItem("access_token")); | ||
663 | + } | ||
664 | + , toYTHViewScreen: function () { | ||
665 | + window.open(sessionStorage.getItem("ythView") + '?access_token=' + localStorage.getItem("access_token")); | ||
666 | + } | ||
667 | + | ||
668 | + //向右滚动页面标签 | ||
669 | + , leftPage: function () { | ||
670 | + events.rollPage('left'); | ||
671 | + } | ||
672 | + | ||
673 | + //向左滚动页面标签 | ||
674 | + , rightPage: function () { | ||
675 | + events.rollPage(); | ||
676 | + } | ||
677 | + | ||
678 | + //关闭当前标签页 | ||
679 | + , closeThisTabs: function () { | ||
680 | + admin.closeThisTabs(); | ||
681 | + } | ||
682 | + | ||
683 | + //关闭其它标签页 | ||
684 | + , closeOtherTabs: function (type) { | ||
685 | + var TABS_REMOVE = 'LAY-system-pagetabs-remove'; | ||
686 | + if(type === 'all'){ | ||
687 | + $(TABS_HEADER+ ':gt(0)').remove(); | ||
688 | + $(APP_BODY).find('.'+ TABS_BODY+ ':gt(0)').remove(); | ||
689 | + } else { | ||
690 | + $(TABS_HEADER).each(function(index, item){ | ||
691 | + if(index && index != admin.tabsPage.index){ | ||
692 | + $(item).addClass(TABS_REMOVE); | ||
693 | + admin.tabsBody(index).addClass(TABS_REMOVE); | ||
694 | + } | ||
695 | + }); | ||
696 | + $('.'+ TABS_REMOVE).remove(); | ||
697 | + } | ||
698 | + } | ||
699 | + | ||
700 | + //关闭全部标签页 | ||
701 | + ,closeAllTabs: function(){ | ||
702 | + events.closeOtherTabs('all'); | ||
703 | + location.hash = ''; | ||
704 | + } | ||
705 | + | ||
706 | + //遮罩 | ||
707 | + ,shade: function(){ | ||
708 | + admin.sideFlexible(); | ||
709 | + } | ||
710 | + }; | ||
711 | + | ||
712 | + //初始 | ||
713 | + !function(){ | ||
714 | + //主题初始化,本地主题记录优先,其次为 initColorIndex | ||
715 | + var local = layui.data(setter.tableName); | ||
716 | + if(local.theme){ | ||
717 | + admin.theme(local.theme); | ||
718 | + } else if(setter.theme){ | ||
719 | + admin.initTheme(setter.theme.initColorIndex); | ||
720 | + } | ||
721 | + | ||
722 | + //禁止水平滚动 | ||
723 | + $body.addClass('layui-layout-body'); | ||
724 | + | ||
725 | + //移动端强制不开启页面标签功能 | ||
726 | + if(admin.screen() < 1){ | ||
727 | + delete setter.pageTabs; | ||
728 | + } | ||
729 | + | ||
730 | + //不开启页面标签时 | ||
731 | + if(!setter.pageTabs){ | ||
732 | + container.addClass('layadmin-tabspage-none'); | ||
733 | + } | ||
734 | + | ||
735 | + //低版本IE提示 | ||
736 | + if(device.ie && device.ie < 10){ | ||
737 | + view.error('IE'+ device.ie + '下访问可能不佳,推荐使用:Chrome / Firefox / Edge 等高级浏览器', { | ||
738 | + offset: 'auto' | ||
739 | + ,id: 'LAY_errorIE' | ||
740 | + }); | ||
741 | + } | ||
742 | + | ||
743 | + }(); | ||
744 | + | ||
745 | + //admin.prevRouter = {}; //上一个路由 | ||
746 | + | ||
747 | + //监听 hash 改变侧边状态 | ||
748 | + admin.on('hash(side)', function(router){ | ||
749 | + var path = router.path, getData = function(item){ | ||
750 | + return { | ||
751 | + list: item.children('.layui-nav-child') | ||
752 | + ,name: item.data('name') | ||
753 | + ,jump: item.data('jump') | ||
754 | + } | ||
755 | + } | ||
756 | + ,sideMenu = $('#'+ SIDE_MENU) | ||
757 | + ,SIDE_NAV_ITEMD = 'layui-nav-itemed' | ||
758 | + | ||
759 | + //捕获对应菜单 | ||
760 | + ,matchMenu = function(list){ | ||
761 | + var pathURL = admin.correctRouter(path.join('/')); | ||
762 | + list.each(function(index1, item1){ | ||
763 | + var othis1 = $(item1) | ||
764 | + ,data1 = getData(othis1) | ||
765 | + ,listChildren1 = data1.list.children('dd') | ||
766 | + ,matched1 = path[0] == data1.name || (index1 === 0 && !path[0]) | ||
767 | + || (data1.jump && pathURL == admin.correctRouter(data1.jump)); | ||
768 | + | ||
769 | + listChildren1.each(function(index2, item2){ | ||
770 | + var othis2 = $(item2) | ||
771 | + ,data2 = getData(othis2) | ||
772 | + ,listChildren2 = data2.list.children('dd') | ||
773 | + ,matched2 = (path[0] == data1.name && path[1] == data2.name) | ||
774 | + || (data2.jump && pathURL == admin.correctRouter(data2.jump)); | ||
775 | + | ||
776 | + listChildren2.each(function(index3, item3){ | ||
777 | + var othis3 = $(item3) | ||
778 | + ,data3 = getData(othis3) | ||
779 | + ,matched3 = (path[0] == data1.name && path[1] == data2.name && path[2] == data3.name) | ||
780 | + || (data3.jump && pathURL == admin.correctRouter(data3.jump)) | ||
781 | + | ||
782 | + if(matched3){ | ||
783 | + var selected = data3.list[0] ? SIDE_NAV_ITEMD : THIS; | ||
784 | + othis3.addClass(selected).siblings().removeClass(selected); //标记选择器 | ||
785 | + return false; | ||
786 | + } | ||
787 | + | ||
788 | + }); | ||
789 | + | ||
790 | + if(matched2){ | ||
791 | + var selected = data2.list[0] ? SIDE_NAV_ITEMD : THIS; | ||
792 | + othis2.addClass(selected).siblings().removeClass(selected); //标记选择器 | ||
793 | + return false | ||
794 | + } | ||
795 | + | ||
796 | + }); | ||
797 | + | ||
798 | + if(matched1){ | ||
799 | + var selected = data1.list[0] ? SIDE_NAV_ITEMD : THIS; | ||
800 | + if(selected !== SIDE_NAV_ITEMD){ | ||
801 | + othis1.addClass(selected).siblings().removeClass(selected); //标记选择器 | ||
802 | + }else{ | ||
803 | + othis1.addClass(selected); | ||
804 | + } | ||
805 | + // othis1.addClass(selected).siblings().removeClass(selected); //标记选择器 | ||
806 | + return false; | ||
807 | + } | ||
808 | + | ||
809 | + }); | ||
810 | + } | ||
811 | + | ||
812 | + //重置状态 | ||
813 | + sideMenu.find('.'+ THIS).removeClass(THIS); | ||
814 | + | ||
815 | + //移动端点击菜单时自动收缩 | ||
816 | + if(admin.screen() < 2) admin.sideFlexible(); | ||
817 | + | ||
818 | + //开始捕获 | ||
819 | + matchMenu(sideMenu.children('li')); | ||
820 | + }); | ||
821 | + | ||
822 | + //监听侧边导航点击事件 | ||
823 | + element.on('nav(layadmin-system-side-menu)', function(elem){ | ||
824 | + if(elem.siblings('.layui-nav-child')[0] && container.hasClass(SIDE_SHRINK)){ | ||
825 | + admin.sideFlexible('spread'); | ||
826 | + layer.close(elem.data('index')); | ||
827 | + }; | ||
828 | + admin.tabsPage.type = 'nav'; | ||
829 | + admin.mainTabsPage.type = 'nav'; | ||
830 | + }); | ||
831 | + | ||
832 | + //监听选项卡的更多操作 | ||
833 | + element.on('nav(layadmin-pagetabs-nav)', function(elem){ | ||
834 | + var dd = elem.parent(); | ||
835 | + dd.removeClass(THIS); | ||
836 | + dd.parent().removeClass(SHOW); | ||
837 | + }); | ||
838 | + | ||
839 | + //同步路由 | ||
840 | + var setThisRouter = function(othis){ | ||
841 | + var layid = othis.attr('lay-id') | ||
842 | + ,attr = othis.attr('lay-attr') | ||
843 | + ,index = othis.index(); | ||
844 | + | ||
845 | + location.hash = layid === setter.entry ? '/' : (attr || '/'); | ||
846 | + admin.tabsBodyChange(index); | ||
847 | + } | ||
848 | + ,TABS_HEADER = '#LAY_app_tabsheader>li'; | ||
849 | + | ||
850 | + //页面标签点击 | ||
851 | + $body.on('click', TABS_HEADER, function(){ | ||
852 | + var othis = $(this) | ||
853 | + ,index = othis.index(); | ||
854 | + | ||
855 | + admin.tabsPage.type = 'tab'; | ||
856 | + admin.mainTabsPage.type = 'tab'; | ||
857 | + admin.tabsPage.index = index; | ||
858 | + | ||
859 | + //如果是iframe类型的标签页 | ||
860 | + if(othis.attr('lay-attr') === 'iframe'){ | ||
861 | + return admin.tabsBodyChange(index); | ||
862 | + }; | ||
863 | + | ||
864 | + | ||
865 | + setThisRouter(othis); //同步路由 | ||
866 | + admin.runResize(); //执行resize事件,如果存在的话 | ||
867 | + admin.resizeTable(); //重置当前主体区域的表格尺寸 | ||
868 | + }); | ||
869 | + | ||
870 | + //监听 tabspage 删除 | ||
871 | + element.on('tabDelete(layadmin-layout-tabs)', function(obj){ | ||
872 | + var othis = $(TABS_HEADER+ '.layui-this'); | ||
873 | + | ||
874 | + obj.index && admin.tabsBody(obj.index).remove(); | ||
875 | + setThisRouter(othis); | ||
876 | + | ||
877 | + //移除resize事件 | ||
878 | + admin.delResize(); | ||
879 | + }); | ||
880 | + | ||
881 | + //页面跳转 | ||
882 | + $body.on('click', '*[lay-href]', function(){ | ||
883 | + var othis = $(this) | ||
884 | + ,href = othis.attr('lay-href') | ||
885 | + ,router = layui.router(); | ||
886 | + | ||
887 | + admin.tabsPage.elem = othis; | ||
888 | + //admin.prevRouter[router.path[0]] = router.href; //记录上一次各菜单的路由信息 | ||
889 | + | ||
890 | + //执行跳转 | ||
891 | + location.hash = admin.correctRouter(href); | ||
892 | + }); | ||
893 | + | ||
894 | + //点击事件 | ||
895 | + $body.on('click', '*[layadmin-event]', function(){ | ||
896 | + var othis = $(this) | ||
897 | + ,attrEvent = othis.attr('layadmin-event'); | ||
898 | + events[attrEvent] && events[attrEvent].call(this, othis); | ||
899 | + }); | ||
900 | + | ||
901 | + //tips | ||
902 | + $body.on('mouseenter', '*[lay-tips]', function(){ | ||
903 | + var othis = $(this); | ||
904 | + | ||
905 | + if(othis.parent().hasClass('layui-nav-item') && !container.hasClass(SIDE_SHRINK)) return; | ||
906 | + | ||
907 | + var tips = othis.attr('lay-tips') | ||
908 | + ,offset = othis.attr('lay-offset') | ||
909 | + ,direction = othis.attr('lay-direction') | ||
910 | + ,index = layer.tips(tips, this, { | ||
911 | + tips: direction || 1 | ||
912 | + ,time: -1 | ||
913 | + ,success: function(layero, index){ | ||
914 | + if(offset){ | ||
915 | + layero.css('margin-left', offset + 'px'); | ||
916 | + } | ||
917 | + } | ||
918 | + }); | ||
919 | + othis.data('index', index); | ||
920 | + }).on('mouseleave', '*[lay-tips]', function(){ | ||
921 | + layer.close($(this).data('index')); | ||
922 | + }); | ||
923 | + | ||
924 | + //点击A-view3.1收缩菜单栏 | ||
925 | + admin.events.lefMenuflexible = function () { | ||
926 | + var leftbox = $("#LAY_app"); | ||
927 | + if(leftbox.hasClass("layadmin-side-shrink")){ | ||
928 | + leftbox.removeClass("layadmin-side-shrink"); | ||
929 | + }else{ | ||
930 | + leftbox.addClass("layadmin-side-shrink"); | ||
931 | + } | ||
932 | + } | ||
933 | + | ||
934 | + //窗口resize事件 | ||
935 | + var resizeSystem = layui.data.resizeSystem = function(){ | ||
936 | + //layer.close(events.note.index); | ||
937 | + layer.closeAll('tips'); | ||
938 | + | ||
939 | + if(!resizeSystem.lock){ | ||
940 | + setTimeout(function(){ | ||
941 | + admin.sideFlexible(admin.screen() < 2 ? '' : 'spread'); | ||
942 | + delete resizeSystem.lock; | ||
943 | + }, 100); | ||
944 | + } | ||
945 | + | ||
946 | + resizeSystem.lock = true; | ||
947 | + } | ||
948 | + $win.on('resize', layui.data.resizeSystem); | ||
949 | + | ||
950 | + //接口输出 | ||
951 | + exports('admin', admin); | ||
952 | +}); |
1 | +<!--默认布局--> | ||
2 | +<div class="layui-layout layui-layout-admin"> | ||
3 | + <script> | ||
4 | + var show = location.search.substr(1).split("&")[0].split("=")[1]; | ||
5 | + if(show === '0'){ | ||
6 | + document.querySelector("body").classList.add("layout-nav-hide"); | ||
7 | + } | ||
8 | + | ||
9 | + var editFlag = location.search.substr(1).split("&")[1]; | ||
10 | + if(editFlag){ | ||
11 | + var name = editFlag.split("=")[0]; | ||
12 | + var val = editFlag.split("=")[1] == "true"?true:false; | ||
13 | + if(name === "editFlag"){ | ||
14 | + localStorage.setItem("editFlag",val); | ||
15 | + } | ||
16 | + } | ||
17 | + var menuIsopen = 'false'; | ||
18 | + layui.use(['jquery'], function () { | ||
19 | + var $ = layui.jquery; | ||
20 | + // 读取配置文件 | ||
21 | + $.ajax({ | ||
22 | + url: sessionStorage.getItem('domainName') + '/api-web/sysConf/getByCode', | ||
23 | + async: false, | ||
24 | + data: { | ||
25 | + code: 'view_menu_isopen', | ||
26 | + access_token: localStorage.getItem('access_token') | ||
27 | + }, | ||
28 | + success(response) { | ||
29 | + if (response && response.success && response.object) { | ||
30 | + menuIsopen = response.object.value; | ||
31 | + } | ||
32 | + } | ||
33 | + }); | ||
34 | + }); | ||
35 | + | ||
36 | + | ||
37 | + </script> | ||
38 | + <div class="layui-header"> | ||
39 | + <!-- 头部区域 --> | ||
40 | + <ul class="layui-nav layui-layout-left"> | ||
41 | + <li class="layui-nav-item layadmin-flexible" lay-unselect> | ||
42 | + <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩"> | ||
43 | + <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i> | ||
44 | + </a> | ||
45 | + </li> | ||
46 | + <li class="layui-nav-item" lay-unselect> | ||
47 | + <a href="javascript:;" layadmin-event="refresh" title="刷新"> | ||
48 | + <i class="layui-icon layui-icon-refresh-3"></i> | ||
49 | + </a> | ||
50 | + </li> | ||
51 | + </ul> | ||
52 | + <img src="/src/style/img/logo-tj.png" class="logo"> | ||
53 | + <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right"> | ||
54 | + <!--搜索框检索--> | ||
55 | + <!-- <li class="layui-nav-item layui-hide-xs">--> | ||
56 | + <!-- <input type="text" class="layui-input" id="allSearchKeywords" style="margin-top: 6px">--> | ||
57 | + <!-- </li>--> | ||
58 | + <li class="layui-nav-item layui-hide-xs" lay-tips="全局搜索"> | ||
59 | + <a href="javascript:;" layadmin-event="globalSearch"><i class="layui-icon layui-icon-search"></i></a> | ||
60 | + </li> | ||
61 | + <li class="layui-nav-item" lay-tips="一体化视图"> | ||
62 | + <a href="javascript:;" layadmin-event="toYTHViewScreen"><i class="layui-icon layui-icon-chart-screen"></i></a> | ||
63 | + </li> | ||
64 | + <li class="layui-nav-item" lay-tips="大屏"> | ||
65 | + <a href="javascript:;" layadmin-event="toBigScreen"><i class="layui-icon layui-icon-chart-screen"></i></a> | ||
66 | + </li> | ||
67 | + <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect> | ||
68 | + <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a> | ||
69 | + </li> | ||
70 | + <li class="layui-nav-item layui-hide-xs" lay-unselect> | ||
71 | + <a href="javascript:;" layadmin-event="theme"> | ||
72 | + <i class="layui-icon layui-icon-theme"></i> | ||
73 | + </a> | ||
74 | + </li> | ||
75 | + <li class="layui-nav-item layui-hide-xs" lay-unselect> | ||
76 | + <a href="javascript:;" layadmin-event="fullscreen"> | ||
77 | + <i class="layui-icon layui-icon-screen-full"></i> | ||
78 | + </a> | ||
79 | + </li> | ||
80 | + <!-- 报表通知统计 --> | ||
81 | + <li class="layui-nav-item" lay-unselect> | ||
82 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-web/home/messageRemind"> | ||
83 | + <a href="javascript:;" class="notice_msg"> | ||
84 | + <i class="layui-icon layui-icon-notice"></i><span>{{d.map==null? 0 : d.map.totalCountByUser}}</span> | ||
85 | + </a> | ||
86 | + <dl class="layui-nav-child"> | ||
87 | + <dd><a href="javascript:;" lay-href="/alarm/activewarning">活动告警:{{d.map==null? 0 : d.map.totalCountByUser}}</a></dd> | ||
88 | + <!-- <hr>--> | ||
89 | + <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/monitor/flag=0">未处理报表:{{d.map==null? 0 : d.map.statusCountByUser}}</a></dd>--> | ||
90 | + <!-- <hr>--> | ||
91 | + <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/workview/read=0/type=1">工作汇报未读:{{d.map==null? 0 : d.map.notReadCountByUser}}</a></dd>--> | ||
92 | + <!-- <hr>--> | ||
93 | + <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/notice/t=day">今日通知:{{d.map==null? 0 : d.map.countByUserAndToday}}</a></dd>--> | ||
94 | + </dl> | ||
95 | + </script> | ||
96 | + </li> | ||
97 | + | ||
98 | + <li class="layui-nav-item" lay-unselect> | ||
99 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken" | ||
100 | + lay-done="layui.element.render('nav', 'layadmin-layout-right');"> | ||
101 | + <a href="javascript:;"> | ||
102 | + 欢迎 <cite style="color: #1E9FFF">{{d.object.nickname}}</cite> | ||
103 | + </a> | ||
104 | + {{# | ||
105 | + var roles = ''; | ||
106 | + layui.each(d.object.sysRoles, function(idx, role){ | ||
107 | + roles += role.code+","; | ||
108 | + }); | ||
109 | + }} | ||
110 | + <li><input type="hidden" id="user_roles" value="{{roles}}"></li> | ||
111 | + <dl class="layui-nav-child"> | ||
112 | + <dd layadmin-event="updtpswd" style="text-align: center;"><a>修改密码</a></dd> | ||
113 | + <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd> | ||
114 | + </dl> | ||
115 | + </script> | ||
116 | + </li> | ||
117 | + | ||
118 | + <!-- <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"--> | ||
119 | + <!-- lay-done="layui.element.render('nav', 'layadmin-text-name');">--> | ||
120 | + <!-- <li class="layui-nav-item layui-hide-xs" lay-unselect lay-filter="layadmin-text-name">--> | ||
121 | + <!-- <a href="javascript:;" style="text-align: center;" >欢迎 <b id="user-name" lay-tips="点击退出" layadmin-event="logout" style="color: #3d9fe6">{{d.object.nickname }}</b></a>--> | ||
122 | + <!-- </li>--> | ||
123 | + <!-- </script>--> | ||
124 | + </ul> | ||
125 | + </div> | ||
126 | + | ||
127 | + <!-- 侧边菜单 --> | ||
128 | + <!-- 先获取默认菜单拼接 d.str 返回数据格式 modeleid#path--> | ||
129 | + <!-- 如果配置默认首页,则给默认首页,否则给工作台(moduleid为work,path为work/index)--> | ||
130 | + | ||
131 | + <div class="layui-side layui-side-menu"> | ||
132 | + <div class="layui-side-scroll"> | ||
133 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/current?type=1" | ||
134 | + lay-done="layui.element.render('nav', 'layadmin-system-side-menu');" id="TPL_layout"> | ||
135 | + | ||
136 | + {{# | ||
137 | + var dataName = layui.setter.response.dataName; | ||
138 | + var fisthref = "/index"; | ||
139 | + var defaultMenu = d.str; | ||
140 | + var defaultModuleid = ''; | ||
141 | + var defaultPath = ''; | ||
142 | + if(defaultMenu && defaultMenu != ''){ | ||
143 | + defaultModuleid = d.str.split('#')[0]; | ||
144 | + defaultPath = d.str.split('#')[1]; | ||
145 | + fisthref = defaultPath; | ||
146 | + } | ||
147 | + }} | ||
148 | + | ||
149 | + <div class="layui-logo" lay-href="{{fisthref}}"> | ||
150 | + <span>{{ layui.setter.name || 'layuiAdmin' }}</span> | ||
151 | + </div> | ||
152 | + | ||
153 | + <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" | ||
154 | + lay-filter="layadmin-system-side-menu"> | ||
155 | + {{# | ||
156 | + var show = location.search.substr(1).split("&")[0].split("=")[1]; | ||
157 | + if(show == '1') window.history.pushState({} ,'' ,'#'); | ||
158 | + if(show != '0') location.hash = "/"; | ||
159 | + | ||
160 | + var path = layui.router().path | ||
161 | + ,pathURL = layui.admin.correctRouter(path.join('/')) | ||
162 | + ,dataName = layui.setter.response.dataName; | ||
163 | + var fistModuleid = ''; | ||
164 | + if(d && d[dataName].length>0){ | ||
165 | + fistModuleid = d[dataName][0].moduleid; | ||
166 | + } | ||
167 | + | ||
168 | + layui.each(d[dataName], function(index, item){ | ||
169 | + var isselectd = ''; | ||
170 | + var isSelectedModuleid = ''; | ||
171 | + if(defaultModuleid != '' || item.moduleid != ''){ | ||
172 | + if(item.moduleid == defaultModuleid){ | ||
173 | + isselectd = "layui-this"; | ||
174 | + }else{ | ||
175 | + isselectd = ""; | ||
176 | + } | ||
177 | + }else { | ||
178 | + if(!defaultModuleid || defaultModuleid == ''){ | ||
179 | + if(index = 0){ | ||
180 | + isselectd = "layui-this"; | ||
181 | + } | ||
182 | + }else{ | ||
183 | + isselectd = ""; | ||
184 | + } | ||
185 | + } | ||
186 | + var hasChildren = typeof item.subMenus === 'object' && item.subMenus && item.subMenus.length > 0 | ||
187 | + ,classSelected = function(){ | ||
188 | + var match = path[0] == item.moduleid || (index == 0 && !path[0]) || (item.path && pathURL == | ||
189 | + layui.admin.correctRouter(item.path)) || item.spread; | ||
190 | + if(match){ | ||
191 | + return hasChildren ? 'layui-nav-itemed' : 'layui-nav-itemed'; | ||
192 | + } | ||
193 | + return ''; | ||
194 | + } | ||
195 | + ,url = (item.path && typeof item.path === 'string') ? item.path : item.moduleid; | ||
196 | + var closeMenuEvent = ''; | ||
197 | + if(item.moduleid == 'biz' || item.moduleid == 'res'){ closeMenuEvent = 'closeMenu'} | ||
198 | + }} | ||
199 | + | ||
200 | + <li data-name="{{ item.moduleid || '' }}" data-jump="{{ item.path || '' }}" | ||
201 | + class="layui-nav-item {{ menuIsopen == 'true' ? 'layui-nav-itemed' : '' }} {{isselectd}}"> | ||
202 | + | ||
203 | + {{# if(item.moduleid == 'cmdbsys' || item.moduleid == 'sxview' || item.moduleid == 'dpsys'){ }} | ||
204 | + <a href="javascript:;" layadmin-event="{{item.moduleid}}" lay-tips="{{ item.name | ||
205 | + }}" lay-direction="2"> | ||
206 | + <i class="layui-icon {{ item.css }}"></i> | ||
207 | + <cite>{{ item.name }}</cite> | ||
208 | + </a> | ||
209 | + {{# } }} | ||
210 | + {{# if(item.moduleid != 'cmdbsys' && item.moduleid != 'sxview' && item.moduleid != 'dpsys'){ }} | ||
211 | + <a href="javascript:;" {{ hasChildren ? '' : 'lay-href="'+ url +'"' }} layadmin-event="{{closeMenuEvent}}" lay-tips="{{ item.name | ||
212 | + }}" lay-direction="2"> | ||
213 | + <i class="layui-icon {{ item.css }}"></i> | ||
214 | + <cite>{{ item.name }}</cite> | ||
215 | + </a> | ||
216 | + | ||
217 | + {{# } }} | ||
218 | + | ||
219 | + | ||
220 | + {{# if(hasChildren){ }} | ||
221 | + <dl class="layui-nav-child"> | ||
222 | + {{# layui.each(item.subMenus, function(index2, item2){ | ||
223 | + if(item2.moduleid && item2.moduleid == defaultModuleid){ | ||
224 | + isselectd = "layui-this"; | ||
225 | + }else{ | ||
226 | + isselectd = ""; | ||
227 | + } | ||
228 | + var hasChildren2 = typeof item2.subMenus == 'object' && item2.subMenus && | ||
229 | + item2.subMenus.length > 0 | ||
230 | + ,classSelected2 = function(){ | ||
231 | + var match = (path[0] == item.moduleid && path[1] == item2.moduleid) || (item2.path && | ||
232 | + pathURL == layui.admin.correctRouter(item2.path)) || item2.spread; | ||
233 | + return ''; | ||
234 | + } | ||
235 | + ,url2 = (item2.path && typeof item2.path === 'string') | ||
236 | + ? item2.path | ||
237 | + : [item.moduleid, item2.moduleid, ''].join('/'); | ||
238 | + }} | ||
239 | + <dd data-name="{{ item2.moduleid || '' }}" data-jump="{{ item2.path || '' }}" | ||
240 | + class="layui-nav-item {{ classSelected2() }} {{isselectd}}" | ||
241 | + > | ||
242 | + {{# if(item2.menuDesc.indexOf('第三方') == '-1') {}} | ||
243 | + <a href="javascript:;" {{ hasChildren2 ? '' : 'lay-href="'+ url2 +'"' }}>{{ item2.name }}</a> | ||
244 | + {{# }else{ }} | ||
245 | + <a href="javascript:;" {{ hasChildren2 ? '' : 'data-url="'+ url2 +'" layadmin-event="IntegratedEntrance"' }} data-moduleid="{{item2.moduleid}}">{{ item2.name }}</a> | ||
246 | + {{# } }} | ||
247 | + {{# if(hasChildren2){ }} | ||
248 | + <dl class="layui-nav-child {{}}"> | ||
249 | + {{# layui.each(item2.subMenus, function(index3, item3){ | ||
250 | + var match = (path[0] == item.moduleid && path[1] == item2.moduleid && path[2] == | ||
251 | + item3.moduleid) | ||
252 | + || (item3.path && pathURL == layui.admin.correctRouter(item3.path)) | ||
253 | + ,url3 = (item3.path && typeof item3.path === 'string') | ||
254 | + ? item3.path | ||
255 | + : [item.moduleid, item2.moduleid, item3.moduleid].join('/') | ||
256 | + }} | ||
257 | + <dd data-name="{{ item3.moduleid || '' }}" data-jump="{{ item3.path || '' }}"> | ||
258 | + {{# if(item2.menuDesc.indexOf('第三方') == '-1') {}} | ||
259 | + <a href="javascript:;" lay-href="{{ url3 }}" {{ item3.iframe ? 'lay-iframe="true"' : ''}}>{{ item3.name }}</a> | ||
260 | + {{# }else{ }} | ||
261 | + <a href="javascript:;" data-url="{{ url3 }}" layadmin-event="IntegratedEntrance" data-moduleid="{{item3.moduleid}}">{{ item3.name }}</a> | ||
262 | + {{# } }} | ||
263 | + </dd> | ||
264 | + {{# }); }} | ||
265 | + </dl> | ||
266 | + {{# } }} | ||
267 | + </dd> | ||
268 | + {{# }); }} | ||
269 | + </dl> | ||
270 | + {{# } }} | ||
271 | + </li> | ||
272 | + {{# }); }} | ||
273 | + </ul> | ||
274 | + </script> | ||
275 | + </div> | ||
276 | + <div class="right-bottom-tips"></div> | ||
277 | + </div> | ||
278 | + | ||
279 | + <!-- 页面标签 --> | ||
280 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/findSettingDefaultMenus" | ||
281 | + lay-done="layui.element.render('nav', 'layadmin-pagetabs-nav')"> | ||
282 | + <div class="layadmin-pagetabs" id="LAY_app_tabs"> | ||
283 | + <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div> | ||
284 | + <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div> | ||
285 | + <div class="layui-icon layadmin-tabs-control layui-icon-down"> | ||
286 | + <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav"> | ||
287 | + <li class="layui-nav-item" lay-unselect> | ||
288 | + <a href="javascript:;"></a> | ||
289 | + <dl class="layui-nav-child layui-anim-fadein"> | ||
290 | + <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd> | ||
291 | + <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd> | ||
292 | + <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd> | ||
293 | + </dl> | ||
294 | + </li> | ||
295 | + </ul> | ||
296 | + </div> | ||
297 | + <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs"> | ||
298 | + <ul class="layui-tab-title" id="LAY_app_tabsheader"> | ||
299 | + {{# if(d.data.length >= 1 ){ }} | ||
300 | + {{# if(d.data[0].moduleid == 'index'){ }} | ||
301 | + <li lay-id="/"><i class="layui-icon layui-icon-home"></i></li> | ||
302 | + {{# } }} | ||
303 | + {{# if(d.data[0].moduleid != 'index'){ }} | ||
304 | + <li lay-id="/{{d.data[0].moduleid}}/" lay-attr="/{{d.data[0].moduleid}}/"><i class="layui-icon layui-icon-home"></i></li> | ||
305 | + {{# } }} | ||
306 | + {{# } }} | ||
307 | + {{# if(d.data.length == 0){ }} | ||
308 | + <li lay-id="/"><i class="layui-icon layui-icon-home"></i></li> | ||
309 | + {{# } }} | ||
310 | + </ul> | ||
311 | + </div> | ||
312 | + </div> | ||
313 | + </script> | ||
314 | + | ||
315 | + <!-- 主体内容 --> | ||
316 | + <div class="layui-body" id="LAY_app_body"> | ||
317 | + <!-- 单页模式接入--> | ||
318 | + <div class="layadmin-tabsbody-item layui-show"></div> | ||
319 | + </div> | ||
320 | + | ||
321 | + <!-- 辅助元素,一般用于移动设备下遮罩 --> | ||
322 | + <div class="layadmin-body-shade" layadmin-event="shade"></div> | ||
323 | +</div> | ||
324 | + | ||
325 | +<!--告警操作记录--> | ||
326 | +<script type="text/html" id="warnViewWinTpl"> | ||
327 | + <div class="warn-win"> | ||
328 | + <div class="warn-win-item"> | ||
329 | + <h5>告警确认【{{d.confirm.length}}】</h5> | ||
330 | + {{# layui.each(d.confirm, function(index, item){ }} | ||
331 | + <div class="warn-win-item-con"> | ||
332 | + <span>{{layui.util.toDateString(item.confirmTime)}}</span> | ||
333 | + <ul> | ||
334 | + <li>备注:{{item.remark}}</li> | ||
335 | + <li>告警确认人:{{item.confirmUserId}}</li> | ||
336 | + <li>紧急程度:{{item.levelName}}</li> | ||
337 | + </ul> | ||
338 | + </div> | ||
339 | + {{# }); }} | ||
340 | + </div> | ||
341 | + <div class="warn-win-item"> | ||
342 | + <h5>告警关闭【{{d.close.length}}】</h5> | ||
343 | + {{# layui.each(d.close, function(index, item){ }} | ||
344 | + {{# var closeTypeStr = '告警'}} | ||
345 | + {{# if(item.closeType == 1){ closeTypeStr = '通知' } }} | ||
346 | + <div class="warn-win-item-con"> | ||
347 | + <span>备注:{{item.remark}}</span> | ||
348 | + <ul> | ||
349 | + <li>告警关闭时间:{{layui.util.toDateString(item.closeTime)}}</li> | ||
350 | + <li>告警关闭人:{{item.closeUserId}}</li> | ||
351 | + <li>关闭范围:{{closeTypeStr}}</li> | ||
352 | + <li>关闭时长:{{item.closeDuration}}小时</li> | ||
353 | + </ul> | ||
354 | + </div> | ||
355 | + {{# }); }} | ||
356 | + </div> | ||
357 | + <div class="warn-win-item"> | ||
358 | + <h5>告警恢复【{{d.resume.length}}】</h5> | ||
359 | + {{# layui.each(d.resume, function(index, item){ }} | ||
360 | + {{# var resumeTypeStr = '恢复关闭的活动告警'}} | ||
361 | + {{# if(item.resumeType == 1){resumeTypeStr = '恢复历史告警' } }} | ||
362 | + <div class="warn-win-item-con"> | ||
363 | + <span>备注:{{item.remark}}</span> | ||
364 | + <ul> | ||
365 | + <li>告警恢复时间:{{layui.util.toDateString(item.resumeTime)}}</li> | ||
366 | + <li>告警恢复人:{{item.resumeUserId}}</li> | ||
367 | + <li>恢复类型:{{resumeTypeStr}}</li> | ||
368 | + </ul> | ||
369 | + </div> | ||
370 | + {{# }); }} | ||
371 | + </div> | ||
372 | + </div> | ||
373 | +</script> | ||
374 | + | ||
375 | +<!--详细页左侧面板--> | ||
376 | +<script type="text/html" id="detailPageLeftPanel"> | ||
377 | + <div class="detail-left-panel"> | ||
378 | + <a class="detail-left-panel-btn" href="javascript:void(0)"><i class="layui-icon layui-icon-next"></i></a> | ||
379 | + <div class="detail-left-panel-node" style="display: none"> | ||
380 | + {{# layui.each(d.map, function(k, v){ }} | ||
381 | + <div class="left-panel-restype"> | ||
382 | + <div class="layui-title">{{v[0].reTypeName}}</div> | ||
383 | + <div class=""> | ||
384 | + {{# layui.each(v, function(i, e){ }} | ||
385 | + <div class="info-box link" | ||
386 | + data-resid="{{e.targetId}}" | ||
387 | + data-restype="{{e.resType}}" | ||
388 | + data-restypename="{{e.resTypeName}}" | ||
389 | + data-ip="{{e.ip}}" | ||
390 | + data-admin="{{e.admin}}" | ||
391 | + > | ||
392 | + {{e.targetName}} | ||
393 | + </div> | ||
394 | + {{# }); }} | ||
395 | + </div> | ||
396 | + </div> | ||
397 | + {{# }); }} | ||
398 | + {{# if(!Object.keys(d.map).length) { }} | ||
399 | + <div class="left-panel-restype"> | ||
400 | + <div class="desc-box"> | ||
401 | + 暂无关联关系 | ||
402 | + </div> | ||
403 | + </div> | ||
404 | + {{# } }} | ||
405 | + </div> | ||
406 | + </div> | ||
407 | +</script> | ||
408 | + | ||
409 | +<!--下探top30表格展示内容--> | ||
410 | +<script type="text/html" id="detailKpiTableTpl"> | ||
411 | + <table class="layui-table" lay-even="" lay-skin="row"> | ||
412 | + <colgroup> | ||
413 | + <col width="100"> | ||
414 | + <col width="150"> | ||
415 | + <col width="180"> | ||
416 | + <col width="180"> | ||
417 | + </colgroup> | ||
418 | + <thead> | ||
419 | + <tr> | ||
420 | + <th>序号</th> | ||
421 | + <th>进程号</th> | ||
422 | + <th>所属用户</th> | ||
423 | + {{# if(d.kpi == 'KPI7054BC34'){ }} | ||
424 | + <th>使用率</th> | ||
425 | + {{# } }} | ||
426 | + {{# if(d.kpi != 'KPI7054BC34'){ }} | ||
427 | + <th>使用量</th> | ||
428 | + {{# } }} | ||
429 | + </tr> | ||
430 | + </thead> | ||
431 | + <tbody> | ||
432 | + {{# layui.each(d.data, function(index, item){ }} | ||
433 | + <tr> | ||
434 | + <td>{{index + 1}}</td> | ||
435 | + <td>{{item.pid}}</td> | ||
436 | + <td>{{item.username}}</td> | ||
437 | + <td>{{item.usedPercent}}</td> | ||
438 | + <!--<td>{{item.info}}</td>--> | ||
439 | + </tr> | ||
440 | + {{# }); }} | ||
441 | + </tbody> | ||
442 | + </table> | ||
443 | +</script> | ||
444 | + | ||
445 | +<!--corn表达式--> | ||
446 | +<script type="text/html" id="cronHtml" > | ||
447 | + <div id="cronContent" style="color:#000000"> | ||
448 | + <p style="margin: 10px auto; padding: 0px;"> | ||
449 | + <strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);">常用表达式例子</span></strong> | ||
450 | + </p> | ||
451 | + <p style="margin: 10px auto; padding: 0px;"> | ||
452 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(1)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0/2 * * * * ?</span></strong> </span> 表示每2秒 执行任务 | ||
453 | + </p> | ||
454 | + <p style="margin: 10px auto; padding: 0px;"> | ||
455 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(1)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/2 * * * ? </span></strong> </span> 表示每2分钟 执行任务 | ||
456 | + </p> | ||
457 | + | ||
458 | + <p style="margin: 10px auto; padding: 0px;"> | ||
459 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(1)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 2 1 * ?</span></strong> </span> 表示在每月的1日的凌晨2点调整任务 | ||
460 | + </p> | ||
461 | + <p style="margin: 10px auto; padding: 0px;"> | ||
462 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(2)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * MON-FRI</span> </strong> 表示周一到周五每天上午10:15执行作业 | ||
463 | + </p> | ||
464 | + <p style="margin: 10px auto; padding: 0px;"> | ||
465 | + (3)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? 6L 2002-2006</span></strong> 表示2002-2006年的每个月的最后一个星期五上午10:15执行作 | ||
466 | + </p> | ||
467 | + <p style="margin: 10px auto; padding: 0px;"> | ||
468 | + (4)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 10,14,16 * * ?</span></strong> 每天上午10点,下午2点,4点 | ||
469 | + </p> | ||
470 | + <p style="margin: 10px auto; padding: 0px;"> | ||
471 | + (5)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/30 9-17 * * ?</span></strong> 朝九晚五工作时间内每半小时 | ||
472 | + </p> | ||
473 | + <p style="margin: 10px auto; padding: 0px;"> | ||
474 | + (6)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 12 ? * WED</span></strong> 表示每个星期三中午12点 | ||
475 | + </p> | ||
476 | + <p style="margin: 10px auto; padding: 0px;"> | ||
477 | + (7)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 12 * * ?</span></strong> 每天中午12点触发 | ||
478 | + </p> | ||
479 | + <p style="margin: 10px auto; padding: 0px;"> | ||
480 | + (8)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * * </span></strong> 每天上午10:15触发 | ||
481 | + </p> | ||
482 | + <p style="margin: 10px auto; padding: 0px;"> | ||
483 | + (9)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ?</span></strong> 每天上午10:15触发 | ||
484 | + </p> | ||
485 | + <p style="margin: 10px auto; padding: 0px;"> | ||
486 | + (10)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ?</span> </strong> 每天上午10:15触发 | ||
487 | + </p> | ||
488 | + <p style="margin: 10px auto; padding: 0px;"> | ||
489 | + (11)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ? 2005</span></strong> 2005年的每天上午10:15触发 | ||
490 | + </p> | ||
491 | + <p style="margin: 10px auto; padding: 0px;"> | ||
492 | + (12)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 * 14 * * ?</span></strong> 在每天下午2点到下午2:59期间的每1分钟触发 | ||
493 | + </p> | ||
494 | + <p style="margin: 10px auto; padding: 0px;"> | ||
495 | + (13)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/5 14 * * ?</span></strong> 在每天下午2点到下午2:55期间的每5分钟触发 | ||
496 | + </p> | ||
497 | + <p style="margin: 10px auto; padding: 0px;"> | ||
498 | + (14)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/5 14,18 * * ?</span></strong> 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 | ||
499 | + </p> | ||
500 | + <p style="margin: 10px auto; padding: 0px;"> | ||
501 | + (15)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0-5 14 * * ?</span> </strong> 在每天下午2点到下午2:05期间的每1分钟触发 | ||
502 | + </p> | ||
503 | + <p style="margin: 10px auto; padding: 0px;"> | ||
504 | + (16)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 10,44 14 ? 3 WED</span></strong> 每年三月的星期三的下午2:10和2:44触发 | ||
505 | + </p> | ||
506 | + <p style="margin: 10px auto; padding: 0px;"> | ||
507 | + (17)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * MON-FRI</span> </strong> 周一至周五的上午10:15触发 | ||
508 | + </p> | ||
509 | + <p style="margin: 10px auto; padding: 0px;"> | ||
510 | + (18)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 15 * ?</span> </strong> 每月15日上午10:15触发 | ||
511 | + </p> | ||
512 | + <p style="margin: 10px auto; padding: 0px;"> | ||
513 | + (19)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 L * ?</span> </strong> 每月最后一日的上午10:15触发 | ||
514 | + </p> | ||
515 | + <p style="margin: 10px auto; padding: 0px;"> | ||
516 | + (20)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6L</span> </strong> 每月的最后一个星期五上午10:15触发 | ||
517 | + </p> | ||
518 | + <p style="margin: 10px auto; padding: 0px;"> | ||
519 | + (21)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6L 2002-2005</span></strong> 2002年至2005年的每月的最后一个星期五上午10:15触发 | ||
520 | + </p> | ||
521 | + <p style="margin: 10px auto; padding: 0px;"> | ||
522 | + (22)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6#3</span></strong> 每月的第三个星期五上午10:15触发 | ||
523 | + </p> | ||
524 | + <p style="margin: 10px auto; padding: 0px;"> | ||
525 | + | ||
526 | + </p> | ||
527 | + </div> | ||
528 | +</script> | ||
529 | + | ||
530 | +<!--资源名称--> | ||
531 | +<script type="text/html" id="resindex_resName"> | ||
532 | + <div> | ||
533 | + <span data-zymc="{{ d.resId }}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}" data-resTypeName="{{ d.resTypeName }}" data-admin="{{ d.admin }}" data-adminname="{{ d.adminName }}" data-pingenable="{{d.pingEnable}}" data-manageIp="{{d.manageIp}}" data-collProtocol="{{d.collProtocol}}" data-provider="{{d.provider}}" data-state="{{d.state}}" class="layui-table-link">{{ d.resName }}</span> | ||
534 | + {{# if (d.favId == null) { }} | ||
535 | + <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹" style="font-size: 14px"></a> | ||
536 | + {{# } else { }} | ||
537 | + <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a> | ||
538 | + {{# } }} | ||
539 | + <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i class="iconfont"></i></a> | ||
540 | + {{# if (d.resCategory == 'share' && d.hardwareFlag && d.hardwareFlag.endsWith("Y")) { }} | ||
541 | + <a class="layui-icon reslist-assets-details hide" data-resid="{{d.resId}}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-ip="{{ d.ip }}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="资产配置信息"><i class="iconfont"></i></a> | ||
542 | + {{# } }} | ||
543 | + </div> | ||
544 | +</script> | ||
545 | + | ||
546 | +<!--最大文件系统使用率--> | ||
547 | +<script type="text/html" id="fileUseRateTpl"> | ||
548 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI449F5365" data-flag="fs" data-name="{{d.os=='windows'?'磁盘使用情况':'文件系统使用情况'}}" data-showtype="bar" data-barkpiid="{{d.os=='windows'?'KPI29D42042,KPI1988842F':'KPIA91F44E7,KPI98306224'}}" data-barxaxis="{{d.os=='windows'?'KPI9D22EAB6':'KPI7AC1664E'}}" | ||
549 | + data-warning="0" data-ident="1" data-trend="0"> | ||
550 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
551 | + <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_bizfileName" lay-tips="{{d.fileSysUseName}}" | ||
552 | + data-id="{{d.resId}}_bizfileName" data-message="{{d.fileSysUseName}}"><span style="color: #000000;">{{d.fileSysUseName}}</span> | ||
553 | + </div> | ||
554 | + <div class="layui-progress-bar layui-bg-green {{ d.fileSysUseRate >= 98 ? 'layui-bg-red' : (d.fileSysUseRate >= 95 ? 'layui-bg-orange' : (d.fileSysUseRate >= 90 ? 'layui-bg-blue':'')) }}" | ||
555 | + lay-percent="{{ d.fileSysUseRate }}%" | ||
556 | + style="width: {{ d.fileSysUseRate }}%;"> | ||
557 | + </div> | ||
558 | + </div> | ||
559 | + <span class="layui-progress-text">{{ (d.fileSysUseRate == null || d.fileSysUseRate == '' || d.fileSysUseRate === '未知' || d.fileSysUseRate === '无' )? '0%' : d.fileSysUseRate +'%' }}</span> | ||
560 | + </div> | ||
561 | +</script> | ||
562 | +<!--CPU使用率--> | ||
563 | +<script type="text/html" id="cpuRateTpl"> | ||
564 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI7054BC34" data-flag="cpu" data-name="CPU使用率" | ||
565 | + data-warning="0" data-ident="1" data-trend="1"> | ||
566 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
567 | + <div class="layui-progress-bar layui-bg-green {{ d.cpuRate >= 95 ? 'layui-bg-red' : (d.cpuRate >= 90 ? 'layui-bg-orange' : (d.cpuRate >= 80 ? 'layui-bg-blue':''))}}" | ||
568 | + lay-percent="{{ d.cpuRate }}%" | ||
569 | + style="width: {{ d.cpuRate }}%;"> | ||
570 | + </div> | ||
571 | + </div> | ||
572 | + <span class="layui-progress-text">{{ (d.cpuRate == null || d.cpuRate == '' || d.cpuRate === '未知' || d.cpuRate === '无' )? '0%' : d.cpuRate +'%' }}</span> | ||
573 | + </div> | ||
574 | +</script> | ||
575 | +<!--内存使用率--> | ||
576 | +<script type="text/html" id="memoryRateTpl"> | ||
577 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI31CB8D97" data-flag="mem" data-name="内存使用率" | ||
578 | + data-warning="1" data-ident="1" data-trend="1"> | ||
579 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
580 | + <div class="layui-progress-bar layui-bg-green {{ d.memoryRate >= 95 ? 'layui-bg-red' : (d.memoryRate >= 90 ? 'layui-bg-orange' : (d.memoryRate >= 80 ? 'layui-bg-blue':''))}}" | ||
581 | + lay-percent="{{ d.memoryRate }}%" | ||
582 | + style="width: {{ d.memoryRate }}%;"> | ||
583 | + </div> | ||
584 | + </div> | ||
585 | + <span class="layui-progress-text">{{ (d.memoryRate == null || d.memoryRate == '' || d.memoryRate === '未知' || d.memoryRate === '无' )? '0%' : d.memoryRate +'%' }}</span> | ||
586 | + </div> | ||
587 | +</script> | ||
588 | +<!--虚拟内存使用率--> | ||
589 | +<script type="text/html" id="vmmemoryRateTpl"> | ||
590 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem" data-name="虚拟内存使用率" | ||
591 | + data-warning="1" data-ident="1" data-trend="1"> | ||
592 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
593 | + <div class="layui-progress-bar layui-bg-green {{ d.vmmemoryUseRate >= 95 ? 'layui-bg-red' : (d.vmmemoryUseRate >= 90 ? 'layui-bg-orange' : (d.vmmemoryUseRate >= 80 ? 'layui-bg-blue':''))}}" | ||
594 | + lay-percent="{{ d.vmmemoryUseRate }}%" | ||
595 | + style="width: {{ d.vmmemoryUseRate }}%;"> | ||
596 | + </div> | ||
597 | + </div> | ||
598 | + <span class="layui-progress-text">{{ (d.vmmemoryUseRate == null || d.vmmemoryUseRate == '' || d.vmmemoryUseRate === '未知' || d.vmmemoryUseRate === '无' )? '0%' : d.vmmemoryUseRate +'%' }}</span> | ||
599 | + </div> | ||
600 | +</script> | ||
601 | +<!--会话百分比--> | ||
602 | +<script type="text/html" id="sessionRateTpl"> | ||
603 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI18F18278" data-name="活动会话百分比" data-flag="session" | ||
604 | + data-warning="0" data-ident="1" data-trend="0"> | ||
605 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
606 | + <div class="layui-progress-bar layui-bg-green {{ d.sessionRate >= 80 ? 'layui-bg-red' : (d.sessionRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
607 | + lay-percent="{{ d.sessionRate }}%" | ||
608 | + style="width: {{ d.sessionRate }}%;"> | ||
609 | + </div> | ||
610 | + </div> | ||
611 | + <span class="layui-progress-text">{{ (d.sessionRate == null || d.sessionRate == '' || d.sessionRate === '未知' || d.sessionRate === '无' )? '0%' : d.sessionRate +'%' }}</span> | ||
612 | + </div> | ||
613 | +</script> | ||
614 | +<!--CPU分配率--> | ||
615 | +<script type="text/html" id="cpuSetRateTpl"> | ||
616 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPIBFA3F5CD" data-name="CPU分配率" data-flag="cpu" | ||
617 | + data-warning="0" data-ident="1" data-trend="0"> | ||
618 | + {{# | ||
619 | + d.cpuSetRate = parseFloat(d.cpuSetRate).toFixed(2); | ||
620 | + }} | ||
621 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
622 | + <div class="layui-progress-bar layui-bg-green {{ d.cpuSetRate >= 80 ? 'layui-bg-red' : (d.cpuSetRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
623 | + lay-percent="{{ d.cpuSetRate }}%" | ||
624 | + style="width: {{ d.cpuSetRate }}%;"> | ||
625 | + </div> | ||
626 | + </div> | ||
627 | + <span class="layui-progress-text">{{ (d.cpuSetRate == null || d.cpuSetRate == '' || d.cpuSetRate === '未知' || d.cpuSetRate === '无' )? '0%' : d.cpuSetRate +'%' }}</span> | ||
628 | + </div> | ||
629 | +</script> | ||
630 | +<!--内存分配率--> | ||
631 | +<script type="text/html" id="memorySetRateTpl"> | ||
632 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPIC40A80AC" data-name="内存分配率" data-flag="mem" | ||
633 | + data-warning="0" data-ident="1" data-trend="0"> | ||
634 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
635 | + <div class="layui-progress-bar layui-bg-green {{ d.memorySetRate >= 80 ? 'layui-bg-red' : (d.memorySetRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
636 | + lay-percent="{{ d.memorySetRate }}%" | ||
637 | + style="width: {{ d.memorySetRate }}%;"> | ||
638 | + </div> | ||
639 | + </div> | ||
640 | + <span class="layui-progress-text">{{ (d.memorySetRate == null || d.memorySetRate == '' || d.memorySetRate === '未知' || d.memorySetRate === '无' )? '0%' : d.memorySetRate +'%' }}</span> | ||
641 | + </div> | ||
642 | +</script> | ||
643 | +<!--存储分配率--> | ||
644 | +<script type="text/html" id="storageSetRateTpl"> | ||
645 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI46BAA9BE" data-name="存储分配率" data-flag="storage" | ||
646 | + data-warning="0" data-ident="1" data-trend="0"> | ||
647 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
648 | + <div class="layui-progress-bar layui-bg-green {{ d.storageSetRate >= 80 ? 'layui-bg-red' : (d.storageSetRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
649 | + lay-percent="{{ d.storageSetRate }}%" | ||
650 | + style="width: {{ d.storageSetRate }}%;"> | ||
651 | + </div> | ||
652 | + </div> | ||
653 | + <span class="layui-progress-text">{{ (d.storageSetRate == null || d.storageSetRate == '' || d.storageSetRate === '未知' || d.storageSetRate === '无' )? '0%' : d.storageSetRate +'%' }}</span> | ||
654 | + </div> | ||
655 | +</script> | ||
656 | +<!--连接状态--> | ||
657 | +<script type="text/html" id="linkStateTpl"> | ||
658 | +{{# | ||
659 | + var linkStateHtml = ''; | ||
660 | + var linkStateTips = '无连接信息'; | ||
661 | + if(d.linkStateList && d.linkStateList.length) { | ||
662 | + linkStateTips = ''; | ||
663 | + if(d.linkStateList.length == 1) { | ||
664 | + var linkState = d.linkStateList[0]; | ||
665 | + linkStateTips = `${linkState.protocol}: ${linkState.state}`; | ||
666 | + if(linkState.state.indexOf('成功') !== -1) { | ||
667 | + linkStateHtml = '<button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>'; | ||
668 | + } else { | ||
669 | + linkStateHtml = `<button type="button" | ||
670 | + id="${d.resId}_bizdanger" | ||
671 | + data-message="${d.message}" | ||
672 | + data-state="${d.state}" | ||
673 | + data-id="${d.resId}_bizdanger" | ||
674 | + class="layui-btn showTip layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
675 | + 失败 | ||
676 | + </button>`; | ||
677 | + } | ||
678 | + } else { | ||
679 | + linkStateTips += `<ul class='ul-link-state-tips'>`; | ||
680 | + layui.each(d.linkStateList, function(index, value) { | ||
681 | + if(value.state.indexOf('成功') !== -1) { | ||
682 | + linkStateTips += `<li class='li-link-state-tips-green'>${value.protocol}: ${value.state}</li>`; | ||
683 | + linkStateHtml += '<span class="layui-badge-dot layui-bg-green"></span>'; | ||
684 | + } else { | ||
685 | + linkStateTips += `<li class='li-link-state-tips-red'>${value.protocol}: ${value.state}</li>`; | ||
686 | + linkStateHtml += '<span class="layui-badge-dot layui-bg-red"></span>'; | ||
687 | + } | ||
688 | + }); | ||
689 | + linkStateTips += '</ul>'; | ||
690 | + } | ||
691 | + } | ||
692 | +}} | ||
693 | + <div class="div-link-state-list" lay-tips="{{linkStateTips}}"> | ||
694 | + {{linkStateHtml}} | ||
695 | + </div> | ||
696 | +</script> | ||
697 | +<!--详情页面连接状态--> | ||
698 | +<script type="text/html" id="linkStateDetailTpl"> | ||
699 | +{{# | ||
700 | + var linkStateHtml = ''; | ||
701 | + var linkStateTips = '无连接信息'; | ||
702 | + if(d.linkStateList && d.linkStateList.length) { | ||
703 | + linkStateTips = ''; | ||
704 | + if(d.linkStateList.length == 1) { | ||
705 | + var linkState = d.linkStateList[0]; | ||
706 | + linkStateTips = `${linkState.protocol}: ${linkState.state}`; | ||
707 | + if(linkState.state.indexOf('成功') !== -1) { | ||
708 | + linkStateHtml = `<span class="span-green">${linkState.state}</span>`; | ||
709 | + } else { | ||
710 | + linkStateHtml = `<span class="span-red">${linkState.state}</span>`; | ||
711 | + } | ||
712 | + } else { | ||
713 | + linkStateTips += `<ul class='ul-link-state-tips'>`; | ||
714 | + layui.each(d.linkStateList, function(index, value) { | ||
715 | + if(value.state.indexOf('成功') !== -1) { | ||
716 | + linkStateTips += `<li class='li-link-state-tips-green'>${value.protocol}: ${value.state}</li>`; | ||
717 | + linkStateHtml += '<div class="layui-badge-dot layui-bg-green"></div>'; | ||
718 | + } else { | ||
719 | + linkStateTips += `<li class='li-link-state-tips-red'>${value.protocol}: ${value.state}</li>`; | ||
720 | + linkStateHtml += '<div class="layui-badge-dot layui-bg-red"></div>'; | ||
721 | + } | ||
722 | + }); | ||
723 | + linkStateTips += '</ul>'; | ||
724 | + } | ||
725 | + } | ||
726 | +}} | ||
727 | + <div class="div-link-state-list" lay-tips="{{linkStateTips}}"> | ||
728 | + {{linkStateHtml}} | ||
729 | + </div> | ||
730 | +</script> | ||
731 | +<!--电源状态--> | ||
732 | +<script type="text/html" id="powerStateTpl"> | ||
733 | + {{# if(d.powerState != null && d.powerState == 'poweredOn'){ }} | ||
734 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"> | ||
735 | + 开机 | ||
736 | + </button> | ||
737 | + {{# }else if(d.powerState != null && d.powerState == 'poweredOff'){ }} | ||
738 | + <button type="button" class="layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
739 | + 关机 | ||
740 | + </button> | ||
741 | + {{# }else if(d.powerState != null && d.powerState == 'standBy'){ }} | ||
742 | + <button type="button" class="layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
743 | + 待机 | ||
744 | + </button> | ||
745 | + {{# }else if(d.powerState != null && d.powerState == 'unknown'){ }} | ||
746 | + <button type="button" class="layui-btn layui-bg-gray layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
747 | + 未知 | ||
748 | + </button> | ||
749 | + {{# }else{ }} | ||
750 | + <button type="button" | ||
751 | + class="layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click">{{ | ||
752 | + '未监控'}} | ||
753 | + </button> | ||
754 | + {{# }}} | ||
755 | +</script> | ||
756 | +<!--健康状态--> | ||
757 | +<script type="text/html" id="healthTpl"> | ||
758 | + {{# if(d.state != 'new'){ }} | ||
759 | + {{# if(d.health === '1'){ }} | ||
760 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">中 | ||
761 | + </button> | ||
762 | + {{# } }} | ||
763 | + {{# if(d.health === '2'){ }} | ||
764 | + <button type="button" class="layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">良 | ||
765 | + </button> | ||
766 | + {{# } }} | ||
767 | + {{# if(d.health === '3'){ }} | ||
768 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">优</button> | ||
769 | + {{# } }} | ||
770 | + {{# } }} | ||
771 | +</script> | ||
772 | +<!--主机状态--> | ||
773 | +<script type="text/html" id="hostStateTpl"> | ||
774 | + {{# if(d.hostState != null && d.hostState == 'connected'){ }} | ||
775 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"> | ||
776 | + 已连接 | ||
777 | + </button> | ||
778 | + {{# }else if(d.hostState != null && d.hostState == 'notResponding'){ }} | ||
779 | + <button type="button" class="layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
780 | + 未响应 | ||
781 | + </button> | ||
782 | + {{# }else if(d.hostState != null && d.hostState == 'disconnected'){ }} | ||
783 | + <button type="button" class="layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
784 | + 断开连接 | ||
785 | + </button> | ||
786 | + {{# }else{ }} | ||
787 | + <button type="button" | ||
788 | + class="layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click">{{ | ||
789 | + '未监控'}} | ||
790 | + </button> | ||
791 | + {{# }}} | ||
792 | +</script> | ||
793 | +<!--ping状态--> | ||
794 | +<script type="text/html" id="pingStatusTpl"> | ||
795 | + {{# if(d.pingStatus === '正常'){ }} | ||
796 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常 | ||
797 | + </button> | ||
798 | + {{# }else{ }} | ||
799 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button> | ||
800 | + {{# } }} | ||
801 | +</script> | ||
802 | +<!--资源状态--> | ||
803 | +<script type="text/html" id="resStateTpl"> | ||
804 | + {{# | ||
805 | + switch (d.state) { | ||
806 | + case "new" : | ||
807 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-blue layui-btn-radius layui-btn-xs p-0-15 cant-click">未监控</button> {{# | ||
808 | + break; | ||
809 | + case "monitor" : | ||
810 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click">监控中</button> {{# | ||
811 | + break; | ||
812 | + case "stop" : | ||
813 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">暂停监控</button> {{# | ||
814 | + break; | ||
815 | + case "alarmIgnore" : | ||
816 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">告警压制中</button> {{# | ||
817 | + break; | ||
818 | + } | ||
819 | + }} | ||
820 | +</script> | ||
821 | +<!--判断树结构有无子节点--> | ||
822 | +<script type="text/html" id="bizResNameTpl"> | ||
823 | + <div> | ||
824 | + {{# if(d.resType == 'MIDDLEWARE_WEBLOGIC' && (d.parentId == null || d.parentId == '') ){ }} | ||
825 | + <span data-childrennum="{{d.childrenNum}}">{{d.resName}}</span> | ||
826 | + {{# }else{ }} | ||
827 | + <span data-zymc="{{d.resId}}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-ip="{{d.ip}}" data-childrennum="{{d.childrenNum}}" data-resTypeName="{{d.resTypeName}}" data-admin="{{d.admin}}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{d.resName}}</span> | ||
828 | + {{# } }} | ||
829 | + {{# if (d.favId == null) { }} | ||
830 | + <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹" style="font-size: 14px"></a> | ||
831 | + {{# } else { }} | ||
832 | + <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a> | ||
833 | + {{# } }} | ||
834 | + <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i class="iconfont"></i></a> | ||
835 | + </div> | ||
836 | +</script> | ||
837 | +<!--表空间使用率(最大)--> | ||
838 | +<script type="text/html" id="tableSpaceUseRateTpl"> | ||
839 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI64B1610A" data-name="表空间使用率" data-showtype="bar" data-barkpiid="KPI2EC3F15A,KPI6AD9EBD6" data-barxaxis="KPI4332BAC8" | ||
840 | + data-warning="0" data-ident="1" data-trend="0" data-flag="tps" > | ||
841 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
842 | + <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_bizTableSpaceUseRate" class="showTipsName" data-id="{{d.resId}}_bizTableSpaceUseRate" data-message="{{d.tableSpaceUseName}}"><span style="color: #000000;" >{{d.tableSpaceUseName}}</span></div> | ||
843 | + <div class="layui-progress-bar layui-bg-green {{ d.tableSpaceUseRate >= 80 ? 'layui-bg-red' : (d.tableSpaceUseRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
844 | + lay-percent="{{ d.tableSpaceUseRate }}%" | ||
845 | + style="width: {{ d.tableSpaceUseRate }}%;"> | ||
846 | + </div> | ||
847 | + </div> | ||
848 | + <span class="layui-progress-text">{{ (d.tableSpaceUseRate == null || d.tableSpaceUseRate == '' || d.tableSpaceUseRate === '未知' || d.tableSpaceUseRate === '无' )? '0%' : d.tableSpaceUseRate +'%' }}</span> | ||
849 | + </div> | ||
850 | +</script> | ||
851 | +<!--ASM磁盘空间使用率--> | ||
852 | +<script type="text/html" id="asmDiskUsedRateTpl"> | ||
853 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI922F8FF7" data-name="ASM磁盘空间使用率" data-showtype="bar" data-barkpiid="KPI4D710FDA,KPI811E751E" data-barxaxis="KPI50267025" | ||
854 | + data-warning="0" data-ident="1" data-trend="0" data-flag="asm" > | ||
855 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
856 | + <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_asmDiskUsedRate" class="showTipsName" data-id="{{d.resId}}_asmDiskUsedRate" data-message="{{d.asmDiskUsedRate}}"><span style="color: #000000;" >{{d.asmDiskUsedRateName}}</span></div> | ||
857 | + <div class="layui-progress-bar layui-bg-green {{ d.asmDiskUsedRate >= 80 ? 'layui-bg-red' : (d.asmDiskUsedRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
858 | + lay-percent="{{ d.asmDiskUsedRate }}%" | ||
859 | + style="width: {{ d.asmDiskUsedRate }}%;"> | ||
860 | + </div> | ||
861 | + </div> | ||
862 | + <span class="layui-progress-text">{{ (d.asmDiskUsedRate == null || d.asmDiskUsedRate == '' || d.asmDiskUsedRate === '未知' || d.asmDiskUsedRate === '无' )? '0%' : d.asmDiskUsedRate +'%' }}</span> | ||
863 | + </div> | ||
864 | +</script> | ||
865 | +<!--weblogic定制表头--> | ||
866 | +<script type="text/html" id="webLogicResNameTpl"> | ||
867 | + <div> | ||
868 | + {{# if(d.resType == 'MIDDLEWARE_WEBLOGIC' && (d.parentId == null || d.parentId == '') ){ }} | ||
869 | + <span data-childrennum="{{d.childrenNum}}">{{d.resName}}</span> | ||
870 | + {{# }else{ }} | ||
871 | + <span data-zymc="{{ d.resId }}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}" data-resTypeName="{{ d.resTypeName }}" data-admin="{{ d.admin }}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{ d.resName }}</span> | ||
872 | + {{# } }} | ||
873 | + {{# if (d.favId == null) { }} | ||
874 | + <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹" style="font-size: 14px"></a> | ||
875 | + {{# } else { }} | ||
876 | + <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a> | ||
877 | + {{# } }} | ||
878 | + <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i class="iconfont"></i></a> | ||
879 | + </div> | ||
880 | +</script> | ||
881 | +<script type="text/html" id="weblogicIpTpl"> | ||
882 | + <div>{{d.ip?d.ip:""}}</div> | ||
883 | +</script> | ||
884 | +<script type="text/html" id="weblogicListenAddrTpl"> | ||
885 | + <div>{{d.listenAddr?d.listenAddr:""}}</div> | ||
886 | +</script> | ||
887 | +<!--cup核心数--> | ||
888 | +<script type="text/html" id="cpuCoresTpl"> | ||
889 | + <div>{{d.cpuCores?(d.cpuCores+"核"):""}}</div> | ||
890 | +</script> | ||
891 | +<!--cup个数--> | ||
892 | +<script type="text/html" id="cpuNumTpl"> | ||
893 | + <div>{{d.cpuNum?(d.cpuNum+"个"):""}}</div> | ||
894 | +</script> |
1 | +<!DOCTYPE html> | ||
2 | +<html> | ||
3 | +<head> | ||
4 | + <meta charset="utf-8"> | ||
5 | + <title>综合监控管理平台</title> | ||
6 | + <link rel="shortcut icon" href="../src/style/res/shui.png"> | ||
7 | + <meta name="renderer" content="webkit"> | ||
8 | + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | ||
9 | + <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> | ||
10 | + <link rel="stylesheet" href="/start/layui/css/layui.css" media="all"> | ||
11 | + <script> | ||
12 | + /^http(s*):\/\//.test(location.href) || alert('请先部署到 localhost 下再访问'); | ||
13 | + </script> | ||
14 | +</head> | ||
15 | +<body> | ||
16 | + <div id="LAY_app"></div> | ||
17 | + <script src="/start/layui/layui.js"></script> | ||
18 | + <script> | ||
19 | + layui.use(['jquery'], function () { | ||
20 | + var $ = layui.jquery; | ||
21 | + // 读取配置文件 | ||
22 | + $.when( | ||
23 | + $.ajax({ | ||
24 | + url: '/config/getConfig', | ||
25 | + data: { | ||
26 | + configName: 'url' | ||
27 | + }, | ||
28 | + async: false | ||
29 | + }),$.ajax({ | ||
30 | + url: '/config/getConfig', | ||
31 | + data: { | ||
32 | + configName: 'config.audio' | ||
33 | + }, | ||
34 | + }), | ||
35 | + ).done(function (res1,res2) { | ||
36 | + sessionStorage.setItem('domainName', res1[0].gateway); | ||
37 | + sessionStorage.setItem('domainInspectionURI', res1[0].inspection_web); | ||
38 | + sessionStorage.setItem('domainAssetsManage', res1[0].assetsweb); | ||
39 | + sessionStorage.setItem('graphEditorOrigin', res1[0].mxgraph_editor); | ||
40 | + sessionStorage.setItem('tingyun', res1[0].tingyun); | ||
41 | + sessionStorage.setItem('bigScreen', res1[0].bigScreen); | ||
42 | + sessionStorage.setItem('ythView', res1[0].ythView); | ||
43 | + sessionStorage.setItem('workflow', res1[0].workflow); | ||
44 | + sessionStorage.setItem('mp3', res2[0].mp3); | ||
45 | + sessionStorage.setItem('jimuReport', res1[0].jimuReport); | ||
46 | + }) | ||
47 | + }); | ||
48 | + layui.config({ | ||
49 | + base: '../src/' //指定 layuiAdmin 项目路径,本地开发用 src,线上用 dist | ||
50 | +// ,version: '1.2.1'//运行环境用个固定版本号 | ||
51 | + ,version: new Date().getTime()//本地开发环境,避免改动后的文件未及时生效,所以用时间戳作为版本 | ||
52 | + }).use('index'); | ||
53 | + </script> | ||
54 | +</body> | ||
55 | +</html> | ||
56 | + | ||
57 | + |
@@ -5,149 +5,86 @@ export default { | @@ -5,149 +5,86 @@ export default { | ||
5 | data() { | 5 | data() { |
6 | return {} | 6 | return {} |
7 | }, | 7 | }, |
8 | - setup() { | ||
9 | - let height = Vue.ref(window.innerHeight - 130); | 8 | + props: { |
9 | + // 当前节点 | ||
10 | + treeNode: { | ||
11 | + type: Object, | ||
12 | + default: {} | ||
13 | + }, | ||
14 | + // 当前节点的上级节点 | ||
15 | + parentNode: { | ||
16 | + type: Object, | ||
17 | + default: {} | ||
18 | + }, | ||
19 | + // 项目id | ||
20 | + projectId: { | ||
21 | + type: String, | ||
22 | + default: '' | ||
23 | + }, | ||
24 | + // 文件类型 | ||
25 | + docType: { | ||
26 | + type: String, | ||
27 | + default: '' | ||
28 | + }, | ||
29 | + }, | ||
30 | + setup(props, {attrs, slots, emit}) { | ||
10 | 31 | ||
11 | const {proxy} = Vue.getCurrentInstance(); | 32 | const {proxy} = Vue.getCurrentInstance(); |
33 | + let docIds = Vue.ref([]); | ||
34 | + let initFlg = Vue.ref(false); | ||
12 | 35 | ||
13 | - | ||
14 | - let columns = Vue.ref([ | ||
15 | - { | ||
16 | - prop: 'fileName', | ||
17 | - label: '年度', | ||
18 | - sortable: true, | ||
19 | - align: 'left', | ||
20 | - render: function (row) { | ||
21 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
22 | - } | ||
23 | - }, | ||
24 | - { | ||
25 | - prop: 'm1', | ||
26 | - label: '1月', | ||
27 | - sortable: true, | ||
28 | - align: 'left', | ||
29 | - render: function (row) { | ||
30 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
31 | - } | ||
32 | - }, | ||
33 | - { | ||
34 | - prop: 'm2', | ||
35 | - label: '2月', | ||
36 | - sortable: true, | ||
37 | - align: 'left', | ||
38 | - render: function (row) { | ||
39 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
40 | - } | ||
41 | - }, | ||
42 | - { | ||
43 | - prop: 'm3', | ||
44 | - label: '3月', | ||
45 | - sortable: true, | ||
46 | - align: 'left', | ||
47 | - render: function (row) { | ||
48 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
49 | - } | ||
50 | - }, | ||
51 | - { | ||
52 | - prop: 'm4', | ||
53 | - label: '4月', | ||
54 | - sortable: true, | ||
55 | - align: 'left', | ||
56 | - render: function (row) { | ||
57 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
58 | - } | ||
59 | - }, | ||
60 | - { | ||
61 | - prop: 'm5', | ||
62 | - label: '5月', | ||
63 | - sortable: true, | ||
64 | - align: 'left', | ||
65 | - render: function (row) { | ||
66 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
67 | - } | ||
68 | - }, | ||
69 | - { | ||
70 | - prop: 'm6', | ||
71 | - label: '6月', | ||
72 | - sortable: true, | ||
73 | - align: 'left', | ||
74 | - render: function (row) { | ||
75 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
76 | - } | ||
77 | - }, | ||
78 | - { | ||
79 | - prop: 'm7', | ||
80 | - label: '7月', | ||
81 | - sortable: true, | ||
82 | - align: 'left', | ||
83 | - render: function (row) { | ||
84 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
85 | - } | ||
86 | - }, | ||
87 | - { | ||
88 | - prop: 'm8', | ||
89 | - label: '8月', | ||
90 | - sortable: true, | ||
91 | - align: 'left', | ||
92 | - render: function (row) { | ||
93 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
94 | - } | ||
95 | - }, | ||
96 | - { | ||
97 | - prop: 'm9', | ||
98 | - label: '9月', | ||
99 | - sortable: true, | ||
100 | - align: 'left', | ||
101 | - render: function (row) { | ||
102 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
103 | - } | ||
104 | - }, | ||
105 | - { | ||
106 | - prop: 'm110', | ||
107 | - label: '10月', | ||
108 | - sortable: true, | ||
109 | - align: 'left', | ||
110 | - render: function (row) { | ||
111 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
112 | - } | ||
113 | - }, | ||
114 | - { | ||
115 | - prop: 'm11', | ||
116 | - label: '11月', | ||
117 | - sortable: true, | ||
118 | - align: 'left', | ||
119 | - render: function (row) { | ||
120 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
121 | - } | ||
122 | - }, | ||
123 | - { | ||
124 | - prop: 'm12', | ||
125 | - label: '12月', | ||
126 | - sortable: true, | ||
127 | - align: 'left', | ||
128 | - render: function (row) { | ||
129 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
130 | - } | 36 | + let init = () => { |
37 | + // 查询绑定的文件列表 | ||
38 | + let params = { | ||
39 | + opsId: props.projectId, | ||
40 | + personId: props.parentNode.id, | ||
41 | + code: props.treeNode.map.nodeType.code | ||
131 | } | 42 | } |
132 | - ]); | 43 | + proxy.$http.get('/api-web/bOpsFile/search', params, function (res) { |
44 | + if (res && res.code == 0 && res.data) { | ||
133 | 45 | ||
134 | - let dataList = Vue.ref([]); | ||
135 | - let currentPage = Vue.ref(1); | ||
136 | - let total = Vue.ref(0); | ||
137 | - | ||
138 | - // 获取表格树 | ||
139 | - let getPage = () => { | 46 | + let ids = res.data.map(function (v) { |
47 | + return v.id; | ||
48 | + }); | ||
49 | + docIds.value = ids; | ||
50 | + } | ||
51 | + initFlg.value = true; | ||
52 | + }) | ||
53 | + } | ||
140 | 54 | ||
55 | + let saveOpsLog = ({document, fileInfo}) => { | ||
56 | + let params = { | ||
57 | + id: document.id, | ||
58 | + personId: props.parentNode.id, | ||
59 | + username: document.createUser, | ||
60 | + opsId: props.projectId, | ||
61 | + name: document.name, | ||
62 | + fileUrl: document.localPath, | ||
63 | + code: props.treeNode.map.nodeType.code | ||
64 | + }; | ||
65 | + proxy.$http.post('/api-web/bOpsFile/fileSynchronization', params, function (res) { | ||
66 | + if (res && res.code == 0) { | ||
67 | + // proxy.$global.showMsg(""); | ||
68 | + console.log('执行回调成功', res) | ||
69 | + } | ||
70 | + }); | ||
141 | } | 71 | } |
142 | 72 | ||
73 | + // 监听编辑状态 | ||
74 | + Vue.watch(() => props.treeNode, (newValue, oldVlaue) => { | ||
75 | + initFlg.value = false; | ||
76 | + init(); | ||
77 | + }); | ||
78 | + | ||
79 | + // 挂载完 | ||
80 | + Vue.onMounted(() => { | ||
81 | + init(); | ||
82 | + }) | ||
143 | 83 | ||
144 | return { | 84 | return { |
145 | - columns, | ||
146 | - height, | ||
147 | - dataList, | ||
148 | - currentPage, | ||
149 | - total, | ||
150 | - getPage | 85 | + docIds, |
86 | + saveOpsLog, | ||
87 | + initFlg | ||
151 | } | 88 | } |
152 | } | 89 | } |
153 | } | 90 | } |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | <!-- 人员信息总汇--> | 3 | <!-- 人员信息总汇--> |
4 | <el-divider content-position="left">项目评价汇总</el-divider> | 4 | <el-divider content-position="left">项目评价汇总</el-divider> |
5 | <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" | 5 | <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" |
6 | - :showBorder="true" :currentPage="currentPage" :total="total" :loading="true" | ||
7 | - :showPage="true" :height="height - 54"></cm-table-page> | 6 | + :showBorder="true" :currentPage="currentPage" :total="total" :loading="false" |
7 | + :showPage="true" :height="(height - 54)/3"></cm-table-page> | ||
8 | </div> | 8 | </div> |
9 | </div> | 9 | </div> |
@@ -13,121 +13,82 @@ export default { | @@ -13,121 +13,82 @@ export default { | ||
13 | 13 | ||
14 | let columns = Vue.ref([ | 14 | let columns = Vue.ref([ |
15 | { | 15 | { |
16 | - prop: 'fileName', | 16 | + prop: 'opsYear', |
17 | label: '年度', | 17 | label: '年度', |
18 | sortable: true, | 18 | sortable: true, |
19 | - align: 'left', | ||
20 | - render: function (row) { | ||
21 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
22 | - } | 19 | + align: 'center', |
23 | }, | 20 | }, |
24 | { | 21 | { |
25 | - prop: 'm1', | 22 | + prop: 'month1', |
26 | label: '1月', | 23 | label: '1月', |
27 | sortable: true, | 24 | sortable: true, |
28 | - align: 'left', | ||
29 | - render: function (row) { | ||
30 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
31 | - } | 25 | + align: 'right', |
32 | }, | 26 | }, |
33 | { | 27 | { |
34 | - prop: 'm2', | 28 | + prop: 'month2', |
35 | label: '2月', | 29 | label: '2月', |
36 | sortable: true, | 30 | sortable: true, |
37 | - align: 'left', | ||
38 | - render: function (row) { | ||
39 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
40 | - } | 31 | + align: 'right', |
41 | }, | 32 | }, |
42 | { | 33 | { |
43 | - prop: 'm3', | 34 | + prop: 'month3', |
44 | label: '3月', | 35 | label: '3月', |
45 | sortable: true, | 36 | sortable: true, |
46 | - align: 'left', | ||
47 | - render: function (row) { | ||
48 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
49 | - } | 37 | + align: 'right', |
50 | }, | 38 | }, |
51 | { | 39 | { |
52 | - prop: 'm4', | 40 | + prop: 'month4', |
53 | label: '4月', | 41 | label: '4月', |
54 | sortable: true, | 42 | sortable: true, |
55 | - align: 'left', | ||
56 | - render: function (row) { | ||
57 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
58 | - } | 43 | + align: 'right', |
59 | }, | 44 | }, |
60 | { | 45 | { |
61 | - prop: 'm5', | 46 | + prop: 'month5', |
62 | label: '5月', | 47 | label: '5月', |
63 | sortable: true, | 48 | sortable: true, |
64 | - align: 'left', | ||
65 | - render: function (row) { | ||
66 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
67 | - } | 49 | + align: 'right', |
68 | }, | 50 | }, |
69 | { | 51 | { |
70 | - prop: 'm6', | 52 | + prop: 'month6', |
71 | label: '6月', | 53 | label: '6月', |
72 | sortable: true, | 54 | sortable: true, |
73 | - align: 'left', | ||
74 | - render: function (row) { | ||
75 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
76 | - } | 55 | + align: 'right', |
77 | }, | 56 | }, |
78 | { | 57 | { |
79 | - prop: 'm7', | 58 | + prop: 'month7', |
80 | label: '7月', | 59 | label: '7月', |
81 | sortable: true, | 60 | sortable: true, |
82 | - align: 'left', | ||
83 | - render: function (row) { | ||
84 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
85 | - } | 61 | + align: 'right', |
86 | }, | 62 | }, |
87 | { | 63 | { |
88 | - prop: 'm8', | 64 | + prop: 'month8', |
89 | label: '8月', | 65 | label: '8月', |
90 | sortable: true, | 66 | sortable: true, |
91 | - align: 'left', | ||
92 | - render: function (row) { | ||
93 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
94 | - } | 67 | + align: 'right', |
95 | }, | 68 | }, |
96 | { | 69 | { |
97 | - prop: 'm9', | 70 | + prop: 'month9', |
98 | label: '9月', | 71 | label: '9月', |
99 | sortable: true, | 72 | sortable: true, |
100 | - align: 'left', | ||
101 | - render: function (row) { | ||
102 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
103 | - } | 73 | + align: 'right', |
104 | }, | 74 | }, |
105 | { | 75 | { |
106 | - prop: 'm110', | 76 | + prop: 'month10', |
107 | label: '10月', | 77 | label: '10月', |
108 | sortable: true, | 78 | sortable: true, |
109 | - align: 'left', | ||
110 | - render: function (row) { | ||
111 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
112 | - } | 79 | + align: 'right', |
113 | }, | 80 | }, |
114 | { | 81 | { |
115 | - prop: 'm11', | 82 | + prop: 'month11', |
116 | label: '11月', | 83 | label: '11月', |
117 | sortable: true, | 84 | sortable: true, |
118 | - align: 'left', | ||
119 | - render: function (row) { | ||
120 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
121 | - } | 85 | + align: 'right', |
122 | }, | 86 | }, |
123 | { | 87 | { |
124 | - prop: 'm12', | 88 | + prop: 'month12', |
125 | label: '12月', | 89 | label: '12月', |
126 | sortable: true, | 90 | sortable: true, |
127 | - align: 'left', | ||
128 | - render: function (row) { | ||
129 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
130 | - } | 91 | + align: 'right', |
131 | } | 92 | } |
132 | ]); | 93 | ]); |
133 | 94 | ||
@@ -135,11 +96,24 @@ export default { | @@ -135,11 +96,24 @@ export default { | ||
135 | let currentPage = Vue.ref(1); | 96 | let currentPage = Vue.ref(1); |
136 | let total = Vue.ref(0); | 97 | let total = Vue.ref(0); |
137 | 98 | ||
138 | - // 获取表格树 | 99 | + // 获取表格数据 |
139 | let getPage = () => { | 100 | let getPage = () => { |
140 | - | 101 | + proxy.$http.post("/api-web/bOpsScore/scoreCollect", { |
102 | + "page":1, | ||
103 | + "limit":10, | ||
104 | + "projectId":"1" | ||
105 | + }, function (res) { | ||
106 | + if (res && res.data) { | ||
107 | + dataList.value = res.data; | ||
108 | + total.value = res.count; | ||
109 | + } | ||
110 | + }); | ||
141 | } | 111 | } |
142 | 112 | ||
113 | + // 挂载完 | ||
114 | + Vue.onMounted(() => { | ||
115 | + getPage(); | ||
116 | + }) | ||
143 | 117 | ||
144 | return { | 118 | return { |
145 | columns, | 119 | columns, |
1 | <div> | 1 | <div> |
2 | - <el-row> | ||
3 | - <el-col :span="12"> | ||
4 | - <div id="main" style="width: 500px;height:600px;"></div> | 2 | + <el-row :gutter="5"> |
3 | + <el-col :span="16" > | ||
4 | + <div id="main" :style="{'width':(width/3)*2 + 'px)','height' : height + 'px'}"></div> | ||
5 | </el-col> | 5 | </el-col> |
6 | - <el-col :span="12"> | ||
7 | - <div id="score" style="width: 600px;height:400px;"></div> | 6 | + <el-col :span="8" > |
7 | + <div id="score" :style="{'width':(width/3)+'px','height' : height + 'px'}"></div> | ||
8 | </el-col> | 8 | </el-col> |
9 | </el-row> | 9 | </el-row> |
10 | 10 | ||
11 | - <el-dialog | ||
12 | - v-model="dialogVisible" | ||
13 | - title="3月各项评分" | ||
14 | - width="60%" | ||
15 | - :before-close="handleClose" | ||
16 | - > | ||
17 | - <el-table border :data="tableData" stripe @cell-dblclick='handleCell' header-row-class-name="tbl-header-class" style="width: 100%;margin: 20px 0;"> | ||
18 | - <el-table-column prop="date" label="分类" align="center" min-width="100" /> | ||
19 | - <el-table-column prop="date" label="项目" align="center" min-width="100" /> | ||
20 | - <el-table-column prop="name" label="分值" align="center" min-width="100" /> | ||
21 | - <el-table-column prop="name" label="打分人" align="center" min-width="100"/> | ||
22 | - <el-table-column prop="name" label="得分" align="center" min-width="100"> | ||
23 | - <template #default="scope"> | ||
24 | - <el-input v-model="scope.row.name" style='width: 80px;'></el-input> | ||
25 | - </template> | ||
26 | - </el-table-column> | ||
27 | - <el-table-column prop="name" label="扣分原因" align="center" min-width="100"> | ||
28 | - <template #default="scope"> | ||
29 | - <el-input v-model="scope.row.name" style='width: 80px;'></el-input> | ||
30 | - </template> | ||
31 | - </el-table-column> | ||
32 | - </el-table> | ||
33 | - <template #footer> | ||
34 | - <span class="dialog-footer"> | ||
35 | - <el-button type="primary" size="small" @click="dialogVisible = false">确认</el-button> | ||
36 | - <el-button size="small"@click="dialogVisible = false">关闭</el-button> | ||
37 | - </span> | 11 | + <cm-dialog :title="title" width="60%" :showDialogVisible="dialogVisible" :showFooter="true" @hidedialog="closeDetail" :showOkBtn="false"> |
12 | + <template v-slot> | ||
13 | + <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" | ||
14 | + :showBorder="true" | ||
15 | + :showPage="false" :height="height - 100"></cm-table-page> | ||
38 | </template> | 16 | </template> |
39 | - </el-dialog> | 17 | + </cm-dialog> |
40 | 18 | ||
41 | </div> | 19 | </div> |
@@ -5,59 +5,196 @@ export default { | @@ -5,59 +5,196 @@ export default { | ||
5 | data() { | 5 | data() { |
6 | return {} | 6 | return {} |
7 | }, | 7 | }, |
8 | - setup() { | 8 | + props: { |
9 | + treeNode: { | ||
10 | + type: Object, | ||
11 | + default: {} | ||
12 | + }, | ||
13 | + parentNode: { | ||
14 | + type: Object, | ||
15 | + default: {} | ||
16 | + }, | ||
17 | + projectId: { | ||
18 | + type: String, | ||
19 | + default: '' | ||
20 | + }, | ||
21 | + key: { | ||
22 | + type: String, | ||
23 | + default: '' | ||
24 | + }, | ||
25 | + }, | ||
26 | + setup(props, {attrs, slots, emit}) { | ||
9 | let height = Vue.ref(window.innerHeight - 130); | 27 | let height = Vue.ref(window.innerHeight - 130); |
28 | + let width = Vue.ref(window.innerWidth * 0.6); | ||
29 | + let dialogVisible = Vue.ref(false); | ||
30 | + let title = Vue.ref(''); | ||
31 | + let dataList = Vue.ref([]); | ||
32 | + | ||
33 | + let columns = Vue.ref([{ | ||
34 | + prop: 'item', | ||
35 | + label: '分类', | ||
36 | + sortable: true, | ||
37 | + },{ | ||
38 | + prop: 'standardScore', | ||
39 | + label: '分值', | ||
40 | + sortable: true, | ||
41 | + },{ | ||
42 | + prop: 'score', | ||
43 | + label: '得分', | ||
44 | + sortable: true, | ||
45 | + },{ | ||
46 | + prop: 'rater', | ||
47 | + label: '打分人', | ||
48 | + sortable: true, | ||
49 | + },{ | ||
50 | + prop: 'deduction', | ||
51 | + label: '扣分原因', | ||
52 | + sortable: true, | ||
53 | + },]); | ||
10 | 54 | ||
11 | const {proxy} = Vue.getCurrentInstance(); | 55 | const {proxy} = Vue.getCurrentInstance(); |
12 | 56 | ||
57 | + // 柱状图 | ||
58 | + let main = () => { | ||
13 | 59 | ||
14 | - let columns = Vue.ref([ | ||
15 | - { | ||
16 | - prop: 'fileName', | ||
17 | - label: '日常资料', | ||
18 | - sortable: true, | ||
19 | - align: 'left', | ||
20 | - render: function (row) { | ||
21 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
22 | - } | ||
23 | - }, | ||
24 | - { | ||
25 | - prop: 'm1', | ||
26 | - label: '文档资料', | ||
27 | - sortable: true, | ||
28 | - align: 'left', | ||
29 | - render: function (row) { | ||
30 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
31 | - } | ||
32 | - }, | ||
33 | - { | ||
34 | - prop: 'm2', | ||
35 | - label: '项目保密协议', | ||
36 | - sortable: true, | ||
37 | - align: 'left', | ||
38 | - render: function (row) { | ||
39 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | 60 | + let params = { |
61 | + projectId: props.projectId, | ||
62 | + year: props.treeNode.label | ||
63 | + } | ||
64 | + proxy.$http.get("/api-web/bOpsScore/getScoreFindProjectIdYear", params, function (res) { | ||
65 | + if (res && res.map) { | ||
66 | + // 基于准备好的dom,初始化echarts实例 | ||
67 | + var myChart = echarts.init(document.getElementById('main')); | ||
68 | + | ||
69 | + // 指定图表的配置项和数据 | ||
70 | + var option = { | ||
71 | + xAxis: { | ||
72 | + data: res.map.x | ||
73 | + }, | ||
74 | + yAxis: {}, | ||
75 | + series: [{ | ||
76 | + name: '分值', | ||
77 | + type: 'bar', | ||
78 | + data: res.map.y, | ||
79 | + itemStyle: { //上方显示数值 | ||
80 | + normal: { | ||
81 | + label: { | ||
82 | + show: true, //开启显示 | ||
83 | + position: 'top', //在上方显示 | ||
84 | + textStyle: { //数值样式 | ||
85 | + fontSize: 12 | ||
86 | + } | ||
87 | + } | ||
88 | + } | ||
89 | + } | ||
90 | + }] | ||
91 | + }; | ||
92 | + // 使用刚指定的配置项和数据显示图表。 | ||
93 | + myChart.setOption(option); | ||
94 | + | ||
95 | + // 处理点击事件并且弹出数据名称 | ||
96 | + myChart.on('click', function (params) { | ||
97 | + console.log(params); | ||
98 | + detail(params); | ||
99 | + }); | ||
40 | } | 100 | } |
101 | + }, function () { | ||
102 | + proxy.$global.showMsg('没有查询到记录!', 'warning'); | ||
103 | + }); | ||
104 | + } | ||
105 | + | ||
106 | + let detail = (v) =>{ | ||
107 | + let name = v.name; | ||
108 | + let month = parseInt(name) | ||
109 | + title.value = name + "各项评分"; | ||
110 | + | ||
111 | + | ||
112 | + let params = { | ||
113 | + projectId: props.projectId, | ||
114 | + opsYear: props.treeNode.label, | ||
115 | + opsMonth:month | ||
41 | } | 116 | } |
42 | - ]); | 117 | + proxy.$http.post("/api-web/bOpsScoreDetails/page", params, function (res) { |
118 | + if(res && res.code == 0){ | ||
119 | + // console.log(res) | ||
120 | + closeDetail(true); | ||
121 | + dataList.value = res.data; | ||
122 | + } | ||
123 | + }); | ||
124 | + } | ||
43 | 125 | ||
44 | - let dataList = Vue.ref([]); | ||
45 | - let currentPage = Vue.ref(1); | ||
46 | - let total = Vue.ref(0); | 126 | + let closeDetail = (flg) => { |
127 | + dialogVisible.value = flg | ||
128 | + } | ||
47 | 129 | ||
48 | - // 获取表格树 | ||
49 | - let getPage = () => { | 130 | + // 柱状图 |
131 | + let score = () => { | ||
132 | + proxy.$http.post("/api-web/bOpsScore/scoreRatio", {}, function (res) { | ||
133 | + if (res && res.data) { | ||
134 | + let arr = []; | ||
135 | + res.data.forEach(item => { | ||
136 | + arr.push({value: item.ddicDesc, name: item.ddicName}) | ||
137 | + }) | ||
138 | + // 指定图表的配置项和数据 | ||
139 | + var option = { | ||
140 | + title: { | ||
141 | + text: '评分分类值占比' | ||
142 | + }, | ||
143 | + tooltip: { | ||
144 | + triggeer: 'item', | ||
145 | + formatter: '{b} : {c} ({d}%)' | ||
146 | + }, | ||
147 | + series: [ | ||
148 | + { | ||
149 | + name: '评分分类值占比', | ||
150 | + type: 'pie', // 设置图表类型为饼图 | ||
151 | + radius: '40%', // 饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。 | ||
152 | + center: ["45%", "50%"], | ||
153 | + data: arr, | ||
154 | + label: { | ||
155 | + normal: { | ||
156 | + show: true, | ||
157 | + formatter: '{b}:({d}%)' | ||
158 | + }, | ||
159 | + labelLine: {show: true} | ||
160 | + } | ||
161 | + } | ||
162 | + ], | ||
163 | + }; | ||
164 | + | ||
165 | + var myChart = echarts.init(document.getElementById('score')); | ||
166 | + // 使用刚指定的配置项和数据显示图表。 | ||
167 | + myChart.setOption(option); | ||
168 | + } else { | ||
169 | + proxy.$global.showMsg('暂无数据!'); | ||
170 | + } | ||
171 | + }); | ||
172 | + } | ||
50 | 173 | ||
174 | + let init =() =>{ | ||
175 | + main(); | ||
176 | + score(); | ||
51 | } | 177 | } |
52 | 178 | ||
179 | + // 监听编辑状态 | ||
180 | + Vue.watch(() => props.treeNode, (newValue, oldVlaue) => { | ||
181 | + init(); | ||
182 | + }); | ||
183 | + | ||
184 | + // 挂载完 | ||
185 | + Vue.onMounted(() => { | ||
186 | + init(); | ||
187 | + }) | ||
188 | + | ||
53 | 189 | ||
54 | return { | 190 | return { |
55 | - columns, | 191 | + width, |
56 | height, | 192 | height, |
193 | + title, | ||
194 | + dialogVisible, | ||
195 | + columns, | ||
57 | dataList, | 196 | dataList, |
58 | - currentPage, | ||
59 | - total, | ||
60 | - getPage | 197 | + closeDetail |
61 | } | 198 | } |
62 | } | 199 | } |
63 | } | 200 | } |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | <!-- 人员信息总汇--> | 3 | <!-- 人员信息总汇--> |
4 | <el-divider content-position="left">人员信息汇总</el-divider> | 4 | <el-divider content-position="left">人员信息汇总</el-divider> |
5 | <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" | 5 | <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" |
6 | - :showBorder="true" :currentPage="currentPage" :total="total" :loading="true" | ||
7 | - :showPage="true" :height="height - 54"></cm-table-page> | 6 | + :showBorder="true" :currentPage="currentPage" :total="total" :loading="false" |
7 | + :showPage="true" :height="(height - 54)/3"></cm-table-page> | ||
8 | </div> | 8 | </div> |
9 | </div> | 9 | </div> |
@@ -9,49 +9,89 @@ export default { | @@ -9,49 +9,89 @@ export default { | ||
9 | }, | 9 | }, |
10 | setup() { | 10 | setup() { |
11 | let height = Vue.ref(window.innerHeight - 130); | 11 | let height = Vue.ref(window.innerHeight - 130); |
12 | - | ||
13 | const {proxy} = Vue.getCurrentInstance(); | 12 | const {proxy} = Vue.getCurrentInstance(); |
14 | 13 | ||
15 | 14 | ||
16 | let columns = Vue.ref([{ | 15 | let columns = Vue.ref([{ |
17 | - prop: 'fileName', | 16 | + prop: 'nickname', |
18 | label: '运维人员姓名', | 17 | label: '运维人员姓名', |
19 | sortable: true, | 18 | sortable: true, |
20 | align: 'left', | 19 | align: 'left', |
21 | - render: function (row) { | ||
22 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | ||
23 | - } | ||
24 | }, { | 20 | }, { |
25 | - prop: 'createUser', | 21 | + prop: 'state', |
26 | label: '在职状态', | 22 | label: '在职状态', |
27 | sortable: true, | 23 | sortable: true, |
28 | - width: '120px' | 24 | + width: '120px', |
25 | + render: function (row) { | ||
26 | + if(row.state==1){ | ||
27 | + return "在职"; | ||
28 | + }else{ | ||
29 | + return "<span style='color: red'>离职</span>"; | ||
30 | + } | ||
31 | + } | ||
29 | }, { | 32 | }, { |
30 | - prop: 'createTime', | 33 | + prop: 'personalMessage', |
31 | label: '个人信息', | 34 | label: '个人信息', |
32 | sortable: true, | 35 | sortable: true, |
33 | - width: '180px' | 36 | + width: '180px', |
37 | + render: function (row) { | ||
38 | + if(row.personalMessage =="YES"){ | ||
39 | + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; | ||
40 | + }else{ | ||
41 | + return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; | ||
42 | + } | ||
43 | + } | ||
44 | + | ||
34 | }, { | 45 | }, { |
35 | - prop: 'createTime', | 46 | + prop: 'personalSecrecyBook', |
36 | label: '个人保密协议书', | 47 | label: '个人保密协议书', |
37 | sortable: true, | 48 | sortable: true, |
38 | - width: '180px' | 49 | + width: '180px', |
50 | + render: function (row) { | ||
51 | + if(row.personalSecrecyBook =="YES"){ | ||
52 | + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; | ||
53 | + }else{ | ||
54 | + return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; | ||
55 | + } | ||
56 | + } | ||
39 | }, { | 57 | }, { |
40 | - prop: 'createTime', | 58 | + prop: 'monthlySummary', |
41 | label: '月度总结', | 59 | label: '月度总结', |
42 | sortable: true, | 60 | sortable: true, |
43 | - width: '180px' | 61 | + width: '180px', |
62 | + render: function (row) { | ||
63 | + if(row.monthlySummary =="YES"){ | ||
64 | + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; | ||
65 | + }else{ | ||
66 | + return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; | ||
67 | + | ||
68 | + } | ||
69 | + } | ||
44 | }]); | 70 | }]); |
45 | 71 | ||
46 | let dataList = Vue.ref([]); | 72 | let dataList = Vue.ref([]); |
47 | let currentPage = Vue.ref(1); | 73 | let currentPage = Vue.ref(1); |
48 | let total = Vue.ref(0); | 74 | let total = Vue.ref(0); |
49 | 75 | ||
50 | - // 获取表格树 | 76 | + // 获取表格数据 |
51 | let getPage = () => { | 77 | let getPage = () => { |
52 | - | 78 | + proxy.$http.post("/api-web/bOpsPerson/personCollect", { |
79 | + "page":1, | ||
80 | + "limit":10, | ||
81 | + "projectId":"1" | ||
82 | + }, function (res) { | ||
83 | + if (res && res.data) { | ||
84 | + dataList.value = res.data | ||
85 | + total.value = res.count; | ||
86 | + } | ||
87 | + }); | ||
53 | } | 88 | } |
54 | 89 | ||
90 | + // 挂载完 | ||
91 | + Vue.onMounted(() => { | ||
92 | + getPage(); | ||
93 | + }) | ||
94 | + | ||
55 | 95 | ||
56 | return { | 96 | return { |
57 | columns, | 97 | columns, |
1 | -<div> | ||
2 | - <el-form | ||
3 | - :model="ruleForm" | ||
4 | - label-width="120px" | ||
5 | - size="small" | ||
6 | - > | 1 | +<div style="padding-top: 20px;"> |
2 | + <el-form :model="ruleForm" label-width="120px" :size="$global.elementSize"> | ||
7 | <el-row> | 3 | <el-row> |
8 | <el-col :span="8"> | 4 | <el-col :span="8"> |
9 | <el-form-item label="姓名" prop="nickname" class="form-class"> | 5 | <el-form-item label="姓名" prop="nickname" class="form-class"> |
10 | - <el-input v-model="ruleForm.nickname" style='width: 190px;'></el-input> | 6 | + <el-input v-model="ruleForm.nickname" disabled style='width: 190px;'></el-input> |
11 | </el-form-item> | 7 | </el-form-item> |
12 | <el-form-item label="性别" prop="sex" class="form-class"> | 8 | <el-form-item label="性别" prop="sex" class="form-class"> |
13 | <el-radio-group v-model="ruleForm.sex"> | 9 | <el-radio-group v-model="ruleForm.sex"> |
14 | - <el-radio label="1">男</el-radio> | ||
15 | - <el-radio label="0">女</el-radio> | 10 | + <el-radio :label="1">男</el-radio> |
11 | + <el-radio :label="0">女</el-radio> | ||
16 | </el-radio-group> | 12 | </el-radio-group> |
17 | </el-form-item> | 13 | </el-form-item> |
18 | <el-form-item label="学历" prop="education" class="form-class"> | 14 | <el-form-item label="学历" prop="education" class="form-class"> |
19 | <el-input v-model="ruleForm.education" style='width: 190px;'></el-input> | 15 | <el-input v-model="ruleForm.education" style='width: 190px;'></el-input> |
20 | </el-form-item> | 16 | </el-form-item> |
21 | - <el-form-item label="手机号" prop="name" class="form-class"> | ||
22 | - <el-input v-model="ruleForm.phone" style='width: 190px;'></el-input> | 17 | + <el-form-item label="手机号" prop="phone" class="form-class"> |
18 | + <el-input v-model="ruleForm.phone" disabled style='width: 190px;'></el-input> | ||
23 | </el-form-item> | 19 | </el-form-item> |
24 | - <el-form-item label="电子邮箱" prop="name" class="form-class"> | 20 | + <el-form-item label="电子邮箱" prop="email" class="form-class"> |
25 | <el-input v-model="ruleForm.email" style='width: 190px;'></el-input> | 21 | <el-input v-model="ruleForm.email" style='width: 190px;'></el-input> |
26 | </el-form-item> | 22 | </el-form-item> |
27 | 23 | ||
28 | - <el-form-item label="入职时间" prop="name" class="form-class"> | 24 | + <el-form-item label="入职时间" prop="entryTime" class="form-class"> |
29 | <el-date-picker | 25 | <el-date-picker |
26 | + disabled | ||
30 | v-model="ruleForm.entryTime" | 27 | v-model="ruleForm.entryTime" |
31 | type="date" | 28 | type="date" |
32 | style='width: 190px;' | 29 | style='width: 190px;' |
33 | placeholder="选择日期"> | 30 | placeholder="选择日期"> |
34 | </el-date-picker> | 31 | </el-date-picker> |
35 | </el-form-item> | 32 | </el-form-item> |
36 | - <el-form-item label="获得证书" prop="name" class="form-class"> | 33 | + <el-form-item label="获得证书" prop="certificate" disabled class="form-class"> |
37 | <el-input v-model="ruleForm.certificate" style='width: 190px;'></el-input> | 34 | <el-input v-model="ruleForm.certificate" style='width: 190px;'></el-input> |
38 | </el-form-item> | 35 | </el-form-item> |
39 | </el-col> | 36 | </el-col> |
40 | <el-col :span="8"> | 37 | <el-col :span="8"> |
41 | - <el-form-item label="所在公司" prop="name" class="form-class"> | ||
42 | - <el-input v-model="ruleForm.company" style='width: 190px;'></el-input> | 38 | + <el-form-item label="所在公司" prop="company" class="form-class"> |
39 | + <el-input v-model="ruleForm.company" disabled style='width: 190px;'></el-input> | ||
43 | </el-form-item> | 40 | </el-form-item> |
44 | - <el-form-item label="年龄" prop="name" class="form-class"> | 41 | + <el-form-item label="年龄" prop="age" class="form-class"> |
45 | <el-input v-model="ruleForm.age" style='width: 190px;'></el-input> | 42 | <el-input v-model="ruleForm.age" style='width: 190px;'></el-input> |
46 | </el-form-item> | 43 | </el-form-item> |
47 | - <el-form-item label="毕业院校" prop="name" class="form-class"> | ||
48 | - <el-input v-model="ruleForm.university" style='width: 190px;'></el-input> | 44 | + <el-form-item label="毕业院校" prop="university" class="form-class"> |
45 | + <el-input v-model="ruleForm.university" disabled style='width: 190px;'></el-input> | ||
49 | </el-form-item> | 46 | </el-form-item> |
50 | - <el-form-item label="座机号码" prop="name" class="form-class"> | 47 | + <el-form-item label="座机号码" prop="tel" class="form-class"> |
51 | <el-input v-model="ruleForm.tel" style='width: 190px;'></el-input> | 48 | <el-input v-model="ruleForm.tel" style='width: 190px;'></el-input> |
52 | </el-form-item> | 49 | </el-form-item> |
53 | - <el-form-item label="家庭住址" prop="name" class="form-class"> | 50 | + <el-form-item label="家庭住址" prop="post" class="form-class"> |
54 | <el-input v-model="ruleForm.post" style='width: 190px;'></el-input> | 51 | <el-input v-model="ruleForm.post" style='width: 190px;'></el-input> |
55 | </el-form-item> | 52 | </el-form-item> |
56 | - <el-form-item label="离职时间" prop="name" class="form-class"> | 53 | + <el-form-item label="离职时间" prop="quitTime" class="form-class"> |
57 | <el-date-picker | 54 | <el-date-picker |
58 | v-model="ruleForm.quitTime" | 55 | v-model="ruleForm.quitTime" |
56 | + disabled | ||
59 | type="date" | 57 | type="date" |
60 | style='width: 190px;' | 58 | style='width: 190px;' |
61 | placeholder="选择日期"> | 59 | placeholder="选择日期"> |
@@ -67,21 +65,16 @@ | @@ -67,21 +65,16 @@ | ||
67 | <el-upload | 65 | <el-upload |
68 | class="upload-demo" | 66 | class="upload-demo" |
69 | :show-file-list="false" | 67 | :show-file-list="false" |
70 | - action="" | ||
71 | - :on-preview="handlePreview" | ||
72 | - :on-remove="handleRemove" | ||
73 | - :before-remove="beforeRemove" | ||
74 | - :http-request="uploadFile" | ||
75 | - multiple | ||
76 | - :limit="3" | ||
77 | - :on-exceed="handleExceed" | ||
78 | - > | 68 | + :before-upload="beforeAvatarUpload" |
69 | + :multiple="false" | ||
70 | + :http-request="getFile" | ||
71 | + :auto-upload="true"> | ||
79 | <el-button size="small" type="primary">上传照片</el-button> | 72 | <el-button size="small" type="primary">上传照片</el-button> |
80 | </el-upload> | 73 | </el-upload> |
81 | </el-col> | 74 | </el-col> |
82 | </el-row> | 75 | </el-row> |
83 | <div style="text-align: center;"> | 76 | <div style="text-align: center;"> |
84 | - <el-button type="primary" size="small" @click="handleSave">保存</el-button> | 77 | + <el-button type="primary" size="small" @click="saveUser">保存</el-button> |
85 | </div> | 78 | </div> |
86 | <!-- <el-form-item> | 79 | <!-- <el-form-item> |
87 | <el-button type="primary" @click="submitForm('ruleForm')" | 80 | <el-button type="primary" @click="submitForm('ruleForm')" |
@@ -2,34 +2,112 @@ export default { | @@ -2,34 +2,112 @@ export default { | ||
2 | name: 'projectPJIndex', | 2 | name: 'projectPJIndex', |
3 | template: '', | 3 | template: '', |
4 | components: {}, | 4 | components: {}, |
5 | + props: { | ||
6 | + treeNode: { | ||
7 | + type: Object, | ||
8 | + default: {} | ||
9 | + }, | ||
10 | + parentNode: { | ||
11 | + type: Object, | ||
12 | + default: {} | ||
13 | + }, | ||
14 | + projectId: { | ||
15 | + type: String, | ||
16 | + default: '' | ||
17 | + }, | ||
18 | + }, | ||
5 | data() { | 19 | data() { |
6 | return {} | 20 | return {} |
7 | }, | 21 | }, |
8 | - setup() { | 22 | + setup(props, {attrs, slots, emit}) { |
9 | let height = Vue.ref(window.innerHeight - 130); | 23 | let height = Vue.ref(window.innerHeight - 130); |
10 | 24 | ||
11 | const {proxy} = Vue.getCurrentInstance(); | 25 | const {proxy} = Vue.getCurrentInstance(); |
26 | + let imageUrl = Vue.ref(''); | ||
12 | 27 | ||
13 | - let ruleForm = Vue.reactive({ | ||
14 | - nickname:'', | ||
15 | - sex: '', | 28 | + let ruleForm = Vue.ref({ |
29 | + nickname: '', | ||
30 | + sex: 0, | ||
31 | + education: '', | ||
16 | phone: '', | 32 | phone: '', |
17 | - tel: '', | ||
18 | email: '', | 33 | email: '', |
19 | - post: '', | ||
20 | - headImgUrl: '', | ||
21 | - age: '', | 34 | + entryTime: '', |
35 | + certificate: '', | ||
22 | university: '', | 36 | university: '', |
23 | - education: '', | ||
24 | - quitTime: '', | ||
25 | - entryTime:'', | 37 | + age: '', |
26 | company: '', | 38 | company: '', |
27 | - certificate: '' | 39 | + headImgUrl: '', |
40 | + post: '', | ||
41 | + projectId: null, | ||
42 | + quitTime: '', | ||
43 | + state: '', | ||
44 | + tel: '' | ||
45 | + }) | ||
46 | + | ||
47 | + // 获取表格数据 | ||
48 | + let getPage = () => { | ||
49 | + proxy.$http.get("/api-web/bOpsPerson/search", { | ||
50 | + "nickname": props.parentNode.label, | ||
51 | + "projectId": props.projectId | ||
52 | + }, function (res) { | ||
53 | + if (res && res.object) { | ||
54 | + ruleForm.value = res.object | ||
55 | + } | ||
56 | + }); | ||
57 | + } | ||
58 | + | ||
59 | + | ||
60 | + // 保存用户信息 | ||
61 | + let saveUser = () => { | ||
62 | + console.log(ruleForm.value); | ||
63 | + proxy.$http.post("/api-web/bOpsPerson/saveOrUpdate",ruleForm.value , function (res) { | ||
64 | + if (res && res.code == 0) { | ||
65 | + proxy.$global.showMsg('保存成功!'); | ||
66 | + } | ||
67 | + }); | ||
68 | + } | ||
69 | + | ||
70 | + | ||
71 | + let getFile = (param) =>{ | ||
72 | + | ||
73 | + let fileObj = param.file | ||
74 | + | ||
75 | + getBase64(fileObj).then(res => { | ||
76 | + console.log(res) | ||
77 | + }); | ||
78 | + | ||
79 | + imageUrl.value = URL.createObjectURL(fileObj) | ||
80 | + | ||
81 | + } | ||
82 | + let beforeAvatarUpload = (file) =>{ | ||
83 | + const isJPG = file.type.indexOf('image/') != -1 | ||
84 | + | ||
85 | + if (!isJPG) { | ||
86 | + proxy.$global.showMsg('您上传的不是图片文件,请选择图片!','error'); | ||
87 | + } | ||
88 | + | ||
89 | + return isJPG | ||
90 | + } | ||
91 | + | ||
92 | + | ||
93 | + | ||
94 | + | ||
95 | + // // 挂载完 | ||
96 | + Vue.onMounted(() => { | ||
97 | + getPage(); | ||
28 | }) | 98 | }) |
29 | 99 | ||
100 | + // 监听编辑状态 | ||
101 | + Vue.watch(() => props.projectId, (newValue, oldVlaue) => { | ||
102 | + getPage(); | ||
103 | + }); | ||
30 | 104 | ||
31 | return { | 105 | return { |
32 | - ruleForm | 106 | + imageUrl, |
107 | + ruleForm, | ||
108 | + saveUser, | ||
109 | + getFile, | ||
110 | + beforeAvatarUpload, | ||
33 | } | 111 | } |
34 | } | 112 | } |
35 | } | 113 | } |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | <!-- 人员信息总汇--> | 3 | <!-- 人员信息总汇--> |
4 | <el-divider content-position="left">项目资料汇总</el-divider> | 4 | <el-divider content-position="left">项目资料汇总</el-divider> |
5 | <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" | 5 | <cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true" |
6 | - :showBorder="true" :currentPage="currentPage" :total="total" :loading="true" | ||
7 | - :showPage="true" :height="height - 54"></cm-table-page> | 6 | + :showBorder="true" :currentPage="currentPage" :total="total" :loading="false" |
7 | + :showPage="false" :height="(height - 54)/3"></cm-table-page> | ||
8 | </div> | 8 | </div> |
9 | </div> | 9 | </div> |
@@ -13,30 +13,37 @@ export default { | @@ -13,30 +13,37 @@ export default { | ||
13 | 13 | ||
14 | let columns = Vue.ref([ | 14 | let columns = Vue.ref([ |
15 | { | 15 | { |
16 | - prop: 'fileName', | 16 | + prop: 'dayMaterial', |
17 | label: '日常资料', | 17 | label: '日常资料', |
18 | - sortable: true, | ||
19 | - align: 'left', | ||
20 | render: function (row) { | 18 | render: function (row) { |
21 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | 19 | + if(row.dayMaterial =="YES"){ |
20 | + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; | ||
21 | + }else{ | ||
22 | + return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; | ||
23 | + } | ||
22 | } | 24 | } |
25 | + | ||
23 | }, | 26 | }, |
24 | { | 27 | { |
25 | - prop: 'm1', | 28 | + prop: 'documentMaterial', |
26 | label: '文档资料', | 29 | label: '文档资料', |
27 | - sortable: true, | ||
28 | - align: 'left', | ||
29 | render: function (row) { | 30 | render: function (row) { |
30 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | 31 | + if(row.documentMaterial =="YES"){ |
32 | + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; | ||
33 | + }else{ | ||
34 | + return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; | ||
35 | + } | ||
31 | } | 36 | } |
32 | }, | 37 | }, |
33 | { | 38 | { |
34 | - prop: 'm2', | 39 | + prop: 'nda', |
35 | label: '项目保密协议', | 40 | label: '项目保密协议', |
36 | - sortable: true, | ||
37 | - align: 'left', | ||
38 | render: function (row) { | 41 | render: function (row) { |
39 | - return `<i class="iconfont 22222" style="font-size: 22px;margin-right: 10px;"></i><span>${row.fileName}</span>` | 42 | + if(row.nda =="YES"){ |
43 | + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; | ||
44 | + }else{ | ||
45 | + return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; | ||
46 | + } | ||
40 | } | 47 | } |
41 | } | 48 | } |
42 | ]); | 49 | ]); |
@@ -45,11 +52,21 @@ export default { | @@ -45,11 +52,21 @@ export default { | ||
45 | let currentPage = Vue.ref(1); | 52 | let currentPage = Vue.ref(1); |
46 | let total = Vue.ref(0); | 53 | let total = Vue.ref(0); |
47 | 54 | ||
48 | - // 获取表格树 | 55 | + // 获取表格数据 |
49 | let getPage = () => { | 56 | let getPage = () => { |
50 | - | 57 | + proxy.$http.get("/api-web/bOpsFile/fileCollect?projectId=1", {}, function (res) { |
58 | + if (res && res.data) { | ||
59 | + dataList.value = res.data | ||
60 | + total.value = res.count; | ||
61 | + } | ||
62 | + }); | ||
51 | } | 63 | } |
52 | 64 | ||
65 | + // 挂载完 | ||
66 | + Vue.onMounted(() => { | ||
67 | + getPage(); | ||
68 | + }) | ||
69 | + | ||
53 | 70 | ||
54 | return { | 71 | return { |
55 | columns, | 72 | columns, |
@@ -48,6 +48,10 @@ const routes = [{ | @@ -48,6 +48,10 @@ const routes = [{ | ||
48 | name: 'operationMaintenance', | 48 | name: 'operationMaintenance', |
49 | component: () => myImport('views/operationMaintenance/index') | 49 | component: () => myImport('views/operationMaintenance/index') |
50 | },{ | 50 | },{ |
51 | + path: '/operationMaintenance/config', | ||
52 | + name: 'operationMaintenanceConfig', | ||
53 | + component: () => myImport('views/operationMaintenance/config/index') | ||
54 | + },{ | ||
51 | path: '/bigscreen', | 55 | path: '/bigscreen', |
52 | name: 'zjBigScreen', | 56 | name: 'zjBigScreen', |
53 | component: () => myImport('views/dp/index') | 57 | component: () => myImport('views/dp/index') |
hg-monitor-web-zj/src/main/resources/static/vue3/src/views/operationMaintenance/config/index.html
0 → 100644
1 | +<div class="container tree-config" :style="{'height':height+'px','max-height':height+'px','overflow':'auto'}" style="background-color: white;padding-top: 50px"> | ||
2 | + | ||
3 | + <el-form :rules="formRules" | ||
4 | + label-position="right" | ||
5 | + label-width="220px" | ||
6 | + ref="ruleForm" | ||
7 | + :model="form"> | ||
8 | + | ||
9 | + <el-form-item label="是否是乙方运维" prop="isOps"> | ||
10 | + <el-switch | ||
11 | + v-model="form.isOps" | ||
12 | + active-text="是" | ||
13 | + inactive-text="否" | ||
14 | + ></el-switch> | ||
15 | + </el-form-item> | ||
16 | + <el-form-item label="项目名称" prop="alias"> | ||
17 | + <el-input v-model="form.alias" :disabled="form.isOps == 0" clearable></el-input> | ||
18 | + </el-form-item> | ||
19 | + <el-form-item label="项目编号" prop="code" > | ||
20 | + <el-input v-model="form.code" :disabled="form.isOps == 0" clearable></el-input> | ||
21 | + </el-form-item> | ||
22 | + <el-form-item label="项目负责人" prop="principalName"> | ||
23 | + <div style="display: flex"> | ||
24 | + <el-input v-model="form.principalName" :disabled="form.isOps == 0" clearable></el-input> | ||
25 | + <el-button style="margin-left: 5px" @click="showUserDialog(true)" :disabled="form.isOps == 0" >选择</el-button> | ||
26 | + </div> | ||
27 | + </el-form-item> | ||
28 | + <el-form-item label="排序" prop="sort"> | ||
29 | + <el-input type="number" v-model="form.sort" :disabled="form.isOps == 0" clearable></el-input> | ||
30 | + </el-form-item> | ||
31 | + | ||
32 | + <el-form-item label="描述" prop="remark"> | ||
33 | + <el-input v-model="form.remark" type="textarea" :disabled="form.isOps == 0" clearable></el-input> | ||
34 | + </el-form-item> | ||
35 | + <el-form-item> | ||
36 | + <el-button type="primary" @click="onSubmit('ruleForm')">保存配置</el-button> | ||
37 | + </el-form-item> | ||
38 | + </el-form> | ||
39 | + | ||
40 | + <cm-userright :showDialogVisible="showUserDialogFlg" :users="users" @callback="selectUser" title="选择用户" | ||
41 | + :titles="['所有用户', '已添加用户']" :buttonTexts="['删除', '添加']" :loadRoleDta="false" | ||
42 | + @hideDialog="showUserDialog"></cm-userright> | ||
43 | +</div> |
hg-monitor-web-zj/src/main/resources/static/vue3/src/views/operationMaintenance/config/index.js
0 → 100644
1 | +export default { | ||
2 | + name: 'operationMaintenanceConfigIndex', | ||
3 | + template: '', | ||
4 | + components: {}, | ||
5 | + data() { | ||
6 | + return { | ||
7 | + formRules: { | ||
8 | + alias: [ | ||
9 | + { | ||
10 | + required: true, | ||
11 | + message: '请填项目名称!', | ||
12 | + trigger: 'blur', | ||
13 | + } | ||
14 | + ], | ||
15 | + code: [ | ||
16 | + { | ||
17 | + required: true, | ||
18 | + message: '请填项目编号!', | ||
19 | + trigger: 'blur', | ||
20 | + } | ||
21 | + ], | ||
22 | + principalName: [ | ||
23 | + { | ||
24 | + required: true, | ||
25 | + message: '请填项目负责人!', | ||
26 | + trigger: 'blur', | ||
27 | + } | ||
28 | + ], | ||
29 | + sort: [ | ||
30 | + { | ||
31 | + required: true, | ||
32 | + message: '请填项目负责人!', | ||
33 | + trigger: 'blur', | ||
34 | + } | ||
35 | + ] | ||
36 | + } | ||
37 | + } | ||
38 | + }, | ||
39 | + setup() { | ||
40 | + const {proxy} = Vue.getCurrentInstance(); | ||
41 | + let showUserDialogFlg = Vue.ref(false); | ||
42 | + let users = Vue.ref([]); | ||
43 | + let form = Vue.ref({ | ||
44 | + isOps: 0, | ||
45 | + code: '', | ||
46 | + alias: '', | ||
47 | + principal: '', | ||
48 | + principalName: '', | ||
49 | + busId: '', | ||
50 | + sort: 1, | ||
51 | + remark: '' | ||
52 | + }); | ||
53 | + | ||
54 | + let onSubmit = (id) => { | ||
55 | + | ||
56 | + proxy.$refs[id].validate((valid) => { | ||
57 | + if (valid) { | ||
58 | + let params = form.value; | ||
59 | + if (params.isOps) { | ||
60 | + params.isOps = 1; | ||
61 | + } else { | ||
62 | + params.isOps = 0; | ||
63 | + } | ||
64 | + | ||
65 | + // 新增 | ||
66 | + proxy.$http.post(`/api-web/bOpsProject/saveOrUpdate`, params, function (res) { | ||
67 | + if (res && res.code == 0) { | ||
68 | + proxy.$global.showMsg("配置成功!"); | ||
69 | + } | ||
70 | + }) | ||
71 | + } else { | ||
72 | + console.log('error submit!!') | ||
73 | + return false | ||
74 | + } | ||
75 | + }) | ||
76 | + } | ||
77 | + | ||
78 | + let init = () => { | ||
79 | + let busId = proxy.$global.getQueryVariable("id") | ||
80 | + //let isOps = proxy.$global.getQueryVariable("isOps") | ||
81 | + | ||
82 | + if (!busId) { | ||
83 | + return; | ||
84 | + } | ||
85 | + // 业务id | ||
86 | + form.value.busId = busId; | ||
87 | + // 是否是乙方运维 | ||
88 | + //form.value.isOps = isOps; | ||
89 | + proxy.$http.get("/api-web/bOpsProject/search", {busId: busId}, function (res) { | ||
90 | + if (res && res.object) { | ||
91 | + res.object.isOps = true; | ||
92 | + form.value = res.object | ||
93 | + | ||
94 | + let principal = res.object.principal | ||
95 | + if(principal){ | ||
96 | + users.value = principal.split(",") | ||
97 | + } | ||
98 | + | ||
99 | + } | ||
100 | + }); | ||
101 | + } | ||
102 | + | ||
103 | + /** | ||
104 | + * 获取用户授权 | ||
105 | + */ | ||
106 | + let showUserDialog = (flg) => { | ||
107 | + showUserDialogFlg.value = flg; | ||
108 | + } | ||
109 | + | ||
110 | + // 获取用户选择的用户 | ||
111 | + let selectUser = (userObj) =>{ | ||
112 | + | ||
113 | + let userArr = userObj.user; | ||
114 | + let names = []; | ||
115 | + let nickNames = []; | ||
116 | + userArr.map(function (v) { | ||
117 | + names.push(v.username); | ||
118 | + nickNames.push(v.nickname) | ||
119 | + }) | ||
120 | + | ||
121 | + form.value.principal = names.join(','); | ||
122 | + form.value.principalName = nickNames.join(','); | ||
123 | + } | ||
124 | + | ||
125 | + // 挂载完 | ||
126 | + Vue.onMounted(() => { | ||
127 | + init(); | ||
128 | + }) | ||
129 | + | ||
130 | + | ||
131 | + return { | ||
132 | + form, | ||
133 | + onSubmit, | ||
134 | + users, | ||
135 | + selectUser, | ||
136 | + showUserDialog, | ||
137 | + showUserDialogFlg | ||
138 | + } | ||
139 | + } | ||
140 | +} |
1 | -<div class="assets-configmanagers"> | ||
2 | -<!-- 乙方运营--> | ||
3 | - <div> | ||
4 | - <!-- 左侧树结构 --> | ||
5 | - <el-row> | ||
6 | - <el-col :span="4" class='col-class'> | ||
7 | - <el-tree :data="dataSource" :default-expanded-keys="[1]" :props="defaultProps" @node-click="handleNodeClick" /> | ||
8 | - </el-col> | ||
9 | - <!-- 右侧显示 --> | ||
10 | - <el-col :span="19" class='col-class'> | ||
11 | - <!-- 失活的组件将会被缓存!--> | ||
12 | - <keep-alive> | ||
13 | - <component v-bind:is="componentName"></component> | ||
14 | - </keep-alive> | ||
15 | - </el-col> | ||
16 | - </el-row> | ||
17 | - </div> | 1 | +<div class="container" :style="{'height':height+'px','max-height':height+'px','overflow':'auto'}"> |
2 | + <!-- 乙方运营--> | ||
3 | + <el-row :gutter="5"> | ||
4 | + <el-col :span="4"> | ||
5 | + <div :style="{'min-height':height+'px','height':'100%','overflow':'auto'}" style="background-color: white;border-radius: 3px"> | ||
6 | + <el-tree :data="dataSource" :default-expanded-keys="[1]" :props="defaultProps" | ||
7 | + @node-click="handleNodeClick"/> | ||
8 | + </div> | ||
9 | + </el-col> | ||
10 | + <el-col :span="20" > | ||
11 | + <div :style="{'min-height':height+'px','height':'100%','overflow':'auto'}" style="background-color: white;border-radius: 3px"> | ||
12 | + <component v-bind:is="componentName" | ||
13 | + :docType="docType" | ||
14 | + :treeNode="treeNode" :parentNode="parentNode" :projectId="projectId"></component> | ||
15 | + </div> | ||
16 | + </el-col> | ||
17 | + </el-row> | ||
18 | </div> | 18 | </div> |
-
Please register or login to post a comment