Pārlūkot izejas kodu

fix(product): 修复产品添加页面单位默认值设置和税务代码选择组件功能

- 移除产品添加页面新增模式下的单位默认值设置逻辑
- 为税务代码选择组件添加行禁用状态判断功能
- 实现非叶子节点的禁用显示和选择限制
- 添加禁用行的样式类和鼠标悬停效果
- 优化税务代码选择的双击事件处理逻辑
- 移除查询参数中的isBottom过滤条件
肖路 2 dienas atpakaļ
vecāks
revīzija
e1b2e8963e

+ 29 - 7
src/components/TaxCodeSelect/index.vue

@@ -45,26 +45,27 @@
             border
             highlight-current-row
             height="360px"
+            :row-class-name="rowClassName"
             @row-dblclick="handleRowDblClick"
           >
             <el-table-column label="编码" align="center" prop="taxationNo" min-width="110">
               <template #default="{ row }">
-                <el-link type="primary" :underline="false">{{ row.taxationNo }}</el-link>
+                <el-link :type="isRowDisabled(row) ? 'info' : 'primary'" :disabled="isRowDisabled(row)" :underline="false">{{ row.taxationNo }}</el-link>
               </template>
             </el-table-column>
             <el-table-column label="合并编码" align="center" prop="mergeNo" min-width="130" show-overflow-tooltip>
               <template #default="{ row }">
-                <el-link type="primary" :underline="false">{{ row.mergeNo }}</el-link>
+                <el-link :type="isRowDisabled(row) ? 'info' : 'primary'" :disabled="isRowDisabled(row)" :underline="false">{{ row.mergeNo }}</el-link>
               </template>
             </el-table-column>
             <el-table-column label="名称" align="center" prop="name" min-width="120" show-overflow-tooltip>
               <template #default="{ row }">
-                <el-link type="primary" :underline="false">{{ row.name }}</el-link>
+                <el-link :type="isRowDisabled(row) ? 'info' : 'primary'" :disabled="isRowDisabled(row)" :underline="false">{{ row.name }}</el-link>
               </template>
             </el-table-column>
             <el-table-column label="简称" align="center" prop="abbreviation" min-width="100" show-overflow-tooltip>
               <template #default="{ row }">
-                <el-link type="primary" :underline="false">{{ row.abbreviation }}</el-link>
+                <el-link :type="isRowDisabled(row) ? 'info' : 'primary'" :disabled="isRowDisabled(row)" :underline="false">{{ row.abbreviation }}</el-link>
               </template>
             </el-table-column>
             <!-- <el-table-column label="说明" align="center" prop="remark" min-width="150" show-overflow-tooltip />
@@ -171,7 +172,6 @@ const getList = async () => {
   loading.value = true;
   try {
     const res = await listTaxCode(queryParams.value);
-    // 后端已按 isBottom='0' 过滤,仅返回无下级的叶子节点
     listData.value = res.rows ?? [];
     total.value = res.total ?? 0;
   } finally {
@@ -203,9 +203,22 @@ const handleSearch = () => {
   getList();
 };
 
+/** 判断行是否禁用:非叶子节点(isBottom === 0)不可选 */
+const isRowDisabled = (row: TaxCodeVO): boolean => {
+  return Number((row as any)?.isBottom) === 0;
+};
+
+/** 行样式类名:禁用行显示为灰色 */
+const rowClassName = ({ row }: { row: TaxCodeVO }): string => {
+  return isRowDisabled(row) ? 'tax-code-row-disabled' : '';
+};
+
 /** 双击行选择 */
 const handleRowDblClick = (row: TaxCodeVO) => {
-  if (row.isBottom !== '0') return;
+  if (isRowDisabled(row)) {
+    proxy?.$modal.msgWarning('该节点不是叶子节点,不可选择');
+    return;
+  }
   emit('select', row);
   dialog.closeDialog();
 };
@@ -220,7 +233,6 @@ const open = (id?: string | number) => {
     parentId: undefined,
     name: undefined,
     taxationNo: undefined,
-    isBottom: '0',
     params: {}
   };
   dialog.openDialog();
@@ -274,4 +286,14 @@ defineExpose({ open, close: dialog.closeDialog });
   display: flex;
   align-items: center;
 }
+
+:deep(.tax-code-row-disabled) {
+  background-color: var(--el-fill-color-light) !important;
+  color: var(--el-text-color-disabled);
+  cursor: not-allowed;
+}
+
+:deep(.tax-code-row-disabled:hover > td.el-table__cell) {
+  background-color: var(--el-fill-color-light) !important;
+}
 </style>

+ 0 - 4
src/views/product/base/add.vue

@@ -1471,10 +1471,6 @@ const getUnitOptions = async () => {
   try {
     const res = await getUnitList();
     unitOptions.value = res.data || [];
-    // 如果是新增模式且有选项,设置第一个为默认值
-    if (!route.params.id && unitOptions.value.length > 0 && !productForm.unitId) {
-      productForm.unitId = unitOptions.value[0].id;
-    }
   } catch (error) {
     console.error('获取单位列表失败:', error);
   }

+ 0 - 4
src/views/product/baseAudit/add.vue

@@ -1452,10 +1452,6 @@ const getUnitOptions = async () => {
   try {
     const res = await getUnitList();
     unitOptions.value = res.data || [];
-    // 如果是新增模式且有选项,设置第一个为默认值
-    if (!route.params.id && unitOptions.value.length > 0 && !productForm.unitId) {
-      productForm.unitId = unitOptions.value[0].id;
-    }
   } catch (error) {
     console.error('获取单位列表失败:', error);
   }