From a686251b73f616532d6a9518faad49c7693a6e1c Mon Sep 17 00:00:00 2001 From: lishenao <3065849776@qq.com> Date: 星期二, 01 七月 2025 14:31:53 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- src/views/equipmentManagement/upkeep/index.vue | 213 ++++++++++++++ src/views/procurementManagement/procurementInvoiceLedger/index.vue | 7 src/views/reportAnalysis/projectProfit/index.vue | 7 src/views/system/user/profile/userAvatar.vue | 30 - src/views/equipmentManagement/repair/index.vue | 6 src/views/inventoryManagement/issueManagement/index.vue | 42 +- src/views/procurementManagement/invoiceEntry/index.vue | 7 src/api/equipmentManagement/upkeep.js | 72 ++++ src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue | 60 ++++ src/views/salesManagement/salesLedger/index.vue | 25 + src/views/salesManagement/invoiceRegistration/index.vue | 8 src/api/procurementManagement/paymentEntry.js | 98 +++--- src/views/equipmentManagement/ledger/Form.vue | 46 ++ src/views/salesManagement/invoiceLedger/index.vue | 14 src/views/equipmentManagement/repair/Form/MaintainForm.vue | 16 src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue | 64 ++++ src/views/reportAnalysis/taxComparison/index.vue | 7 src/views/equipmentManagement/upkeep/Form/PlanForm.vue | 96 ++++++ src/views/equipmentManagement/upkeep/Modal/PlanModal.vue | 76 +++++ 19 files changed, 778 insertions(+), 116 deletions(-) diff --git a/src/api/equipmentManagement/upkeep.js b/src/api/equipmentManagement/upkeep.js new file mode 100644 index 0000000..c091670 --- /dev/null +++ b/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", + }); +}; diff --git a/src/api/procurementManagement/paymentEntry.js b/src/api/procurementManagement/paymentEntry.js index 7725779..6ef0eb9 100644 --- a/src/api/procurementManagement/paymentEntry.js +++ b/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, + }); } diff --git a/src/views/equipmentManagement/ledger/Form.vue b/src/views/equipmentManagement/ledger/Form.vue index f6cc2cb..4b5308b 100644 --- a/src/views/equipmentManagement/ledger/Form.vue +++ b/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, diff --git a/src/views/equipmentManagement/repair/Form/MaintainForm.vue b/src/views/equipmentManagement/repair/Form/MaintainForm.vue index f946e7e..75e97dd 100644 --- a/src/views/equipmentManagement/repair/Form/MaintainForm.vue +++ b/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 = () => { diff --git a/src/views/equipmentManagement/repair/index.vue b/src/views/equipmentManagement/repair/index.vue index 96fb91b..2e75914 100644 --- a/src/views/equipmentManagement/repair/index.vue +++ b/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 diff --git a/src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue b/src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue new file mode 100644 index 0000000..4ff0237 --- /dev/null +++ b/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> diff --git a/src/views/equipmentManagement/upkeep/Form/PlanForm.vue b/src/views/equipmentManagement/upkeep/Form/PlanForm.vue new file mode 100644 index 0000000..a2bd2ce --- /dev/null +++ b/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> diff --git a/src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue b/src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue new file mode 100644 index 0000000..583d627 --- /dev/null +++ b/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> diff --git a/src/views/equipmentManagement/upkeep/Modal/PlanModal.vue b/src/views/equipmentManagement/upkeep/Modal/PlanModal.vue new file mode 100644 index 0000000..239025a --- /dev/null +++ b/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> diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue new file mode 100644 index 0000000..5d3dcd2 --- /dev/null +++ b/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> diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue index edb60b8..7e9039c 100644 --- a/src/views/inventoryManagement/issueManagement/index.vue +++ b/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 } diff --git a/src/views/procurementManagement/invoiceEntry/index.vue b/src/views/procurementManagement/invoiceEntry/index.vue index c8ece35..c7376ee 100644 --- a/src/views/procurementManagement/invoiceEntry/index.vue +++ b/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(); }); diff --git a/src/views/procurementManagement/procurementInvoiceLedger/index.vue b/src/views/procurementManagement/procurementInvoiceLedger/index.vue index 6c8afa3..339b020 100644 --- a/src/views/procurementManagement/procurementInvoiceLedger/index.vue +++ b/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(); }); diff --git a/src/views/reportAnalysis/projectProfit/index.vue b/src/views/reportAnalysis/projectProfit/index.vue index bae35bb..c987e3c 100644 --- a/src/views/reportAnalysis/projectProfit/index.vue +++ b/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(); }); diff --git a/src/views/reportAnalysis/taxComparison/index.vue b/src/views/reportAnalysis/taxComparison/index.vue index b04ebce..4ed69a5 100644 --- a/src/views/reportAnalysis/taxComparison/index.vue +++ b/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(); }); diff --git a/src/views/salesManagement/invoiceLedger/index.vue b/src/views/salesManagement/invoiceLedger/index.vue index 08be678..194b86c 100644 --- a/src/views/salesManagement/invoiceLedger/index.vue +++ b/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="鍙戠エ" diff --git a/src/views/salesManagement/invoiceRegistration/index.vue b/src/views/salesManagement/invoiceRegistration/index.vue index aeacdb2..f229f81 100644 --- a/src/views/salesManagement/invoiceRegistration/index.vue +++ b/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", ]); }; // 瀛愯〃鍚堣鏂规硶 diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue index 238501d..7ed2f28 100644 --- a/src/views/salesManagement/salesLedger/index.vue +++ b/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; diff --git a/src/views/system/user/profile/userAvatar.vue b/src/views/system/user/profile/userAvatar.vue index ae36e39..ff1c9ef 100644 --- a/src/views/system/user/profile/userAvatar.vue +++ b/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> @@ -94,7 +82,7 @@ } /** 瑕嗙洊榛樿涓婁紶琛屼负 */ -function requestUpload() {} +function requestUpload() { } /** 鍚戝乏鏃嬭浆 */ function rotateLeft() { @@ -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 -- Gitblit v1.9.3