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.

477 lines
16 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top">
  4. <el-form-item label="入库状态">
  5. <el-select v-model="queryHeaderData.inStockFlag" placeholder="请选择" style="width: 120px;">
  6. <el-option label="全部" value=""></el-option>
  7. <el-option label="未入库" value="X"></el-option>
  8. <el-option label="已出库" value="N"></el-option>
  9. <el-option label="在库" value="Y"></el-option>
  10. </el-select>
  11. </el-form-item>
  12. <el-form-item label="物料编号">
  13. <el-input style="width: 120px;" v-model="queryHeaderData.partNo" placeholder="请输入物料编号"></el-input>
  14. </el-form-item>
  15. <el-form-item label="批次号">
  16. <el-input style="width: 120px;" v-model="queryHeaderData.batchNo" placeholder="请输入批次号"></el-input>
  17. </el-form-item>
  18. <el-form-item label="库位">
  19. <el-input style="width: 120px;" v-model="queryHeaderData.locationId" placeholder="请输入库位"></el-input>
  20. </el-form-item>
  21. <el-form-item label="标签ID">
  22. <el-input style="width: 120px;" v-model="queryHeaderData.unitId" placeholder="请输入标签ID"></el-input>
  23. </el-form-item>
  24. <el-form-item label="物料描述">
  25. <el-input style="width: 120px;" v-model="queryHeaderData.partDesc" placeholder="请输入物料描述"></el-input>
  26. </el-form-item>
  27. <el-form-item label="所在栈板">
  28. <el-input style="width: 120px;" v-model="queryHeaderData.palletId" ></el-input>
  29. </el-form-item>
  30. <el-form-item label="栈板所在区域">
  31. <el-input style="width: 120px;" v-model="queryHeaderData.stationArea" ></el-input>
  32. </el-form-item>
  33. <el-form-item style="margin-top: 20px;">
  34. <el-button @click="getDataList()" type="primary">查询</el-button>
  35. <el-button @click="resetQuery()" type="default">重置</el-button>
  36. </el-form-item>
  37. </el-form>
  38. <el-table
  39. id="labelQueryTable"
  40. :height="height"
  41. :data="dataList"
  42. border
  43. v-loading="dataListLoading || printLoading"
  44. :element-loading-text="loadingText"
  45. style="width: 100%; margin-bottom: 15px;">
  46. <el-table-column prop="unitId" label="标签ID" min-width="150" show-overflow-tooltip></el-table-column>
  47. <el-table-column prop="partNo" label="物料编号" min-width="120" show-overflow-tooltip></el-table-column>
  48. <el-table-column prop="partDesc" label="物料描述" min-width="150" show-overflow-tooltip></el-table-column>
  49. <el-table-column prop="batchNo" label="批次号" min-width="120" show-overflow-tooltip></el-table-column>
  50. <el-table-column prop="locationId" label="库位" min-width="100" show-overflow-tooltip></el-table-column>
  51. <el-table-column prop="warehouseId" label="仓库" min-width="100" show-overflow-tooltip></el-table-column>
  52. <el-table-column prop="qty" label="数量" min-width="80" align="right"></el-table-column>
  53. <el-table-column prop="palletId" label="所在栈板" min-width="80" align="center"></el-table-column>
  54. <el-table-column prop="stationId" label="所在站点" min-width="80" align="center"></el-table-column>
  55. <el-table-column prop="stationArea" label="所在区域" min-width="200" align="center"></el-table-column>
  56. <el-table-column prop="height" label="高度(mm)" min-width="100" align="right"></el-table-column>
  57. <el-table-column prop="reserveFlag" label="是否预留" min-width="80" align="center">
  58. <template slot-scope="scope">
  59. <span>{{ scope.row.reserveFlag === 'Y' ? '是' : '否' }}</span>
  60. </template>
  61. </el-table-column>
  62. <el-table-column prop="reserveOrderRef1" label="预留单号1" min-width="120" show-overflow-tooltip></el-table-column>
  63. <el-table-column prop="reserveOrderRef2" label="预留单号2" min-width="120" show-overflow-tooltip></el-table-column>
  64. <el-table-column prop="reserveOrderRef3" label="预留单号3" min-width="120" show-overflow-tooltip></el-table-column>
  65. <el-table-column label="操作" min-width="100" fixed="right" align="center">
  66. <template slot-scope="scope">
  67. <a type="text" @click="showEditDialog(scope.row)">修改库位</a>
  68. </template>
  69. </el-table-column>
  70. </el-table>
  71. <el-pagination
  72. @size-change="sizeChangeHandle"
  73. @current-change="currentChangeHandle"
  74. :current-page="pageIndex"
  75. :page-sizes="[20, 50, 100]"
  76. :page-size="pageSize"
  77. :total="totalPage"
  78. layout="total, sizes, prev, pager, next, jumper">
  79. </el-pagination>
  80. <!-- 修改库位弹窗 - rqrq -->
  81. <el-dialog
  82. title="修改库位信息"
  83. :visible.sync="editDialogVisible"
  84. :close-on-click-modal="false"
  85. v-drag
  86. width="800px">
  87. <el-form :model="editForm" ref="editForm" label-position="top" style="margin-top: 1px; margin-left: 0px;">
  88. <!-- 第一行基本信息只读 - rqrq -->
  89. <el-row :gutter="20">
  90. <el-col :span="8">
  91. <el-form-item label="标签ID">
  92. <el-input v-model="editForm.unitId" readonly></el-input>
  93. </el-form-item>
  94. </el-col>
  95. <el-col :span="8">
  96. <el-form-item label="物料编号">
  97. <el-input v-model="editForm.partNo" readonly></el-input>
  98. </el-form-item>
  99. </el-col>
  100. <el-col :span="8">
  101. <el-form-item label="批次号">
  102. <el-input v-model="editForm.batchNo" readonly></el-input>
  103. </el-form-item>
  104. </el-col>
  105. </el-row>
  106. <!-- 第二行可编辑字段 - rqrq -->
  107. <el-row :gutter="20">
  108. <el-col :span="8">
  109. <el-form-item label="仓库" prop="warehouseId">
  110. <el-input v-model="editForm.warehouseId" placeholder="请输入仓库"></el-input>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="8">
  114. <el-form-item label="库位" prop="locationId">
  115. <el-input v-model="editForm.locationId" placeholder="请输入库位"></el-input>
  116. </el-form-item>
  117. </el-col>
  118. <el-col :span="8">
  119. <el-form-item label="是否在库" prop="inStockFlag">
  120. <el-select v-model="editForm.inStockFlag" placeholder="请选择" style="width: 100%">
  121. <el-option label="在库" value="Y"></el-option>
  122. <el-option label="已出库" value="N"></el-option>
  123. <el-option label="未入库" value="X"></el-option>
  124. </el-select>
  125. </el-form-item>
  126. </el-col>
  127. </el-row>
  128. <!-- 第三行预留信息 - rqrq -->
  129. <el-row :gutter="20">
  130. <el-col :span="8">
  131. <el-form-item label="是否预留" prop="reserveFlag">
  132. <el-select v-model="editForm.reserveFlag" @change="handleReserveFlagChange" placeholder="请选择" style="width: 100%">
  133. <el-option label="是" value="Y"></el-option>
  134. <el-option label="否" value="N"></el-option>
  135. </el-select>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="8">
  139. <el-form-item label="预留单号1">
  140. <el-input v-model="editForm.reserveOrderRef1" placeholder="请输入预留单号1"></el-input>
  141. </el-form-item>
  142. </el-col>
  143. <el-col :span="8">
  144. <el-form-item label="预留单号2">
  145. <el-input v-model="editForm.reserveOrderRef2" placeholder="请输入预留单号2"></el-input>
  146. </el-form-item>
  147. </el-col>
  148. </el-row>
  149. <!-- 第四行预留单号3和高度 - rqrq -->
  150. <el-row :gutter="20">
  151. <el-col :span="8">
  152. <el-form-item label="预留单号3">
  153. <el-input v-model="editForm.reserveOrderRef3" placeholder="请输入预留单号3"></el-input>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :span="8">
  157. <el-form-item label="高度(mm)">
  158. <el-input v-model="editForm.height" type="number" placeholder="请输入高度"></el-input>
  159. </el-form-item>
  160. </el-col>
  161. </el-row>
  162. </el-form>
  163. <div slot="footer" class="dialog-footer">
  164. <el-button type="primary" @click="saveEdit" :disabled="editLoading">
  165. {{ editLoading ? '保存中...' : '确定' }}
  166. </el-button>
  167. <el-button @click="editDialogVisible = false" :disabled="editLoading">取消</el-button>
  168. </div>
  169. </el-dialog>
  170. </div>
  171. </template>
  172. <script>
  173. import { getHandlingUnitLabelList, reprintLabel, deleteLabel, updateLabelLocation } from '@/api/warehouse/labelQuery'
  174. import { searchSysLanguagePackList, saveUserFavorite, searchUserFavorite } from '@/api/sysLanguage'
  175. import { createOtherInboundHU, printLabel } from '@/api/warehouse/otherInbound'
  176. import {getHandlingUnitLabelAll, getHandlingUnitLabelListLocation} from '../../../api/warehouse/labelQuery'
  177. export default {
  178. data() {
  179. return {
  180. dataForm: {
  181. key: ''
  182. },
  183. dataList: [],
  184. pageIndex: 1,
  185. pageSize: 50,
  186. totalPage: 0,
  187. dataListLoading: false,
  188. printLoading: false,
  189. loadingText: '加载中...',
  190. dataListSelections: [],
  191. favorite: false,
  192. height: 500,
  193. queryHeaderData: {
  194. inStockFlag: '',
  195. partNo: '',
  196. batchNo: '',
  197. locationId: '',
  198. unitId: '',
  199. partDesc: '',
  200. stationArea:'',
  201. palletId:'',
  202. },
  203. // 打印相关配置
  204. reportId: 'HU_LABEL', // 默认报表ID,可根据实际情况调整
  205. zplCode: '', // ZPL代码
  206. paperSize: 'A4',
  207. orientation: 'portrait',
  208. dpi: 203,
  209. // 修改库位相关 - rqrq
  210. editDialogVisible: false,
  211. editLoading: false,
  212. editForm: {
  213. unitId: '',
  214. partNo: '',
  215. batchNo: '',
  216. warehouseId: '',
  217. locationId: '',
  218. inStockFlag: '',
  219. reserveFlag: 'N',
  220. reserveOrderRef1: '',
  221. reserveOrderRef2: '',
  222. reserveOrderRef3: '',
  223. height: ''
  224. },
  225. // 其它入库标签打印相关
  226. otherInboundVisible: false,
  227. otherInboundLoading: false,
  228. otherInboundForm: {
  229. partNo: '',
  230. partDesc: '',
  231. batchNo: '',
  232. locationId: '',
  233. warehouseId: '',
  234. wdr: '*',
  235. qty: 1,
  236. umId: '个',
  237. packageCount: 1,
  238. manufactureDate: '',
  239. expiredDate: '',
  240. remark: ''
  241. },
  242. otherInboundRules: {
  243. partNo: [
  244. { required: true, message: '物料编码不能为空', trigger: 'blur' }
  245. ],
  246. partDesc: [
  247. { required: true, message: '物料描述不能为空', trigger: 'blur' }
  248. ],
  249. batchNo: [
  250. { required: true, message: '批次号不能为空', trigger: 'blur' }
  251. ],
  252. locationId: [
  253. { required: true, message: '库位不能为空', trigger: 'blur' }
  254. ],
  255. warehouseId: [
  256. { required: true, message: '仓库不能为空', trigger: 'blur' }
  257. ],
  258. qty: [
  259. { required: true, message: '数量不能为空', trigger: 'blur' },
  260. { type: 'number', min: 0.01, message: '数量必须大于0', trigger: 'blur' }
  261. ],
  262. umId: [
  263. { required: true, message: '单位不能为空', trigger: 'blur' }
  264. ],
  265. packageCount: [
  266. { required: true, message: '包装数不能为空', trigger: 'blur' },
  267. { type: 'number', min: 1, message: '包装数必须大于等于1', trigger: 'blur' }
  268. ]
  269. }
  270. }
  271. },
  272. activated() {
  273. this.getDataList()
  274. this.getHeight()
  275. },
  276. mounted() {
  277. this.getDataList()
  278. this.getHeight()
  279. },
  280. methods: {
  281. // 获取数据列表
  282. getDataList() {
  283. this.dataListLoading = true
  284. const params = {
  285. page: this.pageIndex,
  286. size: this.pageSize,
  287. site: localStorage.getItem('site'),
  288. ...this.queryHeaderData
  289. }
  290. getHandlingUnitLabelAll(params).then(({ data }) => {
  291. if (data && data.code === 0) {
  292. this.dataList = data.page.list || []
  293. this.totalPage = data.page.totalCount || 0
  294. } else {
  295. this.dataList = []
  296. this.totalPage = 0
  297. this.$message.error(data.msg || '查询失败')
  298. }
  299. this.dataListLoading = false
  300. }).catch(() => {
  301. this.dataList = []
  302. this.totalPage = 0
  303. this.dataListLoading = false
  304. })
  305. },
  306. // 重置查询条件
  307. resetQuery() {
  308. this.queryHeaderData = {
  309. inStockFlag: '',
  310. partNo: '',
  311. batchNo: '',
  312. locationId: '',
  313. unitId: '',
  314. partDesc: ''
  315. }
  316. this.pageIndex = 1
  317. this.getDataList()
  318. },
  319. // 每页数
  320. sizeChangeHandle(val) {
  321. this.pageSize = val
  322. this.pageIndex = 1
  323. this.getDataList()
  324. },
  325. // 当前页
  326. currentChangeHandle(val) {
  327. this.pageIndex = val
  328. this.getDataList()
  329. },
  330. // 格式化日期
  331. formatDate(date) {
  332. if (!date) return ''
  333. const d = new Date(date)
  334. const year = d.getFullYear()
  335. const month = String(d.getMonth() + 1).padStart(2, '0')
  336. const day = String(d.getDate()).padStart(2, '0')
  337. const hours = String(d.getHours()).padStart(2, '0')
  338. const minutes = String(d.getMinutes()).padStart(2, '0')
  339. const seconds = String(d.getSeconds()).padStart(2, '0')
  340. return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
  341. },
  342. // 获取表格高度
  343. getHeight() {
  344. this.$nextTick(() => {
  345. this.height = window.innerHeight - 220
  346. })
  347. },
  348. // 打开修改库位弹窗 - rqrq
  349. showEditDialog(row) {
  350. this.editForm = {
  351. unitId: row.unitId,
  352. partNo: row.partNo,
  353. batchNo: row.batchNo,
  354. warehouseId: row.warehouseId || '',
  355. locationId: row.locationId || '',
  356. inStockFlag: row.inStockFlag || '',
  357. reserveFlag: row.reserveFlag || 'N',
  358. reserveOrderRef1: row.reserveOrderRef1 || '',
  359. reserveOrderRef2: row.reserveOrderRef2 || '',
  360. reserveOrderRef3: row.reserveOrderRef3 || '',
  361. height: row.height || ''
  362. }
  363. this.editDialogVisible = true
  364. },
  365. // 是否预留变化处理 - rqrq
  366. handleReserveFlagChange(value) {
  367. if (value === 'N') {
  368. // 选择N时清空3个预留单号 - rqrq
  369. this.editForm.reserveOrderRef1 = ''
  370. this.editForm.reserveOrderRef2 = ''
  371. this.editForm.reserveOrderRef3 = ''
  372. }
  373. },
  374. // 保存修改 - rqrq
  375. saveEdit() {
  376. // 参数校验 - rqrq
  377. if (!this.editForm.warehouseId) {
  378. this.$message.error('仓库不能为空')
  379. return
  380. }
  381. if (!this.editForm.locationId) {
  382. this.$message.error('库位不能为空')
  383. return
  384. }
  385. this.editLoading = true
  386. const params = {
  387. site: localStorage.getItem('site'),
  388. unitId: this.editForm.unitId,
  389. warehouseId: this.editForm.warehouseId,
  390. locationId: this.editForm.locationId,
  391. inStockFlag: this.editForm.inStockFlag,
  392. reserveFlag: this.editForm.reserveFlag,
  393. reserveOrderRef1: this.editForm.reserveOrderRef1,
  394. reserveOrderRef2: this.editForm.reserveOrderRef2,
  395. reserveOrderRef3: this.editForm.reserveOrderRef3,
  396. height: this.editForm.height
  397. }
  398. updateLabelLocation(params).then(({ data }) => {
  399. if (data && data.code === 0) {
  400. this.$message.success('修改成功')
  401. this.editDialogVisible = false
  402. this.getDataList()
  403. } else {
  404. this.$message.error(data.msg || '修改失败')
  405. }
  406. }).catch(() => {
  407. this.$message.error('修改失败')
  408. }).finally(() => {
  409. this.editLoading = false
  410. })
  411. }
  412. }
  413. }
  414. </script>
  415. <style>
  416. .mod-config .el-form-item {
  417. margin-bottom: 15px;
  418. }
  419. .sl-svg {
  420. font-size: 20px;
  421. cursor: pointer;
  422. color: #409EFF;
  423. }
  424. /* 其它入库标签打印表单样式 */
  425. .other-inbound-form .form-item-vertical {
  426. margin-bottom: 20px;
  427. }
  428. .other-inbound-form .form-item-vertical .el-form-item__label {
  429. display: block;
  430. text-align: left;
  431. padding: 0 0 8px 0;
  432. line-height: 1.5;
  433. font-weight: 500;
  434. }
  435. .other-inbound-form .form-item-vertical .el-form-item__content {
  436. margin-left: 0 !important;
  437. }
  438. .other-inbound-form .el-row {
  439. margin-bottom: 0;
  440. }
  441. </style>