index.vue 3.32 KB
<script lang="ts" setup>
  import { BasicTable, useTable } from '/@/components/Table';
  import { columns, searchFormSchema } from './config';
  import { JsonPreview } from '/@/components/CodeEditor';
  import { Button, Modal, Space } from 'ant-design-vue';
  import { h } from 'vue';
  import { EdgeDeviceItemType } from '/@/api/edgeManage/model/edgeInstance';
  import { deviceCommandRecordGetQuery } from '/@/api/device/deviceConfigApi';
  import { useModal } from '/@/components/Modal';
  import { DataActionModeEnum } from '/@/enums/toolEnum';
  import { CommandDeliveryModal } from './CommandDeliveryModal';
  import { useI18n } from '/@/hooks/web/useI18n';

  const props = defineProps({
    recordData: {
      type: Object as PropType<EdgeDeviceItemType>,
      default: () => {},
    },
  });

  const { t } = useI18n();

  defineEmits(['register']);

  const [registerCommandDeliverModal, { openModal }] = useModal();

  const [registerTable] = useTable({
    columns,
    api: deviceCommandRecordGetQuery,
    beforeFetch: (params) => {
      return {
        ...params,
        tbDeviceId: props?.recordData?.id?.id,
      };
    },
    formConfig: {
      labelWidth: 120,
      schemas: searchFormSchema,
      fieldMapToTime: [['sendTime', ['startTime', 'endTime'], 'x']],
    },
    useSearchForm: true,
    showIndexColumn: false,
    clickToRowSelect: false,
    showTableSetting: true,
    bordered: true,
    rowKey: 'id',
  });

  const commonModalInfo = (title, value) => {
    Modal.info({
      title,
      width: 600,
      content: h(JsonPreview, { data: value }),
    });
  };

  const handleRecordContent = (record) => {
    if (!record?.request?.body) return;
    if (Object.prototype.toString.call(record?.request?.body) !== '[object Object]') return;
    const jsonParams = record?.request?.body?.params;
    commonModalInfo(t('deviceManagement.device.commandContentText'), jsonParams);
  };

  const handleRecordResponseContent = (record) => {
    const jsonParams = record?.response;
    commonModalInfo(t('deviceManagement.device.responseContentText'), jsonParams);
  };

  const handleEventIsCommand = () => {
    openModal(true, {
      mode: DataActionModeEnum.READ,
      record: props.recordData,
    } as ModalParamsType<EdgeDeviceItemType>);
  };
</script>

<template>
  <div>
    <BasicTable :clickToRowSelect="false" @register="registerTable">
      <template #toolbar>
        <Space>
          <Button type="primary" @click="handleEventIsCommand">{{
            t('business.commandDeliveryText')
          }}</Button>
        </Space>
      </template>
      <template #recordContent="{ record }">
        <Button type="link" class="ml-2" @click="handleRecordContent(record)">
          {{ t('common.viewText') }}
        </Button>
      </template>
      <template #responseContent="{ record }">
        <div v-if="!record.request?.oneway">
          <Button v-if="record?.response === null" type="text" class="ml-2">
            {{ t('deviceManagement.device.noResponseText') }}
          </Button>
          <Button v-else type="link" class="ml-2" @click="handleRecordResponseContent(record)">
            {{ t('common.viewText') }}
          </Button>
        </div>
        <div v-else>--</div>
      </template>
    </BasicTable>
    <CommandDeliveryModal @register="registerCommandDeliverModal" :deviceDetail="recordData" />
  </div>
</template>