<script lang="ts" setup name="BusinessSettlementEdit"> import { onMounted, reactive, ref } from 'vue' import type { Ref } from 'vue' import dayjs from 'dayjs' import type { FormInstance, FormRules } from 'element-plus' import { ElLoading, ElMessage, ElMessageBox } from 'element-plus' import { useRoute, useRouter } from 'vue-router' import { el } from 'element-plus/es/locale' import type { IForm, IsampleList } from './businessSettlement-interface' import multiTable from '@/components/MultiHeaderTable/index.vue' import { getDictByCode } from '@/api/system/dict' import { UploadFile } from '@/api/measure/file' import { calc } from '@/utils/useCalc' import showPhoto from '@/views/system/tool/showPhoto.vue' import type { dictType } from '@/global' import { getTaskDetail } from '@/api/business/schedule/task' import useUserStore from '@/store/modules/user' import selectOrder from '@/views/business/schedule/interchangeReceipt/selectOrder.vue' import type { IOrderList } from '@/views/business/schedule/order/orderList_interface' import { getOrderDetail } from '@/api/business/schedule/order' import { isNumber, validateMoney } from '@/utils/validate' import useCheckList from '@/utils/useCheckList' import { addBusinessSettlement, getBusinessSettlementDetail, updateBusinessSettlement } from '@/api/finance/businessSettlement' const user = useUserStore() // 用户信息 const $route = useRoute() const pageType = ref('detail') // add/detail/edit const infoId = ref('') // 列表id const textMap: { [key: string]: string } = { edit: '编辑', add: '新建', detail: '详情', }// 字典 // 表单数据 const form = ref<IForm>({ orderCode: '', // 委托单编号 orderId: '', // 委托单id customerName: '', // 委托方名称 orderTime: '', // 委托日期 sampleCount: '', // 样品数量 certificationCompany: '', // 证书单位名称 certificationCompanyAddress: '', // 证书单位地址 deliverer: '', // 联系人 delivererTel: '', // 联系方式 sampleWarehouse: '未入库', // 样品库房 certWarehouse: '未入库', // 证书库房 feeStatus: '未录费', // 费用状态 received: '未到账', // 是否到账 actualTestFee: 0, // 检测费(实)(元) shouldTestFee: 0, // 检测费(应)(元) actualTotalFee: 0, // 实收合计(元) receivedAmount: 0, // 到账金额(元) invoiceAmount: 0, // 开票金额(元) remark: '', // 备注 orderType: '', // 任务单类型 1检测委托单、2校准委托单 }) // 表单校验规则 const rules = reactive<FormRules>({ orderCode: [{ required: true, message: '委托单编号必填', trigger: 'blur' }], customerName: [{ required: true, message: '委托方名称必填', trigger: 'blur' }], orderTime: [{ required: true, message: '委托日期必填', trigger: 'blur' }], sampleCount: [{ required: true, message: '样品数量必填', trigger: 'blur' }], certificationCompany: [{ required: true, message: '证书单位名称必填', trigger: 'blur' }], certificationCompanyAddress: [{ required: true, message: '证书单位地址必填', trigger: 'blur' }], deliverer: [{ required: true, message: '联系人必填', trigger: 'blur' }], delivererTel: [{ required: true, message: '联系电话必填', trigger: 'blur' }], sampleWarehouse: [{ required: true, message: '样品库房必填', trigger: 'blur' }], certWarehouse: [{ required: true, message: '证书库房必填', trigger: 'blur' }], feeStatus: [{ required: true, message: '费用状态必填', trigger: 'blur' }], received: [{ required: true, message: '是否到账必填', trigger: 'blur' }], actualTestFee: [{ required: true, message: '检测费(实)(元)必填', trigger: 'blur' }], shouldTestFee: [{ required: true, message: '检测费(应)(元)必填', trigger: 'blur' }], actualTotalFee: [{ required: true, message: '实收合计(元)必填', trigger: 'blur' }], receivedAmount: [{ required: true, message: '到账金额(元)必填', trigger: 'blur' }], invoiceAmount: [{ required: true, message: '开票金额(元)必填', trigger: 'blur' }], }) const ruleFormRef = ref<FormInstance>() as any const orderVisible = ref(false) // 控制委托单对话框显隐 // ---------------------------------------路由参数-------------------------------------- if ($route.params && $route.params.type) { pageType.value = $route.params.type as string infoId.value = $route.params.id as string } // ---------------------------------------字典-------------------------------------- const financeSampleWarehouseList = ref<dictType[]>([]) // 样品库房 const financeCertWarehouseList = ref<dictType[]>([]) // 证书库房 const financeReceivedList = ref<dictType[]>([]) // 是否到账 // 获取字典值 function getDict() { // 样品库房 getDictByCode('financeSampleWarehouse').then((response) => { financeSampleWarehouseList.value = response.data }) // 证书库房 getDictByCode('financeCertWarehouse').then((response) => { financeCertWarehouseList.value = response.data }) // 是否到账 getDictByCode('financeReceived').then((response) => { financeReceivedList.value = response.data }) } getDict() // -----------------------------------到账金额明细-------------------------------------------------- const receivedAmountList = ref([]) as any // 到账金额明细 const checkoutReceivedAmountList = ref([]) as any // 到账金额明细多选 // 表头 const receivedAmountcolumns = ref([ { text: '到账金额(元)', value: 'money', align: 'center', width: '220', required: true }, { text: '到账时间', value: 'moneyTime', align: 'center', width: '220', required: true }, { text: '附件', value: 'attachment', align: 'center', required: false }, ]) // -------------------------------------开票金额明细-------------------------------------------------------------- const invoiceAmountList = ref([]) as any // 开票金额明细 const checkoutInvoiceAmountList = ref([]) as any // 开票金额明细多选 // 表头 const invoiceAmountcolumns = ref([ { text: '开票金额(元)', value: 'money', align: 'center', width: '220', required: true }, { text: '开票时间', value: 'moneyTime', align: 'center', width: '220', required: true }, { text: '附件', value: 'attachment', align: 'center', required: false }, ]) // 多选发生改变时 const handleSelectionChange = (e: any, type: 'addReceived' | 'invoiceAmount') => { if (type === 'addReceived') { // 到账金额明细 checkoutReceivedAmountList.value = e } else { // 开票金额明细 checkoutInvoiceAmountList.value = e } } // 点击增加行 const addRow = (type: 'addReceived' | 'invoiceAmount') => { if (type === 'addReceived') { if (useCheckList(receivedAmountList.value, receivedAmountcolumns.value, '到账金额明细')) { receivedAmountList.value.push({ money: undefined, moneyTime: '', attachment: [], moneyType: '1', }) } } else { if (useCheckList(invoiceAmountList.value, invoiceAmountcolumns.value, '开票金额明细')) { invoiceAmountList.value.push({ money: undefined, moneyTime: '', attachment: [], moneyType: '2', }) } } } // 删除行 const delRow = (type: 'addReceived' | 'invoiceAmount') => { if ((type === 'addReceived' && checkoutReceivedAmountList.value.length <= 0) || (type === 'invoiceAmount' && checkoutInvoiceAmountList.value.length <= 0)) { ElMessage({ message: '请选中要删除的行', type: 'warning', }) } else { if (type === 'addReceived') { receivedAmountList.value = receivedAmountList.value.filter( (item: any) => { return !checkoutReceivedAmountList.value.includes(item) }, ) } else { invoiceAmountList.value = invoiceAmountList.value.filter( (item: any) => { return !checkoutInvoiceAmountList.value.includes(item) }, ) } } } // ----------------------------------------上传附件---------------------------------------------------- const uploadIndex = ref(0) // 上传附件的索引 const uploadType = ref('receivedAmount') // 上传附件的表格类型 // 删除附件 const del = (index: number, row: any) => { row.attachment.splice(index, 1) } const fileRef = ref() // 文件上传input const onFileChange = (event: any) => { // 原生上传 const files = event.target.files if (files.length !== 0) { // 创建formdata对象 const fd = new FormData() for (var i = 0; i < files.length; i++) { fd.append('multipartFile', files[i]) } const loading = ElLoading.service({}) UploadFile(fd).then((res) => { if (res.code === 200) { res.data.forEach((item: string) => { if (uploadType.value === 'receivedAmount') { // 到账金额明细 receivedAmountList.value[uploadIndex.value].attachment.push(item) console.log('receivedAmountList', receivedAmountList.value) } else { // 开票金额明细 invoiceAmountList.value[uploadIndex.value].attachment.push(item) } }) ElMessage.success('文件上传成功') loading.close() } else { ElMessage.error(res.message) loading.close() } }) } } const upload = (index: number, type: 'receivedAmount' | 'invoiceAmount') => { uploadIndex.value = index uploadType.value = type fileRef.value.click() } // ------------------------------------结算明细-------------------------------------------------------------------- const list = ref([]) // 开票金额明细 // 表头 const columns = ref([ { text: '器具名称', value: 'sampleName', align: 'center', required: true, type: 'text' }, { text: '型号规格', value: 'sampleModel', align: 'center', width: '180', required: true, type: 'input' }, { text: '套数/退', value: 'sets', align: 'center', required: true, width: '180', type: 'inputNumber' }, { text: '出厂编号', value: 'manufacturingNo', align: 'center', width: '180', required: true, type: 'input' }, { text: '委托日期', value: 'orderTime', align: 'center', required: true, width: '160', type: 'date' }, { text: '检测规范', value: 'accordStandard', align: 'center', width: '180', required: false, type: 'input' }, { text: '收费(元)含6%增值税', value: 'price', align: 'center', required: false, children: [ { text: '检测费(应)', value: 'shouldTestFee', align: 'center', width: '180', required: true, type: 'inputNumber' }, { text: '检测费(实)', value: 'actualTestFee', align: 'center', required: true, width: '180', type: 'inputNumber' }, // { text: '附加费', value: 'extraFee', align: 'center', required: false, width: '180', type: 'inputNumber' }, // { text: '修理费', value: 'repairFee', align: 'center', required: false, width: '180', type: 'inputNumber' }, // { text: '其他费', value: 'otherFee', align: 'center', required: false, width: '180', type: 'inputNumber' }, { text: '小计', value: 'subtotal', align: 'center', required: false, type: 'text' }, ], }, ]) // 表头 const columns_measure = ref([ { text: '样品名称名称', value: 'sampleName', align: 'center', required: true, type: 'text' }, { text: '检测项目', value: 'measureContent', align: 'center', required: true, type: 'input' }, { text: '测试规范', value: 'accordStandard', align: 'center', required: true, type: 'input' }, { text: '检测单价(元)', value: 'shouldTestFee', align: 'center', width: '180', required: false, type: 'inputNumber' }, { text: '备注', value: 'remark', align: 'center', required: false, type: 'text' }, ]) // ------------------------------------委托单--------------------------------------------- // 点击选择委托单编号 const handleClickOrder = () => { orderVisible.value = true } // 修改委托单对话框显隐 const changeOrderVisible = (val: boolean) => { orderVisible.value = val } // 选好委托单 const confirmCheckoutOrder = (val: Array<IOrderList>) => { if (val && val.length) { form.value.orderType = val[0].orderType getOrderDetail({ id: val[0].id }).then((res) => { // 样品清单 form.value.orderCode = res.data.orderCode // 委托单编号 form.value.orderId = res.data.id // 委托单id form.value.customerName = res.data.customerName // 委托方名称 form.value.orderTime = res.data.createTime // 委托日期(委托单创建时间) form.value.certificationCompany = res.data.certificationCompany // 证书单位名称 form.value.certificationCompanyAddress = res.data.certificationCompanyAddress // 证书单位地址 form.value.deliverer = res.data.deliverer // 联系人 form.value.delivererTel = res.data.delivererTel // 联系方式 form.value.sampleCount = res.data.customerSampleInfoList.length // 样品数量 list.value = res.data.customerSampleInfoList.map((item: { createTime: string; editable: boolean }) => { return { ...item, orderTime: item.createTime ? dayjs(item.createTime).format('YYYY-MM-DD') : item.createTime, // 委托日期 editable: pageType.value !== 'detail', shouldTestFee: 0, // 检测费(应) actualTestFee: 0, // 检测费(实) extraFee: 0, // 附加费 repairFee: 0, // 修理费 otherFee: 0, // 其他费 sets: 0, // 套数 subtotal: 0, // 小计 id: '', } }) }) } } // --------------------------------------------计算---------------------------------------------- // 计算 const handleInputNumberChange = ({ row }: any) => { if (form.value.orderType === '2') { // 计算小计 row.subtotal = calc(Number(calc(Number(calc(Number(calc(Number(row.shouldTestFee), Number(row.actualTestFee), '+')), row.extraFee, '+')), row.repairFee, '+')), row.otherFee, '+') // 计算检测费(应)(元) form.value.shouldTestFee = list.value.reduce((accumulator, current: any) => accumulator + current.shouldTestFee, 0) // 计算检测费(实)(元) form.value.actualTestFee = list.value.reduce((accumulator, current: any) => accumulator + current.actualTestFee, 0) // 实收合计 form.value.actualTotalFee = list.value.reduce((accumulator, current: any) => accumulator + current.subtotal, 0) if (list.value.every((item: { actualTestFee: number }) => item.actualTestFee === 0 || `${item.actualTestFee}` === 'undefined' || `${item.actualTestFee}` === 'null' || `${item.actualTestFee}` === '')) { form.value.feeStatus = '未录费' } else if (list.value.every((item: { actualTestFee: number }) => item.actualTestFee !== 0 || `${item.actualTestFee}` === 'undefined' || `${item.actualTestFee}` === 'null' || `${item.actualTestFee}` === '')) { form.value.feeStatus = '已录费' } else { form.value.feeStatus = '部分录费' } } else if (form.value.orderType === '1') { // 计算检测单价的和 form.value.actualTotalFee = list.value.reduce((accumulator, current: any) => accumulator + current.shouldTestFee, 0) if (list.value.every((item: { shouldTestFee: number }) => item.shouldTestFee === 0 || `${item.shouldTestFee}` === 'undefined' || `${item.shouldTestFee}` === 'null' || `${item.shouldTestFee}` === '')) { form.value.feeStatus = '未录费' } else if (list.value.every((item: { shouldTestFee: number }) => item.shouldTestFee !== 0 || `${item.shouldTestFee}` === 'undefined' || `${item.shouldTestFee}` === 'null' || `${item.shouldTestFee}` === '')) { form.value.feeStatus = '已录费' } else { form.value.feeStatus = '部分录费' } } } const changeTableInputNumber = () => { // 到账金额 form.value.receivedAmount = receivedAmountList.value.reduce((accumulator: any, current: any) => accumulator + current.money, 0) // 开票金额 form.value.invoiceAmount = invoiceAmountList.value.reduce((accumulator: any, current: any) => accumulator + current.money, 0) } // ---------------------------------------------------------------------------------------- const $router = useRouter() // 点击关闭 const close = () => { $router.back() } // 校验表格 const checkList = () => { if (!receivedAmountList.value.length) { ElMessage.warning('到账金额明细不能为空') return false } if (!invoiceAmountList.value.length) { ElMessage.warning('开票金额明细不能为空') return false } if (!list.value.length) { ElMessage.warning('结算明细不能为空') return false } if (!useCheckList(receivedAmountList.value, receivedAmountcolumns.value, '到账金额明细')) { return false } if (!useCheckList(invoiceAmountList.value, invoiceAmountcolumns.value, '开票金额明细')) { return false } console.log(form.value.orderType, 'form.value.orderType') if (form.value.orderType === '1') { if (!useCheckList(list.value, columns_measure.value, '结算明细')) { return false } } else { if (!useCheckList(list.value, columns.value, '结算明细')) { return false } } return true } // 保存 const save = () => { if (!checkList()) { return false } ruleFormRef.value.validate((valid: boolean) => { if (valid) { const loading = ElLoading.service({ lock: true, background: 'rgba(255, 255, 255, 0.8)', }) const receivedAmount = receivedAmountList.value.map((item: any) => { return { ...item, attachment: Array.isArray(item.attachment) ? item.attachment.join(',') : item.attachment, } }) const invoiceAmount = invoiceAmountList.value.map((item: any) => { return { ...item, attachment: Array.isArray(item.attachment) ? item.attachment.join(',') : item.attachment, } }) const params = { id: infoId.value, ...form.value, amountDetailsList: receivedAmount.concat(invoiceAmount), sampleList: list.value, } // 新建 if (pageType.value === 'add') { addBusinessSettlement(params).then((res) => { ElMessage.success('保存成功') loading.close() close() }).catch(() => { loading.close() }) } // 编辑 else if (pageType.value === 'edit') { updateBusinessSettlement(params).then((res) => { ElMessage.success('保存成功') loading.close() close() }).catch(() => { loading.close() }) } } else { console.log('表单校验不通过') } }) } // 编辑、详情--获取详细信息 const fetchDetail = () => { const loading = ElLoading.service({}) getBusinessSettlementDetail({ id: infoId.value }).then((res) => { form.value = res.data const amountList = res.data.amountDetailsList.map((item: { attachment: string }) => { return { ...item, attachment: item.attachment ? item.attachment.split(',') : item.attachment, } }) receivedAmountList.value = amountList.filter((item: { moneyType: string }) => `${item.moneyType}` === '1') invoiceAmountList.value = amountList.filter((item: { moneyType: string }) => `${item.moneyType}` === '2') list.value = res.data.sampleDetailsList.map((item: { editable: boolean; orderTime: string }) => { return { ...item, editable: pageType.value !== 'detail', orderTime: item.orderTime ? dayjs(item.orderTime).format('YYYY-MM-DD') : item.orderTime, } }) form.value.orderTime = res.data.sampleDetailsList[0].orderTime // 委托日期 form.value.sampleCount = res.data.sampleDetailsList.length // 样品数量 loading.close() }).catch(() => loading.close()) } onMounted(() => { // 编辑、详情获取详情页信息 if (pageType.value === 'edit' || pageType.value === 'detail') { fetchDetail() // 获取详细信息 } }) </script> <template> <app-container class="finance-businessSettlement"> <detail-page :title="`业务结算-${textMap[pageType]}`"> <template #btns> <el-button v-if="pageType !== 'detail'" type="primary" @click="save"> 保存 </el-button> <el-button type="info" @click="close"> 关闭 </el-button> </template> <div id="form"> <el-form ref="ruleFormRef" :model="form" :label-width="120" label-position="right" :rules="rules" > <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="委托单编号:" prop="orderCode"> <el-input v-model="form.orderCode" :placeholder="pageType === 'detail' ? '' : '请选择委托单编号'" :class="{ 'detail-input': pageType === 'detail' }" disabled > <template v-if="pageType !== 'detail'" #append> <el-button size="small" @click="handleClickOrder"> 选择 </el-button> </template> </el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="委托方名称:" prop="customerName"> <el-input v-model="form.customerName" :placeholder="pageType === 'detail' ? '' : '委托方名称'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="委托日期:" prop="orderTime"> <el-date-picker v-model="form.orderTime" type="date" class="full-width-input" :placeholder="pageType === 'detail' ? '' : '委托日期'" :class="{ 'detail-input': pageType === 'detail' }" disabled format="YYYY-MM-DD" value-format="YYYY-MM-DD" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="样品数量:" prop="sampleCount"> <el-input v-model="form.sampleCount" :placeholder="pageType === 'detail' ? '' : '样品数量'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="证书单位名称:" prop="certificationCompany"> <el-input v-model="form.certificationCompany" :placeholder="pageType === 'detail' ? '' : '证书单位名称'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="证书单位地址:" prop="certificationCompanyAddress"> <el-input v-model="form.certificationCompanyAddress" :placeholder="pageType === 'detail' ? '' : '证书单位地址'" :class="{ 'detail-input': pageType === 'detail' }" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="联系人" prop="deliverer"> <el-input v-model="form.deliverer" :placeholder="pageType === 'detail' ? '' : '联系人'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="联系电话" prop="delivererTel"> <el-input v-model="form.delivererTel" :placeholder="pageType === 'detail' ? '' : '联系电话'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="样品库房" prop="sampleWarehouse"> <el-select v-model="form.sampleWarehouse" :disabled="pageType === 'detail'" placeholder="请选择样品库房" style="width: 100%;" filterable > <el-option v-for="item in financeSampleWarehouseList" :key="item.id" :label="item.name" :value="item.name" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="证书库房" prop="certWarehouse"> <el-select v-model="form.certWarehouse" :disabled="pageType === 'detail'" placeholder="请选择证书库房" style="width: 100%;" filterable > <el-option v-for="item in financeCertWarehouseList" :key="item.id" :label="item.name" :value="item.name" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="费用状态" prop="feeStatus"> <el-input v-model="form.feeStatus" :placeholder="pageType === 'detail' ? '' : '费用状态'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="是否到账" prop="received"> <el-select v-model="form.received" :disabled="pageType === 'detail'" placeholder="请选择是否到账" style="width: 100%;" filterable > <el-option v-for="item in financeReceivedList" :key="item.id" :label="item.name" :value="item.name" /> </el-select> </el-form-item> </el-col> <el-col v-if="form.orderType === '2'" :span="6"> <el-form-item label="检测费(实)(元)" prop="actualTestFee"> <el-input v-model="form.actualTestFee" :placeholder="pageType === 'detail' ? '' : '检测费(实)(元)'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col v-if="form.orderType === '2'" :span="6"> <el-form-item label="检测费(应)(元)" prop="shouldTestFee"> <el-input v-model="form.shouldTestFee" :placeholder="pageType === 'detail' ? '' : '检测费(应)(元)'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item :label="form.orderType === '2' ? '实收合计(元) : ' : '报价合计(元) : '" prop="actualTotalFee"> <el-input v-model="form.actualTotalFee" :placeholder="pageType === 'detail' ? '' : '实收合计(元)'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="到账金额(元)" prop="receivedAmount"> <el-input v-model="form.receivedAmount" :placeholder="pageType === 'detail' ? '' : '到账金额(元)'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="开票金额(元)" prop="invoiceAmount"> <el-input v-model="form.invoiceAmount" :placeholder="pageType === 'detail' ? '' : '开票金额(元)'" :class="{ 'detail-input': pageType === 'detail' }" disabled /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="备注:"> <el-input v-model.trim="form.remark" :placeholder="pageType === 'detail' ? '' : '请输入备注'" class="full-width-input" type="textarea" autosize clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> </el-form> </div> </detail-page> <input v-show="false" ref="fileRef" type="file" name="upload" multiple @change="onFileChange"> <detail-block title="到账金额明细"> <template #btns> <el-button v-if="pageType !== 'detail'" type="primary" @click="addRow('addReceived')"> 增加行 </el-button> <el-button v-if="pageType !== 'detail'" type="info" @click="delRow('addReceived')"> 删除行 </el-button> </template> <el-table :data="receivedAmountList" border style="width: 100%;" max-height="600" @selection-change="(e) => handleSelectionChange(e, 'addReceived')" > <el-table-column v-if="pageType !== 'detail'" type="selection" width="38" /> <el-table-column align="center" label="序号" width="80" type="index" /> <el-table-column v-for="item in receivedAmountcolumns" :key="item.value" :prop="item.value" :label="item.text" :width="item.width" align="center" > <template #header> <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span> </template> <template #default="scope"> <el-input-number v-if="item.value === 'money' && pageType !== 'detail'" v-model="scope.row[item.value]" class="full-width-input" :min="0" @change="changeTableInputNumber" /> <el-date-picker v-if="item.value === 'moneyTime' && pageType !== 'detail'" v-model="scope.row[item.value]" type="date" class="full-width-input" :placeholder="pageType === 'detail' ? '' : '到账时间'" :class="{ 'detail-input': pageType === 'detail' }" format="YYYY-MM-DD" value-format="YYYY-MM-DD" /> <div v-if="item.value === 'attachment'"> <el-button v-if="pageType !== 'detail'" type="primary" :style="{ 'margin-right': '20px', 'float': 'right' }" @click="upload(scope.$index, 'receivedAmount')"> {{ '上传' }} </el-button> <div v-for="(item, index) in scope.row.attachment" :key="index" style="display: flex;padding: 6px 0;justify-content: center;"> <show-photo :minio-file-name="item"> <span v-if="pageType !== 'detail' && item" class="photo-close" @click="del(index, scope.row)">×</span> </show-photo> </div> </div> </template> </el-table-column> </el-table> </detail-block> <detail-block title="开票金额明细"> <template #btns> <el-button v-if="pageType !== 'detail'" type="primary" @click="addRow('invoiceAmount')"> 增加行 </el-button> <el-button v-if="pageType !== 'detail'" type="info" @click="delRow('invoiceAmount')"> 删除行 </el-button> </template> <el-table :data="invoiceAmountList" border style="width: 100%;" max-height="600" @selection-change="(e) => handleSelectionChange(e, 'invoiceAmount')" > <el-table-column v-if="pageType !== 'detail'" type="selection" width="38" /> <el-table-column align="center" label="序号" width="80" type="index" /> <el-table-column v-for="item in invoiceAmountcolumns" :key="item.value" :prop="item.value" :label="item.text" :width="item.width" align="center" > <template #header> <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span> </template> <template #default="scope"> <el-input-number v-if="item.value === 'money' && pageType !== 'detail'" v-model="scope.row[item.value]" class="full-width-input" :min="0" @change="changeTableInputNumber" /> <el-date-picker v-if="item.value === 'moneyTime' && pageType !== 'detail'" v-model="scope.row[item.value]" type="date" class="full-width-input" :placeholder="pageType === 'detail' ? '' : '到账时间'" :class="{ 'detail-input': pageType === 'detail' }" format="YYYY-MM-DD" value-format="YYYY-MM-DD" /> <div v-if="item.value === 'attachment'"> <el-button v-if="pageType !== 'detail'" type="primary" :style="{ 'margin-right': '20px', 'float': 'right' }" @click="upload(scope.$index, 'invoiceAmount')"> {{ '上传' }} </el-button> <div v-for="(item, index) in scope.row.attachment" :key="index" style="display: flex;padding: 10px 0;justify-content: center;"> <show-photo :minio-file-name="item"> <span v-if="pageType !== 'detail' && item" class="photo-close" @click="del(index, scope.row)">×</span> </show-photo> </div> </div> </template> </el-table-column> </el-table> </detail-block> <detail-block title="结算明细" style="margin-bottom: 32px;"> <multi-table v-if="form.orderType === '2'" :table-data="list" :table-header="columns" :need-index="true" :min="0" @handleInputNumberChange="handleInputNumberChange" /> <multi-table v-if="form.orderType === '1'" :table-data="list" :table-header="columns_measure" :need-index="true" :min="0" @handleInputNumberChange="handleInputNumberChange" /> </detail-block> <!-- 选择委托单组件 --> <select-order v-model:visible="orderVisible" @confirmCheckout="confirmCheckoutOrder" @changeVisible="changeOrderVisible" /> </app-container> </template> <style lang="scss" scoped> // 样式 .create-check { margin-top: 10px; .top-info { display: flex; flex-direction: column; width: 100%; padding-right: 10px; border-radius: 10px; background-color: #fff; // padding: 10px; .title-button { display: flex; align-items: center; &::before { content: ""; flex: 1; } .button-group { flex: 1; display: flex; justify-content: flex-end; } } .form-area { margin-top: 40px; } } } </style> <style lang="scss"> .finance-businessSettlement { // 单元格样式 .el-table__cell { position: static !important; // 解决el-image 和 el-table冲突层级冲突问题 } } </style>