Commit 522ea14579df9bfb36a222913b58fc968ead308c

Authored by 肖超群
2 parents 1df31863 cd35d7ec

Merge branch 'develop' of http://www.huahengrobot.com:90/wms/wms4 into develop

Showing 147 changed files with 3301 additions and 1649 deletions
ant-design-vue-jeecg/.env.production
1 1 NODE_ENV=production
2 2 VUE_APP_ENV=production
3 3 outputDir=dist
4   -VUE_APP_API_BASE_URL=http://172.16.29.77:8081/wms
  4 +VUE_APP_API_BASE_URL=http://127.0.0.1:8080/wms
5 5 VUE_APP_CAS_BASE_URL=http://localhost:8443/cas
6 6 VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview
7 7 \ No newline at end of file
... ...
ant-design-vue-jeecg/pom.xml
... ... @@ -68,7 +68,7 @@
68 68 <goal>npm</goal>
69 69 </goals>
70 70 <configuration>
71   - <arguments>run build_development</arguments>
  71 + <arguments>run build</arguments>
72 72 </configuration>
73 73 </execution>
74 74 </executions>
... ...
ant-design-vue-jeecg/src/components/jeecg/modal/JPopupOnlReport.vue
... ... @@ -8,22 +8,28 @@
8 8 wrapClassName="j-popup-modal"
9 9 @ok="handleSubmit"
10 10 @cancel="handleCancel"
11   - cancelText="关闭">
12   -
  11 + cancelText="关闭"
  12 + >
13 13 <div class="table-page-search-wrapper">
14 14 <a-form layout="inline" @keyup.enter.native="searchByquery">
15 15 <a-row :gutter="24" v-if="showSearchFlag">
16   - <template v-for="(item,index) in queryInfo">
17   - <template v-if=" item.hidden==='1' ">
18   - <a-col :md="8" :sm="24" :key=" 'query'+index " v-show="toggleSearchStatus">
19   - <online-query-form-item :queryParam="queryParam" :item="item"
20   - :dictOptions="dictOptions"></online-query-form-item>
  16 + <template v-for="(item, index) in queryInfo">
  17 + <template v-if="item.hidden === '1'">
  18 + <a-col :md="8" :sm="24" :key="'query' + index" v-show="toggleSearchStatus">
  19 + <online-query-form-item
  20 + :queryParam="queryParam"
  21 + :item="item"
  22 + :dictOptions="dictOptions"
  23 + ></online-query-form-item>
21 24 </a-col>
22 25 </template>
23 26 <template v-else>
24   - <a-col :md="8" :sm="24" :key=" 'query'+index ">
25   - <online-query-form-item :queryParam="queryParam" :item="item"
26   - :dictOptions="dictOptions"></online-query-form-item>
  27 + <a-col :md="8" :sm="24" :key="'query' + index">
  28 + <online-query-form-item
  29 + :queryParam="queryParam"
  30 + :item="item"
  31 + :dictOptions="dictOptions"
  32 + ></online-query-form-item>
27 33 </a-col>
28 34 </template>
29 35 </template>
... ... @@ -34,18 +40,17 @@
34 40 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
35 41 <a @click="handleToggleSearch" style="margin-left: 8px">
36 42 {{ toggleSearchStatus ? '收起' : '展开' }}
37   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  43 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
38 44 </a>
39 45 </span>
40 46 </a-col>
41   -
42 47 </a-row>
43 48 </a-form>
44 49 </div>
45 50  
46 51 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
47 52 <i class="anticon anticon-info-circle ant-alert-icon"></i>
48   - 已选择&nbsp;<a style="font-weight: 600">{{ table.selectedRowKeys.length }}</a>项&nbsp;&nbsp;
  53 + 已选择 <a style="font-weight: 600">{{ table.selectedRowKeys.length }}</a> 项
49 54 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
50 55  
51 56 <a v-if="!showSearchFlag" style="margin-left: 24px" @click="onlyReload">刷新</a>
... ... @@ -60,25 +65,29 @@
60 65 :dataSource="table.dataSource"
61 66 :pagination="table.pagination"
62 67 :loading="table.loading"
63   - :rowSelection="{type:rowSelectionType,fixed:true,selectedRowKeys: table.selectedRowKeys, onChange: handleChangeInTableSelect}"
  68 + :rowSelection="{
  69 + type: rowSelectionType,
  70 + fixed: true,
  71 + selectedRowKeys: table.selectedRowKeys,
  72 + onChange: handleChangeInTableSelect
  73 + }"
64 74 @change="handleChangeInTable"
65 75 style="min-height: 300px"
66 76 :scroll="tableScroll"
67   - :customRow="clickThenCheck">
  77 + :customRow="clickThenCheck"
  78 + >
68 79 </a-table>
69   -
70   -
71 80 </j-modal>
72 81 </template>
73 82  
74 83 <script>
75   -import {getAction} from '@/api/manage'
76   -import {filterObj} from '@/utils/util'
77   -import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
78   -import {httpGroupRequest} from '@/api/GroupRequest.js'
  84 +import { getAction } from '@/api/manage'
  85 +import { filterObj } from '@/utils/util'
  86 +import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
  87 +import { httpGroupRequest } from '@/api/GroupRequest.js'
79 88 import md5 from 'md5'
80 89  
81   -const MODAL_WIDTH = 1200;
  90 +const MODAL_WIDTH = 1200
82 91 export default {
83 92 name: 'JPopupOnlReport',
84 93 props: ['multi', 'code', 'sorter', 'groupId', 'param'],
... ... @@ -86,7 +95,7 @@ export default {
86 95 data() {
87 96 return {
88 97 visible: false,
89   - title: "",
  98 + title: '',
90 99 confirmLoading: false,
91 100 queryInfo: [],
92 101 toggleSearchStatus: false,
... ... @@ -119,12 +128,12 @@ export default {
119 128 total: 0
120 129 }
121 130 },
122   - cgRpConfigId: "",
  131 + cgRpConfigId: '',
123 132 modalWidth: MODAL_WIDTH,
124   - tableScroll: {x: true},
  133 + tableScroll: { x: true },
125 134 dynamicParam: {},
126 135 // 排序字段,默认无排序
127   - iSorter: null,
  136 + iSorter: null
128 137 }
129 138 },
130 139 mounted() {
... ... @@ -140,10 +149,10 @@ export default {
140 149 // update--begin--autor:liusq-----date:20210706------for:JPopup组件在modal中使用报错#2729------
141 150 if (this.visible) {
142 151 this.dynamicParamHandler()
143   - this.loadData();
  152 + this.loadData()
144 153 }
145 154 // update--begin--autor:liusq-----date:20210706------for:JPopup组件在modal中使用报错#2729------
146   - },
  155 + }
147 156 },
148 157 sorter: {
149 158 immediate: true,
... ... @@ -151,7 +160,7 @@ export default {
151 160 if (this.sorter) {
152 161 let arr = this.sorter.split('=')
153 162 if (arr.length === 2 && ['asc', 'desc'].includes(arr[1].toLowerCase())) {
154   - this.iSorter = {column: arr[0], order: arr[1].toLowerCase()}
  163 + this.iSorter = { column: arr[0], order: arr[1].toLowerCase() }
155 164 // 排序字段受控
156 165 this.table.columns.forEach(col => {
157 166 if (col.dataIndex === this.iSorter.column) {
... ... @@ -164,8 +173,8 @@ export default {
164 173 console.warn('【JPopup】sorter参数不合法')
165 174 }
166 175 }
167   - },
168   - },
  176 + }
  177 + }
169 178 },
170 179 computed: {
171 180 showSearchFlag() {
... ... @@ -174,7 +183,7 @@ export default {
174 183 // 行选择框类型,根据是否多选来控制显示为单选框还是多选框
175 184 rowSelectionType() {
176 185 return this.multi ? 'checkbox' : 'radio'
177   - },
  186 + }
178 187 },
179 188 methods: {
180 189 loadColumnsInfo() {
... ... @@ -186,15 +195,15 @@ export default {
186 195 }
187 196 httpGroupRequest(() => getAction(url), groupIdKey).then(res => {
188 197 if (res.success) {
189   - this.initDictOptionData(res.result.dictOptions);
  198 + this.initDictOptionData(res.result.dictOptions)
190 199 this.cgRpConfigId = res.result.cgRpConfigId
191 200 this.title = res.result.cgRpConfigName
192 201 let currColumns = res.result.columns
193 202 for (let a = 0; a < currColumns.length; a++) {
194 203 if (currColumns[a].customRender) {
195   - let dictCode = currColumns[a].customRender;
196   - currColumns[a].customRender = (text) => {
197   - return filterMultiDictText(this.dictOptions[dictCode], text + "");
  204 + let dictCode = currColumns[a].customRender
  205 + currColumns[a].customRender = text => {
  206 + return filterMultiDictText(this.dictOptions[dictCode], text + '')
198 207 }
199 208 }
200 209 // 排序字段受控
... ... @@ -207,8 +216,14 @@ export default {
207 216 } else {
208 217 this.$error({
209 218 title: '出错了',
210   - content: (<p>Popup初始化失败,请检查你的配置或稍后重试!<br/>错误信息如下:{res.message}</p>),
211   - onOk: () => this.close(),
  219 + content: (
  220 + <p>
  221 + Popup初始化失败,请检查你的配置或稍后重试!
  222 + <br />
  223 + 错误信息如下:{res.message}
  224 + </p>
  225 + ),
  226 + onOk: () => this.close()
212 227 })
213 228 }
214 229 })
... ... @@ -220,7 +235,7 @@ export default {
220 235 if (this.groupId) {
221 236 groupIdKey = this.groupId + url
222 237 }
223   - httpGroupRequest(() => getAction(url), groupIdKey).then((res) => {
  238 + httpGroupRequest(() => getAction(url), groupIdKey).then(res => {
224 239 // console.log("获取查询条件", res);
225 240 if (res.success) {
226 241 this.dynamicParamHandler(res.result)
... ... @@ -242,7 +257,7 @@ export default {
242 257 queryTemp[item.field] = ''
243 258 }
244 259 }
245   - this.queryParam = {...queryTemp}
  260 + this.queryParam = { ...queryTemp }
246 261 }
247 262 let dynamicTemp = {}
248 263 if (this.param) {
... ... @@ -258,13 +273,13 @@ export default {
258 273 dynamicTemp[key] = this.param[key]
259 274 })
260 275 }
261   - this.dynamicParam = {...dynamicTemp}
  276 + this.dynamicParam = { ...dynamicTemp }
262 277 },
263 278 loadData(arg) {
264 279 if (arg == 1) {
265 280 this.table.pagination.current = 1
266 281 }
267   - let params = this.getQueryParams();//查询条件
  282 + let params = this.getQueryParams() //查询条件
268 283 this.table.loading = true
269 284 let url = `${this.url.getData}${this.cgRpConfigId}`
270 285 //缓存key
... ... @@ -293,10 +308,10 @@ export default {
293 308 paramTarget['self_' + key] = this.dynamicParam[key]
294 309 })
295 310 }
296   - let param = Object.assign(paramTarget, this.queryParam, this.iSorter);
297   - param.pageNo = this.table.pagination.current;
298   - param.pageSize = this.table.pagination.pageSize;
299   - return filterObj(param);
  311 + let param = Object.assign(paramTarget, this.queryParam, this.iSorter)
  312 + param.pageNo = this.table.pagination.current
  313 + param.pageSize = this.table.pagination.pageSize
  314 + return filterObj(param)
300 315 },
301 316 handleChangeInTableSelect(selectedRowKeys, selectionRows) {
302 317 //update-begin-author:taoyan date:2020902 for:【issue】开源online的几个问题 LOWCOD-844
... ... @@ -307,7 +322,7 @@ export default {
307 322 } else {
308 323 //当两者长度不一的时候 需要判断
309 324 let keys = this.table.selectedRowKeys
310   - let rows = this.table.selectionRows;
  325 + let rows = this.table.selectionRows
311 326 //这个循环 添加新的记录
312 327 for (let i = 0; i < selectionRows.length; i++) {
313 328 let combineKey = this.combineRowKey(selectionRows[i])
... ... @@ -350,20 +365,20 @@ export default {
350 365 handleSubmit() {
351 366 if (!this.multi) {
352 367 if (this.table.selectionRows && this.table.selectionRows.length > 1) {
353   - this.$message.warning("请选择一条记录")
  368 + this.$message.warning('请选择一条记录')
354 369 return false
355 370 }
356 371 }
357 372 if (!this.table.selectionRows || this.table.selectionRows.length == 0) {
358   - this.$message.warning("请选择一条记录")
  373 + this.$message.warning('请选择一条记录')
359 374 return false
360 375 }
361   - this.$emit('ok', this.table.selectionRows);
  376 + this.$emit('ok', this.table.selectionRows)
362 377 this.close()
363 378 },
364 379 close() {
365   - this.$emit('close');
366   - this.visible = false;
  380 + this.$emit('close')
  381 + this.visible = false
367 382 this.onClearSelected()
368 383 },
369 384 show() {
... ... @@ -371,19 +386,19 @@ export default {
371 386 this.loadColumnsInfo()
372 387 },
373 388 handleToggleSearch() {
374   - this.toggleSearchStatus = !this.toggleSearchStatus;
  389 + this.toggleSearchStatus = !this.toggleSearchStatus
375 390 },
376 391 searchByquery() {
377   - this.loadData(1);
  392 + this.loadData(1)
378 393 },
379 394 onlyReload() {
380   - this.loadData();
  395 + this.loadData()
381 396 },
382 397 searchReset() {
383 398 Object.keys(this.queryParam).forEach(key => {
384   - this.queryParam[key] = ""
  399 + this.queryParam[key] = ''
385 400 })
386   - this.loadData(1);
  401 + this.loadData(1)
387 402 },
388 403 onClearSelected() {
389 404 this.table.selectedRowKeys = []
... ... @@ -415,7 +430,8 @@ export default {
415 430 click: () => {
416 431 let rowKey = this.combineRowKey(record)
417 432 if (!this.table.selectedRowKeys || this.table.selectedRowKeys.length == 0) {
418   - let arr1 = [], arr2 = []
  433 + let arr1 = [],
  434 + arr2 = []
419 435 arr1.push(record)
420 436 arr2.push(rowKey)
421 437 this.table.selectedRowKeys = arr2
... ... @@ -426,8 +442,8 @@ export default {
426 442 this.table.selectionRows.push(record)
427 443 } else {
428 444 let rowKey_index = this.table.selectedRowKeys.indexOf(rowKey)
429   - this.table.selectedRowKeys.splice(rowKey_index, 1);
430   - this.table.selectionRows.splice(rowKey_index, 1);
  445 + this.table.selectedRowKeys.splice(rowKey_index, 1)
  446 + this.table.selectionRows.splice(rowKey_index, 1)
431 447 }
432 448 }
433 449 // 判断是否允许多选,如果不允许多选,就只存储最后一个选中的行
... ... @@ -445,15 +461,13 @@ export default {
445 461 Object.keys(dictOptions).map(k => {
446 462 obj[k] = dictOptions[k].filter(item => {
447 463 return item != null
448   - });
449   - });
  464 + })
  465 + })
450 466 this.dictOptions = obj
451 467 }
452   -
453 468 }
454 469 }
455 470 </script>
456 471  
457 472 <style scoped>
458   -
459 473 </style>
460 474 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/components/tools/DepartSelect.vue
... ... @@ -136,14 +136,14 @@ export default {
136 136 })
137 137 },
138 138 show() {
139   - //如果组件传值username此处就不用loadDepartList了
140   - this.loadDepartList().then(() => {
141   - this.visible = true
142   - if (!this.departList || this.departList.length <= 0) {
143   - this.$message.warning("您尚未设置部门信息!")
144   - this.departClear()
145   - }
146   - })
  139 + // 如果组件传值username此处就不用loadDepartList了
  140 + // this.loadDepartList().then(() => {
  141 + // this.visible = true
  142 + // if (!this.departList || this.departList.length <= 0) {
  143 + // this.$message.warning("您尚未设置部门信息!")
  144 + // this.departClear()
  145 + // }
  146 + // })
147 147 },
148 148 departClear() {
149 149 this.departList = []
... ...
ant-design-vue-jeecg/src/components/tools/UserMenu.vue
... ... @@ -40,12 +40,12 @@
40 40 <span v-if="isDesktop()">欢迎您,{{ nickname() }}</span>
41 41 </span>
42 42 <a-menu slot="overlay" class="user-dropdown-menu-wrapper">
43   - <a-menu-item key="0">
  43 + <!-- <a-menu-item key="0">
44 44 <router-link :to="{ name: 'account-center' }">
45 45 <a-icon type="user"/>
46 46 <span>个人中心</span>
47 47 </router-link>
48   - </a-menu-item>
  48 + </a-menu-item> -->
49 49 <a-menu-item key="1">
50 50 <router-link :to="{ name: 'account-settings-base' }">
51 51 <a-icon type="setting"/>
... ... @@ -60,10 +60,10 @@
60 60 <a-icon type="setting"/>
61 61 <span>密码修改</span>
62 62 </a-menu-item>
63   - <a-menu-item key="5" @click="updateCurrentDepart">
  63 + <!-- <a-menu-item key="5" @click="updateCurrentDepart">
64 64 <a-icon type="cluster"/>
65 65 <span>切换部门</span>
66   - </a-menu-item>
  66 + </a-menu-item> -->
67 67 <a-menu-item key="6" @click="clearCache">
68 68 <a-icon type="sync"/>
69 69 <span>清理缓存</span>
... ...
ant-design-vue-jeecg/src/views/account/settings/BaseSetting.vue
... ... @@ -51,7 +51,7 @@
51 51 </a-form>
52 52  
53 53 </a-col>
54   - <a-col :md="24" :lg="8" :style="{ minHeight: '180px' }">
  54 + <!-- <a-col :md="24" :lg="8" :style="{ minHeight: '180px' }">
55 55 <div class="ant-upload-preview" @click="$refs.modal.edit(1)">
56 56 <a-icon type="cloud-upload-o" class="upload-icon"/>
57 57 <div class="mask">
... ... @@ -59,7 +59,7 @@
59 59 </div>
60 60 <img :src="option.img"/>
61 61 </div>
62   - </a-col>
  62 + </a-col> -->
63 63  
64 64 </a-row>
65 65  
... ...
ant-design-vue-jeecg/src/views/jeecg/JeecgOrderMainList.vue
... ... @@ -57,7 +57,7 @@
57 57 <div>
58 58 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
59 59 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
60   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  60 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
61 61 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
62 62 </div>
63 63  
... ...
ant-design-vue-jeecg/src/views/jeecg/TableExpandeSub.vue
... ... @@ -52,7 +52,7 @@
52 52 <div>
53 53 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
54 54 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
55   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  55 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
56 56 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
57 57 </div>
58 58  
... ...
ant-design-vue-jeecg/src/views/jeecg/tablist/JeecgOrderCustomerList.vue
... ... @@ -22,7 +22,7 @@
22 22 <div>
23 23 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
24 24 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
25   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  25 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
26 26 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
27 27 </div>
28 28  
... ...
ant-design-vue-jeecg/src/views/jeecg/tablist/JeecgOrderDMainList.vue
... ... @@ -53,7 +53,7 @@
53 53 <div>
54 54 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
55 55 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
56   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  56 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
57 57 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
58 58 </div>
59 59  
... ...
ant-design-vue-jeecg/src/views/jeecg/tablist/JeecgOrderTicketList.vue
... ... @@ -22,7 +22,7 @@
22 22 <div>
23 23 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
24 24 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
25   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  25 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
26 26 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
27 27 </div>
28 28  
... ...
ant-design-vue-jeecg/src/views/system/DataLogList.vue
... ... @@ -34,8 +34,8 @@
34 34 <div>
35 35 <!--已选择的清空 -->
36 36 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
37   - <i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a
38   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项&nbsp;&nbsp;
  37 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
  38 + style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
39 39 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
40 40 </div>
41 41 <a-table
... ... @@ -51,7 +51,7 @@
51 51 @change="handleTableChange"
52 52 >
53 53 <!-- 字符串超长截取省略号显示-->
54   - <span slot="dataContent" slot-scope="text, record">
  54 + <span slot="dataContent" slot-scope="text">
55 55 <j-ellipsis :value="text" :length="80"/>
56 56 </span>
57 57 </a-table>
... ...
ant-design-vue-jeecg/src/views/system/DepartList2.vue
... ... @@ -25,7 +25,7 @@
25 25 <div>
26 26 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
27 27 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
28   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  28 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
29 29 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
30 30 </div>
31 31 <a-table
... ...
ant-design-vue-jeecg/src/views/system/NewPermissionList.vue
... ... @@ -17,9 +17,9 @@
17 17 <div>
18 18  
19 19 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
20   - <i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
  20 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{
21 21 selectedRowKeys.length
22   - }}</a>项&nbsp;&nbsp;
  22 + }}</a>
23 23 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
24 24 </div>
25 25  
... ...
ant-design-vue-jeecg/src/views/system/PermissionList.vue
... ... @@ -18,9 +18,9 @@
18 18 <div>
19 19  
20 20 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
21   - <i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
  21 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{
22 22 selectedRowKeys.length
23   - }}</a>项&nbsp;&nbsp;
  23 + }}</a>
24 24 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
25 25 </div>
26 26  
... ...
ant-design-vue-jeecg/src/views/system/RoleList.vue
... ... @@ -56,8 +56,8 @@
56 56 <!-- table区域-begin -->
57 57 <div>
58 58 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
59   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择&nbsp;<a
60   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项&nbsp;&nbsp;
  59 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
  60 + style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
61 61 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
62 62 </div>
63 63  
... ...
ant-design-vue-jeecg/src/views/system/RoleUserList.vue
... ... @@ -31,23 +31,22 @@
31 31 </a-form>
32 32 </div>
33 33 <!-- 操作按钮区域 -->
34   - <div class="table-operator" style="margin: 5px 0 10px 2px">
  34 + <div class="table-operator">
35 35 <a-button @click="handleAdd" v-has="'role:add'" type="primary" icon="plus">新建角色</a-button>
36 36 <!--<a-button @click="handleEdit(model1)" type="primary" icon="plus">角色编辑</a-button>-->
37   - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader"
38   - :action="importExcelUrl" @change="handleImportExcel">
  37 + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
39 38 <a-button v-has="'role:import'" type="primary" icon="import">导入</a-button>
40 39 </a-upload>
41 40 <a-button v-has="'role:export'" type="primary" icon="download" @click="handleExportXls('角色管理')">导出</a-button>
42 41 </div>
43 42  
44   - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
45   - <i class="anticon anticon-info-circle ant-alert-icon">
46   - </i> 已选择 <a><b>{{ selectedRowKeys1.length }}</b></a>项
47   - <a style="margin-left: 24px" @click="onClearSelected1">清空</a>
48   - </div>
  43 + <div>
  44 + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
  45 + <i class="anticon anticon-info-circle ant-alert-icon">
  46 + </i> 已选择 <a><b>{{ selectedRowKeys1.length }}</b></a> 项
  47 + <a style="margin-left: 24px" @click="onClearSelected1">清空</a>
  48 + </div>
49 49  
50   - <div style="margin-top: 15px">
51 50 <a-table
52 51 style="height:500px"
53 52 ref="table"
... ... @@ -60,30 +59,26 @@
60 59 :loading="loading"
61 60 :rowSelection="{selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type:'radio'}"
62 61 @change="handleTableChange">
63   - <span slot="action" slot-scope="text, record">
64   - <a @click="handleOpen(record)">用户</a>
65   - <a-divider type="vertical"/>
66   -
67   -
68   - <a-dropdown>
69   - <a class="ant-dropdown-link">
70   - 更多 <a-icon type="down"/>
71   - </a>
72   - <a-menu slot="overlay">
73   - <a-menu-item>
74   - <a v-has="'role:authorize'" @click="handlePerssion(record.id)">授权</a>
75   - </a-menu-item>
76   - <a-menu-item>
77   - <a v-has="'role:edit'" @click="handleEdit(record)">编辑</a>
78   - </a-menu-item>
79   - <a-menu-item>
80   - <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete1(record.id)">
81   - <a v-has="'role:delete'">删除</a>
82   - </a-popconfirm>
83   - </a-menu-item>
84   - </a-menu>
85   - </a-dropdown>
86   - </span>
  62 + <span slot="action" slot-scope="text, record">
  63 + <a @click="handleOpen(record)">用户</a>
  64 + <a-divider type="vertical"/>
  65 + <a-dropdown>
  66 + <a class="ant-dropdown-link">更多<a-icon type="down"/></a>
  67 + <a-menu slot="overlay">
  68 + <a-menu-item>
  69 + <a v-has="'role:authorize'" @click="handlePerssion(record.id)">授权</a>
  70 + </a-menu-item>
  71 + <a-menu-item>
  72 + <a v-has="'role:edit'" @click="handleEdit(record)">编辑</a>
  73 + </a-menu-item>
  74 + <a-menu-item>
  75 + <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete1(record.id)">
  76 + <a v-has="'role:delete'">删除</a>
  77 + </a-popconfirm>
  78 + </a-menu-item>
  79 + </a-menu>
  80 + </a-dropdown>
  81 + </span>
87 82 </a-table>
88 83 </div>
89 84 <!-- 右侧的角色权限配置 -->
... ...
ant-design-vue-jeecg/src/views/system/SysAnnouncementList.vue
... ... @@ -52,7 +52,7 @@
52 52 <div>
53 53 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
54 54 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
55   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  55 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
56 56 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
57 57 </div>
58 58  
... ...
ant-design-vue-jeecg/src/views/system/SysCategoryList.vue
... ... @@ -26,7 +26,7 @@
26 26 <div>
27 27 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
28 28 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
29   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  29 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
30 30 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
31 31 </div>
32 32  
... ...
ant-design-vue-jeecg/src/views/system/SysPositionList.vue
... ... @@ -64,7 +64,7 @@
64 64 <div>
65 65 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
66 66 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
67   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  67 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
68 68 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
69 69 </div>
70 70  
... ...
ant-design-vue-jeecg/src/views/system/SysUserOnlineList.vue
... ... @@ -24,7 +24,7 @@
24 24 <div>
25 25 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
26 26 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
27   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  27 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
28 28 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
29 29 </div>
30 30  
... ...
ant-design-vue-jeecg/src/views/system/TenantList.vue
... ... @@ -29,7 +29,7 @@
29 29 <div>
30 30 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
31 31 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
32   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  32 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
33 33 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
34 34 </div>
35 35  
... ...
ant-design-vue-jeecg/src/views/system/UserList.vue
... ... @@ -61,7 +61,7 @@
61 61 </div>
62 62  
63 63 <!-- 操作按钮区域 -->
64   - <div class="table-operator" style="border-top: 5px">
  64 + <div class="table-operator">
65 65 <a-button v-has="'user:add'" @click="handleAdd" type="primary" icon="plus">添加用户</a-button>
66 66 <a-button v-has="'user:export'" type="primary" icon="download" @click="handleExportXls('用户信息')">导出</a-button>
67 67 <a-upload v-has="'user:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
... ... @@ -97,8 +97,8 @@
97 97 <!-- table区域-begin -->
98 98 <div>
99 99 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
100   - <i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a
101   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项&nbsp;&nbsp;
  100 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  101 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
102 102 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
103 103 </div>
104 104  
... ...
ant-design-vue-jeecg/src/views/system/compare/CompareWcsLocationTask.vue
... ... @@ -23,6 +23,25 @@
23 23 />
24 24 </a-form-item>
25 25 </a-col>
  26 + <a-col :xl="12" :lg="14" :md="16" :sm="24">
  27 + <a-form-item label="任务创建时间">
  28 + <j-date
  29 + :show-time="true"
  30 + date-format="YYYY-MM-DD HH:mm:ss"
  31 + placeholder="请选择开始时间"
  32 + class="query-group-cust"
  33 + v-model="queryParam.taskCreateTimeBegin"
  34 + ></j-date>
  35 + <span class="query-group-split-cust"></span>
  36 + <j-date
  37 + :show-time="true"
  38 + date-format="YYYY-MM-DD HH:mm:ss"
  39 + placeholder="请选择结束时间"
  40 + class="query-group-cust"
  41 + v-model="queryParam.taskCreateTimeEnd"
  42 + ></j-date>
  43 + </a-form-item>
  44 + </a-col>
26 45 <a-col :xl="6" :lg="7" :md="8" :sm="24">
27 46 <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
28 47 <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
... ... @@ -90,20 +109,40 @@ export default {
90 109 required: false
91 110 }
92 111 },
  112 +
93 113 watch: {
94 114 mainId: {
95 115 immediate: true,
96 116 handler(val) {
97   - if (!this.mainId) {
98   - this.clearList()
99   - } else {
100   - this.queryParam['locationCode'] = val
101   - this.loadData(1)
102   - }
  117 + var nowDate = new Date()
  118 + this.queryParam['taskCreateTimeBegin'] = new Date(nowDate.getTime() - 90 * 24 * 60 * 60 * 1000).format('yyyy-MM-dd hh:mm:ss')
  119 + this.queryParam['taskCreateTimeEnd'] = nowDate.format('yyyy-MM-dd hh:mm:ss')
  120 + this.queryParam['locationCode'] = val
  121 + this.loadData(1)
103 122 }
104 123 }
105 124 },
106 125 data() {
  126 + Date.prototype.format = function(fmt) {
  127 + var o = {
  128 + 'M+': this.getMonth() + 1, //月份
  129 + 'd+': this.getDate(), //日
  130 + 'h+': this.getHours(), //小时
  131 + 'm+': this.getMinutes(), //分
  132 + 's+': this.getSeconds(), //秒
  133 + 'q+': Math.floor((this.getMonth() + 3) / 3), //季度
  134 + S: this.getMilliseconds() //毫秒
  135 + }
  136 + if (/(y+)/.test(fmt)) {
  137 + fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
  138 + }
  139 + for (var k in o) {
  140 + if (new RegExp('(' + k + ')').test(fmt)) {
  141 + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
  142 + }
  143 + }
  144 + return fmt
  145 + }
107 146 return {
108 147 description: '库位任务信息比较页面',
109 148 disableMixinCreated: true,
... ... @@ -227,7 +266,6 @@ export default {
227 266 }
228 267 })
229 268 }
230   -
231 269 // 获取 wcs_task_status
232 270 if (getDictItemsFromCache('wcs_task_status')) {
233 271 this.wcsTaskStatusList = getDictItemsFromCache('wcs_task_status')
... ...
ant-design-vue-jeecg/src/views/system/config/AddressList.vue
... ... @@ -49,7 +49,7 @@
49 49 <div>
50 50 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
51 51 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
52   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  52 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
53 53 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
54 54 </div>
55 55  
... ...
ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue
... ... @@ -47,7 +47,7 @@
47 47 <!-- table区域-begin -->
48 48 <div>
49 49 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
50   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  50 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
51 51 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
52 52 </div>
53 53  
... ...
ant-design-vue-jeecg/src/views/system/config/BomDetailList.vue
... ... @@ -31,7 +31,7 @@
31 31 <div>
32 32 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
33 33 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
34   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  34 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
35 35 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
36 36 </div>
37 37  
... ...
ant-design-vue-jeecg/src/views/system/config/BomHeaderList.vue
... ... @@ -43,7 +43,7 @@
43 43 <div>
44 44 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
45 45 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
46   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  46 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
47 47 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
48 48 </div>
49 49  
... ...
ant-design-vue-jeecg/src/views/system/config/CarrierList.vue
... ... @@ -34,7 +34,7 @@
34 34 <div>
35 35 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
36 36 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
37   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  37 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
38 38 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
39 39 </div>
40 40  
... ...
ant-design-vue-jeecg/src/views/system/config/CompanyList.vue
... ... @@ -20,7 +20,7 @@
20 20 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
21 21 <a @click="handleToggleSearch" style="margin-left: 8px">
22 22 {{ toggleSearchStatus ? '收起' : '展开' }}
23   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  23 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
24 24 </a>
25 25 </span>
26 26 </a-col>
... ... @@ -33,19 +33,27 @@
33 33 <div class="table-operator">
34 34 <a-button @click="handleAdd" v-has="'company:add'" type="primary" icon="plus">新增</a-button>
35 35 <a-button v-has="'company:export'" type="primary" icon="download" @click="handleExportXls('货主')">导出</a-button>
36   - <a-upload v-has="'company:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
37   - @change="handleImportExcel">
  36 + <a-upload
  37 + v-has="'company:import'"
  38 + name="file"
  39 + :showUploadList="false"
  40 + :multiple="false"
  41 + :headers="tokenHeader"
  42 + :action="importExcelUrl"
  43 + @change="handleImportExcel"
  44 + >
38 45 <a-button type="primary" icon="import">导入</a-button>
39 46 </a-upload>
40 47 <a-dropdown v-if="selectedRowKeys.length > 0">
41 48 <a-menu slot="overlay" v-has="'company:deleteBatch'">
42 49 <a-menu-item key="1" @click="batchDel">
43   - <a-icon type="deleteBatch"/>
  50 + <a-icon type="deleteBatch" />
44 51 删除
45 52 </a-menu-item>
46 53 </a-menu>
47   - <a-button style="margin-left: 8px"> 批量操作
48   - <a-icon type="down"/>
  54 + <a-button style="margin-left: 8px">
  55 + 批量操作
  56 + <a-icon type="down" />
49 57 </a-button>
50 58 </a-dropdown>
51 59 </div>
... ... @@ -53,49 +61,47 @@
53 61 <!-- table区域-begin -->
54 62 <div>
55 63 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  64 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  65 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
58 66 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 67 </div>
60 68  
61 69 <a-table
62 70 ref="table"
63 71 size="middle"
64   - :scroll="{x:true}"
  72 + :scroll="{ x: true }"
65 73 bordered
66 74 rowKey="id"
67 75 :columns="columns"
68 76 :dataSource="dataSource"
69 77 :pagination="ipagination"
70 78 :loading="loading"
71   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  79 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
72 80 class="j-table-force-nowrap"
73   - @change="handleTableChange">
74   -
  81 + @change="handleTableChange"
  82 + >
75 83 <template slot="htmlSlot" slot-scope="text">
76 84 <div v-html="text"></div>
77 85 </template>
78 86 <template slot="imgSlot" slot-scope="text">
79 87 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
80   - <img v-else :src="getImgView(text)" height="25px" alt=""
81   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  88 + <img
  89 + v-else
  90 + :src="getImgView(text)"
  91 + height="25px"
  92 + alt=""
  93 + style="max-width:80px;font-size: 12px;font-style: italic;"
  94 + />
82 95 </template>
83 96 <template slot="fileSlot" slot-scope="text">
84 97 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
85   - <a-button
86   - v-else
87   - :ghost="true"
88   - type="primary"
89   - icon="download"
90   - size="small"
91   - @click="downloadFile(text)">
  98 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
92 99 下载
93 100 </a-button>
94 101 </template>
95 102  
96 103 <span slot="action" slot-scope="text, record">
97   - <a v-has="'company:edit'" @click="handleEdit(record)">编辑</a>
98   - <a-divider type="vertical"/>
  104 + <a v-has="'company:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical" /></a>
99 105 <a-dropdown>
100 106 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
101 107 <a-menu slot="overlay">
... ... @@ -110,7 +116,6 @@
110 116 </a-menu>
111 117 </a-dropdown>
112 118 </span>
113   -
114 119 </a-table>
115 120 </div>
116 121  
... ... @@ -119,10 +124,9 @@
119 124 </template>
120 125  
121 126 <script>
122   -
123 127 import '@/assets/less/TableExpand.less'
124   -import {mixinDevice} from '@/utils/mixin'
125   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  128 +import { mixinDevice } from '@/utils/mixin'
  129 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
126 130 import CompanyModal from './modules/CompanyModal'
127 131  
128 132 export default {
... ... @@ -141,105 +145,103 @@ export default {
141 145 dataIndex: '',
142 146 key: 'rowIndex',
143 147 width: 60,
144   - align: "center",
145   - customRender: function (t, r, index) {
146   - return parseInt(index) + 1;
  148 + align: 'center',
  149 + customRender: function(t, r, index) {
  150 + return parseInt(index) + 1
147 151 }
148 152 },
149 153 {
150 154 title: '货主编码',
151   - align: "center",
  155 + align: 'center',
152 156 dataIndex: 'code'
153 157 },
154 158 {
155 159 title: '货主名称',
156   - align: "center",
  160 + align: 'center',
157 161 dataIndex: 'name'
158 162 },
159 163 {
160 164 title: '地址',
161   - align: "center",
  165 + align: 'center',
162 166 dataIndex: 'address'
163 167 },
164 168 {
165 169 title: '区县',
166   - align: "center",
  170 + align: 'center',
167 171 dataIndex: 'district'
168 172 },
169 173 {
170 174 title: '城市',
171   - align: "center",
  175 + align: 'center',
172 176 dataIndex: 'city'
173 177 },
174 178 {
175 179 title: '省份',
176   - align: "center",
  180 + align: 'center',
177 181 dataIndex: 'province'
178 182 },
179 183 {
180 184 title: '国家',
181   - align: "center",
  185 + align: 'center',
182 186 dataIndex: 'country'
183 187 },
184 188 {
185 189 title: '邮编',
186   - align: "center",
  190 + align: 'center',
187 191 dataIndex: 'postalcode'
188 192 },
189 193 {
190 194 title: '联系人',
191   - align: "center",
  195 + align: 'center',
192 196 dataIndex: 'attentionto'
193 197 },
194 198 {
195 199 title: '联系电话',
196   - align: "center",
  200 + align: 'center',
197 201 dataIndex: 'phonenum'
198 202 },
199 203 {
200 204 title: '操作',
201 205 dataIndex: 'action',
202   - align: "center",
203   - fixed: "right",
  206 + align: 'center',
  207 + fixed: 'right',
204 208 width: 147,
205   - scopedSlots: {customRender: 'action'}
  209 + scopedSlots: { customRender: 'action' }
206 210 }
207 211 ],
208 212 url: {
209   - list: "/config/company/list",
210   - delete: "/config/company/delete",
211   - deleteBatch: "/config/company/deleteBatch",
212   - exportXlsUrl: "/config/company/exportXls",
213   - importExcelUrl: "config/company/importExcel",
214   -
  213 + list: '/config/company/list',
  214 + delete: '/config/company/delete',
  215 + deleteBatch: '/config/company/deleteBatch',
  216 + exportXlsUrl: '/config/company/exportXls',
  217 + importExcelUrl: 'config/company/importExcel'
215 218 },
216 219 dictOptions: {},
217   - superFieldList: [],
  220 + superFieldList: []
218 221 }
219 222 },
220 223 created() {
221   - this.getSuperFieldList();
  224 + this.getSuperFieldList()
222 225 },
223 226 computed: {
224   - importExcelUrl: function () {
225   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
226   - },
  227 + importExcelUrl: function() {
  228 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  229 + }
227 230 },
228 231 methods: {
229   - initDictConfig() {
230   - },
  232 + initDictConfig() {},
231 233 getSuperFieldList() {
232   - let fieldList = [];
233   - fieldList.push({type: 'string', value: 'code', text: '货主编码', dictCode: ''})
234   - fieldList.push({type: 'string', value: 'name', text: '货主名称', dictCode: ''})
235   - fieldList.push({type: 'string', value: 'address', text: '地址', dictCode: ''})
236   - fieldList.push({type: 'string', value: 'district', text: '区县', dictCode: ''})
237   - fieldList.push({type: 'string', value: 'city', text: '城市', dictCode: ''})
238   - fieldList.push({type: 'string', value: 'province', text: '省份', dictCode: ''})
239   - fieldList.push({type: 'string', value: 'country', text: '国家', dictCode: ''})
240   - fieldList.push({type: 'string', value: 'postalcode', text: '邮编', dictCode: ''})
241   - fieldList.push({type: 'string', value: 'attentionto', text: '联系人', dictCode: ''})
242   - fieldList.push({type: 'string', value: 'phonenum', text: '联系电话', dictCode: ''})
  234 + let fieldList = []
  235 + fieldList.push({ type: 'string', value: 'code', text: '货主编码', dictCode: '' })
  236 + fieldList.push({ type: 'string', value: 'name', text: '货主名称', dictCode: '' })
  237 + fieldList.push({ type: 'string', value: 'address', text: '地址', dictCode: '' })
  238 + fieldList.push({ type: 'string', value: 'district', text: '区县', dictCode: '' })
  239 + fieldList.push({ type: 'string', value: 'city', text: '城市', dictCode: '' })
  240 + fieldList.push({ type: 'string', value: 'province', text: '省份', dictCode: '' })
  241 + fieldList.push({ type: 'string', value: 'country', text: '国家', dictCode: '' })
  242 + fieldList.push({ type: 'string', value: 'postalcode', text: '邮编', dictCode: '' })
  243 + fieldList.push({ type: 'string', value: 'attentionto', text: '联系人', dictCode: '' })
  244 + fieldList.push({ type: 'string', value: 'phonenum', text: '联系电话', dictCode: '' })
243 245 this.superFieldList = fieldList
244 246 }
245 247 }
... ...
ant-design-vue-jeecg/src/views/system/config/ContainerCapacityList.vue
... ... @@ -6,7 +6,16 @@
6 6 <a-row :gutter="24">
7 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 8 <a-form-item label="容器类型">
9   - <a-input placeholder="请输入容器类型" v-model="queryParam.containerTypeCode"></a-input>
  9 + <a-select
  10 + show-search
  11 + placeholder="请选择容器类型"
  12 + option-filter-prop="children"
  13 + v-model="queryParam.containerTypeCode"
  14 + >
  15 + <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code">
  16 + {{ item.name }}
  17 + </a-select-option>
  18 + </a-select>
10 19 </a-form-item>
11 20 </a-col>
12 21 <a-col :xl="6" :lg="7" :md="8" :sm="24">
... ... @@ -14,21 +23,15 @@
14 23 <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input>
15 24 </a-form-item>
16 25 </a-col>
17   - <template v-if="toggleSearchStatus">
18   - <a-col :xl="6" :lg="7" :md="8" :sm="24">
19   - <a-form-item label="是否可用">
20   - <j-dict-select-tag placeholder="请选择是否可用" v-model="queryParam.enable" dictCode="enable_status"/>
21   - </a-form-item>
22   - </a-col>
23   - </template>
  26 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  27 + <a-form-item label="是否可用">
  28 + <j-dict-select-tag placeholder="请选择是否可用" v-model="queryParam.enable" dictCode="enable_status" />
  29 + </a-form-item>
  30 + </a-col>
24 31 <a-col :xl="6" :lg="7" :md="8" :sm="24">
25 32 <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
26 33 <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
27 34 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
28   - <a @click="handleToggleSearch" style="margin-left: 8px">
29   - {{ toggleSearchStatus ? '收起' : '展开' }}
30   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
31   - </a>
32 35 </span>
33 36 </a-col>
34 37 </a-row>
... ... @@ -39,20 +42,35 @@
39 42 <!-- 操作按钮区域 -->
40 43 <div class="table-operator">
41 44 <a-button @click="handleAdd" v-has="'containerCapacity:add'" type="primary" icon="plus">新增</a-button>
42   - <a-button v-has="'containerCapacity:export'" type="primary" icon="download" @click="handleExportXls('容器容量管理')">导出</a-button>
43   - <a-upload v-has="'containerCapacity:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
44   - @change="handleImportExcel">
  45 + <a-button
  46 + v-has="'containerCapacity:export'"
  47 + type="primary"
  48 + icon="download"
  49 + @click="handleExportXls('容器容量管理')"
  50 + >
  51 + 导出
  52 + </a-button>
  53 + <a-upload
  54 + v-has="'containerCapacity:import'"
  55 + name="file"
  56 + :showUploadList="false"
  57 + :multiple="false"
  58 + :headers="tokenHeader"
  59 + :action="importExcelUrl"
  60 + @change="handleImportExcel"
  61 + >
45 62 <a-button type="primary" icon="import">导入</a-button>
46 63 </a-upload>
47 64 <a-dropdown v-if="selectedRowKeys.length > 0">
48 65 <a-menu slot="overlay" v-has="'containerCapacity:deleteBatch'">
49 66 <a-menu-item key="1" @click="batchDel">
50   - <a-icon type="delete"/>
  67 + <a-icon type="delete" />
51 68 删除
52 69 </a-menu-item>
53 70 </a-menu>
54   - <a-button style="margin-left: 8px"> 批量操作
55   - <a-icon type="down"/>
  71 + <a-button style="margin-left: 8px">
  72 + 批量操作
  73 + <a-icon type="down" />
56 74 </a-button>
57 75 </a-dropdown>
58 76 </div>
... ... @@ -60,50 +78,52 @@
60 78 <!-- table区域-begin -->
61 79 <div>
62 80 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
63   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
64   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  81 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  82 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
65 83 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
66 84 </div>
67 85  
68 86 <a-table
69 87 ref="table"
70 88 size="middle"
71   - :scroll="{x:true}"
  89 + :scroll="{ x: true }"
72 90 bordered
73 91 rowKey="id"
74 92 :columns="columns"
75 93 :dataSource="dataSource"
76 94 :pagination="ipagination"
77 95 :loading="loading"
78   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  96 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
79 97 class="j-table-force-nowrap"
80   - @change="handleTableChange">
  98 + @change="handleTableChange"
  99 + >
  100 + <span slot="containerTypeCode" slot-scope="containerTypeCode">
  101 + <a-tag :key="containerTypeCode" color="pink">
  102 + {{ solutionContainerType(containerTypeCode) }}
  103 + </a-tag>
  104 + </span>
81 105  
82 106 <template slot="htmlSlot" slot-scope="text">
83 107 <div v-html="text"></div>
84 108 </template>
85 109 <template slot="imgSlot" slot-scope="text">
86 110 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
87   - <img v-else :src="getImgView(text)" height="25px" alt=""
88   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  111 + <img
  112 + v-else
  113 + :src="getImgView(text)"
  114 + height="25px"
  115 + alt=""
  116 + style="max-width:80px;font-size: 12px;font-style: italic;"
  117 + />
89 118 </template>
90 119 <template slot="fileSlot" slot-scope="text">
91 120 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
92   - <a-button
93   - v-else
94   - :ghost="true"
95   - type="primary"
96   - icon="download"
97   - size="small"
98   - @click="downloadFile(text)">
  121 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
99 122 下载
100 123 </a-button>
101 124 </template>
102   -
103 125 <span slot="action" slot-scope="text, record">
104   - <a v-has="'containerCapacity:edit'" @click="handleEdit(record)">编辑</a>
105   -
106   - <a-divider type="vertical"/>
  126 + <a v-has="'containerCapacity:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
107 127 <a-dropdown>
108 128 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
109 129 <a-menu slot="overlay">
... ... @@ -118,7 +138,6 @@
118 138 </a-menu>
119 139 </a-dropdown>
120 140 </span>
121   -
122 141 </a-table>
123 142 </div>
124 143  
... ... @@ -127,13 +146,12 @@
127 146 </template>
128 147  
129 148 <script>
130   -
131 149 import '@/assets/less/TableExpand.less'
132   -import {mixinDevice} from '@/utils/mixin'
133   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  150 +import { mixinDevice } from '@/utils/mixin'
  151 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
134 152 import ContainerCapacityModal from './modules/ContainerCapacityModal'
135   -import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
136   -import {getZoneList} from '@/api/api'
  153 +import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
  154 +import { getZoneList, getContainerTypeList } from '@/api/api'
137 155  
138 156 export default {
139 157 name: 'ContainerCapacityList',
... ... @@ -144,6 +162,7 @@ export default {
144 162 data() {
145 163 return {
146 164 description: '容器容量管理管理页面',
  165 + containerTypeList: [],
147 166 // 表头
148 167 columns: [
149 168 {
... ... @@ -151,112 +170,125 @@ export default {
151 170 dataIndex: '',
152 171 key: 'rowIndex',
153 172 width: 60,
154   - align: "center",
155   - customRender: function (t, r, index) {
156   - return parseInt(index) + 1;
  173 + align: 'center',
  174 + customRender: function(t, r, index) {
  175 + return parseInt(index) + 1
157 176 }
158 177 },
159 178 {
160 179 title: '容器类型',
161   - align: "center",
162   - dataIndex: 'containerTypeCode'
163   - },
164   - {
165   - title: '货主',
166   - align: "center",
167   - dataIndex: 'companyCode'
  180 + align: 'center',
  181 + dataIndex: 'containerTypeCode',
  182 + key: 'containerTypeCode',
  183 + scopedSlots: { customRender: 'containerTypeCode' }
168 184 },
169 185 {
170 186 title: '物料编码',
171   - align: "center",
  187 + align: 'center',
172 188 dataIndex: 'materialCode'
173 189 },
174 190 {
175 191 title: '物料名称',
176   - align: "center",
  192 + align: 'center',
177 193 dataIndex: 'materialName'
178 194 },
179 195 {
180 196 title: '物料单位',
181   - align: "center",
  197 + align: 'center',
182 198 dataIndex: 'materialUnit'
183 199 },
184 200 {
185 201 title: '存放数量',
186   - align: "center",
  202 + align: 'center',
187 203 dataIndex: 'qty'
188 204 },
189 205 {
190 206 title: '是否可用',
191   - align: "center",
  207 + align: 'center',
192 208 dataIndex: 'enable_dictText'
193 209 },
194 210 {
195 211 title: '创建人',
196   - align: "center",
  212 + align: 'center',
197 213 dataIndex: 'createBy'
198 214 },
199 215 {
200 216 title: '创建日期',
201   - align: "center",
  217 + align: 'center',
202 218 dataIndex: 'createTime'
203 219 },
204 220 {
205 221 title: '更新人',
206   - align: "center",
  222 + align: 'center',
207 223 dataIndex: 'updateBy'
208 224 },
209 225 {
210 226 title: '更新日期',
211   - align: "center",
  227 + align: 'center',
212 228 dataIndex: 'updateTime'
213 229 },
214 230 {
215 231 title: '操作',
216 232 dataIndex: 'action',
217   - align: "center",
218   - fixed: "right",
  233 + align: 'center',
  234 + fixed: 'right',
219 235 width: 147,
220   - scopedSlots: {customRender: 'action'}
  236 + scopedSlots: { customRender: 'action' }
221 237 }
222 238 ],
223 239 url: {
224   - list: "/config/containerCapacity/list",
225   - delete: "/config/containerCapacity/delete",
226   - deleteBatch: "/config/containerCapacity/deleteBatch",
227   - exportXlsUrl: "/config/containerCapacity/exportXls",
228   - importExcelUrl: "config/containerCapacity/importExcel",
229   -
  240 + list: '/config/containerCapacity/list',
  241 + delete: '/config/containerCapacity/delete',
  242 + deleteBatch: '/config/containerCapacity/deleteBatch',
  243 + exportXlsUrl: '/config/containerCapacity/exportXls',
  244 + importExcelUrl: 'config/containerCapacity/importExcel'
230 245 },
231 246 dictOptions: {},
232   - superFieldList: [],
  247 + superFieldList: []
233 248 }
234 249 },
235 250 created() {
236   - this.getSuperFieldList();
  251 + this.getSuperFieldList()
  252 + this.loadFrom()
237 253 },
238 254 computed: {
239   - importExcelUrl: function () {
240   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
241   - },
  255 + importExcelUrl: function() {
  256 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  257 + }
242 258 },
243 259 methods: {
244   - initDictConfig() {
  260 + initDictConfig() {},
  261 + solutionContainerType(value) {
  262 + var actions = []
  263 + Object.keys(this.containerTypeList).some(key => {
  264 + if (this.containerTypeList[key].code == '' + value) {
  265 + actions.push(this.containerTypeList[key].name)
  266 + return true
  267 + }
  268 + })
  269 + return actions.join('')
  270 + },
  271 + loadFrom() {
  272 + getContainerTypeList().then(res => {
  273 + if (res.success) {
  274 + this.containerTypeList = res.result
  275 + }
  276 + })
245 277 },
246 278 getSuperFieldList() {
247   - let fieldList = [];
248   - fieldList.push({type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: ''})
249   - fieldList.push({type: 'string', value: 'warehouseCode', text: '仓库编码', dictCode: ''})
250   - fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''})
251   - fieldList.push({type: 'string', value: 'materialCode', text: '物料编码', dictCode: ''})
252   - fieldList.push({type: 'string', value: 'materialName', text: '物料名称', dictCode: ''})
253   - fieldList.push({type: 'string', value: 'materialUnit', text: '物料单位', dictCode: ''})
254   - fieldList.push({type: 'BigDecimal', value: 'qty', text: '存放数量', dictCode: ''})
255   - fieldList.push({type: 'int', value: 'enable', text: '是否可用', dictCode: 'enable_status'})
256   - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
257   - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
258   - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
259   - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  279 + let fieldList = []
  280 + fieldList.push({ type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: '' })
  281 + fieldList.push({ type: 'string', value: 'warehouseCode', text: '仓库编码', dictCode: '' })
  282 + fieldList.push({ type: 'string', value: 'companyCode', text: '货主', dictCode: '' })
  283 + fieldList.push({ type: 'string', value: 'materialCode', text: '物料编码', dictCode: '' })
  284 + fieldList.push({ type: 'string', value: 'materialName', text: '物料名称', dictCode: '' })
  285 + fieldList.push({ type: 'string', value: 'materialUnit', text: '物料单位', dictCode: '' })
  286 + fieldList.push({ type: 'BigDecimal', value: 'qty', text: '存放数量', dictCode: '' })
  287 + fieldList.push({ type: 'int', value: 'enable', text: '是否可用', dictCode: 'enable_status' })
  288 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  289 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  290 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  291 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
260 292 this.superFieldList = fieldList
261 293 }
262 294 }
... ...
ant-design-vue-jeecg/src/views/system/config/ContainerList.vue
... ... @@ -21,18 +21,30 @@
21 21 show-search
22 22 placeholder="请选择容器类型"
23 23 option-filter-prop="children"
24   -
25   - v-model="queryParam.containerTypeCode">
26   - <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code">{{
27   - item.name
28   - }}
  24 + v-model="queryParam.containerTypeCode"
  25 + >
  26 + <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code"
  27 + >{{ item.name }}
29 28 </a-select-option>
30 29 </a-select>
31 30 </a-form-item>
32 31 </a-col>
33 32 <a-col :xl="6" :lg="7" :md="8" :sm="24">
34 33 <a-form-item label="容器状态">
35   - <j-dict-select-tag placeholder="请选择容器状态" v-model="queryParam.status" dictCode="container_status"/>
  34 + <j-dict-select-tag
  35 + placeholder="请选择容器状态"
  36 + v-model="queryParam.status"
  37 + dictCode="container_status"
  38 + />
  39 + </a-form-item>
  40 + </a-col>
  41 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  42 + <a-form-item label="容器填充状态">
  43 + <j-dict-select-tag
  44 + placeholder="请选择容器填充状态"
  45 + v-model="queryParam.fillStatus"
  46 + dictCode="fill_status"
  47 + />
36 48 </a-form-item>
37 49 </a-col>
38 50 </template>
... ... @@ -42,7 +54,7 @@
42 54 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
43 55 <a @click="handleToggleSearch" style="margin-left: 8px">
44 56 {{ toggleSearchStatus ? '收起' : '展开' }}
45   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  57 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
46 58 </a>
47 59 </span>
48 60 </a-col>
... ... @@ -54,21 +66,30 @@
54 66 <!-- 操作按钮区域 -->
55 67 <div class="table-operator">
56 68 <a-button @click="handleAdd" v-has="'container:add'" type="primary" icon="plus">新增</a-button>
57   - <a-button v-has="'container:export'" type="primary" icon="download" @click="handleExportXls('容器管理')">导出</a-button>
58   - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
59   - @change="handleImportExcel">
  69 + <a-button v-has="'container:export'" type="primary" icon="download" @click="handleExportXls('容器管理')">
  70 + 导出
  71 + </a-button>
  72 + <a-upload
  73 + name="file"
  74 + :showUploadList="false"
  75 + :multiple="false"
  76 + :headers="tokenHeader"
  77 + :action="importExcelUrl"
  78 + @change="handleImportExcel"
  79 + >
60 80 <a-button v-has="'container:import'" type="primary" icon="import">导入</a-button>
61 81 </a-upload>
62 82 <a-button v-has="'container:print'" @click="batchPrint()" type="primary">打印</a-button>
63 83 <a-dropdown v-if="selectedRowKeys.length > 0">
64 84 <a-menu slot="overlay" v-has="'container:deleteBatch'">
65 85 <a-menu-item key="1" @click="batchDel">
66   - <a-icon type="delete"/>
  86 + <a-icon type="delete" />
67 87 删除
68 88 </a-menu-item>
69 89 </a-menu>
70   - <a-button style="margin-left: 8px"> 批量操作
71   - <a-icon type="down"/>
  90 + <a-button style="margin-left: 8px">
  91 + 批量操作
  92 + <a-icon type="down" />
72 93 </a-button>
73 94 </a-dropdown>
74 95 </div>
... ... @@ -76,33 +97,33 @@
76 97 <!-- table区域-begin -->
77 98 <div>
78 99 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
79   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
80   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  100 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  101 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
81 102 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
82 103 </div>
83 104  
84 105 <a-table
85 106 ref="table"
86 107 size="middle"
87   - :scroll="{x:true}"
  108 + :scroll="{ x: true }"
88 109 bordered
89 110 rowKey="id"
90 111 :columns="columns"
91 112 :dataSource="dataSource"
92 113 :pagination="ipagination"
93 114 :loading="loading"
94   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  115 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
95 116 class="j-table-force-nowrap"
96   - @change="handleTableChange">
97   -
  117 + @change="handleTableChange"
  118 + >
98 119 <span slot="zoneCode" slot-scope="zoneCode">
99   - <a-tag :key="zoneCode" color=blue>
  120 + <a-tag :key="zoneCode" color="blue">
100 121 {{ solutionZoneCode(zoneCode) }}
101 122 </a-tag>
102 123 </span>
103 124  
104 125 <span slot="containerTypeCode" slot-scope="containerTypeCode">
105   - <a-tag :key="containerTypeCode" color=pink>
  126 + <a-tag :key="containerTypeCode" color="pink">
106 127 {{ solutionContainerType(containerTypeCode) }}
107 128 </a-tag>
108 129 </span>
... ... @@ -112,26 +133,23 @@
112 133 </template>
113 134 <template slot="imgSlot" slot-scope="text">
114 135 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
115   - <img v-else :src="getImgView(text)" height="25px" alt=""
116   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  136 + <img
  137 + v-else
  138 + :src="getImgView(text)"
  139 + height="25px"
  140 + alt=""
  141 + style="max-width:80px;font-size: 12px;font-style: italic;"
  142 + />
117 143 </template>
118 144 <template slot="fileSlot" slot-scope="text">
119 145 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
120   - <a-button
121   - v-else
122   - :ghost="true"
123   - type="primary"
124   - icon="download"
125   - size="small"
126   - @click="downloadFile(text)">
  146 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
127 147 下载
128 148 </a-button>
129 149 </template>
130 150  
131 151 <span slot="action" slot-scope="text, record">
132   - <a v-has="'container:add'" @click="editForm(record)">编辑</a>
133   -
134   - <a-divider type="vertical"/>
  152 + <a v-has="'container:add'" @click="editForm(record)">编辑<a-divider type="vertical"/></a>
135 153 <a-dropdown>
136 154 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
137 155 <a-menu slot="overlay">
... ... @@ -146,7 +164,6 @@
146 164 </a-menu>
147 165 </a-dropdown>
148 166 </span>
149   -
150 167 </a-table>
151 168 </div>
152 169  
... ... @@ -157,16 +174,15 @@
157 174 </template>
158 175  
159 176 <script>
160   -
161 177 import '@/assets/less/TableExpand.less'
162   -import {mixinDevice} from '@/utils/mixin'
163   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  178 +import { mixinDevice } from '@/utils/mixin'
  179 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
164 180 import ContainerModal from './modules/ContainerModal'
165   -import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
166   -import {getZoneList} from '@/api/api'
167   -import {getContainerTypeList} from '@/api/api'
168   -import ContainerEditModal from "./modules/ContainerEditModal";
169   -import ContainerPrintModal from "./modules/ContainerPrintModal";
  181 +import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
  182 +import { getZoneList } from '@/api/api'
  183 +import { getContainerTypeList } from '@/api/api'
  184 +import ContainerEditModal from './modules/ContainerEditModal'
  185 +import ContainerPrintModal from './modules/ContainerPrintModal'
170 186  
171 187 export default {
172 188 name: 'ContainerList',
... ... @@ -188,125 +204,132 @@ export default {
188 204 dataIndex: '',
189 205 key: 'rowIndex',
190 206 width: 60,
191   - align: "center",
192   - customRender: function (t, r, index) {
193   - return parseInt(index) + 1;
  207 + align: 'center',
  208 + customRender: function(t, r, index) {
  209 + return parseInt(index) + 1
194 210 }
195 211 },
196 212 {
197 213 title: '容器编码',
198   - align: "center",
  214 + align: 'center',
199 215 dataIndex: 'code'
200 216 },
201 217 {
202 218 title: '库位编码',
203   - align: "center",
  219 + align: 'center',
204 220 dataIndex: 'locationCode'
205 221 },
206 222 {
207 223 title: '容器类型',
208   - align: "center",
  224 + align: 'center',
209 225 dataIndex: 'containerTypeCode',
210 226 key: 'containerTypeCode',
211   - scopedSlots: {customRender: 'containerTypeCode'}
  227 + scopedSlots: { customRender: 'containerTypeCode' }
212 228 },
213 229 {
214 230 title: '容器状态',
215   - align: "center",
  231 + align: 'center',
216 232 dataIndex: 'status_dictText'
217 233 },
218 234 {
  235 + title: '容器填充状态',
  236 + align: 'center',
  237 + dataIndex: 'fillStatus_dictText'
  238 + },
  239 + {
219 240 title: '创建人',
220   - align: "center",
  241 + align: 'center',
221 242 dataIndex: 'createBy'
222 243 },
223 244 {
224 245 title: '创建日期',
225   - align: "center",
  246 + align: 'center',
226 247 dataIndex: 'createTime'
227 248 },
228 249 {
229 250 title: '更新人',
230   - align: "center",
  251 + align: 'center',
231 252 dataIndex: 'updateBy'
232 253 },
233 254 {
234 255 title: '更新日期',
235   - align: "center",
  256 + align: 'center',
236 257 dataIndex: 'updateTime'
237 258 },
238 259 {
239 260 title: '操作',
240 261 dataIndex: 'action',
241   - align: "center",
242   - fixed: "right",
  262 + align: 'center',
  263 + fixed: 'right',
243 264 width: 147,
244   - scopedSlots: {customRender: 'action'}
  265 + scopedSlots: { customRender: 'action' }
245 266 }
246 267 ],
247 268 url: {
248   - list: "/config/container/list",
249   - delete: "/config/container/delete",
250   - deleteBatch: "/config/container/deleteBatch",
251   - exportXlsUrl: "/config/container/exportXls",
252   - importExcelUrl: "config/container/importExcel",
253   -
  269 + list: '/config/container/list',
  270 + delete: '/config/container/delete',
  271 + deleteBatch: '/config/container/deleteBatch',
  272 + exportXlsUrl: '/config/container/exportXls',
  273 + importExcelUrl: 'config/container/importExcel'
254 274 },
255 275 dictOptions: {},
256   - superFieldList: [],
  276 + superFieldList: []
257 277 }
258 278 },
259 279 created() {
260   - this.getSuperFieldList();
261   - this.loadFrom();
  280 + this.getSuperFieldList()
  281 + this.loadFrom()
262 282 },
263 283 computed: {
264   - importExcelUrl: function () {
265   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
266   - },
  284 + importExcelUrl: function() {
  285 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  286 + }
267 287 },
268 288 methods: {
269   - initDictConfig() {
270   - },
  289 + initDictConfig() {},
271 290 getSuperFieldList() {
272   - let fieldList = [];
273   - fieldList.push({type: 'string', value: 'code', text: '容器编码', dictCode: ''})
274   - fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''})
275   - fieldList.push({type: 'string', value: 'locationCode', text: '库位编码', dictCode: ''})
  291 + let fieldList = []
  292 + fieldList.push({ type: 'string', value: 'code', text: '容器编码', dictCode: '' })
  293 + fieldList.push({ type: 'string', value: 'companyCode', text: '货主', dictCode: '' })
  294 + fieldList.push({ type: 'string', value: 'locationCode', text: '库位编码', dictCode: '' })
276 295 // fieldList.push({type:'string',value:'zoneCode',text:'库区编码',dictCode:''})
277   - fieldList.push({type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: ''})
278   - fieldList.push({type: 'string', value: 'status', text: '容器状态', dictCode: 'container_status'})
279   - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
280   - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
281   - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
282   - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  296 + fieldList.push({ type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: '' })
  297 + fieldList.push({ type: 'string', value: 'status', text: '容器状态', dictCode: 'container_status' })
  298 + fieldList.push({ type: 'string', value: 'fillStatus', text: '容器填充状态', dictCode: 'fill_status' })
  299 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  300 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  301 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  302 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
283 303 this.superFieldList = fieldList
284 304 },
285 305 editForm(record) {
286   - this.$refs.modalEditForm.edit(record);
287   - this.$refs.modalEditForm.title = "编辑容器";
288   - this.$refs.modalEditForm.disableSubmit = false;
  306 + this.$refs.modalEditForm.edit(record)
  307 + this.$refs.modalEditForm.title = '编辑容器'
  308 + this.$refs.modalEditForm.disableSubmit = false
289 309 },
290 310 batchPrint() {
291 311 if (this.selectedRowKeys.length <= 0) {
292   - this.$message.warning('请选择一条记录!');
293   - return;
  312 + this.$message.warning('请选择一条记录!')
  313 + return
294 314 } else {
295   - var ids = "";
  315 + var ids = ''
296 316 for (var a = 0; a < this.selectedRowKeys.length; a++) {
297   - ids += this.selectedRowKeys[a] + ",";
  317 + ids += this.selectedRowKeys[a] + ','
298 318 }
299   - window.open(window._CONFIG['domianURL'] + "/jmreport/view/768644669245833216/?id=" + ids, "newWindow", "toolbar=no,scrollbars=no,menubar=no,screenX=100,screenY=100");
300   -
  319 + window.open(
  320 + window._CONFIG['domianURL'] + '/jmreport/view/768644669245833216/?id=' + ids,
  321 + 'newWindow',
  322 + 'toolbar=no,scrollbars=no,menubar=no,screenX=100,screenY=100'
  323 + )
301 324 }
302 325 },
303 326 loadFrom() {
304   - getZoneList().then((res) => {
  327 + getZoneList().then(res => {
305 328 if (res.success) {
306 329 this.zoneList = res.result
307 330 }
308 331 })
309   - getContainerTypeList().then((res) => {
  332 + getContainerTypeList().then(res => {
310 333 if (res.success) {
311 334 this.containerTypeList = res.result
312 335 }
... ... @@ -314,8 +337,8 @@ export default {
314 337 },
315 338 solutionZoneCode(value) {
316 339 var actions = []
317   - Object.keys(this.zoneList).some((key) => {
318   - if (this.zoneList[key].code == ('' + value)) {
  340 + Object.keys(this.zoneList).some(key => {
  341 + if (this.zoneList[key].code == '' + value) {
319 342 actions.push(this.zoneList[key].name)
320 343 return true
321 344 }
... ... @@ -324,14 +347,14 @@ export default {
324 347 },
325 348 solutionContainerType(value) {
326 349 var actions = []
327   - Object.keys(this.containerTypeList).some((key) => {
328   - if (this.containerTypeList[key].code == ('' + value)) {
  350 + Object.keys(this.containerTypeList).some(key => {
  351 + if (this.containerTypeList[key].code == '' + value) {
329 352 actions.push(this.containerTypeList[key].name)
330 353 return true
331 354 }
332 355 })
333 356 return actions.join('')
334   - },
  357 + }
335 358 }
336 359 }
337 360 </script>
... ...
ant-design-vue-jeecg/src/views/system/config/ContainerTypeList.vue
... ... @@ -20,7 +20,7 @@
20 20 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
21 21 <a @click="handleToggleSearch" style="margin-left: 8px">
22 22 {{ toggleSearchStatus ? '收起' : '展开' }}
23   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  23 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
24 24 </a>
25 25 </span>
26 26 </a-col>
... ... @@ -32,20 +32,30 @@
32 32 <!-- 操作按钮区域 -->
33 33 <div class="table-operator">
34 34 <a-button @click="handleAdd" v-has="'containerType:add'" type="primary" icon="plus">新增</a-button>
35   - <a-button v-has="'containerType:export'" type="primary" icon="download" @click="handleExportXls('容器类型')">导出</a-button>
36   - <a-upload v-has="'containerType:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
37   - @change="handleImportExcel">
  35 + <a-button v-has="'containerType:export'" type="primary" icon="download" @click="handleExportXls('容器类型')">
  36 + 导出
  37 + </a-button>
  38 + <a-upload
  39 + v-has="'containerType:import'"
  40 + name="file"
  41 + :showUploadList="false"
  42 + :multiple="false"
  43 + :headers="tokenHeader"
  44 + :action="importExcelUrl"
  45 + @change="handleImportExcel"
  46 + >
38 47 <a-button type="primary" icon="import">导入</a-button>
39 48 </a-upload>
40 49 <a-dropdown v-if="selectedRowKeys.length > 0">
41 50 <a-menu slot="overlay" v-has="'containerType:deleteBatch'">
42 51 <a-menu-item key="1" @click="batchDel">
43   - <a-icon type="delete"/>
  52 + <a-icon type="delete" />
44 53 删除
45 54 </a-menu-item>
46 55 </a-menu>
47   - <a-button style="margin-left: 8px"> 批量操作
48   - <a-icon type="down"/>
  56 + <a-button style="margin-left: 8px">
  57 + 批量操作
  58 + <a-icon type="down" />
49 59 </a-button>
50 60 </a-dropdown>
51 61 </div>
... ... @@ -53,50 +63,59 @@
53 63 <!-- table区域-begin -->
54 64 <div>
55 65 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  66 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  67 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
58 68 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 69 </div>
60 70  
61 71 <a-table
62 72 ref="table"
63 73 size="middle"
64   - :scroll="{x:true}"
  74 + :scroll="{ x: true }"
65 75 bordered
66 76 rowKey="id"
67 77 :columns="columns"
68 78 :dataSource="dataSource"
69 79 :pagination="ipagination"
70 80 :loading="loading"
71   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  81 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
72 82 class="j-table-force-nowrap"
73   - @change="handleTableChange">
  83 + @change="handleTableChange"
  84 + >
  85 + <span slot="companyCode" slot-scope="companyCode">
  86 + <a-tag :key="companyCode" color=blue>
  87 + {{ solutionCompany(companyCode) }}
  88 + </a-tag>
  89 + </span>
  90 +
  91 + <span slot="locationTypes" slot-scope="locationTypes" >
  92 + <a-tag v-for="locationType in locationTypes" :key="locationType" color=pink>
  93 + {{ solutionLocationType(locationType) }}
  94 + </a-tag>
  95 + </span>
74 96  
75 97 <template slot="htmlSlot" slot-scope="text">
76 98 <div v-html="text"></div>
77 99 </template>
78 100 <template slot="imgSlot" slot-scope="text">
79 101 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
80   - <img v-else :src="getImgView(text)" height="25px" alt=""
81   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  102 + <img
  103 + v-else
  104 + :src="getImgView(text)"
  105 + height="25px"
  106 + alt=""
  107 + style="max-width:80px;font-size: 12px;font-style: italic;"
  108 + />
82 109 </template>
83 110 <template slot="fileSlot" slot-scope="text">
84 111 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
85   - <a-button
86   - v-else
87   - :ghost="true"
88   - type="primary"
89   - icon="download"
90   - size="small"
91   - @click="downloadFile(text)">
  112 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
92 113 下载
93 114 </a-button>
94 115 </template>
95 116  
96 117 <span slot="action" slot-scope="text, record">
97   - <a v-has="'containerType:edit'" @click="handleEdit(record)">编辑</a>
98   -
99   - <a-divider type="vertical"/>
  118 + <a v-has="'containerType:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
100 119 <a-dropdown>
101 120 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
102 121 <a-menu slot="overlay">
... ... @@ -111,7 +130,6 @@
111 130 </a-menu>
112 131 </a-dropdown>
113 132 </span>
114   -
115 133 </a-table>
116 134 </div>
117 135  
... ... @@ -120,11 +138,11 @@
120 138 </template>
121 139  
122 140 <script>
123   -
124 141 import '@/assets/less/TableExpand.less'
125   -import {mixinDevice} from '@/utils/mixin'
126   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  142 +import { mixinDevice } from '@/utils/mixin'
  143 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
127 144 import ContainerTypeModal from './modules/ContainerTypeModal'
  145 +import {getCompanyList, getLocationTypeList } from '@/api/api'
128 146  
129 147 export default {
130 148 name: 'ContainerTypeList',
... ... @@ -134,6 +152,8 @@ export default {
134 152 },
135 153 data() {
136 154 return {
  155 + companyList: [],
  156 + locationTypeList: [],
137 157 description: '容器类型管理页面',
138 158 // 表头
139 159 columns: [
... ... @@ -142,123 +162,158 @@ export default {
142 162 dataIndex: '',
143 163 key: 'rowIndex',
144 164 width: 60,
145   - align: "center",
146   - customRender: function (t, r, index) {
147   - return parseInt(index) + 1;
  165 + align: 'center',
  166 + customRender: function(t, r, index) {
  167 + return parseInt(index) + 1
148 168 }
149 169 },
150 170 {
151 171 title: '编码',
152   - align: "center",
  172 + align: 'center',
153 173 dataIndex: 'code'
154 174 },
155 175 {
156 176 title: '名称',
157   - align: "center",
  177 + align: 'center',
158 178 dataIndex: 'name'
159 179 },
160   - {
161   - title: '货主编码',
162   - align: "center",
163   - dataIndex: 'companyCode'
164   - },
  180 + // {
  181 + // title: '货主',
  182 + // align: 'center',
  183 + // dataIndex: 'companyCode',
  184 + // key: 'companyCode',
  185 + // scopedSlots: {customRender: 'companyCode'}
  186 + // },
165 187 {
166 188 title: '绑定的库位类型',
167   - align: "center",
168   - dataIndex: 'locationType'
  189 + align: 'center',
  190 + dataIndex: 'locationTypes',
  191 + key: 'locationTypes',
  192 + scopedSlots: {customRender: 'locationTypes'}
169 193 },
170 194 {
171 195 title: '长',
172   - align: "center",
  196 + align: 'center',
173 197 dataIndex: 'length'
174 198 },
175 199 {
176 200 title: '宽',
177   - align: "center",
  201 + align: 'center',
178 202 dataIndex: 'width'
179 203 },
180 204 {
181 205 title: '高',
182   - align: "center",
  206 + align: 'center',
183 207 dataIndex: 'height'
184 208 },
185 209 {
186 210 title: '空容器重量',
187   - align: "center",
  211 + align: 'center',
188 212 dataIndex: 'emptyweight'
189 213 },
190 214 {
191 215 title: '容器最大承重',
192   - align: "center",
  216 + align: 'center',
193 217 dataIndex: 'maxweight'
194 218 },
195 219 {
196 220 title: '创建人',
197   - align: "center",
  221 + align: 'center',
198 222 dataIndex: 'createBy'
199 223 },
200 224 {
201 225 title: '创建日期',
202   - align: "center",
  226 + align: 'center',
203 227 dataIndex: 'createTime'
204 228 },
205 229 {
206 230 title: '更新人',
207   - align: "center",
  231 + align: 'center',
208 232 dataIndex: 'updateBy'
209 233 },
210 234 {
211 235 title: '更新日期',
212   - align: "center",
  236 + align: 'center',
213 237 dataIndex: 'updateTime'
214 238 },
215 239 {
216 240 title: '操作',
217 241 dataIndex: 'action',
218   - align: "center",
219   - fixed: "right",
  242 + align: 'center',
  243 + fixed: 'right',
220 244 width: 147,
221   - scopedSlots: {customRender: 'action'}
  245 + scopedSlots: { customRender: 'action' }
222 246 }
223 247 ],
224 248 url: {
225   - list: "/config/containerType/list",
226   - delete: "/config/containerType/delete",
227   - deleteBatch: "/config/containerType/deleteBatch",
228   - exportXlsUrl: "/config/containerType/exportXls",
229   - importExcelUrl: "config/containerType/importExcel",
230   -
  249 + list: '/config/containerType/list',
  250 + delete: '/config/containerType/delete',
  251 + deleteBatch: '/config/containerType/deleteBatch',
  252 + exportXlsUrl: '/config/containerType/exportXls',
  253 + importExcelUrl: 'config/containerType/importExcel'
231 254 },
232 255 dictOptions: {},
233   - superFieldList: [],
  256 + superFieldList: []
234 257 }
235 258 },
236 259 created() {
237   - this.getSuperFieldList();
  260 + this.getSuperFieldList()
  261 + this.loadFrom()
238 262 },
239 263 computed: {
240   - importExcelUrl: function () {
241   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
242   - },
  264 + importExcelUrl: function() {
  265 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  266 + }
243 267 },
244 268 methods: {
245   - initDictConfig() {
  269 + initDictConfig() {},
  270 + loadFrom() {
  271 + getCompanyList().then((res) => {
  272 + if (res.success) {
  273 + this.companyList = res.result
  274 + }
  275 + });
  276 + getLocationTypeList().then(res => {
  277 + if (res.success) {
  278 + this.locationTypeList = res.result
  279 + }
  280 + });
  281 + },
  282 + solutionCompany(value) {
  283 + var actions = []
  284 + Object.keys(this.companyList).some((key) => {
  285 + if (this.companyList[key].code == ('' + value)) {
  286 + actions.push(this.companyList[key].name)
  287 + return true
  288 + }
  289 + })
  290 + return actions.join('')
  291 + },
  292 + solutionLocationType(value) {
  293 + var actions = []
  294 + Object.keys(this.locationTypeList).some(key => {
  295 + if (this.locationTypeList[key].code == '' + value) {
  296 + actions.push(this.locationTypeList[key].name)
  297 + return true
  298 + }
  299 + })
  300 + return actions.join('')
246 301 },
247 302 getSuperFieldList() {
248   - let fieldList = [];
249   - fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''})
250   - fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''})
251   - fieldList.push({type: 'string', value: 'companyCode', text: '货主编码', dictCode: ''})
252   - fieldList.push({type: 'string', value: 'locationType', text: '绑定的库位类型', dictCode: ''})
253   - fieldList.push({type: 'int', value: 'length', text: '长', dictCode: ''})
254   - fieldList.push({type: 'int', value: 'width', text: '宽', dictCode: ''})
255   - fieldList.push({type: 'int', value: 'height', text: '高', dictCode: ''})
256   - fieldList.push({type: 'int', value: 'emptyweight', text: '空容器重量', dictCode: ''})
257   - fieldList.push({type: 'int', value: 'maxweight', text: '容器最大承重', dictCode: ''})
258   - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
259   - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
260   - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
261   - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  303 + let fieldList = []
  304 + fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' })
  305 + fieldList.push({ type: 'string', value: 'name', text: '名称', dictCode: '' })
  306 + fieldList.push({ type: 'string', value: 'companyCode', text: '货主编码', dictCode: '' })
  307 + fieldList.push({ type: 'string', value: 'locationType', text: '绑定的库位类型', dictCode: '' })
  308 + fieldList.push({ type: 'int', value: 'length', text: '长', dictCode: '' })
  309 + fieldList.push({ type: 'int', value: 'width', text: '宽', dictCode: '' })
  310 + fieldList.push({ type: 'int', value: 'height', text: '高', dictCode: '' })
  311 + fieldList.push({ type: 'int', value: 'emptyweight', text: '空容器重量', dictCode: '' })
  312 + fieldList.push({ type: 'int', value: 'maxweight', text: '容器最大承重', dictCode: '' })
  313 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  314 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  315 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  316 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
262 317 this.superFieldList = fieldList
263 318 }
264 319 }
... ...
ant-design-vue-jeecg/src/views/system/config/CustomerList.vue
... ... @@ -34,7 +34,7 @@
34 34 <div>
35 35 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
36 36 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
37   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  37 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
38 38 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
39 39 </div>
40 40  
... ...
ant-design-vue-jeecg/src/views/system/config/CycleCountPreferenceList.vue
... ... @@ -34,7 +34,7 @@
34 34 <div>
35 35 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
36 36 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
37   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  37 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
38 38 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
39 39 </div>
40 40  
... ...
ant-design-vue-jeecg/src/views/system/config/LocationHighList.vue
... ... @@ -54,7 +54,7 @@
54 54 <div>
55 55 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56 56 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  57 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
58 58 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 59 </div>
60 60  
... ...
ant-design-vue-jeecg/src/views/system/config/LocationList.vue
... ... @@ -16,7 +16,7 @@
16 16 </a-col>
17 17 <a-col :xl="6" :lg="7" :md="8" :sm="24">
18 18 <a-form-item label="状态">
19   - <j-dict-select-tag placeholder="请选择状态" v-model="queryParam.status" dictCode="location_status"/>
  19 + <j-dict-select-tag placeholder="请选择状态" v-model="queryParam.status" dictCode="location_status" />
20 20 </a-form-item>
21 21 </a-col>
22 22 <a-col :xl="6" :lg="7" :md="8" :sm="24">
... ... @@ -25,10 +25,10 @@
25 25 show-search
26 26 placeholder="请选择库位类型"
27 27 option-filter-prop="children"
28   -
29   - v-model="queryParam.locationTypeCode">
  28 + v-model="queryParam.locationTypeCode"
  29 + >
30 30 <a-select-option v-for="item in locationTypeList" :key="item.name" :value="item.code">
31   - {{item.name}}
  31 + {{ item.name }}
32 32 </a-select-option>
33 33 </a-select>
34 34 </a-form-item>
... ... @@ -40,10 +40,10 @@
40 40 show-search
41 41 placeholder="请选择库区编码"
42 42 option-filter-prop="children"
43   -
44   - v-model="queryParam.zoneCode">
  43 + v-model="queryParam.zoneCode"
  44 + >
45 45 <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">
46   - {{item.name}}
  46 + {{ item.name }}
47 47 </a-select-option>
48 48 </a-select>
49 49 </a-form-item>
... ... @@ -70,17 +70,17 @@
70 70 </a-col>
71 71 <a-col :xl="6" :lg="7" :md="8" :sm="24">
72 72 <a-form-item label="高低位">
73   - <j-dict-select-tag placeholder="请输入高低位" v-model="queryParam.high" dictCode="high_status"/>
  73 + <j-dict-select-tag placeholder="请输入高低位" v-model="queryParam.high" dictCode="high_status" />
74 74 </a-form-item>
75 75 </a-col>
76 76 <a-col :xl="6" :lg="7" :md="8" :sm="24">
77 77 <a-form-item label="内外侧">
78   - <j-dict-select-tag placeholder="请选择内外侧" v-model="queryParam.rowFlag" dictCode="row_type"/>
  78 + <j-dict-select-tag placeholder="请选择内外侧" v-model="queryParam.rowFlag" dictCode="row_type" />
79 79 </a-form-item>
80 80 </a-col>
81 81 <a-col :xl="6" :lg="7" :md="8" :sm="24">
82 82 <a-form-item label="是否可用">
83   - <j-dict-select-tag placeholder="请选择是否可用" v-model="queryParam.enable" dictCode="enable_status"/>
  83 + <j-dict-select-tag placeholder="请选择是否可用" v-model="queryParam.enable" dictCode="enable_status" />
84 84 </a-form-item>
85 85 </a-col>
86 86 </template>
... ... @@ -90,7 +90,7 @@
90 90 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
91 91 <a @click="handleToggleSearch" style="margin-left: 8px">
92 92 {{ toggleSearchStatus ? '收起' : '展开' }}
93   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  93 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
94 94 </a>
95 95 </span>
96 96 </a-col>
... ... @@ -103,21 +103,31 @@
103 103 <div class="table-operator">
104 104 <a-button @click="batchAdd()" v-has="'location:batchAdd'" type="primary" icon="plus">批量新增</a-button>
105 105 <a-button v-has="'location:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
106   - <a-button v-has="'location:export'" type="primary" icon="download" @click="handleExportXls('库位管理')">导出</a-button>
107   - <a-upload v-has="'location:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
108   - @change="handleImportExcel">
  106 + <a-button v-has="'location:export'" type="primary" icon="download" @click="handleExportXls('库位管理')">
  107 + 导出
  108 + </a-button>
  109 + <a-upload
  110 + v-has="'location:import'"
  111 + name="file"
  112 + :showUploadList="false"
  113 + :multiple="false"
  114 + :headers="tokenHeader"
  115 + :action="importExcelUrl"
  116 + @change="handleImportExcel"
  117 + >
109 118 <a-button type="primary" icon="import">导入</a-button>
110 119 </a-upload>
111 120 <a-button v-has="'material:print'" @click="batchPrint()" type="primary">打印</a-button>
112 121 <a-dropdown v-if="selectedRowKeys.length > 0">
113 122 <a-menu slot="overlay" v-has="'location:deleteBatch'">
114 123 <a-menu-item key="1" @click="batchDel">
115   - <a-icon type="delete"/>
  124 + <a-icon type="delete" />
116 125 删除
117 126 </a-menu-item>
118 127 </a-menu>
119   - <a-button style="margin-left: 8px"> 批量操作
120   - <a-icon type="down"/>
  128 + <a-button style="margin-left: 8px">
  129 + 批量操作
  130 + <a-icon type="down" />
121 131 </a-button>
122 132 </a-dropdown>
123 133 </div>
... ... @@ -125,33 +135,33 @@
125 135 <!-- table区域-begin -->
126 136 <div>
127 137 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
128   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
129   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  138 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  139 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
130 140 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
131 141 </div>
132 142  
133 143 <a-table
134 144 ref="table"
135 145 size="middle"
136   - :scroll="{x:true}"
  146 + :scroll="{ x: true }"
137 147 bordered
138 148 rowKey="id"
139 149 :columns="columns"
140 150 :dataSource="dataSource"
141 151 :pagination="ipagination"
142 152 :loading="loading"
143   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  153 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
144 154 class="j-table-force-nowrap"
145   - @change="handleTableChange">
146   -
147   - <span slot="locationTypeCode" slot-scope="locationTypeCode">
148   - <a-tag :key="locationTypeCode" color=pink>
  155 + @change="handleTableChange"
  156 + >
  157 + <span slot="locationTypeCode" slot-scope="locationTypeCode">
  158 + <a-tag :key="locationTypeCode" color="pink">
149 159 {{ solutionLocationType(locationTypeCode) }}
150 160 </a-tag>
151 161 </span>
152 162  
153 163 <span slot="zoneCode" slot-scope="zoneCode">
154   - <a-tag :key="zoneCode" color=blue>
  164 + <a-tag :key="zoneCode" color="blue">
155 165 {{ solutionZoneCode(zoneCode) }}
156 166 </a-tag>
157 167 </span>
... ... @@ -161,26 +171,23 @@
161 171 </template>
162 172 <template slot="imgSlot" slot-scope="text">
163 173 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
164   - <img v-else :src="getImgView(text)" height="25px" alt=""
165   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  174 + <img
  175 + v-else
  176 + :src="getImgView(text)"
  177 + height="25px"
  178 + alt=""
  179 + style="max-width:80px;font-size: 12px;font-style: italic;"
  180 + />
166 181 </template>
167 182 <template slot="fileSlot" slot-scope="text">
168 183 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
169   - <a-button
170   - v-else
171   - :ghost="true"
172   - type="primary"
173   - icon="download"
174   - size="small"
175   - @click="downloadFile(text)">
  184 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
176 185 下载
177 186 </a-button>
178 187 </template>
179 188  
180 189 <span slot="action" slot-scope="text, record">
181   - <a v-has="'location:edit'" @click="handleEdit(record)">编辑</a>
182   -
183   - <a-divider type="vertical"/>
  190 + <a v-has="'location:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
184 191 <a-dropdown>
185 192 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
186 193 <a-menu slot="overlay">
... ... @@ -195,7 +202,6 @@
195 202 </a-menu>
196 203 </a-dropdown>
197 204 </span>
198   -
199 205 </a-table>
200 206 </div>
201 207  
... ... @@ -206,15 +212,14 @@
206 212 </template>
207 213  
208 214 <script>
209   -
210 215 import '@/assets/less/TableExpand.less'
211   -import {mixinDevice} from '@/utils/mixin'
212   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  216 +import { mixinDevice } from '@/utils/mixin'
  217 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
213 218 import LocationModal from './modules/LocationModal'
214   -import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
215   -import {getLocationTypeList} from '@/api/api'
216   -import {getZoneList} from '@/api/api'
217   -import LocationBatchAddModal from "./modules/LocationBatchAddModal";
  219 +import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
  220 +import { getLocationTypeList } from '@/api/api'
  221 +import { getZoneList } from '@/api/api'
  222 +import LocationBatchAddModal from './modules/LocationBatchAddModal'
218 223 import LocationPrintModal from './modules/LocationPrintModal'
219 224  
220 225 export default {
... ... @@ -234,114 +239,113 @@ export default {
234 239 columns: [
235 240 {
236 241 title: 'ID',
237   - align: "center",
  242 + align: 'center',
238 243 dataIndex: 'id'
239 244 },
240 245 {
241 246 title: '库位编码',
242   - align: "center",
  247 + align: 'center',
243 248 dataIndex: 'code'
244 249 },
245 250 {
246 251 title: '容器编码',
247   - align: "center",
  252 + align: 'center',
248 253 dataIndex: 'containerCode'
249 254 },
250 255 {
251 256 title: '状态',
252   - align: "center",
  257 + align: 'center',
253 258 dataIndex: 'status_dictText'
254 259 },
255 260 {
256 261 title: '库区',
257   - align: "center",
  262 + align: 'center',
258 263 dataIndex: 'zoneCode',
259 264 key: 'zoneCode',
260   - scopedSlots: {customRender: 'zoneCode'}
  265 + scopedSlots: { customRender: 'zoneCode' }
261 266 },
262 267 {
263 268 title: '库位类型',
264   - align: "center",
  269 + align: 'center',
265 270 dataIndex: 'locationTypeCode',
266 271 key: 'locationTypeCode',
267   - scopedSlots: {customRender: 'locationTypeCode'}
  272 + scopedSlots: { customRender: 'locationTypeCode' }
268 273 },
269 274 {
270 275 title: '巷道',
271   - align: "center",
  276 + align: 'center',
272 277 dataIndex: 'roadWay'
273 278 },
274 279 {
275 280 title: '行',
276   - align: "center",
  281 + align: 'center',
277 282 dataIndex: 'row'
278 283 },
279 284 {
280 285 title: '列',
281   - align: "center",
  286 + align: 'center',
282 287 dataIndex: 'icolumn'
283 288 },
284 289 {
285 290 title: '层',
286   - align: "center",
  291 + align: 'center',
287 292 dataIndex: 'layer'
288 293 },
289 294 {
290 295 title: '高低位',
291   - align: "center",
  296 + align: 'center',
292 297 dataIndex: 'high_dictText'
293 298 },
294 299 {
295 300 title: '内外侧',
296   - align: "center",
  301 + align: 'center',
297 302 dataIndex: 'rowFlag_dictText'
298 303 },
299 304 {
300 305 title: '物料分区存放',
301   - align: "center",
  306 + align: 'center',
302 307 dataIndex: 'materialAreaCode'
303 308 },
304 309 {
305 310 title: '是否可用',
306   - align: "center",
  311 + align: 'center',
307 312 dataIndex: 'enable_dictText'
308 313 },
309 314 {
310 315 title: '创建人',
311   - align: "center",
  316 + align: 'center',
312 317 dataIndex: 'createBy'
313 318 },
314 319 {
315 320 title: '创建日期',
316   - align: "center",
  321 + align: 'center',
317 322 dataIndex: 'createTime'
318 323 },
319 324 {
320 325 title: '更新人',
321   - align: "center",
  326 + align: 'center',
322 327 dataIndex: 'updateBy'
323 328 },
324 329 {
325 330 title: '更新日期',
326   - align: "center",
  331 + align: 'center',
327 332 dataIndex: 'updateTime'
328 333 },
329 334 {
330 335 title: '操作',
331 336 dataIndex: 'action',
332   - align: "center",
333   - fixed: "right",
  337 + align: 'center',
  338 + fixed: 'right',
334 339 width: 147,
335   - scopedSlots: {customRender: 'action'}
  340 + scopedSlots: { customRender: 'action' }
336 341 }
337 342 ],
338 343 url: {
339   - list: "/config/location/list",
340   - delete: "/config/location/delete",
341   - deleteBatch: "/config/location/deleteBatch",
342   - exportXlsUrl: "/config/location/exportXls",
343   - importExcelUrl: "config/location/importExcel",
344   -
  344 + list: '/config/location/list',
  345 + delete: '/config/location/delete',
  346 + deleteBatch: '/config/location/deleteBatch',
  347 + exportXlsUrl: '/config/location/exportXls',
  348 + importExcelUrl: 'config/location/importExcel'
345 349 },
346 350 /* 分页参数 */
347 351 ipagination: {
... ... @@ -349,83 +353,86 @@ export default {
349 353 pageSize: 10,
350 354 pageSizeOptions: ['10', '20', '50'],
351 355 showTotal: (total, range) => {
352   - return range[0] + "-" + range[1] + " 共" + total + "条"
  356 + return range[0] + '-' + range[1] + ' 共' + total + '条'
353 357 },
354 358 showQuickJumper: true,
355 359 showSizeChanger: true,
356 360 total: 0
357 361 },
358 362 dictOptions: {},
359   - superFieldList: [],
  363 + superFieldList: []
360 364 }
361 365 },
362 366 created() {
363   - this.getSuperFieldList();
364   - this.loadFrom();
  367 + this.getSuperFieldList()
  368 + this.loadFrom()
365 369 },
366 370 computed: {
367   - importExcelUrl: function () {
368   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
369   - },
  371 + importExcelUrl: function() {
  372 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  373 + }
370 374 },
371 375 methods: {
372   - initDictConfig() {
373   - },
  376 + initDictConfig() {},
374 377 getSuperFieldList() {
375   - let fieldList = [];
376   - fieldList.push({type: 'string', value: 'code', text: '库位编码', dictCode: ''})
377   - fieldList.push({type: 'string', value: 'zoneCode', text: '库区编码', dictCode: ''})
378   - fieldList.push({type: 'string', value: 'locationTypeCode', text: '库位类型', dictCode: ''})
379   - fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
380   - fieldList.push({type: 'string', value: 'status', text: '状态', dictCode: 'location_status'})
381   - fieldList.push({type: 'int', value: 'roadWay', text: '巷道', dictCode: ''})
382   - fieldList.push({type: 'int', value: 'row', text: '行', dictCode: ''})
383   - fieldList.push({type: 'int', value: 'icolumn', text: '列', dictCode: ''})
384   - fieldList.push({type: 'int', value: 'layer', text: '层', dictCode: ''})
385   - fieldList.push({type: 'int', value: 'grid', text: '格', dictCode: ''})
386   - fieldList.push({type: 'int', value: 'high', text: '高低位', dictCode: ''})
387   - fieldList.push({type: 'int', value: 'rowFlag', text: '内外侧', dictCode: 'row_type'})
388   - fieldList.push({type: 'string', value: 'materialAreaCode', text: '物料分区存放', dictCode: ''})
389   - fieldList.push({type: 'int', value: 'enable', text: '是否可用', dictCode: 'enable_status'})
390   - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
391   - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
392   - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
393   - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  378 + let fieldList = []
  379 + fieldList.push({ type: 'string', value: 'code', text: '库位编码', dictCode: '' })
  380 + fieldList.push({ type: 'string', value: 'zoneCode', text: '库区编码', dictCode: '' })
  381 + fieldList.push({ type: 'string', value: 'locationTypeCode', text: '库位类型', dictCode: '' })
  382 + fieldList.push({ type: 'string', value: 'containerCode', text: '容器编码', dictCode: '' })
  383 + fieldList.push({ type: 'string', value: 'status', text: '状态', dictCode: 'location_status' })
  384 + fieldList.push({ type: 'int', value: 'roadWay', text: '巷道', dictCode: '' })
  385 + fieldList.push({ type: 'int', value: 'row', text: '行', dictCode: '' })
  386 + fieldList.push({ type: 'int', value: 'icolumn', text: '列', dictCode: '' })
  387 + fieldList.push({ type: 'int', value: 'layer', text: '层', dictCode: '' })
  388 + fieldList.push({ type: 'int', value: 'grid', text: '格', dictCode: '' })
  389 + fieldList.push({ type: 'int', value: 'high', text: '高低位', dictCode: '' })
  390 + fieldList.push({ type: 'int', value: 'rowFlag', text: '内外侧', dictCode: 'row_type' })
  391 + fieldList.push({ type: 'string', value: 'materialAreaCode', text: '物料分区存放', dictCode: '' })
  392 + fieldList.push({ type: 'int', value: 'enable', text: '是否可用', dictCode: 'enable_status' })
  393 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  394 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  395 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  396 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
394 397 this.superFieldList = fieldList
395 398 },
396 399 loadFrom() {
397   - getZoneList().then((res) => {
  400 + getZoneList().then(res => {
398 401 if (res.success) {
399 402 this.zoneList = res.result
400 403 }
401   - });
402   - getLocationTypeList().then((res) => {
  404 + })
  405 + getLocationTypeList().then(res => {
403 406 if (res.success) {
404 407 this.locationTypeList = res.result
405 408 }
406 409 })
407 410 },
408 411 batchAdd() {
409   - this.$refs.batchAddModalForm.add();
410   - this.$refs.batchAddModalForm.title = "批量新增";
411   - this.$refs.batchAddModalForm.disableSubmit = false;
  412 + this.$refs.batchAddModalForm.add()
  413 + this.$refs.batchAddModalForm.title = '批量新增'
  414 + this.$refs.batchAddModalForm.disableSubmit = false
412 415 },
413 416 batchPrint() {
414 417 if (this.selectedRowKeys.length <= 0) {
415   - this.$message.warning('请选择一条记录!');
416   - return;
  418 + this.$message.warning('请选择一条记录!')
  419 + return
417 420 } else {
418   - var ids = "";
  421 + var ids = ''
419 422 for (var a = 0; a < this.selectedRowKeys.length; a++) {
420   - ids += this.selectedRowKeys[a] + ",";
  423 + ids += this.selectedRowKeys[a] + ','
421 424 }
422   - window.open(window._CONFIG['domianURL'] + "/jmreport/view/768700106074832896/?id=" + ids, "newWindow", "toolbar=no,scrollbars=no,menubar=no,screenX=100,screenY=100");
  425 + window.open(
  426 + window._CONFIG['domianURL'] + '/jmreport/view/768700106074832896/?id=' + ids,
  427 + 'newWindow',
  428 + 'toolbar=no,scrollbars=no,menubar=no,screenX=100,screenY=100'
  429 + )
423 430 }
424 431 },
425 432 solutionZoneCode(value) {
426 433 var actions = []
427   - Object.keys(this.zoneList).some((key) => {
428   - if (this.zoneList[key].code == ('' + value)) {
  434 + Object.keys(this.zoneList).some(key => {
  435 + if (this.zoneList[key].code == '' + value) {
429 436 actions.push(this.zoneList[key].name)
430 437 return true
431 438 }
... ... @@ -434,14 +441,14 @@ export default {
434 441 },
435 442 solutionLocationType(value) {
436 443 var actions = []
437   - Object.keys(this.locationTypeList).some((key) => {
438   - if (this.locationTypeList[key].code == ('' + value)) {
  444 + Object.keys(this.locationTypeList).some(key => {
  445 + if (this.locationTypeList[key].code == '' + value) {
439 446 actions.push(this.locationTypeList[key].name)
440 447 return true
441 448 }
442 449 })
443 450 return actions.join('')
444   - },
  451 + }
445 452 }
446 453 }
447 454 </script>
... ...
ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue
... ... @@ -20,7 +20,7 @@
20 20 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
21 21 <a @click="handleToggleSearch" style="margin-left: 8px">
22 22 {{ toggleSearchStatus ? '收起' : '展开' }}
23   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  23 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
24 24 </a>
25 25 </span>
26 26 </a-col>
... ... @@ -32,20 +32,30 @@
32 32 <!-- 操作按钮区域 -->
33 33 <div class="table-operator">
34 34 <a-button v-has="'locationType:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
35   - <a-button v-has="'locationType:export'" type="primary" icon="download" @click="handleExportXls('库位类型')">导出</a-button>
36   - <a-upload v-has="'locationType:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
37   - @change="handleImportExcel">
  35 + <a-button v-has="'locationType:export'" type="primary" icon="download" @click="handleExportXls('库位类型')">
  36 + 导出
  37 + </a-button>
  38 + <a-upload
  39 + v-has="'locationType:import'"
  40 + name="file"
  41 + :showUploadList="false"
  42 + :multiple="false"
  43 + :headers="tokenHeader"
  44 + :action="importExcelUrl"
  45 + @change="handleImportExcel"
  46 + >
38 47 <a-button type="primary" icon="import">导入</a-button>
39 48 </a-upload>
40 49 <a-dropdown v-if="selectedRowKeys.length > 0">
41 50 <a-menu slot="overlay" v-has="'locationType:deleteBatch'">
42 51 <a-menu-item key="1" @click="batchDel">
43   - <a-icon type="delete"/>
  52 + <a-icon type="delete" />
44 53 删除
45 54 </a-menu-item>
46 55 </a-menu>
47   - <a-button style="margin-left: 8px"> 批量操作
48   - <a-icon type="down"/>
  56 + <a-button style="margin-left: 8px">
  57 + 批量操作
  58 + <a-icon type="down" />
49 59 </a-button>
50 60 </a-dropdown>
51 61 </div>
... ... @@ -53,50 +63,47 @@
53 63 <!-- table区域-begin -->
54 64 <div>
55 65 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  66 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  67 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
58 68 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 69 </div>
60 70  
61 71 <a-table
62 72 ref="table"
63 73 size="middle"
64   - :scroll="{x:true}"
  74 + :scroll="{ x: true }"
65 75 bordered
66 76 rowKey="id"
67 77 :columns="columns"
68 78 :dataSource="dataSource"
69 79 :pagination="ipagination"
70 80 :loading="loading"
71   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  81 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
72 82 class="j-table-force-nowrap"
73   - @change="handleTableChange">
74   -
  83 + @change="handleTableChange"
  84 + >
75 85 <template slot="htmlSlot" slot-scope="text">
76 86 <div v-html="text"></div>
77 87 </template>
78 88 <template slot="imgSlot" slot-scope="text">
79 89 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
80   - <img v-else :src="getImgView(text)" height="25px" alt=""
81   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  90 + <img
  91 + v-else
  92 + :src="getImgView(text)"
  93 + height="25px"
  94 + alt=""
  95 + style="max-width:80px;font-size: 12px;font-style: italic;"
  96 + />
82 97 </template>
83 98 <template slot="fileSlot" slot-scope="text">
84 99 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
85   - <a-button
86   - v-else
87   - :ghost="true"
88   - type="primary"
89   - icon="download"
90   - size="small"
91   - @click="downloadFile(text)">
  100 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
92 101 下载
93 102 </a-button>
94 103 </template>
95 104  
96 105 <span slot="action" slot-scope="text, record">
97   - <a v-has="'locationType:edit'" @click="handleEdit(record)">编辑</a>
98   -
99   - <a-divider type="vertical"/>
  106 + <a v-has="'locationType:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
100 107 <a-dropdown>
101 108 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
102 109 <a-menu slot="overlay">
... ... @@ -111,7 +118,6 @@
111 118 </a-menu>
112 119 </a-dropdown>
113 120 </span>
114   -
115 121 </a-table>
116 122 </div>
117 123  
... ... @@ -120,10 +126,9 @@
120 126 </template>
121 127  
122 128 <script>
123   -
124 129 import '@/assets/less/TableExpand.less'
125   -import {mixinDevice} from '@/utils/mixin'
126   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  130 +import { mixinDevice } from '@/utils/mixin'
  131 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
127 132 import LocationTypeModal from './modules/LocationTypeModal'
128 133  
129 134 export default {
... ... @@ -142,114 +147,111 @@ export default {
142 147 dataIndex: '',
143 148 key: 'rowIndex',
144 149 width: 60,
145   - align: "center",
146   - customRender: function (t, r, index) {
147   - return parseInt(index) + 1;
  150 + align: 'center',
  151 + customRender: function(t, r, index) {
  152 + return parseInt(index) + 1
148 153 }
149 154 },
150 155 {
151 156 title: '编码',
152   - align: "center",
  157 + align: 'center',
153 158 dataIndex: 'code'
154 159 },
155 160 {
156 161 title: '名称',
157   - align: "center",
  162 + align: 'center',
158 163 dataIndex: 'name'
159 164 },
160 165 {
161 166 title: '库区',
162   - align: "center",
  167 + align: 'center',
163 168 dataIndex: 'zoneCode'
164 169 },
165 170 {
166 171 title: '长度',
167   - align: "center",
  172 + align: 'center',
168 173 dataIndex: 'length'
169 174 },
170 175 {
171 176 title: '宽度',
172   - align: "center",
  177 + align: 'center',
173 178 dataIndex: 'weight'
174 179 },
175 180 {
176 181 title: '高度',
177   - align: "center",
  182 + align: 'center',
178 183 dataIndex: 'height'
179 184 },
180 185 {
181 186 title: '最大承重',
182   - align: "center",
  187 + align: 'center',
183 188 dataIndex: 'maxWeight'
184 189 },
185 190 {
186 191 title: '创建人',
187   - align: "center",
  192 + align: 'center',
188 193 dataIndex: 'createBy'
189 194 },
190 195 {
191 196 title: '创建日期',
192   - align: "center",
  197 + align: 'center',
193 198 dataIndex: 'createTime'
194 199 },
195 200 {
196 201 title: '更新人',
197   - align: "center",
  202 + align: 'center',
198 203 dataIndex: 'updateBy'
199 204 },
200 205 {
201 206 title: '更新日期',
202   - align: "center",
  207 + align: 'center',
203 208 dataIndex: 'updateTime'
204 209 },
205 210 {
206 211 title: '操作',
207 212 dataIndex: 'action',
208   - align: "center",
209   - fixed: "right",
  213 + align: 'center',
  214 + fixed: 'right',
210 215 width: 147,
211   - scopedSlots: {customRender: 'action'}
  216 + scopedSlots: { customRender: 'action' }
212 217 }
213 218 ],
214 219 url: {
215   - list: "/config/locationType/list",
216   - delete: "/config/locationType/delete",
217   - deleteBatch: "/config/locationType/deleteBatch",
218   - exportXlsUrl: "/config/locationType/exportXls",
219   - importExcelUrl: "config/locationType/importExcel",
220   -
  220 + list: '/config/locationType/list',
  221 + delete: '/config/locationType/delete',
  222 + deleteBatch: '/config/locationType/deleteBatch',
  223 + exportXlsUrl: '/config/locationType/exportXls',
  224 + importExcelUrl: 'config/locationType/importExcel'
221 225 },
222 226 dictOptions: {},
223   - superFieldList: [],
  227 + superFieldList: []
224 228 }
225 229 },
226 230 created() {
227   - this.getSuperFieldList();
228   - this.loadFrom();
  231 + this.getSuperFieldList()
229 232 },
230 233 computed: {
231   - importExcelUrl: function () {
232   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
233   - },
  234 + importExcelUrl: function() {
  235 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  236 + }
234 237 },
235 238 methods: {
236   - initDictConfig() {
237   - },
  239 + initDictConfig() {},
238 240 getSuperFieldList() {
239   - let fieldList = [];
240   - fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''})
241   - fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''})
242   - fieldList.push({type: 'int', value: 'length', text: '长度', dictCode: ''})
243   - fieldList.push({type: 'int', value: 'weight', text: '宽度', dictCode: ''})
244   - fieldList.push({type: 'int', value: 'height', text: '高度', dictCode: ''})
245   - fieldList.push({type: 'int', value: 'maxWeight', text: '最大承重', dictCode: ''})
246   - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
247   - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
248   - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
249   - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  241 + let fieldList = []
  242 + fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' })
  243 + fieldList.push({ type: 'string', value: 'name', text: '名称', dictCode: '' })
  244 + fieldList.push({ type: 'int', value: 'length', text: '长度', dictCode: '' })
  245 + fieldList.push({ type: 'int', value: 'weight', text: '宽度', dictCode: '' })
  246 + fieldList.push({ type: 'int', value: 'height', text: '高度', dictCode: '' })
  247 + fieldList.push({ type: 'int', value: 'maxWeight', text: '最大承重', dictCode: '' })
  248 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  249 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  250 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  251 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
250 252 this.superFieldList = fieldList
251   - },
252   - },
  253 + }
  254 + }
253 255 }
254 256 </script>
255 257 <style scoped>
... ...
ant-design-vue-jeecg/src/views/system/config/MaterialAreaList.vue
... ... @@ -34,7 +34,7 @@
34 34 <div>
35 35 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
36 36 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
37   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  37 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
38 38 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
39 39 </div>
40 40  
... ...
ant-design-vue-jeecg/src/views/system/config/MaterialList.vue
... ... @@ -62,7 +62,7 @@
62 62 <div>
63 63 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
64 64 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
65   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  65 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
66 66 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
67 67 </div>
68 68  
... ...
ant-design-vue-jeecg/src/views/system/config/MaterialMultipleList.vue
... ... @@ -34,7 +34,7 @@
34 34 <div>
35 35 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
36 36 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
37   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  37 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
38 38 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
39 39 </div>
40 40  
... ...
ant-design-vue-jeecg/src/views/system/config/MaterialTypeList.vue
... ... @@ -54,7 +54,7 @@
54 54 <div>
55 55 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56 56 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  57 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
58 58 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 59 </div>
60 60  
... ...
ant-design-vue-jeecg/src/views/system/config/MaterialUnitList.vue
... ... @@ -61,7 +61,7 @@
61 61 <div>
62 62 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
63 63 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
64   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  64 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
65 65 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
66 66 </div>
67 67  
... ...
ant-design-vue-jeecg/src/views/system/config/MaterialWarningList.vue
... ... @@ -54,7 +54,7 @@
54 54 <div>
55 55 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56 56 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  57 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
58 58 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 59 </div>
60 60  
... ...
ant-design-vue-jeecg/src/views/system/config/ParameterConfigurationList.vue
... ... @@ -61,7 +61,7 @@
61 61 <div>
62 62 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
63 63 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
64   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  64 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
65 65 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
66 66 </div>
67 67  
... ...
ant-design-vue-jeecg/src/views/system/config/PortList.vue
... ... @@ -61,7 +61,7 @@
61 61 <div>
62 62 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
63 63 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
64   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  64 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
65 65 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
66 66 </div>
67 67  
... ...
ant-design-vue-jeecg/src/views/system/config/ReceiptTypeList.vue
... ... @@ -53,7 +53,7 @@
53 53 <div>
54 54 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
55 55 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
56   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  56 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
57 57 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
58 58 </div>
59 59  
... ...
ant-design-vue-jeecg/src/views/system/config/ShipmentTypeList.vue
... ... @@ -53,7 +53,7 @@
53 53 <div>
54 54 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
55 55 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
56   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  56 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
57 57 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
58 58 </div>
59 59  
... ...
ant-design-vue-jeecg/src/views/system/config/StrategyList.vue
... ... @@ -29,7 +29,7 @@
29 29 <!-- table区域-begin -->
30 30 <div>
31 31 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
32   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  32 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
33 33 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
34 34 </div>
35 35  
... ...
ant-design-vue-jeecg/src/views/system/config/SupplierList.vue
... ... @@ -61,7 +61,7 @@
61 61 <div>
62 62 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
63 63 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
64   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  64 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
65 65 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
66 66 </div>
67 67  
... ...
ant-design-vue-jeecg/src/views/system/config/SysUserWarehouseList.vue
... ... @@ -49,7 +49,7 @@
49 49 <div>
50 50 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
51 51 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
52   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  52 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
53 53 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
54 54 </div>
55 55  
... ...
ant-design-vue-jeecg/src/views/system/config/WarehouseList.vue
... ... @@ -56,7 +56,7 @@
56 56 <div>
57 57 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
58 58 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
59   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  59 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
60 60 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
61 61 </div>
62 62  
... ...
ant-design-vue-jeecg/src/views/system/config/ZoneList.vue
... ... @@ -20,7 +20,7 @@
20 20 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
21 21 <a @click="handleToggleSearch" style="margin-left: 8px">
22 22 {{ toggleSearchStatus ? '收起' : '展开' }}
23   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  23 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
24 24 </a>
25 25 </span>
26 26 </a-col>
... ... @@ -32,20 +32,30 @@
32 32 <!-- 操作按钮区域 -->
33 33 <div class="table-operator">
34 34 <a-button v-has="'zone:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
35   - <a-button v-has="'zone:export'" type="primary" icon="download" @click="handleExportXls('库区管理')">导出</a-button>
36   - <a-upload v-has="'zone:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
37   - @change="handleImportExcel">
  35 + <a-button v-has="'zone:export'" type="primary" icon="download" @click="handleExportXls('库区管理')"
  36 + >导出</a-button
  37 + >
  38 + <a-upload
  39 + v-has="'zone:import'"
  40 + name="file"
  41 + :showUploadList="false"
  42 + :multiple="false"
  43 + :headers="tokenHeader"
  44 + :action="importExcelUrl"
  45 + @change="handleImportExcel"
  46 + >
38 47 <a-button type="primary" icon="import">导入</a-button>
39 48 </a-upload>
40 49 <a-dropdown v-if="selectedRowKeys.length > 0">
41 50 <a-menu slot="overlay" v-has="'zone:deleteBatch'">
42 51 <a-menu-item key="1" @click="batchDel">
43   - <a-icon type="delete"/>
  52 + <a-icon type="delete" />
44 53 删除
45 54 </a-menu-item>
46 55 </a-menu>
47   - <a-button style="margin-left: 8px"> 批量操作
48   - <a-icon type="down"/>
  56 + <a-button style="margin-left: 8px">
  57 + 批量操作
  58 + <a-icon type="down" />
49 59 </a-button>
50 60 </a-dropdown>
51 61 </div>
... ... @@ -53,27 +63,27 @@
53 63 <!-- table区域-begin -->
54 64 <div>
55 65 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
56   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
57   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  66 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  67 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
58 68 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
59 69 </div>
60 70  
61 71 <a-table
62 72 ref="table"
63 73 size="middle"
64   - :scroll="{x:true}"
  74 + :scroll="{ x: true }"
65 75 bordered
66 76 rowKey="id"
67 77 :columns="columns"
68 78 :dataSource="dataSource"
69 79 :pagination="ipagination"
70 80 :loading="loading"
71   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  81 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
72 82 class="j-table-force-nowrap"
73   - @change="handleTableChange">
74   -
75   - <span slot="locationTypeCode" slot-scope="locationTypeCode">
76   - <a-tag :key="locationTypeCode" color=pink>
  83 + @change="handleTableChange"
  84 + >
  85 + <span slot="locationTypeCodes" slot-scope="locationTypeCodes" >
  86 + <a-tag v-for="locationTypeCode in locationTypeCodes" :key="locationTypeCode" color=pink>
77 87 {{ solutionLocationType(locationTypeCode) }}
78 88 </a-tag>
79 89 </span>
... ... @@ -83,26 +93,23 @@
83 93 </template>
84 94 <template slot="imgSlot" slot-scope="text">
85 95 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
86   - <img v-else :src="getImgView(text)" height="25px" alt=""
87   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  96 + <img
  97 + v-else
  98 + :src="getImgView(text)"
  99 + height="25px"
  100 + alt=""
  101 + style="max-width:80px;font-size: 12px;font-style: italic;"
  102 + />
88 103 </template>
89 104 <template slot="fileSlot" slot-scope="text">
90 105 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
91   - <a-button
92   - v-else
93   - :ghost="true"
94   - type="primary"
95   - icon="download"
96   - size="small"
97   - @click="downloadFile(text)">
  106 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
98 107 下载
99 108 </a-button>
100 109 </template>
101 110  
102 111 <span slot="action" slot-scope="text, record">
103   - <a v-has="'zone:edit'" @click="handleEdit(record)">编辑</a>
104   -
105   - <a-divider type="vertical"/>
  112 + <a v-has="'zone:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
106 113 <a-dropdown>
107 114 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
108 115 <a-menu slot="overlay">
... ... @@ -117,7 +124,6 @@
117 124 </a-menu>
118 125 </a-dropdown>
119 126 </span>
120   -
121 127 </a-table>
122 128 </div>
123 129  
... ... @@ -126,12 +132,11 @@
126 132 </template>
127 133  
128 134 <script>
129   -
130 135 import '@/assets/less/TableExpand.less'
131   -import {mixinDevice} from '@/utils/mixin'
132   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  136 +import { mixinDevice } from '@/utils/mixin'
  137 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
133 138 import ZoneModal from './modules/ZoneModal'
134   -import {getLocationTypeList} from '@/api/api'
  139 +import { getLocationTypeList } from '@/api/api'
135 140  
136 141 export default {
137 142 name: 'ZoneList',
... ... @@ -150,93 +155,93 @@ export default {
150 155 dataIndex: '',
151 156 key: 'rowIndex',
152 157 width: 60,
153   - align: "center",
154   - customRender: function (t, r, index) {
155   - return parseInt(index) + 1;
  158 + align: 'center',
  159 + customRender: function(t, r, index) {
  160 + return parseInt(index) + 1
156 161 }
157 162 },
158 163 {
159 164 title: '编码',
160   - align: "center",
  165 + align: 'center',
161 166 dataIndex: 'code'
162 167 },
163 168 {
164 169 title: '名称',
165   - align: "center",
  170 + align: 'center',
166 171 dataIndex: 'name'
167 172 },
168 173 {
169 174 title: '包含库位类型',
170   - align: "center",
171   - dataIndex: 'locationTypeCode',
  175 + align: 'center',
  176 + dataIndex: 'locationTypeCodes',
  177 + key: 'locationTypeCodes',
  178 + scopedSlots: {customRender: 'locationTypeCodes'}
172 179 },
173 180 {
174 181 title: '创建人',
175   - align: "center",
  182 + align: 'center',
176 183 dataIndex: 'createBy'
177 184 },
178 185 {
179 186 title: '创建日期',
180   - align: "center",
  187 + align: 'center',
181 188 dataIndex: 'createTime'
182 189 },
183 190 {
184 191 title: '更新人',
185   - align: "center",
  192 + align: 'center',
186 193 dataIndex: 'updateBy'
187 194 },
188 195 {
189 196 title: '更新日期',
190   - align: "center",
  197 + align: 'center',
191 198 dataIndex: 'updateTime'
192 199 },
193 200 {
194 201 title: '操作',
195 202 dataIndex: 'action',
196   - align: "center",
197   - fixed: "right",
  203 + align: 'center',
  204 + fixed: 'right',
198 205 width: 147,
199   - scopedSlots: {customRender: 'action'}
  206 + scopedSlots: { customRender: 'action' }
200 207 }
201 208 ],
202 209 url: {
203   - list: "/config/zone/list",
204   - delete: "/config/zone/delete",
205   - deleteBatch: "/config/zone/deleteBatch",
206   - exportXlsUrl: "/config/zone/exportXls",
207   - importExcelUrl: "config/zone/importExcel",
208   -
  210 + list: '/config/zone/list',
  211 + delete: '/config/zone/delete',
  212 + deleteBatch: '/config/zone/deleteBatch',
  213 + exportXlsUrl: '/config/zone/exportXls',
  214 + importExcelUrl: 'config/zone/importExcel'
209 215 },
210 216 dictOptions: {},
211   - superFieldList: [],
  217 + superFieldList: []
212 218 }
213 219 },
214 220 created() {
215   - this.getSuperFieldList();
216   - this.loadFrom();
  221 + this.getSuperFieldList()
  222 + this.loadFrom()
217 223 },
218 224 computed: {
219   - importExcelUrl: function () {
220   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
221   - },
  225 + importExcelUrl: function() {
  226 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  227 + }
222 228 },
223 229 methods: {
224   - initDictConfig() {
225   - },
  230 + initDictConfig() {},
226 231 getSuperFieldList() {
227   - let fieldList = [];
228   - fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''})
229   - fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''})
230   - fieldList.push({type: 'string', value: 'companyCode', text: '货主编码', dictCode: ''})
231   - fieldList.push({type: 'string', value: 'locationTypeCode', text: '库位类型', dictCode: ''})
232   - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
233   - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
234   - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
235   - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  232 + let fieldList = []
  233 + fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' })
  234 + fieldList.push({ type: 'string', value: 'name', text: '名称', dictCode: '' })
  235 + fieldList.push({ type: 'string', value: 'companyCode', text: '货主编码', dictCode: '' })
  236 + fieldList.push({ type: 'string', value: 'locationTypeCode', text: '库位类型', dictCode: '' })
  237 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  238 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  239 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  240 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
236 241 this.superFieldList = fieldList
237 242 },
238 243 loadFrom() {
239   - getLocationTypeList().then((res) => {
  244 + getLocationTypeList().then(res => {
240 245 if (res.success) {
241 246 this.locationTypeList = res.result
242 247 }
... ... @@ -244,8 +249,8 @@ export default {
244 249 },
245 250 solutionLocationType(value) {
246 251 var actions = []
247   - Object.keys(this.locationTypeList).some((key) => {
248   - if (this.locationTypeList[key].code == ('' + value)) {
  252 + Object.keys(this.locationTypeList).some(key => {
  253 + if (this.locationTypeList[key].code == '' + value) {
249 254 actions.push(this.locationTypeList[key].name)
250 255 return true
251 256 }
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ContainerCapacityForm.vue
... ... @@ -5,12 +5,15 @@
5 5 <a-row>
6 6 <a-col :span="24">
7 7 <a-form-model-item label="容器类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerTypeCode">
8   - <a-input v-model="model.containerTypeCode" placeholder="请输入容器类型"></a-input>
9   - </a-form-model-item>
10   - </a-col>
11   - <a-col :span="24">
12   - <a-form-model-item label="货主" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyCode">
13   - <a-input v-model="model.companyCode" placeholder="请输入货主"></a-input>
  8 + <a-select
  9 + show-search
  10 + placeholder="请选择容器类型"
  11 + option-filter-prop="children"
  12 + v-model="model.containerTypeCode">
  13 + <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code">
  14 + {{ item.name }}
  15 + </a-select-option>
  16 + </a-select>
14 17 </a-form-model-item>
15 18 </a-col>
16 19 <a-col :span="24">
... ... @@ -19,18 +22,8 @@
19 22 </a-form-model-item>
20 23 </a-col>
21 24 <a-col :span="24">
22   - <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
23   - <a-input v-model="model.materialName" placeholder="请输入物料名称"></a-input>
24   - </a-form-model-item>
25   - </a-col>
26   - <a-col :span="24">
27   - <a-form-model-item label="物料单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialUnit">
28   - <a-input v-model="model.materialUnit" placeholder="请输入物料单位"></a-input>
29   - </a-form-model-item>
30   - </a-col>
31   - <a-col :span="24">
32   - <a-form-model-item label="存放数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qty">
33   - <a-input-number v-model="model.qty" placeholder="请输入存放数量" style="width: 100%"/>
  25 + <a-form-model-item label="容量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qty">
  26 + <a-input-number v-model="model.qty" placeholder="请输入容量" style="width: 100%"/>
34 27 </a-form-model-item>
35 28 </a-col>
36 29 <a-col :span="24">
... ... @@ -48,6 +41,7 @@
48 41  
49 42 import {httpAction, getAction} from '@/api/manage'
50 43 import {validateDuplicateValue} from '@/utils/util'
  44 +import {getContainerTypeList} from '@/api/api'
51 45  
52 46 export default {
53 47 name: 'ContainerCapacityForm',
... ... @@ -63,6 +57,7 @@ export default {
63 57 data() {
64 58 return {
65 59 model: {},
  60 + containerTypeList: [],
66 61 labelCol: {
67 62 xs: {span: 24},
68 63 sm: {span: 5},
... ... @@ -80,10 +75,10 @@ export default {
80 75 {required: true, message: '请输入物料编码!'},
81 76 ],
82 77 qty: [
83   - {required: true, message: '请输入存放数量!'},
  78 + {required: true, message: '请输入量!'},
84 79 ],
85 80 enable: [
86   - {required: true, message: '请输入是否可用!'},
  81 + {required: true, message: '请选择是否可用!'},
87 82 ],
88 83 },
89 84 url: {
... ... @@ -101,8 +96,16 @@ export default {
101 96 created() {
102 97 //备份model原始值
103 98 this.modelDefault = JSON.parse(JSON.stringify(this.model));
  99 + this.loadFrom();
104 100 },
105 101 methods: {
  102 + loadFrom() {
  103 + getContainerTypeList().then((res) => {
  104 + if (res.success) {
  105 + this.containerTypeList = res.result
  106 + }
  107 + });
  108 + },
106 109 add() {
107 110 this.edit(this.modelDefault);
108 111 },
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ContainerForm.vue
... ... @@ -9,11 +9,9 @@
9 9 show-search
10 10 placeholder="请选择容器类型"
11 11 option-filter-prop="children"
12   -
13 12 v-model="model.containerTypeCode">
14   - <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code">{{
15   - item.name
16   - }}
  13 + <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code">
  14 + {{ item.name }}
17 15 </a-select-option>
18 16 </a-select>
19 17 </a-form-model-item>
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ContainerTypeForm.vue
... ... @@ -13,14 +13,26 @@
13 13 <a-input v-model="model.name" placeholder="请输入名称"></a-input>
14 14 </a-form-model-item>
15 15 </a-col>
16   - <a-col :span="24">
17   - <a-form-model-item label="货主编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyCode">
18   - <a-input v-model="model.companyCode" placeholder="请输入货主编码"></a-input>
  16 + <!-- <a-col :span="24">
  17 + <a-form-model-item label="货主" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyCode">
  18 + <a-select
  19 + show-search
  20 + placeholder="请选择货主编码"
  21 + option-filter-prop="children"
  22 + v-model="model.companyCode">
  23 + <a-select-option v-for="item in companyList" :key="item.name" :value="item.code">
  24 + {{ item.name }}
  25 + </a-select-option>
  26 + </a-select>
19 27 </a-form-model-item>
20   - </a-col>
  28 + </a-col> -->
21 29 <a-col :span="24">
22 30 <a-form-model-item label="绑定的库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationType">
23   - <a-input v-model="model.locationType" placeholder="请输入绑定的库位类型"></a-input>
  31 + <j-select-multiple
  32 + v-model="model.locationType"
  33 + :options="locationTypeOptions"
  34 + placeholder="请选择库位类型">
  35 + </j-select-multiple>
24 36 </a-form-model-item>
25 37 </a-col>
26 38 <a-col :span="24">
... ... @@ -57,7 +69,7 @@
57 69 <script>
58 70  
59 71 import {httpAction, getAction} from '@/api/manage'
60   -import {validateDuplicateValue} from '@/utils/util'
  72 +import {getLocationTypeList, getCompanyList} from '@/api/api'
61 73  
62 74 export default {
63 75 name: 'ContainerTypeForm',
... ... @@ -73,6 +85,8 @@ export default {
73 85 data() {
74 86 return {
75 87 model: {},
  88 + companyList: [],
  89 + locationTypeOptions: [],
76 90 labelCol: {
77 91 xs: {span: 24},
78 92 sm: {span: 5},
... ... @@ -90,7 +104,7 @@ export default {
90 104 {required: true, message: '请输入名称!'},
91 105 ],
92 106 locationType: [
93   - {required: true, message: '请输入库位类型!'},
  107 + {required: true, message: '请选择库位类型!'},
94 108 ],
95 109 },
96 110 url: {
... ... @@ -110,10 +124,26 @@ export default {
110 124 this.modelDefault = JSON.parse(JSON.stringify(this.model));
111 125 },
112 126 methods: {
  127 + loadFrom() {
  128 + getCompanyList().then((res) => {
  129 + if (res.success) {
  130 + this.companyList = res.result
  131 + }
  132 + });
  133 + getLocationTypeList().then((res) => {
  134 + if (res.success) {
  135 + this.locationTypeOptions = res.result.map((item, index, arr) => {
  136 + return {label: item.name, value: item.code}
  137 + })
  138 + }
  139 + });
  140 + },
113 141 add() {
  142 + this.loadFrom();
114 143 this.edit(this.modelDefault);
115 144 },
116 145 edit(record) {
  146 + this.loadFrom();
117 147 this.model = Object.assign({}, record);
118 148 this.visible = true;
119 149 },
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ZoneForm.vue
... ... @@ -15,7 +15,7 @@
15 15 </a-col>
16 16 <a-col :span="24">
17 17 <a-form-model-item label="包含库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationTypeCode">
18   - <a-input v-model="model.locationTypeCode" placeholder="请输入库位类型编码"></a-input>
  18 + <a-input v-model="model.locationTypeCode" placeholder="请输入包含库位类型编码,用英文逗号分割"></a-input>
19 19 </a-form-model-item>
20 20 </a-col>
21 21 </a-row>
... ...
ant-design-vue-jeecg/src/views/system/inventory/InventoryChildList.vue
... ... @@ -106,7 +106,7 @@
106 106 <!-- table区域-begin -->
107 107 <div>
108 108 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
109   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  109 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
110 110 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
111 111 </div>
112 112  
... ... @@ -143,12 +143,9 @@
143 143 下载
144 144 </a-button>
145 145 </template>
146   -
147 146 <span slot="action" slot-scope="text, record">
148 147 <a v-has="'inventoryChild:edit'" @click="handleEdit(record)">编辑</a>
149   -
150 148 </span>
151   -
152 149 </a-table>
153 150 </div>
154 151  
... ...
ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
... ... @@ -3,7 +3,9 @@
3 3 <!-- 操作按钮区域 -->
4 4 <div class="table-operator" v-if="mainId">
5 5 <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
6   - <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button>
  6 + <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')"
  7 + >导出</a-button
  8 + >
7 9 <a-upload
8 10 v-has="'inventoryDetail:import'"
9 11 name="file"
... ... @@ -11,18 +13,20 @@
11 13 :multiple="false"
12 14 :headers="tokenHeader"
13 15 :action="importExcelUrl"
14   - @change="handleImportExcel">
  16 + @change="handleImportExcel"
  17 + >
15 18 <a-button type="primary" icon="import">导入</a-button>
16 19 </a-upload>
17 20 <a-dropdown v-if="selectedRowKeys.length > 0">
18 21 <a-menu slot="overlay" v-has="'inventoryDetail:deleteBatch'">
19 22 <a-menu-item key="1" @click="batchDel">
20   - <a-icon type="delete"/>
  23 + <a-icon type="delete" />
21 24 删除
22 25 </a-menu-item>
23 26 </a-menu>
24   - <a-button style="margin-left: 8px"> 批量操作
25   - <a-icon type="down"/>
  27 + <a-button style="margin-left: 8px">
  28 + 批量操作
  29 + <a-icon type="down" />
26 30 </a-button>
27 31 </a-dropdown>
28 32 </div>
... ... @@ -30,8 +34,8 @@
30 34 <!-- table区域-begin -->
31 35 <div>
32 36 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
33   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
34   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  37 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  38 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
35 39 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
36 40 </div>
37 41  
... ... @@ -40,16 +44,16 @@
40 44 size="middle"
41 45 bordered
42 46 rowKey="id"
43   - :scroll="{x:true}"
  47 + :scroll="{ x: true }"
44 48 :columns="columns"
45 49 :dataSource="dataSource"
46 50 :pagination="ipagination"
47 51 :loading="loading"
48   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
49   - @change="handleTableChange">
50   -
  52 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
  53 + @change="handleTableChange"
  54 + >
51 55 <span slot="companyCode" slot-scope="companyCode">
52   - <a-tag :key="companyCode" color=blue>
  56 + <a-tag :key="companyCode" color="blue">
53 57 {{ solutionCompany(companyCode) }}
54 58 </a-tag>
55 59 </span>
... ... @@ -59,31 +63,27 @@
59 63 </template>
60 64 <template slot="imgSlot" slot-scope="text">
61 65 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
62   - <img v-else :src="getImgView(text)" height="25px" alt=""
63   - style="max-width:80px;font-size: 12px;font-style: italic;"/>
  66 + <img
  67 + v-else
  68 + :src="getImgView(text)"
  69 + height="25px"
  70 + alt=""
  71 + style="max-width:80px;font-size: 12px;font-style: italic;"
  72 + />
64 73 </template>
65 74 <template slot="fileSlot" slot-scope="text">
66 75 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
67   - <a-button
68   - v-else
69   - :ghost="true"
70   - type="primary"
71   - icon="download"
72   - size="small"
73   - @click="downloadFile(text)">
  76 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
74 77 下载
75 78 </a-button>
76 79 </template>
77 80  
78 81 <span slot="action" slot-scope="text, record">
79   - <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑</a>
80   - <a-divider type="vertical"/>
81   -
  82 + <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
82 83 <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
83 84 <a v-has="'inventoryDetail:delete'">删除</a>
84 85 </a-popconfirm>
85 86 </span>
86   -
87 87 </a-table>
88 88 </div>
89 89  
... ... @@ -92,15 +92,14 @@
92 92 </template>
93 93  
94 94 <script>
95   -
96   -import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  95 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
97 96 import InventoryDetailModal from './modules/InventoryDetailModal'
98   -import {getCompanyList} from '@/api/api'
  97 +import { getCompanyList } from '@/api/api'
99 98  
100 99 export default {
101   - name: "InventoryDetailList",
  100 + name: 'InventoryDetailList',
102 101 mixins: [JeecgListMixin],
103   - components: {InventoryDetailModal},
  102 + components: { InventoryDetailModal },
104 103 props: {
105 104 mainId: {
106 105 type: String,
... ... @@ -116,7 +115,7 @@ export default {
116 115 this.clearList()
117 116 } else {
118 117 this.queryParam['inventoryHeaderId'] = val
119   - this.loadData(1);
  118 + this.loadData(1)
120 119 }
121 120 }
122 121 }
... ... @@ -130,15 +129,15 @@ export default {
130 129 columns: [
131 130 {
132 131 title: '库存详情ID',
133   - align: "center",
  132 + align: 'center',
134 133 dataIndex: 'id'
135 134 },
136 135 {
137 136 title: '货主',
138   - align: "center",
  137 + align: 'center',
139 138 dataIndex: 'companyCode',
140 139 key: 'companyCode',
141   - scopedSlots: {customRender: 'companyCode'}
  140 + scopedSlots: { customRender: 'companyCode' }
142 141 },
143 142 // {
144 143 // title: '库区',
... ... @@ -147,130 +146,138 @@ export default {
147 146 // },
148 147 {
149 148 title: '容器编码',
150   - align: "center",
  149 + align: 'center',
151 150 dataIndex: 'containerCode'
152 151 },
153 152 {
154 153 title: '库位编码',
155   - align: "center",
  154 + align: 'center',
156 155 dataIndex: 'locationCode'
157 156 },
158 157 {
159 158 title: '物料编码',
160   - align: "center",
  159 + align: 'center',
161 160 dataIndex: 'materialCode'
162 161 },
163 162 {
164 163 title: '物料名称',
165   - align: "center",
  164 + align: 'center',
166 165 dataIndex: 'materialName'
167 166 },
168 167 {
169 168 title: '物料规格',
170   - align: "center",
  169 + align: 'center',
171 170 dataIndex: 'materialSpec'
172 171 },
173 172 {
174 173 title: '物料单位',
175   - align: "center",
  174 + align: 'center',
176 175 dataIndex: 'materialUnit'
177 176 },
178 177 {
179 178 title: '数量',
180   - align: "center",
  179 + align: 'center',
181 180 dataIndex: 'qty'
182 181 },
183 182 {
184 183 title: '任务锁定数量',
185   - align: "center",
  184 + align: 'center',
186 185 dataIndex: 'taskQty'
187 186 },
188 187 {
  188 + title: '托盘填充度',
  189 + align: 'center',
  190 + dataIndex: 'fillDensity',
  191 + customRender: text => {
  192 + return text == null ? '' : text + '%'
  193 + }
  194 + },
  195 + {
189 196 title: '库存状态',
190   - align: "center",
191   - dataIndex: 'inventoryStatus_dictText',
  197 + align: 'center',
  198 + dataIndex: 'inventoryStatus_dictText'
192 199 },
193 200 {
194 201 title: '批次',
195   - align: "center",
  202 + align: 'center',
196 203 dataIndex: 'batch'
197 204 },
198   - {
199   - title: '唯一号',
200   - align: "center",
201   - dataIndex: 'uniqueCode'
202   - },
  205 + // {
  206 + // title: '唯一号',
  207 + // align: "center",
  208 + // dataIndex: 'uniqueCode'
  209 + // },
203 210 {
204 211 title: '入库日期',
205   - align: "center",
  212 + align: 'center',
206 213 dataIndex: 'receiptDate'
207 214 },
208 215 {
209 216 title: '库龄(天)',
210   - align: "center",
  217 + align: 'center',
211 218 dataIndex: 'inventoryAge'
212 219 },
213 220 {
214 221 title: '创建人',
215   - align: "center",
  222 + align: 'center',
216 223 dataIndex: 'createBy'
217 224 },
218 225 {
219 226 title: '创建日期',
220   - align: "center",
  227 + align: 'center',
221 228 dataIndex: 'createTime'
222 229 },
223 230 {
224 231 title: '更新人',
225   - align: "center",
  232 + align: 'center',
226 233 dataIndex: 'updateBy'
227 234 },
228 235 {
229 236 title: '更新日期',
230   - align: "center",
  237 + align: 'center',
231 238 dataIndex: 'updateTime'
232 239 },
233 240 {
234 241 title: '操作',
235 242 dataIndex: 'action',
236   - align: "center",
237   - fixed: "right",
  243 + align: 'center',
  244 + fixed: 'right',
238 245 width: 147,
239   - scopedSlots: {customRender: 'action'},
  246 + scopedSlots: { customRender: 'action' }
240 247 }
241 248 ],
242 249 url: {
243   - list: "/inventory/inventoryHeader/listInventoryDetailByMainId",
244   - delete: "/inventory/inventoryHeader/deleteInventoryDetail",
245   - deleteBatch: "/inventory/inventoryHeader/deleteBatchInventoryDetail",
246   - exportXlsUrl: "/inventory/inventoryHeader/exportInventoryDetail",
247   - importUrl: "/inventory/inventoryHeader/importInventoryDetail",
  250 + list: '/inventory/inventoryHeader/listInventoryDetailByMainId',
  251 + delete: '/inventory/inventoryHeader/deleteInventoryDetail',
  252 + deleteBatch: '/inventory/inventoryHeader/deleteBatchInventoryDetail',
  253 + exportXlsUrl: '/inventory/inventoryHeader/exportInventoryDetail',
  254 + importUrl: '/inventory/inventoryHeader/importInventoryDetail'
248 255 },
249 256 dictOptions: {
250   - containerStatus: [],
  257 + containerStatus: []
251 258 }
252 259 }
253 260 },
254 261 created() {
255   - this.loadFrom();
  262 + this.loadFrom()
256 263 },
257 264 computed: {
258 265 importExcelUrl() {
259   - return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`;
  266 + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`
260 267 }
261 268 },
262 269 methods: {
263 270 loadFrom() {
264   - getCompanyList().then((res) => {
  271 + getCompanyList().then(res => {
265 272 if (res.success) {
266 273 this.companyList = res.result
267 274 }
268   - });
  275 + })
269 276 },
270 277 solutionCompany(value) {
271 278 var actions = []
272   - Object.keys(this.companyList).some((key) => {
273   - if (this.companyList[key].code == ('' + value)) {
  279 + Object.keys(this.companyList).some(key => {
  280 + if (this.companyList[key].code == '' + value) {
274 281 actions.push(this.companyList[key].name)
275 282 return true
276 283 }
... ... @@ -282,10 +289,9 @@ export default {
282 289 this.selectedRowKeys = []
283 290 this.ipagination.current = 1
284 291 }
285   -
286 292 }
287 293 }
288 294 </script>
289 295 <style scoped>
290   -@import '~@assets/less/common.less'
  296 +@import '~@assets/less/common.less';
291 297 </style>
... ...
ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue
... ... @@ -73,7 +73,7 @@
73 73 <div>
74 74 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
75 75 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
76   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  76 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
77 77 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
78 78 <!-- </div>-->
79 79  
... ...
ant-design-vue-jeecg/src/views/system/inventory/InventoryMaterialSummaryList.vue
... ... @@ -53,7 +53,7 @@
53 53 <!-- table区域-begin -->
54 54 <div>
55 55 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
56   -<!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  56 +<!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
57 57 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
58 58 <!-- </div>-->
59 59  
... ... @@ -113,7 +113,7 @@
113 113 </a-tab-pane>
114 114 </a-tabs>
115 115  
116   - <inventory-material-summary-modal ref="modalForm" @ok="modalFormOk"></inventory-material-summary-modal>
  116 + <!-- <inventory-material-summary-modal ref="modalForm" @ok="modalFormOk"></inventory-material-summary-modal> -->
117 117 </a-card>
118 118 </template>
119 119  
... ... @@ -213,8 +213,8 @@
213 213 methods: {
214 214 solutionZoneCode(value) {
215 215 var actions = []
216   - Object.keys(this.zoneList).some((key) => {
217   - if (this.zoneList[key].code == ('' + value)) {
  216 + Object.keys(this.zoneList).some(key => {
  217 + if (this.zoneList[key].code == '' + value) {
218 218 actions.push(this.zoneList[key].name)
219 219 return true
220 220 }
... ... @@ -255,9 +255,7 @@
255 255 },
256 256 initDictConfig(){
257 257 },
258   -
259 258 solutionCompany(value) {
260   - debugger
261 259 var actions = []
262 260 Object.keys(this.companyList).some((key) => {
263 261 if (this.companyList[key].code == ('' + value)) {
... ...
ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
... ... @@ -10,7 +10,6 @@
10 10 show-search
11 11 placeholder="请选择货主"
12 12 option-filter-prop="children"
13   -
14 13 v-model="queryParam.companyCode">
15 14 <a-select-option v-for="item in companyList" :key="item.name" :value="item.code">{{
16 15 item.name
... ... @@ -121,7 +120,7 @@
121 120 <div>
122 121 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
123 122 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
124   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  123 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
125 124 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
126 125 </div>
127 126  
... ... @@ -361,7 +360,7 @@ export default {
361 360 fieldList.push({type: 'string', value: 'materialName', text: '物料名称', dictCode: ''})
362 361 fieldList.push({type: 'string', value: 'materialSpec', text: '物料规格', dictCode: ''})
363 362 fieldList.push({type: 'string', value: 'materialUnit', text: '物料单位', dictCode: ''})
364   - fieldList.push({type: 'string', value: 'inventoryStatus', text: '库存状态', dictCode: ''})
  363 + fieldList.push({type: 'string', value: 'inventoryStatus', text: '库存状态', dictCode: 'inventory_status'})
365 364 fieldList.push({type: 'BigDecimal', value: 'qty', text: '数量', dictCode: ''})
366 365 fieldList.push({type: 'string', value: 'batch', text: '批次', dictCode: ''})
367 366 fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
... ...
ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
... ... @@ -47,7 +47,11 @@
47 47 </a-col>
48 48 <a-col :xl="6" :lg="7" :md="8" :sm="24">
49 49 <a-form-item label="库存状态">
50   - <j-dict-select-tag placeholder="请选择库存状态" v-model="queryParam.inventoryStatus" dictCode="inventory_status"/>
  50 + <j-dict-select-tag
  51 + placeholder="请选择库存状态"
  52 + v-model="queryParam.inventoryStatus"
  53 + dictCode="inventory_status"
  54 + />
51 55 </a-form-item>
52 56 </a-col>
53 57 <a-col :xl="6" :lg="7" :md="8" :sm="24">
... ... @@ -55,14 +59,19 @@
55 59 <a-input placeholder="请输入批次" v-model="queryParam.batch"></a-input>
56 60 </a-form-item>
57 61 </a-col>
58   - <a-col :xl="6" :lg="7" :md="8" :sm="24">
  62 + <!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">
59 63 <a-form-item label="唯一号">
60 64 <a-input placeholder="请输入唯一号" v-model="queryParam.uniqueCode"></a-input>
61 65 </a-form-item>
62   - </a-col>
  66 + </a-col> -->
63 67 <a-col :xl="6" :lg="7" :md="8" :sm="24">
64 68 <a-form-item label="入库日期">
65   - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择入库日期" v-model="queryParam.receiptDate"></j-date>
  69 + <j-date
  70 + :show-time="true"
  71 + date-format="YYYY-MM-DD HH:mm:ss"
  72 + placeholder="请选择入库日期"
  73 + v-model="queryParam.receiptDate"
  74 + ></j-date>
66 75 </a-form-item>
67 76 </a-col>
68 77 <a-col :xl="6" :lg="7" :md="8" :sm="24">
... ... @@ -77,7 +86,7 @@
77 86 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
78 87 <a @click="handleToggleSearch" style="margin-left: 8px">
79 88 {{ toggleSearchStatus ? '收起' : '展开' }}
80   - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  89 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
81 90 </a>
82 91 </span>
83 92 </a-col>
... ... @@ -89,70 +98,81 @@
89 98 <!-- 操作按钮区域 -->
90 99 <div class="table-operator">
91 100 <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
92   - <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button>
93   - <a-upload v-has="'inventoryDetail:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
  101 + <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')"
  102 + >导出</a-button
  103 + >
  104 + <a-upload
  105 + v-has="'inventoryDetail:import'"
  106 + name="file"
  107 + :showUploadList="false"
  108 + :multiple="false"
  109 + :headers="tokenHeader"
  110 + :action="importExcelUrl"
  111 + @change="handleImportExcel"
  112 + >
94 113 <a-button type="primary" icon="import">导入</a-button>
95 114 </a-upload>
96 115 <!-- 高级查询区域 -->
97   - <j-super-query :fieldList="superFieldList" v-has="'inventoryDetail:superSearch'" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
98   -<!-- <a-dropdown v-if="selectedRowKeys.length > 0">-->
99   -<!-- <a-menu slot="overlay">-->
100   -<!-- <a-menu-item v-has="'inventoryDetail:delete'" key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>-->
101   -<!-- </a-menu>-->
102   -<!-- <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>-->
103   -<!-- </a-dropdown>-->
  116 + <j-super-query
  117 + :fieldList="superFieldList"
  118 + v-has="'inventoryDetail:superSearch'"
  119 + ref="superQueryModal"
  120 + @handleSuperQuery="handleSuperQuery"
  121 + ></j-super-query>
  122 + <!-- <a-dropdown v-if="selectedRowKeys.length > 0">-->
  123 + <!-- <a-menu slot="overlay">-->
  124 + <!-- <a-menu-item v-has="'inventoryDetail:delete'" key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>-->
  125 + <!-- </a-menu>-->
  126 + <!-- <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>-->
  127 + <!-- </a-dropdown>-->
104 128 </div>
105 129  
106 130 <!-- table区域-begin -->
107 131 <div>
108   -<!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
109   -<!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
110   -<!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
111   -<!-- </div>-->
  132 + <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
  133 + <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
  134 + <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
  135 + <!-- </div>-->
112 136  
113 137 <a-table
114 138 ref="table"
115 139 size="middle"
116   - :scroll="{x:true}"
  140 + :scroll="{ x: true }"
117 141 bordered
118 142 rowKey="id"
119 143 :columns="columns"
120 144 :dataSource="dataSource"
121 145 :pagination="ipagination"
122 146 :loading="loading"
123   - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  147 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
124 148 class="j-table-force-nowrap"
125   - @change="handleTableChange">
126   -
  149 + @change="handleTableChange"
  150 + >
127 151 <template slot="htmlSlot" slot-scope="text">
128 152 <div v-html="text"></div>
129 153 </template>
130 154 <template slot="imgSlot" slot-scope="text">
131 155 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
132   - <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
  156 + <img
  157 + v-else
  158 + :src="getImgView(text)"
  159 + height="25px"
  160 + alt=""
  161 + style="max-width:80px;font-size: 12px;font-style: italic;"
  162 + />
133 163 </template>
134 164 <template slot="fileSlot" slot-scope="text">
135 165 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
136   - <a-button
137   - v-else
138   - :ghost="true"
139   - type="primary"
140   - icon="download"
141   - size="small"
142   - @click="downloadFile(text)">
  166 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
143 167 下载
144 168 </a-button>
145 169 </template>
146   -
147 170 <span slot="action" slot-scope="text, record">
148   - <a v-has="'inventoryDetail:edit'"@click="handleEdit(record)">编辑</a>
149   -
150   - <a-divider type="vertical" />
  171 + <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
151 172 <a-popconfirm v-has="'inventoryDetail:delete'" title="确定删除吗?" @confirm="() => handleDelete(record.id)">
152 173 <a>删除</a>
153 174 </a-popconfirm>
154 175 </span>
155   -
156 176 </a-table>
157 177 </div>
158 178  
... ... @@ -161,187 +181,192 @@
161 181 </template>
162 182  
163 183 <script>
  184 +import '@/assets/less/TableExpand.less'
  185 +import { mixinDevice } from '@/utils/mixin'
  186 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  187 +import SimpleInventoryDetailModal from './modules/SimpleInventoryDetailModal'
  188 +import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
164 189  
165   - import '@/assets/less/TableExpand.less'
166   - import { mixinDevice } from '@/utils/mixin'
167   - import { JeecgListMixin } from '@/mixins/JeecgListMixin'
168   - import SimpleInventoryDetailModal from './modules/SimpleInventoryDetailModal'
169   - import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
170   -
171   - export default {
172   - name: 'InventoryDetailList',
173   - mixins:[JeecgListMixin, mixinDevice],
174   - components: {
175   - SimpleInventoryDetailModal
176   - },
177   - data () {
178   - return {
179   - description: '库存详情管理页面',
180   - // 表头
181   - columns: [
182   - {
183   - title: '#',
184   - dataIndex: '',
185   - key:'rowIndex',
186   - width:60,
187   - align:"center",
188   - customRender:function (t,r,index) {
189   - return parseInt(index)+1;
190   - }
191   - },
192   - {
193   - title:'货主',
194   - align:"center",
195   - dataIndex: 'companyCode'
196   - },
197   - {
198   - title:'库区',
199   - align:"center",
200   - dataIndex: 'zoneCode'
201   - },
202   - {
203   - title:'容器编码',
204   - align:"center",
205   - dataIndex: 'containerCode'
206   - },
207   - {
208   - title:'库位编码',
209   - align:"center",
210   - dataIndex: 'locationCode'
211   - },
212   - {
213   - title:'物料编码',
214   - align:"center",
215   - dataIndex: 'materialCode'
216   - },
217   - {
218   - title:'物料名称',
219   - align:"center",
220   - dataIndex: 'materialName'
221   - },
222   - {
223   - title:'物料规格',
224   - align:"center",
225   - dataIndex: 'materialSpec'
226   - },
227   - {
228   - title:'物料单位',
229   - align:"center",
230   - dataIndex: 'materialUnit'
231   - },
232   - {
233   - title:'数量',
234   - align:"center",
235   - dataIndex: 'qty'
236   - },
237   - {
238   - title:'任务锁定数量',
239   - align:"center",
240   - dataIndex: 'taskQty'
241   - },
242   - {
243   - title:'库存状态',
244   - align:"center",
245   - dataIndex: 'inventoryStatus_dictText'
246   - },
247   - {
248   - title:'批次',
249   - align:"center",
250   - dataIndex: 'batch'
251   - },
252   - {
253   - title:'唯一号',
254   - align:"center",
255   - dataIndex: 'uniqueCode'
256   - },
257   - {
258   - title:'入库日期',
259   - align:"center",
260   - dataIndex: 'receiptDate'
261   - },
262   - {
263   - title:'库龄(天)',
264   - align:"center",
265   - dataIndex: 'inventoryAge'
266   - },
267   - {
268   - title:'创建人',
269   - align:"center",
270   - dataIndex: 'createBy'
271   - },
272   - {
273   - title:'创建日期',
274   - align:"center",
275   - dataIndex: 'createTime'
276   - },
277   - {
278   - title:'更新人',
279   - align:"center",
280   - dataIndex: 'updateBy'
281   - },
282   - {
283   - title:'更新日期',
284   - align:"center",
285   - dataIndex: 'updateTime'
286   - },
287   - {
288   - title: '操作',
289   - dataIndex: 'action',
290   - align:"center",
291   - fixed:"right",
292   - width:147,
293   - scopedSlots: { customRender: 'action' }
  190 +export default {
  191 + name: 'InventoryDetailList',
  192 + mixins: [JeecgListMixin, mixinDevice],
  193 + components: {
  194 + SimpleInventoryDetailModal
  195 + },
  196 + data() {
  197 + return {
  198 + description: '库存详情管理页面',
  199 + // 表头
  200 + columns: [
  201 + {
  202 + title: '#',
  203 + dataIndex: '',
  204 + key: 'rowIndex',
  205 + width: 60,
  206 + align: 'center',
  207 + customRender: function(t, r, index) {
  208 + return parseInt(index) + 1
294 209 }
295   - ],
296   - url: {
297   - list: "/inventory/inventoryDetail/list",
298   - delete: "/inventory/inventoryDetail/delete",
299   - deleteBatch: "/inventory/inventoryDetail/deleteBatch",
300   - exportXlsUrl: "/inventory/inventoryDetail/exportXls",
301   - importExcelUrl: "inventory/inventoryDetail/importExcel",
302   -
303 210 },
304   - dictOptions:{},
305   - superFieldList:[],
306   - }
307   - },
308   - created() {
309   - this.getSuperFieldList();
310   - },
311   - computed: {
312   - importExcelUrl: function(){
313   - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
314   - },
315   - },
316   - methods: {
317   - initDictConfig(){
  211 + {
  212 + title: '货主',
  213 + align: 'center',
  214 + dataIndex: 'companyCode'
  215 + },
  216 + {
  217 + title: '库区',
  218 + align: 'center',
  219 + dataIndex: 'zoneCode'
  220 + },
  221 + {
  222 + title: '容器编码',
  223 + align: 'center',
  224 + dataIndex: 'containerCode'
  225 + },
  226 + {
  227 + title: '库位编码',
  228 + align: 'center',
  229 + dataIndex: 'locationCode'
  230 + },
  231 + {
  232 + title: '物料编码',
  233 + align: 'center',
  234 + dataIndex: 'materialCode'
  235 + },
  236 + {
  237 + title: '物料名称',
  238 + align: 'center',
  239 + dataIndex: 'materialName'
  240 + },
  241 + {
  242 + title: '物料规格',
  243 + align: 'center',
  244 + dataIndex: 'materialSpec'
  245 + },
  246 + {
  247 + title: '物料单位',
  248 + align: 'center',
  249 + dataIndex: 'materialUnit'
  250 + },
  251 + {
  252 + title: '数量',
  253 + align: 'center',
  254 + dataIndex: 'qty'
  255 + },
  256 + {
  257 + title: '任务锁定数量',
  258 + align: 'center',
  259 + dataIndex: 'taskQty'
  260 + },
  261 + {
  262 + title: '托盘填充度',
  263 + align: 'center',
  264 + dataIndex: 'fillDensity',
  265 + customRender: text => {
  266 + return text == null ? '' : text + '%'
  267 + }
  268 + },
  269 + {
  270 + title: '库存状态',
  271 + align: 'center',
  272 + dataIndex: 'inventoryStatus_dictText'
  273 + },
  274 + {
  275 + title: '批次',
  276 + align: 'center',
  277 + dataIndex: 'batch'
  278 + },
  279 + // {
  280 + // title:'唯一号',
  281 + // align:"center",
  282 + // dataIndex: 'uniqueCode'
  283 + // },
  284 + {
  285 + title: '入库日期',
  286 + align: 'center',
  287 + dataIndex: 'receiptDate'
  288 + },
  289 + {
  290 + title: '库龄(天)',
  291 + align: 'center',
  292 + dataIndex: 'inventoryAge'
  293 + },
  294 + {
  295 + title: '创建人',
  296 + align: 'center',
  297 + dataIndex: 'createBy'
  298 + },
  299 + {
  300 + title: '创建日期',
  301 + align: 'center',
  302 + dataIndex: 'createTime'
  303 + },
  304 + {
  305 + title: '更新人',
  306 + align: 'center',
  307 + dataIndex: 'updateBy'
  308 + },
  309 + {
  310 + title: '更新日期',
  311 + align: 'center',
  312 + dataIndex: 'updateTime'
  313 + },
  314 + {
  315 + title: '操作',
  316 + dataIndex: 'action',
  317 + align: 'center',
  318 + fixed: 'right',
  319 + width: 147,
  320 + scopedSlots: { customRender: 'action' }
  321 + }
  322 + ],
  323 + url: {
  324 + list: '/inventory/inventoryDetail/list',
  325 + delete: '/inventory/inventoryDetail/delete',
  326 + deleteBatch: '/inventory/inventoryDetail/deleteBatch',
  327 + exportXlsUrl: '/inventory/inventoryDetail/exportXls',
  328 + importExcelUrl: 'inventory/inventoryDetail/importExcel'
318 329 },
319   - getSuperFieldList(){
320   - let fieldList=[];
321   - fieldList.push({type:'string',value:'companyCode',text:'货主',dictCode:''})
322   - fieldList.push({type:'string',value:'zoneCode',text:'库区',dictCode:''})
323   - fieldList.push({type:'string',value:'containerCode',text:'容器编码',dictCode:''})
324   - fieldList.push({type:'string',value:'locationCode',text:'库位编码',dictCode:''})
325   - fieldList.push({type:'string',value:'materialCode',text:'物料编码',dictCode:''})
326   - fieldList.push({type:'string',value:'materialName',text:'物料名称',dictCode:''})
327   - fieldList.push({type:'string',value:'materialSpec',text:'物料规格',dictCode:''})
328   - fieldList.push({type:'string',value:'materialUnit',text:'物料单位',dictCode:''})
329   - fieldList.push({type:'BigDecimal',value:'qty',text:'数量',dictCode:''})
330   - fieldList.push({type:'BigDecimal',value:'taskQty',text:'任务锁定数量',dictCode:''})
331   - fieldList.push({type:'string',value:'inventoryStatus',text:'库存状态',dictCode:'inventory_status'})
332   - fieldList.push({type:'string',value:'batch',text:'批次',dictCode:''})
333   - fieldList.push({type:'string',value:'uniqueCode',text:'唯一号',dictCode:''})
334   - fieldList.push({type:'datetime',value:'receiptDate',text:'入库日期'})
335   - fieldList.push({type:'int',value:'inventoryAge',text:'库龄(天)',dictCode:''})
336   - fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''})
337   - fieldList.push({type:'datetime',value:'createTime',text:'创建日期'})
338   - fieldList.push({type:'string',value:'updateBy',text:'更新人',dictCode:''})
339   - fieldList.push({type:'datetime',value:'updateTime',text:'更新日期'})
340   - this.superFieldList = fieldList
341   - }
  330 + dictOptions: {},
  331 + superFieldList: []
  332 + }
  333 + },
  334 + created() {
  335 + this.getSuperFieldList()
  336 + },
  337 + computed: {
  338 + importExcelUrl: function() {
  339 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  340 + }
  341 + },
  342 + methods: {
  343 + initDictConfig() {},
  344 + getSuperFieldList() {
  345 + let fieldList = []
  346 + fieldList.push({ type: 'string', value: 'companyCode', text: '货主', dictCode: '' })
  347 + fieldList.push({ type: 'string', value: 'zoneCode', text: '库区', dictCode: '' })
  348 + fieldList.push({ type: 'string', value: 'containerCode', text: '容器编码', dictCode: '' })
  349 + fieldList.push({ type: 'string', value: 'locationCode', text: '库位编码', dictCode: '' })
  350 + fieldList.push({ type: 'string', value: 'materialCode', text: '物料编码', dictCode: '' })
  351 + fieldList.push({ type: 'string', value: 'materialName', text: '物料名称', dictCode: '' })
  352 + fieldList.push({ type: 'string', value: 'materialSpec', text: '物料规格', dictCode: '' })
  353 + fieldList.push({ type: 'string', value: 'materialUnit', text: '物料单位', dictCode: '' })
  354 + fieldList.push({ type: 'BigDecimal', value: 'qty', text: '数量', dictCode: '' })
  355 + fieldList.push({ type: 'BigDecimal', value: 'taskQty', text: '任务锁定数量', dictCode: '' })
  356 + fieldList.push({ type: 'string', value: 'inventoryStatus', text: '库存状态', dictCode: 'inventory_status' })
  357 + fieldList.push({ type: 'string', value: 'batch', text: '批次', dictCode: '' })
  358 + // fieldList.push({type:'string',value:'uniqueCode',text:'唯一号',dictCode:''})
  359 + fieldList.push({ type: 'datetime', value: 'receiptDate', text: '入库日期' })
  360 + fieldList.push({ type: 'int', value: 'inventoryAge', text: '库龄(天)', dictCode: '' })
  361 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  362 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  363 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  364 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
  365 + this.superFieldList = fieldList
342 366 }
343 367 }
  368 +}
344 369 </script>
345 370 <style scoped>
346   - @import '~@assets/less/common.less';
  371 +@import '~@assets/less/common.less';
347 372 </style>
348 373 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/views/system/inventory/subTables/InventoryDetailSubTable.vue
... ... @@ -30,7 +30,7 @@
30 30 <div>
31 31 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
32 32 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
33   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  33 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
34 34 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
35 35 </div>
36 36  
... ...
ant-design-vue-jeecg/src/views/system/modules/DeptRoleInfo.vue
... ... @@ -38,7 +38,7 @@
38 38 <div>
39 39 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
40 40 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">
41   - {{ selectedRowKeys.length }}</a>
  41 + {{ selectedRowKeys.length }}</a>
42 42 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
43 43 </div>
44 44 <a-table
... ...
ant-design-vue-jeecg/src/views/system/monitor/ApkInfoList.vue 0 → 100644
  1 +<template>
  2 + <a-card :bordered="false">
  3 + <!-- 查询区域 -->
  4 + <div class="table-page-search-wrapper">
  5 + <a-form layout="inline" @keyup.enter.native="searchQuery">
  6 + <a-row :gutter="24">
  7 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  8 + <a-form-item label="应用名称">
  9 + <a-input placeholder="请输入应用名称" v-model="queryParam.pkgname"></a-input>
  10 + </a-form-item>
  11 + </a-col>
  12 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  13 + <a-form-item label="版本号">
  14 + <a-input placeholder="请输入版本号" v-model="queryParam.versioncode"></a-input>
  15 + </a-form-item>
  16 + </a-col>
  17 + <template v-if="toggleSearchStatus">
  18 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  19 + <a-form-item label="版本名称">
  20 + <a-input placeholder="请输入版本名称" v-model="queryParam.versionname"></a-input>
  21 + </a-form-item>
  22 + </a-col>
  23 + </template>
  24 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  25 + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
  26 + <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
  27 + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
  28 + <a @click="handleToggleSearch" style="margin-left: 8px">
  29 + {{ toggleSearchStatus ? '收起' : '展开' }}
  30 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  31 + </a>
  32 + </span>
  33 + </a-col>
  34 + </a-row>
  35 + </a-form>
  36 + </div>
  37 + <!-- 查询区域-END -->
  38 +
  39 + <!-- 操作按钮区域 -->
  40 + <div class="table-operator">
  41 + <a-upload
  42 + name="file"
  43 + :multiple="false"
  44 + :action="uploadAction"
  45 + :headers="tokenHeader"
  46 + :showUploadList="false"
  47 + :beforeUpload="beforeUpload"
  48 + @change="handleChange">
  49 + <a-button>
  50 + <a-icon type="upload"/>
  51 + 上传APK
  52 + </a-button>
  53 + </a-upload>
  54 + <!--<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
  55 + <a-button type="primary" icon="download" @click="handleExportXls('apk_info')">导出</a-button>
  56 + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
  57 + <a-button type="primary" icon="import">导入</a-button>
  58 + </a-upload>
  59 + <!-- 高级查询区域 -->
  60 + <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
  61 + <a-dropdown v-if="selectedRowKeys.length > 0">
  62 + <a-menu slot="overlay">
  63 + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
  64 + </a-menu>
  65 + <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
  66 + </a-dropdown>
  67 + </div>
  68 +
  69 + <!-- table区域-begin -->
  70 + <div>
  71 + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
  72 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  73 + <a style="margin-left: 24px" @click="onClearSelected">清空</a>
  74 + </div>
  75 +
  76 + <a-table
  77 + ref="table"
  78 + size="middle"
  79 + :scroll="{x:true}"
  80 + bordered
  81 + rowKey="id"
  82 + :columns="columns"
  83 + :dataSource="dataSource"
  84 + :pagination="ipagination"
  85 + :loading="loading"
  86 + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  87 + class="j-table-force-nowrap"
  88 + @change="handleTableChange">
  89 +
  90 + <template slot="htmlSlot" slot-scope="text">
  91 + <div v-html="text"></div>
  92 + </template>
  93 + <template slot="imgSlot" slot-scope="text">
  94 + <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
  95 + <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
  96 + </template>
  97 + <template slot="fileSlot" slot-scope="text">
  98 + <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
  99 + <a-button
  100 + v-else
  101 + :ghost="true"
  102 + type="primary"
  103 + icon="download"
  104 + size="small"
  105 + @click="downloadFile(text)">
  106 + 下载
  107 + </a-button>
  108 + </template>
  109 +
  110 + <span slot="action" slot-scope="text, record">
  111 + <!--<a @click="handleEdit(record)">编辑</a>-->
  112 +<a @click="handleDetail(record)">详情</a>
  113 + <a-divider type="vertical" />
  114 + <a-dropdown>
  115 + <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
  116 + <a-menu slot="overlay">
  117 + <a-menu-item>
  118 + <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
  119 + <a>删除</a>
  120 + </a-popconfirm>
  121 + </a-menu-item>
  122 + </a-menu>
  123 + </a-dropdown>
  124 + </span>
  125 +
  126 + </a-table>
  127 + </div>
  128 +
  129 + <apk-info-modal ref="modalForm" @ok="modalFormOk"></apk-info-modal>
  130 + </a-card>
  131 +</template>
  132 +
  133 +<script>
  134 + import {httpAction, getAction} from '@/api/manage'
  135 + import '@/assets/less/TableExpand.less'
  136 + import { mixinDevice } from '@/utils/mixin'
  137 + import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  138 + import ApkInfoModal from './modules/ApkInfoModal'
  139 +
  140 + export default {
  141 + name: 'ApkInfoList',
  142 + mixins:[JeecgListMixin, mixinDevice],
  143 + components: {
  144 + ApkInfoModal
  145 + },
  146 + data () {
  147 + return {
  148 + description: 'apk_info管理页面',
  149 + // 表头
  150 + columns: [
  151 + {
  152 + title: '#',
  153 + dataIndex: '',
  154 + key:'rowIndex',
  155 + width:60,
  156 + align:"center",
  157 + customRender:function (t,r,index) {
  158 + return parseInt(index)+1;
  159 + }
  160 + },
  161 + {
  162 + title:'应用名称',
  163 + align:"center",
  164 + dataIndex: 'pkgname'
  165 + },
  166 + {
  167 + title:'版本号',
  168 + align:"center",
  169 + dataIndex: 'versioncode'
  170 + },
  171 + {
  172 + title:'版本名称',
  173 + align:"center",
  174 + dataIndex: 'versionname'
  175 + },
  176 + {
  177 + title:'下载地址',
  178 + align:"center",
  179 + dataIndex: 'url',
  180 + customRender: function (t, r, index) {
  181 + return window._CONFIG['domianURL'] + t
  182 + }
  183 + },
  184 + {
  185 + title:'md5校验码',
  186 + align:"center",
  187 + dataIndex: 'md5'
  188 + },
  189 + {
  190 + title: '操作',
  191 + dataIndex: 'action',
  192 + align:"center",
  193 + fixed:"right",
  194 + width:147,
  195 + scopedSlots: { customRender: 'action' }
  196 + }
  197 + ],
  198 + url: {
  199 + list: "/monitor/apkinfo/list",
  200 + delete: "/monitor/apkinfo/delete",
  201 + deleteBatch: "/monitor/apkinfo/deleteBatch",
  202 + exportXlsUrl: "/monitor/apkinfo/exportXls",
  203 + importExcelUrl: "monitor/apkinfo/importExcel",
  204 + upload: "/sys/common/upload",
  205 + parse: "/monitor/apkinfo/parseApk"
  206 + },
  207 + dictOptions:{},
  208 + superFieldList:[],
  209 + }
  210 + },
  211 + created() {
  212 + this.getSuperFieldList();
  213 + },
  214 + computed: {
  215 + uploadAction() {
  216 + return window._CONFIG['domianURL'] + this.url.upload;
  217 + },
  218 + importExcelUrl: function(){
  219 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
  220 + },
  221 + },
  222 + methods: {
  223 + beforeUpload(file) {
  224 + var fileType = file.type;
  225 + if (fileType === 'image') {
  226 + if (fileType.indexOf('image') < 0) {
  227 + this.$message.warning('请上传图片');
  228 + return false;
  229 + }
  230 + } else if (fileType === 'file') {
  231 + if (fileType.indexOf('image') >= 0) {
  232 + this.$message.warning('请上传文件');
  233 + return false;
  234 + }
  235 + }
  236 + return true
  237 + },
  238 + handleChange(info) {
  239 + if (info.file.status === 'done') {
  240 + if (info.file.response.success) {
  241 + this.loadData()
  242 + this.$message.success(`${info.file.name} 上传成功!`);
  243 + this.$options.methods.parseApk(this, info.file.name)
  244 + } else {
  245 + this.$message.error(`${info.file.response.message}`);
  246 + }
  247 + } else if (info.file.status === 'error') {
  248 + this.$message.error(`${info.file.response.message}`);
  249 + }
  250 + },
  251 +
  252 + parseApk(parent, filename){
  253 + getAction(parent.url.parse, {filename: filename}).then((res) => {
  254 + if (res.success) {
  255 + parent.loadData()
  256 + }else{
  257 + alert("解析apk失败!")
  258 + }
  259 + })
  260 + },
  261 + initDictConfig(){
  262 + },
  263 + getSuperFieldList(){
  264 + let fieldList=[];
  265 + fieldList.push({type:'string',value:'pkgname',text:'应用名称',dictCode:''})
  266 + fieldList.push({type:'int',value:'versioncode',text:'版本号',dictCode:''})
  267 + fieldList.push({type:'string',value:'versionname',text:'版本名称',dictCode:''})
  268 + fieldList.push({type:'string',value:'url',text:'下载地址',dictCode:''})
  269 + fieldList.push({type:'string',value:'md5',text:'md5校验码',dictCode:''})
  270 + this.superFieldList = fieldList
  271 + }
  272 + }
  273 + }
  274 +</script>
  275 +<style scoped>
  276 + @import '~@assets/less/common.less';
  277 +</style>
0 278 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/views/system/monitor/locationStatus.vue
... ... @@ -8,13 +8,12 @@
8 8 <li>
9 9 <a-select
10 10 show-search
11   - placeholder="请选择库位类型"
  11 + placeholder="请选择库"
12 12 option-filter-prop="children"
13 13 v-model="zoneCode"
14 14 @change="refresh"
15 15 style="width: 200px">
16   - <a-select-option selected="0" id="zoneCode" v-for="item in locationTypeList" :key="item.name"
17   - :value="item.locationTypeCode">{{ item.name }}
  16 + <a-select-option selected="0" id="zoneCode" v-for="item in zoneList" :key="item.name" :value="item.code">{{ item.name }}
18 17 </a-select-option>
19 18 </a-select>
20 19 </li>
... ... @@ -84,7 +83,7 @@
84 83 <ul id="info_list">
85 84 <li><span>库位:</span><input type="text" id="code" disabled/></li>
86 85 <li><span>容器编码:</span><input type="text" id="containerCode" disabled/></li>
87   - <li><span>物料信息:<select id="material" style="width: auto"><option>无</option></select></span></li>
  86 + <li><span>物料信息:<select id="material" style="width: auto;"><option>无</option></select></span></li>
88 87 </ul>
89 88 </div>
90 89 </form>
... ... @@ -156,7 +155,7 @@ export default {
156 155 showPrise: false,
157 156 // loading:true,
158 157 zoneCode: '',
159   - locationTypeList: [],
  158 + zoneList: [],
160 159 model: {},
161 160 locationContent: ''
162 161 }
... ... @@ -172,23 +171,21 @@ export default {
172 171 },
173 172  
174 173 mounted() {
175   - //监听浏览器宽度的改变
176   - // window.onresize = function(){
177   - // _this.changeMargin();
178   - // _this.border()
179   - // };
180   - //
181   - // this.changeMargin();
182   - //
183   - // this.border()
  174 + // 监听浏览器宽度的改变
  175 + const resizeObserver = new ResizeObserver(entries => {
  176 + for (let entry of entries) {
  177 + this.changeMargin();
  178 + }
  179 + });
  180 + resizeObserver.observe(document.querySelector('.location'));
184 181 },
185 182 methods: {
186 183 loadFrom() {
187 184 getZoneList().then((res) => {
188 185 if (res.success) {
189   - this.locationTypeList = res.result;
190   - if (this.locationTypeList.length > 0) {
191   - this.zoneCode = this.locationTypeList[0].locationTypeCode;
  186 + this.zoneList = res.result;
  187 + if (this.zoneList.length > 0) {
  188 + this.zoneCode = this.zoneList[0].code;
192 189 let _this = this;
193 190 this.resetAjax(this.zoneCode);
194 191 }
... ... @@ -200,7 +197,7 @@ export default {
200 197 url: window._CONFIG['domianURL'] + prefix + "/getAllLocation",
201 198 type: "post",
202 199 data: {
203   - type: this.zoneCode
  200 + zoneCode: this.zoneCode
204 201 },
205 202 headers: {
206 203 "X-Access-Token": Vue.ls.get(ACCESS_TOKEN)
... ... @@ -227,7 +224,7 @@ export default {
227 224 }
228 225 }
229 226  
230   - let type = $("#zoneCode").val();
  227 + let zoneCode = $("#zoneCode").val();
231 228 this.resetAjax(this.zoneCode);
232 229 // this.show();
233 230 },
... ... @@ -252,7 +249,7 @@ export default {
252 249 });
253 250  
254 251 $("#zoneCode").change(function () {
255   - let type = $("#zoneCode").val();
  252 + let zoneCode = $("#zoneCode").val();
256 253 this.resetAjax(this.zoneCode);
257 254 });
258 255 },
... ... @@ -266,7 +263,10 @@ export default {
266 263  
267 264 //格子宽度
268 265 changeMargin() {
269   - let box_width = document.getElementById("location").offsetWidth;
  266 + let box_width = 0;
  267 + if (document.getElementById("location") != null) {
  268 + box_width = document.getElementById("location").offsetWidth;
  269 + }
270 270 box_width = box_width - 80;
271 271 let num = $("#editable-select").val();
272 272 let grid_width;
... ... @@ -535,13 +535,13 @@ export default {
535 535 },
536 536  
537 537 //页面初始化请求
538   - resetAjax(type) {
  538 + resetAjax(zoneCode) {
539 539 var _this = this;
540 540 $.ajax({
541 541 url: window._CONFIG['domianURL'] + prefix + "/getAllLocation",
542 542 type: "post",
543 543 data: {
544   - type: type
  544 + zoneCode: zoneCode
545 545 },
546 546 headers: {
547 547 "X-Access-Token": Vue.ls.get(ACCESS_TOKEN)
... ... @@ -575,7 +575,6 @@ export default {
575 575 $("#editable-num").append("<option value='" + i + "'>" + i + "</option>")
576 576 }
577 577 }
578   - _this.changeMargin();
579 578 _this.Search();
580 579 }
581 580 });
... ... @@ -596,7 +595,7 @@ export default {
596 595 let data;
597 596 this.seachZone();
598 597 if (index === "row") {
599   - data = {type: this.zoneCode, row: num};
  598 + data = {zoneCode: this.zoneCode, row: num};
600 599 $("#location").children().remove();
601 600 for (let i = grid_layer; i > 0; i--) {
602 601 $(".location").append("<br><span style='display: inline-block;text-align: right;width: 50px; margin-right: 10px;'>第" + i + "层</span>");
... ... @@ -604,10 +603,10 @@ export default {
604 603 $(".location").append("<img data-i=" + num + " data-j=" + j + " data-k=" + i + " class='grid' onmouseover='lays(this)' onmouseout='Mclose(this)' onclick='gridMsg(this)'>");
605 604 }
606 605 }
607   - this.changeMargin();
  606 + // this.changeMargin();
608 607 this.ajaxGrid(index, data);
609 608 } else if (index === "line") {
610   - data = {type: this.zoneCode, line: num};
  609 + data = {zoneCode: this.zoneCode, line: num};
611 610 $("#location").children().remove();
612 611 for (let k = grid_layer; k > 0; k--) {
613 612 $(".location").append("<br><span style='display: inline-block;text-align: right;width: 50px; margin-right: 10px;'>第" + k + "层</span>");
... ... @@ -615,10 +614,10 @@ export default {
615 614 $(".location").append("<img data-i=" + l + " data-j=" + num + " data-k=" + k + " class='grid' onmouseover='lays(this)' onmouseout='Mclose(this)' onclick='gridMsg(this)'>");
616 615 }
617 616 }
618   - this.changeMargin();
  617 + // this.changeMargin();
619 618 this.ajaxGrid(index, data);
620 619 } else if (index === "layer") {
621   - data = {type: this.zoneCode, layer: num};
  620 + data = {zoneCode: this.zoneCode, layer: num};
622 621 $("#location").children().remove();
623 622 for (let m = 1; m <= grid_row; m++) {
624 623 $(".location").append("<br><span style='display: inline-block;text-align: right;width: 50px; margin-right: 10px;'>第" + m + "行</span>");
... ... @@ -626,7 +625,7 @@ export default {
626 625 $(".location").append("<img data-i=" + m + " data-j=" + n + " data-k=" + num + " class='grid' onmouseover='lays(this)' onmouseout='Mclose(this)' onclick='gridMsg(this)'>");
627 626 }
628 627 }
629   - this.changeMargin();
  628 + // this.changeMargin();
630 629 this.ajaxGrid(index, data);
631 630 }
632 631 },
... ...
ant-design-vue-jeecg/src/views/system/monitor/modules/ApkInfoForm.vue 0 → 100644
  1 +<template>
  2 + <a-spin :spinning="confirmLoading">
  3 + <j-form-container :disabled="formDisabled">
  4 + <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
  5 + <a-row>
  6 + <a-col :span="24">
  7 + <a-form-model-item label="应用名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pkgname">
  8 + <a-input v-model="model.pkgname" placeholder="请输入应用名称" ></a-input>
  9 + </a-form-model-item>
  10 + </a-col>
  11 + <a-col :span="24">
  12 + <a-form-model-item label="版本号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="versioncode">
  13 + <a-input-number v-model="model.versioncode" placeholder="请输入版本号" style="width: 100%" />
  14 + </a-form-model-item>
  15 + </a-col>
  16 + <a-col :span="24">
  17 + <a-form-model-item label="版本名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="versionname">
  18 + <a-input v-model="model.versionname" placeholder="请输入版本名称" ></a-input>
  19 + </a-form-model-item>
  20 + </a-col>
  21 + <a-col :span="24">
  22 + <a-form-model-item label="下载地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="url">
  23 + <a-input v-model="model.url" placeholder="请输入下载地址" ></a-input>
  24 + </a-form-model-item>
  25 + </a-col>
  26 + <a-col :span="24">
  27 + <a-form-model-item label="md5校验码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="md5">
  28 + <a-input v-model="model.md5" placeholder="请输入md5校验码" ></a-input>
  29 + </a-form-model-item>
  30 + </a-col>
  31 + </a-row>
  32 + </a-form-model>
  33 + </j-form-container>
  34 + </a-spin>
  35 +</template>
  36 +
  37 +<script>
  38 +
  39 + import { httpAction, getAction } from '@/api/manage'
  40 + import { validateDuplicateValue } from '@/utils/util'
  41 +
  42 + export default {
  43 + name: 'ApkInfoForm',
  44 + components: {
  45 + },
  46 + props: {
  47 + //表单禁用
  48 + disabled: {
  49 + type: Boolean,
  50 + default: false,
  51 + required: false
  52 + }
  53 + },
  54 + data () {
  55 + return {
  56 + model:{
  57 + },
  58 + labelCol: {
  59 + xs: { span: 24 },
  60 + sm: { span: 5 },
  61 + },
  62 + wrapperCol: {
  63 + xs: { span: 24 },
  64 + sm: { span: 16 },
  65 + },
  66 + confirmLoading: false,
  67 +validatorRules: {
  68 + pkgname: [
  69 + { required: true, message: '请输入应用名称!'},
  70 + ],
  71 + versioncode: [
  72 + { required: true, message: '请输入版本号!'},
  73 + ],
  74 + versionname: [
  75 + { required: true, message: '请输入版本名称!'},
  76 + ],
  77 + url: [
  78 + { required: true, message: '请输入下载地址!'},
  79 + ],
  80 + md5: [
  81 + { required: true, message: '请输入md5校验码!'},
  82 + ],
  83 +},
  84 + url: {
  85 + add: "/monitor/apkinfo/add",
  86 + edit: "/monitor/apkinfo/edit",
  87 + queryById: "/monitor/apkinfo/queryById"
  88 + }
  89 + }
  90 + },
  91 + computed: {
  92 + formDisabled(){
  93 + return this.disabled
  94 + },
  95 + },
  96 + created () {
  97 + //备份model原始值
  98 + this.modelDefault = JSON.parse(JSON.stringify(this.model));
  99 + },
  100 + methods: {
  101 + add () {
  102 + this.edit(this.modelDefault);
  103 + },
  104 + edit (record) {
  105 + this.model = Object.assign({}, record);
  106 + this.visible = true;
  107 + },
  108 + submitForm () {
  109 + const that = this;
  110 + // 触发表单验证
  111 + this.$refs.form.validate(valid => {
  112 + if (valid) {
  113 + that.confirmLoading = true;
  114 + let httpurl = '';
  115 + let method = '';
  116 + if(!this.model.id){
  117 + httpurl+=this.url.add;
  118 + method = 'post';
  119 + }else{
  120 + httpurl+=this.url.edit;
  121 + method = 'put';
  122 + }
  123 + httpAction(httpurl,this.model,method).then((res)=>{
  124 + if(res.success){
  125 + that.$message.success(res.message);
  126 + that.$emit('ok');
  127 + }else{
  128 + that.$message.warning(res.message);
  129 + }
  130 + }).finally(() => {
  131 + that.confirmLoading = false;
  132 + })
  133 + }
  134 +
  135 + })
  136 + },
  137 + }
  138 + }
  139 +</script>
0 140 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/views/system/monitor/modules/ApkInfoModal.Style#Drawer.vue 0 → 100644
  1 +<template>
  2 + <a-drawer
  3 + :title="title"
  4 + :width="width"
  5 + placement="right"
  6 + :closable="false"
  7 + @close="close"
  8 + destroyOnClose
  9 + :visible="visible">
  10 + <apk-info-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></apk-info-form>
  11 + <div class="drawer-footer">
  12 + <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
  13 + <a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
  14 + </div>
  15 + </a-drawer>
  16 +</template>
  17 +
  18 +<script>
  19 +
  20 + import ApkInfoForm from './ApkInfoForm'
  21 +
  22 + export default {
  23 + name: 'ApkInfoModal',
  24 + components: {
  25 + ApkInfoForm
  26 + },
  27 + data () {
  28 + return {
  29 + title:"操作",
  30 + width:800,
  31 + visible: false,
  32 + disableSubmit: false
  33 + }
  34 + },
  35 + methods: {
  36 + add () {
  37 + this.visible=true
  38 + this.$nextTick(()=>{
  39 + this.$refs.realForm.add();
  40 + })
  41 + },
  42 + edit (record) {
  43 + this.visible=true
  44 + this.$nextTick(()=>{
  45 + this.$refs.realForm.edit(record);
  46 + });
  47 + },
  48 + close () {
  49 + this.$emit('close');
  50 + this.visible = false;
  51 + },
  52 + submitCallback(){
  53 + this.$emit('ok');
  54 + this.visible = false;
  55 + },
  56 + handleOk () {
  57 + this.$refs.realForm.submitForm();
  58 + },
  59 + handleCancel () {
  60 + this.close()
  61 + }
  62 + }
  63 + }
  64 +</script>
  65 +
  66 +<style lang="less" scoped>
  67 +/** Button按钮间距 */
  68 + .ant-btn {
  69 + margin-left: 30px;
  70 + margin-bottom: 30px;
  71 + float: right;
  72 + }
  73 + .drawer-footer{
  74 + position: absolute;
  75 + bottom: -8px;
  76 + width: 100%;
  77 + border-top: 1px solid #e8e8e8;
  78 + padding: 10px 16px;
  79 + text-align: right;
  80 + left: 0;
  81 + background: #fff;
  82 + border-radius: 0 0 2px 2px;
  83 + }
  84 +</style>
0 85 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/views/system/monitor/modules/ApkInfoModal.vue 0 → 100644
  1 +<template>
  2 + <j-modal
  3 + :title="title"
  4 + :width="width"
  5 + :visible="visible"
  6 + switchFullscreen
  7 + @ok="handleOk"
  8 + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
  9 + @cancel="handleCancel"
  10 + cancelText="关闭">
  11 + <apk-info-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></apk-info-form>
  12 + </j-modal>
  13 +</template>
  14 +
  15 +<script>
  16 +
  17 + import ApkInfoForm from './ApkInfoForm'
  18 + export default {
  19 + name: 'ApkInfoModal',
  20 + components: {
  21 + ApkInfoForm
  22 + },
  23 + data () {
  24 + return {
  25 + title:'',
  26 + width:800,
  27 + visible: false,
  28 + disableSubmit: false
  29 + }
  30 + },
  31 + methods: {
  32 + add () {
  33 + this.visible=true
  34 + this.$nextTick(()=>{
  35 + this.$refs.realForm.add();
  36 + })
  37 + },
  38 + edit (record) {
  39 + this.visible=true
  40 + this.$nextTick(()=>{
  41 + this.$refs.realForm.edit(record);
  42 + })
  43 + },
  44 + close () {
  45 + this.$emit('close');
  46 + this.visible = false;
  47 + },
  48 + handleOk () {
  49 + this.$refs.realForm.submitForm();
  50 + },
  51 + submitCallback(){
  52 + this.$emit('ok');
  53 + this.visible = false;
  54 + },
  55 + handleCancel () {
  56 + this.close()
  57 + }
  58 + }
  59 + }
  60 +</script>
0 61 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerDetailList.vue
... ... @@ -88,7 +88,7 @@
88 88 <div>
89 89 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
90 90 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
91   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  91 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
92 92 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
93 93 </div>
94 94  
... ...
ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
... ... @@ -106,6 +106,8 @@
106 106 </a-button>
107 107 </template>
108 108 <span slot="action" slot-scope="text, record">
  109 + <a v-if="record.status == 0 && record.taskType == 200" @click="selectFillPort(record)" v-has="'receiptContainerHeader:fill'">生成任务<a-divider type="vertical"/></a>
  110 + <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:fill'">生成任务<a-divider type="vertical"/></a>
109 111 <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>
110 112 <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>
111 113 <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
... ... @@ -124,6 +126,8 @@
124 126  
125 127 <receiptContainerHeader-modal ref="modalForm" @ok="modalFormOk"></receiptContainerHeader-modal>
126 128 <receiptContainerSelect-modal ref="modalForm2" @ok="modalFormOk"></receiptContainerSelect-modal>
  129 + <receiptContainerFillSelect-modal ref="modalForm3" @ok="modalFormOk"></receiptContainerFillSelect-modal>
  130 + <receiptContainerStatusSelect-modal ref="modalForm4" @ok="modalFormOk"></receiptContainerStatusSelect-modal>
127 131 </a-card>
128 132 </template>
129 133  
... ... @@ -137,6 +141,8 @@ import {initDictOptions, filterMultiDictText} from &#39;@/components/dict/JDictSelec
137 141 import '@/assets/less/TableExpand.less'
138 142 import {createReceiptTask} from '@/api/api'
139 143 import ReceiptContainerSelectModal from "./modules/ReceiptContainerSelectModal";
  144 +import ReceiptContainerFillSelectModal from "./modules/ReceiptContainerFillSelectModal";
  145 +import ReceiptContainerStatusSelectModal from "./modules/ReceiptContainerStatusSelectModal";
140 146  
141 147 export default {
142 148 name: "ReceiptContainerHeaderList",
... ... @@ -144,7 +150,9 @@ export default {
144 150 components: {
145 151 ReceiptContainerSelectModal,
146 152 ReceiptContainerDetailList,
147   - ReceiptContainerHeaderModal
  153 + ReceiptContainerHeaderModal,
  154 + ReceiptContainerStatusSelectModal,
  155 + ReceiptContainerFillSelectModal
148 156 },
149 157 data() {
150 158 return {
... ... @@ -291,6 +299,16 @@ export default {
291 299 this.$refs.modalForm2.title = "选择分拣入库口";
292 300 console.log("selectPort");
293 301 },
  302 + selectFillPort(record) {
  303 + this.$refs.modalForm3.edit(record);
  304 + this.$refs.modalForm3.title = "选择分拣入库口";
  305 + console.log("selectFillPort");
  306 + },
  307 + selectContainerStatus(record) {
  308 + this.$refs.modalForm4.edit(record);
  309 + this.$refs.modalForm4.title = "选择容器状态";
  310 + console.log("selectContainerStatus");
  311 + },
294 312 loadData(arg) {
295 313 if (!this.url.list) {
296 314 this.$message.error("请设置url.list属性!")
... ...
ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailList.vue
... ... @@ -32,7 +32,7 @@
32 32 <div>
33 33 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
34 34 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
35   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  35 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
36 36 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
37 37 </div>
38 38  
... ...
ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerFillSelectModal.vue 0 → 100644
  1 +<template>
  2 + <j-modal
  3 + :title="title"
  4 + :width="width"
  5 + :visible="visible"
  6 + :confirmLoading="confirmLoading"
  7 + switchFullscreen
  8 + @ok="handleOk"
  9 + @cancel="handleCancel"
  10 + cancelText="关闭">
  11 + <div class="table-page-search-wrapper">
  12 + <a-spin :spinning="confirmLoading">
  13 + <a-form-model ref="form" :model="model" :rules="validatorRules" layout="inline">
  14 + <a-row>
  15 + <a-col :span="24">
  16 + <a-form-model-item label="分拣入库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPort" style="margin-left:14px">
  17 + <a-select
  18 + show-search
  19 + placeholder="请选择分拣入库口"
  20 + option-filter-prop="children"
  21 + v-model="model.toPort">
  22 + <a-select-option v-for="item in portList" :key="item.name" :value="item.code">{{
  23 + item.name
  24 + }}
  25 + </a-select-option>
  26 + </a-select>
  27 + </a-form-model-item>
  28 + </a-col>
  29 + <a-col :span="24">
  30 + <a-form-model-item label="容器填充状态" prop="containerFillStatus">
  31 + <j-dict-select-tag
  32 + v-model="model.containerFillStatus"
  33 + type="radioButton"
  34 + title="容器填充状态"
  35 + dictCode="container_fill_status"
  36 + placeholder="请选择容器填充状态"
  37 + />
  38 + </a-form-model-item>
  39 + </a-col>
  40 + </a-row>
  41 + </a-form-model>
  42 + </a-spin>
  43 + </div>
  44 + </j-modal>
  45 +</template>
  46 +
  47 +<script>
  48 +
  49 +import {httpAction} from '@/api/manage'
  50 +import {validateDuplicateValue} from '@/utils/util'
  51 +import {createReceiptTask} from '@/api/api'
  52 +import {selectSupplePort} from '@/api/api'
  53 +
  54 +export default {
  55 + name: "ReceiptContainerSelectModal",
  56 + components: {},
  57 + props: {
  58 + mainId: {
  59 + type: String,
  60 + required: false,
  61 + default: ''
  62 + }
  63 + },
  64 + data() {
  65 + return {
  66 + title: "操作",
  67 + portList: [],
  68 + width: 500,
  69 + visible: false,
  70 + model: {},
  71 + labelCol: {
  72 + xs: {span: 24},
  73 + sm: {span: 5},
  74 + },
  75 + wrapperCol: {
  76 + xs: {span: 24},
  77 + sm: {span: 16},
  78 + },
  79 + confirmLoading: false,
  80 + validatorRules: {
  81 + toPort: [{ required: true, message: '请选择分拣口!' }],
  82 + containerFillStatus: [{ required: true, message: '请选择容器填充状态!' }]
  83 + },
  84 + url: {
  85 + }
  86 + }
  87 + },
  88 + created() {
  89 + //备份model原始值
  90 + this.modelDefault = JSON.parse(JSON.stringify(this.model));
  91 + },
  92 + methods: {
  93 + add() {
  94 + this.edit(this.modelDefault);
  95 + },
  96 + edit(record) {
  97 + console.log("edit");
  98 + this.getPortList(record);
  99 + },
  100 + close() {
  101 + this.$emit('close');
  102 + this.visible = false;
  103 + this.$refs.form.clearValidate();
  104 + },
  105 + handleOk() {
  106 + const that = this;
  107 + // 触发表单验证
  108 + this.$refs.form.validate(valid => {
  109 + if (valid) {
  110 + that.confirmLoading = true;
  111 + createReceiptTask(this.model).then((res) => {
  112 + if (res.success) {
  113 + that.$message.success(res.message);
  114 + that.$emit('ok');
  115 + } else {
  116 + that.$message.warning(res.message);
  117 + }
  118 + }).finally(() => {
  119 + that.confirmLoading = false;
  120 + that.close();
  121 + });
  122 + } else {
  123 + return false
  124 + }
  125 + })
  126 + },
  127 + handleCancel() {
  128 + this.close()
  129 + },
  130 + getPortList(record) {
  131 + selectSupplePort(record).then((res) => {
  132 + if (res.success) {
  133 + this.portList = res.result;
  134 + this.model = Object.assign({}, record);
  135 + this.visible = true;
  136 + } else {
  137 + this.$message.warning(res.message);
  138 + }
  139 + });
  140 + }
  141 + }
  142 +}
  143 +</script>
... ...
ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerSelectModal.vue
... ... @@ -8,26 +8,28 @@
8 8 @ok="handleOk"
9 9 @cancel="handleCancel"
10 10 cancelText="关闭">
11   - <a-spin :spinning="confirmLoading">
12   - <a-form-model ref="form" :model="model" :rules="validatorRules">
13   - <a-row>
14   - <a-col :span="24">
15   - <a-form-model-item label="分拣入库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPort">
16   - <a-select
17   - show-search
18   - placeholder="请选择分拣入库口"
19   - option-filter-prop="children"
20   - v-model="model.toPort">
21   - <a-select-option v-for="item in portList" :key="item.name" :value="item.code">{{
22   - item.name
23   - }}
24   - </a-select-option>
25   - </a-select>
26   - </a-form-model-item>
27   - </a-col>
28   - </a-row>
29   - </a-form-model>
30   - </a-spin>
  11 + <div class="table-page-search-wrapper">
  12 + <a-spin :spinning="confirmLoading">
  13 + <a-form-model ref="form" :model="model" :rules="validatorRules" >
  14 + <a-row>
  15 + <a-col :span="24">
  16 + <a-form-model-item label="分拣入库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPort" style="margin-left:14px">
  17 + <a-select
  18 + show-search
  19 + placeholder="请选择分拣入库口"
  20 + option-filter-prop="children"
  21 + v-model="model.toPort">
  22 + <a-select-option v-for="item in portList" :key="item.name" :value="item.code">{{
  23 + item.name
  24 + }}
  25 + </a-select-option>
  26 + </a-select>
  27 + </a-form-model-item>
  28 + </a-col>
  29 + </a-row>
  30 + </a-form-model>
  31 + </a-spin>
  32 + </div>
31 33 </j-modal>
32 34 </template>
33 35  
... ... @@ -63,13 +65,12 @@ export default {
63 65 xs: {span: 24},
64 66 sm: {span: 16},
65 67 },
66   -
67 68 confirmLoading: false,
68   - validatorRules: {},
  69 + validatorRules: {
  70 + toPort: [{ required: true, message: '请选择分拣口!' }]
  71 + },
69 72 url: {
70   - createTask: "/shipment/shipmentContainerHeader/createShipmentTask",
71 73 }
72   -
73 74 }
74 75 },
75 76 created() {
... ... @@ -125,7 +126,6 @@ export default {
125 126 }
126 127 });
127 128 }
128   -
129 129 }
130 130 }
131 131 </script>
... ...
ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerStatusSelectModal.vue 0 → 100644
  1 +<template>
  2 + <j-modal
  3 + :title="title"
  4 + :width="width"
  5 + :visible="visible"
  6 + :confirmLoading="confirmLoading"
  7 + switchFullscreen
  8 + @ok="handleOk"
  9 + @cancel="handleCancel"
  10 + cancelText="关闭"
  11 + >
  12 + <div class="table-page-search-wrapper">
  13 + <a-spin :spinning="confirmLoading">
  14 + <a-form-model ref="form" :model="model" :rules="validatorRules" layout="inline">
  15 + <a-row>
  16 + <a-col :span="24">
  17 + <a-form-model-item label="容器填充状态" prop="containerFillStatus">
  18 + <j-dict-select-tag
  19 + v-model="model.containerFillStatus"
  20 + type="radioButton"
  21 + title="容器填充状态"
  22 + dictCode="container_fill_status"
  23 + placeholder="请选择容器填充状态"
  24 + />
  25 + </a-form-model-item>
  26 + </a-col>
  27 + </a-row>
  28 + </a-form-model>
  29 + </a-spin>
  30 + </div>
  31 + </j-modal>
  32 +</template>
  33 +
  34 +<script>
  35 +import { httpAction } from '@/api/manage'
  36 +import { validateDuplicateValue } from '@/utils/util'
  37 +import { createReceiptTask } from '@/api/api'
  38 +
  39 +export default {
  40 + name: 'ReceiptContainerSelectModal',
  41 + components: {},
  42 + props: {
  43 + mainId: {
  44 + type: String,
  45 + required: false,
  46 + default: ''
  47 + }
  48 + },
  49 + data() {
  50 + return {
  51 + title: '操作',
  52 + width: 500,
  53 + visible: false,
  54 + model: {},
  55 + labelCol: {
  56 + xs: { span: 24 },
  57 + sm: { span: 5 }
  58 + },
  59 + wrapperCol: {
  60 + xs: { span: 24 },
  61 + sm: { span: 16 }
  62 + },
  63 +
  64 + confirmLoading: false,
  65 + validatorRules: {
  66 + containerFillStatus: [{ required: true, message: '请选择容器填充状态!' }]
  67 + },
  68 + url: {
  69 + }
  70 + }
  71 + },
  72 + created() {
  73 + //备份model原始值
  74 + this.modelDefault = JSON.parse(JSON.stringify(this.model))
  75 + },
  76 + methods: {
  77 + add() {
  78 + this.edit(this.modelDefault)
  79 + },
  80 + edit(record) {
  81 + this.getPortList(record)
  82 + },
  83 + close() {
  84 + this.$emit('close')
  85 + this.visible = false
  86 + this.$refs.form.clearValidate()
  87 + },
  88 + handleOk() {
  89 + const that = this
  90 + // 触发表单验证
  91 + this.$refs.form.validate(valid => {
  92 + if (valid) {
  93 + that.confirmLoading = true
  94 + createReceiptTask(this.model)
  95 + .then(res => {
  96 + if (res.success) {
  97 + that.$message.success(res.message)
  98 + that.$emit('ok')
  99 + } else {
  100 + that.$message.warning(res.message)
  101 + }
  102 + })
  103 + .finally(() => {
  104 + that.confirmLoading = false
  105 + that.close()
  106 + })
  107 + } else {
  108 + return false
  109 + }
  110 + })
  111 + },
  112 + handleCancel() {
  113 + this.close()
  114 + },
  115 + getPortList(record) {
  116 + this.model = Object.assign({}, record)
  117 + this.visible = true
  118 + }
  119 + }
  120 +}
  121 +</script>
... ...
ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiveModal.vue
... ... @@ -7,46 +7,38 @@
7 7 switchFullscreen
8 8 @ok="handleOk"
9 9 @cancel="handleCancel"
10   - cancelText="关闭">
  10 + cancelText="关闭"
  11 + >
11 12 <a-spin :spinning="confirmLoading">
12 13 <a-form-model ref="form" :model="model" :rules="validatorRules">
13 14 <a-row>
14 15 <a-col :span="24">
15 16 <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
16   - <a-input v-model="model.containerCode" placeholder="请输入容器编码" style="width: 100%"/>
  17 + <a-input v-model="model.containerCode" placeholder="请输入容器编码" style="width: 100%" />
17 18 </a-form-model-item>
18 19 </a-col>
19 20 </a-row>
20 21 </a-form-model>
21 22 </a-spin>
22   -
23   - <a-table
24   - ref="table"
25   - rowKey="id"
26   - size="middle"
27   - :columns="columns"
28   - :dataSource="dataSource"
29   - :pagination="false">
30   - <span slot="action" slot-scope="text, record">
31   - <a-input-number
32   - placeholder=""
33   - v-model="record.taskQty"
34   - :value="text"
35   - />
36   - </span>
  23 + <a-table ref="table" rowKey="id" size="middle" :columns="columns" :dataSource="dataSource" :pagination="false">
  24 + <span slot="action" slot-scope="text, record">
  25 + <a-input-number placeholder="" v-model="record.taskQty" :value="text" />
  26 + </span>
37 27 </a-table>
38 28 </j-modal>
39 29 </template>
40 30  
41 31 <script>
42   -
43   -import {httpAction} from '@/api/manage'
44   -import {validateDuplicateValue} from '@/utils/util'
45   -import {searchMaterialByCode} from '@/api/api'
46   -import {listReceiveByReceiptId} from '@/api/api'
  32 +import { httpAction } from '@/api/manage'
  33 +import { mixinDevice } from '@/utils/mixin'
  34 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  35 +import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
  36 +import { validateDuplicateValue } from '@/utils/util'
  37 +import { searchMaterialByCode } from '@/api/api'
  38 +import { listReceiveByReceiptId } from '@/api/api'
47 39  
48 40 export default {
49   - name: "ReceiveModal",
  41 + name: 'ReceiveModal',
50 42 components: {},
51 43 props: {
52 44 mainId: {
... ... @@ -57,7 +49,7 @@ export default {
57 49 },
58 50 data() {
59 51 return {
60   - title: "操作",
  52 + title: '操作',
61 53 width: 800,
62 54 visible: false,
63 55 materialList: {},
... ... @@ -65,126 +57,137 @@ export default {
65 57 dataSource: [],
66 58 model: {},
67 59 labelCol: {
68   - xs: {span: 24},
69   - sm: {span: 5},
  60 + xs: { span: 24 },
  61 + sm: { span: 5 }
70 62 },
71 63 wrapperCol: {
72   - xs: {span: 24},
73   - sm: {span: 16},
  64 + xs: { span: 24 },
  65 + sm: { span: 16 }
74 66 },
75 67 columns: [
76 68 {
77 69 title: '物料编码',
78 70 dataIndex: 'materialCode',
79   - align: "center",
80   - width: 124,
81   - key: 'materialCode'
  71 + align: 'center',
  72 + width: 124
82 73 },
83 74 {
84 75 title: '物料名称',
85 76 dataIndex: 'materialName',
86   - width: 96,
87   - key: 'materialName'
  77 + align: 'center',
  78 + width: 96
88 79 },
89 80 {
90 81 title: '物料规格',
91 82 dataIndex: 'materialSpec',
92   - width: 96,
93   - key: 'materialSpec'
  83 + align: 'center',
  84 + width: 96
94 85 },
95 86 {
96 87 title: '库存状态',
97 88 dataIndex: 'inventoryStatus',
98   - key: 'inventoryStatus',
99   - width: 96,
  89 + align: 'center',
  90 + width: 96
100 91 },
101 92 {
102 93 title: '批次',
103 94 dataIndex: 'batch',
104   - key: 'batch'
  95 + align: 'center'
105 96 },
106 97 {
107 98 title: '可收数量',
108 99 dataIndex: 'qty',
109   - width: 80,
110   - key: 'qty'
  100 + align: 'center',
  101 + width: 80
111 102 },
112 103 {
113 104 title: '收货数量',
114 105 dataIndex: 'action',
115   - scopedSlots: {customRender: 'action'},
  106 + align: 'center',
  107 + key: 'action',
  108 + scopedSlots: { customRender: 'action' }
116 109 }
117 110 ],
118 111 confirmLoading: false,
119 112 validatorRules: {
120   - containerCode: [
121   - {required: true, message: '请输入容器编码!'},
122   - ],
  113 + containerCode: [{ required: true, message: '请输入容器编码!' }]
123 114 },
  115 + dictOptions: {},
  116 + superFieldList:[],
124 117 url: {
125   - add: "/receipt/receiveHeader/receiving",
126   - edit: "/receipt/receiptHeader/editReceiptDetail",
  118 + add: '/receipt/receiveHeader/receiving',
  119 + edit: '/receipt/receiptHeader/editReceiptDetail'
127 120 }
128   -
129 121 }
130 122 },
131 123 created() {
132 124 //备份model原始值
133   - console.log("created");
134   - this.modelDefault = JSON.parse(JSON.stringify(this.model));
135   - this.searchReceive();
  125 + // this.searchReceive()
  126 + this.getSuperFieldList()
  127 + // this.modelDefault = JSON.parse(JSON.stringify(this.model))
136 128 },
137 129 methods: {
138   - add() {
139   - console.log("add 1");
140   - this.edit(this.modelDefault);
141   - this.model.inventoryStatus = "good";
142   - },
  130 + // add() {
  131 + // this.edit(this.modelDefault)
  132 + // this.model.inventoryStatus = 'good'
  133 + // },
143 134 edit(record) {
144   - console.log("edit 1");
145   - this.model = Object.assign({}, record);
146   - this.visible = true;
147   - this.searchReceive();
148   - },
149   - show(record) {
150   - this.model = Object.assign({}, record);
151   - this.visible = true;
  135 + this.model = Object.assign({}, record)
  136 + this.visible = true
  137 + this.searchReceive()
152 138 },
  139 + // show(record) {
  140 + // this.model = Object.assign({}, record)
  141 + // this.visible = true
  142 + // },
153 143 close() {
154   - this.$emit('close');
155   - this.visible = false;
156   - this.$refs.form.clearValidate();
  144 + this.$emit('close')
  145 + this.visible = false
  146 + this.$refs.form.clearValidate()
157 147 },
158 148 searchReceive() {
159   - const that = this;
160   - that.querySource.receiptCode = that.model.code;
161   - listReceiveByReceiptId(that.querySource).then((res) => {
162   - that.dataSource = res.result;
  149 + const that = this
  150 + that.querySource.receiptCode = that.model.code
  151 + listReceiveByReceiptId(that.querySource).then(res => {
  152 + that.dataSource = res.result
163 153 })
164 154 },
  155 + initDictConfig() {},
  156 + getSuperFieldList() {
  157 + let fieldList = []
  158 + fieldList.push({type:'string',value:'inventoryStatus',text:'库存状态',dictCode:'inventory_status'})
  159 + this.superFieldList = fieldList
  160 + },
165 161 handleOk() {
166   - console.log("handleOk");
167   - const that = this;
  162 + console.log('handleOk')
  163 + const that = this
168 164 // 触发表单验证
169 165 this.$refs.form.validate(valid => {
170 166 if (valid) {
171   - that.confirmLoading = true;
172   - let httpurl = '';
173   - let method = '';
174   - httpurl += this.url.add;
175   - method = 'post';
176   - this.dataSource[0].containerCode = this.model.containerCode;
177   - httpAction(httpurl, this.dataSource, method).then((res) => {
178   - if (res.success) {
179   - that.$message.success(res.message);
180   - that.$emit('ok');
181   - } else {
182   - that.$message.warning(res.message);
183   - }
184   - }).finally(() => {
185   - that.confirmLoading = false;
186   - that.close();
187   - })
  167 + that.confirmLoading = true
  168 + let httpurl = ''
  169 + let method = ''
  170 + httpurl += this.url.add
  171 + method = 'post'
  172 + if (this.dataSource[0] == null) {
  173 + that.confirmLoading = false
  174 + that.$message.warning('入库单没有详情!')
  175 + return
  176 + }
  177 + this.dataSource[0].containerCode = this.model.containerCode
  178 + httpAction(httpurl, this.dataSource, method)
  179 + .then(res => {
  180 + if (res.success) {
  181 + that.$message.success(res.message)
  182 + that.$emit('ok')
  183 + that.close()
  184 + } else {
  185 + that.$message.warning(res.message)
  186 + }
  187 + })
  188 + .finally(() => {
  189 + that.confirmLoading = false
  190 + })
188 191 } else {
189 192 return false
190 193 }
... ... @@ -192,9 +195,7 @@ export default {
192 195 },
193 196 handleCancel() {
194 197 this.close()
195   - },
196   -
197   -
  198 + }
198 199 }
199 200 }
200 201 </script>
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerDetailList.vue
... ... @@ -88,7 +88,7 @@
88 88 <div>
89 89 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
90 90 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
91   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  91 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
92 92 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
93 93 </div>
94 94  
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
... ... @@ -80,7 +80,7 @@
80 80 <div>
81 81 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
82 82 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
83   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  83 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
84 84 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
85 85 <!-- </div>-->
86 86  
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailHistoryList.vue
... ... @@ -30,7 +30,7 @@
30 30 <div>
31 31 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
32 32 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
33   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  33 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
34 34 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
35 35 </div>
36 36  
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailList.vue
... ... @@ -31,7 +31,7 @@
31 31 <div>
32 32 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
33 33 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
34   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  34 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
35 35 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
36 36 </div>
37 37  
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue
... ... @@ -112,7 +112,7 @@
112 112 <div>
113 113 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
114 114 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
115   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  115 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
116 116 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
117 117 </div>
118 118  
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue
... ... @@ -120,7 +120,7 @@
120 120 <div>
121 121 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
122 122 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
123   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  123 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
124 124 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
125 125 <!-- </div>-->
126 126  
... ...
ant-design-vue-jeecg/src/views/system/stocktaking/CycleCountHeaderList.vue
... ... @@ -27,7 +27,7 @@
27 27 <!-- table区域-begin -->
28 28 <div>
29 29 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
30   - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  30 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
31 31 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
32 32 </div>
33 33  
... ...
ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue
... ... @@ -64,7 +64,7 @@
64 64 <!-- table区域-begin -->
65 65 <div>
66 66 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
67   -<!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  67 +<!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
68 68 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
69 69 <!-- </div>-->
70 70  
... ...
ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue
... ... @@ -94,7 +94,7 @@
94 94 <div>
95 95 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
96 96 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
97   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  97 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
98 98 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
99 99 <!-- </div>-->
100 100  
... ...
ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
... ... @@ -88,7 +88,7 @@
88 88 <div>
89 89 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
90 90 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
91   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  91 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
92 92 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
93 93 <!-- </div>-->
94 94  
... ... @@ -188,8 +188,8 @@ export default {
188 188 description: '任务表管理页面',
189 189 zoneList: [],
190 190 isorter: {
191   - column: 'status',
192   - order: 'asc',
  191 + column: 'id',
  192 + order: 'desc',
193 193 },
194 194 // 表头
195 195 columns: [
... ...
ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
... ... @@ -88,7 +88,7 @@
88 88 <div>
89 89 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
90 90 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
91   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  91 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
92 92 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
93 93 <!-- </div>-->
94 94  
... ...
ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
... ... @@ -30,7 +30,7 @@
30 30 <div>
31 31 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
32 32 <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
33   - style="font-weight: 600">{{ selectedRowKeys.length }}</a>
  33 + style="font-weight: 600">{{ selectedRowKeys.length }}</a>
34 34 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
35 35 </div>
36 36  
... ...
ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue
... ... @@ -94,7 +94,7 @@
94 94 <div>
95 95 <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
96 96 <!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
97   -<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a>项-->
  97 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
98 98 <!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
99 99 <!-- </div>-->
100 100  
... ...
ant-design-vue-jeecg/src/views/user/LoginSelectTenant.vue
... ... @@ -100,12 +100,12 @@ export default {
100 100 let multi_depart = loginResult.multi_depart
101 101 //0:无部门 1:一个部门 2:多个部门
102 102 if (multi_depart == 0) {
103   - this.$notification.warn({
104   - message: '提示',
105   - description: `您尚未归属部门,请确认账号信息`,
106   - duration: 3
107   - });
108   - this.isMultiDepart = false
  103 + // this.$notification.warn({
  104 + // message: '提示',
  105 + // description: `您尚未归属部门,请确认账号信息`,
  106 + // duration: 3
  107 + // });
  108 + // this.isMultiDepart = false
109 109 } else if (multi_depart == 2) {
110 110 this.visible = true
111 111 this.isMultiDepart = true
... ...
huaheng-wms-core/pom.xml
... ... @@ -42,12 +42,18 @@
42 42 <groupId>org.redisson</groupId>
43 43 <artifactId>redisson</artifactId>
44 44 </dependency>
  45 +
45 46 <dependency>
46 47 <groupId>cn.monitor4all</groupId>
47 48 <artifactId>log-record-starter</artifactId>
48 49 <version>1.3.1</version>
49 50 </dependency>
50 51 <dependency>
  52 + <groupId>org.bouncycastle</groupId>
  53 + <artifactId>bcprov-jdk15on</artifactId>
  54 + <version>1.69</version>
  55 + </dependency>
  56 + <dependency>
51 57 <groupId>com.googlecode.log4jdbc</groupId>
52 58 <artifactId>log4jdbc</artifactId>
53 59 <version>1.2</version>
... ... @@ -122,6 +128,12 @@
122 128 <artifactId>spring-boot-configuration-processor</artifactId>
123 129 <optional>true</optional>
124 130 </dependency>
  131 + <!--获取apk信息-->
  132 + <dependency>
  133 + <groupId>net.dongliu</groupId>
  134 + <artifactId>apk-parser</artifactId>
  135 + <version>2.5.3</version>
  136 + </dependency>
125 137 </dependencies>
126 138  
127 139 <build>
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/CommonController.java
... ... @@ -245,7 +245,7 @@ public class CommonController {
245 245 File file = new File(filePath);
246 246 if (!file.exists()) {
247 247 response.setStatus(404);
248   - throw new RuntimeException("文件[" + imgPath + "]不存在..");
  248 + return;
249 249 }
250 250 response.setContentType("application/force-download");// 设置强制下载不打开
251 251 response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes("UTF-8"), "iso-8859-1"));
... ... @@ -277,7 +277,6 @@ public class CommonController {
277 277 }
278 278 }
279 279 }
280   -
281 280 }
282 281  
283 282 // /**
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java
... ... @@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
31 31 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
32 32 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
33 33 import com.baomidou.mybatisplus.core.metadata.IPage;
  34 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
34 35 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
35 36  
36 37 import lombok.extern.slf4j.Slf4j;
... ... @@ -198,7 +199,7 @@ public class SysAnnouncementSendController {
198 199 String anntId = json.getString("anntId");
199 200 LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
200 201 String userId = sysUser.getId().toString();
201   - LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = new UpdateWrapper().lambda();
  202 + LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = Wrappers.lambdaUpdate();
202 203 updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG);
203 204 updateWrapper.set(SysAnnouncementSend::getReadTime, new Date());
204 205 updateWrapper.last("where annt_id ='" + anntId + "' and user_id ='" + userId + "'");
... ... @@ -237,7 +238,7 @@ public class SysAnnouncementSendController {
237 238 Result<SysAnnouncementSend> result = new Result<SysAnnouncementSend>();
238 239 LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
239 240 String userId = sysUser.getId().toString();
240   - LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = new UpdateWrapper().lambda();
  241 + LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = Wrappers.lambdaUpdate();
241 242 updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG);
242 243 updateWrapper.set(SysAnnouncementSend::getReadTime, new Date());
243 244 updateWrapper.last("where user_id ='" + userId + "'");
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
... ... @@ -48,6 +48,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
48 48 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
49 49 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
50 50 import com.baomidou.mybatisplus.core.metadata.IPage;
  51 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
51 52 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
52 53 import com.google.common.base.Joiner;
53 54  
... ... @@ -507,7 +508,7 @@ public class SysBaseApiImpl implements ISysBaseAPI {
507 508 if (announcement != null) {
508 509 LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
509 510 String userId = sysUser.getId().toString();
510   - LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = new UpdateWrapper().lambda();
  511 + LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = Wrappers.lambdaUpdate();
511 512 updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG);
512 513 updateWrapper.set(SysAnnouncementSend::getReadTime, new Date());
513 514 updateWrapper.last("where annt_id ='" + announcement.getId() + "' and user_id ='" + userId + "'");
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java
... ... @@ -42,7 +42,6 @@ public class AcsController extends HuahengBaseController {
42 42 // @ApiLogger(apiName = "API接口第三方Token校验测试", from = "TEST")
43 43 @ResponseBody
44 44 @PostMapping(value = "/testTokenCheck")
45   - @OperationLog(bizType = "'物料追踪'", tag = "'入库完成'", bizId = "#paramMap.get('bizId')", extra = "#jsonString", msg = "'测试操作日志'", recordReturnValue = true)
46 45 public Result<?> testTokenCheck(@RequestBody Map<String, String> paramMap, HttpServletRequest request) {
47 46 return Result.ok();
48 47 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
... ... @@ -126,7 +126,7 @@ public class MesServiceImpl implements IMesService {
126 126 receive.setContainerCode(containerCode);
127 127 receive.setMaterialCode(materialCode);
128 128 receive.setMaterialName(receiptDetail.getMaterialName());
129   - receive.setMateiralSpec(receiptDetail.getMaterialSpec());
  129 + receive.setMaterialSpec(receiptDetail.getMaterialSpec());
130 130 receive.setMaterialUnit(receiptDetail.getMaterialUnit());
131 131 receive.setInventoryStatus(receiptDetail.getInventoryStatus());
132 132 receive.setQty(receiptDetail.getQty());
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/controller/MobileController.java
1 1 package org.jeecg.modules.wms.api.mobile.controller;
2 2  
  3 +import com.alibaba.fastjson.JSONException;
3 4 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 5 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5 6 import io.swagger.annotations.Api;
  7 +import io.swagger.annotations.ApiOperation;
6 8 import org.jeecg.common.api.vo.Result;
7 9 import org.jeecg.modules.system.entity.SysDictItem;
8 10 import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl;
9 11 import org.jeecg.modules.wms.api.mobile.entity.TvTaskVo;
  12 +import org.jeecg.modules.wms.monitor.apkinfo.entity.ApkInfo;
  13 +import org.jeecg.modules.wms.monitor.apkinfo.service.IApkInfoService;
10 14 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
11 15 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
12 16 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl;
13 17 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl;
14 18 import org.jeecg.utils.StringUtils;
15 19 import org.jeecg.utils.constant.QuantityConstant;
16   -import org.springframework.web.bind.annotation.GetMapping;
17   -import org.springframework.web.bind.annotation.RequestMapping;
18   -import org.springframework.web.bind.annotation.RestController;
  20 +import org.springframework.beans.factory.annotation.Value;
  21 +import org.springframework.web.bind.annotation.*;
19 22  
20 23 import javax.annotation.Resource;
21   -import java.util.ArrayList;
22   -import java.util.Arrays;
23   -import java.util.HashMap;
24   -import java.util.List;
  24 +import java.util.*;
25 25  
26 26 /**
27 27 */
... ... @@ -30,6 +30,12 @@ import java.util.List;
30 30 @RequestMapping("/api/mobile")
31 31 public class MobileController {
32 32  
  33 + @Value(value = "${server.servlet.context-path}")
  34 + private String ctx;
  35 +
  36 + @Resource
  37 + private IApkInfoService apkInfoService;
  38 +
33 39 @Resource
34 40 private TaskHeaderServiceImpl taskHeaderService;
35 41  
... ... @@ -87,4 +93,31 @@ public class MobileController {
87 93 }
88 94 return Result.OK("", list);
89 95 }
  96 +
  97 + @PostMapping("/getUpdateApkInfo")
  98 + @ApiOperation("获取apk更新信息")
  99 + public Result getUpdateApkInfo(@RequestBody Map<String, String> param) {
  100 + System.out.println("getUpdateApkInfo pkgName:" + param.get("pkgName"));
  101 + String pkgName = param.get("pkgName");
  102 + String versionCode = param.get("versionCode");
  103 + if (StringUtils.isEmpty(pkgName)) {
  104 + throw new JSONException("pkgName不能为空");
  105 + }
  106 + if (StringUtils.isEmpty(versionCode)) {
  107 + throw new JSONException("versionCode不能为空");
  108 + }
  109 +
  110 + LambdaQueryWrapper<ApkInfo> query = Wrappers.lambdaQuery();
  111 + query.eq(ApkInfo::getPkgname, pkgName)
  112 + .orderByDesc(ApkInfo::getVersioncode)
  113 + .last(" limit 1");
  114 + ApkInfo apkInfo = apkInfoService.getOne(query);
  115 + if (apkInfo == null ){
  116 + return Result.error("服务器上找不到安装包:" + pkgName);
  117 + }else if(apkInfo.getVersioncode() <= Integer.parseInt(versionCode)){
  118 + return Result.ok("当前已经是最新版本");
  119 + }
  120 + apkInfo.setUrl(ctx + apkInfo.getUrl());
  121 + return Result.ok(apkInfo);
  122 + }
90 123 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/service/impl/MobileService.java
... ... @@ -169,7 +169,7 @@ public class MobileService implements IMobileService {
169 169 v.setMaterialCode(d.getMaterialCode());
170 170 v.setMaterialName(d.getMaterialName());
171 171 v.setBatch(d.getBatch());
172   - v.setMateiralSpec(d.getMaterialSpec());
  172 + v.setMaterialSpec(d.getMaterialSpec());
173 173 v.setMaterialUnit(d.getMaterialUnit());
174 174 v.setContainerCode(bean.getContainerCode());
175 175 receiveList.add(v);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
... ... @@ -166,19 +166,16 @@ public class WcsServiceImpl implements WcsService {
166 166 if (StringUtils.isEmpty(locationCode)) {
167 167 return Result.error("分配库位时,没有库位可分配");
168 168 }
169   - boolean success =
170   - locationService.updateStatusByOriginStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  169 + boolean success = locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
171 170 if (!success) {
172 171 throw new JeecgBootException("分配库位时,更新库位状态失败");
173 172 }
174 173 if (StringUtils.isNotEmpty(taskHeader.getToLocationCode()) && !locationCode.equals(taskHeader.getToLocationCode())) {
175   - success = locationService.updateStatusByOriginStatus(taskHeader.getToLocationCode(), QuantityConstant.STATUS_LOCATION_EMPTY,
176   - QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
  174 + success = locationService.updateStatus(taskHeader.getToLocationCode(), QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
177 175 if (!success) {
178 176 throw new JeecgBootException("分配库位时,更新之前分配的库位状态失败");
179 177 }
180 178 }
181   -
182 179 List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
183 180 if (taskType == QuantityConstant.TASK_TYPE_WHOLERECEIPT || taskType == QuantityConstant.TASK_TYPE_EMPTYRECEIPT) {
184 181 for (TaskDetail taskDetail : taskDetailList) {
... ... @@ -594,8 +591,7 @@ public class WcsServiceImpl implements WcsService {
594 591 }
595 592 }
596 593 // 6. 锁定WMS分配的库位
597   - boolean success =
598   - locationService.updateStatusByOriginStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  594 + boolean success = locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
599 595 if (!success) {
600 596 throw new JeecgBootException("重入处理失败, 更新库位状态失败");
601 597 }
... ... @@ -686,7 +682,8 @@ public class WcsServiceImpl implements WcsService {
686 682 @Transactional(rollbackFor = Exception.class)
687 683 public Result manyEmptyOut(String zoneCode, String port, String warehouseCode) {
688 684 LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
689   - containerLambdaQueryWrapper.eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_MANY).eq(Container::getWarehouseCode, warehouseCode);
  685 + containerLambdaQueryWrapper.eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY)
  686 + .eq(Container::getFillStatus, QuantityConstant.STATUS_CONTAINER_FILL_MANY).eq(Container::getWarehouseCode, warehouseCode);
690 687 List<Container> containerList = containerService.list(containerLambdaQueryWrapper);
691 688 List<Container> removeContainerList = new ArrayList<>();
692 689 if (containerList != null && containerList.size() > 0) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/controller/ContainerController.java
... ... @@ -94,11 +94,10 @@ public class ContainerController extends JeecgController&lt;Container, IContainerSe
94 94 @ApiOperation(value = "容器管理-添加", notes = "容器管理-添加")
95 95 @PostMapping(value = "/add")
96 96 @RequiresPermissions("container:add")
97   - public Result<String> add(@RequestBody Container container, HttpServletRequest req) {
  97 + public Result<?> add(@RequestBody Container container, HttpServletRequest req) {
98 98 HuahengJwtUtil.setWarehouseCode(req, container);
99 99 int number = Integer.parseInt(container.getUserdef1());
100   - Result result = containerService.batchAddContainers(container, number);
101   - return result;
  100 + return containerService.batchAddContainers(container, number);
102 101 }
103 102  
104 103 /**
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java
... ... @@ -65,10 +65,10 @@ public class Container implements Serializable {
65 65 @Dict(dicCode = "container_status")
66 66 @ApiModelProperty(value = "容器状态")
67 67 private String status;
68   - /** 上次容器状态 */
69   - @Excel(name = "上次容器状态", width = 15)
70   - @ApiModelProperty(value = "上次容器状态")
71   - private String lastStatus;
  68 + @Excel(name = "填充状态", width = 15, dicCode = "fill_status")
  69 + @Dict(dicCode = "fill_status")
  70 + @ApiModelProperty(value = "填充状态")
  71 + private String fillStatus;
72 72 /** 备用字段1 */
73 73 @Excel(name = "备用字段1", width = 15)
74 74 @ApiModelProperty(value = "备用字段1")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java
... ... @@ -19,22 +19,12 @@ public interface IContainerService extends IService&lt;Container&gt; {
19 19  
20 20 Container getContainerByCode(String containCode, String warehouseCode);
21 21  
22   - boolean updateStatus(String containerCode, String status, String wareohuseCode);
23   -
24   - /**
25   - * 更新容器状态status,条件是originStatus,如果originStatus条件不满足,那么返回false
26   - * @param containerCode
27   - * @param status
28   - * @param originStatus
29   - * @param wareohuseCode
30   - * @return
31   - */
32   - boolean updateStatusByOriginStatus(String containerCode, String status, String originStatus, String wareohuseCode);
33   -
34   - boolean restoreContainer(String containerCode, String wareohuseCode);
  22 + boolean updateStatus(String containerCode, String status, String warehouseCode);
35 23  
36 24 boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode);
37 25  
  26 + boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String fillStatus, String warehouseCode);
  27 +
38 28 // 创建零时容器
39 29 Container createLSContainer(String warehouseCode);
40 30  
... ... @@ -45,5 +35,5 @@ public interface IContainerService extends IService&lt;Container&gt; {
45 35 */
46 36 boolean havaLocationCodeByContainer(String locationCode, String containerCode, String warehouseCode);
47 37  
48   - List<Container> getContainerListByCodeList(List<String> containCodeList, String warehouseCode);
  38 + List<Container> getContainerListByCodeList(List<String> containerCodeList, String warehouseCode);
49 39 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
... ... @@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
19 19 import org.springframework.transaction.annotation.Transactional;
20 20  
21 21 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  22 +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
22 23 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
23 24 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
24 25  
... ... @@ -50,6 +51,7 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
50 51 String code = String.format("%s%05d", containerTypeCode, startNumber);
51 52 container1.setCode(code);
52 53 container1.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
  54 + container1.setFillStatus(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY);
53 55 container1.setWarehouseCode(warehouseCode);
54 56 containerList.add(container1);
55 57 }
... ... @@ -69,60 +71,27 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
69 71 }
70 72  
71 73 @Override
72   - public boolean updateStatus(String containerCode, String status, String wareohuseCode) {
73   - Container container = this.getContainerByCode(containerCode, wareohuseCode);
74   - if (container == null) {
75   - return false;
76   - }
77   - container.setLastStatus(container.getStatus());
78   - container.setStatus(status);
79   - boolean result = this.updateById(container);
80   - return result;
81   - }
82   -
83   - @Override
84   - public boolean updateStatusByOriginStatus(String containerCode, String status, String originStatus, String wareohuseCode) {
85   - Container container = this.getContainerByCode(containerCode, wareohuseCode);
86   - if (container == null) {
87   - return false;
88   - }
89   - container.setLastStatus(container.getStatus());
90   - container.setStatus(status);
91   - LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
92   - containerLambdaQueryWrapper.eq(Container::getCode, containerCode).eq(Container::getStatus, originStatus).eq(Container::getWarehouseCode, wareohuseCode);
93   - boolean result = this.update(container, containerLambdaQueryWrapper);
94   - return result;
  74 + public boolean updateStatus(String containerCode, String status, String warehouseCode) {
  75 + LambdaUpdateWrapper<Container> updateWrapper = Wrappers.lambdaUpdate();
  76 + updateWrapper.ne(Container::getStatus, status).eq(Container::getCode, containerCode).eq(Container::getWarehouseCode, warehouseCode).set(Container::getStatus,
  77 + status);
  78 + return update(updateWrapper);
95 79 }
96 80  
97 81 @Override
98   - public boolean restoreContainer(String containerCode, String wareohuseCode) {
99   - Container container = this.getContainerByCode(containerCode, wareohuseCode);
100   - if (container == null) {
101   - return false;
102   - }
103   - container.setLastStatus(container.getStatus());
104   - container.setStatus(container.getLastStatus());
105   - boolean result = this.updateById(container);
106   - return result;
  82 + public boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode) {
  83 + LambdaUpdateWrapper<Container> updateWrapper = Wrappers.lambdaUpdate();
  84 + updateWrapper.ne(Container::getStatus, status).eq(Container::getCode, containerCode).eq(Container::getWarehouseCode, warehouseCode)
  85 + .set(Container::getLocationCode, locationCode).set(Container::getStatus, status);
  86 + return update(updateWrapper);
107 87 }
108 88  
109 89 @Override
110   - public boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode) {
111   - Container container = getContainerByCode(containerCode, warehouseCode);
112   - if (container == null) {
113   - return false;
114   - }
115   - boolean success = false;
116   - if (StringUtils.isNotEmpty(locationCode)) {
117   - success = havaLocationCodeByContainer(locationCode, containerCode, warehouseCode);
118   - if (success) {
119   - throw new JeecgBootException("容器表已经存在这个库位号,不能再写入");
120   - }
121   - }
122   - container.setStatus(status);
123   - container.setLocationCode(locationCode);
124   - success = updateById(container);
125   - return success;
  90 + public boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String fillStatus, String warehouseCode) {
  91 + LambdaUpdateWrapper<Container> updateWrapper = Wrappers.lambdaUpdate();
  92 + updateWrapper.ne(Container::getStatus, status).eq(Container::getCode, containerCode).eq(Container::getWarehouseCode, warehouseCode)
  93 + .set(Container::getLocationCode, locationCode).set(Container::getStatus, status).set(Container::getFillStatus, fillStatus);
  94 + return update(updateWrapper);
126 95 }
127 96  
128 97 @Override
... ... @@ -132,6 +101,7 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
132 101 container.setCode(code);
133 102 container.setWarehouseCode(warehouseCode);
134 103 container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
  104 + container.setFillStatus(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY);
135 105 if (!save(container)) {
136 106 throw new JeecgBootException("新增容器失败");
137 107 }
... ... @@ -159,9 +129,9 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
159 129 }
160 130  
161 131 @Override
162   - public List<Container> getContainerListByCodeList(List<String> containCodeList, String warehouseCode) {
  132 + public List<Container> getContainerListByCodeList(List<String> containerCodeList, String warehouseCode) {
163 133 LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
164   - containerLambdaQueryWrapper.in(Container::getCode, containCodeList).eq(Container::getWarehouseCode, warehouseCode);
  134 + containerLambdaQueryWrapper.in(Container::getCode, containerCodeList).eq(Container::getWarehouseCode, warehouseCode);
165 135 List<Container> containerList = list(containerLambdaQueryWrapper);
166 136 return containerList;
167 137 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/containerCapacity/controller/ContainerCapacityController.java
1 1 package org.jeecg.modules.wms.config.containerCapacity.controller;
2 2  
3 3 import java.util.Arrays;
  4 +import java.util.HashMap;
4 5 import java.util.List;
5 6 import java.util.Map;
  7 +import java.util.Set;
  8 +import java.util.function.Function;
6 9 import java.util.stream.Collectors;
7   -import java.io.IOException;
8   -import java.io.UnsupportedEncodingException;
9   -import java.net.URLDecoder;
  10 +
10 11 import javax.servlet.http.HttpServletRequest;
11 12 import javax.servlet.http.HttpServletResponse;
12 13  
13 14 import org.apache.shiro.authz.annotation.RequiresPermissions;
14 15 import org.jeecg.common.api.vo.Result;
  16 +import org.jeecg.common.aspect.annotation.AutoLog;
  17 +import org.jeecg.common.system.base.controller.JeecgController;
15 18 import org.jeecg.common.system.query.QueryGenerator;
  19 +import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity;
  20 +import org.jeecg.modules.wms.config.containerCapacity.service.IContainerCapacityService;
  21 +import org.jeecg.modules.wms.config.location.entity.Location;
  22 +import org.jeecg.modules.wms.config.material.entity.Material;
  23 +import org.jeecg.modules.wms.config.material.service.IMaterialService;
16 24 import org.jeecg.utils.HuahengJwtUtil;
17   -import org.jeecg.common.util.oConvertUtils;
  25 +import org.jeecg.utils.StringUtils;
  26 +import org.springframework.beans.factory.annotation.Autowired;
  27 +import org.springframework.util.CollectionUtils;
  28 +import org.springframework.web.bind.annotation.DeleteMapping;
  29 +import org.springframework.web.bind.annotation.GetMapping;
  30 +import org.springframework.web.bind.annotation.PostMapping;
  31 +import org.springframework.web.bind.annotation.RequestBody;
  32 +import org.springframework.web.bind.annotation.RequestMapping;
  33 +import org.springframework.web.bind.annotation.RequestMethod;
  34 +import org.springframework.web.bind.annotation.RequestParam;
  35 +import org.springframework.web.bind.annotation.RestController;
  36 +import org.springframework.web.servlet.ModelAndView;
18 37  
  38 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
19 39 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
20 40 import com.baomidou.mybatisplus.core.metadata.IPage;
  41 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
21 42 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
22   -import lombok.extern.slf4j.Slf4j;
23 43  
24   -import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity;
25   -import org.jeecg.modules.wms.config.containerCapacity.service.IContainerCapacityService;
26   -import org.jeecg.utils.StringUtils;
27   -import org.jeecgframework.poi.excel.ExcelImportUtil;
28   -import org.jeecgframework.poi.excel.def.NormalExcelConstants;
29   -import org.jeecgframework.poi.excel.entity.ExportParams;
30   -import org.jeecgframework.poi.excel.entity.ImportParams;
31   -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
32   -import org.jeecg.common.system.base.controller.JeecgController;
33   -import org.springframework.beans.factory.annotation.Autowired;
34   -import org.springframework.web.bind.annotation.*;
35   -import org.springframework.web.multipart.MultipartFile;
36   -import org.springframework.web.multipart.MultipartHttpServletRequest;
37   -import org.springframework.web.servlet.ModelAndView;
38   -import com.alibaba.fastjson.JSON;
39 44 import io.swagger.annotations.Api;
40 45 import io.swagger.annotations.ApiOperation;
41   -import org.jeecg.common.aspect.annotation.AutoLog;
  46 +import lombok.extern.slf4j.Slf4j;
42 47  
43 48 /**
44 49 * @Description: 容器容量管理
... ... @@ -54,6 +59,9 @@ public class ContainerCapacityController extends JeecgController&lt;ContainerCapaci
54 59 @Autowired
55 60 private IContainerCapacityService containerCapacityService;
56 61  
  62 + @Autowired
  63 + private IMaterialService materialService;
  64 +
57 65 /**
58 66 * 分页列表查询
59 67 * @param containerCapacity
... ... @@ -71,6 +79,28 @@ public class ContainerCapacityController extends JeecgController&lt;ContainerCapaci
71 79 QueryWrapper<ContainerCapacity> queryWrapper = QueryGenerator.initQueryWrapper(containerCapacity, req.getParameterMap());
72 80 Page<ContainerCapacity> page = new Page<ContainerCapacity>(pageNo, pageSize);
73 81 IPage<ContainerCapacity> pageList = containerCapacityService.page(page, queryWrapper);
  82 + List<ContainerCapacity> containerCapacityList = pageList.getRecords();
  83 + Map<String, Material> materialMap = new HashMap<String, Material>();
  84 + if (!CollectionUtils.isEmpty(containerCapacityList)) {
  85 + Set<String> materialCodeSet =
  86 + containerCapacityList.stream().filter(t -> StringUtils.isNotEmpty(t.getMaterialCode())).map(t -> t.getMaterialCode()).collect(Collectors.toSet());
  87 + if (!CollectionUtils.isEmpty(materialCodeSet)) {
  88 + LambdaQueryWrapper<Material> materialLambdaQueryWrapper = Wrappers.lambdaQuery();
  89 + HuahengJwtUtil.setWarehouseCode(materialLambdaQueryWrapper, Material.class, req);
  90 + materialLambdaQueryWrapper.in(Material::getCode, materialCodeSet);
  91 + List<Material> materialList = materialService.list(materialLambdaQueryWrapper);
  92 + if (!CollectionUtils.isEmpty(materialList)) {
  93 + materialMap.putAll(materialList.stream().collect(Collectors.toMap(Material::getCode, Function.identity(), (key1, key2) -> key2)));
  94 + }
  95 + }
  96 + }
  97 + for (ContainerCapacity pageObject : containerCapacityList) {
  98 + Material material = materialMap.get(pageObject.getMaterialCode());
  99 + if (material != null) {
  100 + pageObject.setMaterialName(material.getName());
  101 + pageObject.setMaterialUnit(material.getUnit());
  102 + }
  103 + }
74 104 return Result.OK(pageList);
75 105 }
76 106  
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/containerCapacity/entity/ContainerCapacity.java
... ... @@ -5,6 +5,7 @@ import java.io.UnsupportedEncodingException;
5 5 import java.util.Date;
6 6 import java.math.BigDecimal;
7 7 import com.baomidou.mybatisplus.annotation.IdType;
  8 +import com.baomidou.mybatisplus.annotation.TableField;
8 9 import com.baomidou.mybatisplus.annotation.TableId;
9 10 import com.baomidou.mybatisplus.annotation.TableName;
10 11 import lombok.Data;
... ... @@ -35,60 +36,57 @@ public class ContainerCapacity implements Serializable {
35 36 @TableId(type = IdType.AUTO)
36 37 @ApiModelProperty(value = "主键")
37 38 private Integer id;
  39 +
38 40 /** 容器类型 */
39 41 @Excel(name = "容器类型", width = 15)
40 42 @ApiModelProperty(value = "容器类型")
41 43 private String containerTypeCode;
  44 +
42 45 /** 仓库编码 */
43 46 @Excel(name = "仓库编码", width = 15)
44 47 @ApiModelProperty(value = "仓库编码")
45 48 private String warehouseCode;
46   - /** 货主 */
47   - @Excel(name = "货主", width = 15)
48   - @ApiModelProperty(value = "货主")
49   - private String companyCode;
  49 +
50 50 /** 物料编码 */
51 51 @Excel(name = "物料编码", width = 15)
52 52 @ApiModelProperty(value = "物料编码")
53 53 private String materialCode;
  54 +
54 55 /** 物料名称 */
55   - @Excel(name = "物料名称", width = 15)
  56 + // @Excel(name = "物料名称", width = 15)
56 57 @ApiModelProperty(value = "物料名称")
  58 + @TableField(exist = false)
57 59 private String materialName;
  60 +
58 61 /** 物料单位 */
59   - @Excel(name = "物料单位", width = 15)
  62 + // @Excel(name = "物料单位", width = 15)
60 63 @ApiModelProperty(value = "物料单位")
  64 + @TableField(exist = false)
61 65 private String materialUnit;
62   - /** 存放数量 */
63   - @Excel(name = "存放数量", width = 15)
64   - @ApiModelProperty(value = "存放数量")
  66 +
  67 + /** 容量 */
  68 + @Excel(name = "容量", width = 15)
  69 + @ApiModelProperty(value = "容量")
65 70 private BigDecimal qty;
  71 +
66 72 /** 是否可用 */
67 73 @Excel(name = "是否可用", width = 15, dicCode = "enable_status")
68 74 @Dict(dicCode = "enable_status")
69 75 @ApiModelProperty(value = "是否可用")
70 76 private Integer enable;
71   - /** 备用字段1 */
72   - @Excel(name = "备用字段1", width = 15)
73   - @ApiModelProperty(value = "备用字段1")
74   - private String userdef1;
75   - /** 备用字段2 */
76   - @Excel(name = "备用字段2", width = 15)
77   - @ApiModelProperty(value = "备用字段2")
78   - private String userdef2;
79   - /** 备用字段3 */
80   - @Excel(name = "备用字段3", width = 15)
81   - @ApiModelProperty(value = "备用字段3")
82   - private String userdef3;
  77 +
83 78 /** 创建人 */
84 79 @ApiModelProperty(value = "创建人")
85 80 private String createBy;
  81 +
86 82 /** 创建日期 */
87 83 @ApiModelProperty(value = "创建日期")
88 84 private Date createTime;
  85 +
89 86 /** 更新人 */
90 87 @ApiModelProperty(value = "更新人")
91 88 private String updateBy;
  89 +
92 90 /** 更新日期 */
93 91 @ApiModelProperty(value = "更新日期")
94 92 private Date updateTime;
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/containerCapacity/service/IContainerCapacityService.java
... ... @@ -11,4 +11,14 @@ import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity;
11 11 */
12 12 public interface IContainerCapacityService extends IService<ContainerCapacity> {
13 13  
  14 + /**
  15 + * 容器物品容量查询
  16 + * @author TanYibin
  17 + * @createDate 2023年4月10日
  18 + * @param warehouseCode
  19 + * @param containerTypeCode
  20 + * @param materialCode
  21 + * @return
  22 + */
  23 + public ContainerCapacity queryOne(String warehouseCode, String containerTypeCode, String materialCode);
14 24 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/containerCapacity/service/impl/ContainerCapacityServiceImpl.java
... ... @@ -3,8 +3,12 @@ package org.jeecg.modules.wms.config.containerCapacity.service.impl;
3 3 import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity;
4 4 import org.jeecg.modules.wms.config.containerCapacity.mapper.ContainerCapacityMapper;
5 5 import org.jeecg.modules.wms.config.containerCapacity.service.IContainerCapacityService;
  6 +import org.jeecg.utils.StringUtils;
  7 +import org.springframework.cache.annotation.Cacheable;
6 8 import org.springframework.stereotype.Service;
7 9  
  10 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
8 12 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
9 13  
10 14 /**
... ... @@ -16,4 +20,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
16 20 @Service
17 21 public class ContainerCapacityServiceImpl extends ServiceImpl<ContainerCapacityMapper, ContainerCapacity> implements IContainerCapacityService {
18 22  
  23 + @Override
  24 + @Cacheable(cacheNames = "queryContainerCapacity#60",
  25 + key = "#root.methodName + '_' + #warehouseCode + '_' + #containerTypeCode + '_' + #materialCode")
  26 + public ContainerCapacity queryOne(String warehouseCode, String containerTypeCode, String materialCode) {
  27 + LambdaQueryWrapper<ContainerCapacity> containerCapacityWrapper = Wrappers.lambdaQuery();
  28 + containerCapacityWrapper.eq(ContainerCapacity::getWarehouseCode, warehouseCode)
  29 + .eq(StringUtils.isNotEmpty(containerTypeCode), ContainerCapacity::getContainerTypeCode, containerTypeCode)
  30 + .eq(StringUtils.isNotEmpty(materialCode), ContainerCapacity::getMaterialCode, materialCode);
  31 + return getOne(containerCapacityWrapper);
  32 + }
  33 +
19 34 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/containerType/entity/ContainerType.java
... ... @@ -2,9 +2,12 @@ package org.jeecg.modules.wms.config.containerType.entity;
2 2  
3 3 import java.io.Serializable;
4 4 import java.io.UnsupportedEncodingException;
  5 +import java.util.Arrays;
5 6 import java.util.Date;
  7 +import java.util.List;
6 8 import java.math.BigDecimal;
7 9 import com.baomidou.mybatisplus.annotation.IdType;
  10 +import com.baomidou.mybatisplus.annotation.TableField;
8 11 import com.baomidou.mybatisplus.annotation.TableId;
9 12 import com.baomidou.mybatisplus.annotation.TableName;
10 13 import lombok.Data;
... ... @@ -35,67 +38,94 @@ public class ContainerType implements Serializable {
35 38 @TableId(type = IdType.AUTO)
36 39 @ApiModelProperty(value = "主键")
37 40 private Integer id;
  41 +
38 42 /** 编码 */
39 43 @Excel(name = "编码", width = 15)
40 44 @ApiModelProperty(value = "编码")
41 45 private String code;
  46 +
42 47 /** 名称 */
43 48 @Excel(name = "名称", width = 15)
44 49 @ApiModelProperty(value = "名称")
45 50 private String name;
  51 +
46 52 /** 仓库编码 */
47 53 @Excel(name = "仓库编码", width = 15)
48 54 @ApiModelProperty(value = "仓库编码")
49 55 private String warehouseCode;
  56 +
50 57 /** 货主编码 */
51 58 @Excel(name = "货主编码", width = 15)
52 59 @ApiModelProperty(value = "货主编码")
53 60 private String companyCode;
  61 +
54 62 /** 绑定的库位类型 */
55 63 @Excel(name = "绑定的库位类型", width = 15)
56 64 @ApiModelProperty(value = "绑定的库位类型")
57 65 private String locationType;
  66 +
  67 + public void setLocationType(String locationType) {
  68 + if (locationType != null) {
  69 + this.locationType = locationType;
  70 + this.locationTypes = Arrays.asList(locationType.split(","));
  71 + }
  72 + }
  73 +
  74 + @TableField(exist = false)
  75 + private List<String> locationTypes;
  76 +
58 77 /** 长 */
59 78 @Excel(name = "长", width = 15)
60 79 @ApiModelProperty(value = "长")
61 80 private Integer length;
  81 +
62 82 /** 宽 */
63 83 @Excel(name = "宽", width = 15)
64 84 @ApiModelProperty(value = "宽")
65 85 private Integer width;
  86 +
66 87 /** 高 */
67 88 @Excel(name = "高", width = 15)
68 89 @ApiModelProperty(value = "高")
69 90 private Integer height;
  91 +
70 92 /** 空容器重量 */
71 93 @Excel(name = "空容器重量", width = 15)
72 94 @ApiModelProperty(value = "空容器重量")
73 95 private Integer emptyweight;
  96 +
74 97 /** 容器最大承重 */
75 98 @Excel(name = "容器最大承重", width = 15)
76 99 @ApiModelProperty(value = "容器最大承重")
77 100 private Integer maxweight;
  101 +
78 102 /** 备用字段1 */
79 103 @Excel(name = "备用字段1", width = 15)
80 104 @ApiModelProperty(value = "备用字段1")
81 105 private String userdef1;
  106 +
82 107 /** 备用字段2 */
83 108 @Excel(name = "备用字段2", width = 15)
84 109 @ApiModelProperty(value = "备用字段2")
85 110 private String userdef2;
  111 +
86 112 /** 备用字段3 */
87 113 @Excel(name = "备用字段3", width = 15)
88 114 @ApiModelProperty(value = "备用字段3")
89 115 private String userdef3;
  116 +
90 117 /** 创建人 */
91 118 @ApiModelProperty(value = "创建人")
92 119 private String createBy;
  120 +
93 121 /** 创建日期 */
94 122 @ApiModelProperty(value = "创建日期")
95 123 private Date createTime;
  124 +
96 125 /** 更新人 */
97 126 @ApiModelProperty(value = "更新人")
98 127 private String updateBy;
  128 +
99 129 /** 更新日期 */
100 130 @ApiModelProperty(value = "更新日期")
101 131 private Date updateTime;
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/controller/LocationController.java
... ... @@ -121,7 +121,7 @@ public class LocationController extends JeecgController&lt;Location, ILocationServi
121 121 @ApiOperation(value = "库位管理-批量添加", notes = "库位管理-批量添加")
122 122 @RequiresPermissions("location:batchAdd")
123 123 @PostMapping(value = "/batchAdd")
124   - public Result<String> batchAdd(@RequestBody BatchLocation batchLocation, HttpServletRequest req) {
  124 + public Result<?> batchAdd(@RequestBody BatchLocation batchLocation, HttpServletRequest req) {
125 125 HuahengJwtUtil.setWarehouseCode(req, batchLocation);
126 126 batchLocation.setStatus(QuantityConstant.STATUS_LOCATION_EMPTY);
127 127 Result result = locationService.batchAdd(batchLocation);
... ... @@ -252,7 +252,7 @@ public class LocationController extends JeecgController&lt;Location, ILocationServi
252 252 String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
253 253 String containerCode = location.getContainerCode();
254 254 String locationCode = location.getCode();
255   - List<Location> locationList = locationService.getContainerInLocation(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, locationCode, warehouseCode);
  255 + List<Location> locationList = locationService.getContainerInLocation(containerCode, QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, locationCode, warehouseCode);
256 256 return Result.OK(locationList);
257 257 }
258 258  
... ... @@ -268,7 +268,8 @@ public class LocationController extends JeecgController&lt;Location, ILocationServi
268 268 String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
269 269 String containerCode = location.getContainerCode();
270 270 String locationCode = location.getCode();
271   - List<Location> locationList = locationService.getContainerInLocation(containerCode, QuantityConstant.STATUS_CONTAINER_MANY, locationCode, warehouseCode);
  271 + List<Location> locationList =
  272 + locationService.getContainerInLocation(containerCode, QuantityConstant.STATUS_CONTAINER_FILL_MANY, locationCode, warehouseCode);
272 273 return Result.OK(locationList);
273 274 }
274 275  
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/dto/QueryCompareLocationTaskDto.java
... ... @@ -25,6 +25,12 @@ public class QueryCompareLocationTaskDto {
25 25 /** 数据状态 */
26 26 private Integer consistencyStatus;
27 27  
  28 + /** 任务创建时间开始区间 */
  29 + private String taskCreateTimeBegin;
  30 +
  31 + /** 任务创建时间结束区间 */
  32 + private String taskCreateTimeEnd;
  33 +
28 34 /** 页码 */
29 35 private Integer pageNo = 1;
30 36  
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/mapper/xml/LocationMapper.xml
... ... @@ -9,7 +9,7 @@
9 9 IFNULL(max(grid),0) as maxGrid,
10 10 IFNULL(min(row),0) as minRow
11 11 FROM location
12   - WHERE location_type_code = #{locationTypeCode}
  12 + WHERE zone_code = #{zoneCode}
13 13 <if test="warehouseCode != null and warehouseCode !=''">
14 14 AND warehouse_code = #{warehouseCode}
15 15 </if>
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/service/ILocationService.java
... ... @@ -34,16 +34,6 @@ public interface ILocationService extends IService&lt;Location&gt; {
34 34  
35 35 boolean updateStatus(String locationCode, String status, String warehouseCode);
36 36  
37   - /**
38   - * 更新库位状态status,条件是originStatus,如果originStatus条件不满足,那么返回false
39   - * @param locationCode
40   - * @param status
41   - * @param originStatus
42   - * @param warehouseCode
43   - * @return
44   - */
45   - boolean updateStatusByOriginStatus(String locationCode, String status, String originStatus, String warehouseCode);
46   -
47 37 boolean updateContainerCodeAndStatus(String locationCode, String containerCode, String status, String warehouseCode);
48 38  
49 39 Location getNear(Location location);
... ... @@ -60,7 +50,7 @@ public interface ILocationService extends IService&lt;Location&gt; {
60 50  
61 51 boolean haveUncompleteTaskInNear(Location location);
62 52  
63   - Result batchAdd(BatchLocation batchLocation);
  53 + Result<?> batchAdd(BatchLocation batchLocation);
64 54  
65 55 LocationInfo getAllLocation(Location location);
66 56  
... ... @@ -71,7 +61,7 @@ public interface ILocationService extends IService&lt;Location&gt; {
71 61 */
72 62 boolean havaContainerCodeInLocation(String containerCode, String locationCode, String warehouseCode);
73 63  
74   - List<Location> getContainerInLocation(String containerCode, String containerStatus, String locationCode, String warehouseCode);
  64 + List<Location> getContainerInLocation(String containerCode, String containerFillStatus, String locationCode, String warehouseCode);
75 65  
76 66 PageUtil<CompareLocationDto> compareWcsLocation(QueryCompareLocationDto queryCompareLocationDto);
77 67  
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/service/impl/LocationServiceImpl.java
... ... @@ -53,6 +53,7 @@ import org.springframework.transaction.annotation.Transactional;
53 53 import com.alibaba.fastjson.JSON;
54 54 import com.alibaba.fastjson.TypeReference;
55 55 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  56 +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
56 57 import com.baomidou.mybatisplus.core.metadata.IPage;
57 58 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
58 59 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
... ... @@ -121,46 +122,18 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
121 122  
122 123 @Override
123 124 public boolean updateStatus(String locationCode, String status, String warehouseCode) {
124   - Location location = getLocationByCode(locationCode, warehouseCode);
125   - if (location == null) {
126   - return false;
127   - }
128   - location.setStatus(status);
129   - boolean result = updateById(location);
130   - return result;
131   - }
132   -
133   - @Override
134   - public boolean updateStatusByOriginStatus(String locationCode, String status, String originStatus, String warehouseCode) {
135   - Location location = getLocationByCode(locationCode, warehouseCode);
136   - if (location == null) {
137   - return false;
138   - }
139   - LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
140   - locationLambdaQueryWrapper.eq(Location::getStatus, originStatus).eq(Location::getCode, locationCode).eq(Location::getWarehouseCode, warehouseCode);
141   - location.setStatus(status);
142   - boolean result = update(location, locationLambdaQueryWrapper);
143   - return result;
  125 + LambdaUpdateWrapper<Location> updateWrapper = Wrappers.lambdaUpdate();
  126 + updateWrapper.ne(Location::getStatus, status).eq(Location::getCode, locationCode).eq(Location::getWarehouseCode, warehouseCode).set(Location::getStatus,
  127 + status);
  128 + return update(updateWrapper);
144 129 }
145 130  
146 131 @Override
147 132 public boolean updateContainerCodeAndStatus(String locationCode, String containerCode, String status, String warehouseCode) {
148   - Location location = getLocationByCode(locationCode, warehouseCode);
149   - if (location == null) {
150   - return false;
151   - }
152   - boolean success = false;
153   - // 如果这个托盘号已经在库位表里,那么不能再写入
154   - if (StringUtils.isNotEmpty(containerCode)) {
155   - success = havaContainerCodeInLocation(containerCode, locationCode, warehouseCode);
156   - if (success) {
157   - throw new JeecgBootException("库位表已经存在这个容器号,不能再写入");
158   - }
159   - }
160   - location.setContainerCode(containerCode);
161   - location.setStatus(status);
162   - success = updateById(location);
163   - return success;
  133 + LambdaUpdateWrapper<Location> updateWrapper = Wrappers.lambdaUpdate();
  134 + updateWrapper.ne(Location::getStatus, status).eq(Location::getCode, locationCode)
  135 + .eq(Location::getWarehouseCode, warehouseCode).set(Location::getContainerCode, containerCode).set(Location::getStatus, status);
  136 + return update(updateWrapper);
164 137 }
165 138  
166 139 @Override
... ... @@ -308,7 +281,7 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
308 281  
309 282 @Override
310 283 @Transactional(rollbackFor = Exception.class)
311   - public Result batchAdd(BatchLocation batchLocation) {
  284 + public Result<?> batchAdd(BatchLocation batchLocation) {
312 285 String prefix = batchLocation.getPrefix();
313 286 Integer firstRow = batchLocation.getFirstRow();
314 287 Integer lastRow = batchLocation.getLastRow();
... ... @@ -408,9 +381,9 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
408 381 }
409 382  
410 383 @Override
411   - public List<Location> getContainerInLocation(String containerCode, String containerStatus, String locationCode, String warehouseCode) {
  384 + public List<Location> getContainerInLocation(String containerCode, String containerFillStatus, String locationCode, String warehouseCode) {
412 385 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
413   - locationLambdaQueryWrapper.eq(Location::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY).ne(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
  386 + locationLambdaQueryWrapper.eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ne(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
414 387 .eq(StringUtils.isNotEmpty(containerCode), Location::getContainerCode, containerCode)
415 388 .eq(StringUtils.isNotEmpty(locationCode), Location::getCode, locationCode).eq(Location::getWarehouseCode, warehouseCode);
416 389 List<Location> locationList = list(locationLambdaQueryWrapper);
... ... @@ -418,11 +391,11 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
418 391 if (locationList.size() != 0) {
419 392 List<String> containerCodeList = locationList.stream().map(Location::getContainerCode).collect(Collectors.toList());
420 393 List<Container> containerList = containerService.getContainerListByCodeList(containerCodeList, warehouseCode);
421   - for (Location location1 : locationList) {
  394 + for (Location location : locationList) {
422 395 for (Container container : containerList) {
423   - if (location1.getContainerCode().equals(container.getCode())) {
424   - if (!container.getStatus().equals(containerStatus)) {
425   - removeLocationList.add(location1);
  396 + if (location.getContainerCode().equals(container.getCode())) {
  397 + if (!container.getFillStatus().equals(containerFillStatus)) {
  398 + removeLocationList.add(location);
426 399 }
427 400 }
428 401 }
... ... @@ -458,7 +431,6 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
458 431 Map<String, List<WcsLocationDto>> wcsLocationMap = new HashMap<String, List<WcsLocationDto>>();
459 432  
460 433 // 1.获取WMS库位表库位信息
461   - Page<Location> page = new Page<Location>(queryCompareLocationDto.getPageNo(), queryCompareLocationDto.getPageSize());
462 434 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
463 435 locationLambdaQueryWrapper.select(Location::getWarehouseCode, Location::getCode, Location::getContainerCode, Location::getStatus)
464 436 .eq(Location::getWarehouseCode, queryCompareLocationDto.getWarehouseCode())
... ... @@ -568,9 +540,9 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
568 540 @Override
569 541 public PageUtil<CompareLocationTaskDto> compareWcsLocationTask(QueryCompareLocationTaskDto queryCompareLocationTaskDto) {
570 542 List<CompareLocationTaskDto> finalCompareLocationTaskList = new ArrayList<CompareLocationTaskDto>();
571   - if (queryCompareLocationTaskDto.getLocationCode() == null) {
572   - return PageUtil.create(finalCompareLocationTaskList, queryCompareLocationTaskDto.getPageNo(), queryCompareLocationTaskDto.getPageSize());
573   - }
  543 +// if (queryCompareLocationTaskDto.getLocationCode() == null) {
  544 +// return PageUtil.create(finalCompareLocationTaskList, queryCompareLocationTaskDto.getPageNo(), queryCompareLocationTaskDto.getPageSize());
  545 +// }
574 546 // 只查询近90天的数据
575 547 // String queryCreateTime = DateUtil.format(DateUtil.offsetDay(new Date(), -90), DatePattern.NORM_DATE_PATTERN);
576 548 // 1.获取WMS任务信息
... ... @@ -579,12 +551,14 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
579 551 .select(TaskHeader::getId, TaskHeader::getWarehouseCode, TaskHeader::getTaskType, TaskHeader::getFromLocationCode, TaskHeader::getToLocationCode,
580 552 TaskHeader::getContainerCode, TaskHeader::getStatus, TaskHeader::getCreateTime)
581 553 .eq(TaskHeader::getWarehouseCode, queryCompareLocationTaskDto.getWarehouseCode())
  554 + .gt(StringUtils.isNotEmpty(queryCompareLocationTaskDto.getTaskCreateTimeBegin()), TaskHeader::getCreateTime, queryCompareLocationTaskDto.getTaskCreateTimeBegin())
  555 + .lt(StringUtils.isNotEmpty(queryCompareLocationTaskDto.getTaskCreateTimeEnd()),TaskHeader::getCreateTime, queryCompareLocationTaskDto.getTaskCreateTimeEnd());
582 556 // .ge(TaskHeader::getCreateTime, queryCreateTime)
583   - .and(t -> t.eq(StringUtils.isNotEmpty(queryCompareLocationTaskDto.getLocationCode()), TaskHeader::getFromLocationCode,
584   - queryCompareLocationTaskDto.getLocationCode()).or().eq(StringUtils.isNotEmpty(queryCompareLocationTaskDto.getLocationCode()),
585   - TaskHeader::getToLocationCode, queryCompareLocationTaskDto.getLocationCode()));
  557 + if (StringUtils.isNotEmpty(queryCompareLocationTaskDto.getLocationCode())) {
  558 + taskHeaderLambdaQueryWrapper.and(t -> t.eq(TaskHeader::getFromLocationCode, queryCompareLocationTaskDto.getLocationCode()).or()
  559 + .eq(TaskHeader::getToLocationCode, queryCompareLocationTaskDto.getLocationCode()));
  560 + }
586 561 List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
587   -
588 562 // 2.获取WCS任务信息
589 563 String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_WCS_TAKS_INFOS);
590 564 Map<String, Object> queryParamMap = new HashMap<String, Object>();
... ... @@ -594,6 +568,12 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
594 568 if (StringUtils.isNotEmpty(queryCompareLocationTaskDto.getLocationCode())) {
595 569 queryParamMap.put("location", queryCompareLocationTaskDto.getLocationCode());
596 570 }
  571 + if (StringUtils.isNotEmpty(queryCompareLocationTaskDto.getTaskCreateTimeBegin())) {
  572 + queryParamMap.put("begin", queryCompareLocationTaskDto.getTaskCreateTimeBegin());
  573 + }
  574 + if (StringUtils.isNotEmpty(queryCompareLocationTaskDto.getTaskCreateTimeEnd())) {
  575 + queryParamMap.put("end", queryCompareLocationTaskDto.getTaskCreateTimeEnd());
  576 + }
597 577 // queryParamMap.put("begin", queryCreateTime);
598 578 String jsonStringResult = OkHttpUtils.sendPostByJsonStr(url, JSON.toJSONString(queryParamMap));
599 579 WcsResultDto<List<WcsTaskDto>> wcsResult = JSON.parseObject(jsonStringResult, new TypeReference<WcsResultDto<List<WcsTaskDto>>>() {});
... ... @@ -686,8 +666,8 @@ public class LocationServiceImpl extends ServiceImpl&lt;LocationMapper, Location&gt; i
686 666 finalCompareLocationTaskList.stream().filter(t -> queryCompareLocationTaskDto.getWcsId().equals(t.getWcsId())).collect(Collectors.toList());
687 667 }
688 668 if (queryCompareLocationTaskDto.getConsistencyStatus() != null) {
689   - finalCompareLocationTaskList = finalCompareLocationTaskList.stream().filter(t -> queryCompareLocationTaskDto.getConsistencyStatus().equals(t.getConsistencyStatus()))
690   - .collect(Collectors.toList());
  669 + finalCompareLocationTaskList = finalCompareLocationTaskList.stream()
  670 + .filter(t -> queryCompareLocationTaskDto.getConsistencyStatus().equals(t.getConsistencyStatus())).collect(Collectors.toList());
691 671 }
692 672 return PageUtil.create(finalCompareLocationTaskList, queryCompareLocationTaskDto.getPageNo(), queryCompareLocationTaskDto.getPageSize());
693 673 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationMonitor/controller/LocationMonitorController.java
... ... @@ -51,29 +51,38 @@ public class LocationMonitorController {
51 51 */
52 52 @GetMapping("/getStatus")
53 53 @ResponseBody
54   - public Result getStatus(String zoneCode, HttpServletRequest req) {
  54 + public Result<?> getStatus(String zoneCode, HttpServletRequest req) {
55 55 LambdaQueryWrapper<Location> queryWrapper = Wrappers.lambdaQuery();
56 56 HuahengJwtUtil.setWarehouseCode(queryWrapper, Location.class, req);
57   - queryWrapper.select(Location::getStatus, Location::getContainerCode).eq(Location::getLocationTypeCode, zoneCode);
  57 + queryWrapper.select(Location::getCode, Location::getStatus, Location::getContainerCode).eq(Location::getZoneCode, zoneCode);
58 58 List<Location> locationList = locationService.list(queryWrapper);
  59 + List<String> locationCodeList = locationList.stream().map(Location::getCode).collect(Collectors.toList());
  60 +
59 61 HashMap<String, Integer> map = new HashMap<>();
60 62 map.put("location", locationList.size());
61 63 // 换stream进行数据拣选速度更快
62   - List<Location> emptyLocationList = locationList.stream().filter(t -> StringUtils.isEmpty(t.getContainerCode())).collect(Collectors.toList());
  64 + List<Location> emptyLocationList =
  65 + locationList.stream().filter(t -> QuantityConstant.STATUS_LOCATION_EMPTY.equals(t.getStatus())).collect(Collectors.toList());
63 66 map.put("emptyLocation", emptyLocationList.size());
  67 + // 查询库位上的托盘信息
64 68 LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
65 69 HuahengJwtUtil.setWarehouseCode(containerLambdaQueryWrapper, Container.class, req);
66   - containerLambdaQueryWrapper.select(Container::getCode, Container::getStatus);
  70 + containerLambdaQueryWrapper.select(Container::getCode, Container::getStatus, Container::getFillStatus).in(Container::getLocationCode, locationCodeList);
67 71 List<Container> containerList = containerService.list(containerLambdaQueryWrapper);
68   - List<String> containerCodeList =
69   - containerList.stream().filter(t -> t.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)).map(Container::getCode).collect(Collectors.toList());
70   - List<Location> haveEmptyContainLocation = locationList.stream().filter(t -> t.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)
71   - && StringUtils.isNotEmpty(t.getContainerCode()) && containerCodeList.contains(t.getContainerCode())).collect(Collectors.toList());
  72 +
  73 + List<String> containerCodeList = containerList.stream()
  74 + .filter(
  75 + t -> QuantityConstant.STATUS_CONTAINER_FILL_EMPTY.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_MANY.equals(t.getFillStatus()))
  76 + .map(Container::getCode).collect(Collectors.toList());
  77 + List<Location> haveEmptyContainLocation = locationList.stream().filter(t -> containerCodeList.contains(t.getContainerCode())).collect(Collectors.toList());
72 78 map.put("haveContainLocation", haveEmptyContainLocation.size());
73   - List<String> containerCodeList1 =
74   - containerList.stream().filter(t -> t.getStatus().equals(QuantityConstant.STATUS_CONTAINER_SOME)).map(Container::getCode).collect(Collectors.toList());
75   - List<Location> haveInventoryLocationList = locationList.stream().filter(t -> t.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)
76   - && StringUtils.isNotEmpty(t.getContainerCode()) && containerCodeList1.contains(t.getContainerCode())).collect(Collectors.toList());
  79 +
  80 + List<String> containerCodeList1 = containerList.stream()
  81 + .filter(
  82 + t -> QuantityConstant.STATUS_CONTAINER_FILL_SOME.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_FULL.equals(t.getFillStatus()))
  83 + .map(Container::getCode).collect(Collectors.toList());
  84 +
  85 + List<Location> haveInventoryLocationList = locationList.stream().filter(t -> containerCodeList1.contains(t.getContainerCode())).collect(Collectors.toList());
77 86 map.put("haveInventoryLocation", haveInventoryLocationList.size());
78 87 return Result.ok(map);
79 88 }
... ... @@ -83,16 +92,16 @@ public class LocationMonitorController {
83 92 */
84 93 @PostMapping("/getLocationInfo")
85 94 @ResponseBody
86   - public Result getLocationInfo(String type, String row, String line, String layer, String grid, HttpServletRequest req) {
87   - if (StringUtils.isEmpty(type)) {
88   - return Result.error("type不能为空");
  95 + public Result<?> getLocationInfo(String zoneCode, String row, String line, String layer, String grid, HttpServletRequest req) {
  96 + if (StringUtils.isEmpty(zoneCode)) {
  97 + return Result.error("zoneCode 不能为空");
89 98 }
90 99 /* 查询库位信息 */
91 100 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
92 101 HuahengJwtUtil.setWarehouseCode(locationLambdaQueryWrapper, Location.class, req);
93 102 locationLambdaQueryWrapper.eq(StringUtils.isNotEmpty(row), Location::getRow, row).eq(StringUtils.isNotEmpty(line), Location::getIcolumn, line)
94 103 .eq(StringUtils.isNotEmpty(layer), Location::getLayer, layer).eq(StringUtils.isNotEmpty(grid), Location::getGrid, grid)
95   - .eq(StringUtils.isNotEmpty(type), Location::getLocationTypeCode, type);
  104 + .eq(StringUtils.isNotEmpty(zoneCode), Location::getZoneCode, zoneCode);
96 105 List<Location> locations = locationService.list(locationLambdaQueryWrapper);
97 106 List<Location> locationList = new ArrayList<>();
98 107  
... ... @@ -103,7 +112,6 @@ public class LocationMonitorController {
103 112  
104 113 for (Location location1 : locations) {
105 114 InventoryDetail inventoryDetail = null;
106   - String materialName = null;
107 115 for (InventoryDetail inventoryDetail2 : inventoryDetailList) {
108 116 if (location1.getCode().equals(inventoryDetail2.getLocationCode())) {
109 117 inventoryDetail = inventoryDetail2;
... ... @@ -160,12 +168,12 @@ public class LocationMonitorController {
160 168 */
161 169 @PostMapping("/getAllLocation")
162 170 @ResponseBody
163   - public Result getAllLocation(@RequestParam(name = "type") String type, HttpServletRequest req) {
164   - if (StringUtils.isEmpty(type)) {
165   - return Result.error("type不能为空");
  171 + public Result<?> getAllLocation(@RequestParam(name = "zoneCode") String zoneCode, HttpServletRequest req) {
  172 + if (StringUtils.isEmpty(zoneCode)) {
  173 + return Result.error("zoneCode 不能为空");
166 174 }
167 175 Location location = new Location();
168   - location.setLocationTypeCode(type);
  176 + location.setZoneCode(zoneCode);
169 177 HuahengJwtUtil.setWarehouseCode(req, location);
170 178 return Result.ok(locationService.getAllLocation(location));
171 179 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/zone/entity/Zone.java
... ... @@ -2,9 +2,12 @@ package org.jeecg.modules.wms.config.zone.entity;
2 2  
3 3 import java.io.Serializable;
4 4 import java.io.UnsupportedEncodingException;
  5 +import java.util.Arrays;
5 6 import java.util.Date;
  7 +import java.util.List;
6 8 import java.math.BigDecimal;
7 9 import com.baomidou.mybatisplus.annotation.IdType;
  10 +import com.baomidou.mybatisplus.annotation.TableField;
8 11 import com.baomidou.mybatisplus.annotation.TableId;
9 12 import com.baomidou.mybatisplus.annotation.TableName;
10 13 import lombok.Data;
... ... @@ -35,46 +38,68 @@ public class Zone implements Serializable {
35 38 @TableId(type = IdType.AUTO)
36 39 @ApiModelProperty(value = "主键")
37 40 private Integer id;
  41 +
38 42 /** 编码 */
39 43 @Excel(name = "编码", width = 15)
40 44 @ApiModelProperty(value = "编码")
41 45 private String code;
  46 +
42 47 /** 名称 */
43 48 @Excel(name = "名称", width = 15)
44 49 @ApiModelProperty(value = "名称")
45 50 private String name;
  51 +
46 52 /** 仓库编码 */
47 53 @Excel(name = "仓库编码", width = 15)
48 54 @ApiModelProperty(value = "仓库编码")
49 55 private String warehouseCode;
  56 +
50 57 /** 货主编码 */
51 58 @Excel(name = "货主编码", width = 15)
52 59 @ApiModelProperty(value = "货主编码")
53 60 private String companyCode;
  61 +
54 62 /** 库位类型 */
55 63 @Excel(name = "库位类型", width = 15)
56 64 @ApiModelProperty(value = "库位类型")
57 65 private String locationTypeCode;
  66 +
  67 + public void setLocationTypeCode(String locationTypeCode) {
  68 + if (locationTypeCode != null) {
  69 + this.locationTypeCode = locationTypeCode;
  70 + this.locationTypeCodes = Arrays.asList(locationTypeCode.split(","));
  71 + }
  72 + }
  73 +
  74 + @TableField(exist = false)
  75 + private List<String> locationTypeCodes;
  76 +
58 77 /** 创建人 */
59 78 @ApiModelProperty(value = "创建人")
60 79 private String createBy;
  80 +
61 81 /** 创建日期 */
62 82 @ApiModelProperty(value = "创建日期")
63 83 private Date createTime;
  84 +
64 85 /** 更新人 */
65 86 @ApiModelProperty(value = "更新人")
66 87 private String updateBy;
  88 +
67 89 /** 更新日期 */
68 90 @ApiModelProperty(value = "更新日期")
69 91 private Date updateTime;
  92 +
70 93 /** 自定义字段1 */
71 94 @Excel(name = "自定义字段1", width = 15)
72 95 @ApiModelProperty(value = "自定义字段1")
73 96 private String userdef1;
  97 +
74 98 /** 自定义字段2 */
75 99 @Excel(name = "自定义字段2", width = 15)
76 100 @ApiModelProperty(value = "自定义字段2")
77 101 private String userdef2;
  102 +
78 103 /** 自定义字段3 */
79 104 @Excel(name = "自定义字段3", width = 15)
80 105 @ApiModelProperty(value = "自定义字段3")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java
... ... @@ -102,7 +102,7 @@ public class TestController extends HuahengBaseController {
102 102 // @Override
103 103 // @Transactional(timeout = 10)
104 104 // public Result<?> doProcess() throws Exception {
105   -// LambdaUpdateWrapper<SysDataLog> updateWrapper = new UpdateWrapper().lambda();
  105 +// LambdaUpdateWrapper<SysDataLog> updateWrapper = Wrappers.lambdaUpdate();
106 106 // updateWrapper.set(SysDataLog::getUpdateTime, new Date());
107 107 // updateWrapper.eq(SysDataLog::getId, 10);
108 108 // Thread.sleep(1000);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryDetail/controller/InventoryDetailController.java
... ... @@ -11,6 +11,7 @@ import org.jeecg.common.system.base.controller.JeecgController;
11 11 import org.jeecg.common.system.query.QueryGenerator;
12 12 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
13 13 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
  14 +import org.jeecg.utils.HuahengJwtUtil;
14 15 import org.springframework.beans.factory.annotation.Autowired;
15 16 import org.springframework.web.bind.annotation.*;
16 17 import org.springframework.web.servlet.ModelAndView;
... ... @@ -50,10 +51,10 @@ public class InventoryDetailController extends JeecgController&lt;InventoryDetail,
50 51 @GetMapping(value = "/list")
51 52 public Result<IPage<InventoryDetail>> queryPageList(InventoryDetail inventoryDetail, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
52 53 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
  54 + HuahengJwtUtil.setWarehouseCode(req, inventoryDetail);
53 55 QueryWrapper<InventoryDetail> queryWrapper = QueryGenerator.initQueryWrapper(inventoryDetail, req.getParameterMap());
54 56 Page<InventoryDetail> page = new Page<InventoryDetail>(pageNo, pageSize);
55   - IPage<InventoryDetail> pageList = inventoryDetailService.page(page, queryWrapper);
56   - return Result.OK(pageList);
  57 + return Result.OK(inventoryDetailService.queryPage(page, queryWrapper));
57 58 }
58 59  
59 60 /**
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/controller/InventoryHeaderController.java
... ... @@ -22,7 +22,6 @@ import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader;
22 22 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
23 23 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService;
24 24 import org.jeecg.utils.HuahengJwtUtil;
25   -import org.jeecg.utils.StringUtils;
26 25 import org.jeecg.utils.constant.QuantityConstant;
27 26 import org.jeecgframework.poi.excel.ExcelImportUtil;
28 27 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
... ... @@ -30,7 +29,15 @@ import org.jeecgframework.poi.excel.entity.ExportParams;
30 29 import org.jeecgframework.poi.excel.entity.ImportParams;
31 30 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
32 31 import org.springframework.beans.factory.annotation.Autowired;
33   -import org.springframework.web.bind.annotation.*;
  32 +import org.springframework.web.bind.annotation.DeleteMapping;
  33 +import org.springframework.web.bind.annotation.GetMapping;
  34 +import org.springframework.web.bind.annotation.PathVariable;
  35 +import org.springframework.web.bind.annotation.PostMapping;
  36 +import org.springframework.web.bind.annotation.RequestBody;
  37 +import org.springframework.web.bind.annotation.RequestMapping;
  38 +import org.springframework.web.bind.annotation.RequestMethod;
  39 +import org.springframework.web.bind.annotation.RequestParam;
  40 +import org.springframework.web.bind.annotation.RestController;
34 41 import org.springframework.web.multipart.MultipartFile;
35 42 import org.springframework.web.multipart.MultipartHttpServletRequest;
36 43 import org.springframework.web.servlet.ModelAndView;
... ... @@ -167,11 +174,11 @@ public class InventoryHeaderController extends JeecgController&lt;InventoryHeader,
167 174 @GetMapping(value = "/listInventoryDetailByMainId")
168 175 public Result<IPage<InventoryDetail>> listInventoryDetailByMainId(InventoryDetail inventoryDetail,
169 176 @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
170   - HttpServletRequest req) {
171   - QueryWrapper<InventoryDetail> queryWrapper = QueryGenerator.initQueryWrapper(inventoryDetail, req.getParameterMap());
  177 + HttpServletRequest request) {
  178 + HuahengJwtUtil.setWarehouseCode(request, inventoryDetail);
  179 + QueryWrapper<InventoryDetail> queryWrapper = QueryGenerator.initQueryWrapper(inventoryDetail, request.getParameterMap());
172 180 Page<InventoryDetail> page = new Page<InventoryDetail>(pageNo, pageSize);
173   - IPage<InventoryDetail> pageList = inventoryDetailService.page(page, queryWrapper);
174   - return Result.OK(pageList);
  181 + return Result.OK(inventoryDetailService.queryPage(page, queryWrapper));
175 182 }
176 183  
177 184 /**
... ... @@ -261,7 +268,7 @@ public class InventoryHeaderController extends JeecgController&lt;InventoryHeader,
261 268 }
262 269  
263 270 /**
264   - * 有货非锁定列表查询
  271 + * 非锁定列表查询
265 272 * @param inventoryHeader
266 273 * @param pageNo
267 274 * @param pageSize
... ... @@ -269,12 +276,12 @@ public class InventoryHeaderController extends JeecgController&lt;InventoryHeader,
269 276 * @return
270 277 */
271 278 // @AutoLog(value = "库存表-分页列表查询")
272   - @ApiOperation(value = "库存表-有货非锁定列表查询", notes = "库存表-有货非锁定列表查询")
  279 + @ApiOperation(value = "库存表-非锁定列表查询", notes = "库存表-非锁定列表查询")
273 280 @GetMapping(value = "/freeList")
274 281 public Result<IPage<InventoryHeader>> freeList(InventoryHeader inventoryHeader, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
275 282 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
276 283 QueryWrapper<InventoryHeader> queryWrapper = QueryGenerator.initQueryWrapper(inventoryHeader, req.getParameterMap());
277   - queryWrapper.eq("container_status", QuantityConstant.STATUS_CONTAINER_SOME);
  284 + queryWrapper.eq("container_status", QuantityConstant.STATUS_CONTAINER_EMPTY);
278 285 Page<InventoryHeader> page = new Page<InventoryHeader>(pageNo, pageSize);
279 286 IPage<InventoryHeader> pageList = inventoryHeaderService.page(page, queryWrapper);
280 287 return Result.OK(pageList);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java
... ... @@ -7,6 +7,7 @@ import org.jeecg.common.aspect.annotation.Dict;
7 7 import org.jeecgframework.poi.excel.annotation.Excel;
8 8  
9 9 import com.baomidou.mybatisplus.annotation.IdType;
  10 +import com.baomidou.mybatisplus.annotation.TableField;
10 11 import com.baomidou.mybatisplus.annotation.TableId;
11 12 import com.baomidou.mybatisplus.annotation.TableName;
12 13  
... ... @@ -82,6 +83,10 @@ public class InventoryDetail implements Serializable {
82 83 @Excel(name = "任务锁定数量", width = 15)
83 84 @ApiModelProperty(value = "任务锁定数量")
84 85 private java.math.BigDecimal taskQty;
  86 + /** 托盘填充度 */
  87 + @ApiModelProperty(value = "托盘填充度")
  88 + @TableField(exist = false)
  89 + private java.math.BigDecimal fillDensity;
85 90 /** 库存状态 */
86 91 @Excel(name = "库存状态", width = 15)
87 92 @Dict(dicCode = "inventory_status")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
... ... @@ -3,8 +3,13 @@ package org.jeecg.modules.wms.inventory.inventoryHeader.service;
3 3 import java.math.BigDecimal;
4 4 import java.util.List;
5 5  
  6 +import javax.servlet.http.HttpServletRequest;
  7 +
6 8 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
7 9  
  10 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  11 +import com.baomidou.mybatisplus.core.metadata.IPage;
  12 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8 13 import com.baomidou.mybatisplus.extension.service.IService;
9 14  
10 15 /**
... ... @@ -26,4 +31,14 @@ public interface IInventoryDetailService extends IService&lt;InventoryDetail&gt; {
26 31  
27 32 // 求一种物料的可出库存之和
28 33 BigDecimal getAvailSumQty(InventoryDetail inventoryDetail);
  34 +
  35 + /**
  36 + * 分页查询库存明细,组装容器填充度
  37 + * @author TanYibin
  38 + * @createDate 2023年4月7日
  39 + * @param page
  40 + * @param queryWrapper
  41 + * @return
  42 + */
  43 + IPage<InventoryDetail> queryPage(Page<InventoryDetail> page, QueryWrapper<InventoryDetail> queryWrapper);
29 44 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
1 1 package org.jeecg.modules.wms.inventory.inventoryHeader.service.impl;
2 2  
3 3 import java.math.BigDecimal;
  4 +import java.math.RoundingMode;
4 5 import java.util.List;
  6 +import java.util.Map;
  7 +import java.util.Set;
  8 +import java.util.function.Function;
  9 +import java.util.stream.Collectors;
5 10  
  11 +import javax.servlet.http.HttpServletRequest;
  12 +
  13 +import org.jeecg.common.system.query.QueryGenerator;
  14 +import org.jeecg.modules.wms.config.container.entity.Container;
  15 +import org.jeecg.modules.wms.config.container.service.IContainerService;
  16 +import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity;
  17 +import org.jeecg.modules.wms.config.containerCapacity.service.IContainerCapacityService;
  18 +import org.jeecg.modules.wms.config.location.entity.Location;
  19 +import org.jeecg.modules.wms.config.material.entity.Material;
6 20 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
7 21 import org.jeecg.modules.wms.inventory.inventoryHeader.mapper.InventoryDetailMapper;
8 22 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
9 23 import org.jeecg.utils.StringUtils;
10 24 import org.springframework.beans.factory.annotation.Autowired;
11 25 import org.springframework.stereotype.Service;
  26 +import org.springframework.util.CollectionUtils;
  27 +import org.springframework.web.bind.annotation.RequestParam;
12 28  
13 29 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  30 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  31 +import com.baomidou.mybatisplus.core.metadata.IPage;
14 32 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  33 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
15 34 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
16 35  
17 36 /**
... ... @@ -26,6 +45,12 @@ public class InventoryDetailServiceImpl extends ServiceImpl&lt;InventoryDetailMappe
26 45 @Autowired
27 46 private InventoryDetailMapper inventoryDetailMapper;
28 47  
  48 + @Autowired
  49 + private IContainerService containerService;
  50 +
  51 + @Autowired
  52 + private IContainerCapacityService containerCapacityService;
  53 +
29 54 @Override
30 55 public List<InventoryDetail> selectByMainId(String mainId) {
31 56 return inventoryDetailMapper.selectByMainId(mainId);
... ... @@ -82,4 +107,44 @@ public class InventoryDetailServiceImpl extends ServiceImpl&lt;InventoryDetailMappe
82 107 BigDecimal totalQty = inventoryDetailList.stream().map(InventoryDetail::getQty).reduce(BigDecimal.ZERO, BigDecimal::add);
83 108 return totalQty;
84 109 }
  110 +
  111 + @Override
  112 + public IPage<InventoryDetail> queryPage(Page<InventoryDetail> page, QueryWrapper<InventoryDetail> queryWrapper) {
  113 + IPage<InventoryDetail> pageResult = this.page(page, queryWrapper);
  114 + List<InventoryDetail> inventoryDetailList = pageResult.getRecords();
  115 + if (!CollectionUtils.isEmpty(inventoryDetailList)) {
  116 + this.calculateFillDensity(inventoryDetailList);
  117 + }
  118 + return pageResult;
  119 + }
  120 +
  121 + /**
  122 + * 计算库存明细托盘填充度
  123 + * @author TanYibin
  124 + * @createDate 2023年4月7日
  125 + * @param inventoryDetailList
  126 + */
  127 + private void calculateFillDensity(List<InventoryDetail> inventoryDetailList) {
  128 + // 根据仓库编码分组库存明细
  129 + Map<String, List<InventoryDetail>> warehouseInventoryDetailMap =
  130 + inventoryDetailList.stream().collect(Collectors.groupingBy(InventoryDetail::getWarehouseCode));
  131 + for (String warehouseCode : warehouseInventoryDetailMap.keySet()) {
  132 + List<InventoryDetail> warehouseInventoryDetailList = warehouseInventoryDetailMap.get(warehouseCode);
  133 + List<String> containerCodeList = warehouseInventoryDetailList.stream().filter(t -> StringUtils.isNotEmpty(t.getContainerCode()))
  134 + .map(t -> t.getContainerCode()).collect(Collectors.toList());
  135 + // 获取 容器信息
  136 + List<Container> containerList = containerService.getContainerListByCodeList(containerCodeList, warehouseCode);
  137 + Map<String, Container> containerMap = containerList.stream().collect(Collectors.toMap(Container::getCode, Function.identity(), (key1, key2) -> key2));
  138 + for (InventoryDetail inventoryDetail : warehouseInventoryDetailList) {
  139 + Container container = containerMap.get(inventoryDetail.getContainerCode());
  140 + ContainerCapacity containerCapacity =
  141 + containerCapacityService.queryOne(warehouseCode, container.getContainerTypeCode(), inventoryDetail.getMaterialCode());
  142 + if (containerCapacity != null && containerCapacity.getQty() != null && containerCapacity.getQty().compareTo(BigDecimal.ZERO) > 0) {
  143 + // 进行填充度计算 保留2位小数
  144 + BigDecimal fillDensity = inventoryDetail.getQty().divide(containerCapacity.getQty(), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  145 + inventoryDetail.setFillDensity(fillDensity);
  146 + }
  147 + }
  148 + }
  149 + }
85 150 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apkinfo/controller/ApkInfoController.java 0 → 100644
  1 +package org.jeecg.modules.wms.monitor.apkinfo.controller;
  2 +
  3 +import java.io.File;
  4 +import java.util.Arrays;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +import java.util.stream.Collectors;
  8 +import java.io.IOException;
  9 +import java.io.UnsupportedEncodingException;
  10 +import java.net.URLDecoder;
  11 +import javax.servlet.http.HttpServletRequest;
  12 +import javax.servlet.http.HttpServletResponse;
  13 +
  14 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  15 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  16 +import net.dongliu.apk.parser.ApkFile;
  17 +import net.dongliu.apk.parser.bean.ApkMeta;
  18 +import org.jeecg.common.api.vo.Result;
  19 +import org.jeecg.common.system.query.QueryGenerator;
  20 +import org.jeecg.common.util.IPUtils;
  21 +import org.jeecg.common.util.MD5Util;
  22 +import org.jeecg.common.util.oConvertUtils;
  23 +import org.jeecg.modules.wms.monitor.apkinfo.entity.ApkInfo;
  24 +import org.jeecg.modules.wms.monitor.apkinfo.service.IApkInfoService;
  25 +
  26 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  27 +import com.baomidou.mybatisplus.core.metadata.IPage;
  28 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  29 +import lombok.extern.slf4j.Slf4j;
  30 +
  31 +import org.jeecgframework.poi.excel.ExcelImportUtil;
  32 +import org.jeecgframework.poi.excel.def.NormalExcelConstants;
  33 +import org.jeecgframework.poi.excel.entity.ExportParams;
  34 +import org.jeecgframework.poi.excel.entity.ImportParams;
  35 +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
  36 +import org.jeecg.common.system.base.controller.JeecgController;
  37 +import org.springframework.beans.factory.annotation.Autowired;
  38 +import org.springframework.beans.factory.annotation.Value;
  39 +import org.springframework.web.bind.annotation.*;
  40 +import org.springframework.web.multipart.MultipartFile;
  41 +import org.springframework.web.multipart.MultipartHttpServletRequest;
  42 +import org.springframework.web.servlet.ModelAndView;
  43 +import com.alibaba.fastjson.JSON;
  44 +import io.swagger.annotations.Api;
  45 +import io.swagger.annotations.ApiOperation;
  46 +import org.jeecg.common.aspect.annotation.AutoLog;
  47 +
  48 + /**
  49 + * @Description: apk_info
  50 + * @Author: jeecg-boot
  51 + * @Date: 2023-04-10
  52 + * @Version: V1.0
  53 + */
  54 +@Api(tags="apk_info")
  55 +@RestController
  56 +@RequestMapping("/monitor/apkinfo")
  57 +@Slf4j
  58 +public class ApkInfoController extends JeecgController<ApkInfo, IApkInfoService> {
  59 +
  60 + @Value(value = "${jeecg.path.upload}")
  61 + private String uploadpath;
  62 +
  63 + @Value(value = "${server.servlet.context-path}")
  64 + private String ctx;
  65 +
  66 + @Autowired
  67 + private IApkInfoService apkInfoService;
  68 +
  69 + /**
  70 + * 分页列表查询
  71 + *
  72 + * @param apkInfo
  73 + * @param pageNo
  74 + * @param pageSize
  75 + * @param req
  76 + * @return
  77 + */
  78 + //@AutoLog(value = "apk_info-分页列表查询")
  79 + @ApiOperation(value="apk_info-分页列表查询", notes="apk_info-分页列表查询")
  80 + @GetMapping(value = "/list")
  81 + public Result<IPage<ApkInfo>> queryPageList(ApkInfo apkInfo,
  82 + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  83 + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
  84 + HttpServletRequest req) {
  85 + QueryWrapper<ApkInfo> queryWrapper = QueryGenerator.initQueryWrapper(apkInfo, req.getParameterMap());
  86 + queryWrapper.orderByDesc("id");
  87 + Page<ApkInfo> page = new Page<ApkInfo>(pageNo, pageSize);
  88 + IPage<ApkInfo> pageList = apkInfoService.page(page, queryWrapper);
  89 + return Result.OK(pageList);
  90 + }
  91 +
  92 + /**
  93 + * 添加
  94 + *
  95 + * @param apkInfo
  96 + * @return
  97 + */
  98 + @AutoLog(value = "apk_info-添加")
  99 + @ApiOperation(value="apk_info-添加", notes="apk_info-添加")
  100 + @PostMapping(value = "/add")
  101 + public Result<String> add(@RequestBody ApkInfo apkInfo) {
  102 + apkInfoService.save(apkInfo);
  103 + return Result.OK("添加成功!");
  104 + }
  105 +
  106 + /**
  107 + * 编辑
  108 + *
  109 + * @param apkInfo
  110 + * @return
  111 + */
  112 + @AutoLog(value = "apk_info-编辑")
  113 + @ApiOperation(value="apk_info-编辑", notes="apk_info-编辑")
  114 + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
  115 + public Result<String> edit(@RequestBody ApkInfo apkInfo) {
  116 + apkInfoService.updateById(apkInfo);
  117 + return Result.OK("编辑成功!");
  118 + }
  119 +
  120 + /**
  121 + * 通过id删除
  122 + *
  123 + * @param id
  124 + * @return
  125 + */
  126 + @AutoLog(value = "apk_info-通过id删除")
  127 + @ApiOperation(value="apk_info-通过id删除", notes="apk_info-通过id删除")
  128 + @DeleteMapping(value = "/delete")
  129 + public Result<String> delete(@RequestParam(name="id",required=true) String id) {
  130 + apkInfoService.removeById(id);
  131 + return Result.OK("删除成功!");
  132 + }
  133 +
  134 + /**
  135 + * 批量删除
  136 + *
  137 + * @param ids
  138 + * @return
  139 + */
  140 + @AutoLog(value = "apk_info-批量删除")
  141 + @ApiOperation(value="apk_info-批量删除", notes="apk_info-批量删除")
  142 + @DeleteMapping(value = "/deleteBatch")
  143 + public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
  144 + this.apkInfoService.removeByIds(Arrays.asList(ids.split(",")));
  145 + return Result.OK("批量删除成功!");
  146 + }
  147 +
  148 + /**
  149 + * 通过id查询
  150 + *
  151 + * @param id
  152 + * @return
  153 + */
  154 + //@AutoLog(value = "apk_info-通过id查询")
  155 + @ApiOperation(value="apk_info-通过id查询", notes="apk_info-通过id查询")
  156 + @GetMapping(value = "/queryById")
  157 + public Result<ApkInfo> queryById(@RequestParam(name="id",required=true) String id) {
  158 + ApkInfo apkInfo = apkInfoService.getById(id);
  159 + if(apkInfo==null) {
  160 + return Result.error("未找到对应数据");
  161 + }
  162 + return Result.OK(apkInfo);
  163 + }
  164 +
  165 + @ApiOperation(value="解析apk", notes="解析apk")
  166 + @GetMapping(value = "/parseApk")
  167 + public Result<ApkInfo> parseApk(@RequestParam(name="filename",required=true) String filename) {
  168 + try {
  169 + File file = new File(uploadpath + File.separator + filename);
  170 + String md5 = MD5Util.MD5Encode(filename, "utf-8");
  171 + ApkFile apkFile = new ApkFile(file.getAbsoluteFile());
  172 + ApkMeta apkMeta = apkFile.getApkMeta();
  173 +
  174 + LambdaQueryWrapper<ApkInfo> query = Wrappers.lambdaQuery();
  175 + query.eq(ApkInfo::getPkgname, apkMeta.getPackageName())
  176 + .eq(ApkInfo::getVersioncode, apkMeta.getVersionCode());
  177 +
  178 + ApkInfo apkinfo = apkInfoService.getOne(query);
  179 +
  180 + apkinfo.setUrl("/sys/common/static/" + filename);
  181 + apkinfo.setPkgname(apkMeta.getPackageName());
  182 + apkinfo.setVersioncode(apkMeta.getVersionCode().intValue());
  183 + apkinfo.setVersionname(apkMeta.getVersionName());
  184 + apkinfo.setMd5(md5);
  185 + apkInfoService.saveOrUpdate(apkinfo);
  186 +
  187 + return Result.OK(apkinfo);
  188 + }catch (Exception e){
  189 + return Result.error(e.getMessage());
  190 + }
  191 + }
  192 +
  193 + /**
  194 + * 导出excel
  195 + *
  196 + * @param request
  197 + * @param apkInfo
  198 + */
  199 + @RequestMapping(value = "/exportXls")
  200 + public ModelAndView exportXls(HttpServletRequest request, ApkInfo apkInfo) {
  201 + return super.exportXls(request, apkInfo, ApkInfo.class, "apk_info");
  202 + }
  203 +
  204 + /**
  205 + * 通过excel导入数据
  206 + *
  207 + * @param request
  208 + * @param response
  209 + * @return
  210 + */
  211 + @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
  212 + public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
  213 + return super.importExcel(request, response, ApkInfo.class);
  214 + }
  215 +
  216 +}
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apkinfo/entity/ApkInfo.java 0 → 100644
  1 +package org.jeecg.modules.wms.monitor.apkinfo.entity;
  2 +
  3 +import java.io.Serializable;
  4 +import java.io.UnsupportedEncodingException;
  5 +import java.util.Date;
  6 +import java.math.BigDecimal;
  7 +import com.baomidou.mybatisplus.annotation.IdType;
  8 +import com.baomidou.mybatisplus.annotation.TableId;
  9 +import com.baomidou.mybatisplus.annotation.TableName;
  10 +import lombok.Data;
  11 +import com.fasterxml.jackson.annotation.JsonFormat;
  12 +import org.springframework.format.annotation.DateTimeFormat;
  13 +import org.jeecgframework.poi.excel.annotation.Excel;
  14 +import org.jeecg.common.aspect.annotation.Dict;
  15 +import io.swagger.annotations.ApiModel;
  16 +import io.swagger.annotations.ApiModelProperty;
  17 +import lombok.EqualsAndHashCode;
  18 +import lombok.experimental.Accessors;
  19 +
  20 +/**
  21 + * @Description: apk_info
  22 + * @Author: jeecg-boot
  23 + * @Date: 2023-04-10
  24 + * @Version: V1.0
  25 + */
  26 +@Data
  27 +@TableName("apk_info")
  28 +@Accessors(chain = true)
  29 +@EqualsAndHashCode(callSuper = false)
  30 +@ApiModel(value="apk_info对象", description="apk_info")
  31 +public class ApkInfo implements Serializable {
  32 + private static final long serialVersionUID = 1L;
  33 +
  34 + /**id*/
  35 + @TableId(type = IdType.AUTO)
  36 + @ApiModelProperty(value = "id")
  37 + private java.lang.Integer id;
  38 + /**应用名称*/
  39 + @Excel(name = "应用名称", width = 15)
  40 + @ApiModelProperty(value = "应用名称")
  41 + private java.lang.String pkgname;
  42 + /**版本号*/
  43 + @Excel(name = "版本号", width = 15)
  44 + @ApiModelProperty(value = "版本号")
  45 + private java.lang.Integer versioncode;
  46 + /**版本名称*/
  47 + @Excel(name = "版本名称", width = 15)
  48 + @ApiModelProperty(value = "版本名称")
  49 + private java.lang.String versionname;
  50 + /**下载地址*/
  51 + @Excel(name = "下载地址", width = 15)
  52 + @ApiModelProperty(value = "下载地址")
  53 + private java.lang.String url;
  54 + /**md5校验码*/
  55 + @Excel(name = "md5校验码", width = 15)
  56 + @ApiModelProperty(value = "md5校验码")
  57 + private java.lang.String md5;
  58 + /** 创建人 */
  59 + @ApiModelProperty(value = "创建人")
  60 + private String createBy;
  61 + /** 创建日期 */
  62 + @ApiModelProperty(value = "创建日期")
  63 + private Date createTime;
  64 + /** 更新人 */
  65 + @ApiModelProperty(value = "更新人")
  66 + private String updateBy;
  67 + /** 更新日期 */
  68 + @ApiModelProperty(value = "更新日期")
  69 + private Date updateTime;
  70 +}
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apkinfo/mapper/ApkInfoMapper.java 0 → 100644
  1 +package org.jeecg.modules.wms.monitor.apkinfo.mapper;
  2 +
  3 +import java.util.List;
  4 +
  5 +import org.apache.ibatis.annotations.Param;
  6 +import org.jeecg.modules.wms.monitor.apkinfo.entity.ApkInfo;
  7 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  8 +
  9 +/**
  10 + * @Description: apk_info
  11 + * @Author: jeecg-boot
  12 + * @Date: 2023-04-10
  13 + * @Version: V1.0
  14 + */
  15 +public interface ApkInfoMapper extends BaseMapper<ApkInfo> {
  16 +
  17 +}
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apkinfo/mapper/xml/ApkInfoMapper.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="org.jeecg.modules.wms.monitor.apkinfo.mapper.ApkInfoMapper">
  4 +
  5 +</mapper>
0 6 \ No newline at end of file
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apkinfo/service/IApkInfoService.java 0 → 100644
  1 +package org.jeecg.modules.wms.monitor.apkinfo.service;
  2 +
  3 +import org.jeecg.modules.wms.monitor.apkinfo.entity.ApkInfo;
  4 +import com.baomidou.mybatisplus.extension.service.IService;
  5 +
  6 +/**
  7 + * @Description: apk_info
  8 + * @Author: jeecg-boot
  9 + * @Date: 2023-04-10
  10 + * @Version: V1.0
  11 + */
  12 +public interface IApkInfoService extends IService<ApkInfo> {
  13 +
  14 +}
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/apkinfo/service/impl/ApkInfoServiceImpl.java 0 → 100644
  1 +package org.jeecg.modules.wms.monitor.apkinfo.service.impl;
  2 +
  3 +import org.jeecg.modules.wms.monitor.apkinfo.entity.ApkInfo;
  4 +import org.jeecg.modules.wms.monitor.apkinfo.mapper.ApkInfoMapper;
  5 +import org.jeecg.modules.wms.monitor.apkinfo.service.IApkInfoService;
  6 +import org.springframework.stereotype.Service;
  7 +
  8 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9 +
  10 +/**
  11 + * @Description: apk_info
  12 + * @Author: jeecg-boot
  13 + * @Date: 2023-04-10
  14 + * @Version: V1.0
  15 + */
  16 +@Service
  17 +public class ApkInfoServiceImpl extends ServiceImpl<ApkInfoMapper, ApkInfo> implements IApkInfoService {
  18 +
  19 +}
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerHeader.java
... ... @@ -4,6 +4,7 @@ import java.io.Serializable;
4 4 import java.io.UnsupportedEncodingException;
5 5 import java.util.Date;
6 6 import com.baomidou.mybatisplus.annotation.IdType;
  7 +import com.baomidou.mybatisplus.annotation.TableField;
7 8 import com.baomidou.mybatisplus.annotation.TableId;
8 9 import com.baomidou.mybatisplus.annotation.TableName;
9 10 import org.jeecgframework.poi.excel.annotation.Excel;
... ... @@ -68,6 +69,10 @@ public class ReceiptContainerHeader implements Serializable {
68 69 @Excel(name = "目标出入口", width = 15)
69 70 @ApiModelProperty(value = "目标出入口")
70 71 private String toPort;
  72 + /** 物料填充状态 */
  73 + @ApiModelProperty(value = "物料填充状态")
  74 + @TableField(exist = false)
  75 + private String containerFillStatus;
71 76 /** 备用字段1 */
72 77 @Excel(name = "备用字段1", width = 15)
73 78 @ApiModelProperty(value = "备用字段1")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
... ... @@ -127,8 +127,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
127 127 String fromLocationCode = receiptContainerHeader.getFromLocationCode();
128 128 String toLocaitonCode = receiptContainerHeader.getToLocationCode();
129 129 if (StringUtils.isNotEmpty(fromLocationCode)) {
130   - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
131   - warehouseCode);
  130 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
132 131 if (!success) {
133 132 throw new JeecgBootException("更新起始库位状态失败");
134 133 }
... ... @@ -136,8 +135,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
136 135 String zoneCode = null;
137 136 if (StringUtils.isNotEmpty(toLocaitonCode)) {
138 137 if (!toLocaitonCode.equals(fromLocationCode)) {
139   - success = locationService.updateStatusByOriginStatus(toLocaitonCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
140   - warehouseCode);
  138 + success = locationService.updateStatus(toLocaitonCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
141 139 if (!success) {
142 140 throw new JeecgBootException("更新目标库位状态失败");
143 141 }
... ... @@ -161,8 +159,13 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
161 159 if (!success) {
162 160 throw new JeecgBootException("更新入库组盘头状态失败");
163 161 }
  162 + String containerFillStatus = QuantityConstant.STATUS_CONTAINER_FILL_SOME;
  163 + if (!StringUtils.isEmpty(receiptContainerHeader.getContainerFillStatus())) {
  164 + containerFillStatus = receiptContainerHeader.getContainerFillStatus();
  165 + }
164 166 TaskHeader taskHeader = new TaskHeader();
165 167 taskHeader.setContainerCode(containerCode);
  168 + taskHeader.setContainerFillStatus(containerFillStatus);
166 169 taskHeader.setTaskType(receiptContainerHeader.getTaskType());
167 170 taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
168 171 taskHeader.setFromLocationCode(fromLocationCode);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
... ... @@ -42,7 +42,6 @@ public class ReceiveController {
42 42 * 通过详情ID查询
43 43 * @return
44 44 */
45   - @AutoLog("入库单详情-通过详情ID查询")
46 45 @ApiOperation(value = "入库单详情-通过详情ID查询", notes = "入库单详情-通过详情ID查询")
47 46 @PostMapping("/listReceiveByReceiptId")
48 47 @ResponseBody
... ... @@ -55,7 +54,7 @@ public class ReceiveController {
55 54 receive.setId(receiptDetail.getId());
56 55 receive.setMaterialCode(receiptDetail.getMaterialCode());
57 56 receive.setMaterialName(receiptDetail.getMaterialName());
58   - receive.setMateiralSpec(receiptDetail.getMaterialSpec());
  57 + receive.setMaterialSpec(receiptDetail.getMaterialSpec());
59 58 receive.setMaterialUnit(receiptDetail.getMaterialUnit());
60 59 receive.setInventoryStatus(receiptDetail.getInventoryStatus());
61 60 receive.setBatch(receiptDetail.getBatch());
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/domain/Receive.java
... ... @@ -2,20 +2,35 @@ package org.jeecg.modules.wms.receipt.receiving.domain;
2 2  
3 3 import lombok.Data;
4 4  
  5 +import java.io.Serializable;
5 6 import java.math.BigDecimal;
6 7  
  8 +import org.jeecg.common.aspect.annotation.Dict;
  9 +
7 10 @Data
8   -public class Receive {
  11 +public class Receive implements Serializable {
  12 + private static final long serialVersionUID = 1L;
9 13  
10 14 private Integer id;// 入库详情ID
  15 +
11 16 private String containerCode; // 托盘号
  17 +
12 18 private String uniqueCode;// 唯一号
  19 +
13 20 private String materialCode;
  21 +
14 22 private String materialName;
15   - private String mateiralSpec;
  23 +
  24 + private String materialSpec;
  25 +
16 26 private String materialUnit;
  27 +
  28 + @Dict(dicCode = "inventory_status")
17 29 private String inventoryStatus;
  30 +
18 31 private String batch;
  32 +
19 33 private BigDecimal qty; // 可收数量
  34 +
20 35 private BigDecimal taskQty; // 实收数量
21 36 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java
... ... @@ -30,6 +30,7 @@ import org.jeecg.utils.StringUtils;
30 30 import org.jeecg.utils.constant.QuantityConstant;
31 31 import org.springframework.stereotype.Service;
32 32 import org.springframework.transaction.annotation.Transactional;
  33 +import org.springframework.util.CollectionUtils;
33 34  
34 35 import com.alibaba.fastjson.JSON;
35 36 import org.jeecg.common.exception.JeecgBootException;
... ... @@ -48,18 +49,25 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
48 49  
49 50 @Resource
50 51 private IReceiptDetailService receiptDetailService;
  52 +
51 53 @Resource
52 54 private IContainerService containerService;
  55 +
53 56 @Resource
54 57 private IMaterialService materialService;
  58 +
55 59 @Resource
56 60 private IReceiptContainerHeaderService receiptContainerHeaderService;
  61 +
57 62 @Resource
58 63 private IContainerTypeService containerTypeService;
  64 +
59 65 @Resource
60 66 private IReceiptContainerDetailService receiptContainerDetailService;
  67 +
61 68 @Resource
62 69 private IReceiptHeaderService receiptHeaderService;
  70 +
63 71 @Resource
64 72 private IParameterConfigurationService parameterConfigurationService;
65 73  
... ... @@ -108,10 +116,11 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
108 116 }
109 117 String containerStatus = container.getStatus();
110 118 if (containerStatus.equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
111   - return Result.error("容器被锁定,不能用于收货");
  119 + return Result.error("容器被锁定不能用于收货");
112 120 }
113   - if (containerStatus.equals(QuantityConstant.STATUS_CONTAINER_FULL)) {
114   - return Result.error("容器已经是满盘,不能用于收货");
  121 + String containerFillStatus = container.getFillStatus();
  122 + if (!StringUtils.isEmpty(containerFillStatus) && containerFillStatus.equals(QuantityConstant.STATUS_CONTAINER_FILL_FULL)) {
  123 + return Result.error("容器已经是满盘,不能用于收货");
115 124 }
116 125 String containerTypeCode = container.getContainerTypeCode();
117 126 if (StringUtils.isEmpty(containerTypeCode)) {
... ... @@ -121,15 +130,10 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
121 130 if (containerType == null) {
122 131 return Result.error("容器类型为空");
123 132 }
124   - BigDecimal sumQty = receiveList.stream().map(Receive::getTaskQty).reduce(BigDecimal.ZERO, BigDecimal::add);
125   - if (sumQty.compareTo(BigDecimal.ZERO) <= 0) {
126   - return Result.error("总的收货数量必须大于0");
127   - }
128 133 int taskType = QuantityConstant.TASK_TYPE_WHOLERECEIPT;
129 134 String fromLocationCode = container.getLocationCode();
130 135 if (StringUtils.isNotEmpty(fromLocationCode)) {
131 136 taskType = QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT;
132   -
133 137 }
134 138 ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getUnCompleteReceiptContainerByCode(containerCode, warehouseCode);
135 139 if (receiptContainerHeader != null) {
... ... @@ -156,7 +160,6 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
156 160 throw new JeecgBootException("保存入库组盘头失败");
157 161 }
158 162 }
159   -
160 163 List<ReceiptDetail> receiptDetailList = new ArrayList<>();
161 164 List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
162 165 for (Receive receive : receiveList) {
... ... @@ -165,24 +168,25 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
165 168 // 收货数量
166 169 BigDecimal taskQty = receive.getTaskQty();
167 170 if (qty == null || taskQty == null) {
168   - throw new JeecgBootException("收货数量或可收数量为空");
  171 + throw new JeecgBootException("物料编码:" + receive.getMaterialCode() + " 收货数量或可收数量为空");
169 172 }
170 173 if (taskQty.compareTo(qty) > 0) {
171   - throw new JeecgBootException("收货数量不能大于可收数量,收货数量:" + taskQty + "可收数量:" + qty);
  174 + throw new JeecgBootException("物料编码:" + receive.getMaterialCode() + " 收货数量不能大于可收数量,收货数量:" + taskQty + "可收数量:" + qty);
172 175 }
  176 + // 入库单明细为0 跳过组盘
173 177 if (taskQty.compareTo(BigDecimal.ZERO) <= 0) {
174 178 continue;
175 179 }
176 180 ReceiptDetail receiptDetail = receiptDetailService.getById(receive.getId());
177 181 if (receiptDetail == null) {
178   - throw new JeecgBootException("没有找到入库单详情,id:" + receive.getId());
  182 + throw new JeecgBootException("没有找到入库单详情ID:" + receive.getId());
179 183 }
180 184 ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
181 185 if (receiptHeader == null) {
182   - throw new JeecgBootException("没有找到入库单,id:" + receiptDetail.getReceiptId());
  186 + throw new JeecgBootException("没有找到入库单ID:" + receiptDetail.getReceiptId());
183 187 }
184 188 if (!receiptHeader.getWarehouseCode().equals(warehouseCode)) {
185   - throw new JeecgBootException("仓库编码不一致,不能操作");
  189 + throw new JeecgBootException("入库单操作仓库错误,请选择 " + receiptHeader.getWarehouseCode() + " 操作");
186 190 }
187 191 String materialCode = receiptDetail.getMaterialCode();
188 192 if (StringUtils.isEmpty(materialCode)) {
... ... @@ -196,7 +200,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
196 200 BigDecimal receiptTaskQty = receiptDetail.getTaskQty();
197 201 receiptTaskQty = receiptTaskQty.add(taskQty);
198 202 if (receiptTaskQty.compareTo(receiptQty) > 0) {
199   - throw new JeecgBootException("收货数量必须小于单据数量");
  203 + throw new JeecgBootException("收货数量不能大于单据数量");
200 204 }
201 205 receiptDetail.setTaskQty(receiptTaskQty);
202 206 receiptDetailList.add(receiptDetail);
... ... @@ -233,12 +237,13 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
233 237 receiptContainerDetailList.add(receiptContainerDetail);
234 238 }
235 239 }
236   -
  240 + if (CollectionUtils.isEmpty(receiptDetailList)) {
  241 + throw new JeecgBootException("请填入收货数量");
  242 + }
237 243 result = receiptDetailService.updateBatchById(receiptDetailList);
238 244 if (!result) {
239 245 throw new JeecgBootException("批量更新入库单详情失败");
240 246 }
241   -
242 247 if (receiptContainerDetailList.size() > 0) {
243 248 result = receiptContainerDetailService.saveBatch(receiptContainerDetailList);
244 249 if (!result) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
... ... @@ -255,7 +255,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
255 255 return Result.error("配盘时, 没有找到容器, 编码" + containerCode);
256 256 }
257 257 if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
258   - return Result.error("配盘时, 托盘已经锁定,不能再组盘");
  258 + return Result.error("配盘时, 容器已经锁定,不能再组盘");
259 259 }
260 260 BigDecimal shipmentDetailQty = shipmentDetail.getQty();
261 261 BigDecimal shipmentDetailTaskQty = shipmentDetail.getTaskQty();
... ... @@ -470,13 +470,11 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
470 470 if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
471 471 return Result.error("生成出库任务时, 托盘已经锁定" + containerCode);
472 472 }
473   - container.setStatus(QuantityConstant.STATUS_CONTAINER_LOCK);
474   - boolean success = containerService.updateById(container);
  473 + boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
475 474 if (!success) {
476 475 throw new JeecgBootException("生成出库任务时, 更新容器失败" + containerCode);
477 476 }
478   - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
479   - warehouseCode);
  477 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
480 478 if (!success) {
481 479 throw new JeecgBootException("生成出库任务时, 更新库位失败" + fromLocationCode);
482 480 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
... ... @@ -223,8 +223,7 @@ public class CycleCountDetailServiceImpl extends ServiceImpl&lt;CycleCountDetailMap
223 223 }
224 224  
225 225 // 生成任务同时锁定库位
226   - boolean success = locationService.updateStatusByOriginStatus(location.getCode(), QuantityConstant.STATUS_LOCATION_LOCK,
227   - QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  226 + boolean success = locationService.updateStatus(location.getCode(), QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
228 227 if (!success) {
229 228 throw new JeecgBootException("更新库位状态失败");
230 229 }
... ... @@ -313,11 +312,10 @@ public class CycleCountDetailServiceImpl extends ServiceImpl&lt;CycleCountDetailMap
313 312 // lambdaQueryWrapper.eq(InventoryDetail::getContainerCode,task.getContainerCode());
314 313 // List<InventoryDetail> inventoryDetails = inventoryDetailService.list(lambdaQueryWrapper);
315 314  
316   - Result result = new Result();
317   - result.setResult(cycleCountHeader.getId());
  315 + Result<Integer> result = new Result<Integer>();
318 316 result.setCode(200);
319 317 result.setMessage("盘点任务生成成功");
320   -
  318 + result.setResult(cycleCountHeader.getId());
321 319 return result;
322 320 }
323 321  
... ... @@ -359,11 +357,10 @@ public class CycleCountDetailServiceImpl extends ServiceImpl&lt;CycleCountDetailMap
359 357 cycleCountDetailChild.setCountedQty(countedQty);
360 358 cycleCountDetailChildServiceImpl.save(cycleCountDetailChild);
361 359  
362   - Result result = new Result();
  360 + Result<Integer> result = new Result<Integer>();
363 361 result.setCode(200);
364 362 result.setMessage("成功");
365 363 result.setResult(cycleCountDetail.getCycleCountHeadId());
366   -
367 364 return result;
368 365 }
369 366  
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
... ... @@ -167,12 +167,13 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl
167 167 if (container == null) {
168 168 throw new JeecgBootException("取消AGV任务。 根据容器号没有找到容器");
169 169 }
170   - String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY;
171   - List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode);
172   - if (inventoryDetailList.size() != 0) {
173   - containerStatus = QuantityConstant.STATUS_CONTAINER_SOME;
174   - }
175   - success = containerService.updateStatusByOriginStatus(containerCode, containerStatus, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
  170 + // 2023-04-11 托盘状态与填充状态分离
  171 +// String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY;
  172 +// List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode);
  173 +// if (inventoryDetailList.size() != 0) {
  174 +// containerStatus = QuantityConstant.STATUS_CONTAINER_SOME;
  175 +// }
  176 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
176 177 if (!success) {
177 178 throw new JeecgBootException("取消AGV任务。 更新容器状态失败");
178 179 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
... ... @@ -102,7 +102,6 @@ public class TaskHeaderController extends HuahengBaseController {
102 102 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
103 103 HuahengJwtUtil.setWarehouseCode(req, taskHeader);
104 104 QueryWrapper<TaskHeader> queryWrapper = QueryGenerator.initQueryWrapper(taskHeader, req.getParameterMap());
105   - queryWrapper.orderByDesc("id");
106 105 Page<TaskHeader> page = new Page<TaskHeader>(pageNo, pageSize);
107 106 IPage<TaskHeader> pageList = taskHeaderService.page(page, queryWrapper);
108 107 return Result.OK(pageList);
... ... @@ -387,7 +386,6 @@ public class TaskHeaderController extends HuahengBaseController {
387 386 if (taskHeader == null) {
388 387 return Result.error("taskHeader不能为空");
389 388 }
390   - Integer taskId = taskHeader.getId();
391 389 Result result = huahengMultiHandlerService.sendTaskToWcs(taskHeader);
392 390 return result;
393 391 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
... ... @@ -9,6 +9,7 @@ import org.jeecg.common.aspect.annotation.Dict;
9 9 import org.jeecgframework.poi.excel.annotation.Excel;
10 10  
11 11 import com.baomidou.mybatisplus.annotation.IdType;
  12 +import com.baomidou.mybatisplus.annotation.TableField;
12 13 import com.baomidou.mybatisplus.annotation.TableId;
13 14 import com.baomidou.mybatisplus.annotation.TableName;
14 15  
... ... @@ -62,6 +63,10 @@ public class TaskHeader implements Serializable {
62 63 @Dict(dicCode = "task_type")
63 64 @ApiModelProperty(value = "任务类型")
64 65 private Integer taskType;
  66 + /** 容器填充状态 */
  67 + @Excel(name = "容器填充状态", width = 15)
  68 + @ApiModelProperty(value = "容器填充状态")
  69 + private String containerFillStatus;
65 70 /** 内部任务类型 */
66 71 @Excel(name = "内部任务类型", width = 15)
67 72 @ApiModelProperty(value = "内部任务类型")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
... ... @@ -246,20 +246,21 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
246 246 return Result.error("创建移库任务时,目标库位和源库位不在同一个区域");
247 247 }
248 248  
249   - // 2. 记住移库前的容器类型,因为空托盘组无法区分
250   - Container container = containerService.getContainerByCode(fromLocation.getContainerCode(), warehouseCode);
251   - container.setLastStatus(container.getStatus());
252   - boolean success = containerService.updateById(container);
253   - if (!success) {
254   - throw new JeecgBootException("创建移库任务时,更新容器状态失败,容器号" + fromLocation.getContainerCode());
255   - }
  249 + // 2023-04-11 托盘状态与填充状态分离 无需再更新字段
  250 +// // 2. 记住移库前的容器类型,因为空托盘组无法区分
  251 +// Container container = containerService.getContainerByCode(fromLocation.getContainerCode(), warehouseCode);
  252 +// container.setLastStatus(container.getStatus());
  253 +// boolean success = containerService.updateById(container);
  254 +// if (!success) {
  255 +// throw new JeecgBootException("创建移库任务时,更新容器状态失败,容器号" + fromLocation.getContainerCode());
  256 +// }
256 257  
257 258 // 3. 判断源库位旁边有托盘但是没有任务,那么不允许移库
258 259 if (fromLocation.getRowFlag() == QuantityConstant.ROW_OUT) {
259 260 // 内侧库位
260   - Location location1 = locationService.getNear(fromLocation);
261   - String locationCode = location1.getCode();
262   - if (StringUtils.isNotEmpty(location1.getContainerCode())) {
  261 + Location location = locationService.getNear(fromLocation);
  262 + String locationCode = location.getCode();
  263 + if (StringUtils.isNotEmpty(location.getContainerCode())) {
263 264 TaskHeader taskHeader = getUnCompleteTaskByFromLocationCode(fromLocationCode, warehouseCode);
264 265 if (taskHeader != null) {
265 266 preTaskNo = taskHeader.getId();
... ... @@ -285,18 +286,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
285 286 taskHeader.setToLocationCode(toLocationCode);
286 287 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
287 288 taskHeader.setPreTaskNo(preTaskNo);
288   - success = taskHeaderService.save(taskHeader);
  289 + boolean success = taskHeaderService.save(taskHeader);
289 290 if (!success) {
290 291 throw new JeecgBootException("创建移库任务时,创建任务失败");
291 292 }
292 293  
293   - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
294   - warehouseCode);
  294 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
295 295 if (!success) {
296 296 throw new JeecgBootException("创建移库任务时, 起始库位" + fromLocationCode + "更新失败");
297 297 }
298   - success =
299   - locationService.updateStatusByOriginStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  298 + success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
300 299 if (!success) {
301 300 throw new JeecgBootException("创建移库任务时, 终点库位" + toLocationCode + "更新失败");
302 301 }
... ... @@ -353,8 +352,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
353 352 throw new JeecgBootException("创建出库查看任务时,更新库存详情失败");
354 353 }
355 354 }
356   - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
357   - warehouseCode);
  355 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
358 356 if (!success) {
359 357 throw new JeecgBootException("创建出库查看任务时,更新库位状态失败");
360 358 }
... ... @@ -403,6 +401,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
403 401 return Result.error("创建跨站任务时,容器为空");
404 402 }
405 403 if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
  404 + return Result.error("创建跨站任务时, 容器状态不为空闲状态");
  405 + }
  406 + if (!container.getFillStatus().equals(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY)) {
406 407 return Result.error("创建跨站任务时,容器状态不为空托盘");
407 408 }
408 409 Port fromPort = portService.getPortByCode(fromPortCode, warehouseCode);
... ... @@ -516,7 +517,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
516 517 return Result.error("创建空托盘组入库任务时, 容器已在库位" + container.getLocationCode() + "上");
517 518 }
518 519 if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
519   - return Result.error("创建空托盘组入库任务时,容器状态不为空容器");
  520 + return Result.error("创建空托盘组入库任务时,容器状态不为空闲状态");
  521 + }
  522 + if (!container.getFillStatus().equals(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY)) {
  523 + return Result.error("创建空托盘组入库任务时,容器状态不为空托盘");
520 524 }
521 525 boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
522 526 if (!success) {
... ... @@ -530,8 +534,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
530 534 if (!toLocation.getStatus().equals(QuantityConstant.STATUS_LOCATION_EMPTY)) {
531 535 return Result.error("创建空托盘组入库任务时,目标库位状态不是空闲");
532 536 }
533   - success = locationService.updateStatusByOriginStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
534   - warehouseCode);
  537 + success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
535 538 if (!success) {
536 539 throw new JeecgBootException("创建空托盘组入库任务时, 更新库位状态失败");
537 540 }
... ... @@ -568,8 +571,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
568 571 if (container == null) {
569 572 return Result.error("创建空托盘组出库任务时, 没有找到容器:" + containerCode);
570 573 }
571   - if (!QuantityConstant.STATUS_CONTAINER_MANY.equals(container.getStatus())) {
572   - return Result.error("创建空托盘组出库任务时, 容器状态不为空托盘组状态");
  574 + if (!QuantityConstant.STATUS_CONTAINER_EMPTY.equals(container.getStatus())) {
  575 + return Result.error("创建空托盘组出库任务时, 容器状态不为空闲状态");
  576 + }
  577 + if (!QuantityConstant.STATUS_CONTAINER_FILL_MANY.equals(container.getFillStatus())) {
  578 + return Result.error("创建空托盘组出库任务时, 容器填充状态不为空托盘组状态");
573 579 }
574 580 String fromLocationCode = container.getLocationCode();
575 581 if (StringUtils.isEmpty(fromLocationCode)) {
... ... @@ -583,13 +589,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
583 589 if (StringUtils.isEmpty(zoneCode)) {
584 590 return Result.error("创建空托盘组出库任务时, 库区为空");
585 591 }
586   - boolean success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_MANY,
587   - warehouseCode);
  592 + boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
588 593 if (!success) {
589 594 throw new JeecgBootException("创建空托盘组出库任务时, 更新容器状态失败");
590 595 }
591   - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
592   - warehouseCode);
  596 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
593 597 if (!success) {
594 598 throw new JeecgBootException("创建空托盘组出库任务时, 更新库位状态失败");
595 599 }
... ... @@ -658,9 +662,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
658 662 if (fronLocation == null) {
659 663 return Result.error("处理空出失败,没有找到库位");
660 664 }
661   - // 5、删除容器上的库位号,并设置状态为空盘
662   - boolean success =
663   - containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
  665 + // 5、删除容器上的库位号,并设置状态为空闲,填充度状态为空盘
  666 + boolean success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY,
  667 + QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
664 668 if (!success) {
665 669 throw new JeecgBootException("处理空出失败, 更新容器状态失败");
666 670 }
... ... @@ -984,15 +988,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
984 988 if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(toLocation.getStatus())) {
985 989 return Result.error("创建空托盘入库时, 目标库位非空闲");
986 990 }
987   - boolean success = locationService.updateStatusByOriginStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK,
988   - QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  991 + boolean success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
989 992 if (!success) {
990 993 throw new JeecgBootException("创建空托盘入库时,更新库位状态失败");
991 994 }
992 995 }
993   -
994   - boolean success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY,
995   - warehouseCode);
  996 + boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
996 997 if (!success) {
997 998 throw new JeecgBootException("创建空托盘入库时,更新容器状态失败");
998 999 }
... ... @@ -1052,13 +1053,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1052 1053 if (port == null) {
1053 1054 return Result.error("创建空托盘出库时, 没有找到出库口" + toPortCode);
1054 1055 }
1055   - boolean success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY,
1056   - warehouseCode);
  1056 + boolean success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
1057 1057 if (!success) {
1058 1058 throw new JeecgBootException("创建空托盘出库时,更新库位状态失败");
1059 1059 }
1060   - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, QuantityConstant.STATUS_CONTAINER_EMPTY,
1061   - warehouseCode);
  1060 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
1062 1061 if (!success) {
1063 1062 throw new JeecgBootException("创建空托盘出库时,更新容器状态失败");
1064 1063 }
... ... @@ -1139,7 +1138,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1139 1138 inventoryHeader.setLocationCode(toLocationCode);
1140 1139 inventoryHeader.setTotalWeight(taskHeader.getWeight());
1141 1140 inventoryHeader.setCreateBy(taskHeader.getCreateBy());
1142   - inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_SOME);
  1141 + inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
1143 1142 inventoryHeader.setEnable(QuantityConstant.STATUS_ENABLE);
1144 1143 if (!inventoryHeaderService.save(inventoryHeader)) {
1145 1144 throw new JeecgBootException("添加库存头失败");
... ... @@ -1219,7 +1218,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1219 1218 throw new JeecgBootException("完成入库任务时,保存库存交易失败");
1220 1219 }
1221 1220  
1222   - if (StringUtils.isNotEmpty(fromLocationCode)) {
  1221 + if (StringUtils.isNotEmpty(fromLocationCode) && !fromLocationCode.equals(toLocationCode)) {
1223 1222 success =
1224 1223 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
1225 1224 if (!success) {
... ... @@ -1237,7 +1236,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1237 1236 if (!success) {
1238 1237 throw new JeecgBootException("完成入库任务时,更新任务失败");
1239 1238 }
1240   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_SOME, warehouseCode);
  1239 + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY,
  1240 + taskHeader.getContainerFillStatus(), warehouseCode);
1241 1241 if (!success) {
1242 1242 throw new JeecgBootException("完成入库任务时,更新容器失败");
1243 1243 }
... ... @@ -1343,7 +1343,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1343 1343 }
1344 1344 if (inventoryDetail.getQty().compareTo(BigDecimal.ZERO) == 0) {
1345 1345 if (inventoryDetail.getTaskQty().compareTo(BigDecimal.ZERO) != 0) {
1346   - throw new JeecgBootException("完成出库任务,扣减库存的库存详情任务数量不为0");
  1346 + throw new JeecgBootException("完成出库任务,已无库存量可以扣减");
1347 1347 }
1348 1348 success = inventoryDetailService.removeById(inventoryDetail.getId());
1349 1349 if (!success) {
... ... @@ -1377,20 +1377,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1377 1377 inventoryTransactionList.add(inventoryTransaction);
1378 1378 shipmentIdList.add(taskDetail.getShipmentId());
1379 1379 }
1380   - String containerStatus = QuantityConstant.STATUS_CONTAINER_SOME;
1381 1380 List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByInventoryHeaderId(inventoryHeader.getId());
1382 1381 if (inventoryDetailList.size() == 0) {
1383 1382 success = inventoryHeaderService.removeById(inventoryHeader.getId());
1384 1383 if (!success) {
1385 1384 throw new JeecgBootException("完成出库任务,删除库存头失败");
1386 1385 }
1387   - containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY;
1388 1386 } else {
1389 1387 if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT) {
1390 1388 throw new JeecgBootException("完成整盘出库任务,不能还剩库存详情");
1391 1389 }
1392   - containerStatus = QuantityConstant.STATUS_CONTAINER_SOME;
1393   - inventoryHeader.setContainerStatus(containerStatus);
  1390 + inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
1394 1391 inventoryHeader.setLocationCode(toLocationCode);
1395 1392 success = inventoryHeaderService.updateById(inventoryHeader);
1396 1393 if (!success) {
... ... @@ -1412,7 +1409,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1412 1409 if (!success) {
1413 1410 throw new JeecgBootException("完成整盘出库任务,更新源库位失败");
1414 1411 }
1415   - containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
  1412 + success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY,
  1413 + QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
1416 1414 if (!success) {
1417 1415 throw new JeecgBootException("完成整盘出库任务,更新容器失败");
1418 1416 }
... ... @@ -1426,7 +1424,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1426 1424 if (!success) {
1427 1425 throw new JeecgBootException("完成分拣出库任务,更新目标库位失败");
1428 1426 }
1429   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, containerStatus, warehouseCode);
  1427 + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY,
  1428 + inventoryDetailList.size() == 0 ? QuantityConstant.STATUS_CONTAINER_FILL_EMPTY : QuantityConstant.STATUS_CONTAINER_FILL_SOME, warehouseCode);
1430 1429 if (!success) {
1431 1430 throw new JeecgBootException("完成分拣出库任务,更新容器失败");
1432 1431 }
... ... @@ -1590,7 +1589,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1590 1589 if (StringUtils.isEmpty(toLocationCode)) {
1591 1590 return Result.error("完成盘点任务时,目标库位号为空");
1592 1591 }
1593   - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
  1592 +// LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
1594 1593 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
1595 1594  
1596 1595 // 1.先拿到盘点单主单据
... ... @@ -1797,17 +1796,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1797 1796 List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode);
1798 1797 if (inventoryDetailList.size() != 0) {
1799 1798 if (fromLocationCode.equals(toLocationCode)) {
1800   - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_SOME, QuantityConstant.STATUS_CONTAINER_LOCK,
1801   - warehouseCode);
  1799 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
1802 1800 } else {
1803   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_SOME, warehouseCode);
  1801 + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
1804 1802 }
1805 1803 if (!success) {
1806 1804 throw new JeecgBootException("完成出库查看任务时,更新容器状态失败");
1807 1805 }
1808 1806 } else {
1809   - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, QuantityConstant.STATUS_CONTAINER_LOCK,
1810   - warehouseCode);
  1807 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
1811 1808 if (!success) {
1812 1809 throw new JeecgBootException("完成出库查看任务时,更新容器状态失败");
1813 1810 }
... ... @@ -1933,23 +1930,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1933 1930 if (!success) {
1934 1931 throw new JeecgBootException("完成移库任务时, 更新任务失败");
1935 1932 }
1936   - if (inventoryDetailList.size() > 0) {
1937   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_SOME, warehouseCode);
1938   - if (!success) {
1939   - throw new JeecgBootException("完成移库任务时, 更新容器状态失败");
1940   - }
1941   - } else {
1942   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
1943   - if (!success) {
1944   - throw new JeecgBootException("完成移库任务时, 更新容器状态失败");
1945   - }
1946   - }
1947   - Container container = containerService.getContainerByCode(containerCode, warehouseCode);
1948   - container.setLastStatus(QuantityConstant.EMPTY_STRING);
1949   - success = containerService.updateById(container);
  1933 + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
1950 1934 if (!success) {
1951 1935 throw new JeecgBootException("完成移库任务时, 更新容器状态失败");
1952 1936 }
  1937 + // 2023-04-11 托盘状态与填充状态分离 无需再更新字段
  1938 +// Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  1939 +// container.setLastStatus(QuantityConstant.EMPTY_STRING);
  1940 +// success = containerService.updateById(container);
  1941 +// if (!success) {
  1942 +// throw new JeecgBootException("完成移库任务时, 更新容器状态失败");
  1943 +// }
1953 1944 success =
1954 1945 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
1955 1946 if (!success) {
... ... @@ -2033,18 +2024,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2033 2024 throw new JeecgBootException("完成出库查看任务时,更新库存头失败");
2034 2025 }
2035 2026 if (fromLocationCode.equals(toLocationCode)) {
2036   - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_SOME, QuantityConstant.STATUS_CONTAINER_LOCK,
2037   - warehouseCode);
  2027 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
2038 2028 } else {
2039   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_SOME, warehouseCode);
  2029 + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
2040 2030 }
2041 2031 if (!success) {
2042 2032 throw new JeecgBootException("完成出库查看任务时,更新容器状态失败");
2043 2033 }
2044 2034 } else {
2045 2035 if (fromLocationCode.equals(toLocationCode)) {
2046   - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, QuantityConstant.STATUS_CONTAINER_LOCK,
2047   - warehouseCode);
  2036 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
2048 2037 } else {
2049 2038 success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
2050 2039 }
... ... @@ -2110,8 +2099,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2110 2099 if (!success) {
2111 2100 throw new JeecgBootException("创建跨站任务时, 更新任务失败");
2112 2101 }
2113   - success = containerService.updateStatusByOriginStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, QuantityConstant.STATUS_CONTAINER_LOCK,
2114   - warehouseCode);
  2102 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
2115 2103 if (!success) {
2116 2104 throw new JeecgBootException("创建跨站任务时, 更新容器状态失败");
2117 2105 }
... ... @@ -2151,7 +2139,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2151 2139 if (!success) {
2152 2140 throw new JeecgBootException("完成空托盘组入库任务时, 更新任务失败");
2153 2141 }
2154   - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_MANY, warehouseCode);
  2142 + success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_LOCATION_EMPTY,
  2143 + QuantityConstant.STATUS_CONTAINER_FILL_MANY, warehouseCode);
2155 2144 if (!success) {
2156 2145 throw new JeecgBootException("完成空托盘组入库任务时, 更新容器失败");
2157 2146 }
... ... @@ -2199,7 +2188,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2199 2188 if (!success) {
2200 2189 throw new JeecgBootException("完成空托盘组出库任务时, 更新任务失败");
2201 2190 }
2202   - success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  2191 + success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY,
  2192 + QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
2203 2193 if (!success) {
2204 2194 throw new JeecgBootException("完成空托盘组出库任务时, 更新容器失败");
2205 2195 }
... ... @@ -2269,8 +2259,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2269 2259  
2270 2260 boolean success = false;
2271 2261 if (StringUtils.isNotEmpty(fromLocationCode)) {
2272   - success = locationService.updateStatusByOriginStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_EMPTY, QuantityConstant.STATUS_LOCATION_LOCK,
2273   - warehouseCode);
  2262 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
2274 2263 if (!success) {
2275 2264 throw new JeecgBootException("取消任务时, 更新起始库位状态失败");
2276 2265 }
... ... @@ -2287,28 +2276,25 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2287 2276 throw new JeecgBootException("取消任务时, 没有找到容器");
2288 2277 }
2289 2278 if (inventoryHeader != null) {
2290   - container.setStatus(QuantityConstant.STATUS_CONTAINER_SOME);
2291   - inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_SOME);
  2279 + inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
2292 2280 success = inventoryHeaderService.updateById(inventoryHeader);
2293 2281 if (!success) {
2294 2282 throw new JeecgBootException("取消任务时, 更新库存成功");
2295 2283 }
2296   - } else {
2297   - container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
2298   - }
2299   - String lastStatus = container.getLastStatus();
2300   - if (StringUtils.isNotEmpty(lastStatus)) {
2301   - container.setStatus(lastStatus); // 解决空托盘组移库问题
2302 2284 }
  2285 +// String lastStatus = container.getLastStatus();
  2286 +// if (StringUtils.isNotEmpty(lastStatus)) {
  2287 +// container.setStatus(lastStatus); // 解决空托盘组移库问题
  2288 +// }
2303 2289 // if (StringUtils.isNotEmpty(fromLocationCode)) {
2304 2290 // success = containerService.havaLocationCodeByContainer(fromLocationCode, warehouseCode);
2305 2291 // if (success) {
2306 2292 // throw new JeecgBootException("库位表已经存在这个容器号,不能再写入");
2307 2293 // }
2308 2294 // }
2309   - container.setLastStatus(QuantityConstant.EMPTY_STRING);
  2295 +// container.setLastStatus(QuantityConstant.EMPTY_STRING);
2310 2296 // container.setLocationCode(fromLocationCode);
2311   - success = containerService.updateById(container);
  2297 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
2312 2298 if (!success) {
2313 2299 throw new JeecgBootException("取消任务时, 更新容器失败");
2314 2300 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java
... ... @@ -43,6 +43,9 @@ public class HuahengJwtUtil {
43 43  
44 44 /** 全仓CODE */
45 45 public static final String ALL_WAREHOUSE_CODE = "ALL_WAREHOUSE";
  46 +
  47 + /** 定时任务操作人 */
  48 + public static final String TASK_AUDIENCE_NAME = "SYSTEM_TASK";
46 49  
47 50 public static final String SYSTEM_ACTIVATION_CODE_FILE_NAME = "ActivationCode.txt";
48 51  
... ... @@ -230,7 +233,12 @@ public class HuahengJwtUtil {
230 233 * @return
231 234 */
232 235 public static String getCurrentOperator() {
233   - LoginUser loginUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser)SecurityUtils.getSubject().getPrincipal() : null;
  236 + LoginUser loginUser = null;
  237 + try {
  238 + loginUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser)SecurityUtils.getSubject().getPrincipal() : null;
  239 + } catch (Exception e) {
  240 + loginUser = null;
  241 + }
234 242 if (loginUser != null) {
235 243 return loginUser.getRealname();
236 244 }
... ... @@ -253,3 +261,4 @@ public class HuahengJwtUtil {
253 261 }
254 262 }
255 263 }
  264 +
... ...
huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/TaskBuildAudienceAspect.java 0 → 100644
  1 +package org.jeecg.utils.aspect;
  2 +
  3 +import org.aspectj.lang.JoinPoint;
  4 +import org.aspectj.lang.annotation.Aspect;
  5 +import org.aspectj.lang.annotation.Before;
  6 +import org.aspectj.lang.annotation.Pointcut;
  7 +import org.jeecg.utils.HuahengJwtUtil;
  8 +import org.jeecg.utils.support.ApiAuthentication;
  9 +import org.springframework.scheduling.annotation.EnableAsync;
  10 +import org.springframework.stereotype.Component;
  11 +
  12 +import lombok.extern.slf4j.Slf4j;
  13 +
  14 +/**
  15 + * 构建定时任务操作人拦截器
  16 + * @author TanYibin
  17 + * @createDate 2023年4月4日
  18 + */
  19 +@Slf4j
  20 +@Aspect
  21 +@Component
  22 +@EnableAsync
  23 +public class TaskBuildAudienceAspect {
  24 +
  25 + @Pointcut("execution(* org.jeecg.modules.wms.monitor.job.*Task.execute(..))")
  26 + public void executeTask() {}
  27 +
  28 + @Before("executeTask()")
  29 + public void doBefore(JoinPoint joinPoint) throws NoSuchMethodException, Throwable {
  30 + new ApiAuthentication.ApiAuthenticationBuild().audience(HuahengJwtUtil.TASK_AUDIENCE_NAME).bulid();
  31 + }
  32 +}
... ...
huaheng-wms-core/src/main/java/org/jeecg/utils/config/HuahengRedisConfig.java
... ... @@ -38,7 +38,7 @@ public class HuahengRedisConfig {
38 38 // 配置序列化(解决乱码的问题)
39 39 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMillis(-1))
40 40 .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
41   - .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();
  41 + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
42 42 RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(factory);
43 43  
44 44 /*
... ...
huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
... ... @@ -434,12 +434,14 @@ public class QuantityConstant {
434 434 public static final int STATION_PICK_AND_OUT = 4;
435 435  
436 436 public static final String EMPTY_STRING = "";
437   -
  437 +
438 438 public static final String STATUS_CONTAINER_EMPTY = "empty";
439 439 public static final String STATUS_CONTAINER_LOCK = "lock";
440   - public static final String STATUS_CONTAINER_SOME = "some";
441   - public static final String STATUS_CONTAINER_FULL = "full";
442   - public static final String STATUS_CONTAINER_MANY = "many";
  440 +
  441 + public static final String STATUS_CONTAINER_FILL_EMPTY = "empty";
  442 + public static final String STATUS_CONTAINER_FILL_SOME = "some";
  443 + public static final String STATUS_CONTAINER_FILL_FULL = "full";
  444 + public static final String STATUS_CONTAINER_FILL_MANY = "many";
443 445  
444 446 public static final String STATUS_LOCATION_EMPTY = "empty";
445 447 public static final String STATUS_LOCATION_LOCK = "lock";
... ...
huaheng-wms-core/src/main/java/org/jeecg/utils/support/ExceptionHandlerAdvice.java
1 1 package org.jeecg.utils.support;
2 2  
3 3 import java.util.HashMap;
4   -import java.util.Map;
5 4  
6 5 import org.jeecg.common.api.vo.Result;
7 6 import org.springframework.validation.FieldError;
... ... @@ -19,7 +18,6 @@ public class ExceptionHandlerAdvice {
19 18 */
20 19 @ExceptionHandler(value = MethodArgumentNotValidException.class)
21 20 public Object handerConstraintViolationException(MethodArgumentNotValidException exception) {
22   - Result<Map> result = new Result<Map>();
23 21 HashMap<String, Object> errors = new HashMap<>();
24 22 exception.getBindingResult().getAllErrors().forEach(error -> {
25 23 FieldError fieldError = (FieldError)error;
... ...
huaheng-wms-core/src/main/resources/application-prod.yml
... ... @@ -294,9 +294,9 @@ logging:
294 294 level:
295 295 org.jeecg.common: ERROR
296 296 org.jeecg.modules: ERROR
297   - org.jeecg.modules.wms: INFO
  297 + org.jeecg.modules.wms: DEBUG
298 298 org.jeecg.config.shiro: ERROR
299   - org.jeecg.utils: ERROR
  299 + org.jeecg.utils: INFO
300 300 #swagger
301 301 knife4j:
302 302 #开启增强配置
... ...
huaheng-wms-core/src/main/resources/application.yml
... ... @@ -8,4 +8,4 @@ huaheng:
8 8 system:
9 9 verson: '@project.version@'
10 10 artifactId: '@project.artifactId@'
11   - checkSystemActivationCode: true
12 11 \ No newline at end of file
  12 + checkSystemActivationCode: false
13 13 \ No newline at end of file
... ...
huaheng-wms-core/src/main/resources/logback-spring.xml
... ... @@ -71,10 +71,10 @@
71 71 <!-- 每天生成一个html格式的日志结束 -->
72 72  
73 73 <!--myibatis log configure -->
74   - <logger name="com.apache.ibatis" level="TRACE" />
75   - <logger name="java.sql.Connection" level="INFO" />
76   - <logger name="java.sql.Statement" level="INFO" />
77   - <logger name="java.sql.PreparedStatement" level="INFO" />
  74 +<!-- <logger name="com.apache.ibatis" level="TRACE" /> -->
  75 +<!-- <logger name="java.sql.Connection" level="DEBUG" /> -->
  76 +<!-- <logger name="java.sql.Statement" level="DEBUG" /> -->
  77 +<!-- <logger name="java.sql.PreparedStatement" level="DEBUG" /> -->
78 78  
79 79 <logger name="jdbc.connection" additivity="false" level="off">
80 80 <appender-ref ref="STDOUT" />
... ...