You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

205 lines
7.1 KiB

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
}