fix:支出合同和收入合同的完善,修复了一些bug

This commit is contained in:
Maple 2025-08-12 10:27:00 +08:00
parent 33eb03121d
commit baef368840
6 changed files with 45 additions and 54 deletions

View File

@ -50,6 +50,11 @@
<a-descriptions-item label="备注"> <a-descriptions-item label="备注">
{{ contractDetail.notes }} {{ contractDetail.notes }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="合同内容">
<a-typography-paragraph :ellipsis="{ rows: 5, expandable: true, collapseText: '收起', suffix: '' }">
{{ contractDetail.contractText || '—' }}
</a-typography-paragraph>
</a-descriptions-item>
</a-descriptions> </a-descriptions>
</div> </div>
<div v-else-if="!loading" class="empty-container"> <div v-else-if="!loading" class="empty-container">

View File

@ -7,16 +7,8 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item field="projectId" label="项目"> <a-form-item field="projectName" label="项目">
<a-select v-model="contractData.projectId" <a-input v-model="contractData.projectName" placeholder="请输入项目名称" allow-clear />
:options="projectOptions"
:loading="projectLoading"
:virtual-list-props="virtualListProps"
placeholder="请选择项目"
allow-search allow-clear
@focus="handleProjectFocus"
@dropdown-visible-change="handleProjectDropdown"
@search="handleProjectSearch" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>

View File

@ -426,7 +426,8 @@ const handleAddSubmit = async () => {
paymentDate: newContractData.value.paymentDate || null, paymentDate: newContractData.value.paymentDate || null,
performanceDeadline: newContractData.value.performanceDeadline || null, performanceDeadline: newContractData.value.performanceDeadline || null,
productService: newContractData.value.productService || '', productService: newContractData.value.productService || '',
projectId: newContractData.value.projectId || '', // projectId
projectName: newContractData.value.projectName || '',
salespersonId: (newContractData.value as any).salespersonId || '', salespersonId: (newContractData.value as any).salespersonId || '',
signDate: newContractData.value.signDate || null, signDate: newContractData.value.signDate || null,
type: newContractData.value.type || '支出合同', type: newContractData.value.type || '支出合同',
@ -525,7 +526,7 @@ const handleEditSubmit = async () => {
type: editedContractData.value.type || '', type: editedContractData.value.type || '',
}; };
console.log('Edited Contract Data:', requestData); // 便 // console.log('Edited Contract Data:', requestData); // 便
// /contract PUT // /contract PUT
const response = await http.put('/contract', requestData); const response = await http.put('/contract', requestData);

View File

@ -50,6 +50,11 @@
<a-descriptions-item label="备注"> <a-descriptions-item label="备注">
{{ contractDetail.notes }} {{ contractDetail.notes }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="合同内容">
<a-typography-paragraph :ellipsis="{ rows: 5, expandable: true, collapseText: '收起', suffix: '' }">
{{ contractDetail.contractText || '—' }}
</a-typography-paragraph>
</a-descriptions-item>
</a-descriptions> </a-descriptions>
</div> </div>
<div v-else-if="!loading" class="empty-container"> <div v-else-if="!loading" class="empty-container">

View File

@ -7,16 +7,8 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item field="projectId" label="项目"> <a-form-item field="projectName" label="项目">
<a-select v-model="contractData.projectId" <a-input v-model="contractData.projectName" placeholder="请输入项目名称" allow-clear />
:options="projectOptions"
:loading="projectLoading"
:virtual-list-props="virtualListProps"
placeholder="请选择项目"
allow-search allow-clear
@focus="handleProjectFocus"
@dropdown-visible-change="handleProjectDropdown"
@search="handleProjectSearch" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>

View File

@ -148,38 +148,18 @@ interface ContractItem {
// //
const searchForm = reactive({ const searchForm = reactive({
contractName: '',
contractCode: '', contractCode: '',
client: '', client: '',
status: '', status: '',
signDate: '', signDateRange: [] as [string, string] | [],
page: 1, page: 1,
size: 10, size: 10,
}) })
// //
const queryFormColumns = [ const queryFormColumns = [
{ { field: 'client', label: '客户', type: 'input' as const, props: { placeholder: '请输入客户名称' } },
field: 'contractName', { field: 'status', label: '合同状态', type: 'select' as const, props: {
label: '合同名称',
type: 'input' as const,
props: {
placeholder: '请输入合同名称',
},
},
{
field: 'client',
label: '客户',
type: 'input' as const,
props: {
placeholder: '请输入客户名称',
},
},
{
field: 'status',
label: '合同状态',
type: 'select' as const,
props: {
placeholder: '请选择合同状态', placeholder: '请选择合同状态',
options: [ options: [
{ label: '未确认', value: '未确认' }, { label: '未确认', value: '未确认' },
@ -191,6 +171,10 @@ const queryFormColumns = [
], ],
}, },
}, },
{ field: 'signDateRange', label: '签署时间', type: 'range-picker' as const, props: {
placeholder: ['开始时间', '结束时间'], showTime: true, format: 'YYYY-MM-DD HH:mm:ss',
}
},
] ]
// //
@ -222,27 +206,39 @@ const fetchContractList = async () => {
const params = { const params = {
page: searchForm.page, page: searchForm.page,
pageSize: searchForm.size, pageSize: searchForm.size,
contractName: searchForm.contractName,
code: searchForm.contractCode, code: searchForm.contractCode,
customer: searchForm.client, customer: searchForm.client,
contractStatus: searchForm.status, contractStatus: searchForm.status,
signDate: searchForm.signDate, signDateStart: Array.isArray(searchForm.signDateRange) && searchForm.signDateRange.length === 2 ? searchForm.signDateRange[0] : undefined,
signDateEnd: Array.isArray(searchForm.signDateRange) && searchForm.signDateRange.length === 2 ? searchForm.signDateRange[1] : undefined,
} }
const response = await http.get('/contract/list', params) const response = await http.get('/contract/list', params)
if (response.code === 200) { if (response.code === 200) {
// ""
const allContracts = response.rows || [] const allContracts = response.rows || []
const revenueContracts = allContracts.filter((item: ContractItem) => item.type === '收入合同') let revenueContracts = allContracts.filter((item: ContractItem) => item.type === '收入合同')
//
const range = Array.isArray(searchForm.signDateRange) && searchForm.signDateRange.length === 2 ? searchForm.signDateRange : null
if (range) {
const [start, end] = range
const s = new Date(start as any).getTime(), e = new Date(end as any).getTime()
if (!Number.isNaN(s) && !Number.isNaN(e)) {
revenueContracts = revenueContracts.filter((item: ContractItem) => {
if (!item.signDate) return false
const t = new Date(item.signDate as any).getTime()
return !Number.isNaN(t) && t >= s && t <= e
})
}
}
//
dataList.value = revenueContracts.map((item: ContractItem) => ({ dataList.value = revenueContracts.map((item: ContractItem) => ({
...item, ...item,
pendingAmount: (item.amount || 0) - (item.receivedAmount || 0), pendingAmount: (item.amount || 0) - (item.receivedAmount || 0),
})) }))
pagination.total = Number.parseInt(response.total) || 0 pagination.total = dataList.value.length
} else { } else {
Message.error(response.msg || '获取合同列表失败') Message.error(response.msg || '获取合同列表失败')
dataList.value = [] dataList.value = []
@ -290,11 +286,10 @@ const search = async () => {
const reset = () => { const reset = () => {
Object.assign(searchForm, { Object.assign(searchForm, {
contractName: '',
contractCode: '', contractCode: '',
client: '', client: '',
status: '', status: '',
signDate: '', signDateRange: [],
page: 1, page: 1,
size: 10, size: 10,
}) })
@ -362,7 +357,8 @@ const handleAddSubmit = async () => {
paymentDate: newContractData.value.paymentDate || null, paymentDate: newContractData.value.paymentDate || null,
performanceDeadline: newContractData.value.performanceDeadline || null, performanceDeadline: newContractData.value.performanceDeadline || null,
productService: newContractData.value.productService || '', productService: newContractData.value.productService || '',
projectId: newContractData.value.projectId || '', // projectId
projectName: newContractData.value.projectName || '',
salespersonId: (newContractData.value as any).salespersonId || '', salespersonId: (newContractData.value as any).salespersonId || '',
signDate: newContractData.value.signDate || null, signDate: newContractData.value.signDate || null,
type: newContractData.value.type || '收入合同', type: newContractData.value.type || '收入合同',