reserve_list.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. <template>
  2. <div class="app-container">
  3. <div v-show="!isShowDetail && !isShowForm">
  4. <!-- 筛选条件 -->
  5. <div class="screen-container">
  6. <Collapse :is-collapse="isCollapse" :screen-form="screenForm">
  7. <template #right_btn>
  8. <el-button size="mini" @click="resetScreenForm">清空</el-button>
  9. <el-button size="mini" type="primary" @click="submitScreenForm">搜索</el-button>
  10. </template>
  11. <template #left_btn>
  12. <el-radio-group v-model="screenForm.status" @change="getList()" size="mini">
  13. <el-radio-button label="">全部</el-radio-button>
  14. <el-radio-button v-for="(item, index) in statusList" :key="index" :label="item.value">{{
  15. item.label
  16. }}</el-radio-button>
  17. </el-radio-group>
  18. </template>
  19. <template #search>
  20. <el-form ref="screenForm" :model="screenForm" label-width="85px" size="mini" label-position="left">
  21. <el-row :gutter="20">
  22. <el-col :xs="24" :sm="12" :lg="6">
  23. <el-form-item label="产品名称" prop="goodsName">
  24. <el-input v-model="screenForm.goodsName" placeholder="请输入产品名称"></el-input>
  25. </el-form-item>
  26. </el-col>
  27. <el-col :xs="24" :sm="12" :lg="6">
  28. <el-form-item label="物料编码" prop="goodsNum">
  29. <el-input v-model="screenForm.goodsNum" placeholder="请输入物料编码"></el-input>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :xs="24" :sm="12" :lg="6">
  33. <el-form-item label="规格型号" prop="model">
  34. <el-input v-model="screenForm.model" placeholder="请输入规格型号"></el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :xs="24" :sm="12" :lg="6">
  38. <el-form-item label="销售订单号" prop="saleNum">
  39. <el-input v-model="screenForm.saleNum" placeholder="请输入销售订单号"></el-input>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :xs="24" :sm="12" :lg="6">
  43. <el-form-item label="经销商名称" prop="jxsName">
  44. <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :xs="24" :sm="12" :lg="6">
  48. <el-form-item label="经销商编号" prop="jxsNum">
  49. <el-input v-model="screenForm.jxsNum" placeholder="请输入经销商编号"></el-input>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :xs="24" :sm="12" :lg="6">
  53. <el-form-item label="预留日期" prop="date">
  54. <el-date-picker
  55. v-model="screenForm.date"
  56. type="datetimerange"
  57. range-separator="至"
  58. style="width: 100%"
  59. value-format="yyyy-MM-dd HH:mm:ss"
  60. start-placeholder="开始日期"
  61. end-placeholder="结束日期"
  62. >
  63. </el-date-picker>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :xs="24" :sm="12" :lg="6">
  67. <el-form-item label="制表人" prop="createMan">
  68. <el-input v-model="screenForm.createMan" placeholder="请输入制表人"></el-input>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :xs="24" :sm="12" :lg="6">
  72. <el-form-item label="修改人" prop="updateMan">
  73. <el-input v-model="screenForm.updateMan" placeholder="请输入修改人"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :xs="24" :sm="12" :lg="6">
  77. <el-form-item label="预留单号" prop="orderNum">
  78. <el-input v-model="screenForm.orderNum" placeholder="请输入预留单号"></el-input>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :xs="24" :sm="12" :lg="6">
  82. <el-form-item label="预留仓库" prop="warehouse">
  83. <el-select v-model="screenForm.warehouse" placeholder="选择预留仓库" clearable>
  84. <el-option
  85. :label="item.name"
  86. :value="item.id"
  87. v-for="(item, index) in warehouseList"
  88. :key="index"
  89. ></el-option>
  90. </el-select>
  91. </el-form-item>
  92. </el-col>
  93. </el-row>
  94. </el-form>
  95. </template>
  96. </Collapse>
  97. </div>
  98. <div class="mymain-container">
  99. <div class="btn-group clearfix">
  100. <div class="fl flex">
  101. <el-button
  102. size="mini"
  103. type="primary"
  104. icon="el-icon-plus"
  105. @click="toForm()"
  106. v-if="$checkBtnRole('add', $route.meta.roles)"
  107. >新增</el-button
  108. >
  109. <ExportButton class="ml" :exUrl="'reserve/download'" v-if="!isDealer" exText="下载模板" :exParams="{}" />
  110. <ImportButton :imUrl="'reserve/importData'" v-if="!isDealer" @importSuccess="getList" />
  111. </div>
  112. <div class="fr">
  113. <ExportButton :exUrl="'reserve/export'" :exParams="exParams" />
  114. </div>
  115. </div>
  116. <div class="table">
  117. <el-table
  118. v-loading="listLoading"
  119. :data="dataList"
  120. element-loading-text="Loading"
  121. border
  122. fit
  123. highlight-current-row
  124. stripe
  125. show-summary
  126. :summary-method="$getSummaries"
  127. >
  128. <el-table-column align="left" label="状态" prop="status" min-width="100" show-overflow-tooltip>
  129. <template slot-scope="scope">
  130. {{ scope.row.status | statusFilter }}
  131. </template>
  132. </el-table-column>
  133. <el-table-column align="left" label="预留单号" prop="id" min-width="180" show-overflow-tooltip>
  134. <template slot-scope="scope">
  135. <CopyButton :copyText="scope.row.id" />
  136. <span>{{ scope.row.id }}</span>
  137. </template>
  138. </el-table-column>
  139. <el-table-column
  140. align="left"
  141. label="预留日期"
  142. prop="createTime"
  143. min-width="160"
  144. show-overflow-tooltip
  145. ></el-table-column>
  146. <el-table-column align="left" label="销售订单号" prop="mainOrderId" min-width="140" show-overflow-tooltip>
  147. <template slot-scope="scope">
  148. <CopyButton :copyText="scope.row.mainOrderId" />
  149. <span>{{ scope.row.mainOrderId }}</span>
  150. </template>
  151. </el-table-column>
  152. <el-table-column align="left" label="订单日期" prop="orderTime" min-width="120" show-overflow-tooltip>
  153. <template slot-scope="scope">
  154. {{ scope.row.orderTime | dateToDayFilter }}
  155. </template>
  156. </el-table-column>
  157. <el-table-column align="left" label="物料编码" prop="materialCode" min-width="120" show-overflow-tooltip>
  158. <template slot-scope="scope">
  159. <CopyButton :copyText="scope.row.materialCode" />
  160. <span>{{ scope.row.materialCode }}</span>
  161. </template>
  162. </el-table-column>
  163. <el-table-column
  164. align="left"
  165. label="产品编码"
  166. prop="materialOldNumber"
  167. min-width="140"
  168. show-overflow-tooltip
  169. >
  170. <template slot-scope="scope">
  171. <CopyButton :copyText="scope.row.materialOldNumber" />
  172. <span>{{ scope.row.materialOldNumber }}</span>
  173. </template>
  174. </el-table-column>
  175. <el-table-column align="left" label="产品名称" prop="materialName" min-width="160" show-overflow-tooltip>
  176. <template slot-scope="scope">
  177. <CopyButton :copyText="scope.row.materialName" />
  178. <span>{{ scope.row.materialName }}</span>
  179. </template>
  180. </el-table-column>
  181. <el-table-column align="left" label="规格型号" prop="specification" min-width="350" show-overflow-tooltip>
  182. <template slot-scope="scope">
  183. <CopyButton :copyText="scope.row.specification" />
  184. <span>{{ scope.row.specification }}</span>
  185. </template>
  186. </el-table-column>
  187. <el-table-column
  188. align="left"
  189. label="单位"
  190. prop="unit"
  191. min-width="100"
  192. show-overflow-tooltip
  193. ></el-table-column>
  194. <el-table-column
  195. align="right"
  196. label="预留数量"
  197. prop="oldNum"
  198. min-width="100"
  199. show-overflow-tooltip
  200. ></el-table-column>
  201. <el-table-column
  202. align="right"
  203. label="可发货数量"
  204. prop="reservedNum"
  205. min-width="100"
  206. show-overflow-tooltip
  207. ></el-table-column>
  208. <el-table-column
  209. align="right"
  210. label="订单数量"
  211. prop="qty"
  212. min-width="100"
  213. show-overflow-tooltip
  214. ></el-table-column>
  215. <el-table-column
  216. align="left"
  217. label="预留仓库"
  218. prop="correspondName"
  219. min-width="100"
  220. show-overflow-tooltip
  221. ></el-table-column>
  222. <el-table-column
  223. align="left"
  224. label="备注"
  225. prop="remark"
  226. min-width="160"
  227. show-overflow-tooltip
  228. ></el-table-column>
  229. <el-table-column
  230. align="left"
  231. label="经销商编码"
  232. prop="customerNumber"
  233. min-width="100"
  234. show-overflow-tooltip
  235. >
  236. <template slot-scope="scope">
  237. <CopyButton :copyText="scope.row.customerNumber" />
  238. <span>{{ scope.row.customerNumber }}</span>
  239. </template>
  240. </el-table-column>
  241. <el-table-column align="left" label="经销商名称" prop="customerName" min-width="250" show-overflow-tooltip>
  242. <template slot-scope="scope">
  243. <CopyButton :copyText="scope.row.customerName" />
  244. <span>{{ scope.row.customerName }}</span>
  245. </template>
  246. </el-table-column>
  247. <el-table-column
  248. align="left"
  249. label="制表人"
  250. prop="createBy"
  251. min-width="100"
  252. show-overflow-tooltip
  253. ></el-table-column>
  254. <el-table-column
  255. align="left"
  256. label="制表日期"
  257. prop="createTime"
  258. min-width="160"
  259. show-overflow-tooltip
  260. ></el-table-column>
  261. <el-table-column
  262. align="left"
  263. label="修改人"
  264. prop="updateBy"
  265. min-width="100"
  266. show-overflow-tooltip
  267. ></el-table-column>
  268. <el-table-column
  269. align="left"
  270. label="修改日期"
  271. prop="updateTime"
  272. min-width="160"
  273. show-overflow-tooltip
  274. ></el-table-column>
  275. <el-table-column
  276. align="left"
  277. label="关闭人"
  278. prop="closureBy"
  279. min-width="100"
  280. show-overflow-tooltip
  281. ></el-table-column>
  282. <el-table-column
  283. align="left"
  284. label="关闭日期"
  285. prop="closureTime"
  286. min-width="160"
  287. show-overflow-tooltip
  288. ></el-table-column>
  289. <el-table-column align="center" label="操作" width="160" fixed="right">
  290. <template slot-scope="scope">
  291. <el-button type="text" @click="toForm(scope.row)" v-if="$checkBtnRole('edit', $route.meta.roles)"
  292. >编辑</el-button
  293. >
  294. <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
  295. <el-popconfirm
  296. style="margin-left: 10px"
  297. title="确定关闭吗?"
  298. @onConfirm="handleClose(scope.row.itemId)"
  299. v-if="$checkBtnRole('examine', $route.meta.roles) && scope.row.status === 1"
  300. >
  301. <el-button slot="reference" type="text">关闭</el-button>
  302. </el-popconfirm>
  303. </template>
  304. </el-table-column>
  305. </el-table>
  306. </div>
  307. </div>
  308. <div class="pagination clearfix">
  309. <div class="fr">
  310. <el-pagination
  311. @size-change="handleSizeChange"
  312. @current-change="handleCurrentChange"
  313. :current-page="currentPage"
  314. :page-sizes="[10, 20, 30, 50]"
  315. :page-size="10"
  316. layout="total, sizes, prev, pager, next, jumper"
  317. :total="listTotal"
  318. >
  319. </el-pagination>
  320. </div>
  321. </div>
  322. </div>
  323. <ReserveDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
  324. <ReserveForm :listItem="queryItem" v-if="isShowForm" @backListFormDetail="backList" />
  325. </div>
  326. </template>
  327. <script>
  328. import { getList, closeData, getWarehouseList } from '@/api/supply/reserve'
  329. import ReserveDetail from '@/views/supply/reserve/components/reserve_detail'
  330. import ReserveForm from '@/views/supply/reserve/components/reserve_form'
  331. let that
  332. export default {
  333. components: {
  334. ReserveDetail,
  335. ReserveForm
  336. },
  337. filters: {
  338. statusFilter(val) {
  339. const obj = that.statusList.find(o => o.value === val)
  340. return obj ? obj.label : ''
  341. }
  342. },
  343. data() {
  344. return {
  345. currentPage: 1, // 当前页码
  346. pageSize: 10, // 每页数量
  347. listTotal: 0, // 列表总数
  348. dataList: null, // 列表数据
  349. listLoading: false, // 列表加载loading
  350. screenForm: {
  351. // 筛选表单数据
  352. goodsName: '',
  353. goodsNum: '',
  354. orderNum: '',
  355. jxsName: '',
  356. jxsNum: '',
  357. date: '',
  358. createMan: '',
  359. updateMan: '',
  360. saleNum: '',
  361. model: '',
  362. status: '',
  363. warehouse: ''
  364. },
  365. statusList: [
  366. { label: '执行中', value: 1 },
  367. { label: '已关闭', value: 0 }
  368. ],
  369. warehouseList: [],
  370. isCollapse: true,
  371. queryItem: {},
  372. isShowDetail: false,
  373. isShowForm: false
  374. }
  375. },
  376. computed: {
  377. exParams() {
  378. return {
  379. materialName: this.screenForm.goodsName,
  380. materialCode: this.screenForm.goodsNum,
  381. customerNumber: this.screenForm.jxsNum,
  382. customerName: this.screenForm.jxsName,
  383. startTime: this.screenForm.date ? this.screenForm.date[0] : '',
  384. endTime: this.screenForm.date ? this.screenForm.date[1] : '',
  385. createBy: this.screenForm.createMan,
  386. updateBy: this.screenForm.updateMan,
  387. id: this.screenForm.orderNum,
  388. orderId: this.screenForm.saleNum,
  389. specification: this.screenForm.model,
  390. status: this.screenForm.status,
  391. correspondId: this.screenForm.warehouse
  392. }
  393. },
  394. isDealer() {
  395. return JSON.parse(localStorage.getItem('supply_user')).isCustomer
  396. }
  397. },
  398. beforeCreate() {
  399. that = this
  400. },
  401. created() {
  402. this.getWarehouseList()
  403. this.getList()
  404. console.log(this.$route.meta.roles)
  405. },
  406. methods: {
  407. // 获取仓库列表
  408. getWarehouseList() {
  409. getWarehouseList({
  410. pageNum: 1,
  411. pageSize: -1
  412. }).then(res => {
  413. this.warehouseList = res.data.records
  414. })
  415. },
  416. // 查询列表
  417. getList() {
  418. this.listLoading = true
  419. let params = {
  420. pageNum: this.currentPage,
  421. pageSize: this.pageSize,
  422. materialName: this.screenForm.goodsName,
  423. materialCode: this.screenForm.goodsNum,
  424. customerNumber: this.screenForm.jxsNum,
  425. customerName: this.screenForm.jxsName,
  426. startTime: this.screenForm.date ? this.screenForm.date[0] : '',
  427. endTime: this.screenForm.date ? this.screenForm.date[1] : '',
  428. createBy: this.screenForm.createMan,
  429. updateBy: this.screenForm.updateMan,
  430. id: this.screenForm.orderNum,
  431. orderId: this.screenForm.saleNum,
  432. specification: this.screenForm.model,
  433. status: this.screenForm.status,
  434. correspondId: this.screenForm.warehouse
  435. }
  436. getList(params).then(res => {
  437. res.data.records.forEach(item => {
  438. item.sums1 = ['oldNum', 'reservedNum', 'qty']
  439. item.sums2 = []
  440. })
  441. this.dataList = res.data.records
  442. this.listTotal = res.data.total
  443. this.listLoading = false
  444. })
  445. },
  446. // 提交筛选表单
  447. submitScreenForm() {
  448. this.currentPage = 1
  449. this.getList()
  450. },
  451. // 重置筛选表单
  452. resetScreenForm() {
  453. this.$refs.screenForm.resetFields()
  454. this.currentPage = 1
  455. this.getList()
  456. },
  457. // 更改每页数量
  458. handleSizeChange(val) {
  459. this.pageSize = val
  460. this.currentPage = 1
  461. this.getList()
  462. },
  463. // 更改当前页
  464. handleCurrentChange(val) {
  465. this.currentPage = val
  466. this.getList()
  467. },
  468. // 进入表单
  469. toForm(item) {
  470. this.queryItem = item
  471. this.isShowForm = true
  472. },
  473. // 进入详情
  474. toDetail(item) {
  475. this.queryItem = item
  476. this.isShowDetail = true
  477. },
  478. backList() {
  479. this.queryItem = {}
  480. this.isShowDetail = false
  481. this.isShowForm = false
  482. },
  483. // 关闭
  484. handleClose(id) {
  485. closeData({ itemId: id }).then(res => {
  486. this.$successMsg()
  487. this.getList()
  488. })
  489. }
  490. }
  491. }
  492. </script>
  493. <style lang="scss" scoped>
  494. .flex {
  495. display: flex;
  496. }
  497. .ml {
  498. margin-left: 10px;
  499. }
  500. </style>