Commit d99342b53675ade829de8b231ed51bbf35485f81
Merge branch 'main' into 'sqy_dev'
# Conflicts: # src/views/system/account/AccountModal.vue
Showing
22 changed files
with
2215 additions
and
689 deletions
Too many changes to show.
To preserve performance only 22 of 23 files are displayed.
| @@ -38,6 +38,7 @@ module.exports = defineConfig({ | @@ -38,6 +38,7 @@ module.exports = defineConfig({ | ||
| 38 | '@typescript-eslint/ban-types': 'off', | 38 | '@typescript-eslint/ban-types': 'off', |
| 39 | '@typescript-eslint/no-non-null-assertion': 'off', | 39 | '@typescript-eslint/no-non-null-assertion': 'off', |
| 40 | '@typescript-eslint/explicit-module-boundary-types': 'off', | 40 | '@typescript-eslint/explicit-module-boundary-types': 'off', |
| 41 | + ' @typescript-eslint/no-inferrable-types': 'off', | ||
| 41 | '@typescript-eslint/no-unused-vars': [ | 42 | '@typescript-eslint/no-unused-vars': [ |
| 42 | 'error', | 43 | 'error', |
| 43 | { | 44 | { |
| @@ -11,7 +11,9 @@ tests/server/static/upload | @@ -11,7 +11,9 @@ tests/server/static/upload | ||
| 11 | # local env files | 11 | # local env files |
| 12 | .env.local | 12 | .env.local |
| 13 | .env.*.local | 13 | .env.*.local |
| 14 | -.env.development | 14 | +.env.*development |
| 15 | +.env.*test | ||
| 16 | +.env.*production | ||
| 15 | .eslintcache | 17 | .eslintcache |
| 16 | 18 | ||
| 17 | # Log files | 19 | # Log files |
| 1 | import { BasicPageParams } from '/@/api/model/baseModel'; | 1 | import { BasicPageParams } from '/@/api/model/baseModel'; |
| 2 | 2 | ||
| 3 | -export type ScreenLinkPageTableQueryParam = BasicPageParams & ScreenParam; | 3 | +export type ScreenLinkPageQueryParam = BasicPageParams & ScreenParams; |
| 4 | 4 | ||
| 5 | -export type ScreenParam = { | 5 | +export type ScreenParams = { |
| 6 | + organizationId?: string; | ||
| 7 | + status?: string; | ||
| 6 | name?: string; | 8 | name?: string; |
| 7 | - other?: string; | 9 | + sceneLinkageId?: string; |
| 8 | }; | 10 | }; |
| 11 | + | ||
| 12 | +export type ScreenByDeptIdParams = { | ||
| 13 | + organizationId: string; | ||
| 14 | + // organizationId: '2f5c8f2a-196c-4941-8771-290f9da76219'; | ||
| 15 | +}; | ||
| 16 | + | ||
| 9 | export interface ScreenAddModel { | 17 | export interface ScreenAddModel { |
| 10 | - createTime?: '2021-11-29T09:13:38.810Z'; | ||
| 11 | - creator?: 'string'; | ||
| 12 | - defaultConfig?: 'string'; | ||
| 13 | - description?: 'string'; | 18 | + createTime?: string; |
| 19 | + creator?: string; | ||
| 20 | + defaultConfig?: string; | ||
| 21 | + description?: string; | ||
| 14 | doAction?: [ | 22 | doAction?: [ |
| 15 | { | 23 | { |
| 16 | - command: 'string'; | ||
| 17 | - createTime: '2021-11-29T09:13:38.810Z'; | ||
| 18 | - creator: 'string'; | ||
| 19 | - defaultConfig: 'string'; | ||
| 20 | - description: 'string'; | ||
| 21 | - deviceId: 'string'; | 24 | + command: string; |
| 25 | + createTime: string; | ||
| 26 | + creator: string; | ||
| 27 | + defaultConfig: string; | ||
| 28 | + description: string; | ||
| 29 | + deviceId: string; | ||
| 22 | enabled: true; | 30 | enabled: true; |
| 23 | - icon: 'string'; | ||
| 24 | - id: 'string'; | ||
| 25 | - name: 'string'; | ||
| 26 | - outPut: 'string'; | ||
| 27 | - outTarget: 'string'; | ||
| 28 | - roleIds: ['string']; | ||
| 29 | - tenantCode: 'string'; | ||
| 30 | - tenantExpireTime: '2021-11-29T09:13:38.811Z'; | ||
| 31 | - tenantId: 'string'; | 31 | + icon: string; |
| 32 | + id: string; | ||
| 33 | + name: string; | ||
| 34 | + outPut: string; | ||
| 35 | + outTarget: string; | ||
| 36 | + roleIds: []; | ||
| 37 | + tenantCode: string; | ||
| 38 | + tenantExpireTime: string; | ||
| 39 | + tenantId: string; | ||
| 32 | tenantStatus: 'DISABLED'; | 40 | tenantStatus: 'DISABLED'; |
| 33 | - updateTime: '2021-11-29T09:13:38.811Z'; | ||
| 34 | - updater: 'string'; | 41 | + updateTime: string; |
| 42 | + updater: string; | ||
| 35 | } | 43 | } |
| 36 | ]; | 44 | ]; |
| 37 | doCondition?: [ | 45 | doCondition?: [ |
| 38 | { | 46 | { |
| 39 | compare: 0; | 47 | compare: 0; |
| 40 | - createTime: '2021-11-29T09:13:38.811Z'; | ||
| 41 | - creator: 'string'; | ||
| 42 | - defaultConfig: 'string'; | ||
| 43 | - description: 'string'; | ||
| 44 | - deviceId: 'string'; | 48 | + createTime: string; |
| 49 | + creator: string; | ||
| 50 | + defaultConfig: string; | ||
| 51 | + description: string; | ||
| 52 | + deviceId: string; | ||
| 45 | enabled: true; | 53 | enabled: true; |
| 46 | - icon: 'string'; | ||
| 47 | - id: 'string'; | ||
| 48 | - name: 'string'; | ||
| 49 | - property: 'string'; | ||
| 50 | - roleIds: ['string']; | ||
| 51 | - status: 'string'; | ||
| 52 | - tenantCode: 'string'; | ||
| 53 | - tenantExpireTime: '2021-11-29T09:13:38.811Z'; | ||
| 54 | - tenantId: 'string'; | 54 | + icon: string; |
| 55 | + id: string; | ||
| 56 | + name: string; | ||
| 57 | + property: string; | ||
| 58 | + roleIds: []; | ||
| 59 | + status: string; | ||
| 60 | + tenantCode: string; | ||
| 61 | + tenantExpireTime: string; | ||
| 62 | + tenantId: string; | ||
| 55 | tenantStatus: 'DISABLED'; | 63 | tenantStatus: 'DISABLED'; |
| 56 | - updateTime: '2021-11-29T09:13:38.811Z'; | ||
| 57 | - updater: 'string'; | ||
| 58 | - value: 'string'; | 64 | + updateTime: string; |
| 65 | + updater: string; | ||
| 66 | + value: string; | ||
| 59 | } | 67 | } |
| 60 | ]; | 68 | ]; |
| 61 | enabled?: true; | 69 | enabled?: true; |
| 62 | - icon?: 'string'; | ||
| 63 | - id?: 'string'; | ||
| 64 | - name?: 'string'; | ||
| 65 | - organizationId?: 'string'; | ||
| 66 | - roleIds?: ['string']; | ||
| 67 | - status?: 'string'; | ||
| 68 | - tenantCode?: 'string'; | ||
| 69 | - tenantExpireTime?: '2021-11-29T09:13:38.811Z'; | ||
| 70 | - tenantId?: 'string'; | 70 | + icon?: string; |
| 71 | + id?: string; | ||
| 72 | + name?: string; | ||
| 73 | + organizationId?: string; | ||
| 74 | + roleIds?: [string]; | ||
| 75 | + status?: string; | ||
| 76 | + tenantCode?: string; | ||
| 77 | + tenantExpireTime?: string; | ||
| 78 | + tenantId?: string; | ||
| 71 | tenantStatus?: 'DISABLED'; | 79 | tenantStatus?: 'DISABLED'; |
| 72 | triggers?: [ | 80 | triggers?: [ |
| 73 | { | 81 | { |
| 74 | - attributeChoose: 'string'; | ||
| 75 | - compare: 0; | ||
| 76 | - createTime: '2021-11-29T09:13:38.811Z'; | ||
| 77 | - creator: 'string'; | ||
| 78 | - defaultConfig: 'string'; | ||
| 79 | - description: 'string'; | ||
| 80 | - deviceId: 'string'; | ||
| 81 | - enabled: true; | ||
| 82 | - icon: 'string'; | ||
| 83 | - id: 'string'; | ||
| 84 | - name: 'string'; | ||
| 85 | - roleIds: ['string']; | ||
| 86 | - tenantCode: 'string'; | ||
| 87 | - tenantExpireTime: '2021-11-29T09:13:38.811Z'; | ||
| 88 | - tenantId: 'string'; | ||
| 89 | - tenantStatus: 'DISABLED'; | ||
| 90 | - tiggerEvent: 'string'; | ||
| 91 | - touchWay: 'string'; | ||
| 92 | - updateTime: '2021-11-29T09:13:38.811Z'; | ||
| 93 | - updater: 'string'; | ||
| 94 | - value: 'string'; | 82 | + attributeChoose?: string; |
| 83 | + compare?: 0; | ||
| 84 | + createTime?: string; | ||
| 85 | + creator?: string; | ||
| 86 | + defaultConfig?: string; | ||
| 87 | + description?: string; | ||
| 88 | + deviceId?: string; | ||
| 89 | + enabled?: true; | ||
| 90 | + icon?: string; | ||
| 91 | + id?: string; | ||
| 92 | + name?: string; | ||
| 93 | + roleIds?: []; | ||
| 94 | + tenantCode?: string; | ||
| 95 | + tenantExpireTime?: string; | ||
| 96 | + tenantId?: string; | ||
| 97 | + tenantStatus?: 'DISABLED'; | ||
| 98 | + tiggerEvent?: string; | ||
| 99 | + touchWay?: string; | ||
| 100 | + updateTime?: string; | ||
| 101 | + updater?: string; | ||
| 102 | + value?: string; | ||
| 95 | } | 103 | } |
| 96 | ]; | 104 | ]; |
| 97 | - updateTime?: '2021-11-29T09:13:38.811Z'; | ||
| 98 | - updater?: 'string'; | 105 | + updateTime?: string; |
| 106 | + updater?: string; | ||
| 99 | } | 107 | } |
| 100 | - | ||
| 101 | export interface ScreenUpdateModel { | 108 | export interface ScreenUpdateModel { |
| 102 | - createTime?: '2021-11-29T09:13:38.810Z'; | ||
| 103 | - creator?: 'string'; | ||
| 104 | - defaultConfig?: 'string'; | ||
| 105 | - description?: 'string'; | 109 | + createTime?: string; |
| 110 | + creator?: string; | ||
| 111 | + defaultConfig?: string; | ||
| 112 | + description?: string; | ||
| 106 | doAction?: [ | 113 | doAction?: [ |
| 107 | { | 114 | { |
| 108 | - command: 'string'; | ||
| 109 | - createTime: '2021-11-29T09:13:38.810Z'; | ||
| 110 | - creator: 'string'; | ||
| 111 | - defaultConfig: 'string'; | ||
| 112 | - description: 'string'; | ||
| 113 | - deviceId: 'string'; | 115 | + command: string; |
| 116 | + createTime: string; | ||
| 117 | + creator: string; | ||
| 118 | + defaultConfig: string; | ||
| 119 | + description: string; | ||
| 120 | + deviceId: string; | ||
| 114 | enabled: true; | 121 | enabled: true; |
| 115 | - icon: 'string'; | ||
| 116 | - id: 'string'; | ||
| 117 | - name: 'string'; | ||
| 118 | - outPut: 'string'; | ||
| 119 | - outTarget: 'string'; | ||
| 120 | - roleIds: ['string']; | ||
| 121 | - tenantCode: 'string'; | ||
| 122 | - tenantExpireTime: '2021-11-29T09:13:38.811Z'; | ||
| 123 | - tenantId: 'string'; | 122 | + icon: string; |
| 123 | + id: string; | ||
| 124 | + name: string; | ||
| 125 | + outPut: string; | ||
| 126 | + outTarget: string; | ||
| 127 | + roleIds: []; | ||
| 128 | + tenantCode: string; | ||
| 129 | + tenantExpireTime: string; | ||
| 130 | + tenantId: string; | ||
| 124 | tenantStatus: 'DISABLED'; | 131 | tenantStatus: 'DISABLED'; |
| 125 | - updateTime: '2021-11-29T09:13:38.811Z'; | ||
| 126 | - updater: 'string'; | 132 | + updateTime: string; |
| 133 | + updater: string; | ||
| 127 | } | 134 | } |
| 128 | ]; | 135 | ]; |
| 129 | doCondition?: [ | 136 | doCondition?: [ |
| 130 | { | 137 | { |
| 131 | compare: 0; | 138 | compare: 0; |
| 132 | - createTime: '2021-11-29T09:13:38.811Z'; | ||
| 133 | - creator: 'string'; | ||
| 134 | - defaultConfig: 'string'; | ||
| 135 | - description: 'string'; | ||
| 136 | - deviceId: 'string'; | 139 | + createTime: string; |
| 140 | + creator: string; | ||
| 141 | + defaultConfig: string; | ||
| 142 | + description: string; | ||
| 143 | + deviceId: string; | ||
| 137 | enabled: true; | 144 | enabled: true; |
| 138 | - icon: 'string'; | ||
| 139 | - id: 'string'; | ||
| 140 | - name: 'string'; | ||
| 141 | - property: 'string'; | ||
| 142 | - roleIds: ['string']; | ||
| 143 | - status: 'string'; | ||
| 144 | - tenantCode: 'string'; | ||
| 145 | - tenantExpireTime: '2021-11-29T09:13:38.811Z'; | ||
| 146 | - tenantId: 'string'; | 145 | + icon: string; |
| 146 | + id: string; | ||
| 147 | + name: string; | ||
| 148 | + property: string; | ||
| 149 | + roleIds: []; | ||
| 150 | + status: string; | ||
| 151 | + tenantCode: string; | ||
| 152 | + tenantExpireTime: string; | ||
| 153 | + tenantId: string; | ||
| 147 | tenantStatus: 'DISABLED'; | 154 | tenantStatus: 'DISABLED'; |
| 148 | - updateTime: '2021-11-29T09:13:38.811Z'; | ||
| 149 | - updater: 'string'; | ||
| 150 | - value: 'string'; | 155 | + updateTime: string; |
| 156 | + updater: string; | ||
| 157 | + value: string; | ||
| 151 | } | 158 | } |
| 152 | ]; | 159 | ]; |
| 153 | enabled?: true; | 160 | enabled?: true; |
| 154 | - icon?: 'string'; | ||
| 155 | - id?: 'string'; | ||
| 156 | - name?: 'string'; | ||
| 157 | - organizationId?: 'string'; | ||
| 158 | - roleIds?: ['string']; | ||
| 159 | - status?: 'string'; | ||
| 160 | - tenantCode?: 'string'; | ||
| 161 | - tenantExpireTime?: '2021-11-29T09:13:38.811Z'; | ||
| 162 | - tenantId?: 'string'; | 161 | + icon?: string; |
| 162 | + id?: string; | ||
| 163 | + name?: string; | ||
| 164 | + organizationId?: string; | ||
| 165 | + roleIds?: [string]; | ||
| 166 | + status?: string; | ||
| 167 | + tenantCode?: string; | ||
| 168 | + tenantExpireTime?: string; | ||
| 169 | + tenantId?: string; | ||
| 163 | tenantStatus?: 'DISABLED'; | 170 | tenantStatus?: 'DISABLED'; |
| 164 | triggers?: [ | 171 | triggers?: [ |
| 165 | { | 172 | { |
| 166 | - attributeChoose: 'string'; | ||
| 167 | - compare: 0; | ||
| 168 | - createTime: '2021-11-29T09:13:38.811Z'; | ||
| 169 | - creator: 'string'; | ||
| 170 | - defaultConfig: 'string'; | ||
| 171 | - description: 'string'; | ||
| 172 | - deviceId: 'string'; | ||
| 173 | - enabled: true; | ||
| 174 | - icon: 'string'; | ||
| 175 | - id: 'string'; | ||
| 176 | - name: 'string'; | ||
| 177 | - roleIds: ['string']; | ||
| 178 | - tenantCode: 'string'; | ||
| 179 | - tenantExpireTime: '2021-11-29T09:13:38.811Z'; | ||
| 180 | - tenantId: 'string'; | ||
| 181 | - tenantStatus: 'DISABLED'; | ||
| 182 | - tiggerEvent: 'string'; | ||
| 183 | - touchWay: 'string'; | ||
| 184 | - updateTime: '2021-11-29T09:13:38.811Z'; | ||
| 185 | - updater: 'string'; | ||
| 186 | - value: 'string'; | 173 | + attributeChoose?: string; |
| 174 | + compare?: 0; | ||
| 175 | + createTime?: string; | ||
| 176 | + creator?: string; | ||
| 177 | + defaultConfig?: string; | ||
| 178 | + description?: string; | ||
| 179 | + deviceId?: string; | ||
| 180 | + enabled?: true; | ||
| 181 | + icon?: string; | ||
| 182 | + id?: string; | ||
| 183 | + name?: string; | ||
| 184 | + roleIds?: []; | ||
| 185 | + tenantCode?: string; | ||
| 186 | + tenantExpireTime?: string; | ||
| 187 | + tenantId?: string; | ||
| 188 | + tenantStatus?: 'DISABLED'; | ||
| 189 | + tiggerEvent?: string; | ||
| 190 | + touchWay?: string; | ||
| 191 | + updateTime?: string; | ||
| 192 | + updater?: string; | ||
| 193 | + value?: string; | ||
| 187 | } | 194 | } |
| 188 | ]; | 195 | ]; |
| 189 | - updateTime?: '2021-11-29T09:13:38.811Z'; | ||
| 190 | - updater?: 'string'; | 196 | + updateTime?: string; |
| 197 | + updater?: string; | ||
| 191 | } | 198 | } |
| 1 | import { defHttp } from '/@/utils/http/axios'; | 1 | import { defHttp } from '/@/utils/http/axios'; |
| 2 | import { | 2 | import { |
| 3 | - ScreenLinkPageTableQueryParam, | 3 | + // ScreenParamModel, |
| 4 | ScreenAddModel, | 4 | ScreenAddModel, |
| 5 | ScreenUpdateModel, | 5 | ScreenUpdateModel, |
| 6 | + ScreenLinkPageQueryParam, | ||
| 7 | + ScreenByDeptIdParams, | ||
| 6 | } from '/@/api/ruleengine/model/ruleengineModel'; | 8 | } from '/@/api/ruleengine/model/ruleengineModel'; |
| 7 | 9 | ||
| 8 | enum ScreenManagerApi { | 10 | enum ScreenManagerApi { |
| @@ -13,15 +15,29 @@ enum ScreenManagerApi { | @@ -13,15 +15,29 @@ enum ScreenManagerApi { | ||
| 13 | SCREEN_ADD_URL = '/sceneLinkage', | 15 | SCREEN_ADD_URL = '/sceneLinkage', |
| 14 | SCREEN_DELETE_URL = '/sceneLinkage', | 16 | SCREEN_DELETE_URL = '/sceneLinkage', |
| 15 | SCREEN_UPDATE_URL = '/sceneLinkage/update', | 17 | SCREEN_UPDATE_URL = '/sceneLinkage/update', |
| 18 | + SCREEN_ORGANIZATION_URL = '/organization/me/organizations', | ||
| 19 | + SCREEN_CHANGE_STATUS = '/sceneLinkage/updateSceneStatus', | ||
| 20 | + SCREEN_GET_BY_DEPTID = '/sceneLinkage/device/', | ||
| 16 | } | 21 | } |
| 17 | 22 | ||
| 18 | /** | 23 | /** |
| 24 | + * 获取部门id | ||
| 25 | + * @param 无参数 | ||
| 26 | + */ | ||
| 27 | +export const screenLinkOrganizationGetApi = () => { | ||
| 28 | + return defHttp.get({ | ||
| 29 | + url: ScreenManagerApi.SCREEN_ORGANIZATION_URL, | ||
| 30 | + }); | ||
| 31 | +}; | ||
| 32 | + | ||
| 33 | +/** | ||
| 19 | * 分页查询场景联动表格页面 | 34 | * 分页查询场景联动表格页面 |
| 20 | * @param params pageSize page name | 35 | * @param params pageSize page name |
| 21 | */ | 36 | */ |
| 22 | -export const screenLinkPageGetApi = () => { | ||
| 23 | - return defHttp.get<ScreenLinkPageTableQueryParam>({ | 37 | +export const screenLinkPageGetApi = (params?: ScreenLinkPageQueryParam) => { |
| 38 | + return defHttp.get({ | ||
| 24 | url: ScreenManagerApi.SCREEN_GET_URL, | 39 | url: ScreenManagerApi.SCREEN_GET_URL, |
| 40 | + params, | ||
| 25 | }); | 41 | }); |
| 26 | }; | 42 | }; |
| 27 | 43 | ||
| @@ -30,7 +46,7 @@ export const screenLinkPageGetApi = () => { | @@ -30,7 +46,7 @@ export const screenLinkPageGetApi = () => { | ||
| 30 | * @param params pageSize page name | 46 | * @param params pageSize page name |
| 31 | */ | 47 | */ |
| 32 | export const screenLinkPageAddApi = (params: ScreenAddModel) => { | 48 | export const screenLinkPageAddApi = (params: ScreenAddModel) => { |
| 33 | - return defHttp.post<ScreenLinkPageTableQueryParam>({ | 49 | + return defHttp.post<ScreenAddModel>({ |
| 34 | url: ScreenManagerApi.SCREEN_ADD_URL, | 50 | url: ScreenManagerApi.SCREEN_ADD_URL, |
| 35 | params, | 51 | params, |
| 36 | }); | 52 | }); |
| @@ -41,7 +57,7 @@ export const screenLinkPageAddApi = (params: ScreenAddModel) => { | @@ -41,7 +57,7 @@ export const screenLinkPageAddApi = (params: ScreenAddModel) => { | ||
| 41 | * @param params pageSize page name | 57 | * @param params pageSize page name |
| 42 | */ | 58 | */ |
| 43 | export const screenLinkPageUpdateApi = (params: ScreenUpdateModel) => { | 59 | export const screenLinkPageUpdateApi = (params: ScreenUpdateModel) => { |
| 44 | - return defHttp.post<ScreenLinkPageTableQueryParam>({ | 60 | + return defHttp.post<ScreenUpdateModel>({ |
| 45 | url: ScreenManagerApi.SCREEN_UPDATE_URL, | 61 | url: ScreenManagerApi.SCREEN_UPDATE_URL, |
| 46 | params, | 62 | params, |
| 47 | }); | 63 | }); |
| @@ -59,3 +75,20 @@ export const screenLinkPageDeleteApi = (ids: string[]) => { | @@ -59,3 +75,20 @@ export const screenLinkPageDeleteApi = (ids: string[]) => { | ||
| 59 | }, | 75 | }, |
| 60 | }); | 76 | }); |
| 61 | }; | 77 | }; |
| 78 | + | ||
| 79 | +/** | ||
| 80 | + * 改变场景联动状态 | ||
| 81 | + * @param params sceneLinkageId status | ||
| 82 | + */ | ||
| 83 | +export const screenLinkPagePutApi = (sceneLinkageId: string, status: number) => | ||
| 84 | + defHttp.put({ url: ScreenManagerApi.SCREEN_CHANGE_STATUS + '/' + sceneLinkageId + '/' + status }); | ||
| 85 | + | ||
| 86 | +/** | ||
| 87 | + * 根据部门id获取设备列表 | ||
| 88 | + */ | ||
| 89 | +export const screenLinkPageByDeptIdGetDevice = (params: ScreenByDeptIdParams) => { | ||
| 90 | + return defHttp.get({ | ||
| 91 | + url: ScreenManagerApi.SCREEN_GET_BY_DEPTID, | ||
| 92 | + params, | ||
| 93 | + }); | ||
| 94 | +}; |
| 1 | +import { BasicPageParams } from '/@/api/model/baseModel'; | ||
| 2 | + | ||
| 3 | +export type NoticeQueryParam = BasicPageParams & NoticeParams; | ||
| 4 | + | ||
| 5 | +export type NoticeParams = { | ||
| 6 | + orderFiled?: string; | ||
| 7 | + id?: string; | ||
| 8 | +}; | ||
| 9 | + | ||
| 10 | +export type NoticeByIdParams = { | ||
| 11 | + id: string; | ||
| 12 | +}; | ||
| 13 | + | ||
| 14 | +//保存草稿 | ||
| 15 | +export interface NotifyAddDraftModel { | ||
| 16 | + content: string; | ||
| 17 | + createTime: '2021-12-07T03:19:45.394Z'; | ||
| 18 | + creator: string; | ||
| 19 | + id: string; | ||
| 20 | + pointId: []; | ||
| 21 | + receiverType: string; | ||
| 22 | + receiverTypeIds: string; | ||
| 23 | + senderDate: string; | ||
| 24 | + senderName: string; | ||
| 25 | + status: string; | ||
| 26 | + title: string; | ||
| 27 | + type: 'MEETING'; | ||
| 28 | + updateTime: string; | ||
| 29 | + updater: string; | ||
| 30 | +} | ||
| 31 | +export interface NotifyAddreLeaseModel { | ||
| 32 | + content: string; | ||
| 33 | + createTime: string; | ||
| 34 | + creator: string; | ||
| 35 | + id: string; | ||
| 36 | + pointId: []; | ||
| 37 | + receiverType: string; | ||
| 38 | + receiverTypeIds: string; | ||
| 39 | + senderDate: string; | ||
| 40 | + senderName: string; | ||
| 41 | + status: string; | ||
| 42 | + title: string; | ||
| 43 | + type: 'MEETING'; | ||
| 44 | + updateTime: string; | ||
| 45 | + updater: string; | ||
| 46 | +} |
| 1 | +import { defHttp } from '/@/utils/http/axios'; | ||
| 2 | +import { | ||
| 3 | + NoticeByIdParams, | ||
| 4 | + NoticeQueryParam, | ||
| 5 | + NotifyAddDraftModel, | ||
| 6 | + NotifyAddreLeaseModel, | ||
| 7 | +} from '/@/api/stationnotification/model/stationnotifyModel'; | ||
| 8 | + | ||
| 9 | +enum NotifyManagerApi { | ||
| 10 | + /** | ||
| 11 | + * 场景URL | ||
| 12 | + */ | ||
| 13 | + NOTICE_GET_URL = '/notice/page', | ||
| 14 | + NOTICE_GET_DETAIL_URL = '/notice', | ||
| 15 | + NOTICE_ADD_DRAFT_URL = '/notice/save', | ||
| 16 | + NOTICE_ADD_LEASE_URL = '/notice/send', | ||
| 17 | + NOTICE_DELETE_URL = '/notice/delete', | ||
| 18 | + NOTICE_GET_MYDETAIL_URL = '/noticeUser', | ||
| 19 | + NOTICE_GET_PAGE_URL = '/noticeUser/page', | ||
| 20 | + NOTICE_GET_READ_URL = '/noticeUser/read', | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// /** | ||
| 24 | +// * 获取详情 | ||
| 25 | +// * @param | ||
| 26 | +// */ | ||
| 27 | +export const screenLinkPageByDeptIdGetDevice = (params: NoticeByIdParams) => { | ||
| 28 | + return defHttp.get({ | ||
| 29 | + url: NotifyManagerApi.NOTICE_GET_DETAIL_URL, | ||
| 30 | + params, | ||
| 31 | + }); | ||
| 32 | +}; | ||
| 33 | + | ||
| 34 | +/** | ||
| 35 | + * 分页查询通知表格页面 | ||
| 36 | + * @param params pageSize page name | ||
| 37 | + */ | ||
| 38 | +export const notifyGetTableApi = (params?: NoticeQueryParam) => { | ||
| 39 | + return defHttp.get({ | ||
| 40 | + url: NotifyManagerApi.NOTICE_GET_URL, | ||
| 41 | + params, | ||
| 42 | + }); | ||
| 43 | +}; | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * 新增草稿 | ||
| 47 | + * @param params pageSize page name | ||
| 48 | + */ | ||
| 49 | +export const notifyAddDraftApi = (params: NotifyAddDraftModel) => { | ||
| 50 | + return defHttp.post<NotifyAddDraftModel>({ | ||
| 51 | + url: NotifyManagerApi.NOTICE_ADD_DRAFT_URL, | ||
| 52 | + params, | ||
| 53 | + }); | ||
| 54 | +}; | ||
| 55 | + | ||
| 56 | +/** | ||
| 57 | + * 新增通知 | ||
| 58 | + * @param params pageSize page name | ||
| 59 | + */ | ||
| 60 | +export const notifyAddLeaseApi = (params: NotifyAddreLeaseModel) => { | ||
| 61 | + return defHttp.post<NotifyAddreLeaseModel>({ | ||
| 62 | + url: NotifyManagerApi.NOTICE_ADD_LEASE_URL, | ||
| 63 | + params, | ||
| 64 | + }); | ||
| 65 | +}; | ||
| 66 | + | ||
| 67 | +/** | ||
| 68 | + * 批量删除 | ||
| 69 | + * @param params pageSize page name | ||
| 70 | + */ | ||
| 71 | +export const notifyDeleteApi = (ids: string) => { | ||
| 72 | + return defHttp.delete({ | ||
| 73 | + url: `${NotifyManagerApi.NOTICE_DELETE_URL}?ids=${ids}`, | ||
| 74 | + }); | ||
| 75 | +}; | ||
| 76 | + | ||
| 77 | +/** | ||
| 78 | + * 查询我的通知详情 | ||
| 79 | + * @param params pageSize page name | ||
| 80 | + */ | ||
| 81 | +export const notifyMyGetDetailApi = (id: string) => { | ||
| 82 | + return defHttp.get({ | ||
| 83 | + url: `${NotifyManagerApi.NOTICE_GET_MYDETAIL_URL}/${id}`, | ||
| 84 | + }); | ||
| 85 | +}; | ||
| 86 | + | ||
| 87 | +/** | ||
| 88 | + * 查询我的通知表格 | ||
| 89 | + * @param params pageSize page name | ||
| 90 | + */ | ||
| 91 | +export const notifyMyGetrPageApi = (params?: NoticeQueryParam) => { | ||
| 92 | + return defHttp.get({ | ||
| 93 | + url: NotifyManagerApi.NOTICE_GET_PAGE_URL, | ||
| 94 | + params, | ||
| 95 | + }); | ||
| 96 | +}; | ||
| 97 | + | ||
| 98 | +/** | ||
| 99 | + * 查询人员阅读情况分页 | ||
| 100 | + * @param params pageSize page name | ||
| 101 | + */ | ||
| 102 | +export const notifyMyGetrReadApi = (params?: NoticeQueryParam) => { | ||
| 103 | + return defHttp.get({ | ||
| 104 | + url: NotifyManagerApi.NOTICE_GET_READ_URL, | ||
| 105 | + params, | ||
| 106 | + }); | ||
| 107 | +}; |
| @@ -10,16 +10,31 @@ import { useGlobSetting } from '/@/hooks/setting'; | @@ -10,16 +10,31 @@ import { useGlobSetting } from '/@/hooks/setting'; | ||
| 10 | import { useMessage } from '/@/hooks/web/useMessage'; | 10 | import { useMessage } from '/@/hooks/web/useMessage'; |
| 11 | import { RequestEnum, ContentTypeEnum } from '/@/enums/httpEnum'; | 11 | import { RequestEnum, ContentTypeEnum } from '/@/enums/httpEnum'; |
| 12 | import { isString } from '/@/utils/is'; | 12 | import { isString } from '/@/utils/is'; |
| 13 | -import { getJwtToken } from '/@/utils/auth'; | 13 | +import { getJwtToken, getAuthCache } from '/@/utils/auth'; |
| 14 | import { setObjToUrlParams, deepMerge } from '/@/utils'; | 14 | import { setObjToUrlParams, deepMerge } from '/@/utils'; |
| 15 | import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; | 15 | import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; |
| 16 | import { useI18n } from '/@/hooks/web/useI18n'; | 16 | import { useI18n } from '/@/hooks/web/useI18n'; |
| 17 | import { joinTimestamp, formatRequestDate } from './helper'; | 17 | import { joinTimestamp, formatRequestDate } from './helper'; |
| 18 | +// import { PageEnum } from '/@/enums/pageEnum'; | ||
| 19 | +import { JWT_TOKEN_KEY, REFRESH_TOKEN_KEY, PROJ_CFG_KEY } from '/@/enums/cacheEnum'; | ||
| 20 | +import { router } from '/@/router'; | ||
| 21 | +// import { useUserStore } from '/@/store/modules/user'; | ||
| 22 | +// const userStore = useUserStore(); | ||
| 23 | +// console.log(userStore.userInfo); | ||
| 18 | 24 | ||
| 25 | +// YUNTENG IOT__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__ | ||
| 19 | const globSetting = useGlobSetting(); | 26 | const globSetting = useGlobSetting(); |
| 20 | const urlPrefix = globSetting.urlPrefix; | 27 | const urlPrefix = globSetting.urlPrefix; |
| 21 | const { createMessage, createErrorModal } = useMessage(); | 28 | const { createMessage, createErrorModal } = useMessage(); |
| 22 | 29 | ||
| 30 | +const getJwtTokenInfo = getAuthCache(REFRESH_TOKEN_KEY); | ||
| 31 | +const getRefreshTokenInfo = getAuthCache(JWT_TOKEN_KEY); | ||
| 32 | +console.log(getJwtTokenInfo); | ||
| 33 | +console.log(getRefreshTokenInfo); | ||
| 34 | +const getRefreshTokenInfo1 = getAuthCache(PROJ_CFG_KEY); | ||
| 35 | + | ||
| 36 | +console.log(getRefreshTokenInfo1); | ||
| 37 | + | ||
| 23 | /** | 38 | /** |
| 24 | * @description: 数据处理,方便区分多种处理方式 | 39 | * @description: 数据处理,方便区分多种处理方式 |
| 25 | */ | 40 | */ |
| @@ -121,6 +136,21 @@ const transform: AxiosTransform = { | @@ -121,6 +136,21 @@ const transform: AxiosTransform = { | ||
| 121 | let errMessage = ''; | 136 | let errMessage = ''; |
| 122 | 137 | ||
| 123 | try { | 138 | try { |
| 139 | + if (response.data.code === '401' || response.data.msg === 'tenant has expired') { | ||
| 140 | + createMessage.error('token已过期,退回登录'); | ||
| 141 | + // router.push(PageEnum.BASE_LOGIN); | ||
| 142 | + router.beforeEach((to, from, next) => { | ||
| 143 | + if (getJwtTokenInfo) { | ||
| 144 | + if (to.path === '/login' || to.path !== '/login') { | ||
| 145 | + // doRefresh(); | ||
| 146 | + next({ path: '/' }); | ||
| 147 | + } | ||
| 148 | + } | ||
| 149 | + }); | ||
| 150 | + } else { | ||
| 151 | + // doRefresh(); | ||
| 152 | + } | ||
| 153 | + | ||
| 124 | if (code === 'ECONNABORTED' && message.indexOf('timeout') !== -1) { | 154 | if (code === 'ECONNABORTED' && message.indexOf('timeout') !== -1) { |
| 125 | errMessage = t('sys.api.apiTimeoutMessage'); | 155 | errMessage = t('sys.api.apiTimeoutMessage'); |
| 126 | } | 156 | } |
| @@ -5,6 +5,7 @@ import { findDictItemByCode } from '/@/api/system/dict'; | @@ -5,6 +5,7 @@ import { findDictItemByCode } from '/@/api/system/dict'; | ||
| 5 | export const columns: BasicColumn[] = [ | 5 | export const columns: BasicColumn[] = [ |
| 6 | { | 6 | { |
| 7 | title: '场景联动名称', | 7 | title: '场景联动名称', |
| 8 | + dataIndex: 'name', | ||
| 8 | }, | 9 | }, |
| 9 | { | 10 | { |
| 10 | title: '触发方式', | 11 | title: '触发方式', |
| @@ -13,15 +14,13 @@ export const columns: BasicColumn[] = [ | @@ -13,15 +14,13 @@ export const columns: BasicColumn[] = [ | ||
| 13 | }, | 14 | }, |
| 14 | { | 15 | { |
| 15 | title: '状态', | 16 | title: '状态', |
| 16 | - // dataIndex: 'deviceType', | 17 | + dataIndex: 'status', |
| 17 | width: 200, | 18 | width: 200, |
| 18 | - // slots: { customRender: 'deviceType' }, | ||
| 19 | }, | 19 | }, |
| 20 | { | 20 | { |
| 21 | title: '描述', | 21 | title: '描述', |
| 22 | - // dataIndex: 'deviceProfile.name', | 22 | + dataIndex: 'description', |
| 23 | width: 180, | 23 | width: 180, |
| 24 | - // slots: { customRender: 'deviceProfile' }, | ||
| 25 | }, | 24 | }, |
| 26 | ]; | 25 | ]; |
| 27 | 26 |
| 1 | <template> | 1 | <template> |
| 2 | - <CollapseContainer title="执行条件" style="background-color: #eeeeee"> | ||
| 3 | - <BasicForm | ||
| 4 | - style="display: inline-block" | ||
| 5 | - layout="inline" | ||
| 6 | - :actionColOptions="{ span: 24 }" | ||
| 7 | - :labelWidth="100" | ||
| 8 | - :showResetButton="false" | ||
| 9 | - :showSubmitButton="false" | ||
| 10 | - autoFocusFirstItem | ||
| 11 | - labelAlign="left" | ||
| 12 | - @register="register" | ||
| 13 | - > | ||
| 14 | - <template #add="{ field }"> | ||
| 15 | - <br /> | ||
| 16 | - <Button | ||
| 17 | - style="margin-left: -575px; margin-top: 15px" | ||
| 18 | - v-if="Number(field) === 0" | ||
| 19 | - @click="add" | ||
| 20 | - type="primary" | ||
| 21 | - >+新增执行条件</Button | ||
| 22 | - > | ||
| 23 | - <Button | ||
| 24 | - style="margin-left: 10px" | ||
| 25 | - v-if="Number(field) === 0" | ||
| 26 | - @click="handleSubmit" | ||
| 27 | - type="primary" | ||
| 28 | - >保存</Button | ||
| 29 | - > | ||
| 30 | - <br /> | ||
| 31 | - <Button | ||
| 32 | - style="margin-left: -415px; margin-top: -15px" | ||
| 33 | - v-if="field > 0" | ||
| 34 | - @click="add" | ||
| 35 | - type="primary" | ||
| 36 | - >+新增执行条件</Button | ||
| 37 | - > | ||
| 38 | - <Button style="margin-left: 10px" v-if="field > 0" @click="handleSubmit" type="primary" | ||
| 39 | - >保存</Button | ||
| 40 | - > | ||
| 41 | - <Button style="margin-left: 10px" v-if="field > 0" @click="del(field)" type="primary" | ||
| 42 | - >删除</Button | ||
| 43 | - > | ||
| 44 | - <br /> | ||
| 45 | - </template> | ||
| 46 | - </BasicForm> | 2 | + <CollapseContainer title="执行条件1" style="background-color: #eeeeee"> |
| 3 | + <div style="position: relative"> | ||
| 4 | + <BasicForm | ||
| 5 | + :labelWidth="100" | ||
| 6 | + :emptySpan="10" | ||
| 7 | + :showResetButton="false" | ||
| 8 | + :showSubmitButton="false" | ||
| 9 | + @register="registerCondition" | ||
| 10 | + > | ||
| 11 | + <template #add="{ field }"> | ||
| 12 | + <Button | ||
| 13 | + style="margin-left: -99px; margin-top: 0px; display: inline-block" | ||
| 14 | + v-if="Number(field) === 0" | ||
| 15 | + @click="add" | ||
| 16 | + type="primary" | ||
| 17 | + >+新增执行条件</Button | ||
| 18 | + > | ||
| 19 | + <Button | ||
| 20 | + @click="del(field)" | ||
| 21 | + style="margin-left: 10px" | ||
| 22 | + v-if="Number(field) === 0" | ||
| 23 | + type="primary" | ||
| 24 | + >删除</Button | ||
| 25 | + > | ||
| 26 | + <Button | ||
| 27 | + style="margin-left: -95px; margin-top: 20px" | ||
| 28 | + v-if="field > 0" | ||
| 29 | + @click="add" | ||
| 30 | + type="primary" | ||
| 31 | + >+新增执行条件</Button | ||
| 32 | + > | ||
| 33 | + <Button style="margin-left: 10px" v-if="field > 0" @click="del(field)" type="primary" | ||
| 34 | + >删除</Button | ||
| 35 | + > | ||
| 36 | + </template> | ||
| 37 | + </BasicForm> | ||
| 38 | + </div> | ||
| 47 | </CollapseContainer> | 39 | </CollapseContainer> |
| 48 | </template> | 40 | </template> |
| 49 | <script lang="ts"> | 41 | <script lang="ts"> |
| 50 | - import { defineComponent, ref } from 'vue'; | 42 | + import { defineComponent, ref, reactive, watch } from 'vue'; |
| 51 | import { CollapseContainer } from '/@/components/Container/index'; | 43 | import { CollapseContainer } from '/@/components/Container/index'; |
| 52 | import { BasicForm, useForm } from '/@/components/Form/index'; | 44 | import { BasicForm, useForm } from '/@/components/Form/index'; |
| 53 | import { Input } from 'ant-design-vue'; | 45 | import { Input } from 'ant-design-vue'; |
| 54 | import { Button } from '/@/components/Button'; | 46 | import { Button } from '/@/components/Button'; |
| 55 | - import { useConditionDrawerSchema } from '../config.d'; | 47 | + import { useConditionDrawerSchema, isShiDu, isTimeAll } from '../config.d'; |
| 48 | + import { screenLinkPageByDeptIdGetDevice } from '/@/api/ruleengine/ruleengineApi'; | ||
| 56 | 49 | ||
| 57 | export default defineComponent({ | 50 | export default defineComponent({ |
| 58 | components: { CollapseContainer, BasicForm, [Input.name]: Input, Button }, | 51 | components: { CollapseContainer, BasicForm, [Input.name]: Input, Button }, |
| 59 | - setup(_, { emit }) { | ||
| 60 | - let formData = ref({}); | ||
| 61 | - const [register, { appendSchemaByField, removeSchemaByFiled, getFieldsValue }] = useForm({ | 52 | + props: ['deviceInfo1'], |
| 53 | + setup(props, { emit }) { | ||
| 54 | + let formData = reactive({}); | ||
| 55 | + const [ | ||
| 56 | + registerCondition, | ||
| 57 | + { resetFields, updateSchema, appendSchemaByField, removeSchemaByFiled, getFieldsValue }, | ||
| 58 | + ] = useForm({ | ||
| 62 | labelWidth: 100, | 59 | labelWidth: 100, |
| 63 | schemas: useConditionDrawerSchema, | 60 | schemas: useConditionDrawerSchema, |
| 64 | actionColOptions: { span: 24 }, | 61 | actionColOptions: { span: 24 }, |
| 65 | }); | 62 | }); |
| 66 | - emits: ['get-conditiondata']; | ||
| 67 | - async function handleSubmit() { | 63 | + let isJudge = ref(1); |
| 64 | + if (isJudge.value == 1) { | ||
| 65 | + resetFields(); | ||
| 66 | + } | ||
| 67 | + watch( | ||
| 68 | + () => props.deviceInfo1, | ||
| 69 | + async (newV) => { | ||
| 70 | + const options = await screenLinkPageByDeptIdGetDevice({ organizationId: newV }); | ||
| 71 | + options.items.forEach((v) => { | ||
| 72 | + return (v.value = v.id); | ||
| 73 | + }); | ||
| 74 | + updateSchema({ | ||
| 75 | + field: 'deviceId', | ||
| 76 | + componentProps: { | ||
| 77 | + options: options.items, | ||
| 78 | + }, | ||
| 79 | + }); | ||
| 80 | + } | ||
| 81 | + ); | ||
| 82 | + // async function handleSubmit() { | ||
| 83 | + // try { | ||
| 84 | + // let data = getFieldsValue(); | ||
| 85 | + // formData = data; | ||
| 86 | + // emit('get-conditiondata', formData); | ||
| 87 | + // isJudge.value++; | ||
| 88 | + // } catch (e) { | ||
| 89 | + // console.log(e); | ||
| 90 | + // } | ||
| 91 | + // } | ||
| 92 | + const n = ref(1); | ||
| 93 | + function add() { | ||
| 68 | try { | 94 | try { |
| 69 | - const data = await getFieldsValue(); | ||
| 70 | - formData.value = data; | ||
| 71 | - emit('get-conditiondata', formData.value); | 95 | + let data = getFieldsValue(); |
| 96 | + formData = data; | ||
| 97 | + emit('get-conditiondata', formData); | ||
| 98 | + isJudge.value++; | ||
| 72 | } catch (e) { | 99 | } catch (e) { |
| 73 | console.log(e); | 100 | console.log(e); |
| 74 | } | 101 | } |
| 75 | - } | ||
| 76 | - const n = ref(1); | ||
| 77 | - function add() { | ||
| 78 | appendSchemaByField( | 102 | appendSchemaByField( |
| 79 | { | 103 | { |
| 80 | - field: `field${n.value}a`, | ||
| 81 | - component: 'ApiSelect', | 104 | + field: `kong${n.value}`, |
| 105 | + label: `执行条件${n.value + 1 + `.........`}`, | ||
| 106 | + component: 'Slider', | ||
| 107 | + colProps: { span: 24 }, | ||
| 108 | + }, | ||
| 109 | + '' | ||
| 110 | + ); | ||
| 111 | + appendSchemaByField( | ||
| 112 | + { | ||
| 113 | + field: `status${n.value}`, | ||
| 82 | label: '', | 114 | label: '', |
| 115 | + component: 'Select', | ||
| 83 | componentProps: { | 116 | componentProps: { |
| 84 | - placeholder: '请选择', | 117 | + placeholder: '设备状态', |
| 118 | + options: [ | ||
| 119 | + { label: '设备触发', value: 'DEVICE_STATUS' }, | ||
| 120 | + { label: '时间范围', value: 'TIME_ALL' }, | ||
| 121 | + ], | ||
| 85 | }, | 122 | }, |
| 123 | + colProps: { span: 12 }, | ||
| 124 | + }, | ||
| 125 | + '' | ||
| 126 | + ); | ||
| 127 | + appendSchemaByField( | ||
| 128 | + { | ||
| 129 | + field: `deviceId${n.value}`, | ||
| 130 | + label: '', | ||
| 131 | + component: 'Select', | ||
| 132 | + componentProps: { | ||
| 133 | + placeholder: '请选择设备', | ||
| 134 | + }, | ||
| 135 | + ifShow: ({ values }) => !isTimeAll(Reflect.get(values, 'status')), | ||
| 86 | colProps: { | 136 | colProps: { |
| 87 | - span: 8, | ||
| 88 | - offset: 1, | 137 | + span: 12, |
| 89 | }, | 138 | }, |
| 90 | - required: true, | ||
| 91 | }, | 139 | }, |
| 92 | '' | 140 | '' |
| 93 | ); | 141 | ); |
| 94 | appendSchemaByField( | 142 | appendSchemaByField( |
| 95 | { | 143 | { |
| 96 | - field: `field${n.value}b`, | ||
| 97 | - component: 'Input', | 144 | + field: `createTime${n.value}`, |
| 98 | label: '', | 145 | label: '', |
| 146 | + component: 'DatePicker', | ||
| 99 | componentProps: { | 147 | componentProps: { |
| 100 | - placeholder: '请输入', | 148 | + placeholder: '请选择起始时间', |
| 101 | }, | 149 | }, |
| 102 | colProps: { | 150 | colProps: { |
| 103 | - span: 8, | ||
| 104 | - offset: 1, | 151 | + span: 12, |
| 105 | }, | 152 | }, |
| 106 | - required: true, | 153 | + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'status')), |
| 107 | }, | 154 | }, |
| 108 | '' | 155 | '' |
| 109 | ); | 156 | ); |
| 110 | appendSchemaByField( | 157 | appendSchemaByField( |
| 111 | { | 158 | { |
| 112 | - field: `field${n.value}c`, | ||
| 113 | - component: 'ApiSelect', | 159 | + field: `updateTime${n.value}`, |
| 114 | label: '', | 160 | label: '', |
| 161 | + component: 'DatePicker', | ||
| 115 | componentProps: { | 162 | componentProps: { |
| 116 | - placeholder: '请选择', | 163 | + placeholder: '请选择结束时间', |
| 117 | }, | 164 | }, |
| 118 | colProps: { | 165 | colProps: { |
| 119 | - span: 8, | 166 | + span: 12, |
| 120 | }, | 167 | }, |
| 121 | - required: true, | 168 | + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'status')), |
| 122 | }, | 169 | }, |
| 123 | '' | 170 | '' |
| 124 | ); | 171 | ); |
| 125 | appendSchemaByField( | 172 | appendSchemaByField( |
| 126 | { | 173 | { |
| 127 | - field: `field${n.value}d`, | ||
| 128 | - component: 'ApiSelect', | 174 | + field: `property${n.value}`, |
| 129 | label: '', | 175 | label: '', |
| 176 | + component: 'Select', | ||
| 130 | componentProps: { | 177 | componentProps: { |
| 131 | - placeholder: '请选择', | 178 | + placeholder: '请选择或者输入属性', |
| 179 | + options: [ | ||
| 180 | + { label: 'shidu', value: 'SHINDU' }, | ||
| 181 | + { label: 'wendu', value: 'WENDU' }, | ||
| 182 | + ], | ||
| 132 | }, | 183 | }, |
| 133 | - colProps: { | ||
| 134 | - span: 8, | 184 | + ifShow: ({ values }) => !isTimeAll(Reflect.get(values, 'status')), |
| 185 | + colProps: { span: 12 }, | ||
| 186 | + }, | ||
| 187 | + '' | ||
| 188 | + ); | ||
| 189 | + appendSchemaByField( | ||
| 190 | + { | ||
| 191 | + field: `wu${n.value}`, | ||
| 192 | + label: '', | ||
| 193 | + component: 'Input', | ||
| 194 | + componentProps: { | ||
| 195 | + placeholder: '无', | ||
| 196 | + style: { | ||
| 197 | + visibility: 'hidden', | ||
| 198 | + }, | ||
| 199 | + }, | ||
| 200 | + colProps: { span: 12 }, | ||
| 201 | + }, | ||
| 202 | + '' | ||
| 203 | + ); | ||
| 204 | + appendSchemaByField( | ||
| 205 | + { | ||
| 206 | + field: `compare${n.value}`, | ||
| 207 | + label: '', | ||
| 208 | + component: 'Select', | ||
| 209 | + componentProps: { | ||
| 210 | + placeholder: '', | ||
| 211 | + options: [ | ||
| 212 | + { label: '=', value: '0' }, | ||
| 213 | + { label: '<', value: '1' }, | ||
| 214 | + { label: '>', value: '2' }, | ||
| 215 | + { label: '<=', value: '3' }, | ||
| 216 | + { label: '>=', value: '4' }, | ||
| 217 | + ], | ||
| 135 | }, | 218 | }, |
| 136 | - required: true, | 219 | + ifShow: ({ values }) => |
| 220 | + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 221 | + colProps: { span: 12 }, | ||
| 137 | }, | 222 | }, |
| 138 | '' | 223 | '' |
| 139 | ); | 224 | ); |
| 140 | appendSchemaByField( | 225 | appendSchemaByField( |
| 141 | { | 226 | { |
| 142 | - field: `field${n.value}e`, | ||
| 143 | - component: 'ApiSelect', | 227 | + field: `value${n.value}`, |
| 228 | + component: 'Input', | ||
| 144 | label: '', | 229 | label: '', |
| 145 | componentProps: { | 230 | componentProps: { |
| 146 | - placeholder: '请选择', | 231 | + placeholder: '请输入比较值', |
| 147 | }, | 232 | }, |
| 233 | + ifShow: ({ values }) => | ||
| 234 | + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 148 | colProps: { | 235 | colProps: { |
| 149 | - span: 8, | 236 | + span: 12, |
| 150 | }, | 237 | }, |
| 151 | - required: true, | ||
| 152 | }, | 238 | }, |
| 153 | '' | 239 | '' |
| 154 | ); | 240 | ); |
| 241 | + | ||
| 155 | appendSchemaByField( | 242 | appendSchemaByField( |
| 156 | { | 243 | { |
| 157 | - field: `field${n.value}f`, | 244 | + field: `compare${n.value}`, |
| 245 | + label: '', | ||
| 246 | + component: 'Select', | ||
| 247 | + componentProps: { | ||
| 248 | + placeholder: '', | ||
| 249 | + options: [ | ||
| 250 | + { label: '=', value: '0' }, | ||
| 251 | + { label: '<', value: '1' }, | ||
| 252 | + { label: '>', value: '2' }, | ||
| 253 | + { label: '<=', value: '3' }, | ||
| 254 | + { label: '>=', value: '4' }, | ||
| 255 | + ], | ||
| 256 | + }, | ||
| 257 | + ifShow: ({ values }) => | ||
| 258 | + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 259 | + colProps: { span: 12 }, | ||
| 260 | + }, | ||
| 261 | + '' | ||
| 262 | + ); | ||
| 263 | + appendSchemaByField( | ||
| 264 | + { | ||
| 265 | + field: `value${n.value}`, | ||
| 158 | component: 'Input', | 266 | component: 'Input', |
| 159 | label: '', | 267 | label: '', |
| 160 | componentProps: { | 268 | componentProps: { |
| 161 | - placeholder: '请输入', | 269 | + placeholder: '请输入比较值', |
| 162 | }, | 270 | }, |
| 271 | + ifShow: ({ values }) => | ||
| 272 | + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 163 | colProps: { | 273 | colProps: { |
| 164 | - span: 8, | 274 | + span: 12, |
| 165 | }, | 275 | }, |
| 166 | - required: true, | ||
| 167 | }, | 276 | }, |
| 168 | '' | 277 | '' |
| 169 | ); | 278 | ); |
| 279 | + | ||
| 170 | appendSchemaByField( | 280 | appendSchemaByField( |
| 171 | { | 281 | { |
| 172 | field: `${n.value}`, | 282 | field: `${n.value}`, |
| 173 | - component: 'ApiSelect', | 283 | + component: 'Input', |
| 174 | label: ' ', | 284 | label: ' ', |
| 175 | colProps: { | 285 | colProps: { |
| 176 | - span: 8, | ||
| 177 | - offset: 1, | 286 | + span: 12, |
| 178 | }, | 287 | }, |
| 179 | slot: 'add', | 288 | slot: 'add', |
| 180 | }, | 289 | }, |
| @@ -182,23 +291,24 @@ | @@ -182,23 +291,24 @@ | ||
| 182 | ); | 291 | ); |
| 183 | n.value++; | 292 | n.value++; |
| 184 | } | 293 | } |
| 185 | - | ||
| 186 | function del(field) { | 294 | function del(field) { |
| 187 | removeSchemaByFiled([ | 295 | removeSchemaByFiled([ |
| 188 | - `field${field}a`, | ||
| 189 | - `field${field}b`, | ||
| 190 | - `field${field}c`, | ||
| 191 | - `field${field}d`, | ||
| 192 | - `field${field}e`, | ||
| 193 | - `field${field}f`, | ||
| 194 | - `field${field}g`, | ||
| 195 | - `field${field}h`, | 296 | + `kong${field}`, |
| 297 | + `status${field}`, | ||
| 298 | + `deviceId${field}`, | ||
| 299 | + `createTime${field}`, | ||
| 300 | + `updateTime${field}`, | ||
| 301 | + `property${field}`, | ||
| 302 | + `wu${field}`, | ||
| 303 | + `compare${field}`, | ||
| 304 | + `value${field}`, | ||
| 305 | + `compare${field}`, | ||
| 306 | + `value${field}`, | ||
| 196 | `${field}`, | 307 | `${field}`, |
| 197 | ]); | 308 | ]); |
| 198 | n.value--; | 309 | n.value--; |
| 199 | } | 310 | } |
| 200 | - | ||
| 201 | - return { register, handleSubmit, add, del, formData }; | 311 | + return { registerCondition, add, del }; |
| 202 | }, | 312 | }, |
| 203 | }); | 313 | }); |
| 204 | </script> | 314 | </script> |
| 1 | <template> | 1 | <template> |
| 2 | - <CollapseContainer title="执行动作" style="background-color: #eeeeee"> | ||
| 3 | - <BasicForm | ||
| 4 | - style="display: inline-block" | ||
| 5 | - layout="inline" | ||
| 6 | - :actionColOptions="{ span: 24 }" | ||
| 7 | - :labelWidth="100" | ||
| 8 | - :showResetButton="false" | ||
| 9 | - :showSubmitButton="false" | ||
| 10 | - autoFocusFirstItem | ||
| 11 | - labelAlign="left" | ||
| 12 | - @register="register" | ||
| 13 | - > | ||
| 14 | - <template #add="{ field }"> | ||
| 15 | - <br /> | ||
| 16 | - <Button | ||
| 17 | - style="margin-left: -575px; margin-top: 15px" | ||
| 18 | - v-if="Number(field) === 0" | ||
| 19 | - @click="add" | ||
| 20 | - type="primary" | ||
| 21 | - >+新增执行动作</Button | ||
| 22 | - > | ||
| 23 | - <Button | ||
| 24 | - style="margin-left: 10px" | ||
| 25 | - v-if="Number(field) === 0" | ||
| 26 | - @click="handleSubmit" | ||
| 27 | - type="primary" | ||
| 28 | - >保存</Button | ||
| 29 | - > | ||
| 30 | - <br /> | ||
| 31 | - <Button | ||
| 32 | - style="margin-left: -415px; margin-top: -15px" | ||
| 33 | - v-if="field > 0" | ||
| 34 | - @click="add" | ||
| 35 | - type="primary" | ||
| 36 | - >+新增执行动作</Button | ||
| 37 | - > | ||
| 38 | - <Button style="margin-left: 10px" v-if="field > 0" @click="handleSubmit" type="primary" | ||
| 39 | - >保存</Button | ||
| 40 | - > | ||
| 41 | - <Button style="margin-left: 10px" v-if="field > 0" @click="del(field)" type="primary" | ||
| 42 | - >删除</Button | ||
| 43 | - > | ||
| 44 | - <br /> | ||
| 45 | - </template> | ||
| 46 | - </BasicForm> | 2 | + <CollapseContainer title="执行动作1" style="background-color: #eeeeee"> |
| 3 | + <div style="position: relative"> | ||
| 4 | + <BasicForm | ||
| 5 | + :labelWidth="100" | ||
| 6 | + :showResetButton="false" | ||
| 7 | + :showSubmitButton="false" | ||
| 8 | + :emptySpan="10" | ||
| 9 | + @register="registerAction" | ||
| 10 | + > | ||
| 11 | + <template #add="{ field }"> | ||
| 12 | + <Button | ||
| 13 | + style="margin-left: -99px; margin-top: 30px; display: inline-block" | ||
| 14 | + v-if="Number(field) === 0" | ||
| 15 | + @click="add" | ||
| 16 | + type="primary" | ||
| 17 | + >+新增执行动作</Button | ||
| 18 | + > | ||
| 19 | + <Button | ||
| 20 | + style="margin-left: 10px" | ||
| 21 | + v-if="Number(field) === 0" | ||
| 22 | + @click="handleSubmit" | ||
| 23 | + type="primary" | ||
| 24 | + >保存</Button | ||
| 25 | + > | ||
| 26 | + <br /> | ||
| 27 | + <Button | ||
| 28 | + style="margin-left: -98px; margin-top: -15px" | ||
| 29 | + v-if="field > 0" | ||
| 30 | + @click="add" | ||
| 31 | + type="primary" | ||
| 32 | + >+新增执行动作</Button | ||
| 33 | + > | ||
| 34 | + <Button style="margin-left: 10px" v-if="field > 0" @click="handleSubmit" type="primary" | ||
| 35 | + >保存</Button | ||
| 36 | + > | ||
| 37 | + <Button style="margin-left: 10px" v-if="field > 0" @click="del(field)" type="primary" | ||
| 38 | + >删除</Button | ||
| 39 | + > | ||
| 40 | + </template> | ||
| 41 | + </BasicForm> | ||
| 42 | + </div> | ||
| 47 | </CollapseContainer> | 43 | </CollapseContainer> |
| 48 | </template> | 44 | </template> |
| 49 | <script lang="ts"> | 45 | <script lang="ts"> |
| 50 | - import { defineComponent, ref } from 'vue'; | 46 | + import { defineComponent, ref, reactive, watch } from 'vue'; |
| 51 | import { CollapseContainer } from '/@/components/Container/index'; | 47 | import { CollapseContainer } from '/@/components/Container/index'; |
| 52 | import { BasicForm, useForm } from '/@/components/Form/index'; | 48 | import { BasicForm, useForm } from '/@/components/Form/index'; |
| 53 | import { Input } from 'ant-design-vue'; | 49 | import { Input } from 'ant-design-vue'; |
| 54 | import { Button } from '/@/components/Button'; | 50 | import { Button } from '/@/components/Button'; |
| 55 | - import { useActionDrawerSchema } from '../config.d'; | 51 | + import { useActionDrawerSchema, isMsg, isScene } from '../config.d'; |
| 52 | + import { screenLinkPageByDeptIdGetDevice } from '/@/api/ruleengine/ruleengineApi'; | ||
| 56 | 53 | ||
| 57 | export default defineComponent({ | 54 | export default defineComponent({ |
| 58 | components: { CollapseContainer, BasicForm, [Input.name]: Input, Button }, | 55 | components: { CollapseContainer, BasicForm, [Input.name]: Input, Button }, |
| 59 | - setup(_, { emit }) { | ||
| 60 | - let formData = ref({}); | ||
| 61 | - const [register, { appendSchemaByField, getFieldsValue, removeSchemaByFiled }] = useForm({ | 56 | + props: ['deviceInfo2'], |
| 57 | + setup(props, { emit }) { | ||
| 58 | + let formData = reactive({}); | ||
| 59 | + const [ | ||
| 60 | + registerAction, | ||
| 61 | + { resetFields, updateSchema, appendSchemaByField, getFieldsValue, removeSchemaByFiled }, | ||
| 62 | + ] = useForm({ | ||
| 62 | labelWidth: 100, | 63 | labelWidth: 100, |
| 63 | schemas: useActionDrawerSchema, | 64 | schemas: useActionDrawerSchema, |
| 64 | actionColOptions: { span: 24 }, | 65 | actionColOptions: { span: 24 }, |
| 65 | }); | 66 | }); |
| 66 | - emits: ['get-actiondata']; | 67 | + let isJudge = ref(1); |
| 68 | + if (isJudge.value == 1) { | ||
| 69 | + resetFields(); | ||
| 70 | + } | ||
| 71 | + watch( | ||
| 72 | + () => props.deviceInfo2, | ||
| 73 | + async (newV) => { | ||
| 74 | + const options = await screenLinkPageByDeptIdGetDevice({ organizationId: newV }); | ||
| 75 | + options.items.forEach((v) => { | ||
| 76 | + return (v.value = v.id); | ||
| 77 | + }); | ||
| 78 | + updateSchema({ | ||
| 79 | + field: 'deviceId', | ||
| 80 | + componentProps: { | ||
| 81 | + options: options.items, | ||
| 82 | + }, | ||
| 83 | + }); | ||
| 84 | + } | ||
| 85 | + ); | ||
| 67 | async function handleSubmit() { | 86 | async function handleSubmit() { |
| 68 | try { | 87 | try { |
| 69 | - const data = await getFieldsValue(); | ||
| 70 | - formData.value = data; | ||
| 71 | - emit('get-actiondata', formData.value); | 88 | + let data = getFieldsValue(); |
| 89 | + formData = data; | ||
| 90 | + emit('get-actiondata', formData); | ||
| 91 | + isJudge.value++; | ||
| 72 | } catch (e) { | 92 | } catch (e) { |
| 73 | console.log(e); | 93 | console.log(e); |
| 74 | } | 94 | } |
| @@ -77,104 +97,123 @@ | @@ -77,104 +97,123 @@ | ||
| 77 | function add() { | 97 | function add() { |
| 78 | appendSchemaByField( | 98 | appendSchemaByField( |
| 79 | { | 99 | { |
| 80 | - field: `field${n.value}a`, | ||
| 81 | - component: 'ApiSelect', | 100 | + field: `kong${n.value}`, |
| 101 | + label: `执行动作${n.value + 1 + `.......`}`, | ||
| 102 | + component: 'Slider', | ||
| 103 | + colProps: { span: 24 }, | ||
| 104 | + }, | ||
| 105 | + '' | ||
| 106 | + ); | ||
| 107 | + appendSchemaByField( | ||
| 108 | + { | ||
| 109 | + field: `outTarget${n.value}`, | ||
| 82 | label: '', | 110 | label: '', |
| 111 | + component: 'Select', | ||
| 83 | componentProps: { | 112 | componentProps: { |
| 84 | - placeholder: '请选择', | ||
| 85 | - }, | ||
| 86 | - colProps: { | ||
| 87 | - span: 8, | ||
| 88 | - offset: 1, | 113 | + placeholder: '设备输出', |
| 114 | + options: [ | ||
| 115 | + { label: '设备输出', value: 'DEVICE_OUT' }, | ||
| 116 | + { label: '消息通知', value: 'MSG_NOTIFY' }, | ||
| 117 | + { label: '场景联动', value: 'SCENE_ACT' }, | ||
| 118 | + ], | ||
| 89 | }, | 119 | }, |
| 90 | - required: true, | 120 | + colProps: { span: 12 }, |
| 91 | }, | 121 | }, |
| 92 | '' | 122 | '' |
| 93 | ); | 123 | ); |
| 94 | appendSchemaByField( | 124 | appendSchemaByField( |
| 95 | { | 125 | { |
| 96 | - field: `field${n.value}b`, | ||
| 97 | - component: 'Input', | 126 | + field: `deviceId${n.value}`, |
| 98 | label: '', | 127 | label: '', |
| 128 | + component: 'Select', | ||
| 99 | componentProps: { | 129 | componentProps: { |
| 100 | - placeholder: '请输入', | 130 | + placeholder: '请选择设备', |
| 101 | }, | 131 | }, |
| 132 | + ifShow: ({ values }) => | ||
| 133 | + !isScene(Reflect.get(values, 'outTarget')) && | ||
| 134 | + !isMsg(Reflect.get(values, 'outTarget')), | ||
| 102 | colProps: { | 135 | colProps: { |
| 103 | - span: 8, | ||
| 104 | - offset: 1, | 136 | + span: 12, |
| 105 | }, | 137 | }, |
| 106 | - required: true, | ||
| 107 | }, | 138 | }, |
| 108 | '' | 139 | '' |
| 109 | ); | 140 | ); |
| 110 | appendSchemaByField( | 141 | appendSchemaByField( |
| 111 | { | 142 | { |
| 112 | - field: `field${n.value}c`, | ||
| 113 | - component: 'ApiSelect', | 143 | + field: `command${n.value}`, |
| 144 | + component: 'Input', | ||
| 114 | label: '', | 145 | label: '', |
| 115 | componentProps: { | 146 | componentProps: { |
| 116 | - placeholder: '请选择', | 147 | + placeholder: '请输入下发指定', |
| 117 | }, | 148 | }, |
| 149 | + ifShow: ({ values }) => | ||
| 150 | + !isScene(Reflect.get(values, 'outTarget')) && | ||
| 151 | + !isMsg(Reflect.get(values, 'outTarget')), | ||
| 118 | colProps: { | 152 | colProps: { |
| 119 | - span: 8, | 153 | + span: 12, |
| 120 | }, | 154 | }, |
| 121 | - required: true, | ||
| 122 | }, | 155 | }, |
| 123 | '' | 156 | '' |
| 124 | ); | 157 | ); |
| 125 | appendSchemaByField( | 158 | appendSchemaByField( |
| 126 | { | 159 | { |
| 127 | - field: `field${n.value}d`, | ||
| 128 | - component: 'ApiSelect', | 160 | + field: `wu1${n.value}`, |
| 129 | label: '', | 161 | label: '', |
| 162 | + component: 'Input', | ||
| 130 | componentProps: { | 163 | componentProps: { |
| 131 | - placeholder: '请选择', | ||
| 132 | - }, | ||
| 133 | - colProps: { | ||
| 134 | - span: 8, | 164 | + placeholder: '无', |
| 165 | + style: { | ||
| 166 | + visibility: 'hidden', | ||
| 167 | + }, | ||
| 135 | }, | 168 | }, |
| 136 | - required: true, | 169 | + colProps: { span: 12 }, |
| 137 | }, | 170 | }, |
| 138 | '' | 171 | '' |
| 139 | ); | 172 | ); |
| 140 | appendSchemaByField( | 173 | appendSchemaByField( |
| 141 | { | 174 | { |
| 142 | - field: `field${n.value}e`, | ||
| 143 | - component: 'ApiSelect', | 175 | + field: `wu2${n.value}`, |
| 176 | + component: 'Input', | ||
| 144 | label: '', | 177 | label: '', |
| 145 | componentProps: { | 178 | componentProps: { |
| 146 | - placeholder: '请选择', | 179 | + placeholder: '暂不实现', |
| 147 | }, | 180 | }, |
| 148 | colProps: { | 181 | colProps: { |
| 149 | - span: 8, | 182 | + span: 12, |
| 150 | }, | 183 | }, |
| 151 | - required: true, | 184 | + ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), |
| 152 | }, | 185 | }, |
| 153 | '' | 186 | '' |
| 154 | ); | 187 | ); |
| 155 | appendSchemaByField( | 188 | appendSchemaByField( |
| 156 | { | 189 | { |
| 157 | - field: `field${n.value}f`, | ||
| 158 | - component: 'Input', | 190 | + field: `sceneLinkageId${n.value}`, |
| 159 | label: '', | 191 | label: '', |
| 160 | - componentProps: { | ||
| 161 | - placeholder: '请输入', | ||
| 162 | - }, | 192 | + component: 'ApiSelect', |
| 163 | colProps: { | 193 | colProps: { |
| 164 | - span: 8, | 194 | + span: 12, |
| 195 | + }, | ||
| 196 | + componentProps: { | ||
| 197 | + placeholder: '请选择场景触发器', | ||
| 198 | + options: [ | ||
| 199 | + { label: '场景触发器1', value: '1' }, | ||
| 200 | + { label: '场景触发器2', value: '2' }, | ||
| 201 | + { label: '场景触发器3', value: '3' }, | ||
| 202 | + { label: '场景触发器4', value: '4' }, | ||
| 203 | + ], | ||
| 165 | }, | 204 | }, |
| 166 | - required: true, | 205 | + ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), |
| 167 | }, | 206 | }, |
| 168 | '' | 207 | '' |
| 169 | ); | 208 | ); |
| 209 | + | ||
| 170 | appendSchemaByField( | 210 | appendSchemaByField( |
| 171 | { | 211 | { |
| 172 | field: `${n.value}`, | 212 | field: `${n.value}`, |
| 173 | - component: 'ApiSelect', | 213 | + component: 'Input', |
| 174 | label: ' ', | 214 | label: ' ', |
| 175 | colProps: { | 215 | colProps: { |
| 176 | - span: 8, | ||
| 177 | - offset: 1, | 216 | + span: 12, |
| 178 | }, | 217 | }, |
| 179 | slot: 'add', | 218 | slot: 'add', |
| 180 | }, | 219 | }, |
| @@ -185,20 +224,19 @@ | @@ -185,20 +224,19 @@ | ||
| 185 | 224 | ||
| 186 | function del(field) { | 225 | function del(field) { |
| 187 | removeSchemaByFiled([ | 226 | removeSchemaByFiled([ |
| 188 | - `field${field}a`, | ||
| 189 | - `field${field}b`, | ||
| 190 | - `field${field}c`, | ||
| 191 | - `field${field}d`, | ||
| 192 | - `field${field}e`, | ||
| 193 | - `field${field}f`, | ||
| 194 | - `field${field}g`, | ||
| 195 | - `field${field}h`, | 227 | + `kong${field}`, |
| 228 | + `outTarget${field}`, | ||
| 229 | + `deviceId${field}`, | ||
| 230 | + `command${field}`, | ||
| 231 | + `wu1${field}`, | ||
| 232 | + `wu2${field}`, | ||
| 233 | + `sceneLinkageId${field}`, | ||
| 196 | `${field}`, | 234 | `${field}`, |
| 197 | ]); | 235 | ]); |
| 198 | n.value--; | 236 | n.value--; |
| 199 | } | 237 | } |
| 200 | 238 | ||
| 201 | - return { register, handleSubmit, add, del, formData }; | 239 | + return { registerAction, handleSubmit, add, del }; |
| 202 | }, | 240 | }, |
| 203 | }); | 241 | }); |
| 204 | </script> | 242 | </script> |
| 1 | <template> | 1 | <template> |
| 2 | - <CollapseContainer title="触发器" style="background-color: #eeeeee"> | ||
| 3 | - <BasicForm | ||
| 4 | - style="margin-top: 15px" | ||
| 5 | - layout="inline" | ||
| 6 | - :actionColOptions="{ span: 24 }" | ||
| 7 | - :labelWidth="100" | ||
| 8 | - :showResetButton="false" | ||
| 9 | - :showSubmitButton="false" | ||
| 10 | - autoFocusFirstItem | ||
| 11 | - labelAlign="left" | ||
| 12 | - @register="register" | ||
| 13 | - > | ||
| 14 | - <template #add="{ field }"> | ||
| 15 | - <Button | ||
| 16 | - style="margin-left: -575px; margin-top: 40px" | ||
| 17 | - v-if="Number(field) === 0" | ||
| 18 | - @click="add" | ||
| 19 | - type="primary" | ||
| 20 | - >+新增触发器</Button | 2 | + <div> |
| 3 | + <CollapseContainer title="触发器1" style="background-color: #eeeeee"> | ||
| 4 | + <div style="position: relative"> | ||
| 5 | + <BasicForm | ||
| 6 | + :labelWidth="100" | ||
| 7 | + :showResetButton="false" | ||
| 8 | + :showSubmitButton="false" | ||
| 9 | + :emptySpan="10" | ||
| 10 | + @register="registerTrigger" | ||
| 21 | > | 11 | > |
| 22 | - <Button | ||
| 23 | - style="margin-left: 10px" | ||
| 24 | - v-if="Number(field) === 0" | ||
| 25 | - @click="handleSubmit" | ||
| 26 | - type="primary" | ||
| 27 | - >保存</Button | ||
| 28 | - > | ||
| 29 | - <br /> | ||
| 30 | - <Button | ||
| 31 | - style="margin-left: -456px; margin-top: 20px" | ||
| 32 | - v-if="field > 0" | ||
| 33 | - @click="add" | ||
| 34 | - type="primary" | ||
| 35 | - >+新增触发器</Button | ||
| 36 | - > | ||
| 37 | - <Button style="margin-left: 10px" v-if="field > 0" @click="handleSubmit" type="primary" | ||
| 38 | - >保存</Button | ||
| 39 | - > | ||
| 40 | - <Button style="margin-left: 10px" v-if="field > 0" @click="del(field)" type="primary" | ||
| 41 | - >删除</Button | ||
| 42 | - > | ||
| 43 | - <br /> | ||
| 44 | - </template> | ||
| 45 | - </BasicForm> | ||
| 46 | - </CollapseContainer> | 12 | + <template #add="{ field }"> |
| 13 | + <Button | ||
| 14 | + style="margin-left: -99px; margin-top: 0px; display: inline-block" | ||
| 15 | + v-if="Number(field) === 0" | ||
| 16 | + @click="add" | ||
| 17 | + type="primary" | ||
| 18 | + >+新增触发器</Button | ||
| 19 | + > | ||
| 20 | + <Button | ||
| 21 | + style="margin-left: 20px; margin-top: -60px" | ||
| 22 | + v-if="Number(field) === 0" | ||
| 23 | + type="primary" | ||
| 24 | + @click="del(field)" | ||
| 25 | + >删除</Button | ||
| 26 | + > | ||
| 27 | + <Button | ||
| 28 | + style="margin-left: 5px; margin-top: 35px" | ||
| 29 | + v-if="field > 0" | ||
| 30 | + @click="add" | ||
| 31 | + type="primary" | ||
| 32 | + >+新增触发器</Button | ||
| 33 | + > | ||
| 34 | + <Button style="margin-left: 10px" v-if="field > 0" @click="del(field)" type="primary" | ||
| 35 | + >删除</Button | ||
| 36 | + > | ||
| 37 | + </template> | ||
| 38 | + </BasicForm> | ||
| 39 | + </div> | ||
| 40 | + </CollapseContainer> | ||
| 41 | + </div> | ||
| 47 | </template> | 42 | </template> |
| 48 | <script lang="ts"> | 43 | <script lang="ts"> |
| 49 | - import { defineComponent, ref } from 'vue'; | 44 | + import { defineComponent, reactive, ref, watch } from 'vue'; |
| 50 | import { CollapseContainer } from '/@/components/Container/index'; | 45 | import { CollapseContainer } from '/@/components/Container/index'; |
| 51 | import { BasicForm, useForm } from '/@/components/Form/index'; | 46 | import { BasicForm, useForm } from '/@/components/Form/index'; |
| 52 | import { Input } from 'ant-design-vue'; | 47 | import { Input } from 'ant-design-vue'; |
| 53 | import { Button } from '/@/components/Button'; | 48 | import { Button } from '/@/components/Button'; |
| 54 | - import { useTriggerDrawerSchema } from '../config.d'; | 49 | + import { |
| 50 | + useTriggerDrawerSchema, | ||
| 51 | + isTime, | ||
| 52 | + isUpAndDown, | ||
| 53 | + isWenDu, | ||
| 54 | + isScene, | ||
| 55 | + isHand, | ||
| 56 | + } from '../config.d'; | ||
| 57 | + import { screenLinkPageByDeptIdGetDevice } from '/@/api/ruleengine/ruleengineApi'; | ||
| 55 | 58 | ||
| 56 | export default defineComponent({ | 59 | export default defineComponent({ |
| 57 | components: { CollapseContainer, BasicForm, [Input.name]: Input, Button }, | 60 | components: { CollapseContainer, BasicForm, [Input.name]: Input, Button }, |
| 58 | - setup(_, { emit }) { | ||
| 59 | - const [register, { appendSchemaByField, removeSchemaByFiled, getFieldsValue }] = useForm({ | 61 | + props: ['deviceInfo'], |
| 62 | + setup(props, { emit }) { | ||
| 63 | + const [ | ||
| 64 | + registerTrigger, | ||
| 65 | + { resetFields, appendSchemaByField, removeSchemaByFiled, getFieldsValue, updateSchema }, | ||
| 66 | + ] = useForm({ | ||
| 60 | labelWidth: 100, | 67 | labelWidth: 100, |
| 61 | schemas: useTriggerDrawerSchema, | 68 | schemas: useTriggerDrawerSchema, |
| 62 | actionColOptions: { span: 24 }, | 69 | actionColOptions: { span: 24 }, |
| 63 | }); | 70 | }); |
| 64 | - let formData = ref({}); | ||
| 65 | - emits: ['get-triggerdata']; | ||
| 66 | - async function handleSubmit() { | 71 | + let formData = reactive({}); |
| 72 | + let isJudge = ref(1); | ||
| 73 | + if (isJudge.value == 1) { | ||
| 74 | + resetFields(); | ||
| 75 | + } | ||
| 76 | + watch( | ||
| 77 | + () => props.deviceInfo, | ||
| 78 | + async (newV) => { | ||
| 79 | + const options = await screenLinkPageByDeptIdGetDevice({ organizationId: newV }); | ||
| 80 | + options.items.forEach((v) => { | ||
| 81 | + return (v.value = v.id); | ||
| 82 | + }); | ||
| 83 | + updateSchema({ | ||
| 84 | + field: 'deviceId', | ||
| 85 | + componentProps: { | ||
| 86 | + options: options.items, | ||
| 87 | + }, | ||
| 88 | + }); | ||
| 89 | + } | ||
| 90 | + ); | ||
| 91 | + | ||
| 92 | + // async function handleSubmit() { | ||
| 93 | + // try { | ||
| 94 | + // formData = getFieldsValue(); | ||
| 95 | + // console.log(formData); | ||
| 96 | + // emit('get-triggerdata', formData); | ||
| 97 | + // isJudge.value++; | ||
| 98 | + // } catch (e) { | ||
| 99 | + // console.log(e); | ||
| 100 | + // } | ||
| 101 | + // } | ||
| 102 | + const n = ref(1); | ||
| 103 | + function add() { | ||
| 67 | try { | 104 | try { |
| 68 | - const data = await getFieldsValue(); | ||
| 69 | - formData.value = data; | ||
| 70 | - emit('get-triggerdata', formData.value); | 105 | + formData = getFieldsValue(); |
| 106 | + console.log(formData); | ||
| 107 | + emit('get-triggerdata', formData); | ||
| 108 | + isJudge.value++; | ||
| 71 | } catch (e) { | 109 | } catch (e) { |
| 72 | console.log(e); | 110 | console.log(e); |
| 73 | } | 111 | } |
| 74 | - } | ||
| 75 | - const n = ref(1); | ||
| 76 | - function add() { | 112 | + |
| 77 | appendSchemaByField( | 113 | appendSchemaByField( |
| 78 | { | 114 | { |
| 79 | - field: `field${n.value}a`, | ||
| 80 | - component: 'ApiSelect', | 115 | + field: `kong${n.value}`, |
| 116 | + label: `触发器${n.value + 1 + `...........`}`, | ||
| 117 | + component: 'Slider', | ||
| 118 | + colProps: { span: 24 }, | ||
| 119 | + }, | ||
| 120 | + '' | ||
| 121 | + ); | ||
| 122 | + appendSchemaByField( | ||
| 123 | + { | ||
| 124 | + field: `tiggerEvent${n.value}`, | ||
| 125 | + label: '', | ||
| 126 | + component: 'Select', | ||
| 127 | + componentProps: { | ||
| 128 | + placeholder: '设备触发', | ||
| 129 | + options: [ | ||
| 130 | + { label: '设备触发', value: 'DEVICE_ACT' }, | ||
| 131 | + { label: '定时触发', value: 'TIME_ACT' }, | ||
| 132 | + { label: '场景触发', value: 'SCENE_ACT' }, | ||
| 133 | + { label: '手动触发', value: 'HAND_ACT' }, | ||
| 134 | + ], | ||
| 135 | + }, | ||
| 136 | + colProps: { span: 12 }, | ||
| 137 | + }, | ||
| 138 | + '' | ||
| 139 | + ); | ||
| 140 | + appendSchemaByField( | ||
| 141 | + { | ||
| 142 | + field: `deviceId${n.value}`, | ||
| 81 | label: '', | 143 | label: '', |
| 144 | + component: 'Select', | ||
| 82 | componentProps: { | 145 | componentProps: { |
| 83 | - placeholder: '请选择', | 146 | + placeholder: '请选择设备', |
| 84 | }, | 147 | }, |
| 148 | + ifShow: ({ values }) => | ||
| 149 | + !isTime(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 150 | + !isScene(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 151 | + !isHand(Reflect.get(values, `tiggerEvent${n.value}`)), | ||
| 85 | colProps: { | 152 | colProps: { |
| 86 | - span: 8, | ||
| 87 | - offset: 1, | 153 | + span: 12, |
| 88 | }, | 154 | }, |
| 89 | - required: true, | ||
| 90 | }, | 155 | }, |
| 91 | '' | 156 | '' |
| 92 | ); | 157 | ); |
| 93 | appendSchemaByField( | 158 | appendSchemaByField( |
| 94 | { | 159 | { |
| 95 | - field: `field${n.value}b`, | 160 | + field: `${n.value}no1`, |
| 96 | component: 'Input', | 161 | component: 'Input', |
| 97 | label: '', | 162 | label: '', |
| 98 | componentProps: { | 163 | componentProps: { |
| 99 | - placeholder: '请输入', | 164 | + placeholder: '请输入Cron表达式', |
| 100 | }, | 165 | }, |
| 101 | colProps: { | 166 | colProps: { |
| 102 | - span: 8, | ||
| 103 | - offset: 1, | 167 | + span: 12, |
| 104 | }, | 168 | }, |
| 105 | - required: true, | 169 | + ifShow: ({ values }) => isTime(Reflect.get(values, `tiggerEvent${n.value}`)), |
| 106 | }, | 170 | }, |
| 107 | '' | 171 | '' |
| 108 | ); | 172 | ); |
| 109 | appendSchemaByField( | 173 | appendSchemaByField( |
| 110 | { | 174 | { |
| 111 | - field: `field${n.value}c`, | ||
| 112 | - component: 'ApiSelect', | 175 | + field: `touchWay${n.value}`, |
| 113 | label: '', | 176 | label: '', |
| 177 | + component: 'Select', | ||
| 114 | componentProps: { | 178 | componentProps: { |
| 115 | - placeholder: '请选择', | 179 | + placeholder: '属性触发', |
| 180 | + options: [ | ||
| 181 | + { label: '属性触发', value: 'ATTRIBUTE_ACT' }, | ||
| 182 | + { label: '上下线触发', value: 'UP_DOWN_ACT' }, | ||
| 183 | + ], | ||
| 116 | }, | 184 | }, |
| 117 | - colProps: { | ||
| 118 | - span: 8, | 185 | + ifShow: ({ values }) => |
| 186 | + !isTime(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 187 | + !isScene(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 188 | + !isHand(Reflect.get(values, `tiggerEvent${n.value}`)), | ||
| 189 | + colProps: { span: 12 }, | ||
| 190 | + }, | ||
| 191 | + '' | ||
| 192 | + ); | ||
| 193 | + appendSchemaByField( | ||
| 194 | + { | ||
| 195 | + field: `${n.value}no2`, | ||
| 196 | + label: '', | ||
| 197 | + component: 'Select', | ||
| 198 | + componentProps: { | ||
| 199 | + placeholder: '请选择上下线', | ||
| 200 | + options: [ | ||
| 201 | + { label: '上下线', value: '1' }, | ||
| 202 | + { label: '上线', value: '2' }, | ||
| 203 | + { label: '下线', value: '3' }, | ||
| 204 | + ], | ||
| 119 | }, | 205 | }, |
| 120 | - required: true, | 206 | + colProps: { span: 12 }, |
| 207 | + ifShow: ({ values }) => | ||
| 208 | + isUpAndDown(Reflect.get(values, `touchWay${n.value}`)) && | ||
| 209 | + !isTime(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 210 | + !isScene(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 211 | + !isHand(Reflect.get(values, `tiggerEvent${n.value}`)), | ||
| 121 | }, | 212 | }, |
| 122 | '' | 213 | '' |
| 123 | ); | 214 | ); |
| 124 | appendSchemaByField( | 215 | appendSchemaByField( |
| 125 | { | 216 | { |
| 126 | - field: `field${n.value}d`, | ||
| 127 | - component: 'ApiSelect', | 217 | + field: `attributeChoose${n.value}`, |
| 128 | label: '', | 218 | label: '', |
| 219 | + component: 'Select', | ||
| 129 | componentProps: { | 220 | componentProps: { |
| 130 | - placeholder: '请选择', | 221 | + placeholder: '全部属性', |
| 222 | + options: [ | ||
| 223 | + { label: '全部属性', value: 'All_ATTR' }, | ||
| 224 | + { label: 'wendu', value: 'WENDU' }, | ||
| 225 | + ], | ||
| 131 | }, | 226 | }, |
| 132 | - colProps: { | ||
| 133 | - span: 8, | 227 | + colProps: { span: 12 }, |
| 228 | + ifShow: ({ values }) => | ||
| 229 | + !isTime(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 230 | + !isScene(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 231 | + !isHand(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 232 | + !isUpAndDown(Reflect.get(values, `touchWay${n.value}`)), | ||
| 233 | + }, | ||
| 234 | + '' | ||
| 235 | + ); | ||
| 236 | + appendSchemaByField( | ||
| 237 | + { | ||
| 238 | + field: `compare${n.value}`, | ||
| 239 | + label: '', | ||
| 240 | + component: 'Select', | ||
| 241 | + componentProps: { | ||
| 242 | + placeholder: '', | ||
| 243 | + options: [ | ||
| 244 | + { label: '=', value: '0' }, | ||
| 245 | + { label: '<', value: '1' }, | ||
| 246 | + { label: '>', value: '2' }, | ||
| 247 | + { label: '<=', value: '3' }, | ||
| 248 | + { label: '>=', value: '4' }, | ||
| 249 | + ], | ||
| 134 | }, | 250 | }, |
| 135 | - required: true, | 251 | + ifShow: ({ values }) => |
| 252 | + isWenDu(Reflect.get(values, 'attributeChoose')) && | ||
| 253 | + !isUpAndDown(Reflect.get(values, `touchWay${n.value}`)) && | ||
| 254 | + !isTime(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 255 | + !isScene(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 256 | + !isHand(Reflect.get(values, `tiggerEvent${n.value}`)), | ||
| 257 | + colProps: { span: 12 }, | ||
| 136 | }, | 258 | }, |
| 137 | '' | 259 | '' |
| 138 | ); | 260 | ); |
| 139 | appendSchemaByField( | 261 | appendSchemaByField( |
| 140 | { | 262 | { |
| 141 | - field: `field${n.value}e`, | ||
| 142 | - component: 'ApiSelect', | 263 | + field: `value${n.value}`, |
| 264 | + component: 'Input', | ||
| 143 | label: '', | 265 | label: '', |
| 144 | componentProps: { | 266 | componentProps: { |
| 145 | - placeholder: '请选择', | 267 | + placeholder: '请输入比较值', |
| 146 | }, | 268 | }, |
| 269 | + ifShow: ({ values }) => | ||
| 270 | + isWenDu(Reflect.get(values, 'attributeChoose')) && | ||
| 271 | + !isUpAndDown(Reflect.get(values, `touchWay${n.value}`)) && | ||
| 272 | + !isTime(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 273 | + !isScene(Reflect.get(values, `tiggerEvent${n.value}`)) && | ||
| 274 | + !isHand(Reflect.get(values, `tiggerEvent${n.value}`)), | ||
| 147 | colProps: { | 275 | colProps: { |
| 148 | - span: 8, | 276 | + span: 12, |
| 149 | }, | 277 | }, |
| 150 | - required: true, | ||
| 151 | }, | 278 | }, |
| 152 | '' | 279 | '' |
| 153 | ); | 280 | ); |
| 154 | appendSchemaByField( | 281 | appendSchemaByField( |
| 155 | { | 282 | { |
| 156 | - field: `field${n.value}f`, | ||
| 157 | - component: 'Input', | 283 | + field: `sceneLinkageId${n.value}`, |
| 158 | label: '', | 284 | label: '', |
| 285 | + component: 'Select', | ||
| 286 | + colProps: { | ||
| 287 | + span: 12, | ||
| 288 | + }, | ||
| 289 | + ifShow: ({ values }) => isScene(Reflect.get(values, `tiggerEvent${n.value}`)), | ||
| 159 | componentProps: { | 290 | componentProps: { |
| 160 | - placeholder: '请输入', | 291 | + placeholder: '请输入场景触发器', |
| 292 | + options: [ | ||
| 293 | + { label: '场景触发器1', value: '1' }, | ||
| 294 | + { label: '场景触发器2', value: '2' }, | ||
| 295 | + { label: '场景触发器3', value: '3' }, | ||
| 296 | + ], | ||
| 161 | }, | 297 | }, |
| 298 | + }, | ||
| 299 | + '' | ||
| 300 | + ); | ||
| 301 | + appendSchemaByField( | ||
| 302 | + { | ||
| 303 | + field: `${n.value}no3`, | ||
| 304 | + label: '', | ||
| 305 | + component: 'ApiSelect', | ||
| 162 | colProps: { | 306 | colProps: { |
| 163 | - span: 8, | 307 | + span: 12, |
| 308 | + }, | ||
| 309 | + componentProps: { | ||
| 310 | + placeholder: '暂不实现', | ||
| 164 | }, | 311 | }, |
| 165 | - required: true, | 312 | + ifShow: ({ values }) => isHand(Reflect.get(values, `tiggerEvent${n.value}`)), |
| 166 | }, | 313 | }, |
| 167 | '' | 314 | '' |
| 168 | ); | 315 | ); |
| 169 | appendSchemaByField( | 316 | appendSchemaByField( |
| 170 | { | 317 | { |
| 171 | field: `${n.value}`, | 318 | field: `${n.value}`, |
| 172 | - component: 'ApiSelect', | ||
| 173 | - label: ' ', | 319 | + component: 'Input', |
| 320 | + label: '', | ||
| 174 | colProps: { | 321 | colProps: { |
| 175 | - span: 8, | ||
| 176 | - offset: 1, | 322 | + span: 12, |
| 177 | }, | 323 | }, |
| 178 | slot: 'add', | 324 | slot: 'add', |
| 179 | }, | 325 | }, |
| @@ -181,21 +327,31 @@ | @@ -181,21 +327,31 @@ | ||
| 181 | ); | 327 | ); |
| 182 | n.value++; | 328 | n.value++; |
| 183 | } | 329 | } |
| 330 | + | ||
| 184 | function del(field) { | 331 | function del(field) { |
| 185 | removeSchemaByFiled([ | 332 | removeSchemaByFiled([ |
| 186 | - `field${field}a`, | ||
| 187 | - `field${field}b`, | ||
| 188 | - `field${field}c`, | ||
| 189 | - `field${field}d`, | ||
| 190 | - `field${field}e`, | ||
| 191 | - `field${field}f`, | ||
| 192 | - `field${field}g`, | ||
| 193 | - `field${field}h`, | 333 | + `kong${field}`, |
| 334 | + `tiggerEvent${field}`, | ||
| 335 | + `deviceId${field}`, | ||
| 336 | + `${field}no1`, | ||
| 337 | + `touchWay${field}`, | ||
| 338 | + `${field}no2`, | ||
| 339 | + `attributeChoose${field}`, | ||
| 340 | + `compare${field}`, | ||
| 341 | + `value${field}`, | ||
| 342 | + `sceneLinkageId${field}`, | ||
| 343 | + `${field}no3`, | ||
| 194 | `${field}`, | 344 | `${field}`, |
| 195 | ]); | 345 | ]); |
| 196 | n.value--; | 346 | n.value--; |
| 197 | } | 347 | } |
| 198 | - return { register, handleSubmit, add, del, formData }; | 348 | + return { registerTrigger, add, del }; |
| 199 | }, | 349 | }, |
| 200 | }); | 350 | }); |
| 201 | </script> | 351 | </script> |
| 352 | + | ||
| 353 | +<style> | ||
| 354 | + .ant-slider-handle { | ||
| 355 | + display: none !important; | ||
| 356 | + } | ||
| 357 | +</style> |
| 1 | -import { BasicColumn } from '/@/components/Table'; | ||
| 2 | -import { FormSchema } from '/@/components/Table'; | ||
| 3 | -import { findDictItemByCode } from '/@/api/system/dict'; | 1 | +import { BasicColumn, FormSchema } from '/@/components/Table'; |
| 2 | +import { ref } from 'vue'; | ||
| 3 | +import { | ||
| 4 | + screenLinkOrganizationGetApi, | ||
| 5 | + screenLinkPagePutApi, | ||
| 6 | +} from '/@/api/ruleengine/ruleengineApi'; | ||
| 7 | +import { h } from 'vue'; | ||
| 8 | +import { Switch } from 'ant-design-vue'; | ||
| 9 | +import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 10 | +import { copyTransFun } from '/@/utils/fnUtils'; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 所使用的枚举值 | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | +export enum TriggerEnum { | ||
| 17 | + IS_DEVICE_ACT = 'DEVICE_ACT', | ||
| 18 | + IS_TIME_ACT = 'TIME_ACT', | ||
| 19 | + IS_SCENE_ACT = 'SCENE_ACT', | ||
| 20 | + IS_HAND_ACT = 'HAND_ACT', | ||
| 21 | + IS_MSG_NOTIFY = 'MSG_NOTIFY', | ||
| 22 | + IS_DEVICE_STATUS = 'DEVICE_STATUS', | ||
| 23 | + IS_TIME_ALL = 'TIME_ALL', | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +export enum AttributeActionEnum { | ||
| 27 | + IS_ATTRIBUTE_ACT = 'ATTRIBUTE_ACT', | ||
| 28 | + IS_UP_DOWN_ACT = 'UP_DOWN_ACT', | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +export enum AttrAndWenDuEnum { | ||
| 32 | + IS_ALL_ATTR = 'ALL_ATTR', | ||
| 33 | + IS_WENDU_ACT = 'WENDU', | ||
| 34 | + IS_SHIDU = 'SHINDU', | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +export const isShiDu = (type: string) => { | ||
| 38 | + return type === AttrAndWenDuEnum.IS_SHIDU; | ||
| 39 | +}; | ||
| 40 | +export const isWenDu = (type: string) => { | ||
| 41 | + return type === AttrAndWenDuEnum.IS_WENDU_ACT; | ||
| 42 | +}; | ||
| 43 | + | ||
| 44 | +export const isTimeAll = (type: string) => { | ||
| 45 | + return type === TriggerEnum.IS_TIME_ALL; | ||
| 46 | +}; | ||
| 47 | + | ||
| 48 | +export const isMsg = (type: string) => { | ||
| 49 | + return type === TriggerEnum.IS_MSG_NOTIFY; | ||
| 50 | +}; | ||
| 51 | + | ||
| 52 | +export const isUpAndDown = (type: string) => { | ||
| 53 | + return type === AttributeActionEnum.IS_UP_DOWN_ACT; | ||
| 54 | +}; | ||
| 55 | + | ||
| 56 | +export const isDevice = (type: string) => { | ||
| 57 | + return type === TriggerEnum.IS_DEVICE_ACT; | ||
| 58 | +}; | ||
| 59 | + | ||
| 60 | +export const isTime = (type: string) => { | ||
| 61 | + return type === TriggerEnum.IS_TIME_ACT; | ||
| 62 | +}; | ||
| 63 | + | ||
| 64 | +export const isScene = (type: string) => { | ||
| 65 | + return type === TriggerEnum.IS_SCENE_ACT; | ||
| 66 | +}; | ||
| 67 | + | ||
| 68 | +export const isHand = (type: string) => { | ||
| 69 | + return type === TriggerEnum.IS_HAND_ACT; | ||
| 70 | +}; | ||
| 4 | 71 | ||
| 5 | export const columns: BasicColumn[] = [ | 72 | export const columns: BasicColumn[] = [ |
| 6 | { | 73 | { |
| @@ -10,20 +77,52 @@ export const columns: BasicColumn[] = [ | @@ -10,20 +77,52 @@ export const columns: BasicColumn[] = [ | ||
| 10 | }, | 77 | }, |
| 11 | { | 78 | { |
| 12 | title: '触发方式', | 79 | title: '触发方式', |
| 13 | - dataIndex: 'act', | 80 | + dataIndex: 'triggerEvent', |
| 81 | + format: (text: string, record: Recordable) => { | ||
| 82 | + return record.triggers[0]?.triggerEvent == 'DEVICE_ACT' | ||
| 83 | + ? '设备触发' | ||
| 84 | + : record.triggers[0]?.triggerEvent == 'TIME_ACT' | ||
| 85 | + ? '定时触发' | ||
| 86 | + : record.triggers[0]?.triggerEvent == 'SCENE_ACT' | ||
| 87 | + ? '场景触发' | ||
| 88 | + : '手动触发'; | ||
| 89 | + }, | ||
| 14 | width: 200, | 90 | width: 200, |
| 15 | }, | 91 | }, |
| 16 | { | 92 | { |
| 17 | title: '状态', | 93 | title: '状态', |
| 18 | dataIndex: 'status', | 94 | dataIndex: 'status', |
| 19 | - width: 200, | ||
| 20 | - component: 'RadioButtonGroup', | ||
| 21 | - defaultValue: 0, | ||
| 22 | - componentProps: { | ||
| 23 | - options: [ | ||
| 24 | - { label: '启用', value: 1 }, | ||
| 25 | - { label: '停用', value: 0 }, | ||
| 26 | - ], | 95 | + width: 120, |
| 96 | + customRender: ({ record }) => { | ||
| 97 | + if (!Reflect.has(record, 'pendingStatus')) { | ||
| 98 | + record.pendingStatus = false; | ||
| 99 | + } | ||
| 100 | + return h(Switch, { | ||
| 101 | + checked: record.status === 1, | ||
| 102 | + checkedChildren: '已启用', | ||
| 103 | + unCheckedChildren: '已禁用', | ||
| 104 | + loading: record.pendingStatus, | ||
| 105 | + onChange(checked: boolean) { | ||
| 106 | + record.pendingStatus = true; | ||
| 107 | + const newStatus = checked ? 1 : 0; | ||
| 108 | + const { createMessage } = useMessage(); | ||
| 109 | + screenLinkPagePutApi(record.id, newStatus) | ||
| 110 | + .then(() => { | ||
| 111 | + record.status = newStatus; | ||
| 112 | + if (record.status == 1) { | ||
| 113 | + createMessage.success(`已启用`); | ||
| 114 | + } else { | ||
| 115 | + createMessage.error('已禁用'); | ||
| 116 | + } | ||
| 117 | + }) | ||
| 118 | + .catch(() => { | ||
| 119 | + createMessage.error('已禁用'); | ||
| 120 | + }) | ||
| 121 | + .finally(() => { | ||
| 122 | + record.pendingStatus = false; | ||
| 123 | + }); | ||
| 124 | + }, | ||
| 125 | + }); | ||
| 27 | }, | 126 | }, |
| 28 | }, | 127 | }, |
| 29 | { | 128 | { |
| @@ -38,11 +137,13 @@ export const columns: BasicColumn[] = [ | @@ -38,11 +137,13 @@ export const columns: BasicColumn[] = [ | ||
| 38 | }, | 137 | }, |
| 39 | ]; | 138 | ]; |
| 40 | 139 | ||
| 140 | +export const getData = ref(null); | ||
| 141 | + | ||
| 41 | export const formSchema: FormSchema[] = [ | 142 | export const formSchema: FormSchema[] = [ |
| 42 | { | 143 | { |
| 43 | field: 'name', | 144 | field: 'name', |
| 44 | label: '场景联动名称', | 145 | label: '场景联动名称', |
| 45 | - colProps: { span: 20 }, | 146 | + colProps: { span: 12 }, |
| 46 | required: true, | 147 | required: true, |
| 47 | component: 'Input', | 148 | component: 'Input', |
| 48 | componentProps: { | 149 | componentProps: { |
| @@ -50,24 +151,40 @@ export const formSchema: FormSchema[] = [ | @@ -50,24 +151,40 @@ export const formSchema: FormSchema[] = [ | ||
| 50 | }, | 151 | }, |
| 51 | }, | 152 | }, |
| 52 | { | 153 | { |
| 154 | + required: true, | ||
| 53 | field: 'organizationId', | 155 | field: 'organizationId', |
| 54 | label: '所属组织', | 156 | label: '所属组织', |
| 55 | - required: true, | ||
| 56 | - colProps: { span: 20 }, | ||
| 57 | - component: 'ApiSelect', | ||
| 58 | - componentProps: { | ||
| 59 | - api: findDictItemByCode, | ||
| 60 | - params: { | ||
| 61 | - dictCode: 'message_type', | ||
| 62 | - }, | ||
| 63 | - labelField: 'itemText', | ||
| 64 | - valueField: 'itemValue', | 157 | + colProps: { span: 12 }, |
| 158 | + component: 'ApiTreeSelect', | ||
| 159 | + componentProps: ({ formModel, formActionType }) => { | ||
| 160 | + return { | ||
| 161 | + api: async () => { | ||
| 162 | + const data = await screenLinkOrganizationGetApi(); | ||
| 163 | + copyTransFun(data as any as any[]); | ||
| 164 | + return data; | ||
| 165 | + }, | ||
| 166 | + onChange: async (v) => { | ||
| 167 | + console.log(v); | ||
| 168 | + if (v == undefined) { | ||
| 169 | + formModel.deviceId = undefined; | ||
| 170 | + const { updateSchema } = formActionType; | ||
| 171 | + updateSchema({ | ||
| 172 | + field: 'deviceId', | ||
| 173 | + componentProps: { | ||
| 174 | + options: undefined, | ||
| 175 | + }, | ||
| 176 | + }); | ||
| 177 | + } else { | ||
| 178 | + getData.value = v; | ||
| 179 | + } | ||
| 180 | + }, | ||
| 181 | + }; | ||
| 65 | }, | 182 | }, |
| 66 | }, | 183 | }, |
| 67 | { | 184 | { |
| 68 | field: 'description', | 185 | field: 'description', |
| 69 | label: '描述', | 186 | label: '描述', |
| 70 | - // colProps: { span: 20 }, | 187 | + colProps: { span: 12 }, |
| 71 | component: 'InputTextArea', | 188 | component: 'InputTextArea', |
| 72 | componentProps: { | 189 | componentProps: { |
| 73 | placeholder: '请输入描述', | 190 | placeholder: '请输入描述', |
| @@ -79,11 +196,15 @@ export const searchFormSchema: FormSchema[] = [ | @@ -79,11 +196,15 @@ export const searchFormSchema: FormSchema[] = [ | ||
| 79 | { | 196 | { |
| 80 | field: 'organizationId', | 197 | field: 'organizationId', |
| 81 | label: '所属组织', | 198 | label: '所属组织', |
| 199 | + colProps: { span: 8 }, | ||
| 82 | component: 'ApiTreeSelect', | 200 | component: 'ApiTreeSelect', |
| 83 | componentProps: { | 201 | componentProps: { |
| 84 | - placeholder: '请输入所属组织', | 202 | + api: async () => { |
| 203 | + const data = await screenLinkOrganizationGetApi(); | ||
| 204 | + copyTransFun(data as any as any[]); | ||
| 205 | + return data; | ||
| 206 | + }, | ||
| 85 | }, | 207 | }, |
| 86 | - colProps: { span: 7 }, | ||
| 87 | }, | 208 | }, |
| 88 | { | 209 | { |
| 89 | field: 'name', | 210 | field: 'name', |
| @@ -96,10 +217,14 @@ export const searchFormSchema: FormSchema[] = [ | @@ -96,10 +217,14 @@ export const searchFormSchema: FormSchema[] = [ | ||
| 96 | }, | 217 | }, |
| 97 | { | 218 | { |
| 98 | field: 'status', | 219 | field: 'status', |
| 99 | - label: '状态', | ||
| 100 | - component: 'ApiSelect', | 220 | + label: '设备状态', |
| 221 | + component: 'Select', | ||
| 101 | componentProps: { | 222 | componentProps: { |
| 102 | placeholder: '请选择状态', | 223 | placeholder: '请选择状态', |
| 224 | + options: [ | ||
| 225 | + { label: '已启用', value: '1' }, | ||
| 226 | + { label: '未启用', value: '0' }, | ||
| 227 | + ], | ||
| 103 | }, | 228 | }, |
| 104 | colProps: { span: 4 }, | 229 | colProps: { span: 4 }, |
| 105 | }, | 230 | }, |
| @@ -107,96 +232,177 @@ export const searchFormSchema: FormSchema[] = [ | @@ -107,96 +232,177 @@ export const searchFormSchema: FormSchema[] = [ | ||
| 107 | 232 | ||
| 108 | export const useTriggerDrawerSchema: FormSchema[] = [ | 233 | export const useTriggerDrawerSchema: FormSchema[] = [ |
| 109 | { | 234 | { |
| 110 | - field: 'field0a', | 235 | + field: 'triggerEvent', |
| 111 | label: '', | 236 | label: '', |
| 112 | - component: 'ApiSelect', | 237 | + component: 'Select', |
| 113 | componentProps: { | 238 | componentProps: { |
| 114 | - api: findDictItemByCode, | ||
| 115 | - params: { | ||
| 116 | - dictCode: 'message_type', | ||
| 117 | - }, | ||
| 118 | - labelField: 'itemText', | ||
| 119 | - valueField: 'itemValue', | ||
| 120 | - }, | ||
| 121 | - colProps: { | ||
| 122 | - span: 6, | 239 | + placeholder: '设备触发', |
| 240 | + options: [ | ||
| 241 | + { label: '设备触发', value: 'DEVICE_ACT' }, | ||
| 242 | + { label: '定时触发', value: 'TIME_ACT' }, | ||
| 243 | + { label: '场景触发', value: 'SCENE_ACT' }, | ||
| 244 | + { label: '手动触发', value: 'HAND_ACT' }, | ||
| 245 | + ], | ||
| 123 | }, | 246 | }, |
| 124 | - required: true, | 247 | + colProps: { span: 12 }, |
| 125 | }, | 248 | }, |
| 126 | { | 249 | { |
| 127 | - field: 'field0b', | 250 | + field: 'deviceId', |
| 128 | label: '', | 251 | label: '', |
| 129 | - component: 'Input', | 252 | + component: 'Select', |
| 130 | componentProps: { | 253 | componentProps: { |
| 131 | - placeholder: '请输入', | ||
| 132 | - }, | ||
| 133 | - onChange: (e: any) => { | ||
| 134 | - console.log(e); | 254 | + placeholder: '请选择设备', |
| 135 | }, | 255 | }, |
| 256 | + ifShow: ({ values }) => | ||
| 257 | + !isTime(Reflect.get(values, 'triggerEvent')) && | ||
| 258 | + !isScene(Reflect.get(values, 'triggerEvent')) && | ||
| 259 | + !isHand(Reflect.get(values, 'triggerEvent')), | ||
| 136 | colProps: { | 260 | colProps: { |
| 137 | - span: 6, | 261 | + span: 12, |
| 138 | }, | 262 | }, |
| 139 | - required: true, | ||
| 140 | }, | 263 | }, |
| 141 | { | 264 | { |
| 142 | - field: 'field0c', | 265 | + field: '', |
| 266 | + component: 'Input', | ||
| 143 | label: '', | 267 | label: '', |
| 144 | - component: 'ApiSelect', | ||
| 145 | componentProps: { | 268 | componentProps: { |
| 146 | - api: findDictItemByCode, | ||
| 147 | - params: { | ||
| 148 | - dictCode: 'message_type', | ||
| 149 | - }, | ||
| 150 | - labelField: 'itemText', | ||
| 151 | - valueField: 'itemValue', | 269 | + placeholder: '请输入Cron表达式', |
| 152 | }, | 270 | }, |
| 153 | colProps: { | 271 | colProps: { |
| 154 | - span: 6, | 272 | + span: 12, |
| 155 | }, | 273 | }, |
| 156 | - required: true, | 274 | + ifShow: ({ values }) => isTime(Reflect.get(values, 'triggerEvent')), |
| 157 | }, | 275 | }, |
| 158 | { | 276 | { |
| 159 | - field: 'field0d', | ||
| 160 | - component: 'ApiSelect', | 277 | + field: 'touchWay', |
| 161 | label: '', | 278 | label: '', |
| 279 | + component: 'Select', | ||
| 162 | componentProps: { | 280 | componentProps: { |
| 163 | - placeholder: '请选择', | 281 | + placeholder: '属性触发', |
| 282 | + options: [ | ||
| 283 | + { label: '属性触发', value: 'ATTRIBUTE_ACT' }, | ||
| 284 | + { label: '上下线触发', value: 'UP_DOWN_ACT' }, | ||
| 285 | + ], | ||
| 164 | }, | 286 | }, |
| 165 | - colProps: { | ||
| 166 | - span: 6, | 287 | + ifShow: ({ values }) => |
| 288 | + !isTime(Reflect.get(values, 'triggerEvent')) && | ||
| 289 | + !isScene(Reflect.get(values, 'triggerEvent')) && | ||
| 290 | + !isHand(Reflect.get(values, 'triggerEvent')), | ||
| 291 | + colProps: { span: 12 }, | ||
| 292 | + }, | ||
| 293 | + { | ||
| 294 | + field: '', | ||
| 295 | + label: '', | ||
| 296 | + component: 'Select', | ||
| 297 | + componentProps: { | ||
| 298 | + placeholder: '请选择上下线', | ||
| 299 | + options: [ | ||
| 300 | + { label: '上下线', value: '1' }, | ||
| 301 | + { label: '上线', value: '2' }, | ||
| 302 | + { label: '下线', value: '3' }, | ||
| 303 | + ], | ||
| 167 | }, | 304 | }, |
| 168 | - required: true, | 305 | + colProps: { span: 12 }, |
| 306 | + ifShow: ({ values }) => | ||
| 307 | + isUpAndDown(Reflect.get(values, 'touchWay')) && | ||
| 308 | + !isTime(Reflect.get(values, 'triggerEvent')) && | ||
| 309 | + !isScene(Reflect.get(values, 'triggerEvent')) && | ||
| 310 | + !isHand(Reflect.get(values, 'triggerEvent')), | ||
| 169 | }, | 311 | }, |
| 170 | { | 312 | { |
| 171 | - field: 'field0e', | ||
| 172 | - component: 'ApiSelect', | 313 | + field: 'attributeChoose', |
| 173 | label: '', | 314 | label: '', |
| 315 | + component: 'Select', | ||
| 174 | componentProps: { | 316 | componentProps: { |
| 175 | - placeholder: '请选择', | 317 | + placeholder: '全部属性', |
| 318 | + options: [ | ||
| 319 | + { label: '全部属性', value: 'All_ATTR' }, | ||
| 320 | + { label: 'wendu', value: 'WENDU' }, | ||
| 321 | + ], | ||
| 176 | }, | 322 | }, |
| 177 | - colProps: { | ||
| 178 | - span: 6, | 323 | + ifShow: ({ values }) => |
| 324 | + !isTime(Reflect.get(values, 'triggerEvent')) && | ||
| 325 | + !isScene(Reflect.get(values, 'triggerEvent')) && | ||
| 326 | + !isHand(Reflect.get(values, 'triggerEvent')) && | ||
| 327 | + !isUpAndDown(Reflect.get(values, 'touchWay')), | ||
| 328 | + colProps: { span: 12 }, | ||
| 329 | + }, | ||
| 330 | + { | ||
| 331 | + field: 'compare', | ||
| 332 | + label: '', | ||
| 333 | + component: 'Select', | ||
| 334 | + componentProps: { | ||
| 335 | + placeholder: '', | ||
| 336 | + options: [ | ||
| 337 | + { label: '=', value: '0' }, | ||
| 338 | + { label: '<', value: '1' }, | ||
| 339 | + { label: '>', value: '2' }, | ||
| 340 | + { label: '<=', value: '3' }, | ||
| 341 | + { label: '>=', value: '4' }, | ||
| 342 | + ], | ||
| 179 | }, | 343 | }, |
| 180 | - required: true, | 344 | + ifShow: ({ values }) => |
| 345 | + isWenDu(Reflect.get(values, 'attributeChoose')) && | ||
| 346 | + !isUpAndDown(Reflect.get(values, 'touchWay')) && | ||
| 347 | + !isTime(Reflect.get(values, 'triggerEvent')) && | ||
| 348 | + !isScene(Reflect.get(values, 'triggerEvent')) && | ||
| 349 | + !isHand(Reflect.get(values, 'triggerEvent')), | ||
| 350 | + colProps: { span: 12 }, | ||
| 181 | }, | 351 | }, |
| 182 | { | 352 | { |
| 183 | - field: 'field0f', | 353 | + field: 'value', |
| 184 | component: 'Input', | 354 | component: 'Input', |
| 185 | label: '', | 355 | label: '', |
| 186 | componentProps: { | 356 | componentProps: { |
| 187 | - placeholder: '请输入', | 357 | + placeholder: '请输入比较值', |
| 358 | + }, | ||
| 359 | + ifShow: ({ values }) => | ||
| 360 | + isWenDu(Reflect.get(values, 'attributeChoose')) && | ||
| 361 | + !isUpAndDown(Reflect.get(values, 'touchWay')) && | ||
| 362 | + !isTime(Reflect.get(values, 'triggerEvent')) && | ||
| 363 | + !isScene(Reflect.get(values, 'triggerEvent')) && | ||
| 364 | + !isHand(Reflect.get(values, 'triggerEvent')), | ||
| 365 | + colProps: { | ||
| 366 | + span: 12, | ||
| 188 | }, | 367 | }, |
| 368 | + }, | ||
| 369 | + | ||
| 370 | + { | ||
| 371 | + field: 'sceneLinkageId', | ||
| 372 | + label: '', | ||
| 373 | + component: 'Select', | ||
| 189 | colProps: { | 374 | colProps: { |
| 190 | - span: 6, | 375 | + span: 12, |
| 191 | }, | 376 | }, |
| 192 | - required: true, | 377 | + componentProps: { |
| 378 | + placeholder: '请输入场景触发器', | ||
| 379 | + options: [ | ||
| 380 | + { label: '场景触发器1', value: '1' }, | ||
| 381 | + { label: '场景触发器2', value: '2' }, | ||
| 382 | + { label: '场景触发器3', value: '3' }, | ||
| 383 | + ], | ||
| 384 | + }, | ||
| 385 | + ifShow: ({ values }) => isScene(Reflect.get(values, 'triggerEvent')), | ||
| 193 | }, | 386 | }, |
| 387 | + | ||
| 194 | { | 388 | { |
| 195 | - field: '0', | 389 | + field: '', |
| 390 | + label: '', | ||
| 196 | component: 'ApiSelect', | 391 | component: 'ApiSelect', |
| 392 | + colProps: { | ||
| 393 | + span: 12, | ||
| 394 | + }, | ||
| 395 | + componentProps: { | ||
| 396 | + placeholder: '暂不实现', | ||
| 397 | + }, | ||
| 398 | + ifShow: ({ values }) => isHand(Reflect.get(values, 'triggerEvent')), | ||
| 399 | + }, | ||
| 400 | + { | ||
| 401 | + field: '0', | ||
| 402 | + component: 'Input', | ||
| 197 | label: ' ', | 403 | label: ' ', |
| 198 | colProps: { | 404 | colProps: { |
| 199 | - span: 6, | 405 | + span: 12, |
| 200 | }, | 406 | }, |
| 201 | slot: 'add', | 407 | slot: 'add', |
| 202 | }, | 408 | }, |
| @@ -204,86 +410,147 @@ export const useTriggerDrawerSchema: FormSchema[] = [ | @@ -204,86 +410,147 @@ export const useTriggerDrawerSchema: FormSchema[] = [ | ||
| 204 | 410 | ||
| 205 | export const useConditionDrawerSchema: FormSchema[] = [ | 411 | export const useConditionDrawerSchema: FormSchema[] = [ |
| 206 | { | 412 | { |
| 207 | - field: 'field0a', | ||
| 208 | - component: 'ApiSelect', | 413 | + field: 'status', |
| 209 | label: '', | 414 | label: '', |
| 415 | + component: 'Select', | ||
| 210 | componentProps: { | 416 | componentProps: { |
| 211 | - placeholder: '请选择', | ||
| 212 | - }, | ||
| 213 | - colProps: { | ||
| 214 | - span: 6, | 417 | + placeholder: '设备状态', |
| 418 | + options: [ | ||
| 419 | + { label: '设备触发', value: 'DEVICE_STATUS' }, | ||
| 420 | + { label: '时间范围', value: 'TIME_ALL' }, | ||
| 421 | + ], | ||
| 215 | }, | 422 | }, |
| 216 | - required: true, | 423 | + colProps: { span: 12 }, |
| 217 | }, | 424 | }, |
| 218 | { | 425 | { |
| 219 | - field: 'field0b', | ||
| 220 | - component: 'Input', | 426 | + field: 'deviceId', |
| 221 | label: '', | 427 | label: '', |
| 428 | + component: 'Select', | ||
| 222 | componentProps: { | 429 | componentProps: { |
| 223 | - placeholder: '请输入', | 430 | + placeholder: '请选择设备', |
| 431 | + }, | ||
| 432 | + ifShow: ({ values }) => !isTimeAll(Reflect.get(values, 'status')), | ||
| 433 | + colProps: { | ||
| 434 | + span: 12, | ||
| 224 | }, | 435 | }, |
| 225 | - onChange: (e: any) => { | ||
| 226 | - console.log(e); | 436 | + }, |
| 437 | + { | ||
| 438 | + field: 'createTime', | ||
| 439 | + component: 'DatePicker', | ||
| 440 | + componentProps: { | ||
| 441 | + placeholder: '请选择起始时间', | ||
| 227 | }, | 442 | }, |
| 228 | colProps: { | 443 | colProps: { |
| 229 | - span: 6, | 444 | + span: 12, |
| 230 | }, | 445 | }, |
| 231 | - required: true, | 446 | + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'status')), |
| 232 | }, | 447 | }, |
| 233 | { | 448 | { |
| 234 | - field: 'field0c', | ||
| 235 | - component: 'ApiSelect', | ||
| 236 | - label: '', | 449 | + field: 'updateTime', |
| 450 | + component: 'DatePicker', | ||
| 237 | componentProps: { | 451 | componentProps: { |
| 238 | - placeholder: '请选择', | 452 | + placeholder: '请选择结束时间', |
| 239 | }, | 453 | }, |
| 240 | colProps: { | 454 | colProps: { |
| 241 | - span: 6, | 455 | + span: 12, |
| 242 | }, | 456 | }, |
| 243 | - required: true, | 457 | + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'status')), |
| 244 | }, | 458 | }, |
| 245 | { | 459 | { |
| 246 | - field: 'field0d', | ||
| 247 | - component: 'ApiSelect', | 460 | + field: 'property', |
| 248 | label: '', | 461 | label: '', |
| 462 | + component: 'Select', | ||
| 249 | componentProps: { | 463 | componentProps: { |
| 250 | - placeholder: '请选择', | 464 | + placeholder: '请选择或者输入属性', |
| 465 | + options: [ | ||
| 466 | + { label: 'shidu', value: 'SHINDU' }, | ||
| 467 | + { label: 'wendu', value: 'WENDU' }, | ||
| 468 | + ], | ||
| 251 | }, | 469 | }, |
| 252 | - colProps: { | ||
| 253 | - span: 6, | 470 | + ifShow: ({ values }) => !isTimeAll(Reflect.get(values, 'status')), |
| 471 | + colProps: { span: 12 }, | ||
| 472 | + }, | ||
| 473 | + { | ||
| 474 | + field: '', | ||
| 475 | + label: '', | ||
| 476 | + component: 'Input', | ||
| 477 | + componentProps: { | ||
| 478 | + placeholder: '无', | ||
| 479 | + style: { | ||
| 480 | + visibility: 'hidden', | ||
| 481 | + }, | ||
| 254 | }, | 482 | }, |
| 255 | - required: true, | 483 | + colProps: { span: 12 }, |
| 256 | }, | 484 | }, |
| 257 | { | 485 | { |
| 258 | - field: 'field0e', | ||
| 259 | - component: 'ApiSelect', | 486 | + field: 'compare', |
| 487 | + label: '', | ||
| 488 | + component: 'Select', | ||
| 489 | + componentProps: { | ||
| 490 | + placeholder: '', | ||
| 491 | + options: [ | ||
| 492 | + { label: '=', value: '0' }, | ||
| 493 | + { label: '<', value: '1' }, | ||
| 494 | + { label: '>', value: '2' }, | ||
| 495 | + { label: '<=', value: '3' }, | ||
| 496 | + { label: '>=', value: '4' }, | ||
| 497 | + ], | ||
| 498 | + }, | ||
| 499 | + ifShow: ({ values }) => | ||
| 500 | + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 501 | + colProps: { span: 12 }, | ||
| 502 | + }, | ||
| 503 | + { | ||
| 504 | + field: 'value', | ||
| 505 | + component: 'Input', | ||
| 260 | label: '', | 506 | label: '', |
| 261 | componentProps: { | 507 | componentProps: { |
| 262 | - placeholder: '请选择', | 508 | + placeholder: '请输入比较值', |
| 263 | }, | 509 | }, |
| 510 | + ifShow: ({ values }) => | ||
| 511 | + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 264 | colProps: { | 512 | colProps: { |
| 265 | - span: 6, | 513 | + span: 12, |
| 266 | }, | 514 | }, |
| 267 | - required: true, | ||
| 268 | }, | 515 | }, |
| 516 | + | ||
| 269 | { | 517 | { |
| 270 | - field: 'field0f', | 518 | + field: 'compare', |
| 519 | + label: '', | ||
| 520 | + component: 'Select', | ||
| 521 | + componentProps: { | ||
| 522 | + placeholder: '', | ||
| 523 | + options: [ | ||
| 524 | + { label: '=', value: '0' }, | ||
| 525 | + { label: '<', value: '1' }, | ||
| 526 | + { label: '>', value: '2' }, | ||
| 527 | + { label: '<=', value: '3' }, | ||
| 528 | + { label: '>=', value: '4' }, | ||
| 529 | + ], | ||
| 530 | + }, | ||
| 531 | + ifShow: ({ values }) => | ||
| 532 | + isWenDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 533 | + colProps: { span: 12 }, | ||
| 534 | + }, | ||
| 535 | + { | ||
| 536 | + field: 'value', | ||
| 271 | component: 'Input', | 537 | component: 'Input', |
| 272 | label: '', | 538 | label: '', |
| 273 | componentProps: { | 539 | componentProps: { |
| 274 | - placeholder: '请输入', | 540 | + placeholder: '请输入比较值', |
| 275 | }, | 541 | }, |
| 542 | + ifShow: ({ values }) => | ||
| 543 | + isWenDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')), | ||
| 276 | colProps: { | 544 | colProps: { |
| 277 | - span: 6, | 545 | + span: 12, |
| 278 | }, | 546 | }, |
| 279 | - required: true, | ||
| 280 | }, | 547 | }, |
| 281 | { | 548 | { |
| 282 | field: '0', | 549 | field: '0', |
| 283 | - component: 'ApiSelect', | 550 | + component: 'Input', |
| 284 | label: ' ', | 551 | label: ' ', |
| 285 | colProps: { | 552 | colProps: { |
| 286 | - span: 6, | 553 | + span: 12, |
| 287 | }, | 554 | }, |
| 288 | slot: 'add', | 555 | slot: 'add', |
| 289 | }, | 556 | }, |
| @@ -291,86 +558,119 @@ export const useConditionDrawerSchema: FormSchema[] = [ | @@ -291,86 +558,119 @@ export const useConditionDrawerSchema: FormSchema[] = [ | ||
| 291 | 558 | ||
| 292 | export const useActionDrawerSchema: FormSchema[] = [ | 559 | export const useActionDrawerSchema: FormSchema[] = [ |
| 293 | { | 560 | { |
| 294 | - field: 'field0a', | ||
| 295 | - component: 'ApiSelect', | 561 | + field: 'outTarget', |
| 562 | + label: '', | ||
| 563 | + component: 'Select', | ||
| 564 | + componentProps: { | ||
| 565 | + placeholder: '设备输出', | ||
| 566 | + options: [ | ||
| 567 | + { label: '设备输出', value: 'DEVICE_OUT' }, | ||
| 568 | + { label: '消息通知', value: 'MSG_NOTIFY' }, | ||
| 569 | + { label: '场景联动', value: 'SCENE_ACT' }, | ||
| 570 | + ], | ||
| 571 | + }, | ||
| 572 | + colProps: { span: 12 }, | ||
| 573 | + }, | ||
| 574 | + { | ||
| 575 | + field: 'deviceId', | ||
| 296 | label: '', | 576 | label: '', |
| 577 | + component: 'Select', | ||
| 297 | componentProps: { | 578 | componentProps: { |
| 298 | - placeholder: '请选择', | 579 | + placeholder: '请选择设备', |
| 299 | }, | 580 | }, |
| 581 | + ifShow: ({ values }) => | ||
| 582 | + !isScene(Reflect.get(values, 'outTarget')) && !isMsg(Reflect.get(values, 'outTarget')), | ||
| 300 | colProps: { | 583 | colProps: { |
| 301 | - span: 6, | 584 | + span: 12, |
| 302 | }, | 585 | }, |
| 303 | - required: true, | ||
| 304 | }, | 586 | }, |
| 305 | { | 587 | { |
| 306 | - field: 'field0b', | 588 | + field: 'command', |
| 307 | component: 'Input', | 589 | component: 'Input', |
| 308 | label: '', | 590 | label: '', |
| 309 | componentProps: { | 591 | componentProps: { |
| 310 | - placeholder: '请输入', | ||
| 311 | - }, | ||
| 312 | - onChange: (e: any) => { | ||
| 313 | - console.log(e); | 592 | + placeholder: '请输入下发指定', |
| 314 | }, | 593 | }, |
| 594 | + ifShow: ({ values }) => | ||
| 595 | + !isScene(Reflect.get(values, 'outTarget')) && !isMsg(Reflect.get(values, 'outTarget')), | ||
| 315 | colProps: { | 596 | colProps: { |
| 316 | - span: 6, | 597 | + span: 12, |
| 317 | }, | 598 | }, |
| 318 | - required: true, | ||
| 319 | }, | 599 | }, |
| 320 | { | 600 | { |
| 321 | - field: 'field0c', | ||
| 322 | - component: 'ApiSelect', | 601 | + field: '', |
| 323 | label: '', | 602 | label: '', |
| 603 | + component: 'Input', | ||
| 324 | componentProps: { | 604 | componentProps: { |
| 325 | - placeholder: '请选择', | ||
| 326 | - }, | ||
| 327 | - colProps: { | ||
| 328 | - span: 6, | 605 | + placeholder: '无', |
| 606 | + style: { | ||
| 607 | + visibility: 'hidden', | ||
| 608 | + }, | ||
| 329 | }, | 609 | }, |
| 330 | - required: true, | 610 | + colProps: { span: 12 }, |
| 331 | }, | 611 | }, |
| 332 | { | 612 | { |
| 333 | - field: 'field0d', | ||
| 334 | - component: 'ApiSelect', | 613 | + field: '', |
| 614 | + component: 'Input', | ||
| 335 | label: '', | 615 | label: '', |
| 336 | componentProps: { | 616 | componentProps: { |
| 337 | - placeholder: '请选择', | 617 | + placeholder: '暂不实现', |
| 338 | }, | 618 | }, |
| 339 | colProps: { | 619 | colProps: { |
| 340 | - span: 6, | 620 | + span: 12, |
| 341 | }, | 621 | }, |
| 342 | - required: true, | 622 | + ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), |
| 343 | }, | 623 | }, |
| 344 | { | 624 | { |
| 345 | - field: 'field0e', | ||
| 346 | - component: 'ApiSelect', | 625 | + field: '', |
| 347 | label: '', | 626 | label: '', |
| 627 | + component: 'Input', | ||
| 348 | componentProps: { | 628 | componentProps: { |
| 349 | - placeholder: '请选择', | 629 | + placeholder: '无', |
| 630 | + style: { | ||
| 631 | + visibility: 'hidden', | ||
| 632 | + }, | ||
| 350 | }, | 633 | }, |
| 634 | + colProps: { span: 12 }, | ||
| 635 | + ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), | ||
| 636 | + }, | ||
| 637 | + { | ||
| 638 | + field: 'sceneLinkageId', | ||
| 639 | + label: '', | ||
| 640 | + component: 'Select', | ||
| 351 | colProps: { | 641 | colProps: { |
| 352 | - span: 6, | 642 | + span: 12, |
| 353 | }, | 643 | }, |
| 354 | - required: true, | 644 | + componentProps: { |
| 645 | + placeholder: '请选择场景触发器', | ||
| 646 | + options: [ | ||
| 647 | + { label: '场景触发器1', value: '1' }, | ||
| 648 | + { label: '场景触发器2', value: '2' }, | ||
| 649 | + { label: '场景触发器3', value: '3' }, | ||
| 650 | + { label: '场景触发器4', value: '4' }, | ||
| 651 | + ], | ||
| 652 | + }, | ||
| 653 | + ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), | ||
| 355 | }, | 654 | }, |
| 356 | { | 655 | { |
| 357 | - field: 'field0f', | ||
| 358 | - component: 'Input', | 656 | + field: '', |
| 359 | label: '', | 657 | label: '', |
| 658 | + component: 'Input', | ||
| 360 | componentProps: { | 659 | componentProps: { |
| 361 | - placeholder: '请输入', | ||
| 362 | - }, | ||
| 363 | - colProps: { | ||
| 364 | - span: 6, | 660 | + placeholder: '无', |
| 661 | + style: { | ||
| 662 | + visibility: 'hidden', | ||
| 663 | + }, | ||
| 365 | }, | 664 | }, |
| 366 | - required: true, | 665 | + colProps: { span: 12 }, |
| 666 | + ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), | ||
| 367 | }, | 667 | }, |
| 368 | { | 668 | { |
| 369 | field: '0', | 669 | field: '0', |
| 370 | - component: 'ApiSelect', | 670 | + component: 'Input', |
| 371 | label: ' ', | 671 | label: ' ', |
| 372 | colProps: { | 672 | colProps: { |
| 373 | - span: 6, | 673 | + span: 12, |
| 374 | }, | 674 | }, |
| 375 | slot: 'add', | 675 | slot: 'add', |
| 376 | }, | 676 | }, |
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | - <BasicTable :clickToRowSelect="true" @register="registerTable"> | 3 | + <BasicTable |
| 4 | + :rowSelection="{ type: 'checkbox' }" | ||
| 5 | + @selection-change="useSelectionChange" | ||
| 6 | + @register="registerTable" | ||
| 7 | + > | ||
| 4 | <template #toolbar> | 8 | <template #toolbar> |
| 5 | <a-button type="primary" @click="handleAdd"> 新增场景联动 </a-button> | 9 | <a-button type="primary" @click="handleAdd"> 新增场景联动 </a-button> |
| 6 | <a-button type="error" @click="handleToolbarDel"> 删除 </a-button> | 10 | <a-button type="error" @click="handleToolbarDel"> 删除 </a-button> |
| @@ -34,42 +38,39 @@ | @@ -34,42 +38,39 @@ | ||
| 34 | </div> | 38 | </div> |
| 35 | </template> | 39 | </template> |
| 36 | <script lang="ts"> | 40 | <script lang="ts"> |
| 37 | - import { defineComponent, ref, provide, watchEffect } from 'vue'; | ||
| 38 | - import { DeviceState, DeviceTypeEnum } from '/@/api/device/model/deviceModel'; | 41 | + import { defineComponent, reactive } from 'vue'; |
| 39 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 42 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
| 40 | import { useDrawer } from '/@/components/Drawer'; | 43 | import { useDrawer } from '/@/components/Drawer'; |
| 41 | import SceneLinkAgeDrawer from './useDrawer.vue'; | 44 | import SceneLinkAgeDrawer from './useDrawer.vue'; |
| 42 | import { columns, searchFormSchema } from './config.d'; | 45 | import { columns, searchFormSchema } from './config.d'; |
| 43 | import { useMessage } from '/@/hooks/web/useMessage'; | 46 | import { useMessage } from '/@/hooks/web/useMessage'; |
| 44 | - import { | ||
| 45 | - screenLinkPageGetApi, | ||
| 46 | - screenLinkPageAddApi, | ||
| 47 | - screenLinkPageUpdateApi, | ||
| 48 | - screenLinkPageDeleteApi, | ||
| 49 | - } from '/@/api/ruleengine/ruleengineApi'; | 47 | + import { screenLinkPageGetApi, screenLinkPageDeleteApi } from '/@/api/ruleengine/ruleengineApi'; |
| 50 | 48 | ||
| 51 | export default defineComponent({ | 49 | export default defineComponent({ |
| 52 | - name: 'DeviceManagement', | 50 | + name: 'index', |
| 53 | components: { BasicTable, SceneLinkAgeDrawer, TableAction }, | 51 | components: { BasicTable, SceneLinkAgeDrawer, TableAction }, |
| 54 | setup() { | 52 | setup() { |
| 55 | - let echoEditData = ref({}); | 53 | + let selectedRowKeys: Array<string> = []; |
| 54 | + let echoEditData = reactive({}); | ||
| 56 | const [registerDrawer, { openDrawer }] = useDrawer(); | 55 | const [registerDrawer, { openDrawer }] = useDrawer(); |
| 57 | const { createMessage } = useMessage(); | 56 | const { createMessage } = useMessage(); |
| 58 | - const [registerTable, { reload }] = useTable({ | 57 | + const [registerTable, { reload, getSelectRowKeys }] = useTable({ |
| 59 | title: '', | 58 | title: '', |
| 59 | + clickToRowSelect: false, | ||
| 60 | api: screenLinkPageGetApi, | 60 | api: screenLinkPageGetApi, |
| 61 | columns, | 61 | columns, |
| 62 | formConfig: { | 62 | formConfig: { |
| 63 | labelWidth: 120, | 63 | labelWidth: 120, |
| 64 | schemas: searchFormSchema, | 64 | schemas: searchFormSchema, |
| 65 | }, | 65 | }, |
| 66 | + filterFn: (registerTable) => { | ||
| 67 | + return registerTable; | ||
| 68 | + }, | ||
| 69 | + rowKey: 'id', | ||
| 66 | useSearchForm: true, | 70 | useSearchForm: true, |
| 67 | showTableSetting: true, | 71 | showTableSetting: true, |
| 68 | bordered: true, | 72 | bordered: true, |
| 69 | showIndexColumn: false, | 73 | showIndexColumn: false, |
| 70 | - rowSelection: { | ||
| 71 | - type: 'checkbox', | ||
| 72 | - }, | ||
| 73 | actionColumn: { | 74 | actionColumn: { |
| 74 | width: 180, | 75 | width: 180, |
| 75 | title: '操作', | 76 | title: '操作', |
| @@ -84,32 +85,35 @@ | @@ -84,32 +85,35 @@ | ||
| 84 | isUpdate: false, | 85 | isUpdate: false, |
| 85 | }); | 86 | }); |
| 86 | } | 87 | } |
| 87 | - function handleToolbarDel() { | 88 | + |
| 89 | + const useSelectionChange = () => { | ||
| 90 | + selectedRowKeys = getSelectRowKeys(); | ||
| 91 | + }; | ||
| 92 | + | ||
| 93 | + async function handleToolbarDel() { | ||
| 94 | + await screenLinkPageDeleteApi(selectedRowKeys); | ||
| 88 | createMessage.success('删除成功'); | 95 | createMessage.success('删除成功'); |
| 96 | + reload(); | ||
| 89 | } | 97 | } |
| 90 | - console.log(echoEditData.value); | ||
| 91 | 98 | ||
| 92 | function handleEdit(record: Recordable) { | 99 | function handleEdit(record: Recordable) { |
| 93 | openDrawer(true, { | 100 | openDrawer(true, { |
| 94 | record, | 101 | record, |
| 95 | isUpdate: true, | 102 | isUpdate: true, |
| 96 | }); | 103 | }); |
| 97 | - echoEditData.value = record; | 104 | + echoEditData = record; |
| 98 | } | 105 | } |
| 99 | - // watchEffect(() => { | ||
| 100 | - // console.log(echoEditData.value); | ||
| 101 | - // provide('getEchoData', echoEditData.value); | ||
| 102 | - // }); | ||
| 103 | - function handleDelete(record: Recordable) { | 106 | + async function handleDelete(record: Recordable) { |
| 104 | let ids = [record.id]; | 107 | let ids = [record.id]; |
| 105 | - console.log(ids); | 108 | + await screenLinkPageDeleteApi(ids); |
| 106 | createMessage.success('删除成功'); | 109 | createMessage.success('删除成功'); |
| 110 | + reload(); | ||
| 107 | } | 111 | } |
| 108 | - | ||
| 109 | function handleSuccess() { | 112 | function handleSuccess() { |
| 110 | reload(); | 113 | reload(); |
| 111 | } | 114 | } |
| 112 | return { | 115 | return { |
| 116 | + useSelectionChange, | ||
| 113 | echoEditData, | 117 | echoEditData, |
| 114 | registerTable, | 118 | registerTable, |
| 115 | registerDrawer, | 119 | registerDrawer, |
| @@ -118,8 +122,6 @@ | @@ -118,8 +122,6 @@ | ||
| 118 | handleEdit, | 122 | handleEdit, |
| 119 | handleDelete, | 123 | handleDelete, |
| 120 | handleSuccess, | 124 | handleSuccess, |
| 121 | - DeviceTypeEnum, | ||
| 122 | - DeviceState, | ||
| 123 | }; | 125 | }; |
| 124 | }, | 126 | }, |
| 125 | }); | 127 | }); |
| @@ -8,18 +8,18 @@ | @@ -8,18 +8,18 @@ | ||
| 8 | @ok="handleSubmit" | 8 | @ok="handleSubmit" |
| 9 | > | 9 | > |
| 10 | <BasicForm @register="registerForm" /> | 10 | <BasicForm @register="registerForm" /> |
| 11 | - <AddTriggerForm @get-triggerdata="getTriggerData" /> | ||
| 12 | - <AddConditiForm @get-conditiondata="getFormConditiData" /> | ||
| 13 | - <AddActionForm @get-actiondata="getFormActionData" /> | 11 | + <AddTriggerForm :deviceInfo="getDeviceInfo" @get-triggerdata="getTriggerData" /> |
| 12 | + <AddConditiForm :deviceInfo1="getDeviceInfo1" @get-conditiondata="getFormConditiData" /> | ||
| 13 | + <AddActionForm :deviceInfo2="getDeviceInfo2" @get-actiondata="getFormActionData" /> | ||
| 14 | </BasicDrawer> | 14 | </BasicDrawer> |
| 15 | </template> | 15 | </template> |
| 16 | <script lang="ts"> | 16 | <script lang="ts"> |
| 17 | - import { defineComponent, ref, computed, unref, inject, reactive, defineProps } from 'vue'; | 17 | + import { defineComponent, ref, computed, unref, reactive, watch } from 'vue'; |
| 18 | import { BasicForm, useForm } from '/@/components/Form'; | 18 | import { BasicForm, useForm } from '/@/components/Form'; |
| 19 | - import { formSchema } from './config.d'; | 19 | + import { formSchema, getData } from './config.d'; |
| 20 | import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; | 20 | import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; |
| 21 | - // import { saveOrEditMessageConfig } from '/@/api/message/config'; | ||
| 22 | - // import { useMessage } from '/@/hooks/web/useMessage'; | 21 | + import { screenLinkPageAddApi, screenLinkPageUpdateApi } from '/@/api/ruleengine/ruleengineApi'; |
| 22 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 23 | import AddTriggerForm from './addForm/trigger.vue'; | 23 | import AddTriggerForm from './addForm/trigger.vue'; |
| 24 | import AddActionForm from './addForm/doaction.vue'; | 24 | import AddActionForm from './addForm/doaction.vue'; |
| 25 | import AddConditiForm from './addForm/condition.vue'; | 25 | import AddConditiForm from './addForm/condition.vue'; |
| @@ -28,57 +28,110 @@ | @@ -28,57 +28,110 @@ | ||
| 28 | name: 'ConfigDrawer', | 28 | name: 'ConfigDrawer', |
| 29 | components: { BasicDrawer, BasicForm, AddTriggerForm, AddActionForm, AddConditiForm }, | 29 | components: { BasicDrawer, BasicForm, AddTriggerForm, AddActionForm, AddConditiForm }, |
| 30 | emits: ['success', 'register'], | 30 | emits: ['success', 'register'], |
| 31 | - setup() { | ||
| 32 | - const props = defineProps({ | ||
| 33 | - getChildrenData: Object, | ||
| 34 | - }); | ||
| 35 | - console.log(props); | ||
| 36 | - const getParentEchoData = reactive({}); | 31 | + setup(_, { emit }) { |
| 32 | + const { createMessage } = useMessage(); | ||
| 37 | const isUpdate = ref(true); | 33 | const isUpdate = ref(true); |
| 38 | - const getAllFormData = ref({}); | ||
| 39 | - const getTriggerFormData = ref({}); | ||
| 40 | - const getConditionFormData = ref({}); | ||
| 41 | - const getActionFormData = ref({}); | ||
| 42 | - const [registerForm, { resetFields, validateFields, getFieldsValue }] = useForm({ | ||
| 43 | - labelWidth: 120, | ||
| 44 | - schemas: formSchema, | ||
| 45 | - showActionButtonGroup: false, | 34 | + let triggersArray: any[] = reactive([]); |
| 35 | + let doConditionsArray: any[] = reactive([]); | ||
| 36 | + let doActionsArray: any[] = reactive([]); | ||
| 37 | + let getAllFormData: any = reactive({}); | ||
| 38 | + let getValuesFormData: any = reactive({}); | ||
| 39 | + let getId = ref(''); | ||
| 40 | + let getTriggerFormData: any = reactive({}); | ||
| 41 | + let getConditionFormData: any = reactive({}); | ||
| 42 | + let getActionFormData: any = reactive({}); | ||
| 43 | + let getDeviceInfo = ref(null); | ||
| 44 | + let getDeviceInfo1 = ref(null); | ||
| 45 | + let getDeviceInfo2 = ref(null); | ||
| 46 | + | ||
| 47 | + const [registerForm, { resetFields, setFieldsValue, validateFields, getFieldsValue }] = | ||
| 48 | + useForm({ | ||
| 49 | + labelWidth: 120, | ||
| 50 | + schemas: formSchema, | ||
| 51 | + showActionButtonGroup: false, | ||
| 52 | + }); | ||
| 53 | + | ||
| 54 | + watch(getData, (newV) => { | ||
| 55 | + getDeviceInfo.value = newV; | ||
| 56 | + getDeviceInfo1.value = newV; | ||
| 57 | + getDeviceInfo2.value = newV; | ||
| 46 | }); | 58 | }); |
| 47 | 59 | ||
| 48 | - const [registerDrawer, { setDrawerProps }] = useDrawerInner(async (data) => { | 60 | + const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { |
| 49 | await resetFields(); | 61 | await resetFields(); |
| 50 | setDrawerProps({ confirmLoading: false }); | 62 | setDrawerProps({ confirmLoading: false }); |
| 51 | isUpdate.value = !!data?.isUpdate; | 63 | isUpdate.value = !!data?.isUpdate; |
| 64 | + //编辑 | ||
| 65 | + if (unref(isUpdate)) { | ||
| 66 | + getId.value = data.record.id; | ||
| 67 | + await setFieldsValue({ | ||
| 68 | + ...data.record, | ||
| 69 | + }); | ||
| 70 | + } else { | ||
| 71 | + await resetFields(); | ||
| 72 | + } | ||
| 52 | }); | 73 | }); |
| 74 | + // function trimNumber(str) { | ||
| 75 | + // return str.replace(/\d+/g, ''); | ||
| 76 | + // } | ||
| 77 | + | ||
| 53 | const getTitle = computed(() => (!unref(isUpdate) ? '新增场景联动' : '编辑场景联动')); | 78 | const getTitle = computed(() => (!unref(isUpdate) ? '新增场景联动' : '编辑场景联动')); |
| 54 | - const getTriggerData = (v) => { | ||
| 55 | - getTriggerFormData.value = v; | 79 | + let getTriggerData = (v) => { |
| 80 | + getTriggerFormData = v; | ||
| 81 | + triggersArray.push(getTriggerFormData); | ||
| 82 | + // let retuArray = triggersArray.map((m) => { | ||
| 83 | + // let getArrayKeys = Object.keys(m); | ||
| 84 | + // let getArrayKeysReturn = null; | ||
| 85 | + // getArrayKeys.forEach((f) => { | ||
| 86 | + // getArrayKeysReturn = trimNumber(f); | ||
| 87 | + // }); | ||
| 88 | + // return getArrayKeysReturn; | ||
| 89 | + // }); | ||
| 90 | + // console.log(retuArray); | ||
| 56 | }; | 91 | }; |
| 57 | - const getFormConditiData = (v) => { | ||
| 58 | - getConditionFormData.value = v; | 92 | + let getFormConditiData = (v) => { |
| 93 | + getConditionFormData = v; | ||
| 94 | + doConditionsArray.push(getConditionFormData); | ||
| 59 | }; | 95 | }; |
| 60 | - const getFormActionData = (v) => { | ||
| 61 | - getActionFormData.value = v; | 96 | + let getFormActionData = (v) => { |
| 97 | + getActionFormData = v; | ||
| 98 | + doActionsArray.push(getActionFormData); | ||
| 62 | }; | 99 | }; |
| 63 | async function handleSubmit() { | 100 | async function handleSubmit() { |
| 64 | - const res = await validateFields(); | ||
| 65 | - if (!res) return; | ||
| 66 | - const values = await getFieldsValue(); | ||
| 67 | - Object.assign( | ||
| 68 | - getAllFormData.value, | ||
| 69 | - values, | ||
| 70 | - getTriggerFormData.value, | ||
| 71 | - getConditionFormData.value, | ||
| 72 | - getActionFormData.value | ||
| 73 | - ); | ||
| 74 | - //所有的表单值 | ||
| 75 | - console.log('收集所有表单值', getAllFormData.value); | 101 | + if (!unref(isUpdate)) { |
| 102 | + let res = validateFields(); | ||
| 103 | + if (!res) return; | ||
| 104 | + getValuesFormData = getFieldsValue(); | ||
| 105 | + Object.assign(getAllFormData, getValuesFormData); | ||
| 106 | + getAllFormData.triggers = triggersArray; | ||
| 107 | + getAllFormData.doConditions = doConditionsArray; | ||
| 108 | + getAllFormData.doActions = doActionsArray; | ||
| 109 | + //所有的表单值 | ||
| 110 | + console.log('提交的值', getAllFormData); | ||
| 111 | + await screenLinkPageAddApi(getAllFormData); | ||
| 112 | + createMessage.success('场景联动新增成功'); | ||
| 113 | + closeDrawer(); | ||
| 114 | + emit('success'); | ||
| 115 | + } | ||
| 116 | + if (unref(isUpdate)) { | ||
| 117 | + getValuesFormData = getFieldsValue(); | ||
| 118 | + getValuesFormData.id = getId.value; | ||
| 119 | + Object.assign(getAllFormData, getValuesFormData); | ||
| 120 | + getAllFormData.triggers = triggersArray; | ||
| 121 | + getAllFormData.doConditions = doConditionsArray; | ||
| 122 | + getAllFormData.doActions = doActionsArray; | ||
| 123 | + console.log('编辑的值', getAllFormData); | ||
| 124 | + await screenLinkPageUpdateApi(getAllFormData); | ||
| 125 | + createMessage.success('场景联动编辑成功'); | ||
| 126 | + closeDrawer(); | ||
| 127 | + emit('success'); | ||
| 128 | + } | ||
| 76 | } | 129 | } |
| 77 | - console.log('拿到注入的数据', inject('getEchoData')); | ||
| 78 | - // getParentEchoData = inject('getEchoData'); | ||
| 79 | - // console.log(getParentEchoData); | ||
| 80 | return { | 130 | return { |
| 81 | - getParentEchoData, | 131 | + getDeviceInfo, |
| 132 | + getDeviceInfo1, | ||
| 133 | + getDeviceInfo2, | ||
| 134 | + getAllFormData, | ||
| 82 | getTriggerData, | 135 | getTriggerData, |
| 83 | getFormConditiData, | 136 | getFormConditiData, |
| 84 | getFormActionData, | 137 | getFormActionData, |
| 1 | +<template> | ||
| 2 | + <PageWrapper title="我的通知详情"> | ||
| 3 | + <Description @register="register1" class="mt-4" /> | ||
| 4 | + </PageWrapper> | ||
| 5 | +</template> | ||
| 6 | +<script lang="ts"> | ||
| 7 | + import { defineComponent, watch, ref } from 'vue'; | ||
| 8 | + import { Description, DescItem, useDescription } from '/@/components/Description/index'; | ||
| 9 | + import { PageWrapper } from '/@/components/Page'; | ||
| 10 | + | ||
| 11 | + const schema: DescItem[] = [ | ||
| 12 | + { | ||
| 13 | + field: 'title', | ||
| 14 | + label: '标题', | ||
| 15 | + }, | ||
| 16 | + { | ||
| 17 | + field: 'content', | ||
| 18 | + label: '内容', | ||
| 19 | + }, | ||
| 20 | + { | ||
| 21 | + field: 'creator', | ||
| 22 | + label: '发送者', | ||
| 23 | + }, | ||
| 24 | + { | ||
| 25 | + field: 'readDate', | ||
| 26 | + label: '发送时间', | ||
| 27 | + }, | ||
| 28 | + { | ||
| 29 | + field: 'type', | ||
| 30 | + label: '类型', | ||
| 31 | + render: (_, data) => { | ||
| 32 | + return data.type === 'MEETING' | ||
| 33 | + ? '公告' | ||
| 34 | + : data.type === 'MEETING1' | ||
| 35 | + ? '会议' | ||
| 36 | + : data.type === 'MEETING2' | ||
| 37 | + ? '其他' | ||
| 38 | + : ''; | ||
| 39 | + }, | ||
| 40 | + }, | ||
| 41 | + ]; | ||
| 42 | + export default defineComponent({ | ||
| 43 | + components: { Description, PageWrapper }, | ||
| 44 | + props: { | ||
| 45 | + emitChildData: { | ||
| 46 | + type: Object, | ||
| 47 | + }, | ||
| 48 | + }, | ||
| 49 | + setup(props) { | ||
| 50 | + let useDescriptionData: any = ref(null); | ||
| 51 | + watch( | ||
| 52 | + () => props.emitChildData, | ||
| 53 | + async (newV) => { | ||
| 54 | + useDescriptionData.value = newV; | ||
| 55 | + } | ||
| 56 | + ); | ||
| 57 | + const [register1] = useDescription({ | ||
| 58 | + title: '详情', | ||
| 59 | + bordered: false, | ||
| 60 | + data: useDescriptionData, | ||
| 61 | + schema: schema, | ||
| 62 | + }); | ||
| 63 | + | ||
| 64 | + return { register1 }; | ||
| 65 | + }, | ||
| 66 | + }); | ||
| 67 | +</script> |
| 1 | +import { BasicColumn, FormSchema } from '/@/components/Table'; | ||
| 2 | + | ||
| 3 | +export const columns: BasicColumn[] = [ | ||
| 4 | + { | ||
| 5 | + title: '标题', | ||
| 6 | + dataIndex: 'title', | ||
| 7 | + width: 200, | ||
| 8 | + }, | ||
| 9 | + { | ||
| 10 | + title: '类型', | ||
| 11 | + dataIndex: 'type', | ||
| 12 | + width: 200, | ||
| 13 | + format: (text: string, record: Recordable) => { | ||
| 14 | + return record.type === 'MEETING' | ||
| 15 | + ? '公告' | ||
| 16 | + : record.type === 'MEETING1' | ||
| 17 | + ? '会议' | ||
| 18 | + : record.type === 'MEETING2' | ||
| 19 | + ? '其他' | ||
| 20 | + : ''; | ||
| 21 | + }, | ||
| 22 | + }, | ||
| 23 | + { | ||
| 24 | + title: '发送者', | ||
| 25 | + dataIndex: 'receiverId', | ||
| 26 | + width: 200, | ||
| 27 | + }, | ||
| 28 | + { | ||
| 29 | + title: '发送时间', | ||
| 30 | + dataIndex: 'readDate', | ||
| 31 | + width: 200, | ||
| 32 | + }, | ||
| 33 | + { | ||
| 34 | + title: '阅读状态', | ||
| 35 | + dataIndex: 'readStatus', | ||
| 36 | + width: 200, | ||
| 37 | + format: (text: string, record: Recordable) => { | ||
| 38 | + return record.readStatus == 0 | ||
| 39 | + ? '未读' | ||
| 40 | + : record.type == 1 | ||
| 41 | + ? '已读' | ||
| 42 | + : record.type == 2 | ||
| 43 | + ? '其他' | ||
| 44 | + : '其他'; | ||
| 45 | + }, | ||
| 46 | + }, | ||
| 47 | +]; | ||
| 48 | + | ||
| 49 | +export const searchFormSchema: FormSchema[] = [ | ||
| 50 | + { | ||
| 51 | + field: 'orderField', | ||
| 52 | + label: '', | ||
| 53 | + colProps: { span: 8 }, | ||
| 54 | + component: 'ApiTreeSelect', | ||
| 55 | + componentProps: { | ||
| 56 | + // api: async () => { | ||
| 57 | + // const data = await screenLinkOrganizationGetApi(); | ||
| 58 | + // copyTransFun(data as any as any[]); | ||
| 59 | + // return data; | ||
| 60 | + // }, | ||
| 61 | + }, | ||
| 62 | + }, | ||
| 63 | +]; |
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <BasicTable | ||
| 4 | + :rowSelection="{ type: 'checkbox' }" | ||
| 5 | + @selection-change="useSelectionChange" | ||
| 6 | + @register="registerTable" | ||
| 7 | + > | ||
| 8 | + <template #action="{ record }"> | ||
| 9 | + <TableAction | ||
| 10 | + :actions="[ | ||
| 11 | + { | ||
| 12 | + label: '查看', | ||
| 13 | + icon: 'clarity:note-edit-line', | ||
| 14 | + onClick: handleView.bind(null, record), | ||
| 15 | + }, | ||
| 16 | + ]" | ||
| 17 | + /> | ||
| 18 | + </template> | ||
| 19 | + </BasicTable> | ||
| 20 | + <NotifyDetailDrawer @register="registerDrawer" @success="handleSuccess" /> | ||
| 21 | + </div> | ||
| 22 | +</template> | ||
| 23 | +<script lang="ts"> | ||
| 24 | + import { defineComponent } from 'vue'; | ||
| 25 | + import { BasicTable, useTable, TableAction } from '/@/components/Table'; | ||
| 26 | + import { useDrawer } from '/@/components/Drawer'; | ||
| 27 | + import NotifyDetailDrawer from './useDrawer.vue'; | ||
| 28 | + import { columns, searchFormSchema } from './config.d'; | ||
| 29 | + // import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 30 | + // ,notifyMyGetDetailApi,notifyMyGetrPageApi,notifyMyGetrReadApi | ||
| 31 | + import { notifyMyGetrPageApi } from '/@/api/stationnotification/stationnotifyApi'; | ||
| 32 | + | ||
| 33 | + export default defineComponent({ | ||
| 34 | + name: 'index', | ||
| 35 | + components: { BasicTable, NotifyDetailDrawer, TableAction }, | ||
| 36 | + setup() { | ||
| 37 | + let selectedRowKeys: Array<string> = []; | ||
| 38 | + const [registerDrawer, { openDrawer }] = useDrawer(); | ||
| 39 | + const [registerTable, { reload, getSelectRowKeys }] = useTable({ | ||
| 40 | + title: '', | ||
| 41 | + clickToRowSelect: false, | ||
| 42 | + api: notifyMyGetrPageApi, | ||
| 43 | + columns, | ||
| 44 | + formConfig: { | ||
| 45 | + labelWidth: 120, | ||
| 46 | + schemas: searchFormSchema, | ||
| 47 | + }, | ||
| 48 | + rowKey: 'id', | ||
| 49 | + useSearchForm: true, | ||
| 50 | + showTableSetting: true, | ||
| 51 | + bordered: true, | ||
| 52 | + showIndexColumn: false, | ||
| 53 | + actionColumn: { | ||
| 54 | + width: 180, | ||
| 55 | + title: '操作', | ||
| 56 | + dataIndex: 'action', | ||
| 57 | + slots: { customRender: 'action' }, | ||
| 58 | + fixed: undefined, | ||
| 59 | + }, | ||
| 60 | + }); | ||
| 61 | + | ||
| 62 | + const useSelectionChange = () => { | ||
| 63 | + selectedRowKeys = getSelectRowKeys(); | ||
| 64 | + console.log(selectedRowKeys); | ||
| 65 | + }; | ||
| 66 | + | ||
| 67 | + function handleView(record: Recordable) { | ||
| 68 | + openDrawer(true, { | ||
| 69 | + record, | ||
| 70 | + isUpdate: true, | ||
| 71 | + }); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + function handleSuccess() { | ||
| 75 | + reload(); | ||
| 76 | + } | ||
| 77 | + return { | ||
| 78 | + useSelectionChange, | ||
| 79 | + registerTable, | ||
| 80 | + registerDrawer, | ||
| 81 | + handleView, | ||
| 82 | + handleSuccess, | ||
| 83 | + }; | ||
| 84 | + }, | ||
| 85 | + }); | ||
| 86 | +</script> |
| 1 | +<template> | ||
| 2 | + <BasicDrawer | ||
| 3 | + v-bind="$attrs" | ||
| 4 | + @register="registerDrawer" | ||
| 5 | + :showFooter="false" | ||
| 6 | + :title="getTitle" | ||
| 7 | + width="800px" | ||
| 8 | + > | ||
| 9 | + <DetailChild :emitChildData="childData" /> | ||
| 10 | + </BasicDrawer> | ||
| 11 | +</template> | ||
| 12 | +<script lang="ts"> | ||
| 13 | + import { defineComponent, ref, computed, unref } from 'vue'; | ||
| 14 | + import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; | ||
| 15 | + import DetailChild from './child/index.vue'; | ||
| 16 | + import { notifyMyGetDetailApi } from '/@/api/stationnotification/stationnotifyApi'; | ||
| 17 | + | ||
| 18 | + // import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 19 | + | ||
| 20 | + export default defineComponent({ | ||
| 21 | + name: 'ConfigDrawer', | ||
| 22 | + components: { BasicDrawer, DetailChild }, | ||
| 23 | + emits: ['success', 'register'], | ||
| 24 | + setup() { | ||
| 25 | + // const { createMessage } = useMessage(); | ||
| 26 | + const isUpdate = ref(true); | ||
| 27 | + let childData: any = ref(null); | ||
| 28 | + const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { | ||
| 29 | + setDrawerProps({ confirmLoading: false }); | ||
| 30 | + isUpdate.value = !!data?.isUpdate; | ||
| 31 | + console.log(data.record); | ||
| 32 | + if (data.record) { | ||
| 33 | + // console.log(data.record.id); | ||
| 34 | + let getData = await notifyMyGetDetailApi(data.record.id); | ||
| 35 | + childData.value = getData; | ||
| 36 | + // createMessage.success() | ||
| 37 | + } | ||
| 38 | + //编辑 | ||
| 39 | + if (unref(isUpdate)) { | ||
| 40 | + } else { | ||
| 41 | + } | ||
| 42 | + }); | ||
| 43 | + | ||
| 44 | + const getTitle = computed(() => (!unref(isUpdate) ? '新增通知' : '查看通知')); | ||
| 45 | + const handleCancel = () => { | ||
| 46 | + closeDrawer(); | ||
| 47 | + }; | ||
| 48 | + | ||
| 49 | + return { | ||
| 50 | + childData, | ||
| 51 | + handleCancel, | ||
| 52 | + getTitle, | ||
| 53 | + registerDrawer, | ||
| 54 | + }; | ||
| 55 | + }, | ||
| 56 | + }); | ||
| 57 | +</script> |
| 1 | +import { BasicColumn, FormSchema } from '/@/components/Table'; | ||
| 2 | +import { Tinymce } from '/@/components/Tinymce/index'; | ||
| 3 | +import { h } from 'vue'; | ||
| 4 | + | ||
| 5 | +export const columns: BasicColumn[] = [ | ||
| 6 | + { | ||
| 7 | + title: '类型', | ||
| 8 | + dataIndex: 'type', | ||
| 9 | + width: 200, | ||
| 10 | + format: (text: string, record: Recordable) => { | ||
| 11 | + return record.type === 'MEETING' | ||
| 12 | + ? '公告' | ||
| 13 | + : record.type === 'MEETING1' | ||
| 14 | + ? '会议' | ||
| 15 | + : record.type === 'MEETING2' | ||
| 16 | + ? '其他' | ||
| 17 | + : ''; | ||
| 18 | + }, | ||
| 19 | + }, | ||
| 20 | + { | ||
| 21 | + title: '标题', | ||
| 22 | + dataIndex: 'title', | ||
| 23 | + width: 200, | ||
| 24 | + }, | ||
| 25 | + { | ||
| 26 | + title: '内容', | ||
| 27 | + dataIndex: 'content', | ||
| 28 | + width: 120, | ||
| 29 | + }, | ||
| 30 | + { | ||
| 31 | + title: '发送者', | ||
| 32 | + dataIndex: 'senderName', | ||
| 33 | + width: 200, | ||
| 34 | + }, | ||
| 35 | + { | ||
| 36 | + title: '状态', | ||
| 37 | + dataIndex: 'status', | ||
| 38 | + width: 200, | ||
| 39 | + format: (text: string, record: Recordable) => { | ||
| 40 | + return record.status == 0 | ||
| 41 | + ? '草稿' | ||
| 42 | + : record.type == 1 | ||
| 43 | + ? '已发' | ||
| 44 | + : record.type == 2 | ||
| 45 | + ? '其他' | ||
| 46 | + : '其他'; | ||
| 47 | + }, | ||
| 48 | + }, | ||
| 49 | +]; | ||
| 50 | + | ||
| 51 | +export const formSchema: FormSchema[] = [ | ||
| 52 | + { | ||
| 53 | + field: 'type', | ||
| 54 | + label: '类型', | ||
| 55 | + colProps: { span: 24 }, | ||
| 56 | + required: true, | ||
| 57 | + component: 'RadioGroup', | ||
| 58 | + componentProps: { | ||
| 59 | + options: [ | ||
| 60 | + { | ||
| 61 | + label: '公告', | ||
| 62 | + value: '1', | ||
| 63 | + }, | ||
| 64 | + { | ||
| 65 | + label: '会议', | ||
| 66 | + value: '2', | ||
| 67 | + }, | ||
| 68 | + { | ||
| 69 | + label: '其他', | ||
| 70 | + value: '3', | ||
| 71 | + }, | ||
| 72 | + ], | ||
| 73 | + }, | ||
| 74 | + }, | ||
| 75 | + { | ||
| 76 | + field: 'title', | ||
| 77 | + label: '标题', | ||
| 78 | + required: true, | ||
| 79 | + colProps: { span: 24 }, | ||
| 80 | + component: 'Input', | ||
| 81 | + componentProps: { | ||
| 82 | + placeholder: '请输入标题', | ||
| 83 | + }, | ||
| 84 | + }, | ||
| 85 | + { | ||
| 86 | + field: 'content', | ||
| 87 | + component: 'Input', | ||
| 88 | + colProps: { span: 24 }, | ||
| 89 | + label: '内容', | ||
| 90 | + defaultValue: '请输入内容', | ||
| 91 | + rules: [{ required: true }], | ||
| 92 | + render: ({ model, field }) => { | ||
| 93 | + return h(Tinymce, { | ||
| 94 | + value: model[field], | ||
| 95 | + onChange: (value: string) => { | ||
| 96 | + model[field] = value; | ||
| 97 | + }, | ||
| 98 | + }); | ||
| 99 | + }, | ||
| 100 | + }, | ||
| 101 | + { | ||
| 102 | + field: 'receiverTypeIds', | ||
| 103 | + label: '接收者', | ||
| 104 | + colProps: { span: 24 }, | ||
| 105 | + component: 'RadioGroup', | ||
| 106 | + componentProps: { | ||
| 107 | + options: [ | ||
| 108 | + { | ||
| 109 | + label: '全部', | ||
| 110 | + value: '1', | ||
| 111 | + }, | ||
| 112 | + { | ||
| 113 | + label: '部门', | ||
| 114 | + value: '2', | ||
| 115 | + }, | ||
| 116 | + ], | ||
| 117 | + }, | ||
| 118 | + }, | ||
| 119 | + { | ||
| 120 | + field: '', | ||
| 121 | + component: 'Input', | ||
| 122 | + label: '', | ||
| 123 | + colProps: { | ||
| 124 | + span: 12, | ||
| 125 | + }, | ||
| 126 | + slot: 'add', | ||
| 127 | + }, | ||
| 128 | +]; | ||
| 129 | + | ||
| 130 | +export const searchFormSchema: FormSchema[] = [ | ||
| 131 | + { | ||
| 132 | + field: 'orderField', | ||
| 133 | + label: '', | ||
| 134 | + colProps: { span: 8 }, | ||
| 135 | + component: 'ApiSelect', | ||
| 136 | + componentProps: { | ||
| 137 | + // api: async () => { | ||
| 138 | + // const data = await screenLinkOrganizationGetApi(); | ||
| 139 | + // copyTransFun(data as any as any[]); | ||
| 140 | + // return data; | ||
| 141 | + // }, | ||
| 142 | + }, | ||
| 143 | + }, | ||
| 144 | +]; |
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <BasicTable | ||
| 4 | + :rowSelection="{ type: 'checkbox' }" | ||
| 5 | + @selection-change="useSelectionChange" | ||
| 6 | + @register="registerTable" | ||
| 7 | + > | ||
| 8 | + <template #toolbar> | ||
| 9 | + <a-button type="primary" @click="handleAdd"> 新增 </a-button> | ||
| 10 | + <a-button type="error" @click="handleToolbarDel"> 删除 </a-button> | ||
| 11 | + </template> | ||
| 12 | + <template #action="{ record }"> | ||
| 13 | + <TableAction | ||
| 14 | + :actions="[ | ||
| 15 | + { | ||
| 16 | + label: '编辑', | ||
| 17 | + icon: 'clarity:note-edit-line', | ||
| 18 | + onClick: handleEdit.bind(null, record), | ||
| 19 | + }, | ||
| 20 | + { | ||
| 21 | + label: '删除', | ||
| 22 | + icon: 'ant-design:delete-outlined', | ||
| 23 | + color: 'error', | ||
| 24 | + popConfirm: { | ||
| 25 | + title: '是否确认删除', | ||
| 26 | + confirm: handleDelete.bind(null, record), | ||
| 27 | + }, | ||
| 28 | + }, | ||
| 29 | + ]" | ||
| 30 | + /> | ||
| 31 | + </template> | ||
| 32 | + </BasicTable> | ||
| 33 | + <NotifyManagerDrawer | ||
| 34 | + :getChildrenData="echoEditData" | ||
| 35 | + @register="registerDrawer" | ||
| 36 | + @success="handleSuccess" | ||
| 37 | + /> | ||
| 38 | + </div> | ||
| 39 | +</template> | ||
| 40 | +<script lang="ts"> | ||
| 41 | + import { defineComponent, reactive } from 'vue'; | ||
| 42 | + import { BasicTable, useTable, TableAction } from '/@/components/Table'; | ||
| 43 | + import { useDrawer } from '/@/components/Drawer'; | ||
| 44 | + import NotifyManagerDrawer from './useDrawer.vue'; | ||
| 45 | + import { columns, searchFormSchema } from './config.d'; | ||
| 46 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 47 | + import { notifyGetTableApi, notifyDeleteApi } from '/@/api/stationnotification/stationnotifyApi'; | ||
| 48 | + | ||
| 49 | + export default defineComponent({ | ||
| 50 | + name: 'index', | ||
| 51 | + components: { BasicTable, NotifyManagerDrawer, TableAction }, | ||
| 52 | + setup() { | ||
| 53 | + let selectedRowKeys: Array<string> = []; | ||
| 54 | + let echoEditData = reactive({}); | ||
| 55 | + const [registerDrawer, { openDrawer }] = useDrawer(); | ||
| 56 | + const { createMessage } = useMessage(); | ||
| 57 | + const [registerTable, { reload, getSelectRowKeys }] = useTable({ | ||
| 58 | + title: '', | ||
| 59 | + clickToRowSelect: false, | ||
| 60 | + api: notifyGetTableApi, | ||
| 61 | + columns, | ||
| 62 | + formConfig: { | ||
| 63 | + labelWidth: 120, | ||
| 64 | + schemas: searchFormSchema, | ||
| 65 | + }, | ||
| 66 | + rowKey: 'id', | ||
| 67 | + useSearchForm: true, | ||
| 68 | + showTableSetting: true, | ||
| 69 | + bordered: true, | ||
| 70 | + showIndexColumn: false, | ||
| 71 | + actionColumn: { | ||
| 72 | + width: 180, | ||
| 73 | + title: '操作', | ||
| 74 | + dataIndex: 'action', | ||
| 75 | + slots: { customRender: 'action' }, | ||
| 76 | + fixed: undefined, | ||
| 77 | + }, | ||
| 78 | + }); | ||
| 79 | + | ||
| 80 | + function handleAdd() { | ||
| 81 | + openDrawer(true, { | ||
| 82 | + isUpdate: false, | ||
| 83 | + }); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + const useSelectionChange = () => { | ||
| 87 | + selectedRowKeys = getSelectRowKeys(); | ||
| 88 | + selectedRowKeys.join(','); | ||
| 89 | + }; | ||
| 90 | + | ||
| 91 | + async function handleToolbarDel() { | ||
| 92 | + await notifyDeleteApi(selectedRowKeys); | ||
| 93 | + createMessage.success('删除成功'); | ||
| 94 | + reload(); | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + function handleEdit(record: Recordable) { | ||
| 98 | + openDrawer(true, { | ||
| 99 | + record, | ||
| 100 | + isUpdate: true, | ||
| 101 | + }); | ||
| 102 | + } | ||
| 103 | + async function handleDelete(record: Recordable) { | ||
| 104 | + console.log(record.id); | ||
| 105 | + let ids = '1'; | ||
| 106 | + await notifyDeleteApi(ids); | ||
| 107 | + createMessage.success('删除成功'); | ||
| 108 | + reload(); | ||
| 109 | + } | ||
| 110 | + function handleSuccess() { | ||
| 111 | + reload(); | ||
| 112 | + } | ||
| 113 | + return { | ||
| 114 | + useSelectionChange, | ||
| 115 | + echoEditData, | ||
| 116 | + registerTable, | ||
| 117 | + registerDrawer, | ||
| 118 | + handleAdd, | ||
| 119 | + handleToolbarDel, | ||
| 120 | + handleEdit, | ||
| 121 | + handleDelete, | ||
| 122 | + handleSuccess, | ||
| 123 | + }; | ||
| 124 | + }, | ||
| 125 | + }); | ||
| 126 | +</script> |
| 1 | +<template> | ||
| 2 | + <BasicDrawer | ||
| 3 | + v-bind="$attrs" | ||
| 4 | + @register="registerDrawer" | ||
| 5 | + :showFooter="false" | ||
| 6 | + :title="getTitle" | ||
| 7 | + width="800px" | ||
| 8 | + > | ||
| 9 | + <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm"> | ||
| 10 | + <template #add> | ||
| 11 | + <Button style="margin-left: 30px; margin-top: 80px" type="primary" @click="handleCancel" | ||
| 12 | + >取消</Button | ||
| 13 | + > | ||
| 14 | + <Button style="margin-left: 30px" type="primary" @click="handleSubmit">保存草稿</Button> | ||
| 15 | + <Button style="margin-left: 30px" type="primary" @click="handleSend">发布通知</Button> | ||
| 16 | + </template> | ||
| 17 | + </BasicForm> | ||
| 18 | + </BasicDrawer> | ||
| 19 | +</template> | ||
| 20 | +<script lang="ts"> | ||
| 21 | + import { defineComponent, ref, computed, unref } from 'vue'; | ||
| 22 | + import { Button } from '/@/components/Button'; | ||
| 23 | + import { BasicForm, useForm } from '/@/components/Form'; | ||
| 24 | + import { formSchema } from './config.d'; | ||
| 25 | + import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; | ||
| 26 | + import { | ||
| 27 | + notifyAddDraftApi, | ||
| 28 | + notifyAddLeaseApi, | ||
| 29 | + } from '/@/api/stationnotification/stationnotifyApi'; | ||
| 30 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 31 | + | ||
| 32 | + export default defineComponent({ | ||
| 33 | + name: 'ConfigDrawer', | ||
| 34 | + components: { BasicDrawer, BasicForm, Button }, | ||
| 35 | + emits: ['success', 'register'], | ||
| 36 | + setup() { | ||
| 37 | + const { createMessage } = useMessage(); | ||
| 38 | + const isUpdate = ref(true); | ||
| 39 | + const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({ | ||
| 40 | + labelWidth: 120, | ||
| 41 | + schemas: formSchema, | ||
| 42 | + showActionButtonGroup: false, | ||
| 43 | + }); | ||
| 44 | + const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { | ||
| 45 | + await resetFields(); | ||
| 46 | + setDrawerProps({ confirmLoading: false }); | ||
| 47 | + isUpdate.value = !!data?.isUpdate; | ||
| 48 | + //编辑 | ||
| 49 | + if (unref(isUpdate)) { | ||
| 50 | + await setFieldsValue({ | ||
| 51 | + ...data.record, | ||
| 52 | + }); | ||
| 53 | + } else { | ||
| 54 | + } | ||
| 55 | + }); | ||
| 56 | + | ||
| 57 | + const getTitle = computed(() => (!unref(isUpdate) ? '新增通知' : '编辑通知')); | ||
| 58 | + const handleCancel = () => { | ||
| 59 | + closeDrawer(); | ||
| 60 | + }; | ||
| 61 | + | ||
| 62 | + async function handleSend() { | ||
| 63 | + if (!unref(isUpdate)) { | ||
| 64 | + const values = await validate(); | ||
| 65 | + // saveForm = getFieldsValue(); | ||
| 66 | + await notifyAddLeaseApi(values); | ||
| 67 | + createMessage.success('新增成功'); | ||
| 68 | + } | ||
| 69 | + if (unref(isUpdate)) { | ||
| 70 | + const values = await validate(); | ||
| 71 | + // saveForm = getFieldsValue(); | ||
| 72 | + await notifyAddLeaseApi(values); | ||
| 73 | + createMessage.success('编辑成功'); | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + async function handleSubmit() { | ||
| 77 | + if (!unref(isUpdate)) { | ||
| 78 | + const values = await validate(); | ||
| 79 | + // saveForm = getFieldsValue(); | ||
| 80 | + await notifyAddDraftApi(values); | ||
| 81 | + createMessage.success('新增成功'); | ||
| 82 | + } | ||
| 83 | + if (unref(isUpdate)) { | ||
| 84 | + const values = await validate(); | ||
| 85 | + // saveForm = getFieldsValue(); | ||
| 86 | + await notifyAddDraftApi(values); | ||
| 87 | + createMessage.success('编辑成功'); | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + return { | ||
| 91 | + handleSend, | ||
| 92 | + handleCancel, | ||
| 93 | + getTitle, | ||
| 94 | + handleSubmit, | ||
| 95 | + registerForm, | ||
| 96 | + registerDrawer, | ||
| 97 | + }; | ||
| 98 | + }, | ||
| 99 | + }); | ||
| 100 | +</script> |