detail.vue 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028
  1. <template>
  2. <div>
  3. <Toptitle>
  4. <template #right>
  5. <span v-show="oa_state === 0" style="color:#22a92c;height: 30px;line-height: 30px;margin-right: 10px;font-size: 16px;cursor: pointer" @click="handleShowCheckMan">审核中...</span>
  6. <Button
  7. type="primary"
  8. ghost
  9. @click="handleSave"
  10. v-show="type != 3 && !formData.status"
  11. style="margin-right: 10px"
  12. >保存</Button
  13. >
  14. <Button style="margin-right:10px" type="warning" ghost @click="handleCheck(1)" v-show="type != 1&& formData.status==2"
  15. >弃审红冲</Button
  16. >
  17. <Button style="margin-right:10px" type="primary" @click="handleCheck(0)" v-show="type != 1&& formData.status<=0"
  18. >审核</Button
  19. >
  20. <Button
  21. type="primary"
  22. ghost
  23. @click="is_show = true"
  24. style="margin-right: 10px"
  25. v-show="type != 3 && !formData.status"
  26. >新增车主信息</Button
  27. >
  28. <Button style="margin-right: 10px" type="success" ghost v-show="type != 1&&oa_state==1&& formData.status==1" @click="handlePassModal(1)">通过</Button>
  29. <Button style="margin-right: 10px" type="error" ghost v-show="type != 1&&oa_state==1&& formData.status==1" @click="handlePassModal(0)">驳回</Button>
  30. <Button style="margin-right: 10px" type="warning" v-show="type != 1&&oa_state==1&& formData.status==1" @click="handlePassModalOther">转签</Button>
  31. <Button type="warning" ghost v-show="type != 1 && formData.status==1" @click="handleOaModal">审核详情</Button>
  32. </template>
  33. </Toptitle>
  34. <div class="content">
  35. <div class="content_title">施工单</div>
  36. <Form :label-width="100" class="form">
  37. <FormItem label="施工单号" class="item">
  38. <Input
  39. disabled
  40. placeholder="自动带出"
  41. clearable
  42. v-model="formData.order_number"
  43. />
  44. </FormItem>
  45. <!-- <FormItem label="原施工单号" class="item"></FormItem> -->
  46. <FormItem label="施工日期" class="item">
  47. <DatePicker
  48. type="date"
  49. placeholder="年/月/日"
  50. style="width: 100%"
  51. v-model="formData.construction_time"
  52. ></DatePicker>
  53. </FormItem>
  54. <FormItem label="施工技师" class="item">
  55. <Select
  56. transfer
  57. clearable
  58. filterable
  59. v-model="formData.construction_person"
  60. :disabled="formData.four_shop_id ? false : true"
  61. >
  62. <Option
  63. v-for="item in constructionPersonList"
  64. :key="item.id"
  65. :value="item.id"
  66. :label="item.title"
  67. :disabled="item.disable"
  68. />
  69. </Select>
  70. </FormItem>
  71. <FormItem label="4s店名称" class="item">
  72. <Select
  73. transfer
  74. filterable
  75. clearable
  76. v-model="formData.four_shop_id"
  77. @on-change="handleSelectFourShop"
  78. >
  79. <Option
  80. v-for="item in fourShopList"
  81. :key="item.id"
  82. :value="item.id"
  83. :label="item.title"
  84. />
  85. </Select>
  86. </FormItem>
  87. <FormItem label="所属仓库" class="item">
  88. <Select
  89. transfer
  90. filterable
  91. clearable
  92. disabled
  93. placeholder="自动带出"
  94. v-model="formData.storehouse_id"
  95. >
  96. <Option
  97. v-for="item in storehouseList"
  98. :key="item.id"
  99. :value="item.id"
  100. :label="item.title"
  101. />
  102. </Select>
  103. </FormItem>
  104. <FormItem label="所属集团" class="item">
  105. <Select
  106. transfer
  107. filterable
  108. clearable
  109. disabled
  110. placeholder="自动带出"
  111. v-model="formData.company_id"
  112. >
  113. <Option
  114. v-for="item in companyList"
  115. :key="item.id"
  116. :value="item.id"
  117. :label="item.title"
  118. />
  119. </Select>
  120. </FormItem>
  121. <FormItem label="所属区域" class="item">
  122. <Select
  123. transfer
  124. filterable
  125. clearable
  126. disabled
  127. placeholder="自动带出"
  128. v-model="formData.area"
  129. >
  130. <Option
  131. v-for="item in areaList"
  132. :key="item.id"
  133. :value="item.id"
  134. :label="item.title"
  135. />
  136. </Select>
  137. </FormItem>
  138. <FormItem label="区域经理" class="item">
  139. <Select
  140. transfer
  141. filterable
  142. clearable
  143. disabled
  144. placeholder="自动带出"
  145. v-model="formData.regional_manager"
  146. >
  147. <Option
  148. v-for="item in employeeList"
  149. :key="item.id"
  150. :value="item.id"
  151. :label="item.emp_name"
  152. />
  153. </Select>
  154. </FormItem>
  155. <FormItem label="联系人" class="item">
  156. <Input
  157. v-model="formData.contract_person"
  158. clearable
  159. disabled
  160. placeholder="自动带出"
  161. />
  162. </FormItem>
  163. <FormItem label="联系方式" class="item">
  164. <Input
  165. v-model="formData.contract_phone"
  166. clearable
  167. disabled
  168. placeholder="自动带出"
  169. />
  170. </FormItem>
  171. <FormItem label="4s店地址" class="item">
  172. <Input
  173. v-model="formData.address"
  174. clearable
  175. disabled
  176. placeholder="自动带出"
  177. />
  178. </FormItem>
  179. <FormItem label="施工产品类型" class="item">
  180. <Select
  181. transfer
  182. filterable
  183. clearable
  184. v-model="formData.basic_type_item_id"
  185. @on-change="handleChangeBasicType"
  186. >
  187. <Option
  188. v-for="item in workProductList"
  189. :key="item.id"
  190. :value="item.id"
  191. :label="item.title"
  192. />
  193. </Select>
  194. </FormItem>
  195. <FormItem label="业务类型" class="item">
  196. <Select
  197. transfer
  198. clearable
  199. :disabled="formData.status>0"
  200. v-model="formData.basic_type_bussiness_id"
  201. @on-change="handleSelectBID"
  202. >
  203. <Option
  204. v-for="item in workList"
  205. :key="item.id"
  206. :value="item.id"
  207. :label="item.title"
  208. />
  209. </Select>
  210. </FormItem>
  211. <FormItem label="特殊情况" class="item">
  212. <Select
  213. transfer
  214. filterable
  215. clearable
  216. v-model="formData.basic_type_special_id"
  217. >
  218. <Option
  219. v-for="item in specialList"
  220. :key="item.id"
  221. :value="item.id"
  222. :label="item.title"
  223. />
  224. </Select>
  225. </FormItem>
  226. <FormItem label="车架号" class="item">
  227. <Input v-model="formData.vin_no" readonly placeholder="请选择">
  228. <template slot="suffix">
  229. <a style="width: 30px;position: relative;right: 4px;top: 6px;display: inline-block" @click="handleChooseVin">选择</a>
  230. </template>
  231. </Input>
  232. <!-- <Select-->
  233. <!-- transfer-->
  234. <!-- filterable-->
  235. <!-- clearable-->
  236. <!-- v-model="formData.vin_no"-->
  237. <!-- @on-change="handleSelectVin"-->
  238. <!-- allow-create-->
  239. <!-- @on-create="handleCreateVin"-->
  240. <!-- >-->
  241. <!-- <Option-->
  242. <!-- v-for="(item, index) in ownerList"-->
  243. <!-- :key="index"-->
  244. <!-- :value="item.vin_no"-->
  245. <!-- :label="item.vin_no"-->
  246. <!-- />-->
  247. <!-- </Select>-->
  248. </FormItem>
  249. <FormItem label="车辆品牌" class="item">
  250. <Select
  251. transfer
  252. filterable
  253. clearable
  254. v-model="formData.car_type"
  255. :placeholder="formData.own_id === 0 ? '请选择' : '自动带出'"
  256. :disabled="formData.own_id === 0 ? false : true"
  257. @on-change="handleChangeCarType"
  258. >
  259. <Option
  260. v-for="item in carTypeList"
  261. :key="item.id"
  262. :value="item.id"
  263. :label="item.title"
  264. />
  265. </Select>
  266. </FormItem>
  267. <FormItem label="车辆型号" class="item">
  268. <Select
  269. transfer
  270. filterable
  271. clearable
  272. v-model="formData.car_file_id"
  273. :placeholder="formData.own_id === 0 ? '请选择' : '自动带出'"
  274. :disabled="formData.own_id === 0 ? false : true"
  275. @on-change="handleSelectCarFile"
  276. >
  277. <Option
  278. v-for="item in SureCarFilesList"
  279. :key="item.id"
  280. :value="item.id"
  281. :label="item.name"
  282. />
  283. </Select>
  284. </FormItem>
  285. <FormItem label="是否大型车" class="item">
  286. <Input
  287. disabled
  288. placeholder="自动带出"
  289. :value="
  290. formData.is_big === 1 ? '是' : formData.is_big === 0 ? '否' : ''
  291. "
  292. />
  293. </FormItem>
  294. <FormItem label="车主姓名" class="item">
  295. <Select
  296. transfer
  297. filterable
  298. clearable
  299. v-model="formData.name_id"
  300. :disabled="!formData.vin_no"
  301. @on-change="handleSelectName"
  302. v-show="!is_create"
  303. filter-by-label
  304. >
  305. <Option
  306. v-for="item in nameList"
  307. :key="item.id"
  308. :value="item.id"
  309. :label="item.name"
  310. />
  311. </Select>
  312. <Input
  313. clearable
  314. v-model="formData.own_name"
  315. v-show="is_create"
  316. placeholder="请输入"
  317. />
  318. </FormItem>
  319. <FormItem label="车主联系方式" class="item">
  320. <Select
  321. transfer
  322. filterable
  323. clearable
  324. v-model="formData.name_id"
  325. @on-change="handleSelectName"
  326. :disabled="!formData.vin_no"
  327. v-show="!is_create"
  328. filter-by-label
  329. >
  330. <Option
  331. v-for="item in nameList"
  332. :key="item.id"
  333. :value="item.id"
  334. :label="item.phone"
  335. >{{item.label}}</Option>
  336. </Select>
  337. <Input
  338. clearable
  339. v-model="formData.own_phone"
  340. v-show="is_create"
  341. placeholder="请输入"
  342. />
  343. </FormItem>
  344. <FormItem label="车表检查" class="item">
  345. <Select filterable clearable v-model="formData.surface" transfer>
  346. <Option :value="1" label="完好" />
  347. <Option :value="2" label="划痕" />
  348. </Select>
  349. </FormItem>
  350. <FormItem label="内饰检查" class="item">
  351. <Select filterable clearable v-model="formData.inside" transfer>
  352. <Option :value="1" label="完好" />
  353. <Option :value="2" label="划痕" />
  354. </Select>
  355. </FormItem>
  356. </Form>
  357. <div class="bdy">
  358. <div class="title">施工单明细</div>
  359. <div v-for="(ele, index) in formData.sub" :key="index">
  360. <Form :label-width="100" class="form">
  361. <FormItem label="套餐编码">
  362. <Select
  363. filterable
  364. clearable
  365. v-model="ele.roll_film_combine_id"
  366. style="width: 200px"
  367. :disabled="!formData.company_id || !formData.car_file_id"
  368. @on-change="
  369. ($event) =>
  370. is_ready ? handleSelectCombine($event, index) : ''
  371. "
  372. >
  373. <Option
  374. v-for="item in SureRollFilmCombineList"
  375. :key="item.id"
  376. :value="item.id"
  377. :label="item.code"
  378. />
  379. </Select>
  380. </FormItem>
  381. <FormItem label="套餐名称">
  382. <Select
  383. filterable
  384. clearable
  385. v-model="ele.roll_film_combine_id"
  386. style="width: 300px"
  387. :disabled="!formData.company_id || !formData.car_file_id"
  388. @on-change="
  389. ($event) =>
  390. is_ready ? handleSelectCombine($event, index) : ''
  391. "
  392. >
  393. <Option
  394. v-for="item in SureRollFilmCombineList"
  395. :key="item.id"
  396. :disabled="item.roll_film_id ? false : true"
  397. :value="item.id"
  398. :label="item.title"
  399. />
  400. </Select>
  401. </FormItem>
  402. <FormItem label="数量">
  403. <Input
  404. v-model="ele.number"
  405. clearable
  406. placeholder="请输入"
  407. style="width: 200px"
  408. />
  409. </FormItem>
  410. <FormItem :label-width="10" v-show="formData.status <= 0">
  411. <Icon
  412. type="ios-add-circle-outline"
  413. size="25"
  414. style="margin-right: 10px"
  415. class="btn"
  416. @click="handleAddBox(index)"
  417. />
  418. <Icon
  419. type="ios-remove-circle-outline"
  420. size="25"
  421. style="margin-left: 10px"
  422. class="btn"
  423. @click="handleReduceBox(index)"
  424. />
  425. </FormItem>
  426. </Form>
  427. <vxe-grid
  428. v-bind="ele.gridOptions"
  429. :footer-method="footerMethod"
  430. show-footer
  431. >
  432. <template #set="{ rowIndex }">
  433. <Icon
  434. type="ios-add-circle-outline"
  435. style="margin-right: 30px"
  436. size="25"
  437. @click="handleAdd(rowIndex, index)"
  438. />
  439. <Icon
  440. size="25"
  441. type="ios-remove-circle-outline"
  442. @click="handleRemove(rowIndex, index)"
  443. />
  444. </template>
  445. <template #car_depart_name="{ row }">
  446. <Select
  447. filterable
  448. clearable
  449. v-model="row.car_depart_id"
  450. transfer
  451. @on-change="handleSelectCarDepart($event, row)"
  452. >
  453. <Option
  454. v-for="item in carDepartList"
  455. :key="item.id"
  456. :value="item.id"
  457. :label="item.title"
  458. />
  459. </Select>
  460. </template>
  461. <template #basic_roll_film_name="{ row }">
  462. <Select
  463. filterable
  464. clearable
  465. v-model="row.basic_roll_film_id"
  466. transfer
  467. @on-change="($event) => handleSelectBRF($event, row)"
  468. >
  469. <Option
  470. v-for="item in basicRollFilmList"
  471. :key="item.id"
  472. :value="item.id"
  473. :label="item.title"
  474. />
  475. </Select>
  476. </template>
  477. <template #roll_film_name="{ row }">
  478. <Select
  479. filterable
  480. clearable
  481. v-model="row.roll_film_id"
  482. transfer
  483. @on-change="handleSelectRollFilm($event, row)"
  484. >
  485. <Option
  486. v-for="item in row.rollFilmList"
  487. :key="item.id"
  488. :value="item.id"
  489. :label="item.title"
  490. />
  491. </Select>
  492. </template>
  493. <template #roll_film_number="{ row }">
  494. <Select
  495. filterable
  496. clearable
  497. v-model="row.roll_film_number"
  498. transfer
  499. >
  500. <Option
  501. v-for="(item, index) in row.roll_film_number_arr"
  502. :key="index"
  503. :value="item.roll_film_number"
  504. :label="item.roll_film_number"
  505. />
  506. </Select>
  507. </template>
  508. </vxe-grid>
  509. </div>
  510. </div>
  511. <div>
  512. <Form :label-width="130" class="form">
  513. <FormItem
  514. label="4s店派工单"
  515. v-show="formData.basic_type_item_id && img_type.indexOf('1') != -1"
  516. >
  517. <div class="total_img">
  518. <div
  519. class="img_content"
  520. v-for="(item, index) in imgData['1show']"
  521. :key="index"
  522. >
  523. <viewer>
  524. <img
  525. :src="item"
  526. alt=""
  527. />
  528. </viewer>
  529. <Icon
  530. v-show="type != 3"
  531. size="20"
  532. @click="imgData['1show'].splice(index, 1);imgData['1'].splice(index, 1)"
  533. class="delete-img"
  534. type="ios-close-circle"
  535. />
  536. </div>
  537. <Upload
  538. multiple
  539. :headers="headers"
  540. :show-upload-list="false"
  541. :max-size="3072"
  542. :on-success="(res) => handleSuccess(res, '1')"
  543. :before-upload="handleError"
  544. :action="$store.state.ip + '/api/uploadConstructionFile'"
  545. >
  546. <div class="upd_file">
  547. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  548. </div>
  549. </Upload>
  550. </div>
  551. </FormItem>
  552. <FormItem
  553. label="车架号"
  554. v-show="formData.basic_type_item_id && img_type.indexOf('2') != -1"
  555. >
  556. <div class="total_img">
  557. <div v-show="imgData['2show']" class="img_content">
  558. <viewer :images="[imgData['2show']]">
  559. <img
  560. :src="imgData['2show']"
  561. alt=""
  562. />
  563. </viewer>
  564. <Icon
  565. v-show="type != 3"
  566. size="20"
  567. @click="imgData['2'] = '';imgData['2show'] = ''"
  568. class="delete-img"
  569. type="ios-close-circle"
  570. />
  571. </div>
  572. <Upload
  573. multiple
  574. :headers="headers"
  575. v-show="!imgData['2']"
  576. :show-upload-list="false"
  577. :max-size="3072"
  578. :on-success="(res) => handleSuccess(res, '2')"
  579. :before-upload="handleError"
  580. :action="$store.state.ip + '/api/uploadConstructionFile'"
  581. >
  582. <div class="upd_file">
  583. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  584. </div>
  585. </Upload>
  586. </div>
  587. </FormItem>
  588. <FormItem
  589. label="卷膜号"
  590. v-show="formData.basic_type_item_id && img_type.indexOf('3') != -1"
  591. >
  592. <div class="total_img">
  593. <div
  594. class="img_content"
  595. v-for="(item, index) in imgData['3show']"
  596. :key="index"
  597. >
  598. <viewer>
  599. <img
  600. :src="item"
  601. alt=""
  602. />
  603. </viewer>
  604. <Icon
  605. v-show="type != 3"
  606. size="20"
  607. @click="imgData['3'].splice(index, 1);imgData['3show'].splice(index, 1)"
  608. class="delete-img"
  609. type="ios-close-circle"
  610. />
  611. </div>
  612. <Upload
  613. multiple
  614. :headers="headers"
  615. :show-upload-list="false"
  616. :max-size="3072"
  617. :on-success="(res) => handleSuccess(res, '3')"
  618. :before-upload="handleError"
  619. :action="$store.state.ip + '/api/uploadConstructionFile'"
  620. >
  621. <div class="upd_file">
  622. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  623. </div>
  624. </Upload>
  625. </div>
  626. </FormItem>
  627. <FormItem
  628. label="质保卡"
  629. v-show="formData.basic_type_item_id && img_type.indexOf('4') != -1"
  630. >
  631. <div class="total_img">
  632. <div v-show="imgData['4show']" class="img_content">
  633. <viewer :images="[imgData['4show']]">
  634. <img
  635. :src="imgData['4show']"
  636. alt=""
  637. />
  638. </viewer>
  639. <Icon
  640. v-show="type != 3"
  641. size="20"
  642. @click="imgData['4'] = '';imgData['4show'] = ''"
  643. class="delete-img"
  644. type="ios-close-circle"
  645. />
  646. </div>
  647. <Upload
  648. multiple
  649. :headers="headers"
  650. v-show="!imgData['4']"
  651. :show-upload-list="false"
  652. :max-size="3072"
  653. :on-success="(res) => handleSuccess(res, '4')"
  654. :before-upload="handleError"
  655. :action="$store.state.ip + '/api/uploadConstructionFile'"
  656. >
  657. <div class="upd_file">
  658. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  659. </div>
  660. </Upload>
  661. </div>
  662. </FormItem>
  663. <FormItem
  664. label="Logo"
  665. v-show="formData.basic_type_item_id && img_type.indexOf('5') != -1"
  666. >
  667. <div class="total_img">
  668. <div v-show="imgData['5']" class="img_content">
  669. <viewer :images="[imgData['5show']]">
  670. <img
  671. :src="imgData['5show']"
  672. alt=""
  673. />
  674. </viewer>
  675. <Icon
  676. v-show="type != 3"
  677. size="20"
  678. @click="imgData['5'] = '';imgData['5show'] = ''"
  679. class="delete-img"
  680. type="ios-close-circle"
  681. />
  682. </div>
  683. <Upload
  684. multiple
  685. :headers="headers"
  686. v-show="!imgData['5']"
  687. :show-upload-list="false"
  688. :max-size="3072"
  689. :on-success="(res) => handleSuccess(res, '5')"
  690. :before-upload="handleError"
  691. :action="$store.state.ip + '/api/uploadConstructionFile'"
  692. >
  693. <div class="upd_file">
  694. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  695. </div>
  696. </Upload>
  697. </div>
  698. </FormItem>
  699. <FormItem
  700. label="车辆保护套"
  701. v-show="formData.basic_type_item_id && img_type.indexOf('6') != -1"
  702. >
  703. <div class="total_img">
  704. <div v-show="imgData['6']" class="img_content">
  705. <viewer :images="[imgData['6show']]">
  706. <img
  707. :src="imgData['6show']"
  708. alt=""
  709. />
  710. </viewer>
  711. <Icon
  712. v-show="type != 3"
  713. size="20"
  714. @click="imgData['6'] = '';imgData['6show'] = ''"
  715. class="delete-img"
  716. type="ios-close-circle"
  717. />
  718. </div>
  719. <Upload
  720. multiple
  721. :headers="headers"
  722. v-show="!imgData['6']"
  723. :show-upload-list="false"
  724. :max-size="3072"
  725. :on-success="(res) => handleSuccess(res, '6')"
  726. :before-upload="handleError"
  727. :action="$store.state.ip + '/api/uploadConstructionFile'"
  728. >
  729. <div class="upd_file">
  730. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  731. </div>
  732. </Upload>
  733. </div>
  734. </FormItem>
  735. <FormItem
  736. label="工装"
  737. v-show="formData.basic_type_item_id && img_type.indexOf('7') != -1"
  738. >
  739. <div class="total_img">
  740. <div v-show="imgData['7']" class="img_content">
  741. <viewer :images="[imgData['7show']]">
  742. <img
  743. :src="imgData['7show']"
  744. alt=""
  745. />
  746. </viewer>
  747. <Icon
  748. v-show="type != 3"
  749. size="20"
  750. @click="imgData['7'] = '';imgData['7show'] = ''"
  751. class="delete-img"
  752. type="ios-close-circle"
  753. />
  754. </div>
  755. <Upload
  756. multiple
  757. :headers="headers"
  758. v-show="!imgData['7']"
  759. :show-upload-list="false"
  760. :max-size="3072"
  761. :on-success="(res) => handleSuccess(res, '7')"
  762. :before-upload="handleError"
  763. :action="$store.state.ip + '/api/uploadConstructionFile'"
  764. >
  765. <div class="upd_file">
  766. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  767. </div>
  768. </Upload>
  769. </div>
  770. </FormItem>
  771. <FormItem
  772. label="车内保护套"
  773. v-show="formData.basic_type_item_id && img_type.indexOf('8') != -1"
  774. >
  775. <div class="total_img">
  776. <div v-show="imgData['8']" class="img_content">
  777. <viewer :images="[imgData['8show']]">
  778. <img
  779. :src="imgData['8show']"
  780. alt=""
  781. />
  782. </viewer>
  783. <Icon
  784. v-show="type != 3"
  785. size="20"
  786. @click="imgData['8'] = '';imgData['8show'] = ''"
  787. class="delete-img"
  788. type="ios-close-circle"
  789. />
  790. </div>
  791. <Upload
  792. multiple
  793. :headers="headers"
  794. v-show="!imgData['8']"
  795. :show-upload-list="false"
  796. :max-size="3072"
  797. :on-success="(res) => handleSuccess(res, '8')"
  798. :before-upload="handleError"
  799. :action="$store.state.ip + '/api/uploadConstructionFile'"
  800. >
  801. <div class="upd_file">
  802. <Icon type="ios-cloud-upload-outline" class="ico" size="50" />
  803. </div>
  804. </Upload>
  805. </div>
  806. </FormItem>
  807. <FormItem label="情况说明" style="width: 100%">
  808. <Input
  809. clearable
  810. v-model="formData.mark"
  811. placeholder="请输入"
  812. type="textarea"
  813. />
  814. </FormItem>
  815. <!-- <FormItem label="技术主管" style="width: 33%">
  816. <Select clearable filterable transfer>
  817. <Option
  818. v-for="item in employeeList"
  819. :key="item.id"
  820. :value="item.id"
  821. :label="item.emp_name"
  822. />
  823. </Select>
  824. </FormItem>
  825. <FormItem label="技术主管审批意见" style="width: 33%">
  826. <Input clearable placeholder="请输入" />
  827. </FormItem>
  828. <FormItem label="技术主管审批日期" style="width: 33%">
  829. <DatePicker type="date" />
  830. </FormItem>
  831. <FormItem label="审核人" style="width: 33%">
  832. <Select clearable filterable transfer>
  833. <Option
  834. v-for="item in employeeList"
  835. :key="item.id"
  836. :value="item.id"
  837. :label="item.emp_name"
  838. />
  839. </Select>
  840. </FormItem>
  841. <FormItem label="审批意见" style="width: 33%">
  842. <Input clearable placeholder="请输入" />
  843. </FormItem>
  844. <FormItem label="审批日期" style="width: 33%">
  845. <DatePicker type="date" />
  846. </FormItem> -->
  847. </Form>
  848. </div>
  849. </div>
  850. <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
  851. <Form>
  852. <FormItem :label-width="60" label="原因">
  853. <Input clearable v-model="oa_remark" placeholder="请输入"/>
  854. </FormItem>
  855. </Form>
  856. <div slot="footer">
  857. <Button @click="is_oa = false" style="margin-right: 10px">取消</Button>
  858. <Button type="primary" ghost @click="handlePass">确认</Button>
  859. </div>
  860. </Modal>
  861. <Modal v-model="is_other" width="30" title="转签" :closable="false" :mask-closable="false" :draggable="true">
  862. <Form>
  863. <FormItem :label-width="80" label="转签人:">
  864. <Select v-model="employee_id" transfer clearable filterable>
  865. <Option v-for="item in employeeList" :key="item.id" :label="item.emp_name" :value="item.id"/>
  866. </Select>
  867. </FormItem>
  868. </Form>
  869. <div slot="footer">
  870. <Button @click="is_other = false" style="margin-right: 10px">取消</Button>
  871. <Button type="primary" ghost @click="handlePassOver">确认</Button>
  872. </div>
  873. </Modal>
  874. <Modal v-model="is_oaDetail" width="1000" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
  875. <Steps :current="current">
  876. <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
  877. <div slot="content">
  878. <div>班组:{{item.team}}</div>
  879. <div>备注:{{item.remark}}</div>
  880. </div>
  881. </Step>
  882. </Steps>
  883. <vxe-grid
  884. v-bind="oaGridOptions"
  885. >
  886. <template #crt_time="{row}">
  887. <span>{{func.replaceDateNoHMS(row.crt_time)}}</span>
  888. </template>
  889. <template #state="{row}">
  890. <span>{{row.state==0?'未审核':row.state==1?'审核通过':'审核驳回'}}</span>
  891. </template>
  892. </vxe-grid>
  893. <div slot="footer">
  894. <Button @click="is_oaDetail = false" style="margin-right: 10px">取消</Button>
  895. </div>
  896. </Modal>
  897. <Modal v-model="is_check" width="800" title="审核人员详情" :closable="false" :mask-closable="false" :draggable="true">
  898. <div style="height: 500px">
  899. <vxe-grid
  900. v-bind="oaCheckGridOptions"
  901. >
  902. </vxe-grid>
  903. </div>
  904. <div slot="footer">
  905. <Button @click="is_check = false" style="margin-right: 10px">取消</Button>
  906. </div>
  907. </Modal>
  908. <Modal
  909. draggable
  910. title="新增车主信息"
  911. :closable="false"
  912. :mask-closable="false"
  913. width="500"
  914. v-model="is_show"
  915. >
  916. <Form :label-width="120">
  917. <FormItem label="车主姓名:">
  918. <Input clearable v-model="modalData.name" />
  919. </FormItem>
  920. <FormItem label="车主联系方式:">
  921. <Input clearable v-model="modalData.phone" />
  922. </FormItem>
  923. </Form>
  924. <div slot="footer">
  925. <Button style="margin-right: 10px" @click="handleCancel">取消</Button>
  926. <Button type="primary" @click="handleSureOwn">确认</Button>
  927. </div>
  928. </Modal>
  929. <Modal draggable
  930. title="选择车架号"
  931. :closable="false"
  932. :mask-closable="false"
  933. width="900"
  934. v-model="is_vin">
  935. <div slot="header" style="display:flex;justify-content: space-between;align-items: center">
  936. <div style="font-size: 16px">选择车架号</div>
  937. <div style="display: flex;align-items: center"><span style="font-size: 14px;margin-right: 10px">创建新的车架号:</span><i-switch v-model="isCreateVin"></i-switch></div>
  938. </div>
  939. <Form :label-width="100" style="display: flex;flex-wrap: wrap" v-show="isCreateVin">
  940. <FormItem label="创建车架号:">
  941. <Input clearable style="width: 200px" placeholder="请输入" v-model="newVin"/>
  942. </FormItem>
  943. </Form>
  944. <Form :label-width="100" style="display: flex;flex-wrap: wrap" v-show="!isCreateVin">
  945. <FormItem label="车架号:">
  946. <Input clearable style="width: 200px" placeholder="请输入" v-model="vinText"/>
  947. </FormItem>
  948. <FormItem :label-width="10">
  949. <Button type="primary" ghost @click="searchVin">查询</Button>
  950. </FormItem>
  951. </Form>
  952. <div style="height: 500px;padding-bottom: 50px;position: relative" v-show="!isCreateVin">
  953. <vxe-grid
  954. v-bind="vinGridOptions"
  955. @radio-change="radioChangeEvent"
  956. ref="xTable1"
  957. >
  958. <template #header>
  959. <vxe-button type="text" @click="clearRadioRowEevnt" :disabled="!selectRow">取消</vxe-button>
  960. </template>
  961. </vxe-grid>
  962. <Footer
  963. :pageSize="vin_page_size"
  964. :pageIndex="vin_page_index"
  965. :total="vin_total"
  966. @changeSize="changeVinSize"
  967. @changePage="changeVinPage"
  968. ></Footer>
  969. </div>
  970. <div slot="footer">
  971. <Button style="margin-right: 10px" @click="is_vin=false">取消</Button>
  972. <Button type="primary" ghost @click="handleSureVin">确认</Button>
  973. </div>
  974. </Modal>
  975. </div>
  976. </template>
  977. <script>
  978. export default {
  979. data() {
  980. return {
  981. modalData: {
  982. name: "",
  983. phone: "",
  984. id: "",
  985. },
  986. isCreateVin:false,
  987. vinText:'',
  988. newVin:'',
  989. selectRow:null,
  990. is_ready: true,
  991. headers: { 'Authorization': localStorage.getItem('token') },
  992. img_type: [],
  993. menuList: [],
  994. type: '',
  995. stepList:[],
  996. employeeList: [],
  997. rollFilmList: [],
  998. basicRollFilmList: [],
  999. carDepartList: [],
  1000. SureRollFilmCombineList: [],
  1001. rollFilmCombineList: [],
  1002. carTypeList: [],
  1003. nameList: [],
  1004. ownerList: [],
  1005. carFilesList: [],
  1006. SureCarFilesList: [],
  1007. specialList: [],
  1008. workList: [],
  1009. workProductList: [],
  1010. areaList: [],
  1011. companyList: [],
  1012. current:0,
  1013. fourShopList: [],
  1014. storehouseList: [],
  1015. oaGridOptions:{
  1016. border: true,
  1017. resizable: true,
  1018. showOverflow: true,
  1019. align: 'left',
  1020. columns: [
  1021. { field: 'sort', width: 80, title: '排序', showHeaderOverflow: true },
  1022. { field: 'crt_time', title: '时间', showHeaderOverflow: true, minWidth: 100, slots: { default: 'crt_time' } },
  1023. { field: 'state', title: '状态', showHeaderOverflow: true, minWidth: 100, slots: {default: 'state' } },
  1024. { field: 'remark', title: '原因', showHeaderOverflow: true, minWidth: 100 },
  1025. ],
  1026. data: [
  1027. ]
  1028. },
  1029. vin_page_index:1,
  1030. vin_page_size:10,
  1031. vin_total:0,
  1032. vinGridOptions:{
  1033. border: true,
  1034. maxHeight:'440px',
  1035. resizable: true,
  1036. showOverflow: true,
  1037. align: 'center',
  1038. columns: [
  1039. {type:'radio',minWidth: 50,slots:{header:'header'}},
  1040. { field: 'vin_no', title: '车架号', showHeaderOverflow: true, minWidth: 100},
  1041. { field: 'car_type_name', title: '车型分类', showHeaderOverflow: true, minWidth: 100},
  1042. { field: 'car_file_name', title: '车型档案', showHeaderOverflow: true, minWidth: 100},
  1043. { field: 'car_owner_name', title: '车主姓名', showHeaderOverflow: true, minWidth: 100},
  1044. { field: 'car_owner_phone', title: '联系方式', showHeaderOverflow: true, minWidth: 100},
  1045. ],
  1046. data: []
  1047. },
  1048. oaCheckGridOptions:{
  1049. border: true,
  1050. maxHeight:'auto',
  1051. resizable: true,
  1052. showOverflow: true,
  1053. align: 'center',
  1054. columns: [
  1055. { field: 'title', title: '审核姓名', showHeaderOverflow: true, minWidth: 100},
  1056. ],
  1057. data: [
  1058. ]
  1059. },
  1060. formData: {
  1061. construction_time: new Date(),
  1062. sub: [
  1063. {
  1064. roll_film_combine_id: '',
  1065. gridOptions: {
  1066. border: true,
  1067. resizable: true,
  1068. showOverflow: true,
  1069. align: 'left',
  1070. editConfig: {
  1071. trigger: 'click',
  1072. mode: 'row',
  1073. showStatus: true
  1074. },
  1075. columns: [
  1076. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1077. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1078. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } },
  1079. { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'basic_roll_film_name' } },
  1080. { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_name' } },
  1081. { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_number' } },
  1082. { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 },
  1083. ],
  1084. data: [
  1085. ]
  1086. }
  1087. }
  1088. ],
  1089. name_id: "",
  1090. status: 0
  1091. },
  1092. imgData: {
  1093. '1': [],
  1094. '2': '',
  1095. '3': [],
  1096. '4': '',
  1097. '5': '',
  1098. '6': '',
  1099. '7': '',
  1100. '8': '',
  1101. '1show': [],
  1102. '2show': '',
  1103. '3show': [],
  1104. '4show': '',
  1105. '5show': '',
  1106. '6show': '',
  1107. '7show': '',
  1108. '8show': '',
  1109. },
  1110. is_show:false,
  1111. is_create: false,
  1112. constructionPersonList: [],
  1113. oa_state:'',
  1114. oa_state_m:'',
  1115. oa_id:"",
  1116. oa_remark:'',
  1117. is_oa:false,
  1118. is_check:false,
  1119. is_oaDetail:false,
  1120. is_o:true,
  1121. is_other:false,
  1122. employee_id:'',
  1123. is_vin:false,
  1124. vinProxyData:{}
  1125. }
  1126. },
  1127. created() {
  1128. //获取4s店列表
  1129. this.axios.post('/api/foursShopList').then(res => {
  1130. this.fourShopList = res.data.data;
  1131. })
  1132. //获取仓库
  1133. this.axios.post('/api/storehouseList').then(res => {
  1134. this.storehouseList = res.data.data;
  1135. })
  1136. //获取集团
  1137. this.axios.post('/api/companyList').then(res => {
  1138. this.companyList = res.data.data;
  1139. })
  1140. //获取区域
  1141. this.axios.post('/api/areaList').then(res => {
  1142. this.areaList = this.getArr(res.data);
  1143. })
  1144. //获取业务类型
  1145. this.axios.post('/api/basicTypeList', { type: 1 }).then(res => {
  1146. this.workList = res.data.data;
  1147. })
  1148. //获取特殊情况
  1149. this.axios.post('/api/basicTypeList', { type: 3 }).then(res => {
  1150. this.specialList = res.data.data;
  1151. })
  1152. //获取车辆品牌
  1153. this.axios.post('/api/carTypeList').then(res => {
  1154. this.carTypeList = this.getArr(res.data);
  1155. })
  1156. //获取车辆型号
  1157. this.axios.post('/api/carFilesList').then(res => {
  1158. this.carFilesList = res.data.data;
  1159. this.SureCarFilesList = JSON.parse(JSON.stringify(res.data.data));
  1160. })
  1161. // //获取车架号
  1162. // this.axios.post('/api/ownerList').then(res => {
  1163. // this.ownerList = res.data.data;
  1164. // })
  1165. //获取套餐档案
  1166. this.axios.post('/api/rollFilmCombineList', { roll_film_id: 1,use:1 }).then(res => {
  1167. this.rollFilmCombineList = res.data.data;
  1168. })
  1169. //获取车辆部位
  1170. this.axios.post('/api/carDepartList').then(res => {
  1171. this.carDepartList = res.data.data;
  1172. })
  1173. //获取卷膜分类
  1174. this.axios.post('/api/basicRollFilmList').then(res => {
  1175. this.basicRollFilmList = this.getArr(res.data)
  1176. })
  1177. //获取人员列表
  1178. this.axios.post('/api/employeeList', { all_emp: 1 }).then(res => {
  1179. this.employeeList = res.data.data;
  1180. })
  1181. //获取列表
  1182. this.axios.post('/api/menuList').then(res => {
  1183. this.menuList = res.data;
  1184. })
  1185. },
  1186. async mounted() {
  1187. this.type = this.$route.query.type;
  1188. //获取施工产品类型
  1189. await this.axios.post('/api/basicTypeList', { type: 2 }).then(res => {
  1190. this.workProductList = res.data.data;
  1191. })
  1192. if (this.type != 1) {
  1193. this.is_ready = false;
  1194. await this.initData();
  1195. }
  1196. },
  1197. methods: {
  1198. handleSelectBID(e){
  1199. if(e){
  1200. let obj = this.workList.find(v=>v.id == e)
  1201. if(obj.special_type){
  1202. this.formData.sub.forEach(c => {
  1203. c.gridOptions.columns = [
  1204. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1205. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1206. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100,align: "center",editRender: {}, slots: { edit: 'car_depart_name' } }
  1207. ]
  1208. })
  1209. }else {
  1210. this.formData.sub.forEach(c => {
  1211. c.gridOptions.columns = [
  1212. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1213. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1214. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } },
  1215. { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'basic_roll_film_name' } },
  1216. { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_name' } },
  1217. { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_number' } },
  1218. { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 }
  1219. ]
  1220. })
  1221. }
  1222. }
  1223. },
  1224. handleSureVin(){
  1225. if(this.isCreateVin){
  1226. if(!this.newVin){
  1227. return this.$Message.warning('请输入新的车架号')
  1228. }else {
  1229. this.formData.own_id = 0;
  1230. this.formData.vin_no = this.newVin
  1231. this.is_create=true
  1232. this.formData.own_name = '';
  1233. this.formData.own_phone = '';
  1234. this.formData.name_id = '';
  1235. }
  1236. }else {
  1237. if(!this.selectRow){
  1238. return this.$Message.warning('请选择车架号!')
  1239. }else{
  1240. this.formData.own_id = this.selectRow.id;
  1241. this.is_create = false;
  1242. this.formData.car_type = this.selectRow.car_type;
  1243. this.formData.car_file_id = this.selectRow.car_file_id;
  1244. this.formData.vin_no = this.selectRow.vin_no;
  1245. this.formData.name_id = '';
  1246. this.formData.is_big = this.carFilesList.find(v => v.id == this.formData.car_file_id).is_big;
  1247. this.axios.post('/api/ownerDetail', { id:this.formData.own_id }).then(res => {
  1248. this.nameList = res.data.sub.filter(v => v.use)
  1249. })
  1250. }
  1251. }
  1252. this.$nextTick(()=>{
  1253. this.is_vin=false
  1254. })
  1255. },
  1256. searchVin(){
  1257. this.vinProxyData = {
  1258. vin_no:this.vinText
  1259. }
  1260. this.handleChooseVin(this.vinProxyData)
  1261. },
  1262. radioChangeEvent({row}){
  1263. this.selectRow = row
  1264. },
  1265. clearRadioRowEevnt () {
  1266. this.selectRow = null
  1267. this.$refs.xTable1.clearRadioRow()
  1268. },
  1269. changeVinSize(e){
  1270. this.vin_page_size = e;
  1271. this.vin_page_index = 1;
  1272. this.handleChooseVin(this.vinProxyData);
  1273. },
  1274. changeVinPage(e){
  1275. this.vin_page_index = e
  1276. this.handleChooseVin(this.vinProxyData);
  1277. },
  1278. handleChooseVin(row){
  1279. //获取车架号
  1280. this.axios.post('/api/ownerList',{...row,page_index:this.vin_page_index,page_size:this.vin_page_size}).then(res => {
  1281. this.vinGridOptions.data = res.data.data;
  1282. this.vin_total = res.data.total;
  1283. this.vinText = ''
  1284. this.is_vin = true;
  1285. })
  1286. },
  1287. handleShowCheckMan(){
  1288. this.axios.post('/api/oaSubUserDetail',{order_no:this.$route.query.order_number}).then(res=>{
  1289. let data = [];
  1290. res.data.forEach(v=>{
  1291. let obj = {title:v};
  1292. data.push(obj)
  1293. })
  1294. this.oaCheckGridOptions.data = data;
  1295. this.is_check = true;
  1296. })
  1297. },
  1298. handleCancel() {
  1299. this.is_show = false;
  1300. },
  1301. handleSureOwn() {
  1302. this.modalData.id = Date.parse(new Date());
  1303. this.nameList.push(JSON.parse(JSON.stringify(this.modalData)));
  1304. this.modalData = {
  1305. name: "",
  1306. phone: "",
  1307. id: ''
  1308. };
  1309. this.is_show = false;
  1310. },
  1311. handleOaModal(){
  1312. let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/Construction/index').id;
  1313. this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
  1314. this.oaGridOptions.data = res.data;
  1315. this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
  1316. if(req.code==200){
  1317. this.current = req.data.length;
  1318. this.stepList = req.data;
  1319. this.is_oaDetail = true;
  1320. }
  1321. })
  1322. })
  1323. },
  1324. handlePassModal(e){
  1325. this.oa_state_m = e;
  1326. this.oa_remark = '';
  1327. this.is_oa = true;
  1328. },
  1329. handlePassModalOther(){
  1330. this.is_other = true;
  1331. this.employee_id = '';
  1332. },
  1333. handlePassOver(){
  1334. if (this.is_o) {
  1335. this.is_o = false
  1336. let data = {
  1337. id:this.oa_id,
  1338. employee_id:this.employee_id
  1339. }
  1340. this.axios.post('/api/oaCheckMove',data).then(res=>{
  1341. if(res.code === 200){
  1342. this.$Message.success(res.msg)
  1343. this.is_other=false
  1344. this.initData()
  1345. }
  1346. setTimeout(()=>{
  1347. this.is_o = true
  1348. },2000)
  1349. })
  1350. }
  1351. },
  1352. handlePass(){
  1353. if (this.is_o) {
  1354. this.is_o = false
  1355. let data = {
  1356. id:this.oa_id,
  1357. state:this.oa_state_m,
  1358. remark:this.oa_remark
  1359. }
  1360. this.axios.post('/api/oaCheck',data).then(res=>{
  1361. if(res.code === 200){
  1362. this.$Message.success(res.msg)
  1363. this.is_oa=false
  1364. if(this.oa_state_m){
  1365. this.$router.push('/cms/BusinessManagement/Construction/index')
  1366. }else {
  1367. this.initData()
  1368. }
  1369. }
  1370. setTimeout(()=>{
  1371. this.is_o = true
  1372. },2000)
  1373. })
  1374. }
  1375. },
  1376. handleChangeCarType(e) {
  1377. if (e) {
  1378. this.SureCarFilesList = this.carFilesList.filter(v => v.car_type_id == e);
  1379. } else {
  1380. this.SureCarFilesList = JSON.parse(JSON.stringify(this.carFilesList));
  1381. }
  1382. this.formData.car_file_id = '';
  1383. },
  1384. handleAddBox(index) {
  1385. this.formData.sub.splice(index + 1, 0, (this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id)&&this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id).special_type)?{
  1386. roll_film_combine_id: '',
  1387. gridOptions: {
  1388. border: true,
  1389. resizable: true,
  1390. showOverflow: true,
  1391. align: 'left',
  1392. editConfig: {
  1393. trigger: 'click',
  1394. mode: 'row',
  1395. showStatus: true
  1396. },
  1397. columns: [
  1398. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1399. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1400. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true,align:"center", minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } }
  1401. ],
  1402. data: [
  1403. ]
  1404. }
  1405. }:{
  1406. roll_film_combine_id: '',
  1407. gridOptions: {
  1408. border: true,
  1409. resizable: true,
  1410. showOverflow: true,
  1411. align: 'left',
  1412. editConfig: {
  1413. trigger: 'click',
  1414. mode: 'row',
  1415. showStatus: true
  1416. },
  1417. columns: [
  1418. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1419. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1420. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } },
  1421. { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'basic_roll_film_name' } },
  1422. { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_name' } },
  1423. { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_number' } },
  1424. { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 },
  1425. ],
  1426. data: [
  1427. ]
  1428. }
  1429. }
  1430. )
  1431. },
  1432. handleReduceBox(index) {
  1433. this.formData.sub.splice(index, 1);
  1434. },
  1435. handleSelectBRF(e, row) {
  1436. if (e) {
  1437. row.rollFilmList = this.rollFilmList.filter(v => v.b_r_f_id == e && (this.formData.company_id ? v.company_id == this.formData.company_id : true));
  1438. row.basic_roll_film_name = this.basicRollFilmList.find(v => v.id == e).title;
  1439. } else {
  1440. row.rollFilmList = this.rollFilmList.filter(v => this.formData.company_id ? v.company_id == this.formData.company_id : true);
  1441. row.basic_roll_film_name = '';
  1442. }
  1443. },
  1444. handleSelectName(e) {
  1445. if (e) {
  1446. this.$set(this.formData, 'name_id', e);
  1447. } else {
  1448. this.$set(this.formData, 'name_id', '');
  1449. }
  1450. this.$forceUpdate();
  1451. },
  1452. handleSelectCarFile(e) {
  1453. if (e) {
  1454. let is_big = this.carFilesList.find(v => v.id == e).is_big;
  1455. this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => (v.company_id == this.formData.company_id && (this.formData.basic_type_item_id ? this.workProductList.find(x => x.id == this.formData.basic_type_item_id).b_r_f_id.split(',').map(b => b * 1).indexOf(v.basic_roll_film_id) != -1 : true)));
  1456. this.formData.is_big = is_big
  1457. } else {
  1458. this.SureRollFilmCombineList = [];
  1459. }
  1460. this.formData.sub.forEach(v => {
  1461. v.roll_film_combine_id = '';
  1462. v.gridOptions.data = [];
  1463. })
  1464. },
  1465. handleCreateVin(val) {
  1466. this.ownerList.push({
  1467. vin_no: val
  1468. })
  1469. },
  1470. looks(img, type) {
  1471. let array = [];
  1472. if (type) {
  1473. img.forEach(v => {
  1474. let obj = {};
  1475. obj.img_url = v;
  1476. array.push(obj);
  1477. })
  1478. } else {
  1479. array = [{ img_url: img }];
  1480. }
  1481. this.$previewImg({
  1482. list: array,
  1483. baseUrl: this.$store.state.ip,
  1484. baseImgField: "img_url",
  1485. baseTitleField: "",
  1486. });
  1487. },
  1488. handleSuccess(res, type) {
  1489. if (res.code === 200) {
  1490. if (type === '3') {
  1491. this.imgData['3'].push(res.data.url);
  1492. this.imgData['3show'].push(this.$store.state.ip+res.data.url)
  1493. } else if (type === '1') {
  1494. this.imgData['1'].push(res.data.url);
  1495. console.log(this.imgData)
  1496. this.imgData['1show'].push(this.$store.state.ip+res.data.url)
  1497. } else {
  1498. this.imgData[type] = res.data.url;
  1499. this.imgData[`${type}show`]=this.$store.state.ip+res.data.url
  1500. }
  1501. console.log(this.imgData)
  1502. }
  1503. },
  1504. handleError(file) {
  1505. if (file.size > 3099648) {
  1506. this.$Message.warning('图片文件大小不能超过3mb!')
  1507. return false
  1508. }
  1509. },
  1510. handleChangeBasicType(e) {
  1511. if (e) {
  1512. this.img_type = this.workProductList.find(v => v.id == e).img_type.split(',');
  1513. this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => ((this.formData.company_id ? v.company_id == this.formData.company_id : true) && this.workProductList.find(x => x.id == e).b_r_f_id.split(',').map(b => b * 1).indexOf(v.basic_roll_film_id) != -1));
  1514. this.formData.sub.roll_film_combine_id = [];
  1515. } else {
  1516. this.img_type = [];
  1517. this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => (this.formData.company_id ? v.company_id == this.formData.company_id : true))
  1518. }
  1519. this.imgData = {
  1520. '1': [],
  1521. '2': '',
  1522. '3': [],
  1523. '4': '',
  1524. '5': '',
  1525. '6': '',
  1526. '7': '',
  1527. '8': '',
  1528. '1show': [],
  1529. '2show': '',
  1530. '3show': [],
  1531. '4show': '',
  1532. '5show': '',
  1533. '6show': '',
  1534. '7show': '',
  1535. '8show': '',
  1536. }
  1537. },
  1538. footerMethod({ columns, data }) {
  1539. return [
  1540. columns.map((column, index) => {
  1541. if (index === 0) {
  1542. return '合计'
  1543. } else if (['meter'].includes(column.property)) {
  1544. return this.sumNum(data, column.property)
  1545. }
  1546. return null
  1547. })
  1548. ]
  1549. },
  1550. sumNum(list, field) {
  1551. let count = 0
  1552. list.forEach(item => {
  1553. count += Number(item[field] ? item[field] : 0)
  1554. })
  1555. return count.toFixed(2)
  1556. },
  1557. handleCheck(e) {
  1558. let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/Construction/index').id;
  1559. if(e){
  1560. this.$Modal.confirm({
  1561. title:'确认',
  1562. content:'确认弃审吗?',
  1563. onOk:()=>{
  1564. this.axios.post('/api/checkAllOver', {
  1565. order_number: this.$route.query.order_number,
  1566. opt_case: 5,
  1567. menu_id
  1568. }).then(res => {
  1569. if (res.code == 200) {
  1570. this.$Message.success(res.msg);
  1571. this.initData();
  1572. }
  1573. })
  1574. }
  1575. })
  1576. }else{
  1577. this.axios.post('/api/checkAll', { order_number: this.$route.query.order_number, opt_case: 5, menu_id }).then(res => {
  1578. if (res.code == 200) {
  1579. this.$Message.success(res.msg);
  1580. this.initData();
  1581. }
  1582. if(res.code == 201&&res.msg == 'construction_rule'){
  1583. this.$Modal.confirm({
  1584. title:'审核确认',
  1585. content:'有重复的车架号,是否继续审核?',
  1586. onOk:()=>{
  1587. this.axios.post('/api/checkAll',{ order_number: this.$route.query.order_number, opt_case: 5, menu_id, is_confirm:1}).then(res=>{
  1588. if (res.code == 200) {
  1589. this.$Message.success(res.msg);
  1590. this.initData();
  1591. }
  1592. })
  1593. }
  1594. })
  1595. }
  1596. })
  1597. }
  1598. },
  1599. initData() {
  1600. this.axios.post('/api/constructionDetail', { order_number: this.$route.query.order_number }).then(res => {
  1601. res.data.construction_time = this.func.replaceDateNoHMS(res.data.construction_time);
  1602. this.formData = JSON.parse(JSON.stringify(res.data));
  1603. if ( this.formData.status === 1 ) {
  1604. let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/Construction/index').id;
  1605. this.axios.post('/api/oaOrderState',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
  1606. if (res.code === 200) {
  1607. this.oa_state = res.data.state;
  1608. this.oa_id = res.data.id
  1609. }
  1610. })
  1611. }
  1612. this.formData.is_big = this.carFilesList.find(v => v.id == this.formData.car_file_id).is_big;
  1613. this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => (v.company_id == this.formData.company_id && (this.formData.basic_type_item_id ? this.workProductList.find(x => x.id == this.formData.basic_type_item_id).b_r_f_id.split(',').map(b => b * 1).indexOf(v.basic_roll_film_id) != -1 : true)
  1614. ));
  1615. this.img_type = this.workProductList.find(v => v.id == this.formData.basic_type_item_id).img_type.split(',');
  1616. let id = this.fourShopList.find(v => v.id == this.formData.four_shop_id).construction_person.map(c => c.id);
  1617. let arr = JSON.parse(JSON.stringify(this.employeeList));
  1618. let arr1 = [];
  1619. let arr2 = [];
  1620. arr.forEach(v => {
  1621. v.title = v.emp_name
  1622. if (id.indexOf(v.id) == -1) {
  1623. v.disable = true;
  1624. arr1.push(v);
  1625. } else {
  1626. v.disable = false;
  1627. arr2.push(v)
  1628. }
  1629. })
  1630. this.constructionPersonList = arr2.concat(arr1);
  1631. this.formData.img.forEach(v => {
  1632. if (v.src) {
  1633. if (v.type == 3 || v.type == 1) {
  1634. this.imgData[v.type] = v.src.split(',');
  1635. this.imgData[v.type + 'show'] = v.show_url.split(',')
  1636. } else {
  1637. this.imgData[v.type] = v.src;
  1638. this.imgData[v.type + 'show'] = v.show_url
  1639. }
  1640. }
  1641. })
  1642. this.formData.sub.forEach(v => {
  1643. v.gridOptions = {
  1644. border: true,
  1645. resizable: true,
  1646. showOverflow: true,
  1647. align: 'left',
  1648. editConfig: {
  1649. trigger: 'click',
  1650. mode: 'row',
  1651. showStatus: true
  1652. },
  1653. columns: [
  1654. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1655. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1656. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } },
  1657. { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'basic_roll_film_name' } },
  1658. { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_name' } },
  1659. { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_number' } },
  1660. { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 },
  1661. ],
  1662. data: v.detail.length===0?[{ car_depart_id: '', car_depart_name: '', basic_roll_film_id: '', basic_roll_film_name: '', roll_film_id: '', roll_film_name: '', meter: '', roll_film_number: '', roll_film_number_arr: [] }]:v.detail
  1663. }
  1664. })
  1665. let dataa ={}
  1666. if(this.type==2){
  1667. dataa.order_number = this.$route.query.order_number;
  1668. }
  1669. //获取卷膜型号
  1670. this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id,...dataa }).then(req => {
  1671. this.rollFilmList = req.data.data;
  1672. this.formData.sub.forEach(c => {
  1673. c.gridOptions.data.forEach(v => {
  1674. this.handleSelectBRF(v.basic_roll_film_id, v);
  1675. v.roll_film_number_arr = this.rollFilmList.find(c => c.id == v.roll_film_id)?this.rollFilmList.find(c => c.id == v.roll_film_id).roll_film_number_arr:[];
  1676. })
  1677. })
  1678. this.is_ready = true;
  1679. })
  1680. this.formData.sub.forEach(b => {
  1681. b.gridOptions.data.forEach(v => {
  1682. v.basic_roll_film_name = v.b_r_f_name;
  1683. v.roll_film_name = v.title;
  1684. })
  1685. })
  1686. if(this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id)&&this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id).special_type){
  1687. if(res.data.status > 0){
  1688. this.formData.sub.forEach(c => {
  1689. c.gridOptions.columns = [
  1690. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1691. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100,align: "center" }
  1692. ]
  1693. })
  1694. }else{
  1695. this.formData.sub.forEach(c => {
  1696. c.gridOptions.columns = [
  1697. { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
  1698. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1699. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100,align: "center",editRender: {}, slots: { edit: 'car_depart_name' } }
  1700. ]
  1701. })
  1702. }
  1703. }else {
  1704. if (res.data.status > 0) {
  1705. this.formData.sub.forEach(c => {
  1706. c.gridOptions.columns = [
  1707. { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
  1708. { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100 },
  1709. { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100 },
  1710. { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100 },
  1711. { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100 },
  1712. { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 }]
  1713. })
  1714. }
  1715. }
  1716. this.axios.post('/api/ownerDetail', { id: this.formData.own_id }).then(req => {
  1717. this.nameList = req.data.sub?req.data.sub.filter(v => v.use == '1'):[];
  1718. this.nameList.forEach(v=>{
  1719. if(!v.phone){
  1720. v.phone = ' '
  1721. }
  1722. })
  1723. this.formData.name_id = res.data.own_sub_id;
  1724. })
  1725. })
  1726. },
  1727. handleSave() {
  1728. let img = [];
  1729. let key = Object.keys(this.imgData);
  1730. key.forEach(v => {
  1731. if (this.imgData[v] && this.imgData[v].length != 0 && v.indexOf('show')==-1) {
  1732. let obj = {};
  1733. if (v === '3' || v === '1') {
  1734. obj.type = v;
  1735. obj.src = this.imgData[v].toString();
  1736. img.push(obj);
  1737. } else {
  1738. obj.type = v;
  1739. obj.src = this.imgData[v];
  1740. img.push(obj);
  1741. }
  1742. }
  1743. })
  1744. let data = JSON.parse(JSON.stringify(this.formData));
  1745. if (!this.is_create) {
  1746. data.own_name = data.name_id ? this.nameList.find(v => v.id == data.name_id).name : '';
  1747. data.own_phone = data.name_id ? this.nameList.find(v => v.id == data.name_id).phone : '';
  1748. }
  1749. data.sub.forEach(v => {
  1750. v.detail = JSON.parse(JSON.stringify(v.gridOptions.data));
  1751. delete v.gridOptions;
  1752. })
  1753. data.construction_time = data.construction_time ? Date.parse(data.construction_time).toString().slice(0, 10) : '';
  1754. data.img = img;
  1755. if (this.type == 1) {
  1756. this.axios.post('/api/constructionAdd', { ...data }).then(res => {
  1757. if (res.code == 200) {
  1758. this.$Message.success(res.msg);
  1759. this.$router.push({ path: '/cms/BusinessManagement/Construction/index' })
  1760. }
  1761. })
  1762. } else {
  1763. this.axios.post('/api/constructionEdit', { ...data }).then(res => {
  1764. if (res.code == 200) {
  1765. this.$Message.success(res.msg);
  1766. // this.$router.push({ path: '/cms/BusinessManagement/Construction/index' })
  1767. }
  1768. })
  1769. }
  1770. },
  1771. handleSelectRollFilm(e, row) {
  1772. if (e) {
  1773. row.roll_film_name = this.rollFilmList.find(v => v.id == e).title;
  1774. row.basic_roll_film_id = this.rollFilmList.find(v => v.id == e).b_r_f_id;
  1775. row.basic_roll_film_name = this.rollFilmList.find(v => v.id == e).b_r_f_name;
  1776. row.roll_film_number_arr = this.rollFilmList.find(v => v.id == e).roll_film_number_arr;
  1777. row.warranty_year = this.rollFilmList.find(v => v.id == e).warranty_year;
  1778. row.roll_film_number = '';
  1779. } else {
  1780. row.roll_film_name = '';
  1781. row.basic_roll_film_id = '';
  1782. row.basic_roll_film_name = '';
  1783. row.roll_film_number_arr = [];
  1784. row.roll_film_number = '';
  1785. row.warranty_year = '';
  1786. }
  1787. },
  1788. handleSelectCarDepart(e, row) {
  1789. if (e) {
  1790. row.car_depart_name = this.carDepartList.find(v => v.id == e).title;
  1791. row.meter = this.carDepartList.find(v => v.id == e).expend_meters;
  1792. } else {
  1793. row.car_depart_name = '';
  1794. row.meter = '';
  1795. }
  1796. },
  1797. handleRemove(index, idx) {
  1798. if (this.formData.sub[idx].gridOptions.data.length > 1) {
  1799. this.formData.sub[idx].gridOptions.data.splice(index, 1);
  1800. } else {
  1801. return
  1802. }
  1803. },
  1804. handleAdd(index, idx) {
  1805. this.formData.sub[idx].gridOptions.data.splice(index + 1, 0, { car_depart_id: '', car_depart_name: '', basic_roll_film_id: '', basic_roll_film_name: '', roll_film_id: '', roll_film_name: '', meter: '', roll_film_number: '', roll_film_number_arr: [] });
  1806. },
  1807. handleSelectCombine(e, index) {
  1808. if (e) {
  1809. //获取套餐下绑定的卷膜分类和型号,部位的分类和型号套餐下的都一样
  1810. let id = this.SureRollFilmCombineList.find(v => v.id == e).c_d_c_id;
  1811. let roll_film_id = this.SureRollFilmCombineList.find(v => v.id == e).roll_film_id;
  1812. let roll_film_name = this.SureRollFilmCombineList.find(v => v.id == e).roll_film_name;
  1813. let basic_roll_film_name = this.SureRollFilmCombineList.find(v => v.id == e).roll_film_type;
  1814. let basic_roll_film_id = this.SureRollFilmCombineList.find(v => v.id == e).basic_roll_film_id;
  1815. let warranty_year = this.rollFilmList.find(v => v.id == roll_film_id).warranty_year;
  1816. this.axios.post('/api/carDepartCombineDetail', { id }).then(res => {
  1817. this.formData.sub[index].gridOptions.data = [];
  1818. this.$set(this.formData.sub[index].gridOptions,'data',[]);
  1819. let car_depart_sub = this.formData.is_big ? res.data.car_depart_sub_big : res.data.car_depart_sub; //如果是大型车就拿big的不是就是拿另外一个非大型车的
  1820. let data = JSON.parse(JSON.stringify(this.carDepartList.filter(v => car_depart_sub.indexOf(v.id) != -1)));
  1821. data.forEach(v => {
  1822. v.warranty_year = warranty_year;
  1823. v.car_depart_name = v.title;
  1824. // v.disable = true;
  1825. v.basic_roll_film_id = basic_roll_film_id;
  1826. v.roll_film_name = roll_film_name;
  1827. v.basic_roll_film_name = basic_roll_film_name;
  1828. this.handleSelectBRF(basic_roll_film_id, v);
  1829. v.roll_film_id = roll_film_id
  1830. if (this.formData.is_big) {
  1831. console.log(this.formData.is_big, 'da')
  1832. v.meter = res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter*1 ? res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter : v.expend_meters;
  1833. v.car_depart_id = v.id;
  1834. } else {
  1835. console.log(this.formData.is_big, 'xiao')
  1836. v.meter = res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter*1 ? res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter : v.expend_meters;
  1837. v.car_depart_id = v.id;
  1838. }
  1839. v.roll_film_number_arr = this.rollFilmList.find(c => c.id == v.roll_film_id).roll_film_number_arr;
  1840. // v.roll_film_number_arr = [];
  1841. })
  1842. console.log(data,'zhen')
  1843. this.formData.sub[index].gridOptions.data = [...this.formData.sub[index].gridOptions.data, ...JSON.parse(JSON.stringify(data))];
  1844. this.$forceUpdate();
  1845. })
  1846. } else {
  1847. this.formData.sub[index].gridOptions.data = [{ car_depart_id: '', car_depart_name: '', basic_roll_film_id: '', basic_roll_film_name: '', roll_film_id: '', roll_film_name: '', meter: '', roll_film_number: '', roll_film_number_arr: [] }];
  1848. }
  1849. this.$forceUpdate();
  1850. },
  1851. getArr(arr) {
  1852. let data = [];
  1853. arr.forEach(ele => {
  1854. if (ele.children.length != 0) {
  1855. data = [...data, ...this.getArr(ele.children)];
  1856. } else {
  1857. data.push(ele);
  1858. }
  1859. });
  1860. return data;
  1861. },
  1862. handleSelectFourShop(e) {
  1863. if (e) {
  1864. this.formData.storehouse_id = this.fourShopList.find(v => v.id == e).storehouse_id;
  1865. this.formData.technical_manager = this.fourShopList.find(v => v.id == e).technical_manager;
  1866. this.formData.regional_manager = this.fourShopList.find(v => v.id == e).regional_manager;
  1867. this.formData.company_id = this.fourShopList.find(v => v.id == e).company_id;
  1868. this.formData.area = this.fourShopList.find(v => v.id == e).area;
  1869. this.formData.contract_person = this.fourShopList.find(v => v.id == e).contract_person;
  1870. this.formData.contract_phone = this.fourShopList.find(v => v.id == e).contract_phone;
  1871. this.formData.regional_manager = this.fourShopList.find(v => v.id == e).regional_manager;
  1872. this.formData.address = this.fourShopList.find(v => v.id == e).address;
  1873. this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => (v.company_id == this.formData.company_id && (this.formData.basic_type_item_id ? this.workProductList.find(x => x.id == this.formData.basic_type_item_id).b_r_f_id.split(',').map(b => b * 1).indexOf(v.basic_roll_film_id) != -1 : true)));
  1874. this.formData.sub.forEach(v => {
  1875. v.roll_film_combine_id = '';
  1876. })
  1877. let id = this.fourShopList.find(v => v.id == this.formData.four_shop_id).construction_person.map(c => c.id);
  1878. let arr = JSON.parse(JSON.stringify(this.employeeList));
  1879. let arr1 = [];
  1880. let arr2 = [];
  1881. arr.forEach(v => {
  1882. v.title = v.emp_name
  1883. if (id.indexOf(v.id) == -1) {
  1884. v.disable = true;
  1885. arr1.push(v);
  1886. } else {
  1887. v.disable = false;
  1888. arr2.push(v)
  1889. }
  1890. })
  1891. this.constructionPersonList = arr2.concat(arr1);
  1892. let dataa ={}
  1893. if(this.type==2){
  1894. dataa.order_number = this.$route.query.order_number;
  1895. }
  1896. //获取卷膜型号
  1897. this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id,...dataa }).then(res => {
  1898. this.rollFilmList = res.data.data
  1899. })
  1900. } else {
  1901. this.formData.storehouse_id = '';
  1902. this.formData.company_id = '';
  1903. this.formData.area = '';
  1904. this.formData.contract_person = '';
  1905. this.formData.contract_phone = '';
  1906. this.formData.address = '';
  1907. this.formData.sub.roll_film_combine_id = '';
  1908. this.formData.construction_person = '';
  1909. this.formData.technical_manager = '';
  1910. this.formData.regional_manager = '';
  1911. }
  1912. this.formData.sub.forEach(v => {
  1913. v.gridOptions.data = [];
  1914. })
  1915. },
  1916. handleSelectVin(e) {
  1917. if (e) {
  1918. let id = this.ownerList.find(v => (v.vin_no == e)).id ? this.ownerList.find(v => (v.vin_no == e)).id : 0;
  1919. this.formData.own_id = id;
  1920. if (id) {
  1921. this.is_create = false;
  1922. this.formData.car_type = this.ownerList.find(v => (v.vin_no == e)).car_type;
  1923. this.formData.car_file_id = this.ownerList.find(v => v.vin_no == e).car_file_id;
  1924. this.formData.is_big = this.carFilesList.find(v => v.id == this.formData.car_file_id).is_big;
  1925. this.axios.post('/api/ownerDetail', { id }).then(res => {
  1926. this.nameList = res.data.sub.filter(v => v.use)
  1927. })
  1928. } else {
  1929. this.is_create = true;
  1930. }
  1931. } else {
  1932. this.is_create = false;
  1933. this.formData.name_id = '';
  1934. this.formData.car_type = '';
  1935. this.formData.car_file_id = '';
  1936. this.formData.own_id = '';
  1937. this.formData.is_big = '';
  1938. }
  1939. },
  1940. }
  1941. }
  1942. </script>
  1943. <style lang="scss" scoped>
  1944. .content {
  1945. height: calc(100% - 40px);
  1946. overflow: auto;
  1947. .content_title {
  1948. font-size: 26px;
  1949. letter-spacing: 20px;
  1950. font-weight: bold;
  1951. text-align: center;
  1952. }
  1953. }
  1954. .form {
  1955. display: flex;
  1956. flex-wrap: wrap;
  1957. .item {
  1958. width: 25%;
  1959. }
  1960. }
  1961. .bdy {
  1962. border: 1px solid #e8e5e5;
  1963. margin: 10px 0;
  1964. padding: 10px;
  1965. .title {
  1966. font-size: 20px;
  1967. font-weight: bold;
  1968. }
  1969. }
  1970. .total_img {
  1971. display: flex;
  1972. flex-wrap: wrap;
  1973. img {
  1974. max-width: 108px;
  1975. max-height: 108px;
  1976. }
  1977. .img_item {
  1978. position: relative;
  1979. .img_title {
  1980. text-align: center;
  1981. }
  1982. }
  1983. }
  1984. .upd_file {
  1985. width: 108px;
  1986. height: 108px;
  1987. cursor: pointer;
  1988. background-color: #f4f5f7;
  1989. display: flex;
  1990. align-items: center;
  1991. justify-content: center;
  1992. }
  1993. .img_content {
  1994. position: relative;
  1995. }
  1996. .delete-img {
  1997. position: absolute;
  1998. right: 0px;
  1999. top: 0px;
  2000. color: red;
  2001. cursor: pointer;
  2002. }
  2003. .btn {
  2004. cursor: pointer;
  2005. }
  2006. </style>