You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

303 lines
12 KiB

3 weeks ago
1 week ago
3 weeks ago
1 week ago
3 weeks ago
1 week ago
3 weeks ago
3 weeks ago
1 week ago
3 weeks ago
3 weeks ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询表单 - rqrq -->
  4. <el-form :inline="true" label-position="top" style="margin-top: 1px; margin-left: 0px;">
  5. <el-form-item label="栈板ID">
  6. <el-input v-model="queryData.palletId" style="width: 120px" placeholder="栈板ID" clearable></el-input>
  7. </el-form-item>
  8. <el-form-item label="任务号">
  9. <el-input v-model="queryData.taskNo" style="width: 120px" placeholder="任务号" clearable></el-input>
  10. </el-form-item>
  11. <el-form-item label="事务类型">
  12. <!-- 海安回调查询仅认新中文入货架原入库/出货架原出库/到达出库口原取货通知/离开入库口原取走栈板/到达异常位原异常位处理/到达手工分拣区 - rqrq -->
  13. <el-select v-model="queryData.transTypeDesc" placeholder="请选择" style="width: 160px" clearable>
  14. <el-option label="全部" value=""></el-option>
  15. <el-option label="入货架" value="入货架"></el-option>
  16. <el-option label="出货架" value="出货架"></el-option>
  17. <el-option label="到达出库口" value="到达出库口"></el-option>
  18. <el-option label="离开入库口" value="离开入库口"></el-option>
  19. <el-option label="到达异常位" value="到达异常位"></el-option>
  20. <el-option label="到达手工分拣区" value="到达手工分拣区"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="处理状态">
  24. <el-select v-model="queryData.status" placeholder="请选择" style="width: 120px" clearable>
  25. <el-option label="全部" value=""></el-option>
  26. <el-option
  27. v-for="item in statusOptions"
  28. :key="item.value"
  29. :label="item.label"
  30. :value="item.value">
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="创建时间从">
  35. <el-date-picker
  36. v-model="queryData.startDate"
  37. type="date"
  38. style="width: 120px"
  39. placeholder="开始日期"
  40. value-format="yyyy-MM-dd"
  41. clearable>
  42. </el-date-picker>
  43. </el-form-item>
  44. <el-form-item label="创建时间至">
  45. <el-date-picker
  46. v-model="queryData.endDate"
  47. type="date"
  48. style="width: 120px"
  49. placeholder="结束日期"
  50. value-format="yyyy-MM-dd"
  51. clearable>
  52. </el-date-picker>
  53. </el-form-item>
  54. <el-form-item label=" ">
  55. <el-button type="primary" @click="getDataList()">{{ $t('warehouse.common.search') }}</el-button>
  56. <el-button @click="resetQuery()">{{ $t('warehouse.common.reset') }}</el-button>
  57. <!-- 导出按钮 - rqrq -->
  58. <download-excel
  59. :fields="fields()"
  60. :data="exportData"
  61. type="xls"
  62. :name="exportName"
  63. :header="exportHeader"
  64. :footer="exportFooter"
  65. :fetch="createExportData"
  66. :before-generate="startDownload"
  67. :before-finish="finishDownload"
  68. :worksheet="$t('warehouse.common.exportWorksheet')"
  69. class="el-button el-button--primary el-button--medium">
  70. {{ $t('warehouse.common.download') }}
  71. </download-excel>
  72. </el-form-item>
  73. </el-form>
  74. <!-- 数据表格 - rqrq -->
  75. <el-table
  76. :data="dataList"
  77. :height="height"
  78. border
  79. highlight-current-row
  80. v-loading="dataListLoading"
  81. style="width: 100%;">
  82. <el-table-column
  83. v-for="(item,index) in columnList" :key="index"
  84. :sortable="item.columnSortable"
  85. :prop="item.columnProp"
  86. :header-align="item.headerAlign"
  87. :show-overflow-tooltip="item.showOverflowTooltip"
  88. :align="item.align"
  89. :fixed="item.fixed==''?false:item.fixed"
  90. :min-width="item.columnWidth"
  91. :label="item.columnLabel">
  92. <template slot-scope="scope">
  93. <span v-if="item.columnProp === 'status'">
  94. <el-tag :type="getStatusType(scope.row.status)" size="small">{{ scope.row.status }}</el-tag>
  95. </span>
  96. <span v-else-if="item.columnProp === 'transTypeDesc'">
  97. <!-- 入货架原入库用绿色其余类型用橙色 - rqrq -->
  98. <el-tag :type="scope.row.transTypeDesc === '入货架' ? 'success' : 'warning'" size="small">
  99. {{ scope.row.transTypeDesc }}
  100. </el-tag>
  101. </span>
  102. <span v-else>{{ scope.row[item.columnProp] }}</span>
  103. </template>
  104. </el-table-column>
  105. </el-table>
  106. <!-- 分页 - rqrq -->
  107. <el-pagination
  108. @size-change="sizeChangeHandle"
  109. @current-change="currentChangeHandle"
  110. :current-page="pageIndex"
  111. :page-sizes="[20, 50, 100, 1000]"
  112. :page-size="pageSize"
  113. :total="totalPage"
  114. layout="total, sizes, prev, pager, next, jumper">
  115. </el-pagination>
  116. </div>
  117. </template>
  118. <script>
  119. import {
  120. haiAnGetWcsCallbackTaskList,
  121. haiAnGetTaskStatusOptions,
  122. haiAnGetUserAuthorizedSites
  123. } from '@/api/haianWarehouse/wcsCallbackTask.js'
  124. export default {
  125. name: 'wcsCallBackSearch54',
  126. data() {
  127. // 查询默认绑定当前登录工厂,满足site只从前端显式传入约束 - rqrq
  128. const defaultSite = this.$store.state.user.site
  129. return {
  130. queryData: {
  131. site: defaultSite,
  132. palletId: '',
  133. taskNo: '',
  134. transTypeDesc: '',
  135. status: '',
  136. startDate: '',
  137. endDate: '',
  138. page: 1,
  139. limit: 20
  140. },
  141. height: 450,
  142. statusOptions: [
  143. { label: '已录入', value: '已录入' },
  144. { label: '处理中', value: '处理中' },
  145. { label: '已完成', value: '已完成' },
  146. { label: '处理失败', value: '处理失败' }
  147. ],
  148. siteOptions: [],
  149. columnList: [
  150. { columnProp: 'site', headerAlign: 'center', align: 'center', columnLabel: '工厂编码', columnWidth: 80, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  151. { columnProp: 'palletId', headerAlign: 'center', align: 'center', columnLabel: '栈板ID', columnWidth: 120, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  152. { columnProp: 'taskNo', headerAlign: 'center', align: 'center', columnLabel: '任务号', columnWidth: 150, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  153. { columnProp: 'itemNo', headerAlign: 'center', align: 'center', columnLabel: '明细行号', columnWidth: 80, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  154. { columnProp: 'transTypeDesc', headerAlign: 'center', align: 'center', columnLabel: '事务类型', columnWidth: 140, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  155. { columnProp: 'toWarehouseId', headerAlign: 'center', align: 'center', columnLabel: '目标仓库', columnWidth: 100, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  156. { columnProp: 'toLocationId', headerAlign: 'center', align: 'center', columnLabel: '目标库位', columnWidth: 120, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  157. { columnProp: 'toStation', headerAlign: 'center', align: 'center', columnLabel: '目标站点', columnWidth: 100, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  158. { columnProp: 'status', headerAlign: 'center', align: 'center', columnLabel: '处理状态', columnWidth: 100, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  159. { columnProp: 'retryCount', headerAlign: 'center', align: 'center', columnLabel: '重试次数', columnWidth: 80, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  160. { columnProp: 'createdTime', headerAlign: 'center', align: 'center', columnLabel: '创建时间', columnWidth: 150, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  161. { columnProp: 'processStartTime', headerAlign: 'center', align: 'center', columnLabel: '处理开始时间', columnWidth: 150, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  162. { columnProp: 'processEndTime', headerAlign: 'center', align: 'center', columnLabel: '处理完成时间', columnWidth: 150, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  163. { columnProp: 'errorMsg', headerAlign: 'center', align: 'left', columnLabel: '错误信息', columnWidth: 200, columnSortable: false, showOverflowTooltip: true, fixed: '' },
  164. { columnProp: 'remark', headerAlign: 'center', align: 'left', columnLabel: '备注', columnWidth: 150, columnSortable: false, showOverflowTooltip: true, fixed: '' }
  165. ],
  166. dataList: [],
  167. pageIndex: 1,
  168. pageSize: 20,
  169. totalPage: 0,
  170. dataListLoading: false,
  171. exportData: [],
  172. exportName: '海安WCS回调任务' + this.dayjs().format('YYYYMMDDHHmmss'),
  173. exportHeader: ['海安WCS回调任务'],
  174. exportFooter: []
  175. }
  176. },
  177. mounted() {
  178. this.$nextTick(() => {
  179. this.height = window.innerHeight - 220
  180. })
  181. },
  182. activated() {
  183. this.getDataList()
  184. this.getSiteOptions()
  185. this.getTaskStatusOptions()
  186. },
  187. methods: {
  188. // 查询列表 - rqrq
  189. getDataList() {
  190. this.dataListLoading = true
  191. this.queryData.page = this.pageIndex
  192. this.queryData.limit = this.pageSize
  193. haiAnGetWcsCallbackTaskList(this.queryData).then(({ data }) => {
  194. this.dataListLoading = false
  195. if (data && data.code === 0) {
  196. this.dataList = data.page.list || []
  197. this.totalPage = data.page.totalCount || 0
  198. } else {
  199. this.dataList = []
  200. this.totalPage = 0
  201. this.$alert(data.msg || this.$t('warehouse.message.queryFailed'), this.$t('warehouse.common.error'), { confirmButtonText: this.$t('warehouse.common.confirm') })
  202. }
  203. }).catch(() => {
  204. this.dataListLoading = false
  205. this.$alert(this.$t('warehouse.message.queryFailed'), this.$t('warehouse.common.error'), { confirmButtonText: this.$t('warehouse.common.confirm') })
  206. })
  207. },
  208. // 读取状态选项,保持后端字典与前端一致 - rqrq
  209. getTaskStatusOptions() {
  210. haiAnGetTaskStatusOptions().then(({ data }) => {
  211. if (data && data.code === 0) {
  212. this.statusOptions = data.options || this.statusOptions
  213. }
  214. })
  215. },
  216. // 获取当前用户授权工厂(保留原页面能力) - rqrq
  217. getSiteOptions() {
  218. const params = { userName: this.$store.state.user.name }
  219. haiAnGetUserAuthorizedSites(params).then(({ data }) => {
  220. if (data && data.code === 0) {
  221. this.siteOptions = data.data || []
  222. }
  223. })
  224. },
  225. // 重置查询 - rqrq
  226. resetQuery() {
  227. this.queryData = {
  228. // 重置后保持当前工厂,不允许把site清空导致后端拒绝或跨厂查询 - rqrq
  229. site: this.$store.state.user.site,
  230. palletId: '',
  231. taskNo: '',
  232. transTypeDesc: '',
  233. status: '',
  234. startDate: '',
  235. endDate: '',
  236. page: 1,
  237. limit: 20
  238. }
  239. this.pageIndex = 1
  240. this.getDataList()
  241. },
  242. sizeChangeHandle(val) {
  243. this.pageSize = val
  244. this.pageIndex = 1
  245. this.getDataList()
  246. },
  247. currentChangeHandle(val) {
  248. this.pageIndex = val
  249. this.getDataList()
  250. },
  251. // 状态标签色 - rqrq
  252. getStatusType(status) {
  253. const statusMap = { 已录入: 'info', 处理中: 'warning', 已完成: 'success', 处理失败: 'danger' }
  254. return statusMap[status] || 'info'
  255. },
  256. // 导出相关 - rqrq
  257. async createExportData() {
  258. const queryParams = { ...this.queryData, page: 1, limit: 999999 }
  259. const { data } = await haiAnGetWcsCallbackTaskList(queryParams)
  260. if (data && data.code === 0) {
  261. return data.page.list || []
  262. }
  263. return []
  264. },
  265. startDownload() {},
  266. finishDownload() {},
  267. fields() {
  268. let json = '{'
  269. this.columnList.forEach((item, index) => {
  270. if (index === this.columnList.length - 1) {
  271. json += '"' + item.columnLabel + '":"' + item.columnProp + '"'
  272. } else {
  273. json += '"' + item.columnLabel + '":"' + item.columnProp + '",'
  274. }
  275. })
  276. json += '}'
  277. return eval('(' + json + ')')
  278. }
  279. }
  280. }
  281. </script>
  282. <style scoped>
  283. .mod-config {
  284. padding: 10px;
  285. }
  286. </style>