| | |
| | | </el-form-item> |
| | | <el-form-item label="收款方式:"> |
| | | <el-select |
| | | v-model="filters.incomeMethod" |
| | | v-model="filters.incomeMethodLabel" |
| | | placeholder="请选择" |
| | | clearable |
| | | style="width: 200px;" |
| | | > |
| | | <el-option |
| | | v-for="item in payment_methods" |
| | | v-for="item in incomeMethodOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | |
| | | <el-button |
| | | type="danger" |
| | | icon="Delete" |
| | | :disabled="multipleList.length <= 0" |
| | | @click="deleteRow(multipleList.map((item) => item.id))" |
| | | :disabled="multipleList.length <= 0 || hasBusinessIdInSelection" |
| | | @click="handleBatchDelete" |
| | | > |
| | | 批量删除 |
| | | </el-button> |
| | |
| | | size: pagination.pageSize, |
| | | total: pagination.total, |
| | | }" |
| | | :isShowSummary="true" |
| | | :summaryMethod="summarizeMainTable" |
| | | @selection-change="handleSelectionChange" |
| | | @pagination="changePage" |
| | | > |
| | | <template #incomeMethodSlot="{ row }"> |
| | | <el-tag> |
| | | {{ getIncomeMethodLabel(row) }} |
| | | </el-tag> |
| | | </template> |
| | | <template #operation="{ row }"> |
| | | <el-button type="primary" link @click="edit(row.id)"> |
| | | <el-button |
| | | type="primary" |
| | | link |
| | | :disabled="!!row.businessId" |
| | | @click="edit(row.id)" |
| | | > |
| | | 编辑 |
| | | </el-button> |
| | | <el-button |
| | |
| | | <script setup> |
| | | import { usePaginationApi } from "@/hooks/usePaginationApi"; |
| | | import { listPage, delAccountIncome, fileListPage, fileAdd, fileDel } from "@/api/financialManagement/revenueManagement"; |
| | | import { onMounted, getCurrentInstance } from "vue"; |
| | | import { onMounted, getCurrentInstance, ref, computed } from "vue"; |
| | | import Modal from "./Modal.vue"; |
| | | import { ElMessageBox, ElMessage } from "element-plus"; |
| | | import dayjs from "dayjs"; |
| | |
| | | const { proxy } = getCurrentInstance(); |
| | | const modalRef = ref(); |
| | | const { payment_methods } = proxy.useDict("payment_methods"); |
| | | const { receipt_payment_type } = proxy.useDict("receipt_payment_type"); |
| | | const { income_types } = proxy.useDict("income_types"); |
| | | const fileListRef = ref(null); |
| | | const fileListDialogVisible = ref(false); |
| | | const currentFileRow = ref(null); |
| | | const accountType = ref('收入'); |
| | | |
| | | const incomeMethodOptions = computed(() => { |
| | | const merged = [...(payment_methods.value || []), ...(receipt_payment_type.value || [])]; |
| | | const uniqueMap = new Map(); |
| | | merged.forEach((item) => { |
| | | const label = item?.label; |
| | | if (!label) return; |
| | | if (!uniqueMap.has(label)) { |
| | | uniqueMap.set(label, { label, value: label }); |
| | | } |
| | | }); |
| | | return Array.from(uniqueMap.values()); |
| | | }); |
| | | |
| | | const { |
| | | filters, |
| | |
| | | } = usePaginationApi( |
| | | listPage, |
| | | { |
| | | incomeMethod: undefined, |
| | | incomeMethodLabel: undefined, |
| | | entryDate: undefined, |
| | | }, |
| | | [ |
| | |
| | | }, |
| | | { |
| | | label: "收款方式", |
| | | prop: "incomeMethod", |
| | | prop: "incomeMethodLabel", |
| | | align: 'center', |
| | | width: '100', |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | if (payment_methods.value.find((m) => m.value == params)) { |
| | | return payment_methods.value.find((m) => m.value == params).label; |
| | | } else { |
| | | return null |
| | | } |
| | | }, |
| | | dataType: "slot", |
| | | slot: "incomeMethodSlot", |
| | | }, |
| | | { |
| | | label: "发票号码", |
| | |
| | | align: "center", |
| | | width: "160px", |
| | | }, |
| | | ] |
| | | ], |
| | | undefined, |
| | | { |
| | | incomeMethodLabel: (value) => ({ |
| | | incomeMethodLabel: value || undefined, |
| | | }), |
| | | } |
| | | ); |
| | | |
| | | // 表格合计:收入金额 |
| | | const summarizeMainTable = (param) => { |
| | | return proxy.summarizeTable(param, ["incomeMoney"]); |
| | | }; |
| | | |
| | | const getIncomeMethodLabel = (row) => { |
| | | const methodValue = row?.incomeMethod; |
| | | const dictList = String(row?.businessType) === "1" |
| | | ? receipt_payment_type.value |
| | | : payment_methods.value; |
| | | return dictList.find((item) => item.value == methodValue)?.label || "--"; |
| | | }; |
| | | |
| | | // 多选后做什么 |
| | | const handleSelectionChange = (selectionList) => { |
| | | multipleList.value = selectionList; |
| | | }; |
| | | |
| | | // 判断选中的项中是否有 businessId |
| | | const hasBusinessIdInSelection = computed(() => { |
| | | return multipleList.value.some(item => item.businessId); |
| | | }); |
| | | |
| | | const add = () => { |
| | | modalRef.value.openModal(); |
| | | }; |
| | | const edit = (id) => { |
| | | // 检查当前行是否有 businessId |
| | | const row = dataList.value.find(item => item.id === id); |
| | | if (row && row.businessId) { |
| | | proxy.$modal.msgWarning("该记录已关联业务,不能编辑"); |
| | | return; |
| | | } |
| | | modalRef.value.loadForm(id); |
| | | }; |
| | | const changePage = ({ page, limit }) => { |
| | |
| | | onCurrentChange(page); |
| | | }; |
| | | const deleteRow = (id) => { |
| | | // 如果是数组,检查是否有 businessId |
| | | if (Array.isArray(id)) { |
| | | const hasBusinessId = id.some(itemId => { |
| | | const row = dataList.value.find(item => item.id === itemId); |
| | | return row && row.businessId; |
| | | }); |
| | | if (hasBusinessId) { |
| | | proxy.$modal.msgWarning("选中的记录中包含已关联业务的记录,不能删除"); |
| | | return; |
| | | } |
| | | } else { |
| | | // 单个删除,检查是否有 businessId |
| | | const row = dataList.value.find(item => item.id === id); |
| | | if (row && row.businessId) { |
| | | proxy.$modal.msgWarning("该记录已关联业务,不能删除"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | ElMessageBox.confirm("此操作将永久删除该数据, 是否继续?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | |
| | | }); |
| | | }; |
| | | |
| | | // 批量删除 |
| | | const handleBatchDelete = () => { |
| | | if (multipleList.value.length === 0) { |
| | | proxy.$modal.msgWarning("请选择要删除的数据"); |
| | | return; |
| | | } |
| | | |
| | | // 检查是否有 businessId |
| | | if (hasBusinessIdInSelection.value) { |
| | | proxy.$modal.msgWarning("选中的记录中包含已关联业务的记录,不能删除"); |
| | | return; |
| | | } |
| | | |
| | | const ids = multipleList.value.map((item) => item.id); |
| | | deleteRow(ids); |
| | | }; |
| | | |
| | | const changeDaterange = (value) => { |
| | | if (value) { |
| | | filters.entryDate = value; |