index.vue 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196
  1. <template>
  2. <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
  3. <template slot-scope="{ activeKey, data }">
  4. <div
  5. :style="{
  6. width: '100%',
  7. height: activeKey == 'list' ? '100%' : '0px',
  8. overflow: 'hidden'
  9. }"
  10. >
  11. <template-page
  12. ref="pageRef"
  13. :get-list="getList"
  14. :table-attributes="tableAttributes"
  15. :table-events="tableEvents"
  16. :operationColumnWidth="260"
  17. :options-evens-group="optionsEvensGroup"
  18. :moreParameters="moreParameters"
  19. :column-parsing="columnParsing"
  20. :operation="operation()"
  21. :exportList="exportList"
  22. >
  23. <div slot="moreSearch">
  24. <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
  25. <el-radio-button label="">全部</el-radio-button>
  26. <el-radio-button label="WAIT">入住申请待审核</el-radio-button>
  27. <el-radio-button label="WAIT_WORKER">待师傅购买</el-radio-button>
  28. <el-radio-button label="POLICY_WAIT">保险待审核</el-radio-button>
  29. <el-radio-button label="OK">状态正常</el-radio-button>
  30. <el-radio-button label="FAIL">已驳回</el-radio-button>
  31. <el-radio-button label="EXPIRED">证件快过期</el-radio-button>
  32. <el-radio-button label="OVERDUE">证件已过期</el-radio-button>
  33. <el-radio-button label="STOP">已暂停</el-radio-button>
  34. <el-radio-button label="QUIT">已经离职</el-radio-button>
  35. </el-radio-group>
  36. <br /><br />
  37. </div>
  38. </template-page>
  39. </div>
  40. <div
  41. v-if="~['detail', 'edit', 'entryAudit', 'insuranceAudit'].indexOf(activeKey)"
  42. style="box-sizing: border-box; padding: 16px"
  43. >
  44. <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
  45. <zj-form-module
  46. title="详情"
  47. label-width="100px"
  48. :showPackUp="false"
  49. :form-data="formData.user"
  50. :form-items="formItems"
  51. >
  52. </zj-form-module>
  53. <zj-form-module
  54. title="证件信息"
  55. label-width="100px"
  56. :showPackUp="false"
  57. :form-data="formData"
  58. :form-items="formItems2"
  59. >
  60. </zj-form-module>
  61. <zj-form-module
  62. title="保险信息"
  63. label-width="100px"
  64. :showPackUp="false"
  65. :form-data="formData"
  66. :form-items="formItems3"
  67. >
  68. </zj-form-module>
  69. </zj-form-container>
  70. <div slot="footer" class="dialog-footer">
  71. <el-button
  72. v-if="[2, 3].includes(openType)"
  73. size="mini"
  74. type="primary"
  75. @click="
  76. () => {
  77. if ([2].includes(openType)) {
  78. formData.examineStatus = 'OK'
  79. } else if ([3].includes(openType)) {
  80. formData.policyExamineStatus = 'OK'
  81. }
  82. shenheBool = true
  83. }
  84. "
  85. >审核通过</el-button
  86. >
  87. <el-button
  88. v-if="[2, 3].includes(openType)"
  89. size="mini"
  90. type="danger"
  91. @click="
  92. () => {
  93. if ([2].includes(openType)) {
  94. formData.examineStatus = 'FAIL'
  95. } else if ([3].includes(openType)) {
  96. formData.policyExamineStatus = 'FAIL'
  97. }
  98. shenheBool = true
  99. }
  100. "
  101. >审核驳回</el-button
  102. >
  103. <el-button v-if="activeKey == 'edit'" size="mini" type="primary" @click="submit">保存</el-button>
  104. <el-button size="mini" @click="data.removeTab()">取 消</el-button>
  105. </div>
  106. </div>
  107. </template>
  108. <el-dialog title="审核" width="700px" :modal="false" :visible.sync="shenheBool" :before-close="shenheClose">
  109. <el-form ref="form" :model="formData" label-width="120px" size="mini">
  110. <el-form-item label="入驻网点">
  111. <span>{{ `(${formData.websitId})${formData.websitName}` }}</span>
  112. </el-form-item>
  113. <el-form-item label="师傅名称">
  114. <span>{{ formData.user && formData.user.nickName }}</span>
  115. </el-form-item>
  116. <el-form-item label="联系电话">
  117. <span>{{ formData.user && formData.user.mobile }}</span>
  118. </el-form-item>
  119. <el-form-item label="师傅编号">
  120. <span>{{ formData.user && formData.user.workerNumber }}</span>
  121. </el-form-item>
  122. <el-form-item label="审核备注" v-if="[2].includes(openType)">
  123. <el-input type="textarea" v-model="formData.examineRemark"></el-input>
  124. </el-form-item>
  125. <el-form-item label="审核备注" v-if="[3].includes(openType)">
  126. <el-input type="textarea" v-model="formData.policyExamineRemark"></el-input>
  127. </el-form-item>
  128. <el-form-item>
  129. <div style="text-align: right">
  130. <el-button @click="shenheClose">取消</el-button>
  131. <el-button type="primary" v-if="[2].includes(openType)" @click="examineWait">确定</el-button>
  132. <el-button type="primary" v-if="[3].includes(openType)" @click="workerManagerExamine">确定</el-button>
  133. </div>
  134. </el-form-item>
  135. </el-form>
  136. </el-dialog>
  137. </zj-tab-page>
  138. </template>
  139. <script>
  140. import TemplatePage from '@/components/template/template-page-1.vue'
  141. import import_mixin from '@/components/template/import_mixin.js'
  142. import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
  143. import {
  144. memberListPageV2,
  145. memberPageExport,
  146. workerManagerDetail,
  147. workerManagerActivation,
  148. workerManagerAgainQuit,
  149. workerManagerQuit,
  150. workerManagerStop,
  151. workerManagerUpdate,
  152. workerManagerExamineWait,
  153. workerManagerExamine
  154. } from '@/api/masterManagement'
  155. import operation_mixin from '@/components/template/operation_mixin.js'
  156. import ImageUpload from '@/components/file-upload'
  157. import editTable from '@/components/template/editTable.js'
  158. export default {
  159. components: { TemplatePage, ImageUpload },
  160. mixins: [import_mixin, operation_mixin, editTable],
  161. data() {
  162. return {
  163. // 事件组合
  164. optionsEvensGroup: [],
  165. // 表格属性
  166. tableAttributes: {
  167. // 启用勾选列
  168. selectColumn: false,
  169. 'row-class-name': this.tableRowClassName
  170. },
  171. // 表格事件
  172. tableEvents: {
  173. 'selection-change': this.selectionChange
  174. },
  175. // 勾选选中行
  176. recordSelected: [],
  177. /** 表单变量 */
  178. formData: {
  179. bankAccount: '',
  180. companyWechatId: '',
  181. companyWechatName: '',
  182. createTime: '',
  183. examineBy: '',
  184. examineRemark: '',
  185. examineStatus: '',
  186. examineTime: '',
  187. slaveWorkerId: '',
  188. userId: '',
  189. websitId: '',
  190. websitName: '',
  191. policyExamineRemark: '',
  192. workerNumber: '',
  193. workerImgs: [],
  194. user: {},
  195. workerImgsCp: [{ type: '', number: '', startTime: '', endTime: '', reexamineTime: '', filesList: [] }],
  196. workerPolicies: []
  197. },
  198. examineStatus: '',
  199. openType: 0,
  200. shenheBool: false
  201. }
  202. },
  203. computed: {
  204. // 更多参数
  205. moreParameters() {
  206. return []
  207. },
  208. formItems() {
  209. return [
  210. {
  211. md: 6,
  212. isShow: true,
  213. name: 'el-select',
  214. options: [
  215. { label: '入住申请待审核', value: 'WAIT' },
  216. { label: '待师傅购买', value: 'WAIT_WORKER' },
  217. { label: '保险待审核', value: 'POLICY_WAIT' },
  218. { label: '状态正常', value: 'OK' },
  219. { label: '已驳回', value: 'FAIL' },
  220. { label: '证件快过期', value: 'EXPIRED' },
  221. { label: '证件已过期', value: 'OVERDUE' },
  222. { label: '已暂停', value: 'STOP' },
  223. { label: '已经离职', value: 'QUIT' }
  224. ],
  225. attributes: { placeholder: '请输入', disabled: true },
  226. formItemAttributes: {
  227. label: '状态',
  228. prop: 'examineStatus_t',
  229. rules: []
  230. }
  231. },
  232. {
  233. md: 6,
  234. isShow: true,
  235. name: 'el-select',
  236. options: [
  237. { label: '普通用户', value: 'GENERAL' },
  238. { label: '分销员', value: 'SERVICE' },
  239. { label: '师傅', value: 'WORKER' }
  240. ],
  241. attributes: { placeholder: '请输入', disabled: true },
  242. formItemAttributes: {
  243. label: '用户类型',
  244. prop: 'type',
  245. rules: []
  246. }
  247. },
  248. {
  249. md: 6,
  250. isShow: true,
  251. name: 'el-input',
  252. attributes: { placeholder: '请输入' },
  253. formItemAttributes: {
  254. label: '师傅名称',
  255. prop: 'nickName',
  256. rules: []
  257. }
  258. },
  259. {
  260. md: 6,
  261. isShow: true,
  262. name: 'el-input',
  263. attributes: { placeholder: '请输入' },
  264. formItemAttributes: {
  265. label: '联系电话',
  266. prop: 'mobile',
  267. rules: []
  268. }
  269. },
  270. {
  271. md: 12,
  272. isShow: true,
  273. name: 'el-input',
  274. attributes: { placeholder: '请输入', disabled: true },
  275. formItemAttributes: {
  276. label: '入驻网点',
  277. prop: 'websitName',
  278. rules: []
  279. }
  280. },
  281. {
  282. md: 6,
  283. isShow: true,
  284. name: 'el-input',
  285. attributes: { placeholder: '请输入', disabled: true },
  286. formItemAttributes: {
  287. label: '师傅编号',
  288. prop: 'workerNumber',
  289. rules: []
  290. }
  291. },
  292. {
  293. md: 6,
  294. isShow: true,
  295. name: 'el-input',
  296. attributes: { placeholder: '请输入' },
  297. formItemAttributes: {
  298. label: '银行卡',
  299. prop: 'bankAccount',
  300. rules: []
  301. }
  302. },
  303. {
  304. md: 24,
  305. isShow: true,
  306. name: 'el-input',
  307. attributes: {
  308. placeholder: '请输入',
  309. type: 'textarea'
  310. },
  311. formItemAttributes: {
  312. label: '备注',
  313. prop: 'examineRemark',
  314. rules: []
  315. }
  316. }
  317. ]
  318. },
  319. formItems2() {
  320. return [
  321. {
  322. name: 'slot-component',
  323. md: 24,
  324. formItemAttributes: {
  325. 'label-width': '0px',
  326. label: '',
  327. prop: 'items',
  328. rules: []
  329. },
  330. render: (h, { props }) => {
  331. return (
  332. <zj-table
  333. columns={[
  334. {
  335. columnAttributes: {
  336. label: '证件名称',
  337. prop: 'type'
  338. },
  339. render: (h, { row, column, index }) => {
  340. return (
  341. <div class="redbordererr">
  342. <el-form-item
  343. label=""
  344. label-width="0px"
  345. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  346. >
  347. <el-select
  348. value={row[column.columnAttributes.prop]}
  349. onInput={val => {
  350. row[column.columnAttributes.prop] = val
  351. }}
  352. placeholder="请选择"
  353. disabled={true}
  354. >
  355. {[
  356. { value: 'HIGHT', label: '高空证' },
  357. { value: 'ID', label: '身份证' }
  358. ].map((item, index_) => (
  359. <el-option key={index_} label={item.label} value={item.value}></el-option>
  360. ))}
  361. </el-select>
  362. </el-form-item>
  363. </div>
  364. )
  365. }
  366. },
  367. {
  368. columnAttributes: {
  369. label: '证件号码',
  370. prop: 'number'
  371. },
  372. render: (h, { row, column, index }) => {
  373. return (
  374. <div class="redbordererr">
  375. <el-input
  376. value={row[column.columnAttributes.prop]}
  377. onInput={val => {
  378. row[column.columnAttributes.prop] = val
  379. }}
  380. placeholder="请输入内容"
  381. ></el-input>
  382. </div>
  383. )
  384. }
  385. },
  386. {
  387. columnAttributes: {
  388. label: '有效期开始日期',
  389. prop: 'startTime'
  390. },
  391. render: (h, { row, column, index }) => {
  392. return (
  393. <div class="redbordererr">
  394. <el-form-item
  395. label=""
  396. label-width="0px"
  397. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  398. >
  399. <el-date-picker
  400. value={row[column.columnAttributes.prop]}
  401. onInput={val => {
  402. row[column.columnAttributes.prop] = val
  403. }}
  404. type="date"
  405. placeholder="选择日期"
  406. ></el-date-picker>
  407. </el-form-item>
  408. </div>
  409. )
  410. }
  411. },
  412. {
  413. columnAttributes: {
  414. label: '有效期结束日期',
  415. prop: 'endTime'
  416. },
  417. render: (h, { row, column, index }) => {
  418. return (
  419. <div class="redbordererr">
  420. <el-form-item
  421. label=""
  422. label-width="0px"
  423. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  424. >
  425. <el-date-picker
  426. value={row[column.columnAttributes.prop]}
  427. onInput={val => {
  428. row[column.columnAttributes.prop] = val
  429. }}
  430. type="date"
  431. placeholder="选择日期"
  432. ></el-date-picker>
  433. </el-form-item>
  434. </div>
  435. )
  436. }
  437. },
  438. {
  439. columnAttributes: {
  440. label: '复审日期',
  441. prop: 'reexamineTime'
  442. },
  443. render: (h, { row, column, index }) => {
  444. if (index) {
  445. return (
  446. <div class="redbordererr">
  447. <el-form-item
  448. label=""
  449. label-width="0px"
  450. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  451. >
  452. <el-date-picker
  453. value={row[column.columnAttributes.prop]}
  454. onInput={val => {
  455. row[column.columnAttributes.prop] = val
  456. }}
  457. type="date"
  458. placeholder="选择日期"
  459. ></el-date-picker>
  460. </el-form-item>
  461. </div>
  462. )
  463. } else {
  464. return null
  465. }
  466. }
  467. },
  468. {
  469. columnAttributes: {
  470. label: '正面',
  471. prop: 'positive',
  472. width: 130
  473. },
  474. render: (h, { row, column, index }) => {
  475. return (
  476. <div class="redbordererr">
  477. <ImageUpload fileList={row[column.columnAttributes.prop]} limit={1} isEdit={true} />
  478. </div>
  479. )
  480. }
  481. },
  482. {
  483. columnAttributes: {
  484. label: '反面',
  485. prop: 'negative',
  486. width: 130
  487. },
  488. render: (h, { row, column, index }) => {
  489. return (
  490. <div class="redbordererr">
  491. <ImageUpload fileList={row[column.columnAttributes.prop]} limit={1} isEdit={true} />
  492. </div>
  493. )
  494. }
  495. }
  496. ]}
  497. table-data={this.formData.workerImgsCp || []}
  498. />
  499. )
  500. }
  501. }
  502. ]
  503. },
  504. formItems3() {
  505. return [
  506. {
  507. name: 'slot-component',
  508. md: 24,
  509. formItemAttributes: {
  510. label: '',
  511. 'label-width': '0px',
  512. prop: 'workerPolicies',
  513. rules: []
  514. },
  515. render: (h, { props, onInput }) => {
  516. var { value } = props
  517. return this.convertTableJson(
  518. value,
  519. [
  520. {
  521. columnAttributes: {
  522. label: '保险公司名字',
  523. prop: 'company',
  524. 'min-width': '200px'
  525. },
  526. render: (h, { row, column, index }) => {
  527. return (
  528. <div class="redbordererr">
  529. <el-form-item
  530. label=""
  531. label-width="0px"
  532. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  533. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  534. >
  535. <el-input
  536. value={row[column.columnAttributes.prop]}
  537. onInput={val => {
  538. row[column.columnAttributes.prop] = val
  539. }}
  540. placeholder="请输入内容"
  541. disabled={row.type == 'IN'}
  542. ></el-input>
  543. </el-form-item>
  544. </div>
  545. )
  546. }
  547. },
  548. {
  549. columnAttributes: {
  550. label: '购买类型',
  551. prop: 'type',
  552. 'min-width': '200px'
  553. },
  554. render: (h, { row, column, index }) => {
  555. return (
  556. <div class="redbordererr">
  557. <el-form-item
  558. label=""
  559. label-width="0px"
  560. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  561. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  562. >
  563. <el-select
  564. value={row[column.columnAttributes.prop]}
  565. onInput={val => {
  566. row[column.columnAttributes.prop] = val
  567. }}
  568. placeholder="请输入内容"
  569. disabled={true}
  570. >
  571. {[
  572. { label: '线下购买', value: 'LINE' },
  573. { label: '在线购买', value: 'IN' }
  574. ].map((item, index_) => (
  575. <el-option key={index_} label={item.label} value={item.value}></el-option>
  576. ))}
  577. </el-select>
  578. </el-form-item>
  579. </div>
  580. )
  581. }
  582. },
  583. {
  584. columnAttributes: {
  585. label: '保险单名称',
  586. prop: 'policyName',
  587. 'min-width': '200px'
  588. },
  589. render: (h, { row, column, index }) => {
  590. return (
  591. <div class="redbordererr">
  592. <el-form-item
  593. label=""
  594. label-width="0px"
  595. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  596. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  597. >
  598. <el-input
  599. value={row[column.columnAttributes.prop]}
  600. onInput={val => {
  601. row[column.columnAttributes.prop] = val
  602. }}
  603. placeholder="请输入内容"
  604. disabled={row.type == 'IN'}
  605. ></el-input>
  606. </el-form-item>
  607. </div>
  608. )
  609. }
  610. },
  611. {
  612. columnAttributes: {
  613. label: '保单类型',
  614. prop: 'policyType',
  615. 'min-width': '200px'
  616. },
  617. render: (h, { row, column, index }) => {
  618. return (
  619. <div class="redbordererr">
  620. <el-form-item
  621. label=""
  622. label-width="0px"
  623. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  624. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  625. >
  626. <el-select
  627. disabled={row.type == 'IN'}
  628. value={row[column.columnAttributes.prop]}
  629. onInput={val => {
  630. row[column.columnAttributes.prop] = val
  631. }}
  632. placeholder="请输入内容"
  633. >
  634. {[
  635. { label: '意外险', value: 'AC' },
  636. { label: '雇主险', value: 'EM' },
  637. { label: '工伤险', value: 'IN' }
  638. ].map((item, index_) => (
  639. <el-option key={index_} label={item.label} value={item.value}></el-option>
  640. ))}
  641. </el-select>
  642. </el-form-item>
  643. </div>
  644. )
  645. }
  646. },
  647. {
  648. columnAttributes: {
  649. label: '保单状态',
  650. prop: 'status',
  651. 'min-width': '200px'
  652. },
  653. render: (h, { row, column, index }) => {
  654. return (
  655. <div class="redbordererr">
  656. <el-form-item
  657. label=""
  658. label-width="0px"
  659. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  660. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  661. >
  662. <el-select
  663. disabled={true}
  664. value={row[column.columnAttributes.prop]}
  665. onInput={val => {
  666. row[column.columnAttributes.prop] = val
  667. }}
  668. placeholder="请输入内容"
  669. >
  670. {[
  671. { label: '保障中', value: 'ON' },
  672. { label: '失效', value: 'OFF' },
  673. { label: '待生效', value: 'WAIT_ON' }
  674. ].map((item, index_) => (
  675. <el-option key={index_} label={item.label} value={item.value}></el-option>
  676. ))}
  677. </el-select>
  678. </el-form-item>
  679. </div>
  680. )
  681. }
  682. },
  683. {
  684. columnAttributes: {
  685. label: '保险单号',
  686. prop: 'policyOrder',
  687. 'min-width': '200px'
  688. },
  689. render: (h, { row, column, index }) => {
  690. return (
  691. <div class="redbordererr">
  692. <el-form-item
  693. label=""
  694. label-width="0px"
  695. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  696. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  697. >
  698. <el-input
  699. disabled={row.type == 'IN'}
  700. value={row[column.columnAttributes.prop]}
  701. onInput={val => {
  702. row[column.columnAttributes.prop] = val
  703. }}
  704. placeholder="请输入内容"
  705. ></el-input>
  706. </el-form-item>
  707. </div>
  708. )
  709. }
  710. },
  711. {
  712. columnAttributes: {
  713. label: '有效期开始日期',
  714. prop: 'startTime',
  715. 'min-width': '200px'
  716. },
  717. render: (h, { row, column, index }) => {
  718. return (
  719. <div class="redbordererr">
  720. <el-form-item
  721. label=""
  722. label-width="0px"
  723. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  724. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  725. >
  726. <el-date-picker
  727. value={row[column.columnAttributes.prop]}
  728. onInput={val => {
  729. row[column.columnAttributes.prop] = val
  730. }}
  731. type="date"
  732. placeholder="选择日期"
  733. ></el-date-picker>
  734. </el-form-item>
  735. </div>
  736. )
  737. }
  738. },
  739. {
  740. columnAttributes: {
  741. label: '有效期结束日期',
  742. prop: 'endTime',
  743. 'min-width': '200px'
  744. },
  745. render: (h, { row, column, index }) => {
  746. return (
  747. <div class="redbordererr">
  748. <el-form-item
  749. label=""
  750. label-width="0px"
  751. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  752. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  753. >
  754. <el-date-picker
  755. value={row[column.columnAttributes.prop]}
  756. onInput={val => {
  757. row[column.columnAttributes.prop] = val
  758. }}
  759. type="date"
  760. placeholder="选择日期"
  761. ></el-date-picker>
  762. </el-form-item>
  763. </div>
  764. )
  765. }
  766. },
  767. {
  768. columnAttributes: {
  769. label: '附件',
  770. prop: 'policyUrls',
  771. 'min-width': '440px'
  772. },
  773. render: (h, { row, column, index }) => {
  774. return (
  775. <div class="redbordererr">
  776. <ImageUpload fileList={row[column.columnAttributes.prop]} limit={100} isEdit={true} />
  777. </div>
  778. )
  779. }
  780. }
  781. ],
  782. {
  783. isEdit: true,
  784. isAdd: this.openType !== 0,
  785. isDel: true,
  786. isUpdate: false,
  787. isConfirm: false
  788. },
  789. {
  790. add: () => {
  791. this.formData.workerPolicies.push({
  792. company: '',
  793. endTime: '',
  794. exTime: '',
  795. policyId: '',
  796. policyName: '',
  797. policyOrder: '',
  798. policyPrice: '',
  799. policyType: '',
  800. startTime: '',
  801. status: '',
  802. type: 'LINE',
  803. websitId: '',
  804. websitName: '',
  805. websitUserId: '',
  806. workerId: '',
  807. workerName: ''
  808. })
  809. this.isEditTableIndex = this.formData.workerPolicies.length - 1
  810. },
  811. delete: ({ row, column, index }, cb) => {
  812. if (this.isEditTableIndex == index) {
  813. this.isEditTableIndex = -1
  814. } else if (this.isEditTableIndex > index) {
  815. this.isEditTableIndex--
  816. }
  817. cb && cb()
  818. }
  819. }
  820. )
  821. }
  822. }
  823. ]
  824. }
  825. },
  826. methods: {
  827. // 切换状态
  828. changeType(val) {
  829. this.$refs.pageRef.refreshList()
  830. },
  831. exportList: memberPageExport,
  832. // 列表请求函数
  833. getList(p) {
  834. try {
  835. var pam = JSON.parse(JSON.stringify(p))
  836. if (this.examineStatus) {
  837. pam.params.push({ param: 'b.examine_status', compare: '=', value: this.examineStatus })
  838. }
  839. return memberListPageV2(pam)
  840. } catch (error) {
  841. console.log(error)
  842. }
  843. },
  844. // 列表导出函数
  845. exportList: memberPageExport,
  846. // 表格列解析渲染数据更改
  847. columnParsing(item, defaultData) {
  848. if (item.jname === 'idCardImg') {
  849. defaultData.render = (h, { row, index, column }) => {
  850. return (
  851. <div style="padding:0 6px;cursor: pointer;">
  852. {row.idCardImg
  853. ? row.idCardImg
  854. .split(',')
  855. .map(url => (
  856. <el-image
  857. src={this.$showImgUrl(url)}
  858. preview-src-list={[this.$showImgUrl(url)]}
  859. fit="fit"
  860. style="width:80px;height:80px;"
  861. />
  862. ))
  863. : null}
  864. </div>
  865. )
  866. }
  867. }
  868. return defaultData
  869. },
  870. // 监听勾选变化
  871. selectionChange(data) {
  872. this.recordSelected = data
  873. },
  874. // 表格操作列
  875. operation() {
  876. return this.operationBtn({
  877. // 详情
  878. detail: {
  879. btnType: 'text',
  880. click: ({ row, index, column }) => {
  881. this.$refs.tabPage.addTab({
  882. activeKey: 'detail',
  883. key: 'detail',
  884. label: '详情',
  885. triggerEvent: () => {
  886. this.guanbi()
  887. this.openType = 0
  888. this.$nextTick(() => {
  889. this.openWindows(row)
  890. })
  891. },
  892. closeEvent: () => {}
  893. })
  894. }
  895. },
  896. // 编辑
  897. edit: {
  898. btnType: 'text',
  899. conditions: ({ row, index, column }) => {
  900. return ['OK', 'FAIL', 'STOP', 'QUIT'].includes(row.examineStatus)
  901. },
  902. click: ({ row, index, column }) => {
  903. this.$refs.tabPage.addTab({
  904. activeKey: 'edit',
  905. key: 'edit',
  906. label: '编辑',
  907. triggerEvent: () => {
  908. this.guanbi()
  909. this.openType = 1
  910. this.$nextTick(() => {
  911. this.openWindows(row)
  912. })
  913. },
  914. closeEvent: () => {}
  915. })
  916. }
  917. },
  918. // 入驻申请审核
  919. entryAudit: {
  920. btnType: 'text',
  921. conditions: ({ row, index, column }) => {
  922. return ['WAIT'].includes(row.examineStatus)
  923. },
  924. click: ({ row, index, column }) => {
  925. this.$refs.tabPage.addTab({
  926. activeKey: 'entryAudit',
  927. key: 'entryAudit',
  928. label: '入驻申请审核',
  929. triggerEvent: () => {
  930. this.guanbi()
  931. this.openType = 2
  932. this.$nextTick(() => {
  933. this.openWindows(row)
  934. })
  935. },
  936. closeEvent: () => {}
  937. })
  938. }
  939. },
  940. // 保险审核
  941. insuranceAudit: {
  942. btnType: 'text',
  943. conditions: ({ row, index, column }) => {
  944. return ['POLICY_WAIT'].includes(row.examineStatus)
  945. },
  946. click: ({ row, index, column }) => {
  947. this.$refs.tabPage.addTab({
  948. activeKey: 'insuranceAudit',
  949. key: 'insuranceAudit',
  950. label: '保险审核',
  951. triggerEvent: () => {
  952. this.guanbi()
  953. this.openType = 3
  954. this.$nextTick(() => {
  955. this.openWindows(row)
  956. })
  957. },
  958. closeEvent: () => {}
  959. })
  960. }
  961. },
  962. // 激活
  963. activate: {
  964. btnType: 'text',
  965. conditions: ({ row, index, column }) => {
  966. return ['STOP'].includes(row.examineStatus)
  967. },
  968. click: ({ row, index, column }) => {
  969. workerManagerActivation({ id: row.id }).then(res => {
  970. this.$message({ type: 'success', message: '激活成功!' })
  971. this.$refs.pageRef.refreshList()
  972. })
  973. }
  974. },
  975. // 重新入职
  976. reEntry: {
  977. btnType: 'text',
  978. conditions: ({ row, index, column }) => {
  979. return ['QUIT'].includes(row.examineStatus)
  980. },
  981. click: ({ row, index, column }) => {
  982. workerManagerAgainQuit({ id: row.id }).then(res => {
  983. this.$message({ type: 'success', message: '入职成功!' })
  984. this.$refs.pageRef.refreshList()
  985. })
  986. }
  987. },
  988. // 暂停
  989. pause: {
  990. btnType: 'text',
  991. conditions: ({ row, index, column }) => {
  992. return ['OK'].includes(row.examineStatus)
  993. },
  994. click: ({ row, index, column }) => {
  995. workerManagerStop({ id: row.id }).then(res => {
  996. this.$message({ type: 'success', message: '暂停成功!' })
  997. this.$refs.pageRef.refreshList()
  998. })
  999. }
  1000. },
  1001. // 离职
  1002. dimission: {
  1003. btnType: 'text',
  1004. conditions: ({ row, index, column }) => {
  1005. return ['OK'].includes(row.examineStatus)
  1006. },
  1007. click: ({ row, index, column }) => {
  1008. workerManagerQuit({ id: row.id }).then(res => {
  1009. this.$message({ type: 'success', message: '离职成功!' })
  1010. this.$refs.pageRef.refreshList()
  1011. })
  1012. }
  1013. },
  1014. // 师傅组别
  1015. masterGroup: {
  1016. btnType: 'text',
  1017. conditions: ({ row, index, column }) => {
  1018. return true
  1019. },
  1020. click: ({ row, index, column }) => {}
  1021. }
  1022. })
  1023. },
  1024. tableRowClassName({ row, rowIndex }) {
  1025. if (row.examineStatus === '待审核') {
  1026. return 'redbackground'
  1027. } else {
  1028. return ''
  1029. }
  1030. },
  1031. guanbi() {
  1032. this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
  1033. this.$data.formData = this.$options.data().formData
  1034. },
  1035. openWindows(row, cb) {
  1036. workerManagerDetail({ id: row.id }).then(res => {
  1037. this.formData = {
  1038. ...res.data,
  1039. user: {
  1040. ...res.data.user,
  1041. examineStatus_t: res.data.examineStatus
  1042. },
  1043. workerImgsCp: [
  1044. {
  1045. type: 'ID',
  1046. number: res.data?.user?.idCard || '',
  1047. startTime: res.data?.user?.idCardStartTime || '',
  1048. endTime: res.data?.user?.idCardEndTime || '',
  1049. reexamineTime: '',
  1050. positive:
  1051. (res.data?.workerImgs || [])
  1052. .filter(item => item.type == 'ID')
  1053. .map(item => ({
  1054. name: item.imgName,
  1055. url: item.imgUrl
  1056. }))?.[0] || [],
  1057. negative:
  1058. (res.data?.workerImgs || [])
  1059. .filter(item => item.type == 'ID')
  1060. .map(item => ({
  1061. name: item.imgName,
  1062. url: item.imgUrl
  1063. }))?.[1] || []
  1064. },
  1065. {
  1066. type: 'HIGHT',
  1067. number: res.data?.user?.number || '',
  1068. startTime: res.data?.user?.startTime || '',
  1069. endTime: res.data?.user?.endTime || '',
  1070. reexamineTime: res.data?.user?.hightExamineTime || '',
  1071. positive:
  1072. (res.data?.workerImgs || [])
  1073. .filter(item => item.type == 'HIGHT')
  1074. .map(item => ({
  1075. name: item.imgName,
  1076. url: item.imgUrl
  1077. }))?.[0] || [],
  1078. negative:
  1079. (res.data?.workerImgs || [])
  1080. .filter(item => item.type == 'HIGHT')
  1081. .map(item => ({
  1082. name: item.imgName,
  1083. url: item.imgUrl
  1084. }))?.[1] || []
  1085. }
  1086. ],
  1087. workerPolicies: res.data?.workerPolicies?.map(item => {
  1088. return {
  1089. ...item,
  1090. policyUrls: item.policyUrl.split(',').map(url => ({ url }))
  1091. }
  1092. })
  1093. }
  1094. cb?.()
  1095. })
  1096. },
  1097. getPam() {
  1098. return {
  1099. ...this.formData,
  1100. user: {
  1101. ...this.formData.user,
  1102. idCard: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.number,
  1103. idCardStartTime: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.startTime,
  1104. idCardEndTime: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.endTime,
  1105. number: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.number,
  1106. startTime: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.startTime,
  1107. endTime: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.endTime,
  1108. hightExamineTime: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.reexamineTime
  1109. },
  1110. workerImgs: [
  1111. {
  1112. type: 'ID',
  1113. imgName: '身份证正面',
  1114. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.positive?.[0]?.url || ''
  1115. },
  1116. {
  1117. type: 'ID',
  1118. imgName: '身份证反面',
  1119. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.negative?.[0]?.url || ''
  1120. },
  1121. {
  1122. type: 'HIGHT',
  1123. imgName: '高空证正面',
  1124. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.positive?.[0]?.url || ''
  1125. },
  1126. {
  1127. type: 'HIGHT',
  1128. imgName: '高空证反面',
  1129. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.negative?.[0]?.url || ''
  1130. }
  1131. ],
  1132. workerPolicies: this.formData?.workerPolicies?.map(item => {
  1133. return {
  1134. ...item,
  1135. policyUrl: item.policyUrls?.map(v => v.url)?.join(',')
  1136. }
  1137. })
  1138. }
  1139. },
  1140. submit() {
  1141. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1142. if (valid) {
  1143. workerManagerUpdate(this.getPam()).then(res => {
  1144. this.$message({ type: 'success', message: `保存成功!` })
  1145. this.guanbi()
  1146. this.$refs.pageRef.refreshList()
  1147. })
  1148. }
  1149. })
  1150. },
  1151. examineWait() {
  1152. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1153. if (valid) {
  1154. workerManagerExamineWait(this.getPam()).then(res => {
  1155. this.$message({ type: 'success', message: `保存成功!` })
  1156. this.shenheClose()
  1157. this.$refs.pageRef.refreshList()
  1158. })
  1159. }
  1160. })
  1161. },
  1162. workerManagerExamine() {
  1163. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1164. if (valid) {
  1165. workerManagerExamine(this.getPam()).then(res => {
  1166. this.$message({ type: 'success', message: `保存成功!` })
  1167. this.shenheClose()
  1168. this.$refs.pageRef.refreshList()
  1169. })
  1170. }
  1171. })
  1172. },
  1173. shenheClose() {
  1174. this.shenheBool = false
  1175. }
  1176. }
  1177. }
  1178. </script>
  1179. <style lang="scss" scoped>
  1180. .tab {
  1181. padding: 20px 20px 0 20px;
  1182. }
  1183. </style>
  1184. <style lang="scss">
  1185. .redbackground {
  1186. background: rgb(248, 185, 185) !important;
  1187. }
  1188. .lcsebackground {
  1189. background: rgb(212, 245, 212) !important;
  1190. }
  1191. .dialog-footer {
  1192. text-align: right !important;
  1193. }
  1194. </style>