fix: 修复供应商授权弹窗选择类型后无选项问题

- 根据选择的类型动态加载分类或商品列表
- 使用下拉选择框替代手动输入ID
- 支持搜索过滤(filterable)
- 添加加载状态提示

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-02 20:27:13 +08:00
parent d69b1444ff
commit ac6119a0ba
+55 -6
View File
@@ -36,16 +36,28 @@
<el-button type="primary" @click="addSupplier">保存</el-button>
</template>
</el-dialog>
<el-dialog v-model="showAuth" title="授权管理" width="400px">
<el-dialog v-model="showAuth" title="授权管理" width="500px">
<el-form :model="authForm" label-width="80px">
<el-form-item label="类型">
<el-select v-model="authForm.type" popper-class="dark-select-dropdown"><el-option value="category" label="分类" /><el-option value="product" label="商品" /></el-select>
<el-select v-model="authForm.type" @change="handleTypeChange" placeholder="选择类型">
<el-option value="category" label="分类" />
<el-option value="product" label="商品" />
</el-select>
</el-form-item>
<el-form-item label="关联项">
<el-select v-model="authForm.ref_id" filterable placeholder="请选择" :loading="loadingOptions">
<el-option
v-for="item in optionsList"
:key="item.id"
:value="item.id"
:label="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="关联ID"><el-input-number v-model="authForm.ref_id" /></el-form-item>
</el-form>
<template #footer>
<el-button @click="showAuth = false">取消</el-button>
<el-button type="primary" @click="saveAuth">保存</el-button>
<el-button type="primary" @click="saveAuth" :disabled="!authForm.ref_id">保存</el-button>
</template>
</el-dialog>
</div>
@@ -54,7 +66,7 @@
<script setup lang="ts">
import { ref, reactive, computed, onMounted } from 'vue'
import { ElMessage } from 'element-plus'
import { adminApi } from '../../api'
import { adminApi, categoryApi, productApi } from '../../api'
const suppliers = ref<any[]>([])
const showAdd = ref(false)
@@ -69,6 +81,8 @@ const paginatedSuppliers = computed(() => {
})
const form = reactive({ username: '', email: '', password: '' })
const authForm = reactive({ type: 'category', ref_id: 0 })
const optionsList = ref<{ id: number; name: string }[]>([])
const loadingOptions = ref(false)
function handlePageChange() {
window.scrollTo({ top: 0, behavior: 'smooth' })
@@ -86,12 +100,47 @@ async function addSupplier() {
await fetchSuppliers()
}
function authorize(id: number) {
async function authorize(id: number) {
authSupplierId.value = id
authForm.type = 'category'
authForm.ref_id = 0
await loadOptions()
showAuth.value = true
}
async function handleTypeChange() {
authForm.ref_id = 0
await loadOptions()
}
async function loadOptions() {
loadingOptions.value = true
try {
if (authForm.type === 'category') {
const res: any = await categoryApi.list()
optionsList.value = (res.data || []).map((item: any) => ({
id: item.id,
name: item.name
}))
} else {
const res: any = await productApi.list()
optionsList.value = (res.data || []).map((item: any) => ({
id: item.id,
name: item.name
}))
}
} catch {
optionsList.value = []
} finally {
loadingOptions.value = false
}
}
async function saveAuth() {
if (!authForm.ref_id) {
ElMessage.warning('请选择关联项')
return
}
await adminApi.authorizeSupplier(authSupplierId.value, authForm)
ElMessage.success('授权成功')
showAuth.value = false