Newer
Older
sensorHubPlusFront / src / views / basic / group / addSubscribeDialog.vue
liyaguang 8 days ago 5 KB 页面搭建
<!--
  Description: 新增/编辑订阅管理
  Author: 李亚光
  Date: 2025-05-27
 -->
<script name="addSubscribeDialog" lang="ts" setup>
const $emits = defineEmits(['closeRefresh'])
import { addSubscribe, editSubscribe } from '@/api/basic/subscribe'
import { getDictByCode } from '@/api/system/dict'
import { ElMessage } from 'element-plus'
const $route = useRoute()
// 对话框类型:create,update
const dialogStatus = ref('create')
const dialogVisible = ref(false)
const ruleFormRef = ref()
// 显示标题
const textMap: { [key: string]: string } = {
  update: '编辑',
  create: '新增',
}
const subscribeInfo = ref({
  id: '',
  groupId: '',
  messageType: '',
  subscribeType: '',
})
const subscribeInfoRules = ref({
  messageType: [{ required: true, message: '消息类型不能为空', trigger: 'blur' }],
  subscribeType: [{ required: true, message: '订阅类型不能为空', trigger: 'blur' }],
}) // 表单验证规则

// ----------初始化、关闭对话框相关-----------------
function initDialog(dialogstatus: string, row: any) {
  dialogStatus.value = dialogstatus
  dialogVisible.value = true
  if (dialogstatus === 'create') {
    subscribeInfo.value = {
      id: '',
      groupId: '',
      messageType: '',
      subscribeType: '',
    }
    nextTick(() => {
      ruleFormRef.value?.clearValidate()
    })
  }
  else {
    subscribeInfo.value = row
  }
}
defineExpose({ initDialog })
const messageTypeLoading = ref(false)
const subscribeTypeLoading = ref(false)
const messageTypeList = ref<{ id: string, name: string, value: string }[]>([])
const subscribeTypeList = ref<{ id: string, name: string, value: string }[]>([])
// 获取字典
const fetchDict = () => {
  // 消息类型
  messageTypeLoading.value = true
  getDictByCode('messageType').then(res => {
    messageTypeList.value = res.data
    messageTypeLoading.value = false
  }).catch(() => {
    messageTypeLoading.value = false
  })
  // 订阅方式
  subscribeTypeLoading.value = true
  getDictByCode('subscribeType').then(res => {
    subscribeTypeList.value = res.data
    subscribeTypeLoading.value = false
  }).catch(() => {
    subscribeTypeLoading.value = false
  })

}
fetchDict()

const btnLoading = ref(false)
const saveForm = () => {
  console.log($route.query.id, '$route.query.id')
  ruleFormRef.value?.validate((valid: boolean) => {
    if (valid) {
      btnLoading.value = true;
      (dialogStatus.value === 'create' ? addSubscribe : editSubscribe)({...subscribeInfo.value,groupId: $route.query.id}).then(res => {
        ElMessage.success(`${dialogStatus.value === 'create' ? '添加' : '修改'}成功`)
        dialogVisible.value = false
        $emits('closeRefresh')
        btnLoading.value = false
      }).catch(() => {
        btnLoading.value = false
      })
    }
  })
}
const dialogClose = () => {
  dialogVisible.value = false
}
</script>

<template>
  <el-dialog v-model="dialogVisible" :title="`${textMap[dialogStatus]}订阅`" :append-to-body="true"
    :close-on-click-modal="false" width="450px">
    <el-form ref="ruleFormRef" :model="subscribeInfo" :rules="subscribeInfoRules" label-position="right"
      label-width="110px" border stripe>
      <el-row :gutter="24">
        <el-col :span="22">
          <el-form-item label="消息类型" prop="messageType">
            <el-select v-model="subscribeInfo.messageType" placeholder="请选择消息类型" style="width: 100%;"
              :loading="messageTypeLoading">
              <el-option v-for="item in messageTypeList" :key="item.id" :label="item.name" :value="item.value" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24">
        <el-col :span="22">
          <el-form-item label="订阅类型" prop="subscribeType">
            <el-select v-model="subscribeInfo.subscribeType" placeholder="请选择订阅类型" style="width: 100%;"
              :loading="subscribeTypeLoading">
              <el-option v-for="item in subscribeTypeList" :key="item.id" :label="item.name" :value="item.value" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24">
        <el-col :span="22">
          <el-form-item label="订阅方式URL" prop="">
            <el-input v-model="subscribeInfo.groupName" placeholder="请输入URL" clearable style="width: 100%;" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24">
        <el-col :span="22">
          <el-form-item label="消息队列地址" prop="">
            <el-input v-model="subscribeInfo.groupName" placeholder="请输入队列地址" clearable style="width: 100%;" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24">
        <el-col :span="22">
          <el-form-item label="队列名" prop="">
            <el-input v-model="subscribeInfo.groupName" placeholder="请输入队列名" clearable style="width: 100%;" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24">
        <el-col :span="22">
          <el-form-item label="订阅开关" prop="">
            <el-switch v-model="subscribeInfo.value1" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <template #footer>
      <div class="dialog-footer">
        <el-button :loading="btnLoading" :disabled="btnLoading" type="primary" @click="saveForm">
          保存
        </el-button>
        <el-button @click="dialogClose">
          取消
        </el-button>
      </div>
    </template>
  </el-dialog>
</template>