From eec431301c5d69cb7743ac1bcb53f706782ced61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=99=B9=E7=9D=BF?= <297504645@qq.com> Date: Fri, 28 Jul 2023 17:20:03 +0800 Subject: [PATCH] =?UTF-8?q?addEditFromApiPop=E7=BB=84=E4=BB=B6+mixin?= =?UTF-8?q?=E4=B8=ADallUrlOption=E6=95=B4=E5=90=88=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/addEditFromApiPop/index.vue | 204 ++++ .../Fe/src/components/currenFormApi/index.vue | 888 ++++++++++++++++++ .../components/filterForDetailPage/index.vue | 10 +- .../src/components/newAndEdiDialog/index.vue | 20 - .../newAndEdiDialogForDetail/index.vue | 354 ------- Code/Fe/src/mixins/LoadingMixins.js | 2 + Code/Fe/src/mixins/TableHeaderMixins.js | 15 +- Code/Fe/src/mixins/TableMixins.js | 32 +- Code/Fe/src/mixins/mixins.js | 24 + Code/Fe/src/mixins/newAndEdiDialogMixins.js | 5 - Code/Fe/src/store/modules/definition.js | 113 ++- Code/Fe/src/styles/index.scss | 22 + Code/Fe/src/utils/index.js | 6 +- Code/Fe/src/utils/utils.js | 4 +- Code/Fe/src/views/menuList/TestSchool.vue | 31 +- 15 files changed, 1262 insertions(+), 468 deletions(-) create mode 100644 Code/Fe/src/components/addEditFromApiPop/index.vue create mode 100644 Code/Fe/src/components/currenFormApi/index.vue delete mode 100644 Code/Fe/src/components/newAndEdiDialogForDetail/index.vue diff --git a/Code/Fe/src/components/addEditFromApiPop/index.vue b/Code/Fe/src/components/addEditFromApiPop/index.vue new file mode 100644 index 0000000..ed14da5 --- /dev/null +++ b/Code/Fe/src/components/addEditFromApiPop/index.vue @@ -0,0 +1,204 @@ + + + + \ No newline at end of file diff --git a/Code/Fe/src/components/currenFormApi/index.vue b/Code/Fe/src/components/currenFormApi/index.vue new file mode 100644 index 0000000..572c11b --- /dev/null +++ b/Code/Fe/src/components/currenFormApi/index.vue @@ -0,0 +1,888 @@ + + + \ No newline at end of file diff --git a/Code/Fe/src/components/filterForDetailPage/index.vue b/Code/Fe/src/components/filterForDetailPage/index.vue index 0ad1801..27171cb 100644 --- a/Code/Fe/src/components/filterForDetailPage/index.vue +++ b/Code/Fe/src/components/filterForDetailPage/index.vue @@ -127,7 +127,6 @@ import { LoadingMixins } from "@/mixins/LoadingMixins"; import { mixins } from "@/mixins/mixins"; import { filterSelectMixins } from '@/mixins/filter-Select' import {getListDesById,getPageListForDetail} from "@/api/wms-api" -import * as allUrlOption from '@/utils/baseData/urlOption' export default { name: 'filterForDetailPage', mixins: [ @@ -203,10 +202,10 @@ export default { data () { return { dialogShow:true, - URLOption_detailList:allUrlOption[this.$route.name].detailListURL,//明细-列表 - URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId',//明细-查看主表的连接id - URLOption_masterName:allUrlOption[this.$route.name].masterName,//明细-列表//明细-查看主表的连接title名称 - URLOption_parent:allUrlOption[this.$route.name].parentURL ? allUrlOption[this.$route.name].parentURL : allUrlOption[this.$route.name].detailURL,//明细-查看主表 + // URLOption_detailList:allUrlOption[this.$route.name].detailListURL,//明细-列表 + // URLOption_masterId:allUrlOption[this.$route.name].masterId || 'masterId',//明细-查看主表的连接id + // URLOption_masterName:allUrlOption[this.$route.name].masterName,//明细-列表//明细-查看主表的连接title名称 + // URLOption_parent:allUrlOption[this.$route.name].parentURL ? allUrlOption[this.$route.name].parentURL : allUrlOption[this.$route.name].detailURL,//明细-查看主表 currenButtonData: [],//头部按钮 operaButtons:[],//操作列按钮 showParentDialog:false,//显示父级数据弹窗 @@ -326,6 +325,7 @@ export default { } } .el-dialog__body{ + min-height: 200px; padding-bottom: 20px !important; } } diff --git a/Code/Fe/src/components/newAndEdiDialog/index.vue b/Code/Fe/src/components/newAndEdiDialog/index.vue index ff44196..670f3e2 100644 --- a/Code/Fe/src/components/newAndEdiDialog/index.vue +++ b/Code/Fe/src/components/newAndEdiDialog/index.vue @@ -235,26 +235,6 @@ export default { ::v-deep .el-dialog__body{ padding-top: 0; } -.dialogOuterTitle{ - position: relative; - padding: 20px 0; - font-size: 18px; - height: 60px; - overflow: hidden; - color: #333; - font-weight: bold; - padding-left: 18px; - - &::before{ - content: ""; - position: absolute; - left: 0; - top: 22px; - width: 5px; - height: 22px; - background: #1890ff; - } -} ::v-deep .newAndEdiDialog { display: flex; flex-direction: column; diff --git a/Code/Fe/src/components/newAndEdiDialogForDetail/index.vue b/Code/Fe/src/components/newAndEdiDialogForDetail/index.vue deleted file mode 100644 index 2739e0e..0000000 --- a/Code/Fe/src/components/newAndEdiDialogForDetail/index.vue +++ /dev/null @@ -1,354 +0,0 @@ - - - \ No newline at end of file diff --git a/Code/Fe/src/mixins/LoadingMixins.js b/Code/Fe/src/mixins/LoadingMixins.js index ed8c1cd..703429c 100644 --- a/Code/Fe/src/mixins/LoadingMixins.js +++ b/Code/Fe/src/mixins/LoadingMixins.js @@ -21,7 +21,9 @@ export const LoadingMixins = { importDialog: false, //导入 exportDialog: false, //导出 handleFromDialog: false, //执行生成 + // fast-new detailInfoDialog:false,//明细-查看详情弹窗 + addEditApiDialog: false, // Api 新增编辑(参数配置从api获取) }, } } diff --git a/Code/Fe/src/mixins/TableHeaderMixins.js b/Code/Fe/src/mixins/TableHeaderMixins.js index 72ee502..b914721 100644 --- a/Code/Fe/src/mixins/TableHeaderMixins.js +++ b/Code/Fe/src/mixins/TableHeaderMixins.js @@ -3,12 +3,9 @@ import { postExport, } from "@/api/wms-api" -import * as allUrlOption from '@/utils/baseData/urlOption' export const TableHeaderMixins = { data() { return { - URLOption_base:allUrlOption[this.$route.name].baseURL, - URLOption_export:allUrlOption[this.$route.name].exportURL, //筛选(旧版,使用conditionFilters组件) screenData: { filters: [{ @@ -32,6 +29,11 @@ export const TableHeaderMixins = { closeExportDrop(){ this.displayDialog.exportDialog = false }, + // 关闭主表新增编辑api + closeAddEditApiPop(){ + this.addEditApiType = null + this.displayDialog.addEditApiDialog = false + }, // 导出功能 exportDropSubmit(type,form){ const name = this.$route.meta.title @@ -62,13 +64,18 @@ export const TableHeaderMixins = { this.paging() // this.$store.dispatch("app/appMainLoading", true) } - // 新增 + // 新增(原始前端写死配置方式) else if (val == 'newly') { this.formTitle = "新增" + this.$route.meta.title; this.formReveal = true this.theEvent = "newly" this.displayDialog.newDialog = true; } + // Api新增(参数配置从api获取) + else if (val == 'addFromApi') { + this.addEditApiType = 'add' + this.displayDialog.addEditApiDialog = true; + } // 筛选(旧版,使用conditionFilters组件) // else if (val == 'filter') { // this.displayDialog.screenDialog = true diff --git a/Code/Fe/src/mixins/TableMixins.js b/Code/Fe/src/mixins/TableMixins.js index ac18bf0..01cdc38 100644 --- a/Code/Fe/src/mixins/TableMixins.js +++ b/Code/Fe/src/mixins/TableMixins.js @@ -4,7 +4,6 @@ import { postDelete } from '@/api/wms-api' import { zhApiColumnsLable,firstWordSizeChange } from '@/utils/index' -import * as allUrlOption from '@/utils/baseData/urlOption' export const tableMixins = { data() { return { @@ -43,12 +42,6 @@ export const tableMixins = { apiColumns_DesTions:null, apiColumns_DetailsTable:null, // apiColumns_DetailsPage:null, - //主表-列表 - URLOption_base:allUrlOption[this.$route.name].baseURL, - //主表-明细 - URLOption_detail:allUrlOption[this.$route.name].detailURL, - //明细列表(主表明细找枚举转义使用) - URLOption_detailList:allUrlOption[this.$route.name].detailListURL, // 主表-明细-筛选数据同步回显 detailSearchDataFE:null, // 主表-操作列 @@ -57,16 +50,29 @@ export const tableMixins = { }, methods: { // 主表-右侧操作列基础按钮 - buttonOperationList_rightBase(data){ + buttonOperationList_rightBase(){ return [{ label:'编辑', name:'edit', + color:'#ff9000' },{ label:'删除', name:'delete', color:'red' }] }, + // 主表-右侧操作列基础按钮 + buttonOperationList_rightApi(data,type){ + let _btns = [] + if(type.indexOf('edit') >= 0){ + _btns.push({ + label:'编辑', + name:'editFromApi', + color:'#ff9000' + }) + } + return _btns + }, // 主表-右侧操作列基础按钮操作 buttonOperationClick_right(row,item){ // 编辑 @@ -82,6 +88,11 @@ export const tableMixins = { listAssign(this.editFormData, row) this.displayDialog.editDialog = true } + // 编辑 api + if (item.name == "editFromApi") { + this.addEditApiType = 'edit' + this.displayDialog.addEditApiDialog = true; + } // 删除 else if (item.name == "delete"){ this.$confirm('此操作将永久删除该消息, 是否继续?', '提示', { @@ -119,16 +130,13 @@ export const tableMixins = { if(_coloums){ let _data = _coloums.dtoList _data.forEach(item=>{ - let _item = item - _item.label = zhApiColumnsLable(titleName + item.name) || item.name - _item.prop = firstWordSizeChange(item.name) // 如果list接口存在数据 ,与list接口返回字段比较处理,list接口存在的话则追加 let _if = firstWordSizeChange(item.name) != 'details' if(list && list.length > 0){ _if = firstWordSizeChange(item.name) in list && firstWordSizeChange(item.name) != 'details' } if(_if){ - _Columns_Table.push(_item) + _Columns_Table.push(item) } }) } diff --git a/Code/Fe/src/mixins/mixins.js b/Code/Fe/src/mixins/mixins.js index 5a14dfc..642d849 100644 --- a/Code/Fe/src/mixins/mixins.js +++ b/Code/Fe/src/mixins/mixins.js @@ -6,7 +6,29 @@ import * as allUrlOption from '@/utils/baseData/urlOption' export const mixins = { data() { return { + //主表-列表 URLOption_base:allUrlOption[this.$route.name].baseURL, + //主表-明细 + URLOption_detail:allUrlOption[this.$route.name].detailURL, + //明细-列表 + URLOption_detailList:allUrlOption[this.$route.name].detailListURL, + // 导出 + URLOption_export:allUrlOption[this.$route.name].exportURL, + // 新增 + URLOption_add:allUrlOption[this.$route.name].addURL, + // 编辑 + URLOption_edit:allUrlOption[this.$route.name].editURL, + // 新增和编辑 + URLOption_updata:allUrlOption[this.$route.name].updataURL, + //明细-查看主表 + 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', + //明细-查看主表的连接title名称 + URLOption_masterName:allUrlOption[this.$route.name].masterName, + // 列表-明细-查看详情标题名称 + URLOption_detailInfoName:allUrlOption[this.$route.name].detailInfoName, + //Dialog标题 formTitle: "", editOptions: { @@ -43,6 +65,8 @@ export const mixins = { name: "determine" }, ], + + addEditApiType: null,//Api新增编辑方式(add,edit) } }, methods: { diff --git a/Code/Fe/src/mixins/newAndEdiDialogMixins.js b/Code/Fe/src/mixins/newAndEdiDialogMixins.js index 6f6dd13..4b5383d 100644 --- a/Code/Fe/src/mixins/newAndEdiDialogMixins.js +++ b/Code/Fe/src/mixins/newAndEdiDialogMixins.js @@ -2,14 +2,9 @@ import { postCreate, postUpdate, } from "@/api/wms-api" -import * as allUrlOption from '@/utils/baseData/urlOption' export const newAndEdiDialogMixins = { data() { return { - URLOption_base:allUrlOption[this.$route.name].baseURL, - URLOption_updata:allUrlOption[this.$route.name].updataURL, - URLOption_add:allUrlOption[this.$route.name].addURL, - URLOption_edit:allUrlOption[this.$route.name].editURL, //form数据显示操控 formReveal: true, pageStatus: "", diff --git a/Code/Fe/src/store/modules/definition.js b/Code/Fe/src/store/modules/definition.js index afa8f8d..8b6c86d 100644 --- a/Code/Fe/src/store/modules/definition.js +++ b/Code/Fe/src/store/modules/definition.js @@ -1,4 +1,5 @@ import { getInterfaceBoard,getApiDefinition } from "@/api/wms-auth" +import { zhApiColumnsLable,firstWordSizeChange } from '@/utils/index' const state = { enumList: [],//枚举 @@ -21,16 +22,60 @@ const mutations = { }, } -// 通过url做方法处理转换(S/C/U/G等)目前只做了S查询。如果有需要在丰富 +// 通过url做方法处理转换(S/C/U/G等)目前做了S查询/C新增/U编辑。如果有需要在丰富 export function initDtoTypeByUrl(url){ - if(url.indexOf('get-list-page-by-filter') >= 0){ + if(url.lastIndexOf('/base/get-list-page-by-filter') >= 0){ return "S" - }else{ + } + else if(url.lastIndexOf('/base/create') >= 0){ + return "C" + } + else if(url.lastIndexOf('/base/update-by-id') >= 0){ + return "U" + } + else{ return url } } -// DTO类型转义 +// dto和枚举转义 +export function initDtoTypesAndEnums(res,typeName,apiName) { + // 通过returnValue.type 在 res.types 中获取全部的dto + let _dtos = res.types[typeName].properties + _dtos.forEach(d=>{ + // 如果是枚举做处理(目前枚举只根据Enums做处理,todo:是否需要其他处理) + if(d.type.indexOf('Enums') >= 0){ + d.apiBaseType = 'enums' + d.isEnums = true + // -1 是去掉最后的'?'(todo:是否每个Enums类型都有?) + let enums_type = d.type.substring(0,d.type.length - 1) + // 通过type包含Enums的全字段-'?'匹配res.types中的值 + let enums_list = res.types[enums_type] + if(enums_list){ + d.enums_list = [] + enums_list.enumValues.forEach((e,key)=>{ + d.enums_list.push({value:e,label:enums_list.enumNames[key]}) + }) + } + }else{ + if(d.typeSimple == 'number' || d.typeSimple == 'number?'){ + d.apiBaseType='number' + }else{ + let _end_index = d.type.lastIndexOf('?') >= 0 ? d.type.lastIndexOf('?') : d.type.length + d.apiBaseType = d.type.substring(d.type.lastIndexOf('.') + 1, _end_index).toLowerCase() + } + if(d.type.indexOf('Guid') >= 0){ + d.apiBaseType='string' + } + } + d.baseApiName = apiName + d.name + d.label = zhApiColumnsLable(apiName + d.name,res.types) || d.name + d.prop = firstWordSizeChange(d.name) + }) + return _dtos +} + +// DTO列类型转义 export function initDtoColumnTypes(res) { // modules>app>controller>这里是所有的接口 let _controller = res.modules.app.controllers @@ -39,52 +84,36 @@ export function initDtoColumnTypes(res) { let _com = 'AppService' // 获取简单的api(路由,如:IncomingData) let _api = item.substring(item.lastIndexOf('.') + 1,item.length - _com.length) + let inner_item = { + baseApi:_api, + dtoList:[], + dtoName:item.substring(0,item.length - _com.length), + columnsType:null + } let _item = { - S:{ - dtoList:[], - dtoType: 'S', - dtoName:item.substring(0,item.length - _com.length), - columnsType:null - } + S:Object.assign({},inner_item,{dtoType: 'S'}), + C:Object.assign({},inner_item,{dtoType: 'C'}), + U:Object.assign({},inner_item,{dtoType: 'U'}), } for(let ac in _controller[item].actions){ let _actions = _controller[item].actions[ac] // actions下通过URL匹配 做特殊处理 // 查询处理 + let _type = _actions.returnValue.type if(initDtoTypeByUrl(_actions.url) == 'S'){ - let _type = _actions.returnValue.type let _type_value = _type.substring(_type.indexOf('<') + 1,_type.indexOf('>')) _item.S.columnsType=_type_value - // 通过returnValue.type 在 res.types 中获取全部的dto - let _dtos = res.types[_type_value].properties - _dtos.forEach(d=>{ - // 如果是枚举做处理(目前枚举只根据Enums做处理,todo:是否需要其他处理) - if(d.type.indexOf('Enums') >= 0){ - d.apiBaseType = 'enums' - d.isEnums = true - // -1 是去掉最后的'?'(todo:是否每个Enums类型都有?) - let enums_type = d.type.substring(0,d.type.length - 1) - // 通过type包含Enums的全字段-'?'匹配res.types中的值 - let enums_list = res.types[enums_type] - if(enums_list){ - d.enums_list = [] - enums_list.enumValues.forEach((e,key)=>{ - d.enums_list.push({value:e,label:enums_list.enumNames[key]}) - }) - } - }else{ - if(d.typeSimple == 'number' || d.typeSimple == 'number?'){ - d.apiBaseType='number' - }else{ - let _end_index = d.type.lastIndexOf('?') >= 0 ? d.type.lastIndexOf('?') : d.type.length - d.apiBaseType = d.type.substring(d.type.lastIndexOf('.') + 1, _end_index).toLowerCase() - } - if(d.type.indexOf('Guid') >= 0){ - d.apiBaseType='string' - } - } - }) - _item.S.dtoList=_dtos + _item.S.dtoList = initDtoTypesAndEnums(res,_type_value,_api) + } + // 新增处理 + if( initDtoTypeByUrl(_actions.url) == 'C' ){ + _item.C.columnsType = _type + _item.C.dtoList = initDtoTypesAndEnums(res,_type,_api) + } + // 编辑处理 + if( initDtoTypeByUrl(_actions.url) == 'U' ){ + _item.U.columnsType = _type + _item.U.dtoList = initDtoTypesAndEnums(res,_type,_api) } } _allData[_api] = _item @@ -97,8 +126,8 @@ const actions = { getDefinitionConfig({ commit }) { return new Promise(resolve => { getApiDefinition().then(res=>{ - commit('SET_DTOCOLUMN_TYPES', initDtoColumnTypes(res)) commit('SET_ENUM_LIST', res.types) + commit('SET_DTOCOLUMN_TYPES', initDtoColumnTypes(res)) resolve(res) }) }) diff --git a/Code/Fe/src/styles/index.scss b/Code/Fe/src/styles/index.scss index 82769eb..af837d3 100644 --- a/Code/Fe/src/styles/index.scss +++ b/Code/Fe/src/styles/index.scss @@ -254,4 +254,26 @@ aside { .el-table__fixed-right-patch{ background: #f6f7fb !important; } +} + +// 弹窗标题 +.dialogOuterTitle{ + position: relative; + padding: 20px 0; + font-size: 18px; + height: 60px; + overflow: hidden; + color: #333; + font-weight: bold; + padding-left: 18px; + + &::before{ + content: ""; + position: absolute; + left: 0; + top: 22px; + width: 5px; + height: 22px; + background: #1890ff; + } } \ No newline at end of file diff --git a/Code/Fe/src/utils/index.js b/Code/Fe/src/utils/index.js index f8689e4..2c428cb 100644 --- a/Code/Fe/src/utils/index.js +++ b/Code/Fe/src/utils/index.js @@ -413,9 +413,9 @@ // faster-new // 转义及读取api接口返回的表头信息 - export function zhApiColumnsLable (data) { - let _list = store.getters.columZHList - return _list ? _list[data] : data + export function zhApiColumnsLable (data,list) { + let _list = list ? list : store.getters.columZHList + return _list ? _list[data] : data } // 首字母转换 type='Lower'(小写,默认) Upper(大写) diff --git a/Code/Fe/src/utils/utils.js b/Code/Fe/src/utils/utils.js index 43be3e5..6e3cf6c 100644 --- a/Code/Fe/src/utils/utils.js +++ b/Code/Fe/src/utils/utils.js @@ -62,7 +62,7 @@ import searchPage from '@/components/searchPage' //autocomplete拉取数据探 import newAndEdiDialog from '@/components/newAndEdiDialog' //普通新增与编辑 import umyTable from '@/components/umyTable' // 用于数据量过大table import filterForDetailPage from '@/components/filterForDetailPage' //明细查询 -import newAndEdiDialogForDetail from '@/components/newAndEdiDialogForDetail' //普通新增与编辑(带明细) +import addEditFromApiPop from '@/components/addEditFromApiPop' //新增与编辑(只有主表),参数配置从api获取 // Mixins // import { tableMixins } from "@/mixins/TableMixins" @@ -112,9 +112,9 @@ Vue.component('pagination', pagination) Vue.component('conditionFilters', conditionFilters) Vue.component('searchPage', searchPage) Vue.component('newAndEdiDialog', newAndEdiDialog) -Vue.component('newAndEdiDialogForDetail', newAndEdiDialogForDetail) Vue.component('umyTable', umyTable) Vue.component('filterForDetailPage', filterForDetailPage) +Vue.component('addEditFromApiPop', addEditFromApiPop) Vue.prototype.$echarts = eCharts Vue.prototype.$isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) Vue.prototype.$isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Adr') > -1 diff --git a/Code/Fe/src/views/menuList/TestSchool.vue b/Code/Fe/src/views/menuList/TestSchool.vue index 210b3aa..12b0e77 100644 --- a/Code/Fe/src/views/menuList/TestSchool.vue +++ b/Code/Fe/src/views/menuList/TestSchool.vue @@ -25,7 +25,7 @@ :httpOverallSearchData="httpOverallSearchData" @buttonOperationClick_left="buttonOperationClick_left" :buttonOperationList_left="buttonOperationClick_leftBase" - :buttonOperationList_right="buttonOperationList_rightBase" + :buttonOperationList_right="(data)=>{return buttonOperationList_rightApi(data,'edit')}" @buttonOperationClick_right="buttonOperationClick_right" > - - + +