Showing
5 changed files
with
69 additions
and
3 deletions
| @@ -36,6 +36,10 @@ enum DeviceManagerApi { | @@ -36,6 +36,10 @@ enum DeviceManagerApi { | ||
| 36 | GATEWAY_DEVICE = '/device/gateway/list', | 36 | GATEWAY_DEVICE = '/device/gateway/list', | 
| 37 | 37 | ||
| 38 | DEVICE_STATE_LOG_URL = '/device/state/log', | 38 | DEVICE_STATE_LOG_URL = '/device/state/log', | 
| 39 | + | ||
| 40 | + DEVICE_PUBLIC = '/customer/public/device', | ||
| 41 | + | ||
| 42 | + DEVICE_PRIVATE = '/customer/device', | ||
| 39 | } | 43 | } | 
| 40 | 44 | ||
| 41 | export const devicePage = (params: DeviceQueryParam) => { | 45 | export const devicePage = (params: DeviceQueryParam) => { | 
| @@ -308,3 +312,21 @@ export const deviceStateLogPost = (data) => { | @@ -308,3 +312,21 @@ export const deviceStateLogPost = (data) => { | ||
| 308 | // } | 312 | // } | 
| 309 | ); | 313 | ); | 
| 310 | }; | 314 | }; | 
| 315 | + | ||
| 316 | +export const publicDevice = (tbDeviceId: string) => { | ||
| 317 | + return defHttp.post( | ||
| 318 | + { | ||
| 319 | + url: `${DeviceManagerApi.DEVICE_PUBLIC}/${tbDeviceId}`, | ||
| 320 | + }, | ||
| 321 | + { joinPrefix: false } | ||
| 322 | + ); | ||
| 323 | +}; | ||
| 324 | + | ||
| 325 | +export const privateDevice = (tbDeviceId: string) => { | ||
| 326 | + return defHttp.delete( | ||
| 327 | + { | ||
| 328 | + url: `${DeviceManagerApi.DEVICE_PRIVATE}/${tbDeviceId}`, | ||
| 329 | + }, | ||
| 330 | + { joinPrefix: false } | ||
| 331 | + ); | ||
| 332 | +}; | 
| @@ -186,6 +186,9 @@ export interface DeviceRecord { | @@ -186,6 +186,9 @@ export interface DeviceRecord { | ||
| 186 | name: string; | 186 | name: string; | 
| 187 | transportType: string; | 187 | transportType: string; | 
| 188 | }; | 188 | }; | 
| 189 | + customerAdditionalInfo?: { | ||
| 190 | + isPublic?: boolean; | ||
| 191 | + }; | ||
| 189 | } | 192 | } | 
| 190 | 193 | ||
| 191 | export interface DeviceModelOfMatterAttrs { | 194 | export interface DeviceModelOfMatterAttrs { | 
| @@ -15,6 +15,8 @@ export enum ConfigurationPermission { | @@ -15,6 +15,8 @@ export enum ConfigurationPermission { | ||
| 15 | DELETE = 'api:yt:configuration:center:delete', | 15 | DELETE = 'api:yt:configuration:center:delete', | 
| 16 | DESIGN = 'api:yt:configuration:center:get_configuration_info:design', | 16 | DESIGN = 'api:yt:configuration:center:get_configuration_info:design', | 
| 17 | PREVIEW = 'api:yt:configuration:center:get_configuration_info:preview', | 17 | PREVIEW = 'api:yt:configuration:center:get_configuration_info:preview', | 
| 18 | + SHARE = 'api:yt:configuration:center:share', | ||
| 19 | + UN_SHARE = 'api:yt:configuration:center:monopoly', | ||
| 18 | } | 20 | } | 
| 19 | 21 | ||
| 20 | export const PC_DEFAULT_CONTENT = | 22 | export const PC_DEFAULT_CONTENT = | 
| 1 | import { formatToDate } from '/@/utils/dateUtil'; | 1 | import { formatToDate } from '/@/utils/dateUtil'; | 
| 2 | import { BasicColumn } from '/@/components/Table'; | 2 | import { BasicColumn } from '/@/components/Table'; | 
| 3 | import { FormSchema } from '/@/components/Table'; | 3 | import { FormSchema } from '/@/components/Table'; | 
| 4 | -import { DeviceTypeEnum, DeviceState } from '/@/api/device/model/deviceModel'; | 4 | +import { DeviceTypeEnum, DeviceState, DeviceRecord } from '/@/api/device/model/deviceModel'; | 
| 5 | import { deviceProfile } from '/@/api/device/deviceManager'; | 5 | import { deviceProfile } from '/@/api/device/deviceManager'; | 
| 6 | +import { h } from 'vue'; | ||
| 7 | +import { Tag } from 'ant-design-vue'; | ||
| 6 | 8 | ||
| 7 | // 表格列数据 | 9 | // 表格列数据 | 
| 8 | export const columns: BasicColumn[] = [ | 10 | export const columns: BasicColumn[] = [ | 
| @@ -50,9 +52,13 @@ export const columns: BasicColumn[] = [ | @@ -50,9 +52,13 @@ export const columns: BasicColumn[] = [ | ||
| 50 | width: 100, | 52 | width: 100, | 
| 51 | }, | 53 | }, | 
| 52 | { | 54 | { | 
| 53 | - title: '标签', | ||
| 54 | - dataIndex: 'label', | 55 | + title: '公开', | 
| 56 | + dataIndex: 'public', | ||
| 55 | width: 100, | 57 | width: 100, | 
| 58 | + customRender({ record }: { record: DeviceRecord }) { | ||
| 59 | + const flag = record?.customerAdditionalInfo?.isPublic; | ||
| 60 | + return h(Tag, { color: flag ? 'blue' : 'orange' }, () => (flag ? '公开' : '私有')); | ||
| 61 | + }, | ||
| 56 | }, | 62 | }, | 
| 57 | { | 63 | { | 
| 58 | title: '最后连接时间', | 64 | title: '最后连接时间', | 
| @@ -146,6 +146,13 @@ | @@ -146,6 +146,13 @@ | ||
| 146 | onClick: handleDispatchCustomer.bind(null, record), | 146 | onClick: handleDispatchCustomer.bind(null, record), | 
| 147 | }, | 147 | }, | 
| 148 | { | 148 | { | 
| 149 | + label: record?.customerAdditionalInfo?.isPublic ? '私有' : '公开', | ||
| 150 | + icon: record?.customerAdditionalInfo?.isPublic | ||
| 151 | + ? 'ant-design:lock-outlined' | ||
| 152 | + : 'ant-design:unlock-outlined', | ||
| 153 | + onClick: handlePublicDevice.bind(null, record), | ||
| 154 | + }, | ||
| 155 | + { | ||
| 149 | label: '上下线记录', | 156 | label: '上下线记录', | 
| 150 | icon: 'ant-design:rise-outlined', | 157 | icon: 'ant-design:rise-outlined', | 
| 151 | onClick: handleUpAndDownRecord.bind(null, record), | 158 | onClick: handleUpAndDownRecord.bind(null, record), | 
| @@ -198,6 +205,8 @@ | @@ -198,6 +205,8 @@ | ||
| 198 | checkDeviceOccupied, | 205 | checkDeviceOccupied, | 
| 199 | cancelDispatchCustomer, | 206 | cancelDispatchCustomer, | 
| 200 | getGATEWAY, | 207 | getGATEWAY, | 
| 208 | + privateDevice, | ||
| 209 | + publicDevice, | ||
| 201 | } from '/@/api/device/deviceManager'; | 210 | } from '/@/api/device/deviceManager'; | 
| 202 | import { PageEnum } from '/@/enums/pageEnum'; | 211 | import { PageEnum } from '/@/enums/pageEnum'; | 
| 203 | import { useGo } from '/@/hooks/web/usePage'; | 212 | import { useGo } from '/@/hooks/web/usePage'; | 
| @@ -218,6 +227,7 @@ | @@ -218,6 +227,7 @@ | ||
| 218 | import { Authority } from '/@/components/Authority'; | 227 | import { Authority } from '/@/components/Authority'; | 
| 219 | import { useRoute, useRouter } from 'vue-router'; | 228 | import { useRoute, useRouter } from 'vue-router'; | 
| 220 | import { useBatchOperation } from '/@/utils/useBatchOperation'; | 229 | import { useBatchOperation } from '/@/utils/useBatchOperation'; | 
| 230 | + import { useSyncConfirm } from '/@/hooks/component/useSyncConfirm'; | ||
| 221 | 231 | ||
| 222 | export default defineComponent({ | 232 | export default defineComponent({ | 
| 223 | name: 'DeviceManagement', | 233 | name: 'DeviceManagement', | 
| @@ -440,6 +450,28 @@ | @@ -440,6 +450,28 @@ | ||
| 440 | reload(); | 450 | reload(); | 
| 441 | }; | 451 | }; | 
| 442 | 452 | ||
| 453 | + const { createSyncConfirm } = useSyncConfirm(); | ||
| 454 | + const handlePublicDevice = async (record: DeviceRecord) => { | ||
| 455 | + try { | ||
| 456 | + const publicFlag = record?.customerAdditionalInfo?.isPublic; | ||
| 457 | + const type = publicFlag ? '私有' : '公开'; | ||
| 458 | + const flag = await createSyncConfirm({ | ||
| 459 | + iconType: 'warning', | ||
| 460 | + title: `您确定要将设备 '${record.name}' 设为${type}吗?`, | ||
| 461 | + content: `确认后,设备及其所有数据将被设为${type}并${ | ||
| 462 | + publicFlag ? '不' : '' | ||
| 463 | + }可被其他人访问。`, | ||
| 464 | + }); | ||
| 465 | + if (!flag) return; | ||
| 466 | + if (publicFlag) { | ||
| 467 | + await privateDevice(record.tbDeviceId); | ||
| 468 | + } else { | ||
| 469 | + await publicDevice(record.tbDeviceId); | ||
| 470 | + } | ||
| 471 | + reload(); | ||
| 472 | + } catch (error) {} | ||
| 473 | + }; | ||
| 474 | + | ||
| 443 | onMounted(() => { | 475 | onMounted(() => { | 
| 444 | const queryParams = ROUTE.query as Record<'deviceProfileId', undefined | string>; | 476 | const queryParams = ROUTE.query as Record<'deviceProfileId', undefined | string>; | 
| 445 | const { setFieldsValue } = getForm(); | 477 | const { setFieldsValue } = getForm(); | 
| @@ -479,6 +511,7 @@ | @@ -479,6 +511,7 @@ | ||
| 479 | registerImportModal, | 511 | registerImportModal, | 
| 480 | handleBatchImport, | 512 | handleBatchImport, | 
| 481 | handleImportFinally, | 513 | handleImportFinally, | 
| 514 | + handlePublicDevice, | ||
| 482 | }; | 515 | }; | 
| 483 | }, | 516 | }, | 
| 484 | }); | 517 | }); |