Commit 690227c4 authored by Administrator's avatar Administrator

Merge remote-tracking branch 'origin/V20231129-中建一局二公司' into V20231129-中建一局二公司

parents 8375890e dfb0e203
...@@ -31,4 +31,15 @@ export const getConsultingOrgEenterpriseDetailWithSearchApi = (params) => reques ...@@ -31,4 +31,15 @@ export const getConsultingOrgEenterpriseDetailWithSearchApi = (params) => reques
url: "/advisory/body/getCooperateProjectDetailList", url: "/advisory/body/getCooperateProjectDetailList",
method: "get", method: "get",
params params
});
/**
* 咨询机构项目列表 项目跳转详情获取
* @param {*} params
* @returns
*/
export const getgetConsultingOrgProjectDetailApi = (params) => request({
url: "/advisory/body/getProjectDetail",
method: "get",
params
}); });
\ No newline at end of file
...@@ -6,7 +6,29 @@ import request from '@/utils/request'; ...@@ -6,7 +6,29 @@ import request from '@/utils/request';
* @returns * @returns
*/ */
export const getCooperativeOwnerUnitsListApi = (data) => request({ export const getCooperativeOwnerUnitsListApi = (data) => request({
url: "/consultancy/page",
method: "post",
data
});
/**
* 获取(常合作业主单位、常合作施工单位、常合作集团)详情
* @param {*} data
* @returns
*/
export const getCooperativeOwnerUnitsDetailApi = (data) => request({
url: "/consultancy/detailPage", url: "/consultancy/detailPage",
method: "post", method: "post",
data data
});
/**
* 获取下拉列表选项
* @param {*} data
* @returns
*/
export const getCooperativeOwnerUnitsOptionsApi = (data) => request({
url: "/consultancy/pageSelect",
method: "post",
data
}); });
\ No newline at end of file
...@@ -454,13 +454,10 @@ li { ...@@ -454,13 +454,10 @@ li {
.table-list-com-ins { .table-list-com-ins {
.table-item { .table-item {
width: 100%; width: 100%;
height: 100%; max-height: 100%;
display: flex;
align-items: center;
justify-content: center;
.el-table { .el-table {
width: 100%; width: 100%;
height: 100%; height: auto;
font-size: 14px; font-size: 14px;
color: #232323; color: #232323;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''" v-loading="tableLoading" :data="tableData" <el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''" v-loading="tableLoading" :data="tableData"
element-loading-text="Loading" ref="tableRef" border fit highlight-current-row :default-sort="defaultSort?defaultSort:{}" element-loading-text="Loading" ref="tableRef" border fit highlight-current-row :default-sort="defaultSort?defaultSort:{}"
@sort-change="sortChange" @selection-change="selectionChange" :cell-class-name="cellClassName" :cell-style="cellStyle" @sort-change="sortChange" @selection-change="selectionChange" :cell-class-name="cellClassName" :cell-style="cellStyle"
:row-class-name="rowClassName" :row-style="rowStyle" :height="height" :maxHeight="maxHeight" v-sticky-header="stickyHeader"> :row-class-name="rowClassName" :row-style="rowStyle" :height="height" :maxHeight="comMaxHeight" v-sticky-header="stickyHeader">
<el-table-column type="selection" :width="needSelection.width ? needSelection.width : '38px'" v-if="needSelection.flag" <el-table-column type="selection" :width="needSelection.width ? needSelection.width : '38px'" v-if="needSelection.flag"
:fixed="needSelection.fixed" :align="needSelection.align" :show-overflow-tooltip="needSelection.showOverflowTooltip"> :fixed="needSelection.fixed" :align="needSelection.align" :show-overflow-tooltip="needSelection.showOverflowTooltip">
</el-table-column> </el-table-column>
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
</template> </template>
</el-table> </el-table>
<div style="padding: 30px 0;box-sizing:border-box;" v-else> <div class="table-empty-container" v-else>
<no-data /> <no-data />
</div> </div>
</div> </div>
...@@ -80,7 +80,7 @@ export default { ...@@ -80,7 +80,7 @@ export default {
type: [String, Number] type: [String, Number]
}, },
maxHeight: { maxHeight: {
type: [String, Number] type: Boolean
}, },
isIndex: { isIndex: {
type: Boolean, type: Boolean,
...@@ -168,7 +168,8 @@ export default { ...@@ -168,7 +168,8 @@ export default {
data() { data() {
return { return {
current_page: this.queryParams.pageNum, current_page: this.queryParams.pageNum,
show_page: this.paging show_page: this.paging,
comMaxHeight: null
}; };
}, },
watch: { watch: {
...@@ -177,9 +178,24 @@ export default { ...@@ -177,9 +178,24 @@ export default {
} }
}, },
created() { created() {
this.maxHeight ? this.maxHeightInit() : null;
}, },
methods: { methods: {
// 自适应当前容器
async maxHeightInit() {
try {
await this.$nextTick();
/**
* @type {HTMLDivElement}
*/
const container = document.querySelector(".table-list-com-ins .table-item");
if (container) {
this.comMaxHeight = `${container.offsetHeight}px`;
}
} catch (error) {
}
},
handleCurrentChange(e) { handleCurrentChange(e) {
if (this.MaxPage < e) { if (this.MaxPage < e) {
this.show_page = false; this.show_page = false;
...@@ -250,11 +266,21 @@ export default { ...@@ -250,11 +266,21 @@ export default {
height: 16px; height: 16px;
} }
// 空状态容器
.table-empty-container {
width: 100%;
height: 100%;
padding: 30px 0;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
}
.el-table { .el-table {
/* .cell { .el-table__header-wrapper {
display: flex; min-height: 40px;
align-items: center; }
} */
} }
} }
......
<template>
<div class="basic-engineering-information">
<div class="basic-engineering-information-inner">
<!-- 项目主体 -->
<div class="project-subject">
<div class="info-module-title"><span>项目主体</span></div>
<table>
<colgroup>
<col>
<col :style="{width : tableKeyWidth}">
<col>
<col :style="{width : tableKeyWidth}">
</colgroup>
<tr>
<td class="table-key">业主单位</td>
<td>{{comProjectDetailInfo.ownerName ? comProjectDetailInfo.ownerName : "-"}}</td>
<td class="table-key">工程承包单位</td>
<td>{{comProjectDetailInfo.contractOrgName ? comProjectDetailInfo.contractOrgName : "-"}}</td>
</tr>
<tr>
<td class="table-key">履约责任单位</td>
<td>{{comProjectDetailInfo.ownerName ? comProjectDetailInfo.ownerName : "-"}}</td>
<td class="table-key">咨询单位</td>
<td>{{comProjectDetailInfo.advisoryBodyName ? comProjectDetailInfo.advisoryBodyName : "-"}}</td>
</tr>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
name: "basicEngineeringInformation",
props: {
projectDetailInfo: Object
},
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue;
},
deep: true
}
},
data() {
return {
comProjectDetailInfo: this.projectDetailInfo,
tableKeyWidth: 0
};
},
//可访问data属性
created() {
this.setTableKeyWidth();
},
//计算集
computed: {
},
//方法集
methods: {
async setTableKeyWidth() {
try {
await this.$nextTick();
/**
* @type {HTMLDivElement}
*/
const inner = document.querySelector(".basic-engineering-information-inner");
if (inner) {
const td = parseInt((inner.offsetWidth - 140 * 2) / 2);
this.tableKeyWidth = `${parseInt(parseFloat(td / inner.offsetWidth) * 100)}%`;
}
} catch (error) {
}
}
},
}
</script>
<style lang="scss" scoped>
.basic-engineering-information {
width: 100%;
height: 100%;
background: #fff;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
padding: 16px;
box-sizing: border-box;
overflow: auto;
.basic-engineering-information-inner {
width: 100%;
height: 100%;
.info-module-title {
line-height: 24px;
color: #232323;
font-weight: bold;
font-size: 16px;
margin-bottom: 16px;
display: flex;
align-items: center;
& > span {
display: inline-block;
position: relative;
padding-left: 8px;
box-sizing: border-box;
&::before {
content: "";
position: absolute;
left: 0px;
top: 50%;
transform: translateY(-50%);
background: rgba(35, 35, 35, 0.8);
width: 2px;
height: 14px;
}
}
}
table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
&,
th,
td {
border: 1px solid #e6eaf1;
box-sizing: border-box;
}
td {
padding: 9px 12px;
line-height: 22px;
color: #232323;
font-size: 12px;
}
.table-key {
background: #f0f3fa;
color: rgba(35, 35, 35, 0.8);
width: 140px;
&.lot {
height: 62px;
}
}
.data-td {
width: calc(100% - 140px);
}
}
}
}
</style>
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
<skeleton v-if="tableLoading"></skeleton> <skeleton v-if="tableLoading"></skeleton>
<!-- table 列表 --> <!-- table 列表 -->
<table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams" <table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams"
v-else-if="!tableLoading" :height="'100%'" @handle-current-change="handleCurrentChange"> v-else-if="!tableLoading" :maxHeight="true" @handle-current-change="handleCurrentChange">
<!-- 项目列表 --> <!-- 项目列表 -->
<template slot="projectName" slot-scope="{data,row}"> <template slot="projectName" slot-scope="{data,row}">
<div v-if="row.projectName" class="no-line-feed ">{{row.projectName}}</div> <div v-if="row.projectName" class="no-line-feed ">{{row.projectName}}</div>
...@@ -99,7 +99,7 @@ export default { ...@@ -99,7 +99,7 @@ export default {
{ label: '项目列表', prop: 'projectName', width: "222px", lock: true, fixed: false, slot: true, uid: v4(), showOverflowTooltip: true }, { label: '项目列表', prop: 'projectName', width: "222px", lock: true, fixed: false, slot: true, uid: v4(), showOverflowTooltip: true },
{ label: '合同编码', prop: 'projectCode', width: "123px", uid: v4() }, { label: '合同编码', prop: 'projectCode', width: "123px", uid: v4() },
{ label: '省市', prop: 'provinceName', width: "102px", uid: v4() }, { label: '省市', prop: 'provinceName', width: "102px", uid: v4() },
{ label: '项目承接类型', prop: 'isinvestproject', width: "102px", uid: v4() }, { label: '项目承接类型', prop: 'isinvestproject', minWidth: "102px", uid: v4() },
{ label: '工程基础大类', prop: 'projectType1', width: "98px", uid: v4() }, { label: '工程基础大类', prop: 'projectType1', width: "98px", uid: v4() },
{ label: '工程类别明细', prop: 'projectType', width: "98px", uid: v4() }, { label: '工程类别明细', prop: 'projectType', width: "98px", uid: v4() },
{ label: '项目负责人姓名', prop: 'projectLeader', width: "110px", uid: v4() }, { label: '项目负责人姓名', prop: 'projectLeader', width: "110px", uid: v4() },
......
<template>
<div class="project-detail-container">
<div class="project-detail-inner">
<div class="project-header-container">
<!-- 项目名称 logo -->
<div class="prject-icon-and-title">
<img src="@/assets/images/financing/head_icon.png" alt="">
<div class="prject-title">{{projectDetailInfo.finProjectName ? projectDetailInfo.finProjectName : "-"}}</div>
</div>
<!-- 项目承接单位 -->
<div class="project-undertaking-unit-container">
<span class="project-undertaking-unit-title">项目承接单位:</span>
<span class="project-undertaking-unit">{{projectDetailInfo.contractOrgName ? projectDetailInfo.contractOrgName : "-"}}</span>
</div>
</div>
<!-- tab切换部分 -->
<div class="project-consulting-agency">
<!-- tab切换栏 -->
<dsk-tab-toggle v-model="currentList" :tabs="toggleTabs"></dsk-tab-toggle>
<!-- tab切换容器 -->
<div class="project-consulting-agency-inner">
<!-- 工程基本信息 -->
<basic-engineering-information v-if="currentList === 'project'" :projectDetailInfo="projectDetailInfo"></basic-engineering-information>
<!-- 咨询机构结算信息 -->
</div>
</div>
</div>
</div>
</template>
<script>
import DskTabToggle from "@/components/DskTabToggle";
import { getgetConsultingOrgProjectDetailApi } from "@/api/consultingOrgManagement/index";
import { v4 } from 'uuid';
import BasicEngineeringInformation from "@/views/consultingOrgManagement/components/EnterpriseList/detail/basicEngineeringInformation";
export default {
name: "projectDetail",
components: {
DskTabToggle,
BasicEngineeringInformation
},
data() {
return {
currentList: "project",
toggleTabs: [
{
value: "project",
name: "工程基本信息",
id: v4()
},
{
value: "consultingAgency",
name: "咨询机构结算信息",
id: v4()
}
],
projectDetailInfo: {},
projectKey: "",
advisoryBodyCid: ""
};
},
//可访问data属性
created() {
this.init();
},
//计算集
computed: {
},
//方法集
methods: {
async init() {
try {
const advisoryBodyCid = this.$route.params?.advisoryBodyCid;
const projectKey = this.$route.query?.projectKey;
if (!advisoryBodyCid) return this.$message.error("缺少咨询机构ID");
if (!projectKey) return this.$message.error("缺少项目主键");
const detail = await getgetConsultingOrgProjectDetailApi({
advisoryBodyCid,
projectKey
});
if (detail.code == 200 && detail.data) {
this.projectDetailInfo = { ...this.pprojectDetailInfo, ...detail.data };
}
} catch (error) {
}
}
},
}
</script>
<style lang="scss" scoped>
.project-detail-container {
width: 100%;
height: 100%;
padding: 16px 24px 24px 24px;
box-sizing: border-box;
overflow: hidden;
.project-detail-inner {
width: 100%;
height: 100%;
.project-header-container {
width: 100%;
height: 94px;
background: #fff;
border-radius: 4px;
padding: 16px;
box-sizing: border-box;
.prject-icon-and-title {
display: flex;
align-items: center;
& > img {
width: 28px;
height: 28px;
}
.prject-title {
font-size: 16px;
font-weight: bold;
color: #232323;
margin-left: 12px;
}
}
.project-undertaking-unit-container {
display: flex;
align-items: center;
margin-top: 16px;
.project-undertaking-unit-title {
font-size: 14px;
font-weight: 400;
color: rgba(35, 35, 35, 0.4);
}
.project-undertaking-unit {
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
font-weight: 400;
margin-left: 8px;
}
}
}
.project-consulting-agency {
width: 100%;
height: calc(100% - 110px);
margin-top: 16px;
.project-consulting-agency-inner {
width: 100%;
height: calc(100% - 47px);
}
}
}
}
</style>
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<skeleton v-if="tableLoading"></skeleton> <skeleton v-if="tableLoading"></skeleton>
<!-- table 列表 --> <!-- table 列表 -->
<table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams" <table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams"
v-else-if="!tableLoading" :height="'100%'" @handle-current-change="handleCurrentChange"> v-else-if="!tableLoading" :maxHeight="true" @handle-current-change="handleCurrentChange">
<!-- 咨询机构名称 --> <!-- 咨询机构名称 -->
<template slot="advisoryBodyName" slot-scope="{data,row}"> <template slot="advisoryBodyName" slot-scope="{data,row}">
<div v-if="row.advisoryBodyName" class="no-line-feed ">{{row.advisoryBodyName}}</div> <div v-if="row.advisoryBodyName" class="no-line-feed ">{{row.advisoryBodyName}}</div>
......
...@@ -71,10 +71,10 @@ ...@@ -71,10 +71,10 @@
<skeleton v-if="tableLoading"></skeleton> <skeleton v-if="tableLoading"></skeleton>
<!-- table 列表 --> <!-- table 列表 -->
<table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams" <table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams"
v-else-if="!tableLoading" :height="'100%'" @handle-current-change="handleCurrentChange"> v-else-if="!tableLoading" :maxHeight="true" @handle-current-change="handleCurrentChange">
<!-- 项目列表 --> <!-- 项目列表 -->
<template slot="projectName" slot-scope="{data,row}"> <template slot="projectName" slot-scope="{data,row}">
<div v-if="row.projectName" class="no-line-feed" v-html="row.projectName">{{row.projectName}}</div> <div v-if="row.projectName" class="no-line-feed" v-html="row.projectName" @click="viewProjectDetail(row)">{{row.projectName}}</div>
<span v-else>-</span> <span v-else>-</span>
</template> </template>
<!-- 业主单位 --> <!-- 业主单位 -->
...@@ -316,6 +316,10 @@ export default { ...@@ -316,6 +316,10 @@ export default {
this.formColum.forEach(item => this.fixedPropsKey.includes(item.prop) ? item.fixed = flag : null); this.formColum.forEach(item => this.fixedPropsKey.includes(item.prop) ? item.fixed = flag : null);
} }
}, },
// 查看项目详情
viewProjectDetail(row) {
// this.$tab.openPage(row.projectName,`/consultingOrgManagement/projectDetail/${row.advisoryBodyCid}?projectKey=${row.projectKey}`)
}
}, },
} }
</script> </script>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<div class="headForm-from"> <div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in formData"> <div class="from-item" :key="i" v-for="(form, i) in comFormData">
<!-- 单选 --> <!-- 单选 -->
<template v-if="form.type==1"> <template v-if="form.type==1">
<el-select v-model="form.value" clearable class="form-content-width same-select-com" :class="[`select-adaptive-${form.uid}`]" <el-select v-model="form.value" clearable class="form-content-width same-select-com" :class="[`select-adaptive-${form.uid}`]"
...@@ -27,12 +27,12 @@ ...@@ -27,12 +27,12 @@
<transition name="fade-position" appear mode="out-in"> <transition name="fade-position" appear mode="out-in">
<span v-if="!form.hover && !form.value">搜索</span> <span v-if="!form.hover && !form.value">搜索</span>
<el-input v-model="form.value" :placeholder="form.placeholder ? form.placeholder : '输入关键词查询'" <el-input v-model="form.value" :placeholder="form.placeholder ? form.placeholder : '输入关键词查询'"
:style="form.width?'width:'+form.width+'px':'width:238px'" @focus.stop="searchFocus($event,form)" :style="form.width?'width:'+form.width+'px':'width:238px'" @focus.stop="searchFocus($event,form)" @blur="searchBlur($event,form)"
@blur.stop="searchBlur($event,form)" @input="value => searchInput(value,form)" v-else @keydown.native.enter="changeSelect"> @input="value => searchInput(value,form)" v-else @keydown.native.enter="changeSelect">
<template slot="suffix"> <template slot="suffix">
<transition mode="out-in" appear name="fade"> <transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" @click.stop="form.value = '';changeSelect()" <img src="@/assets/images/enterprise/search-input-clear-icon.svg" @click.stop="form.value = '';changeSelect()"
v-show="form.showClearIcon"> @mousedown.prevent="''" v-show="form.showClearIcon">
</transition> </transition>
</template> </template>
</el-input> </el-input>
...@@ -127,9 +127,18 @@ export default { ...@@ -127,9 +127,18 @@ export default {
default: false default: false
} }
}, },
watch: {
formData: {
handler(newValue) {
this.comFormData = newValue;
},
deep: true
}
},
data() { data() {
return { return {
showSearchBox: false showSearchBox: false,
comFormData: this.formData
}; };
}, },
created() { created() {
...@@ -244,7 +253,7 @@ export default { ...@@ -244,7 +253,7 @@ export default {
textContainer.remove(); textContainer.remove();
}); });
dom.style.setProperty("width", `${width + 60}px`); dom.style.setProperty("width", `${width + 60}px`);
this.$emit('handle-search'); this.$emit('handle-search', this.comFormData);
return; return;
} }
textContainer.style.setProperty("visibility", "hidden"); textContainer.style.setProperty("visibility", "hidden");
...@@ -257,7 +266,7 @@ export default { ...@@ -257,7 +266,7 @@ export default {
let containerWidth = textContainer.offsetWidth + 12 + 8; let containerWidth = textContainer.offsetWidth + 12 + 8;
textContainer.remove(); textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`); dom.style.setProperty("width", `${containerWidth}px`);
this.$emit('handle-search'); this.$emit('handle-search', this.comFormData);
} }
} catch (error) { } catch (error) {
...@@ -288,13 +297,13 @@ export default { ...@@ -288,13 +297,13 @@ export default {
textContainer.remove(); textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`); dom.style.setProperty("width", `${containerWidth}px`);
} }
this.$emit('handle-search'); this.$emit('handle-search', this.comFormData);
} catch (error) { } catch (error) {
} }
}, },
changeSelect(e) { changeSelect(e) {
this.$emit('handle-search'); this.$emit('handle-search', this.comFormData);
}, },
clickEXCEL() { clickEXCEL() {
this.$emit('handle-excel'); this.$emit('handle-excel');
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
</template> </template>
</el-table> </el-table>
<div style="padding: 30px 0" v-else> <div class="table-empty-container" v-else>
<no-data /> <no-data />
</div> </div>
</div> </div>
...@@ -154,9 +154,6 @@ export default { ...@@ -154,9 +154,6 @@ export default {
::v-deep .el-table__body tr.current-row > td.el-table__cell { ::v-deep .el-table__body tr.current-row > td.el-table__cell {
background-color: #ffffff; background-color: #ffffff;
} }
/*::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}*/
::v-deep .el-table__row { ::v-deep .el-table__row {
&:nth-child(even) { &:nth-child(even) {
...@@ -177,6 +174,18 @@ export default { ...@@ -177,6 +174,18 @@ export default {
} }
} }
::v-deep .table-item { ::v-deep .table-item {
position: relative;
/* 留高度给骨架屏 */
min-height: 360px;
.table-empty-container {
position: absolute;
display: flex;
height: 100%;
width: 100%;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
.el-table td.el-table__cell { .el-table td.el-table__cell {
border-bottom: 0; border-bottom: 0;
} }
......
<template> <template>
<el-skeleton animated> <el-skeleton animated class="el-skeleton-container">
<template slot="template"> <template slot="template">
<el-skeleton-item variant="text" style="width: 60%;"/> <el-skeleton-item variant="text" style="width: 60%;" />
<el-skeleton-item variant="text" style="width: 100%;" /> <el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" /> <el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" /> <el-skeleton-item variant="text" style="width: 100%;" />
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
</template> </template>
<script> <script>
export default { export default {
name: 'skeleton' name: 'skeleton'
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.el-skeleton__item{ .el-skeleton__item {
height: 20px; height: 20px;
border-radius: 0; border-radius: 0;
margin: 9px 0; margin: 9px 0;
......
...@@ -4,41 +4,120 @@ ...@@ -4,41 +4,120 @@
@handle-search="handleSearch" /> @handle-search="handleSearch" />
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton> <skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal" <tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange"> :queryParams="queryParams" @handle-current-change="handleCurrentChange" @sort-change="sortChange">
<!-- 业主名称 -->
<template slot="companyName" slot-scope="scope">
<span v-if="scope.row.companyName" style="color: #0081FF;cursor: pointer;" @click="viewEnterprise(scope.row)"
v-html="scope.row.companyName">{{scope.row.companyName}}</span>
<span v-else>-</span>
</template>
<!-- 合作项目数量 -->
<template slot="count" slot-scope="scope">
<span v-if="scope.row.count" style="color: #0081FF;cursor: pointer;" @click="viewProject(scope.row)">{{scope.row.count}}</span>
<span v-else>-</span>
</template>
</tables> </tables>
<el-dialog title="合作项目/工程明细" :visible.sync="cooperationRecordDialog" width="1100px" @close="dialogClose" @open="dialogOPen"
class="cooperation-record-dialog-container" custom-class="cooperation-record-dialog" :destroy-on-close="true">
<div class="cooperation-record-dialog-innner">
<dialog-head-form-new title="" :form-data="dialogFormData" :query-params="dialogQueryParams" :total="dialogtableDataTotal" :isExcel="false"
@handle-search="dialogHandleSearch" ref="dialogSearchFormNew" />
<skeleton v-if="dialogIsSkeleton" style="padding: 16px"></skeleton>
<!-- 列表 -->
<dialog-tables v-if="!dialogIsSkeleton" :indexFixed="true" :tableData="dialogTableData" :forData="dialogForData"
:tableDataTotal="dialogtableDataTotal" :queryParams="dialogQueryParams" @handle-current-change="dialogCurrentChange"
@sort-change="dialogSortChange">
<!-- 合作项目/工程名称-->
<template slot="projectName" slot-scope="scope">
<span v-if="scope.row.projectName" style="color: #0081FF;cursor: pointer;" v-html="scope.row.projectName">{{scope.row.projectName}}</span>
<span v-else>-</span>
</template>
<!-- 省市区 -->
<template slot="area" slot-scope="scope">
<span>{{`${scope.row.province ? scope.row.province : ""}${scope.row.province && scope.row.city ? " - " : ""}${scope.row.city ? scope.row.city : ""}${scope.row.city && scope.row.area ? " - " : ""}${scope.row.area ? scope.row.area : ""}`}}</span>
</template>
</dialog-tables>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import skeleton from '../component/skeleton'; import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin'; import mixin from '@/views/detail/party-a/mixins/mixin';
import { getCooperativeOwnerUnitsListApi } from "@/api/consultingTransaction"; import { getCooperativeOwnerUnitsListApi, getCooperativeOwnerUnitsDetailApi, getCooperativeOwnerUnitsOptionsApi } from "@/api/consultingTransaction";
import DialogHeadFormNew from "../component/HeadFormNew";
import DialogTables from "../component/Tables";
export default { export default {
name: "cooperativeOwnerUnits", name: "cooperativeOwnerUnits",
mixins: [mixin], mixins: [mixin],
components: { components: {
skeleton skeleton,
DialogHeadFormNew,
DialogTables
}, },
props: ['companyId'], props: ['companyId'],
data() { data() {
return { return {
queryParams: { queryParams: {
cid: 586583, companyId: this.companyId,
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
companyType: 1 companyType: 1,
sort: ""
}, },
selectOptions: {},
forData: [ forData: [
{ label: '限消令对象', prop: 'name', width: '215' }, { label: '业主名称', prop: 'companyName', width: '295', slot: true, showOverflowTooltip: true },
{ label: '合作项目数量', prop: 'count', minWidth: '190', align: "right", slot: true, sortable: "custom" },
{ label: '最近一次合作时间', prop: 'time', minWidth: '214', sortable: "custom" },
{ label: '合作总金额(万元)', prop: 'amount', minWidth: '226', align: "right", sortable: "custom" },
], ],
formData: [ formData: [
{ type: 4, fieldName: 'businessTypes', value: '', placeholder: '咨询机构业务', uid: this.getUid() }, { type: 4, fieldName: 'businessTypes', value: '', placeholder: '咨询机构业务', options: [], uid: this.getUid() },
{ type: 5, fieldName: 'time', value: '', placeholder: '合作频率', startTime: 'dateFrom', endTime: 'dateTo', uid: this.getUid() }, { type: 4, fieldName: 'counterpartCompanyRoles', value: '', placeholder: '合作项目类型', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'projectTypes', value: '', placeholder: '合作工程类型', options: [], uid: this.getUid() },
{ type: 5, fieldName: 'time', value: '', placeholder: '合作频率', startTime: 'beginTime', endTime: 'endTime', uid: this.getUid() },
{ type: 6, fieldName: 'money', value: '', placeholder: '合作金额', uid: this.getUid() },
{ type: 3, fieldName: 'keyword', value: '', placeholder: '请输入', uid: this.getUid() },
], ],
//列表 //列表
tableLoading: false, tableLoading: false,
tableData: [], tableData: [],
tableDataTotal: 0, tableDataTotal: 0,
isSkeleton: true isSkeleton: true,
// 合作项目详情弹窗
cooperationRecordDialog: false,
dialogQueryParams: {
companyId: "",
pageNum: 1,
pageSize: 10,
companyType: 1,
sort: ""
},
dialogForData: [
{ label: '合作项目/工程名称', prop: 'projectName', width: '182', slot: true, showOverflowTooltip: true },
{ label: '合作时间', prop: 'time', width: '93', sortable: "custom" },
{ label: '咨询机构承担角色', prop: 'agencyBusinessType', width: '122' },
{ label: '项目类型', prop: 'counterpartRole', minWidth: '74' },
{ label: '工程类型', prop: 'projectType', minWidth: '74' },
{ label: '项目/工程金额(万元)', prop: 'amount', width: '164', sortable: "custom", align: "right", },
{ label: '项目地区', prop: 'area', width: '245', slot: true },
{ label: '数据来源', prop: 'dataSource', width: '74' },
],
dialogFormData: [
{ type: 4, fieldName: 'businessTypes', value: '', placeholder: '咨询机构业务', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'counterpartCompanyRoles', value: '', placeholder: '合作项目类型', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'projectTypes', value: '', placeholder: '合作工程类型', options: [], uid: this.getUid() },
{ type: 5, fieldName: 'time', value: '', placeholder: '合作频率', startTime: 'beginTime', endTime: 'endTime', uid: this.getUid() },
{ type: 3, fieldName: 'keyword', value: '', placeholder: '请输入', uid: this.getUid() },
],
dialogIsSkeleton: true,
dialogtableDataTotal: 0,
dialogTableData: [],
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -53,11 +132,74 @@ export default { ...@@ -53,11 +132,74 @@ export default {
methods: { methods: {
async initDetail() { async initDetail() {
try { try {
await this.setOptions(true);
await this.handleQuery(); await this.handleQuery();
} catch (error) { } catch (error) {
} }
}, },
async setOptions(flag) {
try {
const options = await getCooperativeOwnerUnitsOptionsApi({ companyId: this.queryParams.companyId });
if (options.code == 200 && options.data) {
for (const key in options.data) {
options.data[key] = options.data[key].map(item => ({ name: item, value: item }));
}
this.selectOptions = options.data;
const optionsKey = [["businessType", "businessTypes"], ["counterpartCompanyRole", "counterpartCompanyRoles"], ["projectType", "projectTypes"]];
optionsKey.forEach(([key, value]) => {
flag ? this.$set(this.formData.find(formItem => value == formItem.fieldName), "options", this.selectOptions[key]) : null;
this.$set(this.dialogFormData.find(formItem => value == formItem.fieldName), "options", this.selectOptions[key]);
});
}
} catch (error) {
console.log(error);
}
},
// 创建列表查询条件
createQueryCondition(form) {
/**
* @type {Array<{
* fieldName : string;
* value : any
* }>}
*/
const paramsArray = JSON.parse(JSON.stringify(form));
const params = {};
// 处理查询参数
paramsArray.forEach(item => {
// 有效参数
if ((item.value && item.value != "0" && !Array.isArray(item.value)) || item?.value?.length) {
// 多选
if (["businessTypes", "counterpartCompanyRoles", "projectTypes"].includes(item.fieldName)) {
params[item.fieldName] = item.value;
}
// 时间处理
if (item.fieldName == "time") {
params["beginTime"] = item.value[0];
params["endTime"] = item.value[1];
}
// 金额处理
if (item.fieldName == "money") {
params["minAmount"] = item.value[0] ? item.value[0] : "";
params["maxAmount"] = item.value[1] ? item.value[1] : "";
}
// 搜索关键词处理
if (item.fieldName == "keyword" && item?.value.trim()) {
params["keyword"] = item.value;
}
}
});
return params;
},
// 查询
async handleSearch() {
const params = this.createQueryCondition(this.formData);
this.queryParams.pageNum = 1;
const searchParams = JSON.parse(JSON.stringify({ ...params, ...this.queryParams }));
this.handleQuery(searchParams);
},
async handleQuery(params) { async handleQuery(params) {
try { try {
let data = params ? params : this.queryParams; let data = params ? params : this.queryParams;
...@@ -71,6 +213,95 @@ export default { ...@@ -71,6 +213,95 @@ export default {
this.isSkeleton = false; this.isSkeleton = false;
} }
}, },
viewEnterprise(row) {
},
async sortChange({ column, order, prop }) {
let sort = null;
switch (prop) {
case "time":
order == "ascending" ? sort = 4 : sort = 3;
break;
case "amount":
order == "ascending" ? sort = 2 : sort = 1;
break;
default:
break;
}
if (!order) sort = "";
this.queryParams.sort = sort;
try {
let data = this.queryParams;
const res = await getCooperativeOwnerUnitsListApi(data);
this.tableData = res.rows ? res.rows : [];
this.tableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
}
},
viewProject(row) {
this.dialogQueryParams.companyId = row.companyId;
this.cooperationRecordDialog = true;
},
async dialogHandleQurey(params) {
try {
let data = params ? params : this.dialogQueryParams;
this.dialogIsSkeleton = true;
const res = await getCooperativeOwnerUnitsDetailApi(data);
this.dialogTableData = res.rows ? res.rows : [];
this.dialogtableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
} finally {
this.dialogIsSkeleton = false;
}
},
dialogHandleSearch(v) {
const params = this.createQueryCondition(this.dialogFormData);
this.dialogQueryParams.pageNum = 1;
const searchParams = JSON.parse(JSON.stringify({ ...params, ...this.dialogQueryParams }));
this.dialogHandleQurey(searchParams);
},
async dialogSortChange({ column, order, prop }) {
let sort = null;
switch (prop) {
case "count":
order == "ascending" ? sort = 6 : sort = 5;
break;
case "time":
order == "ascending" ? sort = 4 : sort = 3;
break;
case "amount":
order == "ascending" ? sort = 2 : sort = 1;
break;
default:
break;
}
if (!order) sort = "";
this.dialogQueryParams.sort = sort;
try {
let data = this.dialogQueryParams;
const res = await getCooperativeOwnerUnitsDetailApi(data);
this.dialogTableData = res.rows ? res.rows : [];
this.dialogtableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
}
},
dialogCurrentChange(page) {
},
async dialogOPen() {
await this.setOptions();
await this.dialogHandleQurey();
},
dialogClose() {
const data = this.$options.data.call(this);
this.dialogQueryParams = data.dialogQueryParams;
this.dialogFormData = data.dialogFormData;
this.dialogtableDataTotal = data.dialogtableDataTotal;
this.dialogTableData = data.dialogTableData;
}
}, },
} }
</script> </script>
...@@ -110,5 +341,48 @@ export default { ...@@ -110,5 +341,48 @@ export default {
} }
} }
@import "@/assets/styles/search-common.scss"; @import "@/assets/styles/search-common.scss";
::v-deep .cooperation-record-dialog-container {
.cooperation-record-dialog {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 4px;
margin: 0px !important;
.el-dialog__header {
padding: 20px;
height: 56px;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
border-bottom: 1px solid #eeeeee;
.el-dialog__title {
color: #232323;
font-weight: bold;
line-height: 16px;
}
.el-dialog__headerbtn {
position: static;
width: 16px;
height: 16px;
}
}
.el-dialog__body {
padding: 24px 20px;
box-sizing: border-box;
.cooperation-record-dialog-innner {
width: 100%;
height: 100%;
}
}
}
}
} }
</style> </style>
...@@ -281,7 +281,7 @@ export default { ...@@ -281,7 +281,7 @@ export default {
this.companyId = data; this.companyId = data;
await this.$nextTick(); await this.$nextTick();
this.listenSider(); this.listenSider();
await this.getStatistic(); // await this.getStatistic();
await this.handleQuery(); await this.handleQuery();
await this.association(this.$route.query.customerId); await this.association(this.$route.query.customerId);
this.$refs.sidebar.getFinancial(data); this.$refs.sidebar.getFinancial(data);
...@@ -309,7 +309,7 @@ export default { ...@@ -309,7 +309,7 @@ export default {
if (result.code == 200) { if (result.code == 200) {
if (result.data.totalCount < 1) { if (result.data.totalCount < 1) {
let arr = JSON.parse(JSON.stringify(this.$refs.sidebar.sideRoute)); let arr = JSON.parse(JSON.stringify(this.$refs.sidebar.sideRoute));
arr[1].children[5].children[2].disabled = true; arr[0].children[5].children[2].disabled = true;
this.$refs.sidebar.sideRoute = arr; this.$refs.sidebar.sideRoute = arr;
} }
} }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
</tables> </tables>
<el-dialog :title="dialogTitle" :visible.sync="cooperationRecordDialog" width="1100px" @close="dialogClose" <el-dialog :title="dialogTitle" :visible.sync="cooperationRecordDialog" width="1100px" @close="dialogClose"
class="cooperation-record-dialog-container" custom-class="cooperation-record-dialog"> class="cooperation-record-dialog-container" custom-class="cooperation-record-dialog" :destroy-on-close="true">
<div class="cooperation-record-dialog-innner"> <div class="cooperation-record-dialog-innner">
<dialog-head-form-new title="" :form-data="dialogFormData" :query-params="dialogQueryParams" :total="dialogtableDataTotal" :isExcel="false" <dialog-head-form-new title="" :form-data="dialogFormData" :query-params="dialogQueryParams" :total="dialogtableDataTotal" :isExcel="false"
@handle-search="dialogHandleSearch" ref="dialogSearchFormNew" /> @handle-search="dialogHandleSearch" ref="dialogSearchFormNew" />
......
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