Commit 5826ca23 authored by mengzixuan's avatar mengzixuan

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

parents f6ad7344 ca3994e4
......@@ -11,7 +11,7 @@ VITE_BUILD_COMPRESS = 'gzip'
# Basic interface address SPA
VITE_GLOB_API_URL = http://58.223.177.48:8088
VITE_GLOB_API_URL = https://dev.unitj.cn
# File upload address, optional
# It can be forwarded by nginx or write the actual address directly
......
......@@ -7,7 +7,7 @@ import {
import { defHttp } from '@/utils/http/axios';
enum Api {
GetList = '/pro/tenderManager/list/page',
GetList = '/pro/tenderManager/page',
AddProject = '/pro/tenderManager/add',
UpdateProject = '/pro/tenderManager/update',
DeleteProject = '/pro/tenderManager/del',
......@@ -33,5 +33,8 @@ export const updateItem = (params?: any) =>
'Content-Type': 'application/json;charset=UTF-8',
},
});
export const deleteItem = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.DeleteProject, 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,
ListItem,
} from './model/biddingPlanModel';
import { defHttp } from '@/utils/http/axios';
enum Api {
GetList = '/pro/tendePlan/page',
AddProject = '/pro/tendePlan/add',
UpdateProject = '/pro/tendePlan/update',
GetList = '/pro/tenderPlan/page',
AddProject = '/pro/tenderPlan/add',
UpdateProject = '/pro/tenderPlan/update',
DeleteProject = '/pro/tenderPlan/del',
ProjectDetail = '/pro/tendePlan/details',
ProjectDetail = '/pro/tenderPlan/details',
}
export const getListByPage = (params?: ProjectPageParams) =>
defHttp.post<ListGetResultModel>({ url: Api.GetList, data: params });
......@@ -28,5 +33,9 @@ export const updateItem = (params?: any) =>
'Content-Type': 'application/json;charset=UTF-8',
},
});
export const deleteItem = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.DeleteProject, params });
export const getItem = (params?: any) =>
defHttp.get<ListItem[]>({ url: Api.ProjectDetail, params });
......@@ -23,7 +23,7 @@ export interface ListItem {
delFlag?: string | number;
}
export interface ProjectModel<T> {
export interface ProjectModel {
id?: string | number;
proNumber?: string | number;
biddingQuarter?: any;
......
......@@ -23,7 +23,7 @@ export interface ListItem {
delFlag?: string | number;
}
export interface ProjectModel<T> {
export interface ProjectModel {
id?: string | number;
proNumber?: string | number;
biddingQuarter?: any;
......
......@@ -24,6 +24,16 @@ const dashboard: AppRouteModule = {
title: '项目库',
},
},
{
path: 'detail',
name: 'project-detail',
component: () => import('@/views/project/detail.vue'),
meta: {
orderNo: 1,
// affix: true,
title: '项目库',
},
},
],
};
......
......@@ -41,8 +41,9 @@
import { getListByPage, deleteItem } from '@/api/project/biddingManagement';
import { columns, searchFormSchema } from './biddingManagement.data';
import { useModal } from '@/components/Modal';
import { router } from '@/router';
import yearModal from '@/components/yearModal.vue';
import { useRouter } from 'vue-router';
const { push } = useRouter();
defineOptions({ name: 'RoleManagement' });
const [registerTable, { reload }] = useTable({
......@@ -72,7 +73,7 @@
}
function handleEdit(record: Recordable, disabled: boolean) {
router.push({
push({
path: '/biddingManagement/edit',
query: {
id: record.id,
......@@ -88,7 +89,7 @@
function handleNew(e) {
console.log(e);
router.push({
push({
path: '/biddingManagement/edit',
query: e,
});
......
......@@ -41,9 +41,9 @@
import { getListByPage, deleteItem } from '@/api/project/biddingPlan';
import { useModal } from '@/components/Modal';
import yearModal from '@/components/yearModal.vue';
import { router } from '@/router';
import { columns, searchFormSchema } from './biddingPlan.data';
import { useRouter } from 'vue-router';
const { push } = useRouter();
const [register, { openModal: openModal }] = useModal();
const [registerTable, { reload }] = useTable({
api: getListByPage,
......@@ -57,7 +57,7 @@
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 80,
width: 150,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
......@@ -72,7 +72,7 @@
}
function handleEdit(record: Recordable, disabled: boolean) {
router.push({
push({
path: '/biddingManagement/edit',
query: {
id: record.id,
......@@ -88,7 +88,7 @@
function handleNew(e) {
console.log(e);
router.push({
push({
path: '/biddingPlan/edit',
query: e,
});
......
<template>
<PageWrapper :class="prefixCls">
<PageCard>
<div class="header">
<div class="header-tab">
<img class="header-tab-logo" src="../../assets/images/logo.png" alt="" />
<div class="header-tab-right">
<div class="header-tab-right-title">{{ detail.projectName }}</div>
<div class="header-tab-right-desc">{{ detail.projectName }}</div>
</div>
</div>
<div class="header-body">
<div class="header-body-item">
<div class="header-body-item-title">实施主体</div>
<div class="header-body-item-value">{{ detail.implementingEntity }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">建设模式</div>
<div class="header-body-item-value">{{ detail.constructionMode }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">建设地点</div>
<div class="header-body-item-value">{{ detail.constructionSite }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">项目类型</div>
<div class="header-body-item-value">{{ detail.projectType }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">资金来源</div>
<div class="header-body-item-value">{{ detail.fundingSource }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">建设规模</div>
<div class="header-body-item-value">{{ detail.constructionScale }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">建设目的及项目功能</div>
<div class="header-body-item-value">{{ detail.constructionPurpose }}</div>
</div>
<div class="header-body-item">
<div class="header-body-item-title">更新人/更新时间</div>
<div class="header-body-item-value"
>{{ detail.updateBy || '--' }}/{{ detail.updateTime || '--' }}</div
>
</div>
</div>
<!-- <Descriptions></Descriptions> -->
</div>
</PageCard>
<BasicTable @register="registerTable">
<template #tabSlot>
<Tabs v-model:activeKey="activeKey" @change="reload()">
<template v-for="item in tabList" :key="item.key">
<TabPane :tab="item.tab" />
</template>
</Tabs>
</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>
</PageWrapper>
</template>
<script lang="ts" setup>
import { Tabs } from 'ant-design-vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage, getItem } from '@/api/project/project';
import { columns, searchFormSchema, tabList } from './project.data';
import { ref, onMounted } from 'vue';
import { useRoute } from 'vue-router';
let detail = ref<any>({});
const activeKey = ref('1');
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: { tabName: activeKey },
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
onMounted(async () => {
const route = useRoute();
const id = route.query.id; // 获取名为id的参数
let res = await getItem({ id });
console.log(res);
detail.value = res;
console.log(detail.value);
});
</script>
<style lang="less" scoped>
.header {
background-color: #ffffff;
margin: 0 16px;
margin-top: 16px;
height: 208px;
&-tab {
padding: 30px;
display: flex;
justify-content: flex-start;
align-items: center;
&-logo {
border-radius: 100%;
width: 72px;
height: 72px;
margin-right: 10px;
}
&-right {
display: flex;
flex-flow: column;
color: #1c1c1c;
&-title {
font-size: 36px;
}
&-desc {
font-size: 14px;
margin-top: 6px;
}
}
}
&-body {
display: flex;
flex-wrap: wrap;
&-item {
flex: 1;
&-title {
text-align: center;
color: #536387;
font-size: 14px;
}
&-value {
text-align: center;
color: #000000;
margin-top: 16px;
font-size: 12px;
}
}
}
}
</style>
......@@ -52,7 +52,7 @@
:actions="[
{
label: '详情',
onClick: handleEdit.bind(null, record, true),
onClick: handleDetail.bind(null, record),
},
{
label: '编辑',
......@@ -83,6 +83,8 @@
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({
......@@ -110,7 +112,14 @@
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);
......
......@@ -211,144 +211,19 @@ export const formSchema: FormSchema[] = [
];
export const searchFormSchema: FormSchema[] = [
{
field: 'projectName',
field: 'year',
label: '',
component: 'Input',
componentProps: {
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: 'Switch',
colProps: {
span: 2,
},
componentProps: {
checkedValue: 'true',
unCheckedValue: 'false',
},
label: '储备项目',
labelWidth: 70,
},
{
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',
component: 'DatePicker',
required: true,
componentProps: {
placeholder: '项目类型',
options: [
{
label: '公共设施配套类',
value: '公共设施配套类',
key: '公共设施配套类',
},
{
label: '基础设施类',
value: '基础设施类',
key: '基础设施类',
},
{
label: '产业载体类',
value: '产业载体类',
key: '产业载体类',
},
{
label: '房地产类',
value: '房地产类',
key: '房地产类',
},
{
label: '存量盘活类',
value: '存量盘活类',
key: '存量盘活类',
},
{
label: '其他类(零星工程)',
value: '其他类(零星工程)',
key: '其他类(零星工程)',
},
],
placeholder: '选择填报周期',
valueFormat: 'YYYY-MM-dd',
format: 'YYYY-MM-dd',
style: {
width: '100%',
},
},
colProps: { span: 3 },
colProps: { span: 5 },
},
];
......@@ -394,3 +269,61 @@ export const columns: BasicColumn[] = [
width: 180,
},
];
export const tabList = [
{
key: '1',
tab: '投资计划',
},
{
key: '2',
tab: '计划完成情况',
},
{
key: '3',
tab: '年度资金计划',
},
{
key: '4',
tab: '月度资金计划',
},
{
key: '5',
tab: '已竣工验收项目陈欠资金计划',
},
{
key: '6',
tab: '招标计划',
},
{
key: '7',
tab: '招标管理',
},
{
key: '8',
tab: '结算管理',
},
{
key: '9',
tab: '变更签证管理',
},
{
key: '10',
tab: '安全隐患管理',
},
{
key: '11',
tab: '安全教育培训',
},
{
key: '12',
tab: '合同管理',
},
{
key: '13',
tab: '附件记录',
},
{
key: '14',
tab: '更新记录',
},
];
......@@ -18,8 +18,8 @@ export default defineApplicationConfig({
server: {
proxy: {
'/api': {
// target: 'https://dev.unitj.cn',
target: 'http://58.223.177.48:8088',
target: 'https://dev.unitj.cn',
// target: 'http://58.223.177.48:8088',
changeOrigin: true,
// ws: false,
rewrite: (path) => path.replace(new RegExp(`^/api`), ''),
......
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