lishenao
2025-07-01 a686251b73f616532d6a9518faad49c7693a6e1c
Merge remote-tracking branch 'origin/dev' into dev
已修改13个文件
已添加6个文件
866 ■■■■ 文件已修改
src/api/equipmentManagement/upkeep.js 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/paymentEntry.js 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/Form.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | 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 96 ●●●●● 补丁 | 查看 | 原始文档 | 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 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/issueManagement/index.vue 42 ●●●● 补丁 | 查看 | 原始文档 | 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/views/salesManagement/salesLedger/index.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/userAvatar.vue 28 ●●●● 补丁 | 查看 | 原始文档 | 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
    })
    url: "/purchase/paymentRegistration/list",
    method: "get",
    params: query,
  });
}
// æŸ¥è¯¢è¯¦æƒ…
export function registrationInfo(query) {
    return request({
        url: '/purchase/paymentRegistration/' + query,
        method: 'get',
    })
    url: "/purchase/paymentRegistration/" + query,
    method: "get",
  });
}
// æ ¹æ®é‡‡è´­åˆåŒå·æŸ¥è¯¢è¯¦æƒ…
export function byPurchaseId(query) {
    return request({
        url: '/purchase/paymentRegistration/byPurchaseId/' + query,
        method: 'get',
    })
    url: "/purchase/paymentRegistration/byPurchaseId/" + query,
    method: "get",
  });
}
// æŸ¥è¯¢é‡‡è´­åˆåŒå·
export function getPurchaseNo() {
    return request({
        url: '/purchase/ledger/getPurchaseNo',
        method: 'get',
    })
    url: "/purchase/ledger/getPurchaseNo",
    method: "get",
  });
}
// æ–°å¢ž
export function paymentRegistrationAdd(query) {
    return request({
        url: '/purchase/paymentRegistration',
        method: 'post',
        data: query
    })
    url: "/purchase/paymentRegistration",
    method: "post",
    data: query,
  });
}
// ä¿®æ”¹
export function paymentRegistrationEdit(query) {
    return request({
        url: '/purchase/paymentRegistration',
        method: 'put',
        data: query
    })
    url: "/purchase/paymentRegistration",
    method: "put",
    data: query,
  });
}
// åˆ é™¤
export function paymentRegistrationDel(query) {
    return request({
        url: '/purchase/paymentRegistration/del',
        method: 'delete',
        data: query
    })
    url: "/purchase/paymentRegistration/delete",
    method: "delete",
    data: query,
  });
}
// èŽ·å–å‘ç¥¨å·å’Œå‘ç¥¨é‡‘é¢
export function getTicketNo(query){
    return request({
        url: "/purchase/registration/getTicketNo",
        method: "get",
        params: query
    })
    params: query,
  });
}
// åˆ†é¡µæŸ¥è¯¢
export function paymentHistoryList(query) {
    return request({
        url: '/purchase/paymentRegistration/paymentHistoryList',
        method: 'get',
        params: query
    })
    url: "/purchase/paymentRegistration/paymentHistoryList",
    method: "get",
    params: query,
  });
}
// åˆ†é¡µæŸ¥è¯¢
export function paymentHistoryListPage(query) {
    return request({
        url: '/purchase/paymentRegistration/paymentHistoryListPage',
        method: 'get',
        params: query
    })
    url: "/purchase/paymentRegistration/paymentHistoryListPage",
    method: "get",
    params: query,
  });
}
src/views/equipmentManagement/ledger/Form.vue
@@ -27,6 +27,7 @@
            v-model="form.number"
            placeholder="请输入数量"
            type="number"
            @change="mathNum"
          />
        </el-form-item>
      </el-col>
@@ -36,6 +37,7 @@
            v-model="form.taxIncludingPriceUnit"
            placeholder="请输入含税单价"
            type="number"
            @change="mathNum"
          />
        </el-form-item>
      </el-col>
@@ -45,18 +47,29 @@
            v-model="form.taxIncludingPriceTotal"
            placeholder="请输入含税总价"
            type="number"
            disabled
          />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="税率" prop="taxRate">
          <el-input
        <el-form-item label="税率(%)" prop="taxRate">
          <!-- <el-input
            v-model="form.taxRate"
            placeholder="请输入税率"
            type="number"
          >
            <template #append> % </template>
          </el-input>
          </el-input> -->
          <el-select
            v-model="form.taxRate"
            placeholder="请选择"
            clearable
            @change="mathNum"
          >
            <el-option label="1" :value="1" />
            <el-option label="6" :value="6" />
            <el-option label="13" :value="13" />
          </el-select>
        </el-form-item>
      </el-col>
      <el-col :span="12">
@@ -65,6 +78,7 @@
            v-model="form.unTaxIncludingPriceTotal"
            placeholder="请输入不含税总价"
            type="number"
            disabled
          />
        </el-form-item>
      </el-col>
@@ -95,6 +109,11 @@
// import useUserStore from "@/store/modules/user";
import { getLedgerById } from "@/api/equipmentManagement/ledger";
import dayjs from "dayjs";
import {
  calculateTaxIncludeTotalPrice,
  calculateTaxExclusiveTotalPrice,
} from "@/utils/summarizeTable";
import { ElMessage } from "element-plus";
defineOptions({
  name: "设备台账表单",
@@ -130,6 +149,27 @@
  }
};
const mathNum = () => {
  if (!form.taxIncludingPriceUnit) {
    ElMessage.error("请输入单价");
    return;
  }
  if (!form.number) {
    ElMessage.error("请输入数量");
    return;
  }
  form.taxIncludingPriceTotal = calculateTaxIncludeTotalPrice(
    form.taxIncludingPriceUnit,
    form.number
  );
  if (form.taxRate) {
    form.unTaxIncludingPriceTotal = calculateTaxExclusiveTotalPrice(
      form.taxIncludingPriceTotal,
      form.taxRate
    );
  }
};
defineExpose({
  form,
  loadForm,
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,96 @@
<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 = dayjs(data.maintenancePlanTime).format(
    "YYYY-MM-DD HH:mm:ss"
  );
};
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,213 @@
<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";
import { ElMessageBox, ElMessage } from "element-plus";
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",
      formatData: (cell) => dayjs(cell).format("YYYY-MM-DD HH:mm:ss"),
    },
    {
      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/inventoryManagement/issueManagement/index.vue
@@ -40,7 +40,7 @@
      <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
        :page="page.current" :limit="page.size" @pagination="paginationChange" />
    </div>
    <el-dialog v-model="dialogFormVisible" :title="'新增出库'" width="70%" @close="closeDia">
    <el-dialog v-model="dialogFormVisible" :title="'新增出库'" width="40%" @close="closeDia">
      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
        <el-form-item label="出库数量:" prop="salesContractNo">
          <el-input v-model="form.salesContractNo" placeholder="请输入" clearable />
@@ -100,7 +100,6 @@
const fileList = ref([])
// ç”¨æˆ·ä¿¡æ¯è¡¨å•弹框数据
const operationType = ref('')
const dialogFormVisible = ref(false)
const data = reactive({
  searchForm: {
@@ -184,32 +183,31 @@
// æ‰“开弹框
const openForm = async (row) => {
  operationType.value = type
  form.value = {}
  productData.value = []
  let userLists = await userListNoPage()
  userList.value = userLists.data
  customerList().then(res => {
    customerOption.value = res
  })
  console.log('userStore.id', userStore.id)
  form.value.entryPerson = userStore.id
  if (type === 'edit') {
    currentId.value = row.id;
    getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => {
      form.value = { ...res }
      form.value.entryPerson = Number(res.entryPerson)
      productData.value = form.value.productData
      fileList.value = form.value.salesLedgerFiles
    })
  }
  // form.value = {}
  // productData.value = []
  // let userLists = await userListNoPage()
  // userList.value = userLists.data
  // customerList().then(res => {
  //   customerOption.value = res
  // })
  // console.log('userStore.id', userStore.id)
  // form.value.entryPerson = userStore.id
  // if (type === 'edit') {
  //   currentId.value = row.id;
  //   getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => {
  //     form.value = { ...res }
  //     form.value.entryPerson = Number(res.entryPerson)
  //     productData.value = form.value.productData
  //     fileList.value = form.value.salesLedgerFiles
  //   })
  // }
  // let userAll = await userStore.getInfo()
  // userList.value.forEach(element => {
  //   if(userAll.user.nickName === element.nickName && userAll.user.userName === element.userName) {
  //     form.value.entryPerson = userAll.user.userId // è®¾ç½®é»˜è®¤ä¸šåŠ¡å‘˜ä¸ºå½“å‰ç”¨æˆ·
  //   }
  // });
  form.value.entryDate = getCurrentDate() // è®¾ç½®é»˜è®¤å½•入日期为当前日期
  // form.value.entryDate = getCurrentDate() // è®¾ç½®é»˜è®¤å½•入日期为当前日期
  dialogFormVisible.value = true
}
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",
  ]);
};
// å­è¡¨åˆè®¡æ–¹æ³•
src/views/salesManagement/salesLedger/index.vue
@@ -43,10 +43,10 @@
            v-model="searchForm.entryDate"
            value-format="YYYY-MM-DD"
            format="YYYY-MM-DD"
            type="date"
            type="daterange"
            placeholder="请选择"
            clearable
            @change="handleQuery"
            @change="changeDaterange"
          />
        </el-form-item>
        <el-form-item>
@@ -648,7 +648,12 @@
    customerContractNo: "", // å®¢æˆ·åˆåŒç¼–号
    salesContractNo: "", // é”€å”®åˆåŒç¼–号
    projectName: "", // é¡¹ç›®åç§°
    entryDate: dayjs().format("YYYY-MM-DD"), // å½•入日期
    entryDate: [
      dayjs().format("YYYY-MM-DD"),
      dayjs().add(1, "day").format("YYYY-MM-DD"),
    ], // å½•入日期
    entryDateStart: dayjs().format("YYYY-MM-DD"),
    entryDateEnd: dayjs().add(1, "day").format("YYYY-MM-DD"),
  },
  form: {
    salesContractNo: "",
@@ -721,6 +726,17 @@
  headers: { Authorization: "Bearer " + getToken() },
});
const changeDaterange = (value) => {
  if (value) {
    searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
    searchForm.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
  } else {
    searchForm.entryDateStart = undefined;
    searchForm.entryDateEnd = undefined;
  }
  handleQuery();
};
// æŸ¥è¯¢åˆ—表
/** æœç´¢æŒ‰é’®æ“ä½œ */
const handleQuery = () => {
@@ -734,7 +750,8 @@
};
const getList = () => {
  tableLoading.value = true;
  ledgerListPage({ ...searchForm, ...page })
  const { entryDate, ...rest } = searchForm;
  ledgerListPage({ ...rest, ...page })
    .then((res) => {
      tableLoading.value = false;
      tableData.value = res.records;
src/views/system/user/profile/userAvatar.vue
@@ -4,18 +4,9 @@
    <el-dialog :title="title" v-model="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog">
      <el-row>
        <el-col :xs="24" :md="12" :style="{ height: '350px' }">
          <vue-cropper
            ref="cropper"
            :img="options.img"
            :info="true"
            :autoCrop="options.autoCrop"
            :autoCropWidth="options.autoCropWidth"
            :autoCropHeight="options.autoCropHeight"
            :fixedBox="options.fixedBox"
            :outputType="options.outputType"
            @realTime="realTime"
            v-if="visible"
          />
          <vue-cropper ref="cropper" :img="options.img" :info="true" :autoCrop="options.autoCrop"
            :autoCropWidth="options.autoCropWidth" :autoCropHeight="options.autoCropHeight" :fixedBox="options.fixedBox"
            :outputType="options.outputType" @realTime="realTime" v-if="visible" />
        </el-col>
        <el-col :xs="24" :md="12" :style="{ height: '350px' }">
          <div class="avatar-upload-preview">
@@ -26,15 +17,12 @@
      <br />
      <el-row>
        <el-col :lg="2" :md="2">
          <el-upload
            action="#"
            :http-request="requestUpload"
            :show-file-list="false"
            :before-upload="beforeUpload"
          >
          <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
            <el-button>
              é€‰æ‹©
              <el-icon class="el-icon--right"><Upload /></el-icon>
              <el-icon class="el-icon--right">
                <Upload />
              </el-icon>
            </el-button>
          </el-upload>
        </el-col>
@@ -133,7 +121,7 @@
    formData.append("avatarfile", data, options.filename)
    uploadAvatar(formData).then(response => {
      open.value = false
      options.img = import.meta.env.VITE_APP_BASE_API + response.imgUrl
      options.img = import.meta.env.VITE_APP_BASE_API + '/profile/' + response.imgUrl
      userStore.avatar = options.img
      proxy.$modal.msgSuccess("修改成功")
      visible.value = false