Browse Source

领域检索优化

xiaoqiao 6 months ago
parent
commit
5062d44515

+ 8 - 10
vue/src/components/basic/chart/chart-base.vue

@@ -1,11 +1,12 @@
 <template>
-  <div class="echart" :id="('popover-'+getChartId())" :style="chartStylePopover"></div>
+  <div  :id="('popover-'+getChartId())" :style="chartStylePopover"></div>
 </template>
 
 <script lang="ts">
-  import {defineComponent, computed, markRaw, watch} from 'vue';
+  import {defineComponent, computed, watch} from 'vue';
   import * as echarts from "echarts";
   import {get} from '@/api/common';
+  import {v4 as uuidv4} from "uuid";
 
   export  default defineComponent ({
     props:{
@@ -18,12 +19,12 @@
     data() {
       return{
         loading : false,
-        chartStylePopover: { width: "100%" , height: "230px" },
+        chartStylePopover: {width:'1000px',height: '230px' },
         chart : null as any,
         serieType : 'bar',
         hovered : false,
         datas : null,
-        id : Date.now()
+        id : uuidv4()
       }
     },
     setup(props, context){
@@ -73,7 +74,7 @@
     },
     methods:{
       getChartId:function (){
-        return this.id + "-" + this.wellId + "-" +this.dataType;
+        return this.id + "-" + this.wellId;
       },
       getDatas:async function(){
         //数据查询逻辑,如果不查询,改此方法返回数据即可
@@ -120,12 +121,9 @@
         };
         console.log("readerChart-"+this.serieType,option);
 
-        if(this.chart==null)
-          this.chart = markRaw(echarts.init(document.getElementById('popover-'+this.getChartId()) as HTMLElement));
-        if(this.chart!=null) {
+        if(this.chart==null){
+          this.chart =echarts.init(document.getElementById('popover-'+this.getChartId()), null);
           this.chart.setOption(option);
-          setTimeout(   this.chart.resize(), 1000);
-
         }
       },
       chartDispose:function (){

+ 151 - 149
vue/src/components/basic/chart/chart-cell.vue

@@ -10,168 +10,170 @@
 </template>
 
 <script lang="ts">
-  import {defineComponent, computed, markRaw, watch} from 'vue';
-  import * as echarts from "echarts";
-  import {get} from '@/api/common';
+import {defineComponent, computed, watch} from 'vue';
+import * as echarts from "echarts";
+import {get} from '@/api/common';
+import {v4 as uuidv4} from "uuid";
 
-  export  default defineComponent ({
-    props:{
-      wellId: null as any,
-      lineColor : null as any,
-      timeType : null as any, //日 day 月 month 年 year
-      dataType : null as any//gas产气量 oil产油量
-    },
-    name : 'ChartCell',
-    data() {
-      return{
-        loading : false,
-        chartStyle: { width: "100%", height: "100%" },
-        chartStylePopover: { width: "460px", height: "300px" },
-        cell : null as any,
-        chart : null as any,
-        serieType : 'line',
-        hovered : false,
-        datas : null,
-        id : Date.now()
-      }
-    },
-    setup(props, context){
-      console.log("ChartCell setup" , props, context);
+export default defineComponent({
+  props: {
+    wellId: null as any,
+    lineColor: null as any,
+    timeType: null as any, //日 day 月 month 年 year
+    dataType: null as any//gas产气量 oil产油量
+  },
+  name: 'ChartCell',
+  data() {
+    return {
+      loading: false,
+      chartStyle: {width: "100%", height: "100%"},
+      chartStylePopover: {width: "460px", height: "300px"},
+      cell: null as any,
+      chart: null as any,
+      serieType: 'line',
+      hovered: false,
+      datas: null,
+      id: uuidv4()
+    }
+  },
+  setup(props, context) {
+    console.log("ChartCell setup", props, context);
 
-      const timeType = computed(() => {
-        return props.timeType ? props.timeType : 'day'
-      });
-      const dataType = computed(() => {
-        return props.dataType ? props.dataType : 'oil'
-      });
-      const wellId = computed(() => {
-        return props.wellId ? props.wellId : null
-      });
-      //const id = computed(() => {
-      //  return wellId.value + "-" + dataType.value;
-      //});
-      const lineColor = computed(()=>{
-        return props.lineColor? props.lineColor : '#0058D0';
-      });
+    const timeType = computed(() => {
+      return props.timeType ? props.timeType : 'day'
+    });
+    const dataType = computed(() => {
+      return props.dataType ? props.dataType : 'oil'
+    });
+    const wellId = computed(() => {
+      return props.wellId ? props.wellId : null
+    });
+    //const id = computed(() => {
+    //  return wellId.value + "-" + dataType.value;
+    //});
+    const lineColor = computed(() => {
+      return props.lineColor ? props.lineColor : '#0058D0';
+    });
 
-      const units = {oil:'10kt', gas:'10^8m³',vol:'10kt'};
+    const units = {oil: '10kt', gas: '10^8m³', vol: '10kt'};
 
-      return{
-        timeType,
-        dataType,
-        wellId,
-        lineColor,
-        units
-      }
-    },
-    mounted(){
-      console.log("mounted chart-cell" , this.id);
-      if(this.wellId!=null && this.wellId!=undefined && this.wellId.trim().length>0)
-        this.readerCell();
+    return {
+      timeType,
+      dataType,
+      wellId,
+      lineColor,
+      units
+    }
+  },
+  mounted() {
+    console.log("mounted chart-cell", this.id);
+    if (this.wellId != null && this.wellId != undefined && this.wellId.trim().length > 0)
+      this.readerCell();
 
-      watch(
-        () => this.wellId,
-        (n, o) => {
-          if(n!=o) {
-            console.log("wellIdChangeLog",this.getChartId(), n, o);
-            if(n!=null && n!=undefined && n.trim().length>0) {
-              this.chartDispose();
-              this.readerCell();
-            }
+    watch(
+      () => this.wellId,
+      (n, o) => {
+        if (n != o) {
+          console.log("wellIdChangeLog", this.getChartId(), n, o);
+          if (n != null && n != undefined && n.trim().length > 0) {
+            this.chartDispose();
+            this.readerCell();
           }
         }
-      );
+      }
+    );
+  },
+  methods: {
+    getChartId: function () {
+      return this.id + "-" + this.wellId;
     },
-    methods:{
-      getChartId:function (){
-        return this.id + "-" + this.wellId + "-" +this.dataType;
-      },
-      getDatas:async function(){
-        //数据查询逻辑,如果不查询,改此方法返回数据即可
-        if(this.datas==null){
-          const result = await get('/factwell/getFactWellList',
-            { wellId: this.wellId, timeType: this.timeType });
-          this.datas = result.rows;
-        }
-        return this.datas;
-      },
-      getxAxis:async function (show){
-        let dataArys = await this.getDatas();
-        let xAxis = {type : 'category', data : [] as any, show : show, axisLabel:{rotate:50}};
-        //数据组装,这里根据业务组装x轴数据
-        (dataArys! as any).forEach(row=>{ xAxis.data.push(row.time_str) });
-        return xAxis;
-      },
-      getyAxis:function (){
-        return {type: 'value', show:false };
-      },
-      getSeries:async function (symbolSize){
-        let dataArys = await this.getDatas();
-        let series = [{type: this.serieType, data:[] as any, showSymbol:true, symbolSize:symbolSize, symbol: 'circle',
-          itemStyle : {color:this.lineColor}, lineStyle : {width:1}}];
-        //数据组装,这里根据业务组装y轴数据
-        (dataArys! as any).forEach(row=>{ series[0].data.push(row[this.dataType]) });
-        console.log("getSeries", series);
-        return series;
-      },
-      readerCell: async function () {
-        const option = {
-          grid: { top: 2, left: 0, right: 0, bottom: 2, containLabel: false },
-          xAxis: await this.getxAxis(false),
-          yAxis: this.getyAxis(),
-          series: await this.getSeries(2)
-        };
-        console.log("readerCell-"+this.serieType,option);
+    getDatas: async function () {
+      //数据查询逻辑,如果不查询,改此方法返回数据即可
+      if (this.datas == null) {
+        const result = await get('/factwell/getFactWellList',
+          {wellId: this.wellId, timeType: this.timeType});
+        this.datas = result.rows;
+      }
+      return this.datas;
+    },
+    getxAxis: async function (show) {
+      let dataArys = await this.getDatas();
+      let xAxis = {type: 'category', data: [] as any, show: show, axisLabel: {rotate: 50}};
+      //数据组装,这里根据业务组装x轴数据
+      (dataArys! as any).forEach(row => {
+        xAxis.data.push(row.time_str)
+      });
+      return xAxis;
+    },
+    getyAxis: function () {
+      return {type: 'value', show: false};
+    },
+    getSeries: async function (symbolSize) {
+      let dataArys = await this.getDatas();
+      let series = [{
+        type: this.serieType, data: [] as any, showSymbol: true, symbolSize: symbolSize, symbol: 'circle',
+        itemStyle: {color: this.lineColor}, lineStyle: {width: 1}
+      }];
+      //数据组装,这里根据业务组装y轴数据
+      (dataArys! as any).forEach(row => {
+        series[0].data.push(row[this.dataType])
+      });
+      console.log("getSeries", series);
+      return series;
+    },
+    readerCell: async function () {
+      const option = {
+        grid: {top: 2, left: 0, right: 0, bottom: 2, containLabel: false},
+        xAxis: await this.getxAxis(false),
+        yAxis: this.getyAxis(),
+        series: await this.getSeries(2)
+      };
+      console.log("readerCell-" + this.serieType, option);
 
-        if(this.cell==null)
-          this.cell = markRaw(echarts.init(document.getElementById('chart-'+this.getChartId()) as HTMLElement));
-        if(this.cell!=null) {
-          this.cell.setOption(option);
-          this.cell.resize();
-        }
-      },
-      readerChart: async function () {
-        let xAxis = await this.getxAxis(true);
-        xAxis['nameRotate'] = 0;
-        let unitStr = "";
-        if(this.units[this.dataType]) unitStr = "("+this.units[this.dataType]+")"
+      if (this.cell == null) {
+        this.cell = echarts.init(document.getElementById('chart-' + this.getChartId()));
+        this.cell.setOption(option);
+      }
+    },
+    readerChart: async function () {
+      let xAxis = await this.getxAxis(true);
+      xAxis['nameRotate'] = 0;
+      let unitStr = "";
+      if (this.units[this.dataType]) unitStr = "(" + this.units[this.dataType] + ")"
 
-        const option = {
-          title: { text: '累产量趋势图' },
-          tooltip: { trigger: 'item', triggerOn:"mousemove",showContent:true },
-          grid: { top:'15%', left: '3%', right: '3%', bottom: '6%', containLabel: true },
-          xAxis: xAxis,
-          yAxis: { type: 'value', axisLabel: { formatter : '{value}'+unitStr}},
-          series: await this.getSeries(5)
-        };
-        console.log("readerChart-"+this.serieType,option);
+      const option = {
+        title: {text: '累产量趋势图'},
+        tooltip: {trigger: 'item', triggerOn: "mousemove", showContent: true},
+        grid: {top: '15%', left: '3%', right: '3%', bottom: '6%', containLabel: true},
+        xAxis: xAxis,
+        yAxis: {type: 'value', axisLabel: {formatter: '{value}' + unitStr}},
+        series: await this.getSeries(5)
+      };
+      console.log("readerChart-" + this.serieType, option);
 
-        if(this.chart==null)
-          this.chart = markRaw(echarts.init(document.getElementById('popover-'+this.getChartId()) as HTMLElement));
-        if(this.chart!=null) {
-          this.chart.setOption(option);
-          this.chart.resize();
-        }
-      },
-      chartDispose:function (){
-        if(this.chart!=null) this.chart.dispose();
-        if(this.cell!=null) this.cell.dispose();
-        this.chart = null;
-        this.cell = null;
-        this.datas = null;
-      },
-      onOpenChange:function(visible){
-        console.log("onOpenChange", visible);
-        if(visible) {
-          setTimeout(this.readerChart, 10);
-        }
-        else{
-          this.chart.dispose();
-          this.chart = null;
-        }
+      if (this.chart == null) {
+        this.chart = echarts.init(document.getElementById('popover-' + this.getChartId()));
+        this.chart.setOption(option);
+      }
+    },
+    chartDispose: function () {
+      if (this.chart != null) this.chart.dispose();
+      if (this.cell != null) this.cell.dispose();
+      this.chart = null;
+      this.cell = null;
+      this.datas = null;
+    },
+    onOpenChange: function (visible) {
+      console.log("onOpenChange", visible);
+      if (visible) {
+        setTimeout(this.readerChart, 10);
+      } else {
+        /*this.chart.dispose();
+        this.chart = null;*/
       }
     }
-  })
+  }
+})
 </script>
 
 <style lang="less" scoped></style>

+ 1 - 5
vue/src/components/basic/es-result/chat-view.vue

@@ -2,11 +2,7 @@
   <div>
     <div class="search-title">年报 | 月报</div>
     <div class="search-view">
-      <div class="search-view-chat">
-        <div class="search-view-chat-img">
-          <ChartBase :timeType="('month')" :dataType="('gas')" :wellId="well_id"></ChartBase>
-        </div>
-      </div>
+      <ChartBase :timeType="('month')" :dataType="('gas')" :wellId="well_id"></ChartBase>
     </div>
   </div>
 </template>

+ 4 - 4
vue/src/components/basic/es-result/doc-view.vue

@@ -5,14 +5,14 @@
       <div class="search-view-doc" v-for="it in data">
         <img src="~@/assets/images/doc.png"/>
         <div>
-          <span>文档名称:<span v-html="it.file_name"></span>
+          <span>文档名称:<span class="key-tag" v-html="it.file_name"></span>
           </span> <br>
-          <span>井名:<span v-html="it.well_common_name"></span></span><br>
+          <span>井名:<span class="key-tag" v-html="it.well_common_name"></span></span><br>
           <span>
-          文档类型:<span v-html="it.file_business_type"></span>
+          文档类型:<span class="key-tag" v-html="it.file_business_type"></span>
             </span><br>
           <span>
-          上传时间:{{ it.date }}
+            上传时间:<span class="key-tag">{{ it.date }}</span>
           </span><br>
           <filePreview :fileName="it.storage_path" :filePath="it.storage_path"></filePreview>
         </div>

+ 12 - 10
vue/src/components/basic/es-result/query-criteria.vue

@@ -6,19 +6,21 @@
         <QueryHistoryComplete id="keyName" v-model:value="formState.defaultKeyString" style="width: 500px"></QueryHistoryComplete>
         <a-button type="primary" html-type="submit" @click="getQuery">查询</a-button>
         <a-button @click="() => {formRef.resetFields();}" >重置</a-button>
+        <a-divider orientation="center" @click="formState.showMoreQuery=!formState.showMoreQuery;" >
+          <template v-if="!formState.showMoreQuery" >
+            更多查询
+            <DoubleRightOutlined rotate="90" />
+          </template>
+          <template v-else>
+            收 起
+            <DoubleLeftOutlined rotate="90"/>
+          </template>
+        </a-divider>
       </a-space>
+
     </div>
     <v-tour name="queryTour" style="z-index: 1000;"  :steps="steps" :options="myOptions" :callbacks="myCallbacks"></v-tour>
-    <a-divider orientation="center" @click="formState.showMoreQuery=!formState.showMoreQuery;" >
-      <template v-if="!formState.showMoreQuery" >
-        更多查询
-        <DoubleRightOutlined rotate="90" />
-      </template>
-      <template v-else>
-        收 起
-        <DoubleLeftOutlined rotate="90"/>
-      </template>
-    </a-divider>
+
     <div data-v-step="2" v-show="formState.showMoreQuery"
          :style="showOverlay && curStepVal==2?'margin:auto;width:500px;padding:10px 10px 10px 50px;  z-index:1000;display:inline-block;height:390px;background:white;':'margin:auto;width: 500px;padding:10px 10px 10px 50px;'" >
         <a-divider orientation="left" ><b style="color:#4E61D0">1.输入检索控制条件</b></a-divider>

+ 1 - 1
vue/src/components/basic/es-result/table-view.vue

@@ -3,7 +3,7 @@
     <div class="search-title">{{ title }}</div>
     <div class="search-view">
       <template v-for="it in fieldData">
-        <span>{{ it.fieldName }}:<span v-html="data[it.fieldCode]"/></span>
+        <span>{{ it.fieldName }}:<span class="key-tag" v-html="data[it.fieldCode]"/></span>
       </template>
     </div>
   </div>

+ 6 - 10
vue/src/views/esdomain/result.vue

@@ -3,7 +3,7 @@
     <queryCriteria ref="queryRef" :queryObject="queryObject" @query="onQuery"></queryCriteria>
     <a-spin :spinning="pageState.loading">
       <div class="search-group" :style="{ maxHeight: pageState.showMoreKey? '150px':'38px' }">
-        <div class="search-group-title">检索井名:</div>
+        <div class="search-group-title">搜索结果:</div>
         <div class="search-group-item">
           <template v-for="it in keyList">
             <a-popover trigger="hover" @visibleChange="visible=>onVisible(visible,it.key)">
@@ -61,7 +61,7 @@
               <div class="search-body-title">
                 井名:<span v-html="it.well_common_name"></span>
                 <p @click="showWell(it.well_id)">
-                  <img src="~@/assets/images/info.png" width="18" height="16"/>查看井基础信息</p>
+                  <img src="~@/assets/images/info.png" width="18" height="16"/>查看井筒详情</p>
               </div>
               <div class="search-body-item">
                 <component is="cycleView" :indexSetting="it.indexSetting" :data="it" :key="it.key"></component>
@@ -142,14 +142,6 @@
               </template>
             </a-list>
           </div>
-<!--          <div class="search-sider-block">
-            <b>你可能要找的业务过程</b>
-            <div class="search-sider-process">
-              <template v-for="it in listData">
-                <span>{{ it }}</span>
-              </template>
-            </div>
-          </div>-->
         </div>
       </div>
     </a-spin>
@@ -443,7 +435,11 @@ export default defineComponent({
 }
 
 .search-view {
+  width: 100%;
 
+  .key-tag{
+    color: #666161;
+  }
   .search-view-chat {
     display: flex;
     flex-flow: wrap;

+ 1 - 1
vue/src/views/esdomain/well.vue

@@ -22,7 +22,7 @@
                            :data="it.dws_dm_analytical_assays_new" :key="it.key"></component>
                 <component is="docView" :indexSetting="it.indexSetting" :data="it.fact_dwr_well_data_index"
                            :key="it.key"></component>
-                <component is="chatView" :indexSetting="it.indexSetting" :well_id="it.well_id"
+                <component is="chatView" :indexSetting="it.indexSetting" :well_id="queryObject.wellId"
                            :data="it.dws_dm_analytical_assays_new" :key="it.key"></component>
               </div>
             </div>

+ 41 - 14
vue/src/views/wellinfo/detail.vue

@@ -144,7 +144,10 @@
             <a-descriptions-item label="井底测量深度:">{{ dataModel.bh_md }}
               <template v-if="dataModel.bh_md">m</template>
             </a-descriptions-item>
-            <a-descriptions-item label="井底位置描述信息:" :span="2">{{ dataModel.geo_description_bh }}</a-descriptions-item>
+            <a-descriptions-item label="井底位置描述信息:" :span="2">{{
+                dataModel.geo_description_bh
+              }}
+            </a-descriptions-item>
             <a-descriptions-item label="井底真垂直深度:">{{ dataModel.bh_tvd }}
               <template v-if="dataModel.bh_tvd">m</template>
             </a-descriptions-item>
@@ -197,9 +200,10 @@
                   <a-list-item v-if="(item.file_name.indexOf(fileOptions.docKey)>-1||fileOptions.docKey=='')
                   &&(fileOptions.selectBusinessType.length==0||fileOptions.selectBusinessType.includes(item.file_business_type))">
                     <template #actions>
-                      <PlusOutlined v-if="!item.isApply" @click="onAddCart(item)" title="加入购物车" :style="{fontSize: '16px', color: '#08c'}"/>
-                       <a-button type="link" @click="downFile(item)"  v-if="item.isDown" danger>下载</a-button>
-                       <filePreview :fileName="item.file_name" :filePath="item.storage_path"></filePreview>
+                      <PlusOutlined v-if="!item.isApply" @click="onAddCart(item)" title="加入购物车"
+                                    :style="{fontSize: '16px', color: '#08c'}"/>
+                      <a-button type="link" @click="downFile(item)" v-if="item.isDown" danger>下载</a-button>
+                      <filePreview :fileName="item.file_name" :filePath="item.storage_path"></filePreview>
                     </template>
                     <a-list-item-meta
                       :description="item.file_business_type">
@@ -240,7 +244,7 @@
         <br/>
         <a-table :columns="testHistoryColumns" :data-source="testHistoryList" :scroll="{ x:'100%', y: 500 }"
                  :pagination="testHistoryPage"
-                 @change="handleTestHistoryChange"  @resizeColumn="handleResizeColumn"
+                 @change="handleTestHistoryChange" @resizeColumn="handleResizeColumn" :rowClassName = "rowClassName"
                  bordered>
         </a-table>
       </div>
@@ -266,7 +270,7 @@
         <br>
         <a-table :columns="analyticalAssaysColumns" :data-source="analyticalAssaysList" :scroll="{ x:'100%', y: 500 }"
                  :pagination="analyticalAssaysPage"
-                 @change="handleAnalyticalAssaysChange"  @resizeColumn="handleResizeColumn"
+                 @change="handleAnalyticalAssaysChange" @resizeColumn="handleResizeColumn" :rowClassName = "rowClassName"
                  bordered>
         </a-table>
       </div>
@@ -289,13 +293,17 @@
           <template v-for="it in historyAssignmentSummary">
             {{ it.test_processes_name }}<span>{{ it.testing_num }}</span>次、
           </template>
-          <span v-if="lastHistoryAssignment.test_processes_name">{{ lastHistoryAssignment.start_time }}{{ lastHistoryAssignment.test_processes_name }},</span>
+          <span v-if="lastHistoryAssignment.test_processes_name">{{
+              lastHistoryAssignment.start_time
+            }}{{ lastHistoryAssignment.test_processes_name }},</span>
           <span>{{
               lastHistoryAssignment.test_processes_name
-            }}</span><span v-if="lastHistoryAssignment.well_production_sections">井段{{ lastHistoryAssignment.well_production_sections }}</span></p>
+            }}</span><span v-if="lastHistoryAssignment.well_production_sections">井段{{
+            lastHistoryAssignment.well_production_sections
+          }}</span></p>
         <br/>
         <a-table :columns="historyAssignmentColumns" :data-source="historyAssignmentList" :scroll="{ x:'100%', y: 500 }"
-                 :pagination="false"  @resizeColumn="handleResizeColumn"
+                 :pagination="false" @resizeColumn="handleResizeColumn" :rowClassName = "rowClassName"
                  bordered>
         </a-table>
       </div>
@@ -314,7 +322,7 @@
       </template>
       <div v-if="cardSettings.cardExplain.expand">
         <a-table :columns="boreholeInterColumns" :data-source="boreholeInterList" :scroll="{ x:'1500', y: 500 }"
-                 :pagination="false"  @resizeColumn="handleResizeColumn"
+                 :pagination="false" @resizeColumn="handleResizeColumn" :rowClassName = "rowClassName"
                  bordered>
         </a-table>
       </div>
@@ -504,7 +512,8 @@ export default defineComponent({
         }
       })
     }
-    function checkApplyFile(dataIndexList:any[]){
+
+    function checkApplyFile(dataIndexList: any[]) {
       let applyFileList = getStoreFiles();
       dataIndexList.forEach(it => {
         if (!it.isApply) {
@@ -513,7 +522,8 @@ export default defineComponent({
       })
       return dataIndexList;
     }
-    function getStoreFiles(){
+
+    function getStoreFiles() {
       let applyFileList = new Array();
       let storeList = localStorage.getItem("applyFileList");
       if (storeList != null) {
@@ -521,6 +531,7 @@ export default defineComponent({
       }
       return applyFileList;
     }
+
     function rowSpan(list: any[]) {
       for (let i = 0; i < list.length; i++) {
         list[i].rowSpan = getRowSpan(list[i].item_code, i + 1, list);
@@ -552,7 +563,11 @@ export default defineComponent({
       if (storeList != null) {
         applyFileList = JSON.parse(storeList);
       }
-      applyFileList.push({well_common_name: file.well_common_name, file_name: file.file_name,storage_path:file.storage_path});
+      applyFileList.push({
+        well_common_name: file.well_common_name,
+        file_name: file.file_name,
+        storage_path: file.storage_path
+      });
       localStorage.setItem("applyFileList", JSON.stringify(applyFileList));
       file.isApply = true;
       message.info('成功加入购物车');
@@ -562,10 +577,14 @@ export default defineComponent({
       router.back();
     };
 
+    const rowClassName = (record,index) => {
+      console.log(record);
+      return index % 2 === 0 ? 'even' : 'odd';
+    }
     return {
       ...toRefs(wellData),
       loadData, cardSettings,
-      onClose, ...columns,analyticalAssaysPage,handleAnalyticalAssaysChange,onAddCart,
+      onClose, ...columns, analyticalAssaysPage, handleAnalyticalAssaysChange, onAddCart, rowClassName,
       dayjs, wellId, fileOptions, downFile, onBusTypeChange, handleTestHistoryChange, testHistoryPage,
       handleResizeColumn: (w, col) => {
         col.width = w;
@@ -583,6 +602,14 @@ export default defineComponent({
 </script>
 
 <style lang="less">
+.even {
+  background-color: #f2f2f2;
+}
+
+.odd {
+  background-color: #ffffff;
+}
+
 .card-detail {
   width: 100%;
   margin-top: 10px;