diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs index 9ead01b6..5897803b 100644 --- a/.commitlintrc.cjs +++ b/.commitlintrc.cjs @@ -15,6 +15,8 @@ module.exports = { 'style', // 格式(不影响代码变动) 'revert', // 撤销commit 回滚上一版本 'perf', // 性能优化 + 'remove', //删除 + 'release', // ] ], 'scope-case': [0], @@ -24,11 +26,11 @@ module.exports = { rules: { "commit-rule": ({ raw }) => { return [ - /^\[(build|feat|fix|update|refactor|docs|chore|style|revert|perf)].+/g.test(raw), + /^\[(build|feat|fix|update|refactor|docs|chore|style|revert|perf|remove|release)].+/g.test(raw), `commit备注信息格式错误,格式为 <[type] 修改内容>,type支持${types.join(",")}` ] } } } ] -} \ No newline at end of file +} diff --git a/.gitignore b/.gitignore index 21c8f822..692918f9 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ components.d.ts *.njsproj *.sln *.sw? -.history \ No newline at end of file +.history +du-i18n.config.json diff --git a/build.sh b/build.sh index 5bbf1f2e..473d0d4d 100644 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.2.0-SNAPSHOT . -docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.2.0-SNAPSHOT +docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.3.0-SNAPSHOT . +docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.3.0-SNAPSHOT diff --git a/config/config.ts b/config/config.ts index fc15fd10..830f005d 100644 --- a/config/config.ts +++ b/config/config.ts @@ -1,6 +1,6 @@ export default { theme: { - 'primary-color': '#1d39c4', + 'primary-color': '#1677FF', }, logo: '/favicon.ico', // 浏览器标签页logo title: 'Jetlinks', // 浏览器标签页title @@ -10,4 +10,4 @@ export default { mode: 'inline', theme: 'light', // 'dark' 'light' } -} \ No newline at end of file +} diff --git a/du-i18n.config.json b/du-i18n.config.json new file mode 100644 index 00000000..248bbdbe --- /dev/null +++ b/du-i18n.config.json @@ -0,0 +1,25 @@ +{ + "quoteKeys": [ + "$t", + "$t", + "i18n.t" + ], + "defaultLang": "zh", + "tempLangs": [ + "zh", + "en" + ], + "langPaths": "**/src/i18n/locale/**", + "transSourcePaths": "**/src/i18n/source/**", + "tempPaths": "**/src/i18n/temp/**", + "tempFileName": "", + "multiFolders": [ + "src", + "views" + ], + "uncheckMissKeys": [], + "isSingleQuote": true, + "isOnlineTrans": true, + "baiduAppid": "20240704002091621", + "baiduSecrectKey": "CQdjuZ1v8AaZtx1NQQsW" +} diff --git a/package.json b/package.json index b3b967db..da0e34a9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jetlinks-vue", "private": true, - "version": "0.0.0", + "version": "2.2.0", "scripts": { "dev": "vite --mode develop", "dev:force": "vite --force --mode develop", @@ -14,19 +14,27 @@ }, "dependencies": { "@ant-design/icons-vue": "^7.0.1", + "@fullcalendar/core": "^6.1.13", + "@fullcalendar/daygrid": "^6.1.13", + "@fullcalendar/interaction": "^6.1.13", + "@fullcalendar/vue3": "^6.1.13", "@liveqing/liveplayer-v3": "^3.7.10", + "@types/axios": "^0.14.0", "@types/marked": "^4.0.8", "@vitejs/plugin-vue-jsx": "^3.0.0", - "@vuemap/vue-amap": "^1.1.20", + "@vuemap/vue-amap": "^2.1.2", "@vueuse/core": "^9.10.0", "ant-design-vue": "^3.2.15", + "async-validator": "^4.2.5", "axios": "^1.2.1", + "colorpicker-v3": "^2.10.2", + "cronstrue": "^2.50.0", "driver.js": "^0.9.8", "echarts": "^5.4.1", "event-source-polyfill": "^1.0.31", "global": "^4.4.0", "jetlinks-store": "^0.0.3", - "jetlinks-ui-components": "^1.0.38", + "jetlinks-ui-components": "^1.0.47", "jsencrypt": "^3.3.2", "less": "^4.1.3", "less-loader": "^11.1.0", @@ -46,9 +54,10 @@ "markdown-it-toc-done-right": "^4.2.0", "marked": "^4.2.12", "moment": "^2.29.4", - "monaco-editor": "^0.36.0", + "monaco-editor": "^0.50.0", "nrm": "^1.2.5", "pinia": "^2.0.28", + "resize-observer-polyfill": "^1.5.1", "rollup-plugin-copy": "^3.4.0", "rxjs": "^7.8.1", "unplugin-auto-import": "^0.12.1", @@ -57,10 +66,15 @@ "vite-plugin-monaco-editor": "^1.1.0", "vue": "3.3.4", "vue-cropper": "^1.0.9", + "vue-i18n": "^9.13.1", "vue-json-viewer": "^3.0.4", "vue-router": "^4.1.6", "vue3-json-viewer": "^2.2.2", - "vue3-ts-jsoneditor": "^2.7.1" + "vue3-ts-jsoneditor": "^2.7.1", + "xgplayer": "^3.0.19", + "xgplayer-flv": "^3.0.20-beta.0", + "xgplayer-hls": "^3.0.19", + "xgplayer-hls.js": "2.2.2" }, "devDependencies": { "@commitlint/cli": "^17.4.1", diff --git a/plugin/jetlinks.ts b/plugin/jetlinks.ts index 683da500..06f00800 100644 --- a/plugin/jetlinks.ts +++ b/plugin/jetlinks.ts @@ -295,7 +295,6 @@ function getSideEffects(compName: string, options: JetlinksVueResolverOptions, _ return const lib = options.cjs ? 'lib' : 'es' const packageName = options?.packageName || 'jetlinks-ui-components' - if (importStyle === 'less' || importLess) { const styleDir = getStyleDir(compName, _isAntd) return `${packageName}/${lib}/${styleDir}/style` @@ -319,8 +318,25 @@ const primitiveNames = ['AIcon','Affix', 'Anchor', 'AnchorLink', 'message', 'Not 'DataTableObject', 'CheckButton', ] + const prefix = 'J' +const proComponents = [ + 'ProTable', 'Search', 'AdvancedSearch', 'Ellipsis', 'MonacoEditor', 'ProLayout', 'ScrollTable', 'TableCard', 'Scrollbar', 'CardSelect', 'PopconfirmModal', 'DataTable', + 'DataTableArray', + 'DataTableString', + 'DataTableInteger', + 'DataTableDouble', + 'DataTableBoolean', + 'DataTableEnum', + 'DataTableFile', + 'DataTableDate', + 'DataTableTypeSelect', + 'DataTableObject', + 'CheckButton', + 'ValueItem' +] + let jetlinksNames: Set function genJetlinksNames(primitiveNames: string[]): void { @@ -356,11 +372,20 @@ export function JetlinksVueResolver(options: JetlinksVueResolverOptions = {}): a } const _isJetlinks = isJetlinks(name) const _isAntd = isAntdv(name) + if ((_isJetlinks || _isAntd) && !options?.exclude?.includes(name)) { + // const importName = filterName.includes(name) ? name : name.slice(1) + // + // options.packageName = proComponents.includes(importName) ? 'jetlinks-ui-components' : 'ant-design-vue' + // + // const path = `${options.packageName}/${options.cjs ? 'lib' : 'es'}` + // const stylePath = getSideEffects(importName, options, !proComponents.includes(importName)) + const importName = filterName.includes(name) ? name : name.slice(1) options.packageName = _isJetlinks ? 'jetlinks-ui-components' : 'ant-design-vue' const path = `${options.packageName}/${options.cjs ? 'lib' : 'es'}` const stylePath = getSideEffects(importName, options, _isAntd) + return { name: importName, from: path, @@ -369,4 +394,4 @@ export function JetlinksVueResolver(options: JetlinksVueResolverOptions = {}): a } } } -} \ No newline at end of file +} diff --git a/public/images/access/media-plugin.png b/public/images/access/media-plugin.png new file mode 100644 index 00000000..6eab68fb Binary files /dev/null and b/public/images/access/media-plugin.png differ diff --git a/public/images/access/onvif.png b/public/images/access/onvif.png new file mode 100644 index 00000000..4eaa9ee4 Binary files /dev/null and b/public/images/access/onvif.png differ diff --git a/public/images/calendar/hover.png b/public/images/calendar/hover.png new file mode 100644 index 00000000..10756cad Binary files /dev/null and b/public/images/calendar/hover.png differ diff --git a/src/App.vue b/src/App.vue index 376264e4..f9c589c6 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,10 @@ @@ -9,7 +14,6 @@ import { ConfigProvider } from 'jetlinks-ui-components' import zhCN from 'jetlinks-ui-components/es/locale/zh_CN'; import { storeToRefs } from 'pinia'; import { useSystem } from './store/system'; -import DefaultSetting from '../config/config' import {LocalStore} from "@/utils/comm"; import {TOKEN_KEY} from "@/utils/variable"; diff --git a/src/api/comm.ts b/src/api/comm.ts index 312d52ce..3f273af9 100644 --- a/src/api/comm.ts +++ b/src/api/comm.ts @@ -4,6 +4,8 @@ import { SearchHistoryList } from 'components/Search/types' export const FILE_UPLOAD = `${BASE_API_PATH}/file/static`; +export const FileUpload = `${BASE_API_PATH}/file/upload`; + /** * 保存查询记录 * @param data @@ -31,11 +33,11 @@ export const systemVersion = () => server.get<{edition?: string}>('/system/versi /** * 聚合查询 - * @param data - * @returns + * @param data + * @returns */ export const queryDashboard = (data: Record) => server.post(`/dashboard/_multi`, data) export const fileUpload = (data: any) => server.post('/file/static', data) -export const lowCodeUrl = () => server.get('/system/config/low-code') \ No newline at end of file +export const lowCodeUrl = () => server.get('/system/config/low-code') diff --git a/src/api/data-collect/collector.ts b/src/api/data-collect/collector.ts index df3d219d..64f7ffed 100644 --- a/src/api/data-collect/collector.ts +++ b/src/api/data-collect/collector.ts @@ -83,5 +83,15 @@ export const getBacnetObjectList = (channelId: string, instanceNumber: string) = */ export const getBacnetPropertyIdNotUse = (data: any) => server.post(`/collect/bacnet/${data.collectorId}/unused/ids`, data) +// /** +// * 查询所有属性id +// */ +// export const getBacnetAllPropertyId = () => server.get('/collect/bacnet/property/ids') + /**查询bacnet值类型*/ -export const getBacnetValueType = () => server.get(`/collect/bacnet/value/types`) \ No newline at end of file +export const getBacnetValueType = () => server.get(`/collect/bacnet/value/types`) + +/** + * 导出点位数据 + */ +export const exportPoint = (collectorId:string,provider:string) => server.get(`/data-collect/point/${collectorId}/${provider}/export.xlsx`, {}, {responseType: 'blob'}) \ No newline at end of file diff --git a/src/api/device/firmware.ts b/src/api/device/firmware.ts index 19e3c7b0..7a71a5a5 100644 --- a/src/api/device/firmware.ts +++ b/src/api/device/firmware.ts @@ -11,12 +11,16 @@ export const remove = (id: string) => server.remove(`/firmware/${id}`); export const query = (data: object) => server.post(`/firmware/_query/`, data); +export const queryPaginateNot = (data: object) => server.post('/firmware/_query/no-paging',data) + export const querySystemApi = (data?: object) => server.post(`/system/config/scopes`, data); export const task = (data: Record) => server.post(`/firmware/upgrade/task/detail/_query`, data); +export const queryTaskPaginateNot = (data:any)=> server.post('/firmware/upgrade/task/detail/_query/no-paging',data) + export const taskById = (id: string) => server.get(`/firmware/upgrade/task/${id}`); @@ -29,6 +33,10 @@ export const deleteTask = (id: string) => export const history = (data: Record) => server.post(`/firmware/upgrade/history/_query`, data); +export const historyPaginateNot =(data:Record) => + server.post('/firmware/upgrade/history/_query/no-paging',data) + + export const historyCount = (data: Record) => server.post(`/firmware/upgrade/history/_count`, data); @@ -41,6 +49,8 @@ export const stopTask = (id: string) => export const startOneTask = (data: string[]) => server.post(`/firmware/upgrade/task/_start`, data); +export const stopOneTask = (data: string[]) => + server.post('/firmware/upgrade/task/_stop',data) // export const queryProduct = (data?: any) => // server.post(`/device-product/_query/no-paging`, data); export const queryProduct = (data?: any) => diff --git a/src/api/device/instance.ts b/src/api/device/instance.ts index a4fad8de..3ca23491 100644 --- a/src/api/device/instance.ts +++ b/src/api/device/instance.ts @@ -14,7 +14,7 @@ export const resetRule = (productId:string,deviceId:string,data:any) => server.r /** * 删除设备物模型 * @param deviceId 设备ID - * @returns + * @returns */ export const deleteMetadata = (deviceId: string) => server.remove(`/device-instance/${deviceId}/metadata`) @@ -22,7 +22,7 @@ export const deleteMetadata = (deviceId: string) => server.remove(`/device-insta * 保存设备物模型 * @param id 设备ID * @param data 物模型 - * @returns + * @returns */ export const saveMetadata = (id: string, data: DeviceMetadata) => server.put(`/device/instance/${id}/metadata`, data) @@ -36,58 +36,58 @@ export const detail = (id: string) => server.get(`/device-instan /** * 查询数据 * @param data 分页搜索数据 - * @returns + * @returns */ export const query = (data?: Record) => server.post('/device-instance/_query', data) /** * 不分页查询设备 - * @param data - * @returns + * @param data + * @returns */ export const queryNoPagingPost = (data?: Record) => server.post('/device-instance/_query/no-paging?paging=false', data) /** * 删除设备 * @param id 设备ID - * @returns + * @returns */ export const _delete = (id: string) => server.remove(`/device-instance/${id}`) /** * 启用设备 * @param id 设备ID - * @param data - * @returns + * @param data + * @returns */ export const _deploy = (id: string) => server.post(`/device-instance/${id}/deploy`) /** * 禁用设备 * @param id 设备ID - * @param data - * @returns + * @param data + * @returns */ export const _undeploy = (id: string) => server.post(`/device-instance/${id}/undeploy`) /** * 批量激活设备 * @param data 设备id数组 - * @returns + * @returns */ export const batchDeployDevice = (data: string[]) => server.put(`/device-instance/batch/_deploy`, data) /** * 批量注销设备 * @param data 设备id数组 - * @returns + * @returns */ export const batchUndeployDevice = (data: string[]) => server.put(`/device-instance/batch/_unDeploy`, data) /** * 批量删除 * @param data 设备id数组 - * @returns + * @returns */ export const batchDeleteDevice = (data: string[]) => server.put(`/device-instance/batch/_delete`, data) @@ -95,7 +95,7 @@ export const batchDeleteDevice = (data: string[]) => server.put(`/device-instanc * 下载设备模板 * @param productId 产品id * @param type 文件类型 - * @returns + * @returns */ export const deviceTemplateDownload = (productId: string, type: string) => `${BASE_API_PATH}/device-instance/${productId}/template.${type}` @@ -104,7 +104,7 @@ export const templateDownload = (productId: string, type: string) => server.get( * 设备导入 * @param productId 产品id * @param type 文件类型 - * @returns + * @returns */ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boolean) => `${BASE_API_PATH}/device-instance/${productId}/import/_withlog?fileUrl=${fileUrl}&autoDeploy=${autoDeploy}&:X_Access_Token=${LocalStore.get(TOKEN_KEY)}` @@ -112,21 +112,21 @@ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boo * 设备导出 * @param productId 产品id * @param type 文件类型 - * @returns + * @returns */ export const deviceExport = (productId: string, type: string, params?: any) => server.get(`/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`, params, {responseType: 'blob'}) export const deviceExportPath = (productId: string, type: string) => (`${BASE_API_PATH}/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`) /** * 验证设备ID是否重复 * @param id 设备id - * @returns + * @returns */ export const isExists = (id: string) => server.get(`/device-instance/${id}/exists`) /** * 修改设备信息 * @param data 设备信息 - * @returns + * @returns */ export const update = (data: Partial) => data.id ? server.patch(`/device-instance`, data) : server.post(`/device-instance`, data) @@ -134,27 +134,27 @@ export const update = (data: Partial) => data.id ? server.patch( * 修改设备信息 * @param id 设备id * @param data 设备信息 - * @returns + * @returns */ export const modify = (id: string, data: Partial) => server.put(`/device-instance/${id}`, data) /** * 获取配置信息 * @param id 设备id - * @returns + * @returns */ export const getConfigMetadata = (id: string) => server.get(`/device-instance/${id}/config-metadata`) /** * 断开连接 * @param id 设备id - * @returns + * @returns */ export const _disconnect = (id: string) => server.post(`/device-instance/${id}/disconnect`) /** * 查询用户列表 - * @returns + * @returns */ export const queryUserListNoPaging = () => server.post(`/user/_query/no-paging`, { paging: false, @@ -164,16 +164,16 @@ export const queryUserListNoPaging = () => server.post(`/user/_query/no-paging`, /** * 保存设备关系 * @param id 设备id - * @param data - * @returns + * @param data + * @returns */ export const saveRelations = (id: string, data: Record) => server.patch(`/device/instance/${id}/relations`, data) /** * 修改标签 * @param id 设备id - * @param data - * @returns + * @param data + * @returns */ export const saveTags = (id: string, data: Record) => server.patch(`/device/instance/${id}/tag`, data) @@ -181,14 +181,14 @@ export const saveTags = (id: string, data: Record) => server.patch( * 删除标签 * @param deviceId 设备id * @param id 标签id - * @returns + * @returns */ export const delTags = (deviceId: string, id: string) => server.remove(`/device/instance/${deviceId}/tag/${id}`) /** * 恢复默认配置 * @param deviceId 设备id - * @returns + * @returns */ export const configurationReset = (deviceId: string) => server.put(`/device-instance/${deviceId}/configuration/_reset`) @@ -196,16 +196,16 @@ export const configurationReset = (deviceId: string) => server.put(`/device-inst * 查询事件详情列表 * @param deviceId 设备id * @param eventId 事件id - * @param data - * @returns + * @param data + * @returns */ export const getEventList = (deviceId: string, eventId: string, data: Record) => server.post(`/device-instance/${deviceId}/event/${eventId}?format=true`, data) /** * 设置属性至设备 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const setProperty = (deviceId: string, data: Record) => server.put(`/device-instance/${deviceId}/property`, data) @@ -213,7 +213,7 @@ export const setProperty = (deviceId: string, data: Record) => serv * 获取最新属性值 * @param deviceId 设备id * @param type 属性id - * @returns + * @returns */ export const getProperty = (deviceId: string, type: string) => server.get(`/device/standard/${deviceId}/property/${type}`) @@ -221,7 +221,7 @@ export const getProperty = (deviceId: string, type: string) => server.get(`/devi * 查询设备的物模型指标 * @param deviceId 设备id * @param propertyId 属性id - * @returns + * @returns */ export const queryMetric = (deviceId: string, propertyId: string) => server.get(`/device-instance/${deviceId}/metric/property/${propertyId}`) @@ -229,8 +229,8 @@ export const queryMetric = (deviceId: string, propertyId: string) => server.get( * 保存设备的物模型指标 * @param deviceId 设备id * @param propertyId 属性id - * @param data - * @returns + * @param data + * @returns */ export const saveMetric = (deviceId: string, propertyId: string, data: Record) => server.patch(`/device-instance/${deviceId}/metric/property/${propertyId}`, data) @@ -238,24 +238,24 @@ export const saveMetric = (deviceId: string, propertyId: string, data: Record) => server.post(`/device/gateway/${deviceId}/unbind/${childrenId}`, data) /** * 批量解绑子设备 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const unbindBatchDevice = (deviceId: string, data: Record) => server.post(`/device/gateway/${deviceId}/unbind`, data) /** * 子设备绑定 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const bindDevice = (deviceId: string, data: Record) => server.post(`/device/gateway/${deviceId}/bind`, data) @@ -271,7 +271,7 @@ export const queryDeviceMapping = (deviceId: string, data?: any) => server.post( export const saveDeviceMapping = (deviceId: string, data: any) => server.post(`/edge/operations/${deviceId}/device-mapping-save-batch/invoke`, data) /** - *批量删除云端映射设备 + *批量删除云端映射设备 */ export const deleteDeviceMapping = (deviceId: string, data:any) => server.post(`/edge/operations/${deviceId}/device-mapping-delete-by-deviceid/invoke`, data) @@ -294,64 +294,64 @@ export const addDevice = (params: any) => server.post("/device-instance", params /** * 设备接入网关状态 * @param id 设备接入网关id - * @returns + * @returns */ export const queryGatewayState = (id: string) => server.get(`/gateway/device/${id}/detail`) /** * 网络组件状态 * @param id 网络组件id - * @returns + * @returns */ export const queryNetworkState = (id: string) => server.get(`/network/config/${id}`) /** * 产品状态 * @param id 产品id - * @returns + * @returns */ export const queryProductState = (id: string) => server.get(`/device/product/${id}`) /** * 产品配置 * @param id 产品id - * @returns + * @returns */ export const queryProductConfig = (id: string) => server.get(`/device/product/${id}/config-metadata`) /** * 设备配置 * @param id 设备id - * @returns + * @returns */ export const queryDeviceConfig = (id: string) => server.get(`/device-instance/${id}/config-metadata`) /** * 查询协议 - * @param type - * @param transport - * @returns + * @param type + * @param transport + * @returns */ export const queryProtocolDetail = (type: string, transport: string) => server.get(`/protocol/${type}/transport/${transport}`) /** * 网络组件启用 * @param id 网络组件ID - * @returns + * @returns */ export const startNetwork = (id: string) => server.post(`/network/config/${id}/_start`) /** * 启用网关 * @param id 网关id - * @returns + * @returns */ export const startGateway = (id: string) => server.post(`/gateway/device/${id}/_startup`) /** * 网关详情 * @param id 网关id - * @returns + * @returns */ export const getGatewayDetail = (id: string) => server.get(`/gateway/device/${id}`) @@ -366,231 +366,231 @@ export const getUnit = () => server.get(`/protocol/units`) * 执行功能 * @param deviceId 设备id * @param functionId 功能id - * @param data - * @returns + * @param data + * @returns */ export const executeFunctions = (deviceId: string, functionId: string, data: any) => server.post(`/device/invoked/${deviceId}/function/${functionId}`, data) /** * 读取属性 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const readProperties = (deviceId: string, data: any) => server.post(`/device/instance/${deviceId}/properties/_read`, data) /** * 设置属性 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const settingProperties = (deviceId: string, data: any) => server.put(`/device/instance/${deviceId}/property`, data) /** * 设备功能-执行 * @param id 设备id - * @param action - * @param data - * @returns + * @param action + * @param data + * @returns */ export const execute = (id: string, action: string, data: any) => server.post(`/device/invoked/${id}/function/${action}`, data) /** * 查询通道列表不分页 - * @param data - * @returns + * @param data + * @returns */ export const queryChannelNoPaging = (data: any) => server.post(`data-collect/channel/_query/no-paging`, data) /** * 查询采集器列表不分页 - * @param data - * @returns + * @param data + * @returns */ export const queryCollectorNoPaging = (data: any) => server.post(`/data-collect/collector/_query/no-paging`, data) /** * 查询点位列表不分页 - * @param data - * @returns + * @param data + * @returns */ export const queryPointNoPaging = (data: any) => server.post(`/data-collect/point/_query/no-paging`, data) /** * 查询映射列表 - * @param thingType - * @param thingId - * @param params - * @returns + * @param thingType + * @param thingId + * @param params + * @returns */ export const queryMapping = (thingType: string, thingId: any, params?: any) => server.get(`/things/collector/${thingType}/${thingId}/_query`, params) /** * 删除映射 - * @param thingType - * @param thingId - * @param data - * @returns + * @param thingType + * @param thingId + * @param data + * @returns */ export const removeMapping = (thingType: string, thingId: any, data?: any) => server.post(`/things/collector/${thingType}/${thingId}/_delete`, data) /** * 映射树 - * @param data - * @returns + * @param data + * @returns */ export const treeMapping = (data?: any) => server.post(`/data-collect/channel/_all/tree`, data) /** * 保存映射 - * @param thingId - * @param provider - * @param data - * @returns + * @param thingId + * @param provider + * @param data + * @returns */ export const saveMapping = (thingId: any, provider: string, data?: any) => server.patch(`/things/collector/device/${thingId}/${provider}`, data) /** * 查询边缘网关通道 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const edgeChannel = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-channel-list/invoke`, data) /** * 查询边缘网关采集器 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const edgeCollector = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-list/invoke`, data) /** * 查询边缘网关点位 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const edgePoint = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-point-list/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const getEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/device-collector-list/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const removeEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/device-collector-delete/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const treeEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-channel-tree/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const saveEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/device-collector-save/invoke`, data) /** * 查询属性详情 - * @param deviceId - * @param params - * @returns + * @param deviceId + * @param params + * @returns */ export const getPropertyData = (deviceId: string, params: Record) => server.get(`/device-instance/${deviceId}/properties/_query`, params) /** * 聚合查询设备属性 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const getPropertiesInfo = (deviceId: string, data: Record) => server.post(`/device-instance/${deviceId}/agg/_query`, data) /** * 聚合查询设备属性 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const getPropertiesList = (deviceId: string, property: string, data: Record) => server.post(`/device-instance/${deviceId}/property/${property}/_query/no-paging`, data) /** * 获取指定协议 - * @param id - * @param transport - * @returns + * @param id + * @param transport + * @returns */ export const getProtocal = (id: string, transport: string) => server.get(`/protocol/${id}/transport/${transport}`) /** * 获取产品解析规则 - * @param productId - * @returns + * @param productId + * @returns */ export const productCode = (productId: string) => server.get(`/device/transparent-codec/${productId}`) /** * 保存产品解析规则 - * @param productId - * @returns + * @param productId + * @returns */ export const saveProductCode = (productId: string, data: Record) => server.post(`/device/transparent-codec/${productId}`, data) /** * 获取设备解析规则 - * @param productId - * @param deviceId - * @returns + * @param productId + * @param deviceId + * @returns */ export const deviceCode = (productId: string, deviceId: string) => server.get(`device/transparent-codec/${productId}/${deviceId}`) /** * 保存设备解析规则 - * @param productId + * @param productId * 查询设备日志 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const saveDeviceCode = (productId: string, deviceId: string, data: Record) => server.post(`/device/transparent-codec/${productId}/${deviceId}`, data) /** * 编码测试 - * @param data - * @returns + * @param data + * @returns */ export const testCode = (data: Record) => server.post(`/device/transparent-codec/decode-test`, data) /** * 删除设备解析规则 - * @param productId - * @param deviceId - * @returns + * @param productId + * @param deviceId + * @returns */ export const delDeviceCode = (productId: string, deviceId: string) => server.remove(`/device/transparent-codec/${productId}/${deviceId}`) /** * 删除产品解析规则 - * @param productId - * @returns + * @param productId + * @returns */ export const delProductCode = (productId: string) => server.remove(`/device/transparent-codec/${productId}`) export const queryLog = (deviceId: string, data: Record) => server.post(`/device-instance/${deviceId}/logs`, data) /** * 查询设备日志类型 - * @returns + * @returns */ export const queryLogsType = () => server.get(`/dictionary/device-log-type/items`) @@ -626,13 +626,60 @@ export const queryProductCodeTips = (productId: string) => server.get(`/device/t /** * 获取设备物模型规则TS * @param deviceId 设备ID - * @returns + * @returns */ -export const queryTypescript = (deviceId:string) => server.get(`/device/${deviceId}/virtual-property.d.ts`) +export const queryTypescript = (deviceId:string) => server.get(`/device/${deviceId}/virtual-property.d.ts`) /** * 获取产品物模型规则TS * @param productId 产品ID + * @returns + */ +export const queryProductTs = (productId:string) => server.get(`/product/${productId}/virtual-property.d.ts`) + +/** + * 阈值限制-新增/修改-产品 + * @param data + */ +export const updateProductThreshold = (productId:string,propertyId:string,data: any) => server.put(`/message/preprocessor/product/${productId}/property/${propertyId}`, data) + +/** + * 阈值限制-新增/修改-设备 + * @param data + */ +export const updateDeviceThreshold = (productId:string,deviceId:string,propertyId:string,data: any) => server.put(`/message/preprocessor/device/${productId}/${deviceId}/property/${propertyId}`, data) + +/** + * 阈值限制-设备物模型阈值限制 + * @param productId + * @param deviceId + * @param propertyId + */ +export const queryDeviceThreshold = (productId: string, deviceId: string, propertyId: string) => server.get(`/message/preprocessor/device/${productId}/${deviceId}/property/${propertyId}`) + +/** + * 阈值限制-产品物模型阈值限制 + * @param productId + * @param propertyId + */ +export const queryProductThreshold = (productId: string, propertyId: string) => server.get(`/message/preprocessor/product/${productId}/property/${propertyId}`) + +/** + * 阈值限制-删除产品物模型的阈值 + * @param productId + * @param propertyId * @returns */ -export const queryProductTs = (productId:string) => server.get(`/product/${productId}/virtual-property.d.ts`) \ No newline at end of file +export const deleteProductThreshold = (productId:string,propertyId:string,data:any) => server.remove(`/message/preprocessor/product/${productId}/property/${propertyId}`,data) + +/** + * 阈值限制-删除产品物模型的阈值 + * @param productId + * @param propertyId + * @returns + */ +export const deleteDeviceThreshold = (productId:string,deviceId:string,propertyId:string,data:any) => server.remove(`/message/preprocessor/device/${productId}/${deviceId}/property/${propertyId}`,data) + +export const getTemplate = (id: string, format: string) => `${BASE_API_PATH}/device/instance/${id}/property-metadata/template.${format}` + +export const uploadAnalyzeMetadata = (data: any) => server.post('/device/instance/property-metadata/file/analyze', data) diff --git a/src/api/device/product.ts b/src/api/device/product.ts index de7e0256..90de1d2a 100644 --- a/src/api/device/product.ts +++ b/src/api/device/product.ts @@ -1,11 +1,12 @@ import { OperatorItem } from '@/components/FRuleEditor/Operator/typings' import server from '@/utils/request' import { DeviceMetadata, ProductItem, DepartmentItem, MetadataType } from '@/views/device/Product/typings' +import {BASE_API_PATH} from "@/utils/variable"; /** * 根据条件查询产品(不带翻页) * @param data 查询条件 - * @returns + * @returns */ export const queryNoPagingPost = (data: any) => server.post(`/device-product/_query/no-paging?paging=false`, data) @@ -14,7 +15,7 @@ export const queryNoPagingPost = (data: any) => server.post(`/device-product/_qu * @param direction from|to * @param type 物模型类型 * @param data 物模型数据 - * @returns + * @returns */ export const convertMetadata = (direction: 'from' | 'to', type: string, data: any) => server.post(`/device/product/metadata/convert-${direction}/${type}`, data) @@ -22,20 +23,20 @@ export const convertMetadata = (direction: 'from' | 'to', type: string, data: an * 修改产品 * @param id 产品ID * @param data 产品数据 - * @returns + * @returns */ export const modify = (id: string, data: any) => server.put(`/device-product/${id}`, data) /** - * - * @returns + * + * @returns */ export const getCodecs = () => server.get<{id: string, name: string}>('/device/product/metadata/codecs') /** * 根据产品ID获取产品详情 * @param id 产品ID - * @returns + * @returns */ export const detail = (id: string) => server.get(`/device-product/${id}`) @@ -80,31 +81,31 @@ export const category = (data: any) => server.get('/device/category/_tree?paging /** * 启用产品 * @param productId 产品ID - * @param data - * @returns + * @param data + * @returns */ export const _deploy = (productId: string) => server.post(`/device-product/${productId}/deploy`) /** * 禁用产品 * @param productId 产品ID - * @param data - * @returns + * @param data + * @returns */ export const _undeploy = (productId: string) => server.post(`/device-product/${productId}/undeploy`) /** * 新增产品 - * @param data - * @returns + * @param data + * @returns */ export const addProduct = (data:any) => server.post('/device-product',data) /** * 修改产品 * @param id 产品ID - * @param data - * @returns + * @param data + * @returns */ export const editProduct = (data: any) => server.put(`/device-product/${data.id}`, data) @@ -122,7 +123,7 @@ export const deleteProduct = (id: string) => server.remove(`/device-product/${id /** * 保存产品 * @param data 产品信息 - * @returns + * @returns */ export const saveProductMetadata = (data: Record) => server.patch('/device-product', data) @@ -219,5 +220,7 @@ export const saveProductVirtualProperty = (productId: string, data: any[]) => se export const queryProductVirtualProperty = (productId: string, propertyId: string) => server.get(`/virtual/property/product/${productId}/${propertyId}`) +export const getTemplate = (id: string, format: string) => `${BASE_API_PATH}/device/product/${id}/property-metadata/template.${format}` + diff --git a/src/api/northbound/alicloud.ts b/src/api/northbound/alicloud.ts index 669899ef..89d278db 100644 --- a/src/api/northbound/alicloud.ts +++ b/src/api/northbound/alicloud.ts @@ -7,6 +7,11 @@ import server from '@/utils/request' */ export const query = (data: Record) => server.post('/device/aliyun/bridge/_query', data) +/** + * 查询数据不分页 + */ +export const queryPaginateNot = (data: any) => server.post('/device/aliyun/bridge/_query/no-paging', data) + /** * 查询产品列表 * @param data diff --git a/src/api/northbound/dueros.ts b/src/api/northbound/dueros.ts index 63562377..e7d95784 100644 --- a/src/api/northbound/dueros.ts +++ b/src/api/northbound/dueros.ts @@ -7,6 +7,11 @@ import server from '@/utils/request' */ export const query = (data: Record) => server.post('/dueros/product/_query', data) +/** + * 查询数据不分页 + */ +export const queryPaginateNot = (data:any) => server.post('/dueros/product/_query/no-paging',data) + /** * 查询产品列表 * @param id diff --git a/src/api/rule-engine/configuration.ts b/src/api/rule-engine/configuration.ts index 5570a740..99548f49 100644 --- a/src/api/rule-engine/configuration.ts +++ b/src/api/rule-engine/configuration.ts @@ -46,7 +46,15 @@ export const detail = (id:string) => server.get(`/alarm/config/${id}`); export const unbindScene = (id:string,data:any) => server.post(`/alarm/rule/bind/${id}/_delete`,data); +export const unBindAlarm = (id: string, alarmId: string, data: any) => server.post(`/alarm/rule/bind/${alarmId}/${id}/_delete`, data) +export const unBindAlarmMultiple = (data: any) => server.post(`/alarm/rule/bind/_delete`, data) /** * 保存关联场景 */ export const bindScene = (data:any) => server.patch("/alarm/rule/bind",data) + +/** + * 查询关联的场景执行动作id + * @param data + */ +export const queryBindScene = (data:any) => server.post("/alarm/rule/bind/_query",data) diff --git a/src/api/rule-engine/log.ts b/src/api/rule-engine/log.ts index 1f88a9d5..27288831 100644 --- a/src/api/rule-engine/log.ts +++ b/src/api/rule-engine/log.ts @@ -25,6 +25,13 @@ export const getOrgList = (parmas?:any) => server.get('/organization/_query/no-p */ export const query = (data:any) => server.post('/alarm/record/_query/',data); +/** + * 设备产品专用查询 + * @param data + * @returns + */ +export const queryByDevice = (data:any) => server.post(`/alarm/record/device/_query`,data) + /** * 告警处理 */ @@ -49,4 +56,14 @@ export const queryHistoryList = (data:any) => server.post('/alarm/history/_query /** * 获取告警处理结果 */ -export const queryHandleHistory = (data:any) => server.post('/alarm/record/handle-history/_query',data); \ No newline at end of file +export const queryHandleHistory = (data:any) => server.post('/alarm/record/handle-history/_query',data); + +/** + * 获取告警日志(新) + */ +export const queryLogList = (alarmConfigId:any,data:any) => server.post(`/alarm/history/${alarmConfigId}/_query`,data) + +/** + * 查询无效数据 + */ +export const queryInvalidData = (data:any) => server.post('/message/preprocessor/invalid/_query',data) diff --git a/src/api/rule-engine/scene.ts b/src/api/rule-engine/scene.ts index 2fe75528..9fbe6435 100644 --- a/src/api/rule-engine/scene.ts +++ b/src/api/rule-engine/scene.ts @@ -27,4 +27,7 @@ export const queryBuiltInParams = (data: any, params?: any) => server.post(`/sce export const getParseTerm = (data: Record) => server.post(`/scene/parse-term-column`, data) -export const queryAlarmList = (data: Record) => server.post(`/alarm/config/_query/`, data) +export const queryAlarmPage = (data: Record) => server.post(`/alarm/config/_query`, data) + +export const queryAlarmList = (data: Record) => server.post(`/alarm/config/_query/no-paging`, data) +export const queryAlarmCount = (data: Record) => server.post(`/alarm/config/_count`, data) diff --git a/src/api/system/calendar.ts b/src/api/system/calendar.ts new file mode 100644 index 00000000..2b3b2cdd --- /dev/null +++ b/src/api/system/calendar.ts @@ -0,0 +1,17 @@ +import server from '@/utils/request'; +//编辑标签 +export const saveTag = (data:any) => server.patch('/calendar/tags',data) +//查询标签列表 +export const queryTags = () => server.get('/calendar/tags') +//删除标签 +export const deleteTags = (ids:any) => server.remove('/calendar/tags',{},{data:ids}) +//保存标签颜色 +export const saveTagsColor = (data:any) => server.post('/system/config/calendar-tag-color',data) +//查询标签颜色 +export const getTagsColor = () => server.get('/system/config/calendar-tag-color'); +//查询指定日期内的日历 +export const queryEvents = (dateFrom:any,dateTo:any) => server.get(`/calendar/${dateFrom}/${dateTo}`) +//批量保存指定日期的日历 +export const saveEvents = (data:any) => server.patch('/calendar',data) +//清空日历 +export const clearAll = () => server.remove('/calendar/mine/_all') \ No newline at end of file diff --git a/src/components/AMapComponent/index.vue b/src/components/AMapComponent/AMap.vue similarity index 100% rename from src/components/AMapComponent/index.vue rename to src/components/AMapComponent/AMap.vue diff --git a/src/components/AMapComponent/DistrictSearch.vue b/src/components/AMapComponent/DistrictSearch.vue new file mode 100644 index 00000000..d64d9654 --- /dev/null +++ b/src/components/AMapComponent/DistrictSearch.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/components/AMapComponent/GeoJson.vue b/src/components/AMapComponent/GeoJson.vue new file mode 100644 index 00000000..9b61b97f --- /dev/null +++ b/src/components/AMapComponent/GeoJson.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/AMapComponent/index.ts b/src/components/AMapComponent/index.ts new file mode 100644 index 00000000..d5ebf374 --- /dev/null +++ b/src/components/AMapComponent/index.ts @@ -0,0 +1,7 @@ +import AMap from './AMap.vue' + +export * from './useMap' +export { default as DistrictSearch } from './DistrictSearch.vue' +export { default as GeoJson } from './GeoJson.vue' + +export default AMap diff --git a/src/components/AMapComponent/useMap.ts b/src/components/AMapComponent/useMap.ts new file mode 100644 index 00000000..61a634c8 --- /dev/null +++ b/src/components/AMapComponent/useMap.ts @@ -0,0 +1,4 @@ +export const useMap = () => { + return inject('parentInstance') +} + diff --git a/src/components/AlarmLeveIcon/index.vue b/src/components/AlarmLeveIcon/index.vue new file mode 100644 index 00000000..c8b52ecd --- /dev/null +++ b/src/components/AlarmLeveIcon/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/components/BadgeStatus/color.ts b/src/components/BadgeStatus/color.ts index a6f8d8fa..d79c300a 100644 --- a/src/components/BadgeStatus/color.ts +++ b/src/components/BadgeStatus/color.ts @@ -5,12 +5,6 @@ const color = { 'success': '36, 178, 118', 'warning': '255, 144, 0', 'default': '102, 102, 102', - //告警颜色 - 'level1': '229, 0, 18', - 'level2': '255, 148, 87', - 'level3': '250, 189, 71', - 'level4': '153, 153, 153', - 'level5': '196, 196, 196' } export const getHexColor = (code: string, pe: number = 0.1) => { const _color = color[code] || color.default diff --git a/src/components/BatchDropdown/index.vue b/src/components/BatchDropdown/index.vue index 928bed9a..f7b17f28 100644 --- a/src/components/BatchDropdown/index.vue +++ b/src/components/BatchDropdown/index.vue @@ -53,6 +53,7 @@ diff --git a/src/components/CardSelect/RadioButton.vue b/src/components/CardSelect/RadioButton.vue new file mode 100644 index 00000000..48fb30fb --- /dev/null +++ b/src/components/CardSelect/RadioButton.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/CardSelect/index.ts b/src/components/CardSelect/index.ts new file mode 100644 index 00000000..a3abafb4 --- /dev/null +++ b/src/components/CardSelect/index.ts @@ -0,0 +1,11 @@ +import CardSelect from './CardSelect.vue'; +import type { App } from 'vue'; + +CardSelect.name = 'JCardSelect'; + +CardSelect.install = function (app: App) { + app.component('JCardSelect', CardSelect); + return app; +}; + +export default CardSelect; diff --git a/src/components/CheckButton/CheckButton.vue b/src/components/CheckButton/CheckButton.vue new file mode 100644 index 00000000..3746f451 --- /dev/null +++ b/src/components/CheckButton/CheckButton.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/components/CheckButton/index.ts b/src/components/CheckButton/index.ts new file mode 100644 index 00000000..ea647f55 --- /dev/null +++ b/src/components/CheckButton/index.ts @@ -0,0 +1,3 @@ +import CheckButton from "./CheckButton.vue"; + +export default CheckButton diff --git a/src/components/ConfirmModal/index.vue b/src/components/ConfirmModal/index.vue new file mode 100644 index 00000000..7d58d944 --- /dev/null +++ b/src/components/ConfirmModal/index.vue @@ -0,0 +1,76 @@ + + + + diff --git a/src/components/FRuleEditor-copy/Operator/index.vue b/src/components/FRuleEditor-copy/Operator/index.vue deleted file mode 100644 index 2fdce988..00000000 --- a/src/components/FRuleEditor-copy/Operator/index.vue +++ /dev/null @@ -1,163 +0,0 @@ - - - diff --git a/src/components/FRuleEditor/Debug/index.vue b/src/components/FRuleEditor/Debug/index.vue index 672da007..d21df3f9 100644 --- a/src/components/FRuleEditor/Debug/index.vue +++ b/src/components/FRuleEditor/Debug/index.vue @@ -3,6 +3,11 @@
+ -
{{ @@ -71,7 +38,7 @@ :pagination="false" bordered size="small" - :scroll="{ y: 200 }" + :scroll="{ y: 180 }" > @@ -56,8 +59,12 @@ const props = defineProps({ type: String, default: '', }, + tableData: { + type: Array, + default: [], + }, }); -const emits = defineEmits(['change']); +const emits = defineEmits(['change', 'addAll', 'cancelAll']); const channelId = props.data?.channelId; const instanceNumber = props.data?.configuration?.instanceNumber; @@ -70,8 +77,11 @@ const treeData = ref(); const treeAllData = ref(); const onLoadData = async () => { - spinning.value = true - const resp: any = await getBacnetObjectList(channelId, instanceNumber).finally(() => spinning.value = false); + spinning.value = true; + const resp: any = await getBacnetObjectList( + channelId, + instanceNumber, + ).finally(() => (spinning.value = false)); if (resp.status === 200) { treeData.value = resp.result.map((item: any) => { return { @@ -101,7 +111,7 @@ const handleData = (arr: any): any[] => { }); }; -const onCheck = ( info: any) => { +const onCheck = (info: any) => { const one: any = { ...info }; const list: any = []; const last: any = list.length ? list[list.length - 1] : undefined; @@ -175,27 +185,42 @@ const getPoint = async () => { if (res.status === 200) { selectKeys.value = res.result.map((item: any) => item.pointKey); } - // getScanOpcUAList(); }; -onMounted(() => { - getPoint(); - onLoadData(); -}); - -const getScanOpcUAList = async () => { - spinning.value = true; - const res: any = await getBacnetObjectList(channelId, instanceNumber); - treeAllData.value = res.result.map((item: any) => ({ - ...item, - key: item.id, - title: item.name, - disabled: item?.folder || false, - })); - spinning.value = false; +const allControl = () => { + if (props.tableData.length) { + emits('cancelAll'); + } else { + const allData = treeData.value?.map((i) => { + return { + features: { + value: (i?.features || []).includes('changedOnly'), + check: true, + }, + nodeId: + `${i?.objectId.type}:${i?.objectId.instanceNumber}` || '', + objectId: i?.objectId || {}, + name: i?.name || '', + propertyId: i?.propertyId || '', + valueType: i?.valueType || '', + accessModes: { + value: i?.accessModes || [], + check: true, + }, + type: i?.type, + configuration: { + ...i?.configuration, + interval: { + value: i?.configuration?.interval || 3000, + check: true, + }, + nodeId: i?.id, + }, + }; + }); + emits('addAll', allData); + } }; -// getScanOpcUAList(); - watch( () => isSelected.value, (value) => { @@ -220,6 +245,11 @@ watch( }, { deep: true }, ); + +onMounted(() => { + getPoint(); + onLoadData(); +}); diff --git a/src/views/DataCollect/Collector/Point/index.vue b/src/views/DataCollect/Collector/Point/index.vue index 20d484c1..2cf943ab 100644 --- a/src/views/DataCollect/Collector/Point/index.vue +++ b/src/views/DataCollect/Collector/Point/index.vue @@ -1,6 +1,10 @@ - + diff --git a/src/views/account/Center/components/BindThirdAccount/index.vue b/src/views/account/Center/components/BindThirdAccount/index.vue index 8e07e584..04620de2 100644 --- a/src/views/account/Center/components/BindThirdAccount/index.vue +++ b/src/views/account/Center/components/BindThirdAccount/index.vue @@ -29,13 +29,10 @@
- - 解除绑定 - + 解除绑定 { - unBind_api(id).then((resp) => { + const response = unBind_api(id) + response.then((resp) => { if (resp.status === 200) { onlyMessage('解绑成功', 'success'); getSsoBinds(); } }); + return response }; const clickBind = (id: string) => { window.open( diff --git a/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue b/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue index a31b86a9..577cd6ed 100644 --- a/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue +++ b/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue @@ -1,29 +1,64 @@ @@ -121,11 +120,10 @@ const handleSearch = async () => { } }; - -const expandedKeys = ref([]) +const expandedKeys = ref([]); const onCheck = (keys: string[], e: any) => { // console.log(expandedKeys.push(e)); - expandedKeys.value.push(e.node.id) + expandedKeys.value.push(e.node.id); checkedKeys.value = [...keys]; leftList.value = e?.checkedNodes || []; }; @@ -155,7 +153,6 @@ const getChannel = async () => { }; const onLoadData: TreeProps['loadData'] = (treeNode) => { - return new Promise(async (resolve) => { if (treeNode.dataRef?.children) { resolve(); diff --git a/src/views/device/Instance/Detail/EdgeMap/index.vue b/src/views/device/Instance/Detail/EdgeMap/index.vue index c3690030..be8caa67 100644 --- a/src/views/device/Instance/Detail/EdgeMap/index.vue +++ b/src/views/device/Instance/Detail/EdgeMap/index.vue @@ -106,68 +106,49 @@ @@ -252,7 +233,7 @@ const columns = [ const permissionStore = usePermissionStore(); const data: any = ref([]); -const isPermission = permissionStore.hasPermission('device/Instance:update'); +// const isPermission = permissionStore.hasPermission('device/Instance:update'); const current = ref(1); const pageSize = ref(10); @@ -348,20 +329,20 @@ const handleSearch = async () => { loading.value = false; }; -const unbind = async (id: string) => { +const unbind = (id: string) => { const _deviceId = instanceStore.current.id; if (id && _deviceId) { - const resp = await removeEdgeMap( - instanceStore.current?.parentId || '', - { - deviceId: _deviceId, - idList: [id], - }, - ); - if (resp.status === 200) { - onlyMessage('操作成功!', 'success'); - handleSearch(); - } + const response = removeEdgeMap(instanceStore.current?.parentId || '', { + deviceId: _deviceId, + idList: [id], + }); + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!', 'success'); + handleSearch(); + } + }); + return response; } }; @@ -415,7 +396,7 @@ const onSave = () => { }); }; -const onAction = async (record: any) => { +const onAction = (record: any) => { const array = (modelRef.dataSource || [])?.filter( (item: any) => item.channelId, ); @@ -430,14 +411,17 @@ const onAction = async (record: any) => { provider: array[0]?.provider, requestList: [...filterArray, arr], }; - const resp = await saveEdgeMap( + const response = saveEdgeMap( instanceStore.current.parentId || '', submitData, ); - if (resp.status === 200) { - onlyMessage('操作成功!', 'success'); - onRefresh(); - } + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!', 'success'); + onRefresh(); + } + }); + return response }; const onRefresh = async () => { diff --git a/src/views/device/Instance/Detail/Firmware/index.vue b/src/views/device/Instance/Detail/Firmware/index.vue new file mode 100644 index 00000000..a35dfcae --- /dev/null +++ b/src/views/device/Instance/Detail/Firmware/index.vue @@ -0,0 +1,193 @@ + + + + diff --git a/src/views/device/Instance/Detail/Function/components/Simple.vue b/src/views/device/Instance/Detail/Function/components/Simple.vue index f336564f..b80f812d 100644 --- a/src/views/device/Instance/Detail/Function/components/Simple.vue +++ b/src/views/device/Instance/Detail/Function/components/Simple.vue @@ -76,6 +76,11 @@ value: item.value, })) " + :extra="{ + style: { + zIndex: 1030 + } + }" /> @@ -245,6 +250,10 @@ const handleClear = (func: any) => { const onTabChange = (_key: string) => { executeResult.value = ''; }; + +const getPopupContainer = () => { + return document.body +} \ No newline at end of file + diff --git a/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue b/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue index e5d3870f..f105b1a2 100644 --- a/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue +++ b/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue @@ -24,12 +24,12 @@ import dayjs from 'dayjs'; import type { Dayjs } from 'dayjs'; import { PropType } from 'vue'; -type Props = [Dayjs, Dayjs] | undefined +type Props = [Dayjs, Dayjs] | undefined; const props = defineProps({ modelValue: { type: Object as PropType, - default: undefined + default: undefined, }, }); @@ -38,14 +38,12 @@ type Emits = { }; const emit = defineEmits(); - const radioValue = ref('today'); const dateValue = ref(); - const onRangeChange = (value: Props) => { emit('update:modelValue', value); radioValue.value = ''; -} +}; const getTime = (type: string): Props => { let st: number = 0; @@ -55,10 +53,10 @@ const getTime = (type: string): Props => { } else if (type === 'week') { st = dayjs().subtract(6, 'days').valueOf(); } else if (type === 'month') { - st = dayjs().subtract(29, 'days').valueOf(); + st = dayjs().subtract(30, 'days').valueOf(); } - return [dayjs(st), dayjs(et)] -} + return [dayjs(st), dayjs(et)]; +}; const onRadioChange = (e: any) => { const value: string = e.target.value; @@ -67,15 +65,15 @@ const onRadioChange = (e: any) => { }; onMounted(() => { - radioValue.value = 'today' + radioValue.value = 'today'; emit('update:modelValue', getTime('today')); -}) +}); watch( () => props.modelValue, (newVal: Props) => { - dateValue.value = newVal + dateValue.value = newVal; }, { immediate: true, deep: true }, ); - \ No newline at end of file + diff --git a/src/views/device/Instance/Detail/Running/Property/Detail/index.vue b/src/views/device/Instance/Detail/Running/Property/Detail/index.vue index aff79dd5..b1adcd17 100644 --- a/src/views/device/Instance/Detail/Running/Property/Detail/index.vue +++ b/src/views/device/Instance/Detail/Running/Property/Detail/index.vue @@ -1,15 +1,32 @@ - + -
+
{ statusRef.value = getWebSocket( `instance-editor-info-status-${id}`, @@ -193,8 +209,10 @@ const getStatus = (id: string) => { { deviceId: id, }, - ).subscribe((message:any) => { - if(message.payload?.value?.type !== instanceStore.current?.state.value){ + ).subscribe((message: any) => { + if ( + message.payload?.value?.type !== instanceStore.current?.state.value + ) { instanceStore.refresh(id); } }); @@ -202,6 +220,12 @@ const getStatus = (id: string) => { const getDetail = () => { const keys = list.value.map((i) => i.key); + if (permissionStore.hasPermission('rule-engine/Alarm/Log:view')) { + list.value.push({ + key: 'AlarmRecord', + tab: '预处理数据', + }); + } if ( instanceStore.current?.protocol && !['modbus-tcp', 'opc-ua'].includes(instanceStore.current?.protocol) && @@ -245,10 +269,10 @@ const getDetail = () => { instanceStore.current?.protocol === 'collector-gateway' && !keys.includes('GateWay') ) { - list.value.push({ - key: 'GateWay', - tab: '数采映射', - }); + list.value.push({ + key: 'GateWay', + tab: '数采映射', + }); } if ( instanceStore.current?.deviceType?.value === 'gateway' && @@ -277,24 +301,26 @@ const getDetail = () => { ) && !keys.includes('MetadataMap') ) { - list.value.push({ key: 'MetadataMap', tab: '物模型映射'}); + list.value.push({ key: 'MetadataMap', tab: '物模型映射' }); } }; const initPage = async (newId: any) => { - await instanceStore.refresh(String(newId)); - getStatus(String(newId)); - list.value = [...initList]; - getDetail(); - instanceStore.tabActiveKey = 'Info'; -} + await instanceStore.refresh(String(newId)); + getStatus(String(newId)); + list.value = [...initList]; + getDetail(); + instanceStore.tabActiveKey = 'Info'; +}; onBeforeRouteUpdate((to: any) => { - if (to.params?.id!==instanceStore.current.id && to.name === 'device/Instance/Detail') { - initPage(to.params?.id) - } -}) - + if ( + to.params?.id !== instanceStore.current.id && + to.name === 'device/Instance/Detail' + ) { + initPage(to.params?.id); + } +}); const getDetailFn = async () => { const _id = route.params?.id; @@ -303,8 +329,11 @@ const getDetailFn = async () => { getStatus(String(_id)); list.value = [...initList]; getDetail(); + instanceStore.tabActiveKey = routerParams.params.value.tab || 'Info'; + }else{ + instanceStore.tabActiveKey = routerParams.params.value.tab || 'Info'; } - instanceStore.tabActiveKey = routerParams.params.value.tab || 'Info'; + }; onMounted(() => { @@ -313,31 +342,37 @@ onMounted(() => { const onTabChange = (e: string) => { if (instanceStore.tabActiveKey === 'Metadata') { - EventEmitter.emit('MetadataTabs', () => { - instanceStore.tabActiveKey = e; - }) + EventEmitter.emit('MetadataTabs', () => { + instanceStore.tabActiveKey = e; + }); } else { - instanceStore.tabActiveKey = e; + instanceStore.tabActiveKey = e; } }; -const handleAction = async () => { +const handleAction = () => { if (instanceStore.current?.id) { - const resp = await _deploy(instanceStore.current?.id); - if (resp.status === 200) { - onlyMessage('操作成功!'); - instanceStore.refresh(instanceStore.current?.id); - } + const response = _deploy(instanceStore.current?.id); + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!'); + instanceStore.refresh(instanceStore.current?.id); + } + }); + return response; } }; -const handleDisconnect = async () => { +const handleDisconnect = () => { if (instanceStore.current?.id) { - const resp = await _disconnect(instanceStore.current?.id); - if (resp.status === 200) { - onlyMessage('操作成功!'); - instanceStore.refresh(instanceStore.current?.id); - } + const response = _disconnect(instanceStore.current?.id); + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!'); + instanceStore.refresh(instanceStore.current?.id); + } + }); + return response; } }; @@ -355,7 +390,7 @@ const jumpProduct = () => { }; onUnmounted(() => { - instanceStore.current = {} as any + instanceStore.current = {} as any; statusRef.value && statusRef.value.unsubscribe(); }); @@ -368,4 +403,4 @@ onUnmounted(() => { overflow: hidden; text-overflow: ellipsis; } - \ No newline at end of file + diff --git a/src/views/device/Instance/index.vue b/src/views/device/Instance/index.vue index e9fcfe4a..681d6395 100644 --- a/src/views/device/Instance/index.vue +++ b/src/views/device/Instance/index.vue @@ -42,112 +42,6 @@ :actions="batchActions" @change="onCheckChange" /> - \ No newline at end of file + diff --git a/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue b/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue index 66661098..84a57060 100644 --- a/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue +++ b/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue @@ -30,6 +30,7 @@ {{ readTypeText }} + {{ settingData[data.expands?.storageType] }} \ No newline at end of file + diff --git a/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue b/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue index 370dedb6..075bdade 100644 --- a/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue +++ b/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue @@ -1,29 +1,44 @@