refund_list-detail.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. <template>
  2. <div>
  3. <div class="sty">
  4. <el-page-header @back="goBack" :content="title"> </el-page-header>
  5. </div>
  6. <el-divider></el-divider>
  7. <h3>工程项目信息</h3>
  8. <el-divider></el-divider>
  9. <div class="diy-table-1">
  10. <el-row :gutter="0">
  11. <el-col :xs="12" :sm="24" :lg="8" class="item">
  12. <div class="label">工程登录编码</div>
  13. <div class="value">{{ detailList.refEnginRecordNo }}</div>
  14. </el-col>
  15. <el-col :xs="12" :sm="24" :lg="8" class="item">
  16. <div class="label">工程名称(项目名称)</div>
  17. <div class="value">{{ detailList.refProjectName }}</div>
  18. </el-col>
  19. <el-col :xs="12" :sm="24" :lg="8" class="item">
  20. <div class="label">工程编号</div>
  21. <div class="value">{{ detailList.refProjectNo }}</div>
  22. </el-col>
  23. <el-col :xs="24" :sm="24" :lg="16" class="item">
  24. <div class="label">经销商名称</div>
  25. <div class="value">{{ detailList.customerName }}</div>
  26. </el-col>
  27. <el-col :xs="24" :sm="24" :lg="8" class="item">
  28. <div class="label">经销商编码</div>
  29. <div class="value">{{ detailList.customerId }}</div>
  30. </el-col>
  31. <!-- <el-col :xs="24" :sm="24" :lg="8" class="item">
  32. <div class="label">经销商二级代码</div>
  33. <div class="value">{{detailList.}}</div>
  34. </el-col> -->
  35. <el-col :xs="24" :sm="24" :lg="8" class="item">
  36. <div class="label">工程登录类型</div>
  37. <div class="value">{{ detailList.refPromiseStatus }}</div>
  38. </el-col>
  39. <el-col :xs="24" :sm="24" :lg="8" class="item">
  40. <div class="label">联系人</div>
  41. <div class="value">{{ detailList.refLinkman }}</div>
  42. </el-col>
  43. <el-col :xs="24" :sm="24" :lg="8" class="item">
  44. <div class="label">固定电话</div>
  45. <div class="value">{{ detailList.refTel }}</div>
  46. </el-col>
  47. <el-col :xs="24" :sm="24" :lg="8" class="item">
  48. <div class="label">厂工程编码(G编码)</div>
  49. <div class="value">
  50. <el-input
  51. :disabled="title == '详情'"
  52. placeholder="请输入"
  53. v-model="detailList.refFactoryNo"
  54. ></el-input>
  55. </div>
  56. </el-col>
  57. <!-- <el-col :xs="24" :sm="24" :lg="8" class="item">
  58. <div class="label">押金比例</div>
  59. <div class="value">{{detailList.}}</div>
  60. </el-col> -->
  61. <el-col :xs="24" :sm="24" :lg="8" class="item">
  62. <div class="label">移动电话</div>
  63. <div class="value">{{ detailList.refPhone }}</div>
  64. </el-col>
  65. <el-col :xs="24" :sm="24" :lg="8" class="item">
  66. <div class="label">押金总额</div>
  67. <div class="value">{{ detailList.depositAmount }}</div>
  68. </el-col>
  69. <el-col :xs="24" :sm="24" :lg="8" class="item">
  70. <div class="label">工程价差总额</div>
  71. <div class="value">{{ detailList.depositDiffAmount }}</div>
  72. </el-col>
  73. <el-col :xs="24" :sm="24" :lg="8" class="item">
  74. <div class="label">使用单位</div>
  75. <div class="value">{{ detailList.refUseUnit }}</div>
  76. </el-col>
  77. <el-col :xs="24" :sm="24" :lg="8" class="item">
  78. <div class="label">寄厂日期</div>
  79. <div class="value">
  80. <el-date-picker
  81. :disabled="title == '详情'"
  82. class="selectStyle"
  83. v-model="detailList.sendFactoryDate"
  84. type="datetime"
  85. prefix-icon="''"
  86. placeholder="请选择寄厂日期"
  87. default-time="00:00:00"
  88. value-format="yyyy-MM-dd HH:mm:ss"
  89. >
  90. </el-date-picker>
  91. </div>
  92. </el-col>
  93. <!-- <el-col :xs="24" :sm="24" :lg="8" class="item">
  94. <div class="label">提货日期</div>
  95. <div class="value">{{detailList.}}</div>
  96. </el-col> -->
  97. <el-col :xs="24" :sm="24" :lg="8" class="item">
  98. <div class="label">安装时间</div>
  99. <div class="value">
  100. <el-date-picker
  101. prefix-icon="''"
  102. placeholder="请选择安装时间"
  103. :disabled="title == '详情'"
  104. class="selectStyle"
  105. v-model="detailList.installDate"
  106. type="datetime"
  107. default-time="00:00:00"
  108. value-format="yyyy-MM-dd HH:mm:ss"
  109. >
  110. </el-date-picker>
  111. </div>
  112. </el-col>
  113. </el-row>
  114. </div>
  115. <h3>货品信息</h3>
  116. <el-divider></el-divider>
  117. <!-- 列表 -->
  118. <div class="mymain-container">
  119. <div class="table">
  120. <el-table
  121. v-loading="listLoading"
  122. :data="detailList.items"
  123. element-loading-text="Loading"
  124. border
  125. fit
  126. highlight-current-row
  127. stripe
  128. show-summary
  129. :summary-method="$getSummaries"
  130. >
  131. <el-table-column
  132. align="center"
  133. label="厂产品编码"
  134. prop="materialOldNumber"
  135. min-width="160"
  136. show-overflow-tooltip
  137. ></el-table-column>
  138. <el-table-column
  139. align="center"
  140. label="产品编码"
  141. prop="materialNumber"
  142. min-width="160"
  143. show-overflow-tooltip
  144. ></el-table-column>
  145. <el-table-column
  146. align="center"
  147. label="产品名称"
  148. prop="materialName"
  149. min-width="160"
  150. show-overflow-tooltip
  151. ></el-table-column>
  152. <el-table-column
  153. align="center"
  154. label="规格型号"
  155. prop="specification"
  156. min-width="160"
  157. show-overflow-tooltip
  158. ></el-table-column>
  159. <el-table-column
  160. align="right"
  161. label="单价"
  162. prop="price"
  163. min-width="160"
  164. show-overflow-tooltip
  165. >
  166. <template slot-scope="scope">
  167. {{ scope.row.price | numToFixed }}
  168. </template>
  169. </el-table-column>
  170. <el-table-column
  171. align="right"
  172. label="数量"
  173. prop="qty"
  174. min-width="160"
  175. show-overflow-tooltip
  176. ></el-table-column>
  177. <el-table-column
  178. align="right"
  179. label="金额"
  180. prop="totalAmount"
  181. min-width="160"
  182. show-overflow-tooltip
  183. >
  184. <template slot-scope="scope">
  185. {{ scope.row.totalAmount | numToFixed }}
  186. </template>
  187. </el-table-column>
  188. <el-table-column
  189. align="right"
  190. label="发货数量"
  191. prop="hasSendQty"
  192. min-width="160"
  193. show-overflow-tooltip
  194. ></el-table-column>
  195. <el-table-column
  196. align="right"
  197. label="上传资料"
  198. prop="dataQty"
  199. min-width="160"
  200. show-overflow-tooltip
  201. v-if="detailList.examineStatus !== 'WAIT'"
  202. >
  203. </el-table-column>
  204. <el-table-column
  205. align="right"
  206. label="上传资料"
  207. prop="dataQty"
  208. min-width="160"
  209. show-overflow-tooltip
  210. v-if="detailList.examineStatus == 'WAIT'"
  211. >
  212. <template slot-scope="scope">
  213. <el-input v-model="scope.row.dataQty"></el-input>
  214. </template>
  215. </el-table-column>
  216. <el-table-column
  217. align="right"
  218. label="收差金额"
  219. prop="diffAmount"
  220. min-width="160"
  221. show-overflow-tooltip
  222. v-if="detailList.examineStatus !== 'WAIT'"
  223. >
  224. <template slot-scope="scope">
  225. {{ scope.row.diffAmount | numToFixed }}
  226. </template>
  227. </el-table-column>
  228. <el-table-column
  229. align="right"
  230. label="收差金额"
  231. prop="diffAmount"
  232. min-width="160"
  233. show-overflow-tooltip
  234. v-if="detailList.examineStatus == 'WAIT'"
  235. >
  236. <template slot-scope="scope">
  237. <el-input v-model="scope.row.diffAmount"></el-input>
  238. </template>
  239. </el-table-column>
  240. </el-table>
  241. </div>
  242. </div>
  243. <h3 class="gdzl">工程资料</h3>
  244. <el-button
  245. class="batchDownload"
  246. type="primary"
  247. size="small"
  248. @click="batchDownloadFn"
  249. >批量下载</el-button
  250. >
  251. <el-divider></el-divider>
  252. <!-- 列表 -->
  253. <div class="mymain-container">
  254. <div class="table">
  255. <el-table
  256. v-loading="listLoading"
  257. :data="detailList.dataList"
  258. element-loading-text="Loading"
  259. border
  260. fit
  261. highlight-current-row
  262. stripe
  263. >
  264. <el-table-column
  265. align="center"
  266. label="资料描述"
  267. prop="dataDescribe"
  268. min-width="160"
  269. show-overflow-tooltip
  270. ></el-table-column>
  271. <el-table-column
  272. align="center"
  273. label="原文件名"
  274. prop="fileName"
  275. min-width="160"
  276. show-overflow-tooltip
  277. ></el-table-column>
  278. <el-table-column
  279. align="center"
  280. label="缩略图"
  281. prop="fileUrl"
  282. min-width="160"
  283. show-overflow-tooltip
  284. >
  285. <template slot-scope="scope">
  286. <el-image
  287. ref="img"
  288. :src="imageURL + scope.row.fileUrl"
  289. v-if="checkFileType(scope.row.fileUrl) == 'image'"
  290. style="width: 120px; height: 120px"
  291. fit="cover"
  292. >
  293. </el-image>
  294. <img
  295. class="file"
  296. src="@/assets/common/word.png"
  297. v-if="checkFileType(scope.row.fileUrl) == 'word'"
  298. />
  299. <img
  300. class="file"
  301. src="@/assets/common/excel.png"
  302. v-if="checkFileType(scope.row.fileUrl) == 'excel'"
  303. />
  304. <img
  305. class="file"
  306. src="@/assets/common/ppt.png"
  307. v-if="checkFileType(scope.row.fileUrl) == 'ppt'"
  308. />
  309. <img
  310. class="file"
  311. src="@/assets/common/pdf.png"
  312. v-if="checkFileType(scope.row.fileUrl) == 'pdf'"
  313. />
  314. </template>
  315. </el-table-column>
  316. <el-table-column
  317. align="center"
  318. label="下载文件名称"
  319. prop="fileName"
  320. min-width="160"
  321. show-overflow-tooltip
  322. ></el-table-column>
  323. <el-table-column
  324. align="center"
  325. label="操作"
  326. min-width="160"
  327. show-overflow-tooltip
  328. >
  329. <template slot-scope="scope">
  330. <el-button
  331. type="text"
  332. class="textColor"
  333. @click="downLoadFn(scope.row.fileUrl)"
  334. >下载</el-button
  335. >
  336. </template>
  337. </el-table-column>
  338. </el-table>
  339. </div>
  340. </div>
  341. <el-divider></el-divider>
  342. <div class="diy-table-1">
  343. <el-row :gutter="0">
  344. <el-col :xs="12" :sm="12" :lg="12" class="item">
  345. <div class="label">申请人</div>
  346. <div class="value">{{ detailList.createBy }}</div>
  347. </el-col>
  348. <el-col :xs="12" :sm="12" :lg="12" class="item">
  349. <div class="label">申请日期</div>
  350. <div class="value">{{ detailList.createTime }}</div>
  351. </el-col>
  352. <el-col :xs="12" :sm="24" :lg="24" class="item">
  353. <div class="label">申请退押金</div>
  354. <div class="value">{{ detailList.applyNote }}</div>
  355. </el-col>
  356. </el-row>
  357. </div>
  358. <h3
  359. v-if="
  360. detailList.examineStatus == 'WAIT' ||
  361. detailList.examineStatus == 'FAIL' ||
  362. detailList.examineStatus == 'OK'
  363. "
  364. >
  365. 审批
  366. </h3>
  367. <el-divider
  368. v-if="
  369. detailList.examineStatus == 'WAIT' ||
  370. detailList.examineStatus == 'FAIL' ||
  371. detailList.examineStatus == 'OK'
  372. "
  373. ></el-divider>
  374. <div v-if="detailList.examineStatus == 'WAIT'" class="diy-table-1">
  375. <el-row :gutter="0">
  376. <el-col :xs="12" :sm="12" :lg="12" class="item">
  377. <div class="label">验收人</div>
  378. <div class="value">{{ this.checkBy }}</div>
  379. </el-col>
  380. <el-col :xs="12" :sm="12" :lg="12" class="item dateS">
  381. <div class="label">验收日期</div>
  382. <div class="value">
  383. <el-date-picker
  384. disabled
  385. prefix-icon="''"
  386. class="selectStyle"
  387. type="datetime"
  388. placeholder="系统自动生成"
  389. default-time="00:00:00"
  390. value-format="yyyy-MM-dd HH:mm:ss"
  391. >
  392. </el-date-picker>
  393. </div>
  394. </el-col>
  395. <el-col :xs="12" :sm="24" :lg="24" class="item">
  396. <div class="label">是否退押</div>
  397. <div class="value">
  398. <el-radio-group v-model="isRefundDeposit">
  399. <el-radio :label="true">是</el-radio>
  400. <el-radio :label="false">否</el-radio>
  401. </el-radio-group>
  402. </div>
  403. </el-col>
  404. <el-col :xs="12" :sm="24" :lg="24" class="item">
  405. <div class="label">验收说明</div>
  406. <div class="value">
  407. <el-input v-model="checkNote" placeholder="请输入内容"></el-input>
  408. </div>
  409. </el-col>
  410. </el-row>
  411. </div>
  412. <div
  413. v-if="
  414. detailList.examineStatus == 'OK' || detailList.examineStatus == 'FAIL'
  415. "
  416. class="diy-table-1"
  417. >
  418. <el-row :gutter="0">
  419. <el-col :xs="12" :sm="12" :lg="12" class="item">
  420. <div class="label">验收人</div>
  421. <div class="value">{{ detailList.checkBy }}</div>
  422. </el-col>
  423. <el-col :xs="12" :sm="12" :lg="12" class="item dateS">
  424. <div class="label">验收日期</div>
  425. <div class="value">
  426. <el-date-picker
  427. disabled
  428. prefix-icon="''"
  429. class="selectStyle"
  430. v-model="detailList.checkDate"
  431. type="datetime"
  432. placeholder=""
  433. default-time="00:00:00"
  434. value-format="yyyy-MM-dd HH:mm:ss"
  435. >
  436. </el-date-picker>
  437. </div>
  438. </el-col>
  439. <el-col :xs="12" :sm="24" :lg="24" class="item">
  440. <div class="label">是否退押</div>
  441. <div class="value">
  442. <el-radio-group v-model="detailList.isRefundDeposit">
  443. <el-radio disabled :label="true">是</el-radio>
  444. <el-radio disabled :label="false">否</el-radio>
  445. </el-radio-group>
  446. </div>
  447. </el-col>
  448. <el-col :xs="12" :sm="24" :lg="24" class="item dateS">
  449. <div class="label">验收说明</div>
  450. <div class="value">
  451. <el-input
  452. disabled
  453. v-model="detailList.checkNote"
  454. placeholder="请输入内容"
  455. ></el-input>
  456. </div>
  457. </el-col>
  458. </el-row>
  459. </div>
  460. <br />
  461. <!-- 按钮 -->
  462. <!-- detailList.examineStatus != 'OK' || detailList.examineStatus != 'FAIL' -->
  463. <div class="btn-group clearfix" v-if="detailList.examineStatus == 'WAIT'">
  464. <div class="fl">
  465. <el-button type="primary" size="small" @click="adoptFn"
  466. >审批通过</el-button
  467. >
  468. <el-button type="primary" size="small" @click="rejectFn"
  469. >审批驳回</el-button
  470. >
  471. </div>
  472. </div>
  473. </div>
  474. </template>
  475. <script>
  476. import { downloadFiles } from "@/utils/util";
  477. import IMAGEUPLOAD from "@/components/Common/image-upload.vue";
  478. import { mapGetters } from "vuex";
  479. import {
  480. getDepositManageDetail,
  481. getDepositManageExamine,
  482. getDepositManageDownZip,
  483. } from "@/api/engin_deposit/refund_list";
  484. export default {
  485. props: {
  486. detailId: {
  487. type: String,
  488. required: true,
  489. },
  490. },
  491. components: { IMAGEUPLOAD },
  492. computed: {
  493. ...mapGetters(["name"]),
  494. },
  495. data() {
  496. return {
  497. imageURL: this.$imageUrl,
  498. title: "审批",
  499. imageURL: this.$imageUrl,
  500. listLoading: false, // 列表加载loading
  501. dataList: [], // 列表数据
  502. detailList: {},
  503. checkBy: "",
  504. checkDate: "",
  505. isRefundDeposit: true,
  506. checkNote: "",
  507. };
  508. },
  509. created() {
  510. console.log(this.$imageUrl, 8888);
  511. this.checkBy = this.name;
  512. this.getData({ id: this.detailId });
  513. },
  514. methods: {
  515. //批量下载
  516. async batchDownloadFn() {
  517. downloadFiles("/deposit-manage/downZip", { parentId: this.detailId });
  518. },
  519. //下载
  520. downLoadFn(v) {
  521. window.open(this.imageURL + v);
  522. },
  523. // 检查文件类型
  524. checkFileType(url) {
  525. if (!url) return "";
  526. const fileSuffix = url.substring(url.lastIndexOf(".") + 1);
  527. if (["jpg", "jpeg", "png"].includes(fileSuffix)) {
  528. return "image";
  529. } else if (["doc", "docx", "dot", "wps", "wpt"].includes(fileSuffix)) {
  530. return "word";
  531. } else if (["xls", "xlsx", "xlt", "et", "ett"].includes(fileSuffix)) {
  532. return "excel";
  533. } else if (
  534. ["ppt", "pptx", "dps", "dpt", "pot", "pps"].includes(fileSuffix)
  535. ) {
  536. return "ppt";
  537. } else if (["pdf"].includes(fileSuffix)) {
  538. return "pdf";
  539. } else {
  540. return "";
  541. }
  542. },
  543. //审批驳回
  544. async rejectFn() {
  545. if (!this.detailList.installDate) {
  546. this.$message.error("请选择安装时间");
  547. return;
  548. }
  549. let data = {
  550. ...this.detailList,
  551. checkBy: this.checkBy,
  552. // checkDate: this.checkDate,
  553. isRefundDeposit: this.isRefundDeposit,
  554. checkNote: this.checkNote,
  555. examineResult: 0,
  556. };
  557. await getDepositManageExamine(data);
  558. this.$message.success("审批驳回");
  559. this.goBack();
  560. this.$emit("updateList");
  561. },
  562. //审批通过
  563. async adoptFn() {
  564. if (!this.detailList.installDate) {
  565. this.$message.error("请选择安装时间");
  566. return;
  567. }
  568. let data = {
  569. ...this.detailList,
  570. checkBy: this.checkBy,
  571. // checkDate: this.checkDate,
  572. isRefundDeposit: this.isRefundDeposit,
  573. checkNote: this.checkNote,
  574. examineResult: 1,
  575. };
  576. await getDepositManageExamine(data);
  577. this.$message.success("审批通过");
  578. this.goBack();
  579. this.$emit("updateList");
  580. },
  581. async getData(data) {
  582. const res = await getDepositManageDetail(data);
  583. console.log(res);
  584. res.data.items.forEach((item) => {
  585. // item.number = (item.qty*100 - item.directTransferQty*100 - item.retiredQty*100) / 100;
  586. item.sums1 = ["hasSendQty", "dataQty", "qty"];
  587. item.sums2 = ["totalAmount", "diffAmount", "price"];
  588. });
  589. this.detailList = res.data;
  590. if (
  591. res.data.examineStatus == "SAVE" ||
  592. res.data.examineStatus == "OK" ||
  593. res.data.examineStatus == "FAIL"
  594. ) {
  595. this.title = "详情";
  596. }
  597. },
  598. goBack() {
  599. this.$parent.showSurrender = true;
  600. },
  601. },
  602. };
  603. </script>
  604. <style lang="scss" scoped>
  605. .dateS {
  606. .value {
  607. padding: 0;
  608. }
  609. }
  610. .batchDownload {
  611. float: right;
  612. margin-top: 9px;
  613. }
  614. .gdzl {
  615. display: inline-block;
  616. }
  617. .dateStyle {
  618. width: 100%;
  619. }
  620. .label {
  621. width: 150px !important;
  622. }
  623. .selectStyle {
  624. width: 100%;
  625. }
  626. </style>