Commit 37f43cae3961224e5dc0b2556f597e04dbbb5bd1

Authored by fengistao
1 parent f0e317ed

wip:联调场景联动接口完成 feat:站内通知前端页面完成,接口调了4个

Too many changes to show.

To preserve performance only 23 of 24 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>
@@ -74,6 +74,7 @@ @@ -74,6 +74,7 @@
74 74
75 if (unref(isUpdate)) { 75 if (unref(isUpdate)) {
76 rowId.value = data.record.id; 76 rowId.value = data.record.id;
  77 + console.log(data.record);
77 const roleParams = new RoleOrOrganizationParam(rowId.value, true, false); 78 const roleParams = new RoleOrOrganizationParam(rowId.value, true, false);
78 findCurrentUserRelation(roleParams).then((result) => { 79 findCurrentUserRelation(roleParams).then((result) => {
79 Reflect.set(data.record, 'roleIds', result); 80 Reflect.set(data.record, 'roleIds', result);
@@ -115,7 +115,6 @@ @@ -115,7 +115,6 @@
115 } 115 }
116 116
117 function handleEdit(record: Recordable) { 117 function handleEdit(record: Recordable) {
118 - console.log(record);  
119 openModal(true, { 118 openModal(true, {
120 record, 119 record,
121 isUpdate: true, 120 isUpdate: true,