deposit_list.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. <template>
  2. <div class="app-container">
  3. <div v-if="showPage == 1">
  4. <el-radio-group v-model="deduction" size="mini" @change="handleRadio">
  5. <el-radio-button label="全部" />
  6. <el-radio-button label="已退押" />
  7. </el-radio-group>
  8. <br><br>
  9. <!-- 筛选条件 -->
  10. <div>
  11. <el-form
  12. ref="screenForm"
  13. :model="screenForm"
  14. label-width="120px"
  15. size="mini"
  16. label-position="left"
  17. >
  18. <el-row :gutter="20">
  19. <el-col :xs="24" :sm="12" :lg="6">
  20. <el-form-item label="工程登录编号" prop="refEnginRecordNo">
  21. <el-input
  22. v-model="screenForm.refEnginRecordNo"
  23. placeholder="请输入"
  24. />
  25. </el-form-item>
  26. </el-col>
  27. <el-col :xs="24" :sm="12" :lg="6">
  28. <el-form-item label="经销商编码/名称" prop="customerKeyword">
  29. <el-input
  30. v-model="screenForm.customerKeyword"
  31. placeholder="请输入"
  32. />
  33. </el-form-item>
  34. </el-col>
  35. <!-- <el-col :xs="24" :sm="12" :lg="6">
  36. <el-form-item label="经销商名称" prop="customerKeyword">
  37. <el-input
  38. v-model="screenForm.customerKeyword"
  39. placeholder="请输入"
  40. ></el-input>
  41. </el-form-item>
  42. </el-col> -->
  43. <el-col :xs="24" :sm="12" :lg="6">
  44. <el-form-item label="使用单位" prop="refUseUnit">
  45. <el-input
  46. v-model="screenForm.refUseUnit"
  47. placeholder="请输入使用单位"
  48. />
  49. </el-form-item>
  50. </el-col>
  51. <el-col :xs="24" :sm="12" :lg="6">
  52. <el-form-item label="开始申请日期" prop="startSubmitTime">
  53. <el-date-picker
  54. v-model="screenForm.startSubmitTime"
  55. class="dateStyle"
  56. type="datetime"
  57. placeholder="选择日期"
  58. />
  59. </el-form-item>
  60. </el-col>
  61. <el-col :xs="24" :sm="12" :lg="6">
  62. <el-form-item label="结束申请日期" prop="endSubmitTime">
  63. <el-date-picker
  64. v-model="screenForm.endSubmitTime"
  65. class="dateStyle"
  66. type="datetime"
  67. placeholder="选择日期"
  68. />
  69. </el-form-item>
  70. </el-col>
  71. <el-col :xs="24" :sm="12" :lg="6">
  72. <el-form-item label="开始验收日期" prop="startConfirmTime">
  73. <el-date-picker
  74. v-model="screenForm.startConfirmTime"
  75. class="dateStyle"
  76. type="datetime"
  77. placeholder="选择日期"
  78. />
  79. </el-form-item>
  80. </el-col>
  81. <el-col :xs="24" :sm="12" :lg="6">
  82. <el-form-item label="结束验收日期" prop="endConfirmTime">
  83. <el-date-picker
  84. v-model="screenForm.endConfirmTime"
  85. class="dateStyle"
  86. type="datetime"
  87. placeholder="选择日期"
  88. />
  89. </el-form-item>
  90. </el-col>
  91. <el-col :xs="24" :sm="12" :lg="6">
  92. <el-form-item label="是否退押 " prop="isRefundDeposit">
  93. <el-select style="width:100%" v-model="screenForm.isRefundDeposit" placeholder="请选择是否退押 " >
  94. <el-option label="默认" :value="null"></el-option>
  95. <el-option v-for="item in refundDepositArr"
  96. :key="item.value"
  97. :label="item.label"
  98. :value="item.value">
  99. </el-option>
  100. </el-select>
  101. </el-form-item>
  102. </el-col>
  103. <el-col :xs="24" :sm="12" :lg="6">
  104. <el-form-item label="状态 " prop="examineStatus">
  105. <el-select style="width:100%" v-model="screenForm.examineStatus" placeholder="请选择状态 " >
  106. <el-option label="默认" :value="null"></el-option>
  107. <el-option v-for="item in examineStatusArr"
  108. :key="item.value"
  109. :label="item.label"
  110. :value="item.value">
  111. </el-option>
  112. </el-select>
  113. </el-form-item>
  114. </el-col>
  115. <!-- <el-col :xs="24" :sm="12" :lg="6">
  116. <el-form-item label="产品名称" prop="">
  117. <el-input placeholder="请输入"></el-input>
  118. </el-form-item>
  119. </el-col>
  120. <el-col :xs="24" :sm="12" :lg="6">
  121. <el-form-item label="规格型号" prop="">
  122. <el-input placeholder="请输入"></el-input>
  123. </el-form-item>
  124. </el-col> -->
  125. <template v-if="!isCustomer">
  126. <el-col :xs="24" :sm="12" :lg="6">
  127. <el-form-item label="审核人" prop="confirmName">
  128. <el-input
  129. v-model="screenForm.confirmName"
  130. placeholder="请输入审核人"
  131. />
  132. </el-form-item>
  133. </el-col>
  134. <el-col :xs="24" :sm="12" :lg="6">
  135. <el-form-item label="区域" prop="refRegionWork">
  136. <el-input
  137. v-model="screenForm.refRegionWork"
  138. placeholder="请输入区域"
  139. />
  140. </el-form-item>
  141. </el-col>
  142. <el-col :xs="24" :sm="12" :lg="6">
  143. <el-form-item label="安装日期" style="margin-bottom:0">
  144. <div class="fanwei">
  145. <el-form-item prop="startInstallTime">
  146. <el-date-picker
  147. v-model="screenForm.startInstallTime"
  148. class="dateStyle"
  149. type="datetime"
  150. placeholder="选择日期"
  151. />
  152. </el-form-item>
  153. <span>-</span>
  154. <el-form-item prop="endInstallTime">
  155. <el-date-picker
  156. v-model="screenForm.endInstallTime"
  157. class="dateStyle"
  158. type="datetime"
  159. placeholder="选择日期"
  160. />
  161. </el-form-item>
  162. </div>
  163. </el-form-item>
  164. </el-col>
  165. <el-col :xs="24" :sm="12" :lg="6">
  166. <el-form-item label="机型" prop="startSpecification">
  167. <el-input v-model="screenForm.startSpecification" ></el-input>
  168. </el-form-item>
  169. </el-col>
  170. <el-col :xs="24" :sm="12" :lg="6">
  171. <el-form-item label="特价编号" prop="startSpecialNo">
  172. <el-input v-model="screenForm.startSpecialNo" ></el-input>
  173. </el-form-item>
  174. </el-col>
  175. <el-col :xs="24" :sm="12" :lg="6">
  176. <el-form-item label="厂编号" prop="startRefFactoryNo">
  177. <el-input v-model="screenForm.startRefFactoryNo" ></el-input>
  178. </el-form-item>
  179. </el-col>
  180. </el-col>
  181. </template>
  182. <el-col :xs="24" :sm="24" :lg="24">
  183. <el-form-item label="" class="fr">
  184. <el-button
  185. size="mini"
  186. @click="resetScreenForm"
  187. >清空</el-button>
  188. <el-button
  189. size="mini"
  190. type="primary"
  191. @click="submitScreenForm"
  192. >搜索</el-button>
  193. </el-form-item>
  194. </el-col>
  195. </el-row>
  196. </el-form>
  197. </div>
  198. <!-- 按钮 -->
  199. <div class="btn-group clearfix" style="display: flex">
  200. <el-button
  201. type="primary"
  202. size="mini"
  203. @click="hanleDownloadFiles"
  204. >导出</el-button>
  205. <el-upload
  206. v-if="$checkBtnRole('import', $route.meta.roles)"
  207. class="import-btn"
  208. :action="baseURL + 'student/import'"
  209. :http-request="handleImport"
  210. :file-list="importFileList"
  211. :show-file-list="false"
  212. >
  213. <el-button size="mini">导入</el-button>
  214. </el-upload>
  215. </div>
  216. <!-- 列表 -->
  217. <div class="mymain-container">
  218. <div class="table">
  219. <el-table
  220. v-loading="listLoading"
  221. :data="dataList"
  222. element-loading-text="Loading"
  223. border
  224. fit
  225. highlight-current-row
  226. stripe
  227. show-summary
  228. :summary-method="$getSummaries"
  229. @select-all="handleSelectionAllChange"
  230. @selection-change="handleSelectionAllChange"
  231. >
  232. <el-table-column align="left" type="selection" width="55" />
  233. <el-table-column
  234. align="left"
  235. label="工程登录编号"
  236. prop="refEnginRecordNo"
  237. min-width="160"
  238. show-overflow-tooltip
  239. />
  240. <el-table-column
  241. align="left"
  242. label="使用单位"
  243. prop="refUseUnit"
  244. min-width="160"
  245. show-overflow-tooltip
  246. />
  247. <el-table-column
  248. align="left"
  249. label="申请日期"
  250. prop="submitTime"
  251. min-width="160"
  252. show-overflow-tooltip
  253. />
  254. <el-table-column
  255. align="left"
  256. label="验收日期"
  257. prop="checkDate"
  258. min-width="160"
  259. show-overflow-tooltip
  260. />
  261. <el-table-column
  262. align="left"
  263. label="经销商编码"
  264. prop="customerNumber"
  265. min-width="160"
  266. show-overflow-tooltip
  267. >
  268. <template slot-scope="scope">
  269. <CopyButton :copy-text="scope.row.customerNumber" />
  270. <span>{{ scope.row.customerNumber }}</span>
  271. </template>
  272. </el-table-column>
  273. <el-table-column
  274. align="left"
  275. label="经销商名称"
  276. prop="customerName"
  277. min-width="300"
  278. show-overflow-tooltip
  279. >
  280. <template slot-scope="scope">
  281. <CopyButton :copy-text="scope.row.customerName" />
  282. <span>{{ scope.row.customerName }}</span>
  283. </template>
  284. </el-table-column>
  285. <el-table-column
  286. align="left"
  287. label="规格型号"
  288. prop="specification"
  289. min-width="300"
  290. show-overflow-tooltip
  291. >
  292. <template slot-scope="scope">
  293. <CopyButton :copy-text="scope.row.specification" />
  294. <span>{{ scope.row.specification }}</span>
  295. </template>
  296. </el-table-column>
  297. <el-table-column
  298. align="left"
  299. label="是否退押"
  300. prop="isRefundDeposit"
  301. min-width="160"
  302. show-overflow-tooltip
  303. >
  304. <template slot-scope="scope">
  305. <el-tag
  306. v-if="scope.row.isRefundDeposit"
  307. type="success"
  308. size="small"
  309. >是</el-tag>
  310. <el-tag v-else type="warning" size="small">否</el-tag>
  311. </template>
  312. </el-table-column>
  313. <!-- <el-table-column
  314. align="left"
  315. label="押金比例"
  316. prop=""
  317. min-width="160"
  318. show-overflow-tooltip
  319. ></el-table-column> -->
  320. <el-table-column
  321. align="right"
  322. label="押金金额"
  323. prop="depositAmount"
  324. min-width="160"
  325. show-overflow-tooltip
  326. >
  327. <template slot-scope="scope">
  328. {{ scope.row.depositAmount | numToFixed }}
  329. </template>
  330. </el-table-column>
  331. <el-table-column
  332. align="left"
  333. label="状态"
  334. prop="examineStatus"
  335. min-width="160"
  336. show-overflow-tooltip
  337. >
  338. <template slot-scope="scope">
  339. <el-tag
  340. v-if="scope.row.examineStatus == 'SAVE'"
  341. type="success"
  342. size="small"
  343. >保存
  344. </el-tag>
  345. <el-tag
  346. v-if="scope.row.examineStatus == 'WAIT'"
  347. type="warning"
  348. size="small"
  349. >待审核
  350. </el-tag>
  351. <el-tag
  352. v-if="scope.row.examineStatus == 'OK'"
  353. type="warning"
  354. size="mini"
  355. >通过</el-tag>
  356. <el-tag
  357. v-if="scope.row.examineStatus == 'FAIL'"
  358. type="warning"
  359. size="small"
  360. >不通过</el-tag>
  361. <el-tag
  362. v-if="scope.row.examineStatus == 'CLOSE'"
  363. type="warning"
  364. size="small"
  365. >关闭</el-tag>
  366. </template>
  367. </el-table-column>
  368. <el-table-column
  369. align="right"
  370. label="订单数量"
  371. prop="qty"
  372. min-width="160"
  373. show-overflow-tooltip
  374. />
  375. <el-table-column
  376. align="left"
  377. label="资料审核日期"
  378. prop="refDatumAcceptDate"
  379. min-width="160"
  380. show-overflow-tooltip
  381. ></el-table-column>
  382. <el-table-column
  383. align="center"
  384. label="操作"
  385. min-width="160"
  386. fixed="right"
  387. show-overflow-tooltip
  388. >
  389. <template slot-scope="scope">
  390. <el-button
  391. type="text"
  392. class="textColor"
  393. size="mini"
  394. @click="detailFn(scope.row)"
  395. >详情</el-button>
  396. <el-button
  397. v-if="
  398. scope.row.examineStatus == 'SAVE' &&
  399. $checkBtnRole('apply', $route.meta.roles)
  400. "
  401. type="text"
  402. class="textColor"
  403. @click="surrenderFn(scope.row)"
  404. >申请退押</el-button>
  405. <!-- <el-button type="text" class="textColor" slot="reference"
  406. >免扣退押</el-button
  407. > -->
  408. </template>
  409. </el-table-column>
  410. </el-table>
  411. </div>
  412. <!-- 分页 -->
  413. <div class="fr">
  414. <el-pagination
  415. :current-page="currentPage"
  416. :page-sizes="[10, 20, 30, 50]"
  417. :page-size="10"
  418. layout="total, sizes, prev, pager, next, jumper"
  419. :total="listTotal"
  420. @size-change="handleSizeChange"
  421. @current-change="handleCurrentChange"
  422. />
  423. </div>
  424. </div>
  425. </div>
  426. <DepositListDetail v-else-if="showPage == 2" />
  427. <DepositApplyDeduction v-else-if="showPage == 3" />
  428. <DepositApplySurrender v-else-if="showPage == 4" />
  429. </div>
  430. </template>
  431. <script>
  432. import DepositListDetail from './components/deposit_list-detail'
  433. import DepositApplyDeduction from './components/deposit-apply-deduction.vue'
  434. import DepositApplySurrender from './components/deposit-apply-surrender.vue'
  435. import { downloadFiles, handleImport } from '@/utils/util'
  436. import { getList } from '@/api/engin_deposit.js'
  437. import Mixin from '@/mixin'
  438. export default {
  439. components: {
  440. DepositListDetail,
  441. DepositApplyDeduction,
  442. DepositApplySurrender
  443. },
  444. mixins: [Mixin],
  445. data() {
  446. return {
  447. currentPage: 1, // 当前页码
  448. pageSize: 10, // 每页数量
  449. listTotal: 0, // 列表总数
  450. dataList: [], // 列表数据
  451. screenForm: {
  452. confirmName: '', // 审核人
  453. createName: '', // 创建人
  454. customerKeyword: '', // 客户编码/客户名称
  455. endDeliverTime: '', // 发货申请日期-结束
  456. enginOrderNo: '', // 工程订单编号
  457. enginOrderType: 'HOME', // 工程订单类型
  458. examineStatus: '', // 状态
  459. refEnginRecordNo: '', // 登录单号
  460. refProjectName: '', // 项目名称
  461. refUseUnit: '', // 使用单位
  462. startDeliverTime: '', // 发货申请日期-开始
  463. startSubmitTime:'',
  464. startConfirmTime:'',
  465. isRefundDeposit:null,
  466. examineStatus:null,
  467. refUseUnit:'',
  468. endConfirmTime:'',
  469. startInstallTime:'',
  470. endInstallTime:'',
  471. startSpecification:'',
  472. startSpecialNo:'',
  473. startRefFactoryNo:'',
  474. endSpecification:'',
  475. endSpecialNo:'',
  476. endRefFactoryNo:'',
  477. factoryNo:'',
  478. specialNo:'',
  479. confirmName:'',
  480. refRegionWork:'',
  481. endSubmitTime:'',
  482. startSubmitTime:''
  483. }, // 搜索表单
  484. listLoading: false, // 列表加载loading
  485. deduction: '全部',
  486. showPage: 1,
  487. importFileList: [],
  488. selectData: [],
  489. baseURL: '',
  490. refundDepositArr:[
  491. {
  492. label:'是',
  493. value:true
  494. },
  495. {
  496. label:'否',
  497. value:false
  498. }
  499. ],
  500. examineStatusArr:[
  501. {
  502. label:'保存',
  503. value:'SAVE'
  504. },
  505. {
  506. label:'待审核',
  507. value:'WAIT'
  508. },
  509. {
  510. label:'通过',
  511. value:'OK'
  512. },
  513. {
  514. label:'不通过',
  515. value:'FAIL'
  516. },
  517. {
  518. label:'关闭',
  519. value:'CLOSE'
  520. },
  521. ]
  522. }
  523. },
  524. computed:{
  525. isCustomer(){
  526. return this.$store.getters.customerId && this.$store.getters.customerNumber
  527. }
  528. },
  529. methods: {
  530. // 免扣申请
  531. deductionFn() {
  532. this.showPage = 3
  533. },
  534. // 申请退押
  535. surrenderFn(row) {
  536. this.depositManageId = row.depositManageId
  537. this.showPage = 4
  538. },
  539. detailFn(row) {
  540. this.depositManageId = row.depositManageId
  541. this.refEnginRecordNo = row.refEnginRecordNo
  542. this.showPage = 2
  543. },
  544. getList() {
  545. this.listLoading = true
  546. const params = {
  547. pageSize: this.pageSize,
  548. pageNum: this.currentPage,
  549. isRefundDeposit: this.deduction === '已退押' ? true : null,
  550. ...this.screenForm
  551. }
  552. getList(params).then((res) => {
  553. this.dataList = res.data.records
  554. res.data.records.forEach((item) => {
  555. // item.number = (item.qty*100 - item.directTransferQty*100 - item.retiredQty*100) / 100;
  556. item.sums1 = ['qty']
  557. item.sums2 = ['depositAmount', 'diffAmount', 'price']
  558. })
  559. this.listLoading = false
  560. this.listTotal = res.data.total
  561. })
  562. },
  563. handleRadio() {
  564. this.getList()
  565. },
  566. hanleDownloadFiles() {
  567. if (this.selectData.length) {
  568. const arr = []
  569. for (let i = 0; i < this.selectData.length; i++) {
  570. arr.push(this.selectData[i].depositManageId)
  571. }
  572. downloadFiles('/deposit-manage/export', { id: arr,orderType:'HOME' })
  573. } else {
  574. this.$errorMsg('请选择押金项')
  575. }
  576. },
  577. // 导入
  578. async handleImport(param) {
  579. this.importLoading = true
  580. const file = param.file
  581. console.log(file, 123)
  582. const formData = new FormData()
  583. formData.append('file', file)
  584. // formData.append("policyId", this.screenForm.code);
  585. const result = await handleImport('deposit-manage/import', formData)
  586. this.importLoading = false
  587. this.importFileList = []
  588. if (result.code == 200) {
  589. this.$alert(result.message, '导入成功', {
  590. confirmButtonText: '确定'
  591. })
  592. this.handletwoList()
  593. } else {
  594. this.$alert(result.message, '导入失败', {
  595. confirmButtonText: '确定'
  596. })
  597. }
  598. },
  599. handleSelectionAllChange(e) {
  600. this.selectData = e
  601. }
  602. }
  603. }
  604. </script>
  605. <style lang="scss" scoped>
  606. .fanwei {
  607. display: flex;
  608. span {
  609. margin: 0 20px;
  610. }
  611. div{
  612. width:100%
  613. }
  614. }
  615. .dateStyle {
  616. width: 100%;
  617. }
  618. .import-btn {
  619. margin-left: 10px;
  620. }
  621. </style>