TaskUploadData.vue 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570
  1. <template>
  2. <a-spin :spinning="uploading" size="large" tip="正在提交资料,请勿关闭当前网页...">
  3. <div>
  4. <a-card :bordered="false" :title="'特审复开资料填写'" style="margin-top: 10px;">
  5. <a-form-model
  6. ref="form"
  7. :label-col="labelCol"
  8. :wrapper-col="wrapperCol"
  9. :model="model"
  10. :rules="rules"
  11. >
  12. <!-- 业务基本情况内容 -->
  13. <a-card :bordered="true">
  14. <div slot="title">
  15. 基础信息
  16. <span v-show="specialResult.basicInfoState == '1'">✅</span>
  17. <span v-show="specialResult.basicInfoState == '0'">❌</span>
  18. </div>
  19. <a-row>
  20. <a-col :span="24">
  21. <a-form-model-item label="用户选择" prop="userOpenState" v-bind="labelCol1">
  22. <a-radio-group v-model="model.userLable" button-style="solid" @change="changeUserLable()">
  23. <a-radio-button value="0">个人户</a-radio-button>
  24. <a-radio-button value="1">单位户</a-radio-button>
  25. </a-radio-group>
  26. </a-form-model-item>
  27. </a-col>
  28. <a-col :span="24">
  29. <a-form-model-item label="申请复开号码" prop="openingNumber" v-bind="labelCol1">
  30. <a-input disabled="true" v-model="model.openingNumber" placeholder="申请复开号码"></a-input>
  31. </a-form-model-item>
  32. </a-col>
  33. <a-col :span="24">
  34. <a-form-model-item label="客户名称(使用人)" prop="customerName" v-bind="labelCol1">
  35. <a-input disabled="true" v-model="model.customerName" placeholder="客户名称/使用人名称"></a-input>
  36. </a-form-model-item>
  37. </a-col>
  38. <a-col :span="24" v-if="model.userLable == '1'">
  39. <a-form-model-item label="单位名称" prop="customerName" v-bind="labelCol1">
  40. <a-input v-model="model.unitName" placeholder="单位名称"></a-input>
  41. </a-form-model-item>
  42. </a-col>
  43. <a-col :span="24">
  44. <a-form-model-item label="关停时间" prop="shutdownTime" v-bind="labelCol1">
  45. <a-date-picker disabled="true" :style="{width:'100%'}" v-model="model.shutdownTime"
  46. format="YYYY-MM-DD HH:mm:ss"
  47. showTime valueFormat="YYYY-MM-DD HH:mm:ss"/>
  48. </a-form-model-item>
  49. </a-col>
  50. <a-col :span="24">
  51. <a-form-model-item label="申请复开原因" prop="reasonReopening" v-bind="labelCol1">
  52. <a-input v-model="model.reasonReopening" placeholder="申请复开原因"></a-input>
  53. </a-form-model-item>
  54. </a-col>
  55. <a-col :span="24">
  56. <a-form-model-item label="材料标签选择" prop="userOpenState" v-bind="labelCol1">
  57. <a-radio-group v-model="model.materialLabel" button-style="solid">
  58. <a-radio-button value="0">材料不全(有特审)</a-radio-button>
  59. <a-radio-button value="1">材料齐全(无特审)</a-radio-button>
  60. </a-radio-group>
  61. </a-form-model-item>
  62. </a-col>
  63. <a-col :span="24">
  64. <a-form-model-item label="关停标签选择" prop="userOpenState" v-bind="labelCol1">
  65. <a-radio-group v-model="model.shutdownLabel" button-style="solid">
  66. <a-radio-button value="0">安防停机(高危漫游地)</a-radio-button>
  67. <a-radio-button value="1">安防关停(紫名单)</a-radio-button>
  68. <a-radio-button value="2">安防停机(专班研判)</a-radio-button>
  69. <a-radio-button value="3">安防停机(可复开)</a-radio-button>
  70. <a-radio-button value="4">沉默移动卡保护性单停</a-radio-button>
  71. <a-radio-button value="5">集团一点停复机(单停)</a-radio-button>
  72. <a-radio-button value="6">大数据保护停机单停</a-radio-button>
  73. <a-radio-button value="7">工信部断卡单停</a-radio-button>
  74. <a-radio-button value="8">实人核验未通过关停(单停)</a-radio-button>
  75. </a-radio-group>
  76. </a-form-model-item>
  77. </a-col>
  78. </a-row>
  79. </a-card>
  80. <!-- 系统实名制截图-->
  81. <a-card :bordered="true">
  82. <div slot="title">
  83. 系统实名制截图
  84. <span v-show="specialResult.nameFindComplianceState == '1'">✅</span>
  85. <span v-show="specialResult.nameFindComplianceState == '0'">❌</span>
  86. </div>
  87. <div class="clearfix">
  88. <a-upload
  89. listType="picture-card"
  90. :fileList="nameFindCompliance"
  91. :beforeUpload="beforeUploadNameFindCompliance"
  92. :multiple="true"
  93. :remove="handleRemoveNameFindCompliance"
  94. @preview="handlePreview"
  95. >
  96. <div v-if="nameFindCompliance.length < 2 && specialResult.nameFindComplianceState != 1">
  97. <a-icon type="plus"/>
  98. <div class="ant-upload-text">点我上传特审单</div>
  99. </div>
  100. </a-upload>
  101. <!-- 放大预览窗口 -->
  102. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  103. <img alt="example" style="width: 100%" :src="previewImage"/>
  104. </a-modal>
  105. <a-form-model-item label="实名制截图备注:" v-bind="labelCol1Plus">
  106. <a-textarea :disabled="specialResult.nameFindComplianceState == 1 ? true : false" style="height: 50px"
  107. v-model="nameFindComplianceRemark"
  108. placeholder="如没有系统实名制截图,需要说明原因"
  109. />
  110. <!-- :auto-size="{ minRows: 3, maxRows: 5 }"-->
  111. </a-form-model-item>
  112. <!-- 备注-->
  113. <li style="color: red" v-if="specialResult.nameFindComplianceState == 0 && specialResult.nameFindComplianceNote != null">
  114. 稽核结果备注:{{ specialResult.nameFindComplianceNote}}
  115. </li>
  116. </div>
  117. </a-card>
  118. <!-- 材料齐不全有特审核-->
  119. <a-card v-if="model.materialLabel == '0'" :bordered="true">
  120. <div slot="title">
  121. 特审单
  122. <span v-show="specialResult.specialReviewFormState == '1'">✅</span>
  123. <span v-show="specialResult.specialReviewFormState == '0'">❌</span>
  124. </div>
  125. <div class="clearfix">
  126. <a-upload
  127. listType="picture-card"
  128. :fileList="specialReviewForm"
  129. :beforeUpload="beforeUploadSpecialReviewForm"
  130. :multiple="true"
  131. :remove="handleRemoveSpecialReviewForm"
  132. @preview="handlePreview"
  133. >
  134. <div v-if="specialReviewForm.length < 2 && specialResult.specialReviewFormState != 1">
  135. <a-icon type="plus"/>
  136. <div class="ant-upload-text">点我上传特审单</div>
  137. </div>
  138. </a-upload>
  139. <!-- 放大预览窗口 -->
  140. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  141. <img alt="example" style="width: 100%" :src="previewImage"/>
  142. </a-modal>
  143. <!-- 备注-->
  144. <li style="color: red" v-if="specialResult.specialReviewFormState == 0 && specialResult.specialReviewFormNote != null">
  145. 稽核结果备注:{{ specialResult.specialReviewFormNote}}
  146. </li>
  147. </div>
  148. </a-card>
  149. <!-- 附件资料 -->
  150. <a-card :bordered="true">
  151. <div slot="title">
  152. 身份证照片/正反面
  153. <span v-show="specialResult.idCardState == '1'">✅</span>
  154. <span v-show="specialResult.idCardState == '0'">❌</span>
  155. </div>
  156. <div class="clearfix">
  157. <a-upload
  158. listType="picture-card"
  159. :fileList="fileListIdCard"
  160. :beforeUpload="beforeUploadIdCard"
  161. :multiple="true"
  162. :remove="handleRemoveIdCard"
  163. @preview="handlePreview"
  164. >
  165. <div v-if="fileListIdCard.length < 2 && specialResult.idCardState != 1">
  166. <a-icon type="plus"/>
  167. <div class="ant-upload-text">点我上传身份证正/反面</div>
  168. </div>
  169. </a-upload>
  170. <!-- 放大预览窗口 -->
  171. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  172. <img alt="example" style="width: 100%" :src="previewImage"/>
  173. </a-modal>
  174. <!-- 备注-->
  175. <li style="color: red" v-if="specialResult.idCardState == 0 && specialResult.idCardNote != null">
  176. 稽核结果备注:{{ specialResult.idCardNote}}
  177. </li>
  178. </div>
  179. </a-card>
  180. <!-- 手持证件半身照片-->
  181. <a-card :bordered="true">
  182. <div slot="title">
  183. 手持证件半身照片
  184. <span v-show="specialResult.handCertificateState == '1'">✅</span>
  185. <span v-show="specialResult.handCertificateState == '0'">❌</span>
  186. </div>
  187. <div class="clearfix">
  188. <a-upload
  189. listType="picture-card"
  190. :fileList="fileListHandCertificate"
  191. :beforeUpload="beforeUploadCertificate"
  192. :multiple="true"
  193. :remove="handleRemoveCertificate"
  194. @preview="handlePreview"
  195. >
  196. <div v-if="fileListHandCertificate.length < 2 && specialResult.handCertificateState != 1" >
  197. <a-icon type="plus"/>
  198. <div class="ant-upload-text">点我上传手持身份证</div>
  199. </div>
  200. </a-upload>
  201. <!-- 备注-->
  202. <li style="color: red" v-if="specialResult.handCertificateState == 0 && specialResult.handCertificateNote != null">
  203. 稽核结果备注:{{ specialResult.handCertificateNote}}
  204. </li>
  205. </div>
  206. </a-card>
  207. <!-- 号卡照片-->
  208. <a-card v-if="model.userLable == '0'" :bordered="true">
  209. <div slot="title">
  210. 号卡照片
  211. <span v-show="specialResult.numberCardState == '1'">✅</span>
  212. <span v-show="specialResult.numberCardState == '0'">❌</span>
  213. </div>
  214. <div class="clearfix">
  215. <a-upload
  216. listType="picture-card"
  217. :fileList="fileListNumberCard"
  218. :beforeUpload="beforeUploadNumberCard"
  219. :multiple="true"
  220. :remove="handleRemoveNumberCard"
  221. @preview="handlePreview"
  222. >
  223. <div v-if="fileListNumberCard.length < 2 && specialResult.numberCardState != 1">
  224. <a-icon type="plus"/>
  225. <div class="ant-upload-text">点我上传号卡照片</div>
  226. </div>
  227. </a-upload>
  228. <!-- 放大预览窗口 -->
  229. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  230. <img alt="example" style="width: 100%" :src="previewImage"/>
  231. </a-modal>
  232. <!-- 备注-->
  233. <li style="color: red" v-if="specialResult.numberCardState == 0 && specialResult.numberCardNote != null">
  234. 稽核结果备注:{{ specialResult.numberCardNote}}
  235. </li>
  236. </div>
  237. </a-card>
  238. <!-- 使用人证件-->
  239. <a-card v-if="model.userLable == '1'" :bordered="true">
  240. <div slot="title">
  241. 使用人证件
  242. <span v-show="specialResult.userCertificateState == '1'">✅</span>
  243. <span v-show="specialResult.userCertificateState == '0'">❌</span>
  244. </div>
  245. <div class="clearfix">
  246. <a-upload
  247. listType="picture-card"
  248. :fileList="fileListUserCertificate"
  249. :beforeUpload="beforeUploadUserCertificate"
  250. :multiple="true"
  251. :remove="handleRemoveUserCertificate"
  252. @preview="handlePreview"
  253. >
  254. <div v-if="fileListUserCertificate.length < 2 && specialResult.userCertificateState != 1 ">
  255. <a-icon type="plus"/>
  256. <div class="ant-upload-text">点我上传使用人证件</div>
  257. </div>
  258. </a-upload>
  259. <!-- 放大预览窗口 -->
  260. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  261. <img alt="example" style="width: 100%" :src="previewImage"/>
  262. </a-modal>
  263. <!-- 备注-->
  264. <li style="color: red" v-if="specialResult.userCertificateState == 0 && specialResult.userCertificateNote != null">
  265. 稽核结果备注:{{ specialResult.userCertificateNote}}
  266. </li>
  267. </div>
  268. </a-card>
  269. <!-- 营业执照副本(盖公章)-->
  270. <a-card v-if="model.userLable == '1'" :bordered="true">
  271. <div slot="title">
  272. 营业执照副本(盖公章)
  273. <span v-show="specialResult.businessLicenseState == '1'">✅</span>
  274. <span v-show="specialResult.businessLicenseState == '0'">❌</span>
  275. </div>
  276. <div class="clearfix">
  277. <a-upload
  278. listType="picture-card"
  279. :fileList="fileListBusiness"
  280. :beforeUpload="beforeUploadBusiness"
  281. :multiple="true"
  282. :remove="handleRemoveBusiness"
  283. @preview="handlePreview"
  284. >
  285. <div v-if="fileListBusiness.length < 2 && specialResult.businessLicenseState != 1">
  286. <a-icon type="plus"/>
  287. <div class="ant-upload-text">点我上传营业执照副本(盖公章)</div>
  288. </div>
  289. </a-upload>
  290. <!-- 放大预览窗口 -->
  291. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  292. <img alt="example" style="width: 100%" :src="previewImage"/>
  293. </a-modal>
  294. <!-- 备注-->
  295. <li style="color: red" v-if="specialResult.businessLicenseState == 0 && specialResult.businessLicenseNote != null">
  296. 稽核结果备注:{{ specialResult.businessLicenseNote}}
  297. </li>
  298. </div>
  299. </a-card>
  300. <!-- 介绍信-->
  301. <a-card v-if="model.userLable == '1'" :bordered="true">
  302. <div slot="title">
  303. 介绍信
  304. <span v-show="specialResult.letterIntroductionState == '1'">✅</span>
  305. <span v-show="specialResult.letterIntroductionState == '0'">❌</span>
  306. </div>
  307. <div class="clearfix">
  308. <a-upload
  309. listType="picture-card"
  310. :fileList="fileListIntroduction"
  311. :beforeUpload="beforeUploadIntroduction"
  312. :multiple="true"
  313. :remove="handleRemoveIntroduction"
  314. @preview="handlePreview"
  315. >
  316. <div v-if="fileListIntroduction.length < 2 && specialResult.letterIntroductionState != 1">
  317. <a-icon type="plus"/>
  318. <div class="ant-upload-text">点我上传介绍信</div>
  319. </div>
  320. </a-upload>
  321. <!-- 放大预览窗口 -->
  322. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  323. <img alt="example" style="width: 100%" :src="previewImage"/>
  324. </a-modal>
  325. <!-- 备注-->
  326. <li style="color: red" v-if="specialResult.letterIntroductionState == 0 && specialResult.letterIntroductionNote != null">
  327. 稽核结果备注:{{ specialResult.letterIntroductionNote}}
  328. </li>
  329. </div>
  330. </a-card>
  331. <!-- 防诈骗承诺涵(使用人签署)-->
  332. <a-card :bordered="true">
  333. <div slot="title">
  334. 防诈骗承诺涵(使用人签署)
  335. <span v-show="specialResult.fraudPreventionState == '1'">✅</span>
  336. <span v-show="specialResult.fraudPreventionState == '0'">❌</span>
  337. </div>
  338. <div class="clearfix">
  339. <a-upload
  340. listType="picture-card"
  341. :fileList="fileListLetter"
  342. :beforeUpload="beforeUploadLetter"
  343. :multiple="true"
  344. :remove="handleRemoveLetter"
  345. @preview="handlePreview"
  346. >
  347. <div v-if="fileListLetter.length < 2 && specialResult.fraudPreventionState != 1">
  348. <a-icon type="plus"/>
  349. <div class="ant-upload-text">点我上传防诈骗承若涵(使用人签署)</div>
  350. </div>
  351. </a-upload>
  352. <!-- 放大预览窗口 -->
  353. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  354. <img alt="example" style="width: 100%" :src="previewImage"/>
  355. </a-modal>
  356. <!-- 备注-->
  357. <li style="color: red" v-if="specialResult.fraudPreventionState == 0 && specialResult.fraudPreventionNote != null">
  358. 稽核结果备注:{{ specialResult.fraudPreventionNote}}
  359. </li>
  360. </div>
  361. </a-card>
  362. <!-- 消费凭证-->
  363. <a-card v-if="model.shutdownLabel == '0'" :bordered="true">
  364. <div slot="title">
  365. 消费凭证
  366. <span v-show="specialResult.consumptionVoucherState == '1'">✅</span>
  367. <span v-show="specialResult.consumptionVoucherState == '0'">❌</span>
  368. </div>
  369. <div class="clearfix">
  370. <a-upload
  371. listType="picture-card"
  372. :fileList="fileListVoucher"
  373. :beforeUpload="beforeUploadVoucher"
  374. :multiple="true"
  375. :remove="handleRemoveVoucher"
  376. @preview="handlePreview"
  377. >
  378. <div v-if="fileListVoucher.length < 2 && specialResult.consumptionVoucherState != 1 ">
  379. <a-icon type="plus"/>
  380. <div class="ant-upload-text">点我上传消费凭证</div>
  381. </div>
  382. </a-upload>
  383. <!-- 放大预览窗口 -->
  384. <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
  385. <img alt="example" style="width: 100%" :src="previewImage"/>
  386. </a-modal>
  387. <!-- 备注-->
  388. <li style="color: red" v-if="specialResult.consumptionVoucherState == 0 && specialResult.consumptionVoucherNote != null">
  389. 稽核结果备注:{{ specialResult.consumptionVoucherNote}}
  390. </li>
  391. </div>
  392. </a-card>
  393. <!-- 承诺视频-->
  394. <a-card v-if="model.shutdownLabel == '5'" title="承诺视频" :bordered="true">
  395. <div slot="title">
  396. 承诺视频
  397. <span v-show="specialResult.commitmentVideoState == '1'">✅</span>
  398. <span v-show="specialResult.commitmentVideoState == '0'">❌</span>
  399. </div>
  400. <div class="clearfix">
  401. <a-upload
  402. listType="picture-card"
  403. :fileList="fileListVideo"
  404. :beforeUpload="beforeUploadVideo"
  405. :multiple="true"
  406. :remove="handleRemoveVideo"
  407. @preview="handlePreviewVideo"
  408. >
  409. <div v-if="fileListVideo.length < 1 && specialResult.commitmentVideoState != 1">
  410. <a-icon type="plus"/>
  411. <div class="ant-upload-text">点我上传承诺视频</div>
  412. </div>
  413. </a-upload>
  414. <!-- 放大预览窗口 -->
  415. <a-modal :visible="previewVideo" :footer="null" @cancel="handleVideoCancel">
  416. <!-- <img alt="example" style="width: 100%" :src="previewImage"/>-->
  417. <video
  418. ref="myVideo"
  419. :poster="poster"
  420. :src="previewImage"
  421. :controls="controls"
  422. oncontextmenu="return false"
  423. @timeupdate="timeupdate"
  424. controlslist="nodownload"
  425. class="video-box"
  426. style="width: 470px;height:330px"
  427. ></video>
  428. </a-modal>
  429. <!-- 备注-->
  430. <li style="color: red" v-if="specialResult.commitmentVideoState == 0 && specialResult.commitmentVideoNote != null">
  431. 稽核结果备注:{{ specialResult.commitmentVideoNote}}
  432. </li>
  433. </div>
  434. </a-card>
  435. <!-- 提交申请 -->
  436. <a-form-model-item :wrapper-col="{ span: 14, offset: 10 }" style="margin-top: 10px;">
  437. <a-space>
  438. <a-button type="primary" @click="handleUpload">
  439. 提交申请
  440. </a-button>
  441. </a-space>
  442. </a-form-model-item>
  443. </a-form-model>
  444. </a-card>
  445. </div>
  446. </a-spin>
  447. </template>
  448. <script>
  449. import reqwest from 'reqwest';
  450. import {httpAction, postAction} from "@api/manage";
  451. import dayjs, {Dayjs} from 'dayjs';
  452. import VueAMap from "vue-amap";
  453. export default {
  454. name: 'TaskUploadData',
  455. inject: ['closeCurrent'],
  456. data() {
  457. return {
  458. //结果
  459. specialResult: {},
  460. //上级传参
  461. query: {},
  462. //客户信息ID
  463. infoId: "",
  464. //客户资料ID
  465. dataId: "",
  466. model: {
  467. "shutdownLabel": "0",
  468. "materialLabel": "0",
  469. "userLable": "0",
  470. "openingNumber": ""
  471. },
  472. //系统实名制截图
  473. nameFindCompliance: [],
  474. //系统实名制截图备注
  475. nameFindComplianceRemark: "",
  476. //特审单
  477. specialReviewForm: [],
  478. //身份证正反面
  479. fileListIdCard: [],
  480. //手持证件照片
  481. fileListHandCertificate: [],
  482. //号卡照片
  483. fileListNumberCard: [],
  484. //防诈骗承诺涵
  485. fileListLetter: [],
  486. //营业执照副本
  487. fileListBusiness: [],
  488. //介绍信
  489. fileListIntroduction: [],
  490. //使用人证件
  491. fileListUserCertificate: [],
  492. //消费凭证
  493. fileListVoucher: [],
  494. //承诺视频
  495. fileListVideo: [],
  496. //表单验证
  497. rules: {
  498. openingNumber: [
  499. {required: true, message: '必须输入手机号'},
  500. ],
  501. customerName: [
  502. {required: true, message: '必须输入客户名称'},
  503. ],
  504. shutdownTime: [
  505. {required: true, message: '必须选择关停时间'},
  506. ]
  507. },
  508. previewVisible: false,
  509. previewVideo: false,
  510. previewImage: "",
  511. uploading: false,
  512. formState: {},
  513. labelCol: {span: 1},
  514. wrapperCol: {span: 23},
  515. // 1列
  516. labelCol1: {
  517. labelCol: {
  518. xs: {span: 24},
  519. sm: {span: 2},
  520. },
  521. wrapperCol: {
  522. xs: {span: 24},
  523. sm: {span: 21},
  524. }
  525. },
  526. // 2列
  527. labelCol2: {
  528. labelCol: {
  529. xs: {span: 24},
  530. sm: {span: 4},
  531. },
  532. wrapperCol: {
  533. xs: {span: 24},
  534. sm: {span: 18},
  535. }
  536. },
  537. labelCol1Plus: {
  538. labelCol: {
  539. xs: {span: 24},
  540. sm: {span: 2},
  541. },
  542. wrapperCol: {
  543. xs: {span: 24},
  544. sm: {span: 15},
  545. }
  546. },
  547. url: {
  548. importExcel: window._CONFIG['domainURL'] + "/smsCheck/task/importCustomerExcel",
  549. minioUpload: "/special/examination/upload/files",
  550. findById: "/special/examination/find/id",
  551. findCheckState: "/special/examination/find/check/log",
  552. },
  553. videoState: false, // 视频播放状态
  554. // 学时
  555. studyTime: {
  556. currentTime: 0, // 当前已学时长
  557. duration: 0 // 总时长
  558. },
  559. timer: {}, // 定时器
  560. pauseTimer: {} // 暂停定时器
  561. }
  562. },
  563. props: {
  564. taskInfo: {
  565. type: Object,
  566. require: true
  567. },
  568. poster: {
  569. type: String,
  570. required: false,
  571. default: ""
  572. },
  573. src: {
  574. type: String,
  575. required: true
  576. },
  577. controls: {
  578. type: Boolean,
  579. required: false,
  580. default: true
  581. },
  582. control: {
  583. type: Boolean,
  584. required: false,
  585. default: false
  586. },
  587. videoData: {
  588. type: Object,
  589. required: true
  590. }
  591. },
  592. watch: {
  593. // 监听操作
  594. videoData(val, oldVal) {
  595. const {currentTime, duration} = val;
  596. if (currentTime && duration && currentTime < duration) {
  597. this.hintOperate();
  598. }
  599. }
  600. },
  601. created() {
  602. this.infoId = this.$route.query.id;
  603. this.query.data = this.$route.query.data;
  604. //复开号码
  605. this.model.openingNumber = this.query.data.smsNumber
  606. //客户名称
  607. this.model.customerName = this.query.data.customerName
  608. //关停时间
  609. this.model.shutdownTime = this.query.data.shutdownLabelDate
  610. if (this.$route.query.rectification) {
  611. //整改操作获取回填信息
  612. this.findById(this.infoId);
  613. }
  614. },
  615. mounted() {
  616. // 监听视频播放
  617. this.$refs.myVideo.addEventListener("play", () => {
  618. this.openTimer();
  619. });
  620. // 监听视频暂停
  621. this.$refs.myVideo.addEventListener("pause", () => {
  622. this.closeTimer();
  623. });
  624. },
  625. methods: {
  626. /**获取稽核结果*/
  627. findCheckState(id) {
  628. let that = this;
  629. let model = {
  630. "dataId": id,
  631. }
  632. postAction(this.url.findCheckState, model)
  633. .then((res) => {
  634. if (res.success) {
  635. that.specialResult = res.result;
  636. }
  637. })
  638. },
  639. /**整改操作获取回填信息*/
  640. findById(id) {
  641. let that = this;
  642. let model = {
  643. "infoId": id,
  644. }
  645. postAction(this.url.findById, model)
  646. .then((res) => {
  647. if (res.success) {
  648. this.result = res.result;
  649. that.dataId = this.result.id;
  650. //获取稽核结果
  651. that.findCheckState(that.dataId)
  652. this.model.userLable = this.result.userLable.toString();
  653. this.model.openingNumber = this.result.openingNumber;
  654. this.model.customerName = this.result.customerName;
  655. this.model.unitName = this.result.unitName;
  656. this.model.shutdownTime = this.result.shutdownTime
  657. this.model.reasonReopening = this.result.reasonReopening
  658. this.model.materialLabel = this.result.materialLabel.toString();
  659. this.model.shutdownLabel = this.result.shutdownLabel.toString();
  660. this.specialNote = this.result.specialNote;
  661. this.model.status = this.result.status;
  662. // //身份证正反面
  663. if (this.result.idCard != null) {
  664. let fileListIdCard = this.result.idCard.split(",");
  665. for (var i in fileListIdCard) {
  666. let data = {
  667. uid: "-" + i,
  668. name: 'image.png',
  669. status: 'done',
  670. url: fileListIdCard[i],
  671. }
  672. this.fileListIdCard.push(data)
  673. }
  674. }
  675. //手持证件照片
  676. if (this.result.handCertificate != null) {
  677. let handCertificate = this.result.handCertificate.split(",");
  678. for (var i in handCertificate) {
  679. let data = {
  680. uid: "-" + i,
  681. name: 'image.png',
  682. status: 'done',
  683. url: handCertificate[i],
  684. }
  685. this.fileListHandCertificate.push(data)
  686. }
  687. }
  688. //号卡照片
  689. if (this.result.numberCard != null) {
  690. let numberCard = this.result.numberCard.split(",");
  691. for (var i in numberCard) {
  692. let data = {
  693. uid: "-" + i,
  694. name: 'image.png',
  695. status: 'done',
  696. url: numberCard[i],
  697. }
  698. this.fileListNumberCard.push(data)
  699. }
  700. }
  701. //使用人证件
  702. if (this.result.userCertificate != null) {
  703. let userCertificate = this.result.userCertificate.split(",");
  704. for (var i in userCertificate) {
  705. let data = {
  706. uid: "-" + i,
  707. name: 'image.png',
  708. status: 'done',
  709. url: userCertificate[i],
  710. }
  711. this.fileListUserCertificate.push(data)
  712. }
  713. }
  714. //营业执照副本
  715. if (this.result.businessLicense != null) {
  716. let businessLicense = this.result.businessLicense.split(",");
  717. for (var i in businessLicense) {
  718. let data = {
  719. uid: "-" + i,
  720. name: 'image.png',
  721. status: 'done',
  722. url: businessLicense[i],
  723. }
  724. this.fileListBusiness.push(data)
  725. }
  726. }
  727. //介绍信
  728. if (this.result.letterIntroduction != null) {
  729. let letterIntroduction = this.result.letterIntroduction.split(",");
  730. for (var i in letterIntroduction) {
  731. let data = {
  732. uid: "-" + i,
  733. name: 'image.png',
  734. status: 'done',
  735. url: letterIntroduction[i],
  736. }
  737. this.fileListIntroduction.push(data)
  738. }
  739. }
  740. //防诈骗承诺涵
  741. if (this.result.letterCommitment != null) {
  742. let letterCommitment = this.result.letterCommitment.split(",");
  743. for (var i in letterCommitment) {
  744. let data = {
  745. uid: "-" + i,
  746. name: 'image.png',
  747. status: 'done',
  748. url: letterCommitment[i],
  749. }
  750. this.fileListLetter.push(data)
  751. }
  752. }
  753. //消费凭证
  754. if (this.result.consumptionVoucher != null) {
  755. let consumptionVoucher = this.result.consumptionVoucher.split(",");
  756. for (var i in consumptionVoucher) {
  757. let data = {
  758. uid: "-" + i,
  759. name: 'image.png',
  760. status: 'done',
  761. url: consumptionVoucher[i],
  762. }
  763. this.fileListVoucher.push(data)
  764. }
  765. }
  766. //承诺视频
  767. if (this.result.commitmentVideo != null) {
  768. let commitmentVideo = this.result.commitmentVideo.split(",");
  769. for (var i in commitmentVideo) {
  770. let data = {
  771. uid: "-" + i,
  772. name: 'image.png',
  773. status: 'done',
  774. url: commitmentVideo[i],
  775. }
  776. this.fileListVideo.push(data)
  777. }
  778. }
  779. //系统实名制截图
  780. if (this.result.nameFindCompliance != null) {
  781. let nameFindCompliance = this.result.nameFindCompliance.split(",");
  782. for (var i in nameFindCompliance) {
  783. let data = {
  784. uid: "-" + i,
  785. name: 'image.png',
  786. status: 'done',
  787. url: nameFindCompliance[i],
  788. }
  789. this.nameFindCompliance.push(data)
  790. }
  791. }
  792. if (this.result.nameFindComplianceRemark != null) {
  793. this.nameFindComplianceRemark = this.result.nameFindComplianceRemark
  794. }
  795. //特审单截图
  796. if (this.result.specialReviewForm != null) {
  797. let specialReviewForm = this.result.specialReviewForm.split(",");
  798. for (var i in specialReviewForm) {
  799. let data = {
  800. uid: "-" + i,
  801. name: 'image.png',
  802. status: 'done',
  803. url: specialReviewForm[i],
  804. }
  805. this.specialReviewForm.push(data)
  806. }
  807. }
  808. } else {
  809. this.$message.error("查询失败");
  810. }
  811. }).finally(() => {
  812. })
  813. },
  814. // 开启定时器
  815. openTimer() {
  816. this.timer = setInterval(() => {
  817. this.$emit("videoStudyTime", this.studyTime);
  818. }, 5000);
  819. },
  820. // 关闭定时器
  821. closeTimer() {
  822. clearInterval(this.timer);
  823. this.$emit("videoStudyTime", this.studyTime);
  824. },
  825. // 开启暂停定时器
  826. openPauseTimer() {
  827. this.pauseTimer = setInterval(() => {
  828. this.hintOperate();
  829. }, 600000);
  830. },
  831. // 关闭暂停定时器
  832. closePauseTimer() {
  833. clearInterval(this.pauseTimer);
  834. },
  835. // 提示操作
  836. hintOperate() {
  837. this.operateVideo();
  838. this.$alert("请点击确认继续学习", "提示", {
  839. confirmButtonText: "确定",
  840. confirmButtonClass: "hint-btn",
  841. showClose: false,
  842. callback: action => {
  843. this.$refs.myVideo.currentTime = this.videoData.currentTime;
  844. this.operateVideo();
  845. this.openPauseTimer();
  846. }
  847. });
  848. },
  849. // 获取当前播放位置
  850. timeupdate(e) {
  851. this.studyTime.currentTime = e.target.currentTime;
  852. this.studyTime.duration = e.target.duration ? e.target.duration : 0;
  853. },
  854. // 操作视频播放、暂停
  855. operateVideo() {
  856. if (!this.src) {
  857. this.$message({message: "暂无视频资源,请查看其他视频!"});
  858. return false;
  859. }
  860. if (this.$refs.myVideo.paused) {
  861. this.$refs.myVideo.play();
  862. this.videoState = true;
  863. } else {
  864. this.$refs.myVideo.pause();
  865. this.videoState = false;
  866. }
  867. },
  868. beforeUploadNameFindCompliance(file) {
  869. if (this.nameFindCompliance.length > 2) {//判断上传的图片数量
  870. return false
  871. }
  872. this.exeBaseSpecialNameFindCompliance(file)
  873. return false
  874. },
  875. beforeUploadSpecialReviewForm(file) {
  876. if (this.specialReviewForm.length > 2) {//判断上传的图片数量
  877. return false
  878. }
  879. this.exeBaseSpecialReviewForm(file)
  880. return false
  881. },
  882. beforeUploadIdCard(file) {
  883. if (this.fileListIdCard.length > 2) {//判断上传的图片数量
  884. return false
  885. }
  886. this.exeBaseIdCard(file)
  887. return false
  888. },
  889. beforeUploadCertificate(file) {
  890. if (this.fileListHandCertificate.length > 1) {//判断上传的图片数量
  891. return false
  892. }
  893. this.exeBaseCertificate(file)
  894. return false
  895. },
  896. beforeUploadNumberCard(file) {
  897. if (this.fileListNumberCard.length > 1) {//判断上传的图片数量
  898. return false
  899. }
  900. this.exeBaseNumberCard(file)
  901. return false
  902. },
  903. beforeUploadLetter(file) {
  904. if (this.fileListLetter.length > 1) {//判断上传的图片数量
  905. return false
  906. }
  907. this.exeBaseLetter(file)
  908. return false
  909. },
  910. beforeUploadBusiness(file) {
  911. if (this.fileListBusiness.length > 1) {//判断上传的图片数量
  912. return false
  913. }
  914. this.exeBaseBusiness(file)
  915. return false
  916. },
  917. beforeUploadIntroduction(file) {
  918. if (this.fileListIntroduction.length > 1) {//判断上传的图片数量
  919. return false
  920. }
  921. this.exeBaseIntroduction(file)
  922. return false
  923. },
  924. beforeUploadUserCertificate(file) {
  925. if (this.fileListUserCertificate.length > 1) {//判断上传的图片数量
  926. return false
  927. }
  928. this.exeBaseUserCertificate(file)
  929. return false
  930. },
  931. beforeUploadVoucher(file) {
  932. if (this.fileListVoucher.length > 1) {//判断上传的图片数量
  933. return false
  934. }
  935. this.exeBaseVocher(file)
  936. return false
  937. },
  938. beforeUploadVideo(file) {
  939. if (this.fileListVideo.length > 1) {//判断上传的图片数量
  940. return false
  941. }
  942. this.exeBaseVideo(file)
  943. return false
  944. },
  945. async exeBaseSpecialNameFindCompliance(file) {
  946. await this.getBase64(file, (imageUrl) => {
  947. if (this.nameFindCompliance.length < 2 && this.preventSpecialNameFindCompliance(imageUrl)) {//判断图片数量及去重
  948. const file2 = file
  949. file2.url = imageUrl
  950. this.nameFindCompliance = [...this.nameFindCompliance, file]
  951. this.loading = false
  952. }
  953. }).then((result) => {
  954. console.log(result)
  955. })
  956. },
  957. async exeBaseSpecialReviewForm(file) {
  958. await this.getBase64(file, (imageUrl) => {
  959. if (this.specialReviewForm.length < 2 && this.preventSpecialReviewForm(imageUrl)) {//判断图片数量及去重
  960. const file2 = file
  961. file2.url = imageUrl
  962. this.specialReviewForm = [...this.specialReviewForm, file]
  963. this.loading = false
  964. }
  965. }).then((result) => {
  966. console.log(result)
  967. })
  968. },
  969. async exeBaseIdCard(file) {
  970. await this.getBase64(file, (imageUrl) => {
  971. if (this.fileListIdCard.length < 2 && this.preventRepeatIdCard(imageUrl)) {//判断图片数量及去重
  972. const file2 = file
  973. file2.url = imageUrl
  974. this.fileListIdCard = [...this.fileListIdCard, file]
  975. this.loading = false
  976. }
  977. }).then((result) => {
  978. console.log(result)
  979. })
  980. },
  981. async exeBaseCertificate(file) {
  982. await this.getBase64(file, (imageUrl) => {
  983. if (this.fileListHandCertificate.length < 1 && this.preventRepeatCertificate(imageUrl)) {//判断图片数量及去重
  984. const file2 = file
  985. file2.url = imageUrl
  986. this.fileListHandCertificate = [...this.fileListHandCertificate, file]
  987. this.loading = false
  988. }
  989. }).then((result) => {
  990. console.log(result)
  991. })
  992. },
  993. async exeBaseNumberCard(file) {
  994. await this.getBase64(file, (imageUrl) => {
  995. if (this.fileListNumberCard.length < 1 && this.preventRepeatNumberCard(imageUrl)) {//判断图片数量及去重
  996. const file2 = file
  997. file2.url = imageUrl
  998. this.fileListNumberCard = [...this.fileListNumberCard, file]
  999. this.loading = false
  1000. }
  1001. }).then((result) => {
  1002. console.log(result)
  1003. })
  1004. },
  1005. async exeBaseLetter(file) {
  1006. await this.getBase64(file, (imageUrl) => {
  1007. if (this.fileListLetter.length < 1 && this.preventRepeatLetter(imageUrl)) {//判断图片数量及去重
  1008. const file2 = file
  1009. file2.url = imageUrl
  1010. this.fileListLetter = [...this.fileListLetter, file]
  1011. this.loading = false
  1012. }
  1013. }).then((result) => {
  1014. console.log(result)
  1015. })
  1016. },
  1017. async exeBaseBusiness(file) {
  1018. await this.getBase64(file, (imageUrl) => {
  1019. if (this.fileListBusiness.length < 1 && this.preventRepeatBusiness(imageUrl)) {//判断图片数量及去重
  1020. const file2 = file
  1021. file2.url = imageUrl
  1022. this.fileListBusiness = [...this.fileListBusiness, file]
  1023. this.loading = false
  1024. }
  1025. }).then((result) => {
  1026. console.log(result)
  1027. })
  1028. },
  1029. async exeBaseIntroduction(file) {
  1030. await this.getBase64(file, (imageUrl) => {
  1031. if (this.fileListIntroduction.length < 1 && this.preventRepeatIntroduction(imageUrl)) {//判断图片数量及去重
  1032. const file2 = file
  1033. file2.url = imageUrl
  1034. this.fileListIntroduction = [...this.fileListIntroduction, file]
  1035. this.loading = false
  1036. }
  1037. }).then((result) => {
  1038. console.log(result)
  1039. })
  1040. },
  1041. async exeBaseUserCertificate(file) {
  1042. await this.getBase64(file, (imageUrl) => {
  1043. if (this.fileListUserCertificate.length < 1 && this.preventRepeatUserCertificate(imageUrl)) {//判断图片数量及去重
  1044. const file2 = file
  1045. file2.url = imageUrl
  1046. this.fileListUserCertificate = [...this.fileListUserCertificate, file]
  1047. this.loading = false
  1048. }
  1049. }).then((result) => {
  1050. console.log(result)
  1051. })
  1052. },
  1053. async exeBaseVocher(file) {
  1054. await this.getBase64(file, (imageUrl) => {
  1055. if (this.fileListVoucher.length < 1 && this.preventRepeatVoucher(imageUrl)) {//判断图片数量及去重
  1056. const file2 = file
  1057. file2.url = imageUrl
  1058. this.fileListVoucher = [...this.fileListVoucher, file]
  1059. this.loading = false
  1060. }
  1061. }).then((result) => {
  1062. console.log(result)
  1063. })
  1064. },
  1065. async exeBaseVideo(file) {
  1066. await this.getBase64(file, (imageUrl) => {
  1067. if (this.fileListVideo.length < 1 && this.preventRepeatVideo(imageUrl)) {//判断图片数量及去重
  1068. const file2 = file
  1069. file2.url = imageUrl
  1070. this.fileListVideo = [...this.fileListVideo, file]
  1071. this.loading = false
  1072. }
  1073. }).then((result) => {
  1074. console.log(result)
  1075. })
  1076. },
  1077. //删除实名制截图
  1078. handleRemoveNameFindCompliance(file) {//删除图片
  1079. const index = this.nameFindCompliance.indexOf(file)
  1080. const newFileList = this.nameFindCompliance.slice()
  1081. newFileList.splice(index, 1)
  1082. this.nameFindCompliance = newFileList
  1083. },
  1084. //删除特审单
  1085. handleRemoveSpecialReviewForm(file) {//删除图片
  1086. const index = this.specialReviewForm.indexOf(file)
  1087. const newFileList = this.specialReviewForm.slice()
  1088. newFileList.splice(index, 1)
  1089. this.specialReviewForm = newFileList
  1090. },
  1091. //删除身份证
  1092. handleRemoveIdCard(file) {//删除图片
  1093. const index = this.fileListIdCard.indexOf(file)
  1094. const newFileList = this.fileListIdCard.slice()
  1095. newFileList.splice(index, 1)
  1096. this.fileListIdCard = newFileList
  1097. },
  1098. //删除手持身份证
  1099. handleRemoveCertificate(file) {//删除图片
  1100. const index = this.fileListHandCertificate.indexOf(file)
  1101. const newFileList = this.fileListHandCertificate.slice()
  1102. newFileList.splice(index, 1)
  1103. this.fileListHandCertificate = newFileList
  1104. },
  1105. //删除号卡
  1106. handleRemoveNumberCard(file) {
  1107. const index = this.fileListNumberCard.indexOf(file)
  1108. const newFileList = this.fileListNumberCard.slice()
  1109. newFileList.splice(index, 1)
  1110. this.fileListNumberCard = newFileList
  1111. },
  1112. //删除防诈骗承诺涵
  1113. handleRemoveLetter(file) {
  1114. const index = this.fileListLetter.indexOf(file)
  1115. const newFileList = this.fileListLetter.slice()
  1116. newFileList.splice(index, 1)
  1117. this.fileListLetter = newFileList
  1118. },
  1119. //删除营业执照副本
  1120. handleRemoveBusiness(file) {
  1121. const index = this.fileListBusiness.indexOf(file)
  1122. const newFileList = this.fileListBusiness.slice()
  1123. newFileList.splice(index, 1)
  1124. this.fileListBusiness = newFileList
  1125. },
  1126. //删除介绍信
  1127. handleRemoveIntroduction(file) {
  1128. const index = this.fileListIntroduction.indexOf(file)
  1129. const newFileList = this.fileListIntroduction.slice()
  1130. newFileList.splice(index, 1)
  1131. this.fileListIntroduction = newFileList
  1132. },
  1133. //删除使用人证件
  1134. handleRemoveUserCertificate(file) {
  1135. const index = this.fileListUserCertificate.indexOf(file)
  1136. const newFileList = this.fileListUserCertificate.slice()
  1137. newFileList.splice(index, 1)
  1138. this.fileListUserCertificate = newFileList
  1139. },
  1140. //消费凭证
  1141. handleRemoveVoucher(file) {
  1142. const index = this.fileListVoucher.indexOf(file)
  1143. const newFileList = this.fileListVoucher.slice()
  1144. newFileList.splice(index, 1)
  1145. this.fileListVoucher = newFileList
  1146. },
  1147. //承诺视频
  1148. handleRemoveVideo(file) {
  1149. const index = this.fileListVideo.indexOf(file)
  1150. const newFileList = this.fileListVideo.slice()
  1151. newFileList.splice(index, 1)
  1152. this.fileListVideo = newFileList
  1153. },
  1154. //排除相同图片
  1155. preventRepeatCertificate(url) {
  1156. // 排除相同图片
  1157. for (let i = 0, len = this.fileListHandCertificate.length; i < len; i++) {
  1158. if (this.fileListIdCard[i].url === url) {
  1159. return false
  1160. }
  1161. }
  1162. return true
  1163. },
  1164. //排除相同图片
  1165. preventSpecialNameFindCompliance(url) {
  1166. // 排除相同图片
  1167. for (let i = 0, len = this.nameFindCompliance.length; i < len; i++) {
  1168. if (this.nameFindCompliance[i].url === url) {
  1169. return false
  1170. }
  1171. }
  1172. return true
  1173. },
  1174. //排除相同图片
  1175. preventSpecialReviewForm(url) {
  1176. // 排除相同图片
  1177. for (let i = 0, len = this.specialReviewForm.length; i < len; i++) {
  1178. if (this.specialReviewForm[i].url === url) {
  1179. return false
  1180. }
  1181. }
  1182. return true
  1183. },
  1184. //排除相同图片
  1185. preventRepeatIdCard(url) {
  1186. // 排除相同图片
  1187. for (let i = 0, len = this.fileListIdCard.length; i < len; i++) {
  1188. if (this.fileListIdCard[i].url === url) {
  1189. return false
  1190. }
  1191. }
  1192. return true
  1193. },
  1194. //排除相同图片
  1195. preventRepeatNumberCard(url) {
  1196. // 排除相同图片
  1197. for (let i = 0, len = this.fileListNumberCard.length; i < len; i++) {
  1198. if (this.fileListNumberCard[i].url === url) {
  1199. return false
  1200. }
  1201. }
  1202. return true
  1203. },
  1204. //排除相同图片
  1205. preventRepeatLetter(url) {
  1206. // 排除相同图片
  1207. for (let i = 0, len = this.fileListLetter.length; i < len; i++) {
  1208. if (this.fileListLetter[i].url === url) {
  1209. return false
  1210. }
  1211. }
  1212. return true
  1213. },
  1214. preventRepeatBusiness(url) {
  1215. // 排除相同图片
  1216. for (let i = 0, len = this.fileListBusiness.length; i < len; i++) {
  1217. if (this.fileListBusiness[i].url === url) {
  1218. return false
  1219. }
  1220. }
  1221. return true
  1222. },
  1223. preventRepeatIntroduction(url) {
  1224. // 排除相同图片
  1225. for (let i = 0, len = this.fileListIntroduction.length; i < len; i++) {
  1226. if (this.fileListIntroduction[i].url === url) {
  1227. return false
  1228. }
  1229. }
  1230. return true
  1231. },
  1232. preventRepeatUserCertificate(url) {
  1233. // 排除相同图片
  1234. for (let i = 0, len = this.fileListUserCertificate.length; i < len; i++) {
  1235. if (this.fileListUserCertificate[i].url === url) {
  1236. return false
  1237. }
  1238. }
  1239. return true
  1240. },
  1241. preventRepeatVoucher(url) {
  1242. // 排除相同图片
  1243. for (let i = 0, len = this.fileListVoucher.length; i < len; i++) {
  1244. if (this.fileListVoucher[i].url === url) {
  1245. return false
  1246. }
  1247. }
  1248. return true
  1249. },
  1250. preventRepeatVideo(url) {
  1251. // 排除相同图片
  1252. for (let i = 0, len = this.fileListVideo.length; i < len; i++) {
  1253. if (this.fileListVideo[i].url === url) {
  1254. return false
  1255. }
  1256. }
  1257. return true
  1258. },
  1259. getBase64(file, callback) {
  1260. return new Promise((resolve) => {
  1261. let reader = new FileReader()
  1262. reader.readAsDataURL(file)
  1263. reader.onload = () => {
  1264. callback(reader.result)
  1265. resolve('成功')
  1266. }
  1267. })
  1268. },
  1269. //点击关闭图片预览
  1270. handleCancel() {//点击关闭图片预览
  1271. this.previewVisible = false;
  1272. },
  1273. handleVideoCancel() {
  1274. this.previewVideo = false;
  1275. },
  1276. //点击查看大图
  1277. async handlePreview(file) {//点击查看大图
  1278. if (!file.url && !file.preview) {
  1279. file.preview = await this.getBase64(file.originFileObj);
  1280. }
  1281. this.previewImage = file.url || file.preview;
  1282. this.previewVisible = true;
  1283. },
  1284. //点击查看视频大图
  1285. async handlePreviewVideo(file) {//点击查看大图
  1286. if (!file.url && !file.preview) {
  1287. file.preview = await this.getBase64(file.originFileObj);
  1288. }
  1289. this.previewImage = file.url || file.preview;
  1290. this.previewVideo = true;
  1291. },
  1292. //提交申请
  1293. handleUpload() {
  1294. //材料不全有特审
  1295. if (this.model.materialLabel == '0') {
  1296. if (this.specialReviewForm.length == 0) {
  1297. this.$message.error("材料不全请上特审单");
  1298. return
  1299. }
  1300. }
  1301. //系统实名制截图
  1302. if (this.nameFindCompliance.length == 0 && this.nameFindComplianceRemark.length == 0) {
  1303. this.$message.error("请上传系统实名制截图,如没有截图则填写备注信息");
  1304. return
  1305. }
  1306. if (this.model.materialLabel == '1' && (this.fileListIdCard.length == 0 ||
  1307. this.fileListHandCertificate.length == 0 || this.fileListNumberCard.length == 0
  1308. || this.fileListLetter.length == 0 || this.fileListVoucher.length == 0)) {
  1309. this.$message.error("无特审,请上传全部材料");
  1310. return
  1311. }
  1312. const formData = new FormData();
  1313. formData.append('infoId', this.infoId)
  1314. //身份证正反面
  1315. this.fileListIdCard.forEach(file => {
  1316. formData.append('fileListIdCard', file)
  1317. });
  1318. //手持证件照片
  1319. this.fileListHandCertificate.forEach(file => {
  1320. formData.append('fileListHandCertificate', file)
  1321. });
  1322. //号卡照片
  1323. this.fileListNumberCard.forEach(file => {
  1324. formData.append('fileListNumberCard', file)
  1325. });
  1326. //防诈骗承诺涵
  1327. this.fileListLetter.forEach(file => {
  1328. formData.append('fileListLetter', file)
  1329. });
  1330. //营业执照副本
  1331. this.fileListBusiness.forEach(file => {
  1332. formData.append('fileListBusiness', file)
  1333. });
  1334. //介绍信
  1335. this.fileListIntroduction.forEach(file => {
  1336. formData.append('fileListIntroduction', file)
  1337. });
  1338. //使用人证件
  1339. this.fileListUserCertificate.forEach(file => {
  1340. formData.append('fileListUserCertificate', file)
  1341. });
  1342. //消费凭证
  1343. this.fileListVoucher.forEach(file => {
  1344. formData.append('fileListVoucher', file)
  1345. });
  1346. //承诺视频
  1347. this.fileListVideo.forEach(file => {
  1348. formData.append('fileListVideo', file)
  1349. });
  1350. //系统实名制截图
  1351. this.nameFindCompliance.forEach(file => {
  1352. formData.append('nameFindCompliance', file)
  1353. });
  1354. //系统实名制截图备注
  1355. formData.append('nameFindComplianceRemark', this.nameFindComplianceRemark)
  1356. //特审单
  1357. this.specialReviewForm.forEach(file => {
  1358. formData.append('specialReviewForm', file)
  1359. });
  1360. //基础信息
  1361. for (var i in this.model) {
  1362. let modelElement = this.model[i];
  1363. formData.append(i, modelElement)
  1364. }
  1365. this.uploading = true;
  1366. httpAction(this.url.minioUpload, formData, "POST")
  1367. .then((res) => {
  1368. if (res.success) {
  1369. this.uploading = false;
  1370. this.$message.success("提交成功");
  1371. this.$router.go(-1);
  1372. this.closeCurrent();
  1373. } else {
  1374. this.uploading = false;
  1375. this.$message.error(res.message);
  1376. }
  1377. }).finally(() => {
  1378. this.uploading = false;
  1379. })
  1380. },
  1381. //用户选择点击事件
  1382. changeUserLable() {
  1383. /* //身份证正反面
  1384. this.cfileListIdCard = []
  1385. //手持证件照片
  1386. this.fileListHandCertificate= []
  1387. //号卡照片
  1388. this.fileListNumberCard = []
  1389. //防诈骗承诺涵
  1390. this.fileListLetter = []
  1391. //营业执照副本
  1392. this.fileListBusiness = []
  1393. //介绍信
  1394. this.fileListIntroduction = []
  1395. //使用人证件
  1396. this.fileListUserCertificate= []
  1397. //消费凭证
  1398. this.fileListVoucher = []
  1399. //承诺视频
  1400. this.fileListVideo = []*/
  1401. },
  1402. //提交特殊申请
  1403. applySpecial() {
  1404. }
  1405. }
  1406. }
  1407. </script>
  1408. <style lang="less">
  1409. #common-video {
  1410. position: relative;
  1411. .video-box {
  1412. box-sizing: border-box;
  1413. border: 0;
  1414. display: block;
  1415. width: 470px;
  1416. height: 500px;
  1417. outline: none !important;
  1418. }
  1419. .isShow {
  1420. //进度条
  1421. video::-webkit-media-controls-timeline {
  1422. display: none;
  1423. }
  1424. }
  1425. video::-webkit-media-controls-play-button {
  1426. visibility: hidden;
  1427. }
  1428. .operate-btn {
  1429. display: block;
  1430. width: 60px;
  1431. height: 60px;
  1432. position: absolute;
  1433. top: calc(50% - 30px);
  1434. left: calc(50% - 30px);
  1435. }
  1436. .operate-btn:hover {
  1437. opacity: 0.8;
  1438. }
  1439. .fade-out {
  1440. opacity: 0;
  1441. }
  1442. }
  1443. </style>