曹睿
5 天以前 67acb740390947f2e7cc3834785828ebf9755310
feat: 【设备保养】添加设备保养模块,完成相关crud
已修改9个文件
已添加6个文件
747 ■■■■■ 文件已修改
src/api/equipmentManagement/upkeep.js 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/paymentEntry.js 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Form/MaintainForm.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Form/PlanForm.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Modal/PlanModal.vue 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/index.vue 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/projectProfit/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/taxComparison/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceLedger/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceRegistration/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/equipmentManagement/upkeep.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
import request from "@/utils/request";
/**
 * @desc è®¾å¤‡ä¿å…»åˆ—表分页查询
 * @param {分页查询入参} params
 * @returns
 */
export const getUpkeepPage = (params) => {
  return request({
    url: "/device/maintenance/page",
    method: "get",
    params,
  });
};
/**
 * @desc è®¾å¤‡ä¿å…»è¯¦æƒ…
 * @param {保养但编号} id
 * @returns
 */
export const getUpkeepById = (id) => {
  return request({
    url: `/device/maintenance/${id}`,
    method: "get",
  });
};
/**
 * @desc è®¾å¤‡ä¿å…»æ–°å¢ž
 * @param {新增保养表单} data
 * @returns
 */
export const addUpkeep = (data) => {
  return request({
    url: "/device/maintenance",
    method: "post",
    data,
  });
};
/**
 * @desc è®¾å¤‡ä¿å…»ç¼–辑
 * @param {编辑保养表单} data
 * @returns
 */
export const editUpkeep = (data) => {
  return request({
    url: "/device/maintenance",
    method: "put",
    data,
  });
};
/**
 * @desc æ–°å¢žä¿å…»è¡¨å•
 * @param {新增保养表单} data
 * @returns
 */
export const addMaintenance = (data) => {
  return request({
    url: "/device/maintenance/maintenance",
    method: "post",
    data,
  });
};
export const delUpkeep = (id) => {
  return request({
    url: `/device/maintenance/${id}`,
    method: "delete",
  });
};
src/api/procurementManagement/paymentEntry.js
@@ -1,81 +1,81 @@
// é‡‡è´­ä»˜æ¬¾ç™»è®°é¡µé¢æŽ¥å£
import request from '@/utils/request'
import request from "@/utils/request";
// åˆ†é¡µæŸ¥è¯¢
export function registrationList(query) {
    return request({
        url: '/purchase/paymentRegistration/list',
        method: 'get',
        params: query
    })
  return request({
    url: "/purchase/paymentRegistration/list",
    method: "get",
    params: query,
  });
}
// æŸ¥è¯¢è¯¦æƒ…
export function registrationInfo(query) {
    return request({
        url: '/purchase/paymentRegistration/' + query,
        method: 'get',
    })
  return request({
    url: "/purchase/paymentRegistration/" + query,
    method: "get",
  });
}
// æ ¹æ®é‡‡è´­åˆåŒå·æŸ¥è¯¢è¯¦æƒ…
export function byPurchaseId(query) {
    return request({
        url: '/purchase/paymentRegistration/byPurchaseId/' + query,
        method: 'get',
    })
  return request({
    url: "/purchase/paymentRegistration/byPurchaseId/" + query,
    method: "get",
  });
}
// æŸ¥è¯¢é‡‡è´­åˆåŒå·
export function getPurchaseNo() {
    return request({
        url: '/purchase/ledger/getPurchaseNo',
        method: 'get',
    })
  return request({
    url: "/purchase/ledger/getPurchaseNo",
    method: "get",
  });
}
// æ–°å¢ž
export function paymentRegistrationAdd(query) {
    return request({
        url: '/purchase/paymentRegistration',
        method: 'post',
        data: query
    })
  return request({
    url: "/purchase/paymentRegistration",
    method: "post",
    data: query,
  });
}
// ä¿®æ”¹
export function paymentRegistrationEdit(query) {
    return request({
        url: '/purchase/paymentRegistration',
        method: 'put',
        data: query
    })
  return request({
    url: "/purchase/paymentRegistration",
    method: "put",
    data: query,
  });
}
// åˆ é™¤
export function paymentRegistrationDel(query) {
    return request({
        url: '/purchase/paymentRegistration/del',
        method: 'delete',
        data: query
    })
  return request({
    url: "/purchase/paymentRegistration/delete",
    method: "delete",
    data: query,
  });
}
// èŽ·å–å‘ç¥¨å·å’Œå‘ç¥¨é‡‘é¢
export function getTicketNo(query){
    return request({
        url: "/purchase/registration/getTicketNo",
        method: "get",
        params: query
    })
export function getTicketNo(query) {
  return request({
    url: "/purchase/registration/getTicketNo",
    method: "get",
    params: query,
  });
}
// åˆ†é¡µæŸ¥è¯¢
export function paymentHistoryList(query) {
    return request({
        url: '/purchase/paymentRegistration/paymentHistoryList',
        method: 'get',
        params: query
    })
  return request({
    url: "/purchase/paymentRegistration/paymentHistoryList",
    method: "get",
    params: query,
  });
}
// åˆ†é¡µæŸ¥è¯¢
export function paymentHistoryListPage(query) {
    return request({
        url: '/purchase/paymentRegistration/paymentHistoryListPage',
        method: 'get',
        params: query
    })
  return request({
    url: "/purchase/paymentRegistration/paymentHistoryListPage",
    method: "get",
    params: query,
  });
}
src/views/equipmentManagement/repair/Form/MaintainForm.vue
@@ -6,13 +6,13 @@
    <el-form-item label="维修结果">
      <el-input v-model="form.maintenanceResult" placeholder="请输入维修结果" />
    </el-form-item>
    <el-form-item label="维修结果">
    <el-form-item label="维修日期">
      <el-date-picker
        v-model="form.maintenanceTime"
        placeholder="请选择维修日期"
        format="YYYY-MM-DD"
        value-format="YYYY-MM-DD"
        type="date"
        format="YYYY-MM-DD HH:mm:ss"
        value-format="YYYY-MM-DD HH:mm:ss"
        type="datetime"
        clearable
        style="width: 100%"
      />
@@ -22,11 +22,14 @@
<script setup>
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import dayjs from "dayjs";
defineOptions({
  name: "设备维修表单",
});
const userStore = useUserStore();
const { form, resetForm } = useFormData({
  maintenanceName: undefined, // ç»´ä¿®åç§°
  maintenanceResult: undefined, // ç»´ä¿®ç»“æžœ
@@ -34,9 +37,10 @@
});
const setForm = (data) => {
  form.maintenanceName = data.maintenanceName;
  form.maintenanceName = data.maintenanceName ?? userStore.nickName;
  form.maintenanceResult = data.maintenanceResult;
  form.maintenanceTime = data.maintenanceTime;
  form.maintenanceTime =
    data.maintenanceTime ?? dayjs().format("YYYY-MM-DD HH:mm:ss");
};
const getForm = () => {
src/views/equipmentManagement/repair/index.vue
@@ -15,14 +15,14 @@
          <el-button type="success" icon="Van" @click="addRepair">
            æ–°å¢žæŠ¥ä¿®
          </el-button>
          <el-button
          <!-- <el-button
            type="danger"
            icon="Delete"
            :disabled="multipleList.length <= 0"
            @click="delRepairByIds(multipleList.map((item) => item.id))"
          >
            æ‰¹é‡åˆ é™¤
          </el-button>
          </el-button> -->
        </div>
      </div>
      <PIMTable
@@ -39,7 +39,7 @@
      >
        <template #statusRef="{ row }">
          <el-tag v-if="row.status === 1" type="success">完结</el-tag>
          <el-tag v-if="row.status === 0" type="error">待维修</el-tag>
          <el-tag v-if="row.status === 0" type="danger">待维修</el-tag>
        </template>
        <template #operation="{ row }">
          <el-button
src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
<template>
  <el-form :model="form" label-width="100px">
    <el-form-item label="实际保养人">
      <el-input
        v-model="form.maintenanceActuallyName"
        placeholder="请输入实际保养人"
      ></el-input>
    </el-form-item>
    <el-form-item label="实际保养日期">
      <el-date-picker
        v-model="form.maintenanceActuallyTime"
        placeholder="请选择实际保养日期"
        format="YYYY-MM-DD HH:mm:ss"
        value-format="YYYY-MM-DD HH:mm:ss"
        type="datetime"
        clearable
        style="width: 100%"
      />
    </el-form-item>
    <el-form-item label="保养结果">
      <el-select v-model="form.maintenanceResult" placeholder="请选择保养结果">
        <el-option label="完好" :value="1"></el-option>
        <el-option label="ç»´ä¿®" :value="0"></el-option>
      </el-select>
    </el-form-item>
  </el-form>
</template>
<script setup>
import useFormData from "@/hooks/useFormData";
import dayjs from "dayjs";
import useUserStore from "@/store/modules/user";
defineOptions({
  name: "保养表单",
});
const userStore = useUserStore();
const { form, resetForm } = useFormData({
  maintenanceActuallyName: undefined, // å®žé™…保养人
  maintenanceActuallyTime: undefined, // å®žé™…保养日期
  maintenanceResult: undefined, // ä¿å…»ç»“æžœ
});
const setForm = (data) => {
  form.maintenanceActuallyName =
    data.maintenanceActuallyName ?? userStore.nickName;
  form.maintenanceActuallyTime =
    data.maintenanceActuallyTime ?? dayjs().format("YYYY-MM-DD HH:mm:ss");
  form.maintenanceResult = data.maintenanceResult;
};
const getForm = () => {
  return form;
};
defineExpose({
  getForm,
  setForm,
  resetForm,
});
</script>
<style lang="scss" scoped></style>
src/views/equipmentManagement/upkeep/Form/PlanForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
<template>
  <el-form :model="form" label-width="100px">
    <el-form-item label="设备名称">
      <el-select
        v-model="form.deviceLedgerId"
        @change="setDeviceModel"
        placeholder="请选择设备"
      >
        <el-option
          v-for="(item, index) in deviceOptions"
          :key="index"
          :label="item.deviceName"
          :value="item.id"
        ></el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="规格型号">
      <el-input
        v-model="form.deviceModel"
        placeholder="请输入规格型号"
        disabled
      />
    </el-form-item>
    <el-form-item label="计划保养日期">
      <el-date-picker
        style="width: 100%"
        v-model="form.maintenancePlanTime"
        format="YYYY-MM-DD"
        value-format="YYYY-MM-DD HH:mm:ss"
        type="date"
        placeholder="请选择计划保养日期日期"
        clearable
      />
    </el-form-item>
  </el-form>
</template>
<script setup>
import useFormData from "@/hooks/useFormData";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
import { onMounted } from "vue";
defineOptions({
  name: "计划表单",
});
const deviceOptions = ref([]);
const loadDeviceName = async () => {
  const { data } = await getDeviceLedger();
  deviceOptions.value = data;
};
const { form, resetForm } = useFormData({
  deviceLedgerId: undefined, // è®¾å¤‡Id
  deviceName: undefined, // è®¾å¤‡åç§°
  deviceModel: undefined, // è§„格型号
  maintenancePlanTime: undefined, // è®¡åˆ’保养日期
});
const setDeviceModel = (id) => {
  const option = deviceOptions.value.find((item) => item.id === id);
  form.deviceModel = option.deviceModel;
};
const getForm = () => {
  return form;
};
/**
 * @desc è®¾ç½®è¡¨å•内容
 * @param data è®¾å¤‡ä¿¡æ¯
 */
const setForm = (data) => {
  form.deviceLedgerId = data.deviceLedgerId;
  form.deviceName = data.deviceName;
  form.deviceModel = data.deviceModel;
  form.maintenancePlanTime = data.maintenancePlanTime;
};
const loadForm = () => {};
onMounted(() => {
  loadDeviceName();
});
defineExpose({
  loadForm,
  resetForm,
  getForm,
  setForm,
});
</script>
<style lang="scss" scoped></style>
src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <el-drawer v-model="visible" :title="modalOptions.title" direction="ltr">
    <MaintenanceForm ref="maintenanceFormRef" />
    <template #footer>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
      <el-button type="primary" @click="sendForm" :loading="loading">
        {{ modalOptions.confirmText }}
      </el-button>
    </template>
  </el-drawer>
</template>
<script setup>
import MaintenanceForm from "../Form/MaintenanceForm.vue";
import { useModal } from "@/hooks/useModal";
import { addMaintenance } from "@/api/equipmentManagement/upkeep";
defineOptions({
  name: "保养模态框",
});
const maintenanceFormRef = ref();
const emits = defineEmits(["ok"]);
const {
  id,
  visible,
  loading,
  openModal,
  modalOptions,
  handleConfirm,
  closeModal,
} = useModal({ title: "设备维修" });
/**
 * @desc ä¿å­˜ä¿å…»
 */
const sendForm = async () => {
  loading.value = true;
  const form = await maintenanceFormRef.value.getForm();
  const { code } = await addMaintenance({ id: id.value, ...form });
  if (code == 200) {
    emits("ok");
    maintenanceFormRef.value.resetForm();
    closeModal();
  }
  loading.value = false;
};
const open = async (id, row) => {
  openModal(id);
  await nextTick();
  maintenanceFormRef.value.setForm(row);
};
defineExpose({
  open,
});
</script>
<style lang="scss" scoped></style>
src/views/equipmentManagement/upkeep/Modal/PlanModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
<template>
  <el-dialog
    v-model="visible"
    :title="modalOptions.title"
    width="30%"
    @close="close"
  >
    <PlanForm ref="planFormRef"></PlanForm>
    <template #footer>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
      <el-button type="primary" @click="sendForm" :loading="loading">
        {{ modalOptions.confirmText }}
      </el-button>
    </template>
  </el-dialog>
</template>
<script setup>
import { useModal } from "@/hooks/useModal";
import PlanForm from "../Form/PlanForm";
import {
  addUpkeep,
  editUpkeep,
  getUpkeepById,
} from "@/api/equipmentManagement/upkeep";
import { ElMessage } from "element-plus";
defineOptions({
  name: "设备保养新增计划",
});
const emits = defineEmits(["ok"]);
const planFormRef = ref();
const {
  id,
  visible,
  loading,
  openModal,
  modalOptions,
  handleConfirm,
  closeModal,
} = useModal({ title: "设备保养计划" });
const openEdit = async (id) => {
  const { data } = await getUpkeepById(id);
  openModal(id);
  await nextTick();
  await planFormRef.value.setForm(data);
};
const sendForm = async () => {
  loading.value = true;
  const form = await planFormRef.value.getForm();
  const { code } = id.value
    ? await editUpkeep({ id: unref(id), ...form })
    : await addUpkeep(form);
  if (code == 200) {
    ElMessage.success(`${id ? "编辑" : "新增"}计划成功`);
    closeModal();
    emits("ok");
  }
  loading.value = false;
};
const close = () => {
  planFormRef.value.resetForm();
  closeModal();
};
defineExpose({
  openModal,
  openEdit,
});
</script>
<style lang="scss" scoped></style>
src/views/equipmentManagement/upkeep/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,211 @@
<template>
  <div class="app-container">
    <div class="table_list">
      <div class="actions">
        <el-text class="mx-1" size="large">设备保养</el-text>
        <div>
          <el-button
            type="primary"
            icon="Plus"
            :disabled="multipleList.length !== 1"
            @click="addMaintain"
          >
            æ–°å¢žä¿å…»
          </el-button>
          <el-button type="success" icon="Van" @click="addPlan">
            æ–°å¢žè®¡åˆ’
          </el-button>
          <el-button
            type="danger"
            icon="Delete"
            :disabled="multipleList.length <= 0"
          >
            æ‰¹é‡åˆ é™¤
          </el-button>
        </div>
      </div>
      <PIMTable
        rowKey="id"
        isSelection
        :column="columns"
        :tableData="dataList"
        :page="{
          current: pagination.currentPage,
          size: pagination.pageSize,
          total: pagination.total,
        }"
        @selection-change="handleSelectionChange"
      >
        <template #maintenanceResultRef="{ row }">
          <el-tag v-if="row.maintenanceResult === 1" type="success">
            å®Œå¥½
          </el-tag>
          <el-tag v-if="row.maintenanceResult === 0" type="danger">
            ç»´ä¿®
          </el-tag>
        </template>
        <template #statusRef="{ row }">
          <el-tag v-if="row.status === 1" type="success">完结</el-tag>
          <el-tag v-if="row.status === 0" type="danger">待保养</el-tag>
        </template>
        <template #operation="{ row }">
          <el-button
            type="primary"
            text
            icon="editPen"
            @click="editPlan(row.id)"
          >
            ç¼–辑
          </el-button>
          <el-button
            type="danger"
            text
            icon="delete"
            @click="delRepairByIds(row.id)"
          >
            åˆ é™¤
          </el-button>
        </template>
      </PIMTable>
    </div>
    <PlanModal ref="planModalRef" @ok="getTableData" />
    <MaintenanceModal ref="maintainModalRef" @ok="getTableData" />
  </div>
</template>
<script setup>
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { getUpkeepPage, delUpkeep } from "@/api/equipmentManagement/upkeep";
import { onMounted } from "vue";
import PlanModal from "./Modal/PlanModal.vue";
import MaintenanceModal from "./Modal/MaintenanceModal.vue";
import dayjs from "dayjs";
defineOptions({
  name: "设备保养",
});
// è®¡åˆ’弹窗控制器
const planModalRef = ref();
// ä¿å…»å¼¹çª—控制器
const maintainModalRef = ref();
// è¡¨æ ¼å¤šé€‰æ¡†é€‰ä¸­é¡¹
const multipleList = ref([]);
// å¤šé€‰åŽåšä»€ä¹ˆ
const handleSelectionChange = (selectionList) => {
  multipleList.value = selectionList;
};
// è¡¨æ ¼é’©å­
const { filters, columns, dataList, pagination, getTableData, resetFilters } =
  usePaginationApi(getUpkeepPage, {}, [
    {
      label: "设备名称",
      align: "center",
      prop: "deviceName",
    },
    {
      label: "规格型号",
      align: "center",
      prop: "deviceModel",
    },
    {
      label: "计划保养日期",
      align: "center",
      prop: "maintenancePlanTime",
      formatData: (cell) => dayjs(cell).format("YYYY-MM-DD"),
    },
    {
      label: "录入人",
      align: "center",
      prop: "createUserName",
    },
    {
      label: "录入日期",
      align: "center",
      prop: "createTime",
      formatData: (cell) => dayjs(cell).format("YYYY-MM-DD HH:mm:ss"),
      width: 200,
    },
    {
      label: "实际保养人",
      align: "center",
      prop: "maintenanceActuallyName",
    },
    {
      label: "实际保养日期",
      align: "center",
      prop: "maintenanceActuallyTime",
    },
    {
      label: "保养结果",
      align: "center",
      prop: "maintenanceResult",
      dataType: "slot",
      slot: "maintenanceResultRef",
    },
    {
      label: "状态",
      align: "center",
      prop: "status",
      dataType: "slot",
      slot: "statusRef",
    },
    {
      fixed: "right",
      label: "操作",
      dataType: "slot",
      slot: "operation",
      align: "center",
      width: "200px",
    },
  ]);
// æ–°å¢žä¿å…»
const addMaintain = () => {
  const row = multipleList.value[0];
  maintainModalRef.value.open(row.id, row);
};
// æ–°å¢žè®¡åˆ’
const addPlan = () => {
  planModalRef.value.openModal();
};
// ç¼–辑计划
const editPlan = (id) => {
  planModalRef.value.openEdit(id);
};
// å•行删除
const delRepairByIds = async (ids) => {
  ElMessageBox.confirm("确认删除报修数据, æ­¤æ“ä½œä¸å¯é€†?", "警告", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    const { code } = await delUpkeep(ids);
    if (code === 200) {
      ElMessage.success("删除成功");
      getTableData();
    }
  });
};
onMounted(() => {
  getTableData();
});
</script>
<style lang="scss" scoped>
.table_list {
  margin-top: unset;
}
.actions {
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
}
</style>
src/views/procurementManagement/invoiceEntry/index.vue
@@ -42,7 +42,7 @@
        :expand-row-keys="expandRowKeys"
        @expand-change="expandChange"
        @selection-change="handleSelectionChange"
        @pagination="onCurrentChange"
        @pagination="changePage"
      >
        <template #expand="{ row }">
          <ExpandTable ref="expandTableRef" />
@@ -182,6 +182,11 @@
  expandTableRef.value.getList(row.id);
};
const changePage = ({ page }) => {
  pagination.currentPage = page;
  onCurrentChange(page);
};
onMounted(() => {
  getTableData();
});
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -56,7 +56,7 @@
          total: 0,
        }"
        @selection-change="handleSelectionChange"
        @pagination="onCurrentChange"
        @pagination="changePage"
      >
        <template #commonFilesRef="{ row }">
          <el-button
@@ -238,6 +238,11 @@
  });
};
const changePage = ({ page }) => {
  pagination.currentPage = page;
  onCurrentChange(page);
};
onMounted(() => {
  getTableData();
});
src/views/reportAnalysis/projectProfit/index.vue
@@ -20,7 +20,7 @@
          size: pagination.pageSize,
          total: pagination.total,
        }"
        @pagination="onCurrentChange"
        @pagination="changePage"
      ></PIMTable>
    </div>
  </div>
@@ -93,6 +93,11 @@
  ]
);
const changePage = ({ page }) => {
  pagination.currentPage = page;
  onCurrentChange(page);
};
onMounted(() => {
  getTableData();
});
src/views/reportAnalysis/taxComparison/index.vue
@@ -28,7 +28,7 @@
          size: pagination.pageSize,
          total: pagination.total,
        }"
        @pagination="onCurrentChange"
        @pagination="changePage"
      />
    </div>
  </div>
@@ -82,6 +82,11 @@
  {}
);
const changePage = ({ page }) => {
  pagination.currentPage = page;
  onCurrentChange(page);
};
onMounted(() => {
  getTableData();
});
src/views/salesManagement/invoiceLedger/index.vue
@@ -65,11 +65,13 @@
          label="销售合同号"
          prop="salesContractNo"
          show-overflow-tooltip
          width="180"
        />
        <el-table-column
          label="客户合同号"
          prop="customerContractNo"
          show-overflow-tooltip
          width="180"
        />
        <el-table-column
          label="客户名称"
@@ -77,9 +79,14 @@
          show-overflow-tooltip
          width="240"
        />
        <el-table-column label="项目" prop="projectName" />
        <el-table-column label="项目" prop="projectName" width="150" />
        <el-table-column label="产品大类" prop="productCategory" />
        <el-table-column label="规格型号" prop="specificationModel" />
        <el-table-column
          label="规格型号"
          prop="specificationModel"
          width="300"
          show-overflow-tooltip
        />
        <el-table-column
          label="发票号"
          prop="invoiceNo"
@@ -90,6 +97,7 @@
          prop="invoiceTotal"
          show-overflow-tooltip
          :formatter="formattedNumber"
          width="120"
        />
        <el-table-column label="税率(%)" prop="taxRate" show-overflow-tooltip />
        <el-table-column
@@ -102,11 +110,13 @@
          prop="createTime"
          show-overflow-tooltip
          :formatter="formatDate"
          width="180"
        />
        <el-table-column
          label="开票日期"
          prop="invoiceDate"
          show-overflow-tooltip
          width="120"
        />
        <el-table-column
          label="发票"
src/views/salesManagement/invoiceRegistration/index.vue
@@ -154,7 +154,11 @@
          show-overflow-tooltip
          :formatter="formattedNumber"
        />
        <el-table-column label="未开票金额(元)" show-overflow-tooltip>
        <el-table-column
          label="未开票金额(元)"
          prop="noInvoiceAmountTotal"
          show-overflow-tooltip
        >
          <template #default="{ row, column }">
            <el-text type="danger">
              {{ formattedNumber(row, column, row.noInvoiceAmountTotal) }}
@@ -516,8 +520,8 @@
const summarizeMainTable = (param) => {
  return proxy.summarizeTable(param, [
    "contractAmount",
    "noInvoiceAmountTotal",
    "invoiceTotal",
    "noInvoiceAmountTotal",
  ]);
};
// å­è¡¨åˆè®¡æ–¹æ³•