feat(material): 基础信息(Odoo)补回「出库/借库需审批」列

buyOdoo.vue 是 list.vue 的手工副本。93f1497 / 4146f35 给 list.vue 加了
「出库/借库需审批」列,未同步到 Odoo 页 —— isApprovalRequired 在
list.vue 出现 9 次,在 buyOdoo.vue 为 0 次,该页既看不到也改不了这个开关。

补上表格列(带切换开关与操作权限守卫)、列显示开关、columns 与
permissionMap 条目、toggleApprovalRequired 函数及 batchSetApprovalRequired
接口引用。
This commit is contained in:
yueli
2026-09-18 10:07:27 +08:00
parent 825c088e98
commit ac22c9959b

View File

@ -200,6 +200,7 @@
<el-checkbox v-if="hasColPermission('files')" v-model="columns.files.visible" label="资料" />
<el-checkbox v-if="hasColPermission('isEnabled')" v-model="columns.isEnabled.visible" label="状态" />
<el-checkbox v-if="hasColPermission('isInspectionRequired')" v-model="columns.isInspectionRequired.visible" label="强制质检" />
<el-checkbox v-if="hasColPermission('isApprovalRequired')" v-model="columns.isApprovalRequired.visible" label="出库/借库需审批" />
<el-checkbox v-if="hasColPermission('referencePrice')" v-model="columns.referencePrice.visible" label="参考价格" />
<el-checkbox v-if="hasColPermission('purchaseLink')" v-model="columns.purchaseLink.visible" label="采购链接" />
<el-checkbox v-if="hasColPermission('warningStatus')" v-model="columns.warningStatus.visible" label="预警状态" />
@ -350,6 +351,15 @@
</el-tag>
</template>
</el-table-column>
<el-table-column v-if="columns.isApprovalRequired.visible && hasColPermission('isApprovalRequired')" label="出库/借库需审批" min-width="130" align="center">
<template #default="scope">
<el-switch
:model-value="!!scope.row.isApprovalRequired"
:disabled="!userStore.hasPermission('material_list:isApprovalRequired')"
@change="(val: boolean) => toggleApprovalRequired(scope.row, val)"
/>
</template>
</el-table-column>
<el-table-column v-if="columns.referencePrice.visible && hasColPermission('referencePrice')" prop="referencePrice" label="参考价格" min-width="120" align="center" sortable="custom">
<template #default="scope">
<span v-if="scope.row.referencePrice != null" class="money-text">{{ scope.row.referencePrice?.toFixed(2) }}</span>
@ -774,6 +784,7 @@ import {
exportAssetStatistics,
batchSetWarning,
batchSetInspection,
batchSetApprovalRequired,
markWarningOrdered,
getMaterialUnitsAPI,
getOdooSummary
@ -1058,7 +1069,8 @@ const columns = reactive({
commonName: { visible: true }, category: { visible: true }, type: { visible: true },
spec: { visible: true }, unit: { visible: true }, inventory: { visible: true },
available: { visible: true }, files: { visible: true }, isEnabled: { visible: true },
isInspectionRequired: { visible: true }, referencePrice: { visible: true }, warningStatus: { visible: true },
isInspectionRequired: { visible: true }, isApprovalRequired: { visible: true },
referencePrice: { visible: true }, warningStatus: { visible: true },
purchaseLink: { visible: true }
});
@ -1069,7 +1081,9 @@ const permissionMap: Record<string, string> = {
available: 'material_list:availableCount', files: 'material_list:files', isEnabled: 'material_list:isEnabled',
// ★ 与后端读过滤field_permissions.py对齐原先写 material_list:operation
// 会与后端口径不一致,渲染出一列全是「-」的空表头
isInspectionRequired: 'material_list:isInspectionRequired', referencePrice: 'material_list:referencePrice',
isInspectionRequired: 'material_list:isInspectionRequired',
isApprovalRequired: 'material_list:isApprovalRequired',
referencePrice: 'material_list:referencePrice',
purchaseLink: 'material_list:purchaseLink',
warningStatus: 'material_list:view_warning'
};
@ -1507,6 +1521,20 @@ const createPurchaseForMaterial = () => {
window.open(routeUrl.href, '_blank');
};
// 列表内直接切换「出库/借库需审批」(与 list.vue 对齐)
const toggleApprovalRequired = async (row: any, val: boolean) => {
if (!row || !row.id) return;
const prev = !!row.isApprovalRequired;
row.isApprovalRequired = val; // 乐观更新
try {
await batchSetApprovalRequired({ ids: [row.id], isApprovalRequired: val });
ElMessage.success(val ? '已标记:该物料出库/借库需审批' : '已取消:该物料出库/借库免审批');
} catch (error: any) {
row.isApprovalRequired = prev;
ElMessage.error(error?.msg || '设置失败');
}
};
const resetForm = () => {
form.value = JSON.parse(JSON.stringify(initForm));
fileListImage.value = []; fileListManual.value = [];