TBoxDetail.vue 4.5 KB
<template>
  <div>
    <BasicTable @register="registerTable" :dataSource="tableData" style="height: 12rem">
      <template #status>
        <Switch v-model:checked="checked" @change="handleChange" :disabled="enableRemoteDisabled" />
      </template>
    </BasicTable>
    <div style="margin-left: 0.44rem">
      <a-button
        v-if="isAdmin !== 'CUSTOMER_USER'"
        type="primary"
        class="mr-4"
        :disabled="disabled"
        @click="handleFrpRemote"
      >
        {{ t('deviceManagement.device.remoteConnectionText') }}
      </a-button>
    </div>
  </div>
</template>

<script setup lang="ts">
  import { ref, nextTick, computed } from 'vue';
  import { BasicTable, useTable, BasicColumn } from '/@/components/Table';
  import { Switch } from 'ant-design-vue';
  import { h } from 'vue';
  import { Tag } from 'ant-design-vue';
  import { frpGetInfoApi, frpPutInfoApi } from '/@/api/device/deviceConfigApi';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { USER_INFO_KEY } from '/@/enums/cacheEnum';
  import { getAuthCache } from '/@/utils/auth';
  import { useI18n } from '/@/hooks/web/useI18n';
  const { t } = useI18n();

  const props = defineProps({
    deviceDetail: {
      type: Object,
      required: true,
    },
  });

  const userInfo = getAuthCache(USER_INFO_KEY) as unknown as any;

  const isAdmin = computed(() => {
    if (userInfo.roles.includes('TENANT_ADMIN')) {
      return 'TENANT_ADMIN';
    } else if (userInfo.roles.includes('CUSTOMER_USER')) {
      return 'CUSTOMER_USER';
    } else {
      return 'SYS_ADMIN';
    }
  });

  const { createMessage } = useMessage();
  const tableData: any = ref([]);
  const checked = ref<boolean>(false);
  const disabled = ref<boolean>(true);
  const viewDeviceColumn: BasicColumn[] = [
    {
      title: t('deviceManagement.device.remoteConnectionStatusText'),
      dataIndex: 'status',
      width: 80,
      customRender: ({ record }) => {
        const status = record.status;
        const color = status == 1 ? 'green' : 'red';
        const text = status == 1 ? t('enum.deviceStatus.ONLINE') : t('enum.deviceStatus.OFFLINE');
        return h(Tag, { color }, () => text);
      },
    },
    {
      title: t('deviceManagement.device.allowRemoteConnectionText'),
      dataIndex: 'enableRemote',
      width: 80,
      slots: { customRender: 'status' },
    },
    {
      title: t('deviceManagement.device.deviceSnCodeText'),
      dataIndex: 'proxyName',
      width: 120,
    },
  ];
  const [registerTable] = useTable({
    title: t('deviceManagement.device.tBoxInfoText'),
    columns: viewDeviceColumn,
    showIndexColumn: false,
    clickToRowSelect: false,
    showTableSetting: false,
    bordered: true,
  });
  const enableRemote = ref(0);
  const proxyName = ref('');
  const remotePort = ref(0);
  const address = ref('');
  const enableRemoteDisabled = ref(false);
  const getTableData = async () => {
    const res = await frpGetInfoApi(props.deviceDetail.sn);
    enableRemote.value = res.enableRemote;
    proxyName.value = res.proxyName;
    remotePort.value = res.remotePort;
    address.value = res.address;
    if (res.enableRemote == 1) {
      checked.value = true;
      disabled.value = false;
      enableRemoteDisabled.value = true;
    } else {
      checked.value = false;
      disabled.value = true;
      enableRemoteDisabled.value = false;
    }
    if (res.status == 0) {
      enableRemoteDisabled.value = true;
    } else {
      enableRemoteDisabled.value = false;
    }
    tableData.value.push({
      enableRemote: res.enableRemote,
      proxyName: res.proxyName || props.deviceDetail.sn,
      status: res.status,
    });
    if (res == '') {
      enableRemoteDisabled.value = true;
      disabled.value = true;
    }
  };
  const handleFrpRemote = async () => {
    window.open(`${address.value}`);
  };
  nextTick(() => {
    getTableData();
  });
  const handleChange = async (e) => {
    if (e) {
      disabled.value = false;
      enableRemote.value = 1;
      const res = await frpPutInfoApi(proxyName.value, enableRemote.value);
      if (res.enableRemote == 1) {
        createMessage.success(t('deviceManagement.device.turnOnSuccessText'));
        checked.value = true;
      }
    } else {
      disabled.value = true;
      enableRemote.value = 0;
      const res = await frpPutInfoApi(proxyName.value, enableRemote.value);
      if (res.enableRemote == 0) {
        createMessage.success(t('deviceManagement.device.turnOffSuccessText'));
        checked.value = false;
      }
    }
  };
</script>
<style lang="less" scoped></style>