Commit 50c111d7 authored by jiaxu.yan's avatar jiaxu.yan

feat: 完成月度

parent 0cf9d504
import { BasicPageParams, BasicFetchResult } from '@/api/model/baseModel';
export type ProjectParams = {
projectName?: string;
};
export type ProjectPageParams = BasicPageParams & ProjectParams;
export interface ProjectListItem {
id: string;
projectName: string;
isReserveProject: string;
constructionSite: string;
constructionMode: string;
projectType: string;
projectOverview: string;
constructionPurpose: string;
delFlag: string;
constructionScale: string;
fundingSource: string;
implementingEntity: string;
logo: string;
createTime: null;
createBy: string;
updateTime: null;
updateBy: string;
}
export interface ProjectModel {
id?: string | number;
constructionMode: string;
isReserveProject: string;
projectType: string;
projectOverview: string;
constructionPurpose: string;
}
export interface ProjectCountModel {
counttotal: number;
countbuildbyoneself: number;
countbuildbyentrust: number;
countbuildbyreplace: number;
countbuildbyhold: number;
countreserve: number;
}
export type ProjectListGetResultModel = BasicFetchResult<ProjectListItem>;
......@@ -33,5 +33,12 @@ export interface ProjectModel {
projectOverview: string;
constructionPurpose: string;
}
export interface ProjectCountModel {
counttotal: number;
countbuildbyoneself: number;
countbuildbyentrust: number;
countbuildbyreplace: number;
countbuildbyhold: number;
countreserve: number;
}
export type ProjectListGetResultModel = BasicFetchResult<ProjectListItem>;
import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
import {
ProjectParams,
ProjectListGetResultModel,
ProjectModel,
} from './model/projectModel';
import { defHttp } from '@/utils/http/axios';
enum Api {
GetList = '/pro/monthEngineer/page',
GetMonthlyPlanProjectList = '/pro/fundPlanYear/selectplan',
AddProject = '/pro/monthEngineer/add',
UpdateProject = '/pro/monthEngineer/update',
DeleteProject = '/pro/monthEngineer/delInTable',
ProjectDetail = '/pro/monthEngineer/details',
Itemdelete = '/pro/monthEngineer/delByDetail',
audit = '/pro/monthEngineer/audit',
}
export const getMonthlyPlanList = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
export const getMonthlyPlanProjectList = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetMonthlyPlanProjectList, data: params });
export const addItem = (params?: any) =>
defHttp.post<ProjectModel>({
url: Api.AddProject,
data: params,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});
export const updateItem = (params?: any) =>
defHttp.post<ProjectModel>({
url: Api.UpdateProject,
data: params,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});
export const auditItem = (params?: any) =>
defHttp.get<ProjectModel>({
url: Api.audit,
params,
});
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<ProjectModel>({ url: Api.ProjectDetail, params });
......@@ -3,6 +3,7 @@ import {
ProjectListGetResultModel,
ProjectModel,
ProjectListItem,
ProjectCountModel
} from './model/projectModel';
import { defHttp } from '@/utils/http/axios';
......@@ -12,6 +13,7 @@ enum Api {
UpdateProject = '/pro/project/update',
DeleteProject = '/pro/project/del',
ProjectDetail = '/pro/project/details',
ProjectCount = '/pro/project/count',
}
export const getListByPage = (params?: ProjectParams) =>
defHttp.post<ProjectListGetResultModel>({ url: Api.GetList, data: params });
......@@ -27,3 +29,6 @@ export const deleteItem = (params?: any) =>
export const getItem = (params?: any) =>
defHttp.get<ProjectListItem>({ url: Api.ProjectDetail, params });
export const getProjectCount = (params?: any) =>
defHttp.post<ProjectCountModel>({ url: Api.ProjectCount, params });
......@@ -3,7 +3,7 @@
width="70%"
v-bind="$attrs"
@register="register"
title="选择项目导入"
title="选择合同导入"
:minHeight="30"
okText="导入"
@ok="handleSubmit"
......
......@@ -64,6 +64,24 @@
colProps: { span: 11, offset: 1 },
});
}
if (i == 'month') {
schemas.push({
field: 'month',
label: '',
component: 'DatePicker',
required: true,
componentProps: {
placeholder: '月份',
picker: 'month',
valueFormat: 'YYYY-MM',
format: 'YYYY-MM',
style: {
width: '100%',
},
},
colProps: { span: 11, offset: 1 },
});
}
if (i == 'quarter') {
schemas.push({
field: 'quarter',
......
......@@ -42,7 +42,7 @@ const monthlyPlan: {
component: () => import('@/views/monthlyPlan/monthlyPlanEdit/monthlyPlanEdit.vue'),
meta: {
// affix: true,
title: '新建计划(工程)',
title: '月度工程资金计划',
orderNo: 8,
},
},
......
......@@ -2,31 +2,56 @@
<div>
<BasicTable @register="registerTable" :title="'月度工程资金计划'">
<template #toolbar>
<a-button class="btn" type="primary" @click="addMonthlyPlan"> 新建月度工程资金计划 </a-button>
<a-button class="btn" type="primary" @click="addMonthlyPlan">
新建月度工程资金计划
</a-button>
</template>
<template #bodyCell="{ column, text, record, index }">
<!-- 当前列是序号列时,显示序号 -->
<span v-if="column.dataIndex === 'serialNumber'">{{ index + 1 }}</span>
<!-- 其他列正常显示 -->
<span v-else>{{ text }}</span>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record),
label: '详情',
onClick: handleEdit.bind(null, record, 1),
ifShow: (_action) => {
return record.reviewStatus == '1';
},
},
{
label: '修改',
onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => {
return record.reviewStatus == 0;
},
},
{
icon: 'ant-design:delete-outlined',
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
ifShow: (_action) => {
return record.reviewStatus == 0;
},
},
{
label: '审核',
color: 'success',
popConfirm: {
title: '是否确认审核',
placement: 'left',
confirm: examine.bind(null, record, true),
},
ifShow: (_action) => {
return record.reviewStatus == 0;
},
},
]"
/>
......@@ -37,26 +62,25 @@
</div>
</template>
<script lang="ts" setup>
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getMonthlyPlanList } from '@/api/project/monthlyPlan';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getMonthlyPlanList, deleteItem, auditItem } from '@/api/project/monthlyPlan';
import { getListByPage } from '@/api/project/biddingPlan';
import { useDrawer } from '@/components/Drawer';
import { useDrawer } from '@/components/Drawer';
import { columns, searchFormSchema } from './data';
import { columns, searchFormSchema } from './data';
defineOptions({ name: 'MonthlyPlan' });
defineOptions({ name: 'MonthlyPlan' });
import yearModal from '@/components/yearModal.vue';
import yearModal from '@/components/yearModal.vue';
import { useModal } from '@/components/Modal';
import { useModal } from '@/components/Modal';
import { useRouter } from 'vue-router';
const { push } = useRouter();
import {router} from "@/router";
const [register, { openModal: openModal }] = useModal();
const [register, { openModal: openModal }] = useModal();
const [registerTable, { reload }] = useTable({
const [registerTable, { reload }] = useTable({
api: getMonthlyPlanList,
title: '123',
columns,
......@@ -69,50 +93,54 @@ const [registerTable, { reload }] = useTable({
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 80,
width: 220,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleEdit(record: Recordable) {
openDrawer(true, {
record,
isUpdate: true,
});
}
function handleDelete(record: Recordable) {
console.log(record);
}
function handleEdit(record: Recordable, disabled: number) {
push({
path: '/monthlyPlan/monthlyPlanEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
function handleSuccess() {
function handleDelete(record: Recordable) {
deleteItem({ id: record.id });
reload();
}
}
const change = (key: string) => {
function handleSuccess() {
reload();
};
}
const addMonthlyPlan = () => {
async function examine(record: Recordable, disabled: boolean) {
const id = record.id;
const res = await auditItem({ id });
console.log(res);
reload();
}
const addMonthlyPlan = () => {
openModal(true, {
data: ['year'],
data: ['month'],
});
};
};
const handleNew = (e) => {
console.log('eeee', e);
router.push({
const handleNew = (e) => {
push({
path: '/monthlyPlan/monthlyPlanEdit',
query: e,
});
};
};
</script>
<style scoped>
.btn {
.btn {
margin-right: 10px;
}
}
</style>
......@@ -7,28 +7,46 @@
<div class="title">项目总数</div>
<div class="content">
<img :class="`${prefixCls}__top-img`" src="../../assets/images/group.png" />
<span><p>100</p></span>
<span
><p>{{ countData.counttotal }}</p
></span
>
</div>
</Col>
<Col :span="4" :class="`${prefixCls}__top-col`">
<div class="title">自建</div>
<span><p>100</p></span>
<span
><p>{{ countData.countbuildbyoneself }}</p
></span
>
</Col>
<Col :span="4" :class="`${prefixCls}__top-col`">
<div class="title">委托建设</div>
<span><p>100</p></span>
<span
><p>{{ countData.countbuildbyentrust }}</p
></span
>
</Col>
<Col :span="4" :class="`${prefixCls}__top-col`">
<div class="title">代建</div>
<span><p>100</p></span>
<span
><p>{{ countData.countbuildbyreplace }}</p
></span
>
</Col>
<Col :span="4" :class="`${prefixCls}__top-col`">
<div class="title">承建</div>
<span><p>100</p></span>
<span
><p>{{ countData.countbuildbyhold }}</p
></span
>
</Col>
<Col :span="4" :class="`${prefixCls}__top-col`">
<div class="title">储备</div>
<span><p>100</p></span>
<span
><p>{{ countData.countreserve }}</p
></span
>
</Col>
</Row>
</div>
......@@ -78,12 +96,14 @@
<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 { getListByPage, deleteItem, getProjectCount } 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';
import { onMounted, ref } from 'vue';
const countData = ref({});
const { push } = useRouter();
const [registerDrawer, { openDrawer }] = useDrawer();
const prefixCls = 'list-basic';
......@@ -139,6 +159,11 @@
function handleSuccess() {
reload();
}
onMounted(async () => {
let res = await getProjectCount();
console.log(res);
countData.value = res;
});
</script>
<style lang="less" scoped>
.list-basic {
......
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