Commit e240a76349145b42b3521462a77cc72f1053fc30

Authored by xp.Huang
2 parents 0461f377 30d4645c

Merge branch 'local_dev_ft' into 'main'

pref:优化命令下发记录

See merge request yunteng/thingskit-front!484
1 -import { Rule } from 'ant-design-vue/lib/form/interface';  
2 -/**  
3 - * 常用表单自定义验证规则  
4 - *  
5 - */  
6 -  
7 -export const validatorLongitude = (_rule: Rule, value: string) => {  
8 - const reg =  
9 - /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,20})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,20}|180)$/;  
10 - if (!value) {  
11 - return Promise.reject('请输入经度');  
12 - } else if (!reg.test(value)) {  
13 - return Promise.reject('经度整数部分为0-180,小数部分为0到6位!');  
14 - }  
15 - return Promise.resolve();  
16 -};  
17 -export const validatorLatitude = (_rule: Rule, value: string) => {  
18 - const reg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,20}|90\.0{0,20}|[0-8]?\d{1}|90)$/;  
19 - if (value === '') {  
20 - return Promise.reject('请输入维度');  
21 - } else if (!reg.test(value)) {  
22 - return Promise.reject('纬度整数部分为0-90,小数部分为0到6位!');  
23 - }  
24 -  
25 - return Promise.resolve();  
26 -};  
27 -  
28 -//正整数并且可以是英文  
29 -export const numberAndEngLishRule: Rule[] = [  
30 - {  
31 - validator: (_, value: string) => {  
32 - const reg1 = /^[0-9]*[1-9][0-9]*$/;  
33 - const reg2 = /^[A-Za-z0-9]+$/;  
34 - if (!reg1.test(value) && !reg2.test(value)) {  
35 - return Promise.reject('不能为负数');  
36 - }  
37 - return Promise.resolve();  
38 - },  
39 - validateTrigger: 'blur',  
40 - },  
41 -];  
42 -  
43 -//数字和非负数  
44 -export const numberAndNonegativeRule: Rule[] = [  
45 - {  
46 - validator: (_, value: string) => {  
47 - const reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/;  
48 - if (!reg.test(value)) {  
49 - return Promise.reject('不能为负数或者不能输入非数字');  
50 - }  
51 - return Promise.resolve();  
52 - },  
53 - validateTrigger: 'blur',  
54 - },  
55 -];  
56 -  
57 -// 数字验证  
58 -export const numberRule: Rule[] = [  
59 - {  
60 - required: true,  
61 - validator: (_, value: string) => {  
62 - const reg = /^[0-9]{8}$/;  
63 - if (!reg.test(value)) {  
64 - return Promise.reject('只能输入数字');  
65 - }  
66 - return Promise.resolve();  
67 - },  
68 - validateTrigger: 'blur',  
69 - },  
70 -];  
71 -export const phoneRegexp = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;  
72 -  
73 -//中英文正则  
74 -export const chineseAndEnlishRule: Rule[] = [  
75 - {  
76 - required: true,  
77 - validator: (_, value: string) => {  
78 - const reg = /^[a-zA-Z\u4e00-\u9fa5]+$/;  
79 - if (value === '' || value === undefined) {  
80 - return Promise.reject('请输入');  
81 - } else if (!reg.test(value)) {  
82 - return Promise.reject('格式不正确');  
83 - }  
84 - return Promise.resolve();  
85 - },  
86 - validateTrigger: 'blur',  
87 - },  
88 -];  
89 -  
90 -// 手机号验证  
91 -export const phoneRule: Rule[] = [  
92 - {  
93 - required: true,  
94 - validator: (_, value: string) => {  
95 - const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;  
96 - if (value === '') {  
97 - return Promise.reject('请输入手机号码');  
98 - } else if (!reg.test(value)) {  
99 - return Promise.reject('手机号格式不正确');  
100 - }  
101 - return Promise.resolve();  
102 - },  
103 - validateTrigger: 'blur',  
104 - },  
105 -];  
106 -  
107 -// 电子邮箱验证  
108 -export const emailRule: Rule[] = [  
109 - {  
110 - validator: (_, value: string) => {  
111 - const reg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;  
112 - if (!value) {  
113 - return Promise.resolve();  
114 - } else if (!reg.test(value)) {  
115 - return Promise.reject('电子邮箱格式不正确');  
116 - }  
117 - return Promise.resolve();  
118 - },  
119 - validateTrigger: 'blur',  
120 - },  
121 -];  
122 -  
123 -// 中文正则  
124 -export const ChineseRegexp = /[\u4E00-\u9FA5]/;  
125 -  
126 -//字母或者数字正则  
127 -export const allowLetterAndNumberRegExp = /^[A-Za-z0-9]+$/;  
128 -  
129 -// 电子邮箱正则  
130 -export const EmailRegexp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;  
131 -  
132 -// 手机号正则  
133 -export const PhoneRegexp = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;  
134 -  
135 -//中文正则  
136 -export const ChineseRegVerify: Rule[] = [  
137 - {  
138 - required: true,  
139 - validator: (_, value: string) => {  
140 - const ChineseRegexp = /[\u4E00-\u9FA5]/;  
141 - if (!ChineseRegexp.test(value)) {  
142 - return Promise.reject('用户名只能是中文');  
143 - }  
144 - return Promise.resolve();  
145 - },  
146 - validateTrigger: 'blur',  
147 - },  
148 -];  
149 -  
150 -/**  
151 - * 视频管理  
152 - */  
153 -export const CameraMaxLength: Rule[] = [  
154 - {  
155 - required: true,  
156 - validator: (_, value: string) => {  
157 - if (String(value).length > 50) {  
158 - return Promise.reject('视频标题长度不超过200字');  
159 - }  
160 - return Promise.resolve();  
161 - },  
162 - validateTrigger: 'blur',  
163 - },  
164 -];  
165 -  
166 -export const CameraVideoUrl: Rule[] = [  
167 - {  
168 - required: true,  
169 - validator: (_, value: string) => {  
170 - const ChineseRegexp = /[\u4E00-\u9FA5]/;  
171 - if (ChineseRegexp.test(value)) {  
172 - return Promise.reject('输入内容不能是中文');  
173 - }  
174 - return Promise.resolve();  
175 - },  
176 - validateTrigger: 'blur',  
177 - },  
178 -];  
179 -  
180 -export const CameraVideoStreamUrl: Rule[] = [  
181 - {  
182 - required: true,  
183 - validator: (_, value: string) => {  
184 - const ChineseRegexp =  
185 - /^https?:\/\/(.+\/)+.+(\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4|m3u8))$/i;  
186 - if (!ChineseRegexp.test(value)) {  
187 - return Promise.reject('请输入正确格式的视频地址');  
188 - }  
189 - return Promise.resolve();  
190 - },  
191 - validateTrigger: 'blur',  
192 - },  
193 -];  
194 -export const CameraNumberUrl: Rule[] = [  
195 - {  
196 - required: true,  
197 - validator: (_, value: string) => {  
198 - const ChineseRegexp = /^[A-Za-z0-9]+$/;  
199 - if (!ChineseRegexp.test(value)) {  
200 - return Promise.reject('请输入正确格式的视频编号');  
201 - }  
202 - return Promise.resolve();  
203 - },  
204 - validateTrigger: 'blur',  
205 - },  
206 -];  
207 -  
208 -//站内通知  
209 -export const NotificationTitleMaxLength: Rule[] = [  
210 - {  
211 - required: true,  
212 - validator: (_, value: string) => {  
213 - if (String(value).length > 50) {  
214 - return Promise.reject('标题长度不超过200字');  
215 - }  
216 - return Promise.resolve();  
217 - },  
218 - validateTrigger: 'blur',  
219 - },  
220 -];  
221 -  
222 -export const NotificationContentMaxLength: Rule[] = [  
223 - {  
224 - required: true,  
225 - validator: (_, value: string) => {  
226 - if (String(value).length > 50) {  
227 - return Promise.reject('内容长度不超过50字');  
228 - }  
229 - return Promise.resolve();  
230 - },  
231 - validateTrigger: 'blur',  
232 - },  
233 -];  
234 -  
235 -export const DeviceNameMaxLength: Rule[] = [  
236 - {  
237 - required: true,  
238 - validator: (_, value: string) => {  
239 - if (String(value).length > 30) {  
240 - return Promise.reject('设备名称长度不超过30字');  
241 - }  
242 - return Promise.resolve();  
243 - },  
244 - validateTrigger: 'blur',  
245 - },  
246 -];  
247 -  
248 -export const DeviceProfileIdMaxLength: Rule[] = [  
249 - {  
250 - required: true,  
251 - validator: (_, value: string) => {  
252 - if (String(value).length > 36) {  
253 - return Promise.reject('所属产品长度不超过36字');  
254 - }  
255 - return Promise.resolve();  
256 - },  
257 - validateTrigger: 'blur',  
258 - },  
259 -];  
260 -  
261 -export const DeviceOrgIdMaxLength: Rule[] = [  
262 - {  
263 - required: true,  
264 - validator: (_, value: string) => {  
265 - if (String(value).length > 36) {  
266 - return Promise.reject('组织长度不超过36字');  
267 - }  
268 - return Promise.resolve();  
269 - },  
270 - validateTrigger: 'blur',  
271 - },  
272 -];  
273 -  
274 -export const DeviceLabelMaxLength: Rule[] = [  
275 - {  
276 - required: true,  
277 - validator: (_, value: string) => {  
278 - if (String(value).length > 255) {  
279 - return Promise.reject('设备标签不超过255字');  
280 - }  
281 - return Promise.resolve();  
282 - },  
283 - validateTrigger: 'blur',  
284 - },  
285 -];  
286 -export const DeviceDescriptionlMaxLength: Rule[] = [  
287 - {  
288 - required: true,  
289 - validator: (_, value: string) => {  
290 - if (String(value).length > 500) {  
291 - return Promise.reject('备注不超过500字');  
292 - }  
293 - return Promise.resolve();  
294 - },  
295 - validateTrigger: 'blur',  
296 - },  
297 -];  
298 -export const DeviceIdMaxLength: Rule[] = [  
299 - {  
300 - required: true,  
301 - validator: (_, value: string) => {  
302 - if (String(value).length > 36) {  
303 - return Promise.reject('id不超过36字');  
304 - }  
305 - return Promise.resolve();  
306 - },  
307 - validateTrigger: 'blur',  
308 - },  
309 -];  
310 -  
311 -export const DeviceTenantIdMaxLength: Rule[] = [  
312 - {  
313 - required: true,  
314 - validator: (_, value: string) => {  
315 - if (String(value).length > 36) {  
316 - return Promise.reject('租户Code不超过36字');  
317 - }  
318 - return Promise.resolve();  
319 - },  
320 - validateTrigger: 'blur',  
321 - },  
322 -];  
323 -  
324 -export const DeviceTbDeviceIdMaxLength: Rule[] = [  
325 - {  
326 - required: true,  
327 - validator: (_, value: string) => {  
328 - if (String(value).length > 36) {  
329 - return Promise.reject('tbDeviceId不超过36字');  
330 - }  
331 - return Promise.resolve();  
332 - },  
333 - validateTrigger: 'blur',  
334 - },  
335 -];  
336 -  
337 -export const DeviceUserNameMaxLength: Rule[] = [  
338 - {  
339 - required: true,  
340 - validator: (_, value: string) => {  
341 - if (String(value).length > 50) {  
342 - return Promise.reject('用户名长度不超过50字');  
343 - }  
344 - return Promise.resolve();  
345 - },  
346 - validateTrigger: 'blur',  
347 - },  
348 -];  
349 -  
350 -export const DeviceQueryUserNameMaxLength: Rule[] = [  
351 - {  
352 - required: true,  
353 - validator: (_, value: string) => {  
354 - if (String(value).length > 50) {  
355 - return Promise.reject('设备名称长度不超过50字');  
356 - }  
357 - return Promise.resolve();  
358 - },  
359 - validateTrigger: 'blur',  
360 - },  
361 -];  
362 -  
363 -export const DeviceProfileQueryUserNameMaxLength: Rule[] = [  
364 - {  
365 - required: true,  
366 - validator: (_, value: string) => {  
367 - if (String(value).length > 255) {  
368 - return Promise.reject('配置名称长度不超过255字');  
369 - }  
370 - return Promise.resolve();  
371 - },  
372 - validateTrigger: 'blur',  
373 - },  
374 -];  
375 -  
376 -enum MediaType {  
377 - MP4 = 'mp4',  
378 - M3U8 = 'm3u8',  
379 -}  
380 -  
381 -export const MediaTypeValidate: Rule[] = [  
382 - {  
383 - required: true,  
384 - validator: (_, value: string) => {  
385 - const reg = /(?:.*)(?<=\.)/;  
386 - const type = (value || '').replace(reg, '');  
387 - if (type !== MediaType.M3U8) {  
388 - return Promise.reject('视频流只支持m3u8格式');  
389 - }  
390 - return Promise.resolve();  
391 - },  
392 - validateTrigger: 'blur',  
393 - },  
394 -]; 1 +import { Rule } from 'ant-design-vue/lib/form/interface';
  2 +/**
  3 + * 常用表单自定义验证规则
  4 + *
  5 + */
  6 +
  7 +export const validatorLongitude = (_rule: Rule, value: string) => {
  8 + const reg =
  9 + /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,20})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,20}|180)$/;
  10 + if (!value) {
  11 + return Promise.reject('请输入经度');
  12 + } else if (!reg.test(value)) {
  13 + return Promise.reject('经度整数部分为0-180,小数部分为0到6位!');
  14 + }
  15 + return Promise.resolve();
  16 +};
  17 +export const validatorLatitude = (_rule: Rule, value: string) => {
  18 + const reg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,20}|90\.0{0,20}|[0-8]?\d{1}|90)$/;
  19 + if (value === '') {
  20 + return Promise.reject('请输入维度');
  21 + } else if (!reg.test(value)) {
  22 + return Promise.reject('纬度整数部分为0-90,小数部分为0到6位!');
  23 + }
  24 +
  25 + return Promise.resolve();
  26 +};
  27 +
  28 +//正整数并且可以是英文
  29 +export const numberAndEngLishRule: Rule[] = [
  30 + {
  31 + validator: (_, value: string) => {
  32 + const reg1 = /^[0-9]*[1-9][0-9]*$/;
  33 + const reg2 = /^[A-Za-z0-9]+$/;
  34 + if (!reg1.test(value) && !reg2.test(value)) {
  35 + return Promise.reject('不能为负数');
  36 + }
  37 + return Promise.resolve();
  38 + },
  39 + validateTrigger: 'blur',
  40 + },
  41 +];
  42 +
  43 +//数字和非负数
  44 +export const numberAndNonegativeRule: Rule[] = [
  45 + {
  46 + validator: (_, value: string) => {
  47 + const reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/;
  48 + if (!reg.test(value)) {
  49 + return Promise.reject('不能为负数或者不能输入非数字');
  50 + }
  51 + return Promise.resolve();
  52 + },
  53 + validateTrigger: 'blur',
  54 + },
  55 +];
  56 +
  57 +// 数字验证
  58 +export const numberRule: Rule[] = [
  59 + {
  60 + required: true,
  61 + validator: (_, value: string) => {
  62 + const reg = /^[0-9]{8}$/;
  63 + if (!reg.test(value)) {
  64 + return Promise.reject('只能输入数字');
  65 + }
  66 + return Promise.resolve();
  67 + },
  68 + validateTrigger: 'blur',
  69 + },
  70 +];
  71 +export const phoneRegexp = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
  72 +
  73 +//中英文正则
  74 +export const chineseAndEnlishRule: Rule[] = [
  75 + {
  76 + required: true,
  77 + validator: (_, value: string) => {
  78 + const reg = /^[a-zA-Z\u4e00-\u9fa5]+$/;
  79 + if (value === '' || value === undefined) {
  80 + return Promise.reject('请输入');
  81 + } else if (!reg.test(value)) {
  82 + return Promise.reject('格式不正确');
  83 + }
  84 + return Promise.resolve();
  85 + },
  86 + validateTrigger: 'blur',
  87 + },
  88 +];
  89 +
  90 +// 手机号验证
  91 +export const phoneRule: Rule[] = [
  92 + {
  93 + required: true,
  94 + validator: (_, value: string) => {
  95 + const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
  96 + if (value === '') {
  97 + return Promise.reject('请输入手机号码');
  98 + } else if (!reg.test(value)) {
  99 + return Promise.reject('手机号格式不正确');
  100 + }
  101 + return Promise.resolve();
  102 + },
  103 + validateTrigger: 'blur',
  104 + },
  105 +];
  106 +
  107 +// 电子邮箱验证
  108 +export const emailRule: Rule[] = [
  109 + {
  110 + validator: (_, value: string) => {
  111 + const reg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
  112 + if (!value) {
  113 + return Promise.resolve();
  114 + } else if (!reg.test(value)) {
  115 + return Promise.reject('电子邮箱格式不正确');
  116 + }
  117 + return Promise.resolve();
  118 + },
  119 + validateTrigger: 'blur',
  120 + },
  121 +];
  122 +
  123 +// 中文正则
  124 +export const ChineseRegexp = /[\u4E00-\u9FA5]/;
  125 +
  126 +//字母或者数字正则
  127 +export const allowLetterAndNumberRegExp = /^[A-Za-z0-9]+$/;
  128 +
  129 +// 电子邮箱正则
  130 +export const EmailRegexp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
  131 +
  132 +// 手机号正则
  133 +export const PhoneRegexp = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
  134 +
  135 +//中文正则
  136 +export const ChineseRegVerify: Rule[] = [
  137 + {
  138 + required: true,
  139 + validator: (_, value: string) => {
  140 + const ChineseRegexp = /[\u4E00-\u9FA5]/;
  141 + if (!ChineseRegexp.test(value)) {
  142 + return Promise.reject('用户名只能是中文');
  143 + }
  144 + return Promise.resolve();
  145 + },
  146 + validateTrigger: 'blur',
  147 + },
  148 +];
  149 +
  150 +/**
  151 + * 视频管理
  152 + */
  153 +export const CameraMaxLength: Rule[] = [
  154 + {
  155 + required: true,
  156 + validator: (_, value: string) => {
  157 + if (String(value).length > 50) {
  158 + return Promise.reject('视频标题长度不超过200字');
  159 + }
  160 + return Promise.resolve();
  161 + },
  162 + validateTrigger: 'blur',
  163 + },
  164 +];
  165 +
  166 +export const CameraVideoUrl: Rule[] = [
  167 + {
  168 + required: true,
  169 + validator: (_, value: string) => {
  170 + const ChineseRegexp = /[\u4E00-\u9FA5]/;
  171 + if (ChineseRegexp.test(value)) {
  172 + return Promise.reject('输入内容不能是中文');
  173 + }
  174 + return Promise.resolve();
  175 + },
  176 + validateTrigger: 'blur',
  177 + },
  178 +];
  179 +
  180 +export const CameraVideoStreamUrl: Rule[] = [
  181 + {
  182 + required: true,
  183 + validator: (_, value: string) => {
  184 + const ChineseRegexp =
  185 + /^https?:\/\/(.+\/)+.+(\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4|m3u8))$/i;
  186 + if (!ChineseRegexp.test(value)) {
  187 + return Promise.reject('请输入正确格式的视频地址');
  188 + }
  189 + return Promise.resolve();
  190 + },
  191 + validateTrigger: 'blur',
  192 + },
  193 +];
  194 +export const CameraNumberUrl: Rule[] = [
  195 + {
  196 + required: true,
  197 + validator: (_, value: string) => {
  198 + const ChineseRegexp = /^[A-Za-z0-9]+$/;
  199 + if (!ChineseRegexp.test(value)) {
  200 + return Promise.reject('请输入正确格式的视频编号');
  201 + }
  202 + return Promise.resolve();
  203 + },
  204 + validateTrigger: 'blur',
  205 + },
  206 +];
  207 +
  208 +//站内通知
  209 +export const NotificationTitleMaxLength: Rule[] = [
  210 + {
  211 + required: true,
  212 + validator: (_, value: string) => {
  213 + if (String(value).length > 50) {
  214 + return Promise.reject('标题长度不超过200字');
  215 + }
  216 + return Promise.resolve();
  217 + },
  218 + validateTrigger: 'blur',
  219 + },
  220 +];
  221 +
  222 +export const NotificationContentMaxLength: Rule[] = [
  223 + {
  224 + required: true,
  225 + validator: (_, value: string) => {
  226 + if (String(value).length > 50) {
  227 + return Promise.reject('内容长度不超过50字');
  228 + }
  229 + return Promise.resolve();
  230 + },
  231 + validateTrigger: 'blur',
  232 + },
  233 +];
  234 +
  235 +export const DeviceNameMaxLength: Rule[] = [
  236 + {
  237 + required: true,
  238 + validator: (_, value: string) => {
  239 + if (String(value).length > 30) {
  240 + return Promise.reject('设备名称长度不超过30字');
  241 + }
  242 + return Promise.resolve();
  243 + },
  244 + validateTrigger: 'blur',
  245 + },
  246 +];
  247 +
  248 +export const DeviceProfileIdMaxLength: Rule[] = [
  249 + {
  250 + required: true,
  251 + validator: (_, value: string) => {
  252 + if (String(value).length > 36) {
  253 + return Promise.reject('所属产品长度不超过36字');
  254 + }
  255 + return Promise.resolve();
  256 + },
  257 + validateTrigger: 'blur',
  258 + },
  259 +];
  260 +
  261 +export const DeviceOrgIdMaxLength: Rule[] = [
  262 + {
  263 + required: true,
  264 + validator: (_, value: string) => {
  265 + if (String(value).length > 36) {
  266 + return Promise.reject('组织长度不超过36字');
  267 + }
  268 + return Promise.resolve();
  269 + },
  270 + validateTrigger: 'blur',
  271 + },
  272 +];
  273 +
  274 +export const DeviceLabelMaxLength: Rule[] = [
  275 + {
  276 + required: true,
  277 + validator: (_, value: string) => {
  278 + if (String(value).length > 255) {
  279 + return Promise.reject('设备标签不超过255字');
  280 + }
  281 + return Promise.resolve();
  282 + },
  283 + validateTrigger: 'blur',
  284 + },
  285 +];
  286 +export const DeviceDescriptionlMaxLength: Rule[] = [
  287 + {
  288 + required: true,
  289 + validator: (_, value: string) => {
  290 + if (String(value).length > 500) {
  291 + return Promise.reject('备注不超过500字');
  292 + }
  293 + return Promise.resolve();
  294 + },
  295 + validateTrigger: 'blur',
  296 + },
  297 +];
  298 +export const DeviceIdMaxLength: Rule[] = [
  299 + {
  300 + required: true,
  301 + validator: (_, value: string) => {
  302 + if (String(value).length > 36) {
  303 + return Promise.reject('id不超过36字');
  304 + }
  305 + return Promise.resolve();
  306 + },
  307 + validateTrigger: 'blur',
  308 + },
  309 +];
  310 +
  311 +export const DeviceTenantIdMaxLength: Rule[] = [
  312 + {
  313 + required: true,
  314 + validator: (_, value: string) => {
  315 + if (String(value).length > 36) {
  316 + return Promise.reject('租户Code不超过36字');
  317 + }
  318 + return Promise.resolve();
  319 + },
  320 + validateTrigger: 'blur',
  321 + },
  322 +];
  323 +
  324 +export const DeviceTbDeviceIdMaxLength: Rule[] = [
  325 + {
  326 + required: true,
  327 + validator: (_, value: string) => {
  328 + if (String(value).length > 36) {
  329 + return Promise.reject('tbDeviceId不超过36字');
  330 + }
  331 + return Promise.resolve();
  332 + },
  333 + validateTrigger: 'blur',
  334 + },
  335 +];
  336 +
  337 +export const DeviceUserNameMaxLength: Rule[] = [
  338 + {
  339 + required: true,
  340 + validator: (_, value: string) => {
  341 + if (String(value).length > 50) {
  342 + return Promise.reject('用户名长度不超过50字');
  343 + }
  344 + return Promise.resolve();
  345 + },
  346 + validateTrigger: 'blur',
  347 + },
  348 +];
  349 +
  350 +export const DeviceQueryUserNameMaxLength: Rule[] = [
  351 + {
  352 + required: true,
  353 + validator: (_, value: string) => {
  354 + if (String(value).length > 50) {
  355 + return Promise.reject('设备名称长度不超过50字');
  356 + }
  357 + return Promise.resolve();
  358 + },
  359 + validateTrigger: 'blur',
  360 + },
  361 +];
  362 +
  363 +export const DeviceProfileQueryUserNameMaxLength: Rule[] = [
  364 + {
  365 + required: true,
  366 + validator: (_, value: string) => {
  367 + if (String(value).length > 255) {
  368 + return Promise.reject('配置名称长度不超过255字');
  369 + }
  370 + return Promise.resolve();
  371 + },
  372 + validateTrigger: 'blur',
  373 + },
  374 +];
  375 +
  376 +// enum MediaType {
  377 +// MP4 = 'mp4',
  378 +// M3U8 = 'm3u8',
  379 +// }
  380 +
  381 +export const MediaTypeValidate: Rule[] = [
  382 + {
  383 + required: true,
  384 + // validator: (_, value: string) => {
  385 + // // const reg = /(?:.*)(?<=\.)/;
  386 + // // const type = (value || '').replace(reg, '');
  387 + // // if (type !== MediaType.M3U8) {
  388 + // // return Promise.reject('视频流只支持m3u8格式');
  389 + // // }
  390 + // return Promise.resolve();
  391 + // },
  392 + validateTrigger: 'blur',
  393 + },
  394 +];
@@ -88,24 +88,43 @@ @@ -88,24 +88,43 @@
88 unref(jsonInstance).set({}); 88 unref(jsonInstance).set({});
89 }; 89 };
90 const handleOk = async () => { 90 const handleOk = async () => {
  91 + disable.value = true;
91 try { 92 try {
92 - disable.value = true;  
93 // 验证 93 // 验证
94 const valid = await validate(); 94 const valid = await validate();
95 if (!valid) return; 95 if (!valid) return;
96 // 收集表单数据 96 // 收集表单数据
97 const field = getFieldsValue(); 97 const field = getFieldsValue();
  98 + let passStatus = false;
98 if (field.valueType === 'json') { 99 if (field.valueType === 'json') {
99 const getJson = unref(jsonInstance).get(); 100 const getJson = unref(jsonInstance).get();
  101 + if (Object.prototype.isPrototypeOf(getJson) && Object.keys(getJson).length === 0) {
  102 + createMessage.error('命令内容不能为空');
  103 + passStatus = true;
  104 + }
  105 + if (getJson === '') {
  106 + passStatus = true;
  107 + createMessage.error('命令内容不能为空');
  108 + }
100 jsonData.value.params = getJson; 109 jsonData.value.params = getJson;
101 } else { 110 } else {
102 jsonData.value.params = field.commandText; 111 jsonData.value.params = field.commandText;
  112 + if (!jsonData.value.params) {
  113 + createMessage.error('命令内容不能为空');
  114 + passStatus = true;
  115 + }
  116 + if (
  117 + jsonData.value.params == '""' ||
  118 + jsonData.value.params == "''" ||
  119 + jsonData.value.params == '“”'
  120 + ) {
  121 + createMessage.error('命令内容不能为空');
  122 + passStatus = true;
  123 + }
103 } 124 }
104 jsonData.value.persistent = true; 125 jsonData.value.persistent = true;
105 - // jsonData.value.additionalInfo = {  
106 - // cmdType: 'API',  
107 - // };  
108 jsonData.value.method = 'methodThingskit'; 126 jsonData.value.method = 'methodThingskit';
  127 + if (passStatus) return;
109 commandIssuanceApi(field.commandType, props.deviceDetail.tbDeviceId, jsonData.value) 128 commandIssuanceApi(field.commandType, props.deviceDetail.tbDeviceId, jsonData.value)
110 .then((res) => { 129 .then((res) => {
111 if (!res) return; 130 if (!res) return;
@@ -126,8 +145,8 @@ @@ -126,8 +145,8 @@
126 }, 300); 145 }, 300);
127 }); 146 });
128 } catch (e) { 147 } catch (e) {
  148 + } finally {
129 //这里捕获json插件的错误 149 //这里捕获json插件的错误
130 - createMessage.error('请填写正确的json格式数据');  
131 disable.value = false; 150 disable.value = false;
132 } 151 }
133 }; 152 };
@@ -14,6 +14,15 @@ export const configColumns: BasicColumn[] = [ @@ -14,6 +14,15 @@ export const configColumns: BasicColumn[] = [
14 { 14 {
15 title: '命令类型', 15 title: '命令类型',
16 dataIndex: 'additionalInfo.cmdType', 16 dataIndex: 'additionalInfo.cmdType',
  17 + format: (text) => {
  18 + return h(
  19 + Tag,
  20 + {
  21 + color: Number(text) === 0 ? 'blue' : 'green',
  22 + },
  23 + () => (Number(text) === 0 ? '自定义' : '服务')
  24 + );
  25 + },
17 }, 26 },
18 { 27 {
19 title: '响应类型', 28 title: '响应类型',
@@ -50,16 +59,8 @@ export const configColumns: BasicColumn[] = [ @@ -50,16 +59,8 @@ export const configColumns: BasicColumn[] = [
50 }, 59 },
51 { 60 {
52 title: '响应结果', 61 title: '响应结果',
53 - dataIndex: 'response',  
54 - customRender: (text) => {  
55 - return h(  
56 - Tag,  
57 - {  
58 - color: text?.status === 'SUCCESS' ? 'green' : 'red',  
59 - },  
60 - () => (text?.status === 'SUCCESS' ? '成功' : '失败')  
61 - );  
62 - }, 62 + dataIndex: 'response111',
  63 + slots: { customRender: 'responseContent' },
63 }, 64 },
64 { 65 {
65 title: '响应失败内容', 66 title: '响应失败内容',
@@ -4,6 +4,13 @@ @@ -4,6 +4,13 @@
4 <template #recordContent="{ record }"> 4 <template #recordContent="{ record }">
5 <a-button type="link" class="ml-2" @click="handleRecordContent(record)"> 查看 </a-button> 5 <a-button type="link" class="ml-2" @click="handleRecordContent(record)"> 查看 </a-button>
6 </template> 6 </template>
  7 + <template #responseContent="{ record }">
  8 + <Tag
  9 + v-if="!record.request?.oneway"
  10 + :color="record.request?.response?.status === 'SUCCESS' ? 'green' : 'red'"
  11 + >{{ record.request?.response?.status === 'SUCCESS' ? '成功' : '失败' }}</Tag
  12 + >
  13 + </template>
7 </BasicTable> 14 </BasicTable>
8 </div> 15 </div>
9 </template> 16 </template>
@@ -12,7 +19,7 @@ @@ -12,7 +19,7 @@
12 import { configColumns } from './config'; 19 import { configColumns } from './config';
13 import { deviceCommandRecordGetQuery } from '/@/api/device/deviceConfigApi'; 20 import { deviceCommandRecordGetQuery } from '/@/api/device/deviceConfigApi';
14 import { BasicTable, useTable } from '/@/components/Table'; 21 import { BasicTable, useTable } from '/@/components/Table';
15 - import { Modal } from 'ant-design-vue'; 22 + import { Modal, Tag } from 'ant-design-vue';
16 import { JsonPreview } from '/@/components/CodeEditor'; 23 import { JsonPreview } from '/@/components/CodeEditor';
17 24
18 const props = defineProps({ 25 const props = defineProps({
@@ -42,6 +49,9 @@ @@ -42,6 +49,9 @@
42 }); 49 });
43 }; 50 };
44 const handleRecordContent = (record) => { 51 const handleRecordContent = (record) => {
45 - commonModalInfo('命令下发内容', JSON.parse(record?.request?.body?.params)); 52 + if (!record?.request?.body?.params) return;
  53 + //如果是正常格式则返回params,否则输入什么内容则显示什么内容
  54 + const jsonParams = JSON.parse(record?.request?.body?.params);
  55 + commonModalInfo('命令下发内容', jsonParams?.params ? jsonParams?.params : jsonParams);
46 }; 56 };
47 </script> 57 </script>