code_list.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. <template>
  2. <div class="app-container">
  3. <!-- 筛选条件 -->
  4. <div class="screen-container">
  5. <div class="top clearfix">
  6. <div class="title fl">条件筛选</div>
  7. <div class="fr">
  8. <el-button size="small" type="primary" @click="isOpen = !isOpen"
  9. >{{ isOpen ? '收起' : '展开'
  10. }}<i class="el-icon--right" :class="isOpen ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"></i
  11. ></el-button>
  12. <el-button size="small" @click="resetScreenForm">清空</el-button>
  13. <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
  14. </div>
  15. </div>
  16. <el-form ref="screenForm" :model="screenForm" label-width="70px" size="small" label-position="left">
  17. <el-row :gutter="20">
  18. <el-col :xs="24" :sm="12" :lg="6">
  19. <el-form-item label="条形码" prop="code">
  20. <el-input v-model="screenForm.code" placeholder="请输入条形码"></el-input>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :xs="24" :sm="12" :lg="6">
  24. <el-form-item label="订单号" prop="orderNo">
  25. <el-input v-model="screenForm.orderNo" placeholder="请输入订单号"></el-input>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :xs="24" :sm="12" :lg="6">
  29. <el-form-item label="销售公司" prop="salesCompany">
  30. <el-input v-model="screenForm.salesCompany" placeholder="请输入销售公司"></el-input>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :xs="24" :sm="12" :lg="6">
  34. <el-form-item label="收货地址" prop="address">
  35. <el-input v-model="screenForm.address" placeholder="请输入收货地址"></el-input>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :xs="24" :sm="12" :lg="6" v-if="isOpen">
  39. <el-form-item label="扫描时间" prop="scanDate">
  40. <el-date-picker
  41. v-model="screenForm.scanDate"
  42. type="daterange"
  43. range-separator="至"
  44. style="width: 100%"
  45. ref="scanDate"
  46. value-format="yyyy-MM-dd"
  47. :picker-options="pickerOptions"
  48. start-placeholder="开始日期"
  49. end-placeholder="结束日期"
  50. >
  51. </el-date-picker>
  52. </el-form-item>
  53. </el-col>
  54. <el-col :xs="24" :sm="12" :lg="6" v-if="isOpen">
  55. <el-form-item label="产品名称" prop="goodsName">
  56. <el-input v-model="screenForm.goodsName" placeholder="请输入产品名称"></el-input>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :xs="24" :sm="12" :lg="6" v-if="isOpen">
  60. <el-form-item label="设备仓库" prop="warehouse">
  61. <el-input v-model="screenForm.warehouse" placeholder="请输入设备仓库"></el-input>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :xs="24" :sm="12" :lg="6" v-if="isOpen">
  65. <el-form-item label="网点信息" prop="website">
  66. <el-input v-model="screenForm.website" placeholder="请输入网点信息"></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :xs="24" :sm="12" :lg="6" v-if="isOpen">
  70. <el-form-item label="服务人员" prop="worker">
  71. <el-input v-model="screenForm.worker" placeholder="请输入服务人员"></el-input>
  72. </el-form-item>
  73. </el-col>
  74. <el-col :xs="24" :sm="12" :lg="6" v-if="isOpen">
  75. <el-form-item label="核验时间" prop="checkDate">
  76. <el-date-picker
  77. v-model="screenForm.checkDate"
  78. type="daterange"
  79. range-separator="至"
  80. style="width: 100%"
  81. value-format="yyyy-MM-dd"
  82. start-placeholder="开始日期"
  83. end-placeholder="结束日期"
  84. >
  85. </el-date-picker>
  86. </el-form-item>
  87. </el-col>
  88. </el-row>
  89. </el-form>
  90. </div>
  91. <div class="mymain-container">
  92. <div class="btn-group clearfix">
  93. <div class="fr">
  94. <el-button size="small" type="primary" @click="handleExport" v-if="checkBtnRole('export')"
  95. >导出数据</el-button
  96. >
  97. </div>
  98. </div>
  99. <div class="table">
  100. <el-table
  101. v-loading="listLoading"
  102. :data="dataList"
  103. element-loading-text="Loading"
  104. border
  105. fit
  106. highlight-current-row
  107. stripe
  108. >
  109. <el-table-column
  110. align="center"
  111. label="条形码"
  112. prop="barCode"
  113. min-width="140"
  114. show-overflow-tooltip
  115. ></el-table-column>
  116. <el-table-column
  117. align="center"
  118. label="产品名称"
  119. prop="productName"
  120. min-width="220"
  121. show-overflow-tooltip
  122. ></el-table-column>
  123. <el-table-column align="center" label="出库采集时间" prop="deliveryTime" min-width="160"></el-table-column>
  124. <el-table-column align="center" label="设备仓库" prop="warehouse" min-width="100"></el-table-column>
  125. <el-table-column
  126. align="center"
  127. label="收货地址"
  128. prop="address"
  129. min-width="220"
  130. show-overflow-tooltip
  131. ></el-table-column>
  132. <el-table-column align="center" label="发货日期" prop="consignerTime" min-width="160"></el-table-column>
  133. <el-table-column
  134. align="center"
  135. label="订单号"
  136. prop="orderNumber"
  137. min-width="140"
  138. show-overflow-tooltip
  139. ></el-table-column>
  140. <el-table-column align="center" label="最新核验状态" prop="verificationStatus" min-width="120">
  141. <template slot-scope="scope">
  142. {{ scope.row.verificationStatus | CODE_CHECK_STATUS_FILTER }}
  143. </template>
  144. </el-table-column>
  145. <el-table-column
  146. align="center"
  147. label="最新核验时间"
  148. prop="verificationTime"
  149. min-width="160"
  150. ></el-table-column>
  151. <el-table-column align="center" label="核验人员" prop="workerNumber" min-width="160" show-overflow-tooltip>
  152. <template slot-scope="scope"> {{ scope.row.workerName }}({{ scope.row.workerNumber }}) </template>
  153. </el-table-column>
  154. <el-table-column align="center" label="核验人员手机号" prop="workerPhone" min-width="130"></el-table-column>
  155. <el-table-column
  156. align="center"
  157. label="所属网点名称"
  158. prop="websitName"
  159. min-width="160"
  160. show-overflow-tooltip
  161. ></el-table-column>
  162. <el-table-column
  163. align="center"
  164. label="所属网点编号"
  165. prop="websitNumber"
  166. min-width="120"
  167. show-overflow-tooltip
  168. ></el-table-column>
  169. <el-table-column align="center" label="上传人" prop="createByNumber" min-width="160" show-overflow-tooltip>
  170. <template slot-scope="scope"> {{ scope.row.createBy }}({{ scope.row.createByNumber }}) </template>
  171. </el-table-column>
  172. <el-table-column align="center" label="上传时间" prop="createTime" min-width="160"></el-table-column>
  173. </el-table>
  174. </div>
  175. <div class="pagination clearfix">
  176. <div class="fr">
  177. <el-pagination
  178. @size-change="handleSizeChange"
  179. @current-change="handleCurrentChange"
  180. :current-page="currentPage"
  181. :page-sizes="[10, 20, 30, 50]"
  182. :page-size="10"
  183. layout="total, sizes, prev, pager, next, jumper"
  184. :total="listTotal"
  185. >
  186. </el-pagination>
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. </template>
  192. <script>
  193. import { getCodeList } from '@/api/barcodeVerification'
  194. import { downloadFiles, handleImport } from '@/utils/util'
  195. export default {
  196. data() {
  197. return {
  198. isOpen: false, // 是否展开条件筛选
  199. dataList: null, // 列表数据
  200. listLoading: false, // 列表加载loading
  201. currentPage: 1, // 当前页码
  202. pageSize: 10, // 每页数量
  203. listTotal: 0, // 列表总数
  204. screenForm: {
  205. // 筛选表单数据
  206. code: '',
  207. orderNo: '',
  208. salesCompany: '',
  209. address: '',
  210. scanDate: [],
  211. goodsName: '',
  212. warehouse: '',
  213. website: '',
  214. worker: '',
  215. checkDate: []
  216. },
  217. pickerOptions: {
  218. onPick: ({ maxDate, minDate }) => {
  219. this.selectDate = minDate.getTime()
  220. if (maxDate) {
  221. this.selectDate = ''
  222. }
  223. },
  224. disabledDate: time => {
  225. if (this.selectDate !== '') {
  226. const one = 30 * 24 * 3600 * 1000
  227. const minTime = this.selectDate - one
  228. const maxTime = this.selectDate + one
  229. return time.getTime() < minTime || time.getTime() > maxTime
  230. }
  231. }
  232. },
  233. importLoading_wh: false, // 导入加载loading
  234. importFileList_wh: [], // 导入列表
  235. importLoading_ss: false, // 导入加载loading
  236. importFileList_ss: [], // 导入列表
  237. importLoading_ls: false, // 导入加载loading
  238. importFileList_ls: [], // 导入列表
  239. importLoading_tm: false, // 导入加载loading
  240. importFileList_tm: [], // 导入列表
  241. importLoading_lb: false, // 导入加载loading
  242. importFileList_lb: [] // 导入列表
  243. }
  244. },
  245. computed: {
  246. userInfo() {
  247. return JSON.parse(localStorage.getItem('settlement_user'))
  248. }
  249. },
  250. created() {
  251. // this.getCodeList();
  252. },
  253. methods: {
  254. // 查询按钮权限
  255. checkBtnRole(value) {
  256. return true
  257. let btnRole = this.$route.meta.roles
  258. if (!btnRole) {
  259. return true
  260. }
  261. let index = btnRole.indexOf(value)
  262. return index >= 0 ? true : false
  263. },
  264. // 获取列表
  265. getCodeList() {
  266. this.listLoading = true
  267. let params = {
  268. pageNo: this.currentPage,
  269. pageSize: this.pageSize,
  270. barCode: this.screenForm.code,
  271. orderNumber: this.screenForm.orderNo,
  272. salesCompany: this.screenForm.salesCompany,
  273. address: this.screenForm.address,
  274. startTime:
  275. this.screenForm.scanDate && this.screenForm.scanDate.length ? this.screenForm.scanDate[0] + ' 00:00:00' : '',
  276. endTime:
  277. this.screenForm.scanDate && this.screenForm.scanDate.length ? this.screenForm.scanDate[1] + ' 23:59:59' : '',
  278. productName: this.screenForm.goodsName,
  279. warehouse: this.screenForm.warehouse,
  280. websitNumber: this.screenForm.website,
  281. workerName: this.screenForm.worker,
  282. verificationStartTime:
  283. this.screenForm.checkDate && this.screenForm.checkDate.length
  284. ? this.screenForm.checkDate[0] + ' 00:00:00'
  285. : '',
  286. verificationEndTime:
  287. this.screenForm.checkDate && this.screenForm.checkDate.length
  288. ? this.screenForm.checkDate[1] + ' 23:59:59'
  289. : ''
  290. }
  291. getCodeList(params).then(res => {
  292. this.dataList = res.data.records
  293. this.listTotal = res.data.total
  294. this.listLoading = false
  295. })
  296. },
  297. // 更改每页数量
  298. handleSizeChange(val) {
  299. this.pageSize = val
  300. this.currentPage = 1
  301. this.getCodeList()
  302. },
  303. // 更改当前页
  304. handleCurrentChange(val) {
  305. this.currentPage = val
  306. this.getCodeList()
  307. },
  308. // 提交筛选表单
  309. submitScreenForm() {
  310. this.currentPage = 1
  311. this.getCodeList()
  312. },
  313. // 重置筛选表单
  314. resetScreenForm() {
  315. this.$refs.screenForm.resetFields()
  316. this.currentPage = 1
  317. this.getCodeList()
  318. },
  319. // 导出
  320. handleExport() {
  321. if (!this.screenForm.scanDate || this.screenForm.scanDate.length < 1) {
  322. this.isOpen = true
  323. return this.$errorMsg('请选择扫描时间')
  324. }
  325. let screenData = {
  326. barCode: this.screenForm.code,
  327. orderNumber: this.screenForm.orderNo,
  328. salesCompany: this.screenForm.salesCompany,
  329. address: this.screenForm.address,
  330. startTime:
  331. this.screenForm.scanDate && this.screenForm.scanDate.length ? this.screenForm.scanDate[0] + ' 00:00:00' : '',
  332. endTime:
  333. this.screenForm.scanDate && this.screenForm.scanDate.length ? this.screenForm.scanDate[1] + ' 23:59:59' : '',
  334. productName: this.screenForm.goodsName,
  335. warehouse: this.screenForm.warehouse,
  336. websitNumber: this.screenForm.website,
  337. workerName: this.screenForm.worker,
  338. verificationStartTime:
  339. this.screenForm.checkDate && this.screenForm.checkDate.length
  340. ? this.screenForm.checkDate[0] + ' 00:00:00'
  341. : '',
  342. verificationEndTime:
  343. this.screenForm.checkDate && this.screenForm.checkDate.length
  344. ? this.screenForm.checkDate[1] + ' 23:59:59'
  345. : ''
  346. }
  347. downloadFiles('externalCode/equipment/export', screenData)
  348. },
  349. // 导入
  350. async handleImport_wh(param) {
  351. this.importLoading_wh = true
  352. const file = param.file
  353. const formData = new FormData()
  354. formData.append('file', file)
  355. let result = await handleImport('java/code/equipmentCode/importWanHao', formData)
  356. this.importLoading_wh = false
  357. this.importFileList_wh = []
  358. this.$importMsg(result)
  359. if (result.code == 200) {
  360. this.getCodeList()
  361. }
  362. },
  363. // 导入
  364. async handleImport_ss(param) {
  365. this.importLoading_ss = true
  366. const file = param.file
  367. const formData = new FormData()
  368. formData.append('file', file)
  369. let result = await handleImport('java/code/equipmentCode/importSanShui', formData)
  370. this.importLoading_ss = false
  371. this.importFileList_ss = []
  372. this.$importMsg(result)
  373. if (result.code == 200) {
  374. this.getCodeList()
  375. }
  376. },
  377. // 导入
  378. async handleImport_ls(param) {
  379. this.importLoading_ls = true
  380. const file = param.file
  381. const formData = new FormData()
  382. formData.append('file', file)
  383. let result = await handleImport('java/code/equipmentCode/import', formData)
  384. this.importLoading_ls = false
  385. this.importFileList_ls = []
  386. this.$importMsg(result)
  387. if (result.code == 200) {
  388. this.getCodeList()
  389. }
  390. },
  391. // 导入
  392. async handleImport_tm(param) {
  393. this.importLoading_tm = true
  394. const file = param.file
  395. const formData = new FormData()
  396. formData.append('file', file)
  397. let result = await handleImport('java/code/equipmentCode/importTianMao', formData)
  398. this.importLoading_tm = false
  399. this.importFileList_tm = []
  400. this.$importMsg(result)
  401. if (result.code == 200) {
  402. this.getCodeList()
  403. }
  404. },
  405. // 导入
  406. async handleImport_lb(param) {
  407. this.importLoading_lb = true
  408. const file = param.file
  409. const formData = new FormData()
  410. formData.append('file', file)
  411. let result = await handleImport('java/code/equipmentCode/importLuBao', formData)
  412. this.importLoading_lb = false
  413. this.importFileList_lb = []
  414. this.$importMsg(result)
  415. if (result.code == 200) {
  416. this.getCodeList()
  417. }
  418. },
  419. // 下载导入模版
  420. handleDownload_wh() {
  421. downloadFiles('java/code/equipmentCode/wanhaoDownload')
  422. },
  423. // 下载导入模版
  424. handleDownload_ss() {
  425. downloadFiles('java/code/equipmentCode/sanshuiDownload')
  426. },
  427. // 下载导入模版
  428. handleDownload_ls() {
  429. downloadFiles('java/code/equipmentCode/longshangDownload')
  430. },
  431. // 下载导入模版
  432. handleDownload_tm() {
  433. downloadFiles('java/code/equipmentCode/tianMaoDownload')
  434. },
  435. // 下载导入模版
  436. handleDownload_lb() {
  437. downloadFiles('java/code/equipmentCode/luBaoDownload')
  438. }
  439. }
  440. }
  441. </script>