1.0.79 初始化合同变更、合同变更信息、合同变更物料、合同变更付款方式

dev
yinq 3 months ago
parent a04734f361
commit 020dadfa87

@ -0,0 +1,107 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {
ContractChangeVO,
ContractChangeForm,
ContractChangeQuery,
ContractChangeSaveForm,
ContractChangeDetailVO
} from '@/api/oa/erp/contractChange/types';
/**
*
* @param query
* @returns {*}
*/
export const listContractChange = (query?: ContractChangeQuery): AxiosPromise<ContractChangeVO[]> => {
return request({
url: '/oa/erp/contractChange/list',
method: 'get',
params: query
});
};
/**
*
* @param contractChangeId
*/
export const getContractChange = (contractChangeId: string | number): AxiosPromise<ContractChangeVO> => {
return request({
url: '/oa/erp/contractChange/' + contractChangeId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addContractChange = (data: ContractChangeForm) => {
return request({
url: '/oa/erp/contractChange',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateContractChange = (data: ContractChangeForm) => {
return request({
url: '/oa/erp/contractChange',
method: 'put',
data: data
});
};
/**
*
* @param contractChangeId
*/
export const delContractChange = (contractChangeId: string | number | Array<string | number>) => {
return request({
url: '/oa/erp/contractChange/' + contractChangeId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getErpContractChangeList(query) {
return request({
url: '/oa/erp/contractChange/getErpContractChangeList',
method: 'get',
params: query
});
}
/**
* +++
* @param data
*/
export const saveContractChange = (data: ContractChangeSaveForm): AxiosPromise<number> => {
return request({
url: '/oa/erp/contractChange/save',
method: 'post',
data
});
};
/**
* +++
* @param contractChangeId
*/
export const getContractChangeDetail = (
contractChangeId: string | number
): AxiosPromise<ContractChangeDetailVO> => {
return request({
url: '/oa/erp/contractChange/detail/' + contractChangeId,
method: 'get'
});
};

@ -0,0 +1,433 @@
export interface ContractChangeVO {
/**
* ID
*/
contractChangeId: string | number;
/**
* ID
*/
contractId: string | number;
/**
*
*/
changeCode: string;
/**
* (1 2)
*/
changeType: string;
/**
*
*/
changeContractCode: string;
/**
*
*/
changeContractName: string;
/**
*
*/
customerName: string;
/**
*
*/
changeContractAmount: number;
/**
*
*/
contractCode: string;
/**
*
*/
contractName: string;
/**
*
*/
originalCustomerName: string;
/**
*
*/
originalContractAmount: number;
/**
*
*/
changeReason: string;
/**
*
*/
applyTime: string;
/**
*
*/
undertakeDeptId: string | number;
/**
*
*/
undertakeBy: number;
/**
* /
*/
industryRegion: string;
/**
* 1 2 3 4
*/
sealLegalEntity: string;
/**
* (1 2 3)
*/
changeStatus: string;
/**
*
*/
flowStatus: string;
/**
* (0 1)
*/
writeBackFlag: string;
/**
*
*/
writeBackTime: string;
/**
*
*/
remark: string;
/**
* (1 0)
*/
activeFlag: string;
/**
* (0 1)
*/
delFlag: string;
/**
*
*/
createDept: number;
/**
*
*/
createBy: number;
/**
*
*/
createTime: string;
/**
*
*/
updateBy: number;
/**
*
*/
updateTime: string;
}
export interface ContractChangeForm extends BaseEntity {
/**
* ID
*/
contractChangeId?: string | number;
/**
* ID
*/
contractId?: string | number;
/**
*
*/
changeCode?: string;
/**
* (1 2)
*/
changeType?: string;
/**
*
*/
changeContractCode?: string;
/**
*
*/
changeContractName?: string;
/**
*
*/
customerName?: string;
/**
*
*/
changeContractAmount?: number;
/**
*
*/
contractCode?: string;
/**
*
*/
contractName?: string;
/**
*
*/
originalCustomerName?: string;
/**
*
*/
originalContractAmount?: number;
/**
*
*/
changeReason?: string;
/**
*
*/
applyTime?: string;
/**
*
*/
undertakeDeptId?: string | number;
/**
*
*/
undertakeBy?: number;
/**
* /
*/
industryRegion?: string;
/**
* 1 2 3 4
*/
sealLegalEntity?: string;
/**
* (1 2 3)
*/
changeStatus?: string;
/**
*
*/
flowStatus?: string;
/**
* (0 1)
*/
writeBackFlag?: string;
/**
*
*/
writeBackTime?: string;
/**
*
*/
remark?: string;
/**
* (1 0)
*/
activeFlag?: string;
}
/** 合同变更保存表单(主表+信息快照+物料+付款方式 一次提交) */
export interface ContractChangeSaveForm {
contractChangeId?: string | number;
contractId: string | number;
changeType: string;
changeCode?: string;
changeReason: string;
applyTime?: string;
undertakeDeptId?: string | number;
undertakeBy?: number;
industryRegion?: string;
sealLegalEntity?: string;
changeStatus?: string;
flowStatus?: string;
remark?: string;
activeFlag?: string;
contractCode?: string;
contractName?: string;
originalCustomerName?: string;
originalContractAmount?: number;
changeContractCode?: string;
changeContractName?: string;
customerName?: string;
changeContractAmount?: number;
changeInfo?: any;
changeMaterialList?: any[];
changePaymentMethodList?: any[];
}
/** 合同变更详情(主表+信息+物料+付款方式) */
export interface ContractChangeDetailVO {
main?: ContractChangeVO;
changeInfo?: any;
changeMaterialList?: any[];
changePaymentMethodList?: any[];
}
export interface ContractChangeQuery extends PageQuery {
/**
* ID
*/
contractId?: string | number;
/**
*
*/
changeCode?: string;
/**
* (1 2)
*/
changeType?: string;
/**
*
*/
changeContractCode?: string;
/**
*
*/
changeContractName?: string;
/**
*
*/
customerName?: string;
/**
*
*/
changeContractAmount?: number;
/**
*
*/
contractCode?: string;
/**
*
*/
contractName?: string;
/**
*
*/
originalCustomerName?: string;
/**
*
*/
originalContractAmount?: number;
/**
*
*/
changeReason?: string;
/**
*
*/
applyTime?: string;
/**
*
*/
undertakeDeptId?: string | number;
/**
*
*/
undertakeBy?: number;
/**
* /
*/
industryRegion?: string;
/**
* 1 2 3 4
*/
sealLegalEntity?: string;
/**
* (1 2 3)
*/
changeStatus?: string;
/**
*
*/
flowStatus?: string;
/**
* (0 1)
*/
writeBackFlag?: string;
/**
*
*/
writeBackTime?: string;
/**
* (1 0)
*/
activeFlag?: string;
/**
*
*/
params?: any;
}

@ -0,0 +1,76 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ContractChangeInfoVO, ContractChangeInfoForm, ContractChangeInfoQuery } from '@/api/oa/erp/contractChangeInfo/types';
/**
*
* @param query
* @returns {*}
*/
export const listContractChangeInfo = (query?: ContractChangeInfoQuery): AxiosPromise<ContractChangeInfoVO[]> => {
return request({
url: '/oa/erp/contractChangeInfo/list',
method: 'get',
params: query
});
};
/**
*
* @param changeInfoId
*/
export const getContractChangeInfo = (changeInfoId: string | number): AxiosPromise<ContractChangeInfoVO> => {
return request({
url: '/oa/erp/contractChangeInfo/' + changeInfoId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addContractChangeInfo = (data: ContractChangeInfoForm) => {
return request({
url: '/oa/erp/contractChangeInfo',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateContractChangeInfo = (data: ContractChangeInfoForm) => {
return request({
url: '/oa/erp/contractChangeInfo',
method: 'put',
data: data
});
};
/**
*
* @param changeInfoId
*/
export const delContractChangeInfo = (changeInfoId: string | number | Array<string | number>) => {
return request({
url: '/oa/erp/contractChangeInfo/' + changeInfoId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getErpContractChangeInfoList (query) {
return request({
url: '/oa/erp/contractChangeInfo/getErpContractChangeInfoList',
method: 'get',
params: query
});
};

@ -0,0 +1,591 @@
export interface ContractChangeInfoVO {
/**
* ID
*/
changeInfoId: string | number;
/**
* ID
*/
contractChangeId: string | number;
/**
* (1 2)
*/
contractFlag: string;
/**
*
*/
customerContractCode: string;
/**
*
*/
contractCode: string;
/**
*
*/
contractName: string;
/**
*
*/
contractCategory: string;
/**
*
*/
contractType: string;
/**
*
*/
businessDirection: string;
/**
*
*/
contractDeptId: string | number;
/**
*
*/
contractDate: string;
/**
*
*/
totalPrice: number;
/**
*
*/
oneCustomerId: string | number;
/**
*
*/
oneRepresent: string;
/**
*
*/
oneDate: string;
/**
*
*/
twoCustomerId: string | number;
/**
*
*/
twoRepresent: string;
/**
*
*/
twoDate: string;
/**
*
*/
contractManagerId: string | number;
/**
* ID
*/
templateId: string | number;
/**
* ID
*/
ossId: string | number;
/**
* ID
*/
paymentAccountId: string | number;
/**
*
*/
paymentMethod: string;
/**
*
*/
signatureAppendix: number;
/**
* ()
*/
warrantyPeriod: number;
/**
*
*/
internalContractCode: string;
/**
*
*/
externalContractCode: string;
/**
*
*/
orderContractCode: string;
/**
*
*/
projectContractCode: string;
/**
*
*/
deliveryStart: number;
/**
*
*/
warrantyPeriodDescription: string;
/**
*
*/
deliveryLocation: string;
/**
*
*/
shipMethod: string;
/**
*
*/
taxRate: number;
/**
*
*/
signingPlace: string;
/**
*
*/
materialRemark: string;
/**
*
*/
contractTemplateFlag: string;
/**
*
*/
capitalizedAmount: string;
/**
*
*/
remark: string;
}
export interface ContractChangeInfoForm extends BaseEntity {
/**
* ID
*/
changeInfoId?: string | number;
/**
* ID
*/
contractChangeId?: string | number;
/**
* (1 2)
*/
contractFlag?: string;
/**
*
*/
customerContractCode?: string;
/**
*
*/
contractCode?: string;
/**
*
*/
contractName?: string;
/**
*
*/
contractCategory?: string;
/**
*
*/
contractType?: string;
/**
*
*/
businessDirection?: string;
/**
*
*/
contractDeptId?: string | number;
/**
*
*/
contractDate?: string;
/**
*
*/
totalPrice?: number;
/**
*
*/
oneCustomerId?: string | number;
/**
*
*/
oneRepresent?: string;
/**
*
*/
oneDate?: string;
/**
*
*/
twoCustomerId?: string | number;
/**
*
*/
twoRepresent?: string;
/**
*
*/
twoDate?: string;
/**
*
*/
contractManagerId?: string | number;
/**
* ID
*/
templateId?: string | number;
/**
* ID
*/
ossId?: string | number;
/**
* ID
*/
paymentAccountId?: string | number;
/**
*
*/
paymentMethod?: string;
/**
*
*/
signatureAppendix?: number;
/**
* ()
*/
warrantyPeriod?: number;
/**
*
*/
internalContractCode?: string;
/**
*
*/
externalContractCode?: string;
/**
*
*/
orderContractCode?: string;
/**
*
*/
projectContractCode?: string;
/**
*
*/
deliveryStart?: number;
/**
*
*/
warrantyPeriodDescription?: string;
/**
*
*/
deliveryLocation?: string;
/**
*
*/
shipMethod?: string;
/**
*
*/
taxRate?: number;
/**
*
*/
signingPlace?: string;
/**
*
*/
materialRemark?: string;
/**
*
*/
contractTemplateFlag?: string;
/**
*
*/
capitalizedAmount?: string;
/**
*
*/
remark?: string;
}
export interface ContractChangeInfoQuery extends PageQuery {
/**
* ID
*/
contractChangeId?: string | number;
/**
* (1 2)
*/
contractFlag?: string;
/**
*
*/
customerContractCode?: string;
/**
*
*/
contractCode?: string;
/**
*
*/
contractName?: string;
/**
*
*/
contractCategory?: string;
/**
*
*/
contractType?: string;
/**
*
*/
businessDirection?: string;
/**
*
*/
contractDeptId?: string | number;
/**
*
*/
contractDate?: string;
/**
*
*/
totalPrice?: number;
/**
*
*/
oneCustomerId?: string | number;
/**
*
*/
oneRepresent?: string;
/**
*
*/
oneDate?: string;
/**
*
*/
twoCustomerId?: string | number;
/**
*
*/
twoRepresent?: string;
/**
*
*/
twoDate?: string;
/**
*
*/
contractManagerId?: string | number;
/**
* ID
*/
templateId?: string | number;
/**
* ID
*/
ossId?: string | number;
/**
* ID
*/
paymentAccountId?: string | number;
/**
*
*/
paymentMethod?: string;
/**
*
*/
signatureAppendix?: number;
/**
* ()
*/
warrantyPeriod?: number;
/**
*
*/
internalContractCode?: string;
/**
*
*/
externalContractCode?: string;
/**
*
*/
orderContractCode?: string;
/**
*
*/
projectContractCode?: string;
/**
*
*/
deliveryStart?: number;
/**
*
*/
warrantyPeriodDescription?: string;
/**
*
*/
deliveryLocation?: string;
/**
*
*/
shipMethod?: string;
/**
*
*/
taxRate?: number;
/**
*
*/
signingPlace?: string;
/**
*
*/
materialRemark?: string;
/**
*
*/
contractTemplateFlag?: string;
/**
*
*/
capitalizedAmount?: string;
/**
*
*/
params?: any;
}

@ -0,0 +1,76 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ContractChangeMaterialVO, ContractChangeMaterialForm, ContractChangeMaterialQuery } from '@/api/oa/erp/contractChangeMaterial/types';
/**
*
* @param query
* @returns {*}
*/
export const listContractChangeMaterial = (query?: ContractChangeMaterialQuery): AxiosPromise<ContractChangeMaterialVO[]> => {
return request({
url: '/oa/erp/contractChangeMaterial/list',
method: 'get',
params: query
});
};
/**
*
* @param changeMaterialId
*/
export const getContractChangeMaterial = (changeMaterialId: string | number): AxiosPromise<ContractChangeMaterialVO> => {
return request({
url: '/oa/erp/contractChangeMaterial/' + changeMaterialId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addContractChangeMaterial = (data: ContractChangeMaterialForm) => {
return request({
url: '/oa/erp/contractChangeMaterial',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateContractChangeMaterial = (data: ContractChangeMaterialForm) => {
return request({
url: '/oa/erp/contractChangeMaterial',
method: 'put',
data: data
});
};
/**
*
* @param changeMaterialId
*/
export const delContractChangeMaterial = (changeMaterialId: string | number | Array<string | number>) => {
return request({
url: '/oa/erp/contractChangeMaterial/' + changeMaterialId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getErpContractChangeMaterialList (query) {
return request({
url: '/oa/erp/contractChangeMaterial/getErpContractChangeMaterialList',
method: 'get',
params: query
});
};

@ -0,0 +1,246 @@
export interface ContractChangeMaterialVO {
/**
* ID
*/
changeMaterialId: string | number;
/**
* ID
*/
contractChangeId: string | number;
/**
*
*/
materialFlag: string;
/**
*
*/
productName: string;
/**
*
*/
specificationDescription: string;
/**
* ID
*/
materialId: string | number;
/**
* ID
*/
relationMaterialId: string | number;
/**
*
*/
amount: number;
/**
* ID
*/
unitId: string | number;
/**
*
*/
beforePrice: number;
/**
*
*/
taxRate: number;
/**
*
*/
includingPrice: number;
/**
*
*/
subtotal: number;
/**
*
*/
remark: string;
/**
*
*/
sortOrder: number;
/**
*
*/
activeFlag: string;
}
export interface ContractChangeMaterialForm extends BaseEntity {
/**
* ID
*/
changeMaterialId?: string | number;
/**
* ID
*/
contractChangeId?: string | number;
/**
*
*/
materialFlag?: string;
/**
*
*/
productName?: string;
/**
*
*/
specificationDescription?: string;
/**
* ID
*/
materialId?: string | number;
/**
* ID
*/
relationMaterialId?: string | number;
/**
*
*/
amount?: number;
/**
* ID
*/
unitId?: string | number;
/**
*
*/
beforePrice?: number;
/**
*
*/
taxRate?: number;
/**
*
*/
includingPrice?: number;
/**
*
*/
subtotal?: number;
/**
*
*/
remark?: string;
/**
*
*/
sortOrder?: number;
/**
*
*/
activeFlag?: string;
}
export interface ContractChangeMaterialQuery extends PageQuery {
/**
* ID
*/
contractChangeId?: string | number;
/**
*
*/
materialFlag?: string;
/**
*
*/
productName?: string;
/**
*
*/
specificationDescription?: string;
/**
* ID
*/
materialId?: string | number;
/**
* ID
*/
relationMaterialId?: string | number;
/**
*
*/
amount?: number;
/**
* ID
*/
unitId?: string | number;
/**
*
*/
beforePrice?: number;
/**
*
*/
taxRate?: number;
/**
*
*/
includingPrice?: number;
/**
*
*/
subtotal?: number;
/**
*
*/
sortOrder?: number;
/**
*
*/
activeFlag?: string;
/**
*
*/
params?: any;
}

@ -0,0 +1,76 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ContractChangePaymentMethodVO, ContractChangePaymentMethodForm, ContractChangePaymentMethodQuery } from '@/api/oa/erp/contractChangePaymentMethod/types';
/**
*
* @param query
* @returns {*}
*/
export const listContractChangePaymentMethod = (query?: ContractChangePaymentMethodQuery): AxiosPromise<ContractChangePaymentMethodVO[]> => {
return request({
url: '/oa/erp/contractChangePaymentMethod/list',
method: 'get',
params: query
});
};
/**
*
* @param changePaymentId
*/
export const getContractChangePaymentMethod = (changePaymentId: string | number): AxiosPromise<ContractChangePaymentMethodVO> => {
return request({
url: '/oa/erp/contractChangePaymentMethod/' + changePaymentId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addContractChangePaymentMethod = (data: ContractChangePaymentMethodForm) => {
return request({
url: '/oa/erp/contractChangePaymentMethod',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateContractChangePaymentMethod = (data: ContractChangePaymentMethodForm) => {
return request({
url: '/oa/erp/contractChangePaymentMethod',
method: 'put',
data: data
});
};
/**
*
* @param changePaymentId
*/
export const delContractChangePaymentMethod = (changePaymentId: string | number | Array<string | number>) => {
return request({
url: '/oa/erp/contractChangePaymentMethod/' + changePaymentId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getErpContractChangePaymentMethodList (query) {
return request({
url: '/oa/erp/contractChangePaymentMethod/getErpContractChangePaymentMethodList',
method: 'get',
params: query
});
};

@ -0,0 +1,171 @@
export interface ContractChangePaymentMethodVO {
/**
* ID
*/
changePaymentId: string | number;
/**
* ID
*/
contractChangeId: string | number;
/**
*
*/
sortOrder: number;
/**
* ID
*/
paymentStageId: string | number;
/**
*
*/
paymentDeadline: number;
/**
*
*/
paymentPercentage: number;
/**
*
*/
invoicePercentage: number;
/**
*
*/
paymentAmount: number;
/**
*
*/
paymentDescription: string;
/**
*
*/
remark: string;
/**
* 1 0
*/
activeFlag: string;
}
export interface ContractChangePaymentMethodForm extends BaseEntity {
/**
* ID
*/
changePaymentId?: string | number;
/**
* ID
*/
contractChangeId?: string | number;
/**
*
*/
sortOrder?: number;
/**
* ID
*/
paymentStageId?: string | number;
/**
*
*/
paymentDeadline?: number;
/**
*
*/
paymentPercentage?: number;
/**
*
*/
invoicePercentage?: number;
/**
*
*/
paymentAmount?: number;
/**
*
*/
paymentDescription?: string;
/**
*
*/
remark?: string;
/**
* 1 0
*/
activeFlag?: string;
}
export interface ContractChangePaymentMethodQuery extends PageQuery {
/**
* ID
*/
contractChangeId?: string | number;
/**
*
*/
sortOrder?: number;
/**
* ID
*/
paymentStageId?: string | number;
/**
*
*/
paymentDeadline?: number;
/**
*
*/
paymentPercentage?: number;
/**
*
*/
invoicePercentage?: number;
/**
*
*/
paymentAmount?: number;
/**
*
*/
paymentDescription?: string;
/**
* 1 0
*/
activeFlag?: string;
/**
*
*/
params?: any;
}

@ -0,0 +1,255 @@
<template>
<div class="p-2">
<el-card shadow="never">
<template #header>
<span>{{ isEdit ? '编辑合同变更' : '合同变更申请' }}</span>
<el-button class="float-right" link @click="goBack"></el-button>
</template>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="变更类型" prop="changeType">
<el-radio-group v-model="form.changeType" :disabled="isEdit">
<el-radio v-for="dict in contract_change_type" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="选择合同" prop="contractId">
<el-select
v-model="form.contractId"
placeholder="请选择已激活的合同(仅可变更状态=可用且已激活的合同)"
filterable
style="width: 100%"
:disabled="isEdit"
@change="onContractChange"
>
<el-option
v-for="item in activatedContractList"
:key="item.contractId"
:label="`${item.contractCode} - ${item.contractName}`"
:value="item.contractId"
/>
</el-select>
</el-form-item>
<el-form-item label="变更原因" prop="changeReason">
<el-input v-model="form.changeReason" type="textarea" :rows="3" placeholder="请输入变更原因(解除合同时即解除原因)" />
</el-form-item>
<template v-if="form.changeType === '1'">
<el-divider content-position="left">变更后合同信息可编辑</el-divider>
<el-row :gutter="20" v-if="form.changeInfo">
<el-col :span="12">
<el-form-item label="合同编号">
<el-input v-model="form.changeInfo.contractCode" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同名称">
<el-input v-model="form.changeInfo.contractName" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同总价">
<el-input v-model="form.changeInfo.totalPrice" type="number" />
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="left">变更后物料</el-divider>
<el-table v-if="form.changeMaterialList?.length" :data="form.changeMaterialList" border max-height="260">
<el-table-column type="index" label="序号" width="55" />
<el-table-column prop="productName" label="产品名称" min-width="120" />
<el-table-column prop="specificationDescription" label="规格" min-width="100" />
<el-table-column prop="amount" label="数量" width="80" />
<el-table-column prop="beforePrice" label="未税单价" width="100" />
<el-table-column prop="subtotal" label="小计" width="100" />
</el-table>
<el-divider content-position="left">变更后付款方式</el-divider>
<el-table v-if="form.changePaymentMethodList?.length" :data="form.changePaymentMethodList" border max-height="200">
<el-table-column type="index" label="序号" width="55" />
<el-table-column prop="paymentDescription" label="付款条款" min-width="200" />
<el-table-column prop="paymentAmount" label="支付金额" width="120" />
<el-table-column prop="paymentPercentage" label="支付比例(%)" width="100" />
</el-table>
</template>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="选填" />
</el-form-item>
<el-form-item>
<el-button type="primary" :loading="buttonLoading" @click="submitSave"></el-button>
<el-button @click="goBack"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script setup name="ContractChangeApply" lang="ts">
import { getContractInfo } from '@/api/oa/erp/contractInfo';
import { getErpContractInfoList } from '@/api/oa/erp/contractInfo';
import { saveContractChange, getContractChangeDetail } from '@/api/oa/erp/contractChange';
import type { ContractChangeSaveForm } from '@/api/oa/erp/contractChange/types';
const route = useRoute();
const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { contract_change_type } = toRefs<any>(proxy?.useDict('contract_change_type'));
const formRef = ref<ElFormInstance>();
const buttonLoading = ref(false);
const activatedContractList = ref<any[]>([]);
const contractChangeId = computed(() => route.params.contractChangeId as string);
const isEdit = computed(() => !!contractChangeId.value);
const form = ref<ContractChangeSaveForm & { changeInfo?: any; changeMaterialList?: any[]; changePaymentMethodList?: any[] }>({
contractChangeId: undefined,
contractId: undefined as any,
changeType: '1',
changeReason: '',
applyTime: undefined,
remark: undefined,
changeStatus: '1',
activeFlag: '1',
contractCode: undefined,
contractName: undefined,
originalCustomerName: undefined,
originalContractAmount: undefined,
changeContractCode: undefined,
changeContractName: undefined,
customerName: undefined,
changeContractAmount: undefined,
changeInfo: undefined,
changeMaterialList: undefined,
changePaymentMethodList: undefined
});
const rules = {
changeType: [{ required: true, message: '请选择变更类型', trigger: 'change' }],
contractId: [{ required: true, message: '请选择合同', trigger: 'change' }],
changeReason: [{ required: true, message: '请输入变更原因', trigger: 'blur' }]
};
function goBack() {
proxy?.$tab.closePage(route);
router.push({ path: '/oa/erp/contractChange' });
}
async function loadActivatedContracts() {
const res = await getErpContractInfoList({ contractStatus: '3', activeFlag: '1' });
activatedContractList.value = res.data || [];
}
async function onContractChange(contractId: string | number) {
if (!contractId || form.value.changeType !== '1') return;
const res = await getContractInfo(contractId);
const c = res.data;
if (!c) return;
form.value.contractCode = c.contractCode;
form.value.contractName = c.contractName;
form.value.originalCustomerName = c.oneCustomerName || c.twoCustomerName;
form.value.originalContractAmount = c.totalPrice as any;
form.value.changeContractCode = c.contractCode;
form.value.changeContractName = c.contractName;
form.value.customerName = c.oneCustomerName || c.twoCustomerName;
form.value.changeContractAmount = c.totalPrice as any;
form.value.changeInfo = c ? mapContractToChangeInfo(c) : undefined;
form.value.changeMaterialList = (c.contractMaterialList || []).map((m: any) => ({
...m,
changeMaterialId: undefined,
contractChangeId: undefined
}));
form.value.changePaymentMethodList = (c.contractPaymentMethodList || []).map((p: any) => ({
...p,
changePaymentId: undefined,
contractChangeId: undefined
}));
}
function mapContractToChangeInfo(c: any) {
const info: any = {};
const keys = [
'contractFlag', 'customerContractCode', 'contractCode', 'contractName', 'contractCategory', 'contractType',
'businessDirection', 'contractDeptId', 'contractDate', 'totalPrice', 'oneCustomerId', 'oneRepresent', 'oneDate',
'twoCustomerId', 'twoRepresent', 'twoDate', 'contractManagerId', 'templateId', 'ossId', 'paymentAccountId',
'paymentMethod', 'signatureAppendix', 'warrantyPeriod', 'internalContractCode', 'externalContractCode',
'orderContractCode', 'projectContractCode', 'deliveryStart', 'warrantyPeriodDescription', 'deliveryLocation',
'shipMethod', 'taxRate', 'signingPlace', 'materialRemark', 'contractTemplateFlag', 'capitalizedAmount', 'remark'
];
keys.forEach(k => { if (c[k] !== undefined) info[k] = c[k]; });
info.changeInfoId = undefined;
info.contractChangeId = undefined;
return info;
}
async function loadDetail() {
if (!contractChangeId.value) return;
const res = await getContractChangeDetail(contractChangeId.value);
const d = res.data;
if (!d?.main) return;
const m = d.main;
form.value.contractChangeId = m.contractChangeId;
form.value.contractId = m.contractId;
form.value.changeType = m.changeType;
form.value.changeReason = m.changeReason;
form.value.changeCode = m.changeCode;
form.value.applyTime = m.applyTime;
form.value.remark = m.remark;
form.value.contractCode = m.contractCode;
form.value.contractName = m.contractName;
form.value.originalCustomerName = m.originalCustomerName;
form.value.originalContractAmount = m.originalContractAmount;
form.value.changeContractCode = m.changeContractCode;
form.value.changeContractName = m.changeContractName;
form.value.customerName = m.customerName;
form.value.changeContractAmount = m.changeContractAmount;
form.value.changeInfo = d.changeInfo ? { ...d.changeInfo } : undefined;
form.value.changeMaterialList = (d.changeMaterialList || []).map((x: any) => ({ ...x }));
form.value.changePaymentMethodList = (d.changePaymentMethodList || []).map((x: any) => ({ ...x }));
}
function buildPayload(): ContractChangeSaveForm {
const f = form.value;
const payload: ContractChangeSaveForm = {
contractChangeId: f.contractChangeId,
contractId: f.contractId,
changeType: f.changeType,
changeReason: f.changeReason,
applyTime: f.applyTime || new Date().toISOString().slice(0, 19).replace('T', ' '),
remark: f.remark,
changeStatus: '1',
activeFlag: '1',
contractCode: f.contractCode,
contractName: f.contractName,
originalCustomerName: f.originalCustomerName,
originalContractAmount: f.originalContractAmount,
changeContractCode: f.changeContractCode,
changeContractName: f.changeContractName,
customerName: f.customerName,
changeContractAmount: f.changeContractAmount
};
if (f.changeType === '1') {
payload.changeInfo = f.changeInfo;
payload.changeMaterialList = f.changeMaterialList;
payload.changePaymentMethodList = f.changePaymentMethodList;
}
return payload;
}
async function submitSave() {
await formRef.value?.validate().catch(() => {});
buttonLoading.value = true;
try {
const payload = buildPayload();
await saveContractChange(payload);
proxy?.$modal.msgSuccess('保存成功');
goBack();
} finally {
buttonLoading.value = false;
}
}
onMounted(async () => {
await loadActivatedContracts();
if (isEdit.value) {
await loadDetail();
} else {
form.value.changeType = '1';
}
});
</script>

@ -0,0 +1,221 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
<el-form-item label="变更单编号" prop="changeCode">
<el-input v-model="queryParams.changeCode" placeholder="请输入变更单编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="变更类型" prop="changeType">
<el-select v-model="queryParams.changeType" placeholder="请选择变更类型" clearable>
<el-option v-for="dict in contract_change_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="原合同编号" prop="contractCode">
<el-input v-model="queryParams.contractCode" placeholder="请输入原合同编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="变更状态" prop="changeStatus">
<el-select v-model="queryParams.changeStatus" placeholder="请选择变更状态" clearable>
<el-option v-for="dict in contract_change_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="申请时间" prop="applyTime">
<el-date-picker clearable v-model="queryParams.applyTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择申请时间" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['oa/erp:contractChange:add']"> </el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:contractChange:edit']"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['oa/erp:contractChange:remove']"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa/erp:contractChange:export']"> </el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="contractChangeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="变更单编号" align="center" prop="changeCode" width="140" />
<el-table-column label="变更类型" align="center" prop="changeType" width="100">
<template #default="scope">
<dict-tag :options="contract_change_type" :value="scope.row.changeType" />
</template>
</el-table-column>
<el-table-column label="原合同编号" align="center" prop="contractCode" width="140" />
<el-table-column label="原合同名称" align="center" prop="contractName" min-width="160" show-overflow-tooltip />
<el-table-column label="变更状态" align="center" prop="changeStatus" width="100">
<template #default="scope">
<dict-tag :options="contract_change_status" :value="scope.row.changeStatus" />
</template>
</el-table-column>
<el-table-column label="申请时间" align="center" prop="applyTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.applyTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</template>
</el-table-column>
<el-table-column label="是否回写" align="center" prop="writeBackFlag" width="90">
<template #default="scope">
<dict-tag :options="write_back_flag" :value="scope.row.writeBackFlag" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="160" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="查看详情" placement="top">
<el-button link type="info" icon="DocumentChecked" @click="handleView(scope.row)" v-hasPermi="['oa/erp:contractChange:query']"></el-button>
</el-tooltip>
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa/erp:contractChange:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['oa/erp:contractChange:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
</div>
</template>
<script setup name="ContractChange" lang="ts">
import { listContractChange, delContractChange } from '@/api/oa/erp/contractChange';
import { ContractChangeVO, ContractChangeQuery } from '@/api/oa/erp/contractChange/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const route = useRoute();
const router = useRouter();
const { contract_change_status, contract_change_type, write_back_flag } = toRefs<any>(
proxy?.useDict('contract_change_status', 'contract_change_type', 'write_back_flag')
);
const contractChangeList = ref<ContractChangeVO[]>([]);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const queryParams = ref<ContractChangeQuery>({
pageNum: 1,
pageSize: 10,
changeCode: undefined,
changeType: undefined,
contractCode: undefined,
changeStatus: undefined,
applyTime: undefined,
params: {}
});
/** 查询合同变更列表 */
const getList = async () => {
loading.value = true;
const res = await listContractChange(queryParams.value);
contractChangeList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: ContractChangeVO[]) => {
ids.value = selection.map((item) => item.contractChangeId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作:跳转合同变更申请页 */
const handleAdd = () => {
proxy?.$tab.closePage(route);
router.push({
path: '/contract/contractChange/edit',
query: { type: 'add' }
});
};
/** 查看详情:使用菜单路由打开 */
const handleView = (row?: ContractChangeVO) => {
const _contractChangeId = row?.contractChangeId || ids.value[0];
proxy.$tab.closePage(route);
router.push({
path: '/contract/contractChange/edit',
query: {
id: _contractChangeId,
type: 'view'
}
});
};
/** 修改按钮操作:跳转合同变更申请页(编辑) */
const handleUpdate = (row?: ContractChangeVO) => {
const _contractChangeId = row?.contractChangeId || ids.value[0];
proxy?.$tab.closePage(route);
router.push({
path: '/contract/contractChange/edit',
query: {
id: _contractChangeId,
type: 'update'
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: ContractChangeVO) => {
const _contractChangeIds = row?.contractChangeId || ids.value;
await proxy?.$modal.confirm('是否确认删除合同变更编号为"' + _contractChangeIds + '"的数据项?').finally(() => (loading.value = false));
await delContractChange(_contractChangeIds);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'oa/erp/contractChange/export',
{
...queryParams.value
},
`contractChange_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});
</script>

@ -0,0 +1,620 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
<el-form-item label="合同变更ID" prop="contractChangeId">
<el-input v-model="queryParams.contractChangeId" placeholder="请输入合同变更ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="有无合同(1有 2无)" prop="contractFlag">
<el-input v-model="queryParams.contractFlag" placeholder="请输入有无合同(1有 2无)" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="客户合同编号" prop="customerContractCode">
<el-input v-model="queryParams.customerContractCode" placeholder="请输入客户合同编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同编号" prop="contractCode">
<el-input v-model="queryParams.contractCode" placeholder="请输入合同编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同名称" prop="contractName">
<el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同大类" prop="contractCategory">
<el-input v-model="queryParams.contractCategory" placeholder="请输入合同大类" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="业务方向" prop="businessDirection">
<el-input v-model="queryParams.businessDirection" placeholder="请输入业务方向" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="部门" prop="contractDeptId">
<el-input v-model="queryParams.contractDeptId" placeholder="请输入部门" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同签订日期" prop="contractDate">
<el-date-picker clearable v-model="queryParams.contractDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择合同签订日期" />
</el-form-item>
<el-form-item label="合同总价" prop="totalPrice">
<el-input v-model="queryParams.totalPrice" placeholder="请输入合同总价" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="甲方公司" prop="oneCustomerId">
<el-input v-model="queryParams.oneCustomerId" placeholder="请输入甲方公司" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="甲方授权代表" prop="oneRepresent">
<el-input v-model="queryParams.oneRepresent" placeholder="请输入甲方授权代表" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="甲方签字日期" prop="oneDate">
<el-date-picker clearable v-model="queryParams.oneDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择甲方签字日期" />
</el-form-item>
<el-form-item label="乙方公司" prop="twoCustomerId">
<el-input v-model="queryParams.twoCustomerId" placeholder="请输入乙方公司" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="乙方授权代表" prop="twoRepresent">
<el-input v-model="queryParams.twoRepresent" placeholder="请输入乙方授权代表" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="乙方签字日期" prop="twoDate">
<el-date-picker clearable v-model="queryParams.twoDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择乙方签字日期" />
</el-form-item>
<el-form-item label="合同负责人" prop="contractManagerId">
<el-input v-model="queryParams.contractManagerId" placeholder="请输入合同负责人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同模板ID" prop="templateId">
<el-input v-model="queryParams.templateId" placeholder="请输入合同模板ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="附件ID" prop="ossId">
<el-input v-model="queryParams.ossId" placeholder="请输入附件ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="付款账户ID" prop="paymentAccountId">
<el-input v-model="queryParams.paymentAccountId" placeholder="请输入付款账户ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="付款方式" prop="paymentMethod">
<el-input v-model="queryParams.paymentMethod" placeholder="请输入付款方式" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="签字合同附件" prop="signatureAppendix">
<el-input v-model="queryParams.signatureAppendix" placeholder="请输入签字合同附件" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="质保期(天)" prop="warrantyPeriod">
<el-input v-model="queryParams.warrantyPeriod" placeholder="请输入质保期(天)" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="内部合同号" prop="internalContractCode">
<el-input v-model="queryParams.internalContractCode" placeholder="请输入内部合同号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="外部合同号" prop="externalContractCode">
<el-input v-model="queryParams.externalContractCode" placeholder="请输入外部合同号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="订单号" prop="orderContractCode">
<el-input v-model="queryParams.orderContractCode" placeholder="请输入订单号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="项目号" prop="projectContractCode">
<el-input v-model="queryParams.projectContractCode" placeholder="请输入项目号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="交付启动期限" prop="deliveryStart">
<el-input v-model="queryParams.deliveryStart" placeholder="请输入交付启动期限" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="质保期描述" prop="warrantyPeriodDescription">
<el-input v-model="queryParams.warrantyPeriodDescription" placeholder="请输入质保期描述" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="交货地点" prop="deliveryLocation">
<el-input v-model="queryParams.deliveryLocation" placeholder="请输入交货地点" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="运输方式" prop="shipMethod">
<el-input v-model="queryParams.shipMethod" placeholder="请输入运输方式" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同税率" prop="taxRate">
<el-input v-model="queryParams.taxRate" placeholder="请输入合同税率" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="签订地点" prop="signingPlace">
<el-input v-model="queryParams.signingPlace" placeholder="请输入签订地点" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同物料备注" prop="materialRemark">
<el-input v-model="queryParams.materialRemark" placeholder="请输入合同物料备注" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同模板标识" prop="contractTemplateFlag">
<el-input v-model="queryParams.contractTemplateFlag" placeholder="请输入合同模板标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同大写金额" prop="capitalizedAmount">
<el-input v-model="queryParams.capitalizedAmount" placeholder="请输入合同大写金额" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['oa/erp:contractChangeInfo:add']"> </el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:contractChangeInfo:edit']"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['oa/erp:contractChangeInfo:remove']"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa/erp:contractChangeInfo:export']"> </el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="contractChangeInfoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="变更信息快照ID" align="center" prop="changeInfoId" v-if="columns[0].visible" />
<el-table-column label="合同变更ID" align="center" prop="contractChangeId" v-if="columns[2].visible" />
<el-table-column label="有无合同(1有 2无)" align="center" prop="contractFlag" v-if="columns[3].visible" />
<el-table-column label="客户合同编号" align="center" prop="customerContractCode" v-if="columns[4].visible" />
<el-table-column label="合同编号" align="center" prop="contractCode" v-if="columns[5].visible" />
<el-table-column label="合同名称" align="center" prop="contractName" v-if="columns[6].visible" />
<el-table-column label="合同大类" align="center" prop="contractCategory" v-if="columns[7].visible" />
<el-table-column label="合同类型" align="center" prop="contractType" v-if="columns[8].visible" />
<el-table-column label="业务方向" align="center" prop="businessDirection" v-if="columns[9].visible" />
<el-table-column label="部门" align="center" prop="contractDeptId" v-if="columns[10].visible" />
<el-table-column label="合同签订日期" align="center" prop="contractDate" width="180" v-if="columns[11].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.contractDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="合同总价" align="center" prop="totalPrice" v-if="columns[12].visible" />
<el-table-column label="甲方公司" align="center" prop="oneCustomerId" v-if="columns[13].visible" />
<el-table-column label="甲方授权代表" align="center" prop="oneRepresent" v-if="columns[14].visible" />
<el-table-column label="甲方签字日期" align="center" prop="oneDate" width="180" v-if="columns[15].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.oneDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="乙方公司" align="center" prop="twoCustomerId" v-if="columns[16].visible" />
<el-table-column label="乙方授权代表" align="center" prop="twoRepresent" v-if="columns[17].visible" />
<el-table-column label="乙方签字日期" align="center" prop="twoDate" width="180" v-if="columns[18].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.twoDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="合同负责人" align="center" prop="contractManagerId" v-if="columns[19].visible" />
<el-table-column label="合同模板ID" align="center" prop="templateId" v-if="columns[20].visible" />
<el-table-column label="附件ID" align="center" prop="ossId" v-if="columns[21].visible" />
<el-table-column label="付款账户ID" align="center" prop="paymentAccountId" v-if="columns[22].visible" />
<el-table-column label="付款方式" align="center" prop="paymentMethod" v-if="columns[23].visible" />
<el-table-column label="签字合同附件" align="center" prop="signatureAppendix" v-if="columns[24].visible" />
<el-table-column label="质保期(天)" align="center" prop="warrantyPeriod" v-if="columns[25].visible" />
<el-table-column label="内部合同号" align="center" prop="internalContractCode" v-if="columns[26].visible" />
<el-table-column label="外部合同号" align="center" prop="externalContractCode" v-if="columns[27].visible" />
<el-table-column label="订单号" align="center" prop="orderContractCode" v-if="columns[28].visible" />
<el-table-column label="项目号" align="center" prop="projectContractCode" v-if="columns[29].visible" />
<el-table-column label="交付启动期限" align="center" prop="deliveryStart" v-if="columns[30].visible" />
<el-table-column label="质保期描述" align="center" prop="warrantyPeriodDescription" v-if="columns[31].visible" />
<el-table-column label="交货地点" align="center" prop="deliveryLocation" v-if="columns[32].visible" />
<el-table-column label="运输方式" align="center" prop="shipMethod" v-if="columns[33].visible" />
<el-table-column label="合同税率" align="center" prop="taxRate" v-if="columns[34].visible" />
<el-table-column label="签订地点" align="center" prop="signingPlace" v-if="columns[35].visible" />
<el-table-column label="合同物料备注" align="center" prop="materialRemark" v-if="columns[36].visible" />
<el-table-column label="合同模板标识" align="center" prop="contractTemplateFlag" v-if="columns[37].visible" />
<el-table-column label="合同大写金额" align="center" prop="capitalizedAmount" v-if="columns[38].visible" />
<el-table-column label="备注" align="center" prop="remark" v-if="columns[39].visible" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa/erp:contractChangeInfo:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['oa/erp:contractChangeInfo:remove']"
></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改合同变更信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="contractChangeInfoFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="合同变更ID" prop="contractChangeId">
<el-input v-model="form.contractChangeId" placeholder="请输入合同变更ID" />
</el-form-item>
<el-form-item label="有无合同(1有 2无)" prop="contractFlag">
<el-input v-model="form.contractFlag" placeholder="请输入有无合同(1有 2无)" />
</el-form-item>
<el-form-item label="客户合同编号" prop="customerContractCode">
<el-input v-model="form.customerContractCode" placeholder="请输入客户合同编号" />
</el-form-item>
<el-form-item label="合同编号" prop="contractCode">
<el-input v-model="form.contractCode" placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="合同名称" prop="contractName">
<el-input v-model="form.contractName" placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同大类" prop="contractCategory">
<el-input v-model="form.contractCategory" placeholder="请输入合同大类" />
</el-form-item>
<el-form-item label="业务方向" prop="businessDirection">
<el-input v-model="form.businessDirection" placeholder="请输入业务方向" />
</el-form-item>
<el-form-item label="部门" prop="contractDeptId">
<el-input v-model="form.contractDeptId" placeholder="请输入部门" />
</el-form-item>
<el-form-item label="合同签订日期" prop="contractDate">
<el-date-picker clearable v-model="form.contractDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择合同签订日期">
</el-date-picker>
</el-form-item>
<el-form-item label="合同总价" prop="totalPrice">
<el-input v-model="form.totalPrice" placeholder="请输入合同总价" />
</el-form-item>
<el-form-item label="甲方公司" prop="oneCustomerId">
<el-input v-model="form.oneCustomerId" placeholder="请输入甲方公司" />
</el-form-item>
<el-form-item label="甲方授权代表" prop="oneRepresent">
<el-input v-model="form.oneRepresent" placeholder="请输入甲方授权代表" />
</el-form-item>
<el-form-item label="甲方签字日期" prop="oneDate">
<el-date-picker clearable v-model="form.oneDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择甲方签字日期">
</el-date-picker>
</el-form-item>
<el-form-item label="乙方公司" prop="twoCustomerId">
<el-input v-model="form.twoCustomerId" placeholder="请输入乙方公司" />
</el-form-item>
<el-form-item label="乙方授权代表" prop="twoRepresent">
<el-input v-model="form.twoRepresent" placeholder="请输入乙方授权代表" />
</el-form-item>
<el-form-item label="乙方签字日期" prop="twoDate">
<el-date-picker clearable v-model="form.twoDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择乙方签字日期">
</el-date-picker>
</el-form-item>
<el-form-item label="合同负责人" prop="contractManagerId">
<el-input v-model="form.contractManagerId" placeholder="请输入合同负责人" />
</el-form-item>
<el-form-item label="合同模板ID" prop="templateId">
<el-input v-model="form.templateId" placeholder="请输入合同模板ID" />
</el-form-item>
<el-form-item label="附件ID" prop="ossId">
<el-input v-model="form.ossId" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="付款账户ID" prop="paymentAccountId">
<el-input v-model="form.paymentAccountId" placeholder="请输入付款账户ID" />
</el-form-item>
<el-form-item label="付款方式" prop="paymentMethod">
<el-input v-model="form.paymentMethod" placeholder="请输入付款方式" />
</el-form-item>
<el-form-item label="签字合同附件" prop="signatureAppendix">
<el-input v-model="form.signatureAppendix" placeholder="请输入签字合同附件" />
</el-form-item>
<el-form-item label="质保期(天)" prop="warrantyPeriod">
<el-input v-model="form.warrantyPeriod" placeholder="请输入质保期(天)" />
</el-form-item>
<el-form-item label="内部合同号" prop="internalContractCode">
<el-input v-model="form.internalContractCode" placeholder="请输入内部合同号" />
</el-form-item>
<el-form-item label="外部合同号" prop="externalContractCode">
<el-input v-model="form.externalContractCode" placeholder="请输入外部合同号" />
</el-form-item>
<el-form-item label="订单号" prop="orderContractCode">
<el-input v-model="form.orderContractCode" placeholder="请输入订单号" />
</el-form-item>
<el-form-item label="项目号" prop="projectContractCode">
<el-input v-model="form.projectContractCode" placeholder="请输入项目号" />
</el-form-item>
<el-form-item label="交付启动期限" prop="deliveryStart">
<el-input v-model="form.deliveryStart" placeholder="请输入交付启动期限" />
</el-form-item>
<el-form-item label="质保期描述" prop="warrantyPeriodDescription">
<el-input v-model="form.warrantyPeriodDescription" placeholder="请输入质保期描述" />
</el-form-item>
<el-form-item label="交货地点" prop="deliveryLocation">
<el-input v-model="form.deliveryLocation" placeholder="请输入交货地点" />
</el-form-item>
<el-form-item label="运输方式" prop="shipMethod">
<el-input v-model="form.shipMethod" placeholder="请输入运输方式" />
</el-form-item>
<el-form-item label="合同税率" prop="taxRate">
<el-input v-model="form.taxRate" placeholder="请输入合同税率" />
</el-form-item>
<el-form-item label="签订地点" prop="signingPlace">
<el-input v-model="form.signingPlace" placeholder="请输入签订地点" />
</el-form-item>
<el-form-item label="合同物料备注" prop="materialRemark">
<el-input v-model="form.materialRemark" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="合同模板标识" prop="contractTemplateFlag">
<el-input v-model="form.contractTemplateFlag" placeholder="请输入合同模板标识" />
</el-form-item>
<el-form-item label="合同大写金额" prop="capitalizedAmount">
<el-input v-model="form.capitalizedAmount" placeholder="请输入合同大写金额" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="ContractChangeInfo" lang="ts">
import {
listContractChangeInfo,
getContractChangeInfo,
delContractChangeInfo,
addContractChangeInfo,
updateContractChangeInfo
} from '@/api/oa/erp/contractChangeInfo';
import { ContractChangeInfoVO, ContractChangeInfoQuery, ContractChangeInfoForm } from '@/api/oa/erp/contractChangeInfo/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const contractChangeInfoList = ref<ContractChangeInfoVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const contractChangeInfoFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `变更信息快照ID`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `合同变更ID`, visible: true },
{ key: 3, label: `有无合同(1有 2无)`, visible: true },
{ key: 4, label: `客户合同编号`, visible: true },
{ key: 5, label: `合同编号`, visible: true },
{ key: 6, label: `合同名称`, visible: true },
{ key: 7, label: `合同大类`, visible: true },
{ key: 8, label: `合同类型`, visible: true },
{ key: 9, label: `业务方向`, visible: true },
{ key: 10, label: `部门`, visible: true },
{ key: 11, label: `合同签订日期`, visible: true },
{ key: 12, label: `合同总价`, visible: true },
{ key: 13, label: `甲方公司`, visible: true },
{ key: 14, label: `甲方授权代表`, visible: true },
{ key: 15, label: `甲方签字日期`, visible: true },
{ key: 16, label: `乙方公司`, visible: true },
{ key: 17, label: `乙方授权代表`, visible: true },
{ key: 18, label: `乙方签字日期`, visible: true },
{ key: 19, label: `合同负责人`, visible: true },
{ key: 20, label: `合同模板ID`, visible: true },
{ key: 21, label: `附件ID`, visible: true },
{ key: 22, label: `付款账户ID`, visible: true },
{ key: 23, label: `付款方式`, visible: true },
{ key: 24, label: `签字合同附件`, visible: true },
{ key: 25, label: `质保期(天)`, visible: true },
{ key: 26, label: `内部合同号`, visible: true },
{ key: 27, label: `外部合同号`, visible: true },
{ key: 28, label: `订单号`, visible: true },
{ key: 29, label: `项目号`, visible: true },
{ key: 30, label: `交付启动期限`, visible: true },
{ key: 31, label: `质保期描述`, visible: true },
{ key: 32, label: `交货地点`, visible: true },
{ key: 33, label: `运输方式`, visible: true },
{ key: 34, label: `合同税率`, visible: true },
{ key: 35, label: `签订地点`, visible: true },
{ key: 36, label: `合同物料备注`, visible: true },
{ key: 37, label: `合同模板标识`, visible: true },
{ key: 38, label: `合同大写金额`, visible: true },
{ key: 39, label: `备注`, visible: true },
{ key: 40, label: `删除标志`, visible: true },
{ key: 41, label: `创建部门`, visible: true },
{ key: 42, label: `创建人`, visible: true },
{ key: 43, label: `创建时间`, visible: true },
{ key: 44, label: `更新人`, visible: true },
{ key: 45, label: `更新时间`, visible: true }
]);
const initFormData: ContractChangeInfoForm = {
changeInfoId: undefined,
contractChangeId: undefined,
contractFlag: undefined,
customerContractCode: undefined,
contractCode: undefined,
contractName: undefined,
contractCategory: undefined,
contractType: undefined,
businessDirection: undefined,
contractDeptId: undefined,
contractDate: undefined,
totalPrice: undefined,
oneCustomerId: undefined,
oneRepresent: undefined,
oneDate: undefined,
twoCustomerId: undefined,
twoRepresent: undefined,
twoDate: undefined,
contractManagerId: undefined,
templateId: undefined,
ossId: undefined,
paymentAccountId: undefined,
paymentMethod: undefined,
signatureAppendix: undefined,
warrantyPeriod: undefined,
internalContractCode: undefined,
externalContractCode: undefined,
orderContractCode: undefined,
projectContractCode: undefined,
deliveryStart: undefined,
warrantyPeriodDescription: undefined,
deliveryLocation: undefined,
shipMethod: undefined,
taxRate: undefined,
signingPlace: undefined,
materialRemark: undefined,
contractTemplateFlag: undefined,
capitalizedAmount: undefined,
remark: undefined
};
const data = reactive<PageData<ContractChangeInfoForm, ContractChangeInfoQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
contractChangeId: undefined,
contractFlag: undefined,
customerContractCode: undefined,
contractCode: undefined,
contractName: undefined,
contractCategory: undefined,
contractType: undefined,
businessDirection: undefined,
contractDeptId: undefined,
contractDate: undefined,
totalPrice: undefined,
oneCustomerId: undefined,
oneRepresent: undefined,
oneDate: undefined,
twoCustomerId: undefined,
twoRepresent: undefined,
twoDate: undefined,
contractManagerId: undefined,
templateId: undefined,
ossId: undefined,
paymentAccountId: undefined,
paymentMethod: undefined,
signatureAppendix: undefined,
warrantyPeriod: undefined,
internalContractCode: undefined,
externalContractCode: undefined,
orderContractCode: undefined,
projectContractCode: undefined,
deliveryStart: undefined,
warrantyPeriodDescription: undefined,
deliveryLocation: undefined,
shipMethod: undefined,
taxRate: undefined,
signingPlace: undefined,
materialRemark: undefined,
contractTemplateFlag: undefined,
capitalizedAmount: undefined,
params: {}
},
rules: {}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询合同变更信息列表 */
const getList = async () => {
loading.value = true;
const res = await listContractChangeInfo(queryParams.value);
contractChangeInfoList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
contractChangeInfoFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: ContractChangeInfoVO[]) => {
ids.value = selection.map((item) => item.changeInfoId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加合同变更信息';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: ContractChangeInfoVO) => {
reset();
const _changeInfoId = row?.changeInfoId || ids.value[0];
const res = await getContractChangeInfo(_changeInfoId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改合同变更信息';
};
/** 提交按钮 */
const submitForm = () => {
contractChangeInfoFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.changeInfoId) {
await updateContractChangeInfo(form.value).finally(() => (buttonLoading.value = false));
} else {
await addContractChangeInfo(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: ContractChangeInfoVO) => {
const _changeInfoIds = row?.changeInfoId || ids.value;
await proxy?.$modal.confirm('是否确认删除合同变更信息编号为"' + _changeInfoIds + '"的数据项?').finally(() => (loading.value = false));
await delContractChangeInfo(_changeInfoIds);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'oa/erp/contractChangeInfo/export',
{
...queryParams.value
},
`contractChangeInfo_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});
</script>

@ -0,0 +1,357 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width='100px'>
<el-form-item label="合同变更ID" prop="contractChangeId">
<el-input v-model="queryParams.contractChangeId" placeholder="请输入合同变更ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="标准物料标识" prop="materialFlag">
<el-input v-model="queryParams.materialFlag" placeholder="请输入标准物料标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="规格描述" prop="specificationDescription">
<el-input v-model="queryParams.specificationDescription" placeholder="请输入规格描述" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物料ID" prop="materialId">
<el-input v-model="queryParams.materialId" placeholder="请输入物料ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="销售物料ID" prop="relationMaterialId">
<el-input v-model="queryParams.relationMaterialId" placeholder="请输入销售物料ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="数量" prop="amount">
<el-input v-model="queryParams.amount" placeholder="请输入数量" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="单位ID" prop="unitId">
<el-input v-model="queryParams.unitId" placeholder="请输入单位ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="未税单价" prop="beforePrice">
<el-input v-model="queryParams.beforePrice" placeholder="请输入未税单价" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="税率" prop="taxRate">
<el-input v-model="queryParams.taxRate" placeholder="请输入税率" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="含税单价" prop="includingPrice">
<el-input v-model="queryParams.includingPrice" placeholder="请输入含税单价" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="小计" prop="subtotal">
<el-input v-model="queryParams.subtotal" placeholder="请输入小计" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="排序号" prop="sortOrder">
<el-input v-model="queryParams.sortOrder" placeholder="请输入排序号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="queryParams.activeFlag" placeholder="请输入激活标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['oa/erp:contractChangeMaterial:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:contractChangeMaterial:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['oa/erp:contractChangeMaterial:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa/erp:contractChangeMaterial:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="contractChangeMaterialList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="变更物料快照ID" align="center" prop="changeMaterialId" v-if="columns[0].visible"/>
<el-table-column label="合同变更ID" align="center" prop="contractChangeId" v-if="columns[2].visible"/>
<el-table-column label="标准物料标识" align="center" prop="materialFlag" v-if="columns[3].visible"/>
<el-table-column label="产品名称" align="center" prop="productName" v-if="columns[4].visible"/>
<el-table-column label="规格描述" align="center" prop="specificationDescription" v-if="columns[5].visible"/>
<el-table-column label="物料ID" align="center" prop="materialId" v-if="columns[6].visible"/>
<el-table-column label="销售物料ID" align="center" prop="relationMaterialId" v-if="columns[7].visible"/>
<el-table-column label="数量" align="center" prop="amount" v-if="columns[8].visible"/>
<el-table-column label="单位ID" align="center" prop="unitId" v-if="columns[9].visible"/>
<el-table-column label="未税单价" align="center" prop="beforePrice" v-if="columns[10].visible"/>
<el-table-column label="税率" align="center" prop="taxRate" v-if="columns[11].visible"/>
<el-table-column label="含税单价" align="center" prop="includingPrice" v-if="columns[12].visible"/>
<el-table-column label="小计" align="center" prop="subtotal" v-if="columns[13].visible"/>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[14].visible"/>
<el-table-column label="排序号" align="center" prop="sortOrder" v-if="columns[15].visible"/>
<el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[16].visible"/>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa/erp:contractChangeMaterial:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['oa/erp:contractChangeMaterial:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改合同变更物料对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="contractChangeMaterialFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="合同变更ID" prop="contractChangeId">
<el-input v-model="form.contractChangeId" placeholder="请输入合同变更ID" />
</el-form-item>
<el-form-item label="标准物料标识" prop="materialFlag">
<el-input v-model="form.materialFlag" placeholder="请输入标准物料标识" />
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入产品名称" />
</el-form-item>
<el-form-item label="规格描述" prop="specificationDescription">
<el-input v-model="form.specificationDescription" placeholder="请输入规格描述" />
</el-form-item>
<el-form-item label="物料ID" prop="materialId">
<el-input v-model="form.materialId" placeholder="请输入物料ID" />
</el-form-item>
<el-form-item label="销售物料ID" prop="relationMaterialId">
<el-input v-model="form.relationMaterialId" placeholder="请输入销售物料ID" />
</el-form-item>
<el-form-item label="数量" prop="amount">
<el-input v-model="form.amount" placeholder="请输入数量" />
</el-form-item>
<el-form-item label="单位ID" prop="unitId">
<el-input v-model="form.unitId" placeholder="请输入单位ID" />
</el-form-item>
<el-form-item label="未税单价" prop="beforePrice">
<el-input v-model="form.beforePrice" placeholder="请输入未税单价" />
</el-form-item>
<el-form-item label="税率" prop="taxRate">
<el-input v-model="form.taxRate" placeholder="请输入税率" />
</el-form-item>
<el-form-item label="含税单价" prop="includingPrice">
<el-input v-model="form.includingPrice" placeholder="请输入含税单价" />
</el-form-item>
<el-form-item label="小计" prop="subtotal">
<el-input v-model="form.subtotal" placeholder="请输入小计" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="排序号" prop="sortOrder">
<el-input v-model="form.sortOrder" placeholder="请输入排序号" />
</el-form-item>
<el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="form.activeFlag" placeholder="请输入激活标识" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="ContractChangeMaterial" lang="ts">
import { listContractChangeMaterial, getContractChangeMaterial, delContractChangeMaterial, addContractChangeMaterial, updateContractChangeMaterial } from '@/api/oa/erp/contractChangeMaterial';
import { ContractChangeMaterialVO, ContractChangeMaterialQuery, ContractChangeMaterialForm } from '@/api/oa/erp/contractChangeMaterial/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const contractChangeMaterialList = ref<ContractChangeMaterialVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const contractChangeMaterialFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `变更物料快照ID`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `合同变更ID`, visible: true },
{ key: 3, label: `标准物料标识`, visible: true },
{ key: 4, label: `产品名称`, visible: true },
{ key: 5, label: `规格描述`, visible: true },
{ key: 6, label: `物料ID`, visible: true },
{ key: 7, label: `销售物料ID`, visible: true },
{ key: 8, label: `数量`, visible: true },
{ key: 9, label: `单位ID`, visible: true },
{ key: 10, label: `未税单价`, visible: true },
{ key: 11, label: `税率`, visible: true },
{ key: 12, label: `含税单价`, visible: true },
{ key: 13, label: `小计`, visible: true },
{ key: 14, label: `备注`, visible: true },
{ key: 15, label: `排序号`, visible: true },
{ key: 16, label: `激活标识`, visible: true },
{ key: 17, label: `删除标志`, visible: true },
{ key: 18, label: `创建部门`, visible: true },
{ key: 19, label: `创建人`, visible: true },
{ key: 20, label: `创建时间`, visible: true },
{ key: 21, label: `更新人`, visible: true },
{ key: 22, label: `更新时间`, visible: true },
]);
const initFormData: ContractChangeMaterialForm = {
changeMaterialId: undefined,
contractChangeId: undefined,
materialFlag: undefined,
productName: undefined,
specificationDescription: undefined,
materialId: undefined,
relationMaterialId: undefined,
amount: undefined,
unitId: undefined,
beforePrice: undefined,
taxRate: undefined,
includingPrice: undefined,
subtotal: undefined,
remark: undefined,
sortOrder: undefined,
activeFlag: undefined,
}
const data = reactive<PageData<ContractChangeMaterialForm, ContractChangeMaterialQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
contractChangeId: undefined,
materialFlag: undefined,
productName: undefined,
specificationDescription: undefined,
materialId: undefined,
relationMaterialId: undefined,
amount: undefined,
unitId: undefined,
beforePrice: undefined,
taxRate: undefined,
includingPrice: undefined,
subtotal: undefined,
sortOrder: undefined,
activeFlag: undefined,
params: {
}
},
rules: {
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询合同变更物料列表 */
const getList = async () => {
loading.value = true;
const res = await listContractChangeMaterial(queryParams.value);
contractChangeMaterialList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
contractChangeMaterialFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: ContractChangeMaterialVO[]) => {
ids.value = selection.map(item => item.changeMaterialId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加合同变更物料";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: ContractChangeMaterialVO) => {
reset();
const _changeMaterialId = row?.changeMaterialId || ids.value[0]
const res = await getContractChangeMaterial(_changeMaterialId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改合同变更物料";
}
/** 提交按钮 */
const submitForm = () => {
contractChangeMaterialFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.changeMaterialId) {
await updateContractChangeMaterial(form.value).finally(() => buttonLoading.value = false);
} else {
await addContractChangeMaterial(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: ContractChangeMaterialVO) => {
const _changeMaterialIds = row?.changeMaterialId || ids.value;
await proxy?.$modal.confirm('是否确认删除合同变更物料编号为"' + _changeMaterialIds + '"的数据项?').finally(() => loading.value = false);
await delContractChangeMaterial(_changeMaterialIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('oa/erp/contractChangeMaterial/export', {
...queryParams.value
}, `contractChangeMaterial_${new Date().getTime()}.xlsx`)
}
onMounted(() => {
getList();
});
</script>

@ -0,0 +1,307 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width='100px'>
<el-form-item label="合同变更ID" prop="contractChangeId">
<el-input v-model="queryParams.contractChangeId" placeholder="请输入合同变更ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="排序号" prop="sortOrder">
<el-input v-model="queryParams.sortOrder" placeholder="请输入排序号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="付款节点ID" prop="paymentStageId">
<el-input v-model="queryParams.paymentStageId" placeholder="请输入付款节点ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="支付期限" prop="paymentDeadline">
<el-input v-model="queryParams.paymentDeadline" placeholder="请输入支付期限" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="支付比例" prop="paymentPercentage">
<el-input v-model="queryParams.paymentPercentage" placeholder="请输入支付比例" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="发票比例" prop="invoicePercentage">
<el-input v-model="queryParams.invoicePercentage" placeholder="请输入发票比例" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="支付金额" prop="paymentAmount">
<el-input v-model="queryParams.paymentAmount" placeholder="请输入支付金额" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="付款条款" prop="paymentDescription">
<el-input v-model="queryParams.paymentDescription" placeholder="请输入付款条款" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="queryParams.activeFlag" placeholder="请输入激活标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['oa/erp:contractChangePaymentMethod:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:contractChangePaymentMethod:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['oa/erp:contractChangePaymentMethod:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa/erp:contractChangePaymentMethod:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="contractChangePaymentMethodList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="变更付款方式快照ID" align="center" prop="changePaymentId" v-if="columns[0].visible"/>
<el-table-column label="合同变更ID" align="center" prop="contractChangeId" v-if="columns[2].visible"/>
<el-table-column label="排序号" align="center" prop="sortOrder" v-if="columns[3].visible"/>
<el-table-column label="付款节点ID" align="center" prop="paymentStageId" v-if="columns[4].visible"/>
<el-table-column label="支付期限" align="center" prop="paymentDeadline" v-if="columns[5].visible"/>
<el-table-column label="支付比例" align="center" prop="paymentPercentage" v-if="columns[6].visible"/>
<el-table-column label="发票比例" align="center" prop="invoicePercentage" v-if="columns[7].visible"/>
<el-table-column label="支付金额" align="center" prop="paymentAmount" v-if="columns[8].visible"/>
<el-table-column label="付款条款" align="center" prop="paymentDescription" v-if="columns[9].visible"/>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[10].visible"/>
<el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[11].visible"/>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa/erp:contractChangePaymentMethod:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['oa/erp:contractChangePaymentMethod:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改合同变更付款方式对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="contractChangePaymentMethodFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="合同变更ID" prop="contractChangeId">
<el-input v-model="form.contractChangeId" placeholder="请输入合同变更ID" />
</el-form-item>
<el-form-item label="排序号" prop="sortOrder">
<el-input v-model="form.sortOrder" placeholder="请输入排序号" />
</el-form-item>
<el-form-item label="付款节点ID" prop="paymentStageId">
<el-input v-model="form.paymentStageId" placeholder="请输入付款节点ID" />
</el-form-item>
<el-form-item label="支付期限" prop="paymentDeadline">
<el-input v-model="form.paymentDeadline" placeholder="请输入支付期限" />
</el-form-item>
<el-form-item label="支付比例" prop="paymentPercentage">
<el-input v-model="form.paymentPercentage" placeholder="请输入支付比例" />
</el-form-item>
<el-form-item label="发票比例" prop="invoicePercentage">
<el-input v-model="form.invoicePercentage" placeholder="请输入发票比例" />
</el-form-item>
<el-form-item label="支付金额" prop="paymentAmount">
<el-input v-model="form.paymentAmount" placeholder="请输入支付金额" />
</el-form-item>
<el-form-item label="付款条款" prop="paymentDescription">
<el-input v-model="form.paymentDescription" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="form.activeFlag" placeholder="请输入激活标识" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="ContractChangePaymentMethod" lang="ts">
import { listContractChangePaymentMethod, getContractChangePaymentMethod, delContractChangePaymentMethod, addContractChangePaymentMethod, updateContractChangePaymentMethod } from '@/api/oa/erp/contractChangePaymentMethod';
import { ContractChangePaymentMethodVO, ContractChangePaymentMethodQuery, ContractChangePaymentMethodForm } from '@/api/oa/erp/contractChangePaymentMethod/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const contractChangePaymentMethodList = ref<ContractChangePaymentMethodVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const contractChangePaymentMethodFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `变更付款方式快照ID`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `合同变更ID`, visible: true },
{ key: 3, label: `排序号`, visible: true },
{ key: 4, label: `付款节点ID`, visible: true },
{ key: 5, label: `支付期限`, visible: true },
{ key: 6, label: `支付比例`, visible: true },
{ key: 7, label: `发票比例`, visible: true },
{ key: 8, label: `支付金额`, visible: true },
{ key: 9, label: `付款条款`, visible: true },
{ key: 10, label: `备注`, visible: true },
{ key: 11, label: `激活标识`, visible: true },
{ key: 12, label: `删除标志`, visible: true },
{ key: 13, label: `创建部门`, visible: true },
{ key: 14, label: `创建人`, visible: true },
{ key: 15, label: `创建时间`, visible: true },
{ key: 16, label: `更新人`, visible: true },
{ key: 17, label: `更新时间`, visible: true },
]);
const initFormData: ContractChangePaymentMethodForm = {
changePaymentId: undefined,
contractChangeId: undefined,
sortOrder: undefined,
paymentStageId: undefined,
paymentDeadline: undefined,
paymentPercentage: undefined,
invoicePercentage: undefined,
paymentAmount: undefined,
paymentDescription: undefined,
remark: undefined,
activeFlag: undefined,
}
const data = reactive<PageData<ContractChangePaymentMethodForm, ContractChangePaymentMethodQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
contractChangeId: undefined,
sortOrder: undefined,
paymentStageId: undefined,
paymentDeadline: undefined,
paymentPercentage: undefined,
invoicePercentage: undefined,
paymentAmount: undefined,
paymentDescription: undefined,
activeFlag: undefined,
params: {
}
},
rules: {
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询合同变更付款方式列表 */
const getList = async () => {
loading.value = true;
const res = await listContractChangePaymentMethod(queryParams.value);
contractChangePaymentMethodList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
contractChangePaymentMethodFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: ContractChangePaymentMethodVO[]) => {
ids.value = selection.map(item => item.changePaymentId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加合同变更付款方式";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: ContractChangePaymentMethodVO) => {
reset();
const _changePaymentId = row?.changePaymentId || ids.value[0]
const res = await getContractChangePaymentMethod(_changePaymentId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改合同变更付款方式";
}
/** 提交按钮 */
const submitForm = () => {
contractChangePaymentMethodFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.changePaymentId) {
await updateContractChangePaymentMethod(form.value).finally(() => buttonLoading.value = false);
} else {
await addContractChangePaymentMethod(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: ContractChangePaymentMethodVO) => {
const _changePaymentIds = row?.changePaymentId || ids.value;
await proxy?.$modal.confirm('是否确认删除合同变更付款方式编号为"' + _changePaymentIds + '"的数据项?').finally(() => loading.value = false);
await delContractChangePaymentMethod(_changePaymentIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('oa/erp/contractChangePaymentMethod/export', {
...queryParams.value
}, `contractChangePaymentMethod_${new Date().getTime()}.xlsx`)
}
onMounted(() => {
getList();
});
</script>
Loading…
Cancel
Save