index.vue 46 KB

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