Commit 58c7ac85 authored by 牛虎林's avatar 牛虎林

变更管理页面开发完成

parent 6dda5ff3
import { BasicPageParams, BasicFetchResult } from '@/api/model/baseModel';
export type ProjectParams = {
//年份
givenYear?: string;
//companyName
companyName?: string;
//季度
quarter:string
};
export type ProjectPageParams = BasicPageParams & ProjectParams;
export interface ProjectListItem {
id: string;
//合同id
contractId: string;
projectInvestment: string;
biddingMethod: string;
firstPartyName: string;
secondPartyName: string;
formOfContract: string;
contractSigningTime: string;
closingTime: string;
contractAmount: string;
superContractScale: string;
submittedForSettlement: string;
meetingMinutes: string;
remark: string;
fundingSource: string;
projectName: string;
proportionContractAmount: string;
createTime: null;
createBy: string;
updateTime: null;
updateBy: string;
}
export interface ChangModel {
id?: string | number;
constructionMode: string;
isReserveProject: string;
projectType: string;
projectOverview: string;
constructionPurpose: string;
}
export interface ProjectModel<P, C> {
management: P[];
proClosingQuarter: C;
}
interface Contract {
contractId: number;
projectName: string;
fundingSource: string;
projectInvestment: string;
biddingMethod: string;
contracYpe: string;
contractName: string;
firstPartyName: string;
secondPartyName: string;
formOfContract: string;
contractSigningTime: string;
closingTime: string;
closingTimeDatetime: string;
contractAmount: string;
submittedForSettlement: string;
superContractScale: string;
sumOfMoney: string;
proportionContractAmount: string;
meetingMinutes: string;
remark: string;
}
interface ProjectManagement {
projectId: number;
contract: Contract[];
}
interface ProClosingQuarter {
companyName: string;
status: string;
quarter: string;
givenYear: string;
yearQuarter: string;
}
export type ProjectListGetResultModel = BasicFetchResult<ProjectListItem>;
export type EditModel = ProjectModel<ProjectManagement[], ProClosingQuarter>
......@@ -26,7 +26,7 @@ const changeSignature: AppRouteModule = {
},
{
path: 'edit',
name: 'settlementManageEdit',
name: 'addChangeSignature',
component: () => import('@/views/changeSignature/addChangeSignature.vue'),
meta: {
// affix: true,
......
<template>
<div>
查看详情
</div>
<PageWrapper :title="getTitle" :contentBackground="false" headerSticky>
<template #extra>
<a-button type="primary" danger v-if="isUpdate"> 删除</a-button>
<a-button type="primary" @click="handleSubmit" v-if="isUpdate">提交</a-button>
<a-button type="default" @click="router.back()"> 返回</a-button>
<a-button type="success" @click="examine" v-if="statusResult=='0'"> 审核</a-button>
</template>
<PageCard v-for="(item, index) in tabsFormSchema" :key="index" :title="item.name">
<template #right>
<a-button
type="text"
preIcon="ant-design:delete-outlined"
danger
@click="deleteItem(index)"
>
</a-button>
</template>
<BasicForm :loading="loading" @register="item.Form[0]">
</BasicForm>
<PageCard v-for="(content, contentIndex) in item.ContentFormList" :key="contentIndex" :title="'合同'+contractName[index].contractNameList[contentIndex]">
<BasicForm :loading="loading" @register="content.ContentFormList"/>
</PageCard>
</PageCard>
<a-button type="dashed" @click="add" preIcon="ei:plus"> 从合同中导入</a-button>
<a-button type="dashed" @click="handleAdd" class="ml-2" preIcon="ei:plus"> 新建合同</a-button>
<contractDrawer @register="registerDrawer" @success="handleSuccess"/>
<projectlibraryModel @register="register" @close="handleNewData"/>
</PageWrapper>
</template>
<script lang="ts" setup>
import {router} from "@/router";
import {ref} from "vue";
//标题
const getTitle = ref('');
//引入vue 常用的组件
import {unref, computed, onMounted, reactive} from 'vue';
//新建合同
import projectlibraryModel from '@/components/ContractModel/Contract.vue';
<script setup lang="ts">
import {useRoute} from 'vue-router';
//分页查询
import {PageWrapper} from '@/components/Page';
//卡片
import PageCard from '@/components/Page/src/PageCard.vue';
//合同弹出框
import contractDrawer from '@/views/contract/contractDrawer.vue';
//表单
import {BasicForm, useForm, FormProps, UseFormReturnType} from '@/components/Form';
import {formSchema, Content} from './changeSignatrue.data';
//引入api
import {deepMerge} from '@/utils';
//引入弹框
import {useMessage} from '@/hooks/web/useMessage';
//引入弹框
import {useDrawer} from '@/components/Drawer';
//引入api
import {nextTick} from 'vue';
</script>
const [registerDrawer, {openDrawer}] = useDrawer();
import {useModal} from '@/components/Modal';
import {EditModel} from "@/api/project/model/changeSignatureModel";
const [register, {openModal: openModal}] = useModal();
const {createMessage} = useMessage();
const formData = ref<EditModel>({management: [], proClosingQuarter: undefined});
//列表对象
const tabsFormSchema = reactive<TabsFormType[]>([]);
//合同名称
const contractName = ref([]);
onMounted(async () => {
const route = useRoute();
if (route.query.id) {
getTitle.value = '新建变更管理';
} else {
getTitle.value = '新建变更管理';
}
})
type TabsFormType = {
name: string;
forceRender?: boolean;
projectId: string | number;
Form: UseFormReturnType;
ContentFormList: Array<UseFormReturnType>;
};
//配置
const baseFormConfig: Partial<FormProps> = {
showActionButtonGroup: false,
labelWidth: 100,
layout: 'vertical',
};
//导入合同的确认
async function handleNewData(info: any) {
if (info) {
info.map((i) => {
handleNew(i);
});
}
}
// 构建表单
async function handleNew(info: any) {
//判断项目id是否相同
if (formData.value.management.some(obj => obj.projectId === info.projectId)) {
const item = {
ContentFormList: useForm(Object.assign({schemas: Content}, baseFormConfig) as FormProps),
};
const index = tabsFormSchema.findIndex(obj => obj.projectId === info.projectId);
const contractList = formData.value.management[index].contract
for (let i = 0; i < contractList.length; i++) {
if (contractList[i].contractId !== info.id) {
contractName.value[index].contractNameList.push(info.contrcatName)
console.log(contractName.value,"标题查看")
tabsFormSchema[index].ContentFormList.push(item);
formData.value.management[index].contract.push({
contractId: info.id,
});
}
}
} else {
const contentItem = {
ContentFormList: useForm(Object.assign({schemas: Content}, baseFormConfig) as FormProps),
};
//合同名称集合
const contractNameList=[]
console.log("合同名称",info)
contractNameList.push(info.contrcatName)
//构建合同名称
let Name={
//项目id
projectId: info.projectId,
//合同名称
contractNameList: contractNameList,
}
contractName.value.push(Name)
const list = [];
list.push(contentItem)
const item = {
name: '序号' + (tabsFormSchema.length + 1),
projectId: info.projectId,
forceRender: true,
Form: useForm(Object.assign({schemas: formSchema}, baseFormConfig) as FormProps),
ContentFormList: list,
};
tabsFormSchema.push(item);
const contractList = []
const contract = {
contractId: info.id
}
contractList.push(contract)
formData.value.management.push({
projectId: info.projectId,
contract: contractList
});
}
<style scoped lang="less">
}
</style>
async function add() {
openModal();
}
</script>
......@@ -92,3 +92,321 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 4 },
},
];
export const formSchema: FormSchema[] = [
{
field: 'projectName',
label: '项目名称',
required: true,
component: 'Input',
componentProps: {
readonly: true,
},
colProps: { span: 7, offset: 1 },
},
{
field: 'fundingSource',
label: '资金来源',
required: true,
component: 'Input',
colProps: { span: 7, offset: 1 },
},
{
// //project_investment
field: 'projectInvestment',
label: '立即投资额',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '万元',
},
colProps: { span: 7, offset: 1 },
},
];
export const Content: FormSchema[] = [
{
//bidding_method
field: 'biddingMethod',
label: '招标方式',
required: true,
component: 'Select',
componentProps: {
options: [
{
label: '建委招标',
value: '1',
},
{
label: '平台招标',
value: '2',
},
{
label: '邀标比选',
value: '3',
},
{
label: '直接委托',
value: '4',
},
{
label: '评分定离',
value: '5',
}
],
},
colProps: { span: 7, offset: 1 },
},
{
//contrac_ype
field: 'contracYpe',
label: '合同类型',
required: true,
component: 'Select',
componentProps: {
options: [
{
label: '施工',
value: '1',
},
{
label: '监理',
value: '2',
},
{
label: '设计',
value: '3',
},
{
label: '图审',
value: '4',
},
],
},
colProps: { span: 7, offset: 1 },
},
{
field: 'contractName',
label: ' 合同名称',
required: true,
component: 'Input',
colProps: { span: 7, offset: 1 },
},
{
//first_party_name
field: 'firstPartyName',
label: '甲方单位名称',
required: true,
component: 'Input',
colProps: { span: 7, offset: 1 },
},
{
field: 'secondPartyName',
//second_party_name
label: '乙方单位名称',
required: true,
component: 'Input',
colProps: { span: 7, offset: 1 },
},
{
//form_of_contract
field: 'formOfContract',
label: '合同形式',
required: true,
component: 'Select',
componentProps: {
options: [
{
label: '固定总价',
value: '1',
},
{
label: '固定单价',
value: '2',
},
{
label: '费率',
value: '3',
},
{
label: '其他',
value: '4',
},
],
},
colProps: { span: 7, offset: 1 },
},
{
//contract_amount
field: 'contractAmount',
label: '合同金额',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//contract_amount
field: 'contractAmount',
label: '合同累计签证、变更金额(含本次):',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//contract_amount
field: 'contractAmount',
label: '累计变更签证金额占合同金额比例:',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
//变更编号
{
field: 'changeSignatureNumber',
label: '变更编号',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
{
//form_of_contract
field: 'formOfContract',
label: '变更类型:',
required: true,
component: 'Select',
componentProps: {
options: [
{
label: '图纸遗漏',
value: '1',
},
{
label: '图纸错误',
value: '2',
},
{
label: '销售部门要求增加',
value: '3',
},
{
label: '其他',
value: '4',
},
],
},
colProps: { span: 7, offset: 1 },
},
{
field: 'changeSignatureNumber',
label: '责任方',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
{
field: 'changeSignatureNumber',
label: ' 变更内容:',
required: true,
component: 'input',
colProps: { span: 7, offset: 1 },
},
//预估变更金额
{
field: 'changeSignatureNumber',
label: '预估变更金额:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
{
field: 'changeSignatureNumber',
label: '预估变更金额占合同金额比例:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
//签证编号:
{
field: 'changeSignatureNumber',
label: '签证编号:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
//签证类型:
{
field: 'changeSignatureNumber',
label: '签证类型:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
// 签证内容:
{
field: 'changeSignatureNumber',
label: '签证内容:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
//预估签证金额:
{
field: 'changeSignatureNumber',
label: '预估签证金额:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
//预估签证金额占合同金额比例
{
field: 'changeSignatureNumber',
label: '预估签证金额占合同金额比例:',
required: true,
component: 'InputNumber',
colProps: { span: 7, offset: 1 },
},
{
//meeting_minutes
label: '会议纪要',
field: 'meetingMinutes',
required: true,
component: 'InputTextArea',
componentProps: {
maxlength: 100,
showCount: true,
},
colProps: { span: 7, offset: 1 },
},
{
//remark
label: '备注',
field: 'remark',
required: true,
component: 'InputTextArea',
componentProps: {
maxlength: 100,
showCount: true,
},
colProps: { span: 7, offset: 1 },
},
]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment