DeviceStep2.vue 3.37 KB
<template>
  <div class="step2">
    <div><input type="checkbox" v-model="isCreaentials" @click="checked" /> 添加凭证 </div>

    <a-form :label-col="labelCol" :wrapper-col="wrapperCol" v-if="isCreaentials">
      <a-form-item label="凭据类型">
        <a-select
          v-model:value="creaentialsType"
          style="width: 200px"
          @change="handleChange"
          placeholder="请选择凭据类型"
          :options="options"
        />
      </a-form-item>
      <div v-if="creaentialsType === 'Access token'">
        <a-form-item label="访问令牌">
          <a-input type="input" style="width: 200px" v-model:value="token" />
        </a-form-item>
      </div>
      <div v-else-if="creaentialsType === 'X.509'">
        <a-form-item label="RSA公钥">
          <a-input type="input" style="width: 200px" v-model:value="publicKey" />
        </a-form-item>
      </div>
      <div v-else>
        <a-form-item label="客户端ID">
          <a-input type="input" style="width: 200px" v-model:value="clientId" />
        </a-form-item>
        <a-form-item label="用户名">
          <a-input type="input" style="width: 200px" v-model:value="username" />
        </a-form-item>
        <a-form-item label="密码">
          <a-input type="password" style="width: 200px" v-model:value="password" />
        </a-form-item>
      </div>
    </a-form>

    <div class="flex justify-start">
      <a-button class="mr-5" @click="prevStep">上一步</a-button>
    </div>
  </div>
</template>
<script lang="ts">
  import { defineComponent, reactive, ref, toRefs } from 'vue';

  import { Input, Form, Select, Button, SelectProps } from 'ant-design-vue';
  export default defineComponent({
    components: {
      [Form.name]: Form,
      [Form.Item.name]: Form.Item,
      [Input.name]: Input,
      [Select.name]: Select,
      [Button.name]: Button,
    },
    emits: ['prev'],
    setup(_, { emit }) {
      const isCreaentials = ref(false);
      const creaentialsType = ref('Access token');
      const creaentialsPassword = reactive({
        token: '',
        publicKey: '',
        clientId: '',
        username: '',
        password: '',
      });
      const options = ref<SelectProps['options']>([
        {
          value: 'Access token',
          label: 'Access token',
        },

        {
          value: 'X.509',
          label: 'X.509',
        },
        {
          value: 'MQTT Basic',
          label: 'MQTT Basic',
        },
      ]);
      const checked = () => {
        isCreaentials.value = !isCreaentials.value;
      };
      const prevStep = () => {
        emit('prev');
      };
      // 切换凭证类型时,重置字段
      const handleChange = (value) => {
        if (value === 'Access token') {
          creaentialsPassword.token = '';
        } else if (value === 'X.509') {
          creaentialsPassword.publicKey = '';
        } else {
          creaentialsPassword.clientId = '';
          creaentialsPassword.username = '';
          creaentialsPassword.password = '';
        }
      };
      return {
        ...toRefs(creaentialsPassword),
        creaentialsType,
        isCreaentials,
        options,
        handleChange,
        prevStep,
        checked,
        labelCol: { style: { width: '150px' } },
        wrapperCol: { span: 18 },
      };
    },
  });
</script>
<style lang="less" scoped>
  .step2 {
    width: 500px;
    margin: 0 auto;
  }
</style>