refund_list-detail.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  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. >
  323. <template slot-scope="scope">
  324. {{ "资料_" + scope.row.fileName }}
  325. </template>
  326. </el-table-column>
  327. <el-table-column
  328. align="center"
  329. label="操作"
  330. min-width="160"
  331. show-overflow-tooltip
  332. >
  333. <template slot-scope="scope">
  334. <el-button
  335. type="text"
  336. class="textColor"
  337. @click="downLoadFn(scope.row.fileUrl)"
  338. >下载</el-button
  339. >
  340. </template>
  341. </el-table-column>
  342. </el-table>
  343. </div>
  344. </div>
  345. <el-divider></el-divider>
  346. <div class="diy-table-1">
  347. <el-row :gutter="0">
  348. <el-col :xs="12" :sm="12" :lg="12" class="item">
  349. <div class="label">申请人</div>
  350. <div class="value">{{ detailList.createBy }}</div>
  351. </el-col>
  352. <el-col :xs="12" :sm="12" :lg="12" class="item">
  353. <div class="label">申请日期</div>
  354. <div class="value">{{ detailList.createTime }}</div>
  355. </el-col>
  356. <el-col :xs="12" :sm="24" :lg="24" class="item">
  357. <div class="label">申请退押金</div>
  358. <div class="value">{{ detailList.applyNote }}</div>
  359. </el-col>
  360. </el-row>
  361. </div>
  362. <h3
  363. v-if="
  364. detailList.examineStatus == 'WAIT' ||
  365. detailList.examineStatus == 'FAIL' ||
  366. detailList.examineStatus == 'OK'
  367. "
  368. >
  369. 审批
  370. </h3>
  371. <el-divider
  372. v-if="
  373. detailList.examineStatus == 'WAIT' ||
  374. detailList.examineStatus == 'FAIL' ||
  375. detailList.examineStatus == 'OK'
  376. "
  377. ></el-divider>
  378. <div v-if="detailList.examineStatus == 'WAIT'" class="diy-table-1">
  379. <el-row :gutter="0">
  380. <el-col :xs="12" :sm="12" :lg="12" class="item">
  381. <div class="label">验收人</div>
  382. <div class="value">{{ this.checkBy }}</div>
  383. </el-col>
  384. <el-col :xs="12" :sm="12" :lg="12" class="item dateS">
  385. <div class="label">验收日期</div>
  386. <div class="value">
  387. <el-date-picker
  388. disabled
  389. prefix-icon="''"
  390. class="selectStyle"
  391. type="datetime"
  392. placeholder="系统自动生成"
  393. default-time="00:00:00"
  394. value-format="yyyy-MM-dd HH:mm:ss"
  395. >
  396. </el-date-picker>
  397. </div>
  398. </el-col>
  399. <el-col :xs="12" :sm="24" :lg="24" class="item">
  400. <div class="label">是否退押</div>
  401. <div class="value">
  402. <el-radio-group v-model="isRefundDeposit">
  403. <el-radio :label="true">是</el-radio>
  404. <el-radio :label="false">否</el-radio>
  405. </el-radio-group>
  406. </div>
  407. </el-col>
  408. <el-col :xs="12" :sm="24" :lg="24" class="item">
  409. <div class="label">验收说明</div>
  410. <div class="value">
  411. <el-input v-model="checkNote" placeholder="请输入内容"></el-input>
  412. </div>
  413. </el-col>
  414. </el-row>
  415. </div>
  416. <div
  417. v-if="
  418. detailList.examineStatus == 'OK' || detailList.examineStatus == 'FAIL'
  419. "
  420. class="diy-table-1"
  421. >
  422. <el-row :gutter="0">
  423. <el-col :xs="12" :sm="12" :lg="12" class="item">
  424. <div class="label">验收人</div>
  425. <div class="value">{{ detailList.checkBy }}</div>
  426. </el-col>
  427. <el-col :xs="12" :sm="12" :lg="12" class="item dateS">
  428. <div class="label">验收日期</div>
  429. <div class="value">
  430. <el-date-picker
  431. disabled
  432. prefix-icon="''"
  433. class="selectStyle"
  434. v-model="detailList.checkDate"
  435. type="datetime"
  436. placeholder=""
  437. default-time="00:00:00"
  438. value-format="yyyy-MM-dd HH:mm:ss"
  439. >
  440. </el-date-picker>
  441. </div>
  442. </el-col>
  443. <el-col :xs="12" :sm="24" :lg="24" class="item">
  444. <div class="label">是否退押</div>
  445. <div class="value">
  446. <el-radio-group v-model="detailList.isRefundDeposit">
  447. <el-radio disabled :label="true">是</el-radio>
  448. <el-radio disabled :label="false">否</el-radio>
  449. </el-radio-group>
  450. </div>
  451. </el-col>
  452. <el-col :xs="12" :sm="24" :lg="24" class="item dateS">
  453. <div class="label">验收说明</div>
  454. <div class="value">
  455. <el-input
  456. disabled
  457. v-model="detailList.checkNote"
  458. placeholder="请输入内容"
  459. ></el-input>
  460. </div>
  461. </el-col>
  462. </el-row>
  463. </div>
  464. <br />
  465. <!-- 按钮 -->
  466. <!-- detailList.examineStatus != 'OK' || detailList.examineStatus != 'FAIL' -->
  467. <div class="btn-group clearfix" v-if="detailList.examineStatus == 'WAIT'">
  468. <div class="fl">
  469. <el-button type="primary" size="small" @click="adoptFn"
  470. >审批通过</el-button
  471. >
  472. <el-button type="primary" size="small" @click="rejectFn"
  473. >审批驳回</el-button
  474. >
  475. </div>
  476. </div>
  477. </div>
  478. </template>
  479. <script>
  480. import { downloadFiles } from "@/utils/util";
  481. import IMAGEUPLOAD from "@/components/Common/image-upload.vue";
  482. import { mapGetters } from "vuex";
  483. import {
  484. getDepositManageDetail,
  485. getDepositManageExamine,
  486. getDepositManageDownZip,
  487. } from "@/api/engin_deposit/refund_list";
  488. export default {
  489. props: {
  490. detailId: {
  491. type: String,
  492. required: true,
  493. },
  494. },
  495. components: { IMAGEUPLOAD },
  496. computed: {
  497. ...mapGetters(["name"]),
  498. },
  499. data() {
  500. return {
  501. imageURL: this.$imageUrl,
  502. title: "审批",
  503. imageURL: this.$imageUrl,
  504. listLoading: false, // 列表加载loading
  505. dataList: [], // 列表数据
  506. detailList: {},
  507. checkBy: "",
  508. checkDate: "",
  509. isRefundDeposit: true,
  510. checkNote: "",
  511. };
  512. },
  513. created() {
  514. console.log(this.$imageUrl, 8888);
  515. this.checkBy = this.name;
  516. this.getData({ id: this.detailId });
  517. },
  518. methods: {
  519. //批量下载
  520. async batchDownloadFn() {
  521. downloadFiles("/deposit-manage/downZip", { parentId: this.detailId });
  522. },
  523. //下载
  524. downLoadFn(v) {
  525. window.open(this.imageURL + v);
  526. },
  527. // 检查文件类型
  528. checkFileType(url) {
  529. if (!url) return "";
  530. const fileSuffix = url.substring(url.lastIndexOf(".") + 1);
  531. if (["jpg", "jpeg", "png"].includes(fileSuffix)) {
  532. return "image";
  533. } else if (["doc", "docx", "dot", "wps", "wpt"].includes(fileSuffix)) {
  534. return "word";
  535. } else if (["xls", "xlsx", "xlt", "et", "ett"].includes(fileSuffix)) {
  536. return "excel";
  537. } else if (
  538. ["ppt", "pptx", "dps", "dpt", "pot", "pps"].includes(fileSuffix)
  539. ) {
  540. return "ppt";
  541. } else if (["pdf"].includes(fileSuffix)) {
  542. return "pdf";
  543. } else {
  544. return "";
  545. }
  546. },
  547. //审批驳回
  548. async rejectFn() {
  549. if (!this.detailList.installDate) {
  550. this.$message.error("请选择安装时间");
  551. return;
  552. }
  553. let data = {
  554. ...this.detailList,
  555. checkBy: this.checkBy,
  556. // checkDate: this.checkDate,
  557. isRefundDeposit: this.isRefundDeposit,
  558. checkNote: this.checkNote,
  559. examineResult: 0,
  560. };
  561. await getDepositManageExamine(data);
  562. this.$message.success("审批驳回");
  563. this.goBack();
  564. this.$emit("updateList");
  565. },
  566. //审批通过
  567. async adoptFn() {
  568. if (!this.detailList.installDate) {
  569. this.$message.error("请选择安装时间");
  570. return;
  571. }
  572. let data = {
  573. ...this.detailList,
  574. checkBy: this.checkBy,
  575. // checkDate: this.checkDate,
  576. isRefundDeposit: this.isRefundDeposit,
  577. checkNote: this.checkNote,
  578. examineResult: 1,
  579. };
  580. await getDepositManageExamine(data);
  581. this.$message.success("审批通过");
  582. this.goBack();
  583. this.$emit("updateList");
  584. },
  585. async getData(data) {
  586. const res = await getDepositManageDetail(data);
  587. console.log(res);
  588. res.data.items.forEach((item) => {
  589. // item.number = (item.qty*100 - item.directTransferQty*100 - item.retiredQty*100) / 100;
  590. item.sums1 = ["hasSendQty", "dataQty", "qty"];
  591. item.sums2 = ["totalAmount", "diffAmount", "price"];
  592. });
  593. this.detailList = res.data;
  594. if (
  595. res.data.examineStatus == "SAVE" ||
  596. res.data.examineStatus == "OK" ||
  597. res.data.examineStatus == "FAIL"
  598. ) {
  599. this.title = "详情";
  600. }
  601. },
  602. goBack() {
  603. this.$parent.showSurrender = true;
  604. },
  605. },
  606. };
  607. </script>
  608. <style lang="scss" scoped>
  609. .dateS {
  610. .value {
  611. padding: 0;
  612. }
  613. }
  614. .batchDownload {
  615. float: right;
  616. margin-top: 9px;
  617. }
  618. .gdzl {
  619. display: inline-block;
  620. }
  621. .dateStyle {
  622. width: 100%;
  623. }
  624. .label {
  625. width: 150px !important;
  626. }
  627. .selectStyle {
  628. width: 100%;
  629. }
  630. </style>