Bläddra i källkod

协同后台处理登录及接口验证登录问题,文本分析页面分析接口及列表删除接口对接并反馈缺少接口和限制,文本分析结果统计图标接口及页面渲染,并定义等级颜色数据

qinpeng 2 år sedan
förälder
incheckning
53ca55cad0
6 ändrade filer med 353 tillägg och 172 borttagningar
  1. 34 11
      src/api/api.js
  2. 18 0
      src/common/data.js
  3. 112 96
      src/views/Textanalysis/index.vue
  4. 76 49
      src/views/login.vue
  5. 111 15
      src/views/teacher-dev/TextAnalysis.vue
  6. 2 1
      vue.config.js

+ 34 - 11
src/api/api.js

@@ -36,20 +36,20 @@ export function getContentFile(
 export function getLogin(MethodName, data) {
     let userInfor = getToken();
     let UserCode = '',
-      UserType = '',
-      SessionID = ''
+        UserType = '',
+        SessionID = ''
     if (userInfor) {
-      let user = JSON.parse(getToken());
-      UserCode = user.user_code;
-      UserType = user.user_type;
-      SessionID = user.session_id;
+        let user = JSON.parse(getToken());
+        UserCode = user.user_code;
+        UserType = user.user_type;
+        SessionID = user.session_id;
     }
     return request({
-      url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-      method: 'post',
-      data
+        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+        method: 'post',
+        data
     })
-  }
+}
 
 export function BookgetContent(MethodName, data) {
     let userInfor = getToken();
@@ -292,4 +292,27 @@ export function getLearnWebContent(MethodName, data) {
         method: 'post',
         data
     })
-}
+}
+
+// post api
+export function postapi(data) {
+    let userInfor = getToken();
+    let UserCode = '',
+        UserType = '',
+        SessionID = '',
+        JSESSIONID = ''
+    if (userInfor) {
+        let user = JSON.parse(getToken());
+        console.log(user);
+        UserCode = user.user_code;
+        UserType = user.user_type;
+        SessionID = user.session_id;
+        JSESSIONID = user['JSESSIONID'];
+    }
+    return request({
+        url: data.url + `?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+        method: 'post',
+        data: data.data
+    })
+}
+// 子登录

+ 18 - 0
src/common/data.js

@@ -0,0 +1,18 @@
+const LevelMap = {
+    "初等": { name: '初等', color: '#35776B', },
+    "中等": { name: '中等', color: '#3873CB', },
+    "高等": { name: '高等', color: '#9031AA', },
+    "超纲": { name: '超纲', color: '#EA1F1F', },
+    "专有": { name: '专有', color: '#CBCBCB', },
+    "其它": { name: '其它', color: '#888888', },
+    "初等1级": { name: '初等1级', color: '#B6D58A', },
+    "初等2级": { name: '初等2级', color: '#66AE5B', },
+    "初等3级": { name: '初等3级', color: '#35776B', },
+    "中等4级": { name: '中等4级', color: '#73CDDE', },
+    "中等5级": { name: '中等5级', color: '#4CA6EE', },
+    "中等6级": { name: '中等6级', color: '#3873CB', },
+    "高等7-9级": { name: '高等7-9级', color: '#9031AA', },
+}
+export default {
+    LevelMap: LevelMap,
+}

+ 112 - 96
src/views/Textanalysis/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="textanalysis_index">
+  <div class="textanalysis_index" v-loading="loading">
     <div class="wheader">
       <Header />
     </div>
@@ -7,22 +7,13 @@
       <div>
         <div class="left">
           <div class="top_nav">
-            <div
-              :class="[leftNavIndex == 1 ? 'sele' : '']"
-              @click="cutNav('1')"
-            >
+            <div :class="[leftNavIndex == 0 ? 'sele' : '']" @click="cutNav(0)">
               音节
             </div>
-            <div
-              :class="[leftNavIndex == 2 ? 'sele' : '']"
-              @click="cutNav('2')"
-            >
+            <div :class="[leftNavIndex == 1 ? 'sele' : '']" @click="cutNav(1)">
               汉字
             </div>
-            <div
-              :class="[leftNavIndex == 3 ? 'sele' : '']"
-              @click="cutNav('3')"
-            >
+            <div :class="[leftNavIndex == 2 ? 'sele' : '']" @click="cutNav(2)">
               词汇
             </div>
           </div>
@@ -69,13 +60,13 @@
             <div class="left_list_nav">
               <div class="left">
                 <span
-                  :class="[headerText == 'header' ? 'sele' : '']"
-                  @click="cutHeaderText('header')"
+                  :class="[headerText == 'wordCount' ? 'sele' : '']"
+                  @click="cutHeaderText('wordCount')"
                   >词头</span
                 >
                 <span
-                  :class="[headerText == 'text' ? 'sele' : '']"
-                  @click="cutHeaderText('text')"
+                  :class="[headerText == 'textCount' ? 'sele' : '']"
+                  @click="cutHeaderText('textCount')"
                   >文本</span
                 >
               </div>
@@ -87,6 +78,7 @@
                     :width="26"
                     style="margin-right: 10px"
                     active-text="细分"
+                    @change="getstatistics"
                   >
                   </el-switch>
                 </span>
@@ -99,21 +91,36 @@
             <div class="left_list_main">
               <div v-for="(item, index) in leftList" :key="'one' + index">
                 <div class="leftType">
-                  <span class="color"></span>
-                  <span class="type">{{ item.key }}</span>
+                  <span
+                    class="color"
+                    :style="{
+                      background:
+                        item.name && levelMap[item.name]
+                          ? levelMap[item.name].color
+                          : '',
+                    }"
+                  ></span>
+                  <span class="type">{{ item.name }}</span>
                 </div>
                 <div class="rightCount">
                   <span class="count">{{ item.value }}</span>
-                  <span class="precent">{{ item.percentage }}</span>
+                  <span class="precent">{{ item.ratio }}%</span>
                 </div>
               </div>
             </div>
           </div>
           <div class="tubiao" id="echarts">
             <div class="tubiao_top">
-              {{ currentTBdata.key }}
-              {{ currentTBdata.value }}
-              {{ currentTBdata.percentage }}
+              <span v-show="currentTBdata.name">
+                {{ currentTBdata.name }}
+              </span>
+
+              <span v-show="currentTBdata.value">
+                {{ currentTBdata.value }}
+              </span>
+              <span v-show="currentTBdata.ratio">
+                {{ currentTBdata.ratio }}%
+              </span>
             </div>
             <div id="main_echarts" class="main_echarts"></div>
             <div class="cut_download">
@@ -229,43 +236,20 @@ import * as echarts from "echarts";
 import "echarts/lib/chart/bar";
 import "echarts/lib/component/legend";
 import "echarts/lib/component/title";
+import { postapi } from "@/api/api";
+import staticData from "../../common/data";
 export default {
   components: {
     Header,
   },
   data() {
     return {
+      loading: false,
       wordFontsize: 20, // 文章内容字体
       fenci: false,
       pinyinShow: false,
       leftNavIndex: 1,
-      leftList: [
-        {
-          key: "初等1级",
-          value: "40",
-          percentage: "20.00%",
-        },
-        {
-          key: "初等2级",
-          value: "39",
-          percentage: "20.00%",
-        },
-        {
-          key: "初等3级",
-          value: "28",
-          percentage: "10.00%",
-        },
-        {
-          key: "中等1级",
-          value: "40",
-          percentage: "10.00%",
-        },
-        {
-          key: "中等2级",
-          value: "40",
-          percentage: "10.10%",
-        },
-      ],
+      leftList: null,
       colorValue: "#FF3737",
       searchVal: "",
       isSCL: false,
@@ -284,11 +268,15 @@ export default {
       SearchwordNumber: 0,
       searchWord: [],
       type: "",
-      headerText: "header",
+      headerText: "wordCount",
       xifen: false,
       myChart: null,
       currentTBdata: {},
       currentcolorValue: [],
+      subjectWords: null,
+      partitionKey: null,
+      base: {},
+      levelMap: null,
     };
   },
   methods: {
@@ -310,6 +298,7 @@ export default {
     },
     cutNav(index) {
       this.leftNavIndex = index;
+      this.getstatistics();
     },
     showSearchColorList() {
       this.isSCL = !this.isSCL;
@@ -344,6 +333,7 @@ export default {
     },
     cutHeaderText(type) {
       this.headerText = type;
+      this.getstatistics();
     },
     // 添加dom
     addnode() {
@@ -378,15 +368,15 @@ export default {
         let leidaList = [];
         newdata.forEach((item) => {
           item.value = item.value;
-          item.name = item.key + " " + (item.percentage * 100).toFixed(2) + "%";
-          name.push(item.key);
+          item.name = item.name;
+          name.push(item.name);
           valueStype.push({
             value: item.value,
-            percent: (item.percentage * 100).toFixed(2) + "%",
+            percent: item.ratio + "%",
           });
           value.push(item.value);
           leidaList.push({
-            name: item.key,
+            name: item.name,
             // max: data[data.length - 1].number,
             // max: 100, //这个总数需要等接口
           });
@@ -410,13 +400,13 @@ export default {
                   borderColor: "#f5f5f5",
                   borderWidth: 5,
                 },
-                emphasis: {
-                  itemStyle: {
-                    shadowBlur: 10,
-                    shadowOffsetX: 0,
-                    shadowColor: "rgba(0, 0, 0, 0.5)",
-                  },
-                },
+                // emphasis: {
+                //   itemStyle: {
+                //     shadowBlur: 1,
+                //     shadowOffsetX: 0,
+                //     shadowColor: "rgba(0, 0, 0, 0.5)",
+                //   },
+                // },
               },
             ],
             xAxis: {
@@ -443,6 +433,15 @@ export default {
                 type: "shadow",
               },
             },
+            dataZoom: [
+              {
+                type: "slider", //slider表示有滑动块的,inside表示内置的
+                show: true,
+                xAxisIndex: 0,
+                start: 50,
+                end: 100,
+              },
+            ],
             xAxis: {
               type: "category",
               data: name,
@@ -457,8 +456,6 @@ export default {
                     str += s;
                     str += "\n";
                   }
-                  console.log(str);
-
                   return str;
                 },
               },
@@ -466,9 +463,15 @@ export default {
             yAxis: {
               type: "value",
             },
+            grid: {
+              left: 1,
+              right: 1,
+              bottom: 1,
+              containLabel: true,
+            },
             series: [
               {
-                name: "Direct",
+                name: "",
                 data: valueStype,
                 type: "bar",
                 // label: {
@@ -513,6 +516,12 @@ export default {
             yAxis: {
               type: "value",
             },
+            grid: {
+              left: 1,
+              right: 1,
+              bottom: 1,
+              containLabel: true,
+            },
             series: [
               {
                 data: value,
@@ -560,33 +569,7 @@ export default {
             },
             series: buildSeries(value),
           };
-          // option = {
-          //   tooltip: {
-          //     trigger: "axis",
-          //   },
-          //   radar: [
-          //     {
-          //       indicator: leidaList,
-          //       center: ["50%", "60%"],
-          //       radius: 150,
-          //     },
-          //   ],
-          //   series: [
-          //     {
-          //       type: "radar",
-          //       tooltip: {
-          //         trigger: "item",
-          //       },
-          //       data: [
-          //         {
-          //           value: value,
-          //         },
-          //       ],
-          //     },
-          //   ],
-          // };
         }
-        console.log(option);
         option && this.myChart.setOption(option);
         let that = this;
         this.myChart.on("click", function (parms) {
@@ -611,17 +594,49 @@ export default {
         });
       });
     },
+    // 获取图标统计信息
+    getstatistics() {
+      this.loading = true;
+      postapi({
+        url: "GCLSTRCServer/tools/TS/statistics",
+        data: {
+          searchType: this.leftNavIndex,
+          partitionKey: this.partitionKey,
+          statisticsType: this.xifen ? 0 : 1,
+          base:
+            this.headerText == "wordCount"
+              ? this.base.wordCount
+              : this.base.textCount,
+        },
+      })
+        .then((res) => {
+          this.leftList = res.data.result;
+          this.createEcharts("main_echarts", "柱状图", this.leftList, 0);
+
+          this.loading = false;
+        })
+        .catch((res) => {
+          this.loading = false;
+        });
+    },
   },
-  mounted() {
-    this.createEcharts("main_echarts", "饼状图", this.leftList, 0);
+  created() {
+    this.partitionKey = this.$route.query.partitionKey * 1;
+    this.subjectWords = this.$route.query.subjectWords;
+    this.base.textCount = this.$route.query.textCount * 1;
+    this.base.wordCount = this.$route.query.wordCount * 1;
+    this.levelMap = staticData.LevelMap;
+
+    this.getstatistics();
   },
+  mounted() {},
 };
 </script>
 
 <style lang="scss" scoped>
 .textanalysis_index {
   background: #f6f6f6;
-  height: 100%;
+  min-height: 100%;
   .wheader {
     background: #ffffff;
   }
@@ -878,13 +893,14 @@ export default {
         .tubiao {
           width: 352px;
           margin: 0 auto;
-          height: 398px;
+          height: 374px;
           background: #f5f5f5;
           border-radius: 4px;
           margin-top: 24px;
-          padding-top: 24px;
           position: relative;
+          padding-top: 24px;
           .tubiao_top {
+            height: 22px;
             margin-bottom: 24px;
             text-align: center;
             font-weight: 500;

+ 76 - 49
src/views/login.vue

@@ -53,18 +53,23 @@
           </el-form-item>
           <p class="input-title">验证码</p>
           <div class="verificationCode-box">
-              <el-form-item prop="verificationCode">
-                <el-input
+            <el-form-item prop="verificationCode">
+              <el-input
                 autocomplete="off"
                 name="verificationCode"
                 ref="verificationCode"
                 tabindex="3"
                 type="text"
                 v-model="loginForm.verificationCode"
-                />
+              />
             </el-form-item>
             <div class="verificationCode-img">
-                <img v-if="verificationCodeimg&&verificationCodeLoading" :src="verificationCodeimg" alt="图形验证码" @click="getVerificationCodeimg"/>
+              <img
+                v-if="verificationCodeimg && verificationCodeLoading"
+                :src="verificationCodeimg"
+                alt="图形验证码"
+                @click="getVerificationCodeimg"
+              />
             </div>
           </div>
           <p class="input-title">用户类型</p>
@@ -99,12 +104,14 @@
 
 <script>
 import { validUsername } from "@/utils/validate";
-import { getStaticContent, getLogin } from "@/api/api";
+import { getStaticContent, getLogin, postapi } from "@/api/api";
 import { getObjArr } from "@/utils/role";
 import { setToken } from "@/utils/auth";
 import { removeSession } from "@/utils/role";
 import { getConfigInfor } from "@/utils/index";
-import md5 from 'js-md5'
+import md5 from "js-md5";
+import Cookies from "js-cookie";
+
 export default {
   name: "Login",
   data() {
@@ -139,7 +146,7 @@ export default {
         username: getObjArr("userName") || "",
         password: "",
         type: "TEACHER",
-        verificationCode:''
+        verificationCode: "",
       },
       //input 规则
       loginRules: {
@@ -150,16 +157,20 @@ export default {
           { required: true, trigger: "blur", validator: validatePassword },
         ],
         verificationCode: [
-          { required: true, trigger: "blur", validator: validateVerificationCode },
-        ]
+          {
+            required: true,
+            trigger: "blur",
+            validator: validateVerificationCode,
+          },
+        ],
       },
       loading: false,
       passwordType: "password",
       redirect: undefined,
       loginCheck: "login",
       configInfor: null,
-      verificationCodeimg: '', // 图形验证码
-      verificationCodeimgID: '', // 图形验证码ID
+      verificationCodeimg: "", // 图形验证码
+      verificationCodeimgID: "", // 图形验证码ID
       verificationCodeLoading: true, // 图形验证码的flag
     };
   },
@@ -195,16 +206,29 @@ export default {
             is_password_md5: "true",
             password: md5(this.loginForm.password).toUpperCase(),
             verification_code_image_text: this.loginForm.verificationCode,
-            verification_code_image_id: this.verificationCodeimgID
+            verification_code_image_id: this.verificationCodeimgID,
           };
           getLogin(MethodName, data)
             .then((res) => {
-              setToken(res);
-              this.$router.push({ path: "/EnterSys" });
+              let tokenData = res;
+              postapi({
+                url: "GCLSTRCServer/login",
+                data: {
+                  userCode: res.user_code,
+                  userType: res.user_type,
+                  sessionId: res.session_id,
+                },
+              })
+                .then((res) => {
+                  Cookies.set("JSESSIONID", res.data.JSESSIONID);
+                  setToken(tokenData);
+                  this.$router.push({ path: "/EnterSys" });
+                })
+                .catch((res) => {});
             })
             .catch(() => {
               this.loading = false;
-              this.getVerificationCodeimg()
+              this.getVerificationCodeimg();
             });
         } else {
           this.loading = false;
@@ -216,28 +240,31 @@ export default {
       this.configInfor = await getConfigInfor();
     },
     // 图形验证码
-    getVerificationCodeimg(){
-        if(!this.verificationCodeLoading) return
-        this.verificationCodeLoading = false
-        let MethodName = "login_control-GetVerificationCodeImage";
-        let data = {};
-        getStaticContent(MethodName, data).then((res) => {
-            if(res){
-                this.verificationCodeLoading = true
-                this.verificationCodeimgID = res.image_id
-                this.verificationCodeimg = 'data:image/jpeg;base64,'+res.image_content_base64
-            }else{
-                this.verificationCodeLoading = true;
-            }
-        }).catch(() => {
+    getVerificationCodeimg() {
+      if (!this.verificationCodeLoading) return;
+      this.verificationCodeLoading = false;
+      let MethodName = "login_control-GetVerificationCodeImage";
+      let data = {};
+      getStaticContent(MethodName, data)
+        .then((res) => {
+          if (res) {
+            this.verificationCodeLoading = true;
+            this.verificationCodeimgID = res.image_id;
+            this.verificationCodeimg =
+              "data:image/jpeg;base64," + res.image_content_base64;
+          } else {
             this.verificationCodeLoading = true;
+          }
+        })
+        .catch(() => {
+          this.verificationCodeLoading = true;
         });
     },
   },
   mounted() {
     removeSession("SysList");
     this._getConfig();
-    this.getVerificationCodeimg()
+    this.getVerificationCodeimg();
   },
 };
 </script>
@@ -483,25 +510,25 @@ $fc: rgb(24, 144, 255);
     width: 100%;
     vertical-align: bottom;
   }
-}   
-.verificationCode-box{
-    display: flex;
-    >div{
-        flex: 1;
-        max-width: 171px;
-        &.verificationCode-img{
-            min-width: 90px;
-            height: 34px;
-            margin-left: 5px;
-            flex: initial;
-            background: #C5C5C5;
-            border-radius: 4px;    
-            overflow: hidden;
-            >img{
-                height: 34px;
-                cursor: pointer;
-            }
-        }
+}
+.verificationCode-box {
+  display: flex;
+  > div {
+    flex: 1;
+    max-width: 171px;
+    &.verificationCode-img {
+      min-width: 90px;
+      height: 34px;
+      margin-left: 5px;
+      flex: initial;
+      background: #c5c5c5;
+      border-radius: 4px;
+      overflow: hidden;
+      > img {
+        height: 34px;
+        cursor: pointer;
+      }
     }
+  }
 }
 </style>

+ 111 - 15
src/views/teacher-dev/TextAnalysis.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="TextAnalysis">
+  <div class="TextAnalysis" v-loading="loading">
     <Header />
     <div class="main">
       <div class="title">文本分析</div>
@@ -13,23 +13,27 @@
         </el-input>
         <div class="text_btn">
           <span class="left">{{ txt.length }}/1000</span>
-          <span class="btn">分析</span>
+          <span class="btn" @click="submit">分析</span>
         </div>
       </div>
       <div class="list_main">
         <div class="title">
           <span style="margin-right: 16px">分析记录:</span>
-          <span>11/11</span>
+          <span>{{ data.total }}/20</span>
         </div>
-        <div class="list">
-          <div>
-            <div class="number">1</div>
-            <div class="txt">
-              意大利著名社会学家,1982年创办意大利政治、经济与社会研究所,任该研究所主席至今 孙彦红:疫情的持续蔓延以及各国的应对过程真切地表明,人类的确是一个命运共同体。2020年是两国建交50周年,而两国在抗击疫情中的团结互助为继续深化合作夯实了基础,在后疫情时代继续加强合作符合两国的国家利益。
+        <div class="list" v-if="data">
+          <div v-for="(item, i) in data.list" :key="i + 'one'">
+            <div class="number">{{ item.number }}</div>
+            <div class="txt" @click="goresult(item)">
+              {{ item.firstSentence }}
             </div>
-            <div class="time">2022-06-07 06:38</div>
-            <div class="cxjx">重新解析</div>
-            <img src="../../assets/teacherdev/delete-one.png" alt="" />
+            <div class="time">{{ item.createDate }}</div>
+            <div class="cxjx" @click="anewSubmit(item)">重新解析</div>
+            <img
+              @click="deleteOne(item.id, i)"
+              src="../../assets/teacherdev/delete-one.png"
+              alt=""
+            />
           </div>
         </div>
       </div>
@@ -41,7 +45,8 @@
 //这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
 //例如:import 《组件名称》from ‘《组件路径》';
 import Header from "@/components/Header";
-
+import { postapi } from "@/api/api";
+import { getToken } from "@/utils/auth";
 export default {
   //import引入的组件需要注入到对象中才能使用
   components: {
@@ -52,6 +57,11 @@ export default {
     //这里存放数据
     return {
       txt: "",
+      loading: false,
+      token: null,
+      page: 1,
+      pageSize: 20,
+      data: null,
     };
   },
   //计算属性 类似于data概念
@@ -59,9 +69,94 @@ export default {
   //监控data中数据变化
   watch: {},
   //方法集合
-  methods: {},
+  methods: {
+    // 分析结果统计
+    goresult(item) {
+      this.$router.push({
+        path: "/textanalysis/Result",
+        query: {
+          partitionKey: item.partitionKey,
+          subjectWords: item.subjectWords,
+          textCount: item.textCount,
+          wordCount: item.wordCount,
+        },
+      });
+    },
+    // 删除
+    deleteOne(id, index) {
+      this.loading = true;
+      postapi({
+        url: "GCLSTRCServer/tools/TS/analysis/record/del",
+        data: {
+          id,
+        },
+      })
+        .then((res) => {
+          this.data.list.splice(index, 1);
+          this.data.total = this.data.total - 1;
+          this.$message.success(res.msg);
+          this.loading = false;
+        })
+        .catch((res) => {
+          this.loading = false;
+        });
+    },
+    anewSubmit(item) {
+      this.txt = item.firstSentence;
+      this.submit();
+    },
+    // 分析
+    submit() {
+      if (this.txt == "") {
+        this.$message.warning("请先输入内容");
+        return;
+      }
+      this.loading = true;
+      postapi({
+        url: "GCLSTRCServer/tools/TS/analys",
+        data: {
+          tenantId: "",
+          text: this.txt,
+        },
+      })
+        .then((res) => {
+          this.txt = "";
+          this.getlist();
+          this.loading = false;
+        })
+        .catch((res) => {
+          this.loading = false;
+        });
+    },
+    getlist() {
+      this.loading = true;
+      postapi({
+        url: "GCLSTRCServer/tools/TS/analysis/record/list",
+        data: {
+          pageIndex: this.page,
+          pageSize: this.pageSize,
+        },
+      })
+        .then((res) => {
+          let num = this.page * this.pageSize - this.pageSize + 1;
+          res.data.result.list.forEach((item) => {
+            item.number = num;
+            num++;
+          });
+          this.data = res.data.result;
+          this.loading = false;
+        })
+        .catch((res) => {
+          this.loading = false;
+        });
+    },
+  },
   //生命周期 - 创建完成(可以访问当前this实例)
-  created() {},
+  created() {
+    let data = getToken();
+    this.token = JSON.parse(data);
+    this.getlist();
+  },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {},
   //生命周期-创建之前
@@ -88,7 +183,7 @@ export default {
     height: 100%;
     background: #f6f6f6;
     padding-top: 54px;
-
+    padding-bottom: 24px;
     > div {
       width: 1200px;
       margin: 0 auto;
@@ -165,6 +260,7 @@ export default {
             white-space: nowrap;
             text-overflow: ellipsis;
             margin-right: 24px;
+            cursor: pointer;
           }
           .time {
             width: 190px;

+ 2 - 1
vue.config.js

@@ -41,8 +41,9 @@ module.exports = {
       // change xxx-api/login => mock/login
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       // http://mk.wmjh.cn
+      // https://gcls.helxsoft.cn
       [process.env.VUE_APP_BASE_API]: {
-        target: `https://gcls.helxsoft.cn`,
+        target: `https://mk.wmjh.cn/`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''