Commit 1ed821ba authored by 罗林杰's avatar 罗林杰

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

parents 56ab86db 1a23b014
...@@ -16,6 +16,8 @@ enum Api { ...@@ -16,6 +16,8 @@ enum Api {
selectCount = '/pro/tenderManager/selectCount', selectCount = '/pro/tenderManager/selectCount',
Itemdelete = '/pro/tenderManager/details/del', Itemdelete = '/pro/tenderManager/details/del',
audit = '/pro/tenderManager/examine', audit = '/pro/tenderManager/examine',
GetListAll = '/pro/tenderManager/selectAll',
ExportCount = '/pro/export/tendMangeStatistic'
} }
export const getListByPage = (params?: ProjectPageParams) => export const getListByPage = (params?: ProjectPageParams) =>
defHttp.post<ListGetResultModel>({ url: Api.GetList, data: params }); defHttp.post<ListGetResultModel>({ url: Api.GetList, data: params });
...@@ -59,3 +61,16 @@ export const selectCount = (params?: any) => ...@@ -59,3 +61,16 @@ export const selectCount = (params?: any) =>
url: Api.selectCount, url: Api.selectCount,
data: params, data: params,
}); });
export const getListAll = (params?: any) =>
defHttp.post<ProjectModel>({ url: Api.GetListAll, data: params });
export const exportStatisticList = (params?: any) =>
defHttp.post<any>(
{
url: Api.ExportCount,
data: params,
responseType: 'blob',
},
{ errorMessageMode: 'none', isTransformResponse: false },
);
...@@ -35,6 +35,16 @@ const biddingPlan: AppRouteModule = { ...@@ -35,6 +35,16 @@ const biddingPlan: AppRouteModule = {
orderNo: 3, orderNo: 3,
}, },
}, },
{
path: 'statisticsBidding',
name: 'statisticsBidding',
component: () => import('@/views/biddingManagement/statisticsBidding.vue'),
meta: {
auth: '/www/dist/index.html#/biddingManagement/index',
title: '招标情况统计',
orderNo: 3,
},
},
{ {
path: 'situationEdit', path: 'situationEdit',
name: 'situationEdit', name: 'situationEdit',
......
...@@ -81,34 +81,6 @@ export const searchFormSchema: FormSchema[] = [ ...@@ -81,34 +81,6 @@ export const searchFormSchema: FormSchema[] = [
}, },
colProps: { span: 4 }, colProps: { span: 4 },
}, },
{
field: 'companyName',
label: '',
component: 'Select',
componentProps: {
placeholder: '公司名称',
options: [
{
label: '公司名称',
value: '公司名称',
key: '公司名称',
},
],
},
colProps: { span: 4 },
},
// {
// field: 'status',
// label: '状态',
// component: 'Select',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// colProps: { span: 8 },
// },
]; ];
export const formSchema: FormSchema[] = [ export const formSchema: FormSchema[] = [
...@@ -119,6 +91,7 @@ export const formSchema: FormSchema[] = [ ...@@ -119,6 +91,7 @@ export const formSchema: FormSchema[] = [
component: 'Input', component: 'Input',
componentProps: { componentProps: {
readonly: true, readonly: true,
disabled: true,
}, },
colProps: { span: 7, offset: 1 }, colProps: { span: 7, offset: 1 },
}, },
...@@ -130,6 +103,7 @@ export const formSchema: FormSchema[] = [ ...@@ -130,6 +103,7 @@ export const formSchema: FormSchema[] = [
component: 'Input', component: 'Input',
componentProps: { componentProps: {
readonly: true, readonly: true,
disabled: true,
}, },
colProps: { span: 7, offset: 1 }, colProps: { span: 7, offset: 1 },
}, },
...@@ -211,6 +185,7 @@ export const formSchema: FormSchema[] = [ ...@@ -211,6 +185,7 @@ export const formSchema: FormSchema[] = [
colProps: { span: 7, offset: 1 }, colProps: { span: 7, offset: 1 },
componentProps: { componentProps: {
readonly: true, readonly: true,
disabled: true,
}, },
}, },
{ {
......
...@@ -8,26 +8,51 @@ ...@@ -8,26 +8,51 @@
> >
<template #extra> <template #extra>
<!-- <a-button type="primary" danger> 删除 </a-button>--> <!-- <a-button type="primary" danger> 删除 </a-button>-->
<a-button type="primary" v-if="!disabled" @click="handleSubmit"> 提交 </a-button> <a-button type="primary" v-if="!disabled" :disabled="loadingRef" @click="handleSubmit('0')"> 暂存 </a-button>
<a-button type="primary" v-if="!disabled" @click="handleSubmit('1')"> 提交 </a-button>
<a-button type="primary" @click="history" v-if="historyData">历史记录 </a-button> <a-button type="primary" @click="history" v-if="historyData">历史记录 </a-button>
<a-button type="default" @click="router.back()"> 返回 </a-button> <a-button type="default" @click="router.back()"> 返回 </a-button>
</template> </template>
<template v-for="(item, index) in tabsFormSchema"> <CollapseContainer v-for="(item, index) in tabsFormSchema" :key="index">
<PageCard v-if="item.show" :key="index" :title="item.name"> <template #title>
<template #right> <span class="projectName">{{ item.name }}</span>
<a-button </template>
<template #action>
<a-button
v-if="!disabled" v-if="!disabled"
type="text" type="text"
preIcon="ant-design:delete-outlined" preIcon="ant-design:delete-outlined"
danger danger
@click="deleteItem(index)" @click="deleteItemPro(index)"
/> >删除项目</a-button
>
</template>
<BasicForm :loading="loading" @register="item.Form[0]" />
<!-- 左上角为项目名 -->
<CollapseContainer
v-for="(content, key) in item.list"
:key="key"
class="subCard"
:title="content.name"
>
<template #title>
<span class="contractName">{{ content.name }}</span>
</template> </template>
<BasicForm :loading="loading" @register="item.Form[0]" /> <!-- 右上角的删除按钮 -->
</PageCard> <template #action>
</template> <a-button
v-if="!disabled"
type="text"
preIcon="ant-design:delete-outlined"
danger
@click="deleteItemCon(index, key)"
>删除合同</a-button
>
</template>
<BasicForm :loading="loading" @register="content.form" />
</CollapseContainer>
</CollapseContainer>
<a-button v-if="!disabled" type="dashed" @click="add" preIcon="ei:plus"> <a-button v-if="!disabled" type="dashed" @click="add" preIcon="ei:plus">
从项目库导入 从项目库导入
</a-button> </a-button>
...@@ -59,6 +84,8 @@ ...@@ -59,6 +84,8 @@
//历史记录 //历史记录
import Operations from '@/components/Operations/Operations.vue'; import Operations from '@/components/Operations/Operations.vue';
import { addItem, updateItem, getItem } from '@/api/project/biddingManagement'; import { addItem, updateItem, getItem } from '@/api/project/biddingManagement';
import CollapseContainer from '@/components/Container/src/collapse/CollapseContainer.vue';
//历史记录是否可查 //历史记录是否可查
const historyData = ref(true); const historyData = ref(true);
//页面传递过来了的id //页面传递过来了的id
...@@ -90,7 +117,7 @@ ...@@ -90,7 +117,7 @@
} else { } else {
isUpdate.value = true; isUpdate.value = true;
tenderId.value = id; tenderId.value = id;
formData.value.tenderld = id; formData.value.tenderId = id;
disabled.value = route.query.disabled == '0' ? false : true; disabled.value = route.query.disabled == '0' ? false : true;
if (disabled.value) { if (disabled.value) {
getTitle.value = '查看招标管理'; getTitle.value = '查看招标管理';
...@@ -102,7 +129,7 @@ ...@@ -102,7 +129,7 @@
for (let i = 0; i < res.length; i++) { for (let i = 0; i < res.length; i++) {
const source = res[i]; const source = res[i];
const item = { const item = {
name: '序号' + (i + 1), name: '项目:' + source.projectName,
show: true, show: true,
forceRender: true, forceRender: true,
Form: useForm( Form: useForm(
...@@ -153,12 +180,21 @@ ...@@ -153,12 +180,21 @@
}); });
} }
} }
/*删除项目表单*/
async function deleteItemPro(index: any) {
console.log(formData.value);
formData.value.tenderPlanPro.splice(index, 1);
tabsFormSchema.splice(index, 1);
loadingRef.value = false;
console.log(formData.value);
// }
}
/*** /***
* *
*/ */
async function handleNew(info: any) { async function handleNew(info: any) {
const item = { const item = {
name: '序号' + (tabsFormSchema.length + 1), name: '项目:'+info.projectName,
forceRender: true, forceRender: true,
show: true, show: true,
Form: useForm(Object.assign({ schemas: formSchema }, baseFormConfig) as FormProps), Form: useForm(Object.assign({ schemas: formSchema }, baseFormConfig) as FormProps),
...@@ -179,20 +215,7 @@ ...@@ -179,20 +215,7 @@
} }
async function deleteItem(index: any) { async function deleteItem(index: any) {
formData.value.tenderPlanPro.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;
// tabsFormSchema[index].show = false;
tabsFormSchema.splice(index, 1); tabsFormSchema.splice(index, 1);
// loadingRef.value = false;
// }
} }
async function handleAdd() { async function handleAdd() {
...@@ -204,32 +227,108 @@ ...@@ -204,32 +227,108 @@
console.log(params); console.log(params);
handleNew(params); handleNew(params);
} }
async function handleSubmit() { async function handleSubmit(isSubmit) {
for(let i = 0; i < tabsFormSchema.length; i++){
let formSchema = tabsFormSchema[i].Form[1]
const { updateSchema } = formSchema
await nextTick(() => {
if (isSubmit == '0') {
updateSchema([
{field: 'projectName', required: false},
{field: 'fundingSource', required: false},
{field: 'investmentAmount', required: false},
{field: 'field11', required: false},
{field: 'biddingType', required: false},
{field: 'tenderContent', required: false},
{field: 'controlPrice', required: false},
{field: 'constructionMode', required: false},
{field: 'procurementMethod', required: false},
{field: 'evaluationMethod', required: false},
{field: 'field11', required: false},
{field: 'completionStatus', required: false},
{field: 'openingTime', required: false},
{field: 'winningBidder', required: false},
{field: 'winningAmount', required: false},
{field: 'winningPeriod', required: false},
{field: 'signingDate', required: false},
{field: 'meetingMinute', required: false},
{field: 'releaseChannels', required: false},
{field: 'detailedInformation', required: false},
{field: 'publishWebsite', required: false},
{field: 'publicityWebsite', required: false},
{field: 'isReportingSituation', required: false},
{field: 'handSituation', required: false},
{
field: 'remark', dynamicRules: ({values}) => {
return [{required: false,}]
},
},
])
} else {
updateSchema([
{field: 'projectName', required: true},
{field: 'fundingSource', required: true},
{field: 'investmentAmount', required: true},
{field: 'field11', required: true},
{field: 'biddingType', required: true},
{field: 'tenderContent', required: true},
{field: 'controlPrice', required: true},
{field: 'constructionMode', required: true},
{field: 'procurementMethod', required: true},
{field: 'evaluationMethod', required: true},
{field: 'field11', required: true},
{field: 'completionStatus', required: true},
{field: 'openingTime', required: true},
{field: 'winningBidder', required: true},
{field: 'winningAmount', required: true},
{field: 'winningPeriod', required: true},
{field: 'signingDate', required: true},
{field: 'meetingMinute', required: true},
{field: 'releaseChannels', required: true},
{field: 'detailedInformation', required: true},
{field: 'publishWebsite', required: true},
{field: 'publicityWebsite', required: true},
{field: 'isReportingSituation', required: true},
{field: 'handSituation', required: true},
{
field: 'remark', dynamicRules: ({values}) => {
return values.fundGap ? [{required: true, message: '说明必填'}] : [];
},
}
])
}
})
}
loadingRef.value = true; loadingRef.value = true;
console.log('333333')
try { try {
for (let i = 0; i < tabsFormSchema.length; i++) { for (let i = 0; i < tabsFormSchema.length; i++) {
console.log('4444')
let item = tabsFormSchema[i]; let item = tabsFormSchema[i];
if (item.show) { if (item.show) {
const { validate, getFieldsValue } = item.Form[1]; const { validate, getFieldsValue } = item.Form[1];
await validate(); await validate();
let res = getFieldsValue(); let res = getFieldsValue();
formData.value.tenderPlanPro[i] = deepMerge(formData.value.tenderPlanPro[i], res); formData.value.tenderPlanPro[i] = deepMerge(formData.value.tenderPlanPro[i], res);
console.log(formData.value.tenderPlanPro);
} }
} }
formData.value.proNumber = formData.value.tenderPlanPro.Length;
formData.value.proNumber = formData.value.tenderPlanPro.Length;
formData.value.isSubmit = isSubmit;
console.log('formData.value:',formData.value)
let res = isUpdate.value ? await updateItem(unref(formData)) : await addItem(unref(formData)); let res = isUpdate.value ? await updateItem(unref(formData)) : await addItem(unref(formData));
loadingRef.value = true; loadingRef.value = true;
addItemData.operateType = operateType.update; addItemData.operateType = operateType.update;
addItemData.businessId = routeId.value; addItemData.businessId = routeId.value;
addItemData.businessType = '招标管理'; addItemData.businessType = '招标管理';
const showDatem = await addItemApi(addItemData); const showDatem = await addItemApi(addItemData);
console.log(showDatem, '记录添加成功'); if (isSubmit === '0'){
console.log(res); createMessage.success('暂存成功!');
createMessage.success('提交成功!'); }else{
router.back(); createMessage.success('提交成功!');
}
// router.back();
} catch (e) { } catch (e) {
// 验证失败或出错,切换到对应标签页 // 验证失败或出错,切换到对应标签页
console.log(e); console.log(e);
...@@ -245,3 +344,18 @@ ...@@ -245,3 +344,18 @@
console.log('历史记录'); console.log('历史记录');
} }
</script> </script>
<style scoped>
.subCard {
border: 1px solid #e8eaec;
}
.projectName {
border-left: blue solid 6px;
padding-left: 10px;
font-weight: bold;
}
.contractName {
border-left: red solid 6px;
padding-left: 10px;
font-weight: bold;
}
</style>
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
confirm: examine.bind(null, record, true), confirm: examine.bind(null, record, true),
}, },
ifShow: (_action) => { ifShow: (_action) => {
return record.reviewStatus == '0'||record.reviewStatus == null; return (record.reviewStatus == '0'||record.reviewStatus == null) && record.isSubmit == '1' && deptId !== '100';
}, },
}, },
]" ]"
...@@ -76,9 +76,11 @@ ...@@ -76,9 +76,11 @@
import yearModal from '@/components/yearModal.vue'; import yearModal from '@/components/yearModal.vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import {onMounted} from "vue"; import {onMounted, ref} from "vue";
import {getDepartmentList} from "@/api/project/settlementManage"; import {getDepartmentList} from "@/api/project/settlementManage";
import { useUserStore } from '@/store/modules/user';
const deptId = ref('');
const { push } = useRouter(); const { push } = useRouter();
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const { error } = createMessage; const { error } = createMessage;
...@@ -106,6 +108,8 @@ ...@@ -106,6 +108,8 @@
const [register, { openModal: openModal, closeModal: closeModal }] = useModal(); const [register, { openModal: openModal, closeModal: closeModal }] = useModal();
onMounted(async () => { onMounted(async () => {
deptId.value = useUserStore().userInfo.deptId;
// console.log('deptId.value:',deptId.value)
const data = await getDepartmentList(); const data = await getDepartmentList();
searchFormSchema[2].componentProps.options = data; searchFormSchema[2].componentProps.options = data;
}); });
......
This diff is collapsed.
...@@ -348,69 +348,74 @@ ...@@ -348,69 +348,74 @@
} }
/*提交表单*/ /*提交表单*/
async function handleSubmit(isSubmit) { async function handleSubmit(isSubmit) {
for(let i = 0; i < tabsFormSchema.length; i++){ for (let i = 0; i < tabsFormSchema.length; i++) {
let formProjectSchema = tabsFormSchema[i].Form[1] let formProjectSchema = tabsFormSchema[i].Form[1];
const { updateSchema } = formProjectSchema const { updateSchema } = formProjectSchema;
if(isSubmit == '0'){ if (isSubmit == '0') {
updateSchema([ updateSchema([
{field: 'projectName' ,required: false}, { field: 'projectName', required: false },
{field: 'sourceType' ,required: false}, { field: 'sourceType', required: false },
]) ]);
}
for (let j = 0; j < tabsFormSchema[i].list.length; j++) {
let formSchema = tabsFormSchema[i].list[j].form[1];
const { updateSchema } = formSchema;
console.log(subFormSchema);
nextTick(() => {
if (isSubmit == '0') {
updateSchema([
{ field: 'contrcatName', required: false },
{ field: 'collectingUnit', required: false },
{ field: 'contractAmount', required: false },
{ field: 'paymentLevel', required: false },
{ field: 'completionValueActual', required: false },
{ field: 'accumulateCompletionValue', required: false },
{ field: 'planCompletionValue', required: false },
{ field: 'lastMonthPlan', required: false },
{ field: 'lastMonthActual', required: false },
{ field: 'accumulatePayment', required: false },
{ field: 'thisPlanNumber', required: false },
{ field: 'specialFund', required: false },
{ field: 'governmentFund', required: false },
{ field: 'banFinancing', required: false },
{ field: 'ownFund', required: false },
{ field: 'fundGap', required: false },
{
field: 'remark',
dynamicRules: ({ values }) => {
return [{ required: false }];
},
},
]);
} else {
updateSchema([
{ field: 'contrcatName', required: true },
{ field: 'collectingUnit', required: true },
{ field: 'contractAmount', required: true },
{ field: 'paymentLevel', required: true },
{ field: 'completionValueActual', required: true },
{ field: 'accumulateCompletionValue', required: true },
{ field: 'planCompletionValue', required: true },
{ field: 'lastMonthPlan', required: true },
{ field: 'lastMonthActual', required: true },
{ field: 'accumulatePayment', required: true },
{ field: 'thisPlanNumber', required: true },
{ field: 'specialFund', required: true },
{ field: 'governmentFund', required: true },
{ field: 'banFinancing', required: true },
{ field: 'ownFund', required: true },
{
field: 'remark',
dynamicRules: ({ values }) => {
return values.fundGap ? [{ required: true, message: '说明必填' }] : [];
},
},
]);
}
});
} }
for(let j = 0; j < tabsFormSchema[i].list.length; j++){
let formSchema = tabsFormSchema[i].list[j].form[1]
const { updateSchema } = formSchema
console.log(subFormSchema)
nextTick(()=>{
if(isSubmit == '0'){
updateSchema([
{field: 'contrcatName' ,required: false},
{field: 'collectingUnit' ,required: false},
{field: 'contractAmount' ,required: false},
{field: 'paymentLevel' ,required: false},
{field: 'completionValueActual' ,required: false},
{field: 'accumulateCompletionValue' ,required: false},
{field: 'planCompletionValue' ,required: false},
{field: 'lastMonthPlan' ,required: false},
{field: 'lastMonthActual' ,required: false},
{field: 'accumulatePayment' ,required: false},
{field: 'thisPlanNumber' ,required: false},
{field: 'specialFund' ,required: false},
{field: 'governmentFund' ,required: false},
{field: 'banFinancing' ,required: false},
{field: 'ownFund' ,required: false},
{field: 'fundGap' ,required: false},
{field: 'remark' , dynamicRules: ({ values }) => {
return [{ required: false, }]
},},
])
}else{
updateSchema([
{field: 'contrcatName' ,required: true},
{field: 'collectingUnit' ,required: true},
{field: 'contractAmount' ,required: true},
{field: 'paymentLevel' ,required: true},
{field: 'completionValueActual' ,required: true},
{field: 'accumulateCompletionValue' ,required: true},
{field: 'planCompletionValue' ,required: true},
{field: 'lastMonthPlan' ,required: true},
{field: 'lastMonthActual' ,required: true},
{field: 'accumulatePayment' ,required: true},
{field: 'thisPlanNumber' ,required: true},
{field: 'specialFund' ,required: true},
{field: 'governmentFund' ,required: true},
{field: 'banFinancing' ,required: true},
{field: 'ownFund' ,required: true},
{field: 'remark' , dynamicRules: ({ values }) => {
return values.fundGap ? [{ required: true, message: '说明必填' }] : [];
},}
])
}
})
} }
}
console.log('moth的值', moth.value); console.log('moth的值', moth.value);
loadingRef.value = true; loadingRef.value = true;
try { try {
......
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