orderDetail.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956
  1. <template>
  2. <div class="orderDetail">
  3. <div class="state" v-if="dataDetail?.audit_status == 2">
  4. <el-icon :size="20" style="color: red; margin: 3px 10px 0 0;">
  5. <CircleClose />
  6. </el-icon>
  7. <div>
  8. <h3>审核不通过</h3>
  9. <p>{{ dataDetail?.auditComments }}如有问题,请联系审核人员或者拨打客服电话400-400-400。</p>
  10. <p>审核人:admin 审核时间:2025.3.15 12:00:00</p>
  11. <el-button link type="primary" @click="editDetail">修改并重提交</el-button>
  12. </div>
  13. </div>
  14. <div class="userInfo">
  15. <el-row :gutter="20">
  16. <el-col :span="12" class="right">
  17. <img class="userLogo" :src="car1"/>
  18. <span class="userName">{{ dataDetail?.quoteNo }}</span>
  19. <span class="userState">{{ dataDetail?.audit_status===0?'待审核':dataDetail?.audit_status===1?'已审核':dataDetail?.audit_status===2?'已驳回':'--' }}</span>
  20. </el-col>
  21. <el-col :span="12" class="left">
  22. <el-button class="radius-2px" plain type="primary" @click="editDetail">编辑</el-button>
  23. <el-button class="radius-2px" plain type="primary">删除</el-button>
  24. </el-col>
  25. </el-row>
  26. <div class="tap">
  27. <a class="anchor-item" :class="{'active': tapIndex===index}" v-for="(item, index) in taps" :href="`#${item.href}`" @click.prevent="handleTap(item, index)">
  28. <img :src="tapIndex===index?item.active:item.img"/>
  29. {{ item.text }}
  30. </a>
  31. </div>
  32. </div>
  33. <div class="content">
  34. <div id="quote">
  35. <div class="title">投保信息</div>
  36. <el-row :gutter="20">
  37. <el-col :span="6" class="col-m-b-16 item">
  38. <span class="name">保险公司:</span>
  39. <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
  40. </el-col>
  41. <el-col :span="6" class="col-m-b-16 item">
  42. <span class="name">签单日期:</span>
  43. <span>{{ dataDetail?.insOrdersOtherInfo?.signingTime || '--' }}</span>
  44. </el-col>
  45. <el-col :span="6" class="col-m-b-16 item">
  46. <span class="name">评分:</span>
  47. <span>{{ dataDetail?.insOrdersOtherInfo?.scope || '--' }}</span>
  48. </el-col>
  49. <el-col :span="6" class="col-m-b-16 item">
  50. <span class="name">车船税:</span>
  51. <span>{{ dataDetail?.insOrdersOtherInfo?.taxPremium || '--' }}</span>
  52. </el-col>
  53. <el-col :span="6" class="col-m-b-16 item">
  54. <span class="name">交强险保单号:</span>
  55. <span>{{ dataDetail?.insOrdersOtherInfo?.jqApplyNo || '--' }}</span>
  56. </el-col>
  57. <el-col :span="6" class="col-m-b-16 item">
  58. <span class="name">交强险续保:</span>
  59. <span>{{ dataDetail?.insOrdersOtherInfo?.jqRenewal || '--' }}</span>
  60. </el-col>
  61. <el-col :span="6" class="col-m-b-16 item">
  62. <span class="name">交强险保费:</span>
  63. <span>{{ dataDetail?.insOrdersOtherInfo?.jqPremium || '--' }}</span>
  64. </el-col>
  65. <el-col :span="6" class="col-m-b-16 item">
  66. <span class="name">驾意险保费:</span>
  67. <span>{{ dataDetail?.insOrdersOtherInfo?.jyPremium || '--' }}</span>
  68. </el-col>
  69. <el-col :span="6" class="col-m-b-16 item">
  70. <span class="name">商业险保单号:</span>
  71. <span>{{ dataDetail?.insOrdersOtherInfo?.syPolicyNo || '--' }}</span>
  72. </el-col>
  73. <el-col :span="6" class="col-m-b-16 item">
  74. <span class="name">商业险续保:</span>
  75. <span>{{ dataDetail?.insOrdersOtherInfo?.syRenewal || '--' }}</span>
  76. </el-col>
  77. <el-col :span="6" class="col-m-b-16 item">
  78. <span class="name">商业险保费:</span>
  79. <span>{{ dataDetail?.insOrdersOtherInfo?.syPremium || '--' }}</span>
  80. </el-col>
  81. <el-col :span="6" class="col-m-b-16 item">
  82. <span class="name">保费总额:</span>
  83. <span>{{ dataDetail?.insOrdersOtherInfo?.sumPremium || '--' }}</span>
  84. </el-col>
  85. <el-col :span="6" class="col-m-b-16 item">
  86. <span class="name">是否过户车:</span>
  87. <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
  88. </el-col>
  89. <el-col :span="6" class="col-m-b-16 item">
  90. <span class="name">商业险是否过户:</span>
  91. <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
  92. </el-col>
  93. <el-col :span="6" class="col-m-b-16 item">
  94. <span class="name">是否脱保:</span>
  95. <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
  96. </el-col>
  97. <el-col :span="6" class="col-m-b-16 item">
  98. <span class="name">是否二手车:</span>
  99. <span>{{ dataDetail?.insOrdersOtherInfo?.companyName || '--' }}</span>
  100. </el-col>
  101. </el-row>
  102. </div>
  103. <div id="history">
  104. <div class="title">费用信息</div>
  105. <el-row :gutter="20">
  106. <el-col :span="6" class="col-m-b-16 item">
  107. <span class="name">交强险:</span>
  108. <span>--</span>
  109. </el-col>
  110. <el-col :span="6" class="col-m-b-16 item">
  111. <span class="name">费用字段:</span>
  112. <span>--</span>
  113. </el-col>
  114. <el-col :span="6" class="col-m-b-16 item">
  115. <span class="name">费用字段:</span>
  116. <span>--</span>
  117. </el-col>
  118. <el-col :span="6" class="col-m-b-16 item">
  119. </el-col>
  120. <el-col :span="6" class="col-m-b-16 item">
  121. <span class="name">商业险:</span>
  122. <span>--</span>
  123. </el-col>
  124. <el-col :span="6" class="col-m-b-16 item">
  125. <span class="name">费用字段:</span>
  126. <span>--</span>
  127. </el-col>
  128. <el-col :span="6" class="col-m-b-16 item">
  129. <span class="name">费用字段:</span>
  130. <span>--</span>
  131. </el-col>
  132. <el-col :span="6" class="col-m-b-16 item">
  133. </el-col>
  134. <el-col :span="6" class="col-m-b-16 item">
  135. <span class="name">驾意险:</span>
  136. <span>--</span>
  137. </el-col>
  138. <el-col :span="6" class="col-m-b-16 item">
  139. <span class="name">费用字段:</span>
  140. <span>--</span>
  141. </el-col>
  142. <el-col :span="6" class="col-m-b-16 item">
  143. <span class="name">费用字段:</span>
  144. <span>--</span>
  145. </el-col>
  146. <el-col :span="6" class="col-m-b-16 item">
  147. </el-col>
  148. </el-row>
  149. </div>
  150. <div id="insurance">
  151. <div class="title">险种信息</div>
  152. <el-row :gutter="20" style="margin-bottom: 16px">
  153. <el-col :span="14">
  154. <el-table
  155. :data="dataDetail?.insOrdersRiskList"
  156. :span-method="typeSpanMethod"
  157. border
  158. >
  159. <el-table-column label="类型"></el-table-column>
  160. <el-table-column label="时间">
  161. <template #default="scope">{{ scope.row.startDate }}至{{ scope.row.endDate }}</template>
  162. </el-table-column>
  163. <el-table-column label="险种" prop="riskName"></el-table-column>
  164. <el-table-column label="保额" prop="premium"></el-table-column>
  165. </el-table>
  166. </el-col>
  167. <el-col :span="10">
  168. <el-table
  169. :data="carData"
  170. :span-method="carSpanMethod"
  171. border
  172. class="hiddenHeader"
  173. >
  174. <el-table-column label="" prop="a"></el-table-column>
  175. <el-table-column label="" prop="b"></el-table-column>
  176. <el-table-column label="" prop="c"></el-table-column>
  177. </el-table>
  178. </el-col>
  179. </el-row>
  180. </div>
  181. <div id="car">
  182. <div class="title">车辆信息</div>
  183. <el-row :gutter="20">
  184. <el-col :span="6" class="col-m-b-16 item">
  185. <span class="name">车牌号:</span>
  186. <span>{{ dataDetail?.carInfoVo?.licenseNo || '--' }}</span>
  187. </el-col>
  188. <el-col :span="6" class="col-m-b-16 item">
  189. <span class="name">车辆识别代码:</span>
  190. <span>{{ dataDetail?.carInfoVo?.vinNo || '--' }}</span>
  191. </el-col>
  192. <el-col :span="6" class="col-m-b-16 item">
  193. <span class="name">发动机号:</span>
  194. <span>{{ dataDetail?.carInfoVo?.engineNo || '--' }}</span>
  195. </el-col>
  196. <el-col :span="6" class="col-m-b-16 item">
  197. <span class="name">品牌型号:</span>
  198. <span>{{ dataDetail?.carInfoVo?.brandName || '--' }}</span>
  199. </el-col>
  200. </el-row>
  201. </div>
  202. <div id="ower">
  203. <div class="title">车主信息</div>
  204. <el-row :gutter="20">
  205. <el-col :span="6" class="col-m-b-16 item">
  206. <span class="name">类型:</span>
  207. <span>{{ dataDetail?.ownersInfo?.personType || '--' }}</span>
  208. </el-col>
  209. <el-col :span="6" class="col-m-b-16 item">
  210. <span class="name">车主姓名:</span>
  211. <span>{{ dataDetail?.ownersInfo?.name || '--' }}</span>
  212. </el-col>
  213. <el-col :span="6" class="col-m-b-16 item">
  214. <span class="name">证件类型号码:</span>
  215. <span>{{ dataDetail?.ownersInfo?.identifyNumber || '--' }}</span>
  216. </el-col>
  217. <el-col :span="6" class="col-m-b-16 item">
  218. <span class="name">手机号:</span>
  219. <span>{{ dataDetail?.ownersInfo?.mobile || '--' }}</span>
  220. </el-col>
  221. </el-row>
  222. <div class="title">投保人信息</div>
  223. <el-row :gutter="20">
  224. <el-col :span="6" class="col-m-b-16 item">
  225. <span class="name">类型:</span>
  226. <span>{{ dataDetail?.policyHolderInfo?.personType || '--' }}</span>
  227. </el-col>
  228. <el-col :span="6" class="col-m-b-16 item">
  229. <span class="name">车主姓名:</span>
  230. <span>{{ dataDetail?.policyHolderInfo?.name || '--' }}</span>
  231. </el-col>
  232. <el-col :span="6" class="col-m-b-16 item">
  233. <span class="name">证件类型号码:</span>
  234. <span>{{ dataDetail?.policyHolderInfo?.identifyNumber || '--' }}</span>
  235. </el-col>
  236. <el-col :span="6" class="col-m-b-16 item">
  237. <span class="name">手机号:</span>
  238. <span>{{ dataDetail?.policyHolderInfo?.mobile || '--' }}</span>
  239. </el-col>
  240. </el-row>
  241. <div class="title">被投保人信息</div>
  242. <el-row :gutter="20">
  243. <el-col :span="6" class="col-m-b-16 item">
  244. <span class="name">类型:</span>
  245. <span>{{ dataDetail?.insuredPersonInfo?.personType || '--' }}</span>
  246. </el-col>
  247. <el-col :span="6" class="col-m-b-16 item">
  248. <span class="name">车主姓名:</span>
  249. <span>{{ dataDetail?.insuredPersonInfo?.name || '--' }}</span>
  250. </el-col>
  251. <el-col :span="6" class="col-m-b-16 item">
  252. <span class="name">证件类型号码:</span>
  253. <span>{{ dataDetail?.insuredPersonInfo?.identifyNumber || '--' }}</span>
  254. </el-col>
  255. <el-col :span="6" class="col-m-b-16 item">
  256. <span class="name">手机号:</span>
  257. <span>{{ dataDetail?.insuredPersonInfo?.mobile || '--' }}</span>
  258. </el-col>
  259. </el-row>
  260. </div>
  261. <div id="file">
  262. <div class="title">影像资料</div>
  263. <div class="information">
  264. <el-tabs v-model="activeName" tab-position="left" class="demo-tabs">
  265. <el-tab-pane v-for="(item, index) in infoList" :label="item.label" :name="item.name">
  266. <el-row :gutter="10" class="list">
  267. <el-col :span="4" class="list-item" v-for="sub in item.list">
  268. <img :src="sub.previewUrl"/>
  269. <div class="tips">{{ sub.imageType === 'C01'?'行驶证主页':sub.imageType === 'D01'?'行驶证副页':sub.imageType === 'TAR05'?'机动车辆登记证书':sub.imageType === 'XC00'?'新车合格证':sub.imageType === 'GC00'?'购车发票':sub.imageType === 'C02'?'车主身份证(正面)':sub.imageType === 'D02'?'车主身份证(反面)':sub.imageType === 'Y02'?'车主营业执照':sub.imageType === 'C03'?'投保人身份证(正面)':sub.imageType === 'D03'?'投保人身份证(反面) ':sub.imageType === 'Y03'?'投保人营业执照':sub.imageType === 'C04'?'被保人身份证(正面)':sub.imageType === 'D04'?'被保人身份证(反面)':sub.imageType === 'Y04'?'被保人营业执照':sub.imageType === 'GX00'?'关系证明':sub.imageType === 'C0500'?'验车照(车架)':sub.imageType === 'C0501'?'验车照(后左)':sub.imageType === 'C0502'?'验车照(后右)':sub.imageType === 'C0503'?'验车照(前右)':sub.imageType === 'C0504'?'验车照(前左)':sub.imageType === 'C0506'?'验车照(正前)':sub.imageType === 'C0507'?'验车照(正后)':sub.imageType === 'C0505'?'验车照(人车合影)':sub.imageType === 'C0508'?'验车照(地标合影)':sub.imageType === 'C0509'?'验车照(工作台)':sub.imageType === 'C0510'?'验车照(天窗)':sub.imageType === 'LAST_INSURANCE_POLICY'?'上年商业险保单':'--' }}</div>
  270. </el-col>
  271. </el-row>
  272. </el-tab-pane>
  273. </el-tabs>
  274. </div>
  275. <div class="title">电子保单</div>
  276. <div class="fileList">
  277. <el-row :gutter="20">
  278. <el-col :span="6" v-for="(item, index) in fileList" :key="index">
  279. <p>{{ item.name }}</p>
  280. <div class="fileInfo">
  281. <img style="width: 40px; height: 40px" :src="item.fileName.includes('.png') || item.fileName.includes('.jpg') || item.fileName.includes('.jpeg')?image:item.fileName.includes('.pdf')?pdf:item.fileName.includes('.doc') || item.fileName.includes('.docx')?word:''" />
  282. <div class="fileName">{{ item.fileName }}</div>
  283. <div class="fileBtn">
  284. <!-- <el-upload :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg, .pdf, .doc, .docx" @change="uploadImage($event, 7)" style="display: flex; align-items: center">
  285. <el-icon class="btn-icon"><Upload /></el-icon>
  286. </el-upload>-->
  287. <el-icon class="btn-icon" @click="imageView(item)"><View /></el-icon>
  288. <el-icon class="btn-icon" @click="download(item)"><Download /></el-icon>
  289. <!-- <el-icon class="btn-icon" @click="deleteImage(7)"><Delete /></el-icon>-->
  290. </div>
  291. </div>
  292. </el-col>
  293. </el-row>
  294. </div>
  295. </div>
  296. <div id="line">
  297. <div class="title">订单轨迹</div>
  298. <el-table
  299. :data="lineData"
  300. height="300"
  301. >
  302. <el-table-column label="变更信息">
  303. <template #default="scope">
  304. {{ `${scope.row.createBy}:${scope.row.createTime}` }}
  305. </template>
  306. </el-table-column>
  307. <el-table-column prop="optContent" label="变更内容"></el-table-column>
  308. <el-table-column prop="changeBefore" label="变更前">
  309. <template #default="scope">
  310. <span v-if="scope.row.changeBefore">{{ scope.row.changeBefore }}</span>
  311. <el-button v-else type="primary" link size="small" @click="viewDetail(scope.row)">查看明细</el-button>
  312. </template>
  313. </el-table-column>
  314. <el-table-column prop="changeAfter" label="变更后">
  315. <template #default="scope">
  316. <span v-if="scope.row.changeAfter">{{ scope.row.changeAfter }}</span>
  317. <el-button v-else type="primary" link size="small" @click="viewDetail(scope.row)">查看明细</el-button>
  318. </template>
  319. </el-table-column>
  320. <el-table-column prop="result" label="保司反馈"></el-table-column>
  321. </el-table>
  322. </div>
  323. <div id="equities" style="margin-top: 10px;">
  324. <div class="title">权益信息</div>
  325. <el-table
  326. :data="equitiesData"
  327. height="300"
  328. >
  329. <el-table-column prop="a" label="权益名称"></el-table-column>
  330. <el-table-column prop="a" label="权益类型"></el-table-column>
  331. <el-table-column prop="a" label="接收人"></el-table-column>
  332. <el-table-column prop="a" label="发放数量"></el-table-column>
  333. <el-table-column prop="a" label="价格"></el-table-column>
  334. </el-table>
  335. <div class="total">
  336. <div class="money">
  337. <div class="totalItem">
  338. <span>可用金额:</span>
  339. <span>{{ useMoney }}</span>
  340. </div>
  341. <div class="totalItem">
  342. <span>已使用:</span>
  343. <span>{{ usedMoney }}</span>
  344. </div>
  345. <div class="totalItem">
  346. <span>剩余金额:</span>
  347. <span style="color: #FF8C21">{{ lastMoney }}</span>
  348. </div>
  349. </div>
  350. </div>
  351. </div>
  352. </div>
  353. <el-dialog
  354. title="图片预览"
  355. v-model="imageShow"
  356. >
  357. <img class="image-view" :src="imageUrl" />
  358. </el-dialog>
  359. <el-dialog
  360. title="文件预览"
  361. v-model="fileShow"
  362. >
  363. <vue-office-docx
  364. :src="fileUrl"
  365. style="height: 600px; margin: 0; padding: 0"
  366. ></vue-office-docx>
  367. </el-dialog>
  368. </div>
  369. </template>
  370. <script setup lang="ts">
  371. import { useRouter, useRoute } from 'vue-router'
  372. import car1 from "@/assets/images/additional/car1.png";
  373. import car2 from "@/assets/images/additional/car2.png";
  374. import ower1 from "@/assets/images/additional/ower1.png";
  375. import ower2 from "@/assets/images/additional/ower2.png";
  376. import insurance1 from "@/assets/images/additional/insurance1.png";
  377. import insurance2 from "@/assets/images/additional/insurance2.png";
  378. import quote1 from "@/assets/images/additional/quote1.png";
  379. import quote2 from "@/assets/images/additional/quote2.png";
  380. import history1 from "@/assets/images/additional/history1.png";
  381. import history2 from "@/assets/images/additional/history2.png";
  382. import equities1 from '@/assets/images/additional/equities1.png'
  383. import equities2 from '@/assets/images/additional/equities2.png'
  384. import file1 from '@/assets/images/additional/file1.png'
  385. import file2 from '@/assets/images/additional/file2.png'
  386. import image from "@/assets/images/image.png";
  387. import pdf from "@/assets/images/pdf.png";
  388. import word from "@/assets/images/word.png";
  389. import api from '@/api'
  390. import VueOfficeDocx from "@vue-office/docx";
  391. import { ElMessage } from "element-plus";
  392. const myRouter = useRouter()
  393. const myRoute = useRoute()
  394. let dataDetail = ref({
  395. status: 5
  396. })
  397. const editDetail = () => {
  398. myRouter.push({
  399. path: '/additionalOrder/additionalOrderIndex',
  400. query: {
  401. id: myRoute.query.id
  402. }
  403. })
  404. }
  405. // 页签
  406. let tapIndex = ref(0)
  407. const taps = ref([
  408. {
  409. text: '投保信息',
  410. href: 'quote',
  411. img: quote1,
  412. active: quote2
  413. },
  414. {
  415. text: '费用信息',
  416. href: 'history',
  417. img: history1,
  418. active: history2
  419. },
  420. {
  421. text: '选择险种',
  422. href: 'insurance',
  423. img: insurance1,
  424. active: insurance2
  425. },
  426. {
  427. text: '车辆信息',
  428. href: 'car',
  429. img: car1,
  430. active: car2
  431. },
  432. {
  433. text: '关系人信息',
  434. href: 'ower',
  435. img: ower1,
  436. active: ower2
  437. },
  438. {
  439. text: '附件信息',
  440. href: 'file',
  441. img: file1,
  442. active: file2
  443. },
  444. {
  445. text: '订单轨迹',
  446. href: 'line',
  447. img: file1,
  448. active: file2
  449. },
  450. {
  451. text: '权益信息',
  452. href: 'equities',
  453. img: equities2,
  454. active: equities1
  455. }
  456. ])
  457. const handleTap = (item, index) => {
  458. tapIndex.value = index
  459. const element = document.getElementById(`${item.href}`)
  460. if(element) {
  461. element.scrollIntoView({behavior: 'smooth'})
  462. }
  463. }
  464. // 险种信息
  465. let typeData = ref([
  466. {
  467. a: 1,
  468. b: 1,
  469. c: 1,
  470. d: 1
  471. },{
  472. a: 1,
  473. b: 1,
  474. c: 1,
  475. d: 1
  476. },
  477. ])
  478. let carData = ref([
  479. {
  480. a: '车船税',
  481. b: 1,
  482. c: 2,
  483. d: 3
  484. },{
  485. a: '车船税',
  486. b: 1,
  487. c: 2,
  488. d: 3
  489. },{
  490. a: '车船税',
  491. b: 1,
  492. c: 2,
  493. d: 3
  494. },
  495. ])
  496. const typeSpanMethod = ({
  497. row,
  498. column,
  499. rowIndex,
  500. columnIndex
  501. }) => {
  502. if(columnIndex === 0) {
  503. if(rowIndex === 1) {
  504. return [typeData.value.length - 1, 1]
  505. }
  506. }
  507. }
  508. const carSpanMethod = ({
  509. row,
  510. column,
  511. rowIndex,
  512. columnIndex
  513. }) => {
  514. if(columnIndex === 0) {
  515. if(rowIndex === 0) {
  516. return [carData.value.length, 1]
  517. } else {
  518. return [0,0]
  519. }
  520. }
  521. }
  522. // 影像资料
  523. let activeName = ref('car')
  524. let infoList = ref([
  525. {
  526. label: '车辆',
  527. name: 'car',
  528. list: []
  529. },{
  530. label: '车主',
  531. name: 'ower',
  532. list: []
  533. },{
  534. label: '投保人',
  535. name: 'insured',
  536. list: []
  537. },{
  538. label: '被保人',
  539. name: 'person',
  540. list: []
  541. },{
  542. label: '关系证明',
  543. name: 'relation',
  544. list: []
  545. },{
  546. label: '验车照',
  547. name: 'photo',
  548. list: []
  549. },{
  550. label: '上年商业险保单',
  551. name: 'policy',
  552. list: []
  553. },
  554. ])
  555. let fileList = ref([])
  556. // 图片预览
  557. let imageShow = ref(false)
  558. let imageUrl = ref('')
  559. let fileShow = ref(false)
  560. let fileUrl = ref('')
  561. const imageView = (item) => {
  562. if(item.fileName.includes('.png') || item.fileName.includes('.jpg') || item.fileName.includes('.jpeg')) {
  563. imageShow.value = true
  564. imageUrl.value = item.fileName
  565. }
  566. if(item.fileName.includes('.pdf')) {
  567. window.open(item.fileName, '_blank')
  568. }
  569. if(item.fileName.includes('.doc') || item.fileName.includes('.docx')) {
  570. fileShow.value = true
  571. nextTick(() => {
  572. filePreview(item.fileName)
  573. })
  574. }
  575. }
  576. // word预览
  577. const filePreview = (file) => {
  578. nextTick(() => {
  579. fileUrl.value = file
  580. })
  581. }
  582. // 下载
  583. const download = (item) => {
  584. let image = new Image();
  585. // 解决跨域 Canvas 污染问题
  586. image.setAttribute("crossOrigin", "anonymous");
  587. image.onload = function () {
  588. let canvas = document.createElement("canvas");
  589. canvas.width = image.width;
  590. canvas.height = image.height;
  591. let context = canvas.getContext("2d");
  592. context.drawImage(image, 0, 0, image.width, image.height);
  593. let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
  594. let a = document.createElement("a"); // 生成一个a元素
  595. let event = new MouseEvent("click"); // 创建一个单击事件
  596. a.download = item.fileName; // 设置图片名称
  597. a.href = url; // 将生成的URL设置为a.href属性
  598. a.dispatchEvent(event); // 触发a的单击事件
  599. }
  600. image.src = item.fileName
  601. }
  602. // 订单轨迹
  603. let lineData = ref([])
  604. const initTrack = () => {
  605. api.insurancePolicyApi.orderTrack({
  606. orderNo: myRoute.query.id
  607. }).then((res: any) => {
  608. if(res.code == 200) {
  609. lineData.value = res.data
  610. } else {
  611. ElMessage({
  612. message: res.msg,
  613. type: 'warning'
  614. })
  615. }
  616. })
  617. }
  618. // 权益
  619. let equitiesData = ref([])
  620. let useMoney = ref(0)
  621. let usedMoney = ref(0)
  622. let lastMoney = ref(0)
  623. const viewDetail = (row) => {
  624. myRouter.push({
  625. name: 'InsurancePolicyViewDetail',
  626. query: {
  627. module: row.module,
  628. subModule: row.subModule,
  629. optType: row.optType,
  630. createBy: row.createBy,
  631. createTime: row.createTime,
  632. content: row.optContent,
  633. obj: row.result
  634. }
  635. })
  636. }
  637. const initDetail = () => {
  638. api.additionalApi.selectById(myRoute.query.id).then((res: any) => {
  639. if(res.code == 200) {
  640. dataDetail.value = res.data
  641. // 影像资料
  642. let car = infoList.value.find(a => a.name === 'car'),
  643. carType = ['C01', 'D01', 'TAR05', 'XC00', 'GC00'],
  644. ower = infoList.value.find(a => a.name === 'ower'),
  645. owerType = ['C02', 'D02', 'Y02'],
  646. insured = infoList.value.find(a => a.name === 'insured'),
  647. insuredType = ['C03', 'D03', 'Y03'],
  648. person = infoList.value.find(a => a.name === 'person'),
  649. personType = ['C04', 'D04', 'Y04'],
  650. relation = infoList.value.find(a => a.name === 'relation'),
  651. relationType = ['GX00'],
  652. photo = infoList.value.find(a => a.name === 'photo'),
  653. photoType = ['C0500', 'C0501', 'C0502', 'C0503', 'C0504', 'C0505', 'C0506', 'C0507', 'C0508', 'C0509', 'C0510', ],
  654. policy = infoList.value.find(a => a.name === 'policy'),
  655. policyType = ['LAST_INSURANCE_POLICY'],
  656. list = res.data?.imagesAdds?.images
  657. car.list = list.filter(a => carType.includes(a.imageType))
  658. ower.list = list.filter(a => owerType.includes(a.imageType))
  659. insured.list = list.filter(a => insuredType.includes(a.imageType))
  660. person.list = list.filter(a => personType.includes(a.imageType))
  661. relation.list = list.filter(a => relationType.includes(a.imageType))
  662. photo.list = list.filter(a => photoType.includes(a.imageType))
  663. policy.list = list.filter(a => policyType.includes(a.imageType))
  664. // 电子保单
  665. // jqPolicy
  666. // jqPolicyPreviewUrl
  667. // jqSign
  668. // jqSignPreviewUrl
  669. // noPolicy
  670. // noPolicyPreviewUrl
  671. // orderNo
  672. // syPolicy
  673. // syPolicyPreviewUrl
  674. // insOrdersExternalPolicy
  675. fileList.value = [
  676. {
  677. name: '交强电子保单',
  678. fileName: dataDetail.value?.insOrdersExternalPolicy?.jqPolicyPreviewUrl
  679. },{
  680. name: '商业电子保单',
  681. fileName: dataDetail.value?.insOrdersExternalPolicy?.syPolicyPreviewUrl
  682. },{
  683. name: '驾意险电子保单',
  684. fileName: dataDetail.value?.insOrdersExternalPolicy?.noPolicyPreviewUrl
  685. },{
  686. name: '交强险电子标志',
  687. fileName: dataDetail.value?.insOrdersExternalPolicy?.jqSignPreviewUrl
  688. }
  689. ]
  690. } else {
  691. ElMessage({
  692. message: res.msg,
  693. type: 'warning'
  694. })
  695. }
  696. })
  697. }
  698. onMounted(() => {
  699. initDetail();
  700. initTrack();
  701. })
  702. </script>
  703. <style scoped lang="scss">
  704. @use "@/assets/styles/common/style";
  705. .orderDetail{
  706. height: calc(100vh - 120px);
  707. overflow: hidden;
  708. .state{
  709. border: 1px solid #FF4545;
  710. border-radius: 10px;
  711. padding: 10px 20px;
  712. background: #FFF4F4;
  713. display: flex;
  714. margin: 10px 24px;
  715. font-weight: 400;
  716. color: #333333;
  717. h3{
  718. font-size: 16px;
  719. margin: 0 0 10px;
  720. color: rgba(0,0,0,.64);
  721. }
  722. p{
  723. font-size: 14px;
  724. margin: 10px 0;
  725. }
  726. }
  727. .userInfo{
  728. margin: 10px 24px;
  729. background: #FFFFFF;
  730. padding: 24px;
  731. border-radius: 6px;
  732. .right{
  733. display: flex;
  734. align-items: center;
  735. justify-content: flex-start;
  736. .userLogo{
  737. width: 26px;
  738. height: 26px;
  739. }
  740. .userName{
  741. font-size: 16px;
  742. color: #333333;
  743. margin: 0 12px 0 16px;
  744. }
  745. .userState{
  746. padding: 2px 12px;
  747. border: 1px solid #FF8C21;
  748. background: #FFF4E9;
  749. color: #FF8C21;
  750. font-size: 12px;
  751. border-radius: 3px;
  752. }
  753. }
  754. .left{
  755. display: flex;
  756. align-items: center;
  757. justify-content: flex-end;
  758. }
  759. .tap{
  760. width: 100%;
  761. display: flex;
  762. align-items: center;
  763. justify-content: space-between;
  764. margin: 10px 0 0;
  765. .anchor-item{
  766. width: 12%;
  767. height: 44px;
  768. text-decoration: none;
  769. color: #333333;
  770. display: flex;
  771. align-items: center;
  772. justify-content: center;
  773. background: #FFFFFF;
  774. border-radius: 4px;
  775. font-size: 18px;
  776. border: 1px solid #EEEEEE;
  777. img{
  778. width: 30px;
  779. height: 30px;
  780. margin-right: 5px;
  781. }
  782. }
  783. .active{
  784. color: #FFFFFF;
  785. background: linear-gradient( 91deg, #4FCAFF 0%, #2B62FF 100%);
  786. }
  787. }
  788. }
  789. .content{
  790. margin: 0 24px;
  791. height: calc(100% - 150px);
  792. background: #FFFFFF;
  793. border-radius: 6px;
  794. overflow-y: auto;
  795. padding: 24px;
  796. .title{
  797. border-left: 4px solid #00a0f4;
  798. padding: 0 0 0 12px;
  799. margin-bottom: 16px;
  800. }
  801. .item{
  802. color: #666666;
  803. font-size: 14px;
  804. display: flex;
  805. .name{
  806. width: 120px;
  807. }
  808. }
  809. .information{
  810. height: 280px;
  811. margin-bottom: 16px;
  812. .list{
  813. height: 290px;
  814. overflow-y: auto;
  815. .list-item{
  816. height: calc(50% - 12px);
  817. display: flex;
  818. align-items: center;
  819. justify-content: center;
  820. position: relative;
  821. margin: 0 0 12px;
  822. border-radius: 0 0 6px 6px;
  823. img{
  824. width: 100%;
  825. height: 130px;
  826. border-radius: 0 0 6px 6px;
  827. }
  828. .tips {
  829. position: absolute;
  830. left: 5px;
  831. bottom: 0;
  832. width: calc(100% - 10px);
  833. height: 24px;
  834. background: url("@/assets/images/additional/tips.png") no-repeat;
  835. background-size: 100% 100%;
  836. text-align: center;
  837. line-height: 24px;
  838. color: #FFFFFF;
  839. }
  840. }
  841. }
  842. }
  843. .fileList{
  844. .fileInfo{
  845. display: flex;
  846. align-items: center;
  847. justify-content: flex-start;
  848. border: 1px solid #EEEEEE;
  849. border-radius: 4px;
  850. padding: 18px 24px;
  851. .fileName{
  852. width: 200px;
  853. overflow: hidden;
  854. text-overflow: ellipsis;
  855. white-space: nowrap;
  856. }
  857. .fileBtn{
  858. display: flex;
  859. align-items: center;
  860. .btn-icon{
  861. margin: 0 10px;
  862. font-size: 16px;
  863. cursor: pointer;
  864. &:hover{
  865. color: #00a0f4;
  866. }
  867. }
  868. }
  869. .file-box{
  870. position: relative;
  871. .btn-top{
  872. width: 100%;
  873. display: flex;
  874. align-items: center;
  875. justify-content: flex-end;
  876. position: absolute;
  877. top: 0;
  878. left: 0;
  879. .image-close{
  880. display: block;
  881. width: 12px;
  882. height: 12px;
  883. }
  884. }
  885. .file-img{
  886. display: block;
  887. width: 208px;
  888. height: 130px;
  889. border-radius: 5px;
  890. }
  891. .btn-bottom{
  892. position: absolute;
  893. left: 0;
  894. bottom: 0;
  895. z-index: 1000;
  896. display: flex;
  897. align-items: center;
  898. height: 24px;
  899. width: 100%;
  900. background: url("@/assets/images/btn-bg.png") no-repeat;
  901. background-size: 100% 100%;
  902. .width-50{
  903. width: 50%;
  904. }
  905. }
  906. }
  907. }
  908. }
  909. .total{
  910. display: flex;
  911. justify-content: flex-end;
  912. margin-top: 20px;
  913. .money{
  914. width: 200px;
  915. margin-right: 30px;
  916. .totalItem{
  917. display: flex;
  918. align-items: center;
  919. justify-content: space-between;
  920. }
  921. }
  922. }
  923. }
  924. :deep(.hiddenHeader .el-table__header-wrapper) {
  925. display: none;
  926. }
  927. }
  928. </style>