diff --git a/src/api/dayPlan/PngSettleHdrPur/index.ts b/src/api/dayPlan/PngSettleHdrPur/index.ts index 0d5ce15..0da8393 100644 --- a/src/api/dayPlan/PngSettleHdrPur/index.ts +++ b/src/api/dayPlan/PngSettleHdrPur/index.ts @@ -3,17 +3,64 @@ import { defHttp } from '/@/utils/http/axios'; import { ErrorMessageMode } from '/#/axios'; enum Api { - Page = '/dayPlan/pngSettleHdrPur/page', + // Page = '/dayPlan/pngSettleHdrPur/page', + Page = '/magic-api/dayPlan/pngSettlePurHdrPage', List = '/dayPlan/pngSettleHdrPur/list', Info = '/dayPlan/pngSettleHdrPur/info', LngPngSettleHdr = '/dayPlan/pngSettleHdrPur', - + PageAdd = '/magic-api/dayPlan/pngSettlePurHdrSelectPage', + date = '/magic-api/dayPlan/pngSettlePurHdrSelectDateTo', + DtlList = '/magic-api/dayPlan/pngSettlePurHdrDtlList', + LngPngSettleHdrCancel = '/dayPlan/pngSettleHdrPur/cancel', DataLog = '/dayPlan/pngSettleHdrPur/datalog', } - +export async function cancelLngPngSettleHdr(ids: string[], mode: ErrorMessageMode = 'modal') { + return defHttp.post( + { + url: Api.LngPngSettleHdrCancel, + data: ids, + }, + { + errorMessageMode: mode, + }, + ); +} +export async function getLngPngSettleHdrDtlListPur(params, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.DtlList, + params, + }, + { + errorMessageMode: mode, + }, + ); +} +export async function getLngPngSettleHdrDate(params, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.date, + params, + }, + { + errorMessageMode: mode, + }, + ); +} +export async function getLngPngSettleHdrPageAddPur(params: LngPngSettleHdrPageParams, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.PageAdd, + params, + }, + { + errorMessageMode: mode, + }, + ); +} /** * @description: 查询LngPngSettleHdr分页列表 */ diff --git a/src/components/common/measureListModal.vue b/src/components/common/measureListModal.vue index 76aa896..3164cb9 100644 --- a/src/components/common/measureListModal.vue +++ b/src/components/common/measureListModal.vue @@ -28,10 +28,16 @@ import { useMessage } from '/@/hooks/web/useMessage'; import { useI18n } from '/@/hooks/web/useI18n'; import { getLngPngSettleHdrPageAdd} from '/@/api/dayPlan/PngSettleHdr'; + import { getLngPngSettleHdrPageAddPur} from '/@/api/dayPlan/PngSettleHdrPur' import { parseDownloadUrl} from '/@/api/system/file'; import { downloadByUrl } from '/@/utils/file/download'; import { DataFormat, FormatOption, DATE_FORMAT, FormatType } from '/@/utils/dataFormat'; - + + const props = defineProps({ + selectType: { type: String, default: 'checkbox' }, + pageType: String + + }); const { t } = useI18n(); const checked = ref(false) const codeFormSchema: FormSchema[] = [ @@ -60,6 +66,21 @@ { dataIndex: 'file', title: '附件', align: 'left',width: 200}, { dataIndex: 'settledSign', title: '已结算', align: 'left',width: 100}, ]; + const columnsPur: BasicColumn[] = [ + { dataIndex: 'datePlan', title: '计划日期', align: 'left', width: 100}, + { dataIndex: 'dateMea', title: '计量日期', align: 'left',width: 100}, + { dataIndex: 'suSname', title: '供应商', align: 'left', }, + { dataIndex: 'pointUpName', title: '上载点', align: 'left',}, + { dataIndex: 'cuSname', title: '客户', align: 'left',}, + { dataIndex: 'pointDelyName', title: '下载点', align: 'left',}, + { dataIndex: 'comName', title: '交易主体', align: 'left',}, + { dataIndex: 'qtyMeaGj', title: '完成量(吉焦)', align: 'left',width: 120}, + { dataIndex: 'qtyMeaM3', title: '完成量(方)', align: 'left',width: 120}, + { dataIndex: 'rateM3Gj', title: '比值(方/吉焦)', align: 'left',width: 120}, + { dataIndex: 'kpName', title: '采购合同', align: 'left',}, + { dataIndex: 'file', title: '附件', align: 'left',width: 200}, + { dataIndex: 'settledSign', title: '已结算', align: 'left',width: 100}, + ]; const emit = defineEmits(['success', 'register']); @@ -68,24 +89,21 @@ const rowId = ref(''); const selectedKeys = ref([]); const selectedValues = ref([]); - const props = defineProps({ - selectType: { type: String, default: 'checkbox' }, - }); const searchParams = ref({}) const tableData = ref([]) const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { - setModalProps({ confirmLoading: false }); isUpdate.value = !!data?.isUpdate; searchParams.value = data.searchParams || {} }); - const [registerTable, { getDataSource, setTableData, updateTableDataRecord, reload }] = useTable({ + const [registerTable, { getDataSource, setTableData, updateTableDataRecord, reload,clearSelectedRowKeys }] = useTable({ title: t('待结算记录'), - api: getLngPngSettleHdrPageAdd, - columns, + api: props.pageType=='supplier'?getLngPngSettleHdrPageAddPur: getLngPngSettleHdrPageAdd, + rowKey: props.pageType=='supplier' ? 'salesPurId': 'salesId', + columns: props.pageType=='supplier' ? columnsPur: columns, bordered: true, pagination: true, @@ -95,10 +113,16 @@ schemas: codeFormSchema, fieldMapToTime: [['datePlan', ['startDate', 'endDate'], 'YYYY-MM-DD']], showResetButton: true, + resetButtonOptions: { + text: '重置', + onClick: () => { + checked.value = false + }, + }, }, immediate: false, // 设置为不立即调用 beforeFetch: (params) => { - return { ...params,page:params.limit,...searchParams.value}; + return { ...params,page:params.limit,...searchParams.value,settledSign: checked.value ? 0 : null}; }, afterFetch: (res) => { tableData.value = res || [] @@ -144,7 +168,7 @@ } }; const checkChange = (val) => { - reload({ searchInfo: { settledSign: checked.value ? 0 : null } }); + reload(); } const handleDownload = (info) => { const url = parseDownloadUrl(info.response ? info.response.data.fileUrl : info.fileUrl); @@ -166,6 +190,7 @@ return } closeModal(); + clearSelectedRowKeys() emit('success', selectedValues.value); } diff --git a/src/components/common/priceComposeListModal.vue b/src/components/common/priceComposeListModal.vue index e007309..bb98a1a 100644 --- a/src/components/common/priceComposeListModal.vue +++ b/src/components/common/priceComposeListModal.vue @@ -32,6 +32,7 @@ import { useMessage } from '/@/hooks/web/useMessage'; import { useI18n } from '/@/hooks/web/useI18n'; import { getLngPngSettleHdrDtlList} from '/@/api/dayPlan/PngSettleHdr'; + import { getLngPngSettleHdrDtlListPur} from '/@/api/dayPlan/PngSettleHdrPur'; import { DataFormat, FormatOption, DATE_FORMAT, FormatType } from '/@/utils/dataFormat'; const { t } = useI18n(); @@ -49,7 +50,10 @@ ]; const emit = defineEmits(['success', 'register']); - + const props = defineProps({ + pageType: String + + }); const { notification } = useMessage(); const isUpdate = ref(true); const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { @@ -58,10 +62,14 @@ curRecord.value = data.record || {} isUpdate.value = !!data?.isUpdate; isDisable.value = data.isDisable - if (!(curRecord.value.lngPngSettleSalesDtlList || []).length) { + if (!(curRecord.value.lngPngSettleSalesDtlList || []).length || !(curRecord.value.lngPngSettlePurDtlList || []).length) { getList() - } else { - tableData.value = curRecord.value.lngPngSettleSalesDtlList || [] + } else { + if (props.pageType == 'supplier') { + tableData.value = curRecord.value.lngPngSettlePurDtlList || [] + } else { + tableData.value = curRecord.value.lngPngSettleSalesDtlList || [] + } tableData.value = DataFormat.format(tableData.value, [ FormatOption.createQty('qtySettleGj'), FormatOption.createQty('qtySettleM3'), @@ -88,12 +96,15 @@ } } const getList = async () => { - let res = await getLngPngSettleHdrDtlList({}) + let request = props.pageType=='supplier'?getLngPngSettleHdrDtlListPur: getLngPngSettleHdrDtlList + let obj = {} + if (props.pageType=='supplier') { + obj.salesPurId = curRecord.value.salesPurId + } else { + obj.salesId = curRecord.value.salesId + } + let res = await request(obj) tableData.value = res || [] - // tableData.value.forEach(v => { - // v.priceDesc = v.uomName + (v.uomCode == 'M3' ? v.rateQtyM3 : v.rateQtyGj) + v.priceName - // }) - } async function handleSubmit() { closeModal(); diff --git a/src/components/common/settleSalesPurList.vue b/src/components/common/settleSalesPurList.vue new file mode 100644 index 0000000..570f6bf --- /dev/null +++ b/src/components/common/settleSalesPurList.vue @@ -0,0 +1,269 @@ + + + diff --git a/src/router/routes/basic.ts b/src/router/routes/basic.ts index eed9f3f..49510fd 100644 --- a/src/router/routes/basic.ts +++ b/src/router/routes/basic.ts @@ -302,6 +302,14 @@ export const PAGE_CUSTOM_ROUTE: AppRouteRecordRaw[] = [{ title: (route) => ('管道气销售合同详情') } }, + { + path: '/contract/ContractPurPng/viewForm', + name: 'ContractPurPngviewForm', + component: () => import('/@/views/contract/ContractPurPng/components/createForm.vue'), + meta: { + title: (route) => ('管道气采购合同详情') + } + } ] diff --git a/src/views/contract/ContractPurPng/components/createForm.vue b/src/views/contract/ContractPurPng/components/createForm.vue index 6fcf2c8..c17fdc2 100644 --- a/src/views/contract/ContractPurPng/components/createForm.vue +++ b/src/views/contract/ContractPurPng/components/createForm.vue @@ -1,6 +1,6 @@ @@ -133,8 +112,8 @@ import { message } from 'ant-design-vue'; import UploadList from '/@/components/Form/src/components/UploadList.vue'; import customerListModal from '/@/components/common/customerListModal.vue'; - import measureListModal from '/@/components/common/measureListModal.vue'; - import priceComposeListModal from '/@/components/common/priceComposeListModal.vue'; + import settleSalesPurList from '/@/components/common/settleSalesPurList.vue'; + import { getAllCom} from '/@/api/contract/ContractPurInt'; import { DataFormat, FormatOption, DATE_FORMAT, FormatType } from '/@/utils/dataFormat'; @@ -172,9 +151,9 @@ settleTypeCode: 'I', rpSign: 'Y' }); - const [registerMeasure, { openModal:openModalMeasure}] = useModal(); + const [registerCustomer, { openModal:openModalCustomer}] = useModal(); - const [registerPrice, { openModal:openModalPrice}] = useModal(); + const rules= reactive({ settleMonth: [{ required: true, message: "该项为必填项", trigger: 'change' }], dateFrom: [{ required: true, message: "该项为必填项", trigger: 'change' }], @@ -195,24 +174,7 @@ comIdList: [], signList: [] }); - const selectedKeys = ref([]) - const columns = ref([ - { title: t('序号'), dataIndex: 'index', key: 'index', customRender: (column) => `${column.index + 1}` ,width: 80}, - { title: t('计划日期'), dataIndex: 'datePlan', width:120}, - { title: t('提气日期'), dataIndex: 'dateMea', width: 120}, - { title: t('合同名称'), dataIndex: 'ksName', width: 200}, - { title: t('下载点'), dataIndex: 'pointDelyName',width: 150 }, - { title: t('完成量(吉焦)'), dataIndex: 'qtyMeaGj', width: 150}, - { title: t('完成量(方)'), dataIndex: 'qtyMeaM3', width: 120}, - { title: t('结算量(吉焦)'), dataIndex: 'qtySettleGj', width: 140}, - { title: t('结算量(方)'), dataIndex: 'qtySettleM3', width: 130}, - { title: t('结算价格(元/吉焦)'), dataIndex: 'priceGj', width: 180}, - { title: t('结算价格(元/方)'), dataIndex: 'priceM3', width: 170}, - { title: t('结算金额(元)'), dataIndex: 'amount', width: 140}, - { title: t('价格组成'), dataIndex: 'priceDesc', width: 180}, - { title: t('结算次数'), dataIndex: 'settleTimes', width: 100}, - { title: t('操作'), dataIndex: 'operation', width: 80}, - ]); + watch( () => props.id, (val) => { @@ -240,9 +202,7 @@ } }); - const onSelectChange = (rowKeys) => { - selectedKeys.value = rowKeys; - } + const uploadChange = (val) => { dataFileAccount.value = val } @@ -291,6 +251,34 @@ formState.qtySettleM3 = a.qtySettleM3 formState.amount = a.amount } + const settleChange = (val) => { + dataList.value = val + numClear() + tableCount() + } + const numClear = () => { + if (!dataList.value.length) { + formState.qtySettleGj = '' + formState.qtySettleM3 = '' + formState.amount = '' + } + } + const tableCount = () => { + let qtySettleGj = 0 + let qtySettleM3 = 0 + let amount = 0 + dataList.value.forEach(v => { + if (Number(v.settleTimes) == 1){ + qtySettleGj+=Number(v.qtySettleGj) || 0 + qtySettleM3+=Number(v.qtySettleM3) || 0 + } + amount+=Number(v.amount) || 0 + }) + formState.qtySettleGj = qtySettleGj.toFixed(3) + formState.qtySettleM3 = qtySettleM3.toFixed(3) + formState.amount = amount.toFixed(2) + numFormat() + } const comIdChange = (val) => { if (!val)return getDate() @@ -328,115 +316,6 @@ } return endValue.valueOf() <= startValue.valueOf(); } - const handleBtn = (type) => { - if (type === 'add') { - if (!formState.cpCode || !formState.comId) { - message.warn('请选择客户和交易主体') - return - } - let obj = { - cpCode: formState.cpCode, - comId: formState.comId - } - openModalMeasure(true,{isUpdate: false, searchParams: obj}) - } else { - if (!selectedKeys.value.length) { - message.warn('请选择删除数据') - return - } - selectedKeys.value.forEach(i => { - let idx = dataList.value.findIndex(v=>v.salesId == i) - idx>-1&&dataList.value.splice(idx, 1) - }); - setTimeout(() => { - selectedKeys.value = [] - numClear() - }, 1000); - } - } - const numClear = () => { - if (!dataList.value.length) { - formState.qtySettleGj = '' - formState.qtySettleM3 = '' - formState.amount = '' - } - } - const handleSuccessMeasure = (val) => { - val.forEach(i =>{ - delete i.lngFileUploadList - }) - if (!dataList.value.length) { - dataList.value = val - return - } - val.forEach(v=> { - let idx = dataList.value.findIndex(k=>k.salesId==v.salesId) - idx<0&&dataList.value.push(v) - }) - } - const btnCheck = (record, index, type) => { - if (type == 'delete') { - dataList.value.splice(index, 1) - numClear() - } - if (type == 'price'){ - openModalPrice(true,{isUpdate: false, record,isDisable: isDisable.value}) - } - if (type == 'ksName'){ - router.push({ - path: '/contract/ContractSales/viewForm', - query: { - formPath: 'dayPlan/PngSettleHdr', - id: record.ksId, - disabled: true - } - }); - } - } - const handleSuccessPrice = (arr, curRecord) => { - let qtySettleGj = 0 - let qtySettleM3 = 0 - let amount = 0 - let idx = dataList.value.findIndex(v =>v.salesId == curRecord.salesId) - arr.forEach(v=> { - qtySettleGj+=Number(v.qtySettleGj) || 0 - qtySettleM3+=Number(v.qtySettleM3) || 0 - amount+=Number(v.amount) || 0 - if (idx>-1&&!dataList.value[idx].id) { - v.id = '' - } - }) - // price_gj=amount/qty_settle_gj,保留4位小数 - // price_m3=amount/qty_settle_m3,保留4位小数 - let priceGj = qtySettleGj ? Number(amount) / Number(qtySettleGj) : '0' - let priceM3 = qtySettleM3 ? Number(amount) / Number(qtySettleM3) : '0' - - if (idx > -1) { - dataList.value[idx].qtySettleGj = qtySettleGj.toFixed(3) - dataList.value[idx].qtySettleM3 = qtySettleM3.toFixed(3) - dataList.value[idx].amount = amount.toFixed(2) - dataList.value[idx].priceGj = priceGj.toFixed(4) - dataList.value[idx].priceM3 = priceM3.toFixed(4) - dataList.value[idx].lngPngSettleSalesDtlList = arr - tableCount() - } - } - const tableCount = () => { - let qtySettleGj = 0 - let qtySettleM3 = 0 - let amount = 0 - dataList.value.forEach(v => { - if (Number(v.settleTimes) == 1){ - qtySettleGj+=Number(v.qtySettleGj) || 0 - qtySettleM3+=Number(v.qtySettleM3) || 0 - } - amount+=Number(v.amount) || 0 - }) - formState.qtySettleGj = qtySettleGj.toFixed(3) - formState.qtySettleM3 = qtySettleM3.toFixed(3) - formState.amount = amount.toFixed(2) - numFormat() - } const onSearchCustomer = () => { openModalCustomer(true,{isUpdate: false}) } @@ -517,9 +396,4 @@ margin-bottom: 12px; border-bottom: 1px solid #eee; } - .btnBox { - span { - margin: 0 30px; - } - } diff --git a/src/views/dayPlan/PngSettleHdrPur/components/config.ts b/src/views/dayPlan/PngSettleHdrPur/components/config.ts index 24dbec8..362971e 100644 --- a/src/views/dayPlan/PngSettleHdrPur/components/config.ts +++ b/src/views/dayPlan/PngSettleHdrPur/components/config.ts @@ -53,7 +53,7 @@ export const columns: BasicColumn[] = [ }, { - dataIndex: 'cpName', + dataIndex: 'suSname', title: '供应商简称', componentType: 'input', align: 'left', diff --git a/src/views/dayPlan/PngSettleHdrPur/components/createForm.vue b/src/views/dayPlan/PngSettleHdrPur/components/createForm.vue new file mode 100644 index 0000000..2c6f991 --- /dev/null +++ b/src/views/dayPlan/PngSettleHdrPur/components/createForm.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/src/views/dayPlan/PngSettleHdrPur/index.vue b/src/views/dayPlan/PngSettleHdrPur/index.vue index 0f42c89..cb0f4bf 100644 --- a/src/views/dayPlan/PngSettleHdrPur/index.vue +++ b/src/views/dayPlan/PngSettleHdrPur/index.vue @@ -34,7 +34,7 @@ import { Modal } from 'ant-design-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { BasicTable, useTable, TableAction, ActionItem } from '/@/components/Table'; - import { getLngPngSettleHdrPage, deleteLngPngSettleHdr} from '/@/api/dayPlan/PngSettleHdrPur'; + import { getLngPngSettleHdrPage, deleteLngPngSettleHdr,cancelLngPngSettleHdr} from '/@/api/dayPlan/PngSettleHdrPur'; import { PageWrapper } from '/@/components/Page'; import { useMessage } from '/@/hooks/web/useMessage'; import { useI18n } from '/@/hooks/web/useI18n'; @@ -299,7 +299,21 @@ } } function handleCancel() { - + if (!selectedKeys.value.length) { + notification.warning({ + message: '提示', + description: t('请选择需要取消结算的数据'), + }); + return + } + cancelLngPngSettleHdr(selectedKeys.value).then((_) => { + handleSuccess(); + notification.success({ + message: 'Tip', + description: t('取消成功!'), + }); + clearSelectedRowKeys() + }); } function handleDelete(record: Recordable) { deleteList([record.id]); diff --git a/src/views/secondDev/customFormConfig.ts b/src/views/secondDev/customFormConfig.ts index 354d8ad..3fe5ad0 100644 --- a/src/views/secondDev/customFormConfig.ts +++ b/src/views/secondDev/customFormConfig.ts @@ -11,6 +11,7 @@ export const customFormConfig = { 'addContractSalesLng', 'ContractPurInt', 'ContractSalesInt', - 'addDayPlanPngSettleSales' + 'addDayPlanPngSettleSales', + 'addDayPlanPngSettlePur' ], }; \ No newline at end of file