import { getInterfaceBoard,getApiDefinition } from "@/api/wms-auth" import { zhApiColumnsLable,firstWordSizeChange } from '@/utils/index' const state = { enumList: [],//枚举 columZHList:null,//表头转义 dtoColumnTypes:[],//所有页面的dto类型 apiActions:[],//所有api的动作(增删改查等) } const mutations = { // 设置枚举 SET_ENUM_LIST: (state, data) => { state.enumList=data }, // 设置表头转义 SET_COLUMZH_LIST: (state, data) => { state.columZHList=data }, // 所有页面的dto类型 SET_DTOCOLUMN_TYPES: (state, data) => { state.dtoColumnTypes=data }, // 所有api的动作(增删改查等) SET_API_ACTIONS: (state, data) => { state.apiActions=data } } // 通过url做方法处理转换(S/C/U/G等)目前做了S查询/C新增/U编辑。如果有需要在丰富 export function initDtoTypeByUrl(url){ const _url_last = url.substring(url.lastIndexOf("/") + 1); if(_url_last.toLowerCase() == 'get-list-page-by-filter'){ return "S" } else if(_url_last.toLowerCase() == 'create'){ return "C" } else if(_url_last.toLowerCase() == 'update'){ return "U" } else if(_url_last.toLowerCase() == 'delete'){ return "D" } else{ return url } } // dto和枚举转义 export function initDtoTypesAndEnums(res,typeName,apiName) { if(!res.types[typeName])return // 通过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 // 有?的话去掉? let _lastLength = d.type.lastIndexOf('?') >= 0 ? 1 : 0 let enums_type = d.type.substring(0,d.type.length - _lastLength) let _lastEnumName = enums_type.slice(enums_type.lastIndexOf('.') + 1) // 通过type包含Enums的全字段-'?'匹配res.types中的值 let enums_list = res.types[enums_type] if(enums_list){ d.enums_list = [] enums_list.enumValues.forEach((e,key)=>{ let _zhName = _lastEnumName + '.' + e d.enums_list.push({ value:e, label:state.columZHList[_zhName] || enums_list.enumNames[key],//反查翻译接口中有没有对应的数据(enum名+'.值'),没有的话显示当前enumNames的值 }) }) } }else if(d.typeSimple.indexOf('boolean') >= 0){ d.apiBaseType = 'boolean' d.enums_list = [{ value: true, label: '是' },{ value: false, label: '否' }] }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) || d.name d.prop = firstWordSizeChange(d.name) }) return _dtos } // DTO列类型转义 export function initDtoColumnTypes(res,commit) { let _actionsObj = {}// 所有actions处理暂存数据 // modules>app>controller>这里是所有的接口 let _controller = res.modules.app.controllers let _allData = {} for(let item in _controller){ let _com = 'AppService' // 获取简单的api(路由,如:IncomingData) let _api = item.substring(item.lastIndexOf('.') + 1,item.length - _com.length) // 所有actions处理 _actionsObj[_api] = _controller[item].actions; // dto处理 let inner_item = { baseApi:_api, dtoList:[], dtoName:item.substring(0,item.length - _com.length), columnsType:null } let _item = { S:Object.assign({},inner_item,{dtoType: 'S'}), C:Object.assign({},inner_item,{dtoType: 'C'}), U:Object.assign({},inner_item,{dtoType: 'U'}), D:Object.assign({},inner_item,{dtoType: 'D'}), } 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'){ _item.S.actionsUrl = _actions.url let _type_value = _type.substring(_type.indexOf('<') + 1,_type.indexOf('>')) _item.S.columnsType=_type_value _item.S.dtoList = initDtoTypesAndEnums(res,_type_value,_api) } // 新增处理 if( initDtoTypeByUrl(_actions.url) == 'C' ){ _item.C.actionsUrl = _actions.url _item.C.columnsType = _type _item.C.dtoList = initDtoTypesAndEnums(res,_type,_api) } // 编辑处理 if( initDtoTypeByUrl(_actions.url) == 'U' ){ _item.U.actionsUrl = _actions.url _item.U.columnsType = _type _item.U.dtoList = initDtoTypesAndEnums(res,_type,_api) } // 删除处理 if( initDtoTypeByUrl(_actions.url) == 'D' ){ _item.D.actionsUrl = _actions.url _item.U.columnsType = _type } } _allData[_api] = _item } // 设置所有actions commit('SET_API_ACTIONS', _actionsObj) return _allData } const actions = { // 获取枚举 getDefinitionConfig({ commit }) { return new Promise(resolve => { getApiDefinition().then(res=>{ commit('SET_ENUM_LIST', res.types) commit('SET_DTOCOLUMN_TYPES', initDtoColumnTypes(res,commit)) resolve(res) }) }) }, // 获取表头转义 getColumZHList({ commit },errCallback) { return new Promise((resolve,reject) => { getInterfaceBoard() .then(res=>{ let _zh = res.resources[localStorage.getItem('appClientScope')].texts; commit('SET_COLUMZH_LIST', _zh) resolve(res) }) .catch(err=>{ if(errCallback)errCallback() reject(err) }) }) }, // 重置配置信息 resetDefinition({ commit }) { commit('SET_ENUM_LIST', []) commit('SET_COLUMZH_LIST', null) commit('SET_DTOCOLUMN_TYPES', []) commit('SET_API_ACTIONS', []) } } export default { namespaced: true, state, mutations, actions }