index.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import request from '@/config/axios'
  2. export type WebtopoProjectVO = {
  3. id: number
  4. projectName: string
  5. deptId?: number
  6. thumbnail?: string
  7. createTime?: number | string
  8. linkedDevices?: number[]
  9. remark?: string
  10. updateTime?: string
  11. }
  12. export type WebtopoProjectDetailVO = WebtopoProjectVO & {
  13. dataModel?: unknown
  14. }
  15. export type WebtopoProjectPageReqVO = {
  16. deptId?: number
  17. pageNo: number
  18. pageSize: number
  19. projectName?: string
  20. }
  21. export type WebtopoProjectCreateReqVO = {
  22. projectName: string
  23. linkedDevices?: number[]
  24. remark?: string
  25. }
  26. export type WebtopoProjectUpdateReqVO = WebtopoProjectCreateReqVO & {
  27. id: number
  28. thumbnail?: string
  29. dataModel?: string
  30. }
  31. type ApiResult<T> = {
  32. code?: number
  33. data?: T
  34. msg?: string
  35. }
  36. const unwrapData = <T>(res: T | ApiResult<T>) => {
  37. if (res && typeof res === 'object' && 'data' in res) {
  38. return (res as ApiResult<T>).data as T
  39. }
  40. return res as T
  41. }
  42. export const parseWebtopoDataModel = (dataModel: unknown) => {
  43. if (typeof dataModel !== 'string') {
  44. return dataModel
  45. }
  46. const trimmedDataModel = dataModel.trim()
  47. if (!trimmedDataModel) {
  48. return undefined
  49. }
  50. return JSON.parse(trimmedDataModel)
  51. }
  52. export const WebtopoProjectApi = {
  53. createWebtopoProject: (data: WebtopoProjectCreateReqVO) => {
  54. return request.post<number | ApiResult<number>>({
  55. url: '/pms/iot-webtopo-project/create',
  56. data
  57. })
  58. },
  59. updateWebtopoProject: (data: WebtopoProjectUpdateReqVO) => {
  60. return request.put({
  61. url: '/pms/iot-webtopo-project/update',
  62. data
  63. })
  64. },
  65. getWebtopoProjectPage: (params: WebtopoProjectPageReqVO) => {
  66. return request.get<WebtopoProjectVO[] | { list: WebtopoProjectVO[]; total: number }>({
  67. url: '/pms/iot-webtopo-project/page',
  68. params
  69. })
  70. },
  71. getWebtopoProject: async (id: number) => {
  72. const res = await request.get<WebtopoProjectDetailVO | ApiResult<WebtopoProjectDetailVO>>({
  73. url: '/pms/iot-webtopo-project/get',
  74. params: { id }
  75. })
  76. const data = unwrapData<WebtopoProjectDetailVO>(res)
  77. if (!data) {
  78. return data
  79. }
  80. return {
  81. ...data,
  82. dataModel: parseWebtopoDataModel(data?.dataModel)
  83. }
  84. }
  85. }