Commit b3864078 authored by lcl's avatar lcl

Merge branch 'V20230915' of http://192.168.60.201/root/dsk-operate-sys into V20230915

parents 6b464a19 cb9cd356
......@@ -92,3 +92,52 @@ export function exportBid(data) {
data: data
})
}
// 集团施工项目最新招标
export function recentlyBid(data) {
return request({
url: '/marketAnalysis/combine/recentlyBid',
method: 'post',
data: data
})
}
// 集团施工项目年度招标
export function bidByYear(data) {
return request({
url: '/marketAnalysis/combine/bidByYear',
method: 'post',
data: data
})
}
// 集团施工项目发包金额统计
export function groupByMoney(data) {
return request({
url: '/marketAnalysis/combine/groupByMoney',
method: 'post',
data: data
})
}
// 集团施工项目发包类型统计
export function groupByType(data) {
return request({
url: '/marketAnalysis/combine/groupByType',
method: 'post',
data: data
})
}
// 施工项目下浮率统计
export function groupByLowerRate(data) {
return request({
url: '/marketAnalysis/combine/groupByLowerRate',
method: 'post',
data: data
})
}
// 历史发包项目金额Top10
export function peojectTop(data) {
return request({
url: '/marketAnalysis/combine/peojectTop',
method: 'post',
data: data
})
}
......@@ -6,15 +6,23 @@ export function bidNoticePage(data) {
url: '/enterpriseProject/bidNoticePage',
method: 'post',
data: data
})
});
}
// 招标公告招标类别
// 招标公告招标阶段
export function bidNoticeTenderStage(data) {
return request({
url: '/enterpriseProject/bidNoticeTenderStage',
method: 'post',
data: data
});
}
// 招标公告项目类别
export function bidNoticeProjectCategory(data) {
return request({
url: '/enterpriseProject/bidNoticeProjectCategory',
method: 'post',
data: data
})
}
......@@ -24,7 +32,7 @@ export function bidNoticeArea(data) {
url: '/enterpriseProject/bidNoticeArea',
method: 'post',
data: data
})
});
}
// 土地交易列表
......@@ -33,7 +41,7 @@ export function landTransactionPage(data) {
url: '/enterpriseProject/landTransactionPage',
method: 'post',
data: data
})
});
}
// 土地交易用途
......@@ -42,7 +50,7 @@ export function landUse(data) {
url: '/enterpriseProject/landUse',
method: 'post',
data: data
})
});
}
// 拟建项目列表
......@@ -51,7 +59,7 @@ export function approvalProjectPage(data) {
url: '/enterpriseProject/approvalProjectPage',
method: 'post',
data: data
})
});
}
// 标讯PRO招标公告列表
......@@ -60,7 +68,7 @@ export function bidNoticeProPage(data) {
url: '/enterpriseProject/bidNoticeProPage',
method: 'post',
data: data
})
});
}
// 标讯PRO招标公告项目类别
......@@ -69,7 +77,7 @@ export function bidNoticeProProjectType(data) {
url: '/enterpriseProject/bidNoticeProProjectType',
method: 'post',
data: data
})
});
}
// 标讯PRO招标公告工程类别
......@@ -78,7 +86,7 @@ export function bidNoticeProProjectPurposes(data) {
url: '/enterpriseProject/bidNoticeProProjectPurposes',
method: 'post',
data: data
})
});
}
// 标讯PRO招标公告评标办法
......@@ -87,7 +95,7 @@ export function bidNoticeProAssessmentWay(data) {
url: '/enterpriseProject/bidNoticeProAssessmentWay',
method: 'post',
data: data
})
});
}
// 行政许可列表
......@@ -96,7 +104,7 @@ export function creditXzxkPage(data) {
url: '/enterpriseProject/creditXzxkPage',
method: 'post',
data: data
})
});
}
// 专项债项目列表
......@@ -105,7 +113,7 @@ export function specialDebtProjectPage(data) {
url: '/enterpriseProject/specialDebtProjectPage',
method: 'post',
data: data
})
});
}
// 招标计划列表
......@@ -114,7 +122,7 @@ export function bidPlanPage(data) {
url: '/enterpriseProject/bidPlanPage',
method: 'post',
data: data
})
});
}
// 招标计划项目类型
export function bidPlanProjectType(data) {
......@@ -122,5 +130,12 @@ export function bidPlanProjectType(data) {
url: '/enterpriseProject/bidPlanProjectType',
method: 'post',
data: data
})
});
}
// 企业重点项目列表
export const getMajorProjectListApi = (data) => request({
url: "/enterpriseProject/importantList",
method: "post",
data
});
\ No newline at end of file
......@@ -348,7 +348,7 @@ ul, li {
//box-shadow:none;
//-webkit-box-shadow: 2px 0px 1px -2px #C3CBD5;
box-shadow: 2px 0 8px -7px #202020;
border-right: 1px solid #C3CBD5;
//border-right: 1px solid #C3CBD5;
height: auto !important;
bottom: 16px !important;
}
......
......@@ -209,7 +209,7 @@ export const constantRoutes = [
children: [
{
path: '/biddetail/:id(\\d+)',
component: () => import('@/views/detail//biddetail/index'),
component: () => import('@/views/detail/biddetail/index'),
name: 'Biddetail',
meta: { title: '中标业绩详情',icon: 'enterprise'}
}
......
......@@ -103,7 +103,7 @@
import { getDictType } from '@/api/main'
export default {
name: 'qualifications',
props: ['customerId','combineName'],
props: ['customerId'],
mixins: [mixin],
components:{CustomTimeSelect,CustomMoneySelect},
data(){
......
......@@ -8,8 +8,8 @@
</el-tabs>
</div>
</div>
<Zbxmfx v-if="activeName === 'first'"></Zbxmfx>
<Zbxmmx v-if="activeName === 'second'"></Zbxmmx>
<Zbxmfx v-if="activeName === 'first'" :customer-id="id"></Zbxmfx>
<Zbxmmx v-if="activeName === 'second'" :customer-id="id"></Zbxmmx>
</div>
</template>
......@@ -18,10 +18,12 @@
import Zbxmmx from './zbxmmx'
export default {
name: 'qualifications',
props: ['customerId'],
components:{Zbxmfx,Zbxmmx},
data(){
return{
activeName: 'first'
activeName: 'first',
id:this.customerId
}
},
created() {
......@@ -37,7 +39,7 @@
<style lang="scss" scoped>
.zhaobiao{
height: 100%;
/*height: 100%;*/
background: #F5F5F5;
.header{
justify-content: space-between;
......
......@@ -9,7 +9,7 @@
<slot name="slot"></slot>
</template>
<div v-else class="flex-box">
<span class="flex-box ability-total" v-if="isTotal">共{{ total }}条</span>
<span class="flex-box ability-total" v-if="isTotal">{{ total }}条</span>
<span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid']" v-if="isExcel && title ==='集团业绩'" @click="clickEXCEL"><img
src="@/assets/images/ability_excel.png">导出EXCEL</span>
<span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
......@@ -157,7 +157,7 @@
<slot name="slot"></slot>
</template>
<div v-else class="flex-box">
<span class="flex-box ability-total" v-if="isTotal">共{{ total }}条</span>
<span class="flex-box ability-total" v-if="isTotal">{{ total }}条</span>
<span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid']" v-if="isExcel && title ==='集团业绩'" @click="clickEXCEL"><img
src="@/assets/images/ability_excel.png">导出EXCEL</span>
<span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
......@@ -450,7 +450,7 @@ export default {
height: 32px;
position: absolute;
top: 0;
padding-right: 22px;
padding-right: 28px;
font-size: 12px;
padding-left: 8px;
}
......
......@@ -160,7 +160,7 @@ export default {
this.$emit('sort-change',e)
},
flexWidth(tableData) {
let currentMax = this.queryParams.pageNum*this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 55
let currentMax = this.queryParams.pageNum*this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 59
// return currentMax.toString().length*25 + 'px'
if(currentMax.toString().length>3){
wdth = wdth + (currentMax.toString().length-3)*10
......
<template>
<div class="detail-container major-project">
<head-form-new title="重点项目" :form-data="formData" :query-params="queryParams" :total="tableDataTotal" :isExcel="false"
@handle-search="handleSearch" />
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables v-else :tableLoading="tableLoading" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal" :queryParams="queryParams"
@handle-current-change="handleCurrentChange" @sort-change="sortChange">
<template slot="projectName" slot-scope="scope">
<router-link :to="`/radar/Land/details/${scope.row.id}`" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName "
v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<!-- 项目投资金额 -->
<template slot="totalInvestment" slot-scope="scope">
<div style="text-align:right;">
{{scope.row.totalInvestment ? `${scope.row.totalInvestment}万元` : "--"}}
</div>
</template>
</tables>
</div>
</template>
<script>
import mixin from '../mixins/mixin';
import { getMajorProjectListApi } from '@/api/detail/party-a/opport';
import skeleton from '@/views/project/projectList/component/skeleton';
export default {
name: 'majorProject',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
isSkeleton: true,
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 20
},
forData: [
{ label: '项目名称', prop: 'projectName', minWidth: '450', slot: true },
{ label: '项目地区', prop: 'projectAddress', width: '127' },
{ label: '项目等级', prop: 'projectLevel', width: '90' },
{ label: '项目投资金额', prop: 'totalInvestment', width: '120', slot: true },
{ label: '项目类型', prop: 'projectType', width: '120' },
{ label: '项目年度', prop: 'year', width: '90' },
],
formData: [
{ type: 1, fieldName: 'projectLevel', value: '', placeholder: '项目级别', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'projectType', value: '', placeholder: '项目类型', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: [], width: 220, uid: this.getUid() }
],
//列表
tableLoading: false,
tableData: [],
tableDataTotal: 0
};
},
computed: {
},
created() {
this.setProjectLevelOptions();
this.setProjectTypeOptions();
this.handleQuery();
},
methods: {
async setProjectLevelOptions() {
try {
const result = await this.getDicts("project_level");
if (result.code == 200) {
const levels = result.data.map(item => {
return {
name: item.dictLabel,
value: item.dictValue,
id: item.dictCode
};
});
this.setFormData("projectLevel", levels);
}
} catch (error) {
}
},
async setProjectTypeOptions() {
try {
const result = await this.getDicts("project_type_new");
if (result.code == 200) {
const types = result.data.map(item => {
return {
name: item.dictLabel,
value: item.dictValue,
id: item.dictCode
};
});
this.setFormData("projectType", types);
}
} catch (error) {
}
},
async handleQuery(params) {
this.tableLoading = true;
let param = params ? params : this.queryParams;
let res = await getMajorProjectListApi(param);
this.tableLoading = false;
if (res.code == 200) {
this.isSkeleton = false;
this.tableData = res.rows;
if (this.tableData.length > 0) {
this.tableData.map(item => {
item.transactionPrice == 0 && (item.transactionPrice = '--');
});
}
}
this.tableDataTotal = res.total;
}
}
}
</script>
<style lang="scss" scoped>
.detail-container {
background: #ffffff;
border-radius: 4px;
padding: 16px;
}
.major-project {
@import "@/assets/styles/search-common.scss";
}
</style>
\ No newline at end of file
......@@ -19,9 +19,9 @@
</template>
<script>
import mixin from '../mixins/mixin';
import skeleton from '@/views/project/projectList/component/skeleton';
import { bidNoticeArea, bidNoticeTenderStage, bidNoticePage } from '@/api/detail/party-a/opport';
import mixin from '../mixins/mixin'
import skeleton from '@/views/project/projectList/component/skeleton'
import {bidNoticeArea, bidNoticeTenderStage,bidNoticeProjectCategory, bidNoticePage} from '@/api/detail/party-a/opport'
export default {
name: 'Announcement',
props: ['companyId'],
......@@ -43,6 +43,7 @@ export default {
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true, fixed: true},
{label: '发布日期', prop: 'issueTime', sortable: 'custom', descending: '3', ascending: '4', width: '120'},
{label: '预算金额(万元)', prop: 'projectAmount', sortable: 'custom', descending: '1', ascending: '2', width: '140'},
{label: '项目类型', prop: 'projectCategory', width: '110'},
{label: '项目地区', prop: 'province', width: '120', slot: true},
{label: '招标阶段', prop: 'tenderStage', width: '90'},
{label: '招采单位联系人', prop: 'contact', width: '120'},
......@@ -53,9 +54,10 @@ export default {
{label: '报名截止日期', prop: 'overTime', width: '110'}
],
formData: [
{ type: 7, fieldName: 'province', value: '', props: { multiple: true }, placeholder: '项目地区', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'tenderStage', value: '', placeholder: '项目类型', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: [], uid: this.getUid() }
{ type: 7, fieldName: 'province', value: '',props: {multiple: true}, placeholder: '项目地区', options: []},
{ type: 4, fieldName: 'projectCategory', value: '', placeholder: '项目类型', options: []},
{ type: 4, fieldName: 'tenderStage', value: '', placeholder: '招标阶段', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []}
],
//列表
tableLoading: false,
......@@ -70,82 +72,90 @@ export default {
this.handleQuery();
},
methods: {
async handleOption() {
let [area, tender] = await Promise.all([
bidNoticeArea({ cid: this.companyId }),
bidNoticeTenderStage({ cid: this.companyId })
]);
if (area.code == 200) {
async handleOption(){
let [area, tender,project] = await Promise.all([
bidNoticeArea({cid: this.companyId}),
bidNoticeTenderStage({cid: this.companyId}),
bidNoticeProjectCategory({cid: this.companyId}),
])
if(area.code==200){
let region = area.data.map(item => {
let province = { label: item.province + '(' + item.count + ')', value: item.provinceId };
if (item.citys && item.citys.length > 0) {
let city = [], citem = {};
for (let i = 0; i < item.citys.length; i++) {
citem = { label: item.citys[i].city, value: item.citys[i].cityId };
if (item.citys[i].areas && item.citys[i].areas.length > 0) {
let area = [], aitem = {};
for (let j = 0; j < item.citys[i].areas.length; j++) {
aitem = { label: item.citys[i].areas[j].area, value: item.citys[i].areas[j].areaId };
area.push(aitem);
citem.children = area;
let province = {label:item.province+'('+item.count+')',value:item.provinceId}
if(item.citys&&item.citys.length>0){
let city = [], citem = {}
for(let i=0;i<item.citys.length;i++){
citem = {label:item.citys[i].city, value:item.citys[i].cityId}
if(item.citys[i].areas&&item.citys[i].areas.length>0){
let area = [], aitem = {}
for(let j=0;j<item.citys[i].areas.length;j++){
aitem = {label:item.citys[i].areas[j].area, value:item.citys[i].areas[j].areaId}
area.push(aitem)
citem.children = area
}
}
city.push(citem);
city.push(citem)
}
city.length > 0 ? province.children = city : '';
city.length>0 ? province.children = city : ''
}
return province;
});
this.setFormData('province', region);
return province
})
this.setFormData('province', region)
}
if (tender.code == 200) {
if(tender.code==200){
let tenderStage = tender.data.map(item => {
let it = { name: item.tenderStage + '(' + item.count + ')', value: item.tenderStage };
return it;
});
this.setFormData('tenderStage', tenderStage);
let it = {name:item.tenderStage+'('+item.count+')',value:item.tenderStage}
return it
})
this.setFormData('tenderStage', tenderStage)
}
if(project.code==200){
let projectCategory = project.data.map(item => {
let it = {name:item.projectCategory+'('+item.count+')',value:item.projectCategory}
return it
})
this.setFormData('projectCategory', projectCategory)
}
},
async handleQuery(params) {
this.tableLoading = true;
let param = this.getAreaList(params || this.queryParams);
let res = await bidNoticePage(param);
this.tableLoading = false;
if (res.code == 200) {
this.tableLoading = true
let param = this.getAreaList(params || this.queryParams)
let res = await bidNoticePage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows;
this.tableData = res.rows
}
this.tableDataTotal = res.total;
this.tableDataTotal = res.total
},
getAreaList(params) {
if (params.province && params.province.length > 0) {
let arr = this.$refs.headForm.$refs.cascader[0].getCheckedNodes();
let provinceIds = [], cityIds = [], areaIds = [];
getAreaList(params){
if(params.province&&params.province.length>0){
let arr = this.$refs.headForm.$refs.cascader[0].getCheckedNodes()
let provinceIds = [], cityIds = [], areaIds = []
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
if (arr[i].hasChildren || arr[i].level == 2) {
cityIds.push(arr[i].value);
} else {
areaIds.push(arr[i].value);
if(arr[i].hasChildren || arr[i].level==2){
cityIds.push(arr[i].value)
}else{
areaIds.push(arr[i].value)
}
}
} else {
provinceIds.push(arr[i].value);
provinceIds.push(arr[i].value)
}
}
delete params.province;
provinceIds.length > 0 ? params.provinceIds = provinceIds : '';
cityIds.length > 0 ? params.cityIds = cityIds : '';
areaIds.length > 0 ? params.areaIds = areaIds : '';
delete params.province
provinceIds.length>0?params.provinceIds = provinceIds:''
cityIds.length>0?params.cityIds = cityIds:''
areaIds.length>0?params.areaIds = areaIds:''
}
return params;
return params
}
}
}
</script>
<style lang="scss" scoped>
.detail-container {
.detail-container{
background: #ffffff;
border-radius: 4px;
padding: 16px;
......
......@@ -343,10 +343,11 @@
companyName:"",
// accendant:"",
}
console.log(this.$route.query.projectname)
if(this.thistype == 'project'){
this.queryParam.businessId = this.searchParam.businessId
this.companyName = ""
this.queryParam.companyName=this.$route.query.projectname
this.queryParam.companyName=''
}
if(this.thistype == 'custom'){
this.queryParam.customerId = this.searchParam.customerId
......
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