Commit eb199ef9 authored by mengzixuan's avatar mengzixuan

Merge remote-tracking branch 'origin/develop' into develop

parents fd2463fd 580604c8
import { ProjectParams, ProjectListGetResultModel, ProjectModel } from '@/api/project/model/projectModel';
import { defHttp } from '@/utils/http/axios';
enum Api {
//分页查询变更记录
GetList = '/pro/change-visa/page',
}
export const getSettlementManageList = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
import { ProjectParams, ProjectListGetResultModel, ProjectModel } from '@/api/project/model/projectModel';
import { defHttp } from '@/utils/http/axios';
enum Api {
//分页查询合同集合
GetList = '/pro/settlement/select-contract',
}
export const getContractListPage = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
......@@ -12,6 +12,7 @@ enum Api {
UpdateProject = '/pro/tenderManager/update',
DeleteProject = '/pro/tenderManager/del',
ProjectDetail = '/pro/tenderManager/details',
Itemdelete = '/pro/tenderManager/details/del',
}
export const getListByPage = (params?: ProjectPageParams) =>
defHttp.post<ListGetResultModel>({ url: Api.GetList, data: params });
......@@ -36,5 +37,8 @@ export const updateItem = (params?: any) =>
export const deleteItem = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.DeleteProject, params });
export const Itemdelete = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.Itemdelete, params });
export const getItem = (params?: any) =>
defHttp.get<ListItem[]>({ url: Api.ProjectDetail, params });
import {
ProjectPageParams,
ListGetResultModel,
ProjectModel,
ListItem,
} from './model/biddingPlanModel';
import { ProjectPageParams, ListGetResultModel, ProjectModel } from './model/biddingPlanModel';
import { defHttp } from '@/utils/http/axios';
enum Api {
......@@ -12,6 +7,7 @@ enum Api {
UpdateProject = '/pro/tenderPlan/update',
DeleteProject = '/pro/tenderPlan/del',
ProjectDetail = '/pro/tenderPlan/details',
Itemdelete = '/pro/tenderPlan/details/del',
}
export const getListByPage = (params?: ProjectPageParams) =>
defHttp.post<ListGetResultModel>({ url: Api.GetList, data: params });
......@@ -37,5 +33,7 @@ export const updateItem = (params?: any) =>
export const deleteItem = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.DeleteProject, params });
export const getItem = (params?: any) =>
defHttp.get<ListItem[]>({ url: Api.ProjectDetail, params });
export const Itemdelete = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.Itemdelete, params });
export const getItem = (params?: any) => defHttp.get<planModel>({ url: Api.ProjectDetail, params });
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;
}
export interface ContentModel {
id?: string | number;
quarter: string | number;
companyName: string;
givenYear: string;
yearQuarter: string;
status: string;
}
export interface PlanModel {
id: string | number;
contractId: string | number;
projectId: string | number;
projectInvestment: string | number;
biddingMethod: string | number;
contracYpe: string | number;
contractName: string | number;
firstPartyName: string | number;
secondPartyName: string | number;
formOfContract: string | number;
closingTime: string | number;
closingTimeDatetime: string | number;
contractAmount: string | number;
submittedForSettlement: string | number;
superContractScale: string | number;
sumOfMoney: string | number;
proportionContractAmount: string | number;
meetingMinutes: string | number;
proClosingQuarterId: string | number;
remark: string | number;
}
export type ProjectListGetResultModel = BasicFetchResult<ProjectListItem>;
export type EditModel = ProjectModel<PlanModel[], ContentModel>
import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
// import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
import {ProjectParams, ProjectModel} from './model/settlementManageModel'
import { defHttp } from '@/utils/http/axios';
enum Api {
//查询list
GetList = '/pro/settlement/page',
//新增接口
Add = '/pro/settlement/add',
//根据id查询详情
GetItem = '/pro/settlement/findById',
//修改接口
update = '/pro/settlement/update-settlement',
//根据id删除
deleteItem = '/pro/settlement/byid-del',
//审核接口
audit = '/pro/settlement/byId-examine',
//删除列表接口
deleteList = '/pro/settlement/del',
}
export const getSettlementManageList = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
defHttp.post<ProjectParams>({url: Api.GetList, data: params});
export const addItem = (params?: any) =>
defHttp.post<ProjectModel>({
url: Api.Add,
data: params,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});
//根据id查询详情
export const getItem = (params?: any) =>
defHttp.get<ProjectModel>({
url: Api.GetItem,
params,
});
/**
* 修改
*/
export const updateItem = (params?: any) =>
defHttp.put<ProjectModel>({
url: Api.update,
data: params.management,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});
/**
* 根据id删除
*/
export const deleteOne = (params?: any) =>
defHttp.delete<ProjectModel>({
url: Api.deleteItem,
params,
});
/**
* 审核接口
*/
export const auditItem = (params?: any) =>
defHttp.get<ProjectModel>({
url: Api.audit,
params,
});
/**
* deleteList
*/
export const deleteList = (params?: any) =>
defHttp.delete<ProjectModel>({
url: Api.deleteList,
params,
});
<template>
<BasicModal
width="70%"
v-bind="$attrs"
@register="register"
title="选择项目导入"
:minHeight="30"
okText="导入"
@ok="handleSubmit"
@visible-change="handleVisibleChange"
>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, text, record, index }">
<!-- 当前列是序号列时,显示序号 -->
<span v-if="column.dataIndex === 'serialNumber'">{{ index + 1 }}</span>
<!-- 其他列正常显示 -->
<span v-else>{{ text }}</span>
</template>
</BasicTable>
<!-- <button @click="getSelectRowList">获取数据</button>-->
</BasicModal>
</template>
<script lang="ts" setup>
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getContractListPage } from '@/api/contract/contract';
import { useMessage } from '@/hooks/web/useMessage';
import { columns, searchFormSchema } from './data';
const [registerTable, { reload, getSelectRows }] = useTable({
api: getContractListPage,
title: '123',
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
rowSelection: {
type: 'checkbox',
},
// actionColumn: {
// width: 80,
// title: '操作',
// dataIndex: 'action',
// // slots: { customRender: 'action' },
// fixed: undefined,
// },
});
const { createMessage } = useMessage();
function getSelectRowList() {
// createMessage.info('请在控制台查看!');
// console.log(getSelectRows());
emit('close', getSelectRows());
}
const emit = defineEmits(['close']);
function handleVisibleChange(v) {}
const [register, { closeModal }] = useModalInner((data) => {
data;
});
function handleSubmit() {
getSelectRowList();
closeModal();
}
</script>
import { BasicColumn, FormSchema } from '@/components/Table';
import { h } from 'vue';
import { Switch } from 'ant-design-vue';
import { setRoleStatus } from '@/api/demo/system';
import { useMessage } from '@/hooks/web/useMessage';
type CheckedType = boolean | string | number;
export const columns: (
| { dataIndex: string; width: number; title: string }
| { dataIndex: string; width: number; title: string }
| { dataIndex: string; width: number; title: string }
| { dataIndex: string; width: number; title: string }
| { dataIndex: string; width: number; title: string }
| { dataIndex: string; width: number; title: string }
| { dataIndex: string; width: number; title: string }
)[] = [
{
title: '合同名称',
dataIndex: 'contrcatName',
width: 180,
},
{
title: '项目名称',
dataIndex: 'projectName',
width: 180,
},
{
title: '收款单位',
dataIndex: 'collectingUnit',
width: 200,
},
{
title: '投资金额',
dataIndex: 'investmentAount',
width: 180,
},
{
title: '合同额',
dataIndex: 'contractAmount',
width: 180,
}
];
export const searchFormSchema: FormSchema[] = [
{
field: 'projectName',
label: '',
component: 'Input',
componentProps: {
placeholder: '搜索关键字',
},
colProps: { span: 4 },
},
];
export const formSchema: FormSchema[] = [
{
field: 'projectName',
label: '项目名称',
component: 'Input',
required: true,
componentProps: {
placeholder: 'XXXX项目',
disabled: true,
style: {
background: 'none',
border: 'none',
},
},
colProps: { span: 8 },
},
];
......@@ -174,7 +174,11 @@
filename: filename,
});
if (props.resultField) {
console.log(res);
let result = get(res, resultField);
console.log(result);
info.onSuccess!(result);
} else {
// 不传入 resultField 的情况
......
......@@ -24,6 +24,16 @@ const changeSignature: AppRouteModule = {
orderNo: 5,
},
},
{
path: 'edit',
name: 'settlementManageEdit',
component: () => import('@/views/changeSignature/addChangeSignature.vue'),
meta: {
// affix: true,
title: '新建变更管理',
orderNo: 8,
},
},
],
};
......
......@@ -7,7 +7,7 @@ import { useMessage } from '@/hooks/web/useMessage';
export const columns: BasicColumn[] = [
{
title: '序号',
dataIndex: 'projectName',
dataIndex: 'serialNumber',
width: 100,
},
{
......
<template>
<PageWrapper :title="getTitle" :contentBackground="false" headerSticky>
<PageWrapper
v-loading="loadingRef"
loading-tip="加载中..."
:title="getTitle"
:contentBackground="false"
headerSticky
>
<template #extra>
<a-button type="primary" danger> 删除 </a-button>
<a-button type="primary" v-if="!disabled" @click="handleSubmit"> 提交 </a-button>
......@@ -41,7 +47,7 @@
import { deepMerge } from '@/utils';
import { useMessage } from '@/hooks/web/useMessage';
import { useDrawer } from '@/components/Drawer';
import { addItem, updateItem, getItem } from '@/api/project/biddingManagement';
import { addItem, updateItem, getItem, Itemdelete } from '@/api/project/biddingManagement';
import { editModel } from '@/api/project/model/biddingManagementModel';
import { nextTick } from 'vue';
const [registerDrawer, { openDrawer }] = useDrawer();
......@@ -50,6 +56,7 @@
import { useRoute } from 'vue-router';
const [register, { openModal: openModal }] = useModal();
const { createMessage } = useMessage();
const loadingRef = ref(false);
const getTitle = ref('');
const isUpdate = ref(false);
const loading = ref(false);
......@@ -57,6 +64,7 @@
const tenderId = ref<any>('');
const disabled = ref(false);
onMounted(async () => {
loadingRef.value = true;
const route = useRoute();
const id = route.query.id; // 获取名为id的参数
if (!id) {
......@@ -69,7 +77,7 @@
} else {
isUpdate.value = true;
tenderId.value = id;
disabled.value = Boolean(route.query.disabled);
disabled.value = route.query.disabled == '0' ? false : true;
if (disabled.value) {
getTitle.value = '查看招标管理';
} else {
......@@ -100,6 +108,7 @@
});
}
}
loadingRef.value = false;
});
type TabsFormType = {
name: string;
......@@ -149,9 +158,22 @@
});
}
async function deleteItem(index: any) {
tabsFormSchema.splice(index, 1);
formData.value.tenderPlanPro.splice(index, 1);
loadingRef.value = true;
const id = formData.value.tenderPlanPro[index].id;
if (id) {
await Itemdelete({
id,
});
formData.value.tenderPlanPro.splice(index, 1);
tabsFormSchema.splice(index, 1);
loadingRef.value = false;
} else {
formData.value.tenderPlanPro.splice(index, 1);
tabsFormSchema.splice(index, 1);
loadingRef.value = false;
}
}
async function handleAdd() {
openDrawer(true, {
isUpdate: false,
......@@ -162,7 +184,7 @@
handleNew(params);
}
async function handleSubmit() {
loading.value = true;
loadingRef.value = true;
try {
for (let i = 0; i < tabsFormSchema.length; i++) {
let item = tabsFormSchema[i];
......@@ -177,14 +199,15 @@
let res = isUpdate.value
? await updateItem(unref(formData.value.tenderPlanPro))
: await addItem(unref(formData));
loading.value = false;
loadingRef.value = false;
console.log(res);
createMessage.success('提交成功!');
router.back();
} catch (e) {
// 验证失败或出错,切换到对应标签页
console.log(e);
} finally {
loading.value = false;
loadingRef.value = false;
}
}
</script>
......@@ -4,7 +4,10 @@
<template #toolbar>
<a-button type="primary" preIcon="mdi:plus" @click="handleCreate"> 新增招标管理 </a-button>
</template>
<template #bodyCell="{ column, record }">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
......@@ -13,11 +16,11 @@
:actions="[
{
label: '详情',
onClick: handleEdit.bind(null, record, true),
onClick: handleEdit.bind(null, record, 1),
},
{
label: '修改',
onClick: handleEdit.bind(null, record, false),
onClick: handleEdit.bind(null, record, 0),
},
{
label: '删除',
......@@ -72,7 +75,7 @@
});
}
function handleEdit(record: Recordable, disabled: boolean) {
function handleEdit(record: Recordable, disabled: number) {
push({
path: '/biddingManagement/edit',
query: {
......
......@@ -7,7 +7,7 @@ import { useMessage } from '@/hooks/web/useMessage';
export const columns: BasicColumn[] = [
{
title: '序号',
dataIndex: 'projectName',
dataIndex: 'serialNumber',
width: 100,
},
{
......
<template>
<PageWrapper :title="getTitle" :contentBackground="false" headerSticky>
<PageWrapper
:title="getTitle"
v-loading="loadingRef"
loading-tip="加载中..."
:contentBackground="false"
headerSticky
>
<template #extra>
<a-button type="primary" danger> 删除 </a-button>
<a-button type="primary" v-if="!disabled" @click="handleSubmit"> 提交 </a-button>
......@@ -37,11 +43,12 @@
import { deepMerge } from '@/utils';
import { useMessage } from '@/hooks/web/useMessage';
import { useDrawer } from '@/components/Drawer';
import { addItem, updateItem, getItem } from '@/api/project/biddingPlan';
import { addItem, updateItem, getItem, Itemdelete } from '@/api/project/biddingPlan';
import { editModel } from '@/api/project/model/biddingPlanModel';
import { useModal } from '@/components/Modal';
import { router } from '@/router';
import { useRoute } from 'vue-router';
const loadingRef = ref(false);
const [registerDrawer, { openDrawer }] = useDrawer();
const [register, { openModal: openModal }] = useModal();
const { createMessage } = useMessage();
......@@ -52,6 +59,7 @@
const disabled = ref(false);
const getTitle = ref('');
onMounted(async () => {
loadingRef.value = true;
const route = useRoute();
const id = route.query.id; // 获取名为id的参数
if (!id) {
......@@ -64,7 +72,7 @@
} else {
isUpdate.value = true;
tenderId.value = id;
disabled.value = Boolean(route.query.disabled);
disabled.value = route.query.disabled == '0' ? false : true;
if (disabled.value) {
getTitle.value = '查看招标计划';
} else {
......@@ -79,8 +87,8 @@
forceRender: true,
Form: useForm(Object.assign({ schemas: formSchema }, baseFormConfig) as FormProps),
};
console.log(source);
source.biddingPeriod = source.biddingPeriod.split(',');
source.plannedPeriod = source.plannedPeriod.split(',');
const { setFieldsValue } = item.Form[1];
tabsFormSchema.push(item);
formData.value.tenderPlanPro.push({
......@@ -95,6 +103,7 @@
});
}
}
loadingRef.value = false;
});
type TabsFormType = {
name: string;
......@@ -143,9 +152,22 @@
});
}
async function deleteItem(index: any) {
tabsFormSchema.splice(index, 1);
formData.value.tenderPlanPro.splice(index, 1);
loadingRef.value = true;
const id = formData.value.tenderPlanPro[index].id;
if (id) {
await Itemdelete({
id,
});
formData.value.tenderPlanPro.splice(index, 1);
tabsFormSchema.splice(index, 1);
loadingRef.value = false;
} else {
formData.value.tenderPlanPro.splice(index, 1);
tabsFormSchema.splice(index, 1);
loadingRef.value = false;
}
}
async function handleAdd() {
openDrawer(true, {
isUpdate: false,
......@@ -156,7 +178,7 @@
handleNew(params);
}
async function handleSubmit() {
loading.value = true;
loadingRef.value = true;
try {
for (let i = 0; i < tabsFormSchema.length; i++) {
let item = tabsFormSchema[i];
......@@ -171,14 +193,15 @@
formData.value.proNumber = formData.value.tenderPlanPro.Length;
let res = isUpdate.value ? await updateItem(unref(formData)) : await addItem(unref(formData));
loading.value = false;
loadingRef.value = true;
console.log(res);
createMessage.success('提交成功!');
router.back();
} catch (e) {
// 验证失败或出错,切换到对应标签页
console.log(e);
} finally {
loading.value = false;
loadingRef.value = false;
}
}
</script>
......@@ -4,7 +4,10 @@
<template #toolbar>
<a-button type="primary" preIcon="mdi:plus" @click="handleCreate"> 新增招标计划 </a-button>
</template>
<template #bodyCell="{ column, record }">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
......@@ -13,11 +16,11 @@
:actions="[
{
label: '详情',
onClick: handleEdit.bind(null, record, true),
onClick: handleEdit.bind(null, record, 1),
},
{
label: '修改',
onClick: handleEdit.bind(null, record, false),
onClick: handleEdit.bind(null, record, 0),
},
{
label: '删除',
......@@ -71,9 +74,9 @@
});
}
function handleEdit(record: Recordable, disabled: boolean) {
function handleEdit(record: Recordable, disabled: number) {
push({
path: '/biddingManagement/edit',
path: '/biddingPlan/edit',
query: {
id: record.id,
disabled: String(disabled),
......
<script setup lang="ts">
</script>
<template>
</template>
<style scoped lang="less">
</style>
\ No newline at end of file
......@@ -3,42 +3,42 @@ import { BasicColumn, FormSchema } from '@/components/Table';
export const columns: BasicColumn[] = [
{
title: '填报周期',
dataIndex: 'projectName',
dataIndex: 'yearQuarter',
width: 200,
},
{
title: '项目数量',
dataIndex: 'implementingEntity',
dataIndex: 'uniqueProjectCount',
width: 180,
},
{
title: '公司名称',
dataIndex: 'constructionMode',
dataIndex: 'companyName',
width: 180,
},
{
title: '最新更新人',
dataIndex: 'projectType',
dataIndex: 'updateBy',
width: 180,
},
{
title: '最新更新时间',
dataIndex: 'fundingSource',
dataIndex: 'updateTime',
width: 180,
},
{
title: '审核状态',
dataIndex: 'constructionPurpose',
dataIndex: 'status',
width: 180,
},
{
title: '审核人',
dataIndex: '国constructionScale',
dataIndex: 'auditor',
width: 180,
},
{
title: '审核时间',
dataIndex: '国constructionScale',
dataIndex: 'auditTime',
width: 180,
},
];
......
......@@ -5,6 +5,12 @@
<a-button type="primary" icon=""> 新建变更签证管理 </a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'status'">
<Tag color="warning" v-if="record.status == '0'"> 未审核 </Tag>
</template>
<template v-if="column.key === 'status'">
<Tag color="warning" v-if="record.status == '1'"> 已审核 </Tag>
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
......@@ -30,14 +36,15 @@
</template>
<script setup lang="ts">
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage } from '@/api/project/biddingPlan';
import { getSettlementManageList } from '@/api/changeSignatrue/changeSignatrue';
import {
columns,
searchFormSchema,
} from '@/views/changeSignature/changeSignatrue.data';
import {Tag} from "ant-design-vue";
const [registerTable, { reload }] = useTable({
api: getListByPage,
api: getSettlementManageList,
columns,
formConfig: {
labelWidth: 120,
......
......@@ -47,6 +47,7 @@
<component :is="tabs[item.component]" />
</TabPane>
</template>
</Tabs>
</div>
</div>
......
This diff is collapsed.
......@@ -10,9 +10,10 @@ export const formSchema: FormSchema[] = [
// required: true,
componentProps: {
api: uploadApi,
resultField: 'data.data.fullPath',
accept: ['png', 'jpeg', 'jpg'],
maxSize: 1,
maxNumber: 1,
multiple: false,
name: 'multipartFile',
},
},
{
......@@ -24,12 +25,15 @@ export const formSchema: FormSchema[] = [
},
{
field: 'isReserveProject',
component: 'Switch',
label: '储备项目',
component: 'RadioButtonGroup',
defaultValue: 'false',
componentProps: {
checkedValue: 'true',
unCheckedValue: 'false',
options: [
{ label: '是', value: 'true' },
{ label: '否', value: 'false' },
],
},
label: '储备项目',
labelWidth: '140px',
},
{
......@@ -211,19 +215,139 @@ export const formSchema: FormSchema[] = [
];
export const searchFormSchema: FormSchema[] = [
{
field: 'year',
field: 'projecName',
label: '',
component: 'DatePicker',
required: true,
component: 'Input',
componentProps: {
placeholder: '选择填报周期',
valueFormat: 'YYYY-MM-dd',
format: 'YYYY-MM-dd',
style: {
width: '100%',
},
placeholder: '输入搜索关键词',
},
colProps: { span: 4 },
},
{
field: 'constructionMode',
component: 'RadioButtonGroup',
colProps: {
span: 6,
},
componentProps: {
options: [
{
label: '全部项目',
value: undefined,
},
{
label: '自建',
value: '1自建',
},
{
label: '委托建设',
value: '委托建设',
},
{
label: '代理',
value: '代理',
},
{
label: '承建',
value: '承建',
},
],
},
},
{
field: 'isReserveProject',
component: 'Checkbox',
colProps: {
span: 2,
},
renderComponentContent: '储备项目',
},
{
field: 'ImplementingEntity',
label: '',
component: 'Select',
componentProps: {
placeholder: '实施主体',
options: [
{
label: '了解产品',
value: '了解产品',
key: '了解产品',
},
{
label: '正在跟进',
value: '正在跟进',
key: '正在跟进',
},
{
label: '正在试用',
value: '正在试用',
key: '正在试用',
},
{
label: '准备购买',
value: '准备购买',
key: '准备购买',
},
{
label: '准备付款',
value: '准备付款',
key: '准备付款',
},
{
label: '已经购买',
value: '已经购买',
key: '已经购买',
},
{
label: '暂时闲置',
value: '暂时闲置',
key: '暂时闲置',
},
],
},
colProps: { span: 3 },
},
{
field: 'projectType',
label: '',
component: 'Select',
componentProps: {
placeholder: '项目类型',
options: [
{
label: '公共设施配套类',
value: '公共设施配套类',
key: '公共设施配套类',
},
{
label: '基础设施类',
value: '基础设施类',
key: '基础设施类',
},
{
label: '产业载体类',
value: '产业载体类',
key: '产业载体类',
},
{
label: '房地产类',
value: '房地产类',
key: '房地产类',
},
{
label: '存量盘活类',
value: '存量盘活类',
key: '存量盘活类',
},
{
label: '其他类(零星工程)',
value: '其他类(零星工程)',
key: '其他类(零星工程)',
},
],
},
colProps: { span: 5 },
colProps: { span: 3 },
},
];
......@@ -273,57 +397,71 @@ export const tabList = [
{
key: '1',
tab: '投资计划',
component: 'InvestmentPlan',
},
{
key: '2',
tab: '计划完成情况',
component: 'InvestmentPlan',
},
{
key: '3',
tab: '年度资金计划',
component: 'InvestmentPlan',
},
{
key: '4',
tab: '月度资金计划',
component: 'InvestmentPlan',
},
{
key: '5',
tab: '已竣工验收项目陈欠资金计划',
component: 'InvestmentPlan',
},
{
key: '6',
tab: '招标计划',
component: 'InvestmentPlan',
},
{
key: '7',
tab: '招标管理',
component: 'InvestmentPlan',
},
{
key: '8',
tab: '结算管理',
component: 'InvestmentPlan',
},
{
key: '9',
tab: '变更签证管理',
component: 'InvestmentPlan',
},
{
key: '10',
tab: '安全隐患管理',
component: 'InvestmentPlan',
},
{
key: '11',
tab: '安全教育培训',
component: 'InvestmentPlan',
},
{
key: '12',
tab: '合同管理',
component: 'InvestmentPlan',
},
{
key: '13',
tab: '附件记录',
component: 'InvestmentPlan',
},
{
key: '14',
tab: '更新记录',
component: 'InvestmentPlan',
},
];
......@@ -7,9 +7,7 @@
width="700px"
@ok="handleSubmit"
>
<BasicForm ref="formElRef" @register="registerForm">
<!-- <template #menu="{ model, field }"> </template> -->
</BasicForm>
<BasicForm ref="formElRef" @register="registerForm"> </BasicForm>
</BasicDrawer>
</template>
<script lang="ts" setup>
......@@ -18,6 +16,7 @@
import { formSchema } from './project.data';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
import { addItem, updateItem } from '@/api/project/project';
import { isArray } from '@/utils/is';
const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true);
const detailId = ref(0);
......@@ -49,6 +48,7 @@
}
if (unref(isUpdate)) {
data.record.logo = [data.record.logo];
setFieldsValue({
...data.record,
});
......@@ -63,8 +63,11 @@
if (isUpdate.value) {
values.id = detailId.value;
}
// TODO custom api
console.log(values);
let logo = unref(values.logo);
if (isArray(logo)) {
let img: string = logo[0];
values.logo = img;
}
let res = isUpdate.value ? await updateItem(values) : await addItem(values);
console.log(res);
......
<template>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" preIcon="mdi:plus" @click="handleCreate"> 新增项目 </a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'projectName'">
<Tag color="warning" v-if="record.isReserveProject == 'true'"> 储备 </Tag>
{{ record.projectName }}
</template>
<template v-if="column.key === 'constructionMode'">
<Tag color="processing">
{{ record.constructionMode }}
</Tag>
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '编辑',
onClick: handleEdit.bind(null, record, false),
},
{
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</template>
</template>
</BasicTable>
<projectDrawer @register="registerDrawer" @success="handleSuccess" />
</template>
<script lang="ts" setup>
import { Tag } from 'ant-design-vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage, deleteItem, getItem } from '@/api/project/project';
import { columns, searchFormSchema } from '../project.data';
import { Row, Col } from 'ant-design-vue';
import projectDrawer from '../projectDrawer.vue';
import { useDrawer } from '@/components/Drawer';
import { useRouter } from 'vue-router';
const { push } = useRouter();
const [registerDrawer, { openDrawer }] = useDrawer();
const prefixCls = 'list-basic';
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleCreate() {
openDrawer(true, {
isUpdate: false,
});
}
function handleDetail(record: any) {
push({
path: '/project/detail',
query: {
id: record.id,
},
});
}
async function handleEdit(record: Recordable, disabled: boolean) {
// let res = await getItem({ id: record.id });
// console.log(res);
// res[0]
openDrawer(true, {
record,
isUpdate: true,
disabled,
});
}
function handleDelete(record: Recordable) {
deleteItem({ id: record.id });
reload();
}
function handleSuccess() {
reload();
}
</script>
<style lang="less" scoped>
.list-basic {
&__top {
height: 150px;
padding: 35px;
background-color: @component-background;
text-align: center;
position: relative;
margin: 16px;
margin-bottom: 0;
&-img {
width: 58px;
height: 54px;
position: absolute;
left: 10%;
}
&-col {
// &:not(:last-child) {
// border-right: 1px dashed @border-color-base;
// }
.title {
margin-bottom: 12px;
color: #5d5d5d;
font-size: 18px;
text-align: center;
line-height: 22px;
}
.content {
display: flex;
align-items: flex-end;
width: 100%;
justify-content: center;
}
p {
margin: 0;
color: @text-color-base;
font-size: 40px;
color: #225bde;
font-family: DINAlternate;
font-weight: 700;
margin-bottom: -7px;
}
span {
text-align: center;
display: flex;
align-items: flex-end;
justify-content: center;
color: #878787;
}
}
}
&__list {
&-header {
color: #333;
font-weight: bold;
}
}
&__content {
background-color: @component-background;
.list {
position: relative;
}
.icon {
font-size: 40px !important;
}
.extra {
position: absolute;
top: 20px;
right: 15px;
color: @primary-color;
font-weight: normal;
cursor: pointer;
}
.description {
display: inline-block;
width: 40%;
}
.info {
display: inline-block;
width: 30%;
text-align: center;
div {
display: inline-block;
padding: 0 20px;
span {
display: block;
}
}
}
.progress {
display: inline-block;
width: 15%;
vertical-align: top;
}
}
}
</style>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { columns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { inject } from 'vue';
import { getListByPage } from '@/api/project/project';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
</script>
import { FormSchema, BasicColumn } from '@/components/Table';
export const searchFormSchema: FormSchema[] = [
{
field: 'year',
label: '',
component: 'DatePicker',
componentProps: {
placeholder: '选择填报周期',
valueFormat: 'YYYY-MM-dd',
format: 'YYYY-MM-dd',
style: {
width: '100%',
},
},
colProps: { span: 5 },
},
];
export const columns: BasicColumn[] = [
{
title: '',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '填报周期',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '项目名称',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '建设地点',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '项目概况',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '建设规模',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '建设目的及项目功能',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '建设模式',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '资金来源',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '项目类型',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '总投资',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年之前总投资额(不含该年)',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年计划投资额',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年实际完成投资额',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年计划资金',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年实付资金',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年计建设性质划资金',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '开工竣工时间',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '该年底形象进度',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '实施主体',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '项目主管部门',
dataIndex: 'serialNumber',
width: 180,
},
{
title: '备注',
dataIndex: 'serialNumber',
width: 180,
},
];
......@@ -8,32 +8,32 @@ export const columns: BasicColumn[] = [
{
title: '填报周期',
dataIndex: 'yearQuarter',
width: 200,
width: 140,
},
{
title: '项目数量',
dataIndex: 'uniqueProjectCount',
width: 180,
width: 140,
},
{
title: '公司名称',
dataIndex: 'companyName',
width: 180,
width: 140,
},
{
title: '最新更新人',
dataIndex: 'updateBy',
width: 180,
width: 140,
},
{
title: '最新更新时间',
dataIndex: 'updateTime',
width: 180,
width: 140,
},
{
title: '审核状态',
dataIndex: 'status',
width: 180,
dataIndex: 'statusResult',
width: 140,
},
{
title: '审核人',
......@@ -43,7 +43,7 @@ export const columns: BasicColumn[] = [
{
title: '审核时间',
dataIndex: 'auditTime',
width: 180,
width: 140,
},
];
......@@ -94,52 +94,285 @@ export const formSchema: FormSchema[] = [
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 },
},
{
field: 'isReserveProject',
label: '是否为储备项目',
component: 'RadioButtonGroup',
defaultValue: '0',
//bidding_method
field: 'biddingMethod',
label: '招标方式',
required: true,
component: 'Select',
componentProps: {
options: [
{ label: '是', value: '1' },
{ label: '否', value: '0' },
{
label: '建委招标',
value: '1',
},
{
label: '平台招标',
value: '2',
},
{
label: '邀标比选',
value: '3',
},
{
label: '直接委托',
value: '4',
},
{
label: '评分定离',
value: '5',
}
],
},
colProps: { span: 7, offset: 1 },
},
// {
// field: 'status',
// label: '状态',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// },
{
label: '建设模式',
field: 'constructionMode',
component: 'InputTextArea',
{
//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 },
},
{
//contract_name
field: 'contractName',
label: ' 合同名称',
required: true,
component: 'Input',
// componentProps: {
// readonly: true,
// },
colProps: { span: 7, offset: 1 },
},
{
label: '项目类型',
field: 'projectType',
//first_party_name
field: 'firstPartyName',
label: '甲方单位名称',
required: true,
component: 'Input',
colProps: { span: 7, offset: 1 },
},
{
label: '项目概况',
field: 'projectOverview',
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_signing_time
field: 'contractSigningTime',
label: '合同签订日期',
required: true,
component: 'DatePicker',
colProps: { span: 7, offset: 1 },
componentProps: {
valueFormat: 'YYYY-MM-DD',
style:{
width:"100%"
}
},
},
{
field: 'closingTime',
//closing_time
label: '竣工时间',
required: true,
component: 'DatePicker',
colProps: { span: 7, offset: 1 },
componentProps: {
valueFormat: 'YYYY-MM-DD',
style:{
width:"100%"
}
},
},
{
//closing_time_datetime
field: 'closingTimeDatetime',
label: '结算完成时间',
required: true,
component: 'DatePicker',
colProps: { span: 7, offset: 1 },
componentProps: {
valueFormat: 'YYYY-MM-DD',
style:{
width:"100%"
}
},
},
{
//contract_amount
field: 'contractAmount',
label: '合同金额',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//submitted_for_settlement
field: 'submittedForSettlement',
label: '签证变更金额:',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//super_contract_scale
field: 'superContractScale',
label: '结算报送金额',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//sum_of_money
field: 'sumOfMoney',
label: '结算审定金额',
required: true,
component: 'InputNumber',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//proportion_contract_amount
field: 'proportionContractAmount',
label: '结算审核金额超合同额比例',
labelWidth:"300px",
required: true,
component: 'Input',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
field: 'investmentAmount',
label: '结算审核金额超合同额比例',
labelWidth:"300px",
required: true,
show:false,
component: 'Input',
componentProps: {
addonAfter: '元',
},
colProps: { span: 7, offset: 1 },
},
{
//meeting_minutes
label: '会议纪要',
field: 'meetingMinutes',
required: true,
component: 'InputTextArea',
componentProps: {
maxlength: 100,
showCount: true,
},
colProps: { span: 7, offset: 1 },
},
{
label: '建设目的及项目功能',
field: 'constructionPurpose',
//remark
label: '备注',
field: 'remark',
required: true,
component: 'InputTextArea',
componentProps: {
maxlength: 100,
showCount: true,
},
colProps: { span: 7, offset: 1 },
},
];
......@@ -5,23 +5,36 @@
<a-button type="primary" @click="addSettlement"> 新建结算管理 </a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'status'">
<Tag color="warning" v-if="record.status == '0'"> 未审核 </Tag>
<template v-if="column.key === 'statusResult'">
<Tag color="warning" v-if="record.statusResult == '0'"> 未审核</Tag>
</template>
<template v-if="column.key === 'status'">
<Tag color="warning" v-if="record.status == '1'"> 已审核 </Tag>
<template v-if="column.key === 'statusResult'">
<Tag color="success" v-if="record.statusResult == '1'"> 已审核</Tag>
</template>
<template v-if="column.key === 'action'">
<TableAction
<TableAction v-if="record.statusResult == '0'"
:actions="[
{
icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record),
{
label: '详情',
onClick: handleEdit.bind(null, record,false),
},
{
label: '审核',
color: 'success',
popConfirm: {
title: '是否确认审核',
placement: 'left',
confirm: examine.bind(null, record,true),
}
},
{
label: '修改',
onClick: handleEdit.bind(null, record,true),
},
{
icon: 'ant-design:delete-outlined',
label: '删除',
color: 'error',
popConfirm: {
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
......@@ -29,6 +42,14 @@
},
]"
/>
<TableAction v-else
:actions="[
{
label: '查看详情',
onClick: handleEdit.bind(null, record,false),
}
]"
/>
</template>
</template>
</BasicTable>
......@@ -40,13 +61,11 @@ import { BasicTable, useTable, TableAction } from '@/components/Table';
import yearModal from '@/components/yearModal.vue';
import { useModal } from '@/components/Modal';
const [register, { openModal: openModal }] = useModal();
import { getSettlementManageList } from '@/api/project/settlementManage';
// import { getList } from '@/api/project/statement';
import {getSettlementManageList, auditItem,deleteList} from '@/api/project/settlementManage';
import { columns, searchFormSchema } from './data';
import { useDrawer } from '@/components/Drawer';
import {router} from "@/router";
import {Tag} from "ant-design-vue";
defineOptions({ name: 'SettlementManagement' });
const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload }] = useTable({
......@@ -61,7 +80,7 @@ const [registerTable, { reload }] = useTable({
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 80,
width: 180,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
......@@ -70,21 +89,38 @@ const [registerTable, { reload }] = useTable({
});
function handleEdit(record: Recordable) {
openDrawer(true, {
record,
isUpdate: true,
function handleEdit(record: Recordable, disabled: boolean) {
router.push({
path: '/settlementManagement/edit',
query: {
id: record.id,
isUpdate: disabled,
}
});
}
const addSettlement = () => {
openModal(true, {
data: ['year', 'quarter'],
});
};
function handleDelete(record: Recordable) {
//删除操作
async function handleDelete(record: Recordable) {
console.log(record);
let id=record.id
await deleteList({id})
reload();
}
//examine 审核
async function examine(record: Recordable, disabled: boolean) {
const id = record.id
const res = await auditItem({id})
console.log(res)
reload();
}
function handleSuccess() {
reload();
}
......@@ -94,6 +130,6 @@ const handleNew = (e) => {
router.push({
path: '/settlementManagement/edit',
query: e,
});;
});
};
</script>
<template>
<div class="m-4">
<PageCard >
<BasicForm
:labelWidth="100"
:schemas="schemas"
:actionColOptions="{ span: 24 }"
@submit="handleSubmit"
/>
</PageCard>
<div class="create-title">
<AButton>
<template>
<Icon icon="total-sales"></Icon>
</template>
添加合同</AButton>
<PageWrapper :title="getTitle" :contentBackground="false" headerSticky>
<template #extra>
<a-button type="primary" danger> 删除 </a-button>
<a-button type="primary" @click="handleSubmit"> 提交 </a-button>
</template>
</div>
</div>
<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]" />
</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>
<projectDrawer @register="registerDrawer" @success="handleSuccess" />
<projectlibraryModel @register="register" @close="handleNewData" />
</PageWrapper>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { BasicForm, FormSchema } from '/@/components/Form';
import { CollapseContainer } from '/@/components/Container';
import { useMessage } from '/@/hooks/web/useMessage';
import PageCard from "@/components/Page/src/PageCard.vue";
import CardList from "@/components/CardList/src/CardList.vue";
import Icon from "@/components/Icon/Icon.vue";
const schemas: FormSchema[] = [
{
field: 'field',
component: 'Input',
label: '字段1',
colProps: {
span: 10,
},
defaultValue: '1',
componentProps: {
placeholder: '自定义placeholder',
onChange: (e) => {
console.log(e);
},
},
},
];
<script lang="ts" setup>
//标题
import {router} from "@/router";
const getTitle = ref('');
import { unref, computed, onMounted, ref, reactive } from 'vue';
import projectlibraryModel from '@/components/ContractModel/Contract.vue';
import { useRoute } from 'vue-router';
import { PageWrapper } from '@/components/Page';
import PageCard from '@/components/Page/src/PageCard.vue';
import projectDrawer from '@/views/project/projectDrawer.vue';
import { BasicForm, useForm, FormProps, UseFormReturnType } from '@/components/Form';
import { formSchema } from './data';
import { deepMerge } from '@/utils';
import { useMessage } from '@/hooks/web/useMessage';
import { useDrawer } from '@/components/Drawer';
import {addItem,getItem,updateItem,deleteOne} from "@/api/project/settlementManage"
import { EditModel } from '@/api/project/model/settlementManageModel';
import { nextTick } from 'vue';
const [registerDrawer, { openDrawer }] = useDrawer();
import { useModal } from '@/components/Modal';
const [register, { openModal: openModal }] = useModal();
const { createMessage } = useMessage();
// const getTitle = computed(() => (!unref(isUpdate) ? '新增招标管理' : '编辑招标管理'));
const isUpdate = ref(false);
const loading = ref(false);
const formData = ref<EditModel>({management: [], proClosingQuarter: undefined});
export default defineComponent({
components: {Icon, CardList, PageCard, BasicForm, CollapseContainer },
setup() {
const { createMessage } = useMessage();
return {
schemas,
handleSubmit: (values: any) => {
createMessage.success('click search,values:' + JSON.stringify(values));
},
};
},
//页面传递过来了的id
const routeId= ref(null);
onMounted(async () => {
const route = useRoute();
const id = route.query.id; // 获取名为id的参数
routeId.value=id
if (!id) {
formData.value.management=[]
formData.value.proClosingQuarter={}
formData.value.proClosingQuarter.companyName="sdfh"
formData.value.proClosingQuarter.status="0"
formData.value.proClosingQuarter.quarter= route.query.quarter
formData.value.proClosingQuarter.givenYear= route.query.year
formData.value.proClosingQuarter.yearQuarter= route.query.year+"年第"+route.query.quarter+"季度"
isUpdate.value = false;
getTitle.value = '新增招标管理';
console.log(formData, 'formData');
} else {
//判断是查看还是编辑
isUpdate.value = route.query.isUpdate
if(isUpdate){
getTitle.value="修改结算管理"
}
else {
getTitle.value="查看结算管理"
}
//根据id查询详情
let res = await getItem({ id })
console.log(res)
//构建数据
formData.value.management=[];
for (let i = 0; i < res.length; i++) {
const source = res[i];
const item = {
name: '序号' + (i + 1),
forceRender: true,
Form: useForm(Object.assign({ schemas: formSchema }, baseFormConfig) as FormProps),
};
const { setFieldsValue } = item.Form[1];
tabsFormSchema.push(item);
formData.value.management.push({
//合同id
id: source.id,
//合同id
// contractId: source.id,
//项目id
// projectId: source.projectId,
// proClosingQuarterId:source.proClosingQuarterId
});
console.log(formData.value.management,"eeee")
nextTick(() => {
setFieldsValue({
...source,
});
});
}
// console.log(res);
}
});
</script>
<style scoped >
.create-title{
width: 100%;
height: 20%;
background-color: #00feff;
type TabsFormType = {
name: string;
forceRender?: boolean;
Form: UseFormReturnType;
};
const baseFormConfig: Partial<FormProps> = {
showActionButtonGroup: false,
labelWidth: 100,
layout: 'vertical',
};
const tabsFormSchema = reactive<TabsFormType[]>([]);
async function add() {
openModal();
}
async function handleNewData(info: any) {
if (info) {
info.map((i) => {
handleNew(i);
});
}
}
/***
*
*/
async function handleNew(info: any) {
const item = {
name: '序号' + (tabsFormSchema.length + 1),
forceRender: true,
Form: useForm(Object.assign({ schemas: formSchema }, baseFormConfig) as FormProps),
};
const { setFieldsValue } = item.Form[1];
tabsFormSchema.push(item);
formData.value.management.push({
//合同id
contractId: info.id,
//项目id
projectId: info.projectId,
proClosingQuarterId: routeId.value
});
nextTick(() => {
setFieldsValue({
projectName: info.projectName,
fundingSource: info.fundingSource,
});
});
}
function deleteItem(index: any) {
tabsFormSchema.splice(index, 1);
if (formData.value && formData.value.management && formData.value.management[index]) {
console.log(formData.value.management[index].id);
deleteOne(formData.value.management[index].id);
} else {
console.log('Invalid index or data not found');
}
// await deleteItem(formData.value.management[index].id)
formData.value.management.splice(index, 1);
}
async function handleAdd() {
openDrawer(true, {
isUpdate: false,
});
}
async function handleSuccess(params: any) {
console.log(params);
handleNew(params);
}
async function handleSubmit() {
loading.value = true;
try {
for (let i = 0; i < tabsFormSchema.length; i++) {
let item = tabsFormSchema[i];
const { validate, getFieldsValue } = item.Form[1];
// await validate();
let res = getFieldsValue();
formData.value.management[i] = deepMerge(formData.value.management[i], res);
}
let res;
if(isUpdate.value){
console.log(formData.value,"数据查看")
res= await updateItem(unref(formData))
}
else {
res = await addItem(unref(formData));
}
// loading.value = false;
console.log(res);
createMessage.success('提交成功!');
//返回上一页
router.go(-1)
</style>
\ No newline at end of file
} catch (e) {
// 验证失败或出错,切换到对应标签页
console.log(e);
} finally {
loading.value = false;
}
}
</script>
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