Showing
5 changed files
with
69 additions
and
3 deletions
| ... | ... | @@ -36,6 +36,10 @@ enum DeviceManagerApi { | 
| 36 | 36 | GATEWAY_DEVICE = '/device/gateway/list', | 
| 37 | 37 | |
| 38 | 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 | 45 | export const devicePage = (params: DeviceQueryParam) => { | 
| ... | ... | @@ -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 | +}; | ... | ... | 
| ... | ... | @@ -15,6 +15,8 @@ export enum ConfigurationPermission { | 
| 15 | 15 | DELETE = 'api:yt:configuration:center:delete', | 
| 16 | 16 | DESIGN = 'api:yt:configuration:center:get_configuration_info:design', | 
| 17 | 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 | 22 | export const PC_DEFAULT_CONTENT = | ... | ... | 
| 1 | 1 | import { formatToDate } from '/@/utils/dateUtil'; | 
| 2 | 2 | import { BasicColumn } from '/@/components/Table'; | 
| 3 | 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 | 5 | import { deviceProfile } from '/@/api/device/deviceManager'; | 
| 6 | +import { h } from 'vue'; | |
| 7 | +import { Tag } from 'ant-design-vue'; | |
| 6 | 8 | |
| 7 | 9 | // 表格列数据 | 
| 8 | 10 | export const columns: BasicColumn[] = [ | 
| ... | ... | @@ -50,9 +52,13 @@ export const columns: BasicColumn[] = [ | 
| 50 | 52 | width: 100, | 
| 51 | 53 | }, | 
| 52 | 54 | { | 
| 53 | - title: '标签', | |
| 54 | - dataIndex: 'label', | |
| 55 | + title: '公开', | |
| 56 | + dataIndex: 'public', | |
| 55 | 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 | 64 | title: '最后连接时间', | ... | ... | 
| ... | ... | @@ -146,6 +146,13 @@ | 
| 146 | 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 | 156 | label: '上下线记录', | 
| 150 | 157 | icon: 'ant-design:rise-outlined', | 
| 151 | 158 | onClick: handleUpAndDownRecord.bind(null, record), | 
| ... | ... | @@ -198,6 +205,8 @@ | 
| 198 | 205 | checkDeviceOccupied, | 
| 199 | 206 | cancelDispatchCustomer, | 
| 200 | 207 | getGATEWAY, | 
| 208 | + privateDevice, | |
| 209 | + publicDevice, | |
| 201 | 210 | } from '/@/api/device/deviceManager'; | 
| 202 | 211 | import { PageEnum } from '/@/enums/pageEnum'; | 
| 203 | 212 | import { useGo } from '/@/hooks/web/usePage'; | 
| ... | ... | @@ -218,6 +227,7 @@ | 
| 218 | 227 | import { Authority } from '/@/components/Authority'; | 
| 219 | 228 | import { useRoute, useRouter } from 'vue-router'; | 
| 220 | 229 | import { useBatchOperation } from '/@/utils/useBatchOperation'; | 
| 230 | + import { useSyncConfirm } from '/@/hooks/component/useSyncConfirm'; | |
| 221 | 231 | |
| 222 | 232 | export default defineComponent({ | 
| 223 | 233 | name: 'DeviceManagement', | 
| ... | ... | @@ -440,6 +450,28 @@ | 
| 440 | 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 | 475 | onMounted(() => { | 
| 444 | 476 | const queryParams = ROUTE.query as Record<'deviceProfileId', undefined | string>; | 
| 445 | 477 | const { setFieldsValue } = getForm(); | 
| ... | ... | @@ -479,6 +511,7 @@ | 
| 479 | 511 | registerImportModal, | 
| 480 | 512 | handleBatchImport, | 
| 481 | 513 | handleImportFinally, | 
| 514 | + handlePublicDevice, | |
| 482 | 515 | }; | 
| 483 | 516 | }, | 
| 484 | 517 | }); | ... | ... |