Authored by 王涛

乙方运维 用户资产功能优化;基础组件版本升级

Showing 25 changed files with 993 additions and 164 deletions
@@ -111,7 +111,7 @@ INSERT INTO `user-center`.`sys_menu` (`id`, `parentId`, `menuCode`, `name`, `url @@ -111,7 +111,7 @@ INSERT INTO `user-center`.`sys_menu` (`id`, `parentId`, `menuCode`, `name`, `url
111 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000009); 111 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000009);
112 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000011); 112 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000011);
113 -- 8、修改项目表中的预留字段 113 -- 8、修改项目表中的预留字段
114 -ALTER TABLE `cloud_backend_monitor`.`b_ops_project` 114 +ALTER TABLE `cloud_backend_monitor`.`b_ops_project`
115 MODIFY COLUMN `state` int NULL DEFAULT 0 COMMENT '0:正常,1:延期,3:预留' AFTER `remark`; 115 MODIFY COLUMN `state` int NULL DEFAULT 0 COMMENT '0:正常,1:延期,3:预留' AFTER `remark`;
116 116
117 -- 9、同步流程业务添加触发器 117 -- 9、同步流程业务添加触发器
@@ -120,7 +120,7 @@ DELIMITER $$ @@ -120,7 +120,7 @@ DELIMITER $$
120 CREATE TRIGGER syn_business_add AFTER INSERT ON b_bustype 120 CREATE TRIGGER syn_business_add AFTER INSERT ON b_bustype
121 FOR EACH ROW 121 FOR EACH ROW
122 begin 122 begin
123 - IF NEW.isLeaf = 1 THEN 123 + IF NEW.isLeaf = 1 THEN
124 INSERT INTO `itsm_demo`.`system_handler` (`system_id`, `system_name`, `sort`, `system_type`, `enable`) VALUES (NEW.busId, NEW.busTypeName, NEW.sort, "0","0"); 124 INSERT INTO `itsm_demo`.`system_handler` (`system_id`, `system_name`, `sort`, `system_type`, `enable`) VALUES (NEW.busId, NEW.busTypeName, NEW.sort, "0","0");
125 END IF; 125 END IF;
126 end$$ 126 end$$
@@ -130,7 +130,7 @@ DELIMITER $$ @@ -130,7 +130,7 @@ DELIMITER $$
130 CREATE TRIGGER syn_business_change AFTER UPDATE ON b_bustype 130 CREATE TRIGGER syn_business_change AFTER UPDATE ON b_bustype
131 FOR EACH ROW 131 FOR EACH ROW
132 begin 132 begin
133 - IF NEW.isLeaf = 1 and OLD.isLeaf =1 THEN 133 + IF NEW.isLeaf = 1 and OLD.isLeaf =1 THEN
134 UPDATE `itsm_demo`.`system_handler` SET `system_name` = NEW.busTypeName, `sort` = NEW.sort WHERE `system_id` = OLD.busId; 134 UPDATE `itsm_demo`.`system_handler` SET `system_name` = NEW.busTypeName, `sort` = NEW.sort WHERE `system_id` = OLD.busId;
135 ELSE 135 ELSE
136 DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId; 136 DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId;
@@ -142,7 +142,7 @@ DELIMITER $$ @@ -142,7 +142,7 @@ DELIMITER $$
142 CREATE TRIGGER syn_business_delete AFTER DELETE ON b_bustype 142 CREATE TRIGGER syn_business_delete AFTER DELETE ON b_bustype
143 FOR EACH ROW 143 FOR EACH ROW
144 begin 144 begin
145 - IF OLD.isLeaf = 1 THEN 145 + IF OLD.isLeaf = 1 THEN
146 DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId; 146 DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId;
147 END IF; 147 END IF;
148 end$$ 148 end$$
@@ -160,11 +160,5 @@ INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, @@ -160,11 +160,5 @@ INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`,
160 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_HEALTH', '0', '健康检查报告', '10005', 'FOUR_HEALTH', 'admin', '2021-10-12 19:55:13', '10005', 0); 160 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_HEALTH', '0', '健康检查报告', '10005', 'FOUR_HEALTH', 'admin', '2021-10-12 19:55:13', '10005', 0);
161 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_MONTHLY', '0', '月报', '10003', 'FOUR_MONTHLY', 'admin', '2021-10-12 19:55:13', '10003', 0); 161 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_MONTHLY', '0', '月报', '10003', 'FOUR_MONTHLY', 'admin', '2021-10-12 19:55:13', '10003', 0);
162 162
163 --- 王涛 inspection-report  
164 -alter table b_inspection_document MODIFY column fileSize varchar(50) DEFAULT NULL COMMENT '文件大小';  
165 -  
166 -ALTER TABLE `inspection-report`.`b_inspection_document`  
167 -ADD COLUMN `status` int(1) DEFAULT '0' COMMENT '删除状态 0 正常,1删除,默认0';  
168 -  
169 -ALTER TABLE `inspection-report`.`b_insepectionreport_type`  
170 -ADD COLUMN `status` int(1) DEFAULT '0' COMMENT '删除状态 0 正常,1删除,默认0';  
  163 +-- 12、修改属性分组字段长度
  164 +ALTER TABLE `cloud_backend_monitor`.`b_ops_person_property` MODIFY COLUMN `groupings` VARCHAR(100) NULL COMMENT '分组';
@@ -61,6 +61,7 @@ loading:{ @@ -61,6 +61,7 @@ loading:{
61 type: Boolean, 61 type: Boolean,
62 default: false 62 default: false
63 }, 63 },
  64 +
64 -------------------------------------------------------------------- 65 --------------------------------------------------------------------
65 columns参数说明: 66 columns参数说明:
66 // 单元绑定数据key 67 // 单元绑定数据key
@@ -77,3 +78,6 @@ render:function (row){ @@ -77,3 +78,6 @@ render:function (row){
77 // 表格个性化展示,返回html 78 // 表格个性化展示,返回html
78 return html; 79 return html;
79 } 80 }
  81 +------------------------slot--------------------------------------------
  82 +#default 内容插槽
  83 +#tools 工具栏插槽
@@ -8,9 +8,11 @@ @@ -8,9 +8,11 @@
8 <script src="public/lib/vue/vue.global.prod.js"></script> 8 <script src="public/lib/vue/vue.global.prod.js"></script>
9 <script src="public/lib/vue/vue-router.global.prod.js"></script> 9 <script src="public/lib/vue/vue-router.global.prod.js"></script>
10 <script src="public/lib/vue/vuex.global.prod.js"></script> 10 <script src="public/lib/vue/vuex.global.prod.js"></script>
  11 + <link href="public/lib/element-plus/index-icon.css" rel="stylesheet">
11 <link href="public/lib/element-plus/index.css" rel="stylesheet"> 12 <link href="public/lib/element-plus/index.css" rel="stylesheet">
12 <script src="public/lib/element-plus/index.full.js"></script> 13 <script src="public/lib/element-plus/index.full.js"></script>
13 <script src="public/lib/element-plus/zh-cn.js"></script> 14 <script src="public/lib/element-plus/zh-cn.js"></script>
  15 +
14 <link href="public/lib/vant/index.css" rel="stylesheet"> 16 <link href="public/lib/vant/index.css" rel="stylesheet">
15 <script src="public/lib/vant/vant.min.js"></script> 17 <script src="public/lib/vant/vant.min.js"></script>
16 <script src="public/lib/axios/axios.min.js"></script> 18 <script src="public/lib/axios/axios.min.js"></script>
@@ -8,7 +8,6 @@ @@ -8,7 +8,6 @@
8 background-color: #CCCCCC; 8 background-color: #CCCCCC;
9 padding: 3px 3px; 9 padding: 3px 3px;
10 width:calc(100% - 10px); 10 width:calc(100% - 10px);
11 - overflow:hidden;  
12 } 11 }
13 12
14 .container .cm-card{ 13 .container .cm-card{
@@ -39,7 +38,7 @@ custom-class="config-dialog" @@ -39,7 +38,7 @@ custom-class="config-dialog"
39 38
40 39
41 /*加载图标*/ 40 /*加载图标*/
42 -.el-loading-spinner .icon-mj{ 41 +.el-loading-spinner .el-icon{
43 width: 70px; 42 width: 70px;
44 height: 70px; 43 height: 70px;
45 background: url(../../../start/layui/css/modules/layer/default/loading-mj.png) no-repeat center; 44 background: url(../../../start/layui/css/modules/layer/default/loading-mj.png) no-repeat center;
@@ -55,6 +55,72 @@ @@ -55,6 +55,72 @@
55 <ul class="icon_lists dib-box"> 55 <ul class="icon_lists dib-box">
56 56
57 <li class="dib"> 57 <li class="dib">
  58 + <span class="icon iconfont">&#xe613;</span>
  59 + <div class="name">虚拟桌面</div>
  60 + <div class="code-name">&amp;#xe613;</div>
  61 + </li>
  62 +
  63 + <li class="dib">
  64 + <span class="icon iconfont">&#xe63c;</span>
  65 + <div class="name">堡垒机</div>
  66 + <div class="code-name">&amp;#xe63c;</div>
  67 + </li>
  68 +
  69 + <li class="dib">
  70 + <span class="icon iconfont">&#xe61a;</span>
  71 + <div class="name">堡垒机sas</div>
  72 + <div class="code-name">&amp;#xe61a;</div>
  73 + </li>
  74 +
  75 + <li class="dib">
  76 + <span class="icon iconfont">&#xe657;</span>
  77 + <div class="name">堡垒机授权申请流程</div>
  78 + <div class="code-name">&amp;#xe657;</div>
  79 + </li>
  80 +
  81 + <li class="dib">
  82 + <span class="icon iconfont">&#xe63d;</span>
  83 + <div class="name">虚拟桌面</div>
  84 + <div class="code-name">&amp;#xe63d;</div>
  85 + </li>
  86 +
  87 + <li class="dib">
  88 + <span class="icon iconfont">&#xe905;</span>
  89 + <div class="name">水坝b</div>
  90 + <div class="code-name">&amp;#xe905;</div>
  91 + </li>
  92 +
  93 + <li class="dib">
  94 + <span class="icon iconfont">&#xe675;</span>
  95 + <div class="name">虚拟桌面</div>
  96 + <div class="code-name">&amp;#xe675;</div>
  97 + </li>
  98 +
  99 + <li class="dib">
  100 + <span class="icon iconfont">&#xe614;</span>
  101 + <div class="name">滚水坝</div>
  102 + <div class="code-name">&amp;#xe614;</div>
  103 + </li>
  104 +
  105 + <li class="dib">
  106 + <span class="icon iconfont">&#xebde;</span>
  107 + <div class="name">线</div>
  108 + <div class="code-name">&amp;#xebde;</div>
  109 + </li>
  110 +
  111 + <li class="dib">
  112 + <span class="icon iconfont">&#xe7fd;</span>
  113 + <div class="name">line</div>
  114 + <div class="code-name">&amp;#xe7fd;</div>
  115 + </li>
  116 +
  117 + <li class="dib">
  118 + <span class="icon iconfont">&#xec62;</span>
  119 + <div class="name">路由器</div>
  120 + <div class="code-name">&amp;#xec62;</div>
  121 + </li>
  122 +
  123 + <li class="dib">
58 <span class="icon iconfont">&#xe752;</span> 124 <span class="icon iconfont">&#xe752;</span>
59 <div class="name">搜索</div> 125 <div class="name">搜索</div>
60 <div class="code-name">&amp;#xe752;</div> 126 <div class="code-name">&amp;#xe752;</div>
@@ -498,9 +564,9 @@ @@ -498,9 +564,9 @@
498 <pre><code class="language-css" 564 <pre><code class="language-css"
499 >@font-face { 565 >@font-face {
500 font-family: 'iconfont'; 566 font-family: 'iconfont';
501 - src: url('iconfont.woff2?t=1634540750988') format('woff2'),  
502 - url('iconfont.woff?t=1634540750988') format('woff'),  
503 - url('iconfont.ttf?t=1634540750988') format('truetype'); 567 + src: url('iconfont.woff2?t=1635930253141') format('woff2'),
  568 + url('iconfont.woff?t=1635930253141') format('woff'),
  569 + url('iconfont.ttf?t=1635930253141') format('truetype');
504 } 570 }
505 </code></pre> 571 </code></pre>
506 <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3> 572 <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -527,6 +593,105 @@ @@ -527,6 +593,105 @@
527 <ul class="icon_lists dib-box"> 593 <ul class="icon_lists dib-box">
528 594
529 <li class="dib"> 595 <li class="dib">
  596 + <span class="icon iconfont icon-xunizhuomian"></span>
  597 + <div class="name">
  598 + 虚拟桌面
  599 + </div>
  600 + <div class="code-name">.icon-xunizhuomian
  601 + </div>
  602 + </li>
  603 +
  604 + <li class="dib">
  605 + <span class="icon iconfont icon-baoleiji"></span>
  606 + <div class="name">
  607 + 堡垒机
  608 + </div>
  609 + <div class="code-name">.icon-baoleiji
  610 + </div>
  611 + </li>
  612 +
  613 + <li class="dib">
  614 + <span class="icon iconfont icon-baoleijisas"></span>
  615 + <div class="name">
  616 + 堡垒机sas
  617 + </div>
  618 + <div class="code-name">.icon-baoleijisas
  619 + </div>
  620 + </li>
  621 +
  622 + <li class="dib">
  623 + <span class="icon iconfont icon-baoleijishouquanshenqingliucheng"></span>
  624 + <div class="name">
  625 + 堡垒机授权申请流程
  626 + </div>
  627 + <div class="code-name">.icon-baoleijishouquanshenqingliucheng
  628 + </div>
  629 + </li>
  630 +
  631 + <li class="dib">
  632 + <span class="icon iconfont icon-xunizhuomian1"></span>
  633 + <div class="name">
  634 + 虚拟桌面
  635 + </div>
  636 + <div class="code-name">.icon-xunizhuomian1
  637 + </div>
  638 + </li>
  639 +
  640 + <li class="dib">
  641 + <span class="icon iconfont icon-shuiba2"></span>
  642 + <div class="name">
  643 + 水坝b
  644 + </div>
  645 + <div class="code-name">.icon-shuiba2
  646 + </div>
  647 + </li>
  648 +
  649 + <li class="dib">
  650 + <span class="icon iconfont icon-xunizhuomian2"></span>
  651 + <div class="name">
  652 + 虚拟桌面
  653 + </div>
  654 + <div class="code-name">.icon-xunizhuomian2
  655 + </div>
  656 + </li>
  657 +
  658 + <li class="dib">
  659 + <span class="icon iconfont icon-gunshuiba"></span>
  660 + <div class="name">
  661 + 滚水坝
  662 + </div>
  663 + <div class="code-name">.icon-gunshuiba
  664 + </div>
  665 + </li>
  666 +
  667 + <li class="dib">
  668 + <span class="icon iconfont icon-line1"></span>
  669 + <div class="name">
  670 + 线
  671 + </div>
  672 + <div class="code-name">.icon-line1
  673 + </div>
  674 + </li>
  675 +
  676 + <li class="dib">
  677 + <span class="icon iconfont icon-line"></span>
  678 + <div class="name">
  679 + line
  680 + </div>
  681 + <div class="code-name">.icon-line
  682 + </div>
  683 + </li>
  684 +
  685 + <li class="dib">
  686 + <span class="icon iconfont icon-luyouqi"></span>
  687 + <div class="name">
  688 + 路由器
  689 + </div>
  690 + <div class="code-name">.icon-luyouqi
  691 + </div>
  692 + </li>
  693 +
  694 + <li class="dib">
530 <span class="icon iconfont icon-sousuo"></span> 695 <span class="icon iconfont icon-sousuo"></span>
531 <div class="name"> 696 <div class="name">
532 搜索 697 搜索
@@ -1194,6 +1359,94 @@ @@ -1194,6 +1359,94 @@
1194 1359
1195 <li class="dib"> 1360 <li class="dib">
1196 <svg class="icon svg-icon" aria-hidden="true"> 1361 <svg class="icon svg-icon" aria-hidden="true">
  1362 + <use xlink:href="#icon-xunizhuomian"></use>
  1363 + </svg>
  1364 + <div class="name">虚拟桌面</div>
  1365 + <div class="code-name">#icon-xunizhuomian</div>
  1366 + </li>
  1367 +
  1368 + <li class="dib">
  1369 + <svg class="icon svg-icon" aria-hidden="true">
  1370 + <use xlink:href="#icon-baoleiji"></use>
  1371 + </svg>
  1372 + <div class="name">堡垒机</div>
  1373 + <div class="code-name">#icon-baoleiji</div>
  1374 + </li>
  1375 +
  1376 + <li class="dib">
  1377 + <svg class="icon svg-icon" aria-hidden="true">
  1378 + <use xlink:href="#icon-baoleijisas"></use>
  1379 + </svg>
  1380 + <div class="name">堡垒机sas</div>
  1381 + <div class="code-name">#icon-baoleijisas</div>
  1382 + </li>
  1383 +
  1384 + <li class="dib">
  1385 + <svg class="icon svg-icon" aria-hidden="true">
  1386 + <use xlink:href="#icon-baoleijishouquanshenqingliucheng"></use>
  1387 + </svg>
  1388 + <div class="name">堡垒机授权申请流程</div>
  1389 + <div class="code-name">#icon-baoleijishouquanshenqingliucheng</div>
  1390 + </li>
  1391 +
  1392 + <li class="dib">
  1393 + <svg class="icon svg-icon" aria-hidden="true">
  1394 + <use xlink:href="#icon-xunizhuomian1"></use>
  1395 + </svg>
  1396 + <div class="name">虚拟桌面</div>
  1397 + <div class="code-name">#icon-xunizhuomian1</div>
  1398 + </li>
  1399 +
  1400 + <li class="dib">
  1401 + <svg class="icon svg-icon" aria-hidden="true">
  1402 + <use xlink:href="#icon-shuiba2"></use>
  1403 + </svg>
  1404 + <div class="name">水坝b</div>
  1405 + <div class="code-name">#icon-shuiba2</div>
  1406 + </li>
  1407 +
  1408 + <li class="dib">
  1409 + <svg class="icon svg-icon" aria-hidden="true">
  1410 + <use xlink:href="#icon-xunizhuomian2"></use>
  1411 + </svg>
  1412 + <div class="name">虚拟桌面</div>
  1413 + <div class="code-name">#icon-xunizhuomian2</div>
  1414 + </li>
  1415 +
  1416 + <li class="dib">
  1417 + <svg class="icon svg-icon" aria-hidden="true">
  1418 + <use xlink:href="#icon-gunshuiba"></use>
  1419 + </svg>
  1420 + <div class="name">滚水坝</div>
  1421 + <div class="code-name">#icon-gunshuiba</div>
  1422 + </li>
  1423 +
  1424 + <li class="dib">
  1425 + <svg class="icon svg-icon" aria-hidden="true">
  1426 + <use xlink:href="#icon-line1"></use>
  1427 + </svg>
  1428 + <div class="name">线</div>
  1429 + <div class="code-name">#icon-line1</div>
  1430 + </li>
  1431 +
  1432 + <li class="dib">
  1433 + <svg class="icon svg-icon" aria-hidden="true">
  1434 + <use xlink:href="#icon-line"></use>
  1435 + </svg>
  1436 + <div class="name">line</div>
  1437 + <div class="code-name">#icon-line</div>
  1438 + </li>
  1439 +
  1440 + <li class="dib">
  1441 + <svg class="icon svg-icon" aria-hidden="true">
  1442 + <use xlink:href="#icon-luyouqi"></use>
  1443 + </svg>
  1444 + <div class="name">路由器</div>
  1445 + <div class="code-name">#icon-luyouqi</div>
  1446 + </li>
  1447 +
  1448 + <li class="dib">
  1449 + <svg class="icon svg-icon" aria-hidden="true">
1197 <use xlink:href="#icon-sousuo"></use> 1450 <use xlink:href="#icon-sousuo"></use>
1198 </svg> 1451 </svg>
1199 <div class="name">搜索</div> 1452 <div class="name">搜索</div>
1 @font-face { 1 @font-face {
2 font-family: "iconfont"; /* Project id 2843738 */ 2 font-family: "iconfont"; /* Project id 2843738 */
3 - src: url('iconfont.woff2?t=1634540750988') format('woff2'),  
4 - url('iconfont.woff?t=1634540750988') format('woff'),  
5 - url('iconfont.ttf?t=1634540750988') format('truetype'); 3 + src: url('iconfont.woff2?t=1635930253141') format('woff2'),
  4 + url('iconfont.woff?t=1635930253141') format('woff'),
  5 + url('iconfont.ttf?t=1635930253141') format('truetype');
6 } 6 }
7 7
8 .iconfont { 8 .iconfont {
@@ -13,6 +13,50 @@ @@ -13,6 +13,50 @@
13 -moz-osx-font-smoothing: grayscale; 13 -moz-osx-font-smoothing: grayscale;
14 } 14 }
15 15
  16 +.icon-xunizhuomian:before {
  17 + content: "\e613";
  18 +}
  19 +
  20 +.icon-baoleiji:before {
  21 + content: "\e63c";
  22 +}
  23 +
  24 +.icon-baoleijisas:before {
  25 + content: "\e61a";
  26 +}
  27 +
  28 +.icon-baoleijishouquanshenqingliucheng:before {
  29 + content: "\e657";
  30 +}
  31 +
  32 +.icon-xunizhuomian1:before {
  33 + content: "\e63d";
  34 +}
  35 +
  36 +.icon-shuiba2:before {
  37 + content: "\e905";
  38 +}
  39 +
  40 +.icon-xunizhuomian2:before {
  41 + content: "\e675";
  42 +}
  43 +
  44 +.icon-gunshuiba:before {
  45 + content: "\e614";
  46 +}
  47 +
  48 +.icon-line1:before {
  49 + content: "\ebde";
  50 +}
  51 +
  52 +.icon-line:before {
  53 + content: "\e7fd";
  54 +}
  55 +
  56 +.icon-luyouqi:before {
  57 + content: "\ec62";
  58 +}
  59 +
16 .icon-sousuo:before { 60 .icon-sousuo:before {
17 content: "\e752"; 61 content: "\e752";
18 } 62 }
@@ -6,6 +6,83 @@ @@ -6,6 +6,83 @@
6 "description": "", 6 "description": "",
7 "glyphs": [ 7 "glyphs": [
8 { 8 {
  9 + "icon_id": "4675111",
  10 + "name": "虚拟桌面",
  11 + "font_class": "xunizhuomian",
  12 + "unicode": "e613",
  13 + "unicode_decimal": 58899
  14 + },
  15 + {
  16 + "icon_id": "7556320",
  17 + "name": "堡垒机",
  18 + "font_class": "baoleiji",
  19 + "unicode": "e63c",
  20 + "unicode_decimal": 58940
  21 + },
  22 + {
  23 + "icon_id": "9018063",
  24 + "name": "堡垒机sas",
  25 + "font_class": "baoleijisas",
  26 + "unicode": "e61a",
  27 + "unicode_decimal": 58906
  28 + },
  29 + {
  30 + "icon_id": "9344245",
  31 + "name": "堡垒机授权申请流程",
  32 + "font_class": "baoleijishouquanshenqingliucheng",
  33 + "unicode": "e657",
  34 + "unicode_decimal": 58967
  35 + },
  36 + {
  37 + "icon_id": "9865796",
  38 + "name": "虚拟桌面",
  39 + "font_class": "xunizhuomian1",
  40 + "unicode": "e63d",
  41 + "unicode_decimal": 58941
  42 + },
  43 + {
  44 + "icon_id": "11439036",
  45 + "name": "水坝b",
  46 + "font_class": "shuiba2",
  47 + "unicode": "e905",
  48 + "unicode_decimal": 59653
  49 + },
  50 + {
  51 + "icon_id": "25091142",
  52 + "name": "虚拟桌面",
  53 + "font_class": "xunizhuomian2",
  54 + "unicode": "e675",
  55 + "unicode_decimal": 58997
  56 + },
  57 + {
  58 + "icon_id": "25132617",
  59 + "name": "滚水坝",
  60 + "font_class": "gunshuiba",
  61 + "unicode": "e614",
  62 + "unicode_decimal": 58900
  63 + },
  64 + {
  65 + "icon_id": "19710217",
  66 + "name": "线",
  67 + "font_class": "line1",
  68 + "unicode": "ebde",
  69 + "unicode_decimal": 60382
  70 + },
  71 + {
  72 + "icon_id": "4767098",
  73 + "name": "line",
  74 + "font_class": "line",
  75 + "unicode": "e7fd",
  76 + "unicode_decimal": 59389
  77 + },
  78 + {
  79 + "icon_id": "5961324",
  80 + "name": "路由器",
  81 + "font_class": "luyouqi",
  82 + "unicode": "ec62",
  83 + "unicode_decimal": 60514
  84 + },
  85 + {
9 "icon_id": "577365", 86 "icon_id": "577365",
10 "name": "搜索", 87 "name": "搜索",
11 "font_class": "sousuo", 88 "font_class": "sousuo",
@@ -11,10 +11,12 @@ @@ -11,10 +11,12 @@
11 <slot :row="scope.row" :prop="item.prop" :column="item"> 11 <slot :row="scope.row" :prop="item.prop" :column="item">
12 <div v-if="typeof(item.render) == 'function'" > 12 <div v-if="typeof(item.render) == 'function'" >
13 <div v-if="typeof(item.click) == 'function'"> 13 <div v-if="typeof(item.click) == 'function'">
14 - <el-link :type="linkType" :underline="isLink" @click="item.click(scope.row)" v-html="item.render(scope.row)"></el-link> 14 + <!--<el-link :type="linkType" :underline="isLink" @click="item.click(scope.row)" v-html="item.render(scope.row)"></el-link>-->
  15 + <span @click="item.click(scope.row)" v-html="item.render(scope.row)"></span>
15 </div> 16 </div>
16 <div v-else> 17 <div v-else>
17 - <el-link :type="linkType" :underline="isLink" v-html="item.render(scope.row)"></el-link> 18 + <!-- <el-link :type="linkType" :underline="isLink" v-html="item.render(scope.row)"></el-link>-->
  19 + <span v-html="item.render(scope.row)"></span>
18 </div> 20 </div>
19 </div> 21 </div>
20 <span v-else> 22 <span v-else>
@@ -72,16 +72,7 @@ export default { @@ -72,16 +72,7 @@ export default {
72 type: Boolean, 72 type: Boolean,
73 default: false 73 default: false
74 }, 74 },
75 - // 是否展示链接  
76 - isLink:{  
77 - type: Boolean,  
78 - default: false  
79 - },  
80 - // 是否展示链接  
81 - linkType:{  
82 - type: String,  
83 - default: 'primary'  
84 - }, 75 +
85 }, 76 },
86 data() { 77 data() {
87 return {} 78 return {}
@@ -19,7 +19,7 @@ global.showLoading = (callback) => { @@ -19,7 +19,7 @@ global.showLoading = (callback) => {
19 const loading = ElementPlus.ElLoading.service({ 19 const loading = ElementPlus.ElLoading.service({
20 lock: true, 20 lock: true,
21 text: '', 21 text: '',
22 - spinner: 'icon-mj', 22 + spinner: ' ',
23 background: 'rgba(0, 0, 0, 0.7)', 23 background: 'rgba(0, 0, 0, 0.7)',
24 }); 24 });
25 25
1 /* 属性配置 -- start */ 1 /* 属性配置 -- start */
2 -.assets-configmanager {  
3 - padding: 6px 3px;  
4 - background: white; 2 +.form-post {
  3 + width: 100%;
5 } 4 }
6 -.col-class{  
7 - background: white;  
8 - padding: 10px;  
9 - margin: 5px; 5 +
  6 +/* 属性配置 -- end */
  7 +
  8 +.yfyw-user {
  9 + padding-top: 6px;
  10 + width: 99%;
10 } 11 }
11 -.yes{  
12 - color: green; 12 +
  13 +.yfyw-user .title{
  14 + font-weight: bold;text-align: left;padding-left: 40px;margin-bottom: 6px
13 } 15 }
14 -.no{  
15 - color: red; 16 +
  17 +.yfyw-user .form-class {
  18 + margin-bottom: 0px !important;
16 } 19 }
17 -.assets-configmanagers {  
18 - background: #F0F0F0; 20 +
  21 +.yfyw-user .el-form--label-top .el-form-item__label {
  22 + padding: 0px !important;
  23 + line-height: 20px !important;
19 } 24 }
20 -.assets-configmanager .config-tools { 25 +
  26 +.yfyw-user .el-form-item__content {
21 text-align: left; 27 text-align: left;
22 - margin-left: 2%;  
23 - margin-bottom: 6px; 28 + width: 300px;
24 } 29 }
25 30
26 -.assets-configmanagers .tbl-header-class {  
27 - color: #1E9FFF;  
28 - font-weight: bold; 31 +.yfyw-user .el-input__inner, .el-textarea__inner {
  32 + border: none;
  33 + border-bottom: solid 1px #DCDFE6;
  34 + border-bottom-left-radius: 0;
  35 + border-bottom-right-radius: 0;
29 } 36 }
30 37
31 -.assets-configmanagers .tbl-header-class th {  
32 - background: #EBF5F9 !important;  
33 - text-align: center; 38 +.yfyw-user .el-form-item__content .el-date-editor--date {
  39 + width: 300px;
34 } 40 }
35 41
36 -.assets-configmanagers .tbl-header-class th .cell {  
37 - text-align: center !important; 42 +.yfyw-user .form-textarea .el-form-item__content {
  43 + width: 90%;
38 } 44 }
39 45
40 -.assets-configmanager .el-table__row td{  
41 - padding: 2px 0px;!important;  
42 - text-align: center; 46 +.yfyw-user .zc-view {
  47 + display: flex;
  48 + flex-wrap: nowrap;
  49 + flex-direction: row;
  50 + padding-left: 40px;
  51 + border-bottom: solid 1px #DCDFE6;
43 } 52 }
44 -.form-class{  
45 - margin-bottom: 50px!important; 53 +
  54 +.yfyw-user .zc-view .zc-img {
  55 + width: 120px;
  56 + padding: 3px;
  57 +}
  58 +
  59 +.yfyw-user .zc-view .zc-img i {
  60 + font-size: 100px
  61 +}
  62 +
  63 +.yfyw-user .zc-view .zc-info {
  64 + width: calc(100% - 120px);
  65 + text-align: left;
  66 +}
  67 +
  68 +.yfyw-user .zc-view .zc-item {
  69 + display: flex;
  70 + flex-wrap: wrap
  71 +}
  72 +
  73 +.yfyw-user .zc-view .zc-item .zc-item-label {
  74 + width: 33%;
  75 + line-height: 30px
  76 +}
  77 +
  78 +.yfyw-user .zc-view .zc-item .zc-item-label .zc-item-label-left {
  79 + width: 200px;
  80 + font-weight: bold;
  81 + text-align: right
  82 +}
  83 +
  84 +.yfyw-user .zc-view .zc-item .zc-item-label .zc-item-label-right {
  85 + width: 200px;
  86 + text-align: left;
  87 + padding-left: 3px
  88 +}
  89 +
  90 +.yfyw-user .zc-view .zc-info .zc-item-tools {
  91 + text-align: right;
  92 + padding: 3px
46 } 93 }
47 -/* 属性配置 -- end */  
@@ -6,4 +6,16 @@ @@ -6,4 +6,16 @@
6 :showBorder="true" :currentPage="currentPage" :total="total" :loading="false" 6 :showBorder="true" :currentPage="currentPage" :total="total" :loading="false"
7 :showPage="true" :height="height" :pageSize="pageSize"></cm-table-page> 7 :showPage="true" :height="height" :pageSize="pageSize"></cm-table-page>
8 </div> 8 </div>
  9 + <cm-dialog :title="title" width="80%" :showDialogVisible="dialogFlg" @hidedialog="showDialog" :showFooter="false">
  10 + <template v-slot>
  11 + <div v-if="componentName && componentName != ''">
  12 + <component v-bind:is="componentName"
  13 + :docType="docType"
  14 + height="500"
  15 + :docTypeName="docTypeName"
  16 + :pageSize="pageSize"
  17 + :treeNode="treeNode" :parentNode="parentNode" :projectId="projectId"></component>
  18 + </div>
  19 + </template>
  20 + </cm-dialog>
9 </div> 21 </div>
1 export default { 1 export default {
2 name: 'projectUserIndex', 2 name: 'projectUserIndex',
3 template: '', 3 template: '',
4 - components: {}, 4 + components: {
  5 + // 人员信息
  6 + 'USER': Vue.defineAsyncComponent(
  7 + () => myImport('components/page/operationMaintenance/user/index')
  8 + ),
  9 + //文档
  10 + // 个人保密协议(THREE_PERSONAGE_NDA)
  11 + // 月度总结 THREE_MONTHLY_SUMMARY
  12 + // 月报 FOUR_MONTHLY
  13 + // 考勤记录 FOUR_CHECKING_IN
  14 + // 健康检查报告 FOUR_HEALTH
  15 + // 文档资料 TWO_DOCUMENT_MATERIAL
  16 + // 项目保密协议 TWO_NDA
  17 + 'DOCUMENT': Vue.defineAsyncComponent(
  18 + () => myImport('components/page/operationMaintenance/doc/index')
  19 + ),
  20 + },
5 data() { 21 data() {
6 return {} 22 return {}
7 }, 23 },
@@ -26,16 +42,29 @@ export default { @@ -26,16 +42,29 @@ export default {
26 type: Number, 42 type: Number,
27 default: 10 43 default: 10
28 }, 44 },
  45 +
29 }, 46 },
30 setup(props, {attrs, slots, emit}) { 47 setup(props, {attrs, slots, emit}) {
31 48
32 const {proxy} = Vue.getCurrentInstance(); 49 const {proxy} = Vue.getCurrentInstance();
33 50
  51 + let title = Vue.ref('');
  52 + let docType = Vue.ref('');
  53 + let docTypeName = Vue.ref('');
  54 + let componentName = Vue.ref('');
  55 + let dialogFlg = Vue.ref(false);
  56 +
34 57
35 let columns = Vue.ref([{ 58 let columns = Vue.ref([{
36 prop: 'nickname', 59 prop: 'nickname',
37 label: '运维人员姓名', 60 label: '运维人员姓名',
38 sortable: true, 61 sortable: true,
  62 + click: function (row) {
  63 + // 点击弹框展示人员信息
  64 + title.value = "人员信息";
  65 + componentName.value = "USER";
  66 + showDialog(true);
  67 + }
39 }, { 68 }, {
40 prop: 'phone', 69 prop: 'phone',
41 label: '联系电话', 70 label: '联系电话',
@@ -72,9 +101,16 @@ export default { @@ -72,9 +101,16 @@ export default {
72 label: '个人信息', 101 label: '个人信息',
73 sortable: true, 102 sortable: true,
74 width: '180px', 103 width: '180px',
  104 + click: function (row) {
  105 + // 点击弹框展示 个人信息
  106 + title.value = "个人信息";
  107 + componentName.value = "USER";
  108 + props.parentNode.id = row.id;
  109 + showDialog(true);
  110 + },
75 render: function (row) { 111 render: function (row) {
76 if (row.personalMessage == "YES") { 112 if (row.personalMessage == "YES") {
77 - return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; 113 + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;color:#409EFF"></i><span></span>`;
78 } else { 114 } else {
79 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; 115 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`;
80 } 116 }
@@ -82,12 +118,20 @@ export default { @@ -82,12 +118,20 @@ export default {
82 118
83 }, { 119 }, {
84 prop: 'personalSecrecyBook', 120 prop: 'personalSecrecyBook',
85 - label: '个人保密协议书', 121 + label: '入场资料',
86 sortable: true, 122 sortable: true,
87 width: '180px', 123 width: '180px',
  124 + click: function (row) {
  125 + // 点击弹框展示 个人保密协议书
  126 + title.value = "入场资料";
  127 + componentName.value = "DOCUMENT";
  128 + docType.value = "THREE_PERSONAGE_NDA";
  129 + docTypeName.value = "入场资料";
  130 + showDialog(true);
  131 + },
88 render: function (row) { 132 render: function (row) {
89 if (row.personalSecrecyBook == "YES") { 133 if (row.personalSecrecyBook == "YES") {
90 - return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; 134 + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;color:#409EFF"></i><span></span>`;
91 } else { 135 } else {
92 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; 136 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`;
93 } 137 }
@@ -97,9 +141,17 @@ export default { @@ -97,9 +141,17 @@ export default {
97 label: '月度总结', 141 label: '月度总结',
98 sortable: true, 142 sortable: true,
99 width: '180px', 143 width: '180px',
  144 + click: function (row) {
  145 + // 点击弹框展示 月度总结
  146 + title.value = "月度总结";
  147 + componentName.value = "DOCUMENT";
  148 + docType.value = "THREE_MONTHLY_SUMMARY";
  149 + docTypeName.value = "月度总结";
  150 + showDialog(true);
  151 + },
100 render: function (row) { 152 render: function (row) {
101 if (row.monthlySummary == "YES") { 153 if (row.monthlySummary == "YES") {
102 - return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; 154 + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;color:#409EFF"></i><span></span>`;
103 } else { 155 } else {
104 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; 156 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`;
105 157
@@ -107,6 +159,11 @@ export default { @@ -107,6 +159,11 @@ export default {
107 } 159 }
108 }]); 160 }]);
109 161
  162 +
  163 + let showDialog = (flg) => {
  164 + dialogFlg.value = flg;
  165 + }
  166 +
110 let dataList = Vue.ref([]); 167 let dataList = Vue.ref([]);
111 let currentPage = Vue.ref(1); 168 let currentPage = Vue.ref(1);
112 let total = Vue.ref(0); 169 let total = Vue.ref(0);
@@ -140,6 +197,7 @@ export default { @@ -140,6 +197,7 @@ export default {
140 }); 197 });
141 } 198 }
142 199
  200 +
143 // 挂载完 201 // 挂载完
144 Vue.onMounted(() => { 202 Vue.onMounted(() => {
145 getPage(); 203 getPage();
@@ -160,7 +218,13 @@ export default { @@ -160,7 +218,13 @@ export default {
160 dataList, 218 dataList,
161 currentPage, 219 currentPage,
162 total, 220 total,
163 - getPage 221 + getPage,
  222 + title,
  223 + docType,
  224 + docTypeName,
  225 + dialogFlg,
  226 + showDialog,
  227 + componentName
164 } 228 }
165 } 229 }
166 } 230 }
1 -<div style="padding-top: 20px;">  
2 - <el-divider content-position="left">个人信息</el-divider>  
3 - <el-form :model="ruleForm" label-width="120px" :size="$global.elementSize">  
4 - <el-row>  
5 - <el-col :span="8">  
6 - <el-form-item label="姓名" prop="nickname" class="form-class">  
7 - <el-input v-model="ruleForm.nickname" disabled style='width: 190px;'></el-input>  
8 - </el-form-item>  
9 - <el-form-item label="性别" prop="sex" class="form-class">  
10 - <el-radio-group v-model="ruleForm.sex">  
11 - <el-radio :label="1"></el-radio>  
12 - <el-radio :label="0"></el-radio>  
13 - </el-radio-group>  
14 - </el-form-item>  
15 - <el-form-item label="学历" prop="education" class="form-class">  
16 - <el-input v-model="ruleForm.education" style='width: 190px;'></el-input>  
17 - </el-form-item>  
18 - <el-form-item label="手机号" prop="phone" class="form-class">  
19 - <el-input v-model="ruleForm.phone" disabled style='width: 190px;'></el-input>  
20 - </el-form-item>  
21 - <el-form-item label="电子邮箱" prop="email" class="form-class">  
22 - <el-input v-model="ruleForm.email" style='width: 190px;'></el-input>  
23 - </el-form-item> 1 +<div class="yfyw-user">
  2 + <div>
  3 + <el-avatar :size="80" :src="imageUrl">
  4 + <i class="iconfont icon-yonghu" style="font-size: 80px;"/>
  5 + </el-avatar>
  6 + <el-upload
  7 + class="upload-demo"
  8 + :show-file-list="false"
  9 + :before-upload="beforeAvatarUpload"
  10 + :multiple="false"
  11 + :http-request="getFile"
  12 + :auto-upload="true">
  13 + <el-button size="mini" type="primary">上传照片</el-button>
  14 + </el-upload>
  15 + </div>
  16 + <div class="title">
  17 + <i class="iconfont icon-icon--yingbing" /> 人员基本信息
  18 + </div>
  19 + <div style="padding-left: 40px;margin-bottom: 6px">
  20 + <el-form :model="ruleForm" label-width="120px" :size="$global.elementSize" label-position="top" >
  21 + <el-row :gutter="5">
  22 + <el-col :span="8">
  23 + <el-form-item label="姓名" prop="nickname" class="form-class">
  24 + <el-input v-model="ruleForm.nickname" :readonly="isAdmin()"></el-input>
  25 + </el-form-item>
  26 + </el-col>
  27 + <el-col :span="8">
  28 + <el-form-item label="性别" prop="sex" class="form-class">
  29 + <el-radio-group v-model="ruleForm.sex">
  30 + <el-radio :label="1"></el-radio>
  31 + <el-radio :label="0"></el-radio>
  32 + </el-radio-group>
  33 + </el-form-item>
  34 + </el-col>
  35 + <el-col :span="8">
  36 + <el-form-item label="年龄" prop="age" class="form-class">
  37 + <el-input v-model="ruleForm.age" type="number"></el-input>
  38 + </el-form-item>
  39 + </el-col>
  40 + </el-row>
24 41
25 - <el-form-item label="入职时间" prop="entryTime" class="form-class">  
26 - <el-date-picker  
27 - disabled  
28 - v-model="ruleForm.entryTime"  
29 - type="date"  
30 - style='width: 190px;'  
31 - placeholder="选择日期">  
32 - </el-date-picker>  
33 - </el-form-item>  
34 - <el-form-item label="获得证书" prop="certificate" disabled class="form-class">  
35 - <el-input v-model="ruleForm.certificate" style='width: 190px;'></el-input>  
36 - </el-form-item>  
37 - </el-col>  
38 - <el-col :span="8">  
39 - <el-form-item label="所在公司" prop="company" class="form-class">  
40 - <el-input v-model="ruleForm.company" disabled style='width: 190px;'></el-input>  
41 - </el-form-item>  
42 - <el-form-item label="年龄" prop="age" class="form-class">  
43 - <el-input v-model="ruleForm.age" style='width: 190px;'></el-input>  
44 - </el-form-item>  
45 - <el-form-item label="毕业院校" prop="university" class="form-class">  
46 - <el-input v-model="ruleForm.university" disabled style='width: 190px;'></el-input>  
47 - </el-form-item>  
48 - <el-form-item label="座机号码" prop="tel" class="form-class">  
49 - <el-input v-model="ruleForm.tel" style='width: 190px;'></el-input>  
50 - </el-form-item>  
51 - <el-form-item label="家庭住址" prop="post" class="form-class">  
52 - <el-input v-model="ruleForm.post" style='width: 190px;'></el-input>  
53 - </el-form-item>  
54 - <el-form-item label="离职时间" prop="quitTime" class="form-class">  
55 - <el-date-picker  
56 - v-model="ruleForm.quitTime"  
57 - disabled  
58 - type="date"  
59 - style='width: 190px;'  
60 - placeholder="选择日期">  
61 - </el-date-picker>  
62 - </el-form-item>  
63 - </el-col>  
64 - <el-col :span="8">  
65 - <el-image style="width: 200px; height: 200px" :src="imageUrl"></el-image>  
66 - <el-upload  
67 - class="upload-demo"  
68 - :show-file-list="false"  
69 - :before-upload="beforeAvatarUpload"  
70 - :multiple="false"  
71 - :http-request="getFile"  
72 - :auto-upload="true">  
73 - <el-button size="small" type="primary">上传照片</el-button>  
74 - </el-upload>  
75 - </el-col>  
76 - </el-row>  
77 - <div style="text-align: center;">  
78 - <el-button type="primary" size="small" @click="saveUser">保存</el-button> 42 +
  43 + <el-row :gutter="5">
  44 + <el-col :span="8">
  45 + <el-form-item label="座机号码" prop="tel" class="form-class">
  46 + <el-input v-model="ruleForm.tel"></el-input>
  47 + </el-form-item>
  48 + </el-col>
  49 + <el-col :span="8">
  50 + <el-form-item label="手机号" prop="phone" class="form-class">
  51 + <el-input v-model="ruleForm.phone" :readonly="isAdmin()"></el-input>
  52 + </el-form-item>
  53 + </el-col>
  54 + <el-col :span="8">
  55 + <el-form-item label="电子邮箱" prop="email" class="form-class">
  56 + <el-input v-model="ruleForm.email"></el-input>
  57 + </el-form-item>
  58 + </el-col>
  59 + </el-row>
  60 +
  61 + <el-row :gutter="5">
  62 + <el-col :span="8">
  63 + <el-form-item label="毕业院校" prop="university" class="form-class">
  64 + <el-input v-model="ruleForm.university" :readonly="isAdmin()"></el-input>
  65 + </el-form-item>
  66 +
  67 + </el-col>
  68 + <el-col :span="8">
  69 + <el-form-item label="学历" prop="education" class="form-class">
  70 + <el-input v-model="ruleForm.education"></el-input>
  71 + </el-form-item>
  72 + </el-col>
  73 + <el-col :span="8">
  74 + <el-form-item label="所在公司" prop="company" class="form-class">
  75 + <el-input v-model="ruleForm.company" :readonly="isAdmin()"></el-input>
  76 + </el-form-item>
  77 + </el-col>
  78 + </el-row>
  79 +
  80 + <el-row :gutter="5">
  81 + <el-col :span="8">
  82 + <el-form-item label="在职状态" prop="certificate" :readonly="isAdmin()" class="form-class">
  83 + <el-radio-group v-model="ruleForm.state">
  84 + <el-radio :label="1">在职</el-radio>
  85 + <el-radio :label="2">离职</el-radio>
  86 + </el-radio-group>
  87 + </el-form-item>
  88 + </el-col>
  89 + <el-col :span="8">
  90 + <el-form-item label="入职时间" prop="entryTime" class="form-class">
  91 + <el-date-picker
  92 + :readonly="isAdmin()"
  93 + v-model="ruleForm.entryTime"
  94 + type="date"
  95 + placeholder="选择日期">
  96 + </el-date-picker>
  97 + </el-form-item>
  98 + </el-col>
  99 + <el-col :span="8">
  100 + <el-form-item label="离职时间" prop="quitTime" class="form-class">
  101 + <el-date-picker
  102 + v-model="ruleForm.quitTime"
  103 + :readonly="isAdmin()"
  104 + type="date"
  105 + placeholder="选择日期">
  106 + </el-date-picker>
  107 + </el-form-item>
  108 + </el-col>
  109 + </el-row>
  110 +
  111 + <el-row :gutter="5">
  112 + <el-col :span="24">
  113 + <el-form-item label="获得证书" prop="post" class="form-textarea">
  114 + <el-input v-model="ruleForm.certificate" type="textarea"></el-input>
  115 + </el-form-item>
  116 + </el-col>
  117 + </el-row>
  118 + <el-row :gutter="5">
  119 + <el-col :span="24">
  120 + <el-form-item label="家庭住址" prop="post" class="form-textarea">
  121 + <el-input v-model="ruleForm.post" type="textarea"></el-input>
  122 + </el-form-item>
  123 + </el-col>
  124 + </el-row>
  125 + <div style="text-align: center;padding-top: 10px">
  126 + <el-button type="primary" size="mini" @click="saveUser">保存基本信息</el-button>
  127 + </div>
  128 + </el-form>
  129 + </div>
  130 + <!--资产信息-->
  131 + <div class="title">
  132 + <i class="iconfont icon-liebiaomoshi"/> 资产信息
  133 +
  134 + <el-dropdown size="mini" split-button @click="assetsAdd('bastion',`新建${icon['bastion'].name}资产`)" style="margin-left: 20px">
  135 + <i class="icon el-icon-plus"/>添加{{icon['bastion'].name}}
  136 + <template #dropdown>
  137 + <div style="max-height: 300px;overflow-y: auto">
  138 + <el-dropdown-menu>
  139 + <el-dropdown-item v-for="(v,k) in icon" @click="assetsAdd(k,`新建${icon[k].name}资产`)">
  140 + 添加{{v.name}}
  141 + </el-dropdown-item>
  142 + </el-dropdown-menu>
  143 + </div>
  144 + </template>
  145 + </el-dropdown>
  146 + </div>
  147 +
  148 + <div v-for="(v,k) in assetsMaps">
  149 + <div class="zc-view" v-for="(arr,index) in v">
  150 + <div class="zc-img">
  151 + <i class="iconfont" :class="icon[k].icon"></i><br/>
  152 + {{ icon[k].name }}
  153 + <span v-if="index > 0">({{index}})</span>
  154 + </div>
  155 + <div class="zc-info">
  156 + <div class="zc-item">
  157 + <div class="zc-item-label" v-for="(item,index2) in arr">
  158 + <span class="zc-item-label-left">{{item.name}}:</span>
  159 + <span class="zc-item-label-right">{{item.value}}</span>
  160 + </div>
  161 + </div>
  162 + <div class="zc-item-tools">
  163 + <el-button-group size="mini">
  164 + <el-button @click="btnClick('add',arr,`新建${icon[k].name}资产`)">
  165 + <i class="el-icon-plus"/>
  166 + </el-button>
  167 + <!--<el-button @click="btnClick('save',arr,`保存${icon[k].name}资产`)">
  168 + <i class="el-icon-check"/>
  169 + </el-button>-->
  170 + <el-button @click="btnClick('edit',arr,`编辑${icon[k].name}资产`)">
  171 + <i class="el-icon-edit"/>
  172 + </el-button>
  173 + <el-button @click="deleteAssets(arr,`删除${icon[k].name}资产`)">
  174 + <i class="el-icon-remove"/>
  175 + </el-button>
  176 + </el-button-group>
  177 + </div>
  178 + </div>
79 </div> 179 </div>
80 - <!-- <el-form-item>  
81 - <el-button type="primary" @click="submitForm('ruleForm')"  
82 - >Create</el-button  
83 - >  
84 - <el-button @click="resetForm('ruleForm')">Reset</el-button>  
85 - </el-form-item> -->  
86 - </el-form> 180 + </div>
  181 +
  182 + <cm-dialog :title="btnType.title" width="60%" :showDialogVisible="op" @hidedialog="showDialog" :showFooter="true" @okfunc="okFunc">
  183 + <template v-slot style="padding: 10px">
  184 + <el-form label-width="120px" :size="$global.elementSize" label-position="top" >
  185 + <el-row :gutter="5" >
  186 + <el-col :span="8" v-for="item in btnType.data">
  187 + <el-form-item :label="item.name" :prop="item.name" class="form-class">
  188 + <el-input v-if="item.extend && item.extend.dict == undefined" v-model="item.value"></el-input>
  189 +
  190 + <el-select v-else v-model="item.value" :placeholder="`请选择${item.name}`">
  191 + <el-option
  192 + v-for="item in item.extend.dict"
  193 + :key="item.value"
  194 + :label="item.name"
  195 + :value="item.name" >
  196 + </el-option>
  197 + </el-select>
  198 +
  199 + </el-form-item>
  200 + </el-col>
  201 +
  202 + </el-row>
  203 + </el-form>
  204 + </template>
  205 + </cm-dialog>
  206 +
  207 +
87 </div> 208 </div>
  1 +const assets = (props, {attrs, slots, emit}) => {
  2 +
  3 + const {proxy} = Vue.getCurrentInstance();
  4 + let assetsMaps = Vue.ref({});
  5 + let btnType = Vue.ref({
  6 + flg: '',
  7 + data: []
  8 + });
  9 +
  10 + // 类型 bastion 堡垒机,dam 防水坝,virtual 虚拟桌面
  11 + let icon = {
  12 + bastion: {
  13 + name: '堡垒机',
  14 + icon: 'icon-baoleiji'
  15 + },
  16 + dam: {
  17 + name: '防水坝',
  18 + icon: 'icon-shuiba2'
  19 + },
  20 + virtual: {
  21 + name: '虚拟桌面',
  22 + icon: 'icon-xunizhuomian'
  23 + },
  24 + }
  25 +
  26 + // 查询列表
  27 + let getAssets = () => {
  28 + proxy.$http.get(`/api-web/person/assets/userList/${props.parentNode.id}`, {}, function (res) {
  29 + if (res && res.map) {
  30 + assetsMaps.value = res.map;
  31 + }
  32 + });
  33 + }
  34 +
  35 + let assetsAdd = (type, msg) => {
  36 + proxy.$http.get(`/api-web/person/assets/typeList/${type}`, {}, function (res) {
  37 + if (res && res.data && res.data.length > 0) {
  38 + btnClick('add',res.data,msg);
  39 + } else {
  40 + proxy.$global.showMsg("没有配置属性!","warning");
  41 + }
  42 + });
  43 + }
  44 +
  45 + /**
  46 + * 新增资产
  47 + * <p>
  48 + * 作者: Wang
  49 + * 时间:2021/11/3 20:14
  50 + */
  51 + let btnClick = (flg, arr, title) => {
  52 + let data = [];
  53 + if ('add' == flg) {
  54 + // 新增复制
  55 + arr.map((v) => {
  56 + let obj = {...v};
  57 + obj.value = '';
  58 + obj.id = 0;
  59 + obj.groupings = (new Date()).getTime();
  60 + data.push(obj)
  61 + })
  62 + } else {
  63 + data = arr;
  64 + }
  65 +
  66 + data.map(function (v){
  67 + let str = v.extend;
  68 + if(str){
  69 + try {
  70 + let json = JSON.parse(str);
  71 + v.extend = json;
  72 + }catch (e){
  73 + }
  74 + }
  75 + })
  76 +
  77 + btnType.value = {
  78 + flg: flg,
  79 + data: data,
  80 + title: title
  81 + }
  82 + showDialog(true);
  83 + }
  84 +
  85 + /**
  86 + * 新增资产
  87 + * <p>
  88 + * 作者: Wang
  89 + * 时间:2021/11/3 20:14
  90 + */
  91 + let addAssets = () => {
  92 + let data = btnType.value.data
  93 + data.map(function (v){
  94 + v.extend = JSON.stringify(v.extend);
  95 + })
  96 + proxy.$http.post(`/api-web/person/assets/add/${props.parentNode.id}`,data , function (res) {
  97 + if (res && res.success) {
  98 + proxy.$global.showMsg("添加成功");
  99 + showDialog(false);
  100 + getAssets();
  101 + }
  102 + });
  103 + }
  104 +
  105 +
  106 + /**
  107 + * 保存资产
  108 + * <p>
  109 + * 作者: Wang
  110 + * 时间:2021/11/3 20:14
  111 + */
  112 + let saveAssets = () => {
  113 + let data = btnType.value.data
  114 + data.map(function (v){
  115 + v.extend = JSON.stringify(v.extend);
  116 + })
  117 + proxy.$http.post(`/api-web/person/assets/edit/${props.parentNode.id}`, data, function (res) {
  118 + if (res && res.success) {
  119 + proxy.$global.showMsg("编辑成功");
  120 + showDialog(false);
  121 + getAssets();
  122 + }
  123 + });
  124 + }
  125 +
  126 + /**
  127 + * 删除资产
  128 + * <p>
  129 + * 作者: Wang
  130 + * 时间:2021/11/3 20:14
  131 + */
  132 + let deleteAssets = (arr) => {
  133 + proxy.$global.confirm(`您确认永久删除该资产信息吗?`,function (){
  134 + proxy.$http.post(`/api-web/person/assets/delete/${props.parentNode.id}`, arr, function (res) {
  135 + if (res && res.success) {
  136 + proxy.$global.showMsg("删除成功");
  137 + } else {
  138 + proxy.$global.showMsg("删除失败,资产不存在或者已被删除!","error");
  139 + }
  140 + showDialog(false);
  141 + getAssets();
  142 + });
  143 + })
  144 + }
  145 +
  146 + // 弹框标识
  147 + let op = Vue.ref(false);
  148 +
  149 + /**
  150 + * 展示编辑弹框
  151 + * <p>
  152 + * 作者: Wang
  153 + * 时间:2021/11/3 20:17
  154 + */
  155 + let showDialog = (flg) => {
  156 + op.value = flg;
  157 + }
  158 +
  159 + let okFunc = () => {
  160 + let flg = btnType.value.flg;
  161 + if (flg == 'add') {
  162 + addAssets();
  163 + } else if (flg == 'edit') {
  164 + saveAssets();
  165 + }
  166 + }
  167 +
  168 + return {
  169 + icon,
  170 + getAssets,
  171 + assetsMaps,
  172 + addAssets,
  173 + saveAssets,
  174 + deleteAssets,
  175 + op,
  176 + showDialog,
  177 + okFunc,
  178 + btnClick,
  179 + btnType,
  180 + assetsAdd
  181 + }
  182 +}
  183 +
  184 +
1 export default { 185 export default {
2 name: 'projectPJIndex', 186 name: 'projectPJIndex',
3 template: '', 187 template: '',
@@ -25,6 +209,7 @@ export default { @@ -25,6 +209,7 @@ export default {
25 const {proxy} = Vue.getCurrentInstance(); 209 const {proxy} = Vue.getCurrentInstance();
26 let imageUrl = Vue.ref(''); 210 let imageUrl = Vue.ref('');
27 211
  212 +
28 let ruleForm = Vue.ref({ 213 let ruleForm = Vue.ref({
29 nickname: '', 214 nickname: '',
30 sex: 0, 215 sex: 0,
@@ -48,11 +233,12 @@ export default { @@ -48,11 +233,12 @@ export default {
48 let getPage = () => { 233 let getPage = () => {
49 proxy.$http.get("/api-web/bOpsPerson/search", { 234 proxy.$http.get("/api-web/bOpsPerson/search", {
50 "nickname": props.parentNode.label, 235 "nickname": props.parentNode.label,
  236 + "id": props.parentNode.id,
51 "projectId": props.projectId 237 "projectId": props.projectId
52 }, function (res) { 238 }, function (res) {
53 if (res && res.object) { 239 if (res && res.object) {
54 ruleForm.value = res.object 240 ruleForm.value = res.object
55 - }else { 241 + } else {
56 ruleForm.value = res.object 242 ruleForm.value = res.object
57 } 243 }
58 }); 244 });
@@ -65,7 +251,7 @@ export default { @@ -65,7 +251,7 @@ export default {
65 // 保存用户信息 251 // 保存用户信息
66 let saveUser = () => { 252 let saveUser = () => {
67 253
68 - proxy.$http.post("/api-web/bOpsPerson/saveOrUpdate",ruleForm.value , function (res) { 254 + proxy.$http.post("/api-web/bOpsPerson/saveOrUpdate", ruleForm.value, function (res) {
69 if (res && res.code == 0) { 255 if (res && res.code == 0) {
70 proxy.$global.showMsg('保存成功!'); 256 proxy.$global.showMsg('保存成功!');
71 } 257 }
@@ -73,10 +259,10 @@ export default { @@ -73,10 +259,10 @@ export default {
73 } 259 }
74 260
75 261
76 - let getFile = (param) =>{ 262 + let getFile = (param) => {
77 let fileObj = param.file 263 let fileObj = param.file
78 let params = { 264 let params = {
79 - file:fileObj, 265 + file: fileObj,
80 id: props.parentNode.id 266 id: props.parentNode.id
81 } 267 }
82 // 上传文件 268 // 上传文件
@@ -88,30 +274,64 @@ export default { @@ -88,30 +274,64 @@ export default {
88 imageUrl.value = URL.createObjectURL(fileObj); 274 imageUrl.value = URL.createObjectURL(fileObj);
89 } 275 }
90 276
91 - let beforeAvatarUpload = (file) =>{ 277 + let beforeAvatarUpload = (file) => {
92 const isJPG = file.type.indexOf('image/') != -1 278 const isJPG = file.type.indexOf('image/') != -1
93 if (!isJPG) { 279 if (!isJPG) {
94 - proxy.$global.showMsg('您上传的不是图片文件,请选择图片!','error'); 280 + proxy.$global.showMsg('您上传的不是图片文件,请选择图片!', 'error');
95 } 281 }
96 return isJPG 282 return isJPG
97 } 283 }
98 284
  285 + let isAdmin = () => {
  286 + return localStorage.getItem('lgn') != 'admin';
  287 + }
  288 +
  289 + const {
  290 + icon,
  291 + getAssets,
  292 + assetsMaps,
  293 + addAssets,
  294 + saveAssets,
  295 + deleteAssets,
  296 + op,
  297 + showDialog,
  298 + okFunc,
  299 + btnClick,
  300 + btnType,
  301 + assetsAdd
  302 + } = assets(props, {attrs, slots, emit});
  303 +
99 // // 挂载完 304 // // 挂载完
100 Vue.onMounted(() => { 305 Vue.onMounted(() => {
101 getPage(); 306 getPage();
  307 + getAssets();
102 }) 308 })
103 309
104 // 监听编辑状态 310 // 监听编辑状态
105 Vue.watch(() => props.projectId, (newValue, oldVlaue) => { 311 Vue.watch(() => props.projectId, (newValue, oldVlaue) => {
106 getPage(); 312 getPage();
  313 + getAssets();
107 }); 314 });
108 -  
109 return { 315 return {
110 imageUrl, 316 imageUrl,
111 ruleForm, 317 ruleForm,
112 saveUser, 318 saveUser,
113 getFile, 319 getFile,
114 beforeAvatarUpload, 320 beforeAvatarUpload,
  321 + isAdmin,
  322 + // 资产属性
  323 + icon,
  324 + getAssets,
  325 + assetsMaps,
  326 + addAssets,
  327 + saveAssets,
  328 + deleteAssets,
  329 + op,
  330 + showDialog,
  331 + okFunc,
  332 + btnClick,
  333 + btnType,
  334 + assetsAdd
115 } 335 }
116 } 336 }
117 } 337 }
@@ -37,7 +37,7 @@ export default { @@ -37,7 +37,7 @@ export default {
37 label: '日常资料', 37 label: '日常资料',
38 render: function (row) { 38 render: function (row) {
39 if(row.dayMaterial =="YES"){ 39 if(row.dayMaterial =="YES"){
40 - return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; 40 + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;color:#409EFF"></i><span></span>`;
41 }else{ 41 }else{
42 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; 42 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`;
43 } 43 }
@@ -49,7 +49,7 @@ export default { @@ -49,7 +49,7 @@ export default {
49 label: '文档资料', 49 label: '文档资料',
50 render: function (row) { 50 render: function (row) {
51 if(row.documentMaterial =="YES"){ 51 if(row.documentMaterial =="YES"){
52 - return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; 52 + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;color:#409EFF"></i><span></span>`;
53 }else{ 53 }else{
54 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; 54 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`;
55 } 55 }
@@ -60,7 +60,7 @@ export default { @@ -60,7 +60,7 @@ export default {
60 label: '项目保密协议', 60 label: '项目保密协议',
61 render: function (row) { 61 render: function (row) {
62 if(row.nda =="YES"){ 62 if(row.nda =="YES"){
63 - return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;"></i><span></span>`; 63 + return `<i class="iconfont icon-icon--yes" style="font-size: 22px;margin-right: 10px;color:#409EFF"></i><span></span>`;
64 }else{ 64 }else{
65 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`; 65 return `<i class="iconfont icon-icon--shanchu" style="font-size: 22px;margin-right: 10px;color:red"></i><span></span>`;
66 } 66 }
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 </div> 14 </div>
15 </el-col> 15 </el-col>
16 <el-col :span="20" > 16 <el-col :span="20" >
17 - <div class="cm-card" :style="{'min-height':height+'px','height':'100%','padding-left':'5px'}" > 17 + <div class="cm-card" :style="{'max-height':height+'px','height':'100%','padding-left':'5px'}" >
18 <component v-bind:is="componentName" 18 <component v-bind:is="componentName"
19 :docType="docType" 19 :docType="docType"
20 :docTypeName="docTypeName" 20 :docTypeName="docTypeName"