Commit 3288bccc81b0f23f479d0b8930758d3da479534f

Authored by fengtao
1 parent 00f647d4

feat:pc端 设备新增命令下发和引入json-editor-vue3

... ... @@ -48,6 +48,7 @@
48 48 "echarts": "^5.1.2",
49 49 "hls.js": "^1.0.10",
50 50 "intro.js": "^4.1.0",
  51 + "json-editor-vue3": "^1.0.6",
51 52 "jsoneditor": "^9.7.2",
52 53 "jwt-decode": "^3.1.2",
53 54 "lodash-es": "^4.17.21",
... ...
... ... @@ -655,19 +655,7 @@ export const CommandSchemas: FormSchema[] = [
655 655 {
656 656 field: 'commandValue',
657 657 label: '请输入命令内容',
658   - defaultValue: `{
659   - method: 'setGpio',
660   - params: {
661   - pin: 7,
662   - value: 1
663   - }
664   -}`,
  658 + slot: 'commandSlot',
665 659 component: 'InputTextArea',
666   - componentProps: {
667   - autoSize: {
668   - maxRows: 10,
669   - autoSize: true,
670   - },
671   - },
672 660 },
673 661 ];
... ...
1 1 <template>
2 2 <div class="tabs-detail">
3 3 <div class="mt-4">
4   - <BasicForm @register="registerForm" />
  4 + <BasicForm @register="registerForm">
  5 + <template #commandSlot>
  6 + <JsonEditorVue class="editor" v-model="jsonData" @blur="jsonValidate" />
  7 + </template>
  8 + </BasicForm>
5 9 <div>
6 10 <Button :disabled="disable" type="primary" @click="handleOk" class="mr-2">确定</Button>
7 11 <Button type="default" @click="handleCancel" class="mr-2">重置</Button>
... ... @@ -16,9 +20,10 @@
16 20 import { commandIssuanceApi } from '/@/api/device/deviceManager';
17 21 import { useMessage } from '/@/hooks/web/useMessage';
18 22 import { Button } from '/@/components/Button';
  23 + import JsonEditorVue from 'json-editor-vue3';
19 24
20 25 export default defineComponent({
21   - components: { BasicForm, Button },
  26 + components: { BasicForm, Button, JsonEditorVue },
22 27 props: {
23 28 deviceDetail: {
24 29 type: Object,
... ... @@ -27,14 +32,21 @@
27 32 },
28 33 emits: ['register'],
29 34 setup(props) {
30   - const disable = ref(false);
31   - const commandValueStr = JSON.stringify({
  35 + const { createMessage } = useMessage();
  36 + const jsonData: any = ref({
32 37 method: 'setGpio',
33 38 params: {
34 39 pin: 7,
35 40 value: 1,
36 41 },
37 42 });
  43 + const jsonValidate = async (editor) => {
  44 + const res = await editor.validate();
  45 + // res 是错误列表,如果是空数组,则表示检测没有错误
  46 + console.log(res);
  47 + if (res.length !== 0) return createMessage.error('请填写正确的命令下发json数据格式');
  48 + };
  49 + const disable = ref(false);
38 50 const [registerForm, { getFieldsValue, validate, resetFields }] = useForm({
39 51 labelWidth: 100,
40 52 schemas: CommandSchemas,
... ... @@ -50,18 +62,16 @@
50 62 };
51 63 const handleOk = async () => {
52 64 disable.value = true;
53   - const { createMessage } = useMessage();
54 65 // 验证
55 66 const valid = await validate();
56 67 if (!valid) return;
57 68 // 收集表单数据
58 69 const field = getFieldsValue();
59   - const commandValue = JSON.parse(commandValueStr);
60   - commandValue.persistent = true;
61   - commandValue.additionalInfo = {
  70 + jsonData.value.persistent = true;
  71 + jsonData.value.additionalInfo = {
62 72 cmdType: 'API',
63 73 };
64   - commandIssuanceApi(field.commandType, props.deviceDetail.tbDeviceId, commandValue)
  74 + commandIssuanceApi(field.commandType, props.deviceDetail.tbDeviceId, jsonData.value)
65 75 .then((res) => {
66 76 if (!res) return;
67 77 createMessage.success('命令下发成功');
... ... @@ -85,6 +95,8 @@
85 95 handleCancel,
86 96 handleOk,
87 97 disable,
  98 + jsonData,
  99 + jsonValidate,
88 100 };
89 101 },
90 102 });
... ...