Merge remote-tracking branch 'websoft/master'

# Conflicts:
#	src/views/settlement/receivable-payable-detail.vue
This commit is contained in:
2026-08-31 19:30:16 +08:00
25 changed files with 493 additions and 187 deletions
+16 -2
View File
@@ -27,6 +27,16 @@
:value="item.value"
/>
</el-select>
<el-cascader
v-else-if="field.type === 'cascader'"
v-model="query[field.prop]"
:options="organizationTreeOptions"
:props="organizationCascaderProps"
clearable
filterable
style="width: 100%"
placeholder="请选择"
/>
<el-input v-else v-model="query[field.prop]" clearable placeholder="请输入" />
</el-form-item>
<div class="formal-page__search-actions">
@@ -168,6 +178,7 @@ import {
formalSettlementSearchFields,
paymentStatusOptions,
} from '@/option/settlement/formalSettlementSearch';
import organizationSearch from '@/mixins/organization-search';
import { formalSettlementTableColumns } from '@/option/settlement/formalSettlementTable';
import FormalSettlementEditor from './components/formal-settlement-editor.vue';
import FormalSettlementTablePanel from './components/formal-settlement-table-panel.vue';
@@ -176,7 +187,7 @@ const emptyQuery = () => ({
formalSettlementNo: '',
preSettlementNo: '',
projectName: '',
deptName: '',
deptName: [],
contractNo: '',
payerName: '',
payeeName: '',
@@ -190,6 +201,7 @@ const emptyQuery = () => ({
export default {
name: 'FormalSettlement',
components: { FormalSettlementEditor, FormalSettlementTablePanel },
mixins: [organizationSearch],
data() {
return {
ArrowDown,
@@ -231,6 +243,7 @@ export default {
},
},
mounted() {
this.loadOrganizationOptions();
this.loadTable();
this.openRouteDetail();
},
@@ -517,7 +530,8 @@ export default {
XLSX.writeFile(workbook, `正式结算单${this.$dayjs().format('YYYY-MM-DD HH-mm-ss')}.xlsx`);
},
buildQueryParams() {
const params = { ...this.query };
// 所属组织级联返回 id 路径,转成组织名称传给后端(用副本,避免污染搜索框回显)
const params = this.normalizeOrganizationSearch({ ...this.query }, 'deptName');
params.settlementType = this.activeSettlementType;
const range = params.createDateRange || [];
delete params.createDateRange;
+17 -2
View File
@@ -29,6 +29,16 @@
:value="item.value"
/>
</el-select>
<el-cascader
v-else-if="field.type === 'cascader'"
v-model="query[field.prop]"
:options="organizationTreeOptions"
:props="organizationCascaderProps"
clearable
filterable
style="width: 100%"
placeholder="请选择"
/>
<el-input v-else v-model="query[field.prop]" clearable placeholder="请输入" />
</el-form-item>
</template>
@@ -283,6 +293,7 @@ import {
voidBill,
} from '@/api/settlement/preSettlement';
import { preSettlementSearchFields } from '@/option/settlement/preSettlementSearch';
import organizationSearch from '@/mixins/organization-search';
import { preSettlementTableColumns } from '@/option/settlement/preSettlementTable';
import { createSettlementTransfer } from '@/utils/settlement-transfer';
import { downloadFile } from '@/utils/util';
@@ -292,7 +303,7 @@ const emptyQuery = () => ({
preSettlementNo: '',
advanceNo: '',
projectName: '',
deptName: '',
deptName: [],
contractName: '',
contractNo: '',
payeeName: '',
@@ -304,6 +315,7 @@ const emptyQuery = () => ({
export default {
name: 'PreSettlement',
components: { PreSettlementEditor },
mixins: [organizationSearch],
data() {
return {
ArrowDown,
@@ -357,6 +369,7 @@ export default {
},
},
created() {
this.loadOrganizationOptions();
this.loadTable();
this.openRouteDetail();
},
@@ -377,8 +390,10 @@ export default {
},
buildQuery() {
const range = this.query.createDateRange || [];
// 所属组织级联返回 id 路径,转成组织名称传给后端(用副本,避免污染搜索框回显)
const query = this.normalizeOrganizationSearch({ ...this.query }, 'deptName');
return {
...this.query,
...query,
createDateRange: undefined,
createStartDate: range[0],
createEndDate: range[1],
+16 -2
View File
@@ -25,6 +25,16 @@
:label="item.label"
:value="item.value"
/></el-select>
<el-cascader
v-else-if="field.type === 'cascader'"
v-model="query[field.prop]"
:options="organizationTreeOptions"
:props="organizationCascaderProps"
clearable
filterable
style="width: 100%"
placeholder="请选择"
/>
<el-input v-else v-model="query[field.prop]" clearable placeholder="请输入" />
</el-form-item>
<div class="settlement-adjustment-page__search-actions">
@@ -159,6 +169,7 @@ import { ArrowDown, ArrowUp, Refresh } from '@element-plus/icons-vue';
import { mapGetters } from 'vuex';
import * as api from '@/api/settlement/settlementAdjustment';
import { settlementAdjustmentSearchFields } from '@/option/settlement/settlementAdjustmentSearch';
import organizationSearch from '@/mixins/organization-search';
import { settlementAdjustmentTableColumns } from '@/option/settlement/settlementAdjustmentTable';
import SettlementAdjustmentEditor from './components/settlement-adjustment-editor.vue';
@@ -167,7 +178,7 @@ const emptyQuery = () => ({
createDateRange: [],
customerName: '',
projectName: '',
deptName: '',
deptName: [],
formalSettlementNo: '',
settlementType: '',
approvalStatus: '',
@@ -175,6 +186,7 @@ const emptyQuery = () => ({
export default {
name: 'SettlementAdjustment',
components: { SettlementAdjustmentEditor },
mixins: [organizationSearch],
data: () => ({
ArrowDown,
ArrowUp,
@@ -199,6 +211,7 @@ export default {
},
},
created() {
this.loadOrganizationOptions();
this.loadTable();
},
methods: {
@@ -210,7 +223,8 @@ export default {
try {
const range = this.query.createDateRange || [];
const { data } = await api.getList(this.page.current, this.page.size, {
...this.query,
// 所属组织级联返回 id 路径,转成组织名称传给后端(用副本,避免污染搜索框回显)
...this.normalizeOrganizationSearch({ ...this.query }, 'deptName'),
createDateRange: undefined,
createStartDate: range[0],
createEndDate: range[1],
@@ -17,6 +17,16 @@
:value="item.value"
/>
</el-select>
<el-cascader
v-else-if="field.type === 'cascader'"
v-model="query[field.prop]"
:options="organizationTreeOptions"
:props="organizationCascaderProps"
clearable
filterable
style="width: 100%"
placeholder="请选择"
/>
<el-input v-else v-model="query[field.prop]" clearable placeholder="请输入" />
</el-form-item>
</div>
@@ -87,6 +97,7 @@ import * as XLSX from 'xlsx';
import * as api from '@/api/settlement/transportReconciliation';
import { transportReconciliationSearchFields } from '@/option/settlement/transportReconciliationSearch';
import { transportReconciliationTableColumns } from '@/option/settlement/transportReconciliationTable';
import organizationSearch from '@/mixins/organization-search';
import TransportReconciliationEditor from './components/transport-reconciliation-editor.vue';
import TransportReconciliationTablePanel from './components/transport-reconciliation-table-panel.vue';
@@ -94,7 +105,7 @@ const emptyQuery = () => ({
reconciliationNo: '',
preSettlementNos: '',
projectName: '',
deptName: '',
deptName: [],
contractNo: '',
payerName: '',
payeeName: '',
@@ -105,6 +116,7 @@ const emptyQuery = () => ({
export default {
name: 'TransportReconciliation',
components: { TransportReconciliationEditor, TransportReconciliationTablePanel },
mixins: [organizationSearch],
data() {
return {
ArrowDown,
@@ -129,6 +141,7 @@ export default {
},
},
mounted() {
this.loadOrganizationOptions();
this.loadTable();
},
methods: {
@@ -139,7 +152,8 @@ export default {
this.loading = true;
try {
const response = await api.getList(this.page.current, this.page.size, {
...this.query,
// 所属组织级联返回 id 路径,转成组织名称传给后端(用副本,避免污染搜索框回显)
...this.normalizeOrganizationSearch({ ...this.query }, 'deptName'),
settlementType: this.settlementType,
});
const data = response?.data?.data || response?.data || response || {};