Преглед изворни кода

feat: 自定义维度开发,查漏补缺

Satsiki пре 2 година
родитељ
комит
11ce1f6808

+ 22 - 11
src/components/CommonList.vue

@@ -3,7 +3,10 @@
     <div class="fixed-num">共
       <span>{{store.totalNum || store.dataList.length}}</span>
       条{{store.deleted ? '历史' : ''}}{{store.selectDemension.title}}</div>
-    <van-list v-model:loading="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了" @load="onLoad">
+    <van-list v-if="store.dataList.length" v-model:loading="loading"
+              :finished="finished" :immediate-check="false"
+              finished-text="没有更多了"
+              @load="onLoad">
       <div v-for="(item,index) in store.dataList" :key="index" class="card" @click="goDetail(item)">
         <div class="list-container">
           <!-- <div v-for="obj in store.selectDemension.viewList" :key="obj.value" class="item" :class="store.selectDemension.viewList?.find(listItem => listItem.valueType === 'logo') || obj.valueType === 'avatar' ? 'has-logo' : ''"> -->
@@ -28,7 +31,7 @@
                 {{item[obj.companyId].length === 32 ? "投资" : "关联"}}{{ item[obj.value] }}家企业 >
               </div>
 
-              <div v-else-if="obj.solt" @click="obj.customClick!(item)" v-html="item[obj.value] ? obj.solt(item) : '-'"></div>
+
 
               <!-- <div v-else-if="obj.valueType === 'tag'" >{{item[obj.value]}}</div> -->
 
@@ -40,19 +43,22 @@
 
                 <!-- 多个数据里面数组有数据 -->
                 <div v-if="Array.isArray(item[obj.listVal]) && item[obj.listVal][0]">
-                  <p v-for="(listItem,listIndex) in item[obj.listVal]"
-                     :key="listIndex" href="javascript:"
-                     class="block"
-                     style="width: fit-content;"
-                     :class="obj.companyId && listItem[obj.companyId] ? 'company' : ''"
-                     @click.stop="goCompany(obj,listItem)">
-                    {{listItem[obj.value || '-']}}
-                  </p>
+                  <div v-for="(listItem,listIndex) in item[obj.listVal]"
+                       :key="listIndex" href="javascript:"
+                       class="block"
+                       style="width: fit-content;"
+                       :class="obj.companyId && listItem[obj.companyId] ? 'company' : ''"
+                       @click.stop="goCompany(obj,listItem)">
+                    <p v-if="obj.solt" v-html="listItem[obj.value] ? obj.solt(listItem) : '-'"></p>
+                    <p v-else>{{listItem[obj.value || '-']}}</p>
+                  </div>
                 </div>
                 <!-- 空数组 -->
                 <p v-else>-</p>
               </div>
 
+              <div v-else-if="obj.solt" @click="obj.customClick!(item)" v-html="item[obj.value] ? obj.solt(item) : '-'"></div>
+
               <p v-else :class="[obj.valueType === 'title' ? 'title' : '', obj.companyId && item[obj.companyId] ? 'company' : '']"
                  @click.stop="goCompany(obj,item)">
                 {{item[obj.value] || '-'}}{{ item[obj.value] && obj.valueType === 'w' ? '万元' : ''}}
@@ -67,6 +73,7 @@
         <van-icon v-if="store.selectDemension.detailList || store.selectDemension.detailCustomRender" name="arrow" color="#969696" class="arrow" />
       </div>
     </van-list>
+    <van-empty v-if="!store.dataList.length && store.totalNum === 0" image-size="2.2rem" :image="emptyImg" description="暂无数据" />
   </div>
 </template>
 
@@ -74,8 +81,9 @@
   import { ViewListInter } from '@/js-pages/types'
   import { useDemensionListStore } from '@/store/demensionList'
   import { $goCompany } from '@/utils/utils'
+  import emptyImg from '@/assets/img/custom-empty-image.png'
   import dayjs from 'dayjs'
-  import { computed, ref, watch } from 'vue'
+  import { computed, onMounted, ref, watch } from 'vue'
   import { useRouter } from 'vue-router'
   import Avatar from './Global/Avatar.vue'
   const router = useRouter()
@@ -83,6 +91,9 @@
   const loading = ref(false)
   const finished = ref(false)
 
+  onMounted(() => {
+    finished.value = false
+  })
 
   const onLoad = () => {
     if (store.totalPage > store.pageNum) {

+ 107 - 3
src/components/DetailCustom/PoChanChongZheng.vue

@@ -1,12 +1,116 @@
 <template>
-  <div>123</div>
+  <div style="margin-top: 15px">
+    <van-collapse v-if="gongGaoList.length > 0" v-model="activeNames">
+      <van-collapse-item
+        title="关联案件公告"
+        name="1"
+        :value="gongGaoList.length"
+      >
+        <van-row
+          v-for="(val, i) in gongGaoList"
+          :key="i"
+          type="flex"
+          justify="space-between"
+          align="center"
+          class="yhc-nb-list guanlianInfo"
+        >
+          <div class="left" style="flex: 1">
+            <div class="left-top">
+              {{
+                val.title.substring(0, 1) !== "(" &&
+                  val.title.substring(0, 1) !== "("
+                  ? val.caseNo + val.title
+                  : val.title
+              }}
+            </div>
+            <div class="left-next">公告类型:{{ val.caseType }}</div>
+            <div class="left-next">
+              公开日期:{{
+                val.publicDate ? val.publicDate.substring(0, 10) : "-"
+              }}
+            </div>
+          </div>
+          <div class="right">
+            <van-icon name="arrow" />
+          </div>
+        </van-row>
+      </van-collapse-item>
+      <van-collapse-item
+        title="关联裁判文书"
+        name="2"
+        :value="caiPanList.length"
+      >
+        <van-row
+          v-for="(val, i) in caiPanList"
+          :key="i"
+          type="flex"
+          justify="space-between"
+          align="center"
+          class="yhc-nb-list guanlianInfo"
+        >
+          <div class="left" style="flex: 1">
+            <div class="left-top">
+              {{
+                val.title.substring(0, 1) !== "(" &&
+                  val.title.substring(0, 1) !== "("
+                  ? val.caseNo + val.title
+                  : val.title
+              }}
+            </div>
+            <div class="left-next">公告类型:{{ val.caseType }}</div>
+            <div class="left-next">
+              公开日期:{{
+                val.publicDate ? val.publicDate.substring(0, 10) : "-"
+              }}
+            </div>
+          </div>
+          <div class="right">
+            <van-icon name="arrow" />
+          </div>
+        </van-row>
+      </van-collapse-item>
+    </van-collapse>
+  </div>
 </template>
 
 <script lang="ts" setup>
-  import {onMounted} from 'vue'
+  import { useDemensionDetailStore } from '@/store/demensionDetail'
+  import {onMounted, ref} from 'vue'
+  const store = useDemensionDetailStore()
+  // const Detail = store.allRes.bankruptcyOpenCase
+  const activeNames =  ref(['1', '2'])
+  const gongGaoList = store.allRes.bankruptcyOpenAnnouncements
+  const caiPanList = store.allRes.bankruptcyJudgmentDocuments
   onMounted(() => {
   })
 </script>
 
-<style lang="less" scoped>
+<style lang="scss" scoped>
+#PoChanChongZhengDet {
+  display: flex;
+  flex-direction: column;
+  .content {
+    flex: 1;
+    overflow: auto;
+  }
+}
+.yhc-rowlist {
+  padding: 0;
+}
+.guanlianInfo {
+  border-bottom: 1px solid #ebedf0;
+  padding: 10px 0;
+  &:last-child {
+    border-bottom: none;
+  }
+  .left-top {
+    color: #333;
+  }
+}
+.foot {
+  line-height: 30px;
+  text-align: center;
+  color: #666;
+}
+
 </style>

+ 176 - 0
src/components/ListCustom/GongYingShang.vue

@@ -0,0 +1,176 @@
+<template>
+  <div>
+    <van-tabs
+      v-model:active="state.activeName"
+      color="#088BFE"
+      title-active-color="#088BFE"
+      swipeable
+      animated
+      sticky
+      line-width="30px"
+      @change="onChangeTab">
+      <van-tab
+        v-for="(item, index) in state.listYear"
+        :key="index"
+        :name="item"
+        :title="item">
+        <div v-if="state.yearData[item].dataList && state.yearData[item].dataList.length" class="caichan-tip">
+          已查询到该企业供应商信息  <span class="red">{{state.yearData[item].dataList.length||''}}</span>  起,可了解该企业主要交易对象信息,该企业对该等供应商可能负有债务,具体信息如下:
+        </div>
+        <van-list style="padding:15px 0" @load="onLoad(item)">
+          <div v-for="(year,i) in state.yearData[item].dataList" :key="i" class="yhc-model">
+            <div class="yhc-icon-name">
+              <img v-if="year.imageUrl" :src="year.imageUrl" class="icon">
+              <div v-if="!year.imageUrl" class="nameIcon">{{year.name&&year.name.substr(0,1)}}</div>
+              <div class="name flex">
+                <div class="left">{{year.name}}</div>
+                <div class="feiguan">{{year.relationship||'-'}}</div>
+              </div>
+            </div>
+            <div class="yhc-rowlist">
+              <div class="rowcol">
+                <div class="lable">销售金额(万元)</div>
+                <div class="val">{{year.purchaseAmount||'-'}}</div>
+              </div>
+              <div class="rowcol">
+                <div class="lable">销售占比</div>
+                <div class="val">{{year.purchasePercent||'-'}}</div>
+              </div>
+              <div class="rowcol">
+                <div class="lable">关联关系</div>
+                <div class="val">{{year.relationship||'-'}}</div>
+              </div>
+              <div class="rowcol">
+                <div class="lable">年份</div>
+                <div class="val">{{year.year||'-'}}</div>
+              </div>
+              <div class="rowcol">
+                <div class="lable">来源</div>
+                <div class="val">{{year.source||'-'}}</div>
+              </div>
+            </div>
+          </div>
+          <div v-if="state.yearData[item].pageNum==state.yearData[item].totalPage" class="yhc-no-data">没有更多了</div>
+        </van-list>
+      </van-tab>
+    </van-tabs>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import { $dateFormat } from '@/utils/utils'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, reactive,ref } from 'vue'
+  import $axios from '@/api'
+  const store = useDemensionListStore()
+
+
+  const loading = ref(false)
+  const state = reactive<any>(
+    {
+      activeName: '',
+      listYear: [],
+      yearData: {},
+      loadPage:{
+        loadOk:false,
+        index:0
+      }
+    }
+  )
+
+  onMounted(() => {
+    //获取前8年
+    const currentYear = new Date().getFullYear()
+    for (let i = 0; i < 8; i++) {
+      state.listYear.push(String(currentYear - i) + '年')
+      state.yearData[String(currentYear - i) + '年'] = {
+        pageNum: 1,
+        totalPage: 0,
+        totalNum:0,
+        loading: false
+      }
+      state.activeName = state.listYear[0]
+    }
+    getData()
+  })
+
+  const onChangeTab =(name) => {
+    if (!state.yearData[name].loading&&!state.yearData[name].dataList) {
+      getData()
+    }
+  }
+
+  const changeOption = (e) => {
+    console.log('e=',e)
+    state.pageNum = 1
+    state.totalPage = 0
+    state.totalNum = ''
+    state.yearList = []
+    getData(e)
+  }
+  const onLoad = (e) => {
+    if(!loading.value && state.totalPage>state.pageNum) {
+      console.log('onLoad')
+      state.pageNum++
+      getData(state.activeName)
+    }
+  }
+  const getData = async (year='') => {
+    loading.value = true
+    const params = {
+      pageSize: '1000',
+      companyName: useDemensionListStore().entityName,
+      pageNum: state.yearData[state.activeName].pageNum,
+      year: state.activeName.replace('年', '')
+    }
+    const res:any = await $axios.get('firefly-erp/eci/supplier',{params})
+    console.log(res)
+
+    // state.yearData[state.activeName].totalPage = res.totalPage
+    // state.yearData[state.activeName].totalNum = res.totalNum
+    if(state.yearData[state.activeName].pageNum==1) {
+      state.yearData[state.activeName].dataList = res||[]
+    }else {
+      state.yearData[state.activeName].dataList = state.yearData[state.activeName].dataList.concat(res)
+    }
+    state.yearData[state.activeName].loading=false
+    //获取并转到最近有值得年份
+    if(!res) {
+      if(!state.loadPage.loadOk) {
+        if(state.loadPage.index<state.listYear.length-1) {
+          state.loadPage.index++
+          state.activeName=state.listYear[state.loadPage.index]
+          getData()
+        }else{
+          state.loadPage.loadOk=true
+        }
+      }
+    }else {
+      state.loadPage.loadOk=true
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+
+    .yhc-model {
+        margin-top: 0;
+    }
+
+    .van-list{
+        padding: 0!important;
+    }
+    .flex{
+        display: flex;
+        align-items: center;
+    }
+    .left{
+        flex: 1;
+    }
+    .feiguan {
+        font-size: 12px;
+        padding: 0px 8px;
+        border-radius: 3px;
+        background-color: #eaf6fe;
+    }
+</style>

+ 440 - 0
src/components/ListCustom/GuQuanZhiYa.vue

@@ -0,0 +1,440 @@
+<template>
+  <van-row class="GuQuanZhiYa yhc-tab-search">
+    <div class="selectDate">
+      <van-dropdown-menu active-color="#1989fa">
+        <van-dropdown-item
+          v-model="state.selectDate"
+          :options="state.optDate"
+          @change="checkDate"
+        />
+      </van-dropdown-menu>
+    </div>
+    <div class="gudongzhiyabili conetnt-seroll">
+      <div class="biliBlock">
+        <div class="blTitle">股权质押走势</div>
+        <div class="zsPic" @touchstart.stop="()=>{}" @touchmove.stop="()=>{}">
+          <div class="mobile-header"></div>
+          <div class="mobile-content">
+            <canvas id="containerZs" style="width: 100%;height: 250px;" />
+          </div>
+        </div>
+      </div>
+      <div class="biliBlock">
+        <div class="blTitle">质押比例</div>
+        <div class="yhc-subject">
+          <van-row type="flex" justify="space-between" class="yhc-item-row">
+            <van-col span="12" class="yhc-item-left">
+              <div class="left-first">股票代码</div>
+              <div class="black">{{ state.showData.stockCode || '-' }}</div>
+            </van-col>
+            <van-col span="12" class="yhc-item-right">
+              <div class="right-first">股票简称</div>
+              <div class="black">{{ state.showData.stockAbbreviation || '-' }}</div>
+            </van-col>
+          </van-row>
+          <van-row type="flex" justify="space-between" class="yhc-item-row">
+            <van-col span="12" class="yhc-item-left">
+              <div class="left-first">质押比例</div>
+              <div class="black">{{ state.showData.pledgedRatio || ' ' }}%</div>
+            </van-col>
+            <van-col span="12" class="yhc-item-right">
+              <div class="right-first">质押股数</div>
+              <div class="black">{{ state.showData.pledgedShares || ' ' }}股</div>
+            </van-col>
+          </van-row>
+          <van-row type="flex" justify="space-between" class="yhc-item-row">
+            <van-col span="12" class="yhc-item-left">
+              <div class="left-first">质押市值</div>
+              <div class="black">{{ state.showData.pledgedValue || ' ' }}元</div>
+            </van-col>
+            <van-col span="12" class="yhc-item-right">
+              <div class="right-first">质押笔数</div>
+              <div class="black">{{ state.showData.pledgedNum || '-' }}</div>
+            </van-col>
+          </van-row>
+          <van-row type="flex" justify="space-between" class="yhc-item-row">
+            <van-col span="12" class="yhc-item-left">
+              <div class="left-first">无限售股质押数</div>
+              <div class="black">{{ state.showData.unlimitedPledgedShares || ' ' }}股</div>
+            </van-col>
+            <van-col span="12" class="yhc-item-right">
+              <div class="right-first">限售股质押数</div>
+              <div class="black">{{ state.showData.restrictedPledgedShares || ' ' }}股</div>
+            </van-col>
+          </van-row>
+          <van-row type="flex" justify="space-between" class="yhc-item-row">
+            <van-col span="12" class="yhc-item-left">
+              <div class="left-first">近一年涨跌幅</div>
+              <div class="black">{{ state.showData.oneYearChange || ' ' }}%</div>
+            </van-col>
+            <van-col span="12" class="yhc-item-right">
+              <div class="right-first">所属行业</div>
+              <div class="black">{{ state.showData.industry || '-' }}</div>
+            </van-col>
+          </van-row>
+          <van-row type="flex" justify="space-between" class="yhc-item-row">
+            <van-col span="24" class="yhc-item-left">
+              <div class="left-first">交易日期</div>
+              <div class="black">{{ state.showData.date || '-' }}</div>
+            </van-col>
+          </van-row>
+        </div>
+      </div>
+    </div>
+  </van-row>
+</template>
+
+<script lang="ts" setup>
+  import $axios from '@/api'
+  import { useDemensionListStore } from '@/store/demensionList'
+
+  import { onMounted, reactive } from 'vue'
+  import F2 from '@antv/f2'
+
+  const state = reactive({
+    details: {} as any,
+    optDate: [],
+    allData:[],
+    selectDate:'',
+    showData:{}
+  })
+
+  const getData1 = async () => {
+    const params = {
+      dimensionCode: 'stock_pledge',
+      entityId: useDemensionListStore().entityId,
+      entityName: useDemensionListStore().entityName,
+      entityType: useDemensionListStore().entityType,
+      pageNum: 1,
+      pageSize: 1000
+    }
+    const res:any = await $axios.get('lawyer-workbench/risk/dimension/page',{params})
+
+    res.dataList.forEach(i => {
+      const _d=i.transactionDate && i.transactionDate.substring(0, 10)
+      state.allData.push({...i,date:_d})
+      state.optDate.push({text: _d, value: _d})
+    })
+    state.selectDate = state.allData[0].date
+    checkDate(state.selectDate)
+    graph()
+    state.details = res[0]
+  }
+
+  const getData = async () => {
+    const params = {
+      dimensionCode: useDemensionListStore().selectDemension?.code,
+      entityId: useDemensionListStore().entityId,
+      entityName: useDemensionListStore().entityName,
+      entityType: useDemensionListStore().entityType,
+      pageNum: 1,
+      pageSize: 1000
+    }
+    const res:any = await $axios.get('lawyer-workbench/risk/dimension/page',{params})
+    res.dataList.forEach(i => {
+      const _d=i.transactionDate && i.transactionDate.substring(0, 10)
+      state.allData.push({...i,date:_d})
+      state.optDate.push({text: _d, value: _d})
+    })
+    state.selectDate = state.allData[0].date
+    checkDate(state.selectDate)
+    graph()
+    state.details = res[0]
+  }
+
+  const checkDate = (e) => {
+    state.allData.forEach((item) => {
+
+      if (item.date === e) {
+        state.showData = item
+        return
+      }
+    })
+  }
+
+
+  const graph = () => {
+    const ticks=[]
+    const data=state.allData.map((item,i) => {
+      if(i===0 || i===state.allData.length-1) {
+        ticks.push(item.date)
+      } else {
+        ticks.push('')
+      }
+      return {
+        date:item.date,
+        value:item.pledgedRatio*1
+      }
+    })
+    data.reverse()
+    ticks.reverse()
+    const chart = new F2.Chart({
+      id: 'containerZs',
+      pixelRatio: window.devicePixelRatio,
+      padding: [45, 40, 'auto']
+    })
+
+    chart.source(data, {
+      value: {
+        tickCount: 5,
+        min: 0,
+        formatter: function formatter(val) {
+          return val + '%'
+        }
+      },
+      date: {
+        // type:'cat',
+        // values:ticks,
+        ticks:ticks
+        // tickInterval:100,
+        // min:data[data.length-15].date,
+        // max:data[data.length-1].date,
+      }
+    })
+    data.forEach(function (obj) {
+      chart.guide().point({
+        position: [obj.date, obj.value],
+        style: {
+          fill: '#1890ff',
+          r: 1
+        }
+      })
+      // chart.guide().text({
+      //     position: [ obj.time, obj.tem ],
+      //     content: obj.tem + '人',
+      //     style: {
+      //         fill: '#222',
+      //         textAlign: 'center'
+      //     },
+      //     offsetY: -15,
+      //     offsetX: 0
+      // });
+    })
+    chart.axis('date', {
+      label: function label(text, index, total) {
+        const textCfg = {}
+        if (index === 0) {
+          textCfg.textAlign = 'left'
+        } else if (index === total - 1) {
+          textCfg.textAlign = 'right'
+        }
+        return textCfg
+      }
+    })
+    chart.axis('value', {
+      label: function label(text, index, total) {
+        const textCfg = {}
+        if (index === 0) {
+          textCfg.textBaseline = 'bottom'
+        } else if (index === total - 1) {
+          textCfg.textBaseline = 'top'
+        }
+        return textCfg
+      }
+    })
+    // chart.interaction('pan')
+    // chart.scrollBar({
+    //   mode: 'x',
+    //   xStyle: {
+    //     offsetY: -5
+    //   }
+    // });
+    chart.guide().html({
+      position: ['min', 'max'],
+      html: `<div id="tooltipWrapper" style="height: 30px;background-color:#E9F1FF;line-height: 30px;">
+                        <div id="tooltipName" style="float:left;font-size:12px;color:#2E2E2E;"></div>
+                        <div id="tooltipValue" style="float:right;font-size:12px;color:#2E2E2E;"></div>
+                        </div>`,
+      offsetY: -22.5
+    })
+    chart.tooltip({
+      alwaysShow: true,
+      showCrosshairs: true,
+      custom: true, // 自定义 tooltip 内容框
+      tooltipMarkerStyle: {
+        fill: '#fff' // 设置 tooltipMarker 的样式
+      },
+      onChange: function onChange(obj) {
+        const items = obj.items
+        const originData = items[0].origin
+        const date = originData.date
+        const value = originData.value
+        const tag = originData.tag
+        document.querySelector('#tooltipWrapper').style.width =
+          document.documentElement.clientWidth + 'px'
+        document.querySelector('#tooltipWrapper').style.left = 0
+        document.querySelector('#tooltipWrapper').style.right = 0
+        document.querySelector('#tooltipName').style.paddingLeft = '15px'
+        document.querySelector('#tooltipValue').style.paddingRight = '15px'
+
+        document.querySelector('#tooltipName').innerText = '日期:' + date
+        const color = '#FA541C'
+        document.querySelector('#tooltipValue').innerHTML =
+          '质押比例:<span style="color:' +
+          color +
+          '">' +
+          items[0].value +
+          '</span>'
+        document.querySelector('#tooltipWrapper').style.display = 'block'
+      }
+      // onHide: function onHide() {
+      //   document.querySelector("#tooltipWrapper").style.display = 'none';
+      // },
+    })
+    chart.line().position('date*value').color('#518DFE')
+
+    chart.render()
+  }
+
+  onMounted(() => {
+    getData()
+    getData1()
+  })
+</script>
+
+<style scoped lang='scss'>
+body {
+  background: #f5f5f5;
+}
+
+.GuQuanZhiYa {
+  display: flex;
+  flex-direction: column;
+
+  .van-tabs__wrap {
+    border-bottom: 1px solid #f5f3f3;
+  }
+  .selectDate {
+    border-bottom: 1px solid #f5f3f3;
+    .van-dropdown-menu .van-dropdown-menu__bar {
+      height: 38px;
+      box-shadow: none;
+    }
+  }
+  .gudongzhiyabili {
+    .biliBlock {
+      margin-bottom: 15px;
+      background: #fff;
+      .blTitle {
+        height: 38px;
+        line-height: 38px;
+        color: #333;
+        font-weight: bold;
+        padding: 0 15px;
+        border-bottom: 1px solid #f5f3f3;
+        font-size: 14px;
+      }
+      .zsPic {
+        text-align: center;
+      }
+    }
+  }
+    .zhongyaogudongtongji{
+        .tj-top{
+            background: #fff;
+            .items-det-top{
+                flex: 1;
+                margin: 0 16px;
+                padding: 16px 0;
+                img{
+                    width: 24px;
+                    height: 24px;
+                    margin-right: 6px;
+                }
+                span{
+                    line-height: 20px;
+                    flex: 1;
+                    color: #242A32;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+  .yhc-subject {
+    padding: 6px $padding 10px $padding;
+    border-bottom: 12px solid #f1f2f4;
+    background-color: white;
+  }
+  .yhc-item-row {
+    padding-top: 12px;
+    .yhc-item-left {
+      color: $grayFont;
+
+      .left-first {
+        padding: 2px 0px;
+      }
+
+      .name {
+        color: $link;
+        padding-top: 8px;
+      }
+
+      .black {
+        color: $blackColor;
+        padding-top: 8px;
+        line-height: 16px;
+        padding-right: $padding;
+      }
+
+      .entireLine {
+        color: $blackColor;
+        padding: 8px 0;
+        line-height: 16px;
+        border-bottom: 0.5px solid $border;
+      }
+    }
+    .yhc-item-right {
+      color: $grayFont;
+      .right-first {
+        padding: 2px $padding;
+        border-left: 1px solid $border;
+        i {
+          color: $link;
+          vertical-align: bottom;
+          margin-left: 10px;
+          font-size: 16px;
+        }
+      }
+      .black {
+        padding-left: $padding;
+        color: $blackColor;
+        padding-top: 8px;
+      }
+    }
+  }
+
+  .bzxr-items {
+    background: #fff;
+    padding: 15px 10px;
+    width: 100%;
+    margin-bottom: 15px;
+
+    .bzxr-items-top {
+      line-height: 24px;
+      color: #000;
+    }
+
+    .bzxr-items-info {
+      display: flex;
+      justify-content: space-between;
+      width: 100%;
+      align-items: center;
+
+      .bzxr-items-left {
+        flex: 1;
+        line-height: 24px;
+        color: $grayFont;
+
+        .bzxr-items-nr {
+          flex: 1;
+        }
+      }
+
+      .bzxr-item-right {
+        width: 16px;
+        margin-left: 5px;
+      }
+    }
+  }
+}
+</style>

+ 117 - 0
src/components/ListCustom/KongGuQiYe.vue

@@ -0,0 +1,117 @@
+<template>
+  <van-row id="KongGuQiYe">
+    <van-list class="content zuizhongshouyiren" style="padding-top: 0" @load="onLoad">
+      <div class="caichan-tip">
+        已查询到该企业对外控股企业 <span class="red">{{state.totalNum}}</span> 家。控股企业是指该企业直接或间接拥有实际控制权的企业。具体信息如下:
+      </div>
+      <van-row v-for="item in state.dataList" :key="item.keyNo" class="zzsyr-top yhc-padding">
+        <van-row class="zzsyr-item">
+          <van-row class="zzsyr-title">关联公司名称</van-row>
+          <van-row type="flex" justify="space-between" align="center">
+            <van-col>
+              <!-- <img :src="item.logo" width="24" height='24' style='margin-right: 4px;vertical-align: middle'> -->
+              {{item.name||'-'}}
+            </van-col>
+          </van-row>
+        </van-row>
+        <van-row class="zzsyr-item">
+          <div class="yhc-rowlist" style="padding: 0">
+
+            <div class="rowcol">
+              <div class="lable">注册金额</div>
+              <div class="val">{{item.regCapital || '-'}}</div>
+            </div>
+            <div class="rowcol">
+              <div class="lable">参股比例</div>
+              <div class="val">{{item.percent||'-'}}</div>
+            </div>
+          </div>
+        </van-row>
+
+        <div v-if="item.chainList && item.chainList.length > 0">
+          <van-row v-for="(paths,p) in item.chainList" :key="p" class="zzsyr-item">
+            <van-row class="zzsyr-title">投资路径</van-row>
+            <van-row class="zzsyr-ljdet">
+              <van-row>路径{{p+1}}</van-row>
+              <van-row class="zzsyr-ms-det">
+                <van-row class="yhc-zzsyr-ms">
+                  <a v-show="paths[1]&&paths[1].value">{{paths[1]&&paths[1].value}}</a>
+                  <span v-show="paths[2]&&paths[2].value" class="jiantou">{{paths[2]&&paths[2].value}}</span>
+                  <a v-show="paths[3]&&paths[3].value">{{paths[3]&&paths[3].value}}</a>
+                  <div v-for="(lujing,l) in paths" :key="l" style="display: inline">
+                    <span v-show="l ==1">
+                      <span v-show="paths[3*l+1]&&paths[3*l+1].value" class="jiantou">{{paths[3*l+1]&&paths[3*l+1].value}}</span>
+                      <a v-show="paths[3*l+2]&&paths[3*l+2].value">{{paths[3*l+2]&&paths[3*l+2].value}}</a>
+                    </span>
+                  </div>
+                </van-row>
+              </van-row>
+            </van-row>
+          </van-row>
+        </div>
+      </van-row>
+    </van-list>
+  </van-row>
+</template>
+
+<script lang="ts" setup>
+  import $axios from '@/api'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, ref,reactive } from 'vue'
+  import { $nameByCompanyName } from '@/utils/utils'
+  const store = useDemensionListStore()
+  const dataList = ref<any>([])
+  const controllerData = ref<any>({})
+  const toFixed =  ref('')
+
+  const state = reactive<any>({
+    dataList: [],
+    pageNum:1,
+    totalPage:0,
+    totalNum:''
+  })
+
+  const onLoad =() => {
+    if(!state.loading&&state.totalPage>state.pageNum) {
+      state.pageNum++
+      getData()
+    }
+    console.log('onLoad')
+  }
+
+  const getData = async () => {
+    const params = {
+      infoCode: useDemensionListStore().selectDemension?.code,
+      companyName: useDemensionListStore().entityName,
+      pageNum:state.pageNum,
+      pageSize:'10'
+    }
+    const res:any = await $axios.get('firefly-erp/eci/dimension/detail',{params})
+
+    state.dataList = state.dataList.concat(res.dataList)
+    state.totalPage = res.totalPage
+    state.totalNum = res.totalNum
+
+  }
+  onMounted(() => {
+    getData()
+  })
+</script>
+
+<style lang='scss' scoped>
+    body{
+        background: #f3f3f3;
+    }
+    #KongGuQiYe{
+        display: flex;
+        flex-direction: column;
+        .content{
+            flex: 1;
+            overflow: auto;
+        }
+    }
+    .zzsyr-top{
+        margin-bottom: 15px;
+    }
+
+</style>

+ 203 - 0
src/components/ListCustom/ShiJiKongZhiRen.vue

@@ -0,0 +1,203 @@
+<template>
+  <van-row
+    id="ShiJiKongZhiRen"
+    class="zuizhongshouyiren"
+    style="padding-top: 15px"
+  >
+    <div class="content">
+      <van-row class="zzsyr-top yhc-padding" style="margin-bottom: 15px">
+        <van-row class="zzsyr-item">
+          <van-row class="zzsyr-title">实际控制人名称</van-row>
+          <van-row type="flex" justify="space-between" align="center">
+            <van-col>{{
+              controllerData.name || "-"
+            }}</van-col>
+            <!--<van-row type='flex' align='center' class="yhc-zzsyr-go">
+                            <span>他关联27家企业</span>
+                            <img src="../assets/img/yjt.png" alt="">
+                        </van-row>-->
+          </van-row>
+        </van-row>
+        <van-row class="zzsyr-item">
+          <van-row class="zzsyr-title">最终受益股份</van-row>
+          <van-row type="flex" justify="start" align="center">{{
+            toFixed || "-"
+          }}</van-row>
+        </van-row>
+        <van-row class="zzsyr-item">
+          <van-row class="zzsyr-title">控制链</van-row>
+          <van-row
+            v-for="(item, index) in dataList"
+            :key="index"
+            class="zzsyr-ljdet"
+          >
+            <van-row>控制路径{{ index + 1 }}</van-row>
+            <van-row class="zzsyr-ms-det">
+              <van-row class="yhc-zzsyr-ms">
+                <div
+                  v-for="(lujing, l) in item"
+                  :key="l"
+                  style="display: inline"
+                >
+                  <a>{{ lujing.name }}</a>
+                  <span v-show="lujing.percent" class="jiantou">{{ lujing.percent }}</span>
+                </div>
+
+              </van-row>
+            </van-row>
+            <!-- <van-row class="zzsyr-tips">
+                            注:未识别出股权比例>25%的自然人,故以法定代表人作为最终受益人。
+                        </van-row> -->
+          </van-row>
+        </van-row>
+      </van-row>
+    </div>
+    <!-- <van-row class="yhc-footer">
+            <img src="../assets/img/logo.png" alt="">
+            企业最终受益人为疑似直接或间接拥有超过25%及以上企业股权的自然人或企业。仅供参考
+        </van-row> -->
+  </van-row>
+</template>
+
+<script lang="ts" setup>
+  import $axios from '@/api'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, ref } from 'vue'
+  import { $nameByCompanyName } from '@/utils/utils'
+  const store = useDemensionListStore()
+  const dataList = ref<any>([])
+  const controllerData = ref<any>({})
+  const toFixed =  ref('')
+  const getData = async () => {
+    const params = {
+      infoCode: useDemensionListStore().selectDemension?.code,
+      companyName: useDemensionListStore().entityName
+    }
+    const res:any = await $axios.get('firefly-erp/eci/dimension/detail',{params})
+    const controllerData = res.actualController
+    controllerData.value = controllerData
+    toFixed.value = (res.ratio *100).toFixed(2) + '%'
+    // this.companyName=res.body.companyName;
+    const pData = JSON.parse(res.pathMap).p_0
+    //首先判断是企业还是自然人(1:自然人 2:企业)
+    let id = ''
+    if(controllerData.type == '1') {
+      id = controllerData.hid
+    }else if(controllerData.type == '2') {
+      id = controllerData.gid
+    }
+    //根据id判断有几条链
+    const relationships = pData.relationships
+    const nodeList = pData.nodes
+    const tempList = []
+    const nodeData = {}
+    const allPathList = []
+    nodeList.forEach((e) => {
+      nodeData[e.id] = e
+    })
+
+    const judgeData = (endNode) => {
+      let data = ''
+      for(let i = 0;i<relationships.length;i++) {
+        if(relationships[i].startNode == endNode) {
+          data = relationships[i]
+          break
+        }
+      }
+      return data
+    }
+    relationships.forEach((e) => {
+      if(e.startNode == id) {
+        tempList.push(e)
+      }
+    })
+    //   console.log("tempList=",tempList)
+
+    tempList.forEach((data,idx) => {
+      const list = []
+      const loopData = (data) => {
+        const temp = {name:nodeData[data.startNode].properties.name,percent:(data.properties.percent*100).toFixed(2)+'%'}
+        list.push(temp)
+        if(judgeData(data.endNode)) { //判断末尾节点是否还有下一级
+          loopData(judgeData(data.endNode))
+        }else{
+          const temp2 = {name:nodeData[data.endNode].properties.name,percent:''}
+          list.push(temp2)
+        }
+      }
+      allPathList.push(list)
+      loopData(data)
+
+    })
+    console.log('allPathList===',allPathList)
+    dataList.value = allPathList
+  }
+  onMounted(() => {
+    getData()
+  })
+</script>
+
+<style lang='scss'>
+
+    body{
+        background: #f3f3f3;
+    }
+    #ZuiZhongShouYiRen {
+        display: flex;
+        flex-direction: column;
+        .content {
+            flex: 1;
+            overflow: auto;
+        }
+
+    }
+    .zuizhongshouyiren{
+    padding-top: 20px;
+
+     .zzsyr-top{
+         background: #fff;
+         &.yhc-padding{
+             padding: 0px 10px;
+         }
+         &.zzsyr-top-oth{
+             margin-top: 20px;
+         }
+         .zzsyr-item{
+             border-bottom: 1px solid $border;
+             padding: 15px 0px;
+             display: block;
+             width: 100%;
+             &:last-child{
+                 border-bottom: none;
+             }
+         }
+         .zzsyr-title{
+             color:$grayFont;
+             margin-bottom: 15px;
+         }
+         .zzsyr-ljdet{
+             .zzsyr-ms-det{
+                 background: #f8f8f8;
+                 padding: 15px;
+                 margin: 15px 0px;
+             }
+             .zzsyr-tips{
+                 color: $grayFont;
+                 line-height: 24px;
+             }
+         }
+     }
+ }
+ .yhc-footer{
+   display: flex;
+   flex-wrap: nowrap!important;
+   img{
+     height: 14px;
+     width: 14px;
+     margin-right: 2px;
+   }
+   p{
+     font-size: 12px;
+   }
+ }
+</style>

+ 145 - 0
src/components/ListCustom/ZhuYaoKeHu.vue

@@ -0,0 +1,145 @@
+<template>
+  <div>
+    <van-row>
+      <van-dropdown-menu active-color="#1989fa">
+        <van-dropdown-item v-model="state.activeName" :options="state.optionList" @change="changeOption"> </van-dropdown-item>
+
+      </van-dropdown-menu>
+      <van-list @load="onLoad()">
+        <div v-if="state.totalNum>0" class="caichan-tip">
+          已查询到该企业主要客户信息 <span class="red">{{state.totalNum||'0'}}</span> 起,可了解该企业主要交易对象信息,该企业对主要客户可能享有应收账款。具体信息如下:
+        </div>
+        <van-row class="zhuyanrenyuaninfo">
+          <div v-for="(year,i) in state.yearList" :key="i" class="yhc-model">
+            <div class="yhc-icon-name">
+              <img v-if="year.logo" :src="year.logo" class="icon">
+              <div v-if="!year.logo" class="nameIcon">{{year.client_name&&year.client_name.substr(0,1)}}</div>
+              <div class="name" style="display:flex;align-items:center;justify-content:space-between;">
+                <div>{{year.client_name}}</div>
+                <div v-show="year.relationship" class="feiguan" style="width:70px;margin-top:0px;text-align:center;margin-left:5px">{{year.relationship||'-'}}</div>
+              </div>
+            </div>
+            <div class="yhc-rowlist">
+              <div class="rowcol">
+                <div class="lable">销售占比</div>
+                <div class="val">{{year.ratio ||'-'}}</div>
+              </div>
+              <div class="rowcol">
+                <div class="lable">销售金额(万元)</div>
+                <div class="val">{{year.amt ||'-'}}</div>
+              </div>
+
+              <div class="rowcol">
+                <div class="lable">报告期</div>
+                <div class="val">{{$dateFormat(year.a)}}</div>
+              </div>
+              <div class="rowcol">
+                <div class="lable">数据来源</div>
+                <div class="val">{{year.dataSource||'-'}}</div>
+              </div>
+            </div>
+          </div>
+          <div v-if="state.pageNum==state.totalPage" class="yhc-no-data">没有更多了</div>
+          <!-- <van-empty v-if="!loading&&yearList.length==0" :image="$emptyImg" class="custom-image" description="暂无数据" /> -->
+        </van-row>
+      </van-list>
+
+    </van-row>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import { $dateFormat } from '@/utils/utils'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, reactive,ref } from 'vue'
+  import $axios from '@/api'
+  const store = useDemensionListStore()
+
+
+  const loading = ref(false)
+  const state = reactive({
+    activeName: '-100',
+    optionList:[
+
+    ],
+    pageNum:1,
+    totalPage:0,
+    totalNum:'',
+    yearList: []
+  })
+
+  onMounted(() => {
+    getData(state.activeName)
+  })
+
+  const changeOption = (e) => {
+    console.log('e=',e)
+    state.pageNum = 1
+    state.totalPage = 0
+    state.totalNum = ''
+    state.yearList = []
+    getData(e)
+  }
+  const onLoad = (e) => {
+    if(!loading.value && state.totalPage>state.pageNum) {
+      console.log('onLoad')
+      state.pageNum++
+      getData(state.activeName)
+    }
+  }
+  const getData = async (year='') => {
+    loading.value = true
+    const params = {
+      pageSize: '5',
+      companyName: useDemensionListStore().entityName,
+      year:year == '-100'?'':year,
+      pageIndex: state.pageNum
+    }
+    const res:any = await $axios.get('firefly-erp/eci/customer',{params})
+    if(state.optionList.length == 0) {
+      res.clientsYear.forEach(element => {
+        element.text = element.title
+        state.optionList.push(element)
+      })
+    }
+    const yearList = (res.pageBean && res.pageBean.result) || []
+    state.yearList = state.yearList.concat(yearList)
+    state.totalPage = Math.ceil(res.pageBean.total*1 / 5)
+    state.totalNum = res.pageBean.total
+    loading.value = false
+  }
+</script>
+
+<style scoped lang="scss">
+    .van-info-top {
+        position: fixed;
+        top: 0px;
+        left: 0;
+        right: 0;
+
+        .caichan-tip {
+            background: #F1F2F4;
+        }
+    }
+    :deep().van-dropdown-menu {
+        position: fixed;
+        left: 0;
+        right: 0;
+    }
+    :deep() .van-list{
+        padding-top: 50px;
+    }
+
+    .yhc-model {
+        margin-top: 0;
+    }
+
+    .feiguan {
+        float: right;
+        margin-top: -26px;
+        font-size: 12px;
+        padding: 0px 8px;
+        border-radius: 3px;
+        background-color: #eaf6fe;
+    }
+</style>

+ 144 - 54
src/js-pages/company-detail/FaLvFengXian/index.ts

@@ -1,4 +1,43 @@
+import { shallowRef } from 'vue'
 import { DemensionPagesInter } from './../../types'
+import PoChanChongZheng from '@/components/DetailCustom/PoChanChongZheng.vue'
+
+const judgeTendencyCom = (judgeTendency: string) => {
+  if (['撤诉', '对方撤诉'].includes(judgeTendency)) {
+    return 'gray'
+  } else if (
+    [
+      '被驳回',
+      '不被支持',
+      '终结本次执行',
+      '被查冻扣',
+      '对方被支持',
+      '终结执行',
+      '承担连带责任',
+      '被强制执行',
+      '被破产清算',
+      '被破产重整',
+      '被执行完毕'
+    ].includes(judgeTendency)
+  ) {
+    return 'red'
+  } else if (
+    [
+      '获得部分支持',
+      '对方不被支持',
+      '获得支持',
+      '不承担责任',
+      '和解',
+      '解除查冻扣',
+      '达成调解',
+      '中止诉讼'
+    ].includes(judgeTendency)
+  ) {
+    return 'green'
+  } else {
+    return 'orange'
+  }
+}
 //数量全完成
 export const FaLvFengXian: DemensionPagesInter = {
   projectName: '法律风险',
@@ -471,6 +510,7 @@ export const FaLvFengXian: DemensionPagesInter = {
       ]
     },
     {
+      //拍卖详情页未完成
       companyId: '88f04cbfab150fe2bccdeec3aea32750',
       code: 'judicial_auction',
       routing: 'SiFaPaiMai',
@@ -500,37 +540,93 @@ export const FaLvFengXian: DemensionPagesInter = {
       code: 'evaluation_result',
       routing: 'XunJiaPingGu',
       title: '询价评估',
-      viewList: [
-        {
-          name: '标的物所有人',
-          value: 'name'
-        },
-        {
-          name: '询价结果(元)',
-          value: 'money'
-        },
-        {
-          name: '案号',
-          value: 'caseNo'
-        },
-        {
-          name: '法院名称',
-          value: 'courtName'
-        },
-        {
-          name: '发布日期',
-          value: 'publishTime',
-          valueType: 'date'
-        },
-        {
-          name: '财产类型',
-          value: 'assetType'
-        },
-        {
-          name: '确定参考价方式',
-          value: 'referencePrice'
-        }
-      ]
+      tabs: {
+        key: 'dimensionCode',
+        list: [
+          {
+            name: '评估结果',
+            value: 'evaluation_result',
+            viewList: [
+              {
+                name: '标的物所有人',
+                value: 'name'
+              },
+              {
+                name: '询价结果(元)',
+                value: 'money',
+                solt: (item: { money: string }) => {
+                  const value = item.money
+                  let max = ''
+                  if (value && JSON.parse(value).length > 0) {
+                    const arr = JSON.parse(value)
+                    if (arr.length == 1) {
+                      max = arr[0]
+                    } else {
+                      max = Math.min.apply(null, arr) + '-' + Math.max.apply(null, arr)
+                    }
+                  } else {
+                    max = '-'
+                  }
+                  return max
+                }
+              },
+              {
+                name: '案号',
+                value: 'caseNo'
+              },
+              {
+                name: '法院名称',
+                value: 'courtName'
+              },
+              {
+                name: '发布日期',
+                value: 'publishTime',
+                valueType: 'date'
+              },
+              {
+                name: '财产类型',
+                value: 'assetType'
+              },
+              {
+                name: '确定参考价方式',
+                value: 'referencePrice'
+              }
+            ]
+          },
+          {
+            name: '选定评估机构',
+            value: 'evaluation',
+            viewList: [
+              {
+                name: '案号',
+                value: 'caseNo'
+              },
+              {
+                name: '法院名称',
+                value: 'courtName'
+              },
+              {
+                name: '当事人',
+                value: 'name'
+              },
+              {
+                name: '财产类型',
+                value: 'assetType'
+              },
+              {
+                name: '标的物名称',
+                value: 'assetName'
+              }
+              // {
+              //   name: '摇号日期',
+              //   value: 'insertTime',
+              //   valueType: 'date'
+              // }
+            ]
+          }
+        ]
+      }
+
     },
     {
       code: 'final_case',
@@ -675,20 +771,6 @@ export const FaLvFengXian: DemensionPagesInter = {
       code: 'wenshu',
       routing: 'CaiPanWenShu',
       companyId: '88f04cbfab150fe2bccdeec3aea32750',
-      // listFliter: (list: any[]) => {
-      //   list.forEach(item => {
-      //     item.beigaoList = []
-      //     item.yuangaoList = []
-      //     item.partyTitle.map((item1: { partyTitle: string }) => {
-      //       if (item1.partyTitle === '原告') {
-      //         item.yuangaoList.push(item1)
-      //       } else {
-      //         item.beigaoList.push(item1)
-      //       }
-      //     })
-      //   })
-      //   return list
-      // },
       title: '裁判文书',
       menuList: [
         {
@@ -813,15 +895,15 @@ export const FaLvFengXian: DemensionPagesInter = {
           value: 'caseNo'
         },
         {
-          name: '判决金额(万元)',
-          value: 'judgeAmt',
-          valueType: 'w'
-        },
-        {
           value: 'name',
-
           companyId: 'litigantId',
-          listVal: 'partyTitle'
+          listVal: 'partyTitle',
+          solt: (item: { partyTitle: string; name: string; judgeTendency: string }) => `
+          <div>
+            <span style="color:#969696">${item.partyTitle}</span>
+            :${item.name} 
+            <span class="${judgeTendencyCom(item.judgeTendency)}">[${item.judgeTendency}]</span>
+          </div>`
         },
         {
           name: '判决结果',
@@ -971,11 +1053,13 @@ export const FaLvFengXian: DemensionPagesInter = {
       ]
     },
     {
+      //正文详情页未完成
       code: 'bankruptcy',
       routing: 'PoChanChongZheng',
       title: '破产重整',
       detailValue: 'bankruptcyOpenCase',
-      companyId: '4cc3861734ecd09b00ab34afdf8f94cc',
+      companyId: 'e8ee433fae5e03e4816c0b5981da76ba',
+      detailCustomRender: shallowRef(PoChanChongZheng),
       detailList: [
         {
           name: '案号',
@@ -1202,7 +1286,13 @@ export const FaLvFengXian: DemensionPagesInter = {
         {
           name: '被执行人',
           value: 'executedPersonName',
-          companyId: 'executedPersonKeyno'
+          companyId: 'executedPersonKeyno',
+          solt: (item) => `
+            <div>
+            <span>${item.executedPersonName}</span>
+            <div class="executedPersonName-check">查看财产线索</div>
+            </div>
+          `
         },
         {
           name: '被执行人地址',

+ 48 - 0
src/js-pages/company-detail/JiBenXinXi/index.ts

@@ -1,11 +1,15 @@
+import { $goOuterUrl } from '@/utils/utils'
 import { DemensionPagesInter } from './../../types'
 import SheBaoRenShuVue from '@/components/ListCustom/SheBaoRenShu.vue'
 import NianDuBaoGao from '@/components/DetailCustom/NianDuBaoGao.vue'
 import CaiWuShuJu from '@/components/ListCustom/CaiWuShuJu.vue'
 import GongShangXinXi from '@/components/ListCustom/GongShangXinXi.vue'
 import ZuiZhongShouYiRen from '@/components/ListCustom/ZuiZhongShouYiRen.vue'
+import ShiJiKongZhiRen from '@/components/ListCustom/ShiJiKongZhiRen.vue'
+import KongGuQiYe from '@/components/ListCustom/KongGuQiYe.vue'
 import { shallowRef } from 'vue'
 export const JiBenXinXi: DemensionPagesInter = {
+  //维度已完成
   projectName: '基本信息',
   list: [
     {
@@ -23,6 +27,20 @@ export const JiBenXinXi: DemensionPagesInter = {
       companyId: '88f04cbfab150fe2bccdeec3aea32750'
     },
     {
+      code: 'suspected_actual_control',
+      routing: 'ShiJiKongZhiRen',
+      title: '实际控制人',
+      listCustomRender: shallowRef(ShiJiKongZhiRen),
+      companyId: '88f04cbfab150fe2bccdeec3aea32750'
+    },
+    {
+      code: 'holding_shares',
+      routing: 'KongGuQiYe',
+      title: '控股企业',
+      listCustomRender: shallowRef(KongGuQiYe),
+      companyId: '88f04cbfab150fe2bccdeec3aea32750'
+    },
+    {
       code: 'empum',
       routing: 'SheBaoRenShu',
       title: '社保人数',
@@ -202,6 +220,36 @@ export const JiBenXinXi: DemensionPagesInter = {
       ]
     },
     {
+      routing: 'XinWenYuQing',
+      code: 'news_neutral',
+      title: '新闻舆情',
+      // noDataList: true,
+      apiUrl: 'firefly-erp/eci/dimension/detail',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      viewList: [
+        {
+          value: 'title',
+          valueType: 'title'
+        },
+        {
+          name: '新闻标签',
+          value: 'newsTags'
+        },
+        {
+          name: '来源',
+          value: 'source'
+        },
+        {
+          name: '原文',
+          value: 'url',
+          solt: () => `<span class="link">地址</span>`,
+          customClick: (item: { url: string }) => {
+            $goOuterUrl(item.url)
+          }
+        }
+      ]
+    },
+    {
       routing: 'LiShiBianGeng',
       code: 'eci_changes',
       title: '历史变更',

+ 63 - 34
src/js-pages/company-detail/JingYingFengXian/index.ts

@@ -4,6 +4,7 @@ import { shallowRef } from 'vue'
 import DongChanDiYaVue from '@/components/DetailCustom/DongChanDiYa.vue'
 import JieSanQingSuan from '@/components/ListCustom/JieSanQingSuan.vue'
 import ZhuXiaoBeiAn from '@/components/ListCustom/ZhuXiaoBeiAn.vue'
+import GuQuanZhiYa from '@/components/ListCustom/GuQuanZhiYa.vue'
 //数量全完成
 export const JingYingFengXian: DemensionPagesInter = {
   projectName: '经营风险',
@@ -14,12 +15,12 @@ export const JingYingFengXian: DemensionPagesInter = {
       title: '行政处罚',
       tabs: { key: 'deleted' },
       companyId: '88f04cbfab150fe2bccdeec3aea32750',
-      detailList: [
-        {
-          name: '违法类型',
-          value: 'type'
-        }
-      ],
+      // detailList: [
+      //   {
+      //     name: '违法类型',
+      //     value: 'type'
+      //   }
+      // ],
       viewList: [
         {
           value: 'punishNumber',
@@ -73,6 +74,44 @@ export const JingYingFengXian: DemensionPagesInter = {
       title: '股权出质',
       companyId: '88f04cbfab150fe2bccdeec3aea32750',
       tabs: { key: 'deleted' },
+      menuList: [
+        {
+          paramsValue: 'equityType',
+          value: '',
+          list: [
+            {
+              text: '身份不限',
+              value: ''
+            },
+            {
+              text: '出质人',
+              value: '1'
+            },
+            {
+              text: '出质标的企业',
+              value: '0'
+            }
+          ]
+        },
+        {
+          paramsValue: 'equityState',
+          value: '',
+          list: [
+            {
+              text: '状态不限',
+              value: ''
+            },
+            {
+              text: '有效',
+              value: '有效'
+            },
+            {
+              text: '无效',
+              value: '无效'
+            }
+          ]
+        }
+      ],
       viewList: [
         {
           value: 'pledgee',
@@ -136,31 +175,35 @@ export const JingYingFengXian: DemensionPagesInter = {
     },
     {
       code: 'land_public',
-      routing: 'TuDiZhuanRang',
-      title: '土地转让',
+      routing: 'TuDiGongShi',
+      title: '土地公示',
       companyId: '6820fae3c815fb899214617b54efadf7',
       // tabs:
       viewList: [
         {
-          name: '总面积',
+          value: 'location',
+          valueType: 'title'
+        },
+        {
+          name: '土地面积(公顷)',
           value: 'area'
         },
         {
           name: '土地用途',
-          value: 'useType'
+          value: 'useFor'
         },
         {
-          name: '供应方式',
-          value: 'supplyMethod'
+          name: '发布机关',
+          value: 'publicationOrganize'
         },
         {
-          name: '签订日期',
-          value: 'contractDate',
-          valueType: 'date'
+          name: '受让单位',
+          value: 'applicationName'
         },
         {
-          name: '行政区',
-          value: 'district'
+          name: '开始公布日期',
+          value: 'publicationDate',
+          valueType: 'date'
         }
       ]
     },
@@ -639,26 +682,12 @@ export const JingYingFengXian: DemensionPagesInter = {
       ]
     },
     {
-      //待完成
+      //顶部tab
       code: 'stock_pledge',
       routing: 'GuQuanZhiYa',
       title: '股权质押',
-      companyId: '88f04cbfab150fe2bccdeec3aea32750'
-      // listCustomRender: shallowRef(JieSanQingSuan),
-      // viewList: [
-      //   {
-      //     name: '企业名称',
-      //     value: 'companyName'
-      //   },
-      //   {
-      //     name: '公告期',
-      //     value: 'announcementTerm'
-      //   },
-      //   {
-      //     name: '登记机关',
-      //     value: 'regAuthority'
-      //   }
-      // ]
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: GuQuanZhiYa
     },
     {
       code: 'stock_pledge_holder',

+ 17 - 2
src/js-pages/company-detail/JingYingXinXi/index.ts

@@ -1,10 +1,12 @@
 import JinChuKouXinYongZhengVue from '@/components/DetailCustom/JinChuKouXinYongZheng.vue'
 import RongZiXinXi from '@/components/ListCustom/RongZiXinXi.vue'
+import ZhuYaoKeHu from '@/components/ListCustom/ZhuYaoKeHu.vue'
+import GongYingShang from '@/components/ListCustom/GongYingShang.vue'
 import { $goOuterUrl } from '@/utils/utils'
 import { shallowRef } from 'vue'
 import { DemensionPagesInter } from './../../types'
 import ShuangSuiJiChouCha from '@/components/DetailCustom/ShuangSuiJiChouCha.vue'
-
+//维度已完成
 export const JingYingXinXi: DemensionPagesInter = {
   projectName: '基本信息',
   list: [
@@ -260,7 +262,6 @@ export const JingYingXinXi: DemensionPagesInter = {
       ]
     },
     {
-      //未完成
       code: 'permission_eci',
       routing: 'XingZhenXuKe',
       title: '行政许可',
@@ -773,6 +774,13 @@ export const JingYingXinXi: DemensionPagesInter = {
       listCustomRender: shallowRef(RongZiXinXi)
     },
     {
+      code: 'eci_customers',
+      routing: 'ZhuYaoKeHu',
+      title: '主要客户',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: shallowRef(ZhuYaoKeHu)
+    },
+    {
       code: 'bond_info',
       routing: 'ZhaiQuanXinXi',
       title: '债券信息',
@@ -1004,6 +1012,13 @@ export const JingYingXinXi: DemensionPagesInter = {
       ]
     },
     {
+      code: 'eci_supply',
+      routing: 'GongYingShang',
+      title: '供应商',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: shallowRef(GongYingShang)
+    },
+    {
       code: 'property_rights_transaction',
       routing: 'ChanQuanJiaoYi',
       title: '产权交易',

+ 2 - 1
src/plugins/vant.ts

@@ -1,4 +1,4 @@
-import { Button, Row, Tab, Tabs, List, Icon, DropdownMenu, DropdownItem, Collapse, CollapseItem, Cell, Col, Step, Steps, Skeleton } from 'vant'
+import { Button, Empty, Row, Tab, Tabs, List, Icon, DropdownMenu, DropdownItem, Collapse, CollapseItem, Cell, Col, Step, Steps, Skeleton } from 'vant'
 import { App } from 'vue'
 
 export const useVant = (app: App<Element>) => {
@@ -17,4 +17,5 @@ export const useVant = (app: App<Element>) => {
   app.use(Step)
   app.use(Steps)
   app.use(Skeleton)
+  app.use(Empty)
 }

+ 1 - 0
src/store/demensionList.ts

@@ -33,6 +33,7 @@ export const useDemensionListStore = defineStore({
       this.totalNum = 0
       this.totalPage = 0
       this.dataList = []
+      this.deleted = 0
     },
     getDemension() {
       //先清除历史的状态

+ 11 - 0
src/style/global.scss

@@ -7,4 +7,15 @@ p,span,div,a{
 .caichan-tip {
   padding: 15px 15px;
   line-height: 20px;
+}
+:deep() .executedPersonName-check{
+  background: #fff4e0;
+  font-size: 10px;
+  color: #BF8B40;
+  padding: 0 5px;
+  border-radius: 4px;
+  height: 24px;
+  width: 82px;
+  line-height: 24px;
+  margin: 6px 0;
 }