Browse Source

Merge branch 'ch/ETA_2.4.1' of eta_front/eta_mobile_front into debug

leichen 1 month ago
parent
commit
b74cb1e1fe

+ 8 - 0
index.html

@@ -6,6 +6,11 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover">
     <title>投研平台</title>
     <link href='/froala_editor.pkgd.min.css' rel='stylesheet' type='text/css' />
+    	<!-- luckysheet cdn -->
+    <link rel='stylesheet' href='/Luckysheet@2.1.13/dist/plugins/css/pluginsCss.css' />
+    <link rel='stylesheet' href='/Luckysheet@2.1.13/dist/plugins/plugins.css' />
+    <link rel='stylesheet' href='/Luckysheet@2.1.13/dist/css/luckysheet.css' />
+    <link rel='stylesheet' href='/Luckysheet@2.1.13/dist/assets/iconfont/iconfont.css' />
   </head>
   <body>
     <div id="app"></div>
@@ -14,5 +19,8 @@
     <script type='text/javascript' src='/froala_editor.pkgd.min.js'></script>
     <script type='text/javascript' src='/froala_editor_zh_cn.js'></script>
     <script type='text/javascript' src="/aws-sdk.min.js"></script>
+    <script src="/Luckysheet@2.1.13/dist/plugins/js/plugin.js"></script>
+    <script src="/Luckysheet@2.1.13/dist/luckysheet.umd.js"></script>
+    <script src="/luckyexcel.umd.js"></script>
   </body>
 </html>

File diff suppressed because it is too large
+ 2061 - 0
public/luckyexcel.umd.js


+ 154 - 0
src/views/sheetList/common/option.js

@@ -0,0 +1,154 @@
+
+/*  初始化  
+  options 其他配置 包括初始化数据 data:[{ celldata:[] }]
+  sheetInfo 表格id相关信息 用来内容hooks变化时保存草稿
+  limit 限制性数据
+  callbackItems 回调函数组成的对象
+*/
+import { showToast } from "vant";
+export function initSheet(container,options={},sheetInfo={},limit,callbackItems) {
+  console.log(limit);
+  const configOpt = {
+    container,
+    lang: localStorage.getItem('i18n') == 'en' ? 'en' : 'zh', // 设定表格语言
+    showinfobar: false,//顶部info
+    showsheetbar:false,//底部sheet页 暂禁止添加多个表格
+		showtoolbarConfig:{
+			image: false,//图片
+			print: false,//打印
+      chart: false, // '图表'
+      postil:  false, //'批注'
+		},
+    cellRightClickConfig: {
+      chart: false, // 图表生成
+      image: false, // 插入图片
+      link: false, // 插入链接
+    },
+    ...options,
+    // allowCopy:false,//没效果
+    hook: {
+      cellEditBefore:(range)=>{
+        if(limit.disabled){
+          showToast({message: '当前不可编辑',type:'warning'})
+          setTimeout(()=>{
+            luckysheet.exitEditMode();
+          },0)
+        }
+      },
+      cellUpdateBefore:()=>{
+        if(limit.disabled){
+          // 不可编辑
+          return false
+        }
+      },
+      // rangeCopyBefore:(range,data)=>{
+      //   // 不触发
+      //   console.log(range,data,'range,data','rangeCopyBefore');
+      // },
+      // rangeCopyAfter:(range,data)=>{
+      //   // 不触发
+      //   console.log(range,data,'range,data','rangeCopyAfter');
+      // },
+      updated: (a,b,c,d,e)=> {
+        /**
+         * lucksheet 本身没有完美的禁止用户编辑的功能,只能自己控制了,用户操作后撤销,用户撤销后重做
+         * stopUndo -- 阻止撤销 由于撤销会触发updated,又再进行撤销,直接撤销到最初状态了,我们只需要撤销一次
+         * withdrawUndo -- 撤销用户撤销的操作 即重做
+         */
+        if(limit.disabled){
+          if((!luckysheet.stopUndo)){
+            setTimeout(()=>{
+              showToast({message: '当前不可编辑',type:'warning'})
+              if(luckysheet.withdrawUndo) {
+                // 重做用户撤销的操作,我们自己的重做操作,不能再撤销
+                luckysheet.stopUndo=false
+                luckysheet.withdrawUndo=false
+                return
+              }
+              let result=luckysheet.undo()
+              luckysheet.stopUndo=false
+              if(Object.keys(result).length==0){
+                requestAnimationFrame(()=>{
+                  luckysheet.redo()
+                  luckysheet.withdrawUndo=true
+                })
+              }
+            },0)
+            luckysheet.stopUndo=true
+          }
+          return 
+        }
+        // console.log(callbackItems);
+        callbackItems.updated()
+        //草稿
+        // if(sheetInfo.Source&&sheetInfo.Source===1) {
+        //   let data = luckysheet.getAllSheets()[0];
+        //   data.luckysheet_select_save = [];
+        //   const { ExcelInfoId,ExcelName,ExcelClassifyId } = sheetInfo;
+        //   ExcelInfoId && sheetInterface.sheetDrafSave({
+        //     ExcelInfoId,
+        //     ExcelName,
+        //     ExcelClassifyId,
+        //     Content: JSON.stringify(data)
+        //   })
+        // }
+      },
+      ...options.hook,
+    },
+
+    showtoolbar: false, // 是否显示工具栏
+    showstatisticBar: false, // 是否显示底部计数栏
+    sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
+    allowEdit: false, // 是否允许前台编辑
+    enableAddRow: false, // 允许增加行
+    enableAddCol: false, // 允许增加列
+    userInfo: false, // 右上角的用户信息展示样式
+    showRowBar: false, // 是否显示行号区域
+    showColumnBar: false, // 是否显示列号区域
+    sheetFormulaBar: false, // 是否显示公式栏
+    enableAddBackTop: false,//返回头部按钮
+    rowHeaderWidth: 0,//纵坐标
+    columnHeaderHeight: 0,//横坐标
+    showstatisticBarConfig: {
+      count:false,
+      view:false,
+      zoom:false,
+    },
+    showsheetbarConfig: {
+      add: false, //新增sheet
+      menu: false, //sheet管理菜单
+      sheet: false, //sheet页显示
+    },
+  }
+  
+  luckysheet.create(configOpt)
+  
+}
+
+/* 保存表格关联截图 手动选区截图再清空选区 */
+export const getSheetImage = (data) => {
+  const { celldata } = data;
+
+  //超过1000个就不遍历了
+  let r_start,r_end,c_start,c_end;
+  if(celldata.length > 1000) {
+    const splitData = celldata.slice(0,1000);
+    const r_arr = splitData.map(_ => _.c);
+    r_start = splitData[0].r;
+    r_end = splitData[splitData.length-1].r;
+    c_start = Math.min(...r_arr);
+    c_end = Math.max(...r_arr);
+
+  }else {
+    const r_arr = celldata.map(_ => _.c);
+    r_start = celldata[0].r;
+    r_end = celldata[celldata.length-1].r;
+    c_start = Math.min(...r_arr);
+    c_end = Math.max(...r_arr);
+  }
+  
+  luckysheet.setRangeShow({row:[r_start,r_end],column:[c_start,c_end]},{show: false})
+  let img = luckysheet.getScreenshot()
+  return img;
+
+}

+ 12 - 1
src/views/sheetList/components/BalanceSheet.vue

@@ -267,7 +267,8 @@ function isNumberVal(value) {
       >
         <thead>
           <tr ref="rowTable">
-            <!-- 行头 -->
+             <!-- 行头 -->
+             <th class="th-tg sm"  style="width:36px" ref="cellRef"></th>
 
             <!-- 列头 -->
             <th 
@@ -285,6 +286,16 @@ function isNumberVal(value) {
 
         <tbody>
           <tr ref="rowTable" v-for="(row, index) in TableInfo.TableData.Data" :key="index" :style="freezeData ? `top: ${(index- minRow+1)*tableHeight}px;` : ''" :class="freezeData && rowHeader[index] >= minRow &&  rowHeader[index] <= maxRow ? 'fix' : ''">
+             <!-- 行头 -->
+             <th
+                class="th-tg th-row sm"
+                @contextmenu.prevent="rightClickHandle"
+                :data-rindex="rowHeader[index]"
+                :data-cindex="-1"
+              >
+                {{ rowHeader[index] }}
+              </th>
+            
             <td
               v-for="(cell, cell_index) in row"
               :key="`${index}_${cell_index}`"

+ 11 - 1
src/views/sheetList/components/MixedSheet.vue

@@ -268,7 +268,7 @@ function isNumberVal(value) {
         <thead>
           <tr ref="rowTable">
             <!-- 行头 -->
-            <!-- <th class="th-tg sm"  style="width:36px" ref="cellRef"></th> -->
+            <th class="th-tg sm"  style="width:36px" ref="cellRef"></th>
 
             <!-- 列头 -->
             <th 
@@ -286,6 +286,16 @@ function isNumberVal(value) {
 
         <tbody>
           <tr ref="rowTable" v-for="(row, index) in TableInfo.TableData.Data" :key="index" :style="freezeData ? `top: ${(index- minRow+1)*tableHeight}px;` : ''" :class="freezeData && rowHeader[index] >= minRow &&  rowHeader[index] <= maxRow ? 'fix' : ''">
+              <!-- 行头 -->
+              <th
+                class="th-tg th-row sm"
+                @contextmenu.prevent="rightClickHandle"
+                :data-rindex="rowHeader[index]"
+                :data-cindex="-1"
+              >
+                {{ rowHeader[index] }}
+              </th>
+        
             <td
               v-for="(cell, cell_index) in row"
               :key="`${index}_${cell_index}`"

+ 330 - 0
src/views/sheetList/components/SharedSheet.vue

@@ -0,0 +1,330 @@
+<script setup>
+  // import Sheet from '@/components/Sheet.vue'
+  import { ref, reactive, computed, onMounted, watch } from 'vue'
+  import Sheet from './Sheet.vue';
+  // 定义 props
+  const props = defineProps({
+    TableInfo:{
+      type:Object,
+      default:{}
+    }
+  })
+
+  //手机端pc端不同样式
+  const dynamicSty = computed(()=>{
+    return isMobile() ? 'mobile-sty' : 'pc-sty';
+  })
+  //判断是否是手机设备
+ function isMobile() {
+		// 判断是否是移动设备的正则表达式
+		const mobileRegex = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;
+	
+		// 获取用户代理信息
+		const userAgent = navigator.userAgent;
+	
+		// 使用正则表达式检查用户代理信息
+		return mobileRegex.test(userAgent);
+  }
+  
+
+
+
+
+
+
+
+
+
+</script>
+
+<template>
+  <div class="sheet-show-wrapper">
+    <div :class="['table-wrapper',dynamicSty ]" >
+      
+      <Sheet
+        :limit="{
+            disabled:true
+        }"
+        :sheetInfo="{
+            ExcelInfoId: TableInfo.ExcelInfoId,
+            ExcelName: TableInfo.ExcelName,
+            ExcelClassifyId: TableInfo.ExcelClassifyId,
+            Source: TableInfo.Source
+        }"
+        :option="{
+            data: [{
+            ...JSON.parse(TableInfo.Content),
+            scrollTop: 0,
+            scrollLeft: 0
+            }]
+        }"
+        >
+      </Sheet>
+    </div>
+
+    <div class="tool sheet-bottom">
+      <div class="sheet-source" 
+        v-if="TableInfo.SourcesFrom&&JSON.parse(TableInfo.SourcesFrom).isShow"
+        :style="`
+          color: ${ JSON.parse(TableInfo.SourcesFrom).color };
+          font-size: ${ JSON.parse(TableInfo.SourcesFrom).fontSize }px;
+        `"
+      >
+          source:<em>{{ JSON.parse(TableInfo.SourcesFrom).text}}</em>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style lang='scss' scoped>
+.sheet-show-wrapper {
+  max-width: 1200px;
+  overflow: hidden;
+  position: relative;
+  margin: 0 auto;
+  background: #fff;
+  .tool{
+    // text-align: right;
+    margin-top: 5px;
+    span{
+        cursor: pointer;
+    }
+  }
+  .sheet-bottom{
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    white-space: nowrap;
+    padding: 0 10px;
+    .sheet-source{
+      width: 30%;
+      min-width: 150px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+    .right-btns {
+      display: flex;
+      align-items: center;
+      gap:15px;
+      color: #666;
+    }
+  }
+}
+</style>
+<style scoped lang="scss">
+.table td,th {
+  width: 104px;
+  min-width: 104px;
+  height: 35px;
+  background: #fff;
+  text-align: center;
+  word-break: break-all;
+  border: none;
+  outline-color: #dcdfe6;
+  outline-style: solid;
+  outline-width: 1px;
+  word-wrap: break-word;
+  word-break: break-all;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  position: relative;
+
+  &.td-chose::after {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    content: "";
+    display: block;
+    outline: 0;
+    border: 2px solid #0033FF;
+    box-shadow: 0 0 5px rgba(73, 177, 249, .5)
+  }
+  // &.td-col-select::after {
+  //   position: absolute;
+  //   top: 0;
+  //   left: 0;
+  //   right: 0;
+  //   bottom: 0;
+  //   content: "";
+  //   display: block;
+  //   outline: 0;
+  //   border: 1px solid rgb(24, 173, 24);
+  //   border-bottom: none;
+  //   border-top: none;
+  // }
+  // &.td-row-select::after {
+  //   position: absolute;
+  //   top: 0;
+  //   left: 0;
+  //   right: 0;
+  //   bottom: 0;
+  //   content: "";
+  //   display: block;
+  //   outline: 0;
+  //   border: 1px solid rgb(24, 173, 24);
+  //   border-left: none;
+  //   border-right: none;
+  // }
+  &.insert {
+    background: #FFEFDD;
+  }
+  .edbname-td {
+    &:hover {
+      text-decoration: underline;
+    }
+  }
+  &.fix-col {
+    position:sticky;
+    left: 0;
+    z-index: 98; // 表格右键操作弹窗为99
+  }
+}
+
+.th-tg {
+  background: #EBEEF5;
+  &:hover {
+    cursor: pointer;
+    background: #ddd;
+    /* border: 2px solid #409eff; */
+  }
+  &.sm {
+    width: 36px;
+    min-width: 36px;
+    max-width: 36px;
+  }
+}
+//整行选中
+tr {
+  // position: relative;
+  // &.choose-all::after {
+  //   position: absolute;
+  //   top: 0;
+  //   left: 0;
+  //   right: 0;
+  //   bottom: 0;
+  //   content: "";
+  //   display: block;
+  //   outline: 0;
+  //   border: 2px solid #5897fb;
+  //   box-shadow: 0 0 5px rgba(73, 177, 249, .5)
+  // }
+  &.fix {
+    position:sticky;
+    top: 0;
+    z-index: 98; // 表格右键操作弹窗为99
+  }
+} 
+
+.el-icon-sort {
+  color: #409eff;
+  cursor: pointer;
+  font-size: 16px;
+}
+
+</style>
+<style lang='scss' scoped>
+::-webkit-scrollbar {
+  width: 6px;
+  height: 6px;
+}
+::-webkit-scrollbar-track {
+  background: rgb(239, 239, 239);
+  border-radius: 2px;
+}
+::-webkit-scrollbar-thumb {
+  background: #ccc;
+  border-radius: 10px;
+}
+::-webkit-scrollbar-thumb:hover {
+  background: #888;
+}
+::-webkit-scrollbar-corner {
+  background: #666;
+}
+.table-wrapper {
+  max-width: calc(100vw - 20px);
+  height: calc(100vh - 400px);
+  margin: 0 auto;
+  // margin-right: -5px;
+  overflow: auto;
+}
+table {
+  width: 100%;
+  font-size: 14px;
+  color: #333;
+  td,
+  th {
+    // min-width: 120px;
+    word-break: break-all;
+    word-wrap: break-word;
+    line-height: 1.2em;
+    border: 1px solid #dcdfe6;
+    // height: 40px;
+    text-align: center;
+    border-left: none;
+    border-top: none;
+    &:first-child {
+			border-left: 1px solid #dcdfe6;
+		}
+  }
+
+  .data-cell{
+    color: #333;
+    &.one-bg {
+      background-color: #EFEEF1;
+    }
+    &.two-bg {
+      background-color: #fff;
+    }
+  }
+
+  .thead-sticky {
+    position: sticky;
+    top: 0;
+  }
+
+  .head-column {
+    background-color: #505B78;
+    color: #fff;
+  }
+  .split-word {
+    span { display: inline; }
+  }
+}
+
+.no-water{
+  td,
+  th {
+    background-color: #fff;
+  }
+  .head-column {
+    background-color: #505B78;
+    color: #fff;
+  }
+}
+
+.pc-sty table {
+  table-layout: auto;
+  td,th {
+    width: auto;
+    height: auto;
+    padding: 0.4em 0;
+  }
+}
+
+.mobile-sty table {
+  table-layout: auto;
+  td,th {
+    min-width: 120px;
+    height: 40px;
+  }
+}
+.background-watermark{
+  background-repeat: no-repeat;
+  background-position: center center;
+  background-size: 100%;
+}
+</style>

+ 100 - 0
src/views/sheetList/components/Sheet.vue

@@ -0,0 +1,100 @@
+<template>
+  <div id="sheet-container"></div>
+</template>
+
+<script setup>
+import { onMounted, onBeforeUnmount, ref, defineProps, defineEmits } from 'vue';
+import { initSheet } from '../common/option';
+
+// 定义 props
+const props = defineProps({
+  option: {
+    type: Object,
+    default: () => ({})
+  },
+  sheetInfo: {
+    type: Object,
+    default: () => ({})
+  },
+  limit: {
+    type: Object,
+    default: () => ({ disabled: false })
+  }
+});
+
+// 定义 emit 事件
+const emit = defineEmits(['updated']);
+
+// 响应式数据
+const sheetObj = ref({});
+
+// 方法
+const init = () => {
+  let optionData = props.option ? props.option : {};
+  let callbackItems = { updated: updateEmit };
+  initSheet('sheet-container', optionData, props.sheetInfo, props.limit, callbackItems);
+  setTimeout(() => {
+    const sheetDom = document.querySelector('#sheet-container');
+    const morebtn = document.querySelector('#luckysheet-icon-morebtn-div');
+    if (morebtn) {
+      morebtn.style.maxWidth = sheetDom.clientWidth - 70 + 'px';
+    }
+  }, 300);
+};
+
+const copyDisable = (e) => {
+  if (!props.limit.disabled) return;
+  if (e.target && e.target.getAttribute('data-type') && e.target.getAttribute('data-type').indexOf('lucksheet') !== -1) {
+    luckysheet.enterEditMode();
+    return false;
+  }
+};
+
+const getCellContent = (arr) => {
+  if (!arr || !arr.length) return '';
+  let cellStr = '';
+  arr.forEach((_) => {
+    cellStr += _.v.replace(/\r/, '').replace(/\n/, '');
+  });
+  return cellStr;
+};
+
+const updateEmit = () => {
+  emit('updated');
+};
+
+// 生命周期钩子
+onMounted(() => {
+  init();
+  document.addEventListener('copy', copyDisable);
+});
+
+onBeforeUnmount(() => {
+  luckysheet.destroy();
+  document.removeEventListener('copy', copyDisable);
+});
+</script>
+
+<style scoped lang="scss">
+#sheet-container {
+  margin: 0;
+  padding: 0;
+  position: absolute;
+  width: 100%;
+  left: 0px;
+  top: 0;
+  bottom: 0px;
+}
+</style>
+
+<style lang="scss">
+.luckysheet .toolbar {
+  background: none;
+  margin: 0;
+  padding: 0;
+}
+
+.luckysheet-input-box {
+  z-index: 99999;
+}
+</style>

+ 54 - 4
src/views/sheetList/components/TimelineSheet.vue

@@ -19,7 +19,7 @@
   })
   const columnHeader = computed(() => {
     return getColumnHeaderCode(
-      props.TableInfo.TableData.Data[0] ? props.TableInfo.TableData.Data[0].length : 0
+      props.TableInfo.TableData.Data ? props.TableInfo.TableData.Data.length : 0
     );
   });
   const rowHeader = computed(() => {
@@ -105,6 +105,10 @@
       <table width="auto" border="0" class="table" :style="disabled ? 'width:100%':''" style="position: relative;">
         <thead>
           <tr ref="rowTable">
+            <!-- 行头 -->
+            <th class="th-tg sm"></th>
+            <th class="th-tg"></th>
+
             <!-- 列头 -->
             <th 
               ref="cellRef"
@@ -120,6 +124,8 @@
 
         <tbody>
           <tr v-for="(item, index) in EdbKeys" :key="item">
+            <!-- 行头 -->
+            <th class="th-tg sm"></th>
 
             <td rowspan="2" v-if="index === 0" class="head-column">
               日期
@@ -144,7 +150,13 @@
 
           <!-- 数据行  第一列日期-->
           <tr v-for="(date, dateIndex) in dateArr" :key="date" :style="TableInfo.ExtraConfig.TableFreeze ? `top: ${(dateIndex- minRow+1)*tableHeight}px;` : ''" :class="TableInfo.ExtraConfig.TableFreeze && rowHeader[dateIndex] >= minRow &&  rowHeader[dateIndex] <= maxRow ? 'fix' : ''">
-
+            <!-- 行头 -->
+            <th 
+              class="th-tg th-row sm"
+              :data-cindex="-1"
+              :data-rindex="rowHeader[dateIndex]"
+              @contextmenu.prevent="rightClickHandle"
+            >{{rowHeader[dateIndex]}}</th>
             <td 
               :data-rindex="rowHeader[dateIndex]"
               :data-cindex="-1"
@@ -171,7 +183,13 @@
           </tr>
           <!-- 文本行 -->
           <tr v-for="(row,index) in TableInfo.TableData.TextRowData" :key="index" :style="TableInfo.ExtraConfig.TableFreeze ? `top: ${(index+dateArr.length-minRow+1)*tableHeight}px;` : ''" :class="TableInfo.ExtraConfig.TableFreeze && rowHeader[index+dateArr.length] >= minRow &&  rowHeader[index+dateArr.length] <= maxRow ? 'fix' : ''">
-
+            <!-- 行头 -->
+            <th 
+              class="th-tg th-row sm" 
+              @contextmenu.prevent="rightClickHandle"
+              :data-rindex="rowHeader[index+dateArr.length]"
+              :data-cindex="-1"
+            >{{rowHeader[index+dateArr.length]}}</th>
             <td 
               v-for="(cell, cell_index) in row" 
               :key="`${index}_${cell_index}`"
@@ -193,8 +211,31 @@
 
     <div :class="['table-wrapper',dynamicSty ]" v-else>
       <table width="auto" border="0" class="table" :style="disabled ? 'width:100%':''" style="position: relative;">
+        <thead>
+          <tr>
+            <!-- 行头 -->
+            <th class="th-tg sm"></th>
+
+            <th class="th-tg"></th>
+            <th class="th-tg"></th>
+
+            <!-- 列头 -->
+            <th 
+              v-for="(item, index) in rowHeader" 
+              :key="index" 
+              ref="cellRef"
+              class="th-tg th-col"
+              :data-cindex="-1"
+              :data-rindex="rowHeader[index]">
+              {{item}}
+            </th>
+          </tr>
+        </thead>
         <tbody>
           <tr>
+            <!-- 行头 -->
+            <th class="th-tg sm"></th>
+
             <td colspan="2" class="head-column">
               日期
             </td>
@@ -234,7 +275,16 @@
 
           <!-- 指标行 -->
           <tr v-for="(edb, edb_index) in TableInfo.TableData.Data" :key="edb.EdbInfoId" :style="TableInfo.ExtraConfig.TableFreeze ? `top: ${(edb_index- minRow+1)*tableHeight}px;` : ''" :class="TableInfo.ExtraConfig.TableFreeze && rowHeader[edb_index] >= minRow &&  rowHeader[edb_index] <= maxRow ? 'fix' : ''">
-
+            <!-- 行头 -->
+            <th 
+              class="th-tg th-row sm"
+              :data-cindex="columnHeader[edb_index]"
+              :data-rindex="-1"
+              @contextmenu.prevent="rightClickHandle"
+            >
+              {{columnHeader[edb_index]}}
+            </th>
+            
             <!-- 名称 单位 -->
             <td 
               v-for="(item, index) in EdbKeys" 

+ 3 - 1
src/views/sheetList/sharedDetail.vue

@@ -9,6 +9,7 @@ import {usePublicSettingStore} from '@/store/modules/publicSetting'
 import {etaTablePermission,useAuthBtn} from '@/hooks/useAuthBtn'
 import TimelineSheet from './components/TimelineSheet.vue';
 import MixedSheet from './components/MixedSheet.vue';
+import SharedSheet from './components/SharedSheet.vue';
 const {checkAuthBtn} = useAuthBtn()
 const publicSettingStore = usePublicSettingStore()
 // import { useDownLoadFile } from '@/hooks/useDownLoadFile'
@@ -237,7 +238,8 @@ function Base64() {
             </div>
         </div>
         <div class="sheet-box" v-if="queryData.UniqueCode">
-            <iframe v-if="link && queryData.Source === 1" :src="link + '/sheetshow?code=' + queryData.UniqueCode" frameborder="0" width="100%" height="100%"></iframe>
+            <!-- <iframe v-if="link && queryData.Source === 1" :src="link + '/sheetshow?code=' + queryData.UniqueCode" frameborder="0" width="100%" height="100%"></iframe> -->
+            <SharedSheet v-if="queryData.Source === 1" :TableInfo="queryData"></SharedSheet>
             <TimelineSheet v-if="queryData.Source === 2" :TableInfo="queryData"></TimelineSheet>
             <MixedSheet v-if="queryData.Source === 3" :TableInfo="queryData"></MixedSheet>
         </div>

Some files were not shown because too many files changed in this diff