diff --git a/src/api/device/dashboard.ts b/src/api/device/dashboard.ts index 34ee06e6..999b5b44 100644 --- a/src/api/device/dashboard.ts +++ b/src/api/device/dashboard.ts @@ -15,4 +15,4 @@ export const dashboard = (data?:any) => server.post('/dashboard/_multi',data); /** * 地图数据 */ -export const getGo = (data?:any) => server.post('/geo/object/device/_search/geo.json') \ No newline at end of file +export const getGo = (data?:any) => server.post('/geo/object/device/_search/geo.json',data) \ No newline at end of file diff --git a/src/api/system/apiPage.ts b/src/api/system/apiPage.ts index a827239c..0c19d2fa 100644 --- a/src/api/system/apiPage.ts +++ b/src/api/system/apiPage.ts @@ -32,4 +32,9 @@ export const delOperations_api = (data:object) => server.remove(`/application/op * @param data * @returns */ -export const updateOperations_api = (code:string,type:'_add'| '_delete', data: object) => server.post(`/application/${code}/grant/${type}`, data); +// export const updateOperations_api = (code:string,type:'_add'| '_delete', data: object) => server.post(`/application/${code}/grant/${type}`, data); + +/** + * 赋权-选中/取消选中api + */ +export const updateOperations_api = (id:string,data:object) => server.post(`/application/${id}/grant`,data) diff --git a/src/utils/menu.ts b/src/utils/menu.ts index 1d11aabd..eadfbb02 100644 --- a/src/utils/menu.ts +++ b/src/utils/menu.ts @@ -179,13 +179,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] if (level === 1) { // BasicLayoutPage - if (myComponents) { - return h(BasicLayoutPage, {}, () => [h(defineAsyncComponent(() => myComponents()), {})]) + if (myComponents && !hasChildren) { + return mate?.hasLayout === false ? () => myComponents() : h(BasicLayoutPage, {}, () => [h(defineAsyncComponent(() => myComponents()), {})]) } - if (isApp) { + if (isApp && !hasChildren) { return h(BasicLayoutPage, {}, () => [h(Iframe, {})]) } return myComponents ? () => myComponents() : BasicLayoutPage @@ -266,7 +266,7 @@ export const handleMenus = (menuData: any[], components: any, level: number = 1) 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 detail_components = findDetailRouteItem(item, components) diff --git a/src/views/device/DashBoard/components/Amap.vue b/src/views/device/DashBoard/components/Amap.vue index 7d331ac4..9311e1e1 100644 --- a/src/views/device/DashBoard/components/Amap.vue +++ b/src/views/device/DashBoard/components/Amap.vue @@ -37,7 +37,11 @@ import AmapComponent from '@/components/AMapComponent/index.vue'; import { getGo } from '@/api/device/dashboard'; let point = ref(); const getMapData = async () => { - const res = await getGo({}); + const res = await getGo({ +    filter:{ +        paging:false +    } +}); point.value = res.result?.features; }; getMapData(); diff --git a/src/views/device/components/Metadata/Cat/index.vue b/src/views/device/components/Metadata/Cat/index.vue index 623ec1ec..8c963baf 100644 --- a/src/views/device/components/Metadata/Cat/index.vue +++ b/src/views/device/components/Metadata/Cat/index.vue @@ -158,14 +158,14 @@ watch( if (props.type === 'device') { detail(id as string).then((resp) => { loading.value = false - instanceStore.setCurrent(resp.result) + // instanceStore.setCurrent(resp.result) value.value = resp.result.metadata hideVirtualRule(resp.result.metadata) }); } else { productDetail(id as string).then((resp) => { loading.value = false - productStore.setCurrent(resp.result) + // productStore.setCurrent(resp.result) value.value = resp.result.metadata hideVirtualRule(resp.result.metadata) }); diff --git a/src/views/device/components/Metadata/Import/index.vue b/src/views/device/components/Metadata/Import/index.vue index 8789b971..361167c5 100644 --- a/src/views/device/components/Metadata/Import/index.vue +++ b/src/views/device/components/Metadata/Import/index.vue @@ -197,6 +197,7 @@ import { getToken, onlyMessage } from '@/utils/comm'; import { useMetadataStore } from '@/store/metadata'; import { omit } from 'lodash-es'; import { Modal } from 'jetlinks-ui-components'; +import { testObject , testType , testAliType , testAliObject} from './valideta' const route = useRoute(); const instanceStore = useInstanceStore(); @@ -298,18 +299,19 @@ const requiredCheck = (data:any) =>{ onlyMessage(`标签定义第${index + 1}个数组中缺失valueType.type属性`,'error'); check = true return + }else{ + check = testType(item,index) } if(!item?.expands?.source){ onlyMessage(`属性定义第${index + 1}个数组中缺失expands.source属性`,'error'); check = true return } - if((item?.expands?.source === 'device' || item?.expands?.source === 'rule') && !item?.expands?.type){ onlyMessage(`属性定义第${index + 1}个数组中缺失type属性`,'error'); check = true return - } + } }) } if(data?.functions && !check){ @@ -329,6 +331,16 @@ const requiredCheck = (data:any) =>{ check = true 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){ @@ -401,6 +413,8 @@ const requiredCheck = (data:any) =>{ onlyMessage(`标签定义第${index + 1}个数组中缺失valueType.type属性`,'error'); check = true return + }else{ + testType(item?.valueType?.type,index) } if(!item?.expands?.type){ onlyMessage(`标签定义第${index + 1}个数组中缺失expands.type属性`,'error'); @@ -430,6 +444,8 @@ const aliCheck = (data:any) => { onlyMessage(`属性定义第${index + 1}个数组中缺失dataType.type属性`,'error'); check = true return + }else{ + testAliType(item,index) } }) } @@ -450,6 +466,9 @@ const aliCheck = (data:any) => { check = true return } + if(item?.inputData){ + testAliObject(item.inputData,index) + } }) } if(data?.events && !check){ diff --git a/src/views/device/components/Metadata/Import/valideta.ts b/src/views/device/components/Metadata/Import/valideta.ts new file mode 100644 index 00000000..df2d5841 --- /dev/null +++ b/src/views/device/components/Metadata/Import/valideta.ts @@ -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 +} \ No newline at end of file diff --git a/src/views/system/Menu/components/ButtonAddDialog.vue b/src/views/system/Menu/components/ButtonAddDialog.vue index c769e091..bf927177 100644 --- a/src/views/system/Menu/components/ButtonAddDialog.vue +++ b/src/views/system/Menu/components/ButtonAddDialog.vue @@ -59,7 +59,7 @@ max-height="350px" v-model:value="form.data.permissions" :disabled="props.mode === '查看'" - :key="form.data.id || ''" + :btnId="form.data.id " /> diff --git a/src/views/system/Menu/components/PermissChoose.vue b/src/views/system/Menu/components/PermissChoose.vue index 83cf39cc..f62e7e3c 100644 --- a/src/views/system/Menu/components/PermissChoose.vue +++ b/src/views/system/Menu/components/PermissChoose.vue @@ -50,7 +50,7 @@ import { Form } from 'jetlinks-ui-components'; Form.useInjectFormItemContext(); const props = defineProps<{ - key: string; + btnId: string; value: any[]; firstWidth: number; maxHeight: string; @@ -77,17 +77,17 @@ const permission = reactive({ init: () => { permission.getList(); - watch( - () => props.key, - () => { - nextTick(() => { - permission.list = permission.makeList( - props.value, - permission.sourceList, - ); - }); - }, - ); + // watch( + // () => props.btnId, + // () => { + // nextTick(() => { + // permission.list = permission.makeList( + // props.value, + // permission.sourceList, + // ); + // }); + // }, + // ); }, // 获取权限列表 getList: () => { diff --git a/src/views/system/NoticeRule/components/Detail/index.vue b/src/views/system/NoticeRule/components/Detail/index.vue index 13adfef9..2e228b06 100644 --- a/src/views/system/NoticeRule/components/Detail/index.vue +++ b/src/views/system/NoticeRule/components/Detail/index.vue @@ -31,7 +31,7 @@ {{ variables }} -
+
用户权限
{{ obj.role }} @@ -49,6 +49,7 @@ import ConfigApi from '@/api/notice/config'; import TemplateApi from '@/api/notice/template'; import { queryConfigVariables } from '@/api/system/noticeRule'; import { getRoleList_api } from '@/api/system/user'; +import { isNoCommunity } from "@/utils/utils"; const props = defineProps({ data: { diff --git a/src/views/system/NoticeRule/components/Save/index.vue b/src/views/system/NoticeRule/components/Save/index.vue index 4bd4bf86..0cf750f4 100644 --- a/src/views/system/NoticeRule/components/Save/index.vue +++ b/src/views/system/NoticeRule/components/Save/index.vue @@ -60,14 +60,14 @@ ref="variableRef" /> -