@cloudbase/weda-ui 3.4.4 → 3.4.6

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 (147) hide show
  1. package/dist/configs/components/chart/bar.json +113 -8
  2. package/dist/configs/components/chart/line.js +113 -8
  3. package/dist/configs/components/chart/pie.json +113 -8
  4. package/dist/configs/components/chart/statisticsCard.json +57 -0
  5. package/dist/configs/components/dataView.js +7 -7
  6. package/dist/configs/components/form/input.json +48 -2
  7. package/dist/configs/components/form/richText.json +2 -1
  8. package/dist/configs/components/form/uploader.json +62 -14
  9. package/dist/configs/components/graphicCard.json +1 -1
  10. package/dist/configs/components/grid/col.js +4 -1
  11. package/dist/configs/components/grid/grid.js +8 -3
  12. package/dist/configs/components/grid/row.js +51 -3
  13. package/dist/configs/components/listView.js +113 -9
  14. package/dist/configs/components/navLayout.json +1 -1
  15. package/dist/configs/components/repeater.js +4 -1
  16. package/dist/configs/components/table.json +125 -9
  17. package/dist/configs/components/wd-bubble.js +6 -0
  18. package/dist/configs/components/wd-button.js +6 -0
  19. package/dist/configs/components/wd-divider.js +7 -18
  20. package/dist/configs/components/wd-icon.js +7 -0
  21. package/dist/configs/components/wd-image.js +7 -0
  22. package/dist/configs/components/wd-link.js +7 -2
  23. package/dist/configs/components/wd-text.js +14 -6
  24. package/dist/configs/index.js +0 -2
  25. package/dist/docs/common/componentList.js +1 -1
  26. package/dist/style/index.scss +1 -1
  27. package/dist/web/actions/showModal/index.js +1 -1
  28. package/dist/web/components/calendar/index.js +2 -2
  29. package/dist/web/components/chart/common/data-transform.js +1 -1
  30. package/dist/web/components/chart/statisticsCard/index.js +1 -1
  31. package/dist/web/components/flow/components/index.js +0 -4
  32. package/dist/web/components/flow/frame/index.js +4 -3
  33. package/dist/web/components/flow/frame/types.js +11 -5
  34. package/dist/web/components/flow/frame/utils.js +60 -1
  35. package/dist/web/components/flow/modules/chart/Chart.js +2 -3
  36. package/dist/web/components/flow/modules/chart/index.css +0 -3
  37. package/dist/web/components/flow/modules/combination/index.js +1 -1
  38. package/dist/web/components/flow/modules/operations/components/button/index.js +11 -0
  39. package/dist/web/components/flow/modules/operations/components/button/style.css +5 -0
  40. package/dist/web/components/flow/modules/operations/components/index.js +6 -0
  41. package/dist/web/components/flow/modules/operations/components/popup/index.js +100 -0
  42. package/dist/web/components/flow/modules/operations/components/popup/style.css +154 -0
  43. package/dist/web/components/flow/modules/operations/components/popup/types.js +1 -0
  44. package/dist/web/components/flow/modules/operations/components/user-select/index.js +43 -0
  45. package/dist/web/components/flow/modules/operations/components/user-select/style.css +4 -0
  46. package/dist/web/components/flow/modules/operations/components/user-select/types.js +1 -0
  47. package/dist/web/components/flow/modules/operations/config/approval-form-config.js +140 -0
  48. package/dist/web/components/flow/modules/operations/config/control-config.js +218 -0
  49. package/dist/web/components/flow/modules/operations/config/index.js +2 -0
  50. package/dist/web/components/flow/modules/operations/config/types.js +1 -0
  51. package/dist/web/components/flow/modules/operations/control.js +26 -0
  52. package/dist/web/components/flow/modules/operations/controls-items/add-assignee-btn.js +33 -0
  53. package/dist/web/components/flow/modules/operations/controls-items/apply-cc-btn.js +12 -0
  54. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/comment/index.js +188 -0
  55. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/comment/style.css +51 -0
  56. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/index.js +64 -0
  57. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/types.js +1 -0
  58. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/drawer-form/view-model.js +83 -0
  59. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/field/index.js +16 -0
  60. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/field/style.css +56 -0
  61. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/index.js +47 -0
  62. package/dist/web/components/flow/modules/operations/controls-items/approval-drawer/style.css +60 -0
  63. package/dist/web/components/flow/modules/operations/controls-items/cancel-apply-btn.js +15 -0
  64. package/dist/web/components/flow/modules/operations/controls-items/check-list-popup/index.js +11 -0
  65. package/dist/web/components/flow/modules/operations/controls-items/check-list-popup/style.css +26 -0
  66. package/dist/web/components/flow/modules/operations/controls-items/flow-task-info-modal.js +98 -0
  67. package/dist/web/components/flow/modules/operations/controls-items/index.js +18 -0
  68. package/dist/web/components/flow/modules/operations/controls-items/initiation-btn.js +25 -0
  69. package/dist/web/components/flow/modules/operations/controls-items/revoke-modal/index.js +50 -0
  70. package/dist/web/components/flow/modules/operations/controls-items/revoke-modal/style.css +28 -0
  71. package/dist/web/components/flow/modules/operations/controls-items/roll-back-modal.js +104 -0
  72. package/dist/web/components/flow/modules/operations/controls-items/types.js +1 -0
  73. package/dist/web/components/flow/modules/operations/index.js +2 -0
  74. package/dist/web/components/flow/modules/operations/style.css +20 -0
  75. package/dist/web/components/flow/modules/operations/view-model.js +137 -0
  76. package/dist/web/components/flow/services/ideData/instance.js +2 -2
  77. package/dist/web/components/flow/services/ideData/pageDetail.js +1 -0
  78. package/dist/web/components/form/select/dropdown-select/h5.js +1 -1
  79. package/dist/web/components/form/select/dropdown-select/index.css +7 -0
  80. package/dist/web/components/form/select/index.js +2 -7
  81. package/dist/web/components/form/textarea/index.js +1 -1
  82. package/dist/web/components/form/uploader/index.css +19 -0
  83. package/dist/web/components/form/uploader/index.js +21 -3
  84. package/dist/web/components/form/uploader/uploader.h5.js +14 -8
  85. package/dist/web/components/form/uploader/uploader.pc.js +29 -16
  86. package/dist/web/components/form/uploaderFile/index.css +9 -5
  87. package/dist/web/components/form/uploaderFile/uploadFile.h5.js +23 -21
  88. package/dist/web/components/form/uploaderFile/uploadFile.pc.js +14 -10
  89. package/dist/web/components/form/userOrgSelect/common/fetch-data-service.js +0 -1
  90. package/dist/web/components/form/userOrgSelect/component/depart-select/index.js +1 -1
  91. package/dist/web/components/form/userOrgSelect/component/user-select-h5/index.js +43 -22
  92. package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-select-h5.js +15 -4
  93. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +2 -2
  94. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-select-pc.js +4 -2
  95. package/dist/web/components/grid/col.js +81 -18
  96. package/dist/web/components/grid/grid.js +1 -1
  97. package/dist/web/components/grid/row.js +4 -2
  98. package/dist/web/components/index.js +1 -1
  99. package/dist/web/components/listView/index.js +98 -100
  100. package/dist/web/components/lottery/index.js +122 -123
  101. package/dist/web/components/richTextView/index.css +2 -0
  102. package/dist/web/components/swiper/index.js +14 -8
  103. package/dist/web/components/table/BaseTable.js +3 -3
  104. package/dist/web/components/table/ExportFileModalByApi/index.js +1 -1
  105. package/dist/web/components/table/ImportFileModal/index.js +1 -1
  106. package/dist/web/components/table/ImportFileModalByApi/index.js +1 -1
  107. package/dist/web/components/wd-bubble/wd-bubble.js +11 -3
  108. package/dist/web/components/wd-button/wd-button.js +22 -13
  109. package/dist/web/components/wd-divider/wd-divider.js +10 -7
  110. package/dist/web/components/wd-icon/wd-icon.js +12 -3
  111. package/dist/web/components/wd-image/index.js +12 -5
  112. package/dist/web/components/wd-link/wd-link.js +11 -3
  113. package/dist/web/components/wd-text/wd-text.js +15 -3
  114. package/dist/web/utils/hooks/use-cloud-id-temp-url.js +7 -2
  115. package/dist/web/utils/platform.js +9 -2
  116. package/dist/web/utils/tool.js +11 -0
  117. package/dist/web/utils/widget-api/index.js +3 -0
  118. package/package.json +7 -5
  119. package/dist/configs/components/auth.json +0 -17
  120. package/dist/web/components/flow/components/FlowUserSelect/index.css +0 -116
  121. package/dist/web/components/flow/components/FlowUserSelect/index.js +0 -115
  122. package/dist/web/components/flow/components/HighlightTextarea/index.css +0 -42
  123. package/dist/web/components/flow/components/HighlightTextarea/index.js +0 -131
  124. package/dist/web/components/flow/components/UserSelectModel/UserSelect.js +0 -74
  125. package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.css +0 -8
  126. package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.js +0 -86
  127. package/dist/web/components/flow/components/UserSelectModel/index.js +0 -18
  128. package/dist/web/components/flow/components/WedaUserTransfer/index.css +0 -3
  129. package/dist/web/components/flow/components/WedaUserTransfer/index.js +0 -162
  130. package/dist/web/components/flow/modules/control/ApprovalDrawer.css +0 -144
  131. package/dist/web/components/flow/modules/control/ApprovalDrawer.js +0 -178
  132. package/dist/web/components/flow/modules/control/ApprovalPopup.css +0 -115
  133. package/dist/web/components/flow/modules/control/ApprovalPopup.js +0 -241
  134. package/dist/web/components/flow/modules/control/Control.css +0 -29
  135. package/dist/web/components/flow/modules/control/Control.js +0 -93
  136. package/dist/web/components/flow/modules/control/ControlMobile.css +0 -69
  137. package/dist/web/components/flow/modules/control/ControlMobile.js +0 -133
  138. package/dist/web/components/flow/modules/control/FlowTaskInfoModal.css +0 -3
  139. package/dist/web/components/flow/modules/control/FlowTaskInfoModal.js +0 -31
  140. package/dist/web/components/flow/modules/control/constants/index.js +0 -35
  141. package/dist/web/components/flow/modules/control/index.js +0 -15
  142. package/dist/web/components/flow/modules/control/provider/index.js +0 -17
  143. package/dist/web/components/flow/modules/control/provider/useControlModel.js +0 -256
  144. package/dist/web/components/flow/modules/control/provider/useMobileModel.js +0 -86
  145. package/dist/web/components/flow/modules/control/provider/useRevokeAndBackHook.js +0 -82
  146. package/dist/web/components/flow/modules/control/utils/ControlModelUtils.js +0 -57
  147. package/dist/web/components/flow/modules/control/utils/index.js +0 -2
@@ -1,115 +0,0 @@
1
- .cp-vant-popup {
2
- z-index: 998 !important;
3
- }
4
- .cp-vant-popup h3.popup-title {
5
- padding: 20px 24px 12px;
6
- }
7
- .cp-vant-popup .rv-cell {
8
- padding: 12px 24px;
9
- }
10
- .cp-vant-popup .rv-field + .rv-field {
11
- margin-top: 12px;
12
- }
13
- .cp-vant-popup .rv-field__control {
14
- color: #000;
15
- }
16
- .cp-vant-popup .rv-cell:not(:last-child)::after {
17
- left: 24px;
18
- right: 24px;
19
- border-bottom: 1px solid #dcdee6;
20
- }
21
- .cp-vant-popup .apa-height-xl.wedatea2td-btn.success-btn {
22
- padding: 0;
23
- height: 40px;
24
- line-height: 40px;
25
- min-width: 152px;
26
- position: absolute;
27
- bottom: 30px;
28
- left: 20px;
29
- right: 20px;
30
- width: calc(100% - 48px);
31
- }
32
- .cp-vant-popup .popup-content-wrapper {
33
- height: calc(100% - 90px);
34
- overflow: auto;
35
- }
36
- .cp-vant-popup h3.popup-title {
37
- padding: 20px;
38
- padding-bottom: 10px;
39
- font-size: 14px;
40
- }
41
- .cp-vant-popup .rv-cell {
42
- padding-left: 20px;
43
- }
44
- .cp-vant-popup .upload-cell_wrapper .pant-cell__title {
45
- display: flex;
46
- justify-content: space-between;
47
- }
48
- .cp-vant-popup .label-execute__btn .rv-cell__value .rv-field__control-wrapper {
49
- margin-right: 12px;
50
- justify-content: flex-end;
51
- color: #2473f2;
52
- }
53
- .cp-vant-popup
54
- .label-execute__btn
55
- .rv-cell__value
56
- .rv-field__control-wrapper
57
- .rv-field__children {
58
- justify-content: flex-end;
59
- }
60
- .cp-vant-popup .label-execute__btn .btn-show-modal {
61
- display: flex;
62
- align-items: center;
63
- }
64
- .cp-vant-popup .label-execute__btn .apa-icon {
65
- width: 16px;
66
- height: 16px;
67
- display: inline-block;
68
- vertical-align: middle;
69
- background-repeat: no-repeat;
70
- background-position: inherit;
71
- font-size: 0;
72
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU4ICg4NDY2MykgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+55S75p2/PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IueUu+advyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IuWbvuaghy/mt7vliqAiPgogICAgICAgICAgICA8ZyBpZD0i57yW57uEIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDIuNSBDOC4yNzYxNDIzNywyLjUgOC41LDIuNzIzODU3NjMgOC41LDMgTDguNSw3LjUgTDEzLDcuNSBDMTMuMjc2MTQyNCw3LjUgMTMuNSw3LjcyMzg1NzYzIDEzLjUsOCBDMTMuNSw4LjI3NjE0MjM3IDEzLjI3NjE0MjQsOC41IDEzLDguNSBMOC41LDguNSBMOC41LDEzIEM4LjUsMTMuMjc2MTQyNCA4LjI3NjE0MjM3LDEzLjUgOCwxMy41IEM3LjcyMzg1NzYzLDEzLjUgNy41LDEzLjI3NjE0MjQgNy41LDEzIEw3LjUsOC41IEwzLDguNSBDMi43MjM4NTc2Myw4LjUgMi41LDguMjc2MTQyMzcgMi41LDggQzIuNSw3LjcyMzg1NzYzIDIuNzIzODU3NjMsNy41IDMsNy41IEw3LjUsNy41IEw3LjUsMyBDNy41LDIuNzIzODU3NjMgNy43MjM4NTc2MywyLjUgOCwyLjUgWiIgaWQ9IuW9oueKtue7k+WQiCIgZmlsbD0iIzI0NzNGMiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgeD0iMCIgeT0iMCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48L3JlY3Q+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);
73
- }
74
- .pant-popup .success-btn {
75
- position: absolute;
76
- bottom: 30px;
77
- left: 20px;
78
- right: 20px;
79
- width: calc(100% - 48px);
80
- }
81
- .highlightTextarea-cell_wrapper .rv-cell__title {
82
- width: 100%;
83
- }
84
- .highlightTextarea-cell_wrapper
85
- .highlightTextarea-mobile__wrapper
86
- .highlight-textarea {
87
- border: none;
88
- color: #000;
89
- margin-top: 5px;
90
- }
91
- .highlightTextarea-cell_wrapper .highlightTextarea-mobile__wrapper .extra-dom {
92
- position: absolute;
93
- right: 40px;
94
- top: 14px;
95
- color: #006eff;
96
- cursor: pointer;
97
- }
98
- .highlightTextarea-cell_wrapper .rv-cell__value {
99
- display: none;
100
- }
101
- .rv-popup .person-item {
102
- display: flex;
103
- justify-content: space-between;
104
- font-size: 12px;
105
- background: rgba(220, 222, 230, 0.4);
106
- padding: 4px 8px;
107
- line-height: 20px;
108
- margin: 0 24px;
109
- }
110
- .rv-popup .person-item .tea-icon {
111
- margin-top: 4px;
112
- }
113
- .rv-popup .person-item + .person-item {
114
- margin-top: 4px;
115
- }
@@ -1,241 +0,0 @@
1
- import React, { useState, useEffect, useRef } from 'react';
2
- import { Icon, Button } from 'tea-component';
3
- import { Popup, Field } from 'react-vant';
4
- import { HighlightTextarea } from '../../components';
5
- import { useControlContext } from './provider';
6
- import { ACTION_TYPE } from './constants';
7
- import './ApprovalPopup.css';
8
- const ExtraDOM = (props) => {
9
- const { type, statusMessage, setStatusMessage, operationName, opinionUserMap, setOpinionUserMap, setHighlightPositionMap, prevFn, onUserSelectModelVisibleChange, onUserSelectModalInfoChange, safeJsonParse, userSelectModelVisible, setApproveComment, } = props;
10
- const [approveInfo, setApproveInfo] = useState('');
11
- useEffect(() => {
12
- if (!userSelectModelVisible) {
13
- const popupData = sessionStorage.getItem('FlowActionsMobile');
14
- if (popupData) {
15
- const { approveInfo: localApproveInfo } = safeJsonParse(popupData);
16
- setApproveInfo(localApproveInfo);
17
- }
18
- }
19
- }, [userSelectModelVisible]);
20
- const toSelectPerson = () => {
21
- prevFn === null || prevFn === void 0 ? void 0 : prevFn(approveInfo);
22
- onUserSelectModelVisibleChange();
23
- onUserSelectModalInfoChange({
24
- approveField: 'highLightApprovers',
25
- mode: 'multiple',
26
- });
27
- };
28
- const approveInfoLabel = type === 'handle' ? `${operationName}意见` : '审批意见';
29
- return (React.createElement(React.Fragment, null,
30
- React.createElement(Field, { className: "highlightTextarea-cell_wrapper", label: React.createElement("div", { className: "highlightTextarea-mobile__wrapper" },
31
- React.createElement("span", { className: "label" },
32
- type === 'reject' && React.createElement("span", { style: { color: '#ee0a24' } }, "*"),
33
- approveInfoLabel),
34
- React.createElement("span", { onClick: toSelectPerson, className: "extra-dom" }, "@\u67D0\u4EBA"),
35
- React.createElement(HighlightTextarea, { value: approveInfo || '', size: "mobile", placeholder: `请输入您的${approveInfoLabel},可@通知他人`, opinionUserMap: opinionUserMap, setOpinionUserMap: setOpinionUserMap, setHighlightPositionMap: setHighlightPositionMap, onChange: (value) => {
36
- setApproveComment(value);
37
- setApproveInfo(value);
38
- setStatusMessage(null);
39
- if (type === 'reject' && !value.trim()) {
40
- setStatusMessage(`请输入${approveInfoLabel}`);
41
- }
42
- if (value.length > 500) {
43
- setStatusMessage(`${approveInfoLabel}长度不可超过500,请检查`);
44
- }
45
- } }),
46
- statusMessage && (React.createElement("div", { className: "pant-field__error-message" }, statusMessage))), placeholder: "" })));
47
- };
48
- const ApprovePerson = (props) => {
49
- const { label, onChange, approvers, prevFn, type, approveField = 'approvers', onUserSelectModelVisibleChange, onUserSelectModalInfoChange, safeJsonParse, } = props;
50
- const getUserMap = () => {
51
- var _a;
52
- return (_a = safeJsonParse(sessionStorage.getItem('approvers'))) === null || _a === void 0 ? void 0 : _a.reduce((p, c) => {
53
- // eslint-disable-next-line no-param-reassign
54
- p[c === null || c === void 0 ? void 0 : c.UserId] = c === null || c === void 0 ? void 0 : c.Name;
55
- return p;
56
- }, {});
57
- };
58
- const toSelectPerson = () => {
59
- prevFn === null || prevFn === void 0 ? void 0 : prevFn();
60
- onUserSelectModelVisibleChange();
61
- onUserSelectModalInfoChange({
62
- approveField,
63
- mode: [ACTION_TYPE.AGREE, ACTION_TYPE.TRANSFER].includes(type)
64
- ? 'multiple'
65
- : 'single',
66
- });
67
- };
68
- const removeItem = (index) => {
69
- const approversAvatar = approvers.filter((item, idx) => idx !== index);
70
- onChange(approversAvatar);
71
- };
72
- return (React.createElement(React.Fragment, null,
73
- React.createElement(Field, { label: React.createElement(React.Fragment, null,
74
- React.createElement("span", { className: "label" }, label)), className: "label-execute__btn", name: "approvers", placeholder: "" },
75
- React.createElement("span", { className: "btn-show-modal", onClick: toSelectPerson },
76
- React.createElement("i", { className: "apa-icon apa-icon-plus-blue" }),
77
- "\u4EBA\u5458")),
78
- (approvers === null || approvers === void 0 ? void 0 : approvers.length) > 0
79
- ? approvers === null || approvers === void 0 ? void 0 : approvers.map((item, index) => {
80
- var _a;
81
- return (React.createElement("div", { className: "person-item", key: `person-item_${index}` },
82
- React.createElement("span", null, ((_a = getUserMap()) === null || _a === void 0 ? void 0 : _a[item]) || item),
83
- React.createElement(Icon, { type: "dismiss", onClick: () => removeItem(index) })));
84
- })
85
- : null));
86
- };
87
- export const ApprovalPopup = (props) => {
88
- var _a, _b, _c;
89
- const { pageInfo, flowDetail, safeJsonParse } = props;
90
- const { handleType, approveDrawerVisible, submitLoading, approver, approvers, fileList, opinionUserMap, highlightPositionMap, userSelectModelVisible, setFileList, setApprovers, setApprover, setOpinionUserMap, setHighlightPositionMap, onApproveDrawerVisibleChange, onUserSelectModelVisibleChange, onUserSelectModalInfoChange, onTriggerFlowEvent, } = useControlContext();
91
- const { startAppCode: appCode, currentNodeName: nodeName, operationName, currentApproverName, } = flowDetail || {};
92
- const { buttons, showCarbonCopy } = pageInfo || {};
93
- const [statusMessage, setStatusMessage] = useState('');
94
- const approveInfoRef = useRef('');
95
- const stateMap = {
96
- fileList: {
97
- default: [],
98
- fn: setFileList,
99
- },
100
- approvers: {
101
- default: [],
102
- fn: setApprovers,
103
- },
104
- approver: {
105
- default: '',
106
- fn: setApprover,
107
- },
108
- statusMessage: {
109
- default: '',
110
- fn: setStatusMessage,
111
- },
112
- };
113
- const approvalType = {
114
- agree: {
115
- title: `${(buttons === null || buttons === void 0 ? void 0 : buttons[1]) || '同意'}`,
116
- dom: true,
117
- personLabel: '抄送',
118
- },
119
- reject: {
120
- title: `${(buttons === null || buttons === void 0 ? void 0 : buttons[2]) || '拒绝'}`,
121
- dom: true,
122
- personLabel: '抄送',
123
- },
124
- transfer: {
125
- title: '转办',
126
- dom: false,
127
- personLabel: '转办',
128
- },
129
- handle: {
130
- title: '处理',
131
- dom: true,
132
- personLabel: '抄送',
133
- },
134
- };
135
- useEffect(() => {
136
- if (!approveDrawerVisible) {
137
- // resetValue?.();
138
- Object.values(stateMap).forEach(({ default: defaultValue, fn }) => fn(defaultValue));
139
- }
140
- else if (!approver) {
141
- if (!props.approver) {
142
- // postUserInfo().then((res) => {
143
- // if (res?.data) {
144
- // setApprover(res?.data?.name);
145
- // }
146
- // });
147
- }
148
- else {
149
- Object.entries(stateMap).forEach(([key, value]) => value.fn(props[key]));
150
- }
151
- }
152
- }, [approveDrawerVisible]);
153
- useEffect(() => {
154
- setApprovers(props.approvers);
155
- }, [props.approvers]);
156
- useEffect(() => {
157
- setFileList(props.fileList);
158
- }, [props.fileList]);
159
- useEffect(() => {
160
- var _a;
161
- setOpinionUserMap((_a = props.opinionUserMap) !== null && _a !== void 0 ? _a : {});
162
- }, [props.opinionUserMap]);
163
- useEffect(() => {
164
- var _a;
165
- setHighlightPositionMap((_a = props.highlightPositionMap) !== null && _a !== void 0 ? _a : {});
166
- }, [props.highlightPositionMap]);
167
- const onChange = (key, value) => {
168
- stateMap[key].fn(value);
169
- };
170
- const handleSubmit = () => {
171
- var _a;
172
- const obj = {
173
- operationComment: approveInfoRef.current || '',
174
- opinionUserMap,
175
- highlightPositionList: JSON.stringify(highlightPositionMap),
176
- attachmentInfo: JSON.stringify(fileList),
177
- ccUserIds: approvers === null || approvers === void 0 ? void 0 : approvers.map((item) => item.value).join(','),
178
- turnToUserId: (_a = approvers === null || approvers === void 0 ? void 0 : approvers[0]) === null || _a === void 0 ? void 0 : _a.value,
179
- };
180
- switch (handleType) {
181
- case 'agree':
182
- Reflect.deleteProperty(obj, 'turnToUserId');
183
- break;
184
- case 'reject':
185
- Reflect.deleteProperty(obj, 'ccUserIds');
186
- Reflect.deleteProperty(obj, 'turnToUserId');
187
- break;
188
- case 'transfer':
189
- Reflect.deleteProperty(obj, 'ccUserIds');
190
- break;
191
- }
192
- onTriggerFlowEvent(obj);
193
- };
194
- const dynamiticHeight = handleType === 'transfer' ? '500px' : '540px';
195
- const saveTemp = (approveInfo) => {
196
- approveInfoRef.current = approveInfo;
197
- const temp = {
198
- fileList,
199
- approveInfo,
200
- opinionUserMap,
201
- highlightPositionMap,
202
- approvers,
203
- handleType,
204
- approveDrawerVisible,
205
- appCode,
206
- // addApprovers,
207
- // tagType,
208
- // addTag,
209
- nodeName,
210
- approver,
211
- };
212
- sessionStorage.setItem('FlowActionsMobile', JSON.stringify(temp));
213
- };
214
- const setApproveComment = (value) => {
215
- approveInfoRef.current = value;
216
- };
217
- return (React.createElement(React.Fragment, null,
218
- React.createElement(Popup, { visible: approveDrawerVisible, position: "bottom", style: { height: dynamiticHeight }, onClose: onApproveDrawerVisibleChange, closeable: true, className: "cp-vant-popup", overlayStyle: { zIndex: 998 } },
219
- React.createElement(React.Fragment, null,
220
- React.createElement("div", { className: "popup-content-wrapper" },
221
- React.createElement("h3", { className: "popup-title" }, handleType === 'handle'
222
- ? `${operationName}意见`
223
- : `审批意见 - ${(_a = approvalType === null || approvalType === void 0 ? void 0 : approvalType[handleType]) === null || _a === void 0 ? void 0 : _a.title}`),
224
- React.createElement(Field, { value: nodeName, label: "\u5F53\u524D\u8282\u70B9", readOnly: true }),
225
- React.createElement(Field, { value: currentApproverName || '-', label: handleType === 'handle' ? '处理人' : '审批人', readOnly: true }),
226
- ((_b = approvalType === null || approvalType === void 0 ? void 0 : approvalType[handleType]) === null || _b === void 0 ? void 0 : _b.dom) && approveDrawerVisible ? (React.createElement(ExtraDOM, { type: handleType, appCode: appCode, onChange: onChange, fileList: fileList, operationName: operationName, statusMessage: statusMessage, setStatusMessage: setStatusMessage, opinionUserMap: opinionUserMap, setOpinionUserMap: setOpinionUserMap, setHighlightPositionMap: setHighlightPositionMap, prevFn: saveTemp, onUserSelectModelVisibleChange: onUserSelectModelVisibleChange, onUserSelectModalInfoChange: onUserSelectModalInfoChange, safeJsonParse: safeJsonParse, userSelectModelVisible: userSelectModelVisible, setApproveComment: setApproveComment })) : null,
227
- handleType !== 'reject' &&
228
- (showCarbonCopy || handleType === 'transfer') ? (React.createElement(ApprovePerson, { type: handleType, prevFn: saveTemp, approvers: approvers, label: (_c = approvalType === null || approvalType === void 0 ? void 0 : approvalType[handleType]) === null || _c === void 0 ? void 0 : _c.personLabel, onChange: (val) => onChange('approvers', val), onUserSelectModelVisibleChange: onUserSelectModelVisibleChange, onUserSelectModalInfoChange: onUserSelectModalInfoChange, safeJsonParse: safeJsonParse })) : null),
229
- React.createElement(Button, { className: "success-btn apa-height-xl", type: "primary", loading: submitLoading, onClick: () => {
230
- var _a;
231
- if (handleType === 'reject' && !approveInfoRef.current.trim()) {
232
- setStatusMessage('请输入审批意见');
233
- return;
234
- }
235
- if (((_a = approveInfoRef.current) === null || _a === void 0 ? void 0 : _a.length) > 500) {
236
- setStatusMessage('审批意见长度不可超过500,请检查');
237
- return;
238
- }
239
- handleSubmit();
240
- } }, "\u63D0\u4EA4")))));
241
- };
@@ -1,29 +0,0 @@
1
- .page-process__progress__app-page {
2
- height: auto;
3
- }
4
- .mf-progress-footer__app-page {
5
- left: 233px;
6
- }
7
- .page-process__progress .mf-progress-footer {
8
- overflow-x: auto;
9
- background: #fff;
10
- text-align: center;
11
- padding: 20px;
12
- }
13
- .page-process__progress .mf-progress-footer .mf-progress-footer__btn-line {
14
- position: relative;
15
- margin-left: 24px;
16
- }
17
- .page-process__progress
18
- .mf-progress-footer
19
- .mf-progress-footer__btn-line:before {
20
- border-left: 1px solid rgba(0, 0, 0, 0.25);
21
- height: 30px;
22
- content: '';
23
- position: absolute;
24
- top: 3px;
25
- left: -13px;
26
- }
27
- .mf-progress-footer__btn-group {
28
- display: inline-flex;
29
- }
@@ -1,93 +0,0 @@
1
- import React from 'react';
2
- import { Button, Modal, Form, Select } from 'tea-component';
3
- import classNames from '../../../../utils/classnames';
4
- import { UserSelectModel } from '../../components';
5
- import { useControlContext } from './provider';
6
- import { ACTION_TYPE } from './constants';
7
- import { ApprovalDrawer } from './ApprovalDrawer';
8
- import { FlowTaskInfoModal } from './FlowTaskInfoModal';
9
- import './Control.css';
10
- export const FlowControl = (props) => {
11
- const { commonFlowData, flowLocalProps, ide } = props;
12
- const { flowDetail, pageInfo } = commonFlowData;
13
- const { isWedaIde, currentPageType } = flowLocalProps;
14
- const {
15
- // ControlModel
16
- userModalVisible, submitApplyLoading, ccUserModelVisible, ccUsers, ifSubmitAndCc, hasGoBack, setCcUsers, setCcUserModelVisible, onControlChick, setUserModalVisible, onUserModalVisibleChange, onAddCounterSign, onBackFlowCenter,
17
- // RevokeModel
18
- showRevokeModal, showBackModal, backNodeList, backNode, setShowRevokeModal, doneRevokeFn, doneBackFn, setShowBackModal, getNodeList, setBackNode, } = useControlContext();
19
- const onClickGoBack = async () => {
20
- await getNodeList();
21
- setShowBackModal(true);
22
- };
23
- const footerClassNames = classNames('mf-progress-footer', {
24
- 'mf-progress-footer__app-page': !isWedaIde,
25
- });
26
- const containerClassNames = classNames('page-process__progress', {
27
- 'page-process__progress__app-page': !isWedaIde,
28
- });
29
- const renderButtonGroup = () => {
30
- var _a, _b;
31
- if (hasGoBack)
32
- return null;
33
- if (['CREATE', 'DONE'].includes(currentPageType) && (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.showRevoke)) {
34
- return (React.createElement("div", { className: footerClassNames },
35
- React.createElement(Button, { type: "weak", onClick: () => setShowRevokeModal(true) }, "\u64A4\u9500")));
36
- }
37
- if (['DRAFT', 'CREATEFLOW', 'TODO'].includes(currentPageType) &&
38
- (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.show)) {
39
- if (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.showSubmitApp) {
40
- return (React.createElement("div", { className: footerClassNames },
41
- React.createElement(ButtonLayout, { gap: 10 },
42
- ifSubmitAndCc ? (React.createElement(Button, { type: "link", onClick: () => setCcUserModelVisible(true) },
43
- "+\u6284\u9001\u4EBA(",
44
- ccUsers.length || 0,
45
- ")")) : null,
46
- React.createElement(Button, { type: "primary", loading: submitApplyLoading, onClick: (e) => onControlChick(ACTION_TYPE.SUBMIT, e) }, ((_a = pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.buttons) === null || _a === void 0 ? void 0 : _a[3]) || '提交申请'),
47
- (flowDetail === null || flowDetail === void 0 ? void 0 : flowDetail.canDelete) && (React.createElement(React.Fragment, null,
48
- React.createElement(Button, { type: "weak", onClick: (e) => onControlChick(ACTION_TYPE.SAVE_DRAFT, e) }, "\u4FDD\u5B58\u8349\u7A3F"),
49
- React.createElement(Button, { type: "weak", onClick: onBackFlowCenter }, "\u53D6\u6D88"))))));
50
- }
51
- return (React.createElement("div", { className: footerClassNames },
52
- React.createElement(ButtonLayout, null,
53
- (flowDetail === null || flowDetail === void 0 ? void 0 : flowDetail.userTaskType) === 2 ? (React.createElement(Button, { type: "primary", onClick: (e) => onControlChick(ACTION_TYPE.HANDLE, e) }, flowDetail === null || flowDetail === void 0 ? void 0 : flowDetail.operationName)) : (React.createElement(ButtonLayout, { gap: 10 },
54
- React.createElement(Button, { type: "primary", onClick: (e) => onControlChick(ACTION_TYPE.AGREE, e) }, (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.buttons) ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.buttons[1] : '同意'),
55
- React.createElement(Button, { type: "weak", onClick: (e) => onControlChick(ACTION_TYPE.REJECT, e) }, (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.buttons) ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.buttons[2] : '拒绝'))),
56
- (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.showTurnToPerson) ? (React.createElement(Button, { type: "weak", className: "mf-progress-footer__btn-line", onClick: (e) => onControlChick(ACTION_TYPE.TRANSFER, e) }, "\u8F6C\u529E")) : null,
57
- (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.showRollBack) && (React.createElement(Button, { type: "weak", className: "mf-progress-footer__btn-line", onClick: onClickGoBack }, "\u56DE\u9000")),
58
- (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.showAddAssignee) && (React.createElement(Button, { type: "weak", className: "mf-progress-footer__btn-line", onClick: onUserModalVisibleChange }, "\u52A0\u7B7E")))));
59
- }
60
- if (['DRAFT', 'CREATEFLOW'].includes(currentPageType)) {
61
- return (React.createElement("div", { className: footerClassNames },
62
- React.createElement(Button, { type: "primary", loading: submitApplyLoading, onClick: (e) => onControlChick(ACTION_TYPE.SUBMIT, e) }, ((_b = pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.buttons) === null || _b === void 0 ? void 0 : _b[3]) || '提交申请'),
63
- React.createElement(Button, { type: "weak", onClick: (e) => onControlChick(ACTION_TYPE.SAVE_DRAFT, e) }, "\u4FDD\u5B58\u8349\u7A3F"),
64
- React.createElement(Button, { type: "weak", onClick: onBackFlowCenter }, "\u53D6\u6D88")));
65
- }
66
- return null;
67
- };
68
- return (
69
- // eslint-disable-next-line react/jsx-props-no-spreading
70
- React.createElement("div", { ...ide },
71
- React.createElement("div", { className: containerClassNames },
72
- renderButtonGroup(),
73
- React.createElement(Modal, { visible: showBackModal, caption: '流程回退', onClose: () => setShowBackModal(false) },
74
- React.createElement(Modal.Body, null,
75
- React.createElement(Form, null,
76
- React.createElement(Form.Item, { label: '选择回退节点' },
77
- React.createElement(Select, { size: "full", appearance: "button", matchButtonWidth: true, options: backNodeList, value: backNode, onChange: (value) => setBackNode(value) })))),
78
- React.createElement(Modal.Footer, null,
79
- React.createElement(Button, { type: "primary", disabled: (backNodeList === null || backNodeList === void 0 ? void 0 : backNodeList.length) === 0, onClick: () => doneBackFn() }, "\u786E\u5B9A"),
80
- React.createElement(Button, { type: "weak", onClick: () => setShowBackModal(false) }, "\u53D6\u6D88"))),
81
- React.createElement(Modal, { visible: showRevokeModal, caption: '撤销流程提醒', onClose: () => setShowRevokeModal(false) },
82
- React.createElement(Modal.Body, null, '流程正在进行中,确认撤销此流程?'),
83
- React.createElement(Modal.Footer, null,
84
- React.createElement(Button, { type: "primary", onClick: doneRevokeFn }, "\u786E\u5B9A"),
85
- React.createElement(Button, { type: "weak", onClick: () => setShowRevokeModal(false) }, "\u53D6\u6D88"))),
86
- React.createElement(UserSelectModel, { visible: userModalVisible, onChange: (val) => val.length && onAddCounterSign(val), onClose: () => setUserModalVisible(false) }),
87
- React.createElement(UserSelectModel, { value: ccUsers, visible: ccUserModelVisible, onChange: (val) => val.length && setCcUsers(val), onClose: () => setCcUserModelVisible(false) }),
88
- React.createElement(FlowTaskInfoModal, null),
89
- React.createElement(ApprovalDrawer, { pageInfo: pageInfo, flowDetail: flowDetail }))));
90
- };
91
- export const ButtonLayout = ({ children, gap }) => {
92
- return (React.createElement("div", { className: "mf-progress-footer__btn-group", style: { gap: gap || 0 } }, children));
93
- };
@@ -1,69 +0,0 @@
1
- .mf-progress-mb--footer {
2
- background: #fff;
3
- padding: 20px 0;
4
- text-align: center;
5
- width: 100%;
6
- }
7
- .approval-progress__more--dialog .wedatea2td-dialog__inner {
8
- width: 100%;
9
- padding: 0;
10
- vertical-align: bottom;
11
- min-width: 100%;
12
- border-radius: 0px;
13
- }
14
- @media (max-width: 1024px) {
15
- .approval-progress__more--dialog .wedatea2td-dialog__inner {
16
- margin: 0;
17
- }
18
- }
19
- .flow-popup {
20
- display: flex;
21
- max-height: 400px;
22
- flex-direction: column;
23
- }
24
- .flow-popup-title {
25
- height: 40px;
26
- display: flex;
27
- flex-shrink: 0;
28
- justify-content: space-between;
29
- align-items: center;
30
- font-size: 16px;
31
- font-weight: 400;
32
- padding: 0 20px;
33
- border-bottom: 1px solid #dcdee6;
34
- }
35
- .flow-popup-title .left {
36
- color: #666;
37
- }
38
- .flow-popup-title .center {
39
- font-size: 14px;
40
- color: #666;
41
- }
42
- .flow-popup-title .right {
43
- color: #006eff;
44
- }
45
- .flow-popup_mb-group-list {
46
- display: flex;
47
- align-items: center;
48
- }
49
- .flow-popup_mb-group-list span {
50
- flex: 1;
51
- white-space: nowrap;
52
- overflow: hidden;
53
- text-overflow: ellipsis;
54
- }
55
- .flow-popup_mb-group-list .apa-icon {
56
- width: 16px;
57
- height: 16px;
58
- display: inline-block;
59
- vertical-align: middle;
60
- background-repeat: no-repeat;
61
- background-position: inherit;
62
- font-size: 0;
63
- }
64
- .flow-popup_mb-group-list .apa-icon-star-fill-active {
65
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU4ICg4NDY2MykgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+55S75p2/PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IueUu+advyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Iue8lue7hCI+CiAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PC9yZWN0PgogICAgICAgICAgICA8cGF0aCBkPSJNOC40NDgzNjgwNCwxLjcwODQ5Mjg4IEwxMC4zNTExNDEsNS41NjM5MzIwMiBMMTAuMzUxMTQxLDUuNTYzOTMyMDIgTDE0LjYwNTg3MDcsNi4xODIxODA0NCBDMTQuODc5MTQzMSw2LjIyMTg4OTI1IDE1LjA2ODQ4MzksNi40NzU2MTA2NyAxNS4wMjg3NzUxLDYuNzQ4ODgzMSBDMTUuMDEyOTYyOCw2Ljg1NzcwMTYyIDE0Ljk2MTcxOTIsNi45NTgyNzI4MiAxNC44ODI5Nzc0LDcuMDM1MDI3MTMgTDExLjgwNDIyNjEsMTAuMDM2MDY4IEwxMS44MDQyMjYxLDEwLjAzNjA2OCBMMTIuNTMxMDIwNywxNC4yNzM2MDU3IEMxMi41Nzc3MDEyLDE0LjU0NTc3MzkgMTIuMzk0OTA3MywxNC44MDQyNTE4IDEyLjEyMjczOSwxNC44NTA5MzI0IEMxMi4wMTQzNjAyLDE0Ljg2OTUyMDggMTEuOTAyODc2MiwxNC44NTE4NjM0IDExLjgwNTU0NTksMTQuODAwNjkzOSBMOCwxMi44IEw4LDEyLjggTDQuMTk0NDU0MDYsMTQuODAwNjkzOSBDMy45NTAwMzE3NywxNC45MjkxOTQzIDMuNjQ3NzE4MTksMTQuODM1MjIxIDMuNTE5MjE3NzgsMTQuNTkwNzk4OCBDMy40NjgwNDgyNSwxNC40OTM0Njg1IDMuNDUwMzkwOTEsMTQuMzgxOTg0NSAzLjQ2ODk3OTMzLDE0LjI3MzYwNTcgTDQuMTk1NzczOTMsMTAuMDM2MDY4IEw0LjE5NTc3MzkzLDEwLjAzNjA2OCBMMS4xMTcwMjI2LDcuMDM1MDI3MTMgQzAuOTE5MjgwODA2LDYuODQyMjc2NTIgMC45MTUyMzQ2NTMsNi41MjU3MTk4OSAxLjEwNzk4NTI2LDYuMzI3OTc4MSBDMS4xODQ3Mzk1Niw2LjI0OTIzNjI4IDEuMjg1MzEwNzcsNi4xOTc5OTI2OSAxLjM5NDEyOTI4LDYuMTgyMTgwNDQgTDUuNjQ4ODU4OTksNS41NjM5MzIwMiBMNS42NDg4NTg5OSw1LjU2MzkzMjAyIEw3LjU1MTYzMTk2LDEuNzA4NDkyODggQzcuNjczODQzMTEsMS40NjA4NjYwNSA3Ljk3MzY1NjAzLDEuMzU5MTk2NTUgOC4yMjEyODI4NiwxLjQ4MTQwNzY5IEM4LjMxOTg4OTE2LDEuNTMwMDcyODEgOC4zOTk3MDI5MiwxLjYwOTg4NjU3IDguNDQ4MzY4MDQsMS43MDg0OTI4OCBaIiBpZD0i5pif5b2iIiBmaWxsPSIjRjRDMDBDIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);
66
- }
67
- .flow-popup_mb-group-list .apa-icon-star-fill {
68
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU4ICg4NDY2MykgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+55S75p2/PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IueUu+advyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Iue8lue7hCI+CiAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PC9yZWN0PgogICAgICAgICAgICA8cGF0aCBkPSJNOC40NDgzNjgwNCwxLjcwODQ5Mjg4IEwxMC4zNTExNDEsNS41NjM5MzIwMiBMMTAuMzUxMTQxLDUuNTYzOTMyMDIgTDE0LjYwNTg3MDcsNi4xODIxODA0NCBDMTQuODc5MTQzMSw2LjIyMTg4OTI1IDE1LjA2ODQ4MzksNi40NzU2MTA2NyAxNS4wMjg3NzUxLDYuNzQ4ODgzMSBDMTUuMDEyOTYyOCw2Ljg1NzcwMTYyIDE0Ljk2MTcxOTIsNi45NTgyNzI4MiAxNC44ODI5Nzc0LDcuMDM1MDI3MTMgTDExLjgwNDIyNjEsMTAuMDM2MDY4IEwxMS44MDQyMjYxLDEwLjAzNjA2OCBMMTIuNTMxMDIwNywxNC4yNzM2MDU3IEMxMi41Nzc3MDEyLDE0LjU0NTc3MzkgMTIuMzk0OTA3MywxNC44MDQyNTE4IDEyLjEyMjczOSwxNC44NTA5MzI0IEMxMi4wMTQzNjAyLDE0Ljg2OTUyMDggMTEuOTAyODc2MiwxNC44NTE4NjM0IDExLjgwNTU0NTksMTQuODAwNjkzOSBMOCwxMi44IEw4LDEyLjggTDQuMTk0NDU0MDYsMTQuODAwNjkzOSBDMy45NTAwMzE3NywxNC45MjkxOTQzIDMuNjQ3NzE4MTksMTQuODM1MjIxIDMuNTE5MjE3NzgsMTQuNTkwNzk4OCBDMy40NjgwNDgyNSwxNC40OTM0Njg1IDMuNDUwMzkwOTEsMTQuMzgxOTg0NSAzLjQ2ODk3OTMzLDE0LjI3MzYwNTcgTDQuMTk1NzczOTMsMTAuMDM2MDY4IEw0LjE5NTc3MzkzLDEwLjAzNjA2OCBMMS4xMTcwMjI2LDcuMDM1MDI3MTMgQzAuOTE5MjgwODA2LDYuODQyMjc2NTIgMC45MTUyMzQ2NTMsNi41MjU3MTk4OSAxLjEwNzk4NTI2LDYuMzI3OTc4MSBDMS4xODQ3Mzk1Niw2LjI0OTIzNjI4IDEuMjg1MzEwNzcsNi4xOTc5OTI2OSAxLjM5NDEyOTI4LDYuMTgyMTgwNDQgTDUuNjQ4ODU4OTksNS41NjM5MzIwMiBMNS42NDg4NTg5OSw1LjU2MzkzMjAyIEw3LjU1MTYzMTk2LDEuNzA4NDkyODggQzcuNjczODQzMTEsMS40NjA4NjYwNSA3Ljk3MzY1NjAzLDEuMzU5MTk2NTUgOC4yMjEyODI4NiwxLjQ4MTQwNzY5IEM4LjMxOTg4OTE2LDEuNTMwMDcyODEgOC4zOTk3MDI5MiwxLjYwOTg4NjU3IDguNDQ4MzY4MDQsMS43MDg0OTI4OCBaIiBpZD0i5pif5b2iIiBmaWxsPSIjQTJBQ0JEIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);
69
- }