deposit_list.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  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="startDeliverTime">
  53. <el-date-picker
  54. v-model="screenForm.startDeliverTime"
  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="startSubmitTime">
  63. <el-date-picker
  64. v-model="screenForm.startSubmitTime"
  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="specification">
  128. <el-input
  129. v-model="screenForm.specification"
  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="specialNo">
  136. <el-input
  137. v-model="screenForm.specialNo"
  138. placeholder="请输入特价编号"
  139. />
  140. </el-form-item>
  141. </el-col>
  142. <el-col :xs="24" :sm="12" :lg="6">
  143. <el-form-item label="厂编号" prop="factoryNo">
  144. <el-input
  145. v-model="screenForm.factoryNo"
  146. placeholder="请输入厂编号"
  147. />
  148. </el-form-item>
  149. </el-col>
  150. <el-col :xs="24" :sm="12" :lg="6">
  151. <el-form-item label="审核人" prop="confirmName">
  152. <el-input
  153. v-model="screenForm.confirmName"
  154. placeholder="请输入审核人"
  155. />
  156. </el-form-item>
  157. </el-col>
  158. <el-col :xs="24" :sm="12" :lg="6">
  159. <el-form-item label="区域" prop="refRegionWork">
  160. <el-input
  161. v-model="screenForm.refRegionWork"
  162. placeholder="请输入区域"
  163. />
  164. </el-form-item>
  165. </el-col>
  166. <el-col :xs="24" :sm="12" :lg="6">
  167. <el-form-item label="开始安装日期" prop="startInstallTime">
  168. <el-date-picker
  169. v-model="screenForm.startInstallTime"
  170. class="dateStyle"
  171. type="datetime"
  172. placeholder="选择安装日期"
  173. />
  174. </el-form-item>
  175. </el-col>
  176. <el-col :xs="24" :sm="12" :lg="6">
  177. <el-form-item label="结束安装日期" prop="endInstallTime">
  178. <el-date-picker
  179. v-model="screenForm.endInstallTime"
  180. class="dateStyle"
  181. type="datetime"
  182. placeholder="选择安装日期"
  183. />
  184. </el-form-item>
  185. </el-col>
  186. </template>
  187. <el-col :xs="24" :sm="24" :lg="24">
  188. <el-form-item label="" class="fr">
  189. <el-button
  190. size="mini"
  191. @click="resetScreenForm"
  192. >清空</el-button>
  193. <el-button
  194. size="mini"
  195. type="primary"
  196. @click="submitScreenForm"
  197. >搜索</el-button>
  198. </el-form-item>
  199. </el-col>
  200. </el-row>
  201. </el-form>
  202. </div>
  203. <!-- 按钮 -->
  204. <div class="btn-group clearfix" style="display: flex">
  205. <el-button
  206. type="primary"
  207. size="mini"
  208. @click="hanleDownloadFiles"
  209. >导出</el-button>
  210. <el-upload
  211. v-if="$checkBtnRole('import', $route.meta.roles)"
  212. class="import-btn"
  213. :action="baseURL + 'student/import'"
  214. :http-request="handleImport"
  215. :file-list="importFileList"
  216. :show-file-list="false"
  217. >
  218. <el-button size="mini">导入</el-button>
  219. </el-upload>
  220. </div>
  221. <!-- 列表 -->
  222. <div class="mymain-container">
  223. <div class="table">
  224. <el-table
  225. v-loading="listLoading"
  226. :data="dataList"
  227. element-loading-text="Loading"
  228. border
  229. fit
  230. highlight-current-row
  231. stripe
  232. show-summary
  233. :summary-method="$getSummaries"
  234. @select-all="handleSelectionAllChange"
  235. @selection-change="handleSelectionAllChange"
  236. >
  237. <el-table-column align="left" type="selection" width="55" />
  238. <el-table-column
  239. align="left"
  240. label="工程登录编号"
  241. prop="refEnginRecordNo"
  242. min-width="160"
  243. show-overflow-tooltip
  244. />
  245. <el-table-column
  246. align="left"
  247. label="使用单位"
  248. prop="refUseUnit"
  249. min-width="160"
  250. show-overflow-tooltip
  251. />
  252. <el-table-column
  253. align="left"
  254. label="申请日期"
  255. prop="submitTime"
  256. min-width="160"
  257. show-overflow-tooltip
  258. />
  259. <el-table-column
  260. align="left"
  261. label="验收日期"
  262. prop="checkDate"
  263. min-width="160"
  264. show-overflow-tooltip
  265. />
  266. <el-table-column
  267. align="left"
  268. label="经销商编码"
  269. prop="customerNumber"
  270. min-width="160"
  271. show-overflow-tooltip
  272. >
  273. <template slot-scope="scope">
  274. <CopyButton :copy-text="scope.row.customerNumber" />
  275. <span>{{ scope.row.customerNumber }}</span>
  276. </template>
  277. </el-table-column>
  278. <el-table-column
  279. align="left"
  280. label="经销商名称"
  281. prop="customerName"
  282. min-width="160"
  283. show-overflow-tooltip
  284. >
  285. <template slot-scope="scope">
  286. <CopyButton :copy-text="scope.row.customerName" />
  287. <span>{{ scope.row.customerName }}</span>
  288. </template>
  289. </el-table-column>
  290. <!-- <el-table-column
  291. align="left"
  292. label="是否免扣"
  293. prop=""
  294. min-width="160"
  295. show-overflow-tooltip
  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. specification:'',
  472. factoryNo:'',
  473. specialNo:'',
  474. confirmName:'',
  475. refRegionWork:''
  476. }, // 搜索表单
  477. listLoading: false, // 列表加载loading
  478. deduction: '全部',
  479. showPage: 1,
  480. importFileList: [],
  481. selectData: [],
  482. baseURL: '',
  483. refundDepositArr:[
  484. {
  485. label:'是',
  486. value:true
  487. },
  488. {
  489. label:'否',
  490. value:false
  491. }
  492. ],
  493. examineStatusArr:[
  494. {
  495. label:'保存',
  496. value:'SAVE'
  497. },
  498. {
  499. label:'待审核',
  500. value:'WAIT'
  501. },
  502. {
  503. label:'通过',
  504. value:'OK'
  505. },
  506. {
  507. label:'不通过',
  508. value:'FAIL'
  509. },
  510. {
  511. label:'关闭',
  512. value:'CLOSE'
  513. },
  514. ]
  515. }
  516. },
  517. computed:{
  518. isCustomer(){
  519. return this.$store.getters.customerId && this.$store.getters.customerNumber
  520. }
  521. },
  522. methods: {
  523. // 免扣申请
  524. deductionFn() {
  525. this.showPage = 3
  526. },
  527. // 申请退押
  528. surrenderFn(row) {
  529. this.depositManageId = row.depositManageId
  530. this.showPage = 4
  531. },
  532. detailFn(row) {
  533. this.depositManageId = row.depositManageId
  534. this.refEnginRecordNo = row.refEnginRecordNo
  535. this.showPage = 2
  536. },
  537. getList() {
  538. this.listLoading = true
  539. const params = {
  540. pageSize: this.pageSize,
  541. pageNum: this.currentPage,
  542. isRefundDeposit: this.deduction === '已退押' ? true : null,
  543. ...this.screenForm
  544. }
  545. getList(params).then((res) => {
  546. this.dataList = res.data.records
  547. res.data.records.forEach((item) => {
  548. // item.number = (item.qty*100 - item.directTransferQty*100 - item.retiredQty*100) / 100;
  549. item.sums1 = ['qty']
  550. item.sums2 = ['depositAmount', 'diffAmount', 'price']
  551. })
  552. this.listLoading = false
  553. this.listTotal = res.data.total
  554. })
  555. },
  556. handleRadio() {
  557. this.getList()
  558. },
  559. hanleDownloadFiles() {
  560. if (this.selectData.length) {
  561. const arr = []
  562. for (let i = 0; i < this.selectData.length; i++) {
  563. arr.push(this.selectData[i].depositManageId)
  564. }
  565. downloadFiles('/deposit-manage/export', { id: arr,orderType:'HOME' })
  566. } else {
  567. this.$errorMsg('请选择押金项')
  568. }
  569. },
  570. // 导入
  571. async handleImport(param) {
  572. this.importLoading = true
  573. const file = param.file
  574. console.log(file, 123)
  575. const formData = new FormData()
  576. formData.append('file', file)
  577. // formData.append("policyId", this.screenForm.code);
  578. const result = await handleImport('deposit-manage/import', formData)
  579. this.importLoading = false
  580. this.importFileList = []
  581. if (result.code == 200) {
  582. this.$alert(result.message, '导入成功', {
  583. confirmButtonText: '确定'
  584. })
  585. this.handletwoList()
  586. } else {
  587. this.$alert(result.message, '导入失败', {
  588. confirmButtonText: '确定'
  589. })
  590. }
  591. },
  592. handleSelectionAllChange(e) {
  593. this.selectData = e
  594. }
  595. }
  596. }
  597. </script>
  598. <style lang="scss" scoped>
  599. .dateStyle {
  600. width: 100%;
  601. }
  602. .import-btn {
  603. margin-left: 10px;
  604. }
  605. </style>