Переглянути джерело

fix(s0): use priority code data for order priority page

YY968XX 1 день тому
батько
коміт
e790fe62b2
2 змінених файлів з 176 додано та 307 видалено
  1. 1 1
      Web/package.json
  2. 175 306
      Web/src/views/aidop/s0/sales/OrderPriorityRuleList.vue

+ 1 - 1
Web/package.json

@@ -1,7 +1,7 @@
 {
 	"name": "admin.net",
 	"type": "module",
-	"version": "2.4.179",
+	"version": "2.4.180",
 	"packageManager": "pnpm@10.32.1",
 	"lastBuildTime": "2026.03.15",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",

+ 175 - 306
Web/src/views/aidop/s0/sales/OrderPriorityRuleList.vue

@@ -3,10 +3,10 @@
 		<!-- ── 查询栏 ── -->
 		<el-form :inline="true" :model="query" class="mb12" @submit.prevent>
 			<el-form-item label="关键字">
-				<el-input v-model="query.keyword" placeholder="规则名称/编码" clearable style="width: 180px" />
+				<el-input v-model="query.keyword" placeholder="名称/来源表/工单字段" clearable style="width: 200px" />
 			</el-form-item>
-			<el-form-item label="生效">
-				<el-select v-model="query.isEnabled" clearable placeholder="全部" style="width: 100px">
+			<el-form-item label="是否生效">
+				<el-select v-model="query.isActive" clearable placeholder="全部" style="width: 100px">
 					<el-option label="是" :value="true" />
 					<el-option label="否" :value="false" />
 				</el-select>
@@ -14,36 +14,41 @@
 			<el-form-item>
 				<el-button type="primary" @click="loadList">查询</el-button>
 				<el-button @click="resetQuery">重置</el-button>
-				<el-button type="success" @click="openCreate">新增规则</el-button>
-				<el-button @click="configDialogVisible = true">配置维护</el-button>
+				<el-button type="success" @click="openCreate">新增配置</el-button>
 			</el-form-item>
 		</el-form>
 
 		<!-- ── 主列表 ── -->
 		<el-table :data="rows" v-loading="loading" border stripe style="width: 100%" max-height="calc(100vh - 260px)">
-			<el-table-column prop="name" label="规则名称" min-width="160" show-overflow-tooltip />
-			<el-table-column label="客户类型" width="120" show-overflow-tooltip>
-				<template #default="{ row }">{{ row.customerTypeLabel || '—' }}</template>
+			<el-table-column prop="descr" label="名称" min-width="150" show-overflow-tooltip>
+				<template #default="{ row }">{{ row.descr || '—' }}</template>
 			</el-table-column>
-			<el-table-column label="订单类型" width="120" show-overflow-tooltip>
-				<template #default="{ row }">{{ row.orderTypeLabel || '—' }}</template>
+			<el-table-column prop="value" label="工单字段" width="130" show-overflow-tooltip>
+				<template #default="{ row }">{{ row.value || '—' }}</template>
 			</el-table-column>
-			<el-table-column label="交期条件" width="100" show-overflow-tooltip>
-				<template #default="{ row }">{{ row.dueStatusLabel || '—' }}</template>
+			<el-table-column prop="priority" label="优先级" width="80" align="center" />
+			<el-table-column prop="sourceTable" label="来源表" width="140" show-overflow-tooltip>
+				<template #default="{ row }">{{ row.sourceTable || '—' }}</template>
+			</el-table-column>
+			<el-table-column prop="sourceColumn" label="来源字段" width="130" show-overflow-tooltip>
+				<template #default="{ row }">{{ row.sourceColumn || '—' }}</template>
+			</el-table-column>
+			<el-table-column label="排序" width="80" align="center">
+				<template #default="{ row }">{{ orderByDisplay(row) }}</template>
 			</el-table-column>
-			<el-table-column prop="priorityLevel" label="优先级" width="80" align="center" />
-			<el-table-column prop="sortDirection" label="排序方向" width="88" align="center" />
 			<el-table-column label="是否生效" width="88" align="center">
 				<template #default="{ row }">
-					<el-tag :type="row.isEnabled ? 'success' : 'info'" size="small">{{ row.isEnabled ? '是' : '否' }}</el-tag>
+					<el-tag :type="row.isActive ? 'success' : 'info'" size="small">{{ row.isActive ? '是' : '否' }}</el-tag>
 				</template>
 			</el-table-column>
-			<el-table-column prop="remark" label="备注" min-width="140" show-overflow-tooltip />
+			<el-table-column prop="domainCode" label="工厂域" width="100" show-overflow-tooltip>
+				<template #default="{ row }">{{ row.domainCode || '—' }}</template>
+			</el-table-column>
 			<el-table-column label="操作" width="200" fixed="right" align="center">
 				<template #default="{ row }">
 					<el-button link type="primary" @click="openEdit(row)">编辑</el-button>
-					<el-button link :type="row.isEnabled ? 'warning' : 'success'" @click="toggleEnabled(row)">
-						{{ row.isEnabled ? '停用' : '生效' }}
+					<el-button link :type="row.isActive ? 'warning' : 'success'" @click="toggleActive(row)">
+						{{ row.isActive ? '停用' : '生效' }}
 					</el-button>
 					<el-button link type="danger" @click="onDelete(row)">删除</el-button>
 				</template>
@@ -62,177 +67,99 @@
 			/>
 		</div>
 
-		<!-- ── 新增/编辑规则弹窗 ── -->
+		<!-- ── 新增/编辑配置弹窗 ── -->
 		<el-dialog
-			v-model="ruleDialogVisible"
-			:title="ruleDialogTitle"
-			width="680px"
+			v-model="formDialogVisible"
+			:title="formDialogTitle"
+			width="720px"
 			destroy-on-close
-			@closed="resetRuleForm"
+			@closed="resetForm"
 		>
-			<el-form ref="ruleFormRef" :model="ruleForm" :rules="ruleFormRules" label-width="110px">
+			<el-form ref="formRef" :model="form" :rules="formRules" label-width="110px">
 				<el-row :gutter="16">
 					<el-col :span="12">
-						<el-form-item label="规则编码" prop="code">
-							<el-input v-model="ruleForm.code" placeholder="可自动填充或手动输入" />
+						<el-form-item label="名称" prop="descr">
+							<el-input v-model="form.descr" placeholder="优先级配置名称" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="规则名称" prop="name">
-							<el-input v-model="ruleForm.name" />
+						<el-form-item label="工单字段">
+							<el-input v-model="form.value" placeholder="工单表字段(Value)" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="客户类型">
-							<el-select v-model="ruleForm.customerType" clearable placeholder="不限" style="width: 100%">
-								<el-option
-									v-for="opt in dictOptions.customerType"
-									:key="opt.value"
-									:label="opt.label"
-									:value="opt.value"
-								/>
-							</el-select>
+						<el-form-item label="优先级" prop="priority">
+							<el-input-number v-model="form.priority" :min="0" style="width: 100%" controls-position="right" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="订单类型">
-							<el-select v-model="ruleForm.orderType" clearable placeholder="不限" style="width: 100%">
-								<el-option
-									v-for="opt in dictOptions.orderType"
-									:key="opt.value"
-									:label="opt.label"
-									:value="opt.value"
-								/>
+						<el-form-item label="排序方向">
+							<el-select v-model="form.orderBy" clearable placeholder="未设置" style="width: 100%">
+								<el-option label="正序" :value="true" />
+								<el-option label="倒序" :value="false" />
 							</el-select>
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="交期条件">
-							<el-select v-model="ruleForm.dueStatus" clearable placeholder="不限" style="width: 100%">
-								<el-option
-									v-for="opt in dictOptions.dueStatus"
-									:key="opt.value"
-									:label="opt.label"
-									:value="opt.value"
-								/>
-							</el-select>
+						<el-form-item label="来源表">
+							<el-input v-model="form.sourceTable" placeholder="来源表" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="优先级" prop="priorityLevel">
-							<el-input-number v-model="ruleForm.priorityLevel" :min="1" style="width: 100%" controls-position="right" />
+						<el-form-item label="来源字段">
+							<el-input v-model="form.sourceColumn" placeholder="来源表字段" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="排序方向">
-							<el-select v-model="ruleForm.sortDirection" style="width: 100%">
-								<el-option label="升序 ASC" value="asc" />
-								<el-option label="降序 DESC" value="desc" />
-							</el-select>
+						<el-form-item label="来源字段类型">
+							<el-input v-model="form.sourceType" placeholder="来源字段类型" />
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="是否生效">
-							<el-switch v-model="ruleForm.isEnabled" />
+						<el-form-item label="来源关联字段">
+							<el-input v-model="form.sourceId" placeholder="来源表关联字段" />
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="工单字段类型">
+							<el-input v-model="form.valueType" placeholder="工单字段类型" />
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="工单关联字段">
+							<el-input v-model="form.valueId" placeholder="工单表关联字段" />
 						</el-form-item>
 					</el-col>
-					<el-col :span="24">
-						<el-form-item label="备注">
-							<el-input v-model="ruleForm.remark" type="textarea" :rows="2" />
+					<el-col :span="12">
+						<el-form-item label="工厂域">
+							<el-input v-model="form.domainCode" placeholder="工厂域编码(Domain)" />
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="是否生效">
+							<el-switch v-model="form.isActive" />
 						</el-form-item>
 					</el-col>
 				</el-row>
 			</el-form>
 			<template #footer>
-				<el-button @click="ruleDialogVisible = false">取消</el-button>
-				<el-button type="primary" :loading="ruleSaving" @click="submitRuleForm">保存</el-button>
+				<el-button @click="formDialogVisible = false">取消</el-button>
+				<el-button type="primary" :loading="saving" @click="submitForm">保存</el-button>
 			</template>
 		</el-dialog>
-
-		<!-- ── 配置维护弹窗 ── -->
-		<el-dialog
-			v-model="configDialogVisible"
-			title="订单优先级配置维护"
-			width="860px"
-			destroy-on-close
-			@open="loadFieldMapping"
-		>
-			<el-tabs v-model="configActiveTab">
-				<!-- Tab 1: 客户类型 -->
-				<el-tab-pane label="客户类型" name="customerType">
-					<DictDataMaintainPanel
-						dict-code="s0_order_priority_customer_type"
-						@changed="loadDictSelects"
-					/>
-				</el-tab-pane>
-
-				<!-- Tab 2: 订单类型 -->
-				<el-tab-pane label="订单类型" name="orderType">
-					<DictDataMaintainPanel
-						dict-code="s0_order_type"
-						@changed="loadDictSelects"
-					/>
-				</el-tab-pane>
-
-				<!-- Tab 3: 交期规则 -->
-				<el-tab-pane label="交期规则" name="dueStatus">
-					<DictDataMaintainPanel
-						dict-code="s0_due_status"
-						:allow-delete="false"
-						@changed="loadDictSelects"
-					/>
-				</el-tab-pane>
-
-				<!-- Tab 4: 字段映射 -->
-				<el-tab-pane label="字段映射" name="fieldMapping">
-					<div class="field-mapping-panel">
-						<el-alert
-							type="info"
-							:closable="false"
-							title="字段映射来源于现有优先级规则字段配置"
-							description="来源实体、来源字段、工单字段等字段映射信息在各条业务规则中独立维护,请通过「编辑规则」进行调整。"
-						/>
-						<el-table
-							:data="fieldMappingRows"
-							v-loading="fieldMappingLoading"
-							border
-							stripe
-							size="small"
-							style="width: 100%; margin-top: 12px"
-							max-height="320px"
-						>
-							<el-table-column prop="name" label="规则名称" min-width="130" show-overflow-tooltip />
-							<el-table-column prop="sourceEntity" label="来源实体" width="130" show-overflow-tooltip />
-							<el-table-column prop="sourceField" label="来源字段" width="130" show-overflow-tooltip />
-							<el-table-column prop="workOrderField" label="工单字段" width="130" show-overflow-tooltip />
-							<el-table-column prop="workOrderFieldType" label="工单字段类型" width="120" show-overflow-tooltip />
-						</el-table>
-						<div v-if="!fieldMappingLoading && fieldMappingRows.length === 0" class="empty-hint">
-							当前未维护字段映射
-						</div>
-					</div>
-				</el-tab-pane>
-			</el-tabs>
-		</el-dialog>
 	</AidopDemoShell>
 </template>
 
 <script setup lang="ts" name="aidopS0SalesOrderPriorityRule">
-import { computed, onMounted, reactive, ref, watch } from 'vue';
+import { computed, onMounted, reactive, ref } from 'vue';
 import { useRoute } from 'vue-router';
 import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
 import AidopDemoShell from '../../components/AidopDemoShell.vue';
 import {
-	s0PriorityRulesApi,
-	type S0PriorityRuleRow,
-	type S0PriorityRuleUpsert,
-	loadDictOptions,
-	type OptionItem,
+	s0OrderPriorityRulesApi,
+	type S0PriorityCodeRow,
+	type S0PriorityCodeUpsert,
 } from '../api/s0SalesApi';
-import DictDataMaintainPanel from './components/DictDataMaintainPanel.vue';
-
-// ── 旧 API 保留(不删除,不作为主列表数据源)──────────────────────────────
-// s0OrderPriorityRulesApi 仍在 s0SalesApi.ts 中导出,此处不需引用
 
 const route = useRoute();
 const pageTitle = computed(() => (route.meta?.title as string) || '订单优先级配置');
@@ -240,23 +167,29 @@ const pageTitle = computed(() => (route.meta?.title as string) || '订单优先
 // ── 查询 ──────────────────────────────────────────────────────────────────
 const query = reactive({
 	keyword: '',
-	isEnabled: undefined as boolean | undefined,
+	isActive: undefined as boolean | undefined,
 	page: 1,
 	pageSize: 20,
 });
 
 const loading = ref(false);
-const rows = ref<S0PriorityRuleRow[]>([]);
+const rows = ref<S0PriorityCodeRow[]>([]);
 const total = ref(0);
 
+/** 列表排序展示:优先 orderByText;缺失时按 orderBy 映射(false=倒序,其余=正序)。 */
+function orderByDisplay(row: S0PriorityCodeRow): string {
+	if (row.orderByText) return row.orderByText;
+	return row.orderBy === false ? '倒序' : '正序';
+}
+
 async function loadList() {
 	loading.value = true;
 	try {
-		const data = await s0PriorityRulesApi.list({
+		const data = await s0OrderPriorityRulesApi.list({
 			page: query.page,
 			pageSize: query.pageSize,
 			keyword: query.keyword || undefined,
-			isEnabled: query.isEnabled,
+			isActive: query.isActive,
 		});
 		rows.value = data.list;
 		total.value = data.total;
@@ -269,207 +202,152 @@ async function loadList() {
 }
 
 function resetQuery() {
-	Object.assign(query, { keyword: '', isEnabled: undefined, page: 1 });
+	Object.assign(query, { keyword: '', isActive: undefined, page: 1 });
 	void loadList();
 }
 
-// ── 字典选项 ──────────────────────────────────────────────────────────────
-const dictOptions = reactive({
-	customerType: [] as OptionItem[],
-	orderType: [] as OptionItem[],
-	dueStatus: [] as OptionItem[],
-});
-
-async function loadDictSelects() {
-	const [ct, ot, ds] = await Promise.all([
-		loadDictOptions('s0_order_priority_customer_type'),
-		loadDictOptions('s0_order_type'),
-		loadDictOptions('s0_due_status'),
-	]);
-	dictOptions.customerType = ct;
-	dictOptions.orderType = ot;
-	dictOptions.dueStatus = ds;
+// ── 配置表单 ──────────────────────────────────────────────────────────────
+const formDialogVisible = ref(false);
+const formDialogTitle = ref('新增配置');
+const editingId = ref<string | null>(null);
+const saving = ref(false);
+const formRef = ref<FormInstance>();
+
+interface PriorityCodeForm {
+	descr: string;
+	value: string;
+	priority: number;
+	orderBy: boolean | null;
+	sourceTable: string;
+	sourceColumn: string;
+	sourceType: string;
+	sourceId: string;
+	valueType: string;
+	valueId: string;
+	domainCode: string;
+	isActive: boolean;
 }
 
-// ── 规则表单 ──────────────────────────────────────────────────────────────
-const ruleDialogVisible = ref(false);
-const ruleDialogTitle = ref('新增规则');
-const editingId = ref<number | null>(null);
-const ruleSaving = ref(false);
-const ruleFormRef = ref<FormInstance>();
-
-function emptyRuleForm(): S0PriorityRuleUpsert & { customerType?: string; orderType?: string; dueStatus?: string } {
+function emptyForm(): PriorityCodeForm {
 	return {
-		companyRefId: 0,
-		factoryRefId: 0,
-		code: '',
-		name: '',
-		priorityLevel: 1,
-		sortDirection: 'asc',
-		customerType: undefined,
-		orderType: undefined,
-		dueStatus: undefined,
-		isEnabled: true,
-		remark: '',
+		descr: '',
+		value: '',
+		priority: 1,
+		orderBy: null,
+		sourceTable: '',
+		sourceColumn: '',
+		sourceType: '',
+		sourceId: '',
+		valueType: '',
+		valueId: '',
+		domainCode: '',
+		isActive: true,
 	};
 }
 
-const ruleForm = reactive(emptyRuleForm());
+const form = reactive<PriorityCodeForm>(emptyForm());
 
-const ruleFormRules: FormRules = {
-	code: [{ required: true, message: '请填写规则编码', trigger: 'blur' }],
-	name: [{ required: true, message: '请填写规则名称', trigger: 'blur' }],
-	priorityLevel: [{ required: true, message: '请填写优先级', trigger: 'change' }],
+const formRules: FormRules = {
+	descr: [{ required: true, message: '请填写名称', trigger: 'blur' }],
+	priority: [{ required: true, message: '请填写优先级', trigger: 'change' }],
 };
 
-function resetRuleForm() {
+function resetForm() {
 	editingId.value = null;
-	Object.assign(ruleForm, emptyRuleForm());
-	ruleFormRef.value?.clearValidate();
+	Object.assign(form, emptyForm());
+	formRef.value?.clearValidate();
 }
 
 function openCreate() {
-	resetRuleForm();
-	ruleDialogTitle.value = '新增规则';
-	ruleDialogVisible.value = true;
-}
-
-function parseRuleExpr(row: S0PriorityRuleRow): { customerType?: string; orderType?: string; dueStatus?: string } {
-	// 后端 IsIgnore 标签字段优先;fallback 解析 ruleExpr JSON
-	if (row.customerTypeLabel !== undefined || row.orderTypeLabel !== undefined || row.dueStatusLabel !== undefined) {
-		// 标签字段是展示用的,实际 value 需从 ruleExpr 解析
-	}
-	if (!row.ruleExpr) return {};
-	try {
-		const parsed = JSON.parse(row.ruleExpr) as Record<string, unknown>;
-		return {
-			customerType: typeof parsed.customerType === 'string' ? parsed.customerType : undefined,
-			orderType: typeof parsed.orderType === 'string' ? parsed.orderType : undefined,
-			dueStatus: typeof parsed.dueStatus === 'string' ? parsed.dueStatus : undefined,
-		};
-	} catch {
-		return {};
-	}
+	resetForm();
+	formDialogTitle.value = '新增配置';
+	formDialogVisible.value = true;
 }
 
-function openEdit(row: S0PriorityRuleRow) {
-	resetRuleForm();
+function openEdit(row: S0PriorityCodeRow) {
+	resetForm();
 	editingId.value = row.id;
-	ruleDialogTitle.value = `编辑规则 ${row.name}`;
-	const expr = parseRuleExpr(row);
-	Object.assign(ruleForm, {
-		companyRefId: row.companyRefId,
-		factoryRefId: row.factoryRefId,
-		code: row.code,
-		name: row.name,
-		priorityLevel: row.priorityLevel,
-		sortDirection: row.sortDirection,
-		customerType: expr.customerType,
-		orderType: expr.orderType,
-		dueStatus: expr.dueStatus,
-		sourceEntity: row.sourceEntity,
-		sourceField: row.sourceField,
-		sourceFieldType: row.sourceFieldType,
-		sourceLinkField: row.sourceLinkField,
-		workOrderField: row.workOrderField,
-		workOrderFieldType: row.workOrderFieldType,
-		workOrderLinkField: row.workOrderLinkField,
-		isEnabled: row.isEnabled,
-		remark: row.remark ?? '',
+	formDialogTitle.value = `编辑配置 ${row.descr || ''}`.trim();
+	Object.assign(form, {
+		descr: row.descr ?? '',
+		value: row.value ?? '',
+		priority: row.priority,
+		orderBy: row.orderBy ?? null,
+		sourceTable: row.sourceTable ?? '',
+		sourceColumn: row.sourceColumn ?? '',
+		sourceType: row.sourceType ?? '',
+		sourceId: row.sourceId ?? '',
+		valueType: row.valueType ?? '',
+		valueId: row.valueId ?? '',
+		domainCode: row.domainCode ?? '',
+		isActive: row.isActive,
 	});
-	ruleDialogVisible.value = true;
+	formDialogVisible.value = true;
+}
+
+/** 空字符串归一为 undefined,避免把空值写库。 */
+function blankToUndefined(v: string): string | undefined {
+	return v.trim() === '' ? undefined : v;
 }
 
-async function submitRuleForm() {
-	await ruleFormRef.value?.validate();
-	ruleSaving.value = true;
+async function submitForm() {
+	await formRef.value?.validate();
+	saving.value = true;
 	try {
-		const payload: S0PriorityRuleUpsert = {
-			companyRefId: ruleForm.companyRefId,
-			factoryRefId: ruleForm.factoryRefId,
-			code: ruleForm.code,
-			name: ruleForm.name,
-			priorityLevel: ruleForm.priorityLevel,
-			sortDirection: ruleForm.sortDirection,
-			customerType: (ruleForm as any).customerType || undefined,
-			orderType: (ruleForm as any).orderType || undefined,
-			dueStatus: (ruleForm as any).dueStatus || undefined,
-			sourceEntity: ruleForm.sourceEntity,
-			sourceField: ruleForm.sourceField,
-			sourceFieldType: ruleForm.sourceFieldType,
-			sourceLinkField: ruleForm.sourceLinkField,
-			workOrderField: ruleForm.workOrderField,
-			workOrderFieldType: ruleForm.workOrderFieldType,
-			workOrderLinkField: ruleForm.workOrderLinkField,
-			isEnabled: ruleForm.isEnabled,
-			remark: ruleForm.remark,
+		const payload: S0PriorityCodeUpsert = {
+			descr: form.descr,
+			value: blankToUndefined(form.value),
+			priority: form.priority,
+			orderBy: form.orderBy,
+			sourceTable: blankToUndefined(form.sourceTable),
+			sourceColumn: blankToUndefined(form.sourceColumn),
+			sourceType: blankToUndefined(form.sourceType),
+			sourceId: blankToUndefined(form.sourceId),
+			valueType: blankToUndefined(form.valueType),
+			valueId: blankToUndefined(form.valueId),
+			domainCode: blankToUndefined(form.domainCode),
+			isActive: form.isActive,
 		};
 		if (editingId.value !== null) {
-			await s0PriorityRulesApi.update(editingId.value, payload);
+			await s0OrderPriorityRulesApi.update(editingId.value, payload);
 			ElMessage.success('已保存');
 		} else {
-			await s0PriorityRulesApi.create(payload);
+			await s0OrderPriorityRulesApi.create(payload);
 			ElMessage.success('已创建');
 		}
-		ruleDialogVisible.value = false;
+		formDialogVisible.value = false;
 		await loadList();
 	} catch {
 		ElMessage.error('保存订单优先级配置失败,请检查填写内容后重试');
 	} finally {
-		ruleSaving.value = false;
+		saving.value = false;
 	}
 }
 
-function onDelete(row: S0PriorityRuleRow) {
-	ElMessageBox.confirm(`确定删除规则「${row.name}」?`, '确认', { type: 'warning' })
+function onDelete(row: S0PriorityCodeRow) {
+	ElMessageBox.confirm('确认删除该订单优先级配置吗?', '确认', { type: 'warning' })
 		.then(async () => {
-			await s0PriorityRulesApi.delete(row.id);
+			await s0OrderPriorityRulesApi.delete(row.id);
 			ElMessage.success('已删除');
 			await loadList();
 		})
 		.catch(() => {});
 }
 
-function toggleEnabled(row: S0PriorityRuleRow) {
-	const next = !row.isEnabled;
+function toggleActive(row: S0PriorityCodeRow) {
+	const next = !row.isActive;
 	const actionText = next ? '生效' : '停用';
-	ElMessageBox.confirm(`确定${actionText}规则「${row.name}」?`, '确认', { type: 'warning' })
+	ElMessageBox.confirm(`确定${actionText}该订单优先级配置「${row.descr || ''}」?`, '确认', { type: 'warning' })
 		.then(async () => {
-			await s0PriorityRulesApi.toggleEnabled(row.id, { isEnabled: next });
+			await s0OrderPriorityRulesApi.toggleEnabled(row.id, { isActive: next });
 			ElMessage.success(`${actionText}成功`);
 			await loadList();
 		})
 		.catch(() => {});
 }
 
-// ── 配置维护弹窗 ──────────────────────────────────────────────────────────
-const configDialogVisible = ref(false);
-const configActiveTab = ref('customerType');
-
-watch(configActiveTab, (tab) => {
-	if (tab === 'fieldMapping') void loadFieldMapping();
-});
-
-// 字段映射 Tab
-const fieldMappingRows = ref<S0PriorityRuleRow[]>([]);
-const fieldMappingLoading = ref(false);
-
-async function loadFieldMapping() {
-	fieldMappingLoading.value = true;
-	try {
-		const data = await s0PriorityRulesApi.list({ page: 1, pageSize: 200 });
-		fieldMappingRows.value = data.list.filter(
-			(r) => r.sourceEntity || r.sourceField || r.workOrderField,
-		);
-	} catch {
-		fieldMappingRows.value = [];
-	} finally {
-		fieldMappingLoading.value = false;
-	}
-}
-
 onMounted(async () => {
-	await Promise.all([loadList(), loadDictSelects()]);
+	await loadList();
 });
 </script>
 
@@ -485,13 +363,4 @@ onMounted(async () => {
 	display: flex;
 	justify-content: flex-end;
 }
-
-.field-mapping-panel {
-	.empty-hint {
-		text-align: center;
-		color: #909399;
-		padding: 24px 0;
-		font-size: 13px;
-	}
-}
 </style>