eoss-ui 0.5.33 → 0.5.35

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +929 -0
  2. package/lib/button-group.js +115 -95
  3. package/lib/button.js +115 -95
  4. package/lib/checkbox-group.js +118 -99
  5. package/lib/config/api.js +2 -0
  6. package/lib/data-table-form.js +116 -96
  7. package/lib/data-table.js +119 -99
  8. package/lib/date-picker.js +115 -95
  9. package/lib/dialog.js +123 -99
  10. package/lib/eoss-ui.common.js +628 -436
  11. package/lib/flow-group.js +184 -134
  12. package/lib/flow-list.js +119 -99
  13. package/lib/flow.js +163 -143
  14. package/lib/form.js +116 -96
  15. package/lib/handle-user.js +116 -96
  16. package/lib/handler.js +229 -161
  17. package/lib/index.js +1 -1
  18. package/lib/input-number.js +115 -95
  19. package/lib/input.js +115 -95
  20. package/lib/login.js +243 -126
  21. package/lib/main.js +149 -138
  22. package/lib/nav.js +115 -95
  23. package/lib/notify.js +103 -100
  24. package/lib/page.js +115 -95
  25. package/lib/player.js +115 -95
  26. package/lib/qr-code.js +115 -95
  27. package/lib/radio-group.js +116 -96
  28. package/lib/retrial-auth.js +118 -98
  29. package/lib/select-ganged.js +115 -95
  30. package/lib/select.js +116 -96
  31. package/lib/selector-panel.js +133 -113
  32. package/lib/selector.js +116 -96
  33. package/lib/sizer.js +117 -97
  34. package/lib/steps.js +115 -95
  35. package/lib/switch.js +115 -95
  36. package/lib/table-form.js +115 -95
  37. package/lib/tabs.js +115 -95
  38. package/lib/theme-chalk/handler.css +1 -1
  39. package/lib/theme-chalk/index.css +1 -1
  40. package/lib/tips.js +116 -96
  41. package/lib/toolbar.js +24 -21
  42. package/lib/tree-group.js +115 -95
  43. package/lib/tree.js +116 -96
  44. package/lib/upload.js +125 -105
  45. package/lib/utils/util.js +17 -0
  46. package/lib/wujie.js +115 -95
  47. package/lib/wxlogin.js +115 -95
  48. package/package.json +2 -2
  49. package/packages/checkbox-group/src/main.vue +0 -1
  50. package/packages/dialog/src/main.vue +6 -2
  51. package/packages/flow-group/src/main.vue +40 -18
  52. package/packages/handler/src/main.vue +52 -32
  53. package/packages/login/src/main.vue +78 -10
  54. package/packages/login/src/resetPassword.vue +7 -5
  55. package/packages/main/src/main.vue +11 -26
  56. package/packages/main/src/userinfo.vue +1 -1
  57. package/packages/theme-chalk/lib/handler.css +1 -1
  58. package/packages/theme-chalk/lib/index.css +1 -1
  59. package/packages/theme-chalk/src/handler.scss +3 -1
  60. package/packages/toolbar/src/main.vue +20 -20
  61. package/src/config/api.js +2 -0
  62. package/src/index.js +1 -1
  63. package/src/utils/util.js +22 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eoss-ui",
3
- "version": "0.5.33",
3
+ "version": "0.5.35",
4
4
  "description": "eoss内部业务组件",
5
5
  "main": "lib/eoss-ui.common.js",
6
6
  "files": [
@@ -96,7 +96,7 @@
96
96
  "cp-cli": "^1.0.2",
97
97
  "cross-env": "^3.1.3",
98
98
  "css-loader": "^2.1.0",
99
- "eoss-element": "^0.2.82",
99
+ "eoss-element": "^0.2.83",
100
100
  "es6-promise": "^4.0.5",
101
101
  "eslint": "4.18.2",
102
102
  "eslint-config-elemefe": "0.1.1",
@@ -162,7 +162,6 @@ export default {
162
162
  return this.value === undefined ? [] : this.value;
163
163
  },
164
164
  set(val) {
165
- console.log(val);
166
165
  return val;
167
166
  }
168
167
  },
@@ -6,7 +6,7 @@
6
6
  :width="wd"
7
7
  :height="ht"
8
8
  :close-on-click-modal="shadeClose"
9
- :showScale="!full"
9
+ :showScale="showScale"
10
10
  :drag="drag"
11
11
  :modal-append-to-body="modalAppendToBody"
12
12
  v-bind="$attrs"
@@ -337,7 +337,11 @@ export default {
337
337
  type: Boolean,
338
338
  default: true
339
339
  },
340
- closeParent: Boolean
340
+ closeParent: Boolean,
341
+ showScale: {
342
+ type: Boolean,
343
+ default: true
344
+ }
341
345
  },
342
346
  computed: {
343
347
  wujieName() {
@@ -12,26 +12,33 @@
12
12
  <el-tab-pane
13
13
  v-if="handleHide(items.hide)"
14
14
  :key="indexs"
15
- :immediate="items.label == '流程图' ? false : items.immediate"
16
- :label="items.label"
15
+ :immediate="items.immediate"
17
16
  :name="String(indexs)"
18
17
  :class="{ 'es-flex-vertical': items.average }"
19
18
  >
20
- <span slot="label" v-if="items.title">
21
- <template v-if="typeof items.title === 'object'">
22
- <i v-if="items.title.icon" :class="items.title.icon"></i>
23
- <el-badge
24
- v-if="
25
- Object.prototype.hasOwnProperty.call(items.title, 'count')
26
- "
27
- type="primary"
28
- :value="items.title.count"
29
- :max="99"
30
- >
31
- </el-badge>
32
- {{ items.title.text }}
19
+ <span
20
+ slot="label"
21
+ :style="{
22
+ color:
23
+ activeName == String(indexs) ? items.activeColor : items.color
24
+ }"
25
+ >
26
+ <template v-if="items.title">
27
+ <template v-if="typeof items.title === 'object'">
28
+ <i v-if="items.title.icon" :class="items.title.icon"></i>
29
+ <el-badge
30
+ v-if="items.title.count"
31
+ type="primary"
32
+ :value="items.title.count"
33
+ :color="items.title.color"
34
+ :max="99"
35
+ >
36
+ </el-badge>
37
+ <template v-if>{{ items.title.text }}</template>
38
+ </template>
39
+ <template v-else>{{ items.title }}</template>
33
40
  </template>
34
- <template v-else>{{ items.title }}</template>
41
+ <template>{{ items.label }}</template>
35
42
  </span>
36
43
  <es-tabs-panel v-bind="items" :show="activeName === String(indexs)">
37
44
  <template
@@ -483,7 +490,8 @@ export default {
483
490
  businessId: undefined,
484
491
  taskExamineAppId: this.appId,
485
492
  showMsg: true,
486
- formRefs: this.refs
493
+ formRefs: this.refs,
494
+ submits: null
487
495
  };
488
496
  },
489
497
  computed: {
@@ -544,7 +552,15 @@ export default {
544
552
  attrs: attrs
545
553
  });
546
554
  },
547
- handleUrlJoinParams(res) {
555
+ handleUrlJoinParams(res, flag = true) {
556
+ if (flag) {
557
+ if (res.method) {
558
+ this.submit = {
559
+ id: res.id,
560
+ method: typeof res.method === 'boolean' ? 'submit' : res.method
561
+ };
562
+ }
563
+ }
548
564
  let url = res.url;
549
565
  let param = util.extend(
550
566
  {},
@@ -585,6 +601,12 @@ export default {
585
601
  });
586
602
  },
587
603
  handleSubmit(res) {
604
+ if (this.submit) {
605
+ if (this.submit.id) {
606
+ let iframe = document.getElementById(this.submit.id); //先找到ifram
607
+ return iframe.contentWindow[this.submit.method](res); //用dom对象调用子页面的方法
608
+ }
609
+ }
588
610
  let esFlowForm = this.formRefs
589
611
  ? this.$refs[this.formRefs]
590
612
  : this.$refs.esFlowForm;
@@ -31,38 +31,47 @@
31
31
  v-else-if="item.type === 'system'"
32
32
  placement="bottom"
33
33
  trigger="hover"
34
- popper-class="es-popper-sub-system"
34
+ ref="system"
35
+ :popper-class="
36
+ system.length > 4
37
+ ? 'es-popper-sub-system is-width'
38
+ : 'es-popper-sub-system'
39
+ "
40
+ @show="showPopper = true"
41
+ @hide="showPopper = false"
35
42
  >
36
- <ul class="es-sub-system">
37
- <li
38
- v-for="ele in system"
39
- class="es-sub-system-item"
40
- :class="{
41
- 'es-disabled':
42
- (application && !ele.hasPermission) ||
43
- (ele.extendData && ele.extendData.businessStatus == 0)
44
- }"
45
- :key="ele.id"
46
- :title="ele.text"
47
- @click.stop="handleSelect({ node: ele })"
48
- >
49
- <el-badge
50
- :is-dot="typeof ele.tips === 'boolean'"
51
- :hidden="!ele.tips"
52
- :max="99"
53
- :value="typeof ele.tips !== 'boolean' ? ele.tips : 0"
54
- ><i
55
- :class="[
56
- unicode(ele.icons) ? ele.icons : 'es-icons',
57
- 'es-sub-system-icon',
58
- { 'es-icon-yingyong': !ele.icons }
59
- ]"
60
- v-html="unicode(ele.icons) ? '' : ele.icons"
61
- ></i
62
- ></el-badge>
63
- <div class="es-sub-system-title">{{ ele.text }}</div>
64
- </li>
65
- </ul>
43
+ <el-scrollbar max-height="320px" v-if="system.length">
44
+ <ul class="es-sub-system">
45
+ <li
46
+ v-for="ele in system"
47
+ class="es-sub-system-item"
48
+ :class="{
49
+ 'es-disabled':
50
+ (application && !ele.hasPermission) ||
51
+ (ele.extendData && ele.extendData.businessStatus == 0)
52
+ }"
53
+ :key="ele.id"
54
+ :title="ele.text"
55
+ @click.stop="handleSelect({ node: ele })"
56
+ >
57
+ <el-badge
58
+ :is-dot="typeof ele.tips === 'boolean'"
59
+ :hidden="!ele.tips"
60
+ :max="99"
61
+ :value="typeof ele.tips !== 'boolean' ? ele.tips : 0"
62
+ ><i
63
+ :class="[
64
+ unicode(ele.icons) ? ele.icons : 'es-icons',
65
+ 'es-sub-system-icon',
66
+ { 'es-icon-yingyong': !ele.icons }
67
+ ]"
68
+ v-html="unicode(ele.icons) ? '' : ele.icons"
69
+ ></i
70
+ ></el-badge>
71
+ <div class="es-sub-system-title">{{ ele.text }}</div>
72
+ </li>
73
+ </ul>
74
+ </el-scrollbar>
66
75
  <div
67
76
  slot="reference"
68
77
  class="es-handler-icon"
@@ -139,6 +148,16 @@ export default {
139
148
  default: false
140
149
  }
141
150
  },
151
+ watch: {
152
+ subSystem: {
153
+ handler(val) {
154
+ if (this.showPopper) {
155
+ this.$refs.system[0].doClose();
156
+ this.$nextTick(this.$refs.system[0].doShow);
157
+ }
158
+ }
159
+ }
160
+ },
142
161
  computed: {
143
162
  lists() {
144
163
  if (this.data === undefined) {
@@ -208,7 +227,8 @@ export default {
208
227
  icon: 'es-icon-xitongguanli',
209
228
  title: '设置'
210
229
  }
211
- ]
230
+ ],
231
+ showPopper: false
212
232
  };
213
233
  },
214
234
  created() {
@@ -291,12 +291,12 @@
291
291
  <span class="es-login-icp-item" :style="_copyrightStyle">{{
292
292
  icpInfo.copyright_unit
293
293
  }}</span>
294
- <a
294
+ <span
295
295
  class="es-login-icp-item"
296
296
  target="_blank"
297
297
  :style="_copyrightStyle"
298
298
  :href="icpInfo.copyright_icp_url"
299
- >{{ icpInfo.copyright_icp }}</a
299
+ >{{ icpInfo.copyright_icp }}</span
300
300
  >
301
301
  </div>
302
302
  <es-dialog
@@ -314,8 +314,8 @@
314
314
  :username="formData.username"
315
315
  :operationCheckCode="operationCheckCode"
316
316
  @success="handleSuccess"
317
- ></reset-password
318
- ></slot>
317
+ ></reset-password>
318
+ </slot>
319
319
  </es-dialog>
320
320
  <es-dialog
321
321
  title="客户端下载"
@@ -323,9 +323,20 @@
323
323
  height="80%"
324
324
  custom-class="es-clients-dialog"
325
325
  :visible.sync="showDownLoadApp"
326
- ><es-clients v-bind="download"></es-clients>
326
+ >
327
+ <es-clients v-bind="download"></es-clients>
327
328
  </es-dialog>
328
329
  <slot name="calogin"></slot>
330
+ <es-dialog
331
+ title="请进行身份效验"
332
+ width="420px"
333
+ height="380px"
334
+ :show-scale="false"
335
+ :visible.sync="showAssistance"
336
+ @close="closeAssistance"
337
+ >
338
+ <es-qr-code :content="checkCode" v-if="checkCode"></es-qr-code>
339
+ </es-dialog>
329
340
  </div>
330
341
  </template>
331
342
  <script>
@@ -343,7 +354,8 @@ import {
343
354
  getTwoFactorLoginCode,
344
355
  doTwoFactorLogin,
345
356
  doWechatQrLogin,
346
- doCaLogin
357
+ doCaLogin,
358
+ doAssistanceQrLogin
347
359
  } from 'eoss-ui/src/config/api.js';
348
360
  export default {
349
361
  name: 'EsLogin',
@@ -743,7 +755,10 @@ export default {
743
755
  code: null,
744
756
  defaultModel: JSON.parse(JSON.stringify(this.model)),
745
757
  copyrightColor: null,
746
- copyrightBgColor: null
758
+ copyrightBgColor: null,
759
+ checkCode: '',
760
+ showAssistance: false,
761
+ doAssistance: null
747
762
  };
748
763
  },
749
764
  created() {
@@ -763,6 +778,7 @@ export default {
763
778
  } else {
764
779
  this.getLogin();
765
780
  document.addEventListener('keyup', this.doLogin);
781
+ document.addEventListener('keydown', this.forbiddenTab);
766
782
  }
767
783
  },
768
784
  mounted() {
@@ -1286,7 +1302,6 @@ export default {
1286
1302
  loginInfo(res) {
1287
1303
  clearTimeout(this.interval);
1288
1304
  if (res) {
1289
- //this.modifyPasswordfun();
1290
1305
  this.interval = setTimeout(() => {
1291
1306
  this.initRequestLoginInfo();
1292
1307
  }, this.scanIntervalTime);
@@ -1304,7 +1319,12 @@ export default {
1304
1319
  .then((res) => {
1305
1320
  if (res.rCode === 0) {
1306
1321
  const results = res.results;
1307
- this.handleResults(results, 3);
1322
+ if (results.statusCode === 0) {
1323
+ clearTimeout(this.interval);
1324
+ this.handleResults(results, 3);
1325
+ } else {
1326
+ this.loginInfo(true);
1327
+ }
1308
1328
  }
1309
1329
  })
1310
1330
  .catch((err) => {
@@ -1315,7 +1335,6 @@ export default {
1315
1335
  });
1316
1336
  },
1317
1337
  handleResults(results, type) {
1318
- this.loginInfo(false);
1319
1338
  switch (results.statusCode) {
1320
1339
  case 0:
1321
1340
  util.setStorage({
@@ -1409,6 +1428,12 @@ export default {
1409
1428
  })
1410
1429
  .catch((e) => {});
1411
1430
  break;
1431
+ case 102:
1432
+ this.checkCode = results.checkCode;
1433
+ this.showAssistance = true;
1434
+ let { operationCheckCode } = JSON.parse(results.checkCode);
1435
+ this.handleAssistance({ operationCheckCode });
1436
+ break;
1412
1437
  default:
1413
1438
  if (type !== 3) {
1414
1439
  this.$message({
@@ -1431,12 +1456,55 @@ export default {
1431
1456
  }
1432
1457
  }
1433
1458
  },
1459
+ handleAssistance(data) {
1460
+ clearTimeout(this.doAssistance);
1461
+ this.doAssistance = setTimeout(() => {
1462
+ this.doAssistanceLogin(data);
1463
+ }, this.scanIntervalTime);
1464
+ },
1465
+ doAssistanceLogin(data) {
1466
+ util
1467
+ .ajax({
1468
+ method: 'post',
1469
+ url: doAssistanceQrLogin,
1470
+ data: data
1471
+ })
1472
+ .then((res) => {
1473
+ if (res.rCode === 0) {
1474
+ const results = res.results;
1475
+ if (results.statusCode === 0) {
1476
+ clearTimeout(this.doAssistance);
1477
+ this.handleResults(results, 3);
1478
+ } else {
1479
+ this.handleAssistance(data);
1480
+ }
1481
+ } else {
1482
+ clearTimeout(this.doAssistance);
1483
+ this.$message.error(res.msg);
1484
+ }
1485
+ })
1486
+ .catch((err) => {
1487
+ clearTimeout(this.doAssistance);
1488
+ if (err.message && err.message !== 'canceled') {
1489
+ this.$message.error(err.message);
1490
+ }
1491
+ });
1492
+ },
1493
+ closeAssistance() {
1494
+ clearTimeout(this.doAssistance);
1495
+ },
1434
1496
  handleSuccess() {
1435
1497
  this.showResetPassword = false;
1498
+ },
1499
+ forbiddenTab(e) {
1500
+ if (e.keyCode == 9) {
1501
+ return false;
1502
+ }
1436
1503
  }
1437
1504
  },
1438
1505
  beforeDestroy() {
1439
1506
  document.removeEventListener('keyup', this.doLogin);
1507
+ document.removeEventListener('keydown', this.forbiddenTab);
1440
1508
  }
1441
1509
  };
1442
1510
  </script>
@@ -395,7 +395,7 @@ export default {
395
395
  this.checkPassword = new RegExp(results.checkPassword);
396
396
  }
397
397
  if (results.checkPasswordMsg) {
398
- this.checkPasswordMsg = new RegExp(results.checkPasswordMsg);
398
+ this.checkPasswordMsg = results.checkPasswordMsg;
399
399
  }
400
400
  } else {
401
401
  let msg = res.msg || '系统错误,请联系管理员!';
@@ -476,10 +476,12 @@ export default {
476
476
  data: data.password,
477
477
  key: this.secret
478
478
  });
479
- data.oldPassword = util.esmEncrypt({
480
- data: data.oldPassword,
481
- key: this.secret
482
- });
479
+ if (data.oldPassword) {
480
+ data.oldPassword = util.esmEncrypt({
481
+ data: data.oldPassword,
482
+ key: this.secret
483
+ });
484
+ }
483
485
  }
484
486
  if (this.activeIndex == '0') {
485
487
  data.operationCheckCode = this.operationCheckCode;
@@ -479,16 +479,10 @@ export default {
479
479
  )
480
480
  );
481
481
  }
482
- console.log(topRightToolHide);
483
- console.log(
484
- 'Object.keys(topRightToolHide).length',
485
- Object.keys(topRightToolHide).length
486
- );
487
482
  if (this.layout === 'subsystem' || this.application) {
488
483
  if (this.hides && Object.keys(this.hides).length) {
489
484
  return { ...this.hides, set: !this.set, system: false };
490
485
  } else if (topRightToolHide && Object.keys(topRightToolHide).length) {
491
- console.log('topRightToolHide', topRightToolHide);
492
486
  return { ...topRightToolHide, set: !this.set, system: false };
493
487
  } else {
494
488
  return { set: !this.set, system: false };
@@ -934,6 +928,9 @@ export default {
934
928
  sessionStorage.setItem('sysLogoIco', results[i]);
935
929
  util.setFavicon(results[i]);
936
930
  }
931
+ if (i === 'subsystemExtend' && results[i].themeColor) {
932
+ this.color = unescape(results[i].themeColor).toLowerCase();
933
+ }
937
934
  if (i === 'userStyle' && results[i].color) {
938
935
  this.color = unescape(results[i].color).toLowerCase();
939
936
  }
@@ -978,26 +975,14 @@ export default {
978
975
  }
979
976
  return true;
980
977
  }
981
- util
982
- .ajax({ url: this.mainConfig })
983
- .then((res) => {
984
- if (res && res.rCode === 0) {
985
- this.setConfig(res.results, 1);
986
- if (this.remote) {
987
- this.getMenu();
988
- } else {
989
- this.renderMenu();
990
- }
991
- } else {
992
- let msg = res.msg || '系统错误,请联系管理员!';
993
- this.$message.error(msg);
994
- }
995
- })
996
- .catch((err) => {
997
- if (err.message && err.message !== 'canceled') {
998
- this.$message.error(err.message);
999
- }
1000
- });
978
+ util.getMainConfig((res) => {
979
+ this.setConfig(res, 1);
980
+ if (this.remote) {
981
+ this.getMenu();
982
+ } else {
983
+ this.renderMenu();
984
+ }
985
+ });
1001
986
  },
1002
987
  reGetConfig() {
1003
988
  util
@@ -267,7 +267,7 @@ export default {
267
267
  this.checkPassword = new RegExp(results.checkPassword);
268
268
  }
269
269
  if (results.checkPasswordMsg) {
270
- this.checkPasswordMsg = new RegExp(results.checkPasswordMsg);
270
+ this.checkPasswordMsg = results.checkPasswordMsg;
271
271
  }
272
272
  this.results = results.simpleUserInfo;
273
273
  this.values.orgName = results.simpleUserInfo.orgName;
@@ -1 +1 @@
1
- @charset "UTF-8";.es-handler{padding:5px 16px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.es-handler .es-handler-item{position:relative}.es-handler .es-handler-item+.es-handler-item{margin-left:12px}.es-handler .es-handler-item .el-badge__content.is-fixed{top:4px;right:14px}.es-handler .es-handler-item:first-child .es-handler-date,.es-handler .es-handler-item:first-child .es-handler-user{padding-right:12px}.es-handler .es-handler-item:first-child .es-handler-date::after,.es-handler .es-handler-item:first-child .es-handler-user::after{content:'';height:100%;display:block;position:absolute;top:0;right:0;border-right:1px solid #d9d9d9}.es-handler .es-handler-icon{font-size:24px;cursor:pointer;padding:4px;border-radius:4px}.es-handler .es-handler-icon:hover{background-color:#69c0ff}.es-handler .es-handler-date{font-size:14px;padding-right:8px}.es-handler .es-handler-date .es-online-num{font-weight:700;padding:0 7px;cursor:pointer;color:#ffea00}.es-handler .es-handler-user{height:48px}.es-handler .es-handler-user .es-user-img{width:48px;height:48px;float:left}.es-handler .es-handler-user .es-user-info{margin-left:60px}.es-handler .es-handler-user .es-user-job{max-width:140px}.es-popper-sub-system{background-color:#1890ff!important;color:#ffff;max-width:346px;min-width:unset}.es-popper-sub-system .popper__arrow::after{border-bottom-color:#096dd9!important}.es-sub-system{margin:0}.es-sub-system::after{content:'';display:block;clear:both}.es-sub-system .es-sub-system-item{width:80px;height:80px;padding:10px 4px;float:left;text-align:center;cursor:pointer}.es-sub-system .es-sub-system-item .es-sub-system-icon{font-size:32px;display:block;clear:both;margin-bottom:8px}.es-sub-system .es-sub-system-item .es-sub-system-title{width:100%;height:17px;font-size:13px;line-height:17px;display:block;overflow:hidden}.es-sub-system .es-sub-system-item:hover{background-color:#69c0ff;color:#fff}.es-sub-system .es-sub-system-item.es-disabled{cursor:not-allowed;color:rgba(255,255,255,.3);background-color:transparent}.el-dropdown-menu__item.es-job-active{background-color:#69c0ff;color:#fff}.es-color-picker{padding-left:24px}.es-color-picker .el-color-picker-tip{font-size:12px;color:#f21f06;margin-top:8px}
1
+ @charset "UTF-8";.es-handler{padding:5px 16px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.es-handler .es-handler-item{position:relative}.es-handler .es-handler-item+.es-handler-item{margin-left:12px}.es-handler .es-handler-item .el-badge__content.is-fixed{top:4px;right:14px}.es-handler .es-handler-item:first-child .es-handler-date,.es-handler .es-handler-item:first-child .es-handler-user{padding-right:12px}.es-handler .es-handler-item:first-child .es-handler-date::after,.es-handler .es-handler-item:first-child .es-handler-user::after{content:'';height:100%;display:block;position:absolute;top:0;right:0;border-right:1px solid #d9d9d9}.es-handler .es-handler-icon{font-size:24px;cursor:pointer;padding:4px;border-radius:4px}.es-handler .es-handler-icon:hover{background-color:#69c0ff}.es-handler .es-handler-date{font-size:14px;padding-right:8px}.es-handler .es-handler-date .es-online-num{font-weight:700;padding:0 7px;cursor:pointer;color:#ffea00}.es-handler .es-handler-user{height:48px}.es-handler .es-handler-user .es-user-img{width:48px;height:48px;float:left}.es-handler .es-handler-user .es-user-info{margin-left:60px}.es-handler .es-handler-user .es-user-job{max-width:140px}.es-popper-sub-system{background-color:#1890ff!important;color:#ffff;min-width:unset}.es-popper-sub-system.is-width{width:346px}.es-popper-sub-system .popper__arrow::after{border-bottom-color:#096dd9!important}.es-sub-system{margin:0}.es-sub-system::after{content:'';display:block;clear:both}.es-sub-system .es-sub-system-item{width:80px;height:80px;padding:10px 4px;float:left;text-align:center;cursor:pointer}.es-sub-system .es-sub-system-item .es-sub-system-icon{font-size:32px;display:block;clear:both;margin-bottom:8px}.es-sub-system .es-sub-system-item .es-sub-system-title{width:100%;height:17px;font-size:13px;line-height:17px;display:block;overflow:hidden}.es-sub-system .es-sub-system-item:hover{background-color:#69c0ff;color:#fff}.es-sub-system .es-sub-system-item.es-disabled{cursor:not-allowed;color:rgba(255,255,255,.3);background-color:transparent}.el-dropdown-menu__item.es-job-active{background-color:#69c0ff;color:#fff}.es-color-picker{padding-left:24px}.es-color-picker .el-color-picker-tip{font-size:12px;color:#f21f06;margin-top:8px}