@logwire/logwire-wms-pda-ui 1.1.16 → 1.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/package.json +1 -1
  2. package/src/api/inbound/quality.js +10 -0
  3. package/src/api/outbound/bale/checkBale/action.js +9 -0
  4. package/src/components/module/InnerAbnormal/index.vue +21 -1
  5. package/src/components/module/Login/index.vue +4 -8
  6. package/src/components/page/common/Warehouse/index.vue +4 -1
  7. package/src/components/page/count/components/RandomCount.vue +3 -12
  8. package/src/components/page/count/inv/action/index.vue +10 -10
  9. package/src/components/page/count/loc/action/index.vue +1 -1
  10. package/src/components/page/inbound/index.js +6 -0
  11. package/src/components/page/{inner → inbound}/newProject/action/index.js +0 -0
  12. package/src/components/page/{inner → inbound}/newProject/action/index.less +0 -0
  13. package/src/components/page/{inner → inbound}/newProject/action/index.vue +9 -4
  14. package/src/components/page/{inner → inbound}/newProject/index/index.js +0 -0
  15. package/src/components/page/{inner → inbound}/newProject/index/index.less +0 -0
  16. package/src/components/page/{inner → inbound}/newProject/index/index.vue +0 -0
  17. package/src/components/page/{inner → inbound}/newProject//346/226/260/345/223/201/351/205/215/347/275/256.md +0 -0
  18. package/src/components/page/inbound/receive/quality/LwInboundQualityExecutePage.vue +56 -29
  19. package/src/components/page/inbound/receive/quality/LwInboundQualityTaskListPage.vue +19 -22
  20. package/src/components/page/inbound/receive/receive-sku/LwInboundReceiveSkuAdvancePage.vue +33 -31
  21. package/src/components/page/inbound/receive/receive-sku/LwInboundReceiveSkuDirectPage.vue +62 -56
  22. package/src/components/page/inner/index.js +2 -6
  23. package/src/components/page/inner/reportAbnormal/index/index.vue +8 -0
  24. package/src/components/page/outbound/bale/checkBale/action/index.vue +10 -1
  25. package/src/components/page/outbound/bale/components/containerInfo/index.vue +13 -5
  26. package/src/components/page/outbound/delivery/components/soAndLpnItem/index.vue +10 -1
  27. package/src/components/page/receive/putaway/skuAction/index.vue +2 -1
  28. package/src/components/ui/Input/index.vue +10 -2
  29. package/src/mixins/loginAndInit/index.js +27 -0
  30. package/src/mixins/loginAndInit//346/234/211token/346/227/266/345/200/231/345/222/214/346/234/211/344/273/223/345/272/223id/346/227/266/351/234/200/350/246/201/345/210/235/345/247/213/345/214/226/347/232/204/346/225/260/346/215/256.md +0 -0
  31. package/src/mixins//346/267/267/345/205/245.md +0 -0
  32. package/src/router/index.js +2 -2
  33. package/src/router/menu.js +1 -1
  34. package/src/views/common/init/index.vue +14 -10
  35. /package/src/views/{inner → inbound}/newProject/action.vue +0 -0
  36. /package/src/views/{inner → inbound}/newProject/index.vue +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logwire/logwire-wms-pda-ui",
3
- "version": "1.1.16",
3
+ "version": "1.1.19",
4
4
  "private": false,
5
5
  "author": "zhangwen",
6
6
  "description": "运匠科技wms-PDA基础组件库",
@@ -88,6 +88,16 @@ export const submitSkuSnQuality = data => lwAxios.action({
88
88
  data
89
89
  })
90
90
 
91
+ /**
92
+ * 完成商品品检
93
+ * @param taskId 品检任务id
94
+ * @returns {Promise<{ quality: Object, printList: Array<Object> }>} 品检结果
95
+ */
96
+ export const finishSkuQuality = taskId => lwAxios.action({
97
+ url: 'wmsMobileInboundPassQuality',
98
+ data: { taskId }
99
+ })
100
+
91
101
  /**
92
102
  * 提交品检异常
93
103
  * @param data 品检异常数据
@@ -112,3 +112,12 @@ export function projectWmsMixPackContainerSkuBlock(data){
112
112
  data
113
113
  })
114
114
  }
115
+
116
+
117
+ // 异常确认
118
+ export function projectWmsMixPackSubmitAbnormal(data){
119
+ return lwAxios.action({
120
+ url:'projectWmsMixPackSubmitAbnormal',
121
+ data
122
+ })
123
+ }
@@ -119,6 +119,7 @@
119
119
  input-align="right"
120
120
  rule-prefix="innerAbn"
121
121
  rule-key="lpn"
122
+ :required="requireLpn"
122
123
  @confirm="abnormalFocus.remark=true"
123
124
  />
124
125
 
@@ -170,7 +171,13 @@ export default {
170
171
  abType: String,
171
172
 
172
173
  // 异常类型可选key
173
- abnTypeKey: Array
174
+ abnTypeKey: Array,
175
+
176
+ // 是否必须填写LPN
177
+ requireLpn: {
178
+ type: Boolean,
179
+ default: false,
180
+ },
174
181
 
175
182
  },
176
183
  data() {
@@ -291,6 +298,17 @@ export default {
291
298
 
292
299
  return true
293
300
  },
301
+ // 异常LPN校验
302
+ abnLpnCheck(){
303
+ if (this.requireLpn && !this.abnormal.abnLpn){
304
+ this.abnormalFocus.lpn = true
305
+ this.$lwShowErrorMsg(
306
+ this.$lwLanguage.get('wms_project.pda.module.inboundAbn.lpnNull','异常托盘号不能为空')
307
+ )
308
+ return false
309
+ }
310
+ return true
311
+ },
294
312
 
295
313
  // 必填校验
296
314
  requiredCheck(){
@@ -319,6 +337,8 @@ export default {
319
337
 
320
338
  if (!this.abnLocalCheck()) return
321
339
 
340
+ if (!this.abnLpnCheck()) return
341
+
322
342
  return true
323
343
  },
324
344
  // 获取填写的异常数据
@@ -86,8 +86,11 @@
86
86
 
87
87
  <script>
88
88
 
89
+ import {loginAndInit} from "../../../mixins/loginAndInit";
90
+
89
91
  export default {
90
92
  name: "lwLoginModule",
93
+ mixins:[loginAndInit],
91
94
  props: {
92
95
  // 用户名图标
93
96
  usernameSrc: {
@@ -243,14 +246,7 @@ export default {
243
246
  // 储存token
244
247
  this.$lwApiUtils.setToken(res.token)
245
248
 
246
- await Promise.all([
247
- // 绑定UUID
248
- this.$lwUUID.bound(),
249
- // 获取字典数据
250
- this.$lwDict.asyncGet(),
251
- // 获取权限数据
252
- this.$lwPermissions.asyncGet(),
253
- ])
249
+ await this.getSystemInitData()
254
250
 
255
251
  // 如果存在跳转页面就自动跳转
256
252
  if (this.path) {
@@ -65,8 +65,11 @@
65
65
 
66
66
  <script>
67
67
 
68
+ import {loginAndInit} from "../../../../mixins/loginAndInit";
69
+
68
70
  export default {
69
71
  name: "lwWarehousePage",
72
+ mixins:[loginAndInit],
70
73
  props:{
71
74
 
72
75
  // 点击导航栏返回按钮
@@ -192,7 +195,7 @@ export default {
192
195
  await this.$lwApi.warehouse.selectConfirm(item.code)
193
196
 
194
197
  // 获取当前配置了的打印机
195
- await this.$lwPrint.asyncGet()
198
+ await this.getSystemInitData()
196
199
 
197
200
  if (!this.routerConfirmBack && this.path){
198
201
  this.$router.push({
@@ -2,7 +2,7 @@
2
2
  <lw-popup v-model="showPop" title="随机盘点" :show-off-btn="false">
3
3
  <div>
4
4
  <lw-input title="库位" v-model="data.loc.value" :get-focus.sync="data.loc.focus" @confirm="data.sku.focus = true"/>
5
- <lw-input title="商品" v-model="data.sku.value" :get-focus.sync="data.sku.focus" @confirm="resolveSku"/>
5
+ <lw-input title="商品" v-model="data.sku.value" :get-focus.sync="data.sku.focus"/>
6
6
  <lw-input title="托盘" v-model="data.lpn.value"
7
7
  v-if="grading === 'LPN'"
8
8
  :get-focus.sync="data.lpn.focus"/>
@@ -77,17 +77,8 @@ export default {
77
77
  this.showPop = true
78
78
  this.data.loc.focus = true
79
79
  },
80
- resolveSku () {
81
- if (this.data.sku.value) {
82
- // TODO: 商品条码解析
83
- this.sku = this.data.sku.value
84
- }
85
- },
86
80
  submit (ownerId = null) {
87
- if (!this.sku) {
88
- this.sku = this.data.sku.value
89
- }
90
- if (!this.sku) {
81
+ if (!this.data.sku.value) {
91
82
  this.data.sku.focus = true
92
83
  return
93
84
  }
@@ -96,7 +87,7 @@ export default {
96
87
  return
97
88
  }
98
89
  invCountLineCustom({
99
- skuCode: this.sku,
90
+ skuCode: this.data.sku.value,
100
91
  ownerId,
101
92
  taskNo: this.countTaskNo,
102
93
  locationCode: this.data.loc.value,
@@ -34,9 +34,9 @@
34
34
  <lw-input title="库位" v-model="inputData.locationCode.value"
35
35
  :get-focus.sync="inputData.locationCode.focus"
36
36
  @confirm="inputData.skuCode.focus = true"/>
37
- <lw-input title="商品条码" v-model="inputData.skuCode.barcode"
38
- :get-focus.sync="inputData.skuCode.focus"
39
- @confirm="resolveSkuCode"/>
37
+ <lw-input title="商品条码" v-model="inputData.skuCode.value"
38
+ rule-key="sku" rule-value-key="skuCode"
39
+ :get-focus.sync="inputData.skuCode.focus"/>
40
40
  <div class="lw-global-props">
41
41
  <div>
42
42
  <div>商品编码</div>
@@ -106,7 +106,6 @@ export default {
106
106
  focus: true,
107
107
  },
108
108
  skuCode: {
109
- barcode: '',
110
109
  value: '',
111
110
  focus: false,
112
111
  },
@@ -170,11 +169,6 @@ export default {
170
169
  getPrevLine () {
171
170
  getPreviousCountLine(this.taskNo, this.lineId).then(this.initLine)
172
171
  },
173
- resolveSkuCode () {
174
- // TODO: 商品条码解析
175
- this.inputData.skuCode.value = this.inputData.skuCode.barcode
176
- this.inputData.qty.focus = true
177
- },
178
172
  submitEmptyInv () {
179
173
  if (!this.inputData.locationCode.value) {
180
174
  return this.$lwShowErrorMsg('盘点库位不能为空')
@@ -189,6 +183,13 @@ export default {
189
183
  })
190
184
  },
191
185
  submitCount () {
186
+ if (this.lotGroups) {
187
+ const lotQty = this.lotGroups.map(i => parseInt(i.qty) || 0).reduce((a, b) => a + b, 0)
188
+ if (lotQty !== parseInt(this.inputData.qty.value)) {
189
+ return this.$lwShowErrorMsg('批次数量之和与盘点数量不符')
190
+ }
191
+ }
192
+
192
193
  invCountLineSubmit({
193
194
  countLineId: this.line.id,
194
195
  qty: this.inputData.qty.value,
@@ -229,7 +230,6 @@ export default {
229
230
  focus: true,
230
231
  },
231
232
  skuCode: {
232
- barcode: '',
233
233
  value: '',
234
234
  focus: false,
235
235
  },
@@ -59,7 +59,7 @@
59
59
  <div v-else :key="record.key"
60
60
  class="lw-global-model-box loc-cont-record">
61
61
  <div v-if="record.diffQty !== 0" class="loc-cont-record-diff">有差异</div>
62
- <p><b>{{ record.ownerName }} / {{ record.ownerName }}</b></p>
62
+ <p><b>{{ record.ownerCode }} / {{ record.ownerName }}</b></p>
63
63
  <p>{{ record.skuCode }}</p>
64
64
  <div class="lw-global-sh"></div>
65
65
  <div class="lw-global-flex-between">
@@ -2,10 +2,16 @@ import LwInboundReceiveIndexPage from './receive/index'
2
2
  import LwInboundReceiveHomePage from './receive/home'
3
3
  import receiveSkuPages from './receive/receive-sku'
4
4
  import skuQualityPages from './receive/quality'
5
+ // 新品配置
6
+ import lwNewProjectIndexPage from "./newProject/index";
7
+ // 新品配置
8
+ import lwNewProjectActionPage from "./newProject/action";
5
9
 
6
10
  export default [
7
11
  LwInboundReceiveIndexPage,
8
12
  LwInboundReceiveHomePage,
9
13
  ...receiveSkuPages,
10
14
  ...skuQualityPages,
15
+ lwNewProjectIndexPage,
16
+ lwNewProjectActionPage,
11
17
  ]
@@ -23,6 +23,11 @@
23
23
  </div>
24
24
  <div class="lw-global-row">
25
25
 
26
+ <lw-title-value-cell
27
+ :value="skuNewProjectSkuInfo.skuName"
28
+ val-bold
29
+ :is-row="false"
30
+ />
26
31
 
27
32
  <lw-title-value-cell
28
33
  :title="$lwLanguage.get('','货主')"
@@ -142,28 +147,28 @@
142
147
 
143
148
  <lw-input
144
149
  v-model="skuNewProjectSkuInfo.length"
145
- title="裸件长"
150
+ title="裸件长(mm)"
146
151
  type="number"
147
152
 
148
153
  :show-bottom-border="false"
149
154
  />
150
155
  <lw-input
151
156
  v-model="skuNewProjectSkuInfo.width"
152
- title="裸件宽"
157
+ title="裸件宽(mm)"
153
158
  type="number"
154
159
  :show-bottom-border="false"
155
160
  />
156
161
 
157
162
  <lw-input
158
163
  v-model="skuNewProjectSkuInfo.height"
159
- title="裸件高"
164
+ title="裸件高(mm)"
160
165
  type="number"
161
166
  :show-bottom-border="false"
162
167
  />
163
168
 
164
169
  <lw-input
165
170
  v-model="skuNewProjectSkuInfo.weight"
166
- title="裸件重量"
171
+ title="裸件重量(Kg)"
167
172
  type="number"
168
173
  :show-bottom-border="false"
169
174
  />
@@ -12,7 +12,7 @@
12
12
  <van-tabs type="card" animated v-model="tabActive">
13
13
  <van-tab title="品检">
14
14
  <div class="lw-global-model-box">
15
- <lw-input v-if="!currentLpn" title="托盘" v-model="lpn.value" :get-focus.sync="lpn.focus" @confirm="scanLpn"/>
15
+ <lw-input v-if="!currentLpn" title="托盘" v-model="lpn.value" :get-focus.sync="lpn.focus" @confirm="scanLpn()"/>
16
16
  <template v-if="currentLpn">
17
17
  <div class="lw-global-props">
18
18
  <div>
@@ -36,8 +36,9 @@
36
36
  </div>
37
37
  </template>
38
38
  </div>
39
- <div v-if="task.sku.needSn" class="lw-global-model-box" style="margin-top: 10px;">
40
- <lw-input title="序列号条码" required v-model="sn" @confirm="addSn"/>
39
+ <div v-if="currentLpn && !task.sku.needSn" class="lw-global-model-box" style="margin-top: 10px;">
40
+ <lw-input title="序列号条码" required v-model="sn.value" :get-focus.sync="sn.focus"
41
+ rule-key="sn" rule-value-key="sn" :rule-serve-query="barcodeQuery" @confirm="addSn"/>
41
42
  <div v-if="sns.length" class="tag-list">
42
43
  <div class="tag-list-title">
43
44
  <div>当前扫描结果</div>
@@ -93,6 +94,10 @@
93
94
  <lw-button plain @click="resetLpn">切换托盘</lw-button>
94
95
  <lw-button @click="submitLpn">提交品检结果</lw-button>
95
96
  </lw-bottom-bar>
97
+ <lw-bottom-bar v-else-if="canFinish">
98
+ <lw-button plain @click="resetSku" v-if="$route.query.lwComeFrom !== 'task'">切换商品</lw-button>
99
+ <lw-button @click="finishSku">完成当前商品品检</lw-button>
100
+ </lw-bottom-bar>
96
101
  <van-dialog v-model="showSns" title="当前扫描的SN列表">
97
102
  <sns-list :sns="sns" @remove="removeSn"/>
98
103
  </van-dialog>
@@ -107,6 +112,7 @@
107
112
  :sku-name="task.sku.name"
108
113
  :qty="currentLpn.canQualityQty"
109
114
  :location="task.locationCode"
115
+ require-lpn
110
116
  type="品检"
111
117
  ab-type="品检异常"/>
112
118
  <template #button>
@@ -118,6 +124,7 @@
118
124
 
119
125
  <script>
120
126
  import {
127
+ finishSkuQuality,
121
128
  getInboundFoundQualityCard,
122
129
  getInboundGetQualityDetail, submitQualityAbnormal,
123
130
  submitSkuQuality, submitSkuSnQuality
@@ -140,7 +147,10 @@ export default {
140
147
  focus: true,
141
148
  },
142
149
  currentLpn: null,
143
- sn: '',
150
+ sn: {
151
+ value: '',
152
+ focus: false,
153
+ },
144
154
  sns: [],
145
155
  showSns: false,
146
156
  lotQuery: null,
@@ -151,6 +161,15 @@ export default {
151
161
  snsQty () {
152
162
  return this.sns.map(i => parseInt(i.qty)).reduce((a, b) => a + b, 0)
153
163
  },
164
+ barcodeQuery () {
165
+ return {
166
+ ownerId: this.task.asn.ownerId || null,
167
+ warehouseId: this.task.warehouseId || null,
168
+ }
169
+ },
170
+ canFinish () {
171
+ return !this.task.sku.needSn && this.task.qualityQty > 0 && this.task.sku.qualityType === '200'
172
+ }
154
173
  },
155
174
  created () {
156
175
  let taskId = this.$route.query.taskId
@@ -241,33 +260,30 @@ export default {
241
260
  })
242
261
  }
243
262
  },
244
- addSn () {
245
- if (!this.sn) {
246
- return
263
+ addSn (sn, res) {
264
+ if (!res.data.sn) {
265
+ this.sn.focus = true
266
+ return this.$lwShowErrorMsg('错误的商品条码序列号')
247
267
  }
248
- const param = { componentId: 'WMS_INBOUND_RECEIVE_SKU_SN', barcode: this.sn, ownerId: this.task.asn.ownerId }
249
- this.$lwApi.barcode.resolver(param).then(res => {
250
- if (!res.data.sn) {
251
- return this.$lwShowErrorMsg('错误的商品条码序列号')
252
- }
253
- const osn = this.sns.find(i => i.sn === res.data.sn)
254
- if (osn) {
255
- return this.$lwShowErrorMsg('重复的序列号')
256
- }
257
- if (res.data.sku && res.data.sku !== this.task.sku.code) {
258
- return this.$lwShowErrorMsg('序列号商品编码不符')
268
+ const osn = this.sns.find(i => i.sn === sn)
269
+ if (osn) {
270
+ this.sn.focus = true
271
+ return this.$lwShowErrorMsg('重复的序列号')
272
+ }
273
+ if (res.data.skuCode && res.data.skuCode !== this.task.sku.code) {
274
+ this.sn.focus = true
275
+ return this.$lwShowErrorMsg('序列号商品编码不符')
276
+ }
277
+ getAsnSkuSnDetail(this.task.asn.id, this.task.sku.id, res.data.sn).then(data => {
278
+ if (data && data.sn) {
279
+ this.sns.unshift({
280
+ sn: data.sn,
281
+ qty: data.qty || 1
282
+ })
283
+ this.sn.value = ''
284
+ } else {
285
+ return this.$lwShowErrorMsg('错误的序列号')
259
286
  }
260
- getAsnSkuSnDetail(this.task.asn.id, this.task.sku.id, res.data.sn).then(data => {
261
- if (data && data.sn) {
262
- this.sns.unshift({
263
- sn: data.sn,
264
- qty: data.qty || 1
265
- })
266
- this.sn = ''
267
- } else {
268
- return this.$lwShowErrorMsg('错误的序列号')
269
- }
270
- })
271
287
  })
272
288
  },
273
289
  resetLpn () {
@@ -282,6 +298,17 @@ export default {
282
298
  this.sns.splice(idx, 1)
283
299
  }
284
300
  },
301
+ resetSku () {
302
+ this.$router.back()
303
+ },
304
+ finishSku () {
305
+ finishSkuQuality(this.task.id).then(res => {
306
+ if (res.quality) {
307
+ this.task = res.quality
308
+ this.$lwToast.success('品检完成')
309
+ }
310
+ })
311
+ },
285
312
  showAbnormalPop () {
286
313
  const lotData = this.$refs.lot.getData()
287
314
  if (lotData.success) {
@@ -34,13 +34,13 @@
34
34
  <div class="lw-global-model-box">
35
35
  <div>
36
36
  <lw-input title="商品条码" required v-model="skuBarCode.value" :get-focus.sync="skuBarCode.focus"
37
+ rule-key="sku" rule-value-key="skuCode" :rule-serve-query="barcodeQuery"
37
38
  @confirm="resolveSkuBarcode"/>
38
39
  </div>
39
40
  </div>
40
41
  </div>
41
42
  <lw-bottom-bar>
42
43
  <lw-button plain @click="showSkuScan = false">关闭</lw-button>
43
- <lw-button @click="resolveSkuBarcode">确定</lw-button>
44
44
  </lw-bottom-bar>
45
45
  </van-dialog>
46
46
  </div>
@@ -73,6 +73,14 @@ export default {
73
73
  count: this.tasks.length,
74
74
  pendingQty: this.tasks.map(i => parseInt(i.canQualityQty)).reduce((a, b) => a + b, 0)
75
75
  }
76
+ },
77
+ barcodeQuery () {
78
+ const ownerIds = this.tasks.map(i => i.asn.ownerId)
79
+ const warehouseIds = this.tasks.map(i => i.asn.warehouseId)
80
+ return {
81
+ ownerId: ownerIds.length === 1 ? ownerIds[0] : null,
82
+ warehouseId: warehouseIds.length === 1 ? warehouseIds[0] : null,
83
+ }
76
84
  }
77
85
  },
78
86
  created () {
@@ -108,27 +116,16 @@ export default {
108
116
  this.skuBarCode.value = ''
109
117
  this.skuBarCode.focus = true
110
118
  },
111
- resolveSkuBarcode () {
112
- if (this.skuBarCode.value) {
113
- const ownerIds = this.tasks.map(i => i.asn.ownerId)
114
- const warehouseIds = this.tasks.map(i => i.asn.warehouseId)
115
- this.$lwApi.barcode.resolver({
116
- componentId: 'WMS_SKU',
117
- barcode: this.skuBarCode.value,
118
- ownerId: ownerIds.length === 1 ? ownerIds[0] : null,
119
- warehouseId: warehouseIds.length === 1 ? warehouseIds[0] : null,
120
- }).then(res => {
121
- if (res.data.sku) {
122
- const task = this.tasks.find(i => i.sku.code === res.data.sku)
123
- if (task) {
124
- this.toTask(task)
125
- } else {
126
- this.$lwShowErrorMsg(`商品 ${res.data.sku} 无匹配任务`)
127
- }
128
- } else {
129
- this.$lwShowErrorMsg('错误的商品条码')
130
- }
131
- })
119
+ resolveSkuBarcode (skuCode, res) {
120
+ if (res.data.skuCode) {
121
+ const task = this.tasks.find(i => i.sku.code === res.data.skuCode)
122
+ if (task) {
123
+ this.toTask(task)
124
+ } else {
125
+ this.$lwShowErrorMsg(`商品 ${res.data.sku} 无匹配任务`)
126
+ }
127
+ } else {
128
+ this.$lwShowErrorMsg('错误的商品条码')
132
129
  }
133
130
  },
134
131
  toTask (task) {
@@ -13,7 +13,9 @@
13
13
  </div>
14
14
  <div v-if="asnSku">
15
15
  <div class="lw-global-model-box" style="margin-top: 10px;">
16
- <lw-input title="商品收货条码" required v-model="tag" @confirm="addTag"/>
16
+ <lw-input title="商品收货条码" required v-model="tag"
17
+ rule-key="skuReceive" rule-value-key="skuCode" :rule-serve-query="barcodeQuery"
18
+ @confirm="addTag"/>
17
19
  </div>
18
20
  <div class="lw-global-model-box tag-list">
19
21
  <div class="tag-list-title">
@@ -74,8 +76,8 @@
74
76
  :sku-code="asnSku.sku.code"
75
77
  :sku-name="asnSku.sku.name"
76
78
  :qty="asn.pendingQty"
77
- type="品检"
78
- ab-type="品检异常"/>
79
+ type="收货"
80
+ ab-type="预收货"/>
79
81
  <template #button>
80
82
  <lw-button @click="submitAbnormal">上报异常</lw-button>
81
83
  </template>
@@ -125,6 +127,12 @@ export default {
125
127
  tagsQty () {
126
128
  return this.tags.map(i => parseInt(i.confirmQty)).reduce((a, b) => a + b, 0)
127
129
  },
130
+ barcodeQuery () {
131
+ return {
132
+ ownerId: this.asn.ownerId,
133
+ warehouseId: this.asn.warehouseId,
134
+ }
135
+ },
128
136
  },
129
137
  created () {
130
138
  const { asnNo, skuCode } = this.$route.query
@@ -155,36 +163,30 @@ export default {
155
163
  }
156
164
  })
157
165
  },
158
- addTag () {
159
- if (!this.tag) {
160
- return
166
+ addTag (sku, res) {
167
+ if (!res.data.skuCode) {
168
+ return this.$lwShowErrorMsg('错误的商品预收货条码')
161
169
  }
162
- const param = { componentId: 'WMS_INBOUND_RECEIVE_SKU', barcode: this.tag, ownerId: this.asn.ownerId }
163
- this.$lwApi.barcode.resolver(param).then(res => {
164
- if (!res.data.sku) {
165
- return this.$lwShowErrorMsg('错误的商品预收货条码')
166
- }
167
- if (res.data.sku !== this.asnSku.sku.code) {
168
- return this.$lwShowErrorMsg('错误的商品')
169
- }
170
- const qty = parseInt(res.data.qty) || 0
171
- const tag = res.data.tag || '#'
172
- const otag = this.tags.find(i => i.code === tag)
173
- if (otag) {
174
- if (otag.code !== '#') {
175
- return this.$lwShowErrorMsg('重复箱号')
176
- }
177
- otag.qty = otag.qty + qty
178
- otag.confirmQty = otag.confirmQty + qty
179
- } else {
180
- this.tags.unshift({
181
- code: tag,
182
- qty,
183
- confirmQty: qty,
184
- })
170
+ if (res.data.skuCode !== this.asnSku.sku.code) {
171
+ return this.$lwShowErrorMsg('错误的商品')
172
+ }
173
+ const qty = parseInt(res.data.qty) || 0
174
+ const tag = res.data.tag || '#'
175
+ const otag = this.tags.find(i => i.code === tag)
176
+ if (otag) {
177
+ if (otag.code !== '#') {
178
+ return this.$lwShowErrorMsg('重复箱号')
185
179
  }
186
- this.tag = ''
187
- })
180
+ otag.qty = otag.qty + qty
181
+ otag.confirmQty = otag.confirmQty + qty
182
+ } else {
183
+ this.tags.unshift({
184
+ code: tag,
185
+ qty,
186
+ confirmQty: qty,
187
+ })
188
+ }
189
+ this.tag = ''
188
190
  },
189
191
  async submit () {
190
192
  this.submitQty = this.asnSku.sku.needSn ? this.snsQty : this.tagsQty
@@ -13,7 +13,8 @@
13
13
  </div>
14
14
  <div v-if="asnSku && asnSku.sku.needSn">
15
15
  <div class="lw-global-model-box" style="margin-top: 10px;">
16
- <lw-input title="序列号条码" required v-model="sn" @confirm="addSn"/>
16
+ <lw-input title="序列号条码" required v-model="sn.value" :get-focus.sync="sn.focus"
17
+ rule-key="sn" rule-value-key="sn" :rule-serve-query="barcodeQuery" @confirm="addSn"/>
17
18
  </div>
18
19
  <div class="lw-global-model-box tag-list">
19
20
  <div class="tag-list-title">
@@ -42,7 +43,9 @@
42
43
  </div>
43
44
  <div v-else>
44
45
  <div class="lw-global-model-box" style="margin-top: 10px;">
45
- <lw-input title="商品收货条码" required v-model="tag" @confirm="addTag"/>
46
+ <lw-input title="商品收货条码" required v-model="tag"
47
+ rule-key="skuReceive" rule-value-key="skuCode" :rule-serve-query="barcodeQuery"
48
+ @confirm="addTag"/>
46
49
  </div>
47
50
  <div class="lw-global-model-box tag-list">
48
51
  <div class="tag-list-title">
@@ -110,8 +113,8 @@
110
113
  :sku-code="asnSku.sku.code"
111
114
  :sku-name="asnSku.sku.name"
112
115
  :qty="asn.pendingQty"
113
- type="品检"
114
- ab-type="品检异常"/>
116
+ type="收货"
117
+ ab-type="商品收货"/>
115
118
  <template #button>
116
119
  <lw-button @click="submitAbnormal">上报异常</lw-button>
117
120
  </template>
@@ -144,7 +147,10 @@ export default {
144
147
  qty: 0,
145
148
  confirmQty: 0,
146
149
  }],
147
- sn: '',
150
+ sn: {
151
+ value: '',
152
+ focus: false,
153
+ },
148
154
  sns: [],
149
155
  showSns: false,
150
156
  receiveLoc: {
@@ -169,6 +175,12 @@ export default {
169
175
  snsQty () {
170
176
  return this.sns.map(i => parseInt(i.qty)).reduce((a, b) => a + b, 0)
171
177
  },
178
+ barcodeQuery () {
179
+ return {
180
+ ownerId: this.asn.ownerId,
181
+ warehouseId: this.asn.warehouseId,
182
+ }
183
+ },
172
184
  },
173
185
  created () {
174
186
  const { asnNo, skuCode } = this.$route.query
@@ -199,61 +211,55 @@ export default {
199
211
  }
200
212
  })
201
213
  },
202
- addTag () {
203
- if (!this.tag) {
204
- return
214
+ addTag (sku, res) {
215
+ if (!res.data.skuCode) {
216
+ return this.$lwShowErrorMsg('错误的商品预收货条码')
205
217
  }
206
- const param = { componentId: 'WMS_INBOUND_RECEIVE_SKU', barcode: this.tag, ownerId: this.asn.ownerId }
207
- this.$lwApi.barcode.resolver(param).then(res => {
208
- if (!res.data.sku) {
209
- return this.$lwShowErrorMsg('错误的商品收货条码')
210
- }
211
- if (res.data.sku !== this.asnSku.sku.code) {
212
- return this.$lwShowErrorMsg('错误的商品')
213
- }
214
- const qty = parseInt(res.data.qty) || 0
215
- const tag = res.data.tag || '#'
216
- const otag = this.tags.find(i => i.code === tag)
217
- if (otag) {
218
- if (otag.code !== '#') {
219
- return this.$lwShowErrorMsg('重复箱号')
220
- }
221
- otag.qty = otag.qty + qty
222
- otag.confirmQty = otag.confirmQty + qty
223
- } else {
224
- this.tags.unshift({
225
- code: tag,
226
- qty,
227
- confirmQty: qty,
228
- })
218
+ if (res.data.skuCode !== this.asnSku.sku.code) {
219
+ return this.$lwShowErrorMsg('错误的商品')
220
+ }
221
+ const qty = parseInt(res.data.qty) || 0
222
+ const tag = res.data.tag || '#'
223
+ const otag = this.tags.find(i => i.code === tag)
224
+ if (otag) {
225
+ if (otag.code !== '#') {
226
+ return this.$lwShowErrorMsg('重复箱号')
229
227
  }
230
- this.tag = ''
231
- })
228
+ otag.qty = otag.qty + qty
229
+ otag.confirmQty = otag.confirmQty + qty
230
+ } else {
231
+ this.tags.unshift({
232
+ code: tag,
233
+ qty,
234
+ confirmQty: qty,
235
+ })
236
+ }
237
+ this.tag = ''
232
238
  },
233
- addSn () {
234
- if (!this.sn) {
235
- return
239
+ addSn (sn, res) {
240
+ if (!res.data.sn) {
241
+ this.sn.focus = true
242
+ return this.$lwShowErrorMsg('错误的商品条码序列号')
236
243
  }
237
- const param = { componentId: 'WMS_INBOUND_RECEIVE_SKU_SN', barcode: this.sn, ownerId: this.asn.ownerId }
238
- this.$lwApi.barcode.resolver(param).then(res => {
239
- if (!res.data.sn) {
240
- return this.$lwShowErrorMsg('错误的商品条码序列号')
241
- }
242
- const osn = this.sns.find(i => i.sn === res.data.sn)
243
- if (osn) {
244
- return this.$lwShowErrorMsg('重复的序列号')
244
+ const osn = this.sns.find(i => i.sn === res.data.sn)
245
+ if (osn) {
246
+ this.sn.focus = true
247
+ return this.$lwShowErrorMsg('重复的序列号')
248
+ }
249
+ if (res.data.skuCode && res.data.skuCode !== this.asnSku.sku.code) {
250
+ this.sn.focus = true
251
+ return this.$lwShowErrorMsg('序列号商品编码不符')
252
+ }
253
+ getAsnSkuSnDetail(this.asn.id, this.asnSku.sku.id, res.data.sn).then(data => {
254
+ if (data && data.sn) {
255
+ this.sns.unshift({
256
+ sn: data.sn,
257
+ qty: data.qty || 1
258
+ })
259
+ this.sn.value = ''
260
+ } else {
261
+ return this.$lwShowErrorMsg('错误的序列号')
245
262
  }
246
- getAsnSkuSnDetail(this.asn.id, this.asnSku.sku.id, res.data.sn).then(data => {
247
- if (data && data.sn) {
248
- this.sns.unshift({
249
- sn: data.sn,
250
- qty: data.qty || 1
251
- })
252
- this.sn = ''
253
- } else {
254
- return this.$lwShowErrorMsg('错误的序列号')
255
- }
256
- })
257
263
  })
258
264
  },
259
265
  removeSn (sn) {
@@ -303,7 +309,7 @@ export default {
303
309
  },
304
310
  afterSubmit (res) {
305
311
  this.asn = res.asn
306
- this.sn = ''
312
+ this.sn.value = ''
307
313
  this.tag = ''
308
314
  this.sns = []
309
315
  this.tags = []
@@ -36,10 +36,7 @@ import lwMaterialApplyCreatePage from "./materialApply/generate";
36
36
  // 包材领用 - 执行领用单
37
37
  import lwMaterialApplyActionPage from "./materialApply/action";
38
38
 
39
- // 新品配置
40
- import lwNewProjectIndexPage from "./newProject/index";
41
- // 新品配置
42
- import lwNewProjectActionPage from "./newProject/action";
39
+
43
40
 
44
41
 
45
42
 
@@ -61,6 +58,5 @@ export const inner = [
61
58
 
62
59
  lwMaterialApplyCreatePage,
63
60
  lwMaterialApplyActionPage,
64
- lwNewProjectIndexPage,
65
- lwNewProjectActionPage,
61
+
66
62
  ]
@@ -177,6 +177,14 @@ export default {
177
177
  wmsGetSkuInfoByCode({
178
178
  skuCode: this.sku.value
179
179
  }).then(res=>{
180
+
181
+ if (res.length === 1){
182
+ setTimeout(()=>{
183
+ this.selectOwnerConfirm(res[0])
184
+ },10)
185
+ return
186
+ }
187
+
180
188
  this.selectOwner.list = res
181
189
  this.selectOwner.show = true
182
190
  })
@@ -107,6 +107,7 @@
107
107
  :sku-list="checkData.containerData.packSkuList"
108
108
  :show-abn-btn="!fromAllCheck"
109
109
  :show-all-check="!fromAllCheck && allowAllCheck"
110
+ :abn-confirm="abnConfirm"
110
111
  />
111
112
 
112
113
  </div>
@@ -507,7 +508,7 @@ import {
507
508
  projectWmsMixPackContainerWholeBlock,
508
509
  projectWmsMixPackDeleteSku,
509
510
  projectWmsMixPackDeleteSkuWithSn,
510
- projectWmsMixPackRePack,
511
+ projectWmsMixPackRePack, projectWmsMixPackSubmitAbnormal,
511
512
  projectWmsMixPackSubmitSku,
512
513
  projectWmsMixPackSubmitWithSn,
513
514
  projectWmsOutbondQueryPackMaterial
@@ -1293,6 +1294,14 @@ export default {
1293
1294
  )
1294
1295
  this.overBaleOpen()
1295
1296
  }
1297
+ },
1298
+
1299
+ // 异常确认
1300
+ abnConfirm(data){
1301
+ return projectWmsMixPackSubmitAbnormal({
1302
+ pickContainer: this.checkData.containerData.pickContainer,
1303
+ ...data
1304
+ })
1296
1305
  }
1297
1306
  }
1298
1307
  }
@@ -131,6 +131,7 @@
131
131
  <lw-popup
132
132
  :title="$lwLanguage.get('','异常上报')"
133
133
  v-model="abnPopup.show"
134
+ @closed="abnPopup.comShow = false"
134
135
  >
135
136
 
136
137
  <lw-inner-abnormal-module
@@ -145,7 +146,7 @@
145
146
  />
146
147
 
147
148
  <template #button>
148
- <lw-button @click="abnConfirm">
149
+ <lw-button @click="abnConfirmBtn">
149
150
  {{ $lwLanguage.get('','上报') }}
150
151
  </lw-button>
151
152
  </template>
@@ -185,7 +186,10 @@ export default {
185
186
  },
186
187
 
187
188
  // 是否显示异常按钮
188
- showAbnBtn: Boolean
189
+ showAbnBtn: Boolean,
190
+
191
+ // 异常提交
192
+ abnConfirm: Function
189
193
  },
190
194
  data() {
191
195
  return {
@@ -213,13 +217,17 @@ export default {
213
217
  this.abnPopup.show = true
214
218
  },
215
219
  // 异常确认
216
- abnConfirm(){
220
+ abnConfirmBtn(){
217
221
  const {success, data} = this.$refs.abnormal.getAbnormalData()
218
222
 
219
223
  if (!success) return
220
224
 
221
- this.$emit('abnConfirm', {...data,...this.abnPopup.data})
222
- }
225
+ this.abnConfirm({...data,...this.abnPopup.data}).then(()=>{
226
+
227
+ this.abnPopup.show = false
228
+ this.$emit('abnSuccess')
229
+ })
230
+ },
223
231
  }
224
232
  }
225
233
  </script>
@@ -20,7 +20,7 @@
20
20
 
21
21
  <!-- 单号 -->
22
22
  <div class="lw-global-flex-between lw-global-row-start">
23
- <div>
23
+ <div v-if="type === 'so'">
24
24
  <span class="lw-global-title">
25
25
  {{ $lwLanguage.get('wms_project.pda.outbound.delivery.soAndLpn.orderNo','单号') }}
26
26
  </span>
@@ -29,6 +29,15 @@
29
29
  </span>
30
30
  </div>
31
31
 
32
+ <div v-if="type === 'lpn'">
33
+ <span class="lw-global-title">
34
+ {{ $lwLanguage.get('wms_project.pda.outbound.delivery.action.lpn','托盘号') }}
35
+ </span>
36
+ <span class="lw-global-value-bold">
37
+ {{ item.palletNo }}
38
+ </span>
39
+ </div>
40
+
32
41
  <slot>
33
42
  <lw-button
34
43
  style="flex-shrink: 0"
@@ -422,7 +422,7 @@ export default {
422
422
  // 商品
423
423
  sku:{
424
424
  value:'',
425
- focus: false
425
+ focus: true
426
426
  },
427
427
  // 数量
428
428
  num:{
@@ -623,6 +623,7 @@ export default {
623
623
  this.$lwToast.success(
624
624
  this.$lwLanguage.get('wms_project.pda.receive.skuAction.jump','已跳转至任务行:') + (index + 1)
625
625
  )
626
+ this.input.sku.focus = true
626
627
  this.scrollTop()
627
628
  },
628
629
 
@@ -383,6 +383,9 @@ export default {
383
383
  confirm(){
384
384
  let obj={},val = this.val
385
385
 
386
+ // 如果配置了解析规则,但是输入内容为空就不触发任何事件
387
+ if (this.ruleKey && !val) return
388
+
386
389
  if (this.ruleKey){
387
390
 
388
391
  const prefix = this.rulePrefix || this.$route.path
@@ -399,22 +402,27 @@ export default {
399
402
  return
400
403
  }
401
404
 
405
+ // 回填数据
402
406
  if (this.ruleValueKey){
403
- val = obj.data[this.ruleValueKey] || '-'
407
+ val = obj.data[this.ruleValueKey]
404
408
  }
405
409
  }
406
410
 
407
-
411
+ // 是否需要清空输入框
408
412
  if (this.autoClearVal){
409
413
  this.clearClick()
410
414
  }else {
411
415
  this.val = val
412
416
  }
413
417
 
418
+ // 输入框是否需要失去焦点
414
419
  if (this.inputOverBlur){
415
420
  this.inputBlur()
416
421
  }
422
+
423
+ // 触发震动
417
424
  this.$lwAppPower.shortVibrate(500)
425
+
418
426
  this.$emit('confirm', val, obj)
419
427
  },
420
428
 
@@ -0,0 +1,27 @@
1
+ /*
2
+ * 登录成功后和初始化页面有token时拉取的数据
3
+ * @author: 张文
4
+ * @date 2022-07-06
5
+ * */
6
+
7
+ export const loginAndInit = {
8
+ methods: {
9
+ getSystemInitData(){
10
+ let list = [
11
+ // 获取字典数据
12
+ this.$lwDict.asyncGet(),
13
+ // 获取权限数据
14
+ this.$lwPermissions.asyncGet()
15
+ ]
16
+
17
+ if (Object.keys(this.$lwWarehouse.get()).length){
18
+ // 获取当前配置了的打印机
19
+ list.push(this.$lwPrint.asyncGet())
20
+ // 获取条码解析规则
21
+ list.push(this.$lwBarcodeResolve.asyncInitRule())
22
+ }
23
+
24
+ return Promise.all(list)
25
+ }
26
+ }
27
+ }
File without changes
@@ -393,12 +393,12 @@ export default [
393
393
  {
394
394
  path: "/inbound/newProject/lwIndex",
395
395
  name: "LwNewProjectIndex",
396
- component: () => import('./../views/inner/newProject/index')
396
+ component: () => import('../views/inbound/newProject/index')
397
397
  },
398
398
  {
399
399
  path: "/inbound/newProject/lwAction",
400
400
  name: "LwNewProjectAction",
401
- component: () => import('./../views/inner/newProject/action')
401
+ component: () => import('../views/inbound/newProject/action')
402
402
  },
403
403
 
404
404
 
@@ -72,7 +72,7 @@ const menuList = {
72
72
  title: '品检',
73
73
  tip: 0,
74
74
  hidden: false,
75
- // permissions: ['/wms/pda/inbound/quality/task/list'],
75
+ permissions: ['/wms/pda/inbound/quality/task/list'],
76
76
  path: '/inbound/quality/task',
77
77
  },
78
78
 
@@ -33,8 +33,11 @@
33
33
 
34
34
  <script>
35
35
 
36
+ import {loginAndInit} from "../../../mixins/loginAndInit";
37
+
36
38
  export default {
37
39
  name: "init",
40
+ mixins:[loginAndInit],
38
41
  data() {
39
42
  return {
40
43
  // 显示加载框
@@ -72,16 +75,7 @@ export default {
72
75
  await this.$lwUUID.bound()
73
76
 
74
77
 
75
- await Promise.all([
76
- // 获取字典数据
77
- this.$lwDict.asyncGet(),
78
- // 获取权限数据
79
- this.$lwPermissions.asyncGet(),
80
- // 获取当前配置了的打印机
81
- this.$lwPrint.asyncGet(),
82
- // 获取条码解析规则
83
- this.$lwBarcodeResolve.asyncInitRule()
84
- ])
78
+ await this.getSystemInitData()
85
79
 
86
80
  if (self === top){
87
81
  history.go(-1)
@@ -101,7 +95,17 @@ export default {
101
95
  this.errorMsg = this.$lwLanguage.get('wms_project.pda.views.init.infoError', '基础数据加载失败')
102
96
  this.showLoading = false
103
97
  }, 1000)
98
+
104
99
  console.warn('初始化页面异常:', e)
100
+
101
+ const api = ['wmsGetAllChoices','wmsGetUserPermissions']
102
+ const url = e.config.url.split('/')
103
+
104
+ if (api.includes(url.pop())){
105
+ this.$router.replace({
106
+ path: '/lwLogin'
107
+ })
108
+ }
105
109
  }
106
110
  },
107
111