feat: 所有表单的部门/负责人改为下拉框(自动读取组织+用户数据)
- KPI详情: 负责部门+负责人 el-input→el-select filterable - KPI字典: 新建/编辑/模板实例化 三处同步修改 - 改善行动: 负责人筛选+表单 从userApi.list加载 - 预警中心: 指派人+负责人 从userApi.list加载 - api/index.ts新增orgApi封装
This commit is contained in:
@@ -225,10 +225,10 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责部门"><el-input v-model="form.responsible_dept" /></el-form-item>
|
||||
<el-form-item label="负责部门"><el-select v-model="form.responsible_dept" style="width:100%"><el-option v-for="d in depts" :key="d" :label="d" :value="d" /></el-select></el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责人"><el-input v-model="form.responsible_user" /></el-form-item>
|
||||
<el-form-item label="负责人"><el-select v-model="form.responsible_user" filterable style="width:100%"><el-option v-for="u in users" :key="u" :label="u" :value="u" /></el-select></el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="计算公式"><el-input v-model="form.formula" type="textarea" :rows="2" /></el-form-item>
|
||||
@@ -335,10 +335,10 @@
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责部门"><el-input v-model="instantiateForm.responsible_dept" /></el-form-item>
|
||||
<el-form-item label="负责部门"><el-select v-model="instantiateForm.responsible_dept" style="width:100%"><el-option v-for="d in depts" :key="d" :label="d" :value="d" /></el-select></el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责人"><el-input v-model="instantiateForm.responsible_user" /></el-form-item>
|
||||
<el-form-item label="负责人"><el-select v-model="instantiateForm.responsible_user" filterable style="width:100%"><el-option v-for="u in users" :key="u" :label="u" :value="u" /></el-select></el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
@@ -356,7 +356,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted, computed } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { kpiApi, templateApi, dashboardApi, entityApi } from '../api/index'
|
||||
import { kpiApi, templateApi, dashboardApi, entityApi, userApi, orgApi } from '../api/index'
|
||||
import MyDialog from '../components/MyDialog.vue'
|
||||
|
||||
// ── 数据 ──
|
||||
@@ -387,6 +387,31 @@ const treeFilterCats = ref<string[]>([])
|
||||
// ── 多选 ──
|
||||
const selectedIds = ref<number[]>([])
|
||||
|
||||
// ── 部门/用户选项 ──
|
||||
const depts = ref<string[]>([])
|
||||
const users = ref<string[]>([])
|
||||
|
||||
async function loadDepts() {
|
||||
try {
|
||||
const r: any = await orgApi.nodes()
|
||||
const raw: any[] = r.data || r || []
|
||||
const names = raw.map((n: any) => n.name).filter(Boolean)
|
||||
depts.value = [...new Set<string>(names)]
|
||||
} catch (e) {
|
||||
console.error('加载部门列表失败', e)
|
||||
}
|
||||
}
|
||||
|
||||
async function loadUsers() {
|
||||
try {
|
||||
const r: any = await userApi.list()
|
||||
const raw: any[] = r.data || r || []
|
||||
users.value = raw.map((u: any) => u.name).filter(Boolean)
|
||||
} catch (e) {
|
||||
console.error('加载用户列表失败', e)
|
||||
}
|
||||
}
|
||||
|
||||
// ── 新建/编辑表单 ──
|
||||
const showForm = ref(false)
|
||||
const editMode = ref(false)
|
||||
@@ -689,6 +714,8 @@ onMounted(() => {
|
||||
loadEntities()
|
||||
loadCategories()
|
||||
loadKpis()
|
||||
loadDepts()
|
||||
loadUsers()
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user