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 38 '@typescript-eslint/ban-types': 'off',
39 39 '@typescript-eslint/no-non-null-assertion': 'off',
40 40 '@typescript-eslint/explicit-module-boundary-types': 'off',
  41 + ' @typescript-eslint/no-inferrable-types': 'off',
41 42 '@typescript-eslint/no-unused-vars': [
42 43 'error',
43 44 {
... ...
... ... @@ -11,7 +11,9 @@ tests/server/static/upload
11 11 # local env files
12 12 .env.local
13 13 .env.*.local
14   -.env.development
  14 +.env.*development
  15 +.env.*test
  16 +.env.*production
15 17 .eslintcache
16 18
17 19 # Log files
... ...
1 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 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 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 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 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 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 45 doCondition?: [
38 46 {
39 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 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 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 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 79 tenantStatus?: 'DISABLED';
72 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 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 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 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 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 136 doCondition?: [
130 137 {
131 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 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 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 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 170 tenantStatus?: 'DISABLED';
164 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 1 import { defHttp } from '/@/utils/http/axios';
2 2 import {
3   - ScreenLinkPageTableQueryParam,
  3 + // ScreenParamModel,
4 4 ScreenAddModel,
5 5 ScreenUpdateModel,
  6 + ScreenLinkPageQueryParam,
  7 + ScreenByDeptIdParams,
6 8 } from '/@/api/ruleengine/model/ruleengineModel';
7 9
8 10 enum ScreenManagerApi {
... ... @@ -13,15 +15,29 @@ enum ScreenManagerApi {
13 15 SCREEN_ADD_URL = '/sceneLinkage',
14 16 SCREEN_DELETE_URL = '/sceneLinkage',
15 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 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 39 url: ScreenManagerApi.SCREEN_GET_URL,
  40 + params,
25 41 });
26 42 };
27 43
... ... @@ -30,7 +46,7 @@ export const screenLinkPageGetApi = () => {
30 46 * @param params pageSize page name
31 47 */
32 48 export const screenLinkPageAddApi = (params: ScreenAddModel) => {
33   - return defHttp.post<ScreenLinkPageTableQueryParam>({
  49 + return defHttp.post<ScreenAddModel>({
34 50 url: ScreenManagerApi.SCREEN_ADD_URL,
35 51 params,
36 52 });
... ... @@ -41,7 +57,7 @@ export const screenLinkPageAddApi = (params: ScreenAddModel) => {
41 57 * @param params pageSize page name
42 58 */
43 59 export const screenLinkPageUpdateApi = (params: ScreenUpdateModel) => {
44   - return defHttp.post<ScreenLinkPageTableQueryParam>({
  60 + return defHttp.post<ScreenUpdateModel>({
45 61 url: ScreenManagerApi.SCREEN_UPDATE_URL,
46 62 params,
47 63 });
... ... @@ -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 10 import { useMessage } from '/@/hooks/web/useMessage';
11 11 import { RequestEnum, ContentTypeEnum } from '/@/enums/httpEnum';
12 12 import { isString } from '/@/utils/is';
13   -import { getJwtToken } from '/@/utils/auth';
  13 +import { getJwtToken, getAuthCache } from '/@/utils/auth';
14 14 import { setObjToUrlParams, deepMerge } from '/@/utils';
15 15 import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
16 16 import { useI18n } from '/@/hooks/web/useI18n';
17 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 26 const globSetting = useGlobSetting();
20 27 const urlPrefix = globSetting.urlPrefix;
21 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 39 * @description: 数据处理,方便区分多种处理方式
25 40 */
... ... @@ -121,6 +136,21 @@ const transform: AxiosTransform = {
121 136 let errMessage = '';
122 137
123 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 154 if (code === 'ECONNABORTED' && message.indexOf('timeout') !== -1) {
125 155 errMessage = t('sys.api.apiTimeoutMessage');
126 156 }
... ...
... ... @@ -5,6 +5,7 @@ import { findDictItemByCode } from '/@/api/system/dict';
5 5 export const columns: BasicColumn[] = [
6 6 {
7 7 title: '场景联动名称',
  8 + dataIndex: 'name',
8 9 },
9 10 {
10 11 title: '触发方式',
... ... @@ -13,15 +14,13 @@ export const columns: BasicColumn[] = [
13 14 },
14 15 {
15 16 title: '状态',
16   - // dataIndex: 'deviceType',
  17 + dataIndex: 'status',
17 18 width: 200,
18   - // slots: { customRender: 'deviceType' },
19 19 },
20 20 {
21 21 title: '描述',
22   - // dataIndex: 'deviceProfile.name',
  22 + dataIndex: 'description',
23 23 width: 180,
24   - // slots: { customRender: 'deviceProfile' },
25 24 },
26 25 ];
27 26
... ...
1 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 39 </CollapseContainer>
48 40 </template>
49 41 <script lang="ts">
50   - import { defineComponent, ref } from 'vue';
  42 + import { defineComponent, ref, reactive, watch } from 'vue';
51 43 import { CollapseContainer } from '/@/components/Container/index';
52 44 import { BasicForm, useForm } from '/@/components/Form/index';
53 45 import { Input } from 'ant-design-vue';
54 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 50 export default defineComponent({
58 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 59 labelWidth: 100,
63 60 schemas: useConditionDrawerSchema,
64 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 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 99 } catch (e) {
73 100 console.log(e);
74 101 }
75   - }
76   - const n = ref(1);
77   - function add() {
78 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 114 label: '',
  115 + component: 'Select',
83 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 136 colProps: {
87   - span: 8,
88   - offset: 1,
  137 + span: 12,
89 138 },
90   - required: true,
91 139 },
92 140 ''
93 141 );
94 142 appendSchemaByField(
95 143 {
96   - field: `field${n.value}b`,
97   - component: 'Input',
  144 + field: `createTime${n.value}`,
98 145 label: '',
  146 + component: 'DatePicker',
99 147 componentProps: {
100   - placeholder: '请输入',
  148 + placeholder: '请选择起始时间',
101 149 },
102 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 157 appendSchemaByField(
111 158 {
112   - field: `field${n.value}c`,
113   - component: 'ApiSelect',
  159 + field: `updateTime${n.value}`,
114 160 label: '',
  161 + component: 'DatePicker',
115 162 componentProps: {
116   - placeholder: '请选择',
  163 + placeholder: '请选择结束时间',
117 164 },
118 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 172 appendSchemaByField(
126 173 {
127   - field: `field${n.value}d`,
128   - component: 'ApiSelect',
  174 + field: `property${n.value}`,
129 175 label: '',
  176 + component: 'Select',
130 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 225 appendSchemaByField(
141 226 {
142   - field: `field${n.value}e`,
143   - component: 'ApiSelect',
  227 + field: `value${n.value}`,
  228 + component: 'Input',
144 229 label: '',
145 230 componentProps: {
146   - placeholder: '请选择',
  231 + placeholder: '请输入比较值',
147 232 },
  233 + ifShow: ({ values }) =>
  234 + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')),
148 235 colProps: {
149   - span: 8,
  236 + span: 12,
150 237 },
151   - required: true,
152 238 },
153 239 ''
154 240 );
  241 +
155 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 266 component: 'Input',
159 267 label: '',
160 268 componentProps: {
161   - placeholder: '请输入',
  269 + placeholder: '请输入比较值',
162 270 },
  271 + ifShow: ({ values }) =>
  272 + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')),
163 273 colProps: {
164   - span: 8,
  274 + span: 12,
165 275 },
166   - required: true,
167 276 },
168 277 ''
169 278 );
  279 +
170 280 appendSchemaByField(
171 281 {
172 282 field: `${n.value}`,
173   - component: 'ApiSelect',
  283 + component: 'Input',
174 284 label: ' ',
175 285 colProps: {
176   - span: 8,
177   - offset: 1,
  286 + span: 12,
178 287 },
179 288 slot: 'add',
180 289 },
... ... @@ -182,23 +291,24 @@
182 291 );
183 292 n.value++;
184 293 }
185   -
186 294 function del(field) {
187 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 307 `${field}`,
197 308 ]);
198 309 n.value--;
199 310 }
200   -
201   - return { register, handleSubmit, add, del, formData };
  311 + return { registerCondition, add, del };
202 312 },
203 313 });
204 314 </script>
... ...
1 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 43 </CollapseContainer>
48 44 </template>
49 45 <script lang="ts">
50   - import { defineComponent, ref } from 'vue';
  46 + import { defineComponent, ref, reactive, watch } from 'vue';
51 47 import { CollapseContainer } from '/@/components/Container/index';
52 48 import { BasicForm, useForm } from '/@/components/Form/index';
53 49 import { Input } from 'ant-design-vue';
54 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 54 export default defineComponent({
58 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 63 labelWidth: 100,
63 64 schemas: useActionDrawerSchema,
64 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 86 async function handleSubmit() {
68 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 92 } catch (e) {
73 93 console.log(e);
74 94 }
... ... @@ -77,104 +97,123 @@
77 97 function add() {
78 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 110 label: '',
  111 + component: 'Select',
83 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 124 appendSchemaByField(
95 125 {
96   - field: `field${n.value}b`,
97   - component: 'Input',
  126 + field: `deviceId${n.value}`,
98 127 label: '',
  128 + component: 'Select',
99 129 componentProps: {
100   - placeholder: '请输入',
  130 + placeholder: '请选择设备',
101 131 },
  132 + ifShow: ({ values }) =>
  133 + !isScene(Reflect.get(values, 'outTarget')) &&
  134 + !isMsg(Reflect.get(values, 'outTarget')),
102 135 colProps: {
103   - span: 8,
104   - offset: 1,
  136 + span: 12,
105 137 },
106   - required: true,
107 138 },
108 139 ''
109 140 );
110 141 appendSchemaByField(
111 142 {
112   - field: `field${n.value}c`,
113   - component: 'ApiSelect',
  143 + field: `command${n.value}`,
  144 + component: 'Input',
114 145 label: '',
115 146 componentProps: {
116   - placeholder: '请选择',
  147 + placeholder: '请输入下发指定',
117 148 },
  149 + ifShow: ({ values }) =>
  150 + !isScene(Reflect.get(values, 'outTarget')) &&
  151 + !isMsg(Reflect.get(values, 'outTarget')),
118 152 colProps: {
119   - span: 8,
  153 + span: 12,
120 154 },
121   - required: true,
122 155 },
123 156 ''
124 157 );
125 158 appendSchemaByField(
126 159 {
127   - field: `field${n.value}d`,
128   - component: 'ApiSelect',
  160 + field: `wu1${n.value}`,
129 161 label: '',
  162 + component: 'Input',
130 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 173 appendSchemaByField(
141 174 {
142   - field: `field${n.value}e`,
143   - component: 'ApiSelect',
  175 + field: `wu2${n.value}`,
  176 + component: 'Input',
144 177 label: '',
145 178 componentProps: {
146   - placeholder: '请选择',
  179 + placeholder: '暂不实现',
147 180 },
148 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 188 appendSchemaByField(
156 189 {
157   - field: `field${n.value}f`,
158   - component: 'Input',
  190 + field: `sceneLinkageId${n.value}`,
159 191 label: '',
160   - componentProps: {
161   - placeholder: '请输入',
162   - },
  192 + component: 'ApiSelect',
163 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 210 appendSchemaByField(
171 211 {
172 212 field: `${n.value}`,
173   - component: 'ApiSelect',
  213 + component: 'Input',
174 214 label: ' ',
175 215 colProps: {
176   - span: 8,
177   - offset: 1,
  216 + span: 12,
178 217 },
179 218 slot: 'add',
180 219 },
... ... @@ -185,20 +224,19 @@
185 224
186 225 function del(field) {
187 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 234 `${field}`,
197 235 ]);
198 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 242 </script>
... ...
1 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 42 </template>
48 43 <script lang="ts">
49   - import { defineComponent, ref } from 'vue';
  44 + import { defineComponent, reactive, ref, watch } from 'vue';
50 45 import { CollapseContainer } from '/@/components/Container/index';
51 46 import { BasicForm, useForm } from '/@/components/Form/index';
52 47 import { Input } from 'ant-design-vue';
53 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 59 export default defineComponent({
57 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 67 labelWidth: 100,
61 68 schemas: useTriggerDrawerSchema,
62 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 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 109 } catch (e) {
72 110 console.log(e);
73 111 }
74   - }
75   - const n = ref(1);
76   - function add() {
  112 +
77 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 143 label: '',
  144 + component: 'Select',
82 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 152 colProps: {
86   - span: 8,
87   - offset: 1,
  153 + span: 12,
88 154 },
89   - required: true,
90 155 },
91 156 ''
92 157 );
93 158 appendSchemaByField(
94 159 {
95   - field: `field${n.value}b`,
  160 + field: `${n.value}no1`,
96 161 component: 'Input',
97 162 label: '',
98 163 componentProps: {
99   - placeholder: '请输入',
  164 + placeholder: '请输入Cron表达式',
100 165 },
101 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 173 appendSchemaByField(
110 174 {
111   - field: `field${n.value}c`,
112   - component: 'ApiSelect',
  175 + field: `touchWay${n.value}`,
113 176 label: '',
  177 + component: 'Select',
114 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 215 appendSchemaByField(
125 216 {
126   - field: `field${n.value}d`,
127   - component: 'ApiSelect',
  217 + field: `attributeChoose${n.value}`,
128 218 label: '',
  219 + component: 'Select',
129 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 261 appendSchemaByField(
140 262 {
141   - field: `field${n.value}e`,
142   - component: 'ApiSelect',
  263 + field: `value${n.value}`,
  264 + component: 'Input',
143 265 label: '',
144 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 275 colProps: {
148   - span: 8,
  276 + span: 12,
149 277 },
150   - required: true,
151 278 },
152 279 ''
153 280 );
154 281 appendSchemaByField(
155 282 {
156   - field: `field${n.value}f`,
157   - component: 'Input',
  283 + field: `sceneLinkageId${n.value}`,
158 284 label: '',
  285 + component: 'Select',
  286 + colProps: {
  287 + span: 12,
  288 + },
  289 + ifShow: ({ values }) => isScene(Reflect.get(values, `tiggerEvent${n.value}`)),
159 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 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 316 appendSchemaByField(
170 317 {
171 318 field: `${n.value}`,
172   - component: 'ApiSelect',
173   - label: ' ',
  319 + component: 'Input',
  320 + label: '',
174 321 colProps: {
175   - span: 8,
176   - offset: 1,
  322 + span: 12,
177 323 },
178 324 slot: 'add',
179 325 },
... ... @@ -181,21 +327,31 @@
181 327 );
182 328 n.value++;
183 329 }
  330 +
184 331 function del(field) {
185 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 344 `${field}`,
195 345 ]);
196 346 n.value--;
197 347 }
198   - return { register, handleSubmit, add, del, formData };
  348 + return { registerTrigger, add, del };
199 349 },
200 350 });
201 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 72 export const columns: BasicColumn[] = [
6 73 {
... ... @@ -10,20 +77,52 @@ export const columns: BasicColumn[] = [
10 77 },
11 78 {
12 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 90 width: 200,
15 91 },
16 92 {
17 93 title: '状态',
18 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 137 },
39 138 ];
40 139
  140 +export const getData = ref(null);
  141 +
41 142 export const formSchema: FormSchema[] = [
42 143 {
43 144 field: 'name',
44 145 label: '场景联动名称',
45   - colProps: { span: 20 },
  146 + colProps: { span: 12 },
46 147 required: true,
47 148 component: 'Input',
48 149 componentProps: {
... ... @@ -50,24 +151,40 @@ export const formSchema: FormSchema[] = [
50 151 },
51 152 },
52 153 {
  154 + required: true,
53 155 field: 'organizationId',
54 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 185 field: 'description',
69 186 label: '描述',
70   - // colProps: { span: 20 },
  187 + colProps: { span: 12 },
71 188 component: 'InputTextArea',
72 189 componentProps: {
73 190 placeholder: '请输入描述',
... ... @@ -79,11 +196,15 @@ export const searchFormSchema: FormSchema[] = [
79 196 {
80 197 field: 'organizationId',
81 198 label: '所属组织',
  199 + colProps: { span: 8 },
82 200 component: 'ApiTreeSelect',
83 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 210 field: 'name',
... ... @@ -96,10 +217,14 @@ export const searchFormSchema: FormSchema[] = [
96 217 },
97 218 {
98 219 field: 'status',
99   - label: '状态',
100   - component: 'ApiSelect',
  220 + label: '设备状态',
  221 + component: 'Select',
101 222 componentProps: {
102 223 placeholder: '请选择状态',
  224 + options: [
  225 + { label: '已启用', value: '1' },
  226 + { label: '未启用', value: '0' },
  227 + ],
103 228 },
104 229 colProps: { span: 4 },
105 230 },
... ... @@ -107,96 +232,177 @@ export const searchFormSchema: FormSchema[] = [
107 232
108 233 export const useTriggerDrawerSchema: FormSchema[] = [
109 234 {
110   - field: 'field0a',
  235 + field: 'triggerEvent',
111 236 label: '',
112   - component: 'ApiSelect',
  237 + component: 'Select',
113 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 251 label: '',
129   - component: 'Input',
  252 + component: 'Select',
130 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 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 267 label: '',
144   - component: 'ApiSelect',
145 268 componentProps: {
146   - api: findDictItemByCode,
147   - params: {
148   - dictCode: 'message_type',
149   - },
150   - labelField: 'itemText',
151   - valueField: 'itemValue',
  269 + placeholder: '请输入Cron表达式',
152 270 },
153 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 278 label: '',
  279 + component: 'Select',
162 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 314 label: '',
  315 + component: 'Select',
174 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 354 component: 'Input',
185 355 label: '',
186 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 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 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 403 label: ' ',
198 404 colProps: {
199   - span: 6,
  405 + span: 12,
200 406 },
201 407 slot: 'add',
202 408 },
... ... @@ -204,86 +410,147 @@ export const useTriggerDrawerSchema: FormSchema[] = [
204 410
205 411 export const useConditionDrawerSchema: FormSchema[] = [
206 412 {
207   - field: 'field0a',
208   - component: 'ApiSelect',
  413 + field: 'status',
209 414 label: '',
  415 + component: 'Select',
210 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 427 label: '',
  428 + component: 'Select',
222 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 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 451 componentProps: {
238   - placeholder: '请选择',
  452 + placeholder: '请选择结束时间',
239 453 },
240 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 461 label: '',
  462 + component: 'Select',
249 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 506 label: '',
261 507 componentProps: {
262   - placeholder: '请选择',
  508 + placeholder: '请输入比较值',
263 509 },
  510 + ifShow: ({ values }) =>
  511 + isShiDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')),
264 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 537 component: 'Input',
272 538 label: '',
273 539 componentProps: {
274   - placeholder: '请输入',
  540 + placeholder: '请输入比较值',
275 541 },
  542 + ifShow: ({ values }) =>
  543 + isWenDu(Reflect.get(values, 'property')) && !isTimeAll(Reflect.get(values, 'status')),
276 544 colProps: {
277   - span: 6,
  545 + span: 12,
278 546 },
279   - required: true,
280 547 },
281 548 {
282 549 field: '0',
283   - component: 'ApiSelect',
  550 + component: 'Input',
284 551 label: ' ',
285 552 colProps: {
286   - span: 6,
  553 + span: 12,
287 554 },
288 555 slot: 'add',
289 556 },
... ... @@ -291,86 +558,119 @@ export const useConditionDrawerSchema: FormSchema[] = [
291 558
292 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 576 label: '',
  577 + component: 'Select',
297 578 componentProps: {
298   - placeholder: '请选择',
  579 + placeholder: '请选择设备',
299 580 },
  581 + ifShow: ({ values }) =>
  582 + !isScene(Reflect.get(values, 'outTarget')) && !isMsg(Reflect.get(values, 'outTarget')),
300 583 colProps: {
301   - span: 6,
  584 + span: 12,
302 585 },
303   - required: true,
304 586 },
305 587 {
306   - field: 'field0b',
  588 + field: 'command',
307 589 component: 'Input',
308 590 label: '',
309 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 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 602 label: '',
  603 + component: 'Input',
324 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 615 label: '',
336 616 componentProps: {
337   - placeholder: '请选择',
  617 + placeholder: '暂不实现',
338 618 },
339 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 626 label: '',
  627 + component: 'Input',
348 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 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 657 label: '',
  658 + component: 'Input',
360 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 669 field: '0',
370   - component: 'ApiSelect',
  670 + component: 'Input',
371 671 label: ' ',
372 672 colProps: {
373   - span: 6,
  673 + span: 12,
374 674 },
375 675 slot: 'add',
376 676 },
... ...
1 1 <template>
2 2 <div>
3   - <BasicTable :clickToRowSelect="true" @register="registerTable">
  3 + <BasicTable
  4 + :rowSelection="{ type: 'checkbox' }"
  5 + @selection-change="useSelectionChange"
  6 + @register="registerTable"
  7 + >
4 8 <template #toolbar>
5 9 <a-button type="primary" @click="handleAdd"> 新增场景联动 </a-button>
6 10 <a-button type="error" @click="handleToolbarDel"> 删除 </a-button>
... ... @@ -34,42 +38,39 @@
34 38 </div>
35 39 </template>
36 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 42 import { BasicTable, useTable, TableAction } from '/@/components/Table';
40 43 import { useDrawer } from '/@/components/Drawer';
41 44 import SceneLinkAgeDrawer from './useDrawer.vue';
42 45 import { columns, searchFormSchema } from './config.d';
43 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 49 export default defineComponent({
52   - name: 'DeviceManagement',
  50 + name: 'index',
53 51 components: { BasicTable, SceneLinkAgeDrawer, TableAction },
54 52 setup() {
55   - let echoEditData = ref({});
  53 + let selectedRowKeys: Array<string> = [];
  54 + let echoEditData = reactive({});
56 55 const [registerDrawer, { openDrawer }] = useDrawer();
57 56 const { createMessage } = useMessage();
58   - const [registerTable, { reload }] = useTable({
  57 + const [registerTable, { reload, getSelectRowKeys }] = useTable({
59 58 title: '',
  59 + clickToRowSelect: false,
60 60 api: screenLinkPageGetApi,
61 61 columns,
62 62 formConfig: {
63 63 labelWidth: 120,
64 64 schemas: searchFormSchema,
65 65 },
  66 + filterFn: (registerTable) => {
  67 + return registerTable;
  68 + },
  69 + rowKey: 'id',
66 70 useSearchForm: true,
67 71 showTableSetting: true,
68 72 bordered: true,
69 73 showIndexColumn: false,
70   - rowSelection: {
71   - type: 'checkbox',
72   - },
73 74 actionColumn: {
74 75 width: 180,
75 76 title: '操作',
... ... @@ -84,32 +85,35 @@
84 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 95 createMessage.success('删除成功');
  96 + reload();
89 97 }
90   - console.log(echoEditData.value);
91 98
92 99 function handleEdit(record: Recordable) {
93 100 openDrawer(true, {
94 101 record,
95 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 107 let ids = [record.id];
105   - console.log(ids);
  108 + await screenLinkPageDeleteApi(ids);
106 109 createMessage.success('删除成功');
  110 + reload();
107 111 }
108   -
109 112 function handleSuccess() {
110 113 reload();
111 114 }
112 115 return {
  116 + useSelectionChange,
113 117 echoEditData,
114 118 registerTable,
115 119 registerDrawer,
... ... @@ -118,8 +122,6 @@
118 122 handleEdit,
119 123 handleDelete,
120 124 handleSuccess,
121   - DeviceTypeEnum,
122   - DeviceState,
123 125 };
124 126 },
125 127 });
... ...
... ... @@ -8,18 +8,18 @@
8 8 @ok="handleSubmit"
9 9 >
10 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 14 </BasicDrawer>
15 15 </template>
16 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 18 import { BasicForm, useForm } from '/@/components/Form';
19   - import { formSchema } from './config.d';
  19 + import { formSchema, getData } from './config.d';
20 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 23 import AddTriggerForm from './addForm/trigger.vue';
24 24 import AddActionForm from './addForm/doaction.vue';
25 25 import AddConditiForm from './addForm/condition.vue';
... ... @@ -28,57 +28,110 @@
28 28 name: 'ConfigDrawer',
29 29 components: { BasicDrawer, BasicForm, AddTriggerForm, AddActionForm, AddConditiForm },
30 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 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 61 await resetFields();
50 62 setDrawerProps({ confirmLoading: false });
51 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 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 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 130 return {
81   - getParentEchoData,
  131 + getDeviceInfo,
  132 + getDeviceInfo1,
  133 + getDeviceInfo2,
  134 + getAllFormData,
82 135 getTriggerData,
83 136 getFormConditiData,
84 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 74
75 75 if (unref(isUpdate)) {
76 76 rowId.value = data.record.id;
  77 + console.log(data.record);
77 78 const roleParams = new RoleOrOrganizationParam(rowId.value, true, false);
78 79 findCurrentUserRelation(roleParams).then((result) => {
79 80 Reflect.set(data.record, 'roleIds', result);
... ...
... ... @@ -115,7 +115,6 @@
115 115 }
116 116
117 117 function handleEdit(record: Recordable) {
118   - console.log(record);
119 118 openModal(true, {
120 119 record,
121 120 isUpdate: true,
... ...