cloud-web-corejs 1.0.54-dev.756 → 1.0.54-dev.759

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1158 +1,1158 @@
1
- <template>
2
- <div class="workbenches">
3
- <div class="workbenches-head">
4
- <span class="f-blue">{{ $t1("欢迎您") }}</span>
5
-
6
- <el-link
7
- class="fr"
8
- icon="iconfont icon-tuichudenglu"
9
- :underline="false"
10
- @click="logout"
11
- >{{ $t1("退出登录") }}</el-link
12
- >
13
- <!-- <el-link class="fr" icon="el-icon-set-up" :underline="false" @click="openCompanyDialog" style="margin-right:10px">切换组织</el-link> -->
14
- <span class="fr">{{ $t1("您好") }},{{ userInfo.nickName }}</span>
15
- </div>
16
- <div class="workbenches-box">
17
- <el-row>
18
- <el-col :span="16">
19
- <div class="w-box" style="margin-right: 16px">
20
- <div class="w-b-head">
21
- <div class="tit fl">
22
- <b>{{ $t1("应用场景") }}</b>
23
- </div>
24
- <!-- <div class="fr">
25
- <el-link icon="iconfont icon-shuaxin" :underline="false">刷新</el-link>
26
- <el-link :underline="false">查看更多 +</el-link>
27
- </div> -->
28
- </div>
29
-
30
- <div class="use-cases">
31
- <template v-for="workbenchMenu in workbenchMenus">
32
- <div class="item" :key="workbenchMenu.id">
33
- <div class="t">
34
- <span>{{ workbenchMenu.menuName }}</span>
35
- </div>
36
- <div class="c">
37
- <div
38
- class="i-block"
39
- v-for="(router2, index1) in workbenchMenu.children"
40
- :key="index1"
41
- @click="openRoutePath(router2)"
42
- >
43
- <i
44
- class="icon iconfont"
45
- :class="router2.menuImg || 'icon-charge-fill'"
46
- :style="
47
- 'background-color: ' +
48
- (router2.menuImgColor || '#3B82F6') +
49
- ';'
50
- "
51
- ></i>
52
- <span>{{ router2.menuName }}</span>
53
- <span class="tips" v-if="!!router2.note">{{
54
- router2.note
55
- }}</span>
56
- </div>
57
- <!-- <div class="i-block">
58
- <i class="icon iconfont icon-charge-fill" style="background-color:#3B82F6"></i>
59
-
60
- <span>研发费用付款</span>
61
- <span class="tips">(技术转让费、设计开发费、检测费、试验费、信息费、标准化费用)</span>
62
- </div> -->
63
- </div>
64
- </div>
65
- </template>
66
- </div>
67
-
68
- <!-- <template v-for="menuModule in $baseEventBus.menuModules">
69
- <div class="use-cases" style="height: calc(100vh - 193px);" :key="menuModule.id" v-show="menuModule.id === $baseEventBus.currentMenuId">
70
-
71
- <div class="item" v-for="router1 in menuModule.children" :key="router1.id">
72
- <div class="t"><span>{{router1.menuName}}</span></div>
73
- <div class="c">
74
- <div class="i-block" v-for="(router2, index1) in router1.children"
75
- :key="index1" @click="rourteTo(router2)"><i class="icon" style="background-color: #3B82F6;">{{router2.menuName.substring(0,1)}}</i><span>{{router2.menuName}}</span></div>
76
- </div>
77
- </div>
78
- </div>
79
- </template> -->
80
- </div>
81
- </el-col>
82
- <el-col :span="8">
83
- <div class="w-box" style="height: 60%">
84
- <div class="w-b-head">
85
- <div class="tit fl">
86
- <b>{{ $t1("待办事项") }}</b>
87
- <i class="nums">{{ unDoWfRows.length }}</i>
88
- </div>
89
- <div class="fr">
90
- <el-link :underline="false" @click="toWfManageList"
91
- >{{ $t1("查看更多") }} +</el-link
92
- >
93
- </div>
94
- </div>
95
- <div class="agenda-box">
96
- <div
97
- class="item"
98
- v-for="item in unDoWfRows"
99
- :key="item.id"
100
- @click="openWfDialog(item)"
101
- >
102
- <p class="name">{{ item.name }}</p>
103
- <p class="info">
104
- <span>{{ $t1("单据类型") }}:{{ item.objTypeName }}</span>
105
- <span>{{ $t1("启动人") }}:{{ item.starterName }}</span>
106
- </p>
107
- </div>
108
- </div>
109
- </div>
110
- <div class="w-box" style="margin-top: 16px; height: calc(40% - 16px)">
111
- <div class="w-b-head">
112
- <div class="tit fl">
113
- <b>{{ $t1("通知公告") }}</b>
114
- <i class="nums">{{ systemNotices.length }}</i>
115
- </div>
116
- <div class="fr">
117
- <el-link :underline="false" @click="openSystemNoticeDialog()"
118
- >{{ $t1("查看更多") }} +</el-link
119
- >
120
- </div>
121
- </div>
122
- <div class="wnotice-box">
123
- <!-- <div class="item">
124
- <i class="no-read">未读</i>
125
- <span class="name">紧急通知</span>
126
- <span class="date">2025-10-12</span>
127
- </div> -->
128
- <div
129
- class="item"
130
- v-for="systemNotice in systemNotices"
131
- :key="systemNotice.id"
132
- @click="openSystemNoticeDialog(systemNotice)"
133
- >
134
- <span class="name">{{ systemNotice.title }}</span>
135
- <span class="date">{{
136
- systemNotice.modifyDate.substring(0, 10)
137
- }}</span>
138
- </div>
139
- </div>
140
- </div>
141
- </el-col>
142
- </el-row>
143
- </div>
144
- <!-- <div class="workbenches-info">
145
- <div class="w-left">
146
- <span>角色申请:李鹏00575023 (“项目预算与费用管理”模块:郑潇涵19010359)</span>
147
- <span>运维人员:林上家A1010633 | 王瑾瑾01499274<i style="padding-left:24px"></i>©2023 海尔新能源 版权所有</span>
148
- </div>
149
- </div>
150
- -->
151
- <systemNoticeInfoDialog
152
- v-if="showSystemNoticeInfoDialog"
153
- :visiable.sync="showSystemNoticeInfoDialog"
154
- :param="csnRow"
155
- :appendToTop="true"
156
- ></systemNoticeInfoDialog>
157
- <wfContentDialog
158
- v-if="showWfDialog"
159
- :visible.sync="showWfDialog"
160
- @close="wfClose"
161
- :option.sync="wfContentOption"
162
- ></wfContentDialog>
163
- <el-dialog
164
- :title="$t1('切换组织')"
165
- width="355px"
166
- custom-class="dialog-style list-dialog"
167
- v-if="showCompanyDialog"
168
- :visible.sync="showCompanyDialog"
169
- :append-to-body="true"
170
- :modal-append-to-body="true"
171
- :close-on-click-modal="false"
172
- v-el-drag-dialog
173
- v-el-dialog-center
174
- @close="changeCompanyClose"
175
- >
176
- <div class="cont">
177
- <el-input
178
- :placeholder="$t1('搜索')"
179
- class="search-btn"
180
- v-model="filterText"
181
- ></el-input>
182
- <el-tree
183
- :props="defaultProps"
184
- :load="loadNode"
185
- node-key="id"
186
- ref="tree"
187
- highlight-current
188
- lazy
189
- :expand-on-click-node="true"
190
- @node-click="handleNodeClick"
191
- class="organization-tree"
192
- icon-class="el-icon-arrow-right"
193
- :filter-node-method="filterNode"
194
- ></el-tree>
195
- </div>
196
- </el-dialog>
197
- </div>
198
- </template>
199
-
200
- <script>
201
- import systemNoticeInfoDialog from "@base/views/user/system_notice/infoDialog.vue";
202
- import commMenuDialog from "@base/views/user/commMenu/index.vue";
203
- import notifyMessageDialog from "@base/views/user/notify_message/dialog.vue";
204
- import notifyMessageInfoDialog from "@base/views/user/notify_message/infoDialog";
205
-
206
- import { getToken } from "@base/utils/auth";
207
- import wfContentDialog from "@base/views/user/wf/wf_manage/wfContentDialog";
208
- import corejsConfig from "@/corejsConfig";
209
- import { mapGetters } from "vuex";
210
-
211
- export default {
212
- name: "home",
213
- props: {
214
- wf_manage_url: String,
215
- },
216
- components: {
217
- systemNoticeInfoDialog,
218
- commMenuDialog,
219
- notifyMessageDialog,
220
- notifyMessageInfoDialog,
221
- wfContentDialog,
222
- },
223
- data() {
224
- return {
225
- defaultProps: {
226
- label: "label", //这里是树结构中需显示的数据(即接口返回的需展示在页面上的参数)
227
- children: [],
228
- isLeaf: "leaf",
229
- },
230
- filterText: null,
231
- showCompanyDialog: false,
232
- choose_company_info: "",
233
-
234
- showNoticeDialog: false,
235
- showGroupDialog: false,
236
- notifyTemplates: [],
237
- userInfo: {},
238
- companyInfo: {},
239
- systemNotices: [],
240
- showSystemNoticeInfoDialog: false,
241
- csnRow: null,
242
- headPhotoUrl: "",
243
- dialogVisible: true,
244
- unDoWfRows: [],
245
- wfOption: {},
246
- showWfDialog: false,
247
- wfContentOption: {},
248
- showWfContent: true,
249
- wfContent: null,
250
- wfDataId: "",
251
- showCommMenuDialog: false,
252
- commMenus: [],
253
- notifyMessages: [],
254
- notifyMessageInfoIndex: null,
255
- notifyMessageInfoId: null,
256
- unreadMessageNum: 0,
257
- activating: true,
258
- wfTimer: null,
259
- homeConfig: corejsConfig.homeConfig || {},
260
- menuModules: [],
261
- workbenchMenus: [],
262
- };
263
- },
264
- watch: {
265
- filterText(val) {
266
- this.$refs.tree.filter(val);
267
- },
268
- },
269
- computed: {
270
- ...mapGetters(["sidebarRouters"]),
271
- },
272
- activated() {
273
- this.activating = true;
274
- if (this.wfTimer) {
275
- this.timerExcFun(true);
276
- }
277
- },
278
- deactivated() {
279
- this.activating = false;
280
- },
281
- beforeDestroy() {
282
- this.clearTimer();
283
- if (this.reloadHomeMenuHandler) {
284
- this.$baseEventBus.$off("reloadHomeMenu", this.reloadHomeMenuHandler);
285
- this.reloadHomeMenuHandler = null;
286
- }
287
- },
288
- created() {
289
- this.getUserInfo();
290
- this.initSystemNotice();
291
- this.initCommMenu();
292
- this.initNotifyMessage();
293
- this.initWfParam();
294
- this.initWfTimer();
295
- this.initMenu();
296
- this.initWorkbenchMenu();
297
- },
298
- mounted() {
299
- // setTimeout(() => {
300
- // debugger
301
- // this.filterRoute();
302
- // }, 100);
303
- },
304
- methods: {
305
- handleNodeClick(data, node, v) {
306
- if (!data.hasChild) {
307
- this.choose_company_info = data;
308
- this.changeCompany();
309
- } else {
310
- this.choose_company_info = {};
311
- }
312
- },
313
- // 异步树叶子节点懒加载逻辑
314
- loadNode(node, resolve) {
315
- let companyCode =
316
- node && node.data && node.data.companyCode
317
- ? node.data.companyCode || ""
318
- : "";
319
- let url = !companyCode
320
- ? USER_PREFIX + "/user_company_info/getAllList"
321
- : USER_PREFIX + "/user_company_info/getChildren";
322
-
323
- this.$http({
324
- url: url,
325
- method: "post",
326
- data: {
327
- parentCompanyCode: companyCode,
328
- },
329
- success: (res) => {
330
- let datas = res.objx || [];
331
- let parentLabel = companyCode ? node.label : null;
332
- datas.forEach((item) => {
333
- item.leaf = !item.hasChild;
334
- let label = item.companyName;
335
- /*if(companyCode){
336
- label = label + '('+companyTypeMap[item.companyType]+')'
337
- }*/
338
- item.label = label;
339
- item.parentLabel = parentLabel;
340
- });
341
-
342
- if (node.level === 0) {
343
- if (datas.length > 0 && datas[0].hasChild) {
344
- this.$nextTick(() => {
345
- let nodedata = node.childNodes[0];
346
- nodedata.expanded = true;
347
- nodedata.loadData();
348
- });
349
- }
350
- }
351
- resolve(datas);
352
- },
353
- });
354
- },
355
- filterNode(value, data) {
356
- if (!value) return true;
357
- let flag1 = data.label.indexOf(value) !== -1;
358
- let flag2 = data.parentLabel && data.parentLabel.indexOf(value) !== -1;
359
- return flag1 || flag2;
360
- },
361
- openCompanyDialog() {
362
- this.filterText = null;
363
- this.showCompanyDialog = true;
364
- },
365
- getWebPrefix(callback) {
366
- this.$http({
367
- url: USER_PREFIX + "/auth/getWebPrefix",
368
- method: `post`,
369
- data: {},
370
- isLoading: true,
371
- success: (res) => {
372
- let webPrefix = res.objx;
373
- callback && callback(webPrefix);
374
- },
375
- });
376
- },
377
- changeCompany() {
378
- let row = this.choose_company_info;
379
- let query = this.$route.query;
380
- let flag = query && query.flag === 1 ? 1 : null;
381
- this.showCompanyDialog = false;
382
- if (row && row.companyCode) {
383
- this.$baseLoading({ target: document.body, fullscreen: true });
384
- this.$http({
385
- url: USER_PREFIX + "/auth/switchCompany",
386
- method: "post",
387
- data: { stringOne: row.companyCode },
388
- isLoading: true,
389
- success: (res) => {
390
- this.getWebPrefix((prefix) => {
391
- let webPrefix = prefix ? "/" + prefix : window.MAIN_WEB_PREFIX;
392
- sessionStorage.removeItem("out-token");
393
- this.$store.dispatch("user/changeCompanyInfo", row);
394
- this.$store.dispatch("tagsView/delAllViews");
395
- window.location.href = webPrefix + "/index.html";
396
- });
397
- },
398
- });
399
- } else {
400
- if (flag === 1) {
401
- this.$router.push({
402
- path: "/",
403
- });
404
- }
405
- }
406
- },
407
- changeCompanyClose() {
408
- let query = this.$route.query;
409
- let flag = query && query.flag === 1 ? 1 : null;
410
- if (flag === 1) {
411
- this.$router.push({
412
- path: "/",
413
- });
414
- }
415
- this.showCompanyDialog = false;
416
- },
417
- initWorkbenchMenu() {
418
- this.$http({
419
- url: USER_PREFIX + "/workbench_menu/getAll",
420
- method: "post",
421
- data: {},
422
- success: (res) => {
423
- let workbenchMenus = res.objx || [];
424
- this.workbenchMenus = workbenchMenus;
425
- },
426
- });
427
- },
428
- jumpOutLink(route) {
429
- let path = route.url || route.path;
430
- if (route.type === 4 && path) {
431
- let params = this.getCustomReqUrlAndCleanUrl(path);
432
- let reqUrl = params.custom_req_url;
433
- if (reqUrl) {
434
- this.$http({
435
- url: reqUrl,
436
- method: `post`,
437
- data: { thirdUrl: params.newUrl },
438
- isLoading: true,
439
- success: (res) => {
440
- path = res.objx;
441
- window.open(path);
442
- },
443
- });
444
- } else {
445
- if (path.indexOf("token={token}") >= 0) {
446
- path = path.replace("token={token}", "token=" + getToken());
447
- }
448
- window.open(path);
449
- }
450
- }
451
- },
452
- flattenTree(data) {
453
- const result = [];
454
-
455
- // 使用深度优先遍历递归函数
456
- function dfs(node) {
457
- if (!node) return;
458
-
459
- // 将当前节点添加到结果数组(排除children属性)
460
- const { children, ...rest } = node;
461
- result.push(rest);
462
-
463
- // 递归处理子节点
464
- if (children && children.length > 0) {
465
- children.forEach((child) => dfs(child));
466
- }
467
- }
468
-
469
- // 处理输入数据(支持数组和单个对象)
470
- if (Array.isArray(data)) {
471
- data.forEach((item) => dfs(item));
472
- } else if (data) {
473
- dfs(data);
474
- }
475
-
476
- return result;
477
- },
478
- getRoute(row) {
479
- let menuCode = row.menuCode;
480
- let routes = this.flattenTree(this.$baseEventBus.menuModules);
481
- let route = routes.find((item) => item.menuCode === menuCode);
482
- return route;
483
- },
484
- openRoutePath(row) {
485
- let menuCode = row.menuCode;
486
- if (menuCode === "todo") {
487
- this.$message.error(this.$t1("功能正在完善,敬请期待。"));
488
- return;
489
- }
490
- let routes = this.flattenTree(this.sidebarRouters);
491
- let route = routes.find((item) => item.menuCode === menuCode);
492
- if (!route) {
493
- this.$message.error(this.$t1("菜单没有访问权限"));
494
- return;
495
- }
496
- this.rourteTo(route);
497
- },
498
- rourteTo(route) {
499
- let path = route.url || route.path;
500
- if (!path) {
501
- return;
502
- }
503
- this.showMenuModal = true;
504
- setTimeout(() => {
505
- this.showMenuModal = false;
506
- }, 200);
507
- try {
508
- if (route.linkType === 4) {
509
- this.jumpOutLink(route);
510
- } else if (route.linkType === 3) {
511
- this.$openView(
512
- {
513
- path: path,
514
- query: { url: route.outLink, route: route.route },
515
- },
516
- route
517
- );
518
- } else {
519
- this.$openView(path, route);
520
- }
521
- } catch (e) {
522
- console.error(e);
523
- }
524
- },
525
-
526
- initMenu() {
527
- // handler 存实例属性并在销毁时 $off:home 每次登出/登录重建都会重新注册,
528
- // 不解绑会累积 handler 并钉住已销毁的 home 实例(内存泄露)
529
- this.reloadHomeMenuHandler = (menuId) => {
530
- this.$forceUpdate();
531
- };
532
- this.$baseEventBus.$on("reloadHomeMenu", this.reloadHomeMenuHandler);
533
- },
534
- filterRoute() {
535
- let oldRoutes = JSON.parse(JSON.stringify(this.sidebarRouters));
536
- let nRoute1s = [];
537
- oldRoutes.forEach((route1, index1) => {
538
- let nRoute2s = [];
539
- if (!route1.hidden) {
540
- route1.children.forEach((route2, index2) => {
541
- let nRoute3s = [];
542
- if (!route2.hidden) {
543
- route2.children.forEach((route3, index3) => {
544
- if (!route3.hidden) {
545
- nRoute3s.push(route3);
546
- }
547
- });
548
- }
549
- if (route2.type === 4 || route2.url || nRoute3s.length > 0) {
550
- route2.children = nRoute3s;
551
- nRoute2s.push(route2);
552
- }
553
- });
554
- }
555
- if (route1.type === 4 || route1.url || nRoute2s.length > 0) {
556
- route1.children = nRoute2s;
557
- nRoute1s.push(route1);
558
- }
559
- });
560
-
561
- this.menuModules = nRoute1s || [];
562
- },
563
- logout() {
564
- this.$store.dispatch("user/logout2").then((res) => {
565
- this.$router.push(`/login?redirect=${this.$route.fullPath}`);
566
- });
567
- },
568
- wfClose() {
569
- this.timerExcFun(true);
570
- },
571
- initWfTimer() {
572
- this.wfTimer = setInterval(() => {
573
- this.timerExcFun(false);
574
- }, 10000);
575
- this.timerExcFun(true);
576
- },
577
- timerExcFun(isLoading) {
578
- if (!this.activating) {
579
- return;
580
- }
581
- this.getWfInfoList(isLoading);
582
- this.getUnreadMessageNum(isLoading);
583
- this.$emit("timerHandle");
584
- },
585
- clearTimer() {
586
- clearInterval(this.wfTimer);
587
- this.wfTimer = null;
588
- },
589
- getUserInfo() {
590
- this.$http({
591
- url: USER_PREFIX + "/user/currentUser",
592
- method: "post",
593
- success: (res) => {
594
- let userInfo = res.objx;
595
- this.headPhotoUrl = userInfo.headPhotoUrl
596
- ? userInfo.headPhotoUrl
597
- : require("@/resources/images" + "/default-header.png");
598
-
599
- this.userInfo = userInfo;
600
- },
601
- });
602
- this.$http({
603
- url: USER_PREFIX + "/company_info/getCurrent",
604
- method: `post`,
605
- success: (res) => {
606
- this.companyInfo = res.objx || {};
607
- },
608
- });
609
- },
610
- initSystemNotice() {
611
- this.$http({
612
- url: USER_PREFIX + "/system_notice/listPage",
613
- data: { publish: true, searchCount: false },
614
- method: "post",
615
- success: (res) => {
616
- this.systemNotices =
617
- res.objx && res.objx.records ? res.objx.records : [];
618
- },
619
- });
620
- },
621
- openSystemNoticeDialog(row) {
622
- this.csnRow = row || null;
623
- this.showSystemNoticeInfoDialog = true;
624
- },
625
- initUnDoWfInfo() {
626
- this.$http({
627
- url: AGILEBPM_PREFIX + "/wf_manage/listPage",
628
- data: { type: 0, searchCount: false },
629
- method: "post",
630
- success: (res) => {
631
- this.unDoWfRows = res.objx.records || [];
632
- },
633
- });
634
- },
635
- initWfTableList() {
636
- let that = this;
637
- let paramColumns = this.wfParamDTOs.map((item) => {
638
- return {
639
- title: this.$t1(item.paramName),
640
- field: item.paramKey,
641
- width: 150,
642
- };
643
- });
644
- let statuses = {
645
- running: this.$t1("审核中"),
646
- back: this.$t1("已驳回"),
647
- end: this.$t1("已完成"),
648
- };
649
- let tableOption = {
650
- vue: this,
651
- tableRef: "table-wf",
652
- tableName: "home-table-wf",
653
- config: {
654
- height: "auto",
655
- scrollY: {
656
- enabled: false,
657
- },
658
- },
659
- columns: [
660
- { type: "checkbox", width: 48, resizable: false, fixed: "left" },
661
- {
662
- title: this.$t1("单据类型"),
663
- field: "objTypeName",
664
- width: 150,
665
- fixed: "left",
666
- },
667
- {
668
- title: this.$t1("流程主题"),
669
- field: "name",
670
- width: 150,
671
- },
672
- {
673
- title: this.$t1("启动人"),
674
- field: "starterName",
675
- width: 150,
676
- },
677
- {
678
- title: this.$t1("当前任务"),
679
- field: "taskName",
680
- width: 150,
681
- },
682
- {
683
- title: this.$t1("当前任务用户"),
684
- field: "candidateNames",
685
- width: 150,
686
- },
687
- {
688
- title: this.$t1("启动时间"),
689
- field: "createDate",
690
- width: 150,
691
- },
692
- ...paramColumns,
693
- {
694
- width: 47,
695
- fixed: "right",
696
- title: "",
697
- sortable: false,
698
- slots: {
699
- default: ({ row }) => {
700
- return [
701
- <a
702
- href="javascript:void(0);"
703
- class="a-link"
704
- onclick={() => {
705
- this.openWfDialog(row);
706
- }}
707
- >
708
- <el-tooltip
709
- enterable={false}
710
- effect="dark"
711
- content={this.$t1("查看")}
712
- placement="top"
713
- popper-class="tooltip-skin"
714
- >
715
- <i class="el-icon-view" />
716
- </el-tooltip>
717
- </a>,
718
- ];
719
- },
720
- },
721
- },
722
- ],
723
- };
724
- this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
725
- this.wfOption = opts;
726
- });
727
- },
728
- openWfDialog(row) {
729
- this.wfContentOption = {
730
- objId: row.objId,
731
- url: row.url,
732
- objTypeCode: row.objTypeCode,
733
- };
734
- this.showWfDialog = true;
735
- },
736
- commMenuCallBack(datas) {
737
- this.commMenus = datas || [];
738
- },
739
- initCommMenu() {
740
- this.$http({
741
- url: USER_PREFIX + "/comm_menu/currentList",
742
- data: { longOne: 0 },
743
- method: "POST",
744
- }).then((resultMsg) => {
745
- this.commMenus = resultMsg.objx || [];
746
- });
747
- },
748
- initNotifyMessage() {
749
- return;
750
- this.$http({
751
- url: USER_PREFIX + "/notify_message/listPage",
752
- data: { searchCount: false },
753
- method: "post",
754
- success: (res) => {
755
- this.notifyMessages =
756
- res.objx && res.objx.records ? res.objx.records : [];
757
- },
758
- });
759
- },
760
- openNotifyMessageDialog(row) {
761
- if (row.jumpContent) {
762
- this.$refs.notifyMessageDialog.open(row, () => {
763
- row.readed = 1;
764
- });
765
- }
766
- },
767
- openMoreNotifyMessage(notifyType) {
768
- let data = { notifyType: notifyType || "" };
769
- let view = {
770
- name: "notify_message:list",
771
- query: data,
772
- };
773
- this.$store.dispatch("tagsView/delCachedView", view).then(() => {
774
- this.$router.replace(view);
775
- });
776
-
777
- if (notifyType) {
778
- this.showGroupDialog = false;
779
- }
780
- },
781
- checkNotifyMessage(row, index) {
782
- this.showNoticeDialog = true;
783
- this.notifyMessageInfoIndex = index;
784
- this.notifyMessageInfoId = row.id;
785
- },
786
- notifyMessageReadHanlde() {
787
- this.notifyMessages[this.notifyMessageInfoIndex].readed = 1;
788
- },
789
- openNotifyTemplateGroupDialog() {
790
- this.$http({
791
- url: USER_PREFIX + `/notify_template/listPage`,
792
- method: `post`,
793
- data: { searchCount: false },
794
- isLoading: true,
795
- // loadingTarget: document.body,
796
- success: (res) => {
797
- this.notifyTemplates =
798
- res.objx && res.objx.records ? res.objx.records : [];
799
- this.showGroupDialog = true;
800
- },
801
- });
802
- },
803
- rourteTo(route) {
804
- if (route.type === 4) {
805
- this.jumpOutLink(route);
806
- } else if (route.type === 3) {
807
- let menuCode = route.menuCode;
808
- let path = "/user/outLink/index/" + menuCode;
809
- this.$openView({ path: path, query: { url: route.url } }, route);
810
- } else {
811
- let path = this.getPath(route);
812
- if (!path) return;
813
- this.$openView(path, route);
814
- }
815
- },
816
- getPath(route3) {
817
- let item = null;
818
- let path = null;
819
- if (route3.type === 0) {
820
- //普通菜单
821
- if (route3.url) {
822
- path = route3.route || route3.url;
823
- let str = "/report/vform/render/";
824
- if (path.indexOf(str) === 0) {
825
- } else {
826
- let pIndex = path.indexOf("?");
827
- if (pIndex > 0) {
828
- path = path.substring(0, pIndex);
829
- }
830
- }
831
- }
832
- } else if (route3.type === 5) {
833
- //动态表单
834
- let url = route3.route || route3.url;
835
- path = url;
836
- }
837
- if (path && path.startsWith("@")) {
838
- path = null;
839
- }
840
- return path;
841
- },
842
- jumpOutLink(route) {
843
- let path = route.url;
844
- if (route.type === 4 && path) {
845
- if (path.indexOf("token={token}") >= 0) {
846
- path = path.replace("token={token}", "token=" + getToken());
847
- }
848
- window.open(path);
849
- }
850
- },
851
- initWfParam() {
852
- return this.$http({
853
- url: USER_PREFIX + "/wf_param/list",
854
- method: `post`,
855
- data: {},
856
- isLoading: true,
857
- // loadingTarget: document.body,
858
- modalStrictly: true,
859
- success: (res) => {
860
- this.wfParamDTOs = res.objx || [];
861
- // this.initWfTableList();
862
- },
863
- });
864
- },
865
- getWfInfoList(isLoading) {
866
- if (!this.activating) {
867
- return;
868
- }
869
- this.$http({
870
- url: USER_PREFIX + "/wf_info/listPage",
871
- data: { type: 0, size: 20, searchCount: false },
872
- method: "post",
873
- isLoading: isLoading,
874
- modal: isLoading || false,
875
- // loadingTarget: document.body,
876
- success: (res) => {
877
- this.unDoWfRows =
878
- res.objx && res.objx.records ? res.objx.records : [];
879
- },
880
- failMsg: false,
881
- errorMsg: false,
882
- fail: (res, response) => {
883
- if (response && response.status === 200) {
884
- this.$errorMsg(res);
885
- }
886
- },
887
- });
888
- },
889
- getUnreadMessageNum(isLoading) {
890
- if (!this.activating) {
891
- return;
892
- }
893
- return this.$http({
894
- url: USER_PREFIX + "/notify_message/countMessage",
895
- method: `post`,
896
- data: {},
897
- isLoading: isLoading,
898
- modal: isLoading || false,
899
- // loadingTarget: document.body,
900
- success: (res) => {
901
- this.unreadMessageNum = res.objx || 0;
902
- },
903
- failMsg: false,
904
- errorMsg: false,
905
- fail: (res, response) => {
906
- if (response && response.status === 200) {
907
- this.$errorMsg(res);
908
- }
909
- },
910
- });
911
- },
912
- wfhandleCallback(flag) {
913
- if ([1, 2, 3].includes(flag)) {
914
- this.showWfDialog = false;
915
- this.wfClose();
916
- }
917
- },
918
- toWfManageList() {
919
- let url = this.wf_manage_url || "/basic/wf/wf_manage/list";
920
- this.$router.push(url);
921
- },
922
- },
923
- };
924
- </script>
925
- <style lang="scss" scoped>
926
- @import "~@/styles/variables.scss";
927
- ::v-deep .el-link {
928
- color: rgba(0, 0, 0, 0.65);
929
- .iconfont {
930
- margin-right: 4px;
931
- font-size: 14px;
932
- }
933
- &:hover {
934
- color: $baseColor;
935
- }
936
- }
937
- .workbenches {
938
- padding: 18px 24px 0px;
939
- }
940
- .workbenches-head {
941
- color: rgba(0, 0, 0, 0.65);
942
- margin-bottom: 16px;
943
- line-height: 1;
944
- font-size: 14px;
945
- .icon-haier {
946
- color: $baseColor;
947
- font-size: 24px;
948
- margin-right: 16px;
949
- }
950
- .logo {
951
- height: 30px;
952
- vertical-align: middle;
953
- }
954
- > span {
955
- margin-right: 16px;
956
- &.f-blue {
957
- font-size: 16px;
958
- vertical-align: middle;
959
- line-height: 1;
960
- display: inline-block;
961
- }
962
- }
963
- }
964
- .workbenches-box {
965
- height: calc(100vh - 94px); /**margin-bottom: 16px;*/
966
- > .el-row {
967
- height: 100%;
968
- > .el-col {
969
- height: 100%;
970
- }
971
- }
972
- .w-box {
973
- background: #fff;
974
- border-radius: 4px;
975
- overflow: hidden;
976
- height: 100%;
977
- .w-b-head {
978
- overflow: hidden;
979
- margin: 16px 24px;
980
- .tit {
981
- b {
982
- font-size: 16px;
983
- font-weight: 600;
984
- vertical-align: middle;
985
- }
986
- .nums {
987
- margin-left: 8px;
988
- border-radius: 4px;
989
- width: 20px;
990
- height: 20px;
991
- display: inline-block;
992
- background-color: #ff4d4f;
993
- color: #fff;
994
- text-align: center;
995
- line-height: 20px;
996
- font-style: inherit;
997
- font-size: 12px;
998
- vertical-align: middle;
999
- }
1000
- }
1001
- .el-link {
1002
- margin-left: 24px;
1003
- }
1004
- }
1005
- }
1006
- .wnotice-box {
1007
- padding: 0 24px 4px;
1008
- overflow: auto;
1009
- height: calc(100% - 52px);
1010
- .item {
1011
- border: solid 1px rgba(0, 0, 0, 0.15);
1012
- border-radius: 4px;
1013
- padding: 12px;
1014
- display: flex;
1015
- margin-bottom: 12px;
1016
- line-height: 18px;
1017
- cursor: pointer;
1018
- font-size: 14px;
1019
- .no-read {
1020
- background-color: #faad14;
1021
- border-radius: 4px;
1022
- color: #fff;
1023
- font-size: 12px;
1024
- font-style: inherit;
1025
- line-height: 18px;
1026
- padding: 0 4px;
1027
- margin-right: 8px;
1028
- }
1029
- .name {
1030
- flex: 1;
1031
- }
1032
- .date {
1033
- color: rgba(0, 0, 0, 0.45);
1034
- font-size: 12px;
1035
- }
1036
- &:hover {
1037
- border-color: $baseColor;
1038
- .name {
1039
- color: $baseColor;
1040
- }
1041
- }
1042
- }
1043
- }
1044
- .agenda-box {
1045
- padding: 0 24px 4px;
1046
- overflow: auto;
1047
- height: calc(100% - 52px);
1048
- .item {
1049
- border: solid 1px rgba(0, 0, 0, 0.15);
1050
- border-radius: 4px;
1051
- padding: 12px;
1052
- margin-bottom: 12px;
1053
- cursor: pointer;
1054
- p {
1055
- margin: 0;
1056
- }
1057
- .name {
1058
- margin-bottom: 8px;
1059
- font-size: 14px;
1060
- }
1061
- .info {
1062
- font-size: 12px;
1063
- > span {
1064
- margin-right: 32px;
1065
- color: rgba(0, 0, 0, 0.45);
1066
- }
1067
- }
1068
- &:hover {
1069
- border-color: $baseColor;
1070
- .name {
1071
- color: $baseColor;
1072
- }
1073
- }
1074
- }
1075
- }
1076
- .use-cases {
1077
- overflow: auto;
1078
- padding: 0 24px 4px;
1079
- height: calc(100% - 52px);
1080
- .item {
1081
- margin-bottom: 32px;
1082
- .t {
1083
- &:before {
1084
- content: "";
1085
- width: 4px;
1086
- height: 15px;
1087
- border-radius: 4px;
1088
- background: $baseColor;
1089
- margin-right: 8px;
1090
- vertical-align: middle;
1091
- display: inline-block;
1092
- }
1093
- span {
1094
- vertical-align: middle;
1095
- font-size: 14px;
1096
- }
1097
- }
1098
- .c {
1099
- padding: 2px 12px;
1100
- .i-block {
1101
- display: inline-block;
1102
- width: 84px;
1103
- margin-right: 52px;
1104
- text-align: center;
1105
- font-size: 12px;
1106
- margin-top: 18px;
1107
- cursor: pointer;
1108
- vertical-align: top;
1109
- .icon {
1110
- width: 44px;
1111
- height: 44px;
1112
- border-radius: 8px;
1113
- color: #fff;
1114
- display: block;
1115
- margin: 0 auto 8px;
1116
- font-size: 20px;
1117
- font-style: inherit;
1118
- line-height: 44px;
1119
- }
1120
- &:hover {
1121
- color: $baseColor;
1122
- }
1123
- .tips {
1124
- zoom: 0.8;
1125
- display: inline-block;
1126
- line-height: 1.2;
1127
- margin: 0 -42px 8px;
1128
- }
1129
- }
1130
- }
1131
- }
1132
- }
1133
- }
1134
- .workbenches-info {
1135
- padding: 0 24px;
1136
- margin: 0 -24px;
1137
- background: #fff;
1138
- height: 50px;
1139
- display: flex;
1140
- font-size: 12px;
1141
- color: rgba(0, 0, 0, 0.65);
1142
- .w-left {
1143
- padding: 10px 0;
1144
- height: 100%;
1145
- text-align: right;
1146
- vertical-align: middle;
1147
- flex: 1;
1148
- zoom: 0.9;
1149
- span {
1150
- margin: 3px 0px;
1151
- display: block;
1152
- }
1153
- }
1154
- .w-right {
1155
- line-height: 74px;
1156
- }
1157
- }
1158
- </style>
1
+ <template>
2
+ <div class="workbenches">
3
+ <div class="workbenches-head">
4
+ <span class="f-blue">{{ $t1("欢迎您") }}</span>
5
+
6
+ <el-link
7
+ class="fr"
8
+ icon="iconfont icon-tuichudenglu"
9
+ :underline="false"
10
+ @click="logout"
11
+ >{{ $t1("退出登录") }}</el-link
12
+ >
13
+ <!-- <el-link class="fr" icon="el-icon-set-up" :underline="false" @click="openCompanyDialog" style="margin-right:10px">切换组织</el-link> -->
14
+ <span class="fr">{{ $t1("您好") }},{{ userInfo.nickName }}</span>
15
+ </div>
16
+ <div class="workbenches-box">
17
+ <el-row>
18
+ <el-col :span="16">
19
+ <div class="w-box" style="margin-right: 16px">
20
+ <div class="w-b-head">
21
+ <div class="tit fl">
22
+ <b>{{ $t1("应用场景") }}</b>
23
+ </div>
24
+ <!-- <div class="fr">
25
+ <el-link icon="iconfont icon-shuaxin" :underline="false">刷新</el-link>
26
+ <el-link :underline="false">查看更多 +</el-link>
27
+ </div> -->
28
+ </div>
29
+
30
+ <div class="use-cases">
31
+ <template v-for="workbenchMenu in workbenchMenus">
32
+ <div class="item" :key="workbenchMenu.id">
33
+ <div class="t">
34
+ <span>{{ workbenchMenu.menuName }}</span>
35
+ </div>
36
+ <div class="c">
37
+ <div
38
+ class="i-block"
39
+ v-for="(router2, index1) in workbenchMenu.children"
40
+ :key="index1"
41
+ @click="openRoutePath(router2)"
42
+ >
43
+ <i
44
+ class="icon iconfont"
45
+ :class="router2.menuImg || 'icon-charge-fill'"
46
+ :style="
47
+ 'background-color: ' +
48
+ (router2.menuImgColor || '#3B82F6') +
49
+ ';'
50
+ "
51
+ ></i>
52
+ <span>{{ router2.menuName }}</span>
53
+ <span class="tips" v-if="!!router2.note">{{
54
+ router2.note
55
+ }}</span>
56
+ </div>
57
+ <!-- <div class="i-block">
58
+ <i class="icon iconfont icon-charge-fill" style="background-color:#3B82F6"></i>
59
+
60
+ <span>研发费用付款</span>
61
+ <span class="tips">(技术转让费、设计开发费、检测费、试验费、信息费、标准化费用)</span>
62
+ </div> -->
63
+ </div>
64
+ </div>
65
+ </template>
66
+ </div>
67
+
68
+ <!-- <template v-for="menuModule in $baseEventBus.menuModules">
69
+ <div class="use-cases" style="height: calc(100vh - 193px);" :key="menuModule.id" v-show="menuModule.id === $baseEventBus.currentMenuId">
70
+
71
+ <div class="item" v-for="router1 in menuModule.children" :key="router1.id">
72
+ <div class="t"><span>{{router1.menuName}}</span></div>
73
+ <div class="c">
74
+ <div class="i-block" v-for="(router2, index1) in router1.children"
75
+ :key="index1" @click="rourteTo(router2)"><i class="icon" style="background-color: #3B82F6;">{{router2.menuName.substring(0,1)}}</i><span>{{router2.menuName}}</span></div>
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </template> -->
80
+ </div>
81
+ </el-col>
82
+ <el-col :span="8">
83
+ <div class="w-box" style="height: 60%">
84
+ <div class="w-b-head">
85
+ <div class="tit fl">
86
+ <b>{{ $t1("待办事项") }}</b>
87
+ <i class="nums">{{ unDoWfRows.length }}</i>
88
+ </div>
89
+ <div class="fr">
90
+ <el-link :underline="false" @click="toWfManageList"
91
+ >{{ $t1("查看更多") }} +</el-link
92
+ >
93
+ </div>
94
+ </div>
95
+ <div class="agenda-box">
96
+ <div
97
+ class="item"
98
+ v-for="item in unDoWfRows"
99
+ :key="item.id"
100
+ @click="openWfDialog(item)"
101
+ >
102
+ <p class="name">{{ item.name }}</p>
103
+ <p class="info">
104
+ <span>{{ $t1("单据类型") }}:{{ item.objTypeName }}</span>
105
+ <span>{{ $t1("启动人") }}:{{ item.starterName }}</span>
106
+ </p>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ <div class="w-box" style="margin-top: 16px; height: calc(40% - 16px)">
111
+ <div class="w-b-head">
112
+ <div class="tit fl">
113
+ <b>{{ $t1("通知公告") }}</b>
114
+ <i class="nums">{{ systemNotices.length }}</i>
115
+ </div>
116
+ <div class="fr">
117
+ <el-link :underline="false" @click="openSystemNoticeDialog()"
118
+ >{{ $t1("查看更多") }} +</el-link
119
+ >
120
+ </div>
121
+ </div>
122
+ <div class="wnotice-box">
123
+ <!-- <div class="item">
124
+ <i class="no-read">未读</i>
125
+ <span class="name">紧急通知</span>
126
+ <span class="date">2025-10-12</span>
127
+ </div> -->
128
+ <div
129
+ class="item"
130
+ v-for="systemNotice in systemNotices"
131
+ :key="systemNotice.id"
132
+ @click="openSystemNoticeDialog(systemNotice)"
133
+ >
134
+ <span class="name">{{ systemNotice.title }}</span>
135
+ <span class="date">{{
136
+ systemNotice.modifyDate.substring(0, 10)
137
+ }}</span>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ </el-col>
142
+ </el-row>
143
+ </div>
144
+ <!-- <div class="workbenches-info">
145
+ <div class="w-left">
146
+ <span>角色申请:李鹏00575023 (“项目预算与费用管理”模块:郑潇涵19010359)</span>
147
+ <span>运维人员:林上家A1010633 | 王瑾瑾01499274<i style="padding-left:24px"></i>©2023 海尔新能源 版权所有</span>
148
+ </div>
149
+ </div>
150
+ -->
151
+ <systemNoticeInfoDialog
152
+ v-if="showSystemNoticeInfoDialog"
153
+ :visiable.sync="showSystemNoticeInfoDialog"
154
+ :param="csnRow"
155
+ :appendToTop="true"
156
+ ></systemNoticeInfoDialog>
157
+ <wfContentDialog
158
+ v-if="showWfDialog"
159
+ :visible.sync="showWfDialog"
160
+ @close="wfClose"
161
+ :option.sync="wfContentOption"
162
+ ></wfContentDialog>
163
+ <el-dialog
164
+ :title="$t1('切换组织')"
165
+ width="355px"
166
+ custom-class="dialog-style list-dialog"
167
+ v-if="showCompanyDialog"
168
+ :visible.sync="showCompanyDialog"
169
+ :append-to-body="true"
170
+ :modal-append-to-body="true"
171
+ :close-on-click-modal="false"
172
+ v-el-drag-dialog
173
+ v-el-dialog-center
174
+ @close="changeCompanyClose"
175
+ >
176
+ <div class="cont">
177
+ <el-input
178
+ :placeholder="$t1('搜索')"
179
+ class="search-btn"
180
+ v-model="filterText"
181
+ ></el-input>
182
+ <el-tree
183
+ :props="defaultProps"
184
+ :load="loadNode"
185
+ node-key="id"
186
+ ref="tree"
187
+ highlight-current
188
+ lazy
189
+ :expand-on-click-node="true"
190
+ @node-click="handleNodeClick"
191
+ class="organization-tree"
192
+ icon-class="el-icon-arrow-right"
193
+ :filter-node-method="filterNode"
194
+ ></el-tree>
195
+ </div>
196
+ </el-dialog>
197
+ </div>
198
+ </template>
199
+
200
+ <script>
201
+ import systemNoticeInfoDialog from "@base/views/user/system_notice/infoDialog.vue";
202
+ import commMenuDialog from "@base/views/user/commMenu/index.vue";
203
+ import notifyMessageDialog from "@base/views/user/notify_message/dialog.vue";
204
+ import notifyMessageInfoDialog from "@base/views/user/notify_message/infoDialog";
205
+
206
+ import { getToken } from "@base/utils/auth";
207
+ import wfContentDialog from "@base/views/user/wf/wf_manage/wfContentDialog";
208
+ import corejsConfig from "@/corejsConfig";
209
+ import { mapGetters } from "vuex";
210
+
211
+ export default {
212
+ name: "home",
213
+ props: {
214
+ wf_manage_url: String,
215
+ },
216
+ components: {
217
+ systemNoticeInfoDialog,
218
+ commMenuDialog,
219
+ notifyMessageDialog,
220
+ notifyMessageInfoDialog,
221
+ wfContentDialog,
222
+ },
223
+ data() {
224
+ return {
225
+ defaultProps: {
226
+ label: "label", //这里是树结构中需显示的数据(即接口返回的需展示在页面上的参数)
227
+ children: [],
228
+ isLeaf: "leaf",
229
+ },
230
+ filterText: null,
231
+ showCompanyDialog: false,
232
+ choose_company_info: "",
233
+
234
+ showNoticeDialog: false,
235
+ showGroupDialog: false,
236
+ notifyTemplates: [],
237
+ userInfo: {},
238
+ companyInfo: {},
239
+ systemNotices: [],
240
+ showSystemNoticeInfoDialog: false,
241
+ csnRow: null,
242
+ headPhotoUrl: "",
243
+ dialogVisible: true,
244
+ unDoWfRows: [],
245
+ wfOption: {},
246
+ showWfDialog: false,
247
+ wfContentOption: {},
248
+ showWfContent: true,
249
+ wfContent: null,
250
+ wfDataId: "",
251
+ showCommMenuDialog: false,
252
+ commMenus: [],
253
+ notifyMessages: [],
254
+ notifyMessageInfoIndex: null,
255
+ notifyMessageInfoId: null,
256
+ unreadMessageNum: 0,
257
+ activating: true,
258
+ wfTimer: null,
259
+ homeConfig: corejsConfig.homeConfig || {},
260
+ menuModules: [],
261
+ workbenchMenus: [],
262
+ };
263
+ },
264
+ watch: {
265
+ filterText(val) {
266
+ this.$refs.tree.filter(val);
267
+ },
268
+ },
269
+ computed: {
270
+ ...mapGetters(["sidebarRouters"]),
271
+ },
272
+ activated() {
273
+ this.activating = true;
274
+ if (this.wfTimer) {
275
+ this.timerExcFun(true);
276
+ }
277
+ },
278
+ deactivated() {
279
+ this.activating = false;
280
+ },
281
+ beforeDestroy() {
282
+ this.clearTimer();
283
+ if (this.reloadHomeMenuHandler) {
284
+ this.$baseEventBus.$off("reloadHomeMenu", this.reloadHomeMenuHandler);
285
+ this.reloadHomeMenuHandler = null;
286
+ }
287
+ },
288
+ created() {
289
+ this.getUserInfo();
290
+ this.initSystemNotice();
291
+ this.initCommMenu();
292
+ this.initNotifyMessage();
293
+ this.initWfParam();
294
+ this.initWfTimer();
295
+ this.initMenu();
296
+ this.initWorkbenchMenu();
297
+ },
298
+ mounted() {
299
+ // setTimeout(() => {
300
+ // debugger
301
+ // this.filterRoute();
302
+ // }, 100);
303
+ },
304
+ methods: {
305
+ handleNodeClick(data, node, v) {
306
+ if (!data.hasChild) {
307
+ this.choose_company_info = data;
308
+ this.changeCompany();
309
+ } else {
310
+ this.choose_company_info = {};
311
+ }
312
+ },
313
+ // 异步树叶子节点懒加载逻辑
314
+ loadNode(node, resolve) {
315
+ let companyCode =
316
+ node && node.data && node.data.companyCode
317
+ ? node.data.companyCode || ""
318
+ : "";
319
+ let url = !companyCode
320
+ ? USER_PREFIX + "/user_company_info/getAllList"
321
+ : USER_PREFIX + "/user_company_info/getChildren";
322
+
323
+ this.$http({
324
+ url: url,
325
+ method: "post",
326
+ data: {
327
+ parentCompanyCode: companyCode,
328
+ },
329
+ success: (res) => {
330
+ let datas = res.objx || [];
331
+ let parentLabel = companyCode ? node.label : null;
332
+ datas.forEach((item) => {
333
+ item.leaf = !item.hasChild;
334
+ let label = item.companyName;
335
+ /*if(companyCode){
336
+ label = label + '('+companyTypeMap[item.companyType]+')'
337
+ }*/
338
+ item.label = label;
339
+ item.parentLabel = parentLabel;
340
+ });
341
+
342
+ if (node.level === 0) {
343
+ if (datas.length > 0 && datas[0].hasChild) {
344
+ this.$nextTick(() => {
345
+ let nodedata = node.childNodes[0];
346
+ nodedata.expanded = true;
347
+ nodedata.loadData();
348
+ });
349
+ }
350
+ }
351
+ resolve(datas);
352
+ },
353
+ });
354
+ },
355
+ filterNode(value, data) {
356
+ if (!value) return true;
357
+ let flag1 = data.label.indexOf(value) !== -1;
358
+ let flag2 = data.parentLabel && data.parentLabel.indexOf(value) !== -1;
359
+ return flag1 || flag2;
360
+ },
361
+ openCompanyDialog() {
362
+ this.filterText = null;
363
+ this.showCompanyDialog = true;
364
+ },
365
+ getWebPrefix(callback) {
366
+ this.$http({
367
+ url: USER_PREFIX + "/auth/getWebPrefix",
368
+ method: `post`,
369
+ data: {},
370
+ isLoading: true,
371
+ success: (res) => {
372
+ let webPrefix = res.objx;
373
+ callback && callback(webPrefix);
374
+ },
375
+ });
376
+ },
377
+ changeCompany() {
378
+ let row = this.choose_company_info;
379
+ let query = this.$route.query;
380
+ let flag = query && query.flag === 1 ? 1 : null;
381
+ this.showCompanyDialog = false;
382
+ if (row && row.companyCode) {
383
+ this.$baseLoading({ target: document.body, fullscreen: true });
384
+ this.$http({
385
+ url: USER_PREFIX + "/auth/switchCompany",
386
+ method: "post",
387
+ data: { stringOne: row.companyCode },
388
+ isLoading: true,
389
+ success: (res) => {
390
+ this.getWebPrefix((prefix) => {
391
+ let webPrefix = prefix ? "/" + prefix : window.MAIN_WEB_PREFIX;
392
+ sessionStorage.removeItem("out-token");
393
+ this.$store.dispatch("user/changeCompanyInfo", row);
394
+ this.$store.dispatch("tagsView/delAllViews");
395
+ window.location.href = webPrefix + "/index.html";
396
+ });
397
+ },
398
+ });
399
+ } else {
400
+ if (flag === 1) {
401
+ this.$router.push({
402
+ path: "/",
403
+ });
404
+ }
405
+ }
406
+ },
407
+ changeCompanyClose() {
408
+ let query = this.$route.query;
409
+ let flag = query && query.flag === 1 ? 1 : null;
410
+ if (flag === 1) {
411
+ this.$router.push({
412
+ path: "/",
413
+ });
414
+ }
415
+ this.showCompanyDialog = false;
416
+ },
417
+ initWorkbenchMenu() {
418
+ this.$http({
419
+ url: USER_PREFIX + "/workbench_menu/getAll",
420
+ method: "post",
421
+ data: {},
422
+ success: (res) => {
423
+ let workbenchMenus = res.objx || [];
424
+ this.workbenchMenus = workbenchMenus;
425
+ },
426
+ });
427
+ },
428
+ jumpOutLink(route) {
429
+ let path = route.url || route.path;
430
+ if (route.type === 4 && path) {
431
+ let params = this.getCustomReqUrlAndCleanUrl(path);
432
+ let reqUrl = params.custom_req_url;
433
+ if (reqUrl) {
434
+ this.$http({
435
+ url: reqUrl,
436
+ method: `post`,
437
+ data: { thirdUrl: params.newUrl },
438
+ isLoading: true,
439
+ success: (res) => {
440
+ path = res.objx;
441
+ window.open(path);
442
+ },
443
+ });
444
+ } else {
445
+ if (path.indexOf("token={token}") >= 0) {
446
+ path = path.replace("token={token}", "token=" + getToken());
447
+ }
448
+ window.open(path);
449
+ }
450
+ }
451
+ },
452
+ flattenTree(data) {
453
+ const result = [];
454
+
455
+ // 使用深度优先遍历递归函数
456
+ function dfs(node) {
457
+ if (!node) return;
458
+
459
+ // 将当前节点添加到结果数组(排除children属性)
460
+ const { children, ...rest } = node;
461
+ result.push(rest);
462
+
463
+ // 递归处理子节点
464
+ if (children && children.length > 0) {
465
+ children.forEach((child) => dfs(child));
466
+ }
467
+ }
468
+
469
+ // 处理输入数据(支持数组和单个对象)
470
+ if (Array.isArray(data)) {
471
+ data.forEach((item) => dfs(item));
472
+ } else if (data) {
473
+ dfs(data);
474
+ }
475
+
476
+ return result;
477
+ },
478
+ getRoute(row) {
479
+ let menuCode = row.menuCode;
480
+ let routes = this.flattenTree(this.$baseEventBus.menuModules);
481
+ let route = routes.find((item) => item.menuCode === menuCode);
482
+ return route;
483
+ },
484
+ openRoutePath(row) {
485
+ let menuCode = row.menuCode;
486
+ if (menuCode === "todo") {
487
+ this.$message.error(this.$t1("功能正在完善,敬请期待。"));
488
+ return;
489
+ }
490
+ let routes = this.flattenTree(this.sidebarRouters);
491
+ let route = routes.find((item) => item.menuCode === menuCode);
492
+ if (!route) {
493
+ this.$message.error(this.$t1("菜单没有访问权限"));
494
+ return;
495
+ }
496
+ this.rourteTo(route);
497
+ },
498
+ rourteTo(route) {
499
+ let path = route.url || route.path;
500
+ if (!path) {
501
+ return;
502
+ }
503
+ this.showMenuModal = true;
504
+ setTimeout(() => {
505
+ this.showMenuModal = false;
506
+ }, 200);
507
+ try {
508
+ if (route.linkType === 4) {
509
+ this.jumpOutLink(route);
510
+ } else if (route.linkType === 3) {
511
+ this.$openView(
512
+ {
513
+ path: path,
514
+ query: { url: route.outLink, route: route.route },
515
+ },
516
+ route
517
+ );
518
+ } else {
519
+ this.$openView(path, route);
520
+ }
521
+ } catch (e) {
522
+ console.error(e);
523
+ }
524
+ },
525
+
526
+ initMenu() {
527
+ // handler 存实例属性并在销毁时 $off:home 每次登出/登录重建都会重新注册,
528
+ // 不解绑会累积 handler 并钉住已销毁的 home 实例(内存泄露)
529
+ this.reloadHomeMenuHandler = (menuId) => {
530
+ this.$forceUpdate();
531
+ };
532
+ this.$baseEventBus.$on("reloadHomeMenu", this.reloadHomeMenuHandler);
533
+ },
534
+ filterRoute() {
535
+ let oldRoutes = JSON.parse(JSON.stringify(this.sidebarRouters));
536
+ let nRoute1s = [];
537
+ oldRoutes.forEach((route1, index1) => {
538
+ let nRoute2s = [];
539
+ if (!route1.hidden) {
540
+ route1.children.forEach((route2, index2) => {
541
+ let nRoute3s = [];
542
+ if (!route2.hidden) {
543
+ route2.children.forEach((route3, index3) => {
544
+ if (!route3.hidden) {
545
+ nRoute3s.push(route3);
546
+ }
547
+ });
548
+ }
549
+ if (route2.type === 4 || route2.url || nRoute3s.length > 0) {
550
+ route2.children = nRoute3s;
551
+ nRoute2s.push(route2);
552
+ }
553
+ });
554
+ }
555
+ if (route1.type === 4 || route1.url || nRoute2s.length > 0) {
556
+ route1.children = nRoute2s;
557
+ nRoute1s.push(route1);
558
+ }
559
+ });
560
+
561
+ this.menuModules = nRoute1s || [];
562
+ },
563
+ logout() {
564
+ this.$store.dispatch("user/logout2").then((res) => {
565
+ this.$router.push(`/login?redirect=${this.$route.fullPath}`);
566
+ });
567
+ },
568
+ wfClose() {
569
+ this.timerExcFun(true);
570
+ },
571
+ initWfTimer() {
572
+ this.wfTimer = setInterval(() => {
573
+ this.timerExcFun(false);
574
+ }, 10000);
575
+ this.timerExcFun(true);
576
+ },
577
+ timerExcFun(isLoading) {
578
+ if (!this.activating) {
579
+ return;
580
+ }
581
+ this.getWfInfoList(isLoading);
582
+ this.getUnreadMessageNum(isLoading);
583
+ this.$emit("timerHandle");
584
+ },
585
+ clearTimer() {
586
+ clearInterval(this.wfTimer);
587
+ this.wfTimer = null;
588
+ },
589
+ getUserInfo() {
590
+ this.$http({
591
+ url: USER_PREFIX + "/user/currentUser",
592
+ method: "post",
593
+ success: (res) => {
594
+ let userInfo = res.objx;
595
+ this.headPhotoUrl = userInfo.headPhotoUrl
596
+ ? userInfo.headPhotoUrl
597
+ : require("@/resources/images" + "/default-header.png");
598
+
599
+ this.userInfo = userInfo;
600
+ },
601
+ });
602
+ this.$http({
603
+ url: USER_PREFIX + "/company_info/getCurrent",
604
+ method: `post`,
605
+ success: (res) => {
606
+ this.companyInfo = res.objx || {};
607
+ },
608
+ });
609
+ },
610
+ initSystemNotice() {
611
+ this.$http({
612
+ url: USER_PREFIX + "/system_notice/listPage",
613
+ data: { publish: true, searchCount: false },
614
+ method: "post",
615
+ success: (res) => {
616
+ this.systemNotices =
617
+ res.objx && res.objx.records ? res.objx.records : [];
618
+ },
619
+ });
620
+ },
621
+ openSystemNoticeDialog(row) {
622
+ this.csnRow = row || null;
623
+ this.showSystemNoticeInfoDialog = true;
624
+ },
625
+ initUnDoWfInfo() {
626
+ this.$http({
627
+ url: AGILEBPM_PREFIX + "/wf_manage/listPage",
628
+ data: { type: 0, searchCount: false },
629
+ method: "post",
630
+ success: (res) => {
631
+ this.unDoWfRows = res.objx.records || [];
632
+ },
633
+ });
634
+ },
635
+ initWfTableList() {
636
+ let that = this;
637
+ let paramColumns = this.wfParamDTOs.map((item) => {
638
+ return {
639
+ title: this.$t1(item.paramName),
640
+ field: item.paramKey,
641
+ width: 150,
642
+ };
643
+ });
644
+ let statuses = {
645
+ running: this.$t1("审核中"),
646
+ back: this.$t1("已驳回"),
647
+ end: this.$t1("已完成"),
648
+ };
649
+ let tableOption = {
650
+ vue: this,
651
+ tableRef: "table-wf",
652
+ tableName: "home-table-wf",
653
+ config: {
654
+ height: "auto",
655
+ scrollY: {
656
+ enabled: false,
657
+ },
658
+ },
659
+ columns: [
660
+ { type: "checkbox", width: 48, resizable: false, fixed: "left" },
661
+ {
662
+ title: this.$t1("单据类型"),
663
+ field: "objTypeName",
664
+ width: 150,
665
+ fixed: "left",
666
+ },
667
+ {
668
+ title: this.$t1("流程主题"),
669
+ field: "name",
670
+ width: 150,
671
+ },
672
+ {
673
+ title: this.$t1("启动人"),
674
+ field: "starterName",
675
+ width: 150,
676
+ },
677
+ {
678
+ title: this.$t1("当前任务"),
679
+ field: "taskName",
680
+ width: 150,
681
+ },
682
+ {
683
+ title: this.$t1("当前任务用户"),
684
+ field: "candidateNames",
685
+ width: 150,
686
+ },
687
+ {
688
+ title: this.$t1("启动时间"),
689
+ field: "createDate",
690
+ width: 150,
691
+ },
692
+ ...paramColumns,
693
+ {
694
+ width: 47,
695
+ fixed: "right",
696
+ title: "",
697
+ sortable: false,
698
+ slots: {
699
+ default: ({ row }) => {
700
+ return [
701
+ <a
702
+ href="javascript:void(0);"
703
+ class="a-link"
704
+ onclick={() => {
705
+ this.openWfDialog(row);
706
+ }}
707
+ >
708
+ <el-tooltip
709
+ enterable={false}
710
+ effect="dark"
711
+ content={this.$t1("查看")}
712
+ placement="top"
713
+ popper-class="tooltip-skin"
714
+ >
715
+ <i class="el-icon-view" />
716
+ </el-tooltip>
717
+ </a>,
718
+ ];
719
+ },
720
+ },
721
+ },
722
+ ],
723
+ };
724
+ this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
725
+ this.wfOption = opts;
726
+ });
727
+ },
728
+ openWfDialog(row) {
729
+ this.wfContentOption = {
730
+ objId: row.objId,
731
+ url: row.url,
732
+ objTypeCode: row.objTypeCode,
733
+ };
734
+ this.showWfDialog = true;
735
+ },
736
+ commMenuCallBack(datas) {
737
+ this.commMenus = datas || [];
738
+ },
739
+ initCommMenu() {
740
+ this.$http({
741
+ url: USER_PREFIX + "/comm_menu/currentList",
742
+ data: { longOne: 0 },
743
+ method: "POST",
744
+ }).then((resultMsg) => {
745
+ this.commMenus = resultMsg.objx || [];
746
+ });
747
+ },
748
+ initNotifyMessage() {
749
+ return;
750
+ this.$http({
751
+ url: USER_PREFIX + "/notify_message/listPage",
752
+ data: { searchCount: false },
753
+ method: "post",
754
+ success: (res) => {
755
+ this.notifyMessages =
756
+ res.objx && res.objx.records ? res.objx.records : [];
757
+ },
758
+ });
759
+ },
760
+ openNotifyMessageDialog(row) {
761
+ if (row.jumpContent) {
762
+ this.$refs.notifyMessageDialog.open(row, () => {
763
+ row.readed = 1;
764
+ });
765
+ }
766
+ },
767
+ openMoreNotifyMessage(notifyType) {
768
+ let data = { notifyType: notifyType || "" };
769
+ let view = {
770
+ name: "notify_message:list",
771
+ query: data,
772
+ };
773
+ this.$store.dispatch("tagsView/delCachedView", view).then(() => {
774
+ this.$router.replace(view);
775
+ });
776
+
777
+ if (notifyType) {
778
+ this.showGroupDialog = false;
779
+ }
780
+ },
781
+ checkNotifyMessage(row, index) {
782
+ this.showNoticeDialog = true;
783
+ this.notifyMessageInfoIndex = index;
784
+ this.notifyMessageInfoId = row.id;
785
+ },
786
+ notifyMessageReadHanlde() {
787
+ this.notifyMessages[this.notifyMessageInfoIndex].readed = 1;
788
+ },
789
+ openNotifyTemplateGroupDialog() {
790
+ this.$http({
791
+ url: USER_PREFIX + `/notify_template/listPage`,
792
+ method: `post`,
793
+ data: { searchCount: false },
794
+ isLoading: true,
795
+ // loadingTarget: document.body,
796
+ success: (res) => {
797
+ this.notifyTemplates =
798
+ res.objx && res.objx.records ? res.objx.records : [];
799
+ this.showGroupDialog = true;
800
+ },
801
+ });
802
+ },
803
+ rourteTo(route) {
804
+ if (route.type === 4) {
805
+ this.jumpOutLink(route);
806
+ } else if (route.type === 3) {
807
+ let menuCode = route.menuCode;
808
+ let path = "/user/outLink/index/" + menuCode;
809
+ this.$openView({ path: path, query: { url: route.url } }, route);
810
+ } else {
811
+ let path = this.getPath(route);
812
+ if (!path) return;
813
+ this.$openView(path, route);
814
+ }
815
+ },
816
+ getPath(route3) {
817
+ let item = null;
818
+ let path = null;
819
+ if (route3.type === 0) {
820
+ //普通菜单
821
+ if (route3.url) {
822
+ path = route3.route || route3.url;
823
+ let str = "/report/vform/render/";
824
+ if (path.indexOf(str) === 0) {
825
+ } else {
826
+ let pIndex = path.indexOf("?");
827
+ if (pIndex > 0) {
828
+ path = path.substring(0, pIndex);
829
+ }
830
+ }
831
+ }
832
+ } else if (route3.type === 5) {
833
+ //动态表单
834
+ let url = route3.route || route3.url;
835
+ path = url;
836
+ }
837
+ if (path && path.startsWith("@")) {
838
+ path = null;
839
+ }
840
+ return path;
841
+ },
842
+ jumpOutLink(route) {
843
+ let path = route.url;
844
+ if (route.type === 4 && path) {
845
+ if (path.indexOf("token={token}") >= 0) {
846
+ path = path.replace("token={token}", "token=" + getToken());
847
+ }
848
+ window.open(path);
849
+ }
850
+ },
851
+ initWfParam() {
852
+ return this.$http({
853
+ url: USER_PREFIX + "/wf_param/list",
854
+ method: `post`,
855
+ data: {},
856
+ isLoading: true,
857
+ // loadingTarget: document.body,
858
+ modalStrictly: true,
859
+ success: (res) => {
860
+ this.wfParamDTOs = res.objx || [];
861
+ // this.initWfTableList();
862
+ },
863
+ });
864
+ },
865
+ getWfInfoList(isLoading) {
866
+ if (!this.activating) {
867
+ return;
868
+ }
869
+ this.$http({
870
+ url: USER_PREFIX + "/wf_info/listPage",
871
+ data: { type: 0, size: 20, searchCount: false },
872
+ method: "post",
873
+ isLoading: isLoading,
874
+ modal: isLoading || false,
875
+ // loadingTarget: document.body,
876
+ success: (res) => {
877
+ this.unDoWfRows =
878
+ res.objx && res.objx.records ? res.objx.records : [];
879
+ },
880
+ failMsg: false,
881
+ errorMsg: false,
882
+ fail: (res, response) => {
883
+ if (response && response.status === 200) {
884
+ this.$errorMsg(res);
885
+ }
886
+ },
887
+ });
888
+ },
889
+ getUnreadMessageNum(isLoading) {
890
+ if (!this.activating) {
891
+ return;
892
+ }
893
+ return this.$http({
894
+ url: USER_PREFIX + "/notify_message/countMessage",
895
+ method: `post`,
896
+ data: {},
897
+ isLoading: isLoading,
898
+ modal: isLoading || false,
899
+ // loadingTarget: document.body,
900
+ success: (res) => {
901
+ this.unreadMessageNum = res.objx || 0;
902
+ },
903
+ failMsg: false,
904
+ errorMsg: false,
905
+ fail: (res, response) => {
906
+ if (response && response.status === 200) {
907
+ this.$errorMsg(res);
908
+ }
909
+ },
910
+ });
911
+ },
912
+ wfhandleCallback(flag) {
913
+ if ([1, 2, 3].includes(flag)) {
914
+ this.showWfDialog = false;
915
+ this.wfClose();
916
+ }
917
+ },
918
+ toWfManageList() {
919
+ let url = this.wf_manage_url || "/basic/wf/wf_manage/list";
920
+ this.$router.push(url);
921
+ },
922
+ },
923
+ };
924
+ </script>
925
+ <style lang="scss" scoped>
926
+ @import "~@/styles/variables.scss";
927
+ ::v-deep .el-link {
928
+ color: rgba(0, 0, 0, 0.65);
929
+ .iconfont {
930
+ margin-right: 4px;
931
+ font-size: 14px;
932
+ }
933
+ &:hover {
934
+ color: $baseColor;
935
+ }
936
+ }
937
+ .workbenches {
938
+ padding: 18px 24px 0px;
939
+ }
940
+ .workbenches-head {
941
+ color: rgba(0, 0, 0, 0.65);
942
+ margin-bottom: 16px;
943
+ line-height: 1;
944
+ font-size: 14px;
945
+ .icon-haier {
946
+ color: $baseColor;
947
+ font-size: 24px;
948
+ margin-right: 16px;
949
+ }
950
+ .logo {
951
+ height: 30px;
952
+ vertical-align: middle;
953
+ }
954
+ > span {
955
+ margin-right: 16px;
956
+ &.f-blue {
957
+ font-size: 16px;
958
+ vertical-align: middle;
959
+ line-height: 1;
960
+ display: inline-block;
961
+ }
962
+ }
963
+ }
964
+ .workbenches-box {
965
+ height: calc(100vh - 94px); /**margin-bottom: 16px;*/
966
+ > .el-row {
967
+ height: 100%;
968
+ > .el-col {
969
+ height: 100%;
970
+ }
971
+ }
972
+ .w-box {
973
+ background: #fff;
974
+ border-radius: 4px;
975
+ overflow: hidden;
976
+ height: 100%;
977
+ .w-b-head {
978
+ overflow: hidden;
979
+ margin: 16px 24px;
980
+ .tit {
981
+ b {
982
+ font-size: 16px;
983
+ font-weight: 600;
984
+ vertical-align: middle;
985
+ }
986
+ .nums {
987
+ margin-left: 8px;
988
+ border-radius: 4px;
989
+ width: 20px;
990
+ height: 20px;
991
+ display: inline-block;
992
+ background-color: #ff4d4f;
993
+ color: #fff;
994
+ text-align: center;
995
+ line-height: 20px;
996
+ font-style: inherit;
997
+ font-size: 12px;
998
+ vertical-align: middle;
999
+ }
1000
+ }
1001
+ .el-link {
1002
+ margin-left: 24px;
1003
+ }
1004
+ }
1005
+ }
1006
+ .wnotice-box {
1007
+ padding: 0 24px 4px;
1008
+ overflow: auto;
1009
+ height: calc(100% - 52px);
1010
+ .item {
1011
+ border: solid 1px rgba(0, 0, 0, 0.15);
1012
+ border-radius: 4px;
1013
+ padding: 12px;
1014
+ display: flex;
1015
+ margin-bottom: 12px;
1016
+ line-height: 18px;
1017
+ cursor: pointer;
1018
+ font-size: 14px;
1019
+ .no-read {
1020
+ background-color: #faad14;
1021
+ border-radius: 4px;
1022
+ color: #fff;
1023
+ font-size: 12px;
1024
+ font-style: inherit;
1025
+ line-height: 18px;
1026
+ padding: 0 4px;
1027
+ margin-right: 8px;
1028
+ }
1029
+ .name {
1030
+ flex: 1;
1031
+ }
1032
+ .date {
1033
+ color: rgba(0, 0, 0, 0.45);
1034
+ font-size: 12px;
1035
+ }
1036
+ &:hover {
1037
+ border-color: $baseColor;
1038
+ .name {
1039
+ color: $baseColor;
1040
+ }
1041
+ }
1042
+ }
1043
+ }
1044
+ .agenda-box {
1045
+ padding: 0 24px 4px;
1046
+ overflow: auto;
1047
+ height: calc(100% - 52px);
1048
+ .item {
1049
+ border: solid 1px rgba(0, 0, 0, 0.15);
1050
+ border-radius: 4px;
1051
+ padding: 12px;
1052
+ margin-bottom: 12px;
1053
+ cursor: pointer;
1054
+ p {
1055
+ margin: 0;
1056
+ }
1057
+ .name {
1058
+ margin-bottom: 8px;
1059
+ font-size: 14px;
1060
+ }
1061
+ .info {
1062
+ font-size: 12px;
1063
+ > span {
1064
+ margin-right: 32px;
1065
+ color: rgba(0, 0, 0, 0.45);
1066
+ }
1067
+ }
1068
+ &:hover {
1069
+ border-color: $baseColor;
1070
+ .name {
1071
+ color: $baseColor;
1072
+ }
1073
+ }
1074
+ }
1075
+ }
1076
+ .use-cases {
1077
+ overflow: auto;
1078
+ padding: 0 24px 4px;
1079
+ height: calc(100% - 52px);
1080
+ .item {
1081
+ margin-bottom: 32px;
1082
+ .t {
1083
+ &:before {
1084
+ content: "";
1085
+ width: 4px;
1086
+ height: 15px;
1087
+ border-radius: 4px;
1088
+ background: $baseColor;
1089
+ margin-right: 8px;
1090
+ vertical-align: middle;
1091
+ display: inline-block;
1092
+ }
1093
+ span {
1094
+ vertical-align: middle;
1095
+ font-size: 14px;
1096
+ }
1097
+ }
1098
+ .c {
1099
+ padding: 2px 12px;
1100
+ .i-block {
1101
+ display: inline-block;
1102
+ width: 84px;
1103
+ margin-right: 52px;
1104
+ text-align: center;
1105
+ font-size: 12px;
1106
+ margin-top: 18px;
1107
+ cursor: pointer;
1108
+ vertical-align: top;
1109
+ .icon {
1110
+ width: 44px;
1111
+ height: 44px;
1112
+ border-radius: 8px;
1113
+ color: #fff;
1114
+ display: block;
1115
+ margin: 0 auto 8px;
1116
+ font-size: 20px;
1117
+ font-style: inherit;
1118
+ line-height: 44px;
1119
+ }
1120
+ &:hover {
1121
+ color: $baseColor;
1122
+ }
1123
+ .tips {
1124
+ zoom: 0.8;
1125
+ display: inline-block;
1126
+ line-height: 1.2;
1127
+ margin: 0 -42px 8px;
1128
+ }
1129
+ }
1130
+ }
1131
+ }
1132
+ }
1133
+ }
1134
+ .workbenches-info {
1135
+ padding: 0 24px;
1136
+ margin: 0 -24px;
1137
+ background: #fff;
1138
+ height: 50px;
1139
+ display: flex;
1140
+ font-size: 12px;
1141
+ color: rgba(0, 0, 0, 0.65);
1142
+ .w-left {
1143
+ padding: 10px 0;
1144
+ height: 100%;
1145
+ text-align: right;
1146
+ vertical-align: middle;
1147
+ flex: 1;
1148
+ zoom: 0.9;
1149
+ span {
1150
+ margin: 3px 0px;
1151
+ display: block;
1152
+ }
1153
+ }
1154
+ .w-right {
1155
+ line-height: 74px;
1156
+ }
1157
+ }
1158
+ </style>