index.vue 46 KB

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