ocpview-plus 1.3.15 → 1.3.17

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 (213) hide show
  1. package/README.md +55 -43
  2. package/dist/ocpviewplus.min.esm.js +574 -482
  3. package/dist/ocpviewplus.min.js +9 -9
  4. package/dist/style.css +1 -1
  5. package/dist/styles/efviewplus.css +1 -1
  6. package/package.json +146 -146
  7. package/src/components/base/ContractPrintMixins.js +30 -30
  8. package/src/components/base/controlbase.vue +190 -190
  9. package/src/components/base/controlbox.vue +102 -102
  10. package/src/components/base/index.js +2 -2
  11. package/src/components/base/load.js +19 -19
  12. package/src/components/base/probase.js +220 -220
  13. package/src/components/base/size.js +78 -78
  14. package/src/components/billbox/billbox.vue +67 -67
  15. package/src/components/billbox/index.js +1 -1
  16. package/src/components/cascaderbox/cascaderbox.vue +184 -184
  17. package/src/components/cascaderbox/index.js +2 -2
  18. package/src/components/checkbox/checkbox.vue +75 -75
  19. package/src/components/checkbox/checkgroupbox.vue +103 -103
  20. package/src/components/checkbox/index.js +2 -2
  21. package/src/components/colorbox/colorbox.vue +43 -43
  22. package/src/components/colorbox/index.js +1 -1
  23. package/src/components/combobox/combobox.vue +219 -219
  24. package/src/components/combobox/index.js +1 -1
  25. package/src/components/conditionbox/conditionbase.vue +194 -194
  26. package/src/components/conditionbox/conditionbox.vue +62 -62
  27. package/src/components/conditionbox/conditionfilterbox.vue +479 -479
  28. package/src/components/conditionbox/conditionselectorbox.vue +237 -237
  29. package/src/components/conditionbox/index.js +4 -4
  30. package/src/components/conditionbox/queryconditionbox.vue +25 -25
  31. package/src/components/conditionbox/queryconditionboxbase.vue +123 -123
  32. package/src/components/conditionbox/searchconditionbox.vue +113 -113
  33. package/src/components/conditionbox/searchgrid.vue +391 -391
  34. package/src/components/datebox/DateBoxV1.vue +22 -22
  35. package/src/components/datebox/datebox.vue +129 -129
  36. package/src/components/datebox/daterangebox.vue +154 -154
  37. package/src/components/datebox/index.js +5 -5
  38. package/src/components/form/baseform.vue +676 -676
  39. package/src/components/form/detailsbox.vue +487 -487
  40. package/src/components/form/formbox.vue +28 -28
  41. package/src/components/form/formcardbox.vue +267 -267
  42. package/src/components/form/formcardbox2.vue +228 -228
  43. package/src/components/form/formcardgroupbox.vue +251 -251
  44. package/src/components/form/formcompro.js +18 -18
  45. package/src/components/form/formdetail.vue +128 -128
  46. package/src/components/form/formdetailtwo.vue +302 -302
  47. package/src/components/form/index.js +9 -9
  48. package/src/components/form/toolanchor.js +45 -45
  49. package/src/components/form/workform.vue +167 -167
  50. package/src/components/grid/basegrid.vue +1062 -1062
  51. package/src/components/grid/editgrid.vue +51 -51
  52. package/src/components/grid/editgridbase.vue +1062 -1062
  53. package/src/components/grid/editgridcard.vue +193 -193
  54. package/src/components/grid/expandrow.vue +137 -137
  55. package/src/components/grid/index.js +5 -5
  56. package/src/components/grid/viewgrid.vue +121 -121
  57. package/src/components/grid/viewgridbase.vue +1286 -1286
  58. package/src/components/icon/common-icon.vue +53 -53
  59. package/src/components/icon/eicon.vue +28 -28
  60. package/src/components/icon/icons.vue +42 -42
  61. package/src/components/icon/index.js +1 -1
  62. package/src/components/label/index.js +2 -2
  63. package/src/components/label/showtext.vue +94 -94
  64. package/src/components/load/loadcartoon.vue +227 -227
  65. package/src/components/map/index.js +1 -1
  66. package/src/components/map/mapbox.vue +348 -348
  67. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanel.vue +184 -184
  68. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanelEditTable.vue +838 -838
  69. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanelEditTableControlbox.vue +126 -126
  70. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanelEditTableControlboxNumberbox.vue +27 -27
  71. package/src/components/masterplate/RewriteBillListDetails/BillListPanel.vue +126 -126
  72. package/src/components/masterplate/RewriteBillListDetails/BillListPanelQueryBar.vue +280 -280
  73. package/src/components/masterplate/RewriteBillListDetails/BillListPanelTable.vue +346 -346
  74. package/src/components/masterplate/RewriteBillListDetails/index.vue +325 -325
  75. package/src/components/masterplate/RewriteBillListDetails/mixins/useVxeGridEditTypeKeydownEventHook.js +251 -251
  76. package/src/components/masterplate/RewriteListdetails/BillListPanelV2.vue +115 -115
  77. package/src/components/masterplate/RewriteListdetails/BillListPanelV2QueryBar.vue +24 -24
  78. package/src/components/masterplate/RewriteListdetails/BillListPanelV3.vue +121 -121
  79. package/src/components/masterplate/RewriteListdetails/BillListPanelV3QueryBar.vue +275 -275
  80. package/src/components/masterplate/RewriteListdetails/indexV2.vue +320 -320
  81. package/src/components/masterplate/RewriteListdetails/indexV3.vue +331 -331
  82. package/src/components/masterplate/appendix.vue +586 -586
  83. package/src/components/masterplate/approval.vue +863 -863
  84. package/src/components/masterplate/base.vue +1028 -1028
  85. package/src/components/masterplate/billasyncimport.vue +614 -614
  86. package/src/components/masterplate/billconditionbox.vue +223 -223
  87. package/src/components/masterplate/billconditionsbox.vue +427 -427
  88. package/src/components/masterplate/billdetailform.vue +1028 -1028
  89. package/src/components/masterplate/billimport.vue +301 -301
  90. package/src/components/masterplate/billquerygrid.vue +391 -391
  91. package/src/components/masterplate/billsinglegrid.vue +234 -234
  92. package/src/components/masterplate/birtreport.vue +185 -185
  93. package/src/components/masterplate/contractappendix.vue +688 -688
  94. package/src/components/masterplate/detailbtntoolbar.vue +311 -311
  95. package/src/components/masterplate/detailsbox.vue +386 -386
  96. package/src/components/masterplate/editgridcard.vue +292 -292
  97. package/src/components/masterplate/editgridcard2.vue +127 -127
  98. package/src/components/masterplate/formcard.vue +105 -105
  99. package/src/components/masterplate/formcardgroupbox.vue +167 -167
  100. package/src/components/masterplate/formdetailtwo.vue +366 -366
  101. package/src/components/masterplate/gridcolset.vue +226 -226
  102. package/src/components/masterplate/index.js +54 -54
  103. package/src/components/masterplate/layouttemplate.vue +51 -51
  104. package/src/components/masterplate/leftlistrightdetails.vue +581 -581
  105. package/src/components/masterplate/leftlistrightlist.vue +464 -464
  106. package/src/components/masterplate/lefttreerightdetails.vue +636 -636
  107. package/src/components/masterplate/levelreport.vue +510 -510
  108. package/src/components/masterplate/listbtntoolbar.vue +276 -276
  109. package/src/components/masterplate/listdetails.vue +768 -768
  110. package/src/components/masterplate/operlog.vue +272 -272
  111. package/src/components/masterplate/options.vue +110 -110
  112. package/src/components/masterplate/page.vue +102 -102
  113. package/src/components/masterplate/promptmessage.vue +73 -73
  114. package/src/components/masterplate/querybar.vue +490 -490
  115. package/src/components/masterplate/report.vue +357 -357
  116. package/src/components/masterplate/rowbtntoolbar.vue +126 -126
  117. package/src/components/masterplate/simpletree.vue +137 -137
  118. package/src/components/masterplate/simpleviewgrid.vue +144 -144
  119. package/src/components/mychart/bar/bar.vue +201 -201
  120. package/src/components/mychart/basechart.vue +190 -190
  121. package/src/components/mychart/complexmychart/barline.vue +153 -153
  122. package/src/components/mychart/gauge/gauge.vue +82 -82
  123. package/src/components/mychart/index.js +8 -8
  124. package/src/components/mychart/line/line.vue +201 -201
  125. package/src/components/mychart/liquidfill/liquidfill.vue +108 -108
  126. package/src/components/mychart/pie/pie.vue +95 -95
  127. package/src/components/mychart/radar/radar.vue +121 -121
  128. package/src/components/mychart/scatter/scatter.vue +75 -75
  129. package/src/components/numberbox/NumberBoxV1.vue +39 -39
  130. package/src/components/numberbox/append.js +11 -11
  131. package/src/components/numberbox/index.js +4 -4
  132. package/src/components/numberbox/numberbox.vue +302 -302
  133. package/src/components/numberbox/numberrangebox.vue +422 -422
  134. package/src/components/picturebox/filebox.vue +369 -369
  135. package/src/components/picturebox/index.js +2 -2
  136. package/src/components/picturebox/picturebox.vue +541 -541
  137. package/src/components/picturebox/uploadbox.vue +164 -164
  138. package/src/components/poptagbox/index.js +1 -1
  139. package/src/components/poptagbox/poptagbox.vue +388 -388
  140. package/src/components/poptextbox/index.js +1 -1
  141. package/src/components/poptextbox/poptextbox.vue +624 -624
  142. package/src/components/radiobox/index.js +1 -1
  143. package/src/components/radiobox/radiogroupbox.vue +75 -75
  144. package/src/components/richtextbox/editor.vue +150 -150
  145. package/src/components/richtextbox/index.js +1 -1
  146. package/src/components/richtextbox/richtextbox.vue +448 -448
  147. package/src/components/textbox/index.js +1 -1
  148. package/src/components/textbox/textbox.vue +97 -97
  149. package/src/components/timebox/index.js +1 -1
  150. package/src/components/timebox/timebox.vue +75 -75
  151. package/src/components/toolbar/ebutton.vue +169 -169
  152. package/src/components/toolbar/index.js +3 -3
  153. package/src/components/toolbar/toolbar.vue +445 -445
  154. package/src/components/tree/CompatTree.vue +297 -297
  155. package/src/components/tree/basetree.vue +1098 -1098
  156. package/src/components/tree/index.js +2 -2
  157. package/src/components/tree/treedata.vue +53 -53
  158. package/src/components/tree/treedatabase.vue +189 -189
  159. package/src/components/upload/billimport.vue +233 -233
  160. package/src/components/upload/index.js +1 -1
  161. package/src/components/videobox/index.js +1 -1
  162. package/src/components/videobox/uploadbox.vue +148 -148
  163. package/src/components/videobox/videobox.vue +503 -503
  164. package/src/components/wrichtextbox/editor.vue +219 -219
  165. package/src/components/wrichtextbox/index.js +1 -1
  166. package/src/components/wrichtextbox/wrichtextbox.vue +62 -62
  167. package/src/index.js +231 -231
  168. package/src/locale/format.js +51 -51
  169. package/src/locale/index.js +63 -63
  170. package/src/locale/lang/zh-CN.js +123 -123
  171. package/src/locale/lang/zh-TW.js +114 -114
  172. package/src/locale/lang/zh-UG.js +115 -115
  173. package/src/locale/lang.js +15 -15
  174. package/src/method/case/case.js +1274 -1274
  175. package/src/method/config/queryconfig.js +24 -24
  176. package/src/method/const/const.js +815 -815
  177. package/src/method/index.js +7 -7
  178. package/src/plugins/theme/theme-variable.css +114 -114
  179. package/src/plugins/vxeTable/index.js +241 -241
  180. package/src/plugins/vxeTable/renderer/components/TableFilterInput.vue +51 -51
  181. package/src/plugins/vxeTable/renderer/filter.js +32 -32
  182. package/src/static/excel/exportexcel.js +626 -626
  183. package/src/static/iview/coustom.js +462 -462
  184. package/src/store/index.js +18 -18
  185. package/src/store/modules/app.js +53 -53
  186. package/src/styles/README.md +3 -3
  187. package/src/styles/common.less +80 -80
  188. package/src/styles/components/anchor.less +74 -74
  189. package/src/styles/components/approval.less +135 -135
  190. package/src/styles/components/button.less +208 -208
  191. package/src/styles/components/card.less +51 -51
  192. package/src/styles/components/content.less +38 -38
  193. package/src/styles/components/font.less +313 -313
  194. package/src/styles/components/form.less +71 -71
  195. package/src/styles/components/iconfont/fonts/iconfont.less +1384 -1384
  196. package/src/styles/components/iconfont/fonts/iconfont.svg +703 -703
  197. package/src/styles/components/index.less +16 -16
  198. package/src/styles/components/input.less +290 -290
  199. package/src/styles/components/modal.less +203 -203
  200. package/src/styles/components/page.less +340 -340
  201. package/src/styles/components/select.less +361 -361
  202. package/src/styles/components/steps.less +367 -367
  203. package/src/styles/components/table.less +544 -544
  204. package/src/styles/components/tabs.less +249 -249
  205. package/src/styles/components/upload.less +82 -82
  206. package/src/styles/custom.less +67 -67
  207. package/src/styles/index.less +6 -6
  208. package/src/styles/pack.less +6 -6
  209. package/src/utils/EfuMessenger.js +155 -155
  210. package/src/utils/assist.js +353 -353
  211. package/src/utils/index.js +1 -1
  212. package/src/utils/random_str.js +10 -10
  213. package/src/components/masterplate/detailgridbox.vue +0 -386
@@ -1,863 +1,863 @@
1
- <template>
2
- <div>
3
- <Modal title="人员列表" width="660" v-model="showuser">
4
- <Row style="margin-bottom:14px" type="flex" justify="start" align="middle" >
5
- <Col span='6' v-if="!showapproval">
6
- 已选抄送人:<span style="color:#AF292E">{{selectuserdata.length}}</span><span v-text="info"></span>
7
- </Col>
8
- <Col span='6' v-if="showapproval">
9
- 已选审批<span v-text="info"></span> :<span style="color:#AF292E">{{selectuserdata.length}}</span><span v-text="info"></span>
10
- </Col>
11
- <Col span='18'>
12
- <Row type="flex" justify="end" align="middle" >
13
- <Button type="text" custom-icon="iconfont icon-custom-quanshan" @click="delAll" >全部删除</Button>
14
- </Row>
15
- </Col>
16
- </Row>
17
- <Row type="flex" justify="start" style="min-height:82px;border:1px dashed #DCDFE6;padding:10px">
18
- <Tag v-for="(item,index) in selectuserdata" :key="'tag_' + index" :name="item.userCode" closable @on-close="closeCommon(item.userCode,'selectuserdata')" style="margin-right:8px"> {{item.userName}}</Tag>
19
- </Row>
20
- <Card style="margin-top:16px;" :padding="0" dis-hover>
21
- <template #title>
22
- <Row v-if="!showapproval" type="flex" justify="start" align="middle" >
23
- <Col span='4'>
24
- 已勾选:<span style="color:#AF292E">{{select.length}}</span><span v-text="info"></span>
25
- </Col>
26
- <Col span='20'>
27
- <Row type="flex" justify="end" align="middle" >
28
- <Input placeholder="请输入用户名称/工号/手机号" v-model="searchValue" search style="width: 380px;border-radius:20px;margin-top:10xp" @on-search="searchUser" @on-enter="searchUser"/>
29
- </Row>
30
- </Col>
31
- </Row>
32
- <Row v-else type="flex" justify="start" align="middle" >
33
- <Col span='8'>
34
- <RadioGroup v-model="selectType" @on-change="selectTypeChange">
35
- <Radio label="USER">
36
- <span>审批人</span>
37
- </Radio>
38
- <Radio label="USERGROUP">
39
- <span>岗位</span>
40
- </Radio>
41
- </RadioGroup>
42
- </Col>
43
- <Col span='16'>
44
- <Row type="flex" justify="end" align="middle" >
45
- <Input placeholder="请输入编码/名称" v-model="searchValue" search style="width: 380px;border-radius:20px;margin-top:10xp" @on-search="searchStation" @on-enter="searchStation"/>
46
- </Row>
47
- </Col>
48
- </Row>
49
- </template>
50
- <CheckboxGroup class="checkbox-group" name="user" v-model="select" style="max-height:250px;padding-left:14px" @on-change="selectUser">
51
- <div class="checkbox" v-for='(item,index) in userdata' :key="'checkbox_' + index" >
52
- <Checkbox :label='item.userCode' class="checkboxrow" >
53
- <div style="display: flex; align-items: center;">
54
- <div class='icon'>
55
- <div >{{item.userName}}</div>
56
- </div>
57
- <div class='uname'>{{item.userName}}</div>
58
- </div>
59
- </Checkbox>
60
- </div>
61
- </CheckboxGroup>
62
- </Card>
63
- <template #footer>
64
- <div>
65
- <Row type="flex" justify="end" align="middle" :gutter="8">
66
- <Col>
67
- <Button style="width:66px" @click="userCancel" >取消</Button>
68
- </Col>
69
- <Col>
70
- <Button style="width:66px;margin-left:14px" type="info" @click="userOk" >确认</Button>
71
- </Col>
72
- </Row>
73
- </div>
74
- </template>
75
- </Modal>
76
- <Drawer class-name="efutureapproval" title="工作流" v-model="showDrawer" :width="534">
77
- <div class="drawer-box">
78
- <div ref="head">
79
- <div class="work-head">
80
- <span>单据编号:{{value.billno}}</span>
81
- <span>状态:{{value.statusName}}</span>
82
- </div>
83
- <div v-if='copyuser.length > 0' class="work-head">
84
- <span>已抄送:<span><Tag v-for="(item,index) in copyuser" :key="'taguser_' + index" style="margin-left:10px">{{item.name}}</Tag> </span></span>
85
- </div>
86
- <p class="title"><span class="text">审批日志</span></p>
87
- </div>
88
- <div :style="contentStyle">
89
- <ul class="content">
90
- <li class="log-list" v-for="(item,index) in auditLog" :key="index">
91
- <div class="line-wrap"></div>
92
- <div class="left">
93
- <template v-if="item.mulflag === 'N'">
94
- <span>{{item.username}}</span>
95
- </template>
96
- <template v-else>
97
- <Icon custom="iconfont icon-custom-approve" size="20" color="#fff"/>
98
- </template>
99
- <div class="icon-wrap">
100
- <Icon v-if="item.act_status_ === 'Y'" custom="iconfont icon-custom-wancheng" color="#739943" />
101
- <Icon v-else-if="item.act_status_ === 'M' || item.act_status_ === 'A'" custom="iconfont icon-custom-daishenpi" color="#f3b352" />
102
- <Icon v-else-if="item.act_status_ === 'N'" color="#9a9b9d" custom="iconfont icon-custom-chehui" />
103
- <Icon v-else custom="iconfont icon-custom-weishenpi" color="#ef6e73" />
104
- </div>
105
- </div>
106
- <div class="right">
107
- <p class="top">
108
- <span style="font-size:16px;">{{item.describe_}}</span>
109
- <span class="status">{{item.act_status_name}}</span>
110
- </p>
111
- <div>
112
- <p v-if="index === auditLog.length - 1 && item.candidateUserList && item.candidateUserList.length > 0" class="desc">
113
- 待审批人:<span>{{ getCandidateUserText(item.candidateUserList) }}</span>
114
- </p>
115
- <span>{{item.act_time_}}</span>
116
- <p class="desc">意见:<span v-text="getMessage(item.message)"></span></p>
117
- </div>
118
- <div class="card" v-if="item.tasklist.length > 1">
119
- <ul class="main">
120
- <Row type="flex" justify="start" :gutter="16">
121
- <Col v-for="(tmp, index2) in item.tasklist" :key="'task_' + index2" v-show="index2 < maxUser || (index2 >= maxUser && tmp.active)" >
122
- <li class="user-list">
123
- <div class="user">
124
- <span>{{tmp.username}}</span>
125
- <div class="icon-wrap">
126
- <Icon v-if="item.status === 'Y'" custom="iconfont icon-custom-wancheng" color="#739943" />
127
- <Icon v-else-if="item.status === 'M' || item.status === 'A'" custom="iconfont icon-custom-daishenpi" color="#f3b352" />
128
- <Icon v-else-if="item.status === 'N'" color="#9a9b9d" custom="iconfont icon-custom-chehui" />
129
- <Icon v-else custom="iconfont icon-custom-weishenpi" color="#ef6e73" />
130
- </div>
131
- </div>
132
- <p style="z-index:99">{{tmp.username}}</p>
133
- </li>
134
- </Col>
135
- </Row>
136
- </ul>
137
- <Row v-if="item.tasklist > maxUser" type="flex" justify="center" align="middle">
138
- <Col>
139
- <Button v-if="!item.active" icon="ios-arrow-down" type="text" @click="showGroupUser(index)">展开 </Button>
140
- <Button v-if="item.active" icon="ios-arrow-up" type="text" @click="showGroupUser(index)"> 收起</Button>
141
- </Col>
142
- </Row>
143
- </div>
144
- </div>
145
- </li>
146
- </ul>
147
- </div>
148
- </div>
149
- <div ref="foot" class="footer">
150
- <Form v-show="showBtn" :label-width="45">
151
- <FormItem label="抄送:">
152
- <Row type="flex" justify="start" align="middle" >
153
- <Col span='2'>
154
- <span style="color:#AF292E"> {{copy.length}}</span> <span>人</span>
155
- </Col>
156
- <Col span='22'>
157
- <Row type="flex" justify="end" align="middle">
158
- <p @click.stop="addUser" style="cursor:pointer">
159
- <Icon custom="iconfont icon-custom-add" size="12" color="#AF292E"/>
160
- <span style="margin-left:9px;color:#AF292E;font-size:14px"> 添加抄送人 </span>
161
- </p>
162
- </Row>
163
- </Col>
164
- </Row>
165
- <Row type="flex" justify="start" align="middle" style="height:42px;border:1px solid #DCDFE6">
166
- <Tag v-for="(item,index) in copy" :key="'tag2_' + index" :name="item.userCode" style="margin-left:8px" closable @on-close="closeCommon(item.userCode,'copy')"> {{item.userName}}</Tag>
167
- </Row>
168
- </FormItem>
169
- <FormItem v-show="false" label="审批:">
170
- <Row type="flex" justify="start" align="middle" >
171
- <Col span='2'>
172
- <span style="color:#AF292E;cursor:pointer"> {{approvals.length}}</span> <span v-text="info2"></span>
173
- </Col>
174
- <Col span='22'>
175
- <Row type="flex" justify="end" align="middle">
176
- <p @click.stop="addApproval" style="cursor:pointer">
177
- <Icon custom="iconfont icon-custom-add" size="12" color="#AF292E"/>
178
- <span style="margin-left:9px;color:#AF292E;font-size:14px"> 添加审批人 </span>
179
- </p>
180
- </Row>
181
- </Col>
182
- </Row>
183
- <Row type="flex" justify="start" align="middle" style="height:42px;border:1px solid #DCDFE6">
184
- <Tag v-for="(item,index) in approvals" :key="'tag3_' + index" :name="item.userCode" style="margin-left:8px"> {{item.userName}}</Tag>
185
- </Row>
186
- </FormItem>
187
- <FormItem label="意见:">
188
- <Input v-model="idea" type='textarea' :autosize="rowsConfig"></Input>
189
- </FormItem>
190
- </Form>
191
- <Row type="flex" v-if="showBtn" justify="end" :gutter="10" style="padding-top:20px;padding-bottom:4px">
192
- <Col v-if="showSubmit">
193
- <Button customIcon="iconfont icon-custom-submit" @click="onSubmit" >提交</Button>
194
- </Col>
195
- <Col v-if="showReset">
196
- <Button customIcon="iconfont icon-custom-recall" @click="billBack" >撤回</Button>
197
- </Col>
198
- <Col v-show="false">
199
- <Button customIcon="iconfont icon-custom-jiaqian" @click="billBack" >加签</Button>
200
- </Col>
201
- <Col v-if="showReject">
202
- <Button customIcon="iconfont icon-custom-reject" @click="reject" >驳回</Button>
203
- </Col>
204
- <Col v-if="showApprove">
205
- <Button customIcon="iconfont icon-custom-approve" @click="submitApprove" >审批</Button>
206
- </Col>
207
- </Row>
208
- </div>
209
- </Drawer>
210
- </div>
211
- </template>
212
-
213
- <script>
214
- import elementResizeDetectorMaker from 'element-resize-detector'
215
- import load from '@/components/base/load';
216
- import size from '@/components/base/size';
217
- export default {
218
- name: 'mapprovalbox',
219
- mixins: [load,size],
220
- data() {
221
- return {
222
- myConfig: {
223
- resources: '',
224
- classPrefix: '',
225
- },
226
- value: {
227
- billmoduleid: '',
228
- billno: '',
229
- billstatus: '',
230
- statusName: ''
231
- },
232
- buttonlist:[],
233
- auditLog: [],
234
- copyuser: [],
235
- isSub: false,
236
- showuser: false,
237
- isSubmit: false,
238
- showBtn:true,
239
- selectType: 'USER',
240
- list: [],
241
- select: [],
242
- showSubmit: false,
243
- showDrawer:false,
244
- showApprove:false,
245
- showReject:false,
246
- showReset:false,
247
- copy:[],
248
- approvals:[],
249
- idea:'',
250
- rowsConfig:{ minRows: 3, maxRows: 6 },
251
- maxUser:6,
252
- extraHeight:0,
253
- extraHeight2:0,
254
- userdata:[],
255
- searchValue:'',
256
- selectuserdata:[],
257
- showapproval:false,
258
- curlSelectType:'USER'
259
- };
260
- },
261
- created() {
262
- this.myConfig = Object.assign({}, this.myConfig, this.config);
263
- },
264
- computed: {
265
- contentStyle () {
266
- let height = this.$Store.state.app.clientHeight;
267
- if (this.extraHeight) {
268
- height = height - Number(this.extraHeight);
269
- }
270
- if (this.extraHeight2) {
271
- height = height - Number(this.extraHeight2);
272
- }
273
- height = height - 90;
274
- return 'overflow-y: auto;max-height:' + height + 'px;';
275
- },
276
- info () {
277
- if (this.selectType === 'USER') {
278
- return '人';
279
- } else {
280
- return '组';
281
- }
282
- },
283
- info2 () {
284
- if (this.curlSelectType === 'USER') {
285
- return '人';
286
- } else {
287
- return '组';
288
- }
289
- }
290
- },
291
- props:{
292
- config: {
293
- type:Object,
294
- default:null
295
- },
296
- },
297
- methods: {
298
- onSubmit() {
299
- let flag = true;
300
- if (this.$parent.onSubmitBefore() !== undefined) {
301
- flag = this.$parent.onSubmitBefore();
302
- }
303
- if (flag) {
304
- this.billSubmit();
305
- }
306
- },
307
- setData(config) {
308
- this.clearData();
309
- this.$nextTick(() => {
310
- this.value ={};
311
- Object.assign(this.value, config);
312
- this.getAuditLog();
313
- if (this.value.billstatus === 'S') {
314
- // this.getSubuser();
315
- }
316
- //this.initBtn();
317
- });
318
- },
319
- initBtn () {
320
- if (this.value.billstatus === 'N') {
321
- this.showSubmit = true;
322
- } else {
323
- this.showSubmit = false;
324
- }
325
- if (this.value.billstatus !== 'N' && this.value.billstatus !== 'S' && this.value.billstatus !== 'R' && this.value.billstatus !== 'A') {
326
- this.showBtn = false;
327
- } else {
328
- this.showBtn = true;
329
- }
330
- },
331
- clearData() {
332
- this.auditLog = [];
333
- this.selectType ='USER';
334
- this.curlSelectType ='USER';
335
- this.selectuserdata = [];
336
- this.userdata = [];
337
- this.select = [];
338
- this.idea = '';
339
- this.approvals = [];
340
- },
341
- getSubuser() { // 获取提交人
342
- this.isSub = false;
343
- this.doPost(
344
- '.getBillSubmitter',
345
- {billno: this.value.billno, modecode: this.value.billmoduleid},
346
- (data) => {
347
- let usercode = this.getUserCode();
348
- if (data == usercode) {
349
- this.isSub = true;
350
- }
351
- }
352
- );
353
- },
354
- getAuditLog() { // 获取审批日志
355
- this.showSubmit = false;
356
- this.showReset = false;
357
- this.showReject = false;
358
- this.showApprove = false;
359
- this.doPost(
360
- '.getProcessList',
361
- {billno: this.value.billno, modecode: this.value.billmoduleid},
362
- (data) => {
363
- if (data.procinfo && data.procinfo.proclist) {
364
- let result = data.procinfo.proclist || [];
365
- let copylist = [];
366
- let candidateUserList = [];
367
- if (data.procinfo.cc && data.procinfo.cc.length > 0) {
368
- data.procinfo.cc.forEach(item => {
369
- let tmp = {};
370
- tmp.active = false;
371
- tmp.copyuser = item;
372
- tmp.name = item.substr(-2, 2);
373
- copylist.push(tmp);
374
- });
375
- }
376
- if (data.procinfo && data.procinfo.flowerProgress) {
377
- if (data.procinfo.flowerProgress.length > 0) {
378
- let lastflowerProgress = data.procinfo.flowerProgress[data.procinfo.flowerProgress.length - 1];
379
- if (lastflowerProgress && lastflowerProgress.candidateUserList) {
380
- candidateUserList = lastflowerProgress.candidateUserList;
381
- }
382
- }
383
-
384
- }
385
- result.forEach((item, index) => {
386
- item.active = false;
387
- item.tasklist.forEach(list => {
388
- if (list.usernam) {
389
- list.userName = list.username.substr(-2, 2);
390
- }
391
- });
392
- // 判断是否是最后一个item,添加candidateUserList
393
- if (index === result.length - 1) {
394
- item.candidateUserList = candidateUserList;
395
- }
396
- });
397
-
398
-
399
- if (data.procinfo.btnlist) {
400
- data.procinfo.btnlist.forEach(el => {
401
- if (el === '提交') {
402
- this.showSubmit = true;
403
- }
404
- if (el === '撤回') {
405
- this.showReset = true;
406
- }
407
- if (el === '驳回') {
408
- this.showReject = true;
409
- }
410
- if (el === '审批') {
411
- this.showApprove = true;
412
- }
413
- })
414
- }
415
-
416
- this.auditLog = result;
417
- this.copyuser = copylist || [];
418
- }
419
- if (this.showSubmit || this.showReset || this.showApprove || this.showReject) {
420
- this.showBtn = true;
421
- } else {
422
- this.showBtn = false;
423
- }
424
- }
425
- );
426
- },
427
- showGroupUser(index) {
428
- this.auditLog[index].active = !this.auditLog[index].active;
429
- },
430
- billBack() { // 审批撤回
431
- this.doPost(
432
- '.billrepeal',
433
- {billno: this.value.billno},
434
- (data) => {
435
- // // 方式1:通过事件 没有生效
436
- // this.$emit('approvalOk', '');
437
-
438
- // 方式2:直接调用父组件方法(兜底)
439
- if (this.$parent && typeof this.$parent.approvalOk === 'function') {
440
- this.$parent.approvalOk();
441
- }
442
- this.alert(data.msg,null,3);
443
- this.showDrawer = false;
444
- }
445
- );
446
- },
447
- reject() { // 审批驳回
448
- if (!this.idea) {
449
- this.alert('意见不能为空',null,1);
450
- return;
451
- }
452
- let para = {};
453
- para = {billno: this.value.billno,comment: this.idea};
454
- this.doCc(para);
455
- this.doPost(
456
- '.billreject' ,
457
- para,
458
- (data) => {
459
- // // 方式1:通过事件 没有生效
460
- // this.$emit('approvalOk', '');
461
-
462
- // 方式2:直接调用父组件方法(兜底)
463
- if (this.$parent && typeof this.$parent.approvalOk === 'function') {
464
- this.$parent.approvalOk();
465
- }
466
- this.showDrawer = false;
467
- this.alert(data.msg,null,3);
468
- }
469
- );
470
- },
471
- doCc (param) {
472
- if (this.copy.length > 0) {
473
- let cc = [];
474
- this.copy.forEach(el => {
475
- cc.push(el.userCode);
476
- });
477
- param.cc = cc;
478
- }
479
- },
480
- billSubmit() {
481
- let param = {
482
- billno: this.value.billno
483
- };
484
- this.doCc(param);
485
- if (this.idea) {
486
- param.comment = this.idea;
487
- }
488
- this.doPost('.billsubmit', param, (data) => {
489
- // // 方式1:通过事件 没有生效
490
- // this.$emit('approvalOk', '');
491
-
492
- // 方式2:直接调用父组件方法(兜底)
493
- if (this.$parent && typeof this.$parent.approvalOk === 'function') {
494
- this.$parent.approvalOk();
495
- }
496
- this.showDrawer = false;
497
- this.$nextTick(() =>{
498
- setTimeout(() => {
499
- this.alert(data.msg,null,3);
500
- }, 250);
501
- });
502
- });
503
- },
504
- submitApprove() {
505
- this.doPost(
506
- '.billapproval',
507
- {billno: this.value.billno,comment: this.idea},
508
- (data) => {
509
- // // 方式1:通过事件 没有生效
510
- // this.$emit('approvalOk', '');
511
-
512
- // 方式2:直接调用父组件方法(兜底)
513
- if (this.$parent && typeof this.$parent.approvalOk === 'function') {
514
- this.$parent.approvalOk();
515
- }
516
- this.showDrawer = false;
517
- this.alert(data.msg,null,3);
518
- });
519
- },
520
- addAuditUser() {
521
- if (!this.idea) {
522
- this.alert('意见不能为空',null,1);
523
- return;
524
- }
525
- if (this.approvals.length === 0) {
526
- this.alert('审批人不能为空');
527
- return;
528
- }
529
- let param = {
530
- billno: this.value.billno,
531
- userid: this.getUserCode(),
532
- comment: this.idea
533
- };
534
- param.addTaskInfo = {};
535
- param.addTaskInfo.type = this.curlSelectType;
536
- param.addTaskInfo.list = []
537
- this.approvals.forEach(el => {
538
- param.addTaskInfo.list.push(el.userCode);
539
- })
540
- this.doCc();
541
- this.doPost(
542
- '.billaddtask',
543
- param,
544
- (data) => {
545
- this.alert(data.msg,null,3);
546
-
547
- }
548
- );
549
- },
550
- doPost(method,postData,SuccessFun) {
551
- let self = this;
552
- this.showLoading();
553
- self.asyncPost(this.myConfig.resources, this.myConfig.classPrefix + method, postData, function(data){
554
- SuccessFun(data);
555
- self.hideLoading();
556
- },function(data) {
557
- self.hideLoading();
558
- self.$nextTick(() =>{
559
- setTimeout(() => {
560
- self.alert(data,null,2);
561
- }, 250);
562
- });
563
- },function(data) {
564
- self.hideLoading();
565
- self.$nextTick(() =>{
566
- setTimeout(() => {
567
- self.alert(data,null,2);
568
- }, 250);
569
- });
570
- });
571
- },
572
- open () {
573
- this.showDrawer = true;
574
- },
575
- addUser() {
576
- this.userdata = [];
577
- this.searchValue = '';
578
- this.selectuserdata = this.$Method.copy(this.copy);
579
- this.showuser = true;
580
- this.showapproval = false;
581
- this.selectType = 'USER';
582
- },
583
- getMessage(msg) {
584
- if (msg) {
585
- return msg;
586
- } else {
587
- return '-';
588
- }
589
- },
590
- setExtraHeight () {
591
- let height = 0;
592
- if (this.$refs.head) {
593
- height = this.$refs.head.offsetHeight;
594
- }
595
- this.extraHeight = height;
596
- },
597
- setExtraHeight2 () {
598
- let height = 0;
599
- if (this.$refs.foot) {
600
- height = this.$refs.foot.offsetHeight;
601
- }
602
- this.extraHeight2 = height;
603
- },
604
- searchUser() {
605
- this.getCopyUserData();
606
- },
607
- getCopyUserData () {
608
- if (!this.searchValue) {
609
- this.alert("查询内容不能为空");
610
- return;
611
- }
612
- let para = {};
613
- para.searchValue = this.searchValue;
614
- para.status= 1;
615
- para.page_size = 999;
616
- this.userdata = [];
617
- para.shopStatus = 1;
618
- para.usertype = '01';
619
- let portalMkt = this.getPortalMkt();
620
- if(portalMkt && portalMkt.shopCode) {
621
- para.shopCode = this.getPortalMkt().shopCode;
622
- }
623
- let self = this;
624
- this.asyncPost(this.OmdUrl.amp, 'usercenter.account.search', para, function (data) {
625
- if (data.account) {
626
- self.userdata = data.account;
627
- }
628
- });
629
- },
630
- getStationData () {
631
- if (!this.searchValue) {
632
- this.alert("查询内容不能为空");
633
- return;
634
- }
635
- let para = {};
636
- para.searchValue = this.searchValue;
637
- para.page_size = 999;
638
- this.userdata = [];
639
- let self = this;
640
- this.asyncPost(this.OmdUrl.amp, 'usercenter.station.search', para, function (data) {
641
- if (data.station) {
642
- let station = [];
643
- data.station.forEach(el => {
644
- let tmp = {};
645
- tmp.userCode = el.stationCode;
646
- tmp.userName = el.stationName;
647
- station.push(tmp);
648
- })
649
- self.userdata = station;
650
- }
651
- });
652
- },
653
- selectUser(obj) {
654
- this.initSelectUserData(obj);
655
- },
656
- initSelectUserData(tmp) {
657
- let temp = [];
658
- tmp.forEach(el => {
659
- let index = this.userdata.findIndex(el2 => el2.userCode === el);
660
- if (index > -1) {
661
- temp.push(this.$Method.copy(this.userdata[index]));
662
- }
663
- });
664
- let temp2 = [];
665
- this.selectuserdata.forEach(el => {
666
- let index = this.userdata.findIndex(el2 => el2.userCode === el.userCode);
667
- if (index > -1) {
668
- let index2 = temp.findIndex(el3 => el3.userCode === el.userCode);
669
- if (index2 > -1) {
670
- temp2.push(this.$Method.copy(el));
671
- }
672
- } else {
673
- temp2.push(this.$Method.copy(el));
674
- }
675
- });
676
- temp.forEach(el => {
677
- let index = temp2.findIndex(el2 => el.userCode === el2.userCode);
678
- if (index === -1) {
679
- temp2.push(this.$Method.copy(el))
680
- }
681
- })
682
- this.selectuserdata = temp2;
683
- },
684
- userCancel() {
685
- this.showuser = false;
686
- },
687
- userOk(){
688
- if (this.showapproval) {
689
- this.approvals = this.$Method.copy(this.selectuserdata);
690
- this.curlSelectType = this.selectType;
691
- } else {
692
- this.copy = this.$Method.copy(this.selectuserdata);
693
-
694
- }
695
- this.showuser = false;
696
- },
697
- addApproval(){
698
- this.userdata = [];
699
- this.searchValue = '';
700
- this.selectuserdata = this.$Method.copy(this.approvals);
701
- this.showapproval = true;
702
- this.showuser = true;
703
- this.selectType = this.curlSelectType;
704
- },
705
- closeCommon(usercode,name) {
706
- let index = this[name].findIndex(el => el.userCode === usercode);
707
- if (index > -1) {
708
- this[name].splice(index,1);
709
- }
710
- },
711
- delAll() {
712
- this.selectuserdata = [];
713
- },
714
- searchStation() {
715
- this.getStationData();
716
- },
717
- clearUser() {
718
- this.userdata = [];
719
- this.selectuserdata = [];
720
- this.searchValue = '';
721
- },
722
- selectTypeChange() {
723
- this.clearUser();
724
- },
725
- // 提前所有待审批人姓名
726
- getCandidateUserText(candidateUserList) {
727
- if (!candidateUserList || candidateUserList.length === 0) return '';
728
- // 提取所有待审批人姓名
729
- let approvers = candidateUserList.map(user => user.userName).join('、');
730
- return approvers;
731
- }
732
- },
733
- mounted () {
734
- this.observer = elementResizeDetectorMaker();
735
- if (this.$refs.head) {
736
- this.observer.listenTo(this.$refs.head, this.setExtraHeight);
737
- }
738
- if (this.$refs.foot) {
739
- this.observer.listenTo(this.$refs.foot, this.setExtraHeight2);
740
- }
741
- },
742
- beforeUnmount() {
743
- if (this.$refs.head) {
744
- this.observer.removeListener(this.$refs.head, this.setExtraHeight);
745
- }
746
- if (this.$refs.foot) {
747
- this.observer.removeListener(this.$refs.foot, this.setExtraHeight2);
748
- }
749
- }
750
- };
751
- </script>
752
-
753
- <style lang="less" scoped>
754
- .efutureapproval .content .line-wrap::after{
755
- position: absolute;
756
- content:'';
757
- width: 1px;
758
- height: calc(100% - 42px);
759
- background-color: #eee;
760
- }
761
- .checkbox-group {
762
- height: 390px;
763
- overflow-y: auto;
764
- }
765
-
766
- .checkbox-group .checkbox{
767
- padding: 5px 0;
768
- }
769
-
770
- .checkbox .icon{
771
- width: 35px;
772
- height: 35px;
773
- color: #fff;
774
- line-height: 35px;
775
- font-size: 12px;
776
- text-align: center;
777
- border-radius: 50%;
778
- margin: 0 10px;
779
- background-color: #AF292E;
780
- }
781
-
782
- .checkbox .uname{
783
- white-space: nowrap;
784
- text-overflow: ellipsis;
785
- overflow: hidden;
786
- }
787
-
788
- .checkboxrow {
789
- width: 100%;
790
- display: flex;
791
- align-items: center;
792
- }
793
-
794
-
795
- .username,
796
- .user-item {
797
- position: relative;
798
- width: 40px;
799
- height: 40px;
800
- text-align: center;
801
- line-height: 38px;
802
- color: #fff;
803
- margin-right: 17px;
804
- border-radius: 50%;
805
- background-color: #3389ff;
806
- }
807
-
808
- .username .icon,
809
- .user-item .icon {
810
- position: absolute;
811
- bottom: -1px;
812
- right: 0;
813
- width: 15px;
814
- height: 15px;
815
- line-height: 14px;
816
- border-radius: 50%;
817
- background-color: #fff;
818
- }
819
-
820
- .user-item .icon {
821
- width: 15px;
822
- height: 15px;
823
- }
824
-
825
- .username .icon .iconfont {
826
- font-size: 15px;
827
- }
828
-
829
- .user-item .icon .iconfont {
830
- font-size: 15px;
831
- }
832
- .checkboxrow {
833
- .ivu-checkbox-label-text {
834
- display: flex;
835
- align-items: center
836
- }
837
- }
838
-
839
- .user-list {
840
- display: flex;
841
- flex-direction: column;
842
- align-items: flex-start;
843
- }
844
-
845
- .user-list .user-list-wrap {
846
- display: flex;
847
- margin: 10px 0px;
848
- align-items: center;
849
- }
850
-
851
- .user-list-wrap .name {
852
- color: #808385;
853
- }
854
-
855
-
856
- .user-item {
857
- width: 40px;
858
- min-width: 40px;
859
- height: 40px;
860
- margin-right: 0;
861
- line-height: 40px;
862
- }
863
- </style>
1
+ <template>
2
+ <div>
3
+ <Modal title="人员列表" width="660" v-model="showuser">
4
+ <Row style="margin-bottom:14px" type="flex" justify="start" align="middle" >
5
+ <Col span='6' v-if="!showapproval">
6
+ 已选抄送人:<span style="color:#AF292E">{{selectuserdata.length}}</span><span v-text="info"></span>
7
+ </Col>
8
+ <Col span='6' v-if="showapproval">
9
+ 已选审批<span v-text="info"></span> :<span style="color:#AF292E">{{selectuserdata.length}}</span><span v-text="info"></span>
10
+ </Col>
11
+ <Col span='18'>
12
+ <Row type="flex" justify="end" align="middle" >
13
+ <Button type="text" custom-icon="iconfont icon-custom-quanshan" @click="delAll" >全部删除</Button>
14
+ </Row>
15
+ </Col>
16
+ </Row>
17
+ <Row type="flex" justify="start" style="min-height:82px;border:1px dashed #DCDFE6;padding:10px">
18
+ <Tag v-for="(item,index) in selectuserdata" :key="'tag_' + index" :name="item.userCode" closable @on-close="closeCommon(item.userCode,'selectuserdata')" style="margin-right:8px"> {{item.userName}}</Tag>
19
+ </Row>
20
+ <Card style="margin-top:16px;" :padding="0" dis-hover>
21
+ <template #title>
22
+ <Row v-if="!showapproval" type="flex" justify="start" align="middle" >
23
+ <Col span='4'>
24
+ 已勾选:<span style="color:#AF292E">{{select.length}}</span><span v-text="info"></span>
25
+ </Col>
26
+ <Col span='20'>
27
+ <Row type="flex" justify="end" align="middle" >
28
+ <Input placeholder="请输入用户名称/工号/手机号" v-model="searchValue" search style="width: 380px;border-radius:20px;margin-top:10xp" @on-search="searchUser" @on-enter="searchUser"/>
29
+ </Row>
30
+ </Col>
31
+ </Row>
32
+ <Row v-else type="flex" justify="start" align="middle" >
33
+ <Col span='8'>
34
+ <RadioGroup v-model="selectType" @on-change="selectTypeChange">
35
+ <Radio label="USER">
36
+ <span>审批人</span>
37
+ </Radio>
38
+ <Radio label="USERGROUP">
39
+ <span>岗位</span>
40
+ </Radio>
41
+ </RadioGroup>
42
+ </Col>
43
+ <Col span='16'>
44
+ <Row type="flex" justify="end" align="middle" >
45
+ <Input placeholder="请输入编码/名称" v-model="searchValue" search style="width: 380px;border-radius:20px;margin-top:10xp" @on-search="searchStation" @on-enter="searchStation"/>
46
+ </Row>
47
+ </Col>
48
+ </Row>
49
+ </template>
50
+ <CheckboxGroup class="checkbox-group" name="user" v-model="select" style="max-height:250px;padding-left:14px" @on-change="selectUser">
51
+ <div class="checkbox" v-for='(item,index) in userdata' :key="'checkbox_' + index" >
52
+ <Checkbox :label='item.userCode' class="checkboxrow" >
53
+ <div style="display: flex; align-items: center;">
54
+ <div class='icon'>
55
+ <div >{{item.userName}}</div>
56
+ </div>
57
+ <div class='uname'>{{item.userName}}</div>
58
+ </div>
59
+ </Checkbox>
60
+ </div>
61
+ </CheckboxGroup>
62
+ </Card>
63
+ <template #footer>
64
+ <div>
65
+ <Row type="flex" justify="end" align="middle" :gutter="8">
66
+ <Col>
67
+ <Button style="width:66px" @click="userCancel" >取消</Button>
68
+ </Col>
69
+ <Col>
70
+ <Button style="width:66px;margin-left:14px" type="info" @click="userOk" >确认</Button>
71
+ </Col>
72
+ </Row>
73
+ </div>
74
+ </template>
75
+ </Modal>
76
+ <Drawer class-name="efutureapproval" title="工作流" v-model="showDrawer" :width="534">
77
+ <div class="drawer-box">
78
+ <div ref="head">
79
+ <div class="work-head">
80
+ <span>单据编号:{{value.billno}}</span>
81
+ <span>状态:{{value.statusName}}</span>
82
+ </div>
83
+ <div v-if='copyuser.length > 0' class="work-head">
84
+ <span>已抄送:<span><Tag v-for="(item,index) in copyuser" :key="'taguser_' + index" style="margin-left:10px">{{item.name}}</Tag> </span></span>
85
+ </div>
86
+ <p class="title"><span class="text">审批日志</span></p>
87
+ </div>
88
+ <div :style="contentStyle">
89
+ <ul class="content">
90
+ <li class="log-list" v-for="(item,index) in auditLog" :key="index">
91
+ <div class="line-wrap"></div>
92
+ <div class="left">
93
+ <template v-if="item.mulflag === 'N'">
94
+ <span>{{item.username}}</span>
95
+ </template>
96
+ <template v-else>
97
+ <Icon custom="iconfont icon-custom-approve" size="20" color="#fff"/>
98
+ </template>
99
+ <div class="icon-wrap">
100
+ <Icon v-if="item.act_status_ === 'Y'" custom="iconfont icon-custom-wancheng" color="#739943" />
101
+ <Icon v-else-if="item.act_status_ === 'M' || item.act_status_ === 'A'" custom="iconfont icon-custom-daishenpi" color="#f3b352" />
102
+ <Icon v-else-if="item.act_status_ === 'N'" color="#9a9b9d" custom="iconfont icon-custom-chehui" />
103
+ <Icon v-else custom="iconfont icon-custom-weishenpi" color="#ef6e73" />
104
+ </div>
105
+ </div>
106
+ <div class="right">
107
+ <p class="top">
108
+ <span style="font-size:16px;">{{item.describe_}}</span>
109
+ <span class="status">{{item.act_status_name}}</span>
110
+ </p>
111
+ <div>
112
+ <p v-if="index === auditLog.length - 1 && item.candidateUserList && item.candidateUserList.length > 0" class="desc">
113
+ 待审批人:<span>{{ getCandidateUserText(item.candidateUserList) }}</span>
114
+ </p>
115
+ <span>{{item.act_time_}}</span>
116
+ <p class="desc">意见:<span v-text="getMessage(item.message)"></span></p>
117
+ </div>
118
+ <div class="card" v-if="item.tasklist.length > 1">
119
+ <ul class="main">
120
+ <Row type="flex" justify="start" :gutter="16">
121
+ <Col v-for="(tmp, index2) in item.tasklist" :key="'task_' + index2" v-show="index2 < maxUser || (index2 >= maxUser && tmp.active)" >
122
+ <li class="user-list">
123
+ <div class="user">
124
+ <span>{{tmp.username}}</span>
125
+ <div class="icon-wrap">
126
+ <Icon v-if="item.status === 'Y'" custom="iconfont icon-custom-wancheng" color="#739943" />
127
+ <Icon v-else-if="item.status === 'M' || item.status === 'A'" custom="iconfont icon-custom-daishenpi" color="#f3b352" />
128
+ <Icon v-else-if="item.status === 'N'" color="#9a9b9d" custom="iconfont icon-custom-chehui" />
129
+ <Icon v-else custom="iconfont icon-custom-weishenpi" color="#ef6e73" />
130
+ </div>
131
+ </div>
132
+ <p style="z-index:99">{{tmp.username}}</p>
133
+ </li>
134
+ </Col>
135
+ </Row>
136
+ </ul>
137
+ <Row v-if="item.tasklist > maxUser" type="flex" justify="center" align="middle">
138
+ <Col>
139
+ <Button v-if="!item.active" icon="ios-arrow-down" type="text" @click="showGroupUser(index)">展开 </Button>
140
+ <Button v-if="item.active" icon="ios-arrow-up" type="text" @click="showGroupUser(index)"> 收起</Button>
141
+ </Col>
142
+ </Row>
143
+ </div>
144
+ </div>
145
+ </li>
146
+ </ul>
147
+ </div>
148
+ </div>
149
+ <div ref="foot" class="footer">
150
+ <Form v-show="showBtn" :label-width="45">
151
+ <FormItem label="抄送:">
152
+ <Row type="flex" justify="start" align="middle" >
153
+ <Col span='2'>
154
+ <span style="color:#AF292E"> {{copy.length}}</span> <span>人</span>
155
+ </Col>
156
+ <Col span='22'>
157
+ <Row type="flex" justify="end" align="middle">
158
+ <p @click.stop="addUser" style="cursor:pointer">
159
+ <Icon custom="iconfont icon-custom-add" size="12" color="#AF292E"/>
160
+ <span style="margin-left:9px;color:#AF292E;font-size:14px"> 添加抄送人 </span>
161
+ </p>
162
+ </Row>
163
+ </Col>
164
+ </Row>
165
+ <Row type="flex" justify="start" align="middle" style="height:42px;border:1px solid #DCDFE6">
166
+ <Tag v-for="(item,index) in copy" :key="'tag2_' + index" :name="item.userCode" style="margin-left:8px" closable @on-close="closeCommon(item.userCode,'copy')"> {{item.userName}}</Tag>
167
+ </Row>
168
+ </FormItem>
169
+ <FormItem v-show="false" label="审批:">
170
+ <Row type="flex" justify="start" align="middle" >
171
+ <Col span='2'>
172
+ <span style="color:#AF292E;cursor:pointer"> {{approvals.length}}</span> <span v-text="info2"></span>
173
+ </Col>
174
+ <Col span='22'>
175
+ <Row type="flex" justify="end" align="middle">
176
+ <p @click.stop="addApproval" style="cursor:pointer">
177
+ <Icon custom="iconfont icon-custom-add" size="12" color="#AF292E"/>
178
+ <span style="margin-left:9px;color:#AF292E;font-size:14px"> 添加审批人 </span>
179
+ </p>
180
+ </Row>
181
+ </Col>
182
+ </Row>
183
+ <Row type="flex" justify="start" align="middle" style="height:42px;border:1px solid #DCDFE6">
184
+ <Tag v-for="(item,index) in approvals" :key="'tag3_' + index" :name="item.userCode" style="margin-left:8px"> {{item.userName}}</Tag>
185
+ </Row>
186
+ </FormItem>
187
+ <FormItem label="意见:">
188
+ <Input v-model="idea" type='textarea' :autosize="rowsConfig"></Input>
189
+ </FormItem>
190
+ </Form>
191
+ <Row type="flex" v-if="showBtn" justify="end" :gutter="10" style="padding-top:20px;padding-bottom:4px">
192
+ <Col v-if="showSubmit">
193
+ <Button customIcon="iconfont icon-custom-submit" @click="onSubmit" >提交</Button>
194
+ </Col>
195
+ <Col v-if="showReset">
196
+ <Button customIcon="iconfont icon-custom-recall" @click="billBack" >撤回</Button>
197
+ </Col>
198
+ <Col v-show="false">
199
+ <Button customIcon="iconfont icon-custom-jiaqian" @click="billBack" >加签</Button>
200
+ </Col>
201
+ <Col v-if="showReject">
202
+ <Button customIcon="iconfont icon-custom-reject" @click="reject" >驳回</Button>
203
+ </Col>
204
+ <Col v-if="showApprove">
205
+ <Button customIcon="iconfont icon-custom-approve" @click="submitApprove" >审批</Button>
206
+ </Col>
207
+ </Row>
208
+ </div>
209
+ </Drawer>
210
+ </div>
211
+ </template>
212
+
213
+ <script>
214
+ import elementResizeDetectorMaker from 'element-resize-detector'
215
+ import load from '@/components/base/load';
216
+ import size from '@/components/base/size';
217
+ export default {
218
+ name: 'mapprovalbox',
219
+ mixins: [load,size],
220
+ data() {
221
+ return {
222
+ myConfig: {
223
+ resources: '',
224
+ classPrefix: '',
225
+ },
226
+ value: {
227
+ billmoduleid: '',
228
+ billno: '',
229
+ billstatus: '',
230
+ statusName: ''
231
+ },
232
+ buttonlist:[],
233
+ auditLog: [],
234
+ copyuser: [],
235
+ isSub: false,
236
+ showuser: false,
237
+ isSubmit: false,
238
+ showBtn:true,
239
+ selectType: 'USER',
240
+ list: [],
241
+ select: [],
242
+ showSubmit: false,
243
+ showDrawer:false,
244
+ showApprove:false,
245
+ showReject:false,
246
+ showReset:false,
247
+ copy:[],
248
+ approvals:[],
249
+ idea:'',
250
+ rowsConfig:{ minRows: 3, maxRows: 6 },
251
+ maxUser:6,
252
+ extraHeight:0,
253
+ extraHeight2:0,
254
+ userdata:[],
255
+ searchValue:'',
256
+ selectuserdata:[],
257
+ showapproval:false,
258
+ curlSelectType:'USER'
259
+ };
260
+ },
261
+ created() {
262
+ this.myConfig = Object.assign({}, this.myConfig, this.config);
263
+ },
264
+ computed: {
265
+ contentStyle () {
266
+ let height = this.$Store.state.app.clientHeight;
267
+ if (this.extraHeight) {
268
+ height = height - Number(this.extraHeight);
269
+ }
270
+ if (this.extraHeight2) {
271
+ height = height - Number(this.extraHeight2);
272
+ }
273
+ height = height - 90;
274
+ return 'overflow-y: auto;max-height:' + height + 'px;';
275
+ },
276
+ info () {
277
+ if (this.selectType === 'USER') {
278
+ return '人';
279
+ } else {
280
+ return '组';
281
+ }
282
+ },
283
+ info2 () {
284
+ if (this.curlSelectType === 'USER') {
285
+ return '人';
286
+ } else {
287
+ return '组';
288
+ }
289
+ }
290
+ },
291
+ props:{
292
+ config: {
293
+ type:Object,
294
+ default:null
295
+ },
296
+ },
297
+ methods: {
298
+ onSubmit() {
299
+ let flag = true;
300
+ if (this.$parent.onSubmitBefore() !== undefined) {
301
+ flag = this.$parent.onSubmitBefore();
302
+ }
303
+ if (flag) {
304
+ this.billSubmit();
305
+ }
306
+ },
307
+ setData(config) {
308
+ this.clearData();
309
+ this.$nextTick(() => {
310
+ this.value ={};
311
+ Object.assign(this.value, config);
312
+ this.getAuditLog();
313
+ if (this.value.billstatus === 'S') {
314
+ // this.getSubuser();
315
+ }
316
+ //this.initBtn();
317
+ });
318
+ },
319
+ initBtn () {
320
+ if (this.value.billstatus === 'N') {
321
+ this.showSubmit = true;
322
+ } else {
323
+ this.showSubmit = false;
324
+ }
325
+ if (this.value.billstatus !== 'N' && this.value.billstatus !== 'S' && this.value.billstatus !== 'R' && this.value.billstatus !== 'A') {
326
+ this.showBtn = false;
327
+ } else {
328
+ this.showBtn = true;
329
+ }
330
+ },
331
+ clearData() {
332
+ this.auditLog = [];
333
+ this.selectType ='USER';
334
+ this.curlSelectType ='USER';
335
+ this.selectuserdata = [];
336
+ this.userdata = [];
337
+ this.select = [];
338
+ this.idea = '';
339
+ this.approvals = [];
340
+ },
341
+ getSubuser() { // 获取提交人
342
+ this.isSub = false;
343
+ this.doPost(
344
+ '.getBillSubmitter',
345
+ {billno: this.value.billno, modecode: this.value.billmoduleid},
346
+ (data) => {
347
+ let usercode = this.getUserCode();
348
+ if (data == usercode) {
349
+ this.isSub = true;
350
+ }
351
+ }
352
+ );
353
+ },
354
+ getAuditLog() { // 获取审批日志
355
+ this.showSubmit = false;
356
+ this.showReset = false;
357
+ this.showReject = false;
358
+ this.showApprove = false;
359
+ this.doPost(
360
+ '.getProcessList',
361
+ {billno: this.value.billno, modecode: this.value.billmoduleid},
362
+ (data) => {
363
+ if (data.procinfo && data.procinfo.proclist) {
364
+ let result = data.procinfo.proclist || [];
365
+ let copylist = [];
366
+ let candidateUserList = [];
367
+ if (data.procinfo.cc && data.procinfo.cc.length > 0) {
368
+ data.procinfo.cc.forEach(item => {
369
+ let tmp = {};
370
+ tmp.active = false;
371
+ tmp.copyuser = item;
372
+ tmp.name = item.substr(-2, 2);
373
+ copylist.push(tmp);
374
+ });
375
+ }
376
+ if (data.procinfo && data.procinfo.flowerProgress) {
377
+ if (data.procinfo.flowerProgress.length > 0) {
378
+ let lastflowerProgress = data.procinfo.flowerProgress[data.procinfo.flowerProgress.length - 1];
379
+ if (lastflowerProgress && lastflowerProgress.candidateUserList) {
380
+ candidateUserList = lastflowerProgress.candidateUserList;
381
+ }
382
+ }
383
+
384
+ }
385
+ result.forEach((item, index) => {
386
+ item.active = false;
387
+ item.tasklist.forEach(list => {
388
+ if (list.usernam) {
389
+ list.userName = list.username.substr(-2, 2);
390
+ }
391
+ });
392
+ // 判断是否是最后一个item,添加candidateUserList
393
+ if (index === result.length - 1) {
394
+ item.candidateUserList = candidateUserList;
395
+ }
396
+ });
397
+
398
+
399
+ if (data.procinfo.btnlist) {
400
+ data.procinfo.btnlist.forEach(el => {
401
+ if (el === '提交') {
402
+ this.showSubmit = true;
403
+ }
404
+ if (el === '撤回') {
405
+ this.showReset = true;
406
+ }
407
+ if (el === '驳回') {
408
+ this.showReject = true;
409
+ }
410
+ if (el === '审批') {
411
+ this.showApprove = true;
412
+ }
413
+ })
414
+ }
415
+
416
+ this.auditLog = result;
417
+ this.copyuser = copylist || [];
418
+ }
419
+ if (this.showSubmit || this.showReset || this.showApprove || this.showReject) {
420
+ this.showBtn = true;
421
+ } else {
422
+ this.showBtn = false;
423
+ }
424
+ }
425
+ );
426
+ },
427
+ showGroupUser(index) {
428
+ this.auditLog[index].active = !this.auditLog[index].active;
429
+ },
430
+ billBack() { // 审批撤回
431
+ this.doPost(
432
+ '.billrepeal',
433
+ {billno: this.value.billno},
434
+ (data) => {
435
+ // // 方式1:通过事件 没有生效
436
+ // this.$emit('approvalOk', '');
437
+
438
+ // 方式2:直接调用父组件方法(兜底)
439
+ if (this.$parent && typeof this.$parent.approvalOk === 'function') {
440
+ this.$parent.approvalOk();
441
+ }
442
+ this.alert(data.msg,null,3);
443
+ this.showDrawer = false;
444
+ }
445
+ );
446
+ },
447
+ reject() { // 审批驳回
448
+ if (!this.idea) {
449
+ this.alert('意见不能为空',null,1);
450
+ return;
451
+ }
452
+ let para = {};
453
+ para = {billno: this.value.billno,comment: this.idea};
454
+ this.doCc(para);
455
+ this.doPost(
456
+ '.billreject' ,
457
+ para,
458
+ (data) => {
459
+ // // 方式1:通过事件 没有生效
460
+ // this.$emit('approvalOk', '');
461
+
462
+ // 方式2:直接调用父组件方法(兜底)
463
+ if (this.$parent && typeof this.$parent.approvalOk === 'function') {
464
+ this.$parent.approvalOk();
465
+ }
466
+ this.showDrawer = false;
467
+ this.alert(data.msg,null,3);
468
+ }
469
+ );
470
+ },
471
+ doCc (param) {
472
+ if (this.copy.length > 0) {
473
+ let cc = [];
474
+ this.copy.forEach(el => {
475
+ cc.push(el.userCode);
476
+ });
477
+ param.cc = cc;
478
+ }
479
+ },
480
+ billSubmit() {
481
+ let param = {
482
+ billno: this.value.billno
483
+ };
484
+ this.doCc(param);
485
+ if (this.idea) {
486
+ param.comment = this.idea;
487
+ }
488
+ this.doPost('.billsubmit', param, (data) => {
489
+ // // 方式1:通过事件 没有生效
490
+ // this.$emit('approvalOk', '');
491
+
492
+ // 方式2:直接调用父组件方法(兜底)
493
+ if (this.$parent && typeof this.$parent.approvalOk === 'function') {
494
+ this.$parent.approvalOk();
495
+ }
496
+ this.showDrawer = false;
497
+ this.$nextTick(() =>{
498
+ setTimeout(() => {
499
+ this.alert(data.msg,null,3);
500
+ }, 250);
501
+ });
502
+ });
503
+ },
504
+ submitApprove() {
505
+ this.doPost(
506
+ '.billapproval',
507
+ {billno: this.value.billno,comment: this.idea},
508
+ (data) => {
509
+ // // 方式1:通过事件 没有生效
510
+ // this.$emit('approvalOk', '');
511
+
512
+ // 方式2:直接调用父组件方法(兜底)
513
+ if (this.$parent && typeof this.$parent.approvalOk === 'function') {
514
+ this.$parent.approvalOk();
515
+ }
516
+ this.showDrawer = false;
517
+ this.alert(data.msg,null,3);
518
+ });
519
+ },
520
+ addAuditUser() {
521
+ if (!this.idea) {
522
+ this.alert('意见不能为空',null,1);
523
+ return;
524
+ }
525
+ if (this.approvals.length === 0) {
526
+ this.alert('审批人不能为空');
527
+ return;
528
+ }
529
+ let param = {
530
+ billno: this.value.billno,
531
+ userid: this.getUserCode(),
532
+ comment: this.idea
533
+ };
534
+ param.addTaskInfo = {};
535
+ param.addTaskInfo.type = this.curlSelectType;
536
+ param.addTaskInfo.list = []
537
+ this.approvals.forEach(el => {
538
+ param.addTaskInfo.list.push(el.userCode);
539
+ })
540
+ this.doCc();
541
+ this.doPost(
542
+ '.billaddtask',
543
+ param,
544
+ (data) => {
545
+ this.alert(data.msg,null,3);
546
+
547
+ }
548
+ );
549
+ },
550
+ doPost(method,postData,SuccessFun) {
551
+ let self = this;
552
+ this.showLoading();
553
+ self.asyncPost(this.myConfig.resources, this.myConfig.classPrefix + method, postData, function(data){
554
+ SuccessFun(data);
555
+ self.hideLoading();
556
+ },function(data) {
557
+ self.hideLoading();
558
+ self.$nextTick(() =>{
559
+ setTimeout(() => {
560
+ self.alert(data,null,2);
561
+ }, 250);
562
+ });
563
+ },function(data) {
564
+ self.hideLoading();
565
+ self.$nextTick(() =>{
566
+ setTimeout(() => {
567
+ self.alert(data,null,2);
568
+ }, 250);
569
+ });
570
+ });
571
+ },
572
+ open () {
573
+ this.showDrawer = true;
574
+ },
575
+ addUser() {
576
+ this.userdata = [];
577
+ this.searchValue = '';
578
+ this.selectuserdata = this.$Method.copy(this.copy);
579
+ this.showuser = true;
580
+ this.showapproval = false;
581
+ this.selectType = 'USER';
582
+ },
583
+ getMessage(msg) {
584
+ if (msg) {
585
+ return msg;
586
+ } else {
587
+ return '-';
588
+ }
589
+ },
590
+ setExtraHeight () {
591
+ let height = 0;
592
+ if (this.$refs.head) {
593
+ height = this.$refs.head.offsetHeight;
594
+ }
595
+ this.extraHeight = height;
596
+ },
597
+ setExtraHeight2 () {
598
+ let height = 0;
599
+ if (this.$refs.foot) {
600
+ height = this.$refs.foot.offsetHeight;
601
+ }
602
+ this.extraHeight2 = height;
603
+ },
604
+ searchUser() {
605
+ this.getCopyUserData();
606
+ },
607
+ getCopyUserData () {
608
+ if (!this.searchValue) {
609
+ this.alert("查询内容不能为空");
610
+ return;
611
+ }
612
+ let para = {};
613
+ para.searchValue = this.searchValue;
614
+ para.status= 1;
615
+ para.page_size = 999;
616
+ this.userdata = [];
617
+ para.shopStatus = 1;
618
+ para.usertype = '01';
619
+ let portalMkt = this.getPortalMkt();
620
+ if(portalMkt && portalMkt.shopCode) {
621
+ para.shopCode = this.getPortalMkt().shopCode;
622
+ }
623
+ let self = this;
624
+ this.asyncPost(this.OmdUrl.amp, 'usercenter.account.search', para, function (data) {
625
+ if (data.account) {
626
+ self.userdata = data.account;
627
+ }
628
+ });
629
+ },
630
+ getStationData () {
631
+ if (!this.searchValue) {
632
+ this.alert("查询内容不能为空");
633
+ return;
634
+ }
635
+ let para = {};
636
+ para.searchValue = this.searchValue;
637
+ para.page_size = 999;
638
+ this.userdata = [];
639
+ let self = this;
640
+ this.asyncPost(this.OmdUrl.amp, 'usercenter.station.search', para, function (data) {
641
+ if (data.station) {
642
+ let station = [];
643
+ data.station.forEach(el => {
644
+ let tmp = {};
645
+ tmp.userCode = el.stationCode;
646
+ tmp.userName = el.stationName;
647
+ station.push(tmp);
648
+ })
649
+ self.userdata = station;
650
+ }
651
+ });
652
+ },
653
+ selectUser(obj) {
654
+ this.initSelectUserData(obj);
655
+ },
656
+ initSelectUserData(tmp) {
657
+ let temp = [];
658
+ tmp.forEach(el => {
659
+ let index = this.userdata.findIndex(el2 => el2.userCode === el);
660
+ if (index > -1) {
661
+ temp.push(this.$Method.copy(this.userdata[index]));
662
+ }
663
+ });
664
+ let temp2 = [];
665
+ this.selectuserdata.forEach(el => {
666
+ let index = this.userdata.findIndex(el2 => el2.userCode === el.userCode);
667
+ if (index > -1) {
668
+ let index2 = temp.findIndex(el3 => el3.userCode === el.userCode);
669
+ if (index2 > -1) {
670
+ temp2.push(this.$Method.copy(el));
671
+ }
672
+ } else {
673
+ temp2.push(this.$Method.copy(el));
674
+ }
675
+ });
676
+ temp.forEach(el => {
677
+ let index = temp2.findIndex(el2 => el.userCode === el2.userCode);
678
+ if (index === -1) {
679
+ temp2.push(this.$Method.copy(el))
680
+ }
681
+ })
682
+ this.selectuserdata = temp2;
683
+ },
684
+ userCancel() {
685
+ this.showuser = false;
686
+ },
687
+ userOk(){
688
+ if (this.showapproval) {
689
+ this.approvals = this.$Method.copy(this.selectuserdata);
690
+ this.curlSelectType = this.selectType;
691
+ } else {
692
+ this.copy = this.$Method.copy(this.selectuserdata);
693
+
694
+ }
695
+ this.showuser = false;
696
+ },
697
+ addApproval(){
698
+ this.userdata = [];
699
+ this.searchValue = '';
700
+ this.selectuserdata = this.$Method.copy(this.approvals);
701
+ this.showapproval = true;
702
+ this.showuser = true;
703
+ this.selectType = this.curlSelectType;
704
+ },
705
+ closeCommon(usercode,name) {
706
+ let index = this[name].findIndex(el => el.userCode === usercode);
707
+ if (index > -1) {
708
+ this[name].splice(index,1);
709
+ }
710
+ },
711
+ delAll() {
712
+ this.selectuserdata = [];
713
+ },
714
+ searchStation() {
715
+ this.getStationData();
716
+ },
717
+ clearUser() {
718
+ this.userdata = [];
719
+ this.selectuserdata = [];
720
+ this.searchValue = '';
721
+ },
722
+ selectTypeChange() {
723
+ this.clearUser();
724
+ },
725
+ // 提前所有待审批人姓名
726
+ getCandidateUserText(candidateUserList) {
727
+ if (!candidateUserList || candidateUserList.length === 0) return '';
728
+ // 提取所有待审批人姓名
729
+ let approvers = candidateUserList.map(user => user.userName).join('、');
730
+ return approvers;
731
+ }
732
+ },
733
+ mounted () {
734
+ this.observer = elementResizeDetectorMaker();
735
+ if (this.$refs.head) {
736
+ this.observer.listenTo(this.$refs.head, this.setExtraHeight);
737
+ }
738
+ if (this.$refs.foot) {
739
+ this.observer.listenTo(this.$refs.foot, this.setExtraHeight2);
740
+ }
741
+ },
742
+ beforeUnmount() {
743
+ if (this.$refs.head) {
744
+ this.observer.removeListener(this.$refs.head, this.setExtraHeight);
745
+ }
746
+ if (this.$refs.foot) {
747
+ this.observer.removeListener(this.$refs.foot, this.setExtraHeight2);
748
+ }
749
+ }
750
+ };
751
+ </script>
752
+
753
+ <style lang="less" scoped>
754
+ .efutureapproval .content .line-wrap::after{
755
+ position: absolute;
756
+ content:'';
757
+ width: 1px;
758
+ height: calc(100% - 42px);
759
+ background-color: #eee;
760
+ }
761
+ .checkbox-group {
762
+ height: 390px;
763
+ overflow-y: auto;
764
+ }
765
+
766
+ .checkbox-group .checkbox{
767
+ padding: 5px 0;
768
+ }
769
+
770
+ .checkbox .icon{
771
+ width: 35px;
772
+ height: 35px;
773
+ color: #fff;
774
+ line-height: 35px;
775
+ font-size: 12px;
776
+ text-align: center;
777
+ border-radius: 50%;
778
+ margin: 0 10px;
779
+ background-color: #AF292E;
780
+ }
781
+
782
+ .checkbox .uname{
783
+ white-space: nowrap;
784
+ text-overflow: ellipsis;
785
+ overflow: hidden;
786
+ }
787
+
788
+ .checkboxrow {
789
+ width: 100%;
790
+ display: flex;
791
+ align-items: center;
792
+ }
793
+
794
+
795
+ .username,
796
+ .user-item {
797
+ position: relative;
798
+ width: 40px;
799
+ height: 40px;
800
+ text-align: center;
801
+ line-height: 38px;
802
+ color: #fff;
803
+ margin-right: 17px;
804
+ border-radius: 50%;
805
+ background-color: #3389ff;
806
+ }
807
+
808
+ .username .icon,
809
+ .user-item .icon {
810
+ position: absolute;
811
+ bottom: -1px;
812
+ right: 0;
813
+ width: 15px;
814
+ height: 15px;
815
+ line-height: 14px;
816
+ border-radius: 50%;
817
+ background-color: #fff;
818
+ }
819
+
820
+ .user-item .icon {
821
+ width: 15px;
822
+ height: 15px;
823
+ }
824
+
825
+ .username .icon .iconfont {
826
+ font-size: 15px;
827
+ }
828
+
829
+ .user-item .icon .iconfont {
830
+ font-size: 15px;
831
+ }
832
+ .checkboxrow {
833
+ .ivu-checkbox-label-text {
834
+ display: flex;
835
+ align-items: center
836
+ }
837
+ }
838
+
839
+ .user-list {
840
+ display: flex;
841
+ flex-direction: column;
842
+ align-items: flex-start;
843
+ }
844
+
845
+ .user-list .user-list-wrap {
846
+ display: flex;
847
+ margin: 10px 0px;
848
+ align-items: center;
849
+ }
850
+
851
+ .user-list-wrap .name {
852
+ color: #808385;
853
+ }
854
+
855
+
856
+ .user-item {
857
+ width: 40px;
858
+ min-width: 40px;
859
+ height: 40px;
860
+ margin-right: 0;
861
+ line-height: 40px;
862
+ }
863
+ </style>