zhangwencui
12 小时以前 a60d21cdda7df7733050315fc6462a70c273fcb4
src/pages/procurementManagement/procurementLedger/detail.vue
@@ -190,7 +190,7 @@
                       size="small"
                       @click="addProduct"
                       class="add-btn"
                       v-if="operationType !== 'view'">
                       v-if="canEditProducts">
              新增
            </up-button>
          </view>
@@ -208,7 +208,7 @@
            </view>
            <!-- 操作按钮 -->
            <view class="product-actions"
                  v-if="operationType !== 'view'">
                  v-if="canEditProducts">
              <up-button type="error"
                         size="mini"
                         @click="removeProduct(idx)"
@@ -227,9 +227,11 @@
              <up-input v-model="product.productCategory"
                        readonly
                        placeholder="请选择"
                        :disabled="!canEditProducts"
                        @click="openCategoryPicker(idx)" />
              <template #right>
                <up-icon name="arrow-right"
                         v-if="canEditProducts"
                         @click="showCategoryPicker = true"></up-icon>
              </template>
            </up-form-item>
@@ -241,9 +243,11 @@
              <up-input v-model="product.specificationModel"
                        readonly
                        placeholder="请选择"
                        :disabled="!canEditProducts"
                        @click="openSpecificationPicker(idx)" />
              <template #right>
                <up-icon name="arrow-right"
                         v-if="canEditProducts"
                         @click="showSpecificationPicker = true"></up-icon>
              </template>
            </up-form-item>
@@ -253,6 +257,7 @@
                          required
                          :rules="productRules">
              <up-input v-model="product.unit"
                        :disabled="!canEditProducts"
                        placeholder="请输入" />
            </up-form-item>
            <!-- 税率 -->
@@ -263,9 +268,11 @@
              <up-input v-model="product.taxRate"
                        readonly
                        placeholder="请选择"
                        :disabled="!canEditProducts"
                        @click="openTaxRatePicker(idx)" />
              <template #right>
                <up-icon name="arrow-right"
                         v-if="canEditProducts"
                         @click="showTaxRatePicker = true"></up-icon>
              </template>
            </up-form-item>
@@ -276,6 +283,7 @@
                          :rules="productRules">
              <up-input v-model="product.taxInclusiveUnitPrice"
                        type="number"
                        :disabled="!canEditProducts"
                        placeholder="请输入"
                        @blur="formatTaxPrice(idx)" />
            </up-form-item>
@@ -286,6 +294,7 @@
                          :rules="productRules">
              <up-input v-model="product.quantity"
                        type="number"
                        :disabled="!canEditProducts"
                        placeholder="请输入"
                        @blur="formatAmount(idx)" />
            </up-form-item>
@@ -296,6 +305,7 @@
                          :rules="productRules">
              <up-input v-model="product.taxInclusiveTotalPrice"
                        type="number"
                        :disabled="!canEditProducts"
                        placeholder="请输入"
                        @blur="formatTaxTotal(idx)" />
            </up-form-item>
@@ -306,6 +316,7 @@
                          :rules="productRules">
              <up-input v-model="product.taxExclusiveTotalPrice"
                        type="number"
                        :disabled="!canEditProducts"
                        placeholder="请输入"
                        @blur="formatNoTaxTotal(idx)" />
            </up-form-item>
@@ -317,9 +328,11 @@
              <up-input v-model="product.invoiceType"
                        readonly
                        placeholder="请选择"
                        :disabled="!canEditProducts"
                        @click="openInvoiceTypePicker(idx)" />
              <template #right>
                <up-icon name="arrow-right"
                         v-if="canEditProducts"
                         @click="showInvoiceTypePicker = true"></up-icon>
              </template>
            </up-form-item>
@@ -330,6 +343,7 @@
                          :rules="productRules">
              <up-input v-model="product.warnNum"
                        type="number"
                        :disabled="!canEditProducts"
                        placeholder="请输入" />
            </up-form-item>
            <up-form-item label="是否质检"
@@ -337,13 +351,16 @@
                          required
                          :rules="productRules">
              <u-radio-group v-model="product.isChecked"
                             :disabled="!canEditProducts"
                             placement="row"
                             @change="groupChange">
                <u-radio :customStyle="{marginRight: '40rpx'}"
                         label="是"
                         :disabled="!canEditProducts"
                         :name="true">
                </u-radio>
                <u-radio label="否"
                         :disabled="!canEditProducts"
                         :name="false">
                </u-radio>
              </u-radio-group>
@@ -352,7 +369,7 @@
        </view>
      </view>
      <!-- 使用公共底部按钮组件 -->
      <FooterButtons :show="operationType !== 'view'"
      <FooterButtons :show="operationType !== 'view' && !isApprovalPassed"
                     cancelText="取消"
                     confirmText="保存"
                     @cancel="goBack"
@@ -375,6 +392,7 @@
    getSalesNo,
    approveProcessGetInfo,
  } from "@/api/procurementManagement/procurementLedger";
  import { delProduct } from "@/api/salesManagement/salesLedger";
  import PageHeader from "@/components/PageHeader.vue";
  import FooterButtons from "@/components/FooterButtons.vue";
  import { userListNoPageByTenantId } from "@/api/system/user";
@@ -382,6 +400,14 @@
  const operationType = ref("");
  const editData = ref(null);
  const formRef = ref(null);
  // 审批通过(approvalStatus === 3)后,禁止编辑/删除产品
  const isApprovalPassed = computed(() => {
    const status = editData.value?.approvalStatus ?? form.value?.approvalStatus;
    return Number(status) === 3;
  });
  const canEditProducts = computed(() => {
    return operationType.value !== "view" && !isApprovalPassed.value;
  });
  const userStore = useUserStore();
  const form = ref({
@@ -413,12 +439,14 @@
    }));
  });
  // 计算供应商选择列表
  // 计算供应商选择列表(只保留 isWhite === 0 的供应商)
  const supplierActionList = computed(() => {
    return supplierList.value.map(item => ({
      name: item.text,
      value: item.value,
    }));
    return supplierList.value
      .filter(item => item.isWhite === 0)
      .map(item => ({
        name: item.text,
        value: item.value,
      }));
  });
  // 选择器相关变量
@@ -528,6 +556,7 @@
  };
  const addProduct = () => {
    if (!canEditProducts.value) return;
    if (productData.value === null) {
      productData.value = [];
    }
@@ -574,26 +603,69 @@
  };
  const removeProduct = idx => {
    productData.value.splice(idx, 1);
    if (!canEditProducts.value) return;
    const row = productData.value[idx];
    // 新增模式或还未落库的产品,直接前端删除
    if (operationType.value === "add" || !row?.id) {
      productData.value.splice(idx, 1);
      return;
    }
    uni.showModal({
      title: "提示",
      content: "选中的产品将被删除,是否确认删除?",
      confirmText: "确认",
      cancelText: "取消",
      success: res => {
        if (!res.confirm) {
          uni.showToast({
            title: "已取消",
            icon: "none",
          });
          return;
        }
        const ids = [row.id];
        delProduct(ids).then(() => {
          uni.showToast({
            title: "删除成功",
            icon: "success",
          });
          const currentId = form.value.id || editData.value?.id;
          if (currentId) {
            getPurchaseById({ id: currentId, type: 2 }).then(res2 => {
              productData.value = res2.productData || [];
            });
          } else {
            // 回退处理:如果没有当前ID,则本地删除
            productData.value.splice(idx, 1);
          }
        });
      },
    });
  };
  // 显示选择器
  const openCategoryPicker = idx => {
    if (!canEditProducts.value) return;
    currentProductIndex.value = idx;
    showCategoryPicker.value = true;
  };
  const openSpecificationPicker = idx => {
    if (!canEditProducts.value) return;
    currentProductIndex.value = idx;
    showSpecificationPicker.value = true;
  };
  const openTaxRatePicker = idx => {
    if (!canEditProducts.value) return;
    currentProductIndex.value = idx;
    showTaxRatePicker.value = true;
  };
  const openInvoiceTypePicker = idx => {
    if (!canEditProducts.value) return;
    currentProductIndex.value = idx;
    showInvoiceTypePicker.value = true;
  };
@@ -932,6 +1004,7 @@
      supplierList.value = res.data.map(item => ({
        text: item.supplierName,
        value: item.id,
        isWhite: item.isWhite,
      }));
    });
  };