Showing
78 changed files
with
406 additions
and
441 deletions
@@ -25,7 +25,7 @@ module.exports = defineConfig({ | @@ -25,7 +25,7 @@ module.exports = defineConfig({ | ||
25 | 'plugin:jest/recommended', | 25 | 'plugin:jest/recommended', |
26 | ], | 26 | ], |
27 | rules: { | 27 | rules: { |
28 | - 'no-console': 'error', | 28 | + 'no-console': ['error', { allow: ['warn', 'error'] }], |
29 | 'vue/script-setup-uses-vars': 'error', | 29 | 'vue/script-setup-uses-vars': 'error', |
30 | '@typescript-eslint/ban-ts-ignore': 'off', | 30 | '@typescript-eslint/ban-ts-ignore': 'off', |
31 | '@typescript-eslint/explicit-function-return-type': 'off', | 31 | '@typescript-eslint/explicit-function-return-type': 'off', |
@@ -65,3 +65,19 @@ export interface ImportModelOfMatterType { | @@ -65,3 +65,19 @@ export interface ImportModelOfMatterType { | ||
65 | tkDeviceProfileId?: string; | 65 | tkDeviceProfileId?: string; |
66 | categoryId?: string; | 66 | categoryId?: string; |
67 | } | 67 | } |
68 | + | ||
69 | +export interface ModelOfMatterItemRecordType { | ||
70 | + id: string; | ||
71 | + creator: string; | ||
72 | + createTime: string; | ||
73 | + enabled: boolean; | ||
74 | + tenantId: string; | ||
75 | + functionType: string; | ||
76 | + functionName: string; | ||
77 | + identifier: string; | ||
78 | + extensionDesc: any; | ||
79 | + accessMode: string; | ||
80 | + functionJson: FunctionJson; | ||
81 | + status: number; | ||
82 | + deviceProfileId: string; | ||
83 | +} |
@@ -2,6 +2,7 @@ import { BasicPageParams } from '../model/baseModel'; | @@ -2,6 +2,7 @@ import { BasicPageParams } from '../model/baseModel'; | ||
2 | import { | 2 | import { |
3 | GetModelTslParams, | 3 | GetModelTslParams, |
4 | ImportModelOfMatterType, | 4 | ImportModelOfMatterType, |
5 | + ModelOfMatterItemRecordType, | ||
5 | ModelOfMatterParams, | 6 | ModelOfMatterParams, |
6 | } from './model/modelOfMatterModel'; | 7 | } from './model/modelOfMatterModel'; |
7 | import { defHttp } from '/@/utils/http/axios'; | 8 | import { defHttp } from '/@/utils/http/axios'; |
@@ -36,7 +37,7 @@ export const getModelList = ( | @@ -36,7 +37,7 @@ export const getModelList = ( | ||
36 | id?: string; | 37 | id?: string; |
37 | } | 38 | } |
38 | ) => { | 39 | ) => { |
39 | - return defHttp.get({ | 40 | + return defHttp.get<ModelOfMatterItemRecordType[]>({ |
40 | url: `${ModelOfMatter.LIST}`, | 41 | url: `${ModelOfMatter.LIST}`, |
41 | params, | 42 | params, |
42 | }); | 43 | }); |
@@ -14,7 +14,6 @@ export function saveMenuApi( | @@ -14,7 +14,6 @@ export function saveMenuApi( | ||
14 | update = false, | 14 | update = false, |
15 | mode: ErrorMessageMode = 'modal' | 15 | mode: ErrorMessageMode = 'modal' |
16 | ) { | 16 | ) { |
17 | - console.log(params); | ||
18 | if (!update) { | 17 | if (!update) { |
19 | return defHttp.post<MenuOperationApiResult>( | 18 | return defHttp.post<MenuOperationApiResult>( |
20 | { | 19 | { |
@@ -48,13 +48,21 @@ | @@ -48,13 +48,21 @@ | ||
48 | <template #content> | 48 | <template #content> |
49 | <section class="flex flex-wrap w-36"> | 49 | <section class="flex flex-wrap w-36"> |
50 | <table class="border-collapse" @click="handleSelectConfirm"> | 50 | <table class="border-collapse" @click="handleSelectConfirm"> |
51 | - <tr v-for="row in MAX_ROW" :key="row" class="border border-gray-300 border-solid"> | 51 | + <tr |
52 | + v-for="rowNumber in MAX_ROW" | ||
53 | + :key="rowNumber" | ||
54 | + class="border border-gray-300 border-solid" | ||
55 | + > | ||
52 | <td | 56 | <td |
53 | - v-for="col in MAX_COL" | ||
54 | - :class="selectedLayout.col >= col && selectedLayout.row >= row ? 'bg-blue-500' : ''" | ||
55 | - :key="col" | 57 | + v-for="colNumber in MAX_COL" |
58 | + :class=" | ||
59 | + selectedLayout.col >= colNumber && selectedLayout.row >= rowNumber | ||
60 | + ? 'bg-blue-500' | ||
61 | + : '' | ||
62 | + " | ||
63 | + :key="colNumber" | ||
56 | class="w-4 h-4 border border-gray-300 border-solid cursor-pointer" | 64 | class="w-4 h-4 border border-gray-300 border-solid cursor-pointer" |
57 | - @mouseover="handleOver(row, col)" | 65 | + @mouseover="handleOver(rowNumber, colNumber)" |
58 | > | 66 | > |
59 | </td> | 67 | </td> |
60 | </tr> | 68 | </tr> |
@@ -77,7 +77,6 @@ | @@ -77,7 +77,6 @@ | ||
77 | try { | 77 | try { |
78 | const data = e.target && e.target.result; | 78 | const data = e.target && e.target.result; |
79 | const workbook = XLSX.read(data, { type: 'array' }); | 79 | const workbook = XLSX.read(data, { type: 'array' }); |
80 | - // console.log(workbook); | ||
81 | /* DO SOMETHING WITH workbook HERE */ | 80 | /* DO SOMETHING WITH workbook HERE */ |
82 | const excelData = getExcelData(workbook); | 81 | const excelData = getExcelData(workbook); |
83 | emit('success', excelData); | 82 | emit('success', excelData); |
@@ -90,7 +90,7 @@ | @@ -90,7 +90,7 @@ | ||
90 | () => { | 90 | () => { |
91 | !unref(isFirstLoad) && fetch(); | 91 | !unref(isFirstLoad) && fetch(); |
92 | }, | 92 | }, |
93 | - { deep: true }, | 93 | + { deep: true } |
94 | ); | 94 | ); |
95 | 95 | ||
96 | async function fetch() { | 96 | async function fetch() { |
@@ -110,6 +110,7 @@ | @@ -110,6 +110,7 @@ | ||
110 | } | 110 | } |
111 | emitChange(); | 111 | emitChange(); |
112 | } catch (error) { | 112 | } catch (error) { |
113 | + // eslint-disable-next-line no-console | ||
113 | console.warn(error); | 114 | console.warn(error); |
114 | } finally { | 115 | } finally { |
115 | loading.value = false; | 116 | loading.value = false; |
@@ -156,6 +156,7 @@ | @@ -156,6 +156,7 @@ | ||
156 | } | 156 | } |
157 | emitChange(); | 157 | emitChange(); |
158 | } catch (error) { | 158 | } catch (error) { |
159 | + // eslint-disable-next-line no-console | ||
159 | console.warn(error); | 160 | console.warn(error); |
160 | } finally { | 161 | } finally { |
161 | loading.value = false; | 162 | loading.value = false; |
@@ -113,7 +113,7 @@ | @@ -113,7 +113,7 @@ | ||
113 | const { TabPane } = Tabs; | 113 | const { TabPane } = Tabs; |
114 | const { prefixCls } = useDesign('easy-cron-inner'); | 114 | const { prefixCls } = useDesign('easy-cron-inner'); |
115 | provide('prefixCls', prefixCls); | 115 | provide('prefixCls', prefixCls); |
116 | - const emit = defineEmits([...cronEmits]); | 116 | + const emit = defineEmits(cronEmits); |
117 | const props = defineProps({ ...cronProps }); | 117 | const props = defineProps({ ...cronProps }); |
118 | const activeKey = ref(props.hideSecond ? 'minute' : 'second'); | 118 | const activeKey = ref(props.hideSecond ? 'minute' : 'second'); |
119 | const second = ref('*'); | 119 | const second = ref('*'); |
@@ -236,7 +236,7 @@ | @@ -236,7 +236,7 @@ | ||
236 | if (/^[0-7]$/.test(week)) { | 236 | if (/^[0-7]$/.test(week)) { |
237 | return convert(week); | 237 | return convert(week); |
238 | } else if (patten1.test(week)) { | 238 | } else if (patten1.test(week)) { |
239 | - return week.replace(patten1, ($0, before, separator, after) => { | 239 | + return week.replace(patten1, (_$0, before, separator, after) => { |
240 | if (separator === '/') { | 240 | if (separator === '/') { |
241 | return convert(before) + separator + after; | 241 | return convert(before) + separator + after; |
242 | } else { | 242 | } else { |
@@ -23,8 +23,8 @@ | @@ -23,8 +23,8 @@ | ||
23 | 23 | ||
24 | export default defineComponent({ | 24 | export default defineComponent({ |
25 | name: 'EasyCronModal', | 25 | name: 'EasyCronModal', |
26 | - inheritAttrs: false, | ||
27 | components: { BasicModal, EasyCron, Button }, | 26 | components: { BasicModal, EasyCron, Button }, |
27 | + inheritAttrs: false, | ||
28 | setup() { | 28 | setup() { |
29 | const attrs = useAttrs(); | 29 | const attrs = useAttrs(); |
30 | const [registerModal, { closeModal }] = useModalInner(); | 30 | const [registerModal, { closeModal }] = useModalInner(); |
@@ -45,7 +45,7 @@ export function useTabSetup(props, context, options) { | @@ -45,7 +45,7 @@ export function useTabSetup(props, context, options) { | ||
45 | 45 | ||
46 | // 根据不同的类型计算出的value | 46 | // 根据不同的类型计算出的value |
47 | const computeValue = computed(() => { | 47 | const computeValue = computed(() => { |
48 | - let valueArray: any[] = []; | 48 | + const valueArray: any[] = []; |
49 | switch (type.value) { | 49 | switch (type.value) { |
50 | case TypeEnum.unset: | 50 | case TypeEnum.unset: |
51 | valueArray.push('?'); | 51 | valueArray.push('?'); |
@@ -79,7 +79,7 @@ export function useTabSetup(props, context, options) { | @@ -79,7 +79,7 @@ export function useTabSetup(props, context, options) { | ||
79 | }); | 79 | }); |
80 | // 指定值范围区间,介于最小值和最大值之间 | 80 | // 指定值范围区间,介于最小值和最大值之间 |
81 | const specifyRange = computed(() => { | 81 | const specifyRange = computed(() => { |
82 | - let range: number[] = []; | 82 | + const range: number[] = []; |
83 | if (maxValue.value != null) { | 83 | if (maxValue.value != null) { |
84 | for (let i = minValue.value; i <= maxValue.value; i++) { | 84 | for (let i = minValue.value; i <= maxValue.value; i++) { |
85 | range.push(i); | 85 | range.push(i); |
@@ -207,7 +207,6 @@ | @@ -207,7 +207,6 @@ | ||
207 | }); | 207 | }); |
208 | 208 | ||
209 | function handleSearch(searchValue: string) { | 209 | function handleSearch(searchValue: string) { |
210 | - console.log('searchValue', searchValue); | ||
211 | if (searchValue !== searchText.value) searchText.value = searchValue; | 210 | if (searchValue !== searchText.value) searchText.value = searchValue; |
212 | emit('update:searchValue', searchValue); | 211 | emit('update:searchValue', searchValue); |
213 | if (!searchValue) { | 212 | if (!searchValue) { |
@@ -16,8 +16,6 @@ | @@ -16,8 +16,6 @@ | ||
16 | import { computed, defineComponent, unref, ref } from 'vue'; | 16 | import { computed, defineComponent, unref, ref } from 'vue'; |
17 | import { Layout } from 'ant-design-vue'; | 17 | import { Layout } from 'ant-design-vue'; |
18 | 18 | ||
19 | - import { GithubFilled } from '@ant-design/icons-vue'; | ||
20 | - | ||
21 | import { DOC_URL, GITHUB_URL, SITE_URL } from '/@/settings/siteSetting'; | 19 | import { DOC_URL, GITHUB_URL, SITE_URL } from '/@/settings/siteSetting'; |
22 | import { openWindow } from '/@/utils'; | 20 | import { openWindow } from '/@/utils'; |
23 | 21 | ||
@@ -29,7 +27,7 @@ | @@ -29,7 +27,7 @@ | ||
29 | 27 | ||
30 | export default defineComponent({ | 28 | export default defineComponent({ |
31 | name: 'LayoutFooter', | 29 | name: 'LayoutFooter', |
32 | - components: { Footer: Layout.Footer, GithubFilled }, | 30 | + components: { Footer: Layout.Footer }, |
33 | setup() { | 31 | setup() { |
34 | const { t } = useI18n(); | 32 | const { t } = useI18n(); |
35 | const { getShowFooter } = useRootSetting(); | 33 | const { getShowFooter } = useRootSetting(); |
@@ -148,7 +148,6 @@ | @@ -148,7 +148,6 @@ | ||
148 | 148 | ||
149 | function renderMenu() { | 149 | function renderMenu() { |
150 | const { menus, ...menuProps } = unref(getCommonProps); | 150 | const { menus, ...menuProps } = unref(getCommonProps); |
151 | - // console.log(menus); | ||
152 | if (!menus || !menus.length) return null; | 151 | if (!menus || !menus.length) return null; |
153 | return !props.isHorizontal ? ( | 152 | return !props.isHorizontal ? ( |
154 | <SimpleMenu {...menuProps} isSplitMenu={unref(getSplit)} items={menus} /> | 153 | <SimpleMenu {...menuProps} isSplitMenu={unref(getSplit)} items={menus} /> |
@@ -100,7 +100,7 @@ export default defineComponent({ | @@ -100,7 +100,7 @@ export default defineComponent({ | ||
100 | <> | 100 | <> |
101 | <TypePicker | 101 | <TypePicker |
102 | menuTypeList={menuTypeList} | 102 | menuTypeList={menuTypeList} |
103 | - handler={(item: typeof menuTypeList[0]) => { | 103 | + handler={(item: (typeof menuTypeList)[0]) => { |
104 | baseHandler(HandlerEnum.CHANGE_LAYOUT, { | 104 | baseHandler(HandlerEnum.CHANGE_LAYOUT, { |
105 | mode: item.mode, | 105 | mode: item.mode, |
106 | type: item.type, | 106 | type: item.type, |
@@ -47,7 +47,7 @@ export function initAppConfigStore() { | @@ -47,7 +47,7 @@ export function initAppConfigStore() { | ||
47 | grayMode && updateGrayMode(grayMode); | 47 | grayMode && updateGrayMode(grayMode); |
48 | colorWeak && updateColorWeak(colorWeak); | 48 | colorWeak && updateColorWeak(colorWeak); |
49 | } catch (error) { | 49 | } catch (error) { |
50 | - console.log(error); | 50 | + console.error(error); |
51 | } | 51 | } |
52 | appStore.setProjectConfig(projCfg); | 52 | appStore.setProjectConfig(projCfg); |
53 | 53 |
@@ -4,7 +4,6 @@ import { defineStore } from 'pinia'; | @@ -4,7 +4,6 @@ import { defineStore } from 'pinia'; | ||
4 | 4 | ||
5 | import { LOCK_INFO_KEY } from '/@/enums/cacheEnum'; | 5 | import { LOCK_INFO_KEY } from '/@/enums/cacheEnum'; |
6 | import { Persistent } from '/@/utils/cache/persistent'; | 6 | import { Persistent } from '/@/utils/cache/persistent'; |
7 | -import { useUserStore } from './user'; | ||
8 | 7 | ||
9 | interface LockState { | 8 | interface LockState { |
10 | lockInfo: Nullable<LockInfo>; | 9 | lockInfo: Nullable<LockInfo>; |
@@ -111,7 +111,6 @@ export const usePermissionStore = defineStore({ | @@ -111,7 +111,6 @@ export const usePermissionStore = defineStore({ | ||
111 | * 否则不是超级管理员-获取对应角色的权限列表 | 111 | * 否则不是超级管理员-获取对应角色的权限列表 |
112 | */ | 112 | */ |
113 | const codeList = await getPermCode(); | 113 | const codeList = await getPermCode(); |
114 | - // console.log('codeList', codeList); | ||
115 | this.setPermCodeList(codeList); | 114 | this.setPermCodeList(codeList); |
116 | /** | 115 | /** |
117 | * 如果是超级管理员则获取对应权限列表 | 116 | * 如果是超级管理员则获取对应权限列表 |
@@ -234,7 +234,6 @@ export const useUserStore = defineStore({ | @@ -234,7 +234,6 @@ export const useUserStore = defineStore({ | ||
234 | // try { | 234 | // try { |
235 | // await doLogout(); | 235 | // await doLogout(); |
236 | // } catch { | 236 | // } catch { |
237 | - // console.log('注销Token失败'); | ||
238 | // } | 237 | // } |
239 | // this.resetState(); | 238 | // this.resetState(); |
240 | // setAuthCache(JWT_TOKEN_KEY, undefined); | 239 | // setAuthCache(JWT_TOKEN_KEY, undefined); |
@@ -85,9 +85,7 @@ | @@ -85,9 +85,7 @@ | ||
85 | /^[1](([3][0-9])|([4][0,1,4-9])|([5][0-3,5-9])|([6][2,5,6,7])|([7][0-8])|([8][0-9])|([9][0-3,5-9]))[0-9]{8}$/; | 85 | /^[1](([3][0-9])|([4][0,1,4-9])|([5][0-3,5-9])|([6][2,5,6,7])|([7][0-8])|([8][0-9])|([9][0-3,5-9]))[0-9]{8}$/; |
86 | if (reg.test(formData.mobile)) { | 86 | if (reg.test(formData.mobile)) { |
87 | const sendRes = await passwordResetCode(formData.mobile); | 87 | const sendRes = await passwordResetCode(formData.mobile); |
88 | - console.log(sendRes); | ||
89 | if (sendRes === '') { | 88 | if (sendRes === '') { |
90 | - console.log('发送成功了'); | ||
91 | return true; | 89 | return true; |
92 | } | 90 | } |
93 | return false; | 91 | return false; |
@@ -27,7 +27,6 @@ | @@ -27,7 +27,6 @@ | ||
27 | onMounted(() => { | 27 | onMounted(() => { |
28 | // 记录当前的UserId | 28 | // 记录当前的UserId |
29 | userId.value = userStore.getUserInfo?.userId; | 29 | userId.value = userStore.getUserInfo?.userId; |
30 | - console.log('Mounted', userStore.getUserInfo); | ||
31 | }); | 30 | }); |
32 | 31 | ||
33 | onBeforeUnmount(() => { | 32 | onBeforeUnmount(() => { |
@@ -11,8 +11,7 @@ | @@ -11,8 +11,7 @@ | ||
11 | */ | 11 | */ |
12 | export function simpleDebounce(fn, delay = 100) { | 12 | export function simpleDebounce(fn, delay = 100) { |
13 | let timer: any | null = null; | 13 | let timer: any | null = null; |
14 | - return function () { | ||
15 | - let args = arguments; | 14 | + return function (...args) { |
16 | if (timer) { | 15 | if (timer) { |
17 | clearTimeout(timer); | 16 | clearTimeout(timer); |
18 | } | 17 | } |
@@ -61,4 +60,3 @@ export function dateFormat(date, block) { | @@ -61,4 +60,3 @@ export function dateFormat(date, block) { | ||
61 | }); | 60 | }); |
62 | return format; | 61 | return format; |
63 | } | 62 | } |
64 | - |
@@ -36,7 +36,6 @@ export function checkStatus( | @@ -36,7 +36,6 @@ export function checkStatus( | ||
36 | } | 36 | } |
37 | break; | 37 | break; |
38 | case 403: | 38 | case 403: |
39 | - // console.log('403', errMessage); | ||
40 | // errMessage = t('sys.api.errMsg403'); | 39 | // errMessage = t('sys.api.errMsg403'); |
41 | errMessage = errMessage; | 40 | errMessage = errMessage; |
42 | break; | 41 | break; |
@@ -8,7 +8,6 @@ export function listToTree(lists: getMenuListResultModel): getMenuListResultMode | @@ -8,7 +8,6 @@ export function listToTree(lists: getMenuListResultModel): getMenuListResultMode | ||
8 | lists.forEach((goods) => { | 8 | lists.forEach((goods) => { |
9 | goods['menuName'] = t(goods.meta.title); // 为goods添加属性menuName | 9 | goods['menuName'] = t(goods.meta.title); // 为goods添加属性menuName |
10 | 10 | ||
11 | - // console.log(goods.children?.length); | ||
12 | if (goods.children?.length) { | 11 | if (goods.children?.length) { |
13 | listToTree(goods.children); | 12 | listToTree(goods.children); |
14 | // goods.children.forEach((goodChildren) => { | 13 | // goods.children.forEach((goodChildren) => { |
@@ -102,8 +102,7 @@ | @@ -102,8 +102,7 @@ | ||
102 | avatar: [{ uid: buildUUID(), name: 'name', url: data.record.avatar } as FileItem], | 102 | avatar: [{ uid: buildUUID(), name: 'name', url: data.record.avatar } as FileItem], |
103 | }); | 103 | }); |
104 | } | 104 | } |
105 | - const { avatar, ...params } = data.record; | ||
106 | - console.log(avatar); | 105 | + const { ...params } = data.record; |
107 | await setFieldsValue({ ...params }); | 106 | await setFieldsValue({ ...params }); |
108 | } else { | 107 | } else { |
109 | editId.value = ''; | 108 | editId.value = ''; |
@@ -75,9 +75,7 @@ export const formSchema: FormSchema[] = [ | @@ -75,9 +75,7 @@ export const formSchema: FormSchema[] = [ | ||
75 | } | 75 | } |
76 | }, | 76 | }, |
77 | // showUploadList: true, | 77 | // showUploadList: true, |
78 | - onDownload(file) { | ||
79 | - console.log(file); | ||
80 | - }, | 78 | + onDownload() {}, |
81 | onPreview: (fileList: FileItem) => { | 79 | onPreview: (fileList: FileItem) => { |
82 | createImgPreview({ imageList: [fileList.url!] }); | 80 | createImgPreview({ imageList: [fileList.url!] }); |
83 | }, | 81 | }, |
@@ -153,7 +153,7 @@ | @@ -153,7 +153,7 @@ | ||
153 | <template #renderItem="{ item }: BasicCardListRenderItem<BigScreenCenterItemsModel>"> | 153 | <template #renderItem="{ item }: BasicCardListRenderItem<BigScreenCenterItemsModel>"> |
154 | <Card | 154 | <Card |
155 | :style="{ | 155 | :style="{ |
156 | - '--viewType': item.viewType === ViewType.PUBLIC_VIEW ? '#1890ff' : '#faad14', | 156 | + '--viewType': item.viewType === ViewType.PUBLIC_VIEW ? '#faad14' : '#1890ff', |
157 | }" | 157 | }" |
158 | class="card-container" | 158 | class="card-container" |
159 | > | 159 | > |
@@ -192,7 +192,6 @@ | @@ -192,7 +192,6 @@ | ||
192 | getRestData.value = resp; | 192 | getRestData.value = resp; |
193 | commonRest(resp, jsonEditorRef.value?.setJsonValue); | 193 | commonRest(resp, jsonEditorRef.value?.setJsonValue); |
194 | } catch (e) { | 194 | } catch (e) { |
195 | - console.log(e); | ||
196 | if (Object.prototype.toString.call(e) === '[object Object]') { | 195 | if (Object.prototype.toString.call(e) === '[object Object]') { |
197 | jsonEditorRef.value?.setJsonValue(e); | 196 | jsonEditorRef.value?.setJsonValue(e); |
198 | } else { | 197 | } else { |
@@ -61,7 +61,7 @@ export const useUtils = () => { | @@ -61,7 +61,7 @@ export const useUtils = () => { | ||
61 | } | 61 | } |
62 | } | 62 | } |
63 | } catch (e) { | 63 | } catch (e) { |
64 | - console.log(`Post没有传递params${e}`); | 64 | + console.error(`Post没有传递params${e}`); |
65 | } | 65 | } |
66 | return _result.join('&'); | 66 | return _result.join('&'); |
67 | }; | 67 | }; |
@@ -48,8 +48,8 @@ | @@ -48,8 +48,8 @@ | ||
48 | } | 48 | } |
49 | }; | 49 | }; |
50 | 50 | ||
51 | - const insertDeviceTypeName = ( | ||
52 | - deviceTypeName: string, | 51 | + const insertProductionName = ( |
52 | + productionName: string, | ||
53 | fileParseValue: UploadFileParseValue, | 53 | fileParseValue: UploadFileParseValue, |
54 | columns: Record<'type', string>[] | 54 | columns: Record<'type', string>[] |
55 | ): { file: string; columns: Record<'type', string>[] } => { | 55 | ): { file: string; columns: Record<'type', string>[] } => { |
@@ -58,11 +58,11 @@ | @@ -58,11 +58,11 @@ | ||
58 | 58 | ||
59 | const csvArray = content.map((item) => header.map((key) => item[key]) as string[]); | 59 | const csvArray = content.map((item) => header.map((key) => item[key]) as string[]); |
60 | for (const item of csvArray) { | 60 | for (const item of csvArray) { |
61 | - item.splice(insertIndex, 0, deviceTypeName); | 61 | + item.splice(insertIndex, 0, productionName); |
62 | } | 62 | } |
63 | 63 | ||
64 | const _header = [...header]; | 64 | const _header = [...header]; |
65 | - _header.splice(insertIndex, 0, deviceTypeName); | 65 | + _header.splice(insertIndex, 0, productionName); |
66 | csvArray.unshift(_header); | 66 | csvArray.unshift(_header); |
67 | const file = csvArray.map((item) => item.join(DelimiterEnum.COMMA)).join('\n'); | 67 | const file = csvArray.map((item) => item.join(DelimiterEnum.COMMA)).join('\n'); |
68 | 68 | ||
@@ -80,14 +80,14 @@ | @@ -80,14 +80,14 @@ | ||
80 | tkDeviceProfileId, | 80 | tkDeviceProfileId, |
81 | organizationId, | 81 | organizationId, |
82 | deviceTypeEnum, | 82 | deviceTypeEnum, |
83 | - deviceTypeName, | 83 | + productionName, |
84 | gateWayTbDeviceId, | 84 | gateWayTbDeviceId, |
85 | tbDeviceProfileId, | 85 | tbDeviceProfileId, |
86 | isTcpDeviceProfile, | 86 | isTcpDeviceProfile, |
87 | } = basicInfo; | 87 | } = basicInfo; |
88 | 88 | ||
89 | - const { file, columns } = insertDeviceTypeName( | ||
90 | - deviceTypeName, | 89 | + const { file, columns } = insertProductionName( |
90 | + productionName, | ||
91 | fileParseValue, | 91 | fileParseValue, |
92 | columnConfiguration | 92 | columnConfiguration |
93 | ); | 93 | ); |
@@ -22,6 +22,7 @@ export enum FieldsEnum { | @@ -22,6 +22,7 @@ export enum FieldsEnum { | ||
22 | TB_DEVICE_PROFILE_ID = 'tbDeviceProfileId', | 22 | TB_DEVICE_PROFILE_ID = 'tbDeviceProfileId', |
23 | IS_TCP_DEVICE_PROFILE = 'isTcpDeviceProfile', | 23 | IS_TCP_DEVICE_PROFILE = 'isTcpDeviceProfile', |
24 | TRANSPORT_TYPE = 'transportType', | 24 | TRANSPORT_TYPE = 'transportType', |
25 | + PRODUCTION_NAME = 'productionName', | ||
25 | } | 26 | } |
26 | 27 | ||
27 | export enum DelimiterEnum { | 28 | export enum DelimiterEnum { |
@@ -171,7 +172,7 @@ export const basicInfoForm: FormSchema[] = [ | @@ -171,7 +172,7 @@ export const basicInfoForm: FormSchema[] = [ | ||
171 | placeholder: '请选择产品', | 172 | placeholder: '请选择产品', |
172 | params: { deviceType }, | 173 | params: { deviceType }, |
173 | getPopupContainer: () => document.body, | 174 | getPopupContainer: () => document.body, |
174 | - onChange(value: string, options: DeviceRecord) { | 175 | + onChange(value: string, options: DeviceRecord & Record<'label', string>) { |
175 | setFieldsValue({ | 176 | setFieldsValue({ |
176 | [FieldsEnum.IS_TCP_DEVICE_PROFILE]: value | 177 | [FieldsEnum.IS_TCP_DEVICE_PROFILE]: value |
177 | ? options.transportType === TransportTypeEnum.TCP | 178 | ? options.transportType === TransportTypeEnum.TCP |
@@ -179,6 +180,7 @@ export const basicInfoForm: FormSchema[] = [ | @@ -179,6 +180,7 @@ export const basicInfoForm: FormSchema[] = [ | ||
179 | [FieldsEnum.TB_DEVICE_PROFILE_ID]: value ? options.tbProfileId : null, | 180 | [FieldsEnum.TB_DEVICE_PROFILE_ID]: value ? options.tbProfileId : null, |
180 | [FieldsEnum.GATEWAY_TB_DEVICE_ID]: null, | 181 | [FieldsEnum.GATEWAY_TB_DEVICE_ID]: null, |
181 | [FieldsEnum.TRANSPORT_TYPE]: options?.transportType, | 182 | [FieldsEnum.TRANSPORT_TYPE]: options?.transportType, |
183 | + [FieldsEnum.PRODUCTION_NAME]: options?.label, | ||
182 | }); | 184 | }); |
183 | }, | 185 | }, |
184 | showSearch: true, | 186 | showSearch: true, |
@@ -195,6 +197,12 @@ export const basicInfoForm: FormSchema[] = [ | @@ -195,6 +197,12 @@ export const basicInfoForm: FormSchema[] = [ | ||
195 | show: false, | 197 | show: false, |
196 | }, | 198 | }, |
197 | { | 199 | { |
200 | + field: FieldsEnum.PRODUCTION_NAME, | ||
201 | + label: '', | ||
202 | + component: 'Input', | ||
203 | + show: false, | ||
204 | + }, | ||
205 | + { | ||
198 | field: FieldsEnum.GATEWAY_TB_DEVICE_ID, | 206 | field: FieldsEnum.GATEWAY_TB_DEVICE_ID, |
199 | component: 'ApiSelect', | 207 | component: 'ApiSelect', |
200 | label: '网关设备', | 208 | label: '网关设备', |
@@ -26,6 +26,7 @@ export type BasicInfoRecord = Record< | @@ -26,6 +26,7 @@ export type BasicInfoRecord = Record< | ||
26 | | 'deviceTypeName' | 26 | | 'deviceTypeName' |
27 | | 'gateWayTbDeviceId' | 27 | | 'gateWayTbDeviceId' |
28 | | 'gateWayTkDeviceId' | 28 | | 'gateWayTkDeviceId' |
29 | + | 'productionName' | ||
29 | | 'tbDeviceProfileId', | 30 | | 'tbDeviceProfileId', |
30 | string | 31 | string |
31 | > & | 32 | > & |
@@ -100,11 +100,9 @@ | @@ -100,11 +100,9 @@ | ||
100 | const { send, close } = useWebSocket(state.server, { | 100 | const { send, close } = useWebSocket(state.server, { |
101 | onConnected() { | 101 | onConnected() { |
102 | send(state.sendValue); | 102 | send(state.sendValue); |
103 | - console.log('建立连接了'); | ||
104 | }, | 103 | }, |
105 | onMessage(_, e) { | 104 | onMessage(_, e) { |
106 | const { data } = JSON.parse(e.data); | 105 | const { data } = JSON.parse(e.data); |
107 | - console.log('来新消息了', '---data---', data); | ||
108 | const newArray: socketDataType[] = []; | 106 | const newArray: socketDataType[] = []; |
109 | for (const key in data) { | 107 | for (const key in data) { |
110 | const [time, value] = data[key].flat(1); | 108 | const [time, value] = data[key].flat(1); |
@@ -134,7 +132,6 @@ | @@ -134,7 +132,6 @@ | ||
134 | }); | 132 | }); |
135 | }, | 133 | }, |
136 | onDisconnected() { | 134 | onDisconnected() { |
137 | - console.log('断开连接了'); | ||
138 | close(); | 135 | close(); |
139 | }, | 136 | }, |
140 | onError() { | 137 | onError() { |
@@ -32,13 +32,12 @@ | @@ -32,13 +32,12 @@ | ||
32 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 32 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
33 | import { Switch } from 'ant-design-vue'; | 33 | import { Switch } from 'ant-design-vue'; |
34 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; | 34 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; |
35 | - import { watch } from 'vue'; | ||
36 | import VideoModal from './videoModal.vue'; | 35 | import VideoModal from './videoModal.vue'; |
37 | import { useModal } from '/@/components/Modal'; | 36 | import { useModal } from '/@/components/Modal'; |
38 | import { onMounted } from 'vue'; | 37 | import { onMounted } from 'vue'; |
39 | import { useMessage } from '/@/hooks/web/useMessage'; | 38 | import { useMessage } from '/@/hooks/web/useMessage'; |
40 | 39 | ||
41 | - const props = defineProps({ | 40 | + defineProps({ |
42 | fromId: { | 41 | fromId: { |
43 | type: String, | 42 | type: String, |
44 | default: '', | 43 | default: '', |
@@ -49,13 +48,6 @@ | @@ -49,13 +48,6 @@ | ||
49 | }, | 48 | }, |
50 | }); | 49 | }); |
51 | 50 | ||
52 | - watch( | ||
53 | - () => props, | ||
54 | - () => { | ||
55 | - console.log(props, 'props'); | ||
56 | - } | ||
57 | - ); | ||
58 | - | ||
59 | const [registerModal, { openModal }] = useModal(); | 51 | const [registerModal, { openModal }] = useModal(); |
60 | 52 | ||
61 | const [registerTable, { setTableData, setProps, setSelectedRowKeys, reload }] = useTable({ | 53 | const [registerTable, { setTableData, setProps, setSelectedRowKeys, reload }] = useTable({ |
@@ -68,14 +60,10 @@ | @@ -68,14 +60,10 @@ | ||
68 | labelWidth: 120, | 60 | labelWidth: 120, |
69 | schemas: searchFormSchema, | 61 | schemas: searchFormSchema, |
70 | }, | 62 | }, |
71 | - beforeFetch: (params) => { | ||
72 | - console.log(params); | ||
73 | - }, | ||
74 | useSearchForm: true, | 63 | useSearchForm: true, |
75 | }); | 64 | }); |
76 | 65 | ||
77 | - const handleTurnVideo = async (checked: Boolean, record: Recordable) => { | ||
78 | - console.log(checked, record, 'record'); | 66 | + const handleTurnVideo = async (checked: Boolean, _record: Recordable) => { |
79 | setProps({ | 67 | setProps({ |
80 | loading: true, | 68 | loading: true, |
81 | }); | 69 | }); |
@@ -281,7 +269,6 @@ | @@ -281,7 +269,6 @@ | ||
281 | }); | 269 | }); |
282 | 270 | ||
283 | const handlePlay = (record: Recordable) => { | 271 | const handlePlay = (record: Recordable) => { |
284 | - console.log(record); | ||
285 | openModal(true, { | 272 | openModal(true, { |
286 | record, | 273 | record, |
287 | }); | 274 | }); |
@@ -346,7 +346,6 @@ export const schemas: FormSchema[] = [ | @@ -346,7 +346,6 @@ export const schemas: FormSchema[] = [ | ||
346 | return { | 346 | return { |
347 | onChange(value) { | 347 | onChange(value) { |
348 | const { updateSchema } = formActionType; | 348 | const { updateSchema } = formActionType; |
349 | - console.log(value); | ||
350 | formModel.interval = ''; | 349 | formModel.interval = ''; |
351 | updateSchema({ | 350 | updateSchema({ |
352 | field: 'interval', | 351 | field: 'interval', |
@@ -235,7 +235,6 @@ | @@ -235,7 +235,6 @@ | ||
235 | 235 | ||
236 | function loadDataSuccess(excelDataList: ExcelData[]) { | 236 | function loadDataSuccess(excelDataList: ExcelData[]) { |
237 | tableListRef.value = []; | 237 | tableListRef.value = []; |
238 | - console.log(excelDataList); | ||
239 | for (const excelData of excelDataList) { | 238 | for (const excelData of excelDataList) { |
240 | const { | 239 | const { |
241 | header, | 240 | header, |
@@ -294,9 +293,7 @@ | @@ -294,9 +293,7 @@ | ||
294 | }); | 293 | }); |
295 | }; | 294 | }; |
296 | //导入 | 295 | //导入 |
297 | - function handleImport() { | ||
298 | - console.log('record'); | ||
299 | - } | 296 | + function handleImport() {} |
300 | function handleSuccess() { | 297 | function handleSuccess() { |
301 | reload(); | 298 | reload(); |
302 | } | 299 | } |
@@ -204,8 +204,7 @@ | @@ -204,8 +204,7 @@ | ||
204 | }); | 204 | }); |
205 | flag && createMessage.info(flag?.message); | 205 | flag && createMessage.info(flag?.message); |
206 | } catch (msg) { | 206 | } catch (msg) { |
207 | - // eslint-disable-next-line no-console | ||
208 | - console.log(msg, 'msg'); | 207 | + console.error(msg, 'msg'); |
209 | } finally { | 208 | } finally { |
210 | closeLoading(); | 209 | closeLoading(); |
211 | closeModal(); | 210 | closeModal(); |
@@ -96,7 +96,6 @@ | @@ -96,7 +96,6 @@ | ||
96 | render: (_, data: Bootstrap) => (data.notifIfDisabled ? '启用' : '禁用'), | 96 | render: (_, data: Bootstrap) => (data.notifIfDisabled ? '启用' : '禁用'), |
97 | }, | 97 | }, |
98 | ]; | 98 | ]; |
99 | - console.log(unref(getOtherSetting)); | ||
100 | const [registerOtherSettings] = useDescription({ | 99 | const [registerOtherSettings] = useDescription({ |
101 | layout: 'vertical', | 100 | layout: 'vertical', |
102 | column: 2, | 101 | column: 2, |
@@ -68,21 +68,18 @@ | @@ -68,21 +68,18 @@ | ||
68 | <Button v-if="isShowBtn" class="!bg-gray-200" type="text" @click="handleReturn"> | 68 | <Button v-if="isShowBtn" class="!bg-gray-200" type="text" @click="handleReturn"> |
69 | 返回 | 69 | 返回 |
70 | </Button> | 70 | </Button> |
71 | - <Authority :value="[ModelOfMatterPermission.DELETE, ModelCategoryPermission.DELETE]"> | 71 | + <Authority |
72 | + v-if="isShowBtn" | ||
73 | + :value="[ModelOfMatterPermission.DELETE, ModelCategoryPermission.DELETE]" | ||
74 | + > | ||
72 | <Popconfirm | 75 | <Popconfirm |
73 | title="您确定要批量删除数据" | 76 | title="您确定要批量删除数据" |
74 | ok-text="确定" | 77 | ok-text="确定" |
75 | cancel-text="取消" | 78 | cancel-text="取消" |
76 | - @confirm="handleDeleteOrBatchDelete(null)" | 79 | + @confirm="handleDeleteOrBatchDelete()" |
80 | + :disabled="getHasBatchDelete" | ||
77 | > | 81 | > |
78 | - <Button | ||
79 | - style="display: none" | ||
80 | - type="primary" | ||
81 | - color="error" | ||
82 | - :disabled="hasBatchDelete" | ||
83 | - > | ||
84 | - 批量删除 | ||
85 | - </Button> | 82 | + <Button type="primary" danger :disabled="getHasBatchDelete"> 批量删除 </Button> |
86 | </Popconfirm> | 83 | </Popconfirm> |
87 | </Authority> | 84 | </Authority> |
88 | </div> | 85 | </div> |
@@ -120,11 +117,7 @@ | @@ -120,11 +117,7 @@ | ||
120 | /> | 117 | /> |
121 | </template> | 118 | </template> |
122 | </BasicTable> | 119 | </BasicTable> |
123 | - <PhysicalModelModal | ||
124 | - :record="$props.record" | ||
125 | - @register="registerModal" | ||
126 | - @success="handleSuccess" | ||
127 | - /> | 120 | + <PhysicalModelModal :record="$props.record" @register="registerModal" @success="reload" /> |
128 | <PhysicalModelTsl :record="$props.record" @register="registerModalTsl" /> | 121 | <PhysicalModelTsl :record="$props.record" @register="registerModalTsl" /> |
129 | <SelectImport | 122 | <SelectImport |
130 | :record="$props.record" | 123 | :record="$props.record" |
@@ -142,7 +135,6 @@ | @@ -142,7 +135,6 @@ | ||
142 | ModelCategoryPermission, | 135 | ModelCategoryPermission, |
143 | physicalColumn, | 136 | physicalColumn, |
144 | } from '../device.profile.data'; | 137 | } from '../device.profile.data'; |
145 | - import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | ||
146 | import { Authority } from '/@/components/Authority'; | 138 | import { Authority } from '/@/components/Authority'; |
147 | import PhysicalModelModal from './cpns/physical/PhysicalModelModal.vue'; | 139 | import PhysicalModelModal from './cpns/physical/PhysicalModelModal.vue'; |
148 | import PhysicalModelTsl from './cpns/physical/PhysicalModelTsl.vue'; | 140 | import PhysicalModelTsl from './cpns/physical/PhysicalModelTsl.vue'; |
@@ -156,8 +148,11 @@ | @@ -156,8 +148,11 @@ | ||
156 | releaseModel, | 148 | releaseModel, |
157 | } from '/@/api/device/modelOfMatter'; | 149 | } from '/@/api/device/modelOfMatter'; |
158 | import { OpenModelOfMatterModelParams, OpenModelMode } from './cpns/physical/types'; | 150 | import { OpenModelOfMatterModelParams, OpenModelMode } from './cpns/physical/types'; |
159 | - import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel'; | ||
160 | - import { ref, unref } from 'vue'; | 151 | + import { |
152 | + ModelOfMatterItemRecordType, | ||
153 | + ModelOfMatterParams, | ||
154 | + } from '/@/api/device/model/modelOfMatterModel'; | ||
155 | + import { computed, ref, unref } from 'vue'; | ||
161 | import { isObject } from '/@/utils/is'; | 156 | import { isObject } from '/@/utils/is'; |
162 | import { useRole } from '/@/hooks/business/useRole'; | 157 | import { useRole } from '/@/hooks/business/useRole'; |
163 | import { ExportModelCategory } from '/@/api/device/modelOfMatter'; | 158 | import { ExportModelCategory } from '/@/api/device/modelOfMatter'; |
@@ -177,50 +172,45 @@ | @@ -177,50 +172,45 @@ | ||
177 | const [registerModalTsl, { openModal: openModalTsl }] = useModal(); | 172 | const [registerModalTsl, { openModal: openModalTsl }] = useModal(); |
178 | const [registerModalSelect, { openModal: openModalSelect }] = useModal(); | 173 | const [registerModalSelect, { openModal: openModalSelect }] = useModal(); |
179 | 174 | ||
180 | - const [registerTable, { reload, setProps }] = useTable({ | ||
181 | - api: async (params: Record<'page' | 'pageSize', number>) => { | ||
182 | - return await getModelList({ | ||
183 | - ...params, | ||
184 | - id: props.record.id, | ||
185 | - selectType: props.record.ifShowClass ? 'category' : undefined, | ||
186 | - }); | ||
187 | - }, | ||
188 | - columns: props.record.ifShowClass | ||
189 | - ? physicalColumn.filter((item) => item.dataIndex !== 'status') | ||
190 | - : physicalColumn, | ||
191 | - showIndexColumn: false, | ||
192 | - clickToRowSelect: false, | ||
193 | - showTableSetting: true, | ||
194 | - bordered: true, | ||
195 | - useSearchForm: true, | ||
196 | - formConfig: { | ||
197 | - schemas: modelOfMatterForm, | ||
198 | - labelWidth: 120, | ||
199 | - }, | ||
200 | - actionColumn: { | ||
201 | - width: 200, | ||
202 | - title: '操作', | ||
203 | - dataIndex: 'action', | ||
204 | - slots: { customRender: 'action' }, | ||
205 | - fixed: 'right', | ||
206 | - }, | ||
207 | - }); | ||
208 | - | ||
209 | - // 刷新 | ||
210 | - const handleSuccess = () => { | ||
211 | - reload(); | ||
212 | - }; | ||
213 | - const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete( | ||
214 | - props.record.ifShowClass && (unref(isPlatformAdmin) || unref(isSysadmin)) | ||
215 | - ? deleteModelCategory | ||
216 | - : deleteModel, | ||
217 | - handleSuccess, | ||
218 | - setProps | ||
219 | - ); | 175 | + const [registerTable, { reload, getSelectRowKeys, getRowSelection, clearSelectedRowKeys }] = |
176 | + useTable({ | ||
177 | + api: async (params: Record<'page' | 'pageSize', number>) => { | ||
178 | + return await getModelList({ | ||
179 | + ...params, | ||
180 | + id: props.record.id, | ||
181 | + selectType: props.record.ifShowClass ? 'category' : undefined, | ||
182 | + }); | ||
183 | + }, | ||
184 | + columns: props.record.ifShowClass | ||
185 | + ? physicalColumn.filter((item) => item.dataIndex !== 'status') | ||
186 | + : physicalColumn, | ||
187 | + showIndexColumn: false, | ||
188 | + clickToRowSelect: false, | ||
189 | + showTableSetting: true, | ||
190 | + bordered: true, | ||
191 | + useSearchForm: true, | ||
192 | + rowKey: 'id', | ||
193 | + formConfig: { | ||
194 | + schemas: modelOfMatterForm, | ||
195 | + labelWidth: 120, | ||
196 | + }, | ||
197 | + actionColumn: { | ||
198 | + width: 200, | ||
199 | + title: '操作', | ||
200 | + dataIndex: 'action', | ||
201 | + slots: { customRender: 'action' }, | ||
202 | + fixed: 'right', | ||
203 | + }, | ||
204 | + rowSelection: { | ||
205 | + getCheckboxProps: (record: ModelOfMatterItemRecordType) => { | ||
206 | + return { | ||
207 | + disabled: record.status === 1, | ||
208 | + }; | ||
209 | + }, | ||
210 | + }, | ||
211 | + }); | ||
220 | 212 | ||
221 | - selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => { | ||
222 | - return { disabled: record.status === 1 }; | ||
223 | - }; | 213 | + const getHasBatchDelete = computed(() => !getRowSelection().selectedRowKeys?.length); |
224 | 214 | ||
225 | const handleViewDetail = (record: ModelOfMatterParams) => { | 215 | const handleViewDetail = (record: ModelOfMatterParams) => { |
226 | if (record) { | 216 | if (record) { |
@@ -245,6 +235,19 @@ | @@ -245,6 +235,19 @@ | ||
245 | } | 235 | } |
246 | }; | 236 | }; |
247 | 237 | ||
238 | + const handleDeleteOrBatchDelete = async (record?: ModelOfMatterItemRecordType) => { | ||
239 | + const deleteFn = | ||
240 | + props.record.ifShowClass && (unref(isPlatformAdmin) || unref(isSysadmin)) | ||
241 | + ? deleteModelCategory | ||
242 | + : deleteModel; | ||
243 | + | ||
244 | + const ids = record ? [record.id] : getSelectRowKeys(); | ||
245 | + await deleteFn(ids); | ||
246 | + createMessage.success('删除成功'); | ||
247 | + clearSelectedRowKeys(); | ||
248 | + reload(); | ||
249 | + }; | ||
250 | + | ||
248 | const handleOpenTsl = () => { | 251 | const handleOpenTsl = () => { |
249 | openModalTsl(true, { | 252 | openModalTsl(true, { |
250 | isUpdate: true, | 253 | isUpdate: true, |
@@ -30,9 +30,7 @@ | @@ -30,9 +30,7 @@ | ||
30 | import { SelectTypes } from 'ant-design-vue/es/select'; | 30 | import { SelectTypes } from 'ant-design-vue/es/select'; |
31 | 31 | ||
32 | const emit = defineEmits(['register', 'emitSelect']); | 32 | const emit = defineEmits(['register', 'emitSelect']); |
33 | - const [register] = useModalInner((data) => { | ||
34 | - console.log(data); | ||
35 | - }); | 33 | + const [register] = useModalInner(() => {}); |
36 | const heightNum = ref(80); | 34 | const heightNum = ref(80); |
37 | const visible = ref(false); | 35 | const visible = ref(false); |
38 | const selectValue = ref('LwM2M'); | 36 | const selectValue = ref('LwM2M'); |
@@ -130,14 +130,13 @@ | @@ -130,14 +130,13 @@ | ||
130 | telemetry: [], | 130 | telemetry: [], |
131 | }); | 131 | }); |
132 | 132 | ||
133 | - const [registerModel, { resetFields: resetObjectListValue, getFieldsValue: getObjectListValue }] = | ||
134 | - useForm({ | ||
135 | - labelWidth: 100, | ||
136 | - schemas: modelSchemas, | ||
137 | - actionColOptions: { | ||
138 | - span: 14, | ||
139 | - }, | ||
140 | - }); | 133 | + const [registerModel, { resetFields: resetObjectListValue }] = useForm({ |
134 | + labelWidth: 100, | ||
135 | + schemas: modelSchemas, | ||
136 | + actionColOptions: { | ||
137 | + span: 14, | ||
138 | + }, | ||
139 | + }); | ||
141 | const [ | 140 | const [ |
142 | registerSettings, | 141 | registerSettings, |
143 | { | 142 | { |
@@ -152,14 +151,13 @@ | @@ -152,14 +151,13 @@ | ||
152 | span: 14, | 151 | span: 14, |
153 | }, | 152 | }, |
154 | }); | 153 | }); |
155 | - const [registerDevice, { resetFields: resetDeviceValue, getFieldsValue: getDeviceValue }] = | ||
156 | - useForm({ | ||
157 | - labelWidth: 100, | ||
158 | - schemas: deviceSchemas, | ||
159 | - actionColOptions: { | ||
160 | - span: 14, | ||
161 | - }, | ||
162 | - }); | 154 | + const [registerDevice, { resetFields: resetDeviceValue }] = useForm({ |
155 | + labelWidth: 100, | ||
156 | + schemas: deviceSchemas, | ||
157 | + actionColOptions: { | ||
158 | + span: 14, | ||
159 | + }, | ||
160 | + }); | ||
163 | const [registerModal, { openModal }] = useModal(); | 161 | const [registerModal, { openModal }] = useModal(); |
164 | 162 | ||
165 | const handleAdd = () => { | 163 | const handleAdd = () => { |
@@ -205,10 +203,6 @@ | @@ -205,10 +203,6 @@ | ||
205 | }; | 203 | }; |
206 | 204 | ||
207 | const getFormData = async () => { | 205 | const getFormData = async () => { |
208 | - const objectListVal = getObjectListValue(); | ||
209 | - const deviceVal = getDeviceValue(); | ||
210 | - console.log('第一个tab', objectListVal); | ||
211 | - console.log('第四个tab', deviceVal); | ||
212 | getBootStrapFormValue(); | 206 | getBootStrapFormValue(); |
213 | const settingsVal = await settingsValidate(); | 207 | const settingsVal = await settingsValidate(); |
214 | if (!settingsVal) return; | 208 | if (!settingsVal) return; |
@@ -69,7 +69,7 @@ | @@ -69,7 +69,7 @@ | ||
69 | if (unref(copied)) createMessage.success('复制成功!'); | 69 | if (unref(copied)) createMessage.success('复制成功!'); |
70 | else createMessage.error('复制失败!'); | 70 | else createMessage.error('复制失败!'); |
71 | } catch (e) { | 71 | } catch (e) { |
72 | - console.log(e); | 72 | + console.error(e); |
73 | } | 73 | } |
74 | }; | 74 | }; |
75 | 75 |
@@ -172,8 +172,7 @@ export const formSchema: FormSchema[] = [ | @@ -172,8 +172,7 @@ export const formSchema: FormSchema[] = [ | ||
172 | const record = await findMessageConfig(params); | 172 | const record = await findMessageConfig(params); |
173 | return record.filter((item) => item.status === 1); | 173 | return record.filter((item) => item.status === 1); |
174 | } catch (error) { | 174 | } catch (error) { |
175 | - // eslint-disable-next-line no-console | ||
176 | - console.log(error); | 175 | + console.error(error); |
177 | return []; | 176 | return []; |
178 | } | 177 | } |
179 | }, | 178 | }, |
@@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
41 | checksumAlgorithm: value.checksumAlgorithm, | 41 | checksumAlgorithm: value.checksumAlgorithm, |
42 | }); | 42 | }); |
43 | } catch (error) { | 43 | } catch (error) { |
44 | - console.log(error); | 44 | + console.error(error); |
45 | if ((error as { status: number }).status) { | 45 | if ((error as { status: number }).status) { |
46 | await deleteOtaPackage(id); | 46 | await deleteOtaPackage(id); |
47 | } | 47 | } |
@@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
6 | border-color: #6b7280; | 6 | border-color: #6b7280; |
7 | } | 7 | } |
8 | 8 | ||
9 | -.vue-flow__handle:hover{ | 9 | +.vue-flow__handle:hover { |
10 | background-color: #000; | 10 | background-color: #000; |
11 | } | 11 | } |
12 | 12 | ||
@@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
15 | } | 15 | } |
16 | 16 | ||
17 | .vue-flow__handle-left { | 17 | .vue-flow__handle-left { |
18 | - left: -12px; | 18 | + left: -12px; |
19 | } | 19 | } |
20 | 20 | ||
21 | .vue-flow__background.vue-flow__container { | 21 | .vue-flow__background.vue-flow__container { |
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | stroke-width: 4; | 32 | stroke-width: 4; |
33 | stroke: gray; | 33 | stroke: gray; |
34 | transition: stroke-width 0.3s; | 34 | transition: stroke-width 0.3s; |
35 | -} | 35 | +} |
36 | 36 | ||
37 | .connection-focus { | 37 | .connection-focus { |
38 | stroke-width: 6; | 38 | stroke-width: 6; |
@@ -44,7 +44,7 @@ | @@ -44,7 +44,7 @@ | ||
44 | } | 44 | } |
45 | 45 | ||
46 | /* 连接线移入放大效果 */ | 46 | /* 连接线移入放大效果 */ |
47 | -.vue-flow__edge:hover > .vue-flow__edge-path { | 47 | +.vue-flow__edge:hover > .vue-flow__edge-path { |
48 | stroke-width: 6 !important; | 48 | stroke-width: 6 !important; |
49 | } | 49 | } |
50 | 50 | ||
@@ -54,18 +54,19 @@ | @@ -54,18 +54,19 @@ | ||
54 | } | 54 | } |
55 | 55 | ||
56 | .vue-flow__edge:hover .vue-flow__edge-textbg { | 56 | .vue-flow__edge:hover .vue-flow__edge-textbg { |
57 | - transform: scale(1.1) | 57 | + transform: scale(1.1); |
58 | } | 58 | } |
59 | 59 | ||
60 | -.vue-flow__edge:hover .vue-flow__edge-text{ | ||
61 | - transform: scale(1.1) | 60 | +.vue-flow__edge:hover .vue-flow__edge-text { |
61 | + transform: scale(1.1); | ||
62 | } | 62 | } |
63 | 63 | ||
64 | /* selection 选择框 */ | 64 | /* selection 选择框 */ |
65 | -.vue-flow__nodesselection-rect, .vue-flow__selection{ | 65 | +.vue-flow__nodesselection-rect, |
66 | +.vue-flow__selection { | ||
66 | border-width: 3px; | 67 | border-width: 3px; |
67 | } | 68 | } |
68 | 69 | ||
69 | -.vue-flow__nodesselection-rect { | 70 | +.vue-flow__nodesselection-rect { |
70 | pointer-events: none; | 71 | pointer-events: none; |
71 | } | 72 | } |
@@ -64,7 +64,10 @@ | @@ -64,7 +64,10 @@ | ||
64 | } | 64 | } |
65 | 65 | ||
66 | function handleOnOrganizationOptionsChange(options: OrganizationListItem[]) { | 66 | function handleOnOrganizationOptionsChange(options: OrganizationListItem[]) { |
67 | - if (unref(drawerMode) === DataActionModeEnum.CREATE) { | 67 | + if ( |
68 | + unref(drawerMode) === DataActionModeEnum.CREATE && | ||
69 | + !basicFormActionType.getFieldsValue()?.[FormFieldsEnum.ORGANIZATION_ID] | ||
70 | + ) { | ||
68 | const [firsetItem] = options; | 71 | const [firsetItem] = options; |
69 | organizationId.value = firsetItem?.id; | 72 | organizationId.value = firsetItem?.id; |
70 | basicFormActionType.setFieldsValue({ [FormFieldsEnum.ORGANIZATION_ID]: firsetItem?.id }); | 73 | basicFormActionType.setFieldsValue({ [FormFieldsEnum.ORGANIZATION_ID]: firsetItem?.id }); |
@@ -236,7 +236,7 @@ | @@ -236,7 +236,7 @@ | ||
236 | // 设置输出值 | 236 | // 设置输出值 |
237 | outputEditor.value.set(result); | 237 | outputEditor.value.set(result); |
238 | } catch (e) { | 238 | } catch (e) { |
239 | - console.log(e); | 239 | + console.error(e); |
240 | const { createMessage } = useMessage(); | 240 | const { createMessage } = useMessage(); |
241 | createMessage.error(e.toString()); | 241 | createMessage.error(e.toString()); |
242 | } | 242 | } |
@@ -85,9 +85,7 @@ | @@ -85,9 +85,7 @@ | ||
85 | /^[1](([3][0-9])|([4][0,1,4-9])|([5][0-3,5-9])|([6][2,5,6,7])|([7][0-8])|([8][0-9])|([9][0-3,5-9]))[0-9]{8}$/; | 85 | /^[1](([3][0-9])|([4][0,1,4-9])|([5][0-3,5-9])|([6][2,5,6,7])|([7][0-8])|([8][0-9])|([9][0-3,5-9]))[0-9]{8}$/; |
86 | if (reg.test(formData.mobile)) { | 86 | if (reg.test(formData.mobile)) { |
87 | const sendRes = await passwordResetCode(formData.mobile); | 87 | const sendRes = await passwordResetCode(formData.mobile); |
88 | - console.log(sendRes); | ||
89 | if (sendRes === '') { | 88 | if (sendRes === '') { |
90 | - console.log('发送成功了'); | ||
91 | return true; | 89 | return true; |
92 | } | 90 | } |
93 | return false; | 91 | return false; |
@@ -27,7 +27,6 @@ | @@ -27,7 +27,6 @@ | ||
27 | onMounted(() => { | 27 | onMounted(() => { |
28 | // 记录当前的UserId | 28 | // 记录当前的UserId |
29 | userId.value = userStore.getUserInfo?.userId; | 29 | userId.value = userStore.getUserInfo?.userId; |
30 | - console.log('Mounted', userStore.getUserInfo); | ||
31 | }); | 30 | }); |
32 | 31 | ||
33 | onBeforeUnmount(() => { | 32 | onBeforeUnmount(() => { |
@@ -14,7 +14,6 @@ | @@ -14,7 +14,6 @@ | ||
14 | Reflect.deleteProperty(params, 'path'); | 14 | Reflect.deleteProperty(params, 'path'); |
15 | 15 | ||
16 | const _path = Array.isArray(path) ? path.join('/') : path; | 16 | const _path = Array.isArray(path) ? path.join('/') : path; |
17 | - console.log(unref(currentRoute)); | ||
18 | if (_redirect_type === 'name') { | 17 | if (_redirect_type === 'name') { |
19 | replace({ | 18 | replace({ |
20 | name: _path, | 19 | name: _path, |
@@ -138,7 +138,6 @@ | @@ -138,7 +138,6 @@ | ||
138 | } | 138 | } |
139 | if (newFieldValue.codeTown == undefined) { | 139 | if (newFieldValue.codeTown == undefined) { |
140 | validateArray.push('prov'); | 140 | validateArray.push('prov'); |
141 | - console.log(validateArray); | ||
142 | } else { | 141 | } else { |
143 | const findExistIndex1 = validateArray.findIndex((o) => o == 'prov'); | 142 | const findExistIndex1 = validateArray.findIndex((o) => o == 'prov'); |
144 | if (findExistIndex1 !== -1) { | 143 | if (findExistIndex1 !== -1) { |
@@ -5,7 +5,8 @@ | @@ -5,7 +5,8 @@ | ||
5 | <Tabs.TabPane | 5 | <Tabs.TabPane |
6 | v-if=" | 6 | v-if=" |
7 | isWhereAdmin == 'TENANT_ADMIN' || | 7 | isWhereAdmin == 'TENANT_ADMIN' || |
8 | - (isWhereAdmin == 'SYS_ADMIN' || isWhereAdmin == 'CUSTOMER_USER') | 8 | + isWhereAdmin == 'SYS_ADMIN' || |
9 | + isWhereAdmin == 'CUSTOMER_USER' | ||
9 | " | 10 | " |
10 | key="企业信息" | 11 | key="企业信息" |
11 | tab="企业信息" | 12 | tab="企业信息" |
@@ -264,7 +264,6 @@ | @@ -264,7 +264,6 @@ | ||
264 | setProps({ | 264 | setProps({ |
265 | loading: true, | 265 | loading: true, |
266 | }); | 266 | }); |
267 | - console.log(sendTime.value); | ||
268 | let startTime = null; | 267 | let startTime = null; |
269 | let endTime = null; | 268 | let endTime = null; |
270 | if (sendTime.value.length > 0) { | 269 | if (sendTime.value.length > 0) { |
@@ -10,7 +10,8 @@ | @@ -10,7 +10,8 @@ | ||
10 | 10 | ||
11 | const alert = { | 11 | const alert = { |
12 | [PackagesCategoryEnum.MAP]: [ | 12 | [PackagesCategoryEnum.MAP]: [ |
13 | - '地图组件,需绑定两个数据源,且数据源为同一设备。第一数据源为经度,第二数据源为纬度,否则地图组件不能正常显示。', | 13 | + '1、绑定数据源为结构体时,可以自行选择结构体里的属性作为经纬度', |
14 | + '2、绑定数据源为非结构体时,第一数据源为经度,第二数据源为纬度,且数据源为同一设备,并同时上报。否则地图组件不能正常显示。', | ||
14 | ], | 15 | ], |
15 | }; | 16 | }; |
16 | 17 |
@@ -34,14 +34,6 @@ | @@ -34,14 +34,6 @@ | ||
34 | const { unit, fontColor, showDeviceName } = item.componentInfo || {}; | 34 | const { unit, fontColor, showDeviceName } = item.componentInfo || {}; |
35 | const { deviceName, deviceRename, attribute, attributeRename, deviceId, attributeName } = | 35 | const { deviceName, deviceRename, attribute, attributeRename, deviceId, attributeName } = |
36 | item; | 36 | item; |
37 | - // return { | ||
38 | - // unit: unit ?? persetUnit, | ||
39 | - // fontColor: fontColor ?? persetFontColor, | ||
40 | - // showDeviceName: showDeviceName ?? persetShowDeviceName, | ||
41 | - // attribute, | ||
42 | - // deviceName, | ||
43 | - // deviceRename, | ||
44 | - // }; | ||
45 | return { | 37 | return { |
46 | unit: unit ?? presetUnit, | 38 | unit: unit ?? presetUnit, |
47 | fontColor: fontColor ?? presetFontColor, | 39 | fontColor: fontColor ?? presetFontColor, |
@@ -58,7 +50,6 @@ | @@ -58,7 +50,6 @@ | ||
58 | }); | 50 | }); |
59 | 51 | ||
60 | const getOffset = (length: number, index: number) => { | 52 | const getOffset = (length: number, index: number) => { |
61 | - // try { | ||
62 | const offsetList = ref<any>([]); | 53 | const offsetList = ref<any>([]); |
63 | switch (length) { | 54 | switch (length) { |
64 | case 1: | 55 | case 1: |
@@ -147,7 +138,6 @@ | @@ -147,7 +138,6 @@ | ||
147 | break; | 138 | break; |
148 | } | 139 | } |
149 | return unref(offsetList); | 140 | return unref(offsetList); |
150 | - // } catch {} | ||
151 | }; | 141 | }; |
152 | 142 | ||
153 | const series = ref( | 143 | const series = ref( |
@@ -263,7 +253,6 @@ | @@ -263,7 +253,6 @@ | ||
263 | series.value.forEach((item) => { | 253 | series.value.forEach((item) => { |
264 | if (item.id === deviceId && item.attribute === attribute && value) { | 254 | if (item.id === deviceId && item.attribute === attribute && value) { |
265 | item.value = getNumberValue(value); | 255 | item.value = getNumberValue(value); |
266 | - // time.value = timespan; | ||
267 | } | 256 | } |
268 | }); | 257 | }); |
269 | }); | 258 | }); |
@@ -62,7 +62,6 @@ | @@ -62,7 +62,6 @@ | ||
62 | const options = (): EChartsOption => { | 62 | const options = (): EChartsOption => { |
63 | const { unit, fontColor, pointerColor, maxNumber, valueSize } = unref(getDesign); | 63 | const { unit, fontColor, pointerColor, maxNumber, valueSize } = unref(getDesign); |
64 | 64 | ||
65 | - // getStageColor(gradientInfo); | ||
66 | return { | 65 | return { |
67 | series: [ | 66 | series: [ |
68 | { | 67 | { |
@@ -103,14 +102,6 @@ | @@ -103,14 +102,6 @@ | ||
103 | color: pointerColor, | 102 | color: pointerColor, |
104 | }, | 103 | }, |
105 | }, | 104 | }, |
106 | - // anchor: { | ||
107 | - // show: true, | ||
108 | - // showAbove: true, | ||
109 | - // size: 10, | ||
110 | - // itemStyle: { | ||
111 | - // borderWidth: 4, | ||
112 | - // }, | ||
113 | - // }, | ||
114 | title: { | 105 | title: { |
115 | show: false, | 106 | show: false, |
116 | }, | 107 | }, |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 3 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
4 | import { formSchema, getHistorySearchParams, SchemaFiled } from './history.config'; | 4 | import { formSchema, getHistorySearchParams, SchemaFiled } from './history.config'; |
5 | import { HistoryModalOkEmitParams } from './type'; | 5 | import { HistoryModalOkEmitParams } from './type'; |
6 | - import { ref } from 'vue'; | 6 | + import { ref, unref } from 'vue'; |
7 | import { getAllDeviceByOrg } from '/@/api/dataBoard'; | 7 | import { getAllDeviceByOrg } from '/@/api/dataBoard'; |
8 | import { getDeviceHistoryInfo } from '/@/api/alarm/position'; | 8 | import { getDeviceHistoryInfo } from '/@/api/alarm/position'; |
9 | import { DataSource } from '/@/views/visual/palette/types'; | 9 | import { DataSource } from '/@/views/visual/palette/types'; |
@@ -19,58 +19,154 @@ | @@ -19,58 +19,154 @@ | ||
19 | ], | 19 | ], |
20 | }); | 20 | }); |
21 | 21 | ||
22 | - const [registerModal, { closeModal }] = useModalInner(async (dataSource: DataSource[]) => { | ||
23 | - try { | ||
24 | - dataSource = cloneDeep(dataSource); | ||
25 | - if (dataSource.length < 2) return; | ||
26 | - dataSource = dataSource.splice(0, 2); | ||
27 | - const deviceRecord = dataSource?.at(0) || ({} as DataSource); | ||
28 | - if (!deviceRecord.organizationId) return; | ||
29 | - const deviceList = await getAllDeviceByOrg( | ||
30 | - deviceRecord.organizationId, | ||
31 | - deviceRecord.deviceProfileId | ||
32 | - ); | ||
33 | - const options = deviceList | ||
34 | - .filter((item) => item.tbDeviceId === deviceRecord.deviceId) | ||
35 | - .map((item) => ({ ...item, label: item.alias || item.name, value: item.tbDeviceId })); | ||
36 | - | ||
37 | - const attKey = dataSource.map((item) => ({ | ||
38 | - ...item, | ||
39 | - label: item.attribute, | ||
40 | - value: item.attribute, | ||
41 | - })); | ||
42 | - updateSchema([ | ||
43 | - { | ||
44 | - field: SchemaFiled.DEVICE_ID, | ||
45 | - componentProps: { | ||
46 | - options, | ||
47 | - }, | 22 | + const loading = ref(false); |
23 | + const getDesign = ref(); | ||
24 | + | ||
25 | + const getTwoMap = async (dataSource) => { | ||
26 | + if (dataSource.length < 2) return; | ||
27 | + dataSource = dataSource.splice(0, 2); | ||
28 | + const deviceRecord = dataSource?.at(0) || ({} as DataSource); | ||
29 | + | ||
30 | + if (!deviceRecord.organizationId) return; | ||
31 | + const deviceList = await getAllDeviceByOrg( | ||
32 | + deviceRecord.organizationId, | ||
33 | + deviceRecord.deviceProfileId | ||
34 | + ); | ||
35 | + const options = deviceList | ||
36 | + .filter((item) => item.tbDeviceId === deviceRecord.deviceId) | ||
37 | + .map((item) => ({ ...item, label: item.alias || item.name, value: item.tbDeviceId })); | ||
38 | + | ||
39 | + const attKey = dataSource.map((item) => ({ | ||
40 | + ...item, | ||
41 | + label: item.attribute, | ||
42 | + value: item.attribute, | ||
43 | + })); | ||
44 | + | ||
45 | + updateSchemaMap(options, attKey, deviceRecord); | ||
46 | + }; | ||
47 | + | ||
48 | + const getOneMap = async (dataSource) => { | ||
49 | + const deviceRecord = dataSource?.[0]; | ||
50 | + if (!deviceRecord.organizationId) return; | ||
51 | + const deviceList = await getAllDeviceByOrg( | ||
52 | + deviceRecord.organizationId, | ||
53 | + deviceRecord.deviceProfileId | ||
54 | + ); | ||
55 | + const options = deviceList | ||
56 | + .filter((item) => item.tbDeviceId === deviceRecord.deviceId) | ||
57 | + .map((item) => ({ ...item, label: item.alias || item.name, value: item.tbDeviceId })); | ||
58 | + | ||
59 | + const attKey = dataSource?.map((item) => ({ | ||
60 | + ...item, | ||
61 | + label: item.attributeName, | ||
62 | + value: item.attribute, | ||
63 | + })); | ||
64 | + updateSchemaMap(options, attKey, deviceRecord); | ||
65 | + }; | ||
66 | + | ||
67 | + const updateSchemaMap = (options, attKey, deviceRecord) => { | ||
68 | + updateSchema([ | ||
69 | + { | ||
70 | + field: SchemaFiled.DEVICE_ID, | ||
71 | + componentProps: { | ||
72 | + options, | ||
48 | }, | 73 | }, |
49 | - { | ||
50 | - field: SchemaFiled.KEYS, | ||
51 | - component: 'Select', | ||
52 | - defaultValue: attKey.map((item) => item.value), | ||
53 | - componentProps: { | ||
54 | - options: attKey, | ||
55 | - mode: 'multiple', | ||
56 | - disabled: true, | ||
57 | - }, | 74 | + }, |
75 | + { | ||
76 | + field: SchemaFiled.KEYS, | ||
77 | + component: 'Select', | ||
78 | + defaultValue: attKey.map((item) => item.value), | ||
79 | + componentProps: { | ||
80 | + options: attKey, | ||
81 | + mode: 'multiple', | ||
82 | + disabled: true, | ||
58 | }, | 83 | }, |
59 | - ]); | 84 | + }, |
85 | + ]); | ||
60 | 86 | ||
61 | - setFieldsValue({ | ||
62 | - [SchemaFiled.DEVICE_ID]: deviceRecord.deviceId, | ||
63 | - [SchemaFiled.KEYS]: attKey.map((item) => item.value), | ||
64 | - }); | 87 | + setFieldsValue({ |
88 | + [SchemaFiled.DEVICE_ID]: deviceRecord.deviceId, | ||
89 | + [SchemaFiled.KEYS]: attKey.map((item) => item.value), | ||
90 | + }); | ||
91 | + }; | ||
92 | + | ||
93 | + const [registerModal, { closeModal }] = useModalInner(async (dataSource: DataSource[]) => { | ||
94 | + try { | ||
95 | + getDesign.value = dataSource; | ||
96 | + dataSource = cloneDeep(dataSource); | ||
97 | + //判断选择是不是结构体 | ||
98 | + if (dataSource.length == 1 && dataSource?.[0]?.lal) { | ||
99 | + getOneMap(dataSource); | ||
100 | + return; | ||
101 | + } | ||
102 | + getTwoMap(dataSource); | ||
65 | } catch (error) { | 103 | } catch (error) { |
66 | throw error; | 104 | throw error; |
67 | } | 105 | } |
68 | }); | 106 | }); |
69 | 107 | ||
108 | + const getMultipleDataSource = async (res) => { | ||
109 | + let timespanList = Object.keys(res).reduce((prev, next) => { | ||
110 | + const ts = res[next].map((item) => item.ts); | ||
111 | + return [...prev, ...ts]; | ||
112 | + }, [] as number[]); | ||
113 | + timespanList = [...new Set(timespanList)]; | ||
114 | + | ||
115 | + const track: Record<'lng' | 'lat', number>[] = []; | ||
116 | + const keys = Object.keys(res); | ||
117 | + | ||
118 | + for (const ts of timespanList) { | ||
119 | + const list: { ts: number; value: number }[] = []; | ||
120 | + for (const key of keys) { | ||
121 | + const record = res[key].find((item) => ts === item.ts); | ||
122 | + if (!validEffective(record?.value)) { | ||
123 | + continue; | ||
124 | + } | ||
125 | + list.push(record as any); | ||
126 | + } | ||
127 | + | ||
128 | + if (list.length === 2 && list.every(Boolean)) { | ||
129 | + const lng = list.at(0)?.value; | ||
130 | + const lat = list.at(1)?.value; | ||
131 | + if (lng && lat) track.push({ lng, lat }); | ||
132 | + } | ||
133 | + } | ||
134 | + return track; | ||
135 | + }; | ||
136 | + | ||
137 | + // 单数据源选择结构体 | ||
138 | + const getSingleDataSource = async (res) => { | ||
139 | + const [keys] = Object.keys(res); | ||
140 | + const track: Record<'lng' | 'lat', number>[] = []; | ||
141 | + const dataSource = res[keys]?.map((item) => { | ||
142 | + return { | ||
143 | + value: item.value ? JSON.parse(item.value) : {}, | ||
144 | + }; | ||
145 | + }); | ||
146 | + const list: { value: number }[] = []; | ||
147 | + dataSource?.forEach((item) => { | ||
148 | + if ( | ||
149 | + //判断结构体得值是不是数字 | ||
150 | + Object.values(item.value).every((item1) => { | ||
151 | + return validEffective(item1 as any); | ||
152 | + }) | ||
153 | + ) { | ||
154 | + list.push(item.value); | ||
155 | + } | ||
156 | + }); | ||
157 | + const { latitude, longitude } = unref(getDesign)?.[0]; //获取选择的经纬度选项 | ||
158 | + | ||
159 | + list.forEach((item) => { | ||
160 | + const lng = item[longitude]; | ||
161 | + const lat = item[latitude]; | ||
162 | + if (lng && lat) track.push({ lng, lat }); | ||
163 | + }); | ||
164 | + return track; | ||
165 | + }; | ||
166 | + | ||
70 | const validEffective = (value = '') => { | 167 | const validEffective = (value = '') => { |
71 | return !!(value && !isNaN(value as unknown as number)); | 168 | return !!(value && !isNaN(value as unknown as number)); |
72 | }; | 169 | }; |
73 | - const loading = ref(false); | ||
74 | const handleOk = async () => { | 170 | const handleOk = async () => { |
75 | try { | 171 | try { |
76 | await validate(); | 172 | await validate(); |
@@ -84,33 +180,9 @@ | @@ -84,33 +180,9 @@ | ||
84 | ...value, | 180 | ...value, |
85 | [SchemaFiled.KEYS]: value[SchemaFiled.KEYS].join(','), | 181 | [SchemaFiled.KEYS]: value[SchemaFiled.KEYS].join(','), |
86 | }); | 182 | }); |
183 | + const ifSingle = unref(getDesign)?.length === 1 && unref(getDesign)?.[0]?.lal; | ||
87 | 184 | ||
88 | - let timespanList = Object.keys(res).reduce((prev, next) => { | ||
89 | - const ts = res[next].map((item) => item.ts); | ||
90 | - return [...prev, ...ts]; | ||
91 | - }, [] as number[]); | ||
92 | - timespanList = [...new Set(timespanList)]; | ||
93 | - | ||
94 | - const track: Record<'lng' | 'lat', number>[] = []; | ||
95 | - const keys = Object.keys(res); | ||
96 | - | ||
97 | - for (const ts of timespanList) { | ||
98 | - const list: { ts: number; value: number }[] = []; | ||
99 | - for (const key of keys) { | ||
100 | - const record = res[key].find((item) => ts === item.ts); | ||
101 | - if (!validEffective(record?.value)) { | ||
102 | - continue; | ||
103 | - } | ||
104 | - list.push(record as any); | ||
105 | - } | ||
106 | - | ||
107 | - if (list.length === 2 && list.every(Boolean)) { | ||
108 | - const lng = list.at(0)?.value; | ||
109 | - const lat = list.at(1)?.value; | ||
110 | - if (lng && lat) track.push({ lng, lat }); | ||
111 | - } | ||
112 | - } | ||
113 | - | 185 | + const track = ifSingle ? await getSingleDataSource(res) : await getMultipleDataSource(res); |
114 | emit('ok', { track, value } as HistoryModalOkEmitParams); | 186 | emit('ok', { track, value } as HistoryModalOkEmitParams); |
115 | closeModal(); | 187 | closeModal(); |
116 | } catch (error) { | 188 | } catch (error) { |
@@ -24,6 +24,14 @@ | @@ -24,6 +24,14 @@ | ||
24 | return props.config.option.dataSource?.at(0)?.deviceId; | 24 | return props.config.option.dataSource?.at(0)?.deviceId; |
25 | }); | 25 | }); |
26 | 26 | ||
27 | + const getDesign = computed(() => { | ||
28 | + const { option } = props.config; | ||
29 | + const { dataSource } = option || {}; | ||
30 | + return { | ||
31 | + dataSource: dataSource, | ||
32 | + }; | ||
33 | + }); | ||
34 | + | ||
27 | /** | 35 | /** |
28 | * @description 经度key | 36 | * @description 经度key |
29 | */ | 37 | */ |
@@ -42,7 +50,7 @@ | @@ -42,7 +50,7 @@ | ||
42 | return !!(value && !isNaN(value as unknown as number)); | 50 | return !!(value && !isNaN(value as unknown as number)); |
43 | }; | 51 | }; |
44 | 52 | ||
45 | - const updateFn: MultipleDataFetchUpdateFn = (message, deviceId) => { | 53 | + const getTwoMap = (message, deviceId) => { |
46 | if (unref(getDeviceId) !== deviceId) return; | 54 | if (unref(getDeviceId) !== deviceId) return; |
47 | 55 | ||
48 | const { data = {} } = message; | 56 | const { data = {} } = message; |
@@ -51,7 +59,7 @@ | @@ -51,7 +59,7 @@ | ||
51 | 59 | ||
52 | const lngData = bindMessage[unref(getLngKey)] || []; | 60 | const lngData = bindMessage[unref(getLngKey)] || []; |
53 | const [lngLatest] = lngData; | 61 | const [lngLatest] = lngData; |
54 | - const [, lng] = lngLatest; | 62 | + const [, lng] = lngLatest || []; |
55 | 63 | ||
56 | const latData = bindMessage[unref(getLatKey)] || []; | 64 | const latData = bindMessage[unref(getLatKey)] || []; |
57 | const [latLatest] = latData; | 65 | const [latLatest] = latData; |
@@ -62,6 +70,34 @@ | @@ -62,6 +70,34 @@ | ||
62 | } | 70 | } |
63 | }; | 71 | }; |
64 | 72 | ||
73 | + const getOneMap = (message, deviceId) => { | ||
74 | + if (unref(getDeviceId) !== deviceId) return; | ||
75 | + | ||
76 | + const { longitude, latitude, attribute } = unref(getDesign)?.dataSource?.[0] || {}; | ||
77 | + const { data } = message || {}; | ||
78 | + const bindMessage = data[deviceId]; | ||
79 | + const [, values] = attribute && bindMessage?.[attribute][0]; | ||
80 | + | ||
81 | + const mapValues = values ? JSON.parse(values) : {}; | ||
82 | + const lng = longitude && mapValues[longitude]; | ||
83 | + const lat = latitude && mapValues[latitude]; | ||
84 | + | ||
85 | + if (validEffective(lng) && validEffective(lat)) { | ||
86 | + drawLine({ lng: Number(lng), lat: Number(lat) }); | ||
87 | + } | ||
88 | + }; | ||
89 | + | ||
90 | + const updateFn: MultipleDataFetchUpdateFn = (message, deviceId) => { | ||
91 | + const { lal } = unref(getDesign)?.dataSource?.[0] || {}; | ||
92 | + // 属性选择结构体类型时 | ||
93 | + if (lal && unref(getDesign)?.dataSource?.length == 1) { | ||
94 | + getOneMap(message, deviceId); | ||
95 | + return; | ||
96 | + } | ||
97 | + // 选择两个属性时 | ||
98 | + getTwoMap(message, deviceId); | ||
99 | + }; | ||
100 | + | ||
65 | useMultipleDataFetch(props, updateFn); | 101 | useMultipleDataFetch(props, updateFn); |
66 | 102 | ||
67 | const { drawLine } = useMapTrackPlayBack(mapInstance); | 103 | const { drawLine } = useMapTrackPlayBack(mapInstance); |
@@ -100,11 +136,3 @@ | @@ -100,11 +136,3 @@ | ||
100 | <div v-show="!loading" ref="wrapRef" :id="wrapId" class="w-full h-full no-drag"> </div> | 136 | <div v-show="!loading" ref="wrapRef" :id="wrapId" class="w-full h-full no-drag"> </div> |
101 | </main> | 137 | </main> |
102 | </template> | 138 | </template> |
103 | - | ||
104 | -<style lang="less" scoped> | ||
105 | - // .map-spin-wrapper { | ||
106 | - // :deep(.ant-spin-container) { | ||
107 | - // @apply justify-center items-center p-2 w-full h-full; | ||
108 | - // } | ||
109 | - // } | ||
110 | -</style> |
@@ -247,7 +247,6 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | @@ -247,7 +247,6 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | ||
247 | }); | 247 | }); |
248 | }, | 248 | }, |
249 | placeholder: '请选择设备', | 249 | placeholder: '请选择设备', |
250 | - getPopupContainer: () => document.body, | ||
251 | ...createPickerSearch(), | 250 | ...createPickerSearch(), |
252 | }; | 251 | }; |
253 | }, | 252 | }, |
@@ -382,11 +381,18 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | @@ -382,11 +381,18 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | ||
382 | return []; | 381 | return []; |
383 | }, | 382 | }, |
384 | placeholder: '请选择属性', | 383 | placeholder: '请选择属性', |
385 | - getPopupContainer: () => document.body, | ||
386 | onChange(value: string, option: Record<'label' | 'value' | any, string>) { | 384 | onChange(value: string, option: Record<'label' | 'value' | any, string>) { |
385 | + const { detail }: any = option || {}; | ||
387 | setFieldsValue({ | 386 | setFieldsValue({ |
388 | [DataSourceField.ATTRIBUTE_NAME]: value ? option.label : null, | 387 | [DataSourceField.ATTRIBUTE_NAME]: value ? option.label : null, |
389 | [DataSourceField.EXTENSION_DESC]: value ? JSON.stringify(option.extensionDesc) : '', | 388 | [DataSourceField.EXTENSION_DESC]: value ? JSON.stringify(option.extensionDesc) : '', |
389 | + // 地图组件结构体 | ||
390 | + lal: | ||
391 | + category === 'MAP' && value && detail?.dataType.type === 'STRUCT' | ||
392 | + ? JSON.stringify(detail?.dataType.specs) | ||
393 | + : null, | ||
394 | + latitude: null, | ||
395 | + longitude: null, | ||
390 | }); | 396 | }); |
391 | }, | 397 | }, |
392 | ...createPickerSearch(), | 398 | ...createPickerSearch(), |
@@ -394,6 +400,46 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | @@ -394,6 +400,46 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | ||
394 | }, | 400 | }, |
395 | }, | 401 | }, |
396 | { | 402 | { |
403 | + field: 'lal', | ||
404 | + label: '经纬度存储的值', | ||
405 | + component: 'Input', | ||
406 | + show: false, | ||
407 | + }, | ||
408 | + { | ||
409 | + field: 'longitude', | ||
410 | + label: '经度', | ||
411 | + colProps: { span: 8 }, | ||
412 | + component: 'Select', | ||
413 | + required: true, | ||
414 | + ifShow: ({ model }) => category === 'MAP' && model.lal, | ||
415 | + componentProps({ formModel }) { | ||
416 | + const { lal } = formModel || {}; | ||
417 | + return { | ||
418 | + placeholder: '请选择经度', | ||
419 | + options: lal | ||
420 | + ? JSON.parse(lal)?.map((item) => ({ label: item.functionName, value: item.identifier })) | ||
421 | + : [], | ||
422 | + }; | ||
423 | + }, | ||
424 | + }, | ||
425 | + { | ||
426 | + field: 'latitude', | ||
427 | + label: '纬度', | ||
428 | + colProps: { span: 8 }, | ||
429 | + required: true, | ||
430 | + component: 'Select', | ||
431 | + ifShow: ({ model }) => category === 'MAP' && model.lal, | ||
432 | + componentProps({ formModel }) { | ||
433 | + const { lal } = formModel || {}; | ||
434 | + return { | ||
435 | + placeholder: '请选择纬度', | ||
436 | + options: lal | ||
437 | + ? JSON.parse(lal)?.map((item) => ({ label: item.functionName, value: item.identifier })) | ||
438 | + : [], | ||
439 | + }; | ||
440 | + }, | ||
441 | + }, | ||
442 | + { | ||
397 | field: DataSourceField.EXTENSION_DESC, | 443 | field: DataSourceField.EXTENSION_DESC, |
398 | component: 'Input', | 444 | component: 'Input', |
399 | show: false, | 445 | show: false, |
1 | -import { ReceiveTsSubCmdsGroupMessageType } from '../index.type'; | 1 | +import { ReceiveTsSubCmdsGroupMessageType } from './socket/useSocket.type'; |
2 | 2 | ||
3 | export const useReceiveMessage = () => { | 3 | export const useReceiveMessage = () => { |
4 | const forEachGroupMessage = ( | 4 | const forEachGroupMessage = ( |
src/views/visual/packages/template/config.ts
deleted
100644 → 0
1 | -import cloneDeep from 'lodash-es/cloneDeep'; | ||
2 | -import { ComponentConfig } from '.'; | ||
3 | -import { | ||
4 | - ConfigType, | ||
5 | - CreateComponentType, | ||
6 | - PublicComponentOptions, | ||
7 | - PublicPresetOptions, | ||
8 | -} from '/@/views/visual/packages/index.type'; | ||
9 | -import { PublicConfigClass, componentInitConfig } from '/@/views/visual/packages/publicConfig'; | ||
10 | -import { ComponentConfigFieldEnum } from '/@/views/visual/packages/enum'; | ||
11 | - | ||
12 | -export const option: PublicPresetOptions = { | ||
13 | - [ComponentConfigFieldEnum.FONT_COLOR]: '#', | ||
14 | - [ComponentConfigFieldEnum.SHOW_DEVICE_NAME]: false, | ||
15 | -}; | ||
16 | - | ||
17 | -export default class Config extends PublicConfigClass implements CreateComponentType { | ||
18 | - public key: string = ComponentConfig.key; | ||
19 | - | ||
20 | - public attr = { ...componentInitConfig }; | ||
21 | - | ||
22 | - public componentConfig: ConfigType = cloneDeep(ComponentConfig); | ||
23 | - | ||
24 | - public persetOption = cloneDeep(option); | ||
25 | - | ||
26 | - public option: PublicComponentOptions; | ||
27 | - | ||
28 | - constructor(option: PublicComponentOptions) { | ||
29 | - super(); | ||
30 | - this.option = { ...option }; | ||
31 | - } | ||
32 | -} |
src/views/visual/packages/template/config.vue
deleted
100644 → 0
1 | -<script lang="ts" setup> | ||
2 | - import { ComponentConfigFieldEnum } from '/@/views/visual/packages/enum'; | ||
3 | - import { useForm, BasicForm } from '/@/components/Form'; | ||
4 | - import { PublicFormInstaceType } from '/@/views/visual/dataSourceBindPanel/index.type'; | ||
5 | - | ||
6 | - const [register, { getFieldsValue, setFieldsValue, resetFields }] = useForm({ | ||
7 | - schemas: [ | ||
8 | - { | ||
9 | - field: ComponentConfigFieldEnum.FONT_COLOR, | ||
10 | - label: '数值字体颜色', | ||
11 | - component: 'ColorPicker', | ||
12 | - changeEvent: 'update:value', | ||
13 | - componentProps: { | ||
14 | - defaultValue: '#FD7347', | ||
15 | - }, | ||
16 | - }, | ||
17 | - { | ||
18 | - field: ComponentConfigFieldEnum.SHOW_DEVICE_NAME, | ||
19 | - label: '显示设备名称', | ||
20 | - component: 'Checkbox', | ||
21 | - }, | ||
22 | - ], | ||
23 | - showActionButtonGroup: false, | ||
24 | - labelWidth: 120, | ||
25 | - baseColProps: { | ||
26 | - span: 12, | ||
27 | - }, | ||
28 | - }); | ||
29 | - | ||
30 | - const getFormValues = () => { | ||
31 | - return getFieldsValue(); | ||
32 | - }; | ||
33 | - | ||
34 | - const setFormValues = (data: Recordable) => { | ||
35 | - return setFieldsValue(data); | ||
36 | - }; | ||
37 | - | ||
38 | - defineExpose({ | ||
39 | - getFormValues, | ||
40 | - setFormValues, | ||
41 | - resetFormValues: resetFields, | ||
42 | - } as PublicFormInstaceType); | ||
43 | -</script> | ||
44 | - | ||
45 | -<template> | ||
46 | - <BasicForm @register="register" /> | ||
47 | -</template> |
src/views/visual/packages/template/datasource.vue
deleted
100644 → 0
1 | -<script lang="ts" setup> | ||
2 | - import { CreateComponentType } from '/@/views/visual/packages/index.type'; | ||
3 | - import { BasicForm, useForm } from '/@/components/Form'; | ||
4 | - import { | ||
5 | - PublicComponentValueType, | ||
6 | - PublicFormInstaceType, | ||
7 | - } from '/@/views/visual/dataSourceBindPanel/index.type'; | ||
8 | - import { commonDataSourceSchemas } from '../config/common.config'; | ||
9 | - | ||
10 | - defineProps<{ | ||
11 | - values: PublicComponentValueType; | ||
12 | - componentConfig: CreateComponentType; | ||
13 | - }>(); | ||
14 | - | ||
15 | - const [register, { getFieldsValue, setFieldsValue, validate, resetFields }] = useForm({ | ||
16 | - labelWidth: 0, | ||
17 | - showActionButtonGroup: false, | ||
18 | - layout: 'horizontal', | ||
19 | - labelCol: { span: 0 }, | ||
20 | - schemas: commonDataSourceSchemas(), | ||
21 | - }); | ||
22 | - | ||
23 | - const getFormValues = () => { | ||
24 | - return getFieldsValue(); | ||
25 | - }; | ||
26 | - | ||
27 | - const setFormValues = (record: Recordable) => { | ||
28 | - return setFieldsValue(record); | ||
29 | - }; | ||
30 | - | ||
31 | - defineExpose({ | ||
32 | - getFormValues, | ||
33 | - setFormValues, | ||
34 | - validate, | ||
35 | - resetFormValues: resetFields, | ||
36 | - } as PublicFormInstaceType); | ||
37 | -</script> | ||
38 | - | ||
39 | -<template> | ||
40 | - <BasicForm @register="register" /> | ||
41 | -</template> |
src/views/visual/packages/template/index.ts
deleted
100644 → 0
1 | -import { useComponentKeys } from '/@/views/visual/packages/hook/useComponentKeys'; | ||
2 | -import { ConfigType, PackagesCategoryEnum } from '/@/views/visual/packages/index.type'; | ||
3 | - | ||
4 | -const componentKeys = useComponentKeys('componentKeys'); | ||
5 | - | ||
6 | -export const ComponentConfig: ConfigType = { | ||
7 | - ...componentKeys, | ||
8 | - title: '组件名', | ||
9 | - package: PackagesCategoryEnum.TEXT, | ||
10 | -}; |
src/views/visual/packages/template/index.vue
deleted
100644 → 0
1 | -<script lang="ts" setup> | ||
2 | - import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type'; | ||
3 | - import { option } from './config'; | ||
4 | - import { useDataFetch } from '../hook/socket/useSocket'; | ||
5 | - import { DataFetchUpdateFn } from '../hook/socket/useSocket.type'; | ||
6 | - | ||
7 | - const props = defineProps<{ | ||
8 | - config: ComponentPropsConfigType<typeof option>; | ||
9 | - }>(); | ||
10 | - | ||
11 | - const updateFn: DataFetchUpdateFn = (_message) => {}; | ||
12 | - | ||
13 | - useDataFetch(props, updateFn); | ||
14 | -</script> | ||
15 | - | ||
16 | -<template> | ||
17 | - <main class="w-full h-full flex flex-col justify-center items-center"> </main> | ||
18 | -</template> |
@@ -150,7 +150,6 @@ | @@ -150,7 +150,6 @@ | ||
150 | getIsSharePage, | 150 | getIsSharePage, |
151 | (value) => { | 151 | (value) => { |
152 | if (value) { | 152 | if (value) { |
153 | - console.log(unref(getDarkMode)); | ||
154 | const root = document.querySelector('#app'); | 153 | const root = document.querySelector('#app'); |
155 | (root as HTMLDivElement).style.backgroundColor = | 154 | (root as HTMLDivElement).style.backgroundColor = |
156 | unref(getDarkMode) === ThemeEnum.LIGHT ? '#F5F5F5' : '#1b1b1b'; | 155 | unref(getDarkMode) === ThemeEnum.LIGHT ? '#F5F5F5' : '#1b1b1b'; |
@@ -29,6 +29,9 @@ export interface DataSource { | @@ -29,6 +29,9 @@ export interface DataSource { | ||
29 | customCommand: CustomCommand; | 29 | customCommand: CustomCommand; |
30 | videoConfig?: VideoConfigType; | 30 | videoConfig?: VideoConfigType; |
31 | [key: string]: any; | 31 | [key: string]: any; |
32 | + lal?: string; | ||
33 | + latitude?: string | number; | ||
34 | + longitude?: string | number; | ||
32 | } | 35 | } |
33 | 36 | ||
34 | export interface ExtraDataSource extends DataSource, PublicComponentOptions { | 37 | export interface ExtraDataSource extends DataSource, PublicComponentOptions { |
@@ -32,7 +32,6 @@ app.ws.use( | @@ -32,7 +32,6 @@ app.ws.use( | ||
32 | }); | 32 | }); |
33 | ctx.websocket.send(data); | 33 | ctx.websocket.send(data); |
34 | } | 34 | } |
35 | - console.log(message); | ||
36 | }); | 35 | }); |
37 | }) | 36 | }) |
38 | ); | 37 | ); |
@@ -59,5 +58,6 @@ app.use(router.allowedMethods()); | @@ -59,5 +58,6 @@ app.use(router.allowedMethods()); | ||
59 | app.use(koaStatic(path.join(__dirname))); | 58 | app.use(koaStatic(path.join(__dirname))); |
60 | 59 | ||
61 | app.listen(PORT, () => { | 60 | app.listen(PORT, () => { |
61 | + // eslint-disable-next-line no-console | ||
62 | console.log(`Application started successfully: http://localhost:${PORT}`); | 62 | console.log(`Application started successfully: http://localhost:${PORT}`); |
63 | }); | 63 | }); |