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 | }); |