Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
web-project
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
紫光云
web-project
Commits
5826ca23
Commit
5826ca23
authored
Jun 06, 2024
by
mengzixuan
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop
parents
f6ad7344
ca3994e4
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
305 additions
and
156 deletions
+305
-156
.env.production
.env.production
+1
-1
biddingManagement.ts
src/api/project/biddingManagement.ts
+4
-1
biddingPlan.ts
src/api/project/biddingPlan.ts
+14
-5
biddingManagementModel.ts
src/api/project/model/biddingManagementModel.ts
+1
-1
biddingPlanModel.ts
src/api/project/model/biddingPlanModel.ts
+1
-1
project.ts
src/router/routes/modules/project.ts
+10
-0
index.vue
src/views/biddingManagement/index.vue
+4
-3
index.vue
src/views/biddingPlan/index.vue
+5
-5
detail.vue
src/views/project/detail.vue
+184
-0
index.vue
src/views/project/index.vue
+11
-2
project.data.ts
src/views/project/project.data.ts
+68
-135
vite.config.ts
vite.config.ts
+2
-2
No files found.
.env.production
View file @
5826ca23
...
...
@@ -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 = http
s://dev.unitj.cn
# File upload address, optional
# It can be forwarded by nginx or write the actual address directly
...
...
src/api/project/biddingManagement.ts
View file @
5826ca23
...
...
@@ -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
});
src/api/project/biddingPlan.ts
View file @
5826ca23
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/tende
r
Plan/page'
,
AddProject
=
'/pro/tende
r
Plan/add'
,
UpdateProject
=
'/pro/tende
r
Plan/update'
,
DeleteProject
=
'/pro/tenderPlan/del'
,
ProjectDetail
=
'/pro/tendePlan/details'
,
ProjectDetail
=
'/pro/tende
r
Plan/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
});
src/api/project/model/biddingManagementModel.ts
View file @
5826ca23
...
...
@@ -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
;
...
...
src/api/project/model/biddingPlanModel.ts
View file @
5826ca23
...
...
@@ -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
;
...
...
src/router/routes/modules/project.ts
View file @
5826ca23
...
...
@@ -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
:
'项目库'
,
},
},
],
};
...
...
src/views/biddingManagement/index.vue
View file @
5826ca23
...
...
@@ -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
,
});
...
...
src/views/biddingPlan/index.vue
View file @
5826ca23
...
...
@@ -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
:
8
0
,
width
:
15
0
,
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
,
});
...
...
src/views/project/detail.vue
0 → 100644
View file @
5826ca23
<
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
>
src/views/project/index.vue
View file @
5826ca23
...
...
@@ -52,7 +52,7 @@
:actions=
"[
{
label: '详情',
onClick: handle
Edit.bind(null, record, true
),
onClick: handle
Detail.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);
...
...
src/views/project/project.data.ts
View file @
5826ca23
...
...
@@ -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
:
'更新记录'
,
},
];
vite.config.ts
View file @
5826ca23
...
...
@@ -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`
),
''
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment