Browse Source

Merge branch 'master' of http://139.224.213.4:3000/wenshuai/winhc-demension-vue3

huangxiaoming 2 years ago
parent
commit
1aca98dcd4
35 changed files with 3108 additions and 164 deletions
  1. 1 0
      .eslintrc.js
  2. 36 12
      src/components/CommonList.vue
  3. 107 3
      src/components/DetailCustom/PoChanChongZheng.vue
  4. 882 0
      src/components/DetailCustom/SiFaPaiMai.vue
  5. 13 3
      src/components/Global/CommonTab.vue
  6. 176 0
      src/components/ListCustom/GongYingShang.vue
  7. 440 0
      src/components/ListCustom/GuQuanZhiYa.vue
  8. 117 0
      src/components/ListCustom/KongGuQiYe.vue
  9. 203 0
      src/components/ListCustom/ShiJiKongZhiRen.vue
  10. 74 0
      src/components/ListCustom/YingHangZhangHu.vue
  11. 58 0
      src/components/ListCustom/ZhuCeDiZhi.vue
  12. 63 0
      src/components/ListCustom/ZhuCeZiBen.vue
  13. 145 0
      src/components/ListCustom/ZhuYaoKeHu.vue
  14. 4 17
      src/js-pages/company-detail/index.ts
  15. 149 56
      src/js-pages/company-detail/FaLvFengXian/index.ts
  16. 49 1
      src/js-pages/company-detail/JiBenXinXi/index.ts
  17. 2 2
      src/js-pages/company-detail/JianZhuXinXi/index.ts
  18. 226 37
      src/js-pages/company-detail/JingYingFengXian/index.ts
  19. 94 16
      src/js-pages/company-detail/JingYingXinXi/index.ts
  20. 2 2
      src/js-pages/company-detail/QiYeRongZi/index.ts
  21. 2 2
      src/js-pages/company-detail/ZhiShiChanQuan/index.ts
  22. 14 0
      src/js-pages/finance-detail/index.ts
  23. 45 0
      src/js-pages/finance-detail/pages/DuiWaiTouZi.ts
  24. 75 0
      src/js-pages/finance-detail/pages/DuiWaiZhaiQuan.ts
  25. 15 0
      src/js-pages/finance-detail/pages/YiSiCaiChanXinXi.ts
  26. 15 0
      src/js-pages/finance-detail/pages/ZhangHu.ts
  27. 60 0
      src/js-pages/finance-detail/pages/ZiBen.ts
  28. 2 2
      src/js-pages/index.ts
  29. 5 1
      src/js-pages/types.ts
  30. 1 1
      src/layout/Layout.vue
  31. 12 1
      src/plugins/vant.ts
  32. 5 5
      src/router/index.ts
  33. 1 0
      src/store/demensionList.ts
  34. 11 0
      src/style/global.scss
  35. 4 3
      src/utils/utils.ts

+ 1 - 0
.eslintrc.js

@@ -24,6 +24,7 @@ module.exports = {
     'no-console': 'off',
     'generator-star-spacing': 'off',
     'no-mixed-operators': 0,
+    // 'reportUnusedDisableDirectives':true,
     'arrow-spacing': [2, {
       'before': true,
       'after': true

+ 36 - 12
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) {
@@ -123,12 +134,25 @@
 
   const goDetail = (item:{id:string,companyName:string}) => {
     if(store.selectDemension.detailList || store.selectDemension.detailCustomRender) {
+      let customParams:{} | undefined = {}
+
+      //额外参数处理
+      if(store.selectDemension.detailRouteParams) {
+        store.selectDemension.detailRouteParams.map(paramsItem => {
+          customParams = Object.assign({[paramsItem]:item[paramsItem]},customParams)
+        })
+      }else{
+        customParams = undefined
+      }
+
+
       router.push({
         path: store.selectDemension.routing + 'Det',
         query:{
           id:item.id,
           companyName:item.companyName,
-          detailType:store.selectDemension.detailType || undefined
+          detailType:store.selectDemension.detailType || undefined,
+          ...customParams
         }
       })
       console.log(`跳转详情:${item.id}`)

+ 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>

+ 882 - 0
src/components/DetailCustom/SiFaPaiMai.vue

@@ -0,0 +1,882 @@
+/* eslint-disable no-alert, no-console */
+<template>
+  <!-- eslint-disable-line -->
+
+  <div id="PaiMaiXiangQing">
+    <!-- <van-pull-refresh
+            :disabled="isDisableRefresh"
+            v-model="refreshing"
+            @refresh="onRefresh"
+            pulling-text="下拉开始刷新..."
+            loosing-text="释放刷新..."
+            loading-text="正在刷新"
+            head-height='50'
+        > -->
+    <div class="scroll-con">
+      <van-swipe class="my-swipe" :class="{has:imgs.length}" indicator-color="white" @change="change">
+        <van-swipe-item v-for="url in imgs" :key="url">
+          <div class="top-img" :style="'background-image:url('+url+')'"></div>
+        </van-swipe-item>
+        <template #indicator>
+          <div v-if="imgs.length" class="custom-indicator">
+            {{ current + 1 }}/{{imgs.length}}
+          </div>
+        </template>
+      </van-swipe>
+      <div v-if="loading||infoData.auctionStatus" class="end-time"
+           :class="infoData.auctionStatus=='1'?'s1':infoData.auctionStatus=='2'?'s2':'s3'">
+        <div class="end-str">{{auctionStatus(infoData.auctionStatus)}}</div>
+        <div v-if="hasData" class="time-str">
+          // eslint-disable-next-line vue/html-quotes
+          <!-- eslint-disable-next-line vue/max-attributes-per-line -->
+          <span v-if="infoData.auctionStatus==&quot;1&quot;||infoData.auctionStatus==&quot;3&quot;||infoData.auctionStatus==&quot;4&quot;">{{$dateFormat(infoData.endTime)}} 结束</span>
+          <span v-else-if="infoData.auctionStatus==&quot;2&quot;">{{$dateFormat(infoData.startTime)}} 开拍</span>
+          <span v-else>本场拍卖{{auctionStatus(infoData.auctionStatus)}}</span>
+        </div>
+      </div>
+      <div class="product-det">
+        <van-skeleton title :row="8" :loading="loading">
+          <div class="tags">
+            <span v-if="infoData.auctionStage">{{auctionStage(infoData.auctionStage)}}</span>
+            <span v-if="infoData.canLoan==&quot;0&quot;">可贷款</span>
+            <span v-if="infoData.unlimitedPurchase==&quot;1&quot;">不限购</span>
+            <span v-if="infoData.auctionTypeTwo" class="s">{{infoData.auctionTypeTwo}}</span>
+          </div>
+          <div class="name">{{infoData.auctionTitle}}</div>
+          <div class="price">
+            <div>
+              当前价: <span v-if="hasData&&infoData.currentPrice!=null" class="red">¥{{priceDouhao(infoData.currentPrice)}}</span>
+              <span v-if="hasData&&infoData.currentPrice==null" class="red">--</span>
+            </div>
+            <div>
+              评估价: <span v-if="hasData&&infoData.evaluationPrice!=null">¥{{priceDouhao(infoData.evaluationPrice)}}</span>
+              <span v-if="hasData&&infoData.evaluationPrice==null">--</span> <span v-if="hasData" class="line"></span> <span v-if="hasData">{{infoData.applyCount}}人报名</span>
+            </div>
+          </div>
+          <div class="tip">
+            <img src="@/assets/img/sifapaimai/logo.png" alt="">
+            <div class="source-tips">
+              <span class="ms">赢火虫大数据提供数据支撑,数据源来自{{infoData.resource}}</span>
+              <span v-if="!share" class="gx" @click="updateData">更新数据</span>
+            </div>
+          </div>
+          <div class="table">
+            <div class="t20">保证金</div><div class="t30"><span v-if="hasData&&infoData.cashDeposit!=null">¥{{priceDouhao(infoData.cashDeposit)}}</span><span v-if="hasData&&infoData.cashDeposit==null">--</span></div>
+            <div class="t30">加价幅度</div><div class="t20"><span v-if="hasData&&infoData.priceAdd!=null">¥{{priceDouhao(infoData.priceAdd)}}</span><span v-if="hasData&&infoData.priceAdd==null">--</span></div>
+            <div class="t20">起拍价</div><div class="t30"><span v-if="hasData&&infoData.initialPrice!=null">¥{{priceDouhao(infoData.initialPrice)}}</span><span v-if="hasData&&infoData.initialPrice==null">--</span></div>
+            <div class="t30">优选购买权人</div><div class="t20">{{infoData.preemptionClaimant=='0'?'无':infoData.preemptionClaimant||'--'}}</div>
+            <div class="t20">竞价周期</div><div class="t30"><span v-if="hasData">{{infoData.auctionPeriod==null?'--':infoData.auctionPeriod+'天'}}</span></div>
+            <div class="t30">延时周期</div><div class="t20"><span v-if="hasData">{{infoData.delayPeriod==null?'--':infoData.delayPeriod+'分钟/次'}}</span></div>
+          </div>
+          <div class="address" @click="showAddress">
+            <div>拍品地址</div>
+            <div class="text">{{infoData.address}}</div>
+            <img v-if="infoData.address" src="@/assets/img/sifapaimai/address.png">
+          </div>
+          <van-action-sheet
+            v-model="showAddr"
+            :actions="actions"
+            cancel-text="取消"
+            description="请选择相关地图"
+            close-on-click-action
+            get-container="body"
+            @select="onSelect"
+          />
+        </van-skeleton>
+      </div>
+      <div v-if="infoData.bidTimes&&infoData.bidTimes!=0" class="record">
+        <div class="text">
+          已有 <span>{{infoData.bidTimes}}</span> 条竞拍记录
+        </div>
+        <div @click="record">查看</div>
+        <img src="@/assets/img/sifapaimai/right.png" @click="record">
+      </div>
+      <div v-else class="record">
+        <div v-if="hasData" class="text">
+          暂无竞拍记录
+        </div>
+      </div>
+      <van-tabs swipeable animated :lazy-render="false" sticky @change="tabChange">
+        <van-tab title="物品介绍" name="1">
+          <div class="html" v-html="infoData.auctionIntroduce"></div>
+        </van-tab>
+        <van-tab title="拍卖公告" name="2">
+          <div class="html html2" v-html="infoData.auctionNotice"></div>
+        </van-tab>
+        <van-tab title="拍卖须知" name="3">
+          <div class="html html3" v-html="infoData.auctionMustKnow"></div>
+        </van-tab>
+      </van-tabs>
+    </div>
+    <!-- </van-pull-refresh> -->
+    <div class="footer">
+      <div class="left" @click="baoming">
+        <img src="@/assets/img/sifapaimai/feiji.png">报名/分享
+      </div>
+      <div class="right" :class="{s:[&quot;1&quot;,&quot;2&quot;].includes(infoData.auctionStatus)}" @click="tixing">
+        <img v-if="String(infoData.notice)===&quot;true&quot;" src="@/assets/img/sifapaimai/dui.png">
+        <img v-else src="@/assets/img/sifapaimai/clock.png">
+        <span v-if="[&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;].includes(infoData.auctionStatus)">拍卖已结束</span>
+        <span v-else-if="String(infoData.notice)===&quot;true&quot;">已设置提醒</span>
+        <span v-else>设置提醒</span>
+      </div>
+    </div>
+    <van-popup v-model="showpop" position="bottom" class="pop-btm">
+      <div class="list" @click="copy">
+        <div class="left">
+          <img src="@/assets/img/sifapaimai/link.png">
+        </div>
+        <div class="center">复制链接,去{{infoData.resource}}报名</div>
+        <img src="@/assets/img/sifapaimai/right.png" class="right">
+      </div>
+      <div class="list" @click="goWeb">
+        <div class="left">
+          <img src="@/assets/img/sifapaimai/web.png">
+        </div>
+        <div class="center">查看源站网页</div>
+        <img src="@/assets/img/sifapaimai/right.png" class="right">
+      </div>
+      <div class="list" @click="goshare">
+        <div class="left">
+          <img src="@/assets/img/sifapaimai/wx.png">
+        </div>
+        <div class="center">分享到</div>
+        <img src="@/assets/img/sifapaimai/right.png" class="right">
+      </div>
+    </van-popup>
+    <van-popup v-model="showtixing" class="pop-tixing" :close-on-click-overlay="false">
+      <div class="con">
+        <div class="title">设置消息提醒成功</div>
+        <div class="content">小赢在此拍品<span v-if="infoData.auctionStatus==&quot;2&quot;">“开拍”与</span>“结束前30分钟”时,以短信方式为 <span class="c">{{$route.query.mobileNo}}</span> 发送提醒消息。</div>
+        <div class="btm">
+          <span @click="addMsgOk">好的</span>
+        </div>
+      </div>
+    </van-popup>
+  </div>
+</template>
+
+<!-- eslint-disable -->
+<script lang="ts">
+  import $axios from '@/api'
+  import { Toast } from 'vant'
+  import {$dateFormat} from '@/utils/utils'
+  export default {
+    name: 'PaiMaiXiangQing',
+    data() {
+      console.log(this.$route.query.type)
+      return {
+        share: this.$route.query.type === 'share',
+        showAddr: false,
+        actions: [
+          { name: '高德地图',type:'gd' },
+          { name: '百度地图',type:'bd' }
+        ],
+        infoData:{},
+        current:0,
+        imgs:[],
+        history:null,
+        showpop:false,
+        showtixing:false,
+        tixingId:null,
+        hasData:false,
+        loading:true,
+        taboffsetTop:0,
+        refreshing: false,
+        isDisableRefresh:false
+      }
+    },
+    mounted () {
+      document.title = '拍品详情'
+      this.getData()
+      document.querySelector('.scroll-con').addEventListener('scroll',(e) => {
+        const scrollTop = document.querySelector('.scroll-con').scrollTop
+        if(scrollTop < 50) {
+          this.isDisableRefresh = false
+        }else{
+          this.isDisableRefresh = true
+        }
+      })
+    },
+    methods: {
+      onRefresh() {
+        setTimeout(() => {
+          if (this.refreshing) {
+            this.refreshing = false
+          }
+        },800)
+        this.current = 0
+        this.imgs = []
+        this.getData()
+
+      },
+      async updateData() {
+        try {
+          const res = await $axios.post('winhc-justice-service/auction/async',{auctionItemsId:this.$route.query.auctionItemsId})
+          Toast('正在后台更新, 完成后通知到你的手机')
+        } catch (error) {
+          Toast('正在后台更新, 完成后通知到你的手机')
+        }
+      },
+      async getData() {
+        console.log(this.$route.query,897897798897)
+        try {
+          let res={}
+          this.hasData=false
+          this.loading=true
+          if(this.share) {
+            res = await $axios.get('/auction/open/share/'+this.$route.query.secretId,{})
+          }else{
+            if(this.$route.query.source == 'H5') {
+              const params = {auctionItemsId:this.$route.query.auctionItemsId}
+              res = await $axios.get('winhc-justice-service/auction/detail',{params})
+            }else if(this.$route.query.fromBusiness == 'dynamic') {
+              res = await $axios.get('dynamic/v8/radar/detail', {
+                tn : this.$route.query.tn,
+                rowkey :this.$route.query.rowkey
+              })
+            }else if(this.$route.query.fromBusiness == 'caichan') {
+              res = await  $axios.get(window.serviceNameCaiChan,{
+                bizId:this.$route.query.bizId,
+                dimensionType :this.$route.query.dimensionType
+              })
+            }else{
+              res = await $axios.get('/auction/'+this.$route.query.auctionItemsId,{})
+            }
+          }
+          this.loading=false
+          this.hasData=true
+          //处理相对路径的图片(相对路径的图片无法显示)
+          // if(res.auctionIntroduce){
+          //     res.auctionIntroduce=res.auctionIntroduce.replace(/src="\//g,'style="display:none;" src="/').replace(/src='\//g,"style='display:none;' src='/")
+          // }
+          // if(res.auctionNotice){
+          //     res.auctionNotice=res.auctionNotice.replace(/src="\//g,'style="display:none;" src="/').replace(/src='\//g,"style='display:none;' src='/")
+          // }
+          if(res.auctionNotice) {
+            res.auctionNotice=res.auctionNotice.replace(/\?xml:namespace&gt;/g,'')
+          }
+          // if(res.auctionMustKnow){
+          //     res.auctionMustKnow=res.auctionMustKnow.replace(/src="\//g,'style="display:none;" src="/').replace(/src='\//g,"style='display:none;' src='/")
+          // }
+          res.auctionStatus = String(Number(res.auctionStatus))
+          this.infoData=res
+          if(res.auctionImg) {
+            const imgs = JSON.parse(res.auctionImg) || []
+            imgs.forEach((e) => {
+              this.imgs.push(e.replace(/http:/g,'https:'))
+            })
+          }
+          // this.imgs=res.auctionImg?JSON.parse(res.auctionImg):[];
+          this.history=res.bidHistory?JSON.parse(res.bidHistory):[]
+          setTimeout(() => {
+            document.querySelectorAll('.html2 p').forEach((item) => {
+              if(item.innerText&&['拍卖公告','变卖公告','竞买公告'].includes(item.innerText.replace(/\s/g,''))) {
+                item.style.textIndent='0'
+                item.style.textAlign='center'
+                return
+              }
+            })
+            document.querySelectorAll('.html3 p').forEach((item) => {
+              if(item.innerText&&['拍卖须知','变卖须知','竞买须知'].includes(item.innerText.replace(/\s/g,''))) {
+                item.style.textIndent='0'
+                item.style.textAlign='center'
+                return
+              }
+            })
+            document.querySelectorAll('.van-tabs__content img').forEach((item) => { //去除相对路径的图片
+              var ImgObj = new Image()
+              ImgObj.src = item.src
+              ImgObj.onerror = () => {
+                // console.log(ImgObj.fileSize ,ImgObj.width,ImgObj.height)
+                item.style.display='none'
+              }
+            })
+            this.taboffsetTop = document.querySelector('.van-tabs').offsetTop + 5
+          },700)
+          if(this.share) {
+            this.$methods.wx_shareConfig({
+              title:this.infoData.auctionTitle, // 分享标题
+              desc: '我在赢火虫的司法拍卖发现了还不错的拍品,快来看看吧~', // 分享描述
+              link: winhc_api_common + 'newMobile/#/PaiMaiXiangQing?type=share&pageType=H5&secretId=' + this.infoData.secretId+'&version='+this.$version, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
+              imgUrl: 'https://winhc.oss-cn-shanghai.aliyuncs.com/shareImg/logo256x256.png' // 分享图标
+            })
+          }
+          console.log('res=',res)
+        } catch (error) {
+          this.loading=false
+          this.hasData=false
+          Toast('查询失败')
+          console.log(error)
+        }
+      },
+      record() {
+        if(this.history&&this.history.length>0) {
+          if(this.share) {
+            window.location.href= winhc_api_common + 'newMobile/#/AuctionRecord?type=share&pageType=H5&secretId=' + this.infoData.secretId + '&version='+this.version
+          } else {
+            this.$goDetail('AuctionRecord?auctionItemsId='+this.$route.query.auctionItemsId)
+          }
+        }
+      },
+      change(curr) {
+        this.current=curr
+      },
+      tabChange(name,title) {
+        // console.log(name,title)
+        document.querySelector('.scroll-con').style.transition = 'all 0.3s'
+        document.querySelector('.scroll-con').scrollTop = this.taboffsetTop
+
+      },
+      showAddress() {
+        if(!this.infoData.address) {
+          return
+        }
+        if(this.share) {
+          window.location.href = '../orgInformation/bdMap.html?address='+this.infoData.address
+        }else{
+          this.showAddr = true
+        }
+      },
+      //选择地图
+      onSelect(item) {
+        this.showAddr = false
+        try {
+          if (systemJudge() == 'Android') {
+            winhc.orgInfoMap(item.type,this.infoData.address||'')
+          } else {
+            ocMethod('orgInfoMap', {
+              'type': item.type,//高德(gd)、百度(bd)
+              'addr': this.infoData.address||''
+            })
+          }
+        } catch (e) {
+          console.log(e)
+        }
+      },
+      baoming() {
+        if(this.share) {
+          window.location.href = this.$downYingYongBaoUrl()
+          return
+        }
+        this.showpop=true
+      },
+      async tixing() {
+        if(['1','2'].includes(this.infoData.auctionStatus)&&String(this.infoData.notice)==='false') {
+          if(this.share) {
+            window.location.href = this.$downYingYongBaoUrl()
+            return
+          }
+          try {
+            const Timer=setTimeout(() => {
+              Toast.loading()
+            },300)
+            const res = await Axios('/auction/notice',{
+              auctionItemsId:this.$route.query.auctionItemsId
+            },'post')
+            clearTimeout(Timer)
+            Toast.clear()
+            // this.$toast.success('设置成功');
+            this.showtixing=true
+            this.tixingId=res
+            this.getData()
+            console.log('res=',res)
+          } catch (error) {
+            clearTimeout(Timer)
+            Toast('设置提醒失败')
+            console.log(error)
+          }
+        }
+      },
+      addMsgOk() {
+        this.showtixing=false
+      },
+      copy() {
+        this.$copyText(this.infoData.url,() => {
+          this.showpop=false
+          Toast('链接复制成功')
+        })
+      },
+      goshare() {
+        if(this.infoData.auctionTitle&&this.infoData.secretId) {
+          try {
+            const obj = {
+              title:this.infoData.auctionTitle, // 分享标题
+              desc: '我在赢火虫的司法拍卖发现了还不错的拍品,快来看看吧~', // 分享描述
+              link: winhc_api_common + 'newMobile/#/PaiMaiXiangQing?type=share&pageType=H5&secretId=' + this.infoData.secretId, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
+              imgUrl: 'https://winhc.oss-cn-shanghai.aliyuncs.com/shareImg/logo256x256.png' // 分享图标
+            }
+            if (systemJudge() === 'Android') {
+              console.log(winhc)
+              winhc.shareH5(JSON.stringify(obj))
+            } else {
+              console.log('ios')
+              ocMethod('shareH5', obj)
+            }
+            this.showpop=false
+          } catch (e) {
+            console.log(e)
+          }
+        }
+      },
+      goWeb() {
+        if(this.infoData.url) {
+          this.showpop=false
+          this.$goOuterUrl(this.infoData.url)
+        }
+      }
+    },
+    computed:{
+      auctionStatus() {
+        return (str) => {
+          switch (str) {
+          case '1' : return '拍卖中'
+          case '2' : return '预告中'
+          case '3' : return '拍卖成功'
+          case '4' : return '拍卖失败'
+          case '5' : return '已中止'
+          case '6' : return '已撤回'
+          case '7' : return '已暂缓'
+          }
+        }
+      },
+      priceDouhao() {
+        return (p) => {
+          if(isNaN(p)) {
+            return p
+          }
+          if(p!=null&&p!=undefined) {
+            let after='',before=''
+            if(String(p).indexOf('.')!==-1) {
+              p=Number(p).toFixed(2)
+              after='.'+String(p).split('.')[1]
+              p=String(p).split('.')[0]
+            }
+            for (let i = String(p).length,j=1 ; i > 0 ; i--,j++) {
+              before=String(p)[i-1]+before
+              if(i!==1 && j%3===0) {
+                before=','+before
+              }
+            }
+            return before+after
+          }else {
+            return ''
+          }
+        }
+      },
+      auctionStage() {
+        return (str) => {
+          switch (str) {
+          case '1' : return '一拍'
+          case '2' : return '二拍'
+          case '3' : return '三拍'
+          case '4' : return '变卖'
+          case '5' : return '重新拍卖'
+          }
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped lang=scss>
+    /* @import "@/assets/scss/cover.scss"; */
+    #PaiMaiXiangQing{
+        user-select: none;
+        background: #F2F6F9;
+        display: flex;
+        flex-direction: column;
+        .scroll-con{
+            flex: 1;
+            overflow: auto;
+            height: 100%;
+        }
+        .my-swipe{
+            height: 5rem;
+            background: url("@/assets/img/sifapaimai/zhanwei.png") no-repeat center;
+            background-size: 5.76rem 3.84rem;
+            &.has{
+                background: #fff;
+            }
+            .top-img{
+                height: 5rem;
+                background-size: contain;
+                background-repeat: no-repeat;
+                background-position: center;
+            }
+            .custom-indicator{
+                min-width: 0.86rem;
+                background: rgba(0, 0, 0, 0.5);
+                border-radius: 0.25rem;
+                font-size: 0.22rem;
+                font-weight: bold;
+                color: #FFFFFF;
+                line-height: 0.38rem;
+                text-align: center;
+                position: absolute;
+                bottom: 0.2rem;
+                right: 0.32rem;
+            }
+        }
+        .end-time{
+            height: 0.92rem;
+            .end-str{
+                font-size: 0.29rem;
+                color: #FFFFFF;
+                line-height: 0.92rem;
+                text-align: center;
+                width: 2.25rem;
+                height: 0.92rem;
+                float: left;
+                background-repeat: no-repeat;
+                background-size: 2.25rem 0.92rem;
+            }
+            .time-str{
+                font-size: 0.24rem;
+                line-height: 0.92rem;
+                padding-left: 2.57rem;
+                color: #FFFFFF;
+            }
+            &.s1{
+                background: #F8EBEB;
+                .end-str{
+                    background-image: url("@/assets/img/sifapaimai/det-1.png");
+                }
+                .time-str{
+                    color: #C13E3E;
+                }
+            }
+            &.s2{
+                background:#EAF2EF;
+                .end-str{
+                    background-image: url("@/assets/img/sifapaimai/det-2.png");
+                }
+                .time-str{
+                    color:#2E8665;
+                }
+            }
+            &.s3{
+                background: #E0E1E2;
+                .end-str{
+                    background-image: url("@/assets/img/sifapaimai/det-3.png");
+                }
+                .time-str{
+                    color: #64696E;
+                }
+            }
+        }
+        .product-det{
+            margin: 0.24rem 0.16rem 0;
+            padding: 0.25rem 0.32rem;
+            background: #FFFFFF;
+            border-radius: 0.16rem;
+            .tags{
+                span{
+                    display: inline-block;
+                    padding: 0 0.16rem;
+                    font-size: 0.2rem;
+                    line-height: 0.36rem;
+                    color: #fff;
+                    background: #778FA8;
+                    border-radius: 0.04rem;
+                    margin-right: 0.16rem;
+                    margin-bottom: 0.08rem;
+                    &.s{
+                        color: #0265D9;
+                        background: rgba(2, 101, 217, 0.1);
+                    }
+                }
+            }
+            .name{
+                font-size: 0.3rem;
+                line-height: 0.46rem;
+                font-weight: bold;
+                color: #242A32;
+                padding-bottom: 0.08rem;
+            }
+            .price{
+                font-size: 0.24rem;
+                line-height: 0.4rem;
+                color: #64696E;
+                .red{
+                    font-size: 0.4rem;
+                    font-weight: bold;
+                    color: #C13E3E;
+                    line-height: 0.56rem;
+                }
+                .line{
+                    width: 0.02rem;
+                    height: 0.12rem;
+                    background: #BDBFC1;
+                    display: inline-block;
+                    vertical-align: middle;
+                }
+            }
+            .tip{
+                font-size: 0.22rem;
+                line-height: 0.34rem;
+                color: #C0913C;
+                background: #F8F4EB;
+                border-radius: 0.16rem;
+                padding: 0.06rem 0.08rem;
+                margin-top: 0.16rem;
+                margin-bottom: 0.16rem;
+                display: flex;
+                .source-tips{
+                    display: flex;
+                    padding: 0 0.08rem;
+                    justify-content: space-between;
+                    align-items: center;
+                    flex: 1;
+                    .ms{
+                        flex: 1;
+                    }
+                    .gx{
+                        color: #4A90E2;
+                        font-size: 0.2rem;
+                        text-decoration-line: underline;
+                    }
+                }
+                img{
+                    width: 0.34rem;
+                    height: 0.34rem;
+                    vertical-align: middle;
+                }
+            }
+            .table{
+                display: flex;
+                flex-wrap: wrap;
+                font-size: 0.24rem;
+                line-height: 0.4rem;
+                color: #64696E;
+                padding-bottom: 0.16rem;
+                margin-bottom: 0.18rem;
+                border-bottom: 1px solid #F8FAFC;
+                .t20{
+                    width: 20%;
+                }
+                .t30{
+                    width: 30%;
+                }
+                .t25{
+                    width: 25%;
+                }
+            }
+            .address{
+                display: flex;
+                font-size: 0.24rem;
+                color: #64696E;
+                line-height: 0.34rem;
+                img{
+                    width: 0.4rem;
+                    height: 0.4rem;
+                }
+                .text{
+                    flex: 1;
+                    padding: 0 0.24rem;
+                }
+            }
+        }
+        .record{
+            margin: 0.24rem 0.16rem 0;
+            padding:0 0.32rem;
+            background: #FFFFFF;
+            border-radius: 0.16rem;
+            display: flex;
+            align-items: center;
+            height: 0.92rem;
+            font-size: 0.24rem;
+            color: #A7AAAD;
+            line-height: 0.40rem;
+            .text{
+                flex: 1;
+                font-size: 0.29rem;
+                color: #242A32;
+                span{
+                    color: #0265D9;
+                    font-weight: bold;
+                }
+            }
+            img{
+                width: 0.29rem;
+                height: 0.29rem;
+            }
+        }
+        :deep() .van-tabs{
+            margin: 0.24rem 0.16rem;
+            background: #FFFFFF;
+            border-radius: 0.16rem;
+            overflow: hidden;
+            .van-tab__text{
+                font-size: 0.29rem;
+                color: #919498;
+                padding-bottom: 10px !important;
+            }
+            .van-tab--active{
+                .van-tab__text{
+                    font-weight: bold;
+                    color: #242A32;
+                }
+            }
+            .van-tabs__line{
+                width:0.48rem !important;
+                height: 0.04rem;
+                bottom: 20px;
+                background-color: #0265D9;
+            }
+            .van-hairline--top-bottom::after, .van-hairline-unset--top-bottom::after{
+                border-color: #F8FAFC;
+            }
+            .html{
+                overflow: hidden;
+                padding: 0.2rem 0.32rem 0.32rem;
+                color: #242A32;
+                line-height: 0.40rem;
+                font-size: 0.29rem!important;
+                font-family: -apple-system,BlinkMacSystemFont,'Helvetica Neue',Helvetica,Segoe UI,Arial,Roboto,'PingFang SC','Hiragino Sans GB','Microsoft Yahei',sans-serif!important;
+                p,span,div,a{
+                    font-size: 0.29rem!important;
+                    font-family: -apple-system,BlinkMacSystemFont,'Helvetica Neue',Helvetica,Segoe UI,Arial,Roboto,'PingFang SC','Hiragino Sans GB','Microsoft Yahei',sans-serif!important;
+                }
+                table{
+                    width: 100%!important;
+                    margin: 0!important;
+                    td,th{
+                        width: auto!important;
+                        word-break: break-all !important;
+                        white-space: normal !important;
+                    }
+                }
+                table.xmxx_objtab{
+                    td,th,tr{
+                        font-size: 0.24rem!important;
+                    }
+                    th,td{
+                        text-indent: 0;
+                        text-align: left;
+                        border-right: 1px solid #222;
+                        border-bottom: 1px solid #222;
+                    }
+                    border-top: 1px solid #222;
+                    border-left: 1px solid #222;
+                }
+                img{
+                    max-width: 100%!important;
+                }
+                li{
+                    list-style: none;
+                }
+                #pmgg{
+                    p{
+                        margin-left: 0!important;
+                        TEXT-INDENT: 24pt!important;
+                    }
+                }
+                .n_detail_cont .n_cont table{
+                    table-layout:fixed !important;
+                }
+            }
+        }
+        .footer{
+            background: #FFFFFF;
+            padding: 0.12rem 0.32rem 0.4rem;
+            display: flex;
+            .left,.right{
+                flex: 1;
+                font-size: 0.3rem;
+                color: #FFFFFF;
+                line-height: 0.94rem;
+                text-align: center;
+                img{
+                    width: 0.32rem;
+                    height: 0.32rem;
+                    vertical-align: middle;
+                    margin-right: 0.16rem;
+                    position: relative;
+                    top:-1px;
+                }
+            }
+            .left{
+                background: #242A32;
+                border-top-left-radius: 0.94rem;
+                border-bottom-left-radius: 0.94rem;
+            }
+            .right{
+                background: #64696E;
+                border-top-right-radius: 0.94rem;
+                border-bottom-right-radius: 0.94rem;
+                &.s{
+                    background: linear-gradient(148deg, #177FFE 0%, #1651FE 100%);
+                }
+            }
+        }
+        .pop-btm{
+            background: #FFFFFF;
+            border-radius: 0.24rem 0.24rem 0rem 0rem;
+            padding: 0.3rem 0.4rem 1rem;
+            .list{
+                position: relative;
+                display: flex;
+                align-items: center;
+                .left{
+                    padding-right: 0.24rem;
+                    img{
+                        width: 0.48rem;
+                        height: 0.48rem;
+                    }
+                }
+                .center{
+                    flex: 1;
+                    border-bottom: 1px solid #F8FAFC;
+                    line-height: 1.04rem;
+                    font-size: 0.3rem;
+                    color: #242A32;
+                }
+                .right{
+                    width: 0.28rem;
+                    height: 0.28rem;
+                    position: absolute;
+                    right: 0;
+                    top: 0.4rem;
+                }
+            }
+        }
+        .pop-tixing{
+            width: 100%;
+            padding: 0 0.32rem;
+            background: none;
+            .con{
+                padding: 0.48rem;
+                border-radius: 0.24rem;
+                background: #fff url("@/assets/img/sifapaimai/bg.png");
+                background-size: 2.7rem 1.74rem;
+                background-position: right top;
+                background-repeat: no-repeat;
+                .title{
+                    font-size: 0.36rem;
+                    font-weight: bold;
+                    color: #28303A;
+                    line-height: 0.52rem;
+                    padding-bottom: 0.1rem;
+                }
+                .content{
+                    font-size: 0.26rem;
+                    color: #242A32;
+                    line-height: 0.36rem;
+                    .c{
+                        color: #0265D9;
+                    }
+                }
+                .btm{
+                    margin-top: 0.96rem;
+                    font-size: 0.3rem;
+                    font-weight: bold;
+                    color: #2C3643;
+                    line-height: 0.3rem;
+                    text-align: right;
+                }
+            }
+        }
+    }
+</style>
+/* eslint-disable no-alert, no-console */

+ 13 - 3
src/components/Global/CommonTab.vue

@@ -2,7 +2,7 @@
 
   <div>
     <van-tabs></van-tabs>
-    <van-tabs v-model:active="state.active" class="fixed w-full top-0 z-10"
+    <van-tabs v-model:active="active" class="fixed w-full top-0 z-10"
               swipeable animated
               @change="change">
       <van-tab v-for="(item,index) in state.tabList" :key="item.value" :title="`${item.name}${store.tabInfo.totalNumList[index] || ''}`" :name="item.value" title-style="font-weight:bold">
@@ -13,9 +13,10 @@
 </template>
 
 <script lang="ts" setup>
-  import { onMounted, reactive } from 'vue'
+  import { onMounted, reactive, ref } from 'vue'
   import { useDemensionListStore } from '@/store/demensionList'
-
+  import { useRoute } from 'vue-router'
+  const route = useRoute()
   interface tabItem {
     name:string,
     value:number,
@@ -26,6 +27,7 @@
     active:number
   }
 
+  const active = ref(0)
   const state =reactive<tabState>({
     tabList:[{name:'',value:0,num:0}],
     active:0
@@ -34,6 +36,8 @@
   const store = useDemensionListStore()
 
   onMounted(() => {
+    // console.log()
+
     getTabs()
   })
 
@@ -51,6 +55,12 @@
           num:0
         }
       ]
+      if(route.path.includes('_history')) {
+        // change(1)
+        // active.value = 1
+        // console.log(active)
+      }
+
       return
     }
     if(store.selectDemension.tabs) {

+ 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>

+ 74 - 0
src/components/ListCustom/YingHangZhangHu.vue

@@ -0,0 +1,74 @@
+<template>
+  <div id="YingHangZhangHu">
+    <div class="content">
+      <van-row class="caichan-tip">
+        已查询到该企业的银行账户信息。具体信息如下:
+      </van-row>
+      <van-row class="yhc-bzxr-items">
+        <van-row class="bzxr-items-info">
+          <van-row class="bzxr-items-left">
+            <van-row type="flex">
+              <van-col>公司名称:</van-col>
+              <van-col class="bzxr-items-nr">{{state.details.name||'-'}}</van-col>
+            </van-row>
+            <van-row type="flex">
+              <van-col>税号:</van-col>
+              <van-col class="bzxr-items-nr">{{state.details.creditCode}}</van-col>
+            </van-row>
+            <van-row type="flex">
+              <van-col>单位地址:</van-col>
+              <van-col class="bzxr-items-nr">{{state.details.address||'-'}}</van-col>
+            </van-row>
+            <van-row type="flex">
+              <van-col>联系方式:</van-col>
+              <van-col class="bzxr-items-nr">{{state.details.phone||'-'}}</van-col>
+            </van-row>
+            <van-row type="flex">
+              <van-col>开户银行:</van-col>
+              <van-col class="bzxr-items-nr">{{state.details.bank||'-'}}</van-col>
+            </van-row>
+            <van-row type="flex">
+              <van-col>银行账户:</van-col>
+              <van-col class="bzxr-items-nr">{{state.details.bankAccount||'-'}}</van-col>
+            </van-row>
+          </van-row>
+        </van-row>
+      </van-row>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import $axios from '@/api'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, reactive } from 'vue'
+
+  const state = reactive<any>({
+    details:{}
+  })
+
+  const getData = async () => {
+    const params = {
+      infoCode: useDemensionListStore().selectDemension?.code,
+      companyName: useDemensionListStore().entityName
+    }
+    const res:any = await $axios.get('firefly-erp/eci/dimension/detail',{params})
+    state.details = res
+  }
+
+  onMounted(() => {
+    getData()
+  })
+</script>
+
+<style scoped lang="scss">
+    #YingHangZhangHu {
+        display: flex;
+        flex-direction: column;
+
+        .content {
+            flex: 1;
+            overflow: auto;
+        }
+    }
+</style>

+ 58 - 0
src/components/ListCustom/ZhuCeDiZhi.vue

@@ -0,0 +1,58 @@
+<template>
+  <div id="ZhuCeDiZhi">
+    <div class="caichan-tip">
+      已查询到该企业注册地址,注册地址可能是该企业的自有财产,也可能是该企业的租赁财产,请进一步查核。具体信息如下:
+    </div>
+    <van-row class="yhc-bzxr-items">
+      <van-row class="bzxr-items-info">
+        <van-row class="bzxr-items-left">
+          <van-row type="flex">
+            <van-col>名称:</van-col>
+            <van-col
+              class="bzxr-items-nr"
+            >{{ details.companyName || "-" }}</van-col
+            >
+          </van-row>
+          <van-row type="flex">
+            <van-col>注册地址:</van-col>
+            <van-col class="bzxr-items-nr">{{ details.address || "-" }}</van-col>
+          </van-row>
+        </van-row>
+      </van-row>
+    </van-row>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import $axios from '@/api'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, ref } from 'vue'
+
+  const details = ref<any>({})
+  const getData = async () => {
+    const params = {
+      dimensionCode: useDemensionListStore().selectDemension?.code,
+      entityId: useDemensionListStore().entityId,
+      entityName: useDemensionListStore().entityName,
+      entityType: useDemensionListStore().entityType
+    }
+    const res:any = await $axios.get('lawyer-workbench/risk/dimension/page',{params})
+    details.value = res
+  }
+
+  onMounted(() => {
+    getData()
+  })
+</script>
+
+<style scoped lang='scss'>
+#ZhuCeDiZhi {
+  display: flex;
+  flex-direction: column;
+
+  .content {
+    flex: 1;
+    overflow: auto;
+  }
+}
+</style>

+ 63 - 0
src/components/ListCustom/ZhuCeZiBen.vue

@@ -0,0 +1,63 @@
+<template>
+  <div id="ShiJiaoZiBen">
+    <div class="content">
+      <van-row class="show">
+        该企业注册资本总额
+        {{ details.registCapi }}
+        ,实缴注册资本
+        {{ details.recCap }}
+        ,未缴注册资本
+        {{ details.unRecCap }} 。
+      </van-row>
+      <van-row class="show oth">
+        说明:一般情况下,若实缴或未缴资本未显示,则视为注册资本未实缴。相应分析及措施,详见财产报告。
+      </van-row>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import $axios from '@/api'
+  import { useDemensionListStore } from '@/store/demensionList'
+  import { onMounted, ref } from 'vue'
+
+  const details = ref<any>({})
+  const getData = async () => {
+    const params = {
+      dimensionCode: useDemensionListStore().selectDemension?.code,
+      entityId: useDemensionListStore().entityId,
+      entityName: useDemensionListStore().entityName,
+      entityType: useDemensionListStore().entityType
+    }
+    const res:any = await $axios.get('lawyer-workbench/risk/dimension/page',{params})
+    details.value = res
+  }
+
+  onMounted(() => {
+    getData()
+  })
+</script>
+
+<style scoped lang="scss">
+#ShiJiaoZiBen {
+  display: flex;
+  flex-direction: column;
+  background: #fff;
+  .content {
+    flex: 1;
+    overflow: auto;
+  }
+
+  .show {
+    padding: 10px 10px;
+    line-height: 26px;
+    font-size: 14px;
+    text-indent: 30px;
+    &.oth {
+      text-indent: 0px;
+      padding-top: 0px;
+      color: #999;
+    }
+  }
+}
+</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>

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

@@ -1,27 +1,14 @@
-import { JingYingFengXian } from './JingYingFengXian/index'
-import { QiYeRongZi } from './QiYeRongZi/index'
-import { JiBenXinXi } from './JiBenXinXi/index'
 import { TotalDemensionInter } from './../types'
-import { FaLvFengXian } from './FaLvFengXian/index'
-import { JianZhuXinXi } from './JianZhuXinXi/index'
-import { JingYingXinXi } from './JingYingXinXi/index'
-import { ZhiShiChanQuan } from './ZhiShiChanQuan/index'
-import { FengXianSaoMiao } from './FengXianSaoMiao/index'
 
+const modules = import.meta.globEager('./pages/*.ts')
 
 const companyDetail: TotalDemensionInter = {
   companyName: '企业详情',
   list: []
 }
 
-console.log('FaLvFengXian:' + FaLvFengXian.list.length)
-console.log('JiBenXinXi:' + JiBenXinXi.list.length)
-console.log('JianZhuXinXi:' + JianZhuXinXi.list.length)
-console.log('QiYeRongZi:' + QiYeRongZi.list.length)
-console.log('JingYingFengXian:' + JingYingFengXian.list.length)
-console.log('JingYingXinXi:' + JingYingXinXi.list.length)
-console.log('ZhiShiChanQuan:' + ZhiShiChanQuan.list.length)
-
-companyDetail.list.push(FaLvFengXian, JiBenXinXi, JianZhuXinXi, QiYeRongZi, JingYingFengXian, JingYingXinXi, ZhiShiChanQuan,FengXianSaoMiao)
+Object.values(modules).map(item => {
+  companyDetail.list.push(item.pageArr)
+})
 
 export default companyDetail

+ 149 - 56
src/js-pages/company-detail/FaLvFengXian/index.ts

@@ -1,6 +1,46 @@
-import { DemensionPagesInter } from './../../types'
+import { shallowRef } from 'vue'
+import { DemensionPagesInter } from '../../types'
+import PoChanChongZheng from '@/components/DetailCustom/PoChanChongZheng.vue'
+import SiFaPaiMaiVue from '@/components/DetailCustom/SiFaPaiMai.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 = {
+export const pageArr: DemensionPagesInter = {
   projectName: '法律风险',
   list: [
     {
@@ -471,10 +511,13 @@ export const FaLvFengXian: DemensionPagesInter = {
       ]
     },
     {
+      //拍卖详情页未完成
       companyId: '88f04cbfab150fe2bccdeec3aea32750',
       code: 'judicial_auction',
       routing: 'SiFaPaiMai',
       title: '司法拍卖',
+      // detailCustomRender: shallowRef(SiFaPaiMaiVue),
+      detailRouteParams: ['auctionItemsId'],
       viewList: [
         {
           value: 'auctionTitle',
@@ -500,37 +543,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 +774,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 +898,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 +1056,13 @@ export const FaLvFengXian: DemensionPagesInter = {
       ]
     },
     {
+      //正文详情页未完成
       code: 'bankruptcy',
       routing: 'PoChanChongZheng',
       title: '破产重整',
       detailValue: 'bankruptcyOpenCase',
-      companyId: '4cc3861734ecd09b00ab34afdf8f94cc',
+      companyId: 'e8ee433fae5e03e4816c0b5981da76ba',
+      detailCustomRender: shallowRef(PoChanChongZheng),
       detailList: [
         {
           name: '案号',
@@ -1202,7 +1289,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: '被执行人地址',

+ 49 - 1
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 = {
+export const pageArr: 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: '历史变更',

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

@@ -1,5 +1,5 @@
-import { DemensionPagesInter } from './../../types'
-export const JianZhuXinXi: DemensionPagesInter = {
+import { DemensionPagesInter } from '../../types'
+export const pageArr: DemensionPagesInter = {
   projectName: '建筑信息',
   list: [
     {

+ 226 - 37
src/js-pages/company-detail/JingYingFengXian/index.ts

@@ -1,11 +1,12 @@
-import { DemensionPagesInter } from './../../types'
+import { DemensionPagesInter } from '../../types'
 import JianYiZhuXiao from '@/components/DetailCustom/JianYiZhuXiao.vue'
 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 = {
+export const pageArr: DemensionPagesInter = {
   projectName: '经营风险',
   list: [
     {
@@ -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',
@@ -72,7 +73,206 @@ export const JingYingFengXian: DemensionPagesInter = {
       routing: 'GuQuanChuZhi',
       title: '股权出质',
       companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      detailList: [
+        {
+          name: '登记编号',
+          value: 'regNumber'
+        },
+        {
+          name: '状态',
+          value: 'state'
+        },
+        {
+          name: '出质人',
+          listVal: 'pledgorInfo',
+          companyId: 'pledgor_id',
+          value: 'pledgor'
+        },
+        {
+          name: '出质人证件号码',
+          value: 'certifNumberPledgor'
+        },
+        {
+          name: '出质股权数额',
+          value: 'equityAmount'
+        },
+        {
+          name: '质权人',
+          listVal: 'pledgeeInfo',
+          companyId: 'pledgee_id',
+          value: 'pledgee'
+        },
+        {
+          name: '质权人证件号',
+          value: 'certifNumberPledgee'
+        },
+        {
+          name: '股权出质登记日期',
+          value: 'regDate',
+          valueType: 'date'
+        },
+        {
+          name: '出质股权标的企业',
+          value: 'relatedCompanyName'
+        }
+      ],
+      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',
+          listVal: 'pledgeeInfo',
+          companyId: 'pledgeeId',
+          name: '质权人'
+        },
+        {
+          value: 'pledgor',
+          listVal: 'pledgorInfo',
+          companyId: 'pledgorId',
+          name: '出质人'
+        },
+        {
+          name: '登记编号',
+          value: 'regNumber'
+        },
+        {
+          name: '出质股权标的的企业',
+          value: 'relatedCompanyName'
+        },
+        {
+          name: '出质股权数额(万元)',
+          value: 'equityAmount'
+        },
+        {
+          name: '状态',
+          value: 'state'
+        }
+      ]
+    },
+    {
+      code: 'pledgee_equity',
+      routing: 'GuQuanChuZhiZhiQuanRen',
+      title: '股权出质(质权人)',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
       tabs: { key: 'deleted' },
+      detailList: [
+        {
+          name: '登记编号',
+          value: 'regNumber'
+        },
+        {
+          name: '状态',
+          value: 'state'
+        },
+        {
+          name: '出质人',
+          listVal: 'pledgorInfo',
+          companyId: 'pledgor_id',
+          value: 'pledgor'
+        },
+        {
+          name: '出质人证件号码',
+          value: 'certifNumberPledgor'
+        },
+        {
+          name: '出质股权数额',
+          value: 'equityAmount'
+        },
+        {
+          name: '质权人',
+          listVal: 'pledgeeInfo',
+          companyId: 'pledgee_id',
+          value: 'pledgee'
+        },
+        {
+          name: '质权人证件号',
+          value: 'certifNumberPledgee'
+        },
+        {
+          name: '股权出质登记日期',
+          value: 'regDate',
+          valueType: 'date'
+        },
+        {
+          name: '出质股权标的企业',
+          value: 'relatedCompanyName'
+        }
+      ],
+      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 +336,34 @@ 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 +842,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',

+ 94 - 16
src/js-pages/company-detail/JingYingXinXi/index.ts

@@ -1,11 +1,13 @@
 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 { DemensionPagesInter } from '../../types'
 import ShuangSuiJiChouCha from '@/components/DetailCustom/ShuangSuiJiChouCha.vue'
-
-export const JingYingXinXi: DemensionPagesInter = {
+//维度已完成
+export const pageArr: DemensionPagesInter = {
   projectName: '基本信息',
   list: [
     {
@@ -260,7 +262,6 @@ export const JingYingXinXi: DemensionPagesInter = {
       ]
     },
     {
-      //未完成
       code: 'permission_eci',
       routing: 'XingZhenXuKe',
       title: '行政许可',
@@ -558,10 +559,73 @@ export const JingYingXinXi: DemensionPagesInter = {
       ]
     },
     {
-      code: 'land_public',
-      routing: 'TuDiGongShi',
-      title: '地块公式',
-      companyId: 'a10a3675d3f4e38af372dcd8eddce29f',
+      code: 'land_transfer_old',
+      routing: 'TuDiZhuanRang',
+      title: '土地转让',
+      companyId: '6820fae3c815fb899214617b54efadf7',
+      detailList: [
+        {
+          name: '宗地坐落',
+          value: 'location'
+        },
+        {
+          name: '宗地编号',
+          value: 'num'
+        },
+        {
+          name: '原土地所有权人',
+          value: 'userPre'
+        },
+        {
+          name: '现有土地使用权人',
+          value: 'userNow'
+        },
+        {
+          name: '宗地标识',
+          value: 'mark'
+        },
+        {
+          name: '土地面积(公顷)',
+          value: 'area'
+        },
+        {
+          name: '土地用途',
+          value: 'useFor'
+        },
+        {
+          name: '所在行政区',
+          value: 'aministrativeArea'
+        },
+        {
+          name: '成交时间',
+          value: 'merchandiseTime',
+          valueType: 'date'
+        },
+        {
+          name: '土地使用权类型',
+          value: 'useType'
+        },
+        {
+          name: '土地使用年限(年)',
+          value: 'yearsOfUse'
+        },
+        {
+          name: '土地利用状况',
+          value: 'situation'
+        },
+        {
+          name: '土地级别',
+          value: 'level'
+        },
+        {
+          name: '转让方式',
+          value: 'merchandiseType'
+        },
+        {
+          name: '转让价格(万元)',
+          value: 'merchandisePrice'
+        }
+      ],
       viewList: [
         {
           value: 'location',
@@ -572,20 +636,20 @@ export const JingYingXinXi: DemensionPagesInter = {
           value: 'area'
         },
         {
-          name: '土地用途',
-          value: 'useFor'
+          name: '转让价格(万元)',
+          value: 'merchandisePrice'
         },
         {
-          name: '发布机关',
-          value: 'publicationOrganize'
+          name: '原土地使用权人',
+          value: 'userPre'
         },
         {
-          name: '受让单位',
-          value: 'applicationName'
+          name: '现土地使用权人',
+          value: 'userNow'
         },
         {
-          name: '开始公布日期',
-          value: 'publicationDate',
+          name: '成交时间',
+          value: 'merchandiseTime',
           valueType: 'date'
         }
       ]
@@ -773,6 +837,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 +1075,13 @@ export const JingYingXinXi: DemensionPagesInter = {
       ]
     },
     {
+      code: 'eci_supply',
+      routing: 'GongYingShang',
+      title: '供应商',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: shallowRef(GongYingShang)
+    },
+    {
       code: 'property_rights_transaction',
       routing: 'ChanQuanJiaoYi',
       title: '产权交易',

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

@@ -1,8 +1,8 @@
-import { DemensionPagesInter } from './../../types'
+import { DemensionPagesInter } from '../../types'
 import pdfImg from '@/assets/img/pdf.png'
 import { $goOuterUrl } from '@/utils/utils'
 //维度已完成
-export const QiYeRongZi: DemensionPagesInter = {
+export const pageArr: DemensionPagesInter = {
   projectName: '法律风险',
   list: [
     {

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

@@ -1,4 +1,4 @@
-import { DemensionPagesInter } from './../../types'
+import { DemensionPagesInter } from '../../types'
 import webImg from '@/assets/img/web.png'
 import { $goOuterUrl } from '@/utils/utils'
 const shangBiaoSelectList = [
@@ -76,7 +76,7 @@ const returnZhuanliStatus = (stamp: string) => {
 
 
 
-export const ZhiShiChanQuan: DemensionPagesInter = {
+export const pageArr: DemensionPagesInter = {
   projectName: '知识产权',
   list: [
     {

+ 14 - 0
src/js-pages/finance-detail/index.ts

@@ -0,0 +1,14 @@
+import { TotalDemensionInter } from './../types'
+
+const modules = import.meta.globEager('./pages/*.ts')
+
+const financeDetail: TotalDemensionInter = {
+  companyName: '找财产',
+  list: []
+}
+
+Object.values(modules).map(item => {
+  financeDetail.list.push(item.pageArr)
+})
+
+export default financeDetail

+ 45 - 0
src/js-pages/finance-detail/pages/DuiWaiTouZi.ts

@@ -0,0 +1,45 @@
+import { DemensionPagesInter } from '../../types'
+export const pageArr: DemensionPagesInter = {
+  projectName: '对外投资',
+  list: [
+    {
+      code: 'equity_participation',
+      routing: 'CanGuQiYe',
+      title: '参股企业',
+      companyId: '8897bb91d0c93eef49f7627f84d6e212',
+      apiUrl: 'firefly-erp/eci/dimension/detail',
+      viewList: [
+        {
+          value: 'name',
+          valueType: 'title'
+        },
+        {
+          name: '法定代表人',
+          value: 'legalPersonName'
+        },
+        {
+          name: '注册资本',
+          value: 'regCapital'
+        },
+        {
+          name: '投资比例',
+          value: 'percent'
+        },
+        {
+          name: '经营状态',
+          value: 'regStatus'
+        },
+        {
+          name: '成立日期',
+          value: 'estiblishTime',
+          valueType: 'date'
+        },
+        {
+          name: '统一社会信用代码',
+          value: 'creditCode'
+        }
+
+      ]
+    }
+  ]
+}

+ 75 - 0
src/js-pages/finance-detail/pages/DuiWaiZhaiQuan.ts

@@ -0,0 +1,75 @@
+import { DemensionPagesInter } from '../../types'
+export const pageArr: DemensionPagesInter = {
+  projectName: '对外投资',
+  list: [
+    {
+      code: 'direct_debt',
+      routing: 'ZhiJieZaiQuan',
+      title: '直接债权',
+      companyId: '8897bb91d0c93eef49f7627f84d6e212',
+      apiUrl: 'firefly-erp/eci/dimension/detail',
+      noDataList: true,
+      viewList: [
+        {
+          name: '债务人',
+          value: 'debtor'
+        },
+        {
+          name: '案件本金',
+          value: 'casePrincipal',
+          valueType: 'w'
+        },
+        {
+          name: '管辖法院',
+          value: 'jurisdictionCourt'
+        },
+        {
+          name: '案号',
+          value: 'caseNo'
+        },
+        {
+          name: '判决裁定日期',
+          value: 'judgeDate',
+          valueType: 'date'
+        }
+      ]
+    },
+    {
+      code: 'indirect_debt',
+      routing: 'JianJieZaiQuan',
+      title: '间接债权',
+      companyId: '8897bb91d0c93eef49f7627f84d6e212',
+      apiUrl: 'firefly-erp/eci/dimension/detail',
+      noDataList: true,
+      viewList: [
+        {
+          name: '债权人',
+          value: 'inCreditor'
+        },
+        {
+          name: '债务人',
+          value: 'debtor'
+        },
+        {
+          name: '案件本金',
+          value: 'casePrincipal',
+          valueType: 'w'
+        },
+        {
+          name: '管辖法院',
+          value: 'jurisdictionCourt'
+        },
+        {
+          name: '案号',
+          value: 'caseNo'
+        },
+        {
+          name: '判决裁定日期',
+          value: 'judgeDate',
+          valueType: 'date'
+        }
+      ]
+    }
+  ]
+}
+

+ 15 - 0
src/js-pages/finance-detail/pages/YiSiCaiChanXinXi.ts

@@ -0,0 +1,15 @@
+import { DemensionPagesInter } from '../../types'
+import ZhuCeDiZhi from '@/components/ListCustom/ZhuCeDiZhi.vue'
+import { shallowRef } from 'vue'
+export const pageArr: DemensionPagesInter = {
+  projectName: '账户',
+  list: [
+    {
+      code: 'registered_address_v8',
+      routing: 'ZhuCeDiZhi',
+      title: '注册地址',
+      companyId: '8897bb91d0c93eef49f7627f84d6e212',
+      listCustomRender: shallowRef(ZhuCeDiZhi)
+    }
+  ]
+}

+ 15 - 0
src/js-pages/finance-detail/pages/ZhangHu.ts

@@ -0,0 +1,15 @@
+import { DemensionPagesInter } from '../../types'
+import YingHangZhangHu from '@/components/ListCustom/YingHangZhangHu.vue'
+import { shallowRef } from 'vue'
+export const pageArr: DemensionPagesInter = {
+  projectName: '账户',
+  list: [
+    {
+      code: 'bank_account',
+      routing: 'YingHangZhangHu',
+      title: '银行账户',
+      companyId: '8897bb91d0c93eef49f7627f84d6e212',
+      listCustomRender: shallowRef(YingHangZhangHu)
+    }
+  ]
+}

+ 60 - 0
src/js-pages/finance-detail/pages/ZiBen.ts

@@ -0,0 +1,60 @@
+import { DemensionPagesInter } from '../../types'
+import ZhuCeZiBen from '@/components/ListCustom/ZhuCeZiBen.vue'
+import { shallowRef } from 'vue'
+export const pageArr: DemensionPagesInter = {
+  projectName: '资本',
+  list: [
+    {
+      code: 'registered_capital_v8',
+      routing: 'ZhuCeZiBen',
+      title: '注册资本',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: shallowRef(ZhuCeZiBen)
+    },
+    {
+      code: 'registered_capital_v8',
+      routing: 'ShiJiaoZiBen',
+      title: '实缴资本',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: shallowRef(ZhuCeZiBen)
+    },
+    {
+      code: 'registered_capital_v8',
+      routing: 'WeiJiaoZiBen',
+      title: '未缴资本',
+      companyId: '88f04cbfab150fe2bccdeec3aea32750',
+      listCustomRender: shallowRef(ZhuCeZiBen)
+    },
+    {
+      code: 'increase_record',
+      routing: 'ZengZiJiLu',
+      title: '增资记录',
+      companyId: '8897bb91d0c93eef49f7627f84d6e212',
+      noDataList: true,
+      viewList: [
+        {
+          name: '变更日期',
+          value: 'changeTime',
+          valueType: 'date'
+        },
+        {
+          name: '变更类别',
+          value: 'category'
+        },
+        {
+          name: '变更事项',
+          value: 'changeItem'
+        },
+        {
+          name: '增资前',
+          value: 'contentBefore'
+        },
+        {
+          name: '增资后',
+          value: 'contentAfter'
+        }
+      ]
+    }
+
+  ]
+}

+ 2 - 2
src/js-pages/index.ts

@@ -1,9 +1,9 @@
 import { TotalDemensionInter } from './types'
 import companyDetail from './company-detail'
-// import F2 from '@antv/f2'
+import financeDetail from './finance-detail'
 
 const pagesArr: TotalDemensionInter[] = []
 
-pagesArr.push(companyDetail)
+pagesArr.push(companyDetail, financeDetail)
 
 export default pagesArr

+ 5 - 1
src/js-pages/types.ts

@@ -39,6 +39,10 @@ export interface DemensionPagesListInter {
   listCustomRender?: any,
   detailCustomRender?: any,
   /**
+ * 自定义的详情页路由参数
+ */
+  detailRouteParams?: string[],
+  /**
   * 公司的ID,方便调试用,88f开头是乐视
   */
   companyId: '88f04cbfab150fe2bccdeec3aea32750' | string,
@@ -49,7 +53,7 @@ export interface DemensionPagesListInter {
   /**
  * apiUrl
  */
-  apiUrl?: string,
+  apiUrl?: 'firefly-erp/eci/dimension/detail' | string,
 }
 
 

+ 1 - 1
src/layout/Layout.vue

@@ -16,7 +16,7 @@
   watch(() => route.path,() => {
     if(!store.entityId) {
       store.entityId = route.query.companyId  || 'e8ee433fae5e03e4816c0b5981da76ba'
-      store.entityName = route.query.companyName  || '广州天力建筑工程有限公司'
+      store.entityName = route.query.companyName  || '宁德时代新能源科技股份有限公司'
     }
   })
 

+ 12 - 1
src/plugins/vant.ts

@@ -1,4 +1,8 @@
-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,
+  Toast, Collapse, CollapseItem, Cell, Col, Step, Steps, Skeleton, Popup, Swipe, SwipeItem, ActionSheet
+} from 'vant'
 import { App } from 'vue'
 
 export const useVant = (app: App<Element>) => {
@@ -17,4 +21,11 @@ export const useVant = (app: App<Element>) => {
   app.use(Step)
   app.use(Steps)
   app.use(Skeleton)
+  app.use(Empty)
+  app.use(Toast)
+  app.use(Popup)
+  app.use(Swipe)
+  app.use(SwipeItem)
+  app.use(ActionSheet)
+
 }

+ 5 - 5
src/router/index.ts

@@ -6,6 +6,11 @@ const routes: Array<RouteRecordRaw> = [
     component: () => import('@/views/demension/list.vue')
   },
   {
+    path: '/:routerName(.*)_history',
+    name: 'demension_history',
+    component: () => import('@/views/demension/list.vue')
+  },
+  {
     path: '/',
     redirect: '/index'
   },
@@ -14,11 +19,6 @@ const routes: Array<RouteRecordRaw> = [
     name: 'index',
     component: () => import('@/views/index.vue')
   },
-  // {
-  //   path: '/demension',
-  //   name: 'demension',
-  //   component: () => import('@/views/demension/list.vue')
-  // },
   {
     path: '/:routerName(.*)Det',
     name: 'detail',

+ 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;
 }

+ 4 - 3
src/utils/utils.ts

@@ -50,14 +50,15 @@ export const $isCompanyClass = (companyId: string) => {
 //选择匹配的企业维度
 export const $getDemension = (routerName?: string) => {
   const route = useRoute()
+  console.log(route.params.routerName)
+
   const allDemensionArr = [] as DemensionPagesListInter[]
   const demensionArr = (arr: any[]): DemensionPagesInter[] => {
     return arr.reduce((total, item: any) => item.list ? demensionArr(item.list) : allDemensionArr.push(item), [])
   }
   demensionArr(pagesArr)
-  console.log("allDemensionArr=",allDemensionArr)
-  const selectDemension = allDemensionArr.find(item => (routerName ? `/${routerName}` : route.path) === `/${item.routing}`)
-  
+  const selectDemension = allDemensionArr.find(item => (routerName ? `/${routerName}` : route.params.routerName) === `${item.routing}`)!
+
   return {
     selectDemension,
     allDemensionArr