更新配置和扩展功能,优化代码结构
修改 `http.js` 中的 `axios.defaults.baseURL` 配置,调整开发环境 URL。
- 在 `Dt_BillGroupStock_Hty.jsx` 和 `Dt_OutTime.jsx` 中添加作者信息和文档链接,增强组件扩展功能。
- 新增 `tables.js` 中的路由配置,包含 `Dt_BillGroupStock_Hty` 的路径。
- 在 `Dt_BillGroupStock_Hty.vue` 和 `Dt_OutTime.vue` 中定义表格列、编辑和搜索表单字段。
- 新增 `IStockInfoHtyRepository.cs` 和 `IStockInfoHtyService.cs` 接口定义。
- 在 `StockInfoHtyRepository.cs` 和 `StockInfoHtyService.cs` 中实现分页查询和批量删除功能。
- 更新 `appsettings.json` 中的数据库连接字符串,修改数据库名称。
| | |
| | | let loadingInstance |
| | | let loadingStatus = false |
| | | if (process.env.NODE_ENV == 'development') { |
| | | // axios.defaults.baseURL = 'http://localhost:5000/'; |
| | | axios.defaults.baseURL = 'http://192.168.20.253:5000/'; |
| | | axios.defaults.baseURL = 'http://localhost:5000/'; |
| | | // axios.defaults.baseURL = 'http://192.168.20.253:5000/'; |
| | | } |
| | | else if (process.env.NODE_ENV == 'debug') { |
| | | axios.defaults.baseURL = 'http://192.168.20.253:5000/'; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /***************************************************************************************** |
| | | ** Author:jxx 2022 |
| | | ** QQ:283591387 |
| | | **宿´ææ¡£è§ï¼http://v2.volcore.xyz/document/api ã代ç çæé¡µé¢ViewGridã |
| | | **常ç¨ç¤ºä¾è§ï¼http://v2.volcore.xyz/document/vueDev |
| | | **åå°æä½è§ï¼http://v2.volcore.xyz/document/netCoreDev |
| | | *****************************************************************************************/ |
| | | //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè
éæ°é
ç½®çæç代ç |
| | | |
| | | // import gridHeader from "./demo_Product/Dt_BillGroupStockDetail.vue"; |
| | | import gridBody from "./extend/SupplementationData.vue" |
| | | let extension = { |
| | | components: { |
| | | //æ¥è¯¢ç颿©å±ç»ä»¶ |
| | | gridHeader: '', |
| | | gridBody: gridBody, |
| | | gridFooter: '', |
| | | //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ |
| | | modelHeader: '', |
| | | modelBody: '', |
| | | modelFooter: '' |
| | | }, |
| | | tableAction: '', //æå®æå¼ 表çæé(è¿éå¡«å表å,é»è®¤ä¸ç¨å¡«å) |
| | | buttons: { view: [], box: [], detail: [] }, //æ©å±çæé® |
| | | methods: { |
| | | //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ |
| | | onInit() { |
| | | //æ¡æ¶åå§åé
ç½®åï¼ |
| | | let OutBoundBtn = this.buttons.find((x) => x.value == 'OutBound') |
| | | if (OutBoundBtn) { |
| | | OutBoundBtn.onClick = function () { |
| | | // this.$Message.success('ç¹å»äºæé®') |
| | | let row = this.$refs.table.getSelected() //è·åéä¸çè¡ |
| | | if (row <= 0) { |
| | | //å¦ææ²¡æéä¸è¡ |
| | | this.$Message.error('è¯·éæ©ä¸è¡æ°æ®') |
| | | return |
| | | } |
| | | let locationCode = row[0].locationCode |
| | | let palletCode = row[0].palletCode |
| | | this.http |
| | | .get( |
| | | `/api/Task/CreateAndSendOutboundTask?locationCode=${locationCode}&palletCode=${palletCode}`, |
| | | {}, |
| | | 'æ£å¨å建任å¡' |
| | | ) |
| | | .then((res) => { |
| | | //示ä¾ï¼è°ç¨åå°æ¥å£ |
| | | if (res.status) { |
| | | this.$Message.success('åå»ºä»»å¡æå') |
| | | console.log(res) |
| | | this.refresh() //å·æ°è¡¨æ ¼ |
| | | } else { |
| | | this.$Message.error(res.message) //é误æç¤º |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | |
| | | var btnSupplementationData = this.buttons.find(x => x.value == "SupplementationData"); |
| | | if (btnSupplementationData != null) { |
| | | btnSupplementationData.onClick = () => { |
| | | let rows = this.$refs.table.getSelected(); |
| | | if (rows.length == 0) { |
| | | return this.$error("è¯·éæ©æ°æ®!"); |
| | | } else if (rows.length > 1) { |
| | | return this.$error("åªè½éæ©åæ¡æ°æ®"); |
| | | } |
| | | this.$refs.gridBody.open(rows[0].palletCode); |
| | | this.refresh(); |
| | | } |
| | | |
| | | } |
| | | //示ä¾ï¼å¨æé®çæå颿·»å ä¸ä¸ªæé® |
| | | // this.buttons.unshift({ |
| | | // //ä¹å¯ä»¥ç¨pushæè
spliceæ¹æ³æ¥ä¿®æ¹buttonsæ°ç» |
| | | // name: 'ç´æ¥åºåº', //æé®åç§° |
| | | // icon: 'el-icon-document', //æé®å¾æ vue2çæ¬è§iviewææ¡£iconï¼vue3çæ¬è§element uiææ¡£icon(注æä¸æ¯element pulsææ¡£) |
| | | // type: 'primary', //æé®æ ·å¼vue2çæ¬è§iviewææ¡£buttonï¼vue3çæ¬è§element uiææ¡£button |
| | | // onClick: function () { |
| | | // this.$Message.success('ç¹å»äºæé®') |
| | | // let row = this.$refs.table.getSelected() //è·åéä¸çè¡ |
| | | // if (row <= 0) { |
| | | // //å¦ææ²¡æéä¸è¡ |
| | | // this.$Message.error('è¯·éæ©ä¸è¡æ°æ®') |
| | | // return |
| | | // } |
| | | // let locationCode = row[0].locationCode |
| | | // let palletCode = row[0].palletCode |
| | | // this.http.get(`/api/Task/CreateAndSendOutboundTask?locationCode=${locationCode}&palletCode=${palletCode}`, {}, "æ£å¨å建任å¡").then((res) => { |
| | | // //示ä¾ï¼è°ç¨åå°æ¥å£ |
| | | // if (res.status) { |
| | | // this.$Message.success('åå»ºä»»å¡æå') |
| | | // } else { |
| | | // this.$Message.error(res.message) //é误æç¤º |
| | | // } |
| | | // }) |
| | | // } |
| | | // }) |
| | | |
| | | //示ä¾ï¼è®¾ç½®ä¿®æ¹æ°å»ºãç¼è¾å¼¹åºæ¡å段æ ç¾çé¿åº¦ |
| | | this.boxOptions.labelWidth = 150 |
| | | |
| | | // this.columns.push({ |
| | | // title: "æä½", |
| | | // field: "æä½", |
| | | // width: 150, |
| | | // align: "left", // 'center', |
| | | // render: (h, { row, column, index }) => { |
| | | // return ( |
| | | // <div> |
| | | // <el-button |
| | | // onClick={($e) => { |
| | | // this.$refs.gridHeader.openModel1(row); |
| | | // }} |
| | | // type="primary" |
| | | // plain |
| | | // style="height:26px; padding: 10px !important;" |
| | | // > |
| | | // æ¥çåºåæç» |
| | | // </el-button> |
| | | // </div> |
| | | // ); |
| | | // }, |
| | | // }); |
| | | |
| | | this.columns.forEach((column) => { |
| | | //ä¿®æ¹é¢è² |
| | | if (column.field == 'roadwayNo') { |
| | | column.formatter = (row) => { |
| | | // return '<span style="color: #2d8cf0;">' + row?.locationInfo?.roadwayNo + '</span>' |
| | | return row?.locationInfo?.roadwayNo |
| | | } |
| | | } |
| | | if (column.field == 'materielCode') { |
| | | column.formatter = (row) => { |
| | | // return '<span style="color: #2d8cf0;">' + row?.locationInfo?.roadwayNo + '</span>' |
| | | return row?.stockInfoDetails[0]?.materielCode |
| | | } |
| | | } |
| | | //æ ¼å¼åæ¥æ |
| | | // æ£æ¥å½ååçåæ®µæ¯å¦ä¸º 'locationStatus' |
| | | if (column.field == 'locationStatus') { |
| | | // 使ç¨å¯¹è±¡åé¢éæ¥æ å° 'locationStatus' çå¼å对åºçææ¬ |
| | | const statusMap = { |
| | | '-1': 'å
¨é¨', |
| | | '0': '空é²', |
| | | '1': 'éå®', |
| | | '2': 'æè´§', |
| | | '3': 'æè´§ç¦ç¨', |
| | | '4': 'æ è´§ç¦ç¨' |
| | | }; |
| | | // å®ä¹ä¸ä¸ªæ ¼å¼å彿°ï¼æ ¹æ® 'locationStatus' çå¼è¿åç¸åºçææ¬ |
| | | column.formatter = (row) => { |
| | | // ä½¿ç¨ statusMap 对象æ¥è·å对åºçææ¬ï¼å¦ææ²¡æå¹é
åè¿å 'æªç¥ç¶æ' |
| | | return statusMap[row?.locationInfo?.locationStatus] || 'æªç¥ç¶æ'; |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | onInited() { |
| | | //æ¡æ¶åå§åé
ç½®å |
| | | //妿è¦é
ç½®æç»è¡¨,卿¤æ¹æ³æä½ |
| | | this.detailOptions.columns.forEach(column=>{ |
| | | console.log(column) |
| | | }); |
| | | }, |
| | | searchBefore(param) { |
| | | //ç颿¥è¯¢å,å¯ä»¥ç»param.wheresæ·»å æ¥è¯¢åæ° |
| | | //è¿åfalseï¼åä¸ä¼æ§è¡æ¥è¯¢ |
| | | return true |
| | | }, |
| | | searchAfter(result) { |
| | | console.log(result) |
| | | return true |
| | | }, |
| | | addBefore(formData) { |
| | | //æ°å»ºä¿ååformData为对象ï¼å
æ¬æç»è¡¨ï¼å¯ä»¥ç»ç»è¡¨å设置å¼ï¼èªå·±è¾åºçformDataçå¼ |
| | | return true |
| | | }, |
| | | updateBefore(formData) { |
| | | //ç¼è¾ä¿ååformData为对象ï¼å
æ¬æç»è¡¨ãå é¤è¡çId |
| | | return true |
| | | }, |
| | | rowClick({ row, column, event }) { |
| | | //æ¥è¯¢çé¢ç¹å»è¡äºä»¶ |
| | | // this.$refs.table.$refs.table.toggleRowSelection(row) //åå»è¡æ¶éä¸å½åè¡; |
| | | }, |
| | | modelOpenAfter(row) { |
| | | |
| | | //ç¹å»ç¼è¾ãæ°å»ºæé®å¼¹åºæ¡åï¼å¯ä»¥å¨æ¤å¤åé»è¾ï¼å¦ï¼ä»åå°è·åæ°æ® |
| | | //(1)夿æ¯ç¼è¾è¿æ¯æ°å»ºæä½ï¼ this.currentAction=='Add'; |
| | | //(2)ç»å¼¹åºæ¡è®¾ç½®é»è®¤å¼ |
| | | //(3)this.editFormFields.åæ®µ='xxx'; |
| | | //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é
置对åºdata屿§çkeyå¼ |
| | | //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) |
| | | } |
| | | } |
| | | } |
| | | export default extension |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /***************************************************************************************** |
| | | ** Author:jxx 2022 |
| | | ** QQ:283591387 |
| | | **宿´ææ¡£è§ï¼http://v2.volcore.xyz/document/api ã代ç çæé¡µé¢ViewGridã |
| | | **常ç¨ç¤ºä¾è§ï¼http://v2.volcore.xyz/document/vueDev |
| | | **åå°æä½è§ï¼http://v2.volcore.xyz/document/netCoreDev |
| | | *****************************************************************************************/ |
| | | //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè
éæ°é
ç½®çæç代ç |
| | | |
| | | // import gridHeader from "./demo_Product/Dt_BillGroupStockDetail.vue"; |
| | | import gridBody from "./extend/SupplementationData.vue" |
| | | let extension = { |
| | | components: { |
| | | //æ¥è¯¢ç颿©å±ç»ä»¶ |
| | | gridHeader: '', |
| | | gridBody: gridBody, |
| | | gridFooter: '', |
| | | //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ |
| | | modelHeader: '', |
| | | modelBody: '', |
| | | modelFooter: '' |
| | | }, |
| | | tableAction: '', //æå®æå¼ 表çæé(è¿éå¡«å表å,é»è®¤ä¸ç¨å¡«å) |
| | | buttons: { view: [], box: [], detail: [] }, //æ©å±çæé® |
| | | methods: { |
| | | //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ |
| | | onInit() { |
| | | //æ¡æ¶åå§åé
ç½®åï¼ |
| | | let OutBoundBtn = this.buttons.find((x) => x.value == 'OutBound') |
| | | if (OutBoundBtn) { |
| | | OutBoundBtn.onClick = function () { |
| | | // this.$Message.success('ç¹å»äºæé®') |
| | | let row = this.$refs.table.getSelected() //è·åéä¸çè¡ |
| | | if (row <= 0) { |
| | | //å¦ææ²¡æéä¸è¡ |
| | | this.$Message.error('è¯·éæ©ä¸è¡æ°æ®') |
| | | return |
| | | } |
| | | let locationCode = row[0].locationCode |
| | | let palletCode = row[0].palletCode |
| | | this.http |
| | | .get( |
| | | `/api/Task/CreateAndSendOutboundTask?locationCode=${locationCode}&palletCode=${palletCode}`, |
| | | {}, |
| | | 'æ£å¨å建任å¡' |
| | | ) |
| | | .then((res) => { |
| | | //示ä¾ï¼è°ç¨åå°æ¥å£ |
| | | if (res.status) { |
| | | this.$Message.success('åå»ºä»»å¡æå') |
| | | console.log(res) |
| | | this.refresh() //å·æ°è¡¨æ ¼ |
| | | } else { |
| | | this.$Message.error(res.message) //é误æç¤º |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | |
| | | var btnSupplementationData = this.buttons.find(x => x.value == "SupplementationData"); |
| | | if (btnSupplementationData != null) { |
| | | btnSupplementationData.onClick = () => { |
| | | let rows = this.$refs.table.getSelected(); |
| | | if (rows.length == 0) { |
| | | return this.$error("è¯·éæ©æ°æ®!"); |
| | | } else if (rows.length > 1) { |
| | | return this.$error("åªè½éæ©åæ¡æ°æ®"); |
| | | } |
| | | this.$refs.gridBody.open(rows[0].palletCode); |
| | | this.refresh(); |
| | | } |
| | | |
| | | } |
| | | //示ä¾ï¼å¨æé®çæå颿·»å ä¸ä¸ªæé® |
| | | // this.buttons.unshift({ |
| | | // //ä¹å¯ä»¥ç¨pushæè
spliceæ¹æ³æ¥ä¿®æ¹buttonsæ°ç» |
| | | // name: 'ç´æ¥åºåº', //æé®åç§° |
| | | // icon: 'el-icon-document', //æé®å¾æ vue2çæ¬è§iviewææ¡£iconï¼vue3çæ¬è§element uiææ¡£icon(注æä¸æ¯element pulsææ¡£) |
| | | // type: 'primary', //æé®æ ·å¼vue2çæ¬è§iviewææ¡£buttonï¼vue3çæ¬è§element uiææ¡£button |
| | | // onClick: function () { |
| | | // this.$Message.success('ç¹å»äºæé®') |
| | | // let row = this.$refs.table.getSelected() //è·åéä¸çè¡ |
| | | // if (row <= 0) { |
| | | // //å¦ææ²¡æéä¸è¡ |
| | | // this.$Message.error('è¯·éæ©ä¸è¡æ°æ®') |
| | | // return |
| | | // } |
| | | // let locationCode = row[0].locationCode |
| | | // let palletCode = row[0].palletCode |
| | | // this.http.get(`/api/Task/CreateAndSendOutboundTask?locationCode=${locationCode}&palletCode=${palletCode}`, {}, "æ£å¨å建任å¡").then((res) => { |
| | | // //示ä¾ï¼è°ç¨åå°æ¥å£ |
| | | // if (res.status) { |
| | | // this.$Message.success('åå»ºä»»å¡æå') |
| | | // } else { |
| | | // this.$Message.error(res.message) //é误æç¤º |
| | | // } |
| | | // }) |
| | | // } |
| | | // }) |
| | | |
| | | //示ä¾ï¼è®¾ç½®ä¿®æ¹æ°å»ºãç¼è¾å¼¹åºæ¡å段æ ç¾çé¿åº¦ |
| | | this.boxOptions.labelWidth = 150 |
| | | |
| | | // this.columns.push({ |
| | | // title: "æä½", |
| | | // field: "æä½", |
| | | // width: 150, |
| | | // align: "left", // 'center', |
| | | // render: (h, { row, column, index }) => { |
| | | // return ( |
| | | // <div> |
| | | // <el-button |
| | | // onClick={($e) => { |
| | | // this.$refs.gridHeader.openModel1(row); |
| | | // }} |
| | | // type="primary" |
| | | // plain |
| | | // style="height:26px; padding: 10px !important;" |
| | | // > |
| | | // æ¥çåºåæç» |
| | | // </el-button> |
| | | // </div> |
| | | // ); |
| | | // }, |
| | | // }); |
| | | |
| | | this.columns.forEach((column) => { |
| | | //ä¿®æ¹é¢è² |
| | | if (column.field == 'roadwayNo') { |
| | | column.formatter = (row) => { |
| | | // return '<span style="color: #2d8cf0;">' + row?.locationInfo?.roadwayNo + '</span>' |
| | | return row?.locationInfo?.roadwayNo |
| | | } |
| | | } |
| | | if (column.field == 'materielCode') { |
| | | column.formatter = (row) => { |
| | | // return '<span style="color: #2d8cf0;">' + row?.locationInfo?.roadwayNo + '</span>' |
| | | return row?.stockInfoDetails[0]?.materielCode |
| | | } |
| | | } |
| | | //æ ¼å¼åæ¥æ |
| | | // æ£æ¥å½ååçåæ®µæ¯å¦ä¸º 'locationStatus' |
| | | if (column.field == 'locationStatus') { |
| | | // 使ç¨å¯¹è±¡åé¢éæ¥æ å° 'locationStatus' çå¼å对åºçææ¬ |
| | | const statusMap = { |
| | | '-1': 'å
¨é¨', |
| | | '0': '空é²', |
| | | '1': 'éå®', |
| | | '2': 'æè´§', |
| | | '3': 'æè´§ç¦ç¨', |
| | | '4': 'æ è´§ç¦ç¨' |
| | | }; |
| | | // å®ä¹ä¸ä¸ªæ ¼å¼å彿°ï¼æ ¹æ® 'locationStatus' çå¼è¿åç¸åºçææ¬ |
| | | column.formatter = (row) => { |
| | | // ä½¿ç¨ statusMap 对象æ¥è·å对åºçææ¬ï¼å¦ææ²¡æå¹é
åè¿å 'æªç¥ç¶æ' |
| | | return statusMap[row?.locationInfo?.locationStatus] || 'æªç¥ç¶æ'; |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | onInited() { |
| | | //æ¡æ¶åå§åé
ç½®å |
| | | //妿è¦é
ç½®æç»è¡¨,卿¤æ¹æ³æä½ |
| | | this.detailOptions.columns.forEach(column=>{ |
| | | console.log(column) |
| | | }); |
| | | }, |
| | | searchBefore(param) { |
| | | //ç颿¥è¯¢å,å¯ä»¥ç»param.wheresæ·»å æ¥è¯¢åæ° |
| | | //è¿åfalseï¼åä¸ä¼æ§è¡æ¥è¯¢ |
| | | return true |
| | | }, |
| | | searchAfter(result) { |
| | | console.log(result) |
| | | return true |
| | | }, |
| | | addBefore(formData) { |
| | | //æ°å»ºä¿ååformData为对象ï¼å
æ¬æç»è¡¨ï¼å¯ä»¥ç»ç»è¡¨å设置å¼ï¼èªå·±è¾åºçformDataçå¼ |
| | | return true |
| | | }, |
| | | updateBefore(formData) { |
| | | //ç¼è¾ä¿ååformData为对象ï¼å
æ¬æç»è¡¨ãå é¤è¡çId |
| | | return true |
| | | }, |
| | | rowClick({ row, column, event }) { |
| | | //æ¥è¯¢çé¢ç¹å»è¡äºä»¶ |
| | | // this.$refs.table.$refs.table.toggleRowSelection(row) //åå»è¡æ¶éä¸å½åè¡; |
| | | }, |
| | | modelOpenAfter(row) { |
| | | |
| | | //ç¹å»ç¼è¾ãæ°å»ºæé®å¼¹åºæ¡åï¼å¯ä»¥å¨æ¤å¤åé»è¾ï¼å¦ï¼ä»åå°è·åæ°æ® |
| | | //(1)夿æ¯ç¼è¾è¿æ¯æ°å»ºæä½ï¼ this.currentAction=='Add'; |
| | | //(2)ç»å¼¹åºæ¡è®¾ç½®é»è®¤å¼ |
| | | //(3)this.editFormFields.åæ®µ='xxx'; |
| | | //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é
置对åºdata屿§çkeyå¼ |
| | | //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) |
| | | } |
| | | } |
| | | } |
| | | export default extension |
| | |
| | | meta: { |
| | | keepAlive: false |
| | | } |
| | | },{ |
| | | path: '/Dt_BillGroupStock_Hty', |
| | | name: 'Dt_BillGroupStock_Hty', |
| | | component: () => import('@/views/widesea_wms/stock/Dt_BillGroupStock_Hty.vue'), |
| | | meta: { |
| | | keepAlive: false |
| | | } |
| | | }, |
| | | ] |
| | | export default tables |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- |
| | | *Authorï¼jxx |
| | | *Contactï¼283591387@qq.com |
| | | *代ç ç±æ¡æ¶çæ,任使´æ¹é½å¯è½å¯¼è´è¢«ä»£ç çæå¨è¦ç |
| | | *ä¸å¡è¯·å¨@/extension/widesea_wms/stock/Dt_BillGroupStock.jsæ¤å¤ç¼å |
| | | --> |
| | | |
| | | <template> |
| | | <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields" |
| | | :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions" |
| | | :table="table" :extend="extend"> |
| | | </view-grid> |
| | | </template> |
| | | <script> |
| | | import extend from "@/extension/widesea_wms/stock/Dt_BillGroupStock_Hty.jsx"; |
| | | import { ref, defineComponent } from "vue"; |
| | | export default defineComponent({ |
| | | setup() { |
| | | const table = ref({ |
| | | key: 'id', |
| | | footer: "Foots", |
| | | cnName: 'åºååå²ä¿¡æ¯', |
| | | name: 'stock/Dt_BillGroupStock_Hty', |
| | | url: "/StockInfoHty/", |
| | | sortName: "createDate" |
| | | }); |
| | | const editFormFields = ref({ |
| | | "palletCode": "", |
| | | "productionLine": "", |
| | | "outboundTime": "", |
| | | // "groupType": "" |
| | | }); |
| | | const editFormOptions = ref([ |
| | | [ |
| | | { "title": "æçæ¡ç ", "field": "palletCode", type: "text" }, |
| | | { "title": "ç产产线", "field": "productionLine", type: "text" }, |
| | | { "title": "åºåºåºæ¶é´", "field": "outboundTime", type: "datetime" }, |
| | | // { "title": "ç»çç±»å", "field": "groupType", type: "select", dataKey: "GroupType", data: [] }, |
| | | ] |
| | | ]); |
| | | const searchFormFields = ref({}); |
| | | const searchFormOptions = ref([ |
| | | [ |
| | | { "title": "æçæ¡ç ", "field": "palletCode", type: "text" }, |
| | | { "title": "ç产产线", "field": "productionLine", type: "select", dataKey: "ProductionLine", data: [] }, |
| | | { "title": "åºåº", "field": "areaCode", type: "select", dataKey: "AreaType", data: [] }, |
| | | { "title": "åºåç±»å", "field": "isFull", type: "select", dataKey: "isFull", data: [] }, |
| | | ], [ |
| | | { "title": "åºä½å·", "field": "locationCode", type: "text" }, |
| | | { "title": "å··é", "field": "roadwayNo", type: "text" }, |
| | | { "title": "è´§ä½ç¶æ", "field": "locationStatus", type: "select", dataKey: "LocationState", data: [] }, |
| | | { "title": "ç©æç¼ç ", "field": "materielCode", type: "text"}, |
| | | ] |
| | | ]); |
| | | const columns = ref( |
| | | [{ field: 'id', title: 'åºåID', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' }, |
| | | { field: 'locationCode', title: 'åºä½', type: 'string', width: 100, align: 'left', }, |
| | | { field: 'palletCode', title: 'æçæ¡ç ', type: 'string', width: 110, align: 'left', }, |
| | | { field: 'isFull', title: 'åºåç±»å', type: 'bool', width: 60, align: 'left', bind: { key: "isFull", data: [{ key: false, value: '空ç' }, { key: true, value: 'å®ç' }] }, }, |
| | | { field: 'linedProcessFeedbackTime', title: 'å·¥èºå¼å§æ¶é´', type: 'string', width: 110, align: 'left', }, |
| | | { field: 'roadwayNo', title: 'å··é', type: 'string', width: 60, align: 'left', sort: true }, |
| | | { field: 'materielCode', title: 'ç©æç¼ç ', type: 'string', width: 90, align: 'left', sort: true }, |
| | | // { field: 'locationStatus', title: 'è´§ä½ç¶æ', type: 'int', width: 60, align: 'left', bind: { key: "LocationState", data: [] } }, |
| | | { field: 'specialParameterDuration', title: 'å·¥èºæ¶é¿', type: 'string', width: 60, align: 'left', sort: true }, |
| | | { field: 'outboundTime', title: 'åºåºåºæ¶é´', type: 'string', width: 110, align: 'left', sort: true }, |
| | | { field: 'productionLine', title: 'ç产产线', type: 'string', width: 60, align: 'left', bind: { key: "ProductionLine", data: [] } }, |
| | | { field: 'areaCode', title: 'åºåº', type: 'string', width: 60, align: 'left', bind: { key: "AreaType", data: [] } }, |
| | | { field: 'remark', title: 'çµè¯æ°é', type: 'string', width: 60, align: 'left', }, |
| | | { field: 'creater', title: 'å建人', type: 'string', sort: true, width: 110, align: 'left', hidden: true }, |
| | | { field: 'createDate', title: 'å建æ¶é´', type: 'datetime', sort: true, width: 150, align: 'left', }, |
| | | { field: 'modifier', title: 'æåä¿®æ¹äºº', type: 'string', sort: true, width: 100, hidden: true, align: 'left' }, |
| | | // { field: 'modifyDate', title: 'æåä¿®æ¹æ¶é´', type: 'datetime', sort: true, width: 150, align: 'left', sort: true }, |
| | | ] |
| | | ); |
| | | const detail = ref({ |
| | | cnName: "#detailCnName", |
| | | table: "#detailTable", |
| | | columns: [], |
| | | sortName: "", |
| | | key: "" |
| | | }); |
| | | return { |
| | | table, |
| | | extend, |
| | | editFormFields, |
| | | editFormOptions, |
| | | searchFormFields, |
| | | searchFormOptions, |
| | | columns, |
| | | detail, |
| | | }; |
| | | }, |
| | | }); |
| | | </script> |
| | |
| | | |
| | | <template> |
| | | <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields" |
| | | :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" |
| | | :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions" |
| | | :table="table" :extend="extend"> |
| | | </view-grid> |
| | | </template> |
| | | <script> |
| | | import extend from "@/extension/widesea_wms/stock/Dt_BillGroupStock.jsx"; |
| | | import extend from "@/extension/widesea_wms/stock/Dt_OutTime.jsx"; |
| | | import { ref, defineComponent } from "vue"; |
| | | export default defineComponent({ |
| | | setup() { |
| | | const table = ref({ |
| | | key: 'id', |
| | | footer: "Foots", |
| | | cnName: 'è¶
æ¶ä¿¡æ¯', |
| | | name: 'stock/Dt_BillGroupStock', |
| | | url:"/StockInfoTimeout/", |
| | | cnName: 'è¶
æ¶åºåä¿¡æ¯', |
| | | name: 'stock/StockInfoTimeout', |
| | | url: "/StockInfo/", |
| | | sortName: "createDate" |
| | | }); |
| | | const editFormFields = ref({ |
| | |
| | | { "title": "åºä½å·", "field": "locationCode", type: "text" }, |
| | | { "title": "å··é", "field": "roadwayNo", type: "text" }, |
| | | { "title": "è´§ä½ç¶æ", "field": "locationStatus", type: "select", dataKey: "LocationState", data: [] }, |
| | | { "title": "åºåºæ¶é´", "field": "outboundTime", type: "datetime"}, |
| | | { "title": "ç©æç¼ç ", "field": "materielCode", type: "text"}, |
| | | ] |
| | | ]); |
| | | const now = new Date(); |
| | | // ç´æ¥åå» 3 å°æ¶ï¼å¯è½è·¨å¤©ï¼Date 对象ä¼èªå¨å¤çï¼ |
| | | now.setHours(now.getHours() - 3); |
| | | const columns = ref( |
| | | [{ field: 'id', title: 'åºåID', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' }, |
| | | { field: 'locationCode', title: 'åºä½', type: 'string', width: 100, align: 'left', }, |
| | | { field: 'palletCode', title: 'æçæ¡ç ', type: 'string', width: 110, align: 'left', }, |
| | | { field: 'isFull', title: 'åºåç±»å', type: 'bool', width: 80, align: 'left', bind: { key: "isFull", data: [{ key: false, value: '空ç' }, { key: true, value: 'å®ç' }] }, }, |
| | | { field: 'isFull', title: 'åºåç±»å', type: 'bool', width: 60, align: 'left', bind: { key: "isFull", data: [{ key: false, value: '空ç' }, { key: true, value: 'å®ç' }] }, }, |
| | | { field: 'linedProcessFeedbackTime', title: 'å·¥èºå¼å§æ¶é´', type: 'string', width: 110, align: 'left', }, |
| | | { field: 'roadwayNo', title: 'å··é', type: 'string', width: 60, align: 'left', sort: true }, |
| | | { field: 'materielCode', title: 'ç©æç¼ç ', type: 'string', width: 90, align: 'left', sort: true }, |
| | | { field: 'locationStatus', title: 'è´§ä½ç¶æ', type: 'int', width: 60, align: 'left', bind: { key: "LocationState", data: [] } }, |
| | | { field: 'specialParameterDuration', title: 'å·¥èºæ¶é¿', type: 'string', width: 60, align: 'left', sort: true }, |
| | | { field: 'outboundTime', title: 'åºåºåºæ¶é´', type: 'string', width: 110, align: 'left', sort: true }, |
| | | { field: 'productionLine', title: 'ç产产线', type: 'string', width: 60, align: 'left', bind: { key: "ProductionLine", data: [] } }, |
| | |
| | | // { field: 'modifyDate', title: 'æåä¿®æ¹æ¶é´', type: 'datetime', sort: true, width: 150, align: 'left', sort: true }, |
| | | ] |
| | | ); |
| | | |
| | | const detail = ref({ |
| | | cnName: "#detailCnName", |
| | | table: "#detailTable", |
¶Ô±ÈÐÂÎļþ |
| | |
| | | namespace WIDESEA_IStorageBasicRepository |
| | | { |
| | | public interface IStockInfoHtyRepository : IRepository<DtStockInfo_Hty> |
| | | { |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | namespace WIDESEA_IStorageBasicService; |
| | | |
| | | public interface IStockInfoHtyService : IService<DtStockInfo_Hty> |
| | | { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | namespace WIDESEA_StorageBasicRepository |
| | | { |
| | | public class StockInfoHtyRepository : RepositoryBase<DtStockInfo_Hty>, IStockInfoHtyRepository |
| | | { |
| | | public StockInfoHtyRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) |
| | | { |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using AngleSharp.Dom; |
| | | using Mapster; |
| | | using Masuit.Tools; |
| | | using SqlSugar; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Drawing.Printing; |
| | | using System.Linq.Expressions; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Cache; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Core; |
| | | |
| | | namespace WIDESEA_StorageBasicService; |
| | | |
| | | public class StockInfoHtyService : ServiceBase<DtStockInfo_Hty, IStockInfoHtyRepository>, IStockInfoHtyService |
| | | { |
| | | |
| | | private readonly ISimpleCacheService _simpleCacheService; |
| | | private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; |
| | | public StockInfoHtyService(IStockInfoHtyRepository BaseDal, ISimpleCacheService simpleCacheService, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository) : base(BaseDal) |
| | | { |
| | | _simpleCacheService = simpleCacheService; |
| | | _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å页 |
| | | /// </summary> |
| | | /// <param name="options"></param> |
| | | /// <returns></returns> |
| | | public override PageGridData<DtStockInfo_Hty> GetPageData(PageDataOptions options) |
| | | { |
| | | string wheres = ValidatePageOptions(options); |
| | | //è·åæåºå段 |
| | | Dictionary<string, SqlSugar.OrderByType> orderbyDic = GetPageDataSort(options, TProperties); |
| | | List<OrderByModel> orderByModels = new List<OrderByModel>(); |
| | | foreach (var item in orderbyDic) |
| | | { |
| | | OrderByModel orderByModel = new() |
| | | { |
| | | FieldName = item.Key, |
| | | OrderByType = item.Value |
| | | }; |
| | | orderByModels.Add(orderByModel); |
| | | } |
| | | |
| | | |
| | | int totalCount = 0; |
| | | List<SearchParameters> searchParametersList = new List<SearchParameters>(); |
| | | if (!string.IsNullOrEmpty(options.Wheres)) |
| | | { |
| | | try |
| | | { |
| | | searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | options.Filter = searchParametersList; |
| | | } |
| | | catch { } |
| | | } |
| | | |
| | | Expression<Func<DtStockInfo_Hty, bool>> locationStatus = null; |
| | | Expression<Func<DtStockInfo_Hty, bool>> roadwayNo = null; |
| | | Expression<Func<DtStockInfo_Hty, bool>> materielCode = null; |
| | | foreach (var item in searchParametersList) |
| | | { |
| | | if (item.Name.Contains("locationStatus")) |
| | | { |
| | | locationStatus = x => x.LocationInfo.LocationStatus == Convert.ToInt32(item.Value); |
| | | } |
| | | else if (item.Name.Contains("roadwayNo")) |
| | | { |
| | | roadwayNo = x => x.LocationInfo.RoadwayNo.Contains(item.Value); |
| | | } |
| | | else if (item.Name.Contains("materielCode")) |
| | | { |
| | | materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode.Contains(item.Value)); |
| | | } |
| | | } |
| | | //.IncludesAllFirstLayer() |
| | | var data = BaseDal.Db.Queryable<DtStockInfo_Hty>() |
| | | .Includes(x => x.StockInfoDetails) |
| | | .Includes(x => x.LocationInfo) |
| | | .WhereIF(!wheres.IsNullOrEmpty(), wheres) |
| | | .WhereIF(locationStatus != null, locationStatus) |
| | | .WhereIF(roadwayNo != null, roadwayNo) |
| | | .WhereIF(materielCode != null, materielCode) |
| | | .OrderBy(orderByModels) |
| | | .ToPageList(options.Page, options.Rows, ref totalCount); |
| | | return new PageGridData<DtStockInfo_Hty>(totalCount, data); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¹éå é¤ |
| | | /// </summary> |
| | | /// <param name="keys"></param> |
| | | /// <returns></returns> |
| | | public override WebResponseContent DeleteData(object[] keys) |
| | | { |
| | | try |
| | | { |
| | | List<DtStockInfo_Hty> stockInfos = new List<DtStockInfo_Hty>(); |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | |
| | | |
| | | var stocks = new List<string>(); |
| | | |
| | | foreach (var item in keys) |
| | | { |
| | | var stock = BaseDal.QueryFirstNavAsync(x => x.Id == item.ObjToInt()).Result; |
| | | var stockHty = stock.Adapt<DtStockInfo_Hty>(); |
| | | stockInfos.Add(stockHty); |
| | | |
| | | var location = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().FirstAsync(x => x.Id == stock.LocationId).Result; |
| | | var lastStatus = location.LocationStatus; |
| | | location.LocationStatus = (int)LocationEnum.Free; |
| | | locationInfos.Add(location); |
| | | stocks.Add(stock.PalletCode); |
| | | _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.ManualOperation, 0); |
| | | } |
| | | |
| | | //_simpleCacheService.HashDel<DtStockInfo>(CacheConst.Cache_DtStockInfo, stocks.ToArray()); |
| | | //var hty = BaseDal.Db.InsertNav(stockInfos) |
| | | // .Include(x => x.StockInfoDetails) |
| | | // .ExecuteCommand(); |
| | | |
| | | //var locationd = SqlSugarHelper.DbWMS.Updateable(locationInfos).ExecuteCommandHasChange(); |
| | | //return base.DeleteData(keys); |
| | | |
| | | var hty = BaseDal.Db.InsertNav(stockInfos) |
| | | .Include(x => x.StockInfoDetails) |
| | | .ExecuteCommand(); |
| | | |
| | | var locationd = SqlSugarHelper.DbWMS.Updateable(locationInfos).ExecuteCommandHasChange(); |
| | | return base.DeleteData(keys); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ®ä¼ å
¥åºåç±»åè·åä¸åå··éçåºå |
| | | public async Task<Dictionary<string, int>> GetLocationByStockType(bool stockType, string areaCode) |
| | | { |
| | | var stockInfos = await BaseDal.Db.Queryable<DtStockInfo>().Where(x => x.IsFull == stockType && x.AreaCode == areaCode) |
| | | .Includes(x => x.LocationInfo).ToListAsync(); |
| | | |
| | | var result = stockInfos |
| | | .GroupBy(x => x.LocationInfo.RoadwayNo) |
| | | .ToDictionary(x => x.Key, x => x.Count()); |
| | | return result; |
| | | } |
| | | |
| | | //public override WebResponseContent UpdateData(DtStockInfo entity) |
| | | //{ |
| | | // return base.UpdateData(entity); |
| | | //} |
| | | } |
| | |
| | | //è¿æ¥å符串 |
| | | //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", |
| | | //"ConnectionString": "Data Source=192.168.15.253;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //"ConnectionStringWCS": "Data Source=192.168.15.253;Initial Catalog=WIDESEA_WCSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionStringWCS": "Data Source=.;Initial Catalog=WIDESEA_WCSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionStringWCS": "Data Source=.;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //è·¨å |
| | | "Cors": { |
| | | "PolicyName": "CorsIpAccess", //çç¥åç§° |