From 3b66042572ef905b3baa1ffbbdd09281acaf7cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=99=B9=E7=9D=BF?= <297504645@qq.com> Date: Thu, 14 Dec 2023 16:03:29 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=8E=A5=E5=8F=A3=E7=9C=8B=E6=9D=BF+j?= =?UTF-8?q?ob+inventory=E3=80=91=E6=9F=A5=E7=9C=8B=E4=B8=BB=E8=A1=A8?= =?UTF-8?q?=E5=B0=81=E8=A3=85-=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PC/InterFace.Dash/README.md | 26 +- .../components/commonTabel-drawer/index.vue | 54 ++- .../components/filterForDetailPage/index.vue | 405 +++++++++--------- PC/InterFace.Dash/src/mixins/TableMixins.js | 184 +++----- PC/InterFace.Dash/src/mixins/mixins.js | 6 +- .../src/utils/baseData/urlOption.js | 34 +- PC/InterFace.Dash/src/utils/index.js | 100 ++++- PC/UI.WinIn.FasterZ.Inventory/README.md | 26 +- .../components/commonTabel-drawer/index.vue | 54 ++- .../components/filterForDetailPage/index.vue | 405 +++++++++--------- .../src/mixins/TableMixins.js | 184 +++----- .../src/mixins/mixins.js | 6 +- .../src/utils/baseData/urlOption.js | 17 +- .../src/utils/index.js | 230 +++++++--- PC/UI.WinIn.FasterZ.Job/README.md | 26 +- .../components/commonTabel-drawer/index.vue | 54 ++- .../components/filterForDetailPage/index.vue | 405 +++++++++--------- .../src/mixins/TableMixins.js | 184 +++----- PC/UI.WinIn.FasterZ.Job/src/mixins/mixins.js | 6 +- .../src/utils/baseData/urlOption.js | 56 ++- PC/UI.WinIn.FasterZ.Job/src/utils/index.js | 230 +++++++--- 21 files changed, 1537 insertions(+), 1155 deletions(-) diff --git a/PC/InterFace.Dash/README.md b/PC/InterFace.Dash/README.md index 4208571..ebf57e0 100644 --- a/PC/InterFace.Dash/README.md +++ b/PC/InterFace.Dash/README.md @@ -123,4 +123,28 @@ validType type仅等于input时:实时keyUp校验,类型如下: pointNumberFixed 组合上方validType值仅等于pointNumber时: 小数点后方保留位数,如不填写默认为100位 +示例: -{ type:"input", label:"金额", prop:"money", validType:'pointNumber',pointNumberFixed:2}, \ No newline at end of file +{ type:"input", label:"金额", prop:"money", validType:'pointNumber',pointNumberFixed:2}, + +[urlOpion示例] +// 添加页面需要配置位置 +// 示例数据 +export const TestSchool = { + baseURL:'TestSchool/base',//主表-列表 + detailURL:'app/test-school',//主表-明细 + 明细-查看主表 + // detailInfoName:'asnNbr',//主表-明细查看详情的title名称 + detailListURL:'TestStudentDetail/base',//明细-列表, + masterId:'masterId',//明细获取主表信息的masterId,默认依次为[默认配置defalutMasterId,固定值masterId] + masterName:'studentName'//明细获取主表信息的title名称 + // parentURL:null,//明细-查看主表:特殊接口,如果没有则走detailURL + // deleteURL:null,//删除特殊URL + // addURL:null,//新增特殊URL + // editURL:null,//编辑特殊URL + // exportURL:'exportURL',//导出特殊URL + + //有主表的子表单页的主表信息接口,默认为当前的[detailURL]去掉[-Detail] + // mainShowMasterUrl:null, + //有主表的子表单页的主表链接参数,默认依次为[默认配置defalutMasterId,上方配置中masterId,固定值masterId] + // mainShowMasterId:'masterId', + //有主表的子表单页的主表路由[用于显示列转义],默认为[当前路由]去掉[Detail] + // masterRoute:null, +} \ No newline at end of file diff --git a/PC/InterFace.Dash/src/components/commonTabel-drawer/index.vue b/PC/InterFace.Dash/src/components/commonTabel-drawer/index.vue index e92d1de..1f9adc4 100644 --- a/PC/InterFace.Dash/src/components/commonTabel-drawer/index.vue +++ b/PC/InterFace.Dash/src/components/commonTabel-drawer/index.vue @@ -49,6 +49,7 @@ @handleClick="handleClick" > - + --> @@ -171,6 +184,10 @@ import pagination from "@/components/Pagination" import rowDrop from "@/components/rowDrop/index.vue" import * as allUrlOption from '@/utils/baseData/urlOption' import { LoadingMixins } from "@/mixins/LoadingMixins"; +import { + initApiColumnsForDto, + sliceStrEndDelete +} from '@/utils/index' export default { name: 'currenTabel-drawer', components: { @@ -309,7 +326,8 @@ export default { // 带有特殊扩展tabs页的 if (this.dropdownTabsData.length !== 0) { return this.dropdownTabsData - } else { + } + else { // 正常普通 详情,明细,汇总 // if (Object.keys(this.propsData).length != 0) { if (Object.keys(this.propsData)) { @@ -317,6 +335,14 @@ export default { label: "详情", name: 'xq' }] + if(this.propsData.masterInfo && this.propsData.masterInfo.length > 0){ + this.initDropdownTabsData.push({ + label: "主表信息", + name: 'masterInfo' + }) + let _master_name = this.URLOption.masterRoute || sliceStrEndDelete(this.$route.name,'Detail') + this.masterColums = initApiColumnsForDto(this.propsData.masterInfo,_master_name,this) + } // 明细可以为空数组,前端分页使用 if(this.propsData.details){ this.initDropdownTabsData.push({ @@ -343,9 +369,9 @@ export default { detailHeaderButton:null,//明细-上方按钮 detailInfoTableData:null,//明细-查看详情弹窗数据 detailInfoTitle:null,//明细-查看详情弹窗title - otherData:[], // 切换tabs页赋值 - zdyTableColumns:[], // 自定义表头 - zdyValue:'', // 自定义展现值 + // otherData:[], // 切换tabs页赋值 + // zdyTableColumns:[], // 自定义表头 + // zdyValue:'', // 自定义展现值 // firstTabs:'xq', initDropdownTabsData:[ { @@ -375,10 +401,14 @@ export default { MaxResultCount: 20, }, totalCountForDetail:0, + //明细-查看主表的连接id + URLOption:allUrlOption[this.$route.name], //明细-查看主表的连接id - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId', + URLOption_masterId:allUrlOption[this.$route.name].masterId || allUrlOption.defalutMasterId || 'masterId', //明细-列表 URLOption_detailList:allUrlOption[this.$route.name].detailListURL, + // 有主表的子表列,主表信息的表头 + masterColums:null } }, methods: { @@ -574,7 +604,7 @@ export default { // tabs 切换页 handleClick (val) { this.$emit("currenTabsChange", val);//父级获取当前的tab内容 - this.zdyValue = val.name + // this.zdyValue = val.name this.dropdownTabsData.forEach( item => { if (item.name == val.name) { let parent = this.$parent @@ -582,12 +612,12 @@ export default { // 详情 明细 汇总 parent.firstTabs = val.name if (val.name == 'xq' || val.name == 'mx' || val.name == 'hz') { - this.zdyTableColumns = [] - this.otherData = [] + // this.zdyTableColumns = [] + // this.otherData = [] parent.tableLoading = false } else { - this.zdyTableColumns = [] - this.otherData = [] + // this.zdyTableColumns = [] + // this.otherData = [] // this.firstTabs = val.name // 其他自定义tab页 // if (item.functionName == 'getListByItemcode') { diff --git a/PC/InterFace.Dash/src/components/filterForDetailPage/index.vue b/PC/InterFace.Dash/src/components/filterForDetailPage/index.vue index 7be7b63..5bb16f6 100644 --- a/PC/InterFace.Dash/src/components/filterForDetailPage/index.vue +++ b/PC/InterFace.Dash/src/components/filterForDetailPage/index.vue @@ -120,219 +120,216 @@ --> - - + \ No newline at end of file + .filterForDetailPage-list{ + height: calc(100%); + overflow: auto; +} + \ No newline at end of file diff --git a/PC/InterFace.Dash/src/mixins/TableMixins.js b/PC/InterFace.Dash/src/mixins/TableMixins.js index b6e4ac4..1628aef 100644 --- a/PC/InterFace.Dash/src/mixins/TableMixins.js +++ b/PC/InterFace.Dash/src/mixins/TableMixins.js @@ -1,11 +1,13 @@ -import i18n from "@/lang" import { getPageList, getDetailed, postDelete, ApiTypeDelete } from '@/api/wms-api' -import { zhApiColumnsLable,firstWordSizeChange } from '@/utils/index' +import { + initApiColumnsForDto, + sliceStrEndDelete +} from '@/utils/index' export const tableMixins = { data() { return { @@ -103,9 +105,22 @@ export const tableMixins = { } // 编辑 api else if (item.name == "editFromApi") { - this.addEditApiType = 'edit' - this.editFromApiRowData = row - this.displayDialog.addEditApiDialog = true; + // this.addEditApiType = 'edit' + // this.editFromApiRowData = row + // this.displayDialog.addEditApiDialog = true; + + let _url = this.URLOption_detail ? this.URLOption_detail : this.URLOption_base + this.Loading.tableLoading = true + getDetailed(row.id, _url) + .then(res=>{ + this.addEditApiType = 'edit' + this.editFromApiRowData = res + this.displayDialog.addEditApiDialog = true; + this.Loading.tableLoading = false + }) + .catch(err=>{ + this.Loading.tableLoading = false + }) } // 删除 else if (item.name == "delete"){ @@ -158,95 +173,6 @@ export const tableMixins = { // if(detailsTable && detailsTable[this.$route.name])this.apiColumns_DetailsTable = this.initTableColumns(detailsTable[this.$route.name],'detail_api') // if(detailsPage && detailsPage[this.$route.name])this.apiColumns_DetailsPage = this.initTableColumns(detailsPage[this.$route.name],'detailPage_api') // }, - // get-dto-column-type接口表头类型初始化 - initApiColumnsForDto(list,titleName){ - let data = this.$store.getters.dtoColumnTypes - let _coloums = data[titleName].S - let _Columns_Table = [] - if(_coloums){ - let _data = _coloums.dtoList - _data.forEach(item=>{ - // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 - let _if = firstWordSizeChange(item.name) != 'details' - if(list){ - _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' - } - if(_if){ - _Columns_Table.push(item) - } - }) - } - if(list){ - _Columns_Table = _Columns_Table.concat(this.specialAddColumns(list,titleName)) - } - return _Columns_Table - }, - // 添加特殊字段(api中没有的字段特殊处理) - specialAddColumns(list,titleName){ - let _apiName = titleName - let _special_list=[] - // creationTime - if('creationTime' in list){ - _special_list.push( - { - "name": "CreationTime", - "apiBaseType": "datetime", - "baseApiName": _apiName + 'CreationTime', - "label": zhApiColumnsLable(_apiName + 'CreationTime') || i18n.t('columNames.CreationTime'), - "prop": "creationTime", - } - ) - } - // creatorId - if('creatorId' in list){ - _special_list.push( - { - "name": "CreatorId", - "apiBaseType": "string", - "baseApiName": _apiName + 'CreatorId', - "label": zhApiColumnsLable(_apiName + 'CreatorId') || i18n.t('columNames.CreatorId'), - "prop": "creatorId", - } - ) - } - // lastModificationTime - if('lastModificationTime' in list){ - _special_list.push( - { - "name": "LastModificationTime", - "apiBaseType": "datetime", - "baseApiName": _apiName + 'LastModificationTime', - "label": zhApiColumnsLable(_apiName + 'LastModificationTime') || i18n.t('columNames.LastModificationTime'), - "prop": "lastModificationTime", - } - ) - } - // lastModifierId - if('lastModifierId' in list){ - _special_list.push( - { - "name": "LastModifierId", - "apiBaseType": "string", - "baseApiName": _apiName + 'LastModifierId', - "label": zhApiColumnsLable(_apiName + 'LastModifierId') || i18n.t('columNames.LastModifierId'), - "prop": "lastModifierId", - } - ) - } - // tenantId - if('tenantId' in list){ - _special_list.push( - { - "name": "TenantId", - "apiBaseType": "string", - "baseApiName": _apiName + 'TenantId', - "label": zhApiColumnsLable(_apiName + 'TenantId') || i18n.t('columNames.TenantId'), - "prop": "tenantId", - } - ) - } - return _special_list - }, //渲染数据 paging(callback,repeat) { this.Loading.tableLoading = true; @@ -255,7 +181,7 @@ export const tableMixins = { .then(res=>{ // 表头处理 let _list = res.items && res.items.length > 0 ? res.items[0] : null - let _Columns = this.initApiColumnsForDto(_list,this.$route.name) + let _Columns = initApiColumnsForDto(_list,this.$route.name,this) this.apiColumns_Table = this.initTableColumns(_Columns) this.apiColumns_DesTions = _Columns // 页面数据处理 @@ -312,30 +238,54 @@ export const tableMixins = { this.Loading.DrawerLoading = true this.displayDialog.detailsDialog = true; let _url = this.URLOption_detail ? this.URLOption_detail : this.URLOption_base - getDetailed(val.id, _url) - .then(res=>{ - // 打印使用的全部数据存储 - this.tableDataDetails = JSON.parse(JSON.stringify(res)) - // 数据处理 - this.propsData = res - if (res.details) { - // 表头处理 - let _parentName = this.URLOption_detailList.substr(0,this.URLOption_detailList.indexOf('/')) - this.apiColumns_DetailsTable = this.initTableColumns(this.initApiColumnsForDto(res.details[0],_parentName),'detail_api') - if(this.$refs.currenDrawer_Ref){ - this.$refs.currenDrawer_Ref.getDetailList(res,()=>{ - this.inlineDialogCallback() - },()=>{ - this.Loading.DrawerLoading = false - }) - } - }else{ - this.Loading.DrawerLoading = false - } - }) - .catch(err=>{ + // 有主表信息子表(表头处理) + if(!this.URLOption.isMaster && this.URLOption.hasDetail){ + let _showMasterUrl = this.URLOption.mainShowMasterUrl + if(!this.URLOption.mainShowMasterUrl){ + _showMasterUrl = sliceStrEndDelete(this.URLOption_detail,'-Detail') + } + Promise.all([ + getDetailed(val.id, _url), + getDetailed(val[this.URLOption.mainShowMasterId || this.URLOption.masterId || this.allUrlOption.defalutMasterId || 'masterId'], _showMasterUrl) + ]).then((res) => { + let _allRes = JSON.parse(JSON.stringify(res[0])) + _allRes.masterInfo = res[1] + this.initInlineHttpBack(_allRes) + }).catch(()=>{ this.Loading.DrawerLoading = false }) + } + // 没有主表信息 + else{ + getDetailed(val.id, _url) + .then(res=>{ + this.initInlineHttpBack(res) + }) + .catch(err=>{ + this.Loading.DrawerLoading = false + }) + } + }, + // 查看详情获取返回值后处理 + initInlineHttpBack(res){ + // 打印使用的全部数据存储 + this.tableDataDetails = JSON.parse(JSON.stringify(res)) + // 数据处理 + this.propsData = res + if (res.details) { + // 表头处理 + let _parentName = this.URLOption_detailList.substr(0,this.URLOption_detailList.indexOf('/')) + this.apiColumns_DetailsTable = this.initTableColumns(initApiColumnsForDto(res.details[0],_parentName,this),'detail_api') + if(this.$refs.currenDrawer_Ref){ + this.$refs.currenDrawer_Ref.getDetailList(res,()=>{ + this.inlineDialogCallback() + },()=>{ + this.Loading.DrawerLoading = false + }) + } + }else{ + this.Loading.DrawerLoading = false + } }, // 前端分页处理 // detailListPageFromFE(data){ diff --git a/PC/InterFace.Dash/src/mixins/mixins.js b/PC/InterFace.Dash/src/mixins/mixins.js index fbe1676..db47288 100644 --- a/PC/InterFace.Dash/src/mixins/mixins.js +++ b/PC/InterFace.Dash/src/mixins/mixins.js @@ -8,6 +8,9 @@ import { getLoginName } from "@/utils/auth" export const mixins = { data() { return { + allUrlOption:allUrlOption, + // 当前路由配置 + URLOption:allUrlOption[this.$route.name], //主表-列表 URLOption_base:allUrlOption[this.$route.name].baseURL, //主表-明细 @@ -23,7 +26,7 @@ export const mixins = { //明细-查看主表 URLOption_parent:allUrlOption[this.$route.name].parentURL ? allUrlOption[this.$route.name].parentURL : allUrlOption[this.$route.name].detailURL, //明细-查看主表的连接id - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId', + URLOption_masterId:allUrlOption[this.$route.name].masterId || allUrlOption.defalutMasterId || 'masterId', //明细-查看主表的连接title名称 URLOption_masterName:allUrlOption[this.$route.name].masterName, // 列表-明细-查看详情标题名称 @@ -65,7 +68,6 @@ export const mixins = { name: "determine" }, ], - addEditApiType: null,//Api新增编辑方式(add,edit) editFromApiRowData:null,//Api编辑方式的默认值 } diff --git a/PC/InterFace.Dash/src/utils/baseData/urlOption.js b/PC/InterFace.Dash/src/utils/baseData/urlOption.js index 0a5eab3..6675d31 100644 --- a/PC/InterFace.Dash/src/utils/baseData/urlOption.js +++ b/PC/InterFace.Dash/src/utils/baseData/urlOption.js @@ -1,4 +1,6 @@ -// 添加页面需要配置位置 +// 默认配置 +export const defalutMasterId = 'masterId' + // 示例数据 export const TestSchool = { baseURL:'TestSchool/base',//主表-列表 @@ -16,6 +18,7 @@ export const ExportCustomUserSetting = { // baseURL:'get-by-user-and-table-name',//主表-列表 baseURL:'ExportCustomUserSetting/base',//主表-列表 detailURL:'app/export-custom-user-setting',//主表-明细 + 明细-查看主表 + hasDetail:false, } // 接口看板管理-AsnMstr【主子表】 @@ -25,19 +28,23 @@ export const AsnMstr = { // detailInfoName:'asnNbr',//主表-明细查看详情的title名称 detailListURL:'AsnDet/base',//明细-列表, masterId:'asnMstrId',//明细获取主表信息的masterId - masterName:'asnNbr'//明细获取主表信息的title名称 + masterName:'asnNbr',//明细获取主表信息的title名称 + hasDetail:true, + isMaster:true } // 接口看板管理-IncomingData export const IncomingData = { baseURL:'IncomingData/base',//主表-列表 detailURL:'app/incoming-data',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-IncomingDataHistory export const IncomingDataHistory = { baseURL:'IncomingDataHistory/base',//主表-列表 detailURL:'app/incoming-data-history',//主表-明细 + 明细-查看主表 + hasDetail:false } @@ -45,60 +52,70 @@ export const IncomingDataHistory = { export const OutgoingData = { baseURL:'OutgoingData/base',//主表-列表 detailURL:'app/outgoing-data',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-OutgoingDataHistory export const OutgoingDataHistory = { baseURL:'OutgoingDataHistory/base',//主表-列表 detailURL:'app/outgoing-data-history',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-MessageReceive export const MessageReceive = { baseURL:'MessageReceive/base',//主表-列表 detailURL:'app/message-receive',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-MesProductL7PartsNote export const MesProductL7PartsNote = { baseURL:'MesProductL7PartsNote/base',//主表-列表 detailURL:'app/mes-product-l7Parts-note',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-Bom export const Bom = { baseURL:'Bom/base',//主表-列表 detailURL:'app/bom',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-CustPart export const CustPart = { baseURL:'CustPart/base',//主表-列表 detailURL:'app/cust-part',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-Cust export const Cust = { baseURL:'Cust/base',//主表-列表 detailURL:'app/cust',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-Inventory export const Inventory = { baseURL:'Inventory/base',//主表-列表 detailURL:'app/inventory',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-Loc export const Loc = { baseURL:'Loc/base',//主表-列表 detailURL:'app/loc',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-Part export const Part = { baseURL:'Part/base',//主表-列表 detailURL:'app/part',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-PoMstr【主子表】 @@ -108,19 +125,23 @@ export const PoMstr = { // detailInfoName:'asnNbr',//主表-明细查看详情的title名称 detailListURL:'PoDet/base',//明细-列表, masterId:'poMstrId',//明细获取主表信息的masterId - masterName:'poNbr'//明细获取主表信息的title名称 + masterName:'poNbr',//明细获取主表信息的title名称 + hasDetail:true, + isMaster:true } // 接口看板管理-PrhHist export const PrhHist = { baseURL:'PrhHist/base',//主表-列表 detailURL:'app/prh-hist',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-ProdLine export const ProdLine = { baseURL:'ProdLine/base',//主表-列表 detailURL:'app/prod-line',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-ReceiptMstr【主子表】 @@ -131,6 +152,8 @@ export const ReceiptMstr = { detailListURL:'ReceiptDet/base',//明细-列表, masterId:'receiptMstrId',//明细获取主表信息的masterId // masterName:'receiptMstrAsnNbr'//明细获取主表信息的title名称 + hasDetail:true, + isMaster:true } // 接口看板管理-ReturnMstr【主子表】 @@ -141,23 +164,28 @@ export const ReturnMstr = { detailListURL:'ReturnDet/base',//明细-列表, masterId:'returnMstrId',//明细获取主表信息的masterId // masterName:'returnMstrAsnNbr'//明细获取主表信息的title名称 + hasDetail:true, + isMaster:true } // 接口看板管理-VendPart export const VendPart = { baseURL:'VendPart/base',//主表-列表 detailURL:'app/vend-part',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-Vend export const Vend = { baseURL:'Vend/base',//主表-列表 detailURL:'app/vend',//主表-明细 + 明细-查看主表 + hasDetail:false } // 接口看板管理-SodDet export const SodDet = { baseURL:'SodDet/base',//主表-列表 detailURL:'app/sod-det',//主表-明细 + 明细-查看主表 + hasDetail:false } diff --git a/PC/InterFace.Dash/src/utils/index.js b/PC/InterFace.Dash/src/utils/index.js index 9c6dd21..4effa03 100644 --- a/PC/InterFace.Dash/src/utils/index.js +++ b/PC/InterFace.Dash/src/utils/index.js @@ -3,6 +3,7 @@ */ import {fileStorage, getPageList } from '@/api/wms-api' import store from '@/store' +import i18n from "@/lang" /** * @param {string} url @@ -428,4 +429,101 @@ export function firstWordSizeChange (str,type='Lower') { return str.substring(0,1).toUpperCase() + str.substring(1,str.length); } -} \ No newline at end of file +} + + // get-dto-column-type接口表头类型初始化 + export function initApiColumnsForDto (list,titleName,that) { + let data = that.$store.getters.dtoColumnTypes + let _coloums = data[titleName].S + let _Columns_Table = [] + if(_coloums){ + let _data = _coloums.dtoList + _data.forEach(item=>{ + // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 + let _if = firstWordSizeChange(item.name) != 'details' + if(list){ + _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' + } + if(_if){ + _Columns_Table.push(item) + } + }) + } + if(list){ + _Columns_Table = _Columns_Table.concat(specialAddColumns(list,titleName)) + } + return _Columns_Table + } + + // 特殊字段转义处理(api中没有的字段特殊处理) + export function specialAddColumns(list,titleName){ + let _apiName = titleName + let _special_list=[] + // creationTime + if('creationTime' in list){ + _special_list.push( + { + "name": "CreationTime", + "apiBaseType": "datetime", + "baseApiName": _apiName + 'CreationTime', + "label": zhApiColumnsLable(_apiName + 'CreationTime') || i18n.t('columNames.CreationTime'), + "prop": "creationTime", + } + ) + } + // creatorId + if('creatorId' in list){ + _special_list.push( + { + "name": "CreatorId", + "apiBaseType": "string", + "baseApiName": _apiName + 'CreatorId', + "label": zhApiColumnsLable(_apiName + 'CreatorId') || i18n.t('columNames.CreatorId'), + "prop": "creatorId", + } + ) + } + // lastModificationTime + if('lastModificationTime' in list){ + _special_list.push( + { + "name": "LastModificationTime", + "apiBaseType": "datetime", + "baseApiName": _apiName + 'LastModificationTime', + "label": zhApiColumnsLable(_apiName + 'LastModificationTime') || i18n.t('columNames.LastModificationTime'), + "prop": "lastModificationTime", + } + ) + } + // lastModifierId + if('lastModifierId' in list){ + _special_list.push( + { + "name": "LastModifierId", + "apiBaseType": "string", + "baseApiName": _apiName + 'LastModifierId', + "label": zhApiColumnsLable(_apiName + 'LastModifierId') || i18n.t('columNames.LastModifierId'), + "prop": "lastModifierId", + } + ) + } + // tenantId + if('tenantId' in list){ + _special_list.push( + { + "name": "TenantId", + "apiBaseType": "string", + "baseApiName": _apiName + 'TenantId', + "label": zhApiColumnsLable(_apiName + 'TenantId') || i18n.t('columNames.TenantId'), + "prop": "tenantId", + } + ) + } + return _special_list + } + + // 从字段中删除最后某字段 + export function sliceStrEndDelete(str,deleteStr){ + let _d_l = str.length - deleteStr.length + return str.slice(0,_d_l) + } \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Inventory/README.md b/PC/UI.WinIn.FasterZ.Inventory/README.md index 4208571..ebf57e0 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/README.md +++ b/PC/UI.WinIn.FasterZ.Inventory/README.md @@ -123,4 +123,28 @@ validType type仅等于input时:实时keyUp校验,类型如下: pointNumberFixed 组合上方validType值仅等于pointNumber时: 小数点后方保留位数,如不填写默认为100位 +示例: -{ type:"input", label:"金额", prop:"money", validType:'pointNumber',pointNumberFixed:2}, \ No newline at end of file +{ type:"input", label:"金额", prop:"money", validType:'pointNumber',pointNumberFixed:2}, + +[urlOpion示例] +// 添加页面需要配置位置 +// 示例数据 +export const TestSchool = { + baseURL:'TestSchool/base',//主表-列表 + detailURL:'app/test-school',//主表-明细 + 明细-查看主表 + // detailInfoName:'asnNbr',//主表-明细查看详情的title名称 + detailListURL:'TestStudentDetail/base',//明细-列表, + masterId:'masterId',//明细获取主表信息的masterId,默认依次为[默认配置defalutMasterId,固定值masterId] + masterName:'studentName'//明细获取主表信息的title名称 + // parentURL:null,//明细-查看主表:特殊接口,如果没有则走detailURL + // deleteURL:null,//删除特殊URL + // addURL:null,//新增特殊URL + // editURL:null,//编辑特殊URL + // exportURL:'exportURL',//导出特殊URL + + //有主表的子表单页的主表信息接口,默认为当前的[detailURL]去掉[-Detail] + // mainShowMasterUrl:null, + //有主表的子表单页的主表链接参数,默认依次为[默认配置defalutMasterId,上方配置中masterId,固定值masterId] + // mainShowMasterId:'masterId', + //有主表的子表单页的主表路由[用于显示列转义],默认为[当前路由]去掉[Detail] + // masterRoute:null, +} \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Inventory/src/components/commonTabel-drawer/index.vue b/PC/UI.WinIn.FasterZ.Inventory/src/components/commonTabel-drawer/index.vue index e92d1de..1f9adc4 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/src/components/commonTabel-drawer/index.vue +++ b/PC/UI.WinIn.FasterZ.Inventory/src/components/commonTabel-drawer/index.vue @@ -49,6 +49,7 @@ @handleClick="handleClick" > - + --> @@ -171,6 +184,10 @@ import pagination from "@/components/Pagination" import rowDrop from "@/components/rowDrop/index.vue" import * as allUrlOption from '@/utils/baseData/urlOption' import { LoadingMixins } from "@/mixins/LoadingMixins"; +import { + initApiColumnsForDto, + sliceStrEndDelete +} from '@/utils/index' export default { name: 'currenTabel-drawer', components: { @@ -309,7 +326,8 @@ export default { // 带有特殊扩展tabs页的 if (this.dropdownTabsData.length !== 0) { return this.dropdownTabsData - } else { + } + else { // 正常普通 详情,明细,汇总 // if (Object.keys(this.propsData).length != 0) { if (Object.keys(this.propsData)) { @@ -317,6 +335,14 @@ export default { label: "详情", name: 'xq' }] + if(this.propsData.masterInfo && this.propsData.masterInfo.length > 0){ + this.initDropdownTabsData.push({ + label: "主表信息", + name: 'masterInfo' + }) + let _master_name = this.URLOption.masterRoute || sliceStrEndDelete(this.$route.name,'Detail') + this.masterColums = initApiColumnsForDto(this.propsData.masterInfo,_master_name,this) + } // 明细可以为空数组,前端分页使用 if(this.propsData.details){ this.initDropdownTabsData.push({ @@ -343,9 +369,9 @@ export default { detailHeaderButton:null,//明细-上方按钮 detailInfoTableData:null,//明细-查看详情弹窗数据 detailInfoTitle:null,//明细-查看详情弹窗title - otherData:[], // 切换tabs页赋值 - zdyTableColumns:[], // 自定义表头 - zdyValue:'', // 自定义展现值 + // otherData:[], // 切换tabs页赋值 + // zdyTableColumns:[], // 自定义表头 + // zdyValue:'', // 自定义展现值 // firstTabs:'xq', initDropdownTabsData:[ { @@ -375,10 +401,14 @@ export default { MaxResultCount: 20, }, totalCountForDetail:0, + //明细-查看主表的连接id + URLOption:allUrlOption[this.$route.name], //明细-查看主表的连接id - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId', + URLOption_masterId:allUrlOption[this.$route.name].masterId || allUrlOption.defalutMasterId || 'masterId', //明细-列表 URLOption_detailList:allUrlOption[this.$route.name].detailListURL, + // 有主表的子表列,主表信息的表头 + masterColums:null } }, methods: { @@ -574,7 +604,7 @@ export default { // tabs 切换页 handleClick (val) { this.$emit("currenTabsChange", val);//父级获取当前的tab内容 - this.zdyValue = val.name + // this.zdyValue = val.name this.dropdownTabsData.forEach( item => { if (item.name == val.name) { let parent = this.$parent @@ -582,12 +612,12 @@ export default { // 详情 明细 汇总 parent.firstTabs = val.name if (val.name == 'xq' || val.name == 'mx' || val.name == 'hz') { - this.zdyTableColumns = [] - this.otherData = [] + // this.zdyTableColumns = [] + // this.otherData = [] parent.tableLoading = false } else { - this.zdyTableColumns = [] - this.otherData = [] + // this.zdyTableColumns = [] + // this.otherData = [] // this.firstTabs = val.name // 其他自定义tab页 // if (item.functionName == 'getListByItemcode') { diff --git a/PC/UI.WinIn.FasterZ.Inventory/src/components/filterForDetailPage/index.vue b/PC/UI.WinIn.FasterZ.Inventory/src/components/filterForDetailPage/index.vue index 7be7b63..5bb16f6 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/src/components/filterForDetailPage/index.vue +++ b/PC/UI.WinIn.FasterZ.Inventory/src/components/filterForDetailPage/index.vue @@ -120,219 +120,216 @@ --> - - + \ No newline at end of file + .filterForDetailPage-list{ + height: calc(100%); + overflow: auto; +} + \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Inventory/src/mixins/TableMixins.js b/PC/UI.WinIn.FasterZ.Inventory/src/mixins/TableMixins.js index b6e4ac4..1628aef 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/src/mixins/TableMixins.js +++ b/PC/UI.WinIn.FasterZ.Inventory/src/mixins/TableMixins.js @@ -1,11 +1,13 @@ -import i18n from "@/lang" import { getPageList, getDetailed, postDelete, ApiTypeDelete } from '@/api/wms-api' -import { zhApiColumnsLable,firstWordSizeChange } from '@/utils/index' +import { + initApiColumnsForDto, + sliceStrEndDelete +} from '@/utils/index' export const tableMixins = { data() { return { @@ -103,9 +105,22 @@ export const tableMixins = { } // 编辑 api else if (item.name == "editFromApi") { - this.addEditApiType = 'edit' - this.editFromApiRowData = row - this.displayDialog.addEditApiDialog = true; + // this.addEditApiType = 'edit' + // this.editFromApiRowData = row + // this.displayDialog.addEditApiDialog = true; + + let _url = this.URLOption_detail ? this.URLOption_detail : this.URLOption_base + this.Loading.tableLoading = true + getDetailed(row.id, _url) + .then(res=>{ + this.addEditApiType = 'edit' + this.editFromApiRowData = res + this.displayDialog.addEditApiDialog = true; + this.Loading.tableLoading = false + }) + .catch(err=>{ + this.Loading.tableLoading = false + }) } // 删除 else if (item.name == "delete"){ @@ -158,95 +173,6 @@ export const tableMixins = { // if(detailsTable && detailsTable[this.$route.name])this.apiColumns_DetailsTable = this.initTableColumns(detailsTable[this.$route.name],'detail_api') // if(detailsPage && detailsPage[this.$route.name])this.apiColumns_DetailsPage = this.initTableColumns(detailsPage[this.$route.name],'detailPage_api') // }, - // get-dto-column-type接口表头类型初始化 - initApiColumnsForDto(list,titleName){ - let data = this.$store.getters.dtoColumnTypes - let _coloums = data[titleName].S - let _Columns_Table = [] - if(_coloums){ - let _data = _coloums.dtoList - _data.forEach(item=>{ - // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 - let _if = firstWordSizeChange(item.name) != 'details' - if(list){ - _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' - } - if(_if){ - _Columns_Table.push(item) - } - }) - } - if(list){ - _Columns_Table = _Columns_Table.concat(this.specialAddColumns(list,titleName)) - } - return _Columns_Table - }, - // 添加特殊字段(api中没有的字段特殊处理) - specialAddColumns(list,titleName){ - let _apiName = titleName - let _special_list=[] - // creationTime - if('creationTime' in list){ - _special_list.push( - { - "name": "CreationTime", - "apiBaseType": "datetime", - "baseApiName": _apiName + 'CreationTime', - "label": zhApiColumnsLable(_apiName + 'CreationTime') || i18n.t('columNames.CreationTime'), - "prop": "creationTime", - } - ) - } - // creatorId - if('creatorId' in list){ - _special_list.push( - { - "name": "CreatorId", - "apiBaseType": "string", - "baseApiName": _apiName + 'CreatorId', - "label": zhApiColumnsLable(_apiName + 'CreatorId') || i18n.t('columNames.CreatorId'), - "prop": "creatorId", - } - ) - } - // lastModificationTime - if('lastModificationTime' in list){ - _special_list.push( - { - "name": "LastModificationTime", - "apiBaseType": "datetime", - "baseApiName": _apiName + 'LastModificationTime', - "label": zhApiColumnsLable(_apiName + 'LastModificationTime') || i18n.t('columNames.LastModificationTime'), - "prop": "lastModificationTime", - } - ) - } - // lastModifierId - if('lastModifierId' in list){ - _special_list.push( - { - "name": "LastModifierId", - "apiBaseType": "string", - "baseApiName": _apiName + 'LastModifierId', - "label": zhApiColumnsLable(_apiName + 'LastModifierId') || i18n.t('columNames.LastModifierId'), - "prop": "lastModifierId", - } - ) - } - // tenantId - if('tenantId' in list){ - _special_list.push( - { - "name": "TenantId", - "apiBaseType": "string", - "baseApiName": _apiName + 'TenantId', - "label": zhApiColumnsLable(_apiName + 'TenantId') || i18n.t('columNames.TenantId'), - "prop": "tenantId", - } - ) - } - return _special_list - }, //渲染数据 paging(callback,repeat) { this.Loading.tableLoading = true; @@ -255,7 +181,7 @@ export const tableMixins = { .then(res=>{ // 表头处理 let _list = res.items && res.items.length > 0 ? res.items[0] : null - let _Columns = this.initApiColumnsForDto(_list,this.$route.name) + let _Columns = initApiColumnsForDto(_list,this.$route.name,this) this.apiColumns_Table = this.initTableColumns(_Columns) this.apiColumns_DesTions = _Columns // 页面数据处理 @@ -312,30 +238,54 @@ export const tableMixins = { this.Loading.DrawerLoading = true this.displayDialog.detailsDialog = true; let _url = this.URLOption_detail ? this.URLOption_detail : this.URLOption_base - getDetailed(val.id, _url) - .then(res=>{ - // 打印使用的全部数据存储 - this.tableDataDetails = JSON.parse(JSON.stringify(res)) - // 数据处理 - this.propsData = res - if (res.details) { - // 表头处理 - let _parentName = this.URLOption_detailList.substr(0,this.URLOption_detailList.indexOf('/')) - this.apiColumns_DetailsTable = this.initTableColumns(this.initApiColumnsForDto(res.details[0],_parentName),'detail_api') - if(this.$refs.currenDrawer_Ref){ - this.$refs.currenDrawer_Ref.getDetailList(res,()=>{ - this.inlineDialogCallback() - },()=>{ - this.Loading.DrawerLoading = false - }) - } - }else{ - this.Loading.DrawerLoading = false - } - }) - .catch(err=>{ + // 有主表信息子表(表头处理) + if(!this.URLOption.isMaster && this.URLOption.hasDetail){ + let _showMasterUrl = this.URLOption.mainShowMasterUrl + if(!this.URLOption.mainShowMasterUrl){ + _showMasterUrl = sliceStrEndDelete(this.URLOption_detail,'-Detail') + } + Promise.all([ + getDetailed(val.id, _url), + getDetailed(val[this.URLOption.mainShowMasterId || this.URLOption.masterId || this.allUrlOption.defalutMasterId || 'masterId'], _showMasterUrl) + ]).then((res) => { + let _allRes = JSON.parse(JSON.stringify(res[0])) + _allRes.masterInfo = res[1] + this.initInlineHttpBack(_allRes) + }).catch(()=>{ this.Loading.DrawerLoading = false }) + } + // 没有主表信息 + else{ + getDetailed(val.id, _url) + .then(res=>{ + this.initInlineHttpBack(res) + }) + .catch(err=>{ + this.Loading.DrawerLoading = false + }) + } + }, + // 查看详情获取返回值后处理 + initInlineHttpBack(res){ + // 打印使用的全部数据存储 + this.tableDataDetails = JSON.parse(JSON.stringify(res)) + // 数据处理 + this.propsData = res + if (res.details) { + // 表头处理 + let _parentName = this.URLOption_detailList.substr(0,this.URLOption_detailList.indexOf('/')) + this.apiColumns_DetailsTable = this.initTableColumns(initApiColumnsForDto(res.details[0],_parentName,this),'detail_api') + if(this.$refs.currenDrawer_Ref){ + this.$refs.currenDrawer_Ref.getDetailList(res,()=>{ + this.inlineDialogCallback() + },()=>{ + this.Loading.DrawerLoading = false + }) + } + }else{ + this.Loading.DrawerLoading = false + } }, // 前端分页处理 // detailListPageFromFE(data){ diff --git a/PC/UI.WinIn.FasterZ.Inventory/src/mixins/mixins.js b/PC/UI.WinIn.FasterZ.Inventory/src/mixins/mixins.js index 7f8b689..db47288 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/src/mixins/mixins.js +++ b/PC/UI.WinIn.FasterZ.Inventory/src/mixins/mixins.js @@ -8,6 +8,9 @@ import { getLoginName } from "@/utils/auth" export const mixins = { data() { return { + allUrlOption:allUrlOption, + // 当前路由配置 + URLOption:allUrlOption[this.$route.name], //主表-列表 URLOption_base:allUrlOption[this.$route.name].baseURL, //主表-明细 @@ -23,7 +26,7 @@ export const mixins = { //明细-查看主表 URLOption_parent:allUrlOption[this.$route.name].parentURL ? allUrlOption[this.$route.name].parentURL : allUrlOption[this.$route.name].detailURL, //明细-查看主表的连接id - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId', + URLOption_masterId:allUrlOption[this.$route.name].masterId || allUrlOption.defalutMasterId || 'masterId', //明细-查看主表的连接title名称 URLOption_masterName:allUrlOption[this.$route.name].masterName, // 列表-明细-查看详情标题名称 @@ -65,7 +68,6 @@ export const mixins = { name: "determine" }, ], - addEditApiType: null,//Api新增编辑方式(add,edit) editFromApiRowData:null,//Api编辑方式的默认值 } diff --git a/PC/UI.WinIn.FasterZ.Inventory/src/utils/baseData/urlOption.js b/PC/UI.WinIn.FasterZ.Inventory/src/utils/baseData/urlOption.js index 7082d6d..f0b15b4 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/src/utils/baseData/urlOption.js +++ b/PC/UI.WinIn.FasterZ.Inventory/src/utils/baseData/urlOption.js @@ -1,3 +1,6 @@ +// 默认配置 +export const defalutMasterId = 'masterID' + // 示例数据 export const TestSchool = { baseURL:'TestSchool/base',//主表-列表 @@ -17,58 +20,70 @@ export const TestSchool = { export const ExportCustomUserSetting = { baseURL:'ExportCustomUserSetting/base',//主表-列表 detailURL:'app/export-custom-user-setting',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const Container = { baseURL:'Container/base',//主表-列表 detailURL:'app/container',//主表-明细 + 明细-查看主表 detailListURL:'ContainerDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const ContainerDetail = { baseURL:'ContainerDetail/base',//主表-列表 detailURL:'app/container-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const ErpInventoryBalance = { baseURL:'ErpInventoryBalance/base',//主表-列表 detailURL:'app/erp-inventory-balance',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const InventoryBalance = { baseURL:'InventoryBalance/base',//主表-列表 detailURL:'app/inventory-balance',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const InventoryOccupied = { baseURL:'InventoryOccupied/base',//主表-列表 detailURL:'app/inventory-occupied',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const InventoryPredictable = { baseURL:'InventoryPredictable/base',//主表-列表 detailURL:'app/inventory-predictable',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const InventorySnapshot = { baseURL:'InventorySnapshot/base',//主表-列表 detailURL:'app/inventory-snapshot',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const InventoryTransaction = { baseURL:'InventoryTransaction/base',//主表-列表 detailURL:'app/inventory-transaction',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const InventoryTransferLog = { baseURL:'InventoryTransferLog/base',//主表-列表 detailURL:'app/inventory-transfer-log',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const LocationCapacity = { baseURL:'LocationCapacity/base',//主表-列表 detailURL:'app/location-capacity',//主表-明细 + 明细-查看主表 + hasDetail:false, } diff --git a/PC/UI.WinIn.FasterZ.Inventory/src/utils/index.js b/PC/UI.WinIn.FasterZ.Inventory/src/utils/index.js index 2c428cb..1283e91 100644 --- a/PC/UI.WinIn.FasterZ.Inventory/src/utils/index.js +++ b/PC/UI.WinIn.FasterZ.Inventory/src/utils/index.js @@ -3,11 +3,12 @@ */ import {fileStorage, getPageList } from '@/api/wms-api' import store from '@/store' + import i18n from "@/lang" /** - * @param {string} url - * @returns {Object} - */ + * @param {string} url + * @returns {Object} + */ export function getQueryObject(url) { url = url == null ? window.location.href : url const search = url.substring(url.lastIndexOf('?') + 1) @@ -25,9 +26,9 @@ // 返回utf8字符串的字节长度 /** - * @param {string} input value - * @returns {number} output value - */ + * @param {string} input value + * @returns {number} output value + */ export function byteLength(str) { // returns the byte length of an utf8 string let s = str.length @@ -41,9 +42,9 @@ } /** - * @param {Array} actual - * @returns {Array} - */ + * @param {Array} actual + * @returns {Array} + */ export function cleanArray(actual) { const newArray = [] for (let i = 0; i < actual.length; i++) { @@ -55,9 +56,9 @@ } /** - * @param {Object} json - * @returns {Array} - */ + * @param {Object} json + * @returns {Array} + */ export function param(json) { if (!json) return '' return cleanArray( @@ -69,9 +70,9 @@ } /** - * @param {string} url - * @returns {Object} - */ + * @param {string} url + * @returns {Object} + */ export function param2Obj(url) { const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') if (!search) { @@ -91,9 +92,9 @@ } /** - * @param {string} val - * @returns {string} - */ + * @param {string} val + * @returns {string} + */ export function html2Text(val) { const div = document.createElement('div') div.innerHTML = val @@ -101,11 +102,11 @@ } /** - * Merges two objects, giving the last one precedence - * @param {Object} target - * @param {(Object|Array)} source - * @returns {Object} - */ + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ export function objectMerge(target, source) { if (typeof target !== 'object') { target = {} @@ -125,9 +126,9 @@ } /** - * @param {HTMLElement} element - * @param {string} className - */ + * @param {HTMLElement} element + * @param {string} className + */ // export function toggleClass(element, className) { // if (!element || !className) { // return @@ -145,11 +146,11 @@ // } /** - * @param {Function} func - * @param {number} wait - * @param {boolean} immediate - * @return {*} - */ + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ export function debounce(func, wait, immediate) { let timeout, args, context, timestamp, result // console.log('我在防抖函数里面') @@ -186,12 +187,12 @@ } /** - * This is just a simple version of deep copy - * Has a lot of edge cases bug - * If you want to use a perfect deep copy, use lodash's _.cloneDeep - * @param {Object} source - * @returns {Object} - */ + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ export function deepClone(source) { if (!source && typeof source !== 'object') { throw new Error('error arguments', 'deepClone') @@ -208,16 +209,16 @@ } /** - * @param {Array} arr - * @returns {Array} - */ + * @param {Array} arr + * @returns {Array} + */ export function uniqueArr(arr) { return Array.from(new Set(arr)) } /** - * @returns {string} - */ + * @returns {string} + */ export function createUniqueString() { const timestamp = +new Date() + '' const randomNum = parseInt((1 + Math.random()) * 65536) + '' @@ -225,29 +226,29 @@ } /** - * Check if an element has a class - * @param {HTMLElement} elm - * @param {string} cls - * @returns {boolean} - */ + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ export function hasClass(ele, cls) { return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) } /** - * Add class to element - * @param {HTMLElement} elm - * @param {string} cls - */ + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ export function addClass(ele, cls) { if (!hasClass(ele, cls)) ele.className += ' ' + cls } /** - * Remove class from element - * @param {HTMLElement} elm - * @param {string} cls - */ + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ export function removeClass(ele, cls) { if (hasClass(ele, cls)) { const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') @@ -274,10 +275,10 @@ // 判断是否存在某个父级元素,层级不定 /** - * @param {*} obj 当前节点,如点击事件返回的e.target - * @param {*} searchName 要查找是否存在的父级节点class - * @returns - */ + * @param {*} obj 当前节点,如点击事件返回的e.target + * @param {*} searchName 要查找是否存在的父级节点class + * @returns + */ export function getParentNode(obj,searchName) { let node = obj; let ofDiv = true; @@ -322,11 +323,11 @@ // 匹配正则返回值 /** 具体参数详细,可参照README.md的[表单组件补充:currenForm]说明 - * @param {*} type 需要匹配的正则类型 - * @param {*} defaultValue 当前传入值(即需要校验值) - * @param {*} fixedNum 如果type为pointNumber,需要保留小数点后的位数 - * @returns - */ + * @param {*} type 需要匹配的正则类型 + * @param {*} defaultValue 当前传入值(即需要校验值) + * @param {*} fixedNum 如果type为pointNumber,需要保留小数点后的位数 + * @returns + */ export function getMatchRegConformValue(type,defaultValue,fixedNum){ let value = defaultValue ? String(defaultValue) : '' let _conformValue = "" @@ -414,8 +415,8 @@ // faster-new // 转义及读取api接口返回的表头信息 export function zhApiColumnsLable (data,list) { - let _list = list ? list : store.getters.columZHList - return _list ? _list[data] : data + let _list = list ? list : store.getters.columZHList + return _list ? _list[data] : data } // 首字母转换 type='Lower'(小写,默认) Upper(大写) @@ -428,4 +429,101 @@ return str.substring(0,1).toUpperCase() + str.substring(1,str.length); } + } + + // get-dto-column-type接口表头类型初始化 + export function initApiColumnsForDto (list,titleName,that) { + let data = that.$store.getters.dtoColumnTypes + let _coloums = data[titleName].S + let _Columns_Table = [] + if(_coloums){ + let _data = _coloums.dtoList + _data.forEach(item=>{ + // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 + let _if = firstWordSizeChange(item.name) != 'details' + if(list){ + _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' + } + if(_if){ + _Columns_Table.push(item) + } + }) + } + if(list){ + _Columns_Table = _Columns_Table.concat(specialAddColumns(list,titleName)) + } + return _Columns_Table + } + + // 特殊字段转义处理(api中没有的字段特殊处理) + export function specialAddColumns(list,titleName){ + let _apiName = titleName + let _special_list=[] + // creationTime + if('creationTime' in list){ + _special_list.push( + { + "name": "CreationTime", + "apiBaseType": "datetime", + "baseApiName": _apiName + 'CreationTime', + "label": zhApiColumnsLable(_apiName + 'CreationTime') || i18n.t('columNames.CreationTime'), + "prop": "creationTime", + } + ) + } + // creatorId + if('creatorId' in list){ + _special_list.push( + { + "name": "CreatorId", + "apiBaseType": "string", + "baseApiName": _apiName + 'CreatorId', + "label": zhApiColumnsLable(_apiName + 'CreatorId') || i18n.t('columNames.CreatorId'), + "prop": "creatorId", + } + ) + } + // lastModificationTime + if('lastModificationTime' in list){ + _special_list.push( + { + "name": "LastModificationTime", + "apiBaseType": "datetime", + "baseApiName": _apiName + 'LastModificationTime', + "label": zhApiColumnsLable(_apiName + 'LastModificationTime') || i18n.t('columNames.LastModificationTime'), + "prop": "lastModificationTime", + } + ) + } + // lastModifierId + if('lastModifierId' in list){ + _special_list.push( + { + "name": "LastModifierId", + "apiBaseType": "string", + "baseApiName": _apiName + 'LastModifierId', + "label": zhApiColumnsLable(_apiName + 'LastModifierId') || i18n.t('columNames.LastModifierId'), + "prop": "lastModifierId", + } + ) + } + // tenantId + if('tenantId' in list){ + _special_list.push( + { + "name": "TenantId", + "apiBaseType": "string", + "baseApiName": _apiName + 'TenantId', + "label": zhApiColumnsLable(_apiName + 'TenantId') || i18n.t('columNames.TenantId'), + "prop": "tenantId", + } + ) + } + return _special_list + } + + // 从字段中删除最后某字段 + export function sliceStrEndDelete(str,deleteStr){ + let _d_l = str.length - deleteStr.length + return str.slice(0,_d_l) } \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Job/README.md b/PC/UI.WinIn.FasterZ.Job/README.md index 4208571..ebf57e0 100644 --- a/PC/UI.WinIn.FasterZ.Job/README.md +++ b/PC/UI.WinIn.FasterZ.Job/README.md @@ -123,4 +123,28 @@ validType type仅等于input时:实时keyUp校验,类型如下: pointNumberFixed 组合上方validType值仅等于pointNumber时: 小数点后方保留位数,如不填写默认为100位 +示例: -{ type:"input", label:"金额", prop:"money", validType:'pointNumber',pointNumberFixed:2}, \ No newline at end of file +{ type:"input", label:"金额", prop:"money", validType:'pointNumber',pointNumberFixed:2}, + +[urlOpion示例] +// 添加页面需要配置位置 +// 示例数据 +export const TestSchool = { + baseURL:'TestSchool/base',//主表-列表 + detailURL:'app/test-school',//主表-明细 + 明细-查看主表 + // detailInfoName:'asnNbr',//主表-明细查看详情的title名称 + detailListURL:'TestStudentDetail/base',//明细-列表, + masterId:'masterId',//明细获取主表信息的masterId,默认依次为[默认配置defalutMasterId,固定值masterId] + masterName:'studentName'//明细获取主表信息的title名称 + // parentURL:null,//明细-查看主表:特殊接口,如果没有则走detailURL + // deleteURL:null,//删除特殊URL + // addURL:null,//新增特殊URL + // editURL:null,//编辑特殊URL + // exportURL:'exportURL',//导出特殊URL + + //有主表的子表单页的主表信息接口,默认为当前的[detailURL]去掉[-Detail] + // mainShowMasterUrl:null, + //有主表的子表单页的主表链接参数,默认依次为[默认配置defalutMasterId,上方配置中masterId,固定值masterId] + // mainShowMasterId:'masterId', + //有主表的子表单页的主表路由[用于显示列转义],默认为[当前路由]去掉[Detail] + // masterRoute:null, +} \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Job/src/components/commonTabel-drawer/index.vue b/PC/UI.WinIn.FasterZ.Job/src/components/commonTabel-drawer/index.vue index e92d1de..1f9adc4 100644 --- a/PC/UI.WinIn.FasterZ.Job/src/components/commonTabel-drawer/index.vue +++ b/PC/UI.WinIn.FasterZ.Job/src/components/commonTabel-drawer/index.vue @@ -49,6 +49,7 @@ @handleClick="handleClick" > - + --> @@ -171,6 +184,10 @@ import pagination from "@/components/Pagination" import rowDrop from "@/components/rowDrop/index.vue" import * as allUrlOption from '@/utils/baseData/urlOption' import { LoadingMixins } from "@/mixins/LoadingMixins"; +import { + initApiColumnsForDto, + sliceStrEndDelete +} from '@/utils/index' export default { name: 'currenTabel-drawer', components: { @@ -309,7 +326,8 @@ export default { // 带有特殊扩展tabs页的 if (this.dropdownTabsData.length !== 0) { return this.dropdownTabsData - } else { + } + else { // 正常普通 详情,明细,汇总 // if (Object.keys(this.propsData).length != 0) { if (Object.keys(this.propsData)) { @@ -317,6 +335,14 @@ export default { label: "详情", name: 'xq' }] + if(this.propsData.masterInfo && this.propsData.masterInfo.length > 0){ + this.initDropdownTabsData.push({ + label: "主表信息", + name: 'masterInfo' + }) + let _master_name = this.URLOption.masterRoute || sliceStrEndDelete(this.$route.name,'Detail') + this.masterColums = initApiColumnsForDto(this.propsData.masterInfo,_master_name,this) + } // 明细可以为空数组,前端分页使用 if(this.propsData.details){ this.initDropdownTabsData.push({ @@ -343,9 +369,9 @@ export default { detailHeaderButton:null,//明细-上方按钮 detailInfoTableData:null,//明细-查看详情弹窗数据 detailInfoTitle:null,//明细-查看详情弹窗title - otherData:[], // 切换tabs页赋值 - zdyTableColumns:[], // 自定义表头 - zdyValue:'', // 自定义展现值 + // otherData:[], // 切换tabs页赋值 + // zdyTableColumns:[], // 自定义表头 + // zdyValue:'', // 自定义展现值 // firstTabs:'xq', initDropdownTabsData:[ { @@ -375,10 +401,14 @@ export default { MaxResultCount: 20, }, totalCountForDetail:0, + //明细-查看主表的连接id + URLOption:allUrlOption[this.$route.name], //明细-查看主表的连接id - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId', + URLOption_masterId:allUrlOption[this.$route.name].masterId || allUrlOption.defalutMasterId || 'masterId', //明细-列表 URLOption_detailList:allUrlOption[this.$route.name].detailListURL, + // 有主表的子表列,主表信息的表头 + masterColums:null } }, methods: { @@ -574,7 +604,7 @@ export default { // tabs 切换页 handleClick (val) { this.$emit("currenTabsChange", val);//父级获取当前的tab内容 - this.zdyValue = val.name + // this.zdyValue = val.name this.dropdownTabsData.forEach( item => { if (item.name == val.name) { let parent = this.$parent @@ -582,12 +612,12 @@ export default { // 详情 明细 汇总 parent.firstTabs = val.name if (val.name == 'xq' || val.name == 'mx' || val.name == 'hz') { - this.zdyTableColumns = [] - this.otherData = [] + // this.zdyTableColumns = [] + // this.otherData = [] parent.tableLoading = false } else { - this.zdyTableColumns = [] - this.otherData = [] + // this.zdyTableColumns = [] + // this.otherData = [] // this.firstTabs = val.name // 其他自定义tab页 // if (item.functionName == 'getListByItemcode') { diff --git a/PC/UI.WinIn.FasterZ.Job/src/components/filterForDetailPage/index.vue b/PC/UI.WinIn.FasterZ.Job/src/components/filterForDetailPage/index.vue index 7be7b63..5bb16f6 100644 --- a/PC/UI.WinIn.FasterZ.Job/src/components/filterForDetailPage/index.vue +++ b/PC/UI.WinIn.FasterZ.Job/src/components/filterForDetailPage/index.vue @@ -120,219 +120,216 @@ --> - - + \ No newline at end of file + .filterForDetailPage-list{ + height: calc(100%); + overflow: auto; +} + \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Job/src/mixins/TableMixins.js b/PC/UI.WinIn.FasterZ.Job/src/mixins/TableMixins.js index b6e4ac4..1628aef 100644 --- a/PC/UI.WinIn.FasterZ.Job/src/mixins/TableMixins.js +++ b/PC/UI.WinIn.FasterZ.Job/src/mixins/TableMixins.js @@ -1,11 +1,13 @@ -import i18n from "@/lang" import { getPageList, getDetailed, postDelete, ApiTypeDelete } from '@/api/wms-api' -import { zhApiColumnsLable,firstWordSizeChange } from '@/utils/index' +import { + initApiColumnsForDto, + sliceStrEndDelete +} from '@/utils/index' export const tableMixins = { data() { return { @@ -103,9 +105,22 @@ export const tableMixins = { } // 编辑 api else if (item.name == "editFromApi") { - this.addEditApiType = 'edit' - this.editFromApiRowData = row - this.displayDialog.addEditApiDialog = true; + // this.addEditApiType = 'edit' + // this.editFromApiRowData = row + // this.displayDialog.addEditApiDialog = true; + + let _url = this.URLOption_detail ? this.URLOption_detail : this.URLOption_base + this.Loading.tableLoading = true + getDetailed(row.id, _url) + .then(res=>{ + this.addEditApiType = 'edit' + this.editFromApiRowData = res + this.displayDialog.addEditApiDialog = true; + this.Loading.tableLoading = false + }) + .catch(err=>{ + this.Loading.tableLoading = false + }) } // 删除 else if (item.name == "delete"){ @@ -158,95 +173,6 @@ export const tableMixins = { // if(detailsTable && detailsTable[this.$route.name])this.apiColumns_DetailsTable = this.initTableColumns(detailsTable[this.$route.name],'detail_api') // if(detailsPage && detailsPage[this.$route.name])this.apiColumns_DetailsPage = this.initTableColumns(detailsPage[this.$route.name],'detailPage_api') // }, - // get-dto-column-type接口表头类型初始化 - initApiColumnsForDto(list,titleName){ - let data = this.$store.getters.dtoColumnTypes - let _coloums = data[titleName].S - let _Columns_Table = [] - if(_coloums){ - let _data = _coloums.dtoList - _data.forEach(item=>{ - // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 - let _if = firstWordSizeChange(item.name) != 'details' - if(list){ - _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' - } - if(_if){ - _Columns_Table.push(item) - } - }) - } - if(list){ - _Columns_Table = _Columns_Table.concat(this.specialAddColumns(list,titleName)) - } - return _Columns_Table - }, - // 添加特殊字段(api中没有的字段特殊处理) - specialAddColumns(list,titleName){ - let _apiName = titleName - let _special_list=[] - // creationTime - if('creationTime' in list){ - _special_list.push( - { - "name": "CreationTime", - "apiBaseType": "datetime", - "baseApiName": _apiName + 'CreationTime', - "label": zhApiColumnsLable(_apiName + 'CreationTime') || i18n.t('columNames.CreationTime'), - "prop": "creationTime", - } - ) - } - // creatorId - if('creatorId' in list){ - _special_list.push( - { - "name": "CreatorId", - "apiBaseType": "string", - "baseApiName": _apiName + 'CreatorId', - "label": zhApiColumnsLable(_apiName + 'CreatorId') || i18n.t('columNames.CreatorId'), - "prop": "creatorId", - } - ) - } - // lastModificationTime - if('lastModificationTime' in list){ - _special_list.push( - { - "name": "LastModificationTime", - "apiBaseType": "datetime", - "baseApiName": _apiName + 'LastModificationTime', - "label": zhApiColumnsLable(_apiName + 'LastModificationTime') || i18n.t('columNames.LastModificationTime'), - "prop": "lastModificationTime", - } - ) - } - // lastModifierId - if('lastModifierId' in list){ - _special_list.push( - { - "name": "LastModifierId", - "apiBaseType": "string", - "baseApiName": _apiName + 'LastModifierId', - "label": zhApiColumnsLable(_apiName + 'LastModifierId') || i18n.t('columNames.LastModifierId'), - "prop": "lastModifierId", - } - ) - } - // tenantId - if('tenantId' in list){ - _special_list.push( - { - "name": "TenantId", - "apiBaseType": "string", - "baseApiName": _apiName + 'TenantId', - "label": zhApiColumnsLable(_apiName + 'TenantId') || i18n.t('columNames.TenantId'), - "prop": "tenantId", - } - ) - } - return _special_list - }, //渲染数据 paging(callback,repeat) { this.Loading.tableLoading = true; @@ -255,7 +181,7 @@ export const tableMixins = { .then(res=>{ // 表头处理 let _list = res.items && res.items.length > 0 ? res.items[0] : null - let _Columns = this.initApiColumnsForDto(_list,this.$route.name) + let _Columns = initApiColumnsForDto(_list,this.$route.name,this) this.apiColumns_Table = this.initTableColumns(_Columns) this.apiColumns_DesTions = _Columns // 页面数据处理 @@ -312,30 +238,54 @@ export const tableMixins = { this.Loading.DrawerLoading = true this.displayDialog.detailsDialog = true; let _url = this.URLOption_detail ? this.URLOption_detail : this.URLOption_base - getDetailed(val.id, _url) - .then(res=>{ - // 打印使用的全部数据存储 - this.tableDataDetails = JSON.parse(JSON.stringify(res)) - // 数据处理 - this.propsData = res - if (res.details) { - // 表头处理 - let _parentName = this.URLOption_detailList.substr(0,this.URLOption_detailList.indexOf('/')) - this.apiColumns_DetailsTable = this.initTableColumns(this.initApiColumnsForDto(res.details[0],_parentName),'detail_api') - if(this.$refs.currenDrawer_Ref){ - this.$refs.currenDrawer_Ref.getDetailList(res,()=>{ - this.inlineDialogCallback() - },()=>{ - this.Loading.DrawerLoading = false - }) - } - }else{ - this.Loading.DrawerLoading = false - } - }) - .catch(err=>{ + // 有主表信息子表(表头处理) + if(!this.URLOption.isMaster && this.URLOption.hasDetail){ + let _showMasterUrl = this.URLOption.mainShowMasterUrl + if(!this.URLOption.mainShowMasterUrl){ + _showMasterUrl = sliceStrEndDelete(this.URLOption_detail,'-Detail') + } + Promise.all([ + getDetailed(val.id, _url), + getDetailed(val[this.URLOption.mainShowMasterId || this.URLOption.masterId || this.allUrlOption.defalutMasterId || 'masterId'], _showMasterUrl) + ]).then((res) => { + let _allRes = JSON.parse(JSON.stringify(res[0])) + _allRes.masterInfo = res[1] + this.initInlineHttpBack(_allRes) + }).catch(()=>{ this.Loading.DrawerLoading = false }) + } + // 没有主表信息 + else{ + getDetailed(val.id, _url) + .then(res=>{ + this.initInlineHttpBack(res) + }) + .catch(err=>{ + this.Loading.DrawerLoading = false + }) + } + }, + // 查看详情获取返回值后处理 + initInlineHttpBack(res){ + // 打印使用的全部数据存储 + this.tableDataDetails = JSON.parse(JSON.stringify(res)) + // 数据处理 + this.propsData = res + if (res.details) { + // 表头处理 + let _parentName = this.URLOption_detailList.substr(0,this.URLOption_detailList.indexOf('/')) + this.apiColumns_DetailsTable = this.initTableColumns(initApiColumnsForDto(res.details[0],_parentName,this),'detail_api') + if(this.$refs.currenDrawer_Ref){ + this.$refs.currenDrawer_Ref.getDetailList(res,()=>{ + this.inlineDialogCallback() + },()=>{ + this.Loading.DrawerLoading = false + }) + } + }else{ + this.Loading.DrawerLoading = false + } }, // 前端分页处理 // detailListPageFromFE(data){ diff --git a/PC/UI.WinIn.FasterZ.Job/src/mixins/mixins.js b/PC/UI.WinIn.FasterZ.Job/src/mixins/mixins.js index 7f8b689..db47288 100644 --- a/PC/UI.WinIn.FasterZ.Job/src/mixins/mixins.js +++ b/PC/UI.WinIn.FasterZ.Job/src/mixins/mixins.js @@ -8,6 +8,9 @@ import { getLoginName } from "@/utils/auth" export const mixins = { data() { return { + allUrlOption:allUrlOption, + // 当前路由配置 + URLOption:allUrlOption[this.$route.name], //主表-列表 URLOption_base:allUrlOption[this.$route.name].baseURL, //主表-明细 @@ -23,7 +26,7 @@ export const mixins = { //明细-查看主表 URLOption_parent:allUrlOption[this.$route.name].parentURL ? allUrlOption[this.$route.name].parentURL : allUrlOption[this.$route.name].detailURL, //明细-查看主表的连接id - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId', + URLOption_masterId:allUrlOption[this.$route.name].masterId || allUrlOption.defalutMasterId || 'masterId', //明细-查看主表的连接title名称 URLOption_masterName:allUrlOption[this.$route.name].masterName, // 列表-明细-查看详情标题名称 @@ -65,7 +68,6 @@ export const mixins = { name: "determine" }, ], - addEditApiType: null,//Api新增编辑方式(add,edit) editFromApiRowData:null,//Api编辑方式的默认值 } diff --git a/PC/UI.WinIn.FasterZ.Job/src/utils/baseData/urlOption.js b/PC/UI.WinIn.FasterZ.Job/src/utils/baseData/urlOption.js index 58021b9..c7e5476 100644 --- a/PC/UI.WinIn.FasterZ.Job/src/utils/baseData/urlOption.js +++ b/PC/UI.WinIn.FasterZ.Job/src/utils/baseData/urlOption.js @@ -1,3 +1,6 @@ +// 默认配置 +export const defalutMasterId = 'masterID' + // 示例数据 export const TestSchool = { baseURL:'TestSchool/base',//主表-列表 @@ -17,129 +20,162 @@ export const TestSchool = { export const ExportCustomUserSetting = { baseURL:'ExportCustomUserSetting/base',//主表-列表 detailURL:'app/export-custom-user-setting',//主表-明细 + 明细-查看主表 + hasDetail:false, } export const CheckJob = { baseURL:'CheckJob/base',//主表-列表 detailURL:'app/check-job',//主表-明细 + 明细-查看主表 detailListURL:'CheckJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const CheckJobDetail = { baseURL:'CheckJobDetail/base',//主表-列表 detailURL:'app/check-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const CountJob = { baseURL:'CountJob/base',//主表-列表 detailURL:'app/count-job',//主表-明细 + 明细-查看主表 detailListURL:'CountJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const CountJobDetail = { baseURL:'CountJobDetail/base',//主表-列表 detailURL:'app/count-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const DeliverJob = { baseURL:'DeliverJob/base',//主表-列表 detailURL:'app/deliver-job',//主表-明细 + 明细-查看主表 detailListURL:'DeliverJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const DeliverJobDetail = { baseURL:'DeliverJobDetail/base',//主表-列表 detailURL:'app/deliver-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const InspectJob = { baseURL:'InspectJob/base',//主表-列表 detailURL:'app/inspect-job',//主表-明细 + 明细-查看主表 detailListURL:'InspectJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const InspectJobDetail = { baseURL:'InspectJobDetail/base',//主表-列表 detailURL:'app/inspect-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const InspectJobSummaryDetail = { baseURL:'InspectJobSummaryDetail/base',//主表-列表 detailURL:'app/inspect-job-summary-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const IssueJob = { baseURL:'IssueJob/base',//主表-列表 detailURL:'app/issue-job',//主表-明细 + 明细-查看主表 detailListURL:'IssueJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const IssueJobDetail = { baseURL:'IssueJobDetail/base',//主表-列表 detailURL:'app/issue-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const JisDeliverJob = { baseURL:'JisDeliverJob/base',//主表-列表 detailURL:'app/jis-deliver-job',//主表-明细 + 明细-查看主表 detailListURL:'JisDeliverJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const JisDeliverJobDetail = { baseURL:'JisDeliverJobDetail/base',//主表-列表 detailURL:'app/jis-deliver-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const ProductReceiveJob = { baseURL:'ProductReceiveJob/base',//主表-列表 detailURL:'app/product-receive-job',//主表-明细 + 明细-查看主表 detailListURL:'ProductReceiveJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const ProductReceiveJobDetail = { baseURL:'ProductReceiveJobDetail/base',//主表-列表 detailURL:'app/product-receive-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const PurchaseReceiptJob = { baseURL:'PurchaseReceiptJob/base',//主表-列表 detailURL:'app/purchase-receipt-job',//主表-明细 + 明细-查看主表 detailListURL:'PurchaseReceiptJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const PurchaseReceiptJobDetail = { baseURL:'PurchaseReceiptJobDetail/base',//主表-列表 detailURL:'app/purchase-receipt-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const PurchaseReturnJob = { baseURL:'PurchaseReturnJob/base',//主表-列表 detailURL:'app/purchase-return-job',//主表-明细 + 明细-查看主表 detailListURL:'PurchaseReturnJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const PurchaseReturnJobDetail = { baseURL:'PurchaseReturnJobDetail/base',//主表-列表 detailURL:'app/purchase-return-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } export const PutawayJob = { baseURL:'PutawayJob/base',//主表-列表 detailURL:'app/putaway-job',//主表-明细 + 明细-查看主表 detailListURL:'PutawayJobDetail/base',//明细-列表, - masterId:'masterID',//明细获取主表信息的masterId + hasDetail:true, + isMaster:true } export const PutawayJobDetail = { baseURL:'PutawayJobDetail/base',//主表-列表 detailURL:'app/putaway-job-detail',//主表-明细 + 明细-查看主表 + hasDetail:true, + isMaster:false } \ No newline at end of file diff --git a/PC/UI.WinIn.FasterZ.Job/src/utils/index.js b/PC/UI.WinIn.FasterZ.Job/src/utils/index.js index 2c428cb..1283e91 100644 --- a/PC/UI.WinIn.FasterZ.Job/src/utils/index.js +++ b/PC/UI.WinIn.FasterZ.Job/src/utils/index.js @@ -3,11 +3,12 @@ */ import {fileStorage, getPageList } from '@/api/wms-api' import store from '@/store' + import i18n from "@/lang" /** - * @param {string} url - * @returns {Object} - */ + * @param {string} url + * @returns {Object} + */ export function getQueryObject(url) { url = url == null ? window.location.href : url const search = url.substring(url.lastIndexOf('?') + 1) @@ -25,9 +26,9 @@ // 返回utf8字符串的字节长度 /** - * @param {string} input value - * @returns {number} output value - */ + * @param {string} input value + * @returns {number} output value + */ export function byteLength(str) { // returns the byte length of an utf8 string let s = str.length @@ -41,9 +42,9 @@ } /** - * @param {Array} actual - * @returns {Array} - */ + * @param {Array} actual + * @returns {Array} + */ export function cleanArray(actual) { const newArray = [] for (let i = 0; i < actual.length; i++) { @@ -55,9 +56,9 @@ } /** - * @param {Object} json - * @returns {Array} - */ + * @param {Object} json + * @returns {Array} + */ export function param(json) { if (!json) return '' return cleanArray( @@ -69,9 +70,9 @@ } /** - * @param {string} url - * @returns {Object} - */ + * @param {string} url + * @returns {Object} + */ export function param2Obj(url) { const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') if (!search) { @@ -91,9 +92,9 @@ } /** - * @param {string} val - * @returns {string} - */ + * @param {string} val + * @returns {string} + */ export function html2Text(val) { const div = document.createElement('div') div.innerHTML = val @@ -101,11 +102,11 @@ } /** - * Merges two objects, giving the last one precedence - * @param {Object} target - * @param {(Object|Array)} source - * @returns {Object} - */ + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ export function objectMerge(target, source) { if (typeof target !== 'object') { target = {} @@ -125,9 +126,9 @@ } /** - * @param {HTMLElement} element - * @param {string} className - */ + * @param {HTMLElement} element + * @param {string} className + */ // export function toggleClass(element, className) { // if (!element || !className) { // return @@ -145,11 +146,11 @@ // } /** - * @param {Function} func - * @param {number} wait - * @param {boolean} immediate - * @return {*} - */ + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ export function debounce(func, wait, immediate) { let timeout, args, context, timestamp, result // console.log('我在防抖函数里面') @@ -186,12 +187,12 @@ } /** - * This is just a simple version of deep copy - * Has a lot of edge cases bug - * If you want to use a perfect deep copy, use lodash's _.cloneDeep - * @param {Object} source - * @returns {Object} - */ + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ export function deepClone(source) { if (!source && typeof source !== 'object') { throw new Error('error arguments', 'deepClone') @@ -208,16 +209,16 @@ } /** - * @param {Array} arr - * @returns {Array} - */ + * @param {Array} arr + * @returns {Array} + */ export function uniqueArr(arr) { return Array.from(new Set(arr)) } /** - * @returns {string} - */ + * @returns {string} + */ export function createUniqueString() { const timestamp = +new Date() + '' const randomNum = parseInt((1 + Math.random()) * 65536) + '' @@ -225,29 +226,29 @@ } /** - * Check if an element has a class - * @param {HTMLElement} elm - * @param {string} cls - * @returns {boolean} - */ + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ export function hasClass(ele, cls) { return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) } /** - * Add class to element - * @param {HTMLElement} elm - * @param {string} cls - */ + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ export function addClass(ele, cls) { if (!hasClass(ele, cls)) ele.className += ' ' + cls } /** - * Remove class from element - * @param {HTMLElement} elm - * @param {string} cls - */ + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ export function removeClass(ele, cls) { if (hasClass(ele, cls)) { const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') @@ -274,10 +275,10 @@ // 判断是否存在某个父级元素,层级不定 /** - * @param {*} obj 当前节点,如点击事件返回的e.target - * @param {*} searchName 要查找是否存在的父级节点class - * @returns - */ + * @param {*} obj 当前节点,如点击事件返回的e.target + * @param {*} searchName 要查找是否存在的父级节点class + * @returns + */ export function getParentNode(obj,searchName) { let node = obj; let ofDiv = true; @@ -322,11 +323,11 @@ // 匹配正则返回值 /** 具体参数详细,可参照README.md的[表单组件补充:currenForm]说明 - * @param {*} type 需要匹配的正则类型 - * @param {*} defaultValue 当前传入值(即需要校验值) - * @param {*} fixedNum 如果type为pointNumber,需要保留小数点后的位数 - * @returns - */ + * @param {*} type 需要匹配的正则类型 + * @param {*} defaultValue 当前传入值(即需要校验值) + * @param {*} fixedNum 如果type为pointNumber,需要保留小数点后的位数 + * @returns + */ export function getMatchRegConformValue(type,defaultValue,fixedNum){ let value = defaultValue ? String(defaultValue) : '' let _conformValue = "" @@ -414,8 +415,8 @@ // faster-new // 转义及读取api接口返回的表头信息 export function zhApiColumnsLable (data,list) { - let _list = list ? list : store.getters.columZHList - return _list ? _list[data] : data + let _list = list ? list : store.getters.columZHList + return _list ? _list[data] : data } // 首字母转换 type='Lower'(小写,默认) Upper(大写) @@ -428,4 +429,101 @@ return str.substring(0,1).toUpperCase() + str.substring(1,str.length); } + } + + // get-dto-column-type接口表头类型初始化 + export function initApiColumnsForDto (list,titleName,that) { + let data = that.$store.getters.dtoColumnTypes + let _coloums = data[titleName].S + let _Columns_Table = [] + if(_coloums){ + let _data = _coloums.dtoList + _data.forEach(item=>{ + // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 + let _if = firstWordSizeChange(item.name) != 'details' + if(list){ + _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' + } + if(_if){ + _Columns_Table.push(item) + } + }) + } + if(list){ + _Columns_Table = _Columns_Table.concat(specialAddColumns(list,titleName)) + } + return _Columns_Table + } + + // 特殊字段转义处理(api中没有的字段特殊处理) + export function specialAddColumns(list,titleName){ + let _apiName = titleName + let _special_list=[] + // creationTime + if('creationTime' in list){ + _special_list.push( + { + "name": "CreationTime", + "apiBaseType": "datetime", + "baseApiName": _apiName + 'CreationTime', + "label": zhApiColumnsLable(_apiName + 'CreationTime') || i18n.t('columNames.CreationTime'), + "prop": "creationTime", + } + ) + } + // creatorId + if('creatorId' in list){ + _special_list.push( + { + "name": "CreatorId", + "apiBaseType": "string", + "baseApiName": _apiName + 'CreatorId', + "label": zhApiColumnsLable(_apiName + 'CreatorId') || i18n.t('columNames.CreatorId'), + "prop": "creatorId", + } + ) + } + // lastModificationTime + if('lastModificationTime' in list){ + _special_list.push( + { + "name": "LastModificationTime", + "apiBaseType": "datetime", + "baseApiName": _apiName + 'LastModificationTime', + "label": zhApiColumnsLable(_apiName + 'LastModificationTime') || i18n.t('columNames.LastModificationTime'), + "prop": "lastModificationTime", + } + ) + } + // lastModifierId + if('lastModifierId' in list){ + _special_list.push( + { + "name": "LastModifierId", + "apiBaseType": "string", + "baseApiName": _apiName + 'LastModifierId', + "label": zhApiColumnsLable(_apiName + 'LastModifierId') || i18n.t('columNames.LastModifierId'), + "prop": "lastModifierId", + } + ) + } + // tenantId + if('tenantId' in list){ + _special_list.push( + { + "name": "TenantId", + "apiBaseType": "string", + "baseApiName": _apiName + 'TenantId', + "label": zhApiColumnsLable(_apiName + 'TenantId') || i18n.t('columNames.TenantId'), + "prop": "tenantId", + } + ) + } + return _special_list + } + + // 从字段中删除最后某字段 + export function sliceStrEndDelete(str,deleteStr){ + let _d_l = str.length - deleteStr.length + return str.slice(0,_d_l) } \ No newline at end of file