| | |
| | | import { deptTreeSelect, userListNoPageByTenantId } from "@/api/system/user.js"; |
| | | import { listVehiclePage } from "@/api/officeProcessAutomation/vehicle.js"; |
| | | |
| | | /** 下拉选项来源(写入 formConfig,提交页按来源拉取数据) */ |
| | | export const SELECT_OPTION_SOURCE = { |
| | | STATIC: "static", |
| | | USER: "user", |
| | | DEPT: "dept", |
| | | VEHICLE: "vehicle", |
| | | }; |
| | | |
| | | export const SELECT_OPTION_SOURCE_OPTIONS = [ |
| | | { value: SELECT_OPTION_SOURCE.STATIC, label: "手动配置", desc: "在模板中自定义选项文本与值" }, |
| | | { value: SELECT_OPTION_SOURCE.USER, label: "人员列表", desc: "从系统用户中选择,值为用户 ID" }, |
| | | { value: SELECT_OPTION_SOURCE.DEPT, label: "部门列表", desc: "从组织架构中选择,值为部门 ID" }, |
| | | { value: SELECT_OPTION_SOURCE.VEHICLE, label: "车辆列表", desc: "从车辆管理中选择,值为车牌号" }, |
| | | ]; |
| | | |
| | | export function selectOptionSourceLabel(source) { |
| | |
| | | } |
| | | |
| | | export function isDynamicOptionSource(source) { |
| | | return source === SELECT_OPTION_SOURCE.USER || source === SELECT_OPTION_SOURCE.DEPT; |
| | | return source === SELECT_OPTION_SOURCE.USER || source === SELECT_OPTION_SOURCE.DEPT || source === SELECT_OPTION_SOURCE.VEHICLE; |
| | | } |
| | | |
| | | function unwrapArray(payload) { |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 车辆 → 下拉 option */ |
| | | export function mapVehicleToSelectOption(v) { |
| | | return { |
| | | label: v.plateNumber || `车辆${v.id}`, |
| | | value: v.plateNumber || String(v.id), |
| | | }; |
| | | } |
| | | |
| | | /** 按字段配置解析下拉 options(需传入已加载的缓存) */ |
| | | export function resolveFieldSelectOptions(field, caches = {}) { |
| | | const source = field?.optionSource || SELECT_OPTION_SOURCE.STATIC; |
| | |
| | | } |
| | | if (source === SELECT_OPTION_SOURCE.DEPT) { |
| | | return caches.deptOptions || []; |
| | | } |
| | | if (source === SELECT_OPTION_SOURCE.VEHICLE) { |
| | | return (caches.vehicles || []).map(mapVehicleToSelectOption); |
| | | } |
| | | return (field?.options || []).filter((o) => o.value !== "" && o.value != null); |
| | | } |
| | |
| | | return hit?.label || String(val); |
| | | } |
| | | |
| | | /** 加载人员 / 部门缓存(多处复用) */ |
| | | /** 加载人员 / 部门 / 车辆缓存(多处复用) */ |
| | | export async function fetchSelectOptionCaches(sources = []) { |
| | | const needUser = sources.includes(SELECT_OPTION_SOURCE.USER); |
| | | const needDept = sources.includes(SELECT_OPTION_SOURCE.DEPT); |
| | | const caches = { users: [], deptOptions: [] }; |
| | | const needVehicle = sources.includes(SELECT_OPTION_SOURCE.VEHICLE); |
| | | const caches = { users: [], deptOptions: [], vehicles: [] }; |
| | | |
| | | if (!needUser && !needDept) return caches; |
| | | if (!needUser && !needDept && !needVehicle) return caches; |
| | | |
| | | const tasks = []; |
| | | if (needUser) { |
| | |
| | | }) |
| | | ); |
| | | } |
| | | if (needVehicle) { |
| | | tasks.push( |
| | | listVehiclePage({ current: 1, size: 1000 }) |
| | | .then((res) => { |
| | | // 车辆接口返回格式: { data: { records: [...], total: ... } } |
| | | const records = res?.data?.records; |
| | | caches.vehicles = Array.isArray(records) ? records : []; |
| | | }) |
| | | .catch(() => { |
| | | caches.vehicles = []; |
| | | }) |
| | | ); |
| | | } |
| | | |
| | | await Promise.all(tasks); |
| | | return caches; |