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
1f7440e7
Commit
1f7440e7
authored
Jun 04, 2024
by
jiaxu.yan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 项目库模块
parent
a368382b
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
959 additions
and
113 deletions
+959
-113
.env.development
.env.development
+1
-1
settings.json
.vscode/settings.json
+7
-0
biddingPlan.ts
src/api/project/biddingPlan.ts
+6
-2
projectModel.ts
src/api/project/model/projectModel.ts
+2
-2
biddingManagement.ts
src/router/routes/modules/biddingManagement.ts
+1
-1
biddingPlan.ts
src/router/routes/modules/biddingPlan.ts
+10
-0
biddingPlan.data.ts
src/views/biddingManagement/biddingPlan.data.ts
+133
-0
biddingPlanEdit.vue
src/views/biddingManagement/biddingPlanEdit.vue
+110
-0
index.vue
src/views/biddingManagement/index.vue
+84
-0
biddingPlanEdit.vue
src/views/biddingPlan/biddingPlanEdit.vue
+110
-0
index.vue
src/views/biddingPlan/index.vue
+4
-4
data.tsx
src/views/project/data.tsx
+0
-17
index.vue
src/views/project/index.vue
+148
-82
project.data.ts
src/views/project/project.data.ts
+339
-0
projectDrawer.vue
src/views/project/projectDrawer.vue
+4
-4
No files found.
.env.development
View file @
1f7440e7
...
...
@@ -8,7 +8,7 @@ VITE_PUBLIC_PATH = /
VITE_GLOB_API_URL = /api
# File upload address, optional
VITE_GLOB_UPLOAD_URL =
/upload
VITE_GLOB_UPLOAD_URL =
'/api/system/file/add'
# Interface prefix
VITE_GLOB_API_URL_PREFIX =
.vscode/settings.json
0 → 100644
View file @
1f7440e7
{
"i18n-ally.localesPaths"
:
[
"src/locales"
,
"src/locales/lang"
,
"public/resource/tinymce/langs"
]
}
\ No newline at end of file
src/api/project/biddingPlan.ts
View file @
1f7440e7
import
{
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
}
from
'./model/biddingPlanModel'
;
import
{
ProjectPageParams
,
ProjectListGetResultModel
,
ProjectModel
,
}
from
'./model/biddingPlanModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
enum
Api
{
...
...
@@ -6,7 +10,7 @@ enum Api {
AddProject
=
'/mgapi/project/projectManage/add'
,
UpdateProject
=
'/mgapi/project/projectManage/update'
,
}
export
const
getListByPage
=
(
params
?:
ProjectParams
)
=>
export
const
getListByPage
=
(
params
?:
ProjectPa
gePa
rams
)
=>
defHttp
.
post
<
ProjectListGetResultModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
export
const
addItem
=
(
params
?:
any
)
=>
...
...
src/api/project/model/projectModel.ts
View file @
1f7440e7
import
{
BasicPageParams
}
from
'@/api/model/baseModel'
;
import
{
BasicPageParams
,
BasicFetchResult
}
from
'@/api/model/baseModel'
;
export
type
ProjectParams
=
{
projectName
?:
string
;
...
...
@@ -34,4 +34,4 @@ export interface ProjectModel {
constructionPurpose
:
string
;
}
export
type
ProjectListGetResultModel
=
ProjectListItem
[]
;
export
type
ProjectListGetResultModel
=
BasicFetchResult
<
ProjectListItem
>
;
src/router/routes/modules/biddingManagement.ts
View file @
1f7440e7
...
...
@@ -17,7 +17,7 @@ const biddingManagement: AppRouteModule = {
{
path
:
'index'
,
name
:
'biddingManagement'
,
component
:
()
=>
import
(
'@/views/
dashboard/analysis
/index.vue'
),
component
:
()
=>
import
(
'@/views/
biddingManagement
/index.vue'
),
meta
:
{
// affix: true,
title
:
'招标管理'
,
...
...
src/router/routes/modules/biddingPlan.ts
View file @
1f7440e7
...
...
@@ -24,6 +24,16 @@ const biddingPlan: AppRouteModule = {
orderNo
:
2
,
},
},
{
path
:
'edit'
,
name
:
'planEdit'
,
component
:
()
=>
import
(
'@/views/biddingPlan/biddingPlanEdit.vue'
),
meta
:
{
// affix: true,
title
:
'招标计划'
,
orderNo
:
2
,
},
},
],
};
...
...
src/views/biddingManagement/biddingPlan.data.ts
0 → 100644
View file @
1f7440e7
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
h
}
from
'vue'
;
import
{
Switch
}
from
'ant-design-vue'
;
import
{
setRoleStatus
}
from
'@/api/demo/system'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
type
CheckedType
=
boolean
|
string
|
number
;
export
const
columns
:
BasicColumn
[]
=
[
{
title
:
'项目名称'
,
dataIndex
:
'project_name'
,
width
:
200
,
},
{
title
:
'实施主体'
,
dataIndex
:
'implementing_entity'
,
width
:
180
,
},
{
title
:
'建设模式'
,
dataIndex
:
'construction_mode'
,
width
:
180
,
},
{
title
:
'项目类型'
,
dataIndex
:
'project_type'
,
width
:
180
,
},
{
title
:
'资金来源'
,
dataIndex
:
'funding_source'
,
width
:
180
,
},
{
title
:
'建设目的及项目功能'
,
dataIndex
:
'construction_purpose'
,
width
:
180
,
},
{
title
:
'建设规模'
,
dataIndex
:
'国construction_scale'
,
width
:
180
,
},
];
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
field
:
'ProjecName'
,
label
:
''
,
component
:
'Input'
,
componentProps
:
{
placeholder
:
'点击选择图标'
,
},
colProps
:
{
span
:
4
},
},
{
field
:
'ProjecName'
,
label
:
''
,
component
:
'Input'
,
componentProps
:
{
placeholder
:
'点击选择图标'
,
},
colProps
:
{
span
:
4
},
},
// {
// field: 'status',
// label: '状态',
// component: 'Select',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// colProps: { span: 8 },
// },
];
export
const
formSchema
:
FormSchema
[]
=
[
{
field
:
'projectName'
,
label
:
'项目名称'
,
required
:
true
,
component
:
'Input'
,
},
{
field
:
'isReserveProject'
,
label
:
'是否为储备项目'
,
component
:
'RadioButtonGroup'
,
defaultValue
:
'0'
,
componentProps
:
{
options
:
[
{
label
:
'是'
,
value
:
'1'
},
{
label
:
'否'
,
value
:
'0'
},
],
},
},
// {
// field: 'status',
// label: '状态',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// },
{
label
:
'建设模式'
,
field
:
'constructionMode'
,
component
:
'InputTextArea'
,
},
{
label
:
'项目类型'
,
field
:
'projectType'
,
required
:
true
,
component
:
'Input'
,
},
{
label
:
'项目概况'
,
field
:
'projectOverview'
,
required
:
true
,
component
:
'InputTextArea'
,
},
{
label
:
'建设目的及项目功能'
,
field
:
'constructionPurpose'
,
required
:
true
,
component
:
'InputTextArea'
,
},
];
src/views/biddingManagement/biddingPlanEdit.vue
0 → 100644
View file @
1f7440e7
<
template
>
<PageWrapper
title=
"单号:234231029431"
contentBackground
headerSticky
>
<template
#
extra
>
<a-button>
操作一
</a-button>
<a-button>
操作二
</a-button>
<a-button
type=
"primary"
>
主操作
</a-button>
</
template
>
<
template
#
footer
>
<Tabs
default-active-key=
"1"
>
<Tabs
.
TabPane
key=
"1"
tab=
"详情"
/>
<Tabs
.
TabPane
key=
"2"
tab=
"规则"
/>
</Tabs>
</
template
>
<div
class=
"pt-4 m-4 desc-wrap"
>
<Descriptions
size=
"small"
:column=
"2"
>
<Descriptions
.
Item
label=
"创建人"
>
曲丽丽
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"订购产品"
>
XX 服务
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"创建时间"
>
2017-01-10
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"关联单据"
>
<a>
12421
</a>
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"生效日期"
>
2017-07-07 ~ 2017-08-08
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"备注"
>
请于两个工作日内确认
</Descriptions
.Item
>
</Descriptions>
<Card
title=
"流程进度"
:bordered=
"false"
>
<Steps
:current=
"1"
progress-dot
size=
"small"
>
<Steps
.
Step
title=
"创建项目"
>
<
template
#
description
>
<div>
Vben
</div>
<p>
2016-12-12 12:32
</p>
</
template
>
</Steps
.Step
>
<Steps
.
Step
title=
"部门初审"
>
<
template
#
description
>
<p>
Chad
</p>
</
template
>
</Steps
.Step
>
<Steps
.
Step
title=
"财务复核"
/>
<Steps
.
Step
title=
"完成"
/>
</Steps>
</Card>
<Card
title=
"用户信息"
:bordered=
"false"
class=
"mt-5"
>
<Descriptions
:column=
"3"
>
<Descriptions
.
Item
label=
"用户姓名"
>
付小小
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"会员卡号"
>
XX 32943898021309809423
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"身份证"
>
3321944288191034921
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"联系方式"
>
18112345678
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"联系地址"
:span=
"2"
>
曲丽丽 18100000000 浙江省杭州市西湖区黄姑山路工专路交叉路口
</Descriptions
.Item
>
</Descriptions>
<Descriptions
title=
"信息组"
:column=
"3"
>
<Descriptions
.
Item
label=
"某某数据"
>
111
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"该数据更新时间"
>
2017-08-08
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"某某数据"
>
725
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"该数据更新时间"
>
2017-08-08
</Descriptions
.Item
>
</Descriptions>
<h4>
信息组
</h4>
<Card
title=
"多层级信息组"
>
<Descriptions
title=
"组名称"
:column=
"3"
>
<Descriptions
.
Item
label=
"负责人"
>
林东东
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"角色码"
>
1234567
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"所属部门"
>
XX公司 - YY部
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"过期时间"
>
2017-08-08
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"描述"
:span=
"2"
>
这段描述很长很长很长很长很长很长很长很长很长很长很长很长很长很长...
</Descriptions
.Item
>
</Descriptions>
<Divider
/>
<Descriptions
title=
"组名称"
:column=
"1"
>
<Descriptions
.
Item
label=
"学名"
>
Citrullus lanatus (Thunb.) Matsum. et
Nakai一年生蔓生藤本;茎、枝粗壮,具明显的棱。卷须较粗..
</Descriptions
.Item
>
</Descriptions>
<Divider
/>
<Descriptions
title=
"组名称"
:column=
"1"
>
<Descriptions
.
Item
label=
"负责人"
>
付小小
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"角色码"
>
1234568
</Descriptions
.Item
>
</Descriptions>
</Card>
</Card>
<Card
title=
"用户近半年来电记录"
class=
"my-5"
>
<Empty
/>
</Card>
<BasicTable
@
register=
"registerTimeTable"
/>
</div>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicTable
,
useTable
}
from
'@/components/Table'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
Divider
,
Card
,
Empty
,
Descriptions
,
Steps
,
Tabs
}
from
'ant-design-vue'
;
import
{
refundTimeTableSchema
,
refundTimeTableData
}
from
'./data'
;
const
[
registerTimeTable
]
=
useTable
({
title
:
'退货进度'
,
columns
:
refundTimeTableSchema
,
pagination
:
false
,
dataSource
:
refundTimeTableData
,
showIndexColumn
:
false
,
scroll
:
{
y
:
300
},
});
</
script
>
src/views/biddingManagement/index.vue
0 → 100644
View file @
1f7440e7
<
template
>
<div>
<BasicTable
@
register=
"registerTable"
:title=
"'招标管理'"
>
<template
#
toolbar
>
<a-button
type=
"primary"
icon=
""
@
click=
"handleCreate"
>
新增招标计划
</a-button>
</
template
>
<
template
#
bodyCell=
"{ column, record }"
>
<template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</
template
>
</template>
</BasicTable>
<!-- <biddingPlanDrawer @register="registerDrawer" @success="handleSuccess" /> -->
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
// import biddingPlanDrawer from './biddingPlanDrawer.vue';
import
{
columns
,
searchFormSchema
}
from
'./biddingPlan.data'
;
defineOptions
({
name
:
'RoleManagement'
});
import
{
useDrawer
}
from
'@/components/Drawer'
;
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
80
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleCreate
()
{
openDrawer
(
true
,
{
isUpdate
:
false
,
});
}
function
handleEdit
(
record
:
Recordable
)
{
openDrawer
(
true
,
{
record
,
isUpdate
:
true
,
});
}
function
handleDelete
(
record
:
Recordable
)
{
console
.
log
(
record
);
}
function
handleSuccess
()
{
reload
();
}
</
script
>
src/views/biddingPlan/biddingPlanEdit.vue
0 → 100644
View file @
1f7440e7
<
template
>
<PageWrapper
title=
"单号:234231029431"
contentBackground
headerSticky
>
<template
#
extra
>
<a-button>
操作一
</a-button>
<a-button>
操作二
</a-button>
<a-button
type=
"primary"
>
主操作
</a-button>
</
template
>
<
template
#
footer
>
<Tabs
default-active-key=
"1"
>
<Tabs
.
TabPane
key=
"1"
tab=
"详情"
/>
<Tabs
.
TabPane
key=
"2"
tab=
"规则"
/>
</Tabs>
</
template
>
<div
class=
"pt-4 m-4 desc-wrap"
>
<Descriptions
size=
"small"
:column=
"2"
>
<Descriptions
.
Item
label=
"创建人"
>
曲丽丽
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"订购产品"
>
XX 服务
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"创建时间"
>
2017-01-10
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"关联单据"
>
<a>
12421
</a>
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"生效日期"
>
2017-07-07 ~ 2017-08-08
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"备注"
>
请于两个工作日内确认
</Descriptions
.Item
>
</Descriptions>
<Card
title=
"流程进度"
:bordered=
"false"
>
<Steps
:current=
"1"
progress-dot
size=
"small"
>
<Steps
.
Step
title=
"创建项目"
>
<
template
#
description
>
<div>
Vben
</div>
<p>
2016-12-12 12:32
</p>
</
template
>
</Steps
.Step
>
<Steps
.
Step
title=
"部门初审"
>
<
template
#
description
>
<p>
Chad
</p>
</
template
>
</Steps
.Step
>
<Steps
.
Step
title=
"财务复核"
/>
<Steps
.
Step
title=
"完成"
/>
</Steps>
</Card>
<Card
title=
"用户信息"
:bordered=
"false"
class=
"mt-5"
>
<Descriptions
:column=
"3"
>
<Descriptions
.
Item
label=
"用户姓名"
>
付小小
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"会员卡号"
>
XX 32943898021309809423
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"身份证"
>
3321944288191034921
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"联系方式"
>
18112345678
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"联系地址"
:span=
"2"
>
曲丽丽 18100000000 浙江省杭州市西湖区黄姑山路工专路交叉路口
</Descriptions
.Item
>
</Descriptions>
<Descriptions
title=
"信息组"
:column=
"3"
>
<Descriptions
.
Item
label=
"某某数据"
>
111
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"该数据更新时间"
>
2017-08-08
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"某某数据"
>
725
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"该数据更新时间"
>
2017-08-08
</Descriptions
.Item
>
</Descriptions>
<h4>
信息组
</h4>
<Card
title=
"多层级信息组"
>
<Descriptions
title=
"组名称"
:column=
"3"
>
<Descriptions
.
Item
label=
"负责人"
>
林东东
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"角色码"
>
1234567
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"所属部门"
>
XX公司 - YY部
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"过期时间"
>
2017-08-08
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"描述"
:span=
"2"
>
这段描述很长很长很长很长很长很长很长很长很长很长很长很长很长很长...
</Descriptions
.Item
>
</Descriptions>
<Divider
/>
<Descriptions
title=
"组名称"
:column=
"1"
>
<Descriptions
.
Item
label=
"学名"
>
Citrullus lanatus (Thunb.) Matsum. et
Nakai一年生蔓生藤本;茎、枝粗壮,具明显的棱。卷须较粗..
</Descriptions
.Item
>
</Descriptions>
<Divider
/>
<Descriptions
title=
"组名称"
:column=
"1"
>
<Descriptions
.
Item
label=
"负责人"
>
付小小
</Descriptions
.Item
>
<Descriptions
.
Item
label=
"角色码"
>
1234568
</Descriptions
.Item
>
</Descriptions>
</Card>
</Card>
<Card
title=
"用户近半年来电记录"
class=
"my-5"
>
<Empty
/>
</Card>
<BasicTable
@
register=
"registerTimeTable"
/>
</div>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicTable
,
useTable
}
from
'@/components/Table'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
Divider
,
Card
,
Empty
,
Descriptions
,
Steps
,
Tabs
}
from
'ant-design-vue'
;
import
{
refundTimeTableSchema
,
refundTimeTableData
}
from
'./data'
;
const
[
registerTimeTable
]
=
useTable
({
title
:
'退货进度'
,
columns
:
refundTimeTableSchema
,
pagination
:
false
,
dataSource
:
refundTimeTableData
,
showIndexColumn
:
false
,
scroll
:
{
y
:
300
},
});
</
script
>
src/views/biddingPlan/index.vue
View file @
1f7440e7
...
...
@@ -26,20 +26,20 @@
</
template
>
</template>
</BasicTable>
<
biddingPlanDrawer
@
register=
"registerDrawer"
@
success=
"handleSuccess"
/
>
<
!-- <biddingPlanDrawer @register="registerDrawer" @success="handleSuccess" /> --
>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
import
biddingPlanDrawer
from
'./biddingPlanDrawer.vue'
;
//
import biddingPlanDrawer from './biddingPlanDrawer.vue';
import
{
columns
,
searchFormSchema
}
from
'./biddingPlan.data'
;
defineOptions
({
name
:
'RoleManagement'
});
import
{
useDrawer
}
from
'@/components/Drawer'
;
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
...
...
src/views/project/data.tsx
deleted
100644 → 0
View file @
a368382b
export
const
cardList
=
(()
=>
{
const
result
:
any
[]
=
[];
for
(
let
i
=
0
;
i
<
6
;
i
++
)
{
result
.
push
({
id
:
i
,
title
:
'Vben Admin'
,
description
:
'基于Vue Next, TypeScript, Ant Design Vue实现的一套完整的企业级后台管理系统'
,
datetime
:
'2020-11-26 17:39'
,
extra
:
'编辑'
,
icon
:
'logos:vue'
,
color
:
'#1890ff'
,
author
:
'Vben'
,
percent
:
20
*
(
i
+
1
),
});
}
return
result
;
})();
src/views/project/index.vue
View file @
1f7440e7
...
...
@@ -3,17 +3,29 @@
<PageCard
title=
"数据简报"
>
<div
:class=
"`$
{prefixCls}__top`">
<Row
:gutter=
"12"
>
<Col
:span=
"
8
"
:class=
"`$
{prefixCls}__top-col`">
<div>
我的待办
</div>
<p>
8个任务
</p>
<Col
:span=
"
4
"
:class=
"`$
{prefixCls}__top-col`">
<div>
项目总数
</div>
<p>
100
</p>
</Col>
<Col
:span=
"
8
"
:class=
"`$
{prefixCls}__top-col`">
<div>
本周任务平均处理时间
</div>
<p>
32分钟
</p>
<Col
:span=
"
4
"
:class=
"`$
{prefixCls}__top-col`">
<div>
自建
</div>
<p>
100
</p>
</Col>
<Col
:span=
"8"
:class=
"`$
{prefixCls}__top-col`">
<div>
本周完成任务数
</div>
<p>
24个任务
</p>
<Col
:span=
"4"
:class=
"`$
{prefixCls}__top-col`">
<div>
委托建设
</div>
<p>
100
</p>
</Col>
<Col
:span=
"4"
:class=
"`$
{prefixCls}__top-col`">
<div>
代建
</div>
<p>
100
</p>
</Col>
<Col
:span=
"4"
:class=
"`$
{prefixCls}__top-col`">
<div>
承建
</div>
<p>
100
</p>
</Col>
<Col
:span=
"4"
:class=
"`$
{prefixCls}__top-col`">
<div>
储备
</div>
<p>
100
</p>
</Col>
</Row>
</div>
...
...
@@ -21,91 +33,137 @@
<PageCard
title=
"项目列表"
>
<div
:class=
"`$
{prefixCls}__content`">
<BasicForm
submitOnReset
@
register=
"register"
@
submit=
"handleSearchInfoChange"
/>
<List
:pagination=
"pagination"
>
<template
v-for=
"item in cardList"
:key=
"item.id"
>
<List
.
Item
class=
"list"
>
<List
.
Item
.
Meta
>
<template
#
avatar
>
<Icon
class=
"icon"
v-if=
"item.icon"
:icon=
"item.icon"
:color=
"item.color"
/>
</
template
>
<
template
#
title
>
<span>
{{
item
.
title
}}
</span>
<div
class=
"extra"
v-if=
"item.extra"
>
{{
item
.
extra
}}
</div>
</
template
>
<
template
#
description
>
<div
class=
"description"
>
{{
item
.
description
}}
</div>
<div
class=
"info"
>
<div><span>
Owner
</span>
{{
item
.
author
}}
</div>
<div><span>
开始时间
</span>
{{
item
.
datetime
}}
</div>
</div>
<div
class=
"progress"
>
<Progress
:percent=
"item.percent"
status=
"active"
/>
<div>
<a-button
type=
"primary"
icon=
""
@
click=
"handleCreate"
>
创建项目
</a-button>
</div>
<List
:loading=
"loading"
:pagination=
"paginationProp"
:data-source=
"data"
>
<template
#
header
>
<Row
:gutter=
"12"
>
<Col
:span=
"4"
:class=
"`$
{prefixCls}__list-header`">基本信息
</Col>
<Col
:span=
"2"
:class=
"`$
{prefixCls}__list-header`">实施主体
</Col>
<Col
:span=
"2"
:class=
"`$
{prefixCls}__list-header`">建设模式
</Col>
<Col
:span=
"2"
:class=
"`$
{prefixCls}__list-header`">建设地点
</Col>
<Col
:span=
"2"
:class=
"`$
{prefixCls}__list-header`">项目类型
</Col>
<Col
:span=
"2"
:class=
"`$
{prefixCls}__list-header`">资金来源
</Col>
<Col
:span=
"4"
:class=
"`$
{prefixCls}__list-header`">建设目的及项目功能
</Col>
<Col
:span=
"3"
:class=
"`$
{prefixCls}__list-header`">建设规模
</Col>
<Col
:span=
"3"
>
操作
</Col>
</Row>
</
template
>
</List
.Item.Meta
>
</List
.Item
>
<
template
#
renderItem=
"{ item }"
>
<Row
:gutter=
"12"
>
<Col
:span=
"4"
>
基本信息
</Col>
<Col
:span=
"2"
>
{{
item
.
implementing_entity
}}
</Col>
<Col
:span=
"2"
>
{{
item
.
construction_mode
}}
</Col>
<Col
:span=
"2"
>
{{
item
.
construction_site
}}
</Col>
<Col
:span=
"2"
>
{{
item
.
project_type
}}
</Col>
<Col
:span=
"2"
>
{{
item
.
funding_source
}}
</Col>
<Col
:span=
"4"
>
{{
item
.
construction_purpose
}}
</Col>
<Col
:span=
"3"
>
{{
item
.
construction_scale
}}
</Col>
<Col
:span=
"3"
>
操作
</Col>
</Row>
</
template
>
</List>
</div>
</PageCard>
<projectDrawer
@
register=
"registerDrawer"
@
success=
"handleSuccess"
/>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
Progress
,
Row
,
Col
,
List
}
from
'ant-design-vue'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
import
{
cardList
}
from
'./data'
;
import
{
Row
,
Col
,
List
,
Pagination
}
from
'ant-design-vue'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
PageCard
from
'@/components/Page/src/PageCard.vue'
;
import
{
BasicForm
,
FormSchema
,
useForm
}
from
'@/components/Form'
;
import
{
unref
,
computed
}
from
'vue'
;
import
type
{
FormProps
}
from
'@/components/Form'
;
const
schemas
:
FormSchema
[]
=
[
{
field
:
'ProjecName'
,
label
:
''
,
component
:
'Input'
,
componentProps
:
{
placeholder
:
'点击选择图标'
,
},
colProps
:
{
span
:
4
},
},
{
field
:
'ProjecName'
,
label
:
''
,
component
:
'Input'
,
componentProps
:
{
placeholder
:
'点击选择图标'
,
},
colProps
:
{
span
:
4
},
},
];
import
{
BasicForm
,
useForm
}
from
'@/components/Form'
;
import
{
ref
,
onMounted
}
from
'vue'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
import
{
merge
}
from
'lodash-es'
;
import
projectDrawer
from
'./projectDrawer.vue'
;
import
{
searchFormSchema
}
from
'./project.data'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
const
data
=
ref
([]);
const
prefixCls
=
'list-basic'
;
//分页相关
const
page
=
ref
(
1
);
const
pageSize
=
ref
(
10
);
const
total
=
ref
(
0
);
let
params
=
ref
({});
const
loading
=
ref
(
false
);
const
[
register
]
=
useForm
({
schemas
,
schemas
:
searchFormSchema
,
compact
:
true
,
actionColOptions
:
{
span
:
6
},
showActionButtonGroup
:
true
,
});
const
prefixCls
=
'list-basic'
;
const
pagination
=
{
show
:
true
,
pageSize
:
3
,
};
function
handleSearchInfoChange
(
info
:
Recordable
)
{
// 自动请求并暴露内部方法
onMounted
(()
=>
{
fetch
();
});
async
function
handleSearchInfoChange
(
info
:
any
)
{
params
.
value
=
info
;
console
.
log
(
info
);
page
.
value
=
1
;
await
fetch
();
}
async
function
fetch
(
p
=
{})
{
loading
.
value
=
true
;
const
res
=
await
getListByPage
(
merge
({
...
params
.
value
,
pageNum
:
page
.
value
,
pageSize
:
pageSize
.
value
,
...
p
,
}),
);
data
.
value
=
res
.
items
;
total
.
value
=
res
.
total
;
loading
.
value
=
false
;
}
const
getFormProps
=
computed
(():
Partial
<
FormProps
>
=>
{
const
{
formConfig
}
=
unref
(
propsRef
);
const
{
submitButtonOptions
}
=
formConfig
||
{};
return
{
showAdvancedButton
:
true
,
...
formConfig
,
submitButtonOptions
:
{
loading
:
unref
(
getLoading
),
...
submitButtonOptions
},
compact
:
true
,
};
const
paginationProp
=
ref
({
showSizeChanger
:
false
,
showQuickJumper
:
true
,
pageSize
,
current
:
page
,
total
,
showTotal
:
(
total
:
number
)
=>
`总
${
total
}
条`
,
onChange
:
pageChange
,
onShowSizeChange
:
pageSizeChange
,
});
function
pageChange
(
p
:
number
,
pz
:
number
)
{
page
.
value
=
p
;
pageSize
.
value
=
pz
;
fetch
();
}
function
pageSizeChange
(
_current
,
size
:
number
)
{
pageSize
.
value
=
size
;
fetch
();
}
function
handleCreate
()
{
openDrawer
(
true
,
{
isUpdate
:
false
,
});
}
function
handleEdit
(
record
:
Recordable
)
{
openDrawer
(
true
,
{
record
,
isUpdate
:
true
,
});
}
function
handleDelete
(
record
:
Recordable
)
{
console
.
log
(
record
);
}
function
handleSuccess
()
{
fetch
();
}
</
script
>
<
style
lang=
"less"
scoped
>
.list-basic {
...
...
@@ -115,14 +173,15 @@
text-align: center;
&-col {
&:not(:last-child) {
border-right: 1px dashed @border-color-base;
}
//
&:not(:last-child) {
//
border-right: 1px dashed @border-color-base;
//
}
div {
margin-bottom: 12px;
color: @text-color-base;
font-size: 14px;
text-align: left;
line-height: 22px;
}
...
...
@@ -131,10 +190,17 @@
color: @text-color-base;
font-size: 24px;
line-height: 32px;
text-align: left;
font-weight: bold;
}
}
}
&__list {
&-header {
color: #333;
font-weight: bold;
}
}
&__content {
background-color: @component-background;
...
...
src/views/project/project.data.ts
0 → 100644
View file @
1f7440e7
import
{
FormSchema
}
from
'@/components/Table'
;
import
{
uploadApi
}
from
'@/api/sys/upload'
;
export
const
formSchema
:
FormSchema
[]
=
[
{
field
:
'logo'
,
label
:
'项目logo'
,
labelWidth
:
'140px'
,
// required: true,
component
:
'ImageUpload'
,
required
:
true
,
componentProps
:
{
api
:
uploadApi
,
accept
:
[
'png'
,
'jpeg'
,
'jpg'
],
maxSize
:
1
,
maxNumber
:
1
,
},
},
{
field
:
'projectName'
,
labelWidth
:
'140px'
,
label
:
'项目名称'
,
required
:
true
,
component
:
'Input'
,
},
{
label
:
'储备项目'
,
labelWidth
:
'140px'
,
field
:
'isReserveProject'
,
component
:
'Checkbox'
,
// renderComponentContent: '储备项目',
},
{
label
:
'建设模式'
,
labelWidth
:
'140px'
,
field
:
'constructionMode'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'委托建设'
,
value
:
'委托建设'
,
},
{
label
:
'代建'
,
value
:
'代建'
,
},
{
label
:
'自建'
,
value
:
'自建'
,
},
{
label
:
'储备'
,
value
:
'储备'
,
},
],
},
},
{
label
:
'项目类型'
,
labelWidth
:
'140px'
,
field
:
'projectType'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'公共设施配套类'
,
value
:
'公共设施配套类'
,
key
:
'公共设施配套类'
,
},
{
label
:
'基础设施类'
,
value
:
'基础设施类'
,
key
:
'基础设施类'
,
},
{
label
:
'产业载体类'
,
value
:
'产业载体类'
,
key
:
'产业载体类'
,
},
{
label
:
'房地产类'
,
value
:
'房地产类'
,
key
:
'房地产类'
,
},
{
label
:
'存量盘活类'
,
value
:
'存量盘活类'
,
key
:
'存量盘活类'
,
},
{
label
:
'其他类(零星工程)'
,
value
:
'其他类(零星工程)'
,
key
:
'其他类(零星工程)'
,
},
],
},
},
{
label
:
'建设规模'
,
labelWidth
:
'140px'
,
field
:
'constructionScale'
,
required
:
true
,
component
:
'Input'
,
},
{
label
:
'项目概况'
,
field
:
'projectOverview'
,
labelWidth
:
'140px'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
},
{
label
:
'建设目的及项目功能'
,
labelWidth
:
'140px'
,
field
:
'constructionPurpose'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
},
{
field
:
'fundingSource'
,
label
:
'资金来源'
,
labelWidth
:
'140px'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'自筹'
,
value
:
'自筹'
,
key
:
'自筹'
,
},
{
label
:
'财政资金'
,
value
:
'财政资金'
,
key
:
'财政资金'
,
},
{
label
:
'专项债'
,
value
:
'专项债'
,
key
:
'专项债'
,
},
],
},
},
{
field
:
'ImplementingEntity'
,
label
:
'实施主体'
,
required
:
true
,
labelWidth
:
'140px'
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'了解产品'
,
value
:
'了解产品'
,
key
:
'了解产品'
,
},
{
label
:
'正在跟进'
,
value
:
'正在跟进'
,
key
:
'正在跟进'
,
},
{
label
:
'正在试用'
,
value
:
'正在试用'
,
key
:
'正在试用'
,
},
{
label
:
'准备购买'
,
value
:
'准备购买'
,
key
:
'准备购买'
,
},
{
label
:
'准备付款'
,
value
:
'准备付款'
,
key
:
'准备付款'
,
},
{
label
:
'已经购买'
,
value
:
'已经购买'
,
key
:
'已经购买'
,
},
{
label
:
'暂时闲置'
,
value
:
'暂时闲置'
,
key
:
'暂时闲置'
,
},
],
},
},
];
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
field
:
'ProjecName'
,
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
:
'2'
,
},
{
label
:
'代理'
,
value
:
'3'
,
},
{
label
:
'承建'
,
value
:
'4'
,
},
],
},
},
{
field
:
'isReserveProject'
,
component
:
'Checkbox'
,
colProps
:
{
span
:
2
,
},
renderComponentContent
:
'储备项目'
,
},
{
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
:
'ProjecName'
,
label
:
''
,
component
:
'Select'
,
componentProps
:
{
placeholder
:
'项目类型'
,
options
:
[
{
label
:
'公共设施配套类'
,
value
:
'公共设施配套类'
,
key
:
'公共设施配套类'
,
},
{
label
:
'基础设施类'
,
value
:
'基础设施类'
,
key
:
'基础设施类'
,
},
{
label
:
'产业载体类'
,
value
:
'产业载体类'
,
key
:
'产业载体类'
,
},
{
label
:
'房地产类'
,
value
:
'房地产类'
,
key
:
'房地产类'
,
},
{
label
:
'存量盘活类'
,
value
:
'存量盘活类'
,
key
:
'存量盘活类'
,
},
{
label
:
'其他类(零星工程)'
,
value
:
'其他类(零星工程)'
,
key
:
'其他类(零星工程)'
,
},
],
},
colProps
:
{
span
:
3
},
},
];
src/views/
biddingPlan/biddingPlan
Drawer.vue
→
src/views/
project/project
Drawer.vue
View file @
1f7440e7
...
...
@@ -4,7 +4,7 @@
@
register=
"registerDrawer"
showFooter
:title=
"getTitle"
width=
"
5
00px"
width=
"
7
00px"
@
ok=
"handleSubmit"
>
<BasicForm
@
register=
"registerForm"
>
...
...
@@ -15,9 +15,9 @@
<
script
lang=
"ts"
setup
>
import
{
ref
,
computed
,
unref
}
from
'vue'
;
import
{
BasicForm
,
useForm
}
from
'@/components/Form'
;
import
{
formSchema
}
from
'./
biddingPlan
.data'
;
import
{
formSchema
}
from
'./
project
.data'
;
import
{
BasicDrawer
,
useDrawerInner
}
from
'@/components/Drawer'
;
import
{
addItem
,
updateItem
}
from
'@/api/project/
biddingPlan
'
;
import
{
addItem
,
updateItem
}
from
'@/api/project/
project
'
;
import
{
is
}
from
'@/utils/is'
;
const
emit
=
defineEmits
([
'success'
,
'register'
]);
const
isUpdate
=
ref
(
true
);
...
...
@@ -41,7 +41,7 @@
}
});
const
getTitle
=
computed
(()
=>
(
!
unref
(
isUpdate
)
?
'
新增
项目'
:
'编辑项目'
));
const
getTitle
=
computed
(()
=>
(
!
unref
(
isUpdate
)
?
'
创建
项目'
:
'编辑项目'
));
async
function
handleSubmit
()
{
try
{
...
...
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