diff --git a/src/api/device/category.ts b/src/api/device/category.ts new file mode 100644 index 00000000..d18e3587 --- /dev/null +++ b/src/api/device/category.ts @@ -0,0 +1,25 @@ +// 产品分类 +import server from '@/utils/request' +import { CategoryItem } from '@/views/device/Category/typings' +/** + * 查询产品分类树形数据 + */ + +export const queryTree = (params?: Record) => server.post('/device/category/_tree', params) + +/** + * 保存树形数据 + */ + export const saveTree = (data: any) =>server.post('/device/category', data) + + + /** + * 根据Id修改 + */ + export const updateTree = (data: any, id:string) => server.put(`/device/category/${id}`, data) + + /** + * 根据Id删除数据 + */ + + export const deleteTree = (id:string) => server.remove(`/device/category/${id}`) \ No newline at end of file diff --git a/src/api/home.js b/src/api/home.js deleted file mode 100644 index ea3aa339..00000000 --- a/src/api/home.js +++ /dev/null @@ -1,8 +0,0 @@ -import server from '@/utils/request'; - -// 设备数量 -export const getDeviceCount_api = () => server.get(`/device/instance/_count`); -// 产品数量 -export const getProductCount_api = (data) => server.post(`/device-product/_count`, data); -// 查询产品列表 -export const getProductList_api = (data) => server.get(`/device/product/_query/no-paging?paging=false`, data); diff --git a/src/api/home.ts b/src/api/home.ts new file mode 100644 index 00000000..2164e2f5 --- /dev/null +++ b/src/api/home.ts @@ -0,0 +1,15 @@ +import server from '@/utils/request'; + +// 当前登录用户权限信息 +export const getMe_api = () => server.get(`/authorize/me`); +// 设置登录用户选择的页面 +export const setView_api = (data:object) => server.patch(`/user/settings/view/user`, data); +// 当前登录用户选择的页面 +export const getView_api = () => server.get(`/user/settings/view/user`); + +// 设备数量 +export const getDeviceCount_api = () => server.get(`/device/instance/_count`); +// 产品数量 +export const getProductCount_api = (data:object) => server.post(`/device-product/_count`, data); +// 查询产品列表 +export const getProductList_api = (data:object) => server.get(`/device/product/_query/no-paging?paging=false`, data); diff --git a/src/api/system/permission.ts b/src/api/system/permission.ts new file mode 100644 index 00000000..978e4b26 --- /dev/null +++ b/src/api/system/permission.ts @@ -0,0 +1,6 @@ +import server from '@/utils/request'; + +// 获取权限列表 +export const getPermission_api = (data:object) => server.post(`/permission/_query/`,data); +// 修改权限信息 +export const editPermission_api = (data:object) => server.patch(`/permission`,data); \ No newline at end of file diff --git a/src/components/AIcon/index.tsx b/src/components/AIcon/index.tsx index 7d51d1ba..95f18f67 100644 --- a/src/components/AIcon/index.tsx +++ b/src/components/AIcon/index.tsx @@ -27,6 +27,7 @@ const iconKeys = [ 'SyncOutlined', 'ExclamationCircleOutlined', 'UploadOutlined', + 'PlusCircleOutlined', 'MenuUnfoldOutlined', 'MenuFoldOutlined', 'QuestionCircleOutlined' diff --git a/src/router/menu.ts b/src/router/menu.ts index 27d4f961..78683b84 100644 --- a/src/router/menu.ts +++ b/src/router/menu.ts @@ -109,6 +109,10 @@ export default [ path:'/system/Role/detail/:id', component: ()=>import('@/views/system/Role/Detail/index.vue') }, + { + path:'/system/Permission', + component: ()=>import('@/views/system/Permission/index.vue') + }, // 初始化 { path: '/init-home', @@ -116,9 +120,13 @@ export default [ }, // 物联卡 iot-card { - path: '/iot-card/home', + path: '/iot-card/Home', component: () => import('@/views/iot-card/Home/index.vue') }, + { + path: '/iot-card/Dashboard', + component: () => import('@/views/iot-card/Dashboard/index.vue') + }, // 北向输出 { path: '/northbound/DuerOS', @@ -128,4 +136,10 @@ export default [ path: '/northbound/AliCloud', component: () => import('@/views/northbound/AliCloud/index.vue') }, + + // 产品分类 + { + path: '/iot/device/Category', + component: () => import('@/views/device/Category/index.vue') + } ] \ No newline at end of file diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 3e5df69b..30e21216 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,6 +1,7 @@ import moment from "moment"; import { LocalStore } from "./comm"; import { TOKEN_KEY } from "./variable"; +import {SystemConst} from './consts'; /** * 把数据下载成JSON @@ -52,4 +53,6 @@ export const downloadObject = (record: Record, fileName: string, fo document.body.appendChild(formElement); formElement.submit(); document.body.removeChild(formElement); -}; \ No newline at end of file +}; +// 是否不是community版本 +export const isNoCommunity = !(localStorage.getItem(SystemConst.VERSION_CODE) === 'community'); \ No newline at end of file diff --git a/src/views/device/Category/components/modifyModal/index.vue b/src/views/device/Category/components/modifyModal/index.vue new file mode 100644 index 00000000..ea420fa9 --- /dev/null +++ b/src/views/device/Category/components/modifyModal/index.vue @@ -0,0 +1,203 @@ + + + + diff --git a/src/views/device/Category/index.vue b/src/views/device/Category/index.vue new file mode 100644 index 00000000..f97ba614 --- /dev/null +++ b/src/views/device/Category/index.vue @@ -0,0 +1,221 @@ + + + + diff --git a/src/views/device/Category/typings.d.ts b/src/views/device/Category/typings.d.ts new file mode 100644 index 00000000..36656078 --- /dev/null +++ b/src/views/device/Category/typings.d.ts @@ -0,0 +1,10 @@ +export type CategoryItem = { + id: string; + name: string; + level: number; + key: string; + parentId: string; + path: string; + sortIndex: number; + children?: Category[]; +}; diff --git a/src/views/home/components/InitHome/index.vue b/src/views/home/components/InitHome/index.vue index 57be6d23..888aae8a 100644 --- a/src/views/home/components/InitHome/index.vue +++ b/src/views/home/components/InitHome/index.vue @@ -7,37 +7,47 @@ - 确定 + 确定 diff --git a/src/views/iot-card/components/LineChart.vue b/src/views/iot-card/components/LineChart.vue new file mode 100644 index 00000000..9d22543b --- /dev/null +++ b/src/views/iot-card/components/LineChart.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/system/Permission/components/EditDialog.vue b/src/views/system/Permission/components/EditDialog.vue new file mode 100644 index 00000000..d78ac2bb --- /dev/null +++ b/src/views/system/Permission/components/EditDialog.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/src/views/system/Permission/components/StatusLabel.vue b/src/views/system/Permission/components/StatusLabel.vue new file mode 100644 index 00000000..7641fea2 --- /dev/null +++ b/src/views/system/Permission/components/StatusLabel.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/views/system/Permission/index.vue b/src/views/system/Permission/index.vue new file mode 100644 index 00000000..ec763acd --- /dev/null +++ b/src/views/system/Permission/index.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/src/views/system/Role/Detail/index.vue b/src/views/system/Role/Detail/index.vue index 1c58b369..8a907baa 100644 --- a/src/views/system/Role/Detail/index.vue +++ b/src/views/system/Role/Detail/index.vue @@ -1,6 +1,5 @@ @@ -59,8 +59,8 @@ import { import AddDialog from './components/AddDialog.vue'; import { getRoleList_api, delRole_api } from '@/api/system/role'; import { message } from 'ant-design-vue'; - -const router = useRouter() +const addDialogRef = ref(); // 新增弹窗实例 +const router = useRouter(); // 筛选 const query = reactive({ columns: [ @@ -122,24 +122,21 @@ const table = reactive({ ], tableData: [], clickAdd: () => { - dialog.openAdd += 1; + addDialogRef.value.openDialog(true, {}) }, clickDel: (row: any) => { - delRole_api(row.id).then((resp:any)=>{ - if(resp.status === 200){ - tableRef.value?.reload() - message.success('操作成功!') + delRole_api(row.id).then((resp: any) => { + if (resp.status === 200) { + tableRef.value?.reload(); + message.success('操作成功!'); } - }) + }); }, clickEdit: (row: any) => { - router.push(`/system/Role/detail/${row.id}`) + router.push(`/system/Role/detail/${row.id}`); }, }); -// 弹窗相关 -const dialog = reactive({ - openAdd: 0, -}); +