湟水峡
1.采购模块不要项目名称
2.加一个有待回款登记的提示
3.回款登记、付款登记改成和销售订单价格关联,并且可以多个一起回款或付款
4.合同管理不要下载合同了,跟合同相关的字段可以去掉了
已添加2个文件
已修改19个文件
1720 ■■■■ 文件已修改
src/api/collaborativeApproval/vehicleManagement.js 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/viewIndex.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/PIMTable/PIMTable.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/collaborativeApproval/vehicleManagement/index.vue 662 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/contractManagement/components/formDia.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/contractManagement/index.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/dimission/components/formDia.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/employeeRecord/components/formDia.vue 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/onboarding/components/formDia.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/onboarding/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/components/Modal.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/indexOld.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentEntry/index.vue 335 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementLedger/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceRegistration/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPayment/index.vue 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPaymentHistory/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/vehicleManagement.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
import request from "@/utils/request";
// æŸ¥è¯¢è½¦è¾†åˆ—表
export function listVehicle(page, query) {
  return request({
    url: "/vehicleManagement/getList",
    method: "get",
    params: {
      ...page,
      ...query
    },
  });
}
// æ–°å¢žè½¦è¾†
export function addVehicle(data) {
  return request({
    url: "/vehicleManagement/add",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹è½¦è¾†
export function updateVehicle(data) {
  return request({
    url: "/vehicleManagement/update",
    method: "post",
    data: data,
  });
}
// åˆ é™¤è½¦è¾†
export function delVehicle(query) {
  return request({
    url: "/vehicleManagement/delete",
    method: "delete",
    data: query,
  });
}
// æ ¹æ®id查询车辆详情
export function getVehicleById(id) {
  return request({
    url: "/vehicleManagement/getById/" + id,
    method: "get"
  });
}
// ä½¿ç”¨è½¦è¾†
export function useVehicle(data) {
  return request({
    url: "/vehicleManagement/useVehicle",
    method: "post",
    data: data,
  });
}
// è¿˜è½¦
export function returnVehicle(data) {
  return request({
    url: "/vehicleManagement/returnVehicle",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢è½¦è¾†ä½¿ç”¨è®°å½•
export function getVehicleUsageRecords(page, query) {
  return request({
    url: "/vehicleManagement/getUsageRecords",
    method: "get",
    params: {
      ...page,
      ...query
    },
  });
}
src/api/viewIndex.js
@@ -44,4 +44,12 @@
        url: '/sales/ledger/getAmountHalfYear',
        method: 'get'
    })
}
// é¦–页-待回款提醒
export const overdueReceivable = () => {
    return request({
        url: '/home/overdueReceivable',
        method: 'get'
    })
}
src/components/PIMTable/PIMTable.vue
@@ -204,6 +204,7 @@
    </el-table-column>
  </el-table>
  <pagination
    v-if="showPagination"
    :total="page.total"
    :layout="page.layout"
    :page="page.current"
@@ -316,6 +317,10 @@
    type: [String, Object],
    default: () => ({ width: "100%" }),
  },
  showPagination: {
    type: Boolean,
    default: true,
  },
});
// Data
src/views/collaborativeApproval/vehicleManagement/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,662 @@
<template>
  <div class="app-container">
    <div class="search_form">
      <el-form :model="searchForm" :inline="true">
        <el-form-item label="车牌号:">
          <el-input v-model="searchForm.plateNumber" placeholder="请输入车牌号" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
        <el-form-item label="颜色:">
          <el-input v-model="searchForm.color" placeholder="请输入颜色" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
        <el-form-item label="品牌:">
          <el-input v-model="searchForm.brand" placeholder="请输入品牌" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
        <el-form-item label="使用状态:">
          <el-select v-model="searchForm.status" placeholder="请选择" clearable @change="handleQuery" style="width: 200px">
            <el-option label="空闲" value="idle" />
            <el-option label="使用中" value="in_use" />
            <el-option label="维修中" value="maintenance" />
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleQuery">搜索</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="table_list">
      <div class="actions">
        <div></div>
        <div>
          <el-button type="primary" @click="openForm('add')">
            æ–°å¢žè½¦è¾†
          </el-button>
          <el-button @click="handleOut">导出</el-button>
          <el-button type="danger" plain @click="handleDelete">删除</el-button>
        </div>
      </div>
      <PIMTable
        :table-data="tableData"
        :column="tableColumns"
        :is-selection="true"
        :border="true"
        :table-loading="tableLoading"
        :table-style="{ width: '100%', height: 'calc(100vh - 21.5em)' }"
        :page="{
          current: page.current,
          size: page.size,
          total: total,
          layout: 'total, sizes, prev, pager, next, jumper'
        }"
        @selection-change="handleSelectionChange"
        @pagination="paginationChange"
      >
        <template #operation="{ row }">
          <el-button link type="primary" size="small" @click="openForm('edit', row)">编辑</el-button>
          <el-button link type="primary" size="small" v-if="row.status === 'idle'"
            @click="openUseForm(row)">使用车辆</el-button>
          <el-button link type="primary" size="small" v-if="row.status === 'in_use'"
            @click="openReturnForm(row)">还车</el-button>
          <el-button link type="primary" size="small" @click="viewUsageRecords(row)">使用记录</el-button>
        </template>
      </PIMTable>
    </div>
    <!-- æ–°å¢ž/编辑车辆弹窗 -->
    <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '新增车辆' : '编辑车辆'" width="50%"
      @close="closeDia">
      <el-form :model="form" label-width="120px" label-position="top" :rules="rules" ref="formRef">
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="车牌号:" prop="plateNumber">
              <el-input v-model="form.plateNumber" placeholder="请输入车牌号" clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="颜色:" prop="color">
              <el-input v-model="form.color" placeholder="请输入颜色" clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="品牌:" prop="brand">
              <el-input v-model="form.brand" placeholder="请输入品牌" clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="使用状态:" prop="status">
              <el-select v-model="form.status" placeholder="请选择" clearable style="width: 100%">
                <el-option label="空闲" value="idle" />
                <el-option label="使用中" value="in_use" />
                <el-option label="维修中" value="maintenance" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="表显里程(km):">
              <el-input-number v-model="form.odometer" :min="0" :precision="2" style="width: 100%"
                placeholder="请输入表显里程" clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="备注:">
              <el-input v-model="form.remark" placeholder="请输入备注" clearable type="textarea" :rows="3" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitForm">确认</el-button>
          <el-button @click="closeDia">取消</el-button>
        </div>
      </template>
    </el-dialog>
    <!-- ä½¿ç”¨è½¦è¾†å¼¹çª— -->
    <el-dialog v-model="useFormVisible" title="使用车辆" width="50%" @close="closeUseDia">
      <el-form :model="useForm" label-width="140px" label-position="top" :rules="useRules" ref="useFormRef">
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="车牌号:">
              <el-input :value="currentUseRow ? currentUseRow.plateNumber : ''" disabled />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="目的地:" prop="destination">
              <el-input v-model="useForm.destination" placeholder="请输入目的地" clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="表显里程(km):" prop="odometer">
              <el-input-number v-model="useForm.odometer" :min="0" :precision="2" style="width: 100%"
                placeholder="请输入表显里程" clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="本次行驶里程(km):" prop="travelDistance">
              <el-input-number v-model="useForm.travelDistance" :min="0" :precision="2" style="width: 100%"
                placeholder="请输入本次行驶里程" clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="使用人:" prop="userId">
              <el-select v-model="useForm.userId" placeholder="请选择使用人" clearable filterable>
                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="备注:">
              <el-input v-model="useForm.remark" placeholder="请输入备注" clearable type="textarea" :rows="3" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitUseForm">确认</el-button>
          <el-button @click="closeUseDia">取消</el-button>
        </div>
      </template>
    </el-dialog>
    <!-- è¿˜è½¦å¼¹çª— -->
    <el-dialog v-model="returnFormVisible" title="还车" width="50%" @close="closeReturnDia">
      <el-form :model="returnForm" label-width="140px" label-position="top" :rules="returnRules" ref="returnFormRef">
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="车牌号:">
              <el-input :value="currentReturnRow ? currentReturnRow.plateNumber : ''" disabled />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="还车时间:" prop="returnTime">
              <el-date-picker style="width: 100%" v-model="returnForm.returnTime" value-format="YYYY-MM-DD HH:mm:ss"
                format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择还车时间" clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="表显里程(km):" prop="odometer">
              <el-input-number v-model="returnForm.odometer" :min="0" :precision="2" style="width: 100%"
                placeholder="请输入表显里程" clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="使用人:" prop="userId">
              <el-select v-model="returnForm.userId" placeholder="请选择使用人" clearable filterable>
                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="备注:">
              <el-input v-model="returnForm.remark" placeholder="请输入备注" clearable type="textarea" :rows="3" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitReturnForm">确认</el-button>
          <el-button @click="closeReturnDia">取消</el-button>
        </div>
      </template>
    </el-dialog>
    <!-- ä½¿ç”¨è®°å½•弹窗 -->
    <el-dialog v-model="usageRecordsVisible" title="使用记录" width="70%" @close="closeUsageRecords">
      <PIMTable
        :table-data="usageRecordsData"
        :column="usageRecordsColumns"
        :border="true"
        :table-loading="usageRecordsLoading"
        :table-style="{ width: '100%' }"
        :page="{
          current: usageRecordsPage.current,
          size: usageRecordsPage.size,
          total: usageRecordsTotal,
          layout: 'total, sizes, prev, pager, next, jumper'
        }"
        @pagination="usageRecordsPaginationChange"
      />
    </el-dialog>
  </div>
</template>
<script setup>
import { onMounted, ref, reactive, toRefs, getCurrentInstance } from "vue";
import PIMTable from "@/components/PIMTable/PIMTable.vue";
import pagination from "@/components/PIMTable/Pagination.vue";
import { ElMessageBox } from "element-plus";
import useUserStore from "@/store/modules/user";
import { userListNoPage } from "@/api/system/user.js";
import {
  listVehicle,
  addVehicle,
  updateVehicle,
  delVehicle,
  getVehicleById,
  useVehicle,
  returnVehicle,
  getVehicleUsageRecords,
} from "@/api/collaborativeApproval/vehicleManagement.js";
import useFormData from "@/hooks/useFormData.js";
import dayjs from "dayjs";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
const tableData = ref([]);
const selectedRows = ref([]);
const userList = ref([]);
const tableLoading = ref(false);
const page = reactive({
  current: 1,
  size: 100,
});
const total = ref(0);
// æœç´¢è¡¨å•
const data = reactive({
  searchForm: {
    plateNumber: "",
    color: "",
    brand: "",
    status: "",
  },
  form: {
    plateNumber: "",
    color: "",
    brand: "",
    status: "idle",
    odometer: 0,
    remark: "",
  },
  rules: {
    plateNumber: [{ required: true, message: "请输入车牌号", trigger: "blur" }],
    color: [{ required: true, message: "请输入颜色", trigger: "blur" }],
    brand: [{ required: true, message: "请输入品牌", trigger: "blur" }],
    status: [{ required: true, message: "请选择使用状态", trigger: "change" }],
  },
});
const { form, rules } = toRefs(data);
const { form: searchForm } = useFormData(data.searchForm);
// ä½¿ç”¨è½¦è¾†è¡¨å•
const useFormVisible = ref(false);
const currentUseRow = ref(null);
const useVehicleFormData = reactive({
  useForm: {
    vehicleId: "",
    destination: "",
    odometer: 0,
    travelDistance: 0,
    userId: "",
    remark: "",
  },
  useRules: {
    destination: [{ required: true, message: "请输入目的地", trigger: "blur" }],
    odometer: [{ required: true, message: "请输入表显里程", trigger: "blur" }],
    travelDistance: [{ required: true, message: "请输入本次行驶里程", trigger: "blur" }],
    userId: [{ required: true, message: "请选择使用人", trigger: "change" }],
  },
});
const { useForm, useRules } = toRefs(useVehicleFormData);
// è¿˜è½¦è¡¨å•
const returnFormVisible = ref(false);
const currentReturnRow = ref(null);
const returnFormData = reactive({
  returnForm: {
    vehicleId: "",
    returnTime: "",
    odometer: 0,
    userId: "",
    remark: "",
  },
  returnRules: {
    returnTime: [{ required: true, message: "请选择还车时间", trigger: "change" }],
    odometer: [{ required: true, message: "请输入表显里程", trigger: "blur" }],
    userId: [{ required: true, message: "请选择使用人", trigger: "change" }],
  },
});
const { returnForm, returnRules } = toRefs(returnFormData);
// ä½¿ç”¨è®°å½•
const usageRecordsVisible = ref(false);
const usageRecordsData = ref([]);
const usageRecordsLoading = ref(false);
const usageRecordsPage = reactive({
  current: 1,
  size: 100,
});
const usageRecordsTotal = ref(0);
const currentVehicleId = ref(null);
// ç”¨æˆ·ä¿¡æ¯è¡¨å•弹框数据
const operationType = ref("");
const dialogFormVisible = ref(false);
const currentId = ref("");
// è¡¨æ ¼åˆ—配置
const tableColumns = ref([
  { label: "车牌号", prop: "plateNumber", width: "120" },
  { label: "颜色", prop: "color", width: "100" },
  { label: "品牌", prop: "brand", width: "120" },
  {
    label: "使用状态",
    prop: "status",
    width: "100",
    dataType: "tag",
    formatData: (val) => {
      if (val === "idle") return "空闲";
      if (val === "in_use") return "使用中";
      if (val === "maintenance") return "维修中";
      return val || "-";
    },
    formatType: (val) => {
      if (val === "idle") return "success";
      if (val === "in_use") return "warning";
      if (val === "maintenance") return "danger";
      return "info";
    },
  },
  { label: "当前使用人", prop: "currentUser", width: "120" },
  { label: "表显里程(km)", prop: "odometer", width: "120" },
  { label: "创建时间", prop: "createTime", width: "180" },
  {
    label: "操作",
    dataType: "slot",
    slot: "operation",
    align: "center",
    fixed: "right",
    width: "250",
  },
]);
// ä½¿ç”¨è®°å½•表格列配置
const usageRecordsColumns = ref([
  { label: "车牌号", prop: "plateNumber", width: "120" },
  { label: "使用人", prop: "userName", width: "120" },
  { label: "目的地", prop: "destination", width: "150" },
  { label: "使用时间", prop: "useTime", width: "180" },
  { label: "还车时间", prop: "returnTime", width: "180" },
  { label: "使用前里程(km)", prop: "odometerBefore", width: "130" },
  { label: "还车时里程(km)", prop: "odometerAfter", width: "130" },
  { label: "本次行驶里程(km)", prop: "travelDistance", width: "140" },
]);
// æŸ¥è¯¢åˆ—表
const handleQuery = () => {
  page.current = 1;
  getList();
};
const paginationChange = (obj) => {
  page.current = obj.page;
  page.size = obj.limit;
  getList();
};
const getList = () => {
  tableLoading.value = true;
  listVehicle(page, searchForm)
    .then((res) => {
      tableLoading.value = false;
      tableData.value = res.records || res.data || [];
      total.value = res.total || 0;
    })
    .catch(() => {
      tableLoading.value = false;
    });
};
// è¡¨æ ¼é€‰æ‹©æ•°æ®
const handleSelectionChange = (selection) => {
  selectedRows.value = selection;
};
// æ‰“开弹框
const openForm = async (type, row) => {
  operationType.value = type;
  form.value = {
    plateNumber: "",
    color: "",
    brand: "",
    status: "idle",
    odometer: 0,
    remark: "",
  };
  let userLists = await userListNoPage();
  userList.value = userLists.data || [];
  if (type !== "add") {
    currentId.value = row.id;
    getVehicleById(row.id).then((res) => {
      form.value = { ...res.data || res };
    });
  }
  dialogFormVisible.value = true;
};
// æäº¤è¡¨å•
const submitForm = () => {
  proxy.$refs["formRef"].validate((valid) => {
    if (valid) {
      if (operationType.value === "add") {
        addVehicle(form.value).then((res) => {
          proxy.$modal.msgSuccess("新增成功");
          closeDia();
          getList();
        });
      } else {
        form.value.id = currentId.value;
        updateVehicle(form.value).then((res) => {
          proxy.$modal.msgSuccess("修改成功");
          closeDia();
          getList();
        });
      }
    }
  });
};
// å…³é—­å¼¹æ¡†
const closeDia = () => {
  proxy.resetForm("formRef");
  dialogFormVisible.value = false;
};
// æ‰“开发货弹框
const openUseForm = async (row) => {
  currentUseRow.value = row;
  useForm.value = {
    vehicleId: row.id,
    destination: "",
    odometer: row.odometer || 0,
    travelDistance: 0,
    userId: "",
    remark: "",
  };
  let userLists = await userListNoPage();
  userList.value = userLists.data || [];
  useFormVisible.value = true;
};
// æäº¤ä½¿ç”¨è½¦è¾†è¡¨å•
const submitUseForm = () => {
  proxy.$refs["useFormRef"].validate((valid) => {
    if (valid) {
      useVehicle(useForm.value).then((res) => {
        proxy.$modal.msgSuccess("使用车辆成功");
        closeUseDia();
        getList();
      });
    }
  });
};
// å…³é—­ä½¿ç”¨è½¦è¾†å¼¹æ¡†
const closeUseDia = () => {
  proxy.resetForm("useFormRef");
  useFormVisible.value = false;
  currentUseRow.value = null;
};
// æ‰“开还车弹框
const openReturnForm = async (row) => {
  currentReturnRow.value = row;
  returnForm.value = {
    vehicleId: row.id,
    returnTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
    odometer: row.odometer || 0,
    userId: "",
    remark: "",
  };
  let userLists = await userListNoPage();
  userList.value = userLists.data || [];
  returnFormVisible.value = true;
};
// æäº¤è¿˜è½¦è¡¨å•
const submitReturnForm = () => {
  proxy.$refs["returnFormRef"].validate((valid) => {
    if (valid) {
      returnVehicle(returnForm.value).then((res) => {
        proxy.$modal.msgSuccess("还车成功");
        closeReturnDia();
        getList();
      });
    }
  });
};
// å…³é—­è¿˜è½¦å¼¹æ¡†
const closeReturnDia = () => {
  proxy.resetForm("returnFormRef");
  returnFormVisible.value = false;
  currentReturnRow.value = null;
};
// æŸ¥çœ‹ä½¿ç”¨è®°å½•
const viewUsageRecords = (row) => {
  currentVehicleId.value = row.id;
  usageRecordsPage.current = 1;
  getUsageRecords();
  usageRecordsVisible.value = true;
};
// èŽ·å–ä½¿ç”¨è®°å½•
const getUsageRecords = () => {
  usageRecordsLoading.value = true;
  getVehicleUsageRecords(usageRecordsPage, { vehicleId: currentVehicleId.value })
    .then((res) => {
      usageRecordsLoading.value = false;
      usageRecordsData.value = res.records || res.data || [];
      usageRecordsTotal.value = res.total || 0;
    })
    .catch(() => {
      usageRecordsLoading.value = false;
    });
};
// ä½¿ç”¨è®°å½•分页
const usageRecordsPaginationChange = (obj) => {
  usageRecordsPage.current = obj.page;
  usageRecordsPage.size = obj.limit;
  getUsageRecords();
};
// å…³é—­ä½¿ç”¨è®°å½•弹框
const closeUsageRecords = () => {
  usageRecordsVisible.value = false;
  usageRecordsData.value = [];
  currentVehicleId.value = null;
};
// å¯¼å‡º
const handleOut = () => {
  ElMessageBox.confirm("选中的内容将被导出,是否确认导出?", "导出", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      proxy.download("/vehicleManagement/export", {}, "车辆管理.xlsx");
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
// åˆ é™¤
const handleDelete = () => {
  let ids = [];
  if (selectedRows.value.length > 0) {
    ids = selectedRows.value.map((item) => item.id);
  } else {
    proxy.$modal.msgWarning("请选择数据");
    return;
  }
  ElMessageBox.confirm("选中的内容将被删除,是否确认删除?", "删除", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      delVehicle(ids).then((res) => {
        proxy.$modal.msgSuccess("删除成功");
        getList();
      });
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
onMounted(() => {
  getList();
});
</script>
<style scoped lang="scss">
.ml-10 {
  margin-left: 10px;
}
.table_list {
  margin-top: unset;
}
.actions {
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
}
</style>
src/views/index.vue
@@ -161,12 +161,14 @@
import Echarts from "@/components/Echarts/echarts.vue";
import * as echarts from 'echarts';
import useUserStore from "@/store/modules/user.js";
import { ElNotification } from 'element-plus'
import {
    analysisCustomerContractAmounts, getAmountHalfYear,
    getBusiness,
    homeTodos,
    qualityStatistics,
    statisticsReceivablePayable
    statisticsReceivablePayable,
    overdueReceivable
} from "@/api/viewIndex.js";
const userStore = useUserStore()
@@ -347,10 +349,31 @@
    getBusinessData()
    analysisCustomer()
    todoInfoS()
    notifyOverdueReceivable()
    statisticsReceivable()
    qualityStatisticsInfo()
    getAmountHalfYearNum()
})
// å¾…回款提醒
const notifyOverdueReceivable = async () => {
    try {
        const res = await overdueReceivable()
        const data = res.data
        if (data > 0) {
            ElNotification({
                title: '待回款提醒',
                message: `当前有${data}条待回款`,
                type: 'warning',
                duration: 6000,
            })
        }
    } catch (e) {
        // ä¸å½±å“é¦–页正常加载
        console.error('overdueReceivable error:', e)
    }
}
// æ•°æ®ç»Ÿè®¡
const getBusinessData = () => {
    getBusiness().then((res) => {
src/views/personnelManagement/contractManagement/components/formDia.vue
@@ -11,6 +11,7 @@
          :column="tableColumn"
          :tableData="tableData"
          :tableLoading="tableLoading"
          :showPagination="false"
          height="600"
      ></PIMTable>
      <template #footer>
src/views/personnelManagement/contractManagement/index.vue
@@ -74,7 +74,7 @@
import { onMounted, ref, reactive, toRefs, getCurrentInstance, nextTick } from "vue";
import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue";
import { ElMessageBox } from "element-plus";
import { staffOnJobListPage, staffOnJobExportCopy } from "@/api/personnelManagement/employeeRecord.js";
import { staffOnJobListPage } from "@/api/personnelManagement/employeeRecord.js";
import dayjs from "dayjs";
import { getToken } from "@/utils/auth.js";
import FilesDia from "./filesDia.vue";
@@ -183,7 +183,7 @@
    label: "操作",
    align: "center",
    fixed: 'right',
    width: 180,
    width: 130,
    operation: [
      {
        name: "详情",
@@ -197,13 +197,6 @@
        type: "text",
        clickFun: (row) => {
          openFilesFormDia(row);
        },
      },
      {
        name: "下载合同",
        type: "text",
        clickFun: (row) => {
          handleDownloadContract(row);
        },
      },
    ],
@@ -283,33 +276,6 @@
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
// ä¸‹è½½åˆåŒ
const handleDownloadContract = (row) => {
  const fileName = `${row.staffName || "合同"}劳动合同.docx`;
  proxy.$modal?.loading?.("正在生成合同,请稍候...");
  staffOnJobExportCopy({ ...row })
    .then((res) => {
      proxy.$modal?.closeLoading?.();
      if (res?.code === 200 && res?.msg) {
        const javaApi = proxy.javaApi || import.meta.env.VITE_JAVA_API || "";
        const downloadPath = res.msg.startsWith("/") ? res.msg : `/${res.msg}`;
        const downloadUrl = `${javaApi}${downloadPath}`;
        const link = document.createElement("a");
        link.href = downloadUrl;
        link.download = fileName;
        link.target = "_blank";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      } else {
        proxy.$modal.msgError(res?.msg || "合同生成失败");
      }
    })
    .catch(() => {
      proxy.$modal?.closeLoading?.();
      proxy.$modal.msgError("合同生成失败,请稍后重试");
    });
};
const upload = reactive({
src/views/personnelManagement/dimission/components/formDia.vue
@@ -13,7 +13,7 @@
          <el-col :span="12">
            <div class="info-item">
              <span class="info-label">姓名:</span>
              <el-select v-model="form.staffName" placeholder="请选择人员" style="width: 100%" @change="handleSelect">
              <el-select v-model="form.staffName" placeholder="请选择人员" style="width: 100%" @change="handleSelect" filterable>
                <el-option
                  v-for="item in personList"
                  :key="item.id"
@@ -112,7 +112,7 @@
          <el-col :span="12">
            <div class="info-item">
              <span class="info-label">合同结束日期:</span>
              <span class="info-value">{{ form.contractEndTime || '-' }}</span>
              <span class="info-value">{{ form.contractExpireTime || '-' }}</span>
            </div>
          </el-col>
        </el-row>
@@ -183,7 +183,7 @@
    emergencyContactPhone: "",
    contractTerm: 0,
    contractStartTime: "",
    contractEndTime: "",
    contractExpireTime: "",
    dimissionDate: "",
    dimissionReason: "",
    staffState: "",
@@ -245,7 +245,7 @@
    emergencyContactPhone: "",
    contractTerm: 0,
    contractStartTime: "",
    contractEndTime: "",
    contractExpireTime: "",
    dimissionDate: "",
    dimissionReason: "",
    staffState: "",
@@ -286,7 +286,7 @@
      emergencyContactPhone,
      contractTerm,
      contractStartTime,
      contractEndTime,
      contractExpireTime,
      staffName
    } = obj
    // ä¿ç•™ç¦»èŒæ—¥æœŸå’Œç¦»èŒåŽŸå› ï¼Œåªæ›´æ–°å‘˜å·¥ä¿¡æ¯
@@ -305,7 +305,7 @@
      emergencyContactPhone,
      contractTerm,
      contractStartTime,
      contractEndTime,
      contractExpireTime,
      staffName
    }
  }
src/views/personnelManagement/employeeRecord/components/formDia.vue
@@ -6,52 +6,53 @@
        width="70%"
        @close="closeDia"
    >
      <!-- æŒ‰ç…§å…¥èŒæ–°å¢žå¼¹çª—字段展示基础信息和合同信息 -->
      <el-descriptions class="detail-descriptions" :column="2" border size="small">
        <el-descriptions-item label="员工编号">{{ formData.staffNo || '-' }}</el-descriptions-item>
        <el-descriptions-item label="姓名">{{ formData.staffName || '-' }}</el-descriptions-item>
        <el-descriptions-item label="性别">{{ formData.sex || '-' }}</el-descriptions-item>
        <el-descriptions-item label="年龄">{{ formData.age || '-' }}</el-descriptions-item>
        <el-descriptions-item label="身份证号">{{ formData.identityCard || '-' }}</el-descriptions-item>
        <el-descriptions-item label="户籍住址" :span="2">{{ formData.nativePlace || '-' }}</el-descriptions-item>
        <el-descriptions-item label="现住址" :span="2">{{ formData.adress || '-' }}</el-descriptions-item>
        <el-descriptions-item label="岗位">{{ formData.postJob || '-' }}</el-descriptions-item>
        <el-descriptions-item label="第一学历">{{ formData.firstStudy || '-' }}</el-descriptions-item>
        <el-descriptions-item label="专业">{{ formData.profession || '-' }}</el-descriptions-item>
        <el-descriptions-item label="联系电话">{{ formData.phone || '-' }}</el-descriptions-item>
        <el-descriptions-item label="紧急联系人">{{ formData.emergencyContact || '-' }}</el-descriptions-item>
        <el-descriptions-item label="紧急联系人电话">{{ formData.emergencyContactPhone || '-' }}</el-descriptions-item>
        <el-descriptions-item label="合同签订日期">{{ formData.signDate || '-' }}</el-descriptions-item>
        <el-descriptions-item label="劳动合同期限选择">
          <span v-if="formData.dateSelect === 'A'">A、有固定期限</span>
          <span v-else-if="formData.dateSelect === 'B'">B、无固定期限</span>
          <span v-else-if="formData.dateSelect === 'C'">C、以完成一定工作任务为期限</span>
          <span v-else>-</span>
        <el-descriptions-item label="员工编号">
          {{ formData.staffNo || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="合同年限">{{ formattedContractTerm }}</el-descriptions-item>
        <el-descriptions-item label="试用期开始日期" v-if="formData.dateSelect === 'A' || formData.dateSelect === 'B'">
          {{ formData.trialStartDate || '-' }}
        <el-descriptions-item label="姓名">
          {{ formData.staffName || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="试用期结束日期" v-if="formData.dateSelect === 'A' || formData.dateSelect === 'B'">
          {{ formData.trialEndDate || '-' }}
        <el-descriptions-item label="性别">
          {{ formData.sex || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="试用期工资" v-if="formData.dateSelect === 'A' || formData.dateSelect === 'B'">
          {{ formData.proSalary ? formData.proSalary.toFixed(2) : '-' }}
        <el-descriptions-item label="年龄">
          {{ formData.age || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="合同开始日期">{{ calculatedContractStart }}</el-descriptions-item>
        <el-descriptions-item label="合同结束日期">{{ formData.contractEndTime || '-' }}</el-descriptions-item>
        <el-descriptions-item label="工资报酬" :span="2">
          <span v-if="formData.salarySelect === 'A'">
            A、乙方的工资报酬按照甲方依法制定的规章制度中的内部工资分配办法确定,根据乙方的工作岗位确定其每月工资。
          </span>
          <span v-else-if="formData.salarySelect === 'B'">
            B、甲方对乙方实行基本工资和绩效工资相结合的内部工资分配办法,乙方的收入包括基本工资、误餐、交通、生活住宿等各项补助,如有变动根据内部工资分配办法调整其工资;绩效工资根据乙方的工作业绩、劳动成果和实际贡献按照内部分配办法考核确定。
          </span>
          <span v-else-if="formData.salarySelect === 'C'">
            C、甲方实行计件工资制,以甲方接到订单及公司生产计划,按照定额和计件单价,根据乙方完成的业绩,按时足额支付乙方的工资报酬。
          </span>
          <span v-else>-</span>
        <el-descriptions-item label="户籍住址" :span="2">
          {{ formData.nativePlace || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="福利待遇" :span="2">{{ formData.remark || '-' }}</el-descriptions-item>
        <el-descriptions-item label="现住址" :span="2">
          {{ formData.adress || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="岗位">
          {{ formData.postJob || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="第一学历">
          {{ formData.firstStudy || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="专业">
          {{ formData.profession || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="联系电话">
          {{ formData.phone || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="紧急联系人">
          {{ formData.emergencyContact || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="紧急联系人电话">
          {{ formData.emergencyContactPhone || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="合同开始日期">
          {{ formData.contractStartTime || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="合同结束日期">
          {{ formData.contractExpireTime || '-' }}
        </el-descriptions-item>
        <el-descriptions-item label="合同年限">
          {{ formattedContractTerm }}
        </el-descriptions-item>
      </el-descriptions>
      <template #footer>
        <div class="dialog-footer">
@@ -90,7 +91,7 @@
  signDate: "",
  salarySelect: "",
  contractStartTime: "",
  contractEndTime: "",
  contractExpireTime: "",
  contractTerm: null,
  remark: "",
});
@@ -108,7 +109,7 @@
});
const calculatedContractStart = computed(() => {
  const endDate = formData.contractEndTime;
  const endDate = formData.contractExpireTime;
  const termValue = formData.contractTerm;
  const numberValue = Number(termValue);
  if (!endDate || isNaN(numberValue)) {
src/views/personnelManagement/onboarding/components/formDia.vue
@@ -83,11 +83,11 @@
              <el-input v-model="form.emergencyContactPhone" placeholder="请输入" clearable/>
            </el-form-item>
          </el-col>
<!--          <el-col :span="12">-->
<!--            <el-form-item label="合同年限:" prop="contractTermcontractTerm">-->
<!--              <el-input-number v-model="form.contractTerm" :precision="0" :step="1" style="width: 100%" :disabled="true"/>-->
<!--            </el-form-item>-->
<!--          </el-col>-->
         <el-col :span="12">
           <el-form-item label="合同年限:" prop="contractTerm">
             <el-input-number v-model="form.contractTerm" :precision="0" :step="1" style="width: 100%" :disabled="true"/>
           </el-form-item>
         </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
@@ -100,6 +100,7 @@
                  format="YYYY-MM-DD"
                  clearable
                  style="width: 100%"
                  @change="calculateContractTerm"
              />
            </el-form-item>
          </el-col>
@@ -113,6 +114,7 @@
                  format="YYYY-MM-DD"
                  clearable
                  style="width: 100%"
                  @change="calculateContractTerm"
              />
            </el-form-item>
          </el-col>
@@ -129,7 +131,7 @@
</template>
<script setup>
import {ref} from "vue";
import {ref, reactive, toRefs, getCurrentInstance} from "vue";
import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
@@ -183,8 +185,28 @@
    getStaffJoinInfo(row.id).then(res => {
      form.value = {...res.data}
      // ç¼–辑时也计算一次合同年限
      // calculateContractTerm();
      calculateContractTerm();
    })
  } else {
    // æ–°å¢žæ—¶é‡ç½®è¡¨å•
    form.value = {
      staffNo: "",
      staffName: "",
      sex: "",
      nativePlace: "",
      postJob: "",
      adress: "",
      firstStudy: "",
      profession: "",
      age: 0,
      phone: "",
      emergencyContact: "",
      emergencyContactPhone: "",
      contractTerm: 0,
      contractStartTime: "",
      contractEndTime: "",
      staffState: "",
    };
  }
}
// æäº¤äº§å“è¡¨å•
@@ -212,7 +234,7 @@
    const startDate = new Date(form.value.contractStartTime);
    const endDate = new Date(form.value.contractEndTime);
    
    if (endDate > startDate) {
    if (endDate >= startDate) {
      // è®¡ç®—年份差
      const yearDiff = endDate.getFullYear() - startDate.getFullYear();
      const monthDiff = endDate.getMonth() - startDate.getMonth();
src/views/personnelManagement/onboarding/index.vue
@@ -57,8 +57,8 @@
<script setup>
import { Search } from "@element-plus/icons-vue";
import {onMounted, ref} from "vue";
// import FormDia from "@/views/personnelManagement/onboarding/components/formDia.vue";
import FormDia from "@/views/personnelManagement/onboarding/components/formDiaXJHT.vue"; // æ–°ç–†é£Ÿå“å…¬å¸ç”¨çš„表单
import FormDia from "@/views/personnelManagement/onboarding/components/formDia.vue";
// import FormDia from "@/views/personnelManagement/onboarding/components/formDiaXJHT.vue"; // æ–°ç–†é£Ÿå“å…¬å¸ç”¨çš„表单
import {staffJoinDel, staffJoinListPage} from "@/api/personnelManagement/onboarding.js";
import {ElMessageBox} from "element-plus";
import dayjs from "dayjs";
src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -24,16 +24,6 @@
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="项目名称:" prop="projectName">
            <el-input
              v-model="form.projectName"
              placeholder="自动填充"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="发票号:" prop="invoiceNumber">
            <el-input
              v-model="form.invoiceNumber"
@@ -197,7 +187,6 @@
  purchaseLedgerNo: undefined, // é‡‡è´­åˆåŒå·
  salesContractNo: undefined, // é”€å”®åˆåŒå·
  supplierName: undefined, // ä¾›åº”商名称
  projectName: undefined, // é¡¹ç›®åç§°
  invoiceNumber: undefined, // å‘票号
  invoiceAmount: undefined, // å‘票金额(元)
  issUerId: userStore.id, // å½•入人
@@ -370,7 +359,6 @@
              id: contractId, // æ˜Žç¡®è®¾ç½®åˆåŒID
              purchaseLedgerNo: contract.purchaseContractNumber, // æ·»åŠ é‡‡è´­åˆåŒå·
              supplierName: contract.supplierName, // æ·»åŠ ä¾›åº”å•†åç§°
              projectName: contract.projectName // æ·»åŠ é¡¹ç›®åç§°
            });
          });
        }
@@ -383,7 +371,6 @@
      form.entryDate = dayjs().format("YYYY-MM-DD");
      form.enterDate = dayjs().format("YYYY-MM-DD");
      form.salesContractNo = results[0].data.salesContractNo;
      form.projectName = results[0].data.projectName;
      form.supplierName = results[0].data.supplierName;
      // ä¿ç•™å½•入人信息
      form.issUerId = userStore.id;
@@ -530,7 +517,6 @@
          purchaseContractNumber: contract.purchaseContractNumber, // ä½¿ç”¨å®žé™…的采购合同号
          salesContractNo: contract.salesContractNo, // ä½¿ç”¨å®žé™…的销售合同号
          supplierName: contract.supplierName, // ä½¿ç”¨å®žé™…的供应商名称
          projectName: contract.projectName, // ä½¿ç”¨å®žé™…的项目名称
          
          // äº§å“æ•°æ®
          productData: proxy.HaveJson(contractProductData),
src/views/procurementManagement/invoiceEntry/index.vue
@@ -28,13 +28,6 @@
              clearable
          />
        </el-form-item>
        <el-form-item label="项目名称">
          <el-input
              v-model="filters.projectName"
              placeholder="请输入项目名称"
              clearable
          />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="getTableData"> æœç´¢ </el-button>
          <el-button @click="resetFilters"> é‡ç½® </el-button>
@@ -142,11 +135,6 @@
      label: "供应商名称",
      prop: "supplierName",
      width:300
    },
    {
      label: "项目名称",
      prop: "projectName",
      width:400
    },
    {
      label: "录入人",
src/views/procurementManagement/invoiceEntry/indexOld.vue
@@ -105,11 +105,6 @@
          show-overflow-tooltip
        />
        <el-table-column
          label="项目名称"
          prop="projectName"
          show-overflow-tooltip
        />
        <el-table-column
          label="合同金额(元)"
          prop="contractAmount"
          show-overflow-tooltip
@@ -189,16 +184,6 @@
            <el-form-item label="供应商名称:" prop="supplierName">
              <el-input
                v-model="form.supplierName"
                placeholder="自动填充"
                clearable
                disabled
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="项目名称:" prop="projectName">
              <el-input
                v-model="form.projectName"
                placeholder="自动填充"
                clearable
                disabled
src/views/procurementManagement/paymentEntry/index.vue
@@ -28,7 +28,7 @@
          <el-col :span="4">
            <el-form-item style="float: right; margin-right: unset">
              <el-button @click="handleExport" style="margin-right: 10px">导出</el-button>
              <el-button type="primary" @click="openForm('add')">
              <el-button type="primary" @click="openForm()">
                æ–°å¢žä»˜æ¬¾
              </el-button>
<!--              <el-button type="danger" plain @click="handleDelete">-->
@@ -132,132 +132,68 @@
    </div>
    <el-dialog
      v-model="dialogFormVisible"
      :title="operationType === 'add' ? '新增付款登记' : '编辑付款登记'"
      width="60%"
      title="新增付款登记"
      width="80%"
      @close="closeDia"
    >
      <el-form
        :model="form"
        label-width="140px"
        label-position="top"
        :rules="rules"
        ref="formRef"
      >
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="采购合同号:" prop="purchaseContractNumber">
              <el-input
                v-model="form.purchaseContractNumber"
                placeholder="自动填充"
                clearable
                disabled
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="销售合同号:" prop="salesContractNo">
              <el-input
                v-model="form.salesContractNo"
                placeholder="自动填充"
                clearable
                disabled
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="供应商名称:" prop="supplierName">
              <el-input
                v-model="form.supplierName"
                placeholder="自动填充"
                clearable
                disabled
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="发票号:" prop="invoiceNumber">
              <el-input
                v-model="form.invoiceNumber"
                placeholder="自动填充"
                clearable
                disabled
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="发票金额(元):" prop="invoiceAmount">
              <el-input
                v-model="form.invoiceAmount"
                placeholder="自动填充"
                clearable
                disabled
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="本次付款金额:" prop="currentPaymentAmount">
              <el-input-number :step="0.01" :min="0" style="width: 100%"
                                                             :precision="2"
                v-model="form.currentPaymentAmount"
                placeholder="请输入"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="付款方式:" prop="paymentMethod">
              <el-select
                v-model="form.paymentMethod"
                placeholder="请选择"
                clearable
              >
                <el-option label="电汇" value="电汇" />
                <el-option label="承兑" value="承兑" />
              </el-select>
            </el-form-item>
          </el-col>
                    <el-col :span="12">
                        <el-form-item label="付款日期:" prop="paymentDate">
                            <el-date-picker
                                style="width: 100%"
                                v-model="form.paymentDate"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                                placeholder="请选择"
                                clearable
                            />
                        </el-form-item>
                    </el-col>
        </el-row>
        <el-row :gutter="30">
                    <el-col :span="12">
                        <el-form-item label="登记人:" prop="registrant">
                            <el-input
                                v-model="form.registrant"
                                placeholder="请输入"
                                clearable
                                disabled
                            />
                        </el-form-item>
                    </el-col>
          <el-col :span="12">
            <el-form-item label="登记日期:" prop="registrationtDate">
              <el-input
                v-model="form.registrationtDate"
                placeholder="请输入"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <el-table :data="dialogTableData" border style="width: 100%" max-height="500px">
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column label="采购合同号" prop="purchaseContractNumber" show-overflow-tooltip width="200" />
        <el-table-column label="供应商名称" prop="supplierName" show-overflow-tooltip width="200" />
        <el-table-column label="发票号" prop="invoiceNumber" show-overflow-tooltip width="180" />
        <el-table-column label="发票金额(元)" prop="invoiceAmount" width="150">
          <template #default="{ row }">
            {{ row.invoiceAmount ? parseFloat(row.invoiceAmount).toFixed(2) : "0.00" }}
          </template>
        </el-table-column>
        <el-table-column label="待付款金额(元)" prop="unPaymentAmountTotal" width="150">
          <template #default="{ row }">
            <el-text type="danger">
              {{ row.unPaymentAmountTotal ? parseFloat(row.unPaymentAmountTotal).toFixed(2) : "0.00" }}
            </el-text>
          </template>
        </el-table-column>
        <el-table-column label="本次付款金额(元)" width="180">
          <template #default="scope">
            <el-input-number
              :step="0.01"
              :min="0"
              :max="Number(scope.row.unPaymentAmountTotal || 0)"
              style="width: 100%"
              :precision="2"
              v-model="scope.row.currentPaymentAmount"
              placeholder="请输入"
              clearable
            />
          </template>
        </el-table-column>
        <el-table-column label="付款方式" width="150">
          <template #default="scope">
            <el-select v-model="scope.row.paymentMethod" placeholder="请选择" clearable style="width: 100%">
              <el-option label="电汇" value="电汇" />
              <el-option label="承兑" value="承兑" />
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="付款日期" width="180">
          <template #default="scope">
            <el-date-picker
              style="width: 100%"
              v-model="scope.row.paymentDate"
              value-format="YYYY-MM-DD"
              format="YYYY-MM-DD"
              type="date"
              placeholder="请选择"
              clearable
            />
          </template>
        </el-table-column>
        <el-table-column label="登记人" width="120">
          <template #default="scope">
            <el-input v-model="scope.row.registrant" placeholder="自动填充" disabled />
          </template>
        </el-table-column>
      </el-table>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitForm">确认</el-button>
@@ -274,11 +210,7 @@
import { ElMessageBox } from "element-plus";
import useUserStore from "@/store/modules/user.js";
import {
  byPurchaseId,
  paymentRegistrationAdd,
  paymentRegistrationDel,
  paymentRegistrationEdit,
  getTicketNo,
} from "@/api/procurementManagement/paymentEntry.js";
import {
    delPaymentRegistration,
@@ -365,9 +297,9 @@
    total: 0,
});
// ç”¨æˆ·ä¿¡æ¯è¡¨å•弹框数据
const operationType = ref("");
// å¼¹æ¡†æ•°æ®
const dialogFormVisible = ref(false);
const dialogTableData = ref([]);
const data = reactive({
  searchForm: {
    supplierNameOrContractNo: "",
@@ -491,7 +423,8 @@
        currentPaymentAmount: row.currentPaymentAmount,
        paymentMethod: row.paymentMethod,
    };
    updatePaymentRegistration(updateData).then((res) => {
    // å­è¡¨ç¼–辑保存按数组提交(与批量登记保持一致)
    updatePaymentRegistration([updateData]).then(() => {
        row.editType = !row.editType;
        getList();
        proxy.$modal.msgSuccess("提交成功");
@@ -502,57 +435,117 @@
  selectedRows.value = selection;
};
// æ‰“开弹框
const openForm = (type, row) => {
  if (selectedRows.value.length !== 1) {
    proxy.$message.error("请选择一条发票数据");
const openForm = () => {
  // è‡³å°‘选择一条数据
  if (selectedRows.value.length === 0) {
    proxy.$modal?.msgError ? proxy.$modal.msgError("请选择数据") : proxy.$message.error("请选择数据");
    return;
  }
    if (selectedRows.value[0].unPaymentAmountTotal == 0) {
        proxy.$message.warning("无需再付款");
        return;
    }
  operationType.value = type;
  form.value = {};
  form.value = { ...selectedRows.value[0] };
  form.value.ticketRegistrationId = selectedRows.value[0].id;
  form.value.id = null;
  // æŸ¥è¯¢é‡‡è´­åˆåŒå·
  form.value.registrationtDate = getCurrentDate();
  form.value.paymentDate = getCurrentDate();
  form.value.registrant = userStore.name;
  // æ ¡éªŒæ˜¯å¦ä¸ºç›¸åŒä¾›åº”商名称
  const firstSupplierName = selectedRows.value[0].supplierName;
  const isSameSupplier = selectedRows.value.every(
    (item) => item.supplierName === firstSupplierName
  );
  if (!isSameSupplier) {
    proxy.$modal?.msgError
      ? proxy.$modal.msgError("请选择相同供应商名称的数据进行付款登记")
      : proxy.$message.error("请选择相同供应商名称的数据进行付款登记");
    return;
  }
  // è¿‡æ»¤å‡ºæœ‰å¾…付款金额的记录
  const validRows = selectedRows.value.filter(
    (item) => Number(item.unPaymentAmountTotal) > 0
  );
  if (validRows.length === 0) {
    proxy.$modal?.msgWarning
      ? proxy.$modal.msgWarning("所选数据均无需再付款")
      : proxy.$message.warning("所选数据均无需再付款");
    return;
  }
  const today = getCurrentDate();
  dialogTableData.value = validRows.map((row) => {
    return {
      ...row,
      // åŽç«¯å…³è”“来票台账/登记单”的字段(原逻辑:ticketRegistrationId = row.id)
      ticketRegistrationId: row.id,
      id: null,
      currentPaymentAmount: row.unPaymentAmountTotal || "",
      paymentMethod: "",
      paymentDate: today,
      registrationtDate: today,
      registrant: userStore.nickName || userStore.name,
    };
  });
  dialogFormVisible.value = true;
};
// æäº¤è¡¨å•
const submitForm = () => {
  proxy.$refs["formRef"].validate((valid) => {
    if (valid) {
      if (operationType.value === "edit") {
        submitEdit();
      } else {
        submitAdd();
      }
    }
  // æ ¡éªŒè¡¨æ ¼æ•°æ®
  const invalidRows = dialogTableData.value.filter((row) => {
    return (
      !row.currentPaymentAmount ||
      Number(row.currentPaymentAmount) <= 0 ||
      !row.paymentMethod ||
      !row.paymentDate
    );
  });
};
// æäº¤æ–°å¢ž
const submitAdd = () => {
  paymentRegistrationAdd(form.value).then((res) => {
    proxy.$modal.msgSuccess("提交成功");
    closeDia();
    getList();
  if (invalidRows.length > 0) {
    proxy.$modal?.msgError
      ? proxy.$modal.msgError("请完善所有必填项:付款金额、付款方式、付款日期")
      : proxy.$message.error("请完善所有必填项:付款金额、付款方式、付款日期");
    return;
  }
  // æ ¡éªŒä»˜æ¬¾é‡‘额不能超过待付款金额
  const exceedRows = dialogTableData.value.filter((row) => {
    return Number(row.currentPaymentAmount) > Number(row.unPaymentAmountTotal);
  });
};
// æäº¤ä¿®æ”¹
const submitEdit = () => {
  paymentRegistrationEdit(form.value).then((res) => {
    proxy.$modal.msgSuccess("提交成功");
    closeDia();
    getList();
  if (exceedRows.length > 0) {
    proxy.$modal?.msgError
      ? proxy.$modal.msgError("付款金额不能超过待付款金额")
      : proxy.$message.error("付款金额不能超过待付款金额");
    return;
  }
  // ç»„装数组批量提交(如果后端不支持数组,会走兜底循环提交)
  const submitDataList = dialogTableData.value.map((row) => {
    return {
      ticketRegistrationId: row.ticketRegistrationId,
      purchaseLedgerId: row.purchaseLedgerId,
      purchaseContractNumber: row.purchaseContractNumber,
      salesContractNo: row.salesContractNo,
      supplierName: row.supplierName,
      invoiceNumber: row.invoiceNumber,
      invoiceAmount: row.invoiceAmount,
      taxRate: row.taxRate,
      currentPaymentAmount: row.currentPaymentAmount,
      paymentMethod: row.paymentMethod,
      paymentDate: row.paymentDate,
      registrant: row.registrant,
      registrationtDate: row.registrationtDate,
      id: null,
    };
  });
  paymentRegistrationAdd(submitDataList)
    .then(() => {
      proxy.$modal?.msgSuccess
        ? proxy.$modal.msgSuccess("提交成功")
        : proxy.$message.success("提交成功");
      closeDia();
      getList();
    })
    .catch((e) => {
      console.error("提交失败:", e);
    });
};
// å…³é—­å¼¹æ¡†
const closeDia = () => {
  proxy.resetForm("formRef");
  dialogTableData.value = [];
  dialogFormVisible.value = false;
};
// åˆ é™¤
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -162,11 +162,6 @@
      width: 150,
    },
    {
      label: "项目名称",
      prop: "projectName",
      width: 240,
    },
    {
      label: "供应商名称",
      prop: "supplierName",
      width: 240,
src/views/procurementManagement/procurementLedger/index.vue
@@ -21,10 +21,6 @@
            <el-input v-model="searchForm.salesContractNo" placeholder="请输入" clearable prefix-icon="Search"
                      @change="handleQuery" />
          </el-form-item>
          <el-form-item label="项目名称:">
            <el-input v-model="searchForm.projectName" placeholder="请输入" clearable prefix-icon="Search"
                      @change="handleQuery" />
          </el-form-item>
          <el-form-item label="录入日期:">
            <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
                            placeholder="请选择" clearable @change="changeDaterange" />
@@ -109,12 +105,6 @@
          label="供应商名称"
          width="240"
          prop="supplierName"
          show-overflow-tooltip
        />
        <el-table-column
          label="项目名称"
          prop="projectName"
          width="420"
          show-overflow-tooltip
        />
        <el-table-column
@@ -229,15 +219,6 @@
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="项目名称:" prop="projectName">
              <el-input
                v-model="form.projectName"
                placeholder="请输入"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
                <el-row :gutter="30">
                    <el-col :span="12">
@@ -297,8 +278,8 @@
          <el-col :span="12">
            <el-form-item label="是否开票" prop="isInvoice">
              <el-select v-model="form.isInvoice" placeholder="请选择" clearable>
                <el-option label="是" value="1" />
                <el-option label="否" value="2" />
                <el-option label="是" :value="1" />
                <el-option label="否" :value="2" />
              </el-select>
            </el-form-item>
          </el-col>
@@ -604,11 +585,6 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="项目名称:">
              <el-input v-model="scanForm.projectName" disabled />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="扫码时间:">
              <el-input v-model="scanForm.scanTime" disabled />
            </el-form-item>
@@ -727,7 +703,6 @@
    supplierName: "", // ä¾›åº”商名称
    purchaseContractNumber: "", // é‡‡è´­åˆåŒç¼–号
    salesContractNo: "", // é”€å”®åˆåŒç¼–号
    projectName: "", // é¡¹ç›®åç§°
    entryDate: null, // å½•入日期
    entryDateStart: undefined,
    entryDateEnd: undefined,
src/views/salesManagement/invoiceRegistration/index.vue
@@ -563,7 +563,8 @@
        result.productData.forEach(item => {
          allProductData.push({
            ...item,
            id: contractId, // æ˜Žç¡®è®¾ç½®åˆåŒID
            // ä¿ç•™åŽŸæœ‰äº§å“ id,不再覆盖;额外挂上所属合同 id
            salesLedgerId: contractId,
            salesContractNo: contract.salesContractNo, // æ·»åŠ é”€å”®åˆåŒå·
            customerName: contract.customerName, // æ·»åŠ å®¢æˆ·åç§°
            customerContractNo: contract.customerContractNo // æ·»åŠ å®¢æˆ·åˆåŒå·
@@ -592,8 +593,8 @@
    if (valid) {
      // ç»Ÿä¸€å°†æ‰€æœ‰åˆåŒçš„æ•°æ®æ”¾åœ¨ä¸€ä¸ªæ•°ç»„里,单个和批量都使用数组格式
      const submitData = selectedRows.value.map(contract => {
        // ç­›é€‰å‡ºå±žäºŽå½“前合同的产品数据
        const contractProductData = productData.value.filter(item =>
        // ç­›é€‰å‡ºå±žäºŽå½“前合同的产品数据(根据 salesLedgerId å…³è”合同)
        const contractProductData = productData.value.filter(item =>
          item.salesLedgerId === contract.id
        );
        
src/views/salesManagement/receiptPayment/index.vue
@@ -205,125 +205,125 @@
    <el-dialog
      v-model="dialogFormVisible"
      title="新增回款页面"
      width="70%"
      width="90%"
      @close="closeDia"
    >
      <el-form
        :model="form"
        label-width="140px"
        label-position="top"
        :rules="rules"
        ref="formRef"
      <el-table
        :data="dialogTableData"
        border
        style="width: 100%"
        max-height="500px"
      >
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="销售合同号:" prop="salesContractNo">
              <el-input
                v-model="form.salesContractNo"
                placeholder="自动填充"
                disabled
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column
          label="销售合同号"
          prop="salesContractNo"
          show-overflow-tooltip
          width="200"
        />
        <el-table-column
          label="客户名称"
          prop="customerName"
          show-overflow-tooltip
          width="200"
        />
        <el-table-column
          label="产品大类"
          prop="productCategory"
          show-overflow-tooltip
          width="120"
        />
        <el-table-column
          label="规格型号"
          prop="specification"
          show-overflow-tooltip
          width="150"
        />
        <el-table-column
          label="发票号"
          prop="invoiceNo"
          show-overflow-tooltip
          width="180"
        />
        <el-table-column
          label="发票金额(元)"
          prop="invoiceTotal"
          show-overflow-tooltip
          :formatter="formattedNumber"
          width="150"
        />
        <el-table-column
          label="税率(%)"
          prop="taxRate"
          show-overflow-tooltip
          width="100"
        />
        <el-table-column
          label="待回款金额(元)"
          prop="noReceiptAmount"
          show-overflow-tooltip
          width="150"
        >
          <template #default="{ row }">
            <el-text type="danger">
              {{ formattedNumber(row, null, row.noReceiptAmount) }}
            </el-text>
          </template>
        </el-table-column>
        <el-table-column label="本次回款金额(元)" width="180">
          <template #default="scope">
            <el-input-number
              :step="0.01"
              :min="0"
              :max="scope.row.noReceiptAmount"
              style="width: 100%"
              :precision="2"
              v-model="scope.row.receiptPaymentAmount"
              placeholder="请输入"
              clearable
            />
          </template>
        </el-table-column>
        <el-table-column label="回款方式" width="150">
          <template #default="scope">
            <el-select
              v-model="scope.row.receiptPaymentType"
              placeholder="请选择"
              clearable
              style="width: 100%"
            >
              <el-option
                v-for="item in receipt_payment_type"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="客户名称:" prop="customerName">
              <el-input
                v-model="form.customerName"
                placeholder="自动填充"
                disabled
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="发票号:" prop="invoiceNo">
              <el-input
                v-model="form.invoiceNo"
                placeholder="自动填充"
                disabled
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="发票金额(元):" prop="invoiceTotal">
              <el-input
                type="number"
                v-model="form.invoiceTotal"
                placeholder="自动填充"
                :step="0.01"
                disabled
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="税率:" prop="taxRate">
              <el-input
                type="number"
                v-model="form.taxRate"
                placeholder="自动填充"
                :step="0.01"
                disabled
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="本次回款金额:" prop="receiptPaymentAmount">
              <el-input-number :step="0.01" :min="0" style="width: 100%"
                                                             :precision="2"
                v-model="form.receiptPaymentAmount"
                placeholder="请输入"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="回款形式:" prop="receiptPaymentType">
              <el-select
                v-model="form.receiptPaymentType"
                placeholder="请选择"
                clearable
              >
                <el-option
                  v-for="item in receipt_payment_type"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-select>
            </el-form-item>
          </el-col>
                    <el-col :span="12">
                        <el-form-item label="回款日期:" prop="receiptPaymentDate">
                            <el-date-picker
                                style="width: 100%"
                                v-model="form.receiptPaymentDate"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                                placeholder="请选择"
                                clearable
                            />
                        </el-form-item>
                    </el-col>
        </el-row>
        <el-row :gutter="30">
                    <el-col :span="12">
                        <el-form-item label="登记人:" prop="registrant">
                            <el-input
                                v-model="form.registrant"
                                placeholder="请输入"
                                clearable
                                disabled
                            />
                        </el-form-item>
                    </el-col>
        </el-row>
      </el-form>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="回款日期" width="180">
          <template #default="scope">
            <el-date-picker
              style="width: 100%"
              v-model="scope.row.receiptPaymentDate"
              value-format="YYYY-MM-DD"
              format="YYYY-MM-DD"
              type="date"
              placeholder="请选择"
              clearable
            />
          </template>
        </el-table-column>
        <el-table-column label="登记人" width="120">
          <template #default="scope">
            <el-input
              v-model="scope.row.registrant"
              placeholder="自动填充"
              disabled
            />
          </template>
        </el-table-column>
      </el-table>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitForm">确认</el-button>
@@ -340,7 +340,6 @@
import {
  receiptPaymentSaveOrUpdate,
  bindInvoiceNoRegPage,
  invoiceInfo,
  receiptPaymentHistoryListNoPage,
  receiptPaymentDel,
} from "../../../api/salesManagement/receiptPayment.js";
@@ -362,6 +361,7 @@
// ç”¨æˆ·ä¿¡æ¯è¡¨å•弹框数据
const dialogFormVisible = ref(false);
const dialogTableData = ref([]);
const data = reactive({
  searchForm: {
    searchText: "",
@@ -490,38 +490,97 @@
};
// æ‰“开弹框
const openForm = () => {
  form.value = {};
  if (selectedRows.value.length !== 1) {
    proxy.$modal.msgError("请选择一条数据");
  // è‡³å°‘选择一条数据
  if (selectedRows.value.length === 0) {
    proxy.$modal.msgError("请选择数据");
    return;
  }
  if (selectedRows.value[0].noReceiptAmount == 0) {
    proxy.$modal.msgWarning("无需再回款");
  // æ ¡éªŒæ˜¯å¦ä¸ºç›¸åŒé”€å”®åˆåŒå·
  const firstContractNo = selectedRows.value[0].salesContractNo;
  const isSameContract = selectedRows.value.every(
    (item) => item.salesContractNo === firstContractNo
  );
  if (!isSameContract) {
    proxy.$modal.msgError("请选择相同销售合同号的数据进行回款");
    return;
  }
  invoiceInfo({ id: selectedRows.value[0].id }).then((res) => {
    form.value = { ...res.data };
    form.value.invoiceLedgerId = form.value.id;
    form.value.id = "";
    form.value.registrant = userStore.nickName;
  // è¿‡æ»¤å‡ºæœ‰å¾…回款金额的记录
  const validRows = selectedRows.value.filter(
    (item) => Number(item.noReceiptAmount) > 0
  );
  if (validRows.length === 0) {
    proxy.$modal.msgWarning("所选数据均无需再回款");
    return;
  }
  // ç›´æŽ¥ä½¿ç”¨å¤–部表格数据,为每条记录添加回款相关字段
  dialogTableData.value = validRows.map((row) => {
    return {
      ...row,
      invoiceLedgerId: row.id,
      receiptPaymentAmount: row.noReceiptAmount || "",
      receiptPaymentType: "",
      receiptPaymentDate: "",
      registrant: userStore.nickName,
    };
  });
  dialogFormVisible.value = true;
};
// æäº¤è¡¨å•
const submitForm = () => {
  proxy.$refs["formRef"].validate((valid) => {
    if (valid) {
      receiptPaymentSaveOrUpdate(form.value).then((res) => {
        proxy.$modal.msgSuccess("提交成功");
        closeDia();
        getList();
      });
    }
  // æ ¡éªŒè¡¨æ ¼æ•°æ®
  const invalidRows = dialogTableData.value.filter((row) => {
    return (
      !row.receiptPaymentAmount ||
      row.receiptPaymentAmount <= 0 ||
      !row.receiptPaymentType ||
      !row.receiptPaymentDate
    );
  });
  if (invalidRows.length > 0) {
    proxy.$modal.msgError("请完善所有必填项:回款金额、回款方式、回款日期");
    return;
  }
  // æ ¡éªŒå›žæ¬¾é‡‘额不能超过待回款金额
  const exceedRows = dialogTableData.value.filter((row) => {
    return Number(row.receiptPaymentAmount) > Number(row.noReceiptAmount);
  });
  if (exceedRows.length > 0) {
    proxy.$modal.msgError("回款金额不能超过待回款金额");
    return;
  }
  // ç»„合成数组批量提交
  const submitDataList = dialogTableData.value.map((row) => {
    return {
      invoiceLedgerId: row.invoiceLedgerId,
      receiptPaymentAmount: row.receiptPaymentAmount,
      receiptPaymentType: row.receiptPaymentType,
      receiptPaymentDate: row.receiptPaymentDate,
      registrant: row.registrant,
    };
  });
  receiptPaymentSaveOrUpdate(submitDataList)
    .then(() => {
      proxy.$modal.msgSuccess("提交成功");
      closeDia();
      getList();
    })
    .catch((error) => {
      console.error("提交失败:", error);
      proxy.$modal.msgError("提交失败,请重试");
    });
};
// å…³é—­å¼¹æ¡†
const closeDia = () => {
  proxy.resetForm("formRef");
  dialogTableData.value = [];
  dialogFormVisible.value = false;
};
@@ -562,7 +621,8 @@
    receiptPaymentType: row.receiptPaymentType,
    receiptPaymentAmount: row.receiptPaymentAmount,
  };
  receiptPaymentSaveOrUpdate(updateData).then((res) => {
  // å­è¡¨ç¼–辑保存也按数组提交(与批量新增保持一致)
  receiptPaymentSaveOrUpdate([updateData]).then((res) => {
    row.editType = !row.editType;
        getList();
        proxy.$modal.msgSuccess("提交成功");
src/views/salesManagement/receiptPaymentHistory/index.vue
@@ -84,13 +84,10 @@
    prop: "receiptPaymentType",
    dataType: "tag",
    formatData: (params) => {
      if (params == 0) {
        return "电汇";
      } else if (params == 1) {
        return "承兑";
      } else {
        return null;
      }
      const dictItem = receipt_payment_type.value?.find(
        (item) => item.value == params
      );
      return dictItem ? dictItem.label : null;
    },
    formatType: (params) => {
      return "info";
src/views/salesManagement/salesLedger/index.vue
@@ -137,8 +137,8 @@
          <el-col :span="12">
            <el-form-item label="是否开票" prop="isInvoice">
              <el-select v-model="form.isInvoice" placeholder="请选择" clearable>
                <el-option label="是" value="1" />
                <el-option label="否" value="2" />
                <el-option label="是" :value="1" />
                <el-option label="否" :value="2" />
              </el-select>
            </el-form-item>
          </el-col>