feat: 企微应用租户下拉选择 + corp_id 自动填入
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
- 租户表增加 corp_id 字段(企业微信企业ID) - 租户管理页面支持配置 corp_id - 企微应用页面租户从下拉选择 - 选择租户后自动填入 corp_id 并禁用编辑 - 提示用户如租户未配置 corp_id 需先去配置
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ref, reactive, onMounted, watch, computed } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import api from '@/api'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
@@ -15,6 +15,9 @@ const query = reactive({
|
||||
tenant_id: ''
|
||||
})
|
||||
|
||||
// 租户列表(用于下拉选择)
|
||||
const tenantList = ref([])
|
||||
|
||||
// 对话框
|
||||
const dialogVisible = ref(false)
|
||||
const dialogTitle = ref('')
|
||||
@@ -28,13 +31,37 @@ const form = reactive({
|
||||
secret: ''
|
||||
})
|
||||
|
||||
// 根据选中的租户获取 corp_id
|
||||
const selectedTenant = computed(() => {
|
||||
return tenantList.value.find(t => t.code === form.tenant_id)
|
||||
})
|
||||
|
||||
// 监听租户选择变化,自动填入 corp_id
|
||||
watch(() => form.tenant_id, (newVal) => {
|
||||
if (newVal && !editingId.value) {
|
||||
const tenant = tenantList.value.find(t => t.code === newVal)
|
||||
if (tenant) {
|
||||
form.corp_id = tenant.corp_id || ''
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const rules = {
|
||||
tenant_id: [{ required: true, message: '请输入租户ID', trigger: 'blur' }],
|
||||
tenant_id: [{ required: true, message: '请选择租户', trigger: 'change' }],
|
||||
name: [{ required: true, message: '请输入应用名称', trigger: 'blur' }],
|
||||
corp_id: [{ required: true, message: '请输入企业ID', trigger: 'blur' }],
|
||||
agent_id: [{ required: true, message: '请输入应用ID', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
// 获取租户列表
|
||||
async function fetchTenants() {
|
||||
try {
|
||||
const res = await api.get('/api/tenants', { params: { size: 1000 } })
|
||||
tenantList.value = res.data.items || []
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchList() {
|
||||
loading.value = true
|
||||
try {
|
||||
@@ -68,6 +95,13 @@ function handleCreate() {
|
||||
agent_id: '',
|
||||
secret: ''
|
||||
})
|
||||
// 如果已选择租户,自动填入 corp_id
|
||||
if (form.tenant_id) {
|
||||
const tenant = tenantList.value.find(t => t.code === form.tenant_id)
|
||||
if (tenant) {
|
||||
form.corp_id = tenant.corp_id || ''
|
||||
}
|
||||
}
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
@@ -138,6 +172,7 @@ async function handleViewSecret(row) {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
fetchTenants()
|
||||
fetchList()
|
||||
})
|
||||
</script>
|
||||
@@ -208,14 +243,34 @@ onMounted(() => {
|
||||
<!-- 编辑对话框 -->
|
||||
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="500px">
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="租户ID" prop="tenant_id">
|
||||
<el-input v-model="form.tenant_id" :disabled="!!editingId" placeholder="如: qiqi" />
|
||||
<el-form-item label="租户" prop="tenant_id">
|
||||
<el-select
|
||||
v-model="form.tenant_id"
|
||||
:disabled="!!editingId"
|
||||
placeholder="请选择租户"
|
||||
filterable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="tenant in tenantList"
|
||||
:key="tenant.code"
|
||||
:label="`${tenant.name} (${tenant.code})`"
|
||||
:value="tenant.code"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="应用名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="如: 工具集企微应用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="企业ID" prop="corp_id">
|
||||
<el-input v-model="form.corp_id" placeholder="ww开头的企业ID" />
|
||||
<el-form-item label="企业ID">
|
||||
<el-input
|
||||
v-model="form.corp_id"
|
||||
disabled
|
||||
:placeholder="selectedTenant?.corp_id ? '' : '请先在租户管理中配置企业ID'"
|
||||
/>
|
||||
<div v-if="form.tenant_id && !selectedTenant?.corp_id" class="el-form-item__error" style="position: static;">
|
||||
该租户未配置企业ID,请先到租户管理中配置
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="应用ID" prop="agent_id">
|
||||
<el-input v-model="form.agent_id" placeholder="自建应用的 AgentId" />
|
||||
|
||||
@@ -26,6 +26,7 @@ const formRef = ref(null)
|
||||
const form = reactive({
|
||||
code: '',
|
||||
name: '',
|
||||
corp_id: '',
|
||||
status: 'active',
|
||||
expired_at: null,
|
||||
contact_info: {
|
||||
@@ -69,6 +70,7 @@ function handleCreate() {
|
||||
Object.assign(form, {
|
||||
code: '',
|
||||
name: '',
|
||||
corp_id: '',
|
||||
status: 'active',
|
||||
expired_at: null,
|
||||
contact_info: { contact: '', phone: '', email: '' }
|
||||
@@ -82,6 +84,7 @@ function handleEdit(row) {
|
||||
Object.assign(form, {
|
||||
code: row.code,
|
||||
name: row.name,
|
||||
corp_id: row.corp_id || '',
|
||||
status: row.status,
|
||||
expired_at: row.expired_at,
|
||||
contact_info: row.contact_info || { contact: '', phone: '', email: '' }
|
||||
@@ -172,6 +175,7 @@ onMounted(() => {
|
||||
<el-table-column prop="id" label="ID" width="80" />
|
||||
<el-table-column prop="code" label="代码" width="120" />
|
||||
<el-table-column prop="name" label="名称" min-width="150" />
|
||||
<el-table-column prop="corp_id" label="企业ID" width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="status" label="状态" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="getStatusType(row.status)" size="small">
|
||||
@@ -210,6 +214,9 @@ onMounted(() => {
|
||||
<el-form-item label="租户名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="公司/组织名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="企业ID">
|
||||
<el-input v-model="form.corp_id" placeholder="企业微信企业ID,ww开头" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="form.status" style="width: 100%">
|
||||
<el-option label="活跃" value="active" />
|
||||
|
||||
Reference in New Issue
Block a user