Commit 31f59ecc authored by 高滢's avatar 高滢

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

parents 963cdc42 fdb12099
...@@ -21,7 +21,9 @@ enum Api { ...@@ -21,7 +21,9 @@ enum Api {
MothCycelEdit = '/pro/mothCycle/edit', MothCycelEdit = '/pro/mothCycle/edit',
BusinessComDetails = '/pro/monthEngineer/businessComDetails', BusinessComDetails = '/pro/monthEngineer/businessComDetails',
EditStatus = '/pro/mothCycle/editStatus', EditStatus = '/pro/mothCycle/editStatus',
SafetyHazard = '/pro/export/safetyHazard'
} }
export const getMonthlyPlanList = (params?: ProjectParams) => export const getMonthlyPlanList = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params }); defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
...@@ -88,6 +90,15 @@ export const exportMonthCount = (params?: any) => ...@@ -88,6 +90,15 @@ export const exportMonthCount = (params?: any) =>
}, },
{ errorMessageMode: 'none', isTransformResponse: false }, { errorMessageMode: 'none', isTransformResponse: false },
); );
export const exportSafetyHazard = (params?: any) =>
defHttp.post<any>(
{
url: Api.SafetyHazard,
data: params,
responseType: 'blob',
},
{ errorMessageMode: 'none', isTransformResponse: false },
);
export const getSelectDeptById = (params?: any) => export const getSelectDeptById = (params?: any) =>
defHttp.post<any>({ defHttp.post<any>({
......
...@@ -19,6 +19,9 @@ enum Api { ...@@ -19,6 +19,9 @@ enum Api {
Itemdelete = '/pro/completion/delProject', Itemdelete = '/pro/completion/delProject',
GetPerformanceDetail = '/pro/reportCenter/details/completionSituation', GetPerformanceDetail = '/pro/reportCenter/details/completionSituation',
getProject = '/pro/completion/getProject', getProject = '/pro/completion/getProject',
statisticCompletion = '/pro/completion/statisticCompletion',
statisticCompletionDetails = '/pro/completion/statisticCompletionDetails',
ExportCount = '/pro/completion/statistic'
} }
export const getListByPage = (params?: ProjectParams) => export const getListByPage = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params }); defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
...@@ -73,3 +76,26 @@ export const getPerformanceDetail = (params?: any) => ...@@ -73,3 +76,26 @@ export const getPerformanceDetail = (params?: any) =>
export const getProject = (params?: any) => export const getProject = (params?: any) =>
defHttp.post<ProjectModel>({ url: Api.getProject, params }); defHttp.post<ProjectModel>({ url: Api.getProject, params });
export const getStatisticCompletionProject = (params?: any) =>
defHttp.post<any>({
url: Api.statisticCompletion,
params,
});
export const getStatisticCompletionDetails = (params?: any) =>
defHttp.post<any>({
url: Api.statisticCompletionDetails,
params,
});
export const exportStatisticList = (params?: any) =>
defHttp.post<any>(
{
url: Api.ExportCount,
data: params,
responseType: 'blob',
},
{ errorMessageMode: 'none', isTransformResponse: false },
);
...@@ -3,6 +3,7 @@ import { ProjectModel, ProjectParams } from '@/api/project/model/projectModel'; ...@@ -3,6 +3,7 @@ import { ProjectModel, ProjectParams } from '@/api/project/model/projectModel';
enum Api { enum Api {
GetList = '/pro/dangerManagement/page', GetList = '/pro/dangerManagement/page',
GetListAll = '/pro/dangerManagement/all',
potentialSafetyGetList = '/pro/dangerManagement/page', potentialSafetyGetList = '/pro/dangerManagement/page',
UpdateProject = '/pro/dangerManagement/update', UpdateProject = '/pro/dangerManagement/update',
DeleteProject = '/pro/dangerManagement/del', DeleteProject = '/pro/dangerManagement/del',
...@@ -10,6 +11,8 @@ enum Api { ...@@ -10,6 +11,8 @@ enum Api {
export const getListByPage = (params?: ProjectParams) => export const getListByPage = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params }); defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
export const getListByAll = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetListAll, data: params });
export const potentialSafetyGetListByPage = (params?: ProjectParams) => export const potentialSafetyGetListByPage = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.potentialSafetyGetList, data: params }); defHttp.post<ProjectModel>({ url: Api.potentialSafetyGetList, data: params });
......
...@@ -24,6 +24,8 @@ enum Api { ...@@ -24,6 +24,8 @@ enum Api {
getDepartmentList = '/pro/sys/sysDeptId', getDepartmentList = '/pro/sys/sysDeptId',
// 查询季度是否已经存在 // 查询季度是否已经存在
isSettlement = '/pro/settlement/is-settlement', isSettlement = '/pro/settlement/is-settlement',
GetListAll = '/pro/settlement/listAll',
ExportCount= '/pro/export/settlementManagementStatistic',
} }
export const getSettlementManageList = (params?: ProjectParams) => export const getSettlementManageList = (params?: ProjectParams) =>
defHttp.post<ProjectParams>({ url: Api.GetList, data: params }); defHttp.post<ProjectParams>({ url: Api.GetList, data: params });
...@@ -96,3 +98,15 @@ export const isSettlement = (params?: any) => ...@@ -96,3 +98,15 @@ export const isSettlement = (params?: any) =>
url: Api.isSettlement, url: Api.isSettlement,
params, 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 },
);
...@@ -82,6 +82,16 @@ const engineeringProject: AppRouteModule = { ...@@ -82,6 +82,16 @@ const engineeringProject: AppRouteModule = {
orderNo: 2, orderNo: 2,
}, },
}, },
{
path: 'statisticPerformance',
name: 'statisticPerformance',
component: () => import('@/views/performance/statisticPerformance/index.vue'),
meta: {
auth: '/www/dist/index.html#/performance/index',
title: '统计项目投资计划完成情况',
orderNo: 2,
},
},
{ {
path: 'performanceEdit', path: 'performanceEdit',
name: 'performanceEdit', name: 'performanceEdit',
......
...@@ -8,13 +8,23 @@ const settlementManagement: AppRouteModule = { ...@@ -8,13 +8,23 @@ const settlementManagement: AppRouteModule = {
component: LAYOUT, component: LAYOUT,
redirect: '/settlementManagement/index', redirect: '/settlementManagement/index',
meta: { meta: {
hideChildrenInMenu: true, hideChildrenInMenu: false,
icon: 'icon-park-outline:align-text-left-one', icon: 'icon-park-outline:align-text-left-one',
orderNo: 4, orderNo: 4,
auth: '/www/dist/index.html#/settlementManagement/index', auth: '/www/dist/index.html#/settlementManagement/index',
title: '结算管理', title: '结算管理',
}, },
children: [ children: [
{
path: 'statistic',
name: 'settlementManagementStatistic',
component: () => import('@/views/settlementManagement/statistic/index.vue'),
meta: {
auth: '/www/dist/index.html#/settlementManagement/index',
title: '结算管理统计',
orderNo: 11,
},
},
{ {
path: 'index', path: 'index',
name: 'settlementManagement', name: 'settlementManagement',
...@@ -22,6 +32,7 @@ const settlementManagement: AppRouteModule = { ...@@ -22,6 +32,7 @@ const settlementManagement: AppRouteModule = {
meta: { meta: {
auth: '/www/dist/index.html#/settlementManagement/index', auth: '/www/dist/index.html#/settlementManagement/index',
// affix: true, // affix: true,
// hideMenu: true,
title: '结算管理', title: '结算管理',
orderNo: 4, orderNo: 4,
}, },
...@@ -33,6 +44,7 @@ const settlementManagement: AppRouteModule = { ...@@ -33,6 +44,7 @@ const settlementManagement: AppRouteModule = {
meta: { meta: {
auth: '/www/dist/index.html#/settlementManagement/index', auth: '/www/dist/index.html#/settlementManagement/index',
// affix: true, // affix: true,
hideMenu: true,
title: '新建结算管理', title: '新建结算管理',
orderNo: 8, orderNo: 8,
}, },
......
import { BasicColumn, FormSchema } from '@/components/Table'; import { BasicColumn, FormSchema } from '@/components/Table';
import moment from "moment";
//主模块-投资管理列表页 //主模块-投资管理列表页
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
label: '修改', label: '修改',
onClick: handleEdit.bind(null, record, 0), onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => { ifShow: (_action) => {
return record.reviewStatus == '0'||record.reviewStatus == null; return true;
}, },
}, },
{ {
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
confirm: handleDelete.bind(null, record), confirm: handleDelete.bind(null, record),
}, },
ifShow: (_action) => { ifShow: (_action) => {
return record.reviewStatus == '0'||record.reviewStatus == null ; return true;
}, },
}, },
{ {
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
componentProps: { componentProps: {
placeholder: '年份', placeholder: '年份',
picker: 'year', picker: 'year',
defaultValue: moment().format('YYYY'),
valueFormat: 'YYYY', valueFormat: 'YYYY',
format: 'YYYY', format: 'YYYY',
style: { style: {
...@@ -56,6 +57,7 @@ ...@@ -56,6 +57,7 @@
component: 'Select', component: 'Select',
componentProps: { componentProps: {
placeholder: '季度', placeholder: '季度',
defaultValue: '第一季度',
options: [ options: [
{ {
label: '第一季度', label: '第一季度',
......
...@@ -83,6 +83,7 @@ export const searchFormSchema: FormSchema[] = [ ...@@ -83,6 +83,7 @@ export const searchFormSchema: FormSchema[] = [
field: 'companyName', field: 'companyName',
label: '', label: '',
component: 'Select', component: 'Select',
required: false,
componentProps: { componentProps: {
options: [ options: [
{ label: '公司名称1', value: '1' }, { label: '公司名称1', value: '1' },
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'status'"> <template v-if="column.key === 'status'">
<Tag color="warning" v-if="record.status == '0'"> 未审核</Tag> <Tag color="warning" v-if="record.status === '0'"> 未审核</Tag>
</template> </template>
<template v-if="column.key === 'status'"> <template v-if="column.key === 'status'">
<Tag color="success" v-if="record.status == '1'"> 已审核</Tag> <Tag color="success" v-if="record.status === '1'"> 已审核</Tag>
</template> </template>
<template v-if="column.key === 'action'" > <template v-if="column.key === 'action'">
<TableAction <TableAction
v-if="record.status == '0'" v-if="record.status === '0'"
:actions="[ :actions="[
{ {
label: '修改', label: '修改',
...@@ -70,24 +70,18 @@ ...@@ -70,24 +70,18 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { operateType, addItemApi, addItemData } from '@/api/operations/operations'; import {addItemApi, addItemData, operateType} from '@/api/operations/operations';
import { BasicTable, useTable, TableAction } from '@/components/Table'; import {BasicTable, TableAction, useTable} from '@/components/Table';
import { useModal } from '@/components/Modal'; import {useModal} from '@/components/Modal';
import yearModal from '@/components/yearModal/yearModal.vue'; import {auditItem, checkQuarter, deleteList, getSettlementManageList,} from '@/api/changeSignatrue/changeSignatrue';
import { import {columns, searchFormSchema} from '@/views/changeSignature/changeSignatrue.data';
getSettlementManageList, import {Tag} from 'ant-design-vue';
auditItem, import {useRouter} from 'vue-router';
deleteList, import {onMounted} from 'vue';
checkQuarter, import {getDepartmentList} from '@/api/project/settlementManage';
} from '@/api/changeSignatrue/changeSignatrue'; import {useMessage} from '@/hooks/web/useMessage';
import { columns, searchFormSchema } from '@/views/changeSignature/changeSignatrue.data';
import { Tag } from 'ant-design-vue';
import { useRouter } from 'vue-router';
import { onMounted } from 'vue';
import { getDepartmentList } from '@/api/project/settlementManage';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const { push } = useRouter(); const { push } = useRouter();
const [register, { openModal: openModal, closeModal: closeModal }] = useModal(); const [register, { openModal: openModal, closeModal: closeModal }] = useModal();
...@@ -113,13 +107,14 @@ ...@@ -113,13 +107,14 @@
onMounted(async () => { onMounted(async () => {
const data = await getDepartmentList(); const data = await getDepartmentList();
searchFormSchema[2].componentProps.options = data; searchFormSchema[2].componentProps.options = data.map(item => ({
console.log(searchFormSchema[2].componentProps.options, '数据仓库'); key: item.value,
value: item.label,
label: item.label
}));
}); });
async function handleDelete(record: Recordable) { async function handleDelete(record: Recordable) {
console.log(record);
console.log(record);
let id = record.id; let id = record.id;
await deleteList({ id }); await deleteList({ id });
reload(); reload();
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
<template #bodyCell="{ column, text, record, index }"> <template #bodyCell="{ column, text, record, index }">
<!-- 当前列是序号列时,显示序号 --> <!-- 当前列是序号列时,显示序号 -->
<span v-if="column.dataIndex === 'serialNumber'">{{ index + 1 }}</span> <span v-if="column.dataIndex === 'serialNumber'">{{ index + 1 }}</span>
<template v-if="column.key === 'completionResult'"> <template v-if="column.key === 'completionResult'">
<Tag color="processing"> <Tag color="processing">
{{ record.completionResult == 1 ? '已审核' : '未审核' }} {{ record.completionResult == 1 ? '已审核' : '未审核' }}
...@@ -27,7 +26,7 @@ ...@@ -27,7 +26,7 @@
label: '修改', label: '修改',
onClick: handleEdit.bind(null, record, 0), onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => { ifShow: (_action) => {
return record.completionResult == 0; return true;
}, },
}, },
{ {
...@@ -39,7 +38,7 @@ ...@@ -39,7 +38,7 @@
confirm: handleDelete.bind(null, record), confirm: handleDelete.bind(null, record),
}, },
ifShow: (_action) => { ifShow: (_action) => {
return record.completionResult == 0; return true;
}, },
}, },
{ {
...@@ -52,6 +51,7 @@ ...@@ -52,6 +51,7 @@
}, },
ifShow: (_action) => { ifShow: (_action) => {
return record.completionResult == 0; return record.completionResult == 0;
// return record.completionResult == 0 && deptId != '100';
}, },
}, },
]" ]"
...@@ -72,9 +72,13 @@ ...@@ -72,9 +72,13 @@
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import performanceModel from './performanceModel.vue'; import performanceModel from './performanceModel.vue';
import { Tag } from 'ant-design-vue'; import { Tag } from 'ant-design-vue';
import { onMounted } from 'vue'; import {onMounted, ref} from 'vue';
import { getDepartmentList } from '@/api/project/settlementManage'; import { getDepartmentList } from '@/api/project/settlementManage';
import {useMessage} from "@/hooks/web/useMessage";
import {useUserStore} from "@/store/modules/user";
const deptId = ref('');
const { createMessage } = useMessage();
const { push } = useRouter(); const { push } = useRouter();
const [register, { openModal: openModal }] = useModal(); const [register, { openModal: openModal }] = useModal();
...@@ -111,12 +115,14 @@ ...@@ -111,12 +115,14 @@
} }
onMounted(async () => { onMounted(async () => {
deptId.value = useUserStore().userInfo.deptId;
const data = await getDepartmentList(); const data = await getDepartmentList();
searchFormSchema[2].componentProps.options = data; searchFormSchema[2].componentProps.options = data;
}); });
function handleDelete(record: Recordable) { function handleDelete(record: Recordable) {
deleteItem({ id: record.id }); deleteItem({ id: record.id });
createMessage.success('删除成功!');
reload(); reload();
} }
......
...@@ -10,26 +10,52 @@ ...@@ -10,26 +10,52 @@
<!-- page页的右上角操作(提交和返回)按钮 --> <!-- page页的右上角操作(提交和返回)按钮 -->
<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" @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>
<!-- page页 -->
<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>
<!-- 右上角的删除按钮 --> <span class="projectName">{{ item.name }}</span>
<template #right> </template>
<template #action>
<a-button <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> </template>
<BasicForm :loading="loading" @register="item.Form[0]" /> <BasicForm :loading="loading" @register="item.Form[0]" />
</PageCard> <!-- 左上角为项目名 -->
<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 #action>
<a-button
v-if="!disabled"
type="text"
preIcon="ant-design:delete-outlined"
danger
@click="deleteItemCon(index, key)"
>删除合同</a-button
>
</template> </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">
从计划中添加 从计划中添加
...@@ -67,8 +93,10 @@ ...@@ -67,8 +93,10 @@
GetEngineProjectList, GetEngineProjectList,
Itemdelete, Itemdelete,
} from '@/api/project/performance'; } from '@/api/project/performance';
import { useDrawer } from '@/components/Drawer'; import { useDrawer } from '@/components/Drawer';
import CollapseContainer from '@/components/Container/src/collapse/CollapseContainer.vue';
//历史记录是否可查 //历史记录是否可查
const historyData = ref(true); const historyData = ref(true);
...@@ -98,8 +126,10 @@ ...@@ -98,8 +126,10 @@
let result = await GetEngineProjectList({ let result = await GetEngineProjectList({
ids, ids,
}); });
console.log('result:',result)
formData.value.ids = ids; formData.value.ids = ids;
result.map((res) => { result.map((res) => {
console.log('res:',res)
let item = res; let item = res;
item.time = item.beginTime + '/' + item.endTime; item.time = item.beginTime + '/' + item.endTime;
handleNew(item); handleNew(item);
...@@ -117,8 +147,10 @@ ...@@ -117,8 +147,10 @@
formData.value.planCompletion = []; formData.value.planCompletion = [];
for (let i = 0; i < res.length; i++) { for (let i = 0; i < res.length; i++) {
const source = res[i]; const source = res[i];
console.log('source:',source)
const item = { const item = {
name: '序号' + (i + 1), name: '项目:' + source.projectName,
proId: source.proId,
forceRender: true, forceRender: true,
show: true, show: true,
Form: useForm( Form: useForm(
...@@ -158,13 +190,22 @@ ...@@ -158,13 +190,22 @@
}; };
const tabsFormSchema = reactive<TabsFormType[]>([]); const tabsFormSchema = reactive<TabsFormType[]>([]);
/*删除项目表单*/
async function deleteItemPro(index: any) {
formData.value.planCompletion.splice(index, 1);
tabsFormSchema.splice(index, 1);
loadingRef.value = false;
console.log(formData.value);
// }
}
/*创建完成情况*/ /*创建完成情况*/
async function handleNew(info: any) { async function handleNew(info: any) {
console.log(info); console.log('info:',info)
const item = { const item = {
name: '序号' + (tabsFormSchema.length + 1), name: '项目:'+info.projectName,
forceRender: true, forceRender: true,
proId:info.proId,
show: true, show: true,
Form: useForm( Form: useForm(
Object.assign( Object.assign(
...@@ -203,15 +244,86 @@ ...@@ -203,15 +244,86 @@
}); });
} }
/*page页的右上角操作(提交和返回)按钮*/ /*page页的右上角操作(提交和返回)按钮*/
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: 'constructionSite', required: false},
{field: 'constructionMode', required: false},
{field: 'projectType', required: false},
{field: 'constructionScale', required: false},
{field: 'projectOverview', required: false},
{field: 'fundingSource', required: false},
{field: 'implementingEntity', required: false},
{field: 'filingCycle', required: false},
{field: 'totalInvestment', required: false},
{field: 'attribute', required: false},
{field: 'time', required: false},
{field: 'completionSchedule', required: false},
{field: 'outputValue', required: false},
{field: 'planNum', required: false},
{field: 'actualOutputValue', required: false},
{field: 'planFunds', required: false},
{field: 'actualPay', required: false},
{field: 'completionRemarks', required: false},
{field: 'fundingSource', required: false},
{field: 'projectApproval', required: false},
{field: 'fundingSource', required: false},
{field: 'competentDepartment', required: false},
{
field: 'remark', dynamicRules: ({values}) => {
return [{required: false,}]
},
},
])
} else {
updateSchema([
{field: 'projectName', required: true},
{field: 'constructionSite', required: true},
{field: 'constructionMode', required: true},
{field: 'projectType', required: true},
{field: 'constructionScale', required: true},
{field: 'projectOverview', required: true},
{field: 'fundingSource', required: true},
{field: 'implementingEntity', required: true},
{field: 'filingCycle', required: true},
{field: 'totalInvestment', required: true},
{field: 'attribute', required: true},
{field: 'time', required: true},
{field: 'completionSchedule', required: true},
{field: 'outputValue', required: true},
{field: 'planNum', required: true},
{field: 'actualOutputValue', required: true},
{field: 'planFunds', required: true},
{field: 'actualPay', required: true},
{field: 'completionRemarks', required: true},
{field: 'fundingSource', required: true},
{field: 'projectApproval', required: true},
{field: 'fundingSource', required: true},
{field: 'competentDepartment', required: true},
{
field: 'remark', dynamicRules: ({values}) => {
return values.fundGap ? [{required: true, message: '说明必填'}] : [];
},
}
])
}
})
}
loadingRef.value = true; loadingRef.value = true;
try { try {
for (let i = 0; i < tabsFormSchema.length; i++) { for (let i = 0; i < tabsFormSchema.length; i++) {
let item = tabsFormSchema[i]; let item = tabsFormSchema[i];
console.log('item1111:',item)
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.planCompletion[i].proId = item.proId;
formData.value.planCompletion[i] = deepMerge(formData.value.planCompletion[i], res); formData.value.planCompletion[i] = deepMerge(formData.value.planCompletion[i], res);
formData.value.planCompletion[i].actualOutputValue = Number( formData.value.planCompletion[i].actualOutputValue = Number(
formData.value.planCompletion[i].actualOutputValue, formData.value.planCompletion[i].actualOutputValue,
...@@ -219,21 +331,22 @@ ...@@ -219,21 +331,22 @@
formData.value.planCompletion[i].actualPay = Number( formData.value.planCompletion[i].actualPay = Number(
formData.value.planCompletion[i].actualPay, formData.value.planCompletion[i].actualPay,
); );
console.log(formData.value.planCompletion);
} }
} }
formData.value.proNumber = formData.value.planCompletion.Length; formData.value.proNumber = formData.value.planCompletion.Length;
formData.value.isSubmit = isSubmit
let res = isUpdate.value ? await updateItem(unref(formData)) : await addItem(unref(formData)); let res = isUpdate.value ? await updateItem(unref(formData)) : await addItem(unref(formData));
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, '记录添加成功');
loadingRef.value = true; loadingRef.value = true;
console.log(res); if (isSubmit === '0'){
createMessage.success('暂存成功!');
} else {
createMessage.success('提交成功!'); createMessage.success('提交成功!');
router.back(); }
// router.back();
} catch (e) { } catch (e) {
// 验证失败或出错,切换到对应标签页 // 验证失败或出错,切换到对应标签页
console.log(e); console.log(e);
...@@ -250,3 +363,18 @@ ...@@ -250,3 +363,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>
<template>
<div style="margin: 16px">
<PageCard title="统计工程项目投资计划完成情况">
<BasicForm ref="formElRef" @register="registerForm">
<template #formFooter>
<a-button type="primary" @click="handleSubmit"> 查询</a-button>
<a-button type="primary" @click="exportCount" style="margin-left: 10px"> 导出</a-button>
</template>
</BasicForm>
<Table
:pagination="false"
:dataSource="dataSource"
:columns="getBasicColumns(params.filingCycle, params.planType)"
bordered
:loading="loadingRef"
:rowClassName="setRowClassName"
>
<template #projectType="{ text, record }">
<a @click="showDetails(record)"> {{ text }}</a>
</template>
</Table>
</PageCard>
<PerformanceStatisticWindow @register="register" />
</div>
</template>
<script setup lang="ts">
import { BasicForm, useForm } from '@/components/Form';
import PageCard from '@/components/Page/src/PageCard.vue';
import { Table } from 'ant-design-vue';
import { onMounted, ref } from 'vue';
import {
getBasicColumns,
searchForm,
} from '@/views/performance/statisticPerformance/statisticData';
import { getSelectDeptById, getStatistic } from '@/api/project/monthlyPlan';
import { getStatisticCompletionProject,getStatisticCompletionDetails } from '@/api/project/performance';
import PerformanceStatisticWindow from '@/views/performance/statisticPerformance/performanceStatisticWindow.vue';
import { useModal } from '@/components/Modal';
import {exportStatisticList} from "@/api/project/performance";
import {downloadByData} from "@/utils/file/download";
const [register, { openModal: openModal }] = useModal();
onMounted(async () => {
const data = await getSelectDeptById();
searchForm[2].componentProps.options = data;
getStatisticList();
});
const dataSource = ref([]);
const loadingRef = ref(false);
const params = ref({ filingCycle: '2024', planType: '自投', company: '' });
const [registerForm, { getFieldsValue }] = useForm({
labelWidth: 90,
baseColProps: { span: 24 },
schemas: searchForm,
showActionButtonGroup: false,
});
function handleSubmit() {
let data = getFieldsValue();
params.value = data;
console.log(params.value);
getStatisticList();
}
function setRowClassName(record) {
if (record.projectType === '总计') {
return 'rowcolor';
} else {
return;
}
}
async function exportCount() {
const params = getFieldsValue();
const data = await exportStatisticList(params);
downloadByData(data, '统计项目计划投资完成情况报表' + '.xlsx');
}
async function getStatisticList() {
loadingRef.value = true;
let data = await getStatisticCompletionProject(params.value);
// dataSource.value = data;
let propsList = ['companyName'];
propsList.map((item) => {
changeData(data, item);
});
loadingRef.value = false;
}
function changeData(data, field) {
let count = 0; //重复项的第一项
let indexCount = 1; //下一项
while (indexCount < data.length) {
var item = data.slice(count, count + 1)[0]; //获取没有比较的第一个对象
if (!item[`${field}rowSpan`]) {
item[`${field}rowSpan`] = 1; //初始化为1
}
if (item[field] === data[indexCount][field]) {
//第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
item[`${field}rowSpan`]++;
data[indexCount][`${field}rowSpan`] = 0;
} else {
count = indexCount;
}
indexCount++;
}
dataSource.value = data;
}
function showDetails(record) {
openModal(true, {
record,
filingCycle: params.value.filingCycle,
planType: params.value.planType,
});
}
</script>
<style scoped lang="less">
.tableHiddle {
display: none;
}
.tableshow {
display: revert;
}
::v-deep .ant-table-tbody .ant-table-row {
&.rowcolor .ant-table-cell-fix-left {
background-color: #f5f5f5;
}
}
</style>
<template>
<BasicModal v-bind="$attrs" width="80%" @register="register" :title="getTitle" :showOkBtn="false">
<div style="height: 500px">
<Table
:pagination="false"
:dataSource="dataSource"
:columns="getDtailsBasicColumns(params.filingCycle, params.planType)"
bordered
:sticky="true"
:loading="loadingRef"
:scroll="{ x: 4000, y: 300 }"
>
<template #index="{ text, record, index }">
{{index+1}}
</template>
</Table>
</div>
</BasicModal>
</template>
<script setup lang="ts">
import { useModalInner } from '@/components/Modal';
import BasicModal from '@/components/Modal/src/BasicModal.vue';
import { ref } from 'vue';
import { Table } from 'ant-design-vue';
import { getDtailsBasicColumns } from '@/views/performance/statisticPerformance/statisticData';
import { getStatisticCompletionDetails } from '@/api/project/performance';
const loadingRef = ref(false);
// 列表
const dataSource = ref([]);
const getTitle = ref('');
const params = ref({ companyId: '', projectType: '', filingCycle: '', planType: '' });
const [register, { closeModal }] = useModalInner(async (data) => {
getTitle.value = data.record.company;
params.value.companyId = data.record.companyId;
params.value.projectType = data.record.projectType;
params.value.filingCycle = data.filingCycle;
params.value.planType = data.planType;
dataSource.value = await getStatisticCompletionDetails(params.value);
// console.log('212', list);
});
</script>
<style scoped lang="less"></style>
import { FormSchema } from '@/components/Form';
import { useUserStore } from '@/store/modules/user';
import { BasicColumn } from '@/components/Table';
import moment from "moment";
const deptId = useUserStore().userInfo.deptParentId;
export const searchForm: FormSchema[] = [
{
field: 'filingCycle',
label: '',
defaultValue: new Date(),
component: 'DatePicker',
componentProps: {
placeholder: '选择填报周期',
style: { width: '100%' },
picker: 'year',
defaultValue: moment().format('YYYY'),
valueFormat: 'YYYY',
format: 'YYYY',
},
colProps: { span: 4 },
},
{
field: 'planType',
label: '',
defaultValue: '自投',
component: 'Select',
componentProps: {
defaultValue: '自投',
options: [
{ label: '自投', value: '自投' },
{ label: '代建', value: '代建' },
{ label: '承建', value: '承建' },
{ label: '储备', value: '储备' },
],
placeholder: '类型',
},
colProps: { span: 4 },
},
{
field: 'company',
label: '',
show: deptId == '100',
component: 'Select',
componentProps: {
options: [],
placeholder: '公司名称',
},
colProps: { span: 4 },
},
];
export function getBasicColumns(year: string, planType: string): BasicColumn[] {
return [
{
title: year + '年' + planType + '工程项目投资计划完成情况',
colSpan: 6,
children: [
{
title: '公司名称',
dataIndex: 'company',
fixed: 'left',
width: 250,
customCell: (_, any) => ({
rowSpan: _.companyNamerowSpan,
}),
},
{
title: '项目类型',
dataIndex: 'projectType',
fixed: 'left',
width: 300,
slots: { customRender: 'projectType' },
},
{
title: '项目个数',
dataIndex: 'proNum',
width: 200,
},
{
title: '合同总额',
dataIndex: 'contractAmount',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
},
{
title: '投资总额(万元)',
dataIndex: 'outputValue',
className: planType != '承建' ? 'tableShow' : 'tableHiddle',
},
{
title: year + '年计划完成产值',
dataIndex: 'planCompleteOutputValue',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
},
{
title: year + '年计划完成投资额度',
dataIndex: 'planOutputValue',
className: planType != '承建' ? 'tableShow' : 'tableHiddle',
},
{
title: year + '年计划资金',
dataIndex: 'planFunds',
className: planType != '储备' ? 'tableShow' : 'tableHiddle',
},
],
},
];
}
export function getDtailsBasicColumns(year: string, planType: string): BasicColumn[] {
return [
{
title: '序号',
dataIndex: 'index',
fixed: 'left',
width: 180,
slots: { customRender: 'index' },
},
{
title: '项目名称',
dataIndex: 'projectName',
fixed: 'left',
width: 180,
},
{
title: '建设地点',
dataIndex: 'constructionSite',
width: 180,
},
{
title: '项目概况',
dataIndex: 'projectOverview',
width: 200,
},
{
title: '建设规模',
dataIndex: 'constructionScale',
width: 150,
},
{
title: '建设目的及功能',
dataIndex: 'constructionPurpose',
width: 150,
},
{
title: '建设模式',
dataIndex: 'constructionMode',
width: 150,
},
{
title: '资金来源',
dataIndex: 'fundingSource',
width: 150,
},
{
title: '项目类型',
dataIndex: 'projectType',
width: 150,
},
{
title: '总投资',
dataIndex: 'totalInvestment',
className: planType !== '承建' ? 'tableShow' : 'tableHiddle',
// width: planType === '承建' ? 0 : 150,
width: 150,
},
{
title: year + '年之前总投资额(不包含'+year+'年)',
dataIndex: 'outputValue',
className: planType !== '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年计划投资额',
dataIndex: 'matchingFunds',
className: planType !== '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年实际完成投资额',
dataIndex: 'actualOutputValue',
className: planType !== '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年计划资金',
dataIndex: 'planFunds',
className: planType !== '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年实付资金',
dataIndex: 'actualPay',
className: planType !== '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: '合同总额',
dataIndex: 'contractAmount',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年之前完成总产值(不包含'+year+'年)',
dataIndex: 'matchingFunds',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年计划产值',
dataIndex: 'outputValue',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: year + '年实际产值',
dataIndex: 'actualOutputValue',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: '建设性质',
dataIndex: 'attribute',
width: 150,
},
{
title: '开工时间',
dataIndex: 'beginTime',
width: 150,
},
{
title: '竣工时间',
dataIndex: 'endTime',
width: 150,
},
{
title: year + '年底形象季度',
dataIndex: 'schedule',
width: 150,
},
{
title: '实施主体',
dataIndex: 'implementingEntity',
width: 150,
},
{
title: '合同方式',
dataIndex: 'contract',
className: planType === '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
{
title: '项目主管部门',
dataIndex: 'competentDepartment',
className: planType != '承建' ? 'tableShow' : 'tableHiddle',
width: 150,
},
// {
// title: '实施级别',
// dataIndex: 'implementationLevel',
// width: 150,
// },
{
title: '备注',
dataIndex: 'remarks',
width: 150,
},
];
}
import { BasicColumn, FormSchema } from '@/components/Table'; import { BasicColumn, FormSchema } from '@/components/Table';
import {useUserStore} from "@/store/modules/user";
const deptId = useUserStore().userInfo.deptId;
console.log('===========',useUserStore().userInfo)
//主模块-安全隐患列表页 //主模块-安全隐患列表页
export const formSchema: FormSchema[] = [ export const formSchema: FormSchema[] = [
// {
// field: 'fillingPeriod',
// labelWidth: '140px',
// label: '填报周期',
// required: true,
// component: 'DatePicker',
// componentProps: {
// placeholder: '填报周期',
// style: { width: '100%' },
// valueFormat: 'YYYY-MM-DD',
// format: 'YYYY-MM-DD',
// },
// },
{ field: 'year',
label: '年份',
component: 'DatePicker',
required: true,
componentProps: {
placeholder: '年份',
picker: 'year',
valueFormat: 'YYYY',
format: 'YYYY',
style: {
width: '100%',
},
},
colProps: { span: 11, offset: 1 },},
{ {
field: 'fillingPeriod', field: 'quarter',
labelWidth: '140px', label: '季度',
label: '填报周期',
required: true, required: true,
component: 'DatePicker', component: 'Select',
componentProps: { componentProps: {
placeholder: '填报周期', placeholder: '季度',
style: { width: '100%' }, options: [
valueFormat: 'YYYY-MM-DD', {
format: 'YYYY-MM-DD', label: '第一季度',
value: '第一季度',
}, },
{
label: '第二季度',
value: '第二季度',
},
{
label: '第三季度',
value: '第三季度',
}, },
{
label: '第四季度',
value: '第四季度',
},
],
},
colProps: { span: 11, offset: 1 },
},
// {
// label: '公司名称',
// field: 'companyName',
// labelWidth: 150,
// },
{ {
label: '隐患描述', label: '隐患描述',
field: 'describe', field: 'describe',
...@@ -117,17 +168,38 @@ export const formSchema: FormSchema[] = [ ...@@ -117,17 +168,38 @@ export const formSchema: FormSchema[] = [
}, },
}, },
]; ];
export const columns: BasicColumn[] = [ export const columnsDate: BasicColumn[] = [
{ {
title: '填报周期', title: '公司名称',
dataIndex: 'fillingPeriod', dataIndex: 'companyName',
width: 150, width: 150,
}, ifShow: deptId === '100',
fixed: 'left',
customCell: (_, any) => ({
rowSpan: _.companyNamerowSpan,
}),
// slots: { customRender: 'companyName' },
},
// {
// title: '填报周期',
// dataIndex: 'fillingPeriod',
// width: 150,
// },
{ {
title: '隐患描述', title: '隐患描述',
dataIndex: 'describe', dataIndex: 'describe',
width: 150, width: 150,
}, },
{
title: '年份',
dataIndex: 'year',
width: 150,
},
{
title: '季度',
dataIndex: 'quarter',
width: 150,
},
{ {
title: '隐患级别', title: '隐患级别',
dataIndex: 'level', dataIndex: 'level',
...@@ -163,31 +235,69 @@ export const columns: BasicColumn[] = [ ...@@ -163,31 +235,69 @@ export const columns: BasicColumn[] = [
dataIndex: 'responsiblePerson', dataIndex: 'responsiblePerson',
width: 180, width: 180,
}, },
{
title: '操作',
dataIndex: 'action',
width: 180,
slots: { customRender: 'action' },
},
]; ];
export const searchFormSchema: FormSchema[] = [ export const searchFormSchemaDate: FormSchema[] = [
{ {
field: 'fillingPeriod', field: 'year',
label: '', label: '',
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
placeholder: '填报周期', placeholder: '选择填报周期',
picker: 'year',
style: { width: '100%' }, style: { width: '100%' },
valueFormat: 'YYYY-MM-DD', valueFormat: 'YYYY',
format: 'YYYY-MM-DD', format: 'YYYY',
}, },
colProps: { span: 4 }, colProps: { span: 4 },
}, },
{ {
field: 'responsiblePerson', field: 'quarter',
label: '', label: '',
component: 'Select', component: 'Select',
componentProps: { componentProps: {
options: [ options: [
{ label: '责任人一', value: '责任人一' }, {
{ label: '责任人二', value: '责任人二' }, label: '第一季度',
value: '第一季度'
},
{
label: '第二季度',
value: '第二季度'
},
{
label: '第三季度',
value: '第三季度',
},
{
label: '第四季度',
value: '第四季度',
},
],
placeholder: '季度',
},
colProps: { span: 4 },
},
{
field: 'companyName',
label: '',
component: 'Select',
ifShow: deptId === '100',
componentProps: {
placeholder: '公司名称',
options: [
{
label: '公司名称',
value: '公司名称',
key: '公司名称',
},
], ],
placeholder: '责任人',
}, },
colProps: { span: 4 }, colProps: { span: 4 },
}, },
......
This diff is collapsed.
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
showActionButtonGroup: false, showActionButtonGroup: false,
}); });
onMounted(async () => { onMounted(async () => {
const data = await getUserList(); // const data = await getUserList();
formSchema[8].componentProps.options = data; // formSchema[8].componentProps.options = data;
}); });
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
resetFields(); resetFields();
......
<template>
<BasicModal v-bind="$attrs" width="80%" @register="register" :title="getTitle" :showOkBtn="false">
<div style="height: 500px">
<Table
:pagination="false"
:dataSource="dataSource"
:columns="columns"
bordered
:sticky="true"
:loading="loadingRef"
:scroll="{ x: 4000, y: 300 }"
/>
</div>
</BasicModal>
</template>
<script setup lang="ts">
import { useModalInner } from '@/components/Modal';
import BasicModal from '@/components/Modal/src/BasicModal.vue';
import { ref } from 'vue';
import { Table } from 'ant-design-vue';
import { getStatisticDetails } from '@/api/project/monthlyPlan';
const loadingRef = ref(false);
// 列表
const dataSource = ref([]);
// 表头1
const columns = [
{
title: '',
dataIndex: '',
children: [
{
title: '项目名称',
dataIndex: 'projectName',
width: 200,
fixed: 'left',
},
],
},
{
title: '',
dataIndex: '',
children: [
{
title: '合同名称',
dataIndex: 'contractName',
width: 180,
},
{
title: '收款单位',
dataIndex: 'collectingUnit',
width: 180,
},
{
title: '合同额(万元)',
dataIndex: 'contractAmount',
width: 150,
},
],
},
{
title: '产值完成情况',
dataIndex: '',
children: [
{
title: '上月实际完成值(万元)',
dataIndex: 'completionValueActual',
width: 180,
},
{
title: '累计完成值(万元)',
dataIndex: 'accumulateCompletionValue',
width: 180,
},
{
title: '本月计划完成值(万元)',
dataIndex: 'planCompletionValue',
width: 180,
},
{
title: '上月计划数(万元)',
dataIndex: 'lastMonthPlan',
width: 180,
},
],
},
{
title: '资金支付情况',
dataIndex: '',
children: [
{
title: '上月实付数(万元)',
dataIndex: 'lastMonthActual',
width: 180,
},
{
title: '累计支付数(万元)',
dataIndex: 'accumulatePayment',
width: 180,
},
{
title: '本月计划数(万元)',
dataIndex: 'thisPlanNumber',
width: 180,
},
],
},
{
title: '资金来源',
dataIndex: '',
children: [
{
title: '专项债拨款(万元)',
dataIndex: 'specialFund',
width: 180,
},
{
title: '政府拨款(万元)',
dataIndex: 'governmentFund',
width: 180,
},
{
title: '银行融资(万元)',
dataIndex: 'banFinancing',
width: 180,
},
{
title: '自有资金(万元)',
dataIndex: 'ownFund',
width: 180,
},
{
title: '资金缺口',
dataIndex: 'fundGap',
width: 180,
},
],
},
{
title: '',
dataIndex: '',
children: [
{
title: '支付等级',
dataIndex: 'paymentLevel',
width: 180,
},
{
title: '备注',
dataIndex: 'remark',
width: 180,
},
],
},
];
const getTitle = ref('');
const params = ref({ companyId: '', sourceType: '', monthYear: '' });
const [register, { closeModal }] = useModalInner(async (data) => {
console.log('data', data)
loadingRef.value = true;
getTitle.value = data.record.companyName;
params.value.companyId = data.record.companyId;
params.value.sourceType = data.record.sourceType;
params.value.monthYear = data.monthYear;
dataSource.value = await getStatisticDetails(params.value);
console.log('params.value',params.value)
loadingRef.value = false;
// console.log('212', list);
});
</script>
<style scoped lang="less"></style>
...@@ -56,8 +56,10 @@ ...@@ -56,8 +56,10 @@
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { getDepartmentList } from '@/api/project/settlementManage'; import { getDepartmentList } from '@/api/project/settlementManage';
import { downloadByData } from '@/utils/file/download'; import { downloadByData } from '@/utils/file/download';
import {dataStyleTask} from "echarts/types/src/visual/style";
const deptId = useUserStore().userInfo.deptId; const deptId = useUserStore().userInfo.deptId;
// const deptId = "764";
const APopconfirm = Popconfirm; const APopconfirm = Popconfirm;
const userStore = useUserStore(); const userStore = useUserStore();
const getUserInfo = computed(() => { const getUserInfo = computed(() => {
...@@ -294,7 +296,13 @@ ...@@ -294,7 +296,13 @@
} else { } else {
columns.value = columns2; columns.value = columns2;
} }
searchForm.value[2].componentProps.options = await getDepartmentList(); const data = await getDepartmentList();
// console.log(data);
searchForm.value[2].componentProps.options = data.map((item) => ({
key: item.value,
value: item.label,
label: item.label,
}));
getStatisticList(); getStatisticList();
}); });
......
...@@ -351,10 +351,10 @@ export const formSchema: FormSchema[] = [ ...@@ -351,10 +351,10 @@ export const formSchema: FormSchema[] = [
label: '结算审核金额超合同额比例', label: '结算审核金额超合同额比例',
labelWidth: '300px', labelWidth: '300px',
required: true, required: true,
component: 'Input', component: 'InputNumber',
componentProps: { // componentProps: {
addonAfter: '元', // addonAfter: '元',
}, // },
colProps: { span: 7, offset: 1 }, colProps: { span: 7, offset: 1 },
}, },
// { // {
......
...@@ -22,7 +22,10 @@ ...@@ -22,7 +22,10 @@
title: '是否确认审核', title: '是否确认审核',
placement: 'left', placement: 'left',
confirm: examine.bind(null, record,true), confirm: examine.bind(null, record,true),
} },
ifShow: (_action) => {
return (record.reviewStatus == '0'||record.reviewStatus == null) && record.isSubmit == '1' && deptId !== '100';
},
}, },
{ {
label: '编辑', label: '编辑',
...@@ -101,7 +104,7 @@ onMounted(async () => { ...@@ -101,7 +104,7 @@ onMounted(async () => {
function handleEdit(record: Recordable, disabled: boolean) { function handleEdit(record: Recordable, disabled: boolean) {
console.log(record.id,"ddddd") console.log(record,"ddddd")
push({ push({
path: '/settlementManagement/edit', path: '/settlementManagement/edit',
query: { query: {
......
<template>
<div style="margin: 16px">
<PageCard title="结算管理统计">
<BasicForm ref="formElRef" @register="registerForm">
<template #formFooter>
<a-button type="primary" @click="handleSubmit"> 查询</a-button>
<a-button type="primary" @click="exportCount" style="margin-left: 10px"> 导出</a-button>
</template>
</BasicForm>
<Table
:pagination="false"
:dataSource="dataSource"
:columns="columns"
bordered
:loading="loadingRef"
:rowClassName="setRowClassName"
:scroll="{ x: 1300,y: 350 }"
>
</Table>
</PageCard>
<StatisticWindow @register="register" />
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
import { Table } from 'ant-design-vue';
import { getListAll,exportStatisticList } from '@/api/project/settlementManage';
import {BasicForm, FormActionType, FormSchema, useForm} from '@/components/Form';
import StatisticWindow from '@/views/monthlyPlan/statisticWindow/statisticWindow.vue';
import { useModal } from '@/components/Modal';
import { useRouter } from 'vue-router';
import PageCard from '@/components/Page/src/PageCard.vue';
import { downloadByData } from '@/utils/file/download';
import { useUserStore } from '@/store/modules/user';
const seach = ref([
{
field: 'givenYear',
label: '',
component: 'DatePicker',
componentProps: {
placeholder: '年份',
picker: 'year',
valueFormat: 'YYYY',
format: 'YYYY',
style: {
width: '100%',
},
},
colProps: { span: 4 },
},
{
field: 'quarter',
label: '',
component: 'Select',
componentProps: {
placeholder: '季度',
options: [
{
label: '第一季度',
value: '第一季度',
},
{
label: '第二季度',
value: '第二季度',
},
{
label: '第三季度',
value: '第三季度',
},
{
label: '第四季度',
value: '第四季度',
},
],
},
colProps: { span: 4 },
},
])
const deptId = ref('');
onMounted(async () => {
deptId.value = useUserStore().userInfo.deptId;
getStatisticList();
});
// defineOptions({ name: 'MonthlyPlan' });
const [register, { openModal: openModal }] = useModal();
const formElRef = ref<Nullable<FormActionType>>(null);
const [registerForm, { getFieldsValue }] = useForm({
labelWidth: 90,
baseColProps: { span: 24 },
schemas: seach,
showActionButtonGroup: false,
});
async function exportCount() {
const params = getFieldsValue();
const data = await exportStatisticList(params);
downloadByData(data, '招标管理统计报表' + '.xls');
}
const loadingRef = ref(false);
function handleSubmit() {
getStatisticList();
}
function setRowClassName(record) {
if (record.projectName === '总计(万元)') {
return 'rowcolor';
}
if (record.companyName === '合计(万元)'){
return 'rowcolor';
} else {
return;
}
}
function getCurrentDateFormatted() {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0'); // 月份从0开始,所以要加1,并且格式化为两位数
return `${year}-${month}`;
}
async function getStatisticList() {
const params = getFieldsValue();
loadingRef.value = true;
let data = await getListAll(params);
// dataSource.value = data;
let propsList = ['companyName','projectName'];
propsList.map((item) => {
changeData(data, item);
});
loadingRef.value = false;
}
function changeData(data, field) {
if (field == 'companyName'){
let count = 0; //重复项的第一项
let indexCount = 1; //下一项
while (indexCount < data.length) {
var item = data.slice(count, count + 1)[0]; //获取没有比较的第一个对象
if (!item[`${field}rowSpan`]) {
item[`${field}rowSpan`] = 1; //初始化为1
}
if (item[field] === data[indexCount][field]) {
//第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
item[`${field}rowSpan`]++;
data[indexCount][`${field}rowSpan`] = 0;
} else {
count = indexCount;
}
indexCount++;
}
}
if (field == 'projectName'){
let count = 0; //重复项的第一项
let indexCount = 1; //下一项
while (indexCount < data.length) {
var item = data.slice(count, count + 1)[0]; //获取没有比较的第一个对象
if (!item[`${field}rowSpan`]) {
item[`${field}rowSpan`] = 1; //初始化为1
}
if (item[field] === data[indexCount][field] && item['companyName'] === data[indexCount]['companyName']) {
//第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
item[`${field}rowSpan`]++;
data[indexCount][`${field}rowSpan`] = 0;
} else {
count = indexCount;
}
indexCount++;
}
}
dataSource.value = data;
}
// 列表
const dataSource = ref([]);
// 表头
const columns = [
{
title: '公司名称',
dataIndex: 'companyName',
fixed: 'left',
width: 180,
customCell: (_, any) => ({
rowSpan: _.companyNamerowSpan,
}),
},
{
title: '项目名称',
dataIndex: 'projectName',
width: 180,
},
{
title: '立即投资额(万元)',
dataIndex: 'projectInvestment',
width: 180,
},
{
title: '资金来源',
dataIndex: 'fundingSource',
width: 180,
},
{
title: '招标方式',
dataIndex: 'biddingMethod',
width: 180,
},
{
title: '合同类型',
dataIndex: 'contracYpe',
width: 180,
},
{
title: '合同名称',
dataIndex: 'contractName',
width: 180,
},
{
title: '合同形式',
dataIndex: 'formOfContract',
width: 180,
},
{
title: '合同金额(元)',
dataIndex: 'contractAmount',
width: 180,
},
{
title: '签证变更金额(元)',
dataIndex: 'submittedForSettlement',
width: 180,
},
{
title: '结算报送金额(元)',
dataIndex: 'superContractScale',
width: 180,
},
{
title: '结算审定金额(元)',
dataIndex: 'sumOfMoney',
width: 180,
},
];
const { push } = useRouter();
</script>
<style lang="less" scoped>
::v-deep .ant-table-tbody .ant-table-row {
&.rowcolor .ant-table-cell-fix-left {
background-color: #f5f5f5;
}
}
</style>
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