You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

371 lines
13 KiB

<template>
<view class="project">
<view class="cc-header">
<!-- Tabs栏 -->
<view class="cc-tabs tabs">
<view class="tab" :class="{'active': activeTab === 0}" @click="changeTab(0)">
<view class="tab-text">项目基本信息</view>
</view>
<view class="tab" :class="{'active': activeTab === 1}" @click="changeTab(1)">
<view class="tab-text">资金下达</view>
</view>
<view class="tab" :class="{'active': activeTab === 2}" @click="changeTab(2)">
<view class="tab-text">资金支付</view>
</view>
</view>
<view v-if="activeTab === 1" class="query-part">
<!-- 搜索框 -->
<view class="cc-search search-bar">
<view class="search-box">
<image src="/static/images/icon/search.png" />
<input v-model="queryParams.data.sectionName" type="text" @confirm="handleSearchFunsList" placeholder="请输入标段名称" />
</view>
</view>
<!-- 行政区划和项目类型下拉框 -->
<view class="cc-query-dropdowns dropdowns">
<picker mode="date" @change="handleBindTimeChange">
<view class="dropdown">{{ showTimeStr }}<image src="/static/images/icon/down.png" /></view>
</picker>
</view>
</view>
<view v-if="activeTab === 2" class="query-part">
<!-- 搜索框 -->
<view class="cc-search search-bar">
<view class="search-box">
<image src="/static/images/icon/search.png" />
<input v-model="payQueryParams.data.contractName" type="text" @confirm="handleSearchContractNameList" placeholder="请输入标段名称或合同名称" />
</view>
</view>
</view>
</view>
<view class="tab-content">
<view v-if="activeTab === 0" class="base-info-box">
<project-add ref="projectAdd" :operateType="operateType" :projectId="projectId" />
</view>
<!-- 资金下达 -->
<view v-if="activeTab === 1" class="capital-execute-box">
<!-- 项目列表 -->
<view class="cc-project-list project-list">
<view v-for="(sourceFunds, index) in sourceFundsList" :key="index" class="project-card">
<view class="attr-item project-title">{{ sourceFunds.sectionName }}</view>
<view class="attr-item">
<view class="attr-title">下达日期</view>
<view class="attr-value">{{ sourceFunds.releaseTime }}</view>
</view>
<view class="attr-item">
<view class="attr-title">下达资金总金额(万元)</view>
<view class="attr-value">{{ sourceFunds.releaseFunds }}</view>
</view>
<view v-if="sourceFunds.isExpand">
<view class="attr-item">
<view class="attr-title">中央资金(万元)</view>
<view class="attr-value">{{ sourceFunds.centralArrangedFunds }}</view>
</view>
<view class="attr-item">
<view class="attr-title">省级资金(万元)</view>
<view class="attr-value">{{ sourceFunds.provincialFunding }}</view>
</view>
<view class="attr-item">
<view class="attr-title">地级市资金(万元)</view>
<view class="attr-value">{{ sourceFunds.cityLevelFunds }}</view>
</view>
<view class="attr-item">
<view class="attr-title">县级资金(万元)</view>
<view class="attr-value">{{ sourceFunds.countyLevelFunds }}</view>
</view>
<view class="attr-item">
<view class="attr-title">乡镇及群众自筹和其他投资(万元)</view>
<view class="attr-value">{{ sourceFunds.townshipInvestments }}</view>
</view>
</view>
<view class="expand-btn" @click="handleItemExpand(sourceFunds.isExpand, index)">
<view v-if="!sourceFunds.isExpand" class="btn">
展开
<image src="@/static/images/icon/arrow-down.png" />
<!-- <uni-icons type="down" size="30" color="red"></uni-icons> -->
</view>
<view v-else class="btn no-open">
收起
<image src="@/static/images/icon/arrow-down.png" />
<!-- <uni-icons type="up" size="30"></uni-icons> -->
</view>
</view>
<view class="operate-buttons">
<view class="buttons-group">
<view class="primary-button__text button" @click="handleUpdatePassDown(sourceFunds)">修改</view>
<view class="error-button__text button" @click="handleDeletePassDown(sourceFunds)">删除</view>
</view>
</view>
</view>
</view>
<no-data-view v-if="sourceFundsList.length === 0" :top="marginTop" />
<uni-load-more v-if="queryParams.pageNum == pages" status="no-more"></uni-load-more>
</view>
<!-- 资金下达 -->
<view v-if="activeTab === 2" class="capital-pay-box">
<!-- 项目列表 -->
<view class="cc-project-list project-list">
<view v-for="(contract, index) in contractInfoList" :key="index" class="project-card">
<view class="attr-item project-title">{{ contract.sectionName }}</view>
<view class="attr-item">
<view class="attr-title">合同名称</view>
<view class="attr-value">{{ contract.contractName }}</view>
</view>
<view class="attr-item">
<view class="attr-title">合同工期</view>
<view class="attr-value">{{ contract.contractDuration }}</view>
</view>
<view class="attr-item">
<view class="attr-title">开工时间</view>
<view class="attr-value">{{ contract.commencementTime }}</view>
</view>
<view class="attr-item">
<view class="attr-title">合同金额(万元)</view>
<view class="attr-value">{{ contract.contractAmount }}</view>
</view>
<view class="attr-item">
<view class="attr-title">应付金额(万元)</view>
<view class="attr-value">{{ contract.payableAmountUnit }}</view>
</view>
<view class="attr-item">
<view class="attr-title">实际金额(万元)</view>
<view class="attr-value">{{ contract.actualPayment }}</view>
</view>
<view class="operate-buttons">
<view class="buttons-group">
<view class="primary-button__text button" @click="handlePayment(contract)">资金支付</view>
</view>
</view>
</view>
</view>
<no-data-view v-if="contractInfoList.length === 0" :top="marginTop" />
<uni-load-more v-if="payQueryParams.pageNum == payPages" status="no-more"></uni-load-more>
</view>
</view>
<!-- 操作按钮 -->
<view v-if="activeTab === 1" class="cc-operation-buttons operation-buttons">
<view class="buttons-group">
<view class="primary-button button" @click="handleAddPassDown()">新增</view>
</view>
</view>
</view>
</template>
<script>
import ProjectAdd from '@/components/project-add/project-add.vue'
import NoDataView from '@/components/no-data-view/no-data-view.vue'
import { projectInfoApi, projectSourceFundsListApi } from '@/api/system/project'
import { listInfoByCode } from '@/api/system/contractInfo'
export default {
components: {
ProjectAdd,
NoDataView
},
data() {
return {
// 传递的ID
id: this.$route.query.id,
projectId: this.$route.query.id,
activeTab: 0, // 当前选中的Tab索引
searchQuery: '', // 搜索框的内容
selectedDistrict: 0, // 行政区划选择的索引
selectedProjectType: 0, // 项目类型选择的索引
districts: ['请选择', '北京市', '上海市', '广州市'], // 行政区划数据
projectTypes: ['请选择', '建筑', 'IT', '教育'], // 项目类型数据
projectKindsOptions: [],
engineeringGradeOptions: [],
// 工程用途字典
engineeringPurposesOptions: [],
// 建设模式字典
constructionModeOptions: [],
// 建设性质字典
constructionNatureOptions: [],
isMajorProjectOptions: [],
marginTop: '120',
projects: [ // 项目列表
{ name: '项目1', code: 'P001', district: '北京市', type: '建筑', status: 1, isExpand: false },
{ name: '项目2', code: 'P002', district: '上海市', type: 'IT', status: 0, isExpand: false},
{ name: '项目3', code: 'P003', district: '广州市', type: '教育', status: 1, isExpand: false},
{ name: '项目4', code: 'P004', district: '北京市', type: '建筑', status: 1, isExpand: false}
],
form: {
projectName: '',
region: [],
projectCode: '',
projectType: 0,
legalEntity: '',
projectLeader: '',
leaderPhone: '',
legalRep: ''
},
operateType: 'view',
queryParams: {
pageNum: 1,
pageSize: 10,
params: {orderBy: "create_time", sort: "desc"},
data: {
proNo: this.$route.query.id,
sectionName: '',
releaseTime: ''
}
},
pages: 0,
showTimeStr: '下达日期',
sourceFundsList: [],
payQueryParams: {
pageNum: 1,
pageSize: 10,
params: {orderBy: "create_time", sort: "desc"},
data: {
proNo: this.$route.query.id
},
ids: null
},
contractInfoList: [],
payPages: 0
};
},
created() {
// 在这里进行组件初始化的操作
this.activeTab = Number(this.$route.query.tabNum)
this.judgeGetList()
},
onReachBottom() {
if (this.queryParams.pageNum < this.pages) {
this.queryParams.pageNum++ // 页码加1
this.judgeGetList()
}
},
methods: {
getProjectInfo() {
projectInfoApi(this.id).then(res => {
this.form = res.data
})
},
changeTab(index) {
this.activeTab = index
this.judgeGetList()
},
// 判断获取哪个列表
judgeGetList() {
if (this.activeTab === 0) {
} else if (this.activeTab === 1) {
this.getSourceFundsList('again')
} else {
this.getContractInfoList('again')
}
},
// 获取资金下达列表
getSourceFundsList(mode) {
uni.showLoading({
title: '加载中...',
mask: true
})
projectSourceFundsListApi(this.queryParams).then(res => {
if (mode === 'again') {
this.sourceFundsList = []
uni.pageScrollTo({
scrollTop: 0, // 设置滚动到顶部
duration: 300 // 滚动动画持续时间,单位为毫秒
})
}
res.records.forEach(item => {
item.isExpand = false
})
this.pages = res.pages
this.sourceFundsList = [...this.sourceFundsList, ...res.records]
this.pages = res.pages
uni.hideLoading()
})
},
// 检索列表
handleSearchFunsList() {
this.queryParams.pageNum = 1
this.getSourceFundsList('again')
},
handleSearchContractNameList() {
this.queryParams.pageNum = 1
this.getContractInfoList('again')
},
// 处理下达时间
handleBindTimeChange(e) {
this.queryParams.data.releaseTime = this.showTimeStr = e.detail.value
this.queryParams.pageNum = 1
this.getSourceFundsList('again')
},
// 获取资金支付列表
getContractInfoList(mode) {
uni.showLoading({
title: '加载中...',
mask: true
})
listInfoByCode(this.payQueryParams).then(res => {
if (mode === 'again') {
this.contractInfoList = []
uni.pageScrollTo({
scrollTop: 0, // 设置滚动到顶部
duration: 300 // 滚动动画持续时间,单位为毫秒
})
}
this.contractInfoList = [...this.contractInfoList, ...res.records]
this.payPages = res.pages
// this.projects.forEach(projectItem => {
// projectItem.adcdName = this.formatAdcd(projectItem)
// projectItem.projectTypeName = this.projectTypeFormat(projectItem)
// })
uni.hideLoading()
})
},
handleItemExpand(isExpand, index) {
this.sourceFundsList[index].isExpand = !isExpand
},
handleAddPassDown() {
// 跳转到新增项目页面
this.$tab.navigateTo(`/pages/capital/passdown/edit?id=${this.projectId}`);
},
handleDeletePassDown() {},
handlePayment(contract) {
// 跳转到资金支付页面
this.$tab.navigateTo(`/pages/capital/payment/list?id=${this.projectId}&contractId=${contract.id}&sectionName=${contract.sectionName}&contractName=${contract.contractName}&contractNumber=${contract.contractNumber}`)
},
handleUpdatePassDown(item) {
this.$tab.navigateTo(`/pages/capital/passdown/edit?id=${this.projectId}&sectionId=${item.id}`)
}
}
}
</script>
<style lang="scss" scoped>
.tab-content {
// padding: 16px 20px;
.base-info-box {
padding: 64px 20px 16px;
}
.capital-execute-box {
padding: 162px 20px 96px;
.cc-project-list {
padding: 0;
}
}
.capital-pay-box {
padding: 114px 20px 96px;
.cc-project-list {
padding: 0;
}
}
}
</style>