diff --git a/package.json b/package.json index 26e555d8..f7040682 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ "unplugin-auto-import": "^0.12.1", "unplugin-vue-components": "^0.22.12", "vue": "^3.2.45", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-markdown-it": "^1.0.10" }, "devDependencies": { "@commitlint/cli": "^17.4.1", diff --git a/src/api/device/instance.ts b/src/api/device/instance.ts index dd91bf13..8c3c964f 100644 --- a/src/api/device/instance.ts +++ b/src/api/device/instance.ts @@ -1,4 +1,5 @@ import server from '@/utils/request' +import { DeviceInstance } from '@/views/device/instance/typings' /** * 删除设备物模型 @@ -13,4 +14,11 @@ export const deleteMetadata = (deviceId: string) => server.remove(`/device-insta * @param data 物模型 * @returns */ -export const saveMetadata = (id: string, data: string) => server.put(`/device/instance/${id}/metadata`, data) \ No newline at end of file +export const saveMetadata = (id: string, data: string) => server.put(`/device/instance/${id}/metadata`, data) + +/** + * 根据设备ID获取设备详情 + * @param id 设备ID + * @returns 设备详情 + */ +export const detail = (id: string) => server.get(`/device-instance/${id}/detail`) \ No newline at end of file diff --git a/src/api/device/product.ts b/src/api/device/product.ts index 53183eb3..68f8b787 100644 --- a/src/api/device/product.ts +++ b/src/api/device/product.ts @@ -1,5 +1,5 @@ import server from '@/utils/request' -import type { DeviceMetadata } from '@/views/device/Product/typings' +import { DeviceMetadata, ProductItem } from '@/views/device/Product/typings' /** * 根据条件查询产品(不带翻页) @@ -23,4 +23,17 @@ export const convertMetadata = (direction: 'from' | 'to', type: string, data: an * @param data 产品数据 * @returns */ -export const modify = (id: string, data: any) => server.put(`/device-product/${id}`, data) \ No newline at end of file +export const modify = (id: string, data: any) => server.put(`/device-product/${id}`, data) + +/** + * + * @returns + */ +export const getCodecs = () => server.get<{id: string, name: string}>('/device/product/metadata/codecs') + +/** + * 根据产品ID获取产品详情 + * @param id 产品ID + * @returns + */ +export const detail = (id: string) => server.get(`/device-product/${id}`) \ No newline at end of file diff --git a/src/api/initHome.ts b/src/api/initHome.ts index 60fa7e56..658a3394 100644 --- a/src/api/initHome.ts +++ b/src/api/initHome.ts @@ -1,15 +1,15 @@ import server from '@/utils/request'; // 更新全部菜单 -export const updateMenus = (data: any) => server +export const updateMenus = (data: any) => server.path(`/menu/iot/_all`, data) // 添加角色 -export const addRole = (data: any) => server.post(`/role`) +export const addRole = (data: any) => server.post(`/role`, data) //更新权限菜单 export const getRoleMenu = (id: string) => server.get(`/menu/role/${id}/_grant/tree`) //更新权限菜单 -export const updateRoleMenu = (id: string, data: any) => server.put(`/menu/role/${id}/_grant`) +export const updateRoleMenu = (id: string, data: any) => server.put(`/menu/role/${id}/_grant`, data) // 记录初始化 export const saveInit = () => server.post(`/user/settings/init`,{ init: true },) @@ -22,4 +22,34 @@ export const getInit = () => server.get(`/user/settings/init`) export const getSystemPermission = () =>server.get(`/system/resources/permission`) // 保存基础信息 - export const save = (data?: any) => server.post('/system/config/scope/_save') \ No newline at end of file + export const save = (data?: any) => server.post('/system/config/scope/_save',data) + + // 查询对应协议下的本地端口数据 + export const getResourcesCurrent = () => server.get('/network/resources/alive/_current') + +// 保存网络组件 +export const saveNetwork = (data: any) => server.post(`/network/config`, data) + +// 保存协议 +export const saveProtocol = () => server.post(`/protocol/default-protocol/_save`,) + +// 新增设备接入网关 +export const saveAccessConfig = (data: any) => server.post(`/gateway/device`, data) + +// 新增产品 +export const saveProduct = (data: any) => server.post(`/device/product`,data) + +// 新增设备 +export const saveDevice = (data: any) => server.post(`/device/instance`,data) + +// 启用设备 +export const deployDevice = (deviceId: string, params?: any) => server.post(`/device-instance/${deviceId}/deploy`,params,) +export const changeDeploy= (id: string) => server.post(`/device-product/${id}/deploy`) + +// 查询保存后的数据 +export const detail = (data?: any) => server.post(`/system/config/scopes`, data) + +// 获取协议 +export const getProtocol = () =>server.get(`/protocol/_query/no-paging?paging=false`) + +// 上传文件 diff --git a/src/api/iot-card/home.ts b/src/api/iot-card/home.ts new file mode 100644 index 00000000..d8b5e291 --- /dev/null +++ b/src/api/iot-card/home.ts @@ -0,0 +1,6 @@ +import server from '@/utils/request' + +// 查询特定天数流量数据 +export const queryFlow = (beginTime: any, endTime: any, data: any) => server.post(`/network/flow/_query/${beginTime}/${endTime}`, data) + +export const list = (data: any) => server.post(`/network/card/_query`, data) \ No newline at end of file diff --git a/src/components/CardBox/index.vue b/src/components/CardBox/index.vue index 1cc26f6e..4da3e72c 100644 --- a/src/components/CardBox/index.vue +++ b/src/components/CardBox/index.vue @@ -54,31 +54,24 @@ delete: item.key === 'delete', }" > + - - + @@ -291,10 +284,10 @@ const handleClick = () => { display: flex; flex-grow: 1; - > span, - & button { - width: 100%; - border-radius: 0; + & > span, + button { + width: 100% !important; + border-radius: 0 !important; } button { @@ -372,9 +365,9 @@ const handleClick = () => { } } - :deep(.ant-tooltip-disabled-compatible-wrapper) { - width: 100%; - } + // :deep(.ant-tooltip-disabled-compatible-wrapper) { + // width: 100%; + // } } } } diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx index 38e2e6af..915657c7 100644 --- a/src/components/Table/index.tsx +++ b/src/components/Table/index.tsx @@ -50,11 +50,20 @@ export interface JTableProps extends TableProps{ pageIndex: number; }; model?: keyof typeof ModelEnum | undefined; // 显示table还是card - actions?: ActionsType[]; + // actions?: ActionsType[]; noPagination?: boolean; rowSelection?: TableProps['rowSelection']; cardProps?: Record; dataSource?: Record[]; + gridColumn: number; + /** + * 用于不同分辨率 + * gridColumns[0] 1366 ~ 1440 分辨率; + * gridColumns[1] 1440 ~ 1600 分辨率; + * gridColumns[2] > 1600 分辨率; + */ + gridColumns?: number[]; + alertRender?: boolean; } const JTable = defineComponent({ @@ -87,10 +96,10 @@ const JTable = defineComponent({ type: [String, undefined], default: undefined }, - actions: { - type: Array as PropType, - default: () => [] - }, + // actions: { + // type: Array as PropType, + // default: () => [] + // }, noPagination: { type: Boolean, default: false @@ -106,12 +115,24 @@ const JTable = defineComponent({ dataSource: { type: Array, default: () => [] + }, + gridColumns: { + type: Array as PropType, + default: [2, 3, 4] + }, + gridColumn: { + type: Number, + default: 4 + }, + alertRender: { + type: Boolean, + default: true } } as any, setup(props: JTableProps ,{ slots, emit }){ const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE const _model = ref(props.model ? props.model : ModelEnum.CARD); // 模式切换 - const column = ref(4); + const column = ref(props.gridColumn || 4); const _dataSource = ref[]>([]) const pageIndex = ref(0) const pageSize = ref(6) @@ -119,9 +140,20 @@ const JTable = defineComponent({ const _columns = ref(props?.columns || []) const loading = ref(true) - // alert关闭,取消选择 - const handleAlertClose = () => { - emit('cancelSelect') + /** + * 监听宽度,计算显示卡片个数 + */ + const windowChange = () => { + if (window.innerWidth <= 1440) { + const _column = props.gridColumn && props.gridColumn < 2 ? props.gridColumn : 2; + column.value = props.gridColumns ? props.gridColumns[0] : _column + } else if (window.innerWidth > 1440 && window.innerWidth <= 1600) { + const _column = props.gridColumn && props.gridColumn < 3 ? props.gridColumn : 3; + column.value = props.gridColumns ? props.gridColumns[1] : _column + } else if (window.innerWidth > 1600) { + const _column = props.gridColumn && props.gridColumn < 4 ? props.gridColumn : 4; + column.value = props.gridColumns ? props.gridColumns[2] : _column + } } /** @@ -153,13 +185,22 @@ const JTable = defineComponent({ } else { _dataSource.value = props?.dataSource || [] } - loading.value = false } watchEffect(() => { handleSearch(props.params) }) + + onMounted(() => { + window.onresize = () => { + windowChange() + } + }) + + onUnmounted(() => { + window.onresize = null + }) return () =>
@@ -184,12 +225,14 @@ const JTable = defineComponent({ {/* content */}
{ - props?.rowSelection && props?.rowSelection?.selectedRowKeys && props.rowSelection.selectedRowKeys?.length ? + props.alertRender && props?.rowSelection && props?.rowSelection?.selectedRowKeys && props.rowSelection.selectedRowKeys?.length ?
{ + emit('cancelSelect') + }} closeText={取消选择} />
: null @@ -205,8 +248,10 @@ const JTable = defineComponent({ > { _dataSource.value.map(item => slots.card ? -
{slots.card({row: item, actions: props?.actions || []})}
- : null) +
+ {slots.card(item)} +
: null + ) }
:
@@ -225,7 +270,7 @@ const JTable = defineComponent({ const {column, record} = dt; if((column?.key || column?.dataIndex) && column?.scopedSlots && (slots?.[column?.dataIndex] || slots?.[column?.key])) { const _key = column?.key || column?.dataIndex - return slots?.[_key]!({row: record, actions: props.actions}) + return slots?.[_key]!(record) } else { return record?.[column?.dataIndex] || '' } diff --git a/src/components/Table/index.vue b/src/components/Table/index.vue index 274d5d3b..d596666f 100644 --- a/src/components/Table/index.vue +++ b/src/components/Table/index.vue @@ -15,7 +15,7 @@
-
+
@@ -65,10 +62,10 @@ const handleOk = () => { watch( () => props.openNumber, () => { + visible.value = true; clickReset(); getOptions(); clickSearch(); - visible.value = true; }, ); @@ -122,4 +119,11 @@ const selectItem: deviceInfo | {} = {}; const getList = () => {}; - + diff --git a/src/views/home/index.vue b/src/views/home/index.vue index b0229d95..7129a745 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -6,8 +6,7 @@ - - +
@@ -17,7 +16,6 @@ import InitHome from './components/InitHome/index.vue'; import DeviceHome from './components/DeviceHome/index.vue'; import DevOpsHome from './components/DevOpsHome/index.vue'; import ComprehensiveHome from './components/ComprehensiveHome/index.vue'; -import ApiPage from '@/views/system/apiPage/index.vue' diff --git a/src/views/init-home/data/interface.ts b/src/views/init-home/data/interface.ts index 54f7b41f..adb411c4 100644 --- a/src/views/init-home/data/interface.ts +++ b/src/views/init-home/data/interface.ts @@ -6,7 +6,7 @@ export interface modalState { port: string; // 本地端口 publicHost: string; // 公网地址 publicPort: number | null; // 公网端口 - rules: Record; + } /**基本信息表单 */ @@ -21,17 +21,26 @@ export interface formState { } /** - * logo上传表单 + * 图片上传表单 */ export interface logoState { logoValue: string; logoLoading: boolean; + backLoading: boolean; + iconLoading: boolean; inLogo: boolean; inIcon: boolean; inBackground: boolean; iconValue: string; backValue: string; + backSize: number; + logoSize: number; + imageTypes:Array; + iconTypes: Array, + beforeLogoUpload:(file: UploadProps['beforeUpload']) => void handleChangeLogo:(info: UploadChangeParam ) => void beforeBackUpload:(file: UploadProps['beforeUpload']) => void changeBackUpload:(info: UploadChangeParam ) => void + beforeIconUpload:(file: UploadProps['beforeUpload']) => void + changeIconUpload:(info: UploadChangeParam ) => void } diff --git a/src/views/init-home/index.vue b/src/views/init-home/index.vue index 56f0819a..865b088a 100644 --- a/src/views/init-home/index.vue +++ b/src/views/init-home/index.vue @@ -109,16 +109,44 @@ class="upload-image-border-logo" >