Commit 7c63410d authored by danfuman's avatar danfuman

修改

parent c7500d25
import request from "@/utils/request";
// 集团成员列表
export function memberList(data) {
return request({
url: '/combine/info/memberList',
method: 'post',
data: data
})
}
// 集团成员-主营业务
export function memberCount(data) {
return request({
url: '/combine/info/group/memberCount',
method: 'post',
data: data
})
}
// 集团成员资质列表
export function memberCertificateList(data) {
return request({
url: '/combine/info/certificateList',
method: 'post',
data: data
})
}
// 集团业绩列表
export function businessList(data) {
return request({
url: '/combine/info/businessList',
method: 'post',
data: data
})
}
// 集团资质列表
export function certificateList(data) {
return request({
url: '/combine/info/certificateList',
method: 'post',
data: data
})
}
......@@ -77,6 +77,7 @@ export const constantRoutes = [
{
path: '',
component: Layout,
hidden: true,
redirect: 'urban',
children: [
{
......@@ -101,6 +102,21 @@ export const constantRoutes = [
}
]
},
{
path: '/groupAccount',
component: Layout,
hidden: true,
name: 'Enterprise',
redirect: 'noredirect',
children: [
{
path: '/groupAccount/:id',
component: () => import('@/views/detail/groupAccount/index'),
name: 'groupAccount',
meta: { title: '集团户详情', icon: 'enterprise', noCache: false },
}
]
},
{
path: '/enterprise',
component: Layout,
......
<template>
<div id="detailPart" class="sides-container" :style="sideHeight?'height:'+sideHeight+'px':''">
<el-input
placeholder="搜索"
class="side-input"
v-model="searchText"
clearable
@input="handleSearch(true)"
@keyup.enter.native="handleSearch()">
<i slot="prefix" class="el-input__icon el-icon-search" @click="handleSearch()"></i>
</el-input>
<el-menu
ref="sideMenu"
:unique-opened="true"
:default-active="searchIndex?searchIndex:routeIndex"
class="detail-menu"
@open="handleOpen">
<template v-for="(item, index) in sideRoute">
<template>
<el-menu-item :index="index.toString()" @click="handleItem(item)">{{item.title}}</el-menu-item>
</template>
</template>
</el-menu>
</div>
</template>
<script>
export default {
name: 'Sidebar',
props: {
partBoxHeight: {
type: Number,
default: null
},
pathName: {
type: String,
default: null
},
customerId: {
type: String,
default: ''
},
isCompany: {
type: Boolean,
default: true
},
},
data() {
return {
searchText: '',
sideRoute: [
{title: '集团成员', pathName: 'members'},
{title: '集团资质', pathName: 'qualifications'},
{title: '集团业绩', pathName: 'performance'},
],
defaultRoute: [],
customer:[
'members',
'qualifications',
'performance',
],
uniqueOpened:false,
searchIndex: ''
}
},
computed: {
sideHeight() {
let sideHeight = document.getElementById("detailPart")?document.getElementById("detailPart").offsetHeight:null, bowerHeight = document.body.clientHeight-170 || null
if(this.partBoxHeight<bowerHeight) {
sideHeight = bowerHeight
}else{
sideHeight = '1222'/*this.partBoxHeight*/
}
return sideHeight
},
routeIndex(){
let idx = this.getRouteIdx('', this.pathName) || '0-0'
return idx
}
},
created() {
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute))
},
watch:{
},
methods: {
handleOpen(key, keyPath) {
},
handleItem(item){
this.$emit("currentPath", item)
},
handleSearch(flag){
if((this.searchText&&!flag) || (!this.searchText&&flag)){
let idx = this.getRouteIdx(this.searchText)
if(idx){
if(idx.includes('-')){
let openIdx = idx.slice(0, 1)
this.sideRoute = [this.defaultRoute[openIdx]]
this.$refs.sideMenu.open(openIdx)
}else{
this.sideRoute = [this.defaultRoute[idx]]
}
this.searchIndex = '-1'
}else{
this.sideRoute = this.defaultRoute
this.searchIndex = ''
}
}
},
getRouteIdx(pathTitle, pathName){
let idx = '', sideArr = this.sideRoute==this.defaultRoute?this.sideRoute:this.defaultRoute
for(let i=0; i < sideArr.length; i++){
if(sideArr[i].title == pathTitle || sideArr[i].pathName == pathName){
idx = i.toString()
break
}else if(sideArr[i].children){
for(let j=0; j< sideArr[i].children.length ; j++){
if(sideArr[i].children[j].title == pathTitle || sideArr[i].children[j].pathName == pathName){
idx = i+'-'+j
break
}
}
}
}
return idx
},
}
}
</script>
<style lang="scss" scoped>
#app{
.sides-container{
width: 144px;
min-height: calc(100vh - 170px);
padding-bottom: 20px;
background: #FFFFFF;
border-radius: 4px;
.side-input{
width: 128px;
margin-top: 16px;
margin-left: 8px;
border: 0;
::v-deep .el-input__inner{
height: 32px;
background: #F3F3F4;
border-radius: 20px;
border: 0;
&::placeholder {
color: #3D3D3D;
}
}
.el-icon-search{
line-height: 34px;
color: #0081FF;
cursor: pointer;
}
}
.detail-menu{
margin-top: 20px;
border-right: 0;
::v-deep .el-menu-item, ::v-deep .el-submenu__title{
height: 30px;
line-height: 30px;
font-size: 14px;
color: #232323;
padding: 0 0 0 16px !important;
text-align: initial !important;
&:hover, &:focus, &.is-active{
color: #0081FF !important;
background: linear-gradient(91deg, rgba(0,129,255,0.1) 0%, rgba(0,129,255,0) 100%);;
}
.el-submenu__icon-arrow{
color: #232323;
right: 48px;
margin-top: -5px;
}
}
.is-disabled:hover{
color: rgba(35, 35, 35, 0.8)!important;
&:before {
color: rgba(35, 35, 35, 0.8)!important;
}
}
::v-deep .el-submenu .el-menu-item{
font-size: 12px;
color: rgba(35,35,35,0.8);
padding: 0 0 0 27px !important;
min-width: 144px !important;
position: relative;
&:before {
content: "";
position: absolute;
top: 14px;
left: 21px;
width: 2px;
height: 2px;
background: #0081FF;
border-radius: 50%;
}
}
}
}
}
</style>
<template>
<div class="members">
<head-form
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-if="!isSkeleton"
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="companyName" slot-scope="scope">
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.companyId)}`:`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId&&scope.row.companyName" v-html="scope.row.companyName"></router-link>
<div v-else v-html="scope.row.companyName || '--'"></div>
</template>
</tables>
</div>
</template>
<script>
import Skeleton from "./skeleton"
import {encodeStr} from "@/assets/js/common"
import Tables from "../../party-a/component/Tables"
import HeadForm from "../../party-a/component/HeadForm"
import {memberList,memberCount} from '@/api/detail/groupAccount/groupAccount'
export default {
name: 'members',
props: ['companyId'],
components:{
Skeleton,Tables,HeadForm
},
data(){
return{
encodeStr,
isSkeleton:true,
tableLoading:false,
isDetails: false,
defaultSort: {prop: 'time', order: 'descending'},
queryParams: {
combineId: '81de7ca2a967d91c2afad9cb5fc30e6d',
pageNum: 1,
pageSize: 20
},
forData: [
{label: '企业名称', prop: 'companyName', minWidth: '200', slot: true},
{label: '成员层级', prop: 'combineMemberLevel', minWidth: '100'},
{label: '法定代表人', prop: 'corporatePerson', minWidth: '100'},
{label: '注册资本', prop: 'regCapital', minWidth: '150', sortable: 'custom', descending: '3', ascending: '4'},
{label: '持股比例(%)', prop: 'stockPercent', minWidth: '150', sortable: 'custom', descending: '3', ascending: '4'},
{label: '成立日期', prop: 'registeredDate', minWidth: '150'},
{label: '企业地区', prop: 'address', minWidth: '150'},
],
formData: [
{ type: 4, fieldName: 'combineMemberLevel', value: '', placeholder: '成员层级', options:[]},
{ type: 4, fieldName: 'combineMemberLevel', value: '', placeholder: '主营业务', options:[]},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询'},
],
cycj:[
{
name:'子集团',
value:'子集团'
},
{
name:'集团本身',
value:'集团本身'
},
{
name:'一级子公司',
value:'一级子公司'
},
{
name:'二级子公司',
value:'二级子公司'
},
{
name:'三级子公司',
value:'三级子公司'
},
],
kjxqy:[
{
name:'高新技术企业',
value:'3.2.1.'
},
{
name:'科技型中小企业',
value:'3.2.2.'
},
{
name:'国家级企业技术中心',
value:'3.2.3.'
},
{
name:'省级企业技术中心',
value:'3.2.4.'
},
{
name:'专精特新',
value:'3.2.5.'
},
{
name:'雏鹰企业',
value:'3.2.6.'
},
{
name:'小巨人企业',
value:'3.2.7.'
},
],
tableData:[],
tableDataTotal:0,
}
},
created() {
this.handleQuery()
this.getMemberCount()
this.formData[0].options=this.cycj;
},
methods: {
//主营业务
getMemberCount(){
memberCount({combineId: this.queryParams.combineId}).then(res=>{
let data = res.data
for(let key in data){
this.formData[1].options.push({
name: key+ '(' + data[key] + ')',
value: key,
})
}
})
},
handleQuery(params){
this.isSkeleton = true
let data = params ? params : this.queryParams
memberList(data).then(res=>{
this.tableData = res.rows
this.tableDataTotal = res.total
this.isSkeleton = false
})
},
formParams(){
},
handleSearch(){
},
//分页
handleCurrentChange(e){
let params = this.formParams()
params.pageNum = e
this.queryParams.pageNum = e
// this.handleQuery(params)
},
handleSizeChange(e){
},
//排序
sortChange(e){
let item = this.forData.find(item => item.prop === e.prop)
this.queryParams.sort = item[e.order]
this.handleSearch()
}
}
}
</script>
<style lang="scss" scoped>
.members{
background: #ffffff;
border-radius: 4px;
padding: 16px;
.headForm{
margin-bottom: 14px;
.common-title{
margin-right: 24px;
}
}
}
</style>
<template>
<div class="performance">
<head-form
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-if="!isSkeleton"
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="companyCount" slot-scope="scope">
<div v-html="scope.row.companyCount || '--'"></div>
</template>
</tables>
</div>
</template>
<script>
import Skeleton from "./skeleton"
import {encodeStr} from "@/assets/js/common"
import Tables from "../../party-a/component/Tables"
import HeadForm from "../../party-a/component/HeadForm"
import {memberCertificateList} from '@/api/detail/groupAccount/groupAccount'
export default {
name: 'qualifications',
props: ['companyId'],
components:{
Skeleton,Tables,HeadForm
},
data(){
return{
encodeStr,
isSkeleton:true,
tableLoading:false,
isDetails: false,
defaultSort: {prop: 'time', order: 'descending'},
queryParams: {
combineId: '81de7ca2a967d91c2afad9cb5fc30e6d',
pageNum: 1,
pageSize: 20
},
forData: [
{label: '中标时间', prop: 'qualificationName',minWidth: '100'},
{label: '中标成员', prop: 'companyCount', slot: true,minWidth: '150'},
{label: '项目名称', prop: 'companyCount', slot: true,minWidth: '200'},
{label: '中标金额(万元)', prop: 'companyCount',minWidth: '150'},
{label: '中标地区', prop: 'companyCount',minWidth: '100'},
{label: '业绩类型', prop: 'companyCount',minWidth: '100'},
{label: '项目类型', prop: 'companyCount',minWidth: '100'},
{label: '业主单位', prop: 'companyCount', slot: true,minWidth: '200'},
],
formData: [
{ type: 4, fieldName: 'combineMemberLevel', value: '', placeholder: '筛选', options:[]},
],
cycj:[
{
name:'子集团',
value:'子集团'
},
{
name:'集团本身',
value:'集团本身'
},
{
name:'一级子公司',
value:'一级子公司'
},
{
name:'二级子公司',
value:'二级子公司'
},
{
name:'三级子公司',
value:'三级子公司'
},
],
tableData:[],
tableDataTotal:0,
}
},
created() {
this.handleQuery()
this.formData[0].options=this.cycj;
},
methods: {
handleQuery(params){
this.isSkeleton = true
let data = params ? params : this.queryParams
memberCertificateList(data).then(res=>{
this.tableData = res.rows
this.tableDataTotal = res.total
this.isSkeleton = false
})
},
formParams(){
},
handleSearch(){
},
//分页
handleCurrentChange(e){
let params = this.formParams()
params.pageNum = e
this.queryParams.pageNum = e
// this.handleQuery(params)
},
handleSizeChange(e){
},
//排序
sortChange(e){
let item = this.forData.find(item => item.prop === e.prop)
this.queryParams.sort = item[e.order]
this.handleSearch()
}
}
}
</script>
<style lang="scss" scoped>
.performance{
background: #ffffff;
border-radius: 4px;
padding: 16px;
.headForm{
margin-bottom: 14px;
.common-title{
margin-right: 24px;
}
}
}
</style>
<template>
<div class="qualifications">
<head-form
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-if="!isSkeleton"
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="companyCount" slot-scope="scope">
<div v-html="scope.row.companyCount || '--'"></div>
</template>
</tables>
</div>
</template>
<script>
import Skeleton from "./skeleton"
import {encodeStr} from "@/assets/js/common"
import Tables from "../../party-a/component/Tables"
import HeadForm from "../../party-a/component/HeadForm"
import {memberCertificateList} from '@/api/detail/groupAccount/groupAccount'
export default {
name: 'qualifications',
props: ['companyId'],
components:{
Skeleton,Tables,HeadForm
},
data(){
return{
encodeStr,
isSkeleton:true,
tableLoading:false,
isDetails: false,
defaultSort: {prop: 'time', order: 'descending'},
queryParams: {
combineId: '81de7ca2a967d91c2afad9cb5fc30e6d',
pageNum: 1,
pageSize: 20
},
forData: [
{label: '资质名称', prop: 'qualificationName'},
{label: '拥有该资质成员', prop: 'companyCount', slot: true},
],
formData: [
{ type: 4, fieldName: 'combineMemberLevel', value: '', placeholder: '筛选', options:[]},
],
cycj:[
{
name:'子集团',
value:'子集团'
},
{
name:'集团本身',
value:'集团本身'
},
{
name:'一级子公司',
value:'一级子公司'
},
{
name:'二级子公司',
value:'二级子公司'
},
{
name:'三级子公司',
value:'三级子公司'
},
],
tableData:[],
tableDataTotal:0,
}
},
created() {
this.handleQuery()
this.formData[0].options=this.cycj;
},
methods: {
handleQuery(params){
this.isSkeleton = true
let data = params ? params : this.queryParams
memberCertificateList(data).then(res=>{
this.tableData = res.rows
this.tableDataTotal = res.total
this.isSkeleton = false
})
},
formParams(){
},
handleSearch(){
},
//分页
handleCurrentChange(e){
let params = this.formParams()
params.pageNum = e
this.queryParams.pageNum = e
// this.handleQuery(params)
},
handleSizeChange(e){
},
//排序
sortChange(e){
let item = this.forData.find(item => item.prop === e.prop)
this.queryParams.sort = item[e.order]
this.handleSearch()
}
}
}
</script>
<style lang="scss" scoped>
.qualifications{
background: #ffffff;
border-radius: 4px;
padding: 16px;
.headForm{
margin-bottom: 14px;
.common-title{
margin-right: 24px;
}
}
}
</style>
<template>
<el-skeleton animated>
<template slot="template">
<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: 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%;" />
</template>
</el-skeleton>
</template>
<script>
export default {
name: 'skeleton'
}
</script>
<style lang="scss" scoped>
.el-skeleton__item{
height: 20px;
border-radius: 0;
margin: 9px 0;
background: #f0f0f0;
}
</style>
<template>
<div class="app-container group-container">
<Header :company-id="companyId" :companyInfo="companyInfo" :cooDetail="cooDetail" v-if="companyId" :isCompany="isCompany"/>
<div class="flex-box group-main">
<div class="group-left">
<side-bar ref="sidebar" @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" :customerId="customerId"/>
</div>
<div class="group-right">
<div id="groupBox" v-if="companyId">
<Members v-if="currentPath.pathName=='members'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" />
<Qualifications v-if="currentPath.pathName=='qualifications'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" />
<Performance v-if="currentPath.pathName=='performance'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" />
</div>
</div>
</div>
</div>
</template>
<script>
import { idRemark } from '@/api/common'
import Header from "../party-a/component/Header"
import SideBar from "./component/Sidebar"
import Members from "./component/members"
import Qualifications from "./component/qualifications"
import Performance from "./component/performance"
import { infoHeader } from '@/api/detail/party-a/index'
import elementResizeDetectorMaker from "element-resize-detector"
export default {
name: 'GroupAccount',
components:{
Header,SideBar,Members,Qualifications,Performance
},
data(){
return{
companyId: '', //企业Id(测试默认3068)
customerId: '', //企业Id(测试默认'a00d582a6041f32c16aac804e4924736')
companyInfo: {},
cooDetail: {},
currentPath: {
pathName: 'members' //默认展示页
},
partBoxHeight: null,
isCompany: false,
}
},
created() {
if (this.$route.params.id) { // 获取companyId
let companyId = this.$route.params.id
this.getCompanyId(companyId)
}
if (this.$route.query.path) { // 获取跳转对应板块
this.currentPath.pathName = this.$route.query.path
}
},
mounted(){
},
methods: {
showPartPage(e){
this.currentPath = e
},
// 解密
async getCompanyId(companyId){
let { data } = await idRemark({mark:companyId})
if( data ){
this.companyId = data
this.$nextTick(() => {
this.listenSider()
})
this.handleQuery();
}
},
async handleQuery() {
this.isSkeleton = true;
let res = await infoHeader({companyId:this.companyId})
if(res.code==200){
this.isSkeleton = false;
this.companyInfo = res.data || {}
// if(this.companyInfo && this.companyInfo.companyName){
// this.$nextTick(()=>{
// document.getElementById('tagTitle').innerText = this.companyInfo.companyName
// })
// }
}
},
listenSider(){
const _this = this, erd = elementResizeDetectorMaker(), partBox = document.getElementById("groupBox")
erd.listenTo(partBox, element => {
_this.partBoxHeight = partBox.offsetHeight
})
},
}
}
</script>
<style lang="scss" scoped>
.group-container{
padding: 0;
}
.group-main{
margin-top: 12px;
align-items: initial;
}
.group-left{
margin-right: 16px;
}
.group-right{
min-width: 1088px;
width: 100%;
background: #FFFFFF;
border-radius: 4px;
}
</style>
......@@ -144,6 +144,9 @@ export default {
}
},
created() {
console.log(this.formData)
},
components: {
CustomTimeSelect,
CustomMoneySelect
......
......@@ -162,7 +162,8 @@
</el-table-column>
<el-table-column prop="companyName" label="公司名称" width="300" fixed>
<template slot-scope="scope">
<router-link :to="`/enterprise/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link companyName" v-html="scope.row.companyName" ></router-link>
<router-link :to="`/groupAccount/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link companyName" v-html="scope.row.companyName" ></router-link>
<!--<router-link :to="`/enterprise/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link companyName" v-html="scope.row.companyName" ></router-link>-->
<span @click="handleClick(scope.row)" class="table-span" style="color: #3D3D3D;cursor: pointer;" v-if="scope.row.claimStatus === null || scope.row.claimStatus === 1"><img src="@/assets/images/urban/rl_icon1.png"/>认领</span>
<span @click="cancelClaim(scope.row.companyName)" class="table-span" style="color: rgba(35,35,35,0.4);cursor: pointer;" v-if="scope.row.claimStatus === 0"><img src="@/assets/images/urban/rl_icon2.png"/>已认领</span>
</template>
......
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