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
58c7ac85
Commit
58c7ac85
authored
Jun 11, 2024
by
牛虎林
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
变更管理页面开发完成
parent
6dda5ff3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
567 additions
and
8 deletions
+567
-8
changeSignatureModel.ts
src/api/project/model/changeSignatureModel.ts
+91
-0
changeSignature.ts
src/router/routes/modules/changeSignature.ts
+1
-1
addChangeSignature.vue
src/views/changeSignature/addChangeSignature.vue
+157
-7
changeSignatrue.data.ts
src/views/changeSignature/changeSignatrue.data.ts
+318
-0
No files found.
src/api/project/model/changeSignatureModel.ts
0 → 100644
View file @
58c7ac85
import
{
BasicPageParams
,
BasicFetchResult
}
from
'@/api/model/baseModel'
;
export
type
ProjectParams
=
{
//年份
givenYear
?:
string
;
//companyName
companyName
?:
string
;
//季度
quarter
:
string
};
export
type
ProjectPageParams
=
BasicPageParams
&
ProjectParams
;
export
interface
ProjectListItem
{
id
:
string
;
//合同id
contractId
:
string
;
projectInvestment
:
string
;
biddingMethod
:
string
;
firstPartyName
:
string
;
secondPartyName
:
string
;
formOfContract
:
string
;
contractSigningTime
:
string
;
closingTime
:
string
;
contractAmount
:
string
;
superContractScale
:
string
;
submittedForSettlement
:
string
;
meetingMinutes
:
string
;
remark
:
string
;
fundingSource
:
string
;
projectName
:
string
;
proportionContractAmount
:
string
;
createTime
:
null
;
createBy
:
string
;
updateTime
:
null
;
updateBy
:
string
;
}
export
interface
ChangModel
{
id
?:
string
|
number
;
constructionMode
:
string
;
isReserveProject
:
string
;
projectType
:
string
;
projectOverview
:
string
;
constructionPurpose
:
string
;
}
export
interface
ProjectModel
<
P
,
C
>
{
management
:
P
[];
proClosingQuarter
:
C
;
}
interface
Contract
{
contractId
:
number
;
projectName
:
string
;
fundingSource
:
string
;
projectInvestment
:
string
;
biddingMethod
:
string
;
contracYpe
:
string
;
contractName
:
string
;
firstPartyName
:
string
;
secondPartyName
:
string
;
formOfContract
:
string
;
contractSigningTime
:
string
;
closingTime
:
string
;
closingTimeDatetime
:
string
;
contractAmount
:
string
;
submittedForSettlement
:
string
;
superContractScale
:
string
;
sumOfMoney
:
string
;
proportionContractAmount
:
string
;
meetingMinutes
:
string
;
remark
:
string
;
}
interface
ProjectManagement
{
projectId
:
number
;
contract
:
Contract
[];
}
interface
ProClosingQuarter
{
companyName
:
string
;
status
:
string
;
quarter
:
string
;
givenYear
:
string
;
yearQuarter
:
string
;
}
export
type
ProjectListGetResultModel
=
BasicFetchResult
<
ProjectListItem
>
;
export
type
EditModel
=
ProjectModel
<
ProjectManagement
[],
ProClosingQuarter
>
src/router/routes/modules/changeSignature.ts
View file @
58c7ac85
...
...
@@ -26,7 +26,7 @@ const changeSignature: AppRouteModule = {
},
{
path
:
'edit'
,
name
:
'
settlementManageEdit
'
,
name
:
'
addChangeSignature
'
,
component
:
()
=>
import
(
'@/views/changeSignature/addChangeSignature.vue'
),
meta
:
{
// affix: true,
...
...
src/views/changeSignature/addChangeSignature.vue
View file @
58c7ac85
<
template
>
<div>
查看详情
</div>
<PageWrapper
:title=
"getTitle"
:contentBackground=
"false"
headerSticky
>
<template
#
extra
>
<a-button
type=
"primary"
danger
v-if=
"isUpdate"
>
删除
</a-button>
<a-button
type=
"primary"
@
click=
"handleSubmit"
v-if=
"isUpdate"
>
提交
</a-button>
<a-button
type=
"default"
@
click=
"router.back()"
>
返回
</a-button>
<a-button
type=
"success"
@
click=
"examine"
v-if=
"statusResult=='0'"
>
审核
</a-button>
</
template
>
<PageCard
v-for=
"(item, index) in tabsFormSchema"
:key=
"index"
:title=
"item.name"
>
<
template
#
right
>
<a-button
type=
"text"
preIcon=
"ant-design:delete-outlined"
danger
@
click=
"deleteItem(index)"
>
</a-button>
</
template
>
<BasicForm
:loading=
"loading"
@
register=
"item.Form[0]"
>
</BasicForm>
<PageCard
v-for=
"(content, contentIndex) in item.ContentFormList"
:key=
"contentIndex"
:title=
"'合同'+contractName[index].contractNameList[contentIndex]"
>
<BasicForm
:loading=
"loading"
@
register=
"content.ContentFormList"
/>
</PageCard>
</PageCard>
<a-button
type=
"dashed"
@
click=
"add"
preIcon=
"ei:plus"
>
从合同中导入
</a-button>
<a-button
type=
"dashed"
@
click=
"handleAdd"
class=
"ml-2"
preIcon=
"ei:plus"
>
新建合同
</a-button>
<contractDrawer
@
register=
"registerDrawer"
@
success=
"handleSuccess"
/>
<projectlibraryModel
@
register=
"register"
@
close=
"handleNewData"
/>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
router
}
from
"@/router"
;
import
{
ref
}
from
"vue"
;
//标题
const
getTitle
=
ref
(
''
);
//引入vue 常用的组件
import
{
unref
,
computed
,
onMounted
,
reactive
}
from
'vue'
;
//新建合同
import
projectlibraryModel
from
'@/components/ContractModel/Contract.vue'
;
<
script
setup
lang=
"ts"
>
import
{
useRoute
}
from
'vue-router'
;
//分页查询
import
{
PageWrapper
}
from
'@/components/Page'
;
//卡片
import
PageCard
from
'@/components/Page/src/PageCard.vue'
;
//合同弹出框
import
contractDrawer
from
'@/views/contract/contractDrawer.vue'
;
//表单
import
{
BasicForm
,
useForm
,
FormProps
,
UseFormReturnType
}
from
'@/components/Form'
;
import
{
formSchema
,
Content
}
from
'./changeSignatrue.data'
;
//引入api
import
{
deepMerge
}
from
'@/utils'
;
//引入弹框
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
//引入弹框
import
{
useDrawer
}
from
'@/components/Drawer'
;
//引入api
import
{
nextTick
}
from
'vue'
;
</
script
>
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
import
{
useModal
}
from
'@/components/Modal'
;
import
{
EditModel
}
from
"@/api/project/model/changeSignatureModel"
;
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
const
{
createMessage
}
=
useMessage
();
const
formData
=
ref
<
EditModel
>
({
management
:
[],
proClosingQuarter
:
undefined
});
//列表对象
const
tabsFormSchema
=
reactive
<
TabsFormType
[]
>
([]);
//合同名称
const
contractName
=
ref
([]);
onMounted
(
async
()
=>
{
const
route
=
useRoute
();
if
(
route
.
query
.
id
)
{
getTitle
.
value
=
'新建变更管理'
;
}
else
{
getTitle
.
value
=
'新建变更管理'
;
}
})
type
TabsFormType
=
{
name
:
string
;
forceRender
?:
boolean
;
projectId
:
string
|
number
;
Form
:
UseFormReturnType
;
ContentFormList
:
Array
<
UseFormReturnType
>
;
};
//配置
const
baseFormConfig
:
Partial
<
FormProps
>
=
{
showActionButtonGroup
:
false
,
labelWidth
:
100
,
layout
:
'vertical'
,
};
//导入合同的确认
async
function
handleNewData
(
info
:
any
)
{
if
(
info
)
{
info
.
map
((
i
)
=>
{
handleNew
(
i
);
});
}
}
// 构建表单
async
function
handleNew
(
info
:
any
)
{
//判断项目id是否相同
if
(
formData
.
value
.
management
.
some
(
obj
=>
obj
.
projectId
===
info
.
projectId
))
{
const
item
=
{
ContentFormList
:
useForm
(
Object
.
assign
({
schemas
:
Content
},
baseFormConfig
)
as
FormProps
),
};
const
index
=
tabsFormSchema
.
findIndex
(
obj
=>
obj
.
projectId
===
info
.
projectId
);
const
contractList
=
formData
.
value
.
management
[
index
].
contract
for
(
let
i
=
0
;
i
<
contractList
.
length
;
i
++
)
{
if
(
contractList
[
i
].
contractId
!==
info
.
id
)
{
contractName
.
value
[
index
].
contractNameList
.
push
(
info
.
contrcatName
)
console
.
log
(
contractName
.
value
,
"标题查看"
)
tabsFormSchema
[
index
].
ContentFormList
.
push
(
item
);
formData
.
value
.
management
[
index
].
contract
.
push
({
contractId
:
info
.
id
,
});
}
}
}
else
{
const
contentItem
=
{
ContentFormList
:
useForm
(
Object
.
assign
({
schemas
:
Content
},
baseFormConfig
)
as
FormProps
),
};
//合同名称集合
const
contractNameList
=
[]
console
.
log
(
"合同名称"
,
info
)
contractNameList
.
push
(
info
.
contrcatName
)
//构建合同名称
let
Name
=
{
//项目id
projectId
:
info
.
projectId
,
//合同名称
contractNameList
:
contractNameList
,
}
contractName
.
value
.
push
(
Name
)
const
list
=
[];
list
.
push
(
contentItem
)
const
item
=
{
name
:
'序号'
+
(
tabsFormSchema
.
length
+
1
),
projectId
:
info
.
projectId
,
forceRender
:
true
,
Form
:
useForm
(
Object
.
assign
({
schemas
:
formSchema
},
baseFormConfig
)
as
FormProps
),
ContentFormList
:
list
,
};
tabsFormSchema
.
push
(
item
);
const
contractList
=
[]
const
contract
=
{
contractId
:
info
.
id
}
contractList
.
push
(
contract
)
formData
.
value
.
management
.
push
({
projectId
:
info
.
projectId
,
contract
:
contractList
});
}
<
style
scoped
lang=
"less"
>
}
</
style
>
async
function
add
()
{
openModal
();
}
</
script
>
src/views/changeSignature/changeSignatrue.data.ts
View file @
58c7ac85
...
...
@@ -92,3 +92,321 @@ export const searchFormSchema: FormSchema[] = [
colProps
:
{
span
:
4
},
},
];
export
const
formSchema
:
FormSchema
[]
=
[
{
field
:
'projectName'
,
label
:
'项目名称'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'fundingSource'
,
label
:
'资金来源'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
// //project_investment
field
:
'projectInvestment'
,
label
:
'立即投资额'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
];
export
const
Content
:
FormSchema
[]
=
[
{
//bidding_method
field
:
'biddingMethod'
,
label
:
'招标方式'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'建委招标'
,
value
:
'1'
,
},
{
label
:
'平台招标'
,
value
:
'2'
,
},
{
label
:
'邀标比选'
,
value
:
'3'
,
},
{
label
:
'直接委托'
,
value
:
'4'
,
},
{
label
:
'评分定离'
,
value
:
'5'
,
}
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//contrac_ype
field
:
'contracYpe'
,
label
:
'合同类型'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'施工'
,
value
:
'1'
,
},
{
label
:
'监理'
,
value
:
'2'
,
},
{
label
:
'设计'
,
value
:
'3'
,
},
{
label
:
'图审'
,
value
:
'4'
,
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'contractName'
,
label
:
' 合同名称'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//first_party_name
field
:
'firstPartyName'
,
label
:
'甲方单位名称'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'secondPartyName'
,
//second_party_name
label
:
'乙方单位名称'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//form_of_contract
field
:
'formOfContract'
,
label
:
'合同形式'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'固定总价'
,
value
:
'1'
,
},
{
label
:
'固定单价'
,
value
:
'2'
,
},
{
label
:
'费率'
,
value
:
'3'
,
},
{
label
:
'其他'
,
value
:
'4'
,
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//contract_amount
field
:
'contractAmount'
,
label
:
'合同金额'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//contract_amount
field
:
'contractAmount'
,
label
:
'合同累计签证、变更金额(含本次):'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//contract_amount
field
:
'contractAmount'
,
label
:
'累计变更签证金额占合同金额比例:'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
//变更编号
{
field
:
'changeSignatureNumber'
,
label
:
'变更编号'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//form_of_contract
field
:
'formOfContract'
,
label
:
'变更类型:'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'图纸遗漏'
,
value
:
'1'
,
},
{
label
:
'图纸错误'
,
value
:
'2'
,
},
{
label
:
'销售部门要求增加'
,
value
:
'3'
,
},
{
label
:
'其他'
,
value
:
'4'
,
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'changeSignatureNumber'
,
label
:
'责任方'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'changeSignatureNumber'
,
label
:
' 变更内容:'
,
required
:
true
,
component
:
'input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
//预估变更金额
{
field
:
'changeSignatureNumber'
,
label
:
'预估变更金额:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'changeSignatureNumber'
,
label
:
'预估变更金额占合同金额比例:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
//签证编号:
{
field
:
'changeSignatureNumber'
,
label
:
'签证编号:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
//签证类型:
{
field
:
'changeSignatureNumber'
,
label
:
'签证类型:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
// 签证内容:
{
field
:
'changeSignatureNumber'
,
label
:
'签证内容:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
//预估签证金额:
{
field
:
'changeSignatureNumber'
,
label
:
'预估签证金额:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
//预估签证金额占合同金额比例
{
field
:
'changeSignatureNumber'
,
label
:
'预估签证金额占合同金额比例:'
,
required
:
true
,
component
:
'InputNumber'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//meeting_minutes
label
:
'会议纪要'
,
field
:
'meetingMinutes'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
//remark
label
:
'备注'
,
field
:
'remark'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
]
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