Merge branch 'dev' into dev-dictionary

This commit is contained in:
XieYongHong 2023-10-31 14:57:31 +08:00
commit b79e345cc5
4 changed files with 177 additions and 17 deletions

View File

@ -181,13 +181,13 @@ const handleMeta = (item: MenuItem, isApp: boolean) => {
} }
} }
const findComponents = (code: string, level: number, isApp: boolean, components: any) => { const findComponents = (code: string, level: number, isApp: boolean, components: any, mate: any, hasChildren: boolean) => {
const myComponents = components[code] const myComponents = components[code]
if (level === 1) { // BasicLayoutPage if (level === 1) { // BasicLayoutPage
if (myComponents) { if (myComponents && !hasChildren) {
return h(BasicLayoutPage, {}, () => [h(defineAsyncComponent(() => myComponents()), {})]) return mate?.hasLayout === false ? () => myComponents() : h(BasicLayoutPage, {}, () => [h(defineAsyncComponent(() => myComponents()), {})])
} }
if (isApp) { if (isApp && !hasChildren) {
return h(BasicLayoutPage, {}, () => [h(Iframe, {})]) return h(BasicLayoutPage, {}, () => [h(Iframe, {})])
} }
return myComponents ? () => myComponents() : BasicLayoutPage return myComponents ? () => myComponents() : BasicLayoutPage
@ -268,7 +268,7 @@ export const handleMenus = (menuData: any[], components: any, level: number = 1)
children: item.children children: item.children
} }
route.component = findComponents(item.code, level, isApp, components) route.component = findComponents(item.code, level, isApp, components, item.meta, !!item.chidlren?.length)
const extraRoute = hasExtraChildren(item, extraRouteObj) const extraRoute = hasExtraChildren(item, extraRouteObj)
const detail_components = findDetailRouteItem(item, components) const detail_components = findDetailRouteItem(item, components)

View File

@ -197,6 +197,7 @@ import { getToken, onlyMessage } from '@/utils/comm';
import { useMetadataStore } from '@/store/metadata'; import { useMetadataStore } from '@/store/metadata';
import { omit } from 'lodash-es'; import { omit } from 'lodash-es';
import { Modal } from 'jetlinks-ui-components'; import { Modal } from 'jetlinks-ui-components';
import { testObject , testType , testAliType , testAliObject} from './valideta'
const route = useRoute(); const route = useRoute();
const instanceStore = useInstanceStore(); const instanceStore = useInstanceStore();
@ -298,18 +299,19 @@ const requiredCheck = (data:any) =>{
onlyMessage(`标签定义第${index + 1}个数组中缺失valueType.type属性`,'error'); onlyMessage(`标签定义第${index + 1}个数组中缺失valueType.type属性`,'error');
check = true check = true
return return
}else{
check = testType(item,index)
} }
if(!item?.expands?.source){ if(!item?.expands?.source){
onlyMessage(`属性定义第${index + 1}个数组中缺失expands.source属性`,'error'); onlyMessage(`属性定义第${index + 1}个数组中缺失expands.source属性`,'error');
check = true check = true
return return
} }
if((item?.expands?.source === 'device' || item?.expands?.source === 'rule') && !item?.expands?.type){ if((item?.expands?.source === 'device' || item?.expands?.source === 'rule') && !item?.expands?.type){
onlyMessage(`属性定义第${index + 1}个数组中缺失type属性`,'error'); onlyMessage(`属性定义第${index + 1}个数组中缺失type属性`,'error');
check = true check = true
return return
} }
}) })
} }
if(data?.functions && !check){ if(data?.functions && !check){
@ -329,6 +331,16 @@ const requiredCheck = (data:any) =>{
check = true check = true
return return
} }
if(item?.inputs){
testObject(item.inputs,index)
item.inputs.forEach((i:any)=>{
if(!i?.expands?.required && i?.expands?.required !== false){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失expands.required属性`,'error')
check = true
return
}
})
}
}) })
} }
if(data?.events && !check){ if(data?.events && !check){
@ -401,6 +413,8 @@ const requiredCheck = (data:any) =>{
onlyMessage(`标签定义第${index + 1}个数组中缺失valueType.type属性`,'error'); onlyMessage(`标签定义第${index + 1}个数组中缺失valueType.type属性`,'error');
check = true check = true
return return
}else{
testType(item?.valueType?.type,index)
} }
if(!item?.expands?.type){ if(!item?.expands?.type){
onlyMessage(`标签定义第${index + 1}个数组中缺失expands.type属性`,'error'); onlyMessage(`标签定义第${index + 1}个数组中缺失expands.type属性`,'error');
@ -430,6 +444,8 @@ const aliCheck = (data:any) => {
onlyMessage(`属性定义第${index + 1}个数组中缺失dataType.type属性`,'error'); onlyMessage(`属性定义第${index + 1}个数组中缺失dataType.type属性`,'error');
check = true check = true
return return
}else{
testAliType(item,index)
} }
}) })
} }
@ -450,6 +466,9 @@ const aliCheck = (data:any) => {
check = true check = true
return return
} }
if(item?.inputData){
testAliObject(item.inputData,index)
}
}) })
} }
if(data?.events && !check){ if(data?.events && !check){

View File

@ -0,0 +1,141 @@
import { onlyMessage } from "@/utils/comm"
export const testProperties = (data:any) =>{
}
export const testType = (data:any,index:number,isArray?:boolean,isObject?:boolean)=>{
if(data.valueType.type === 'boolean'){
if(!data?.valueType?.trueText || !data?.valueType?.trueValue || !data?.valueType?.falseText || !data?.valueType?.falseValue){
onlyMessage(`方法定义inputs第${index+1}个数组ValueType中缺失必填属性`,'error')
return true
}
}
if(data.valueType.type === 'enum' && !isObject){
if(data.valueType?.elements?.length > 0){
data.valueType.elements.forEach((a:any,b:number)=>{
if(!a.value || !a.text){
onlyMessage(`方法定义inputs第${index+1}个数组ValueType中elements缺失必填属性`,'error')
return true
}
})
}else{
onlyMessage(`方法定义inputs第${index+1}个数组ValueType中缺失elements属性`,'error')
return true
}
}
if(data.valueType.type === 'array' && !isArray && !isObject){
if(data.valueType?.elementType){
testType(data.valueType.elementType,index,true)
}else{
onlyMessage(`方法定义inputs第${index+1}个数组ValueType中缺失elementType属性`,'error')
return true
}
}
if(data.valueType.type === 'file' && !isArray && !isObject){
if(!data.valueType?.fileType){
onlyMessage(`方法定义inputs第${index+1}个数组ValueType中缺失fileType属性`,'error')
return true
}
}
if(data.valueType.type === 'object' && !isArray && !isObject){
if(data?.valueType?.properties?.length > 0){
return testObject(data.valueType.properties,index)
}else{
onlyMessage(`方法定义inputs第${index+1}个数组ValueType中缺失properties属性`,'error')
return true
}
}
}
export const testObject = (data:any,index:number)=>{
let check = false
data.forEach((i:any)=>{
if(!i?.id){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失id属性`,'error')
check = true
return
}
if(!i?.name){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失name属性`,'error')
check = true
return
}
if(!i?.valueType?.type){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失valueType.type属性`,'error')
check = true
return
}else{
check = testType(i,index,false,true)
return
}
})
return check
}
export const testAliType = (data:any,index:number,isArray?:boolean,isObject?:boolean)=>{
if(data.dataType.type === 'boolean'){
if(!data?.dataType?.trueText || !data?.dataType?.trueValue || !data?.dataType?.falseText || !data?.dataType?.falseValue){
onlyMessage(`方法定义inputs第${index+1}个数组dataType中缺失必填属性`,'error')
return true
}
}
if(data.dataType.type === 'enum' && !isObject){
if(data.dataType?.elements?.length > 0){
data.dataType.elements.forEach((a:any,b:number)=>{
if(!a.value || !a.text){
onlyMessage(`方法定义inputs第${index+1}个数组dataType中elements缺失必填属性`,'error')
return true
}
})
}else{
onlyMessage(`方法定义inputs第${index+1}个数组dataType中缺失elements属性`,'error')
return true
}
}
if(data.dataType.type === 'array' && !isArray && !isObject){
if(data.dataType?.elementType){
testType(data.dataType.elementType,index,true)
}else{
onlyMessage(`方法定义inputs第${index+1}个数组dataType中缺失elementType属性`,'error')
return true
}
}
if(data.dataType.type === 'file' && !isArray && !isObject){
if(!data.dataType?.fileType){
onlyMessage(`方法定义inputs第${index+1}个数组dataType中缺失fileType属性`,'error')
return true
}
}
if(data.dataType.type === 'object' && !isArray && !isObject){
if(data?.dataType?.properties?.length > 0){
return testAliObject(data.dataType.properties,index)
}else{
onlyMessage(`方法定义inputs第${index+1}个数组dataType中缺失properties属性`,'error')
return true
}
}
}
export const testAliObject = (data:any,index:number)=>{
let check = false
data.forEach((i:any)=>{
if(!i?.identifier){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失id属性`,'error')
check = true
return
}
if(!i?.name){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失name属性`,'error')
check = true
return
}
if(!i?.dataType?.type){
onlyMessage(`方法定义inputs第${index+1}个数组中缺失dataType.type属性`,'error')
check = true
return
}else{
check = testAliType(i,index,false,true)
return
}
})
return check
}

View File

@ -52,12 +52,6 @@
requestBody.pageSize, requestBody.pageSize,
'value', 'value',
]" ]"
:rules="[
{
required: true,
message: '该字段是必填字段',
},
]"
> >
<j-input <j-input
v-model:value="record.value" v-model:value="record.value"
@ -230,16 +224,22 @@ const _send = () => {
}; };
let url = props.selectApi?.url; let url = props.selectApi?.url;
const urlParams = {}; let params
requestBody.params.paramsTable.forEach((item) => { if (methodName === 'get'){
if (methodName === 'get') urlParams[item.name] = item.value; const urlParams = {};
requestBody.params.paramsTable.forEach((item) => {
urlParams[item.name] = item.value;
if (url.includes(`{${item.name}}`)) if (url.includes(`{${item.name}}`))
url = url.replace(`{${item.name}}`, item.value); url = url.replace(`{${item.name}}`, item.value);
}); });
const params = { params = {
...JSON.parse(requestBody.code || '{}'), ...JSON.parse(requestBody.code || '{}'),
...urlParams, ...urlParams,
}; };
}else{
params = JSON.parse(requestBody.code || '{}')
}
server[methodObj[methodName]](url, params).then((resp: any) => { server[methodObj[methodName]](url, params).then((resp: any) => {
// body // body
if (Object.keys(params).length === 0 && refStr.value) { if (Object.keys(params).length === 0 && refStr.value) {