liyongli 1 년 전
부모
커밋
4656f7aa05

+ 33 - 0
src/api/aleditor.js

@@ -13,6 +13,9 @@ export function getVocabularyInfo(params) {
     noload: params.noload,
     noJY: true,
     method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 /**
@@ -28,6 +31,9 @@ export function textImageMatch(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 /**
@@ -43,6 +49,9 @@ export function checkContent(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 
@@ -59,6 +68,9 @@ export function commit(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 export function generate_pc_get(params) {
@@ -69,6 +81,9 @@ export function generate_pc_get(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 
@@ -85,6 +100,9 @@ export function advertisement(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 
@@ -101,6 +119,9 @@ export function recommendation(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 
@@ -117,6 +138,9 @@ export function generate(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 export function imgTask(params) {
@@ -126,6 +150,9 @@ export function imgTask(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 export function getBase64(params) {
@@ -135,6 +162,9 @@ export function getBase64(params) {
     base: 'xzMao',
     noJY: true,
     method: 'POST',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 
@@ -149,5 +179,8 @@ export function getSID() {
       base: 'xzMao',
       noJY: true,
       method: 'POST',
+      headers: {
+        Authorization: localStorage.getItem('token'),
+      },
     });
   }

+ 19 - 0
src/api/index.js

@@ -106,6 +106,25 @@ export function getEconomize(ori) {
     data: ori.data,
     type: 'ajax',
     method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
+  });
+}
+/**
+ * 获取用户
+ * @param {Object} ori
+ * @returns
+ */
+export function getInfo(ori) {
+  return ajax({
+    api: '/user/info',
+    data: ori.data,
+    type: 'ajax',
+    method: 'GET',
+    headers: {
+      Authorization: localStorage.getItem('token'),
+    },
   });
 }
 

+ 1 - 1
src/view/allMedia/analysis.vue

@@ -222,7 +222,7 @@ const disDate = date => {
 
 <style scoped>
 .analysis {
-  height: 100%;
+  height: calc(100vh - 2em);
   /* min-width: 1305px; */
   position: relative;
 }

+ 1 - 1
src/view/allMedia/analysis_map.vue

@@ -304,7 +304,7 @@ const disDate = date => {
 
 <style scoped>
 .analysis {
-  height: 100%;
+  height: calc(100vh - 2em);
   /* min-width: 1305px; */
   position: relative;
 }

+ 10 - 8
src/view/allMedia/components/analysis_list.vue

@@ -51,8 +51,8 @@ const selectValue = ref(0);
 const router = useRouter();
 const listTable = ref([]);
 const props = defineProps({
-    apiKey: String
-})
+  apiKey: String,
+});
 const selectlist = [
   //   {
   //     label: '按发布时间降序',
@@ -80,12 +80,14 @@ const changeSelect = () => {
   console.log(selectValue.value);
 };
 const toDetail = item => {
-  router.push({
-    path: '/analysis_detail',
-    query: {
-      detail: JSON.stringify(item),
-    },
-  });
+  //   router.push({
+  //     path: '/analysis_detail',
+  //     query: {
+  //       detail: JSON.stringify(item),
+  //     },
+  //   });
+  const url = location.origin +'#/analysis_detail?detail=' + JSON.stringify(item);
+  window.open(url, '_blank');
 };
 const getlist = search => {
   if (search.page === 1) {

+ 14 - 3
src/view/allMedia/components/header.vue

@@ -1,14 +1,24 @@
 <template>
   <header class="header">
-    <el-popconfirm title="Are you sure to delete this?">
+    <el-popconfirm @confirm="confirm" title="确定退出登录?">
       <template #reference>
-        <el-button type="primary" link>退出</el-button>
+        <el-button type="primary" link>退出登录</el-button>
       </template>
     </el-popconfirm>
   </header>
 </template>
 
-<script setup></script>
+<script setup>
+import { useRouter } from 'vue-router';
+const router = useRouter();
+const confirm = () => {
+  localStorage.setItem("token", "");
+  localStorage.setItem("menu", "");
+  router.replace({
+    path: '/login',
+  });
+};
+</script>
 
 <style>
 .header {
@@ -16,5 +26,6 @@
   height: 2em;
   line-height: 2em;
   padding-right: 1em;
+  background-color: #393b48;
 }
 </style>

+ 137 - 135
src/view/allMedia/convergence.vue

@@ -1,144 +1,146 @@
 <template>
-  <div class="convergence">
+  <div>
     <header_local />
-    <el-form :inline="true" :model="condition" size="large">
-      <el-form-item prop="platform">
-        <el-button
-          v-for="(item, index) in btns"
-          :class="{
-            [item.platform]: true,
-            [item.platform + '_active']: condition.platform === index,
-          }"
-          :key="item.id"
-          @click="() => selectPlatform(item, index)"
-        >
-          <span
-            :class="{ icon: true, iconfont: true, [item.class]: true }"
-            style="margin-right: 5px"
+    <div class="convergence">
+      <el-form :inline="true" :model="condition" size="large">
+        <el-form-item prop="platform">
+          <el-button
+            v-for="(item, index) in btns"
+            :class="{
+              [item.platform]: true,
+              [item.platform + '_active']: condition.platform === index,
+            }"
+            :key="item.id"
+            @click="() => selectPlatform(item, index)"
           >
-          </span>
-          {{ item.text }}
-        </el-button>
-      </el-form-item>
+            <span
+              :class="{ icon: true, iconfont: true, [item.class]: true }"
+              style="margin-right: 5px"
+            >
+            </span>
+            {{ item.text }}
+          </el-button>
+        </el-form-item>
+        <br />
+        <el-form-item label="日期" prop="dt">
+          <el-date-picker
+            v-model="condition.dt"
+            type="daterange"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+          />
+        </el-form-item>
+        <el-form-item label="关键词" prop="keyword">
+          <el-input v-model="condition.keyword" placeholder="请输入关键词" />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit">查询</el-button>
+          <el-button type="primary" @click="onExport">导出</el-button>
+          <el-button type="primary" @click="binding">绑定账号</el-button>
+        </el-form-item>
+      </el-form>
       <br />
-      <el-form-item label="日期" prop="dt">
-        <el-date-picker
-          v-model="condition.dt"
-          type="daterange"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-        />
-      </el-form-item>
-      <el-form-item label="关键词" prop="keyword">
-        <el-input v-model="condition.keyword" placeholder="请输入关键词" />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" @click="onSubmit">查询</el-button>
-        <el-button type="primary" @click="onExport">导出</el-button>
-        <el-button type="primary" @click="binding">绑定账号</el-button>
-      </el-form-item>
-    </el-form>
-    <br />
-    <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
-      <el-tab-pane label="传播数据" name="T1">
-        <el-table
-          :data="disseminateData.list"
-          style="width: 100%"
-          :header-cell-style="{
-            backgroundColor: '#f4f5f7',
-            color: '#606266',
-          }"
-          ref="table1"
-          align="center"
-          empty-text="暂无数据"
-          @sort-change="e => sort_change(e, 'disseminate')"
-        >
-          <template
-            v-for="(item, i) in config.tableCol.agg[
-              btns[condition.platform].text
-            ]"
-            :key="i"
+      <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+        <el-tab-pane label="传播数据" name="T1">
+          <el-table
+            :data="disseminateData.list"
+            style="width: 100%"
+            :header-cell-style="{
+              backgroundColor: '#f4f5f7',
+              color: '#606266',
+            }"
+            ref="table1"
+            align="center"
+            empty-text="暂无数据"
+            @sort-change="e => sort_change(e, 'disseminate')"
           >
-            <el-table-column
-              align="center"
-              :width="item.width"
-              show-overflow-tooltip
-              :prop="item.key"
-              :label="item.label"
-              :sortable="item.sortable"
-              :sort-orders="
-                item.sortable ? ['ascending', 'descending', null] : []
-              "
+            <template
+              v-for="(item, i) in config.tableCol.agg[
+                btns[condition.platform].text
+              ]"
+              :key="i"
             >
-              <template #default="scope">
-                {{
-                  item.type == 'number'
-                    ? formatter(scope.row[item.key])
-                    : scope.row[item.key]
-                }}
-              </template>
-            </el-table-column>
-          </template>
-        </el-table>
-        <el-pagination
-          @current-change="e => changePageDisseminate(e)"
-          background
-          layout="prev, pager, next"
-          :page-count="
-            Math.ceil(disseminateData.total / condition.disseminate.size) || 1
-          "
-        />
-      </el-tab-pane>
-      <el-tab-pane label="稿件数据" name="T2">
-        <el-table
-          :data="manuscriptData.list"
-          style="width: 100%"
-          :header-cell-style="{
-            backgroundColor: '#f4f5f7',
-            color: '#606266',
-          }"
-          ref="table1"
-          align="center"
-          empty-text="暂无数据"
-          @sort-change="e => sort_change(e, 'manuscript')"
-        >
-          <template
-            v-for="(item, i) in config.tableCol.list[
-              btns[condition.platform].text
-            ]"
-            :key="i"
+              <el-table-column
+                align="center"
+                :width="item.width"
+                show-overflow-tooltip
+                :prop="item.key"
+                :label="item.label"
+                :sortable="item.sortable"
+                :sort-orders="
+                  item.sortable ? ['ascending', 'descending', null] : []
+                "
+              >
+                <template #default="scope">
+                  {{
+                    item.type == 'number'
+                      ? formatter(scope.row[item.key])
+                      : scope.row[item.key]
+                  }}
+                </template>
+              </el-table-column>
+            </template>
+          </el-table>
+          <el-pagination
+            @current-change="e => changePageDisseminate(e)"
+            background
+            layout="prev, pager, next"
+            :page-count="
+              Math.ceil(disseminateData.total / condition.disseminate.size) || 1
+            "
+          />
+        </el-tab-pane>
+        <el-tab-pane label="稿件数据" name="T2">
+          <el-table
+            :data="manuscriptData.list"
+            style="width: 100%"
+            :header-cell-style="{
+              backgroundColor: '#f4f5f7',
+              color: '#606266',
+            }"
+            ref="table1"
+            align="center"
+            empty-text="暂无数据"
+            @sort-change="e => sort_change(e, 'manuscript')"
           >
-            <el-table-column
-              align="center"
-              :width="item.width"
-              show-overflow-tooltip
-              :prop="item.key"
-              :label="item.label"
-              :sortable="item.sortable"
-              :sort-orders="
-                item.sortable ? ['ascending', 'descending', null] : []
-              "
+            <template
+              v-for="(item, i) in config.tableCol.list[
+                btns[condition.platform].text
+              ]"
+              :key="i"
             >
-              <template #default="scope">
-                {{
-                  item.type == 'number'
-                    ? formatter(scope.row[item.key])
-                    : scope.row[item.key]
-                }}
-              </template>
-            </el-table-column>
-          </template>
-        </el-table>
-        <el-pagination
-          @current-change="e => changePageManuscript(e)"
-          background
-          layout="prev, pager, next"
-          :page-count="
-            Math.ceil(manuscriptData.total / condition.manuscript.size) || 1
-          "
-        />
-      </el-tab-pane>
-    </el-tabs>
+              <el-table-column
+                align="center"
+                :width="item.width"
+                show-overflow-tooltip
+                :prop="item.key"
+                :label="item.label"
+                :sortable="item.sortable"
+                :sort-orders="
+                  item.sortable ? ['ascending', 'descending', null] : []
+                "
+              >
+                <template #default="scope">
+                  {{
+                    item.type == 'number'
+                      ? formatter(scope.row[item.key])
+                      : scope.row[item.key]
+                  }}
+                </template>
+              </el-table-column>
+            </template>
+          </el-table>
+          <el-pagination
+            @current-change="e => changePageManuscript(e)"
+            background
+            layout="prev, pager, next"
+            :page-count="
+              Math.ceil(manuscriptData.total / condition.manuscript.size) || 1
+            "
+          />
+        </el-tab-pane>
+      </el-tabs>
+    </div>
   </div>
 </template>
 
@@ -386,9 +388,9 @@ getUpdateTime({ data: {} }).then(res => {
 
 <style scoped>
 .convergence {
-  height: 100%;
+  height: calc(100vh - 2em);
   overflow: auto;
-  padding: 0 1em;
+  padding: 1em 1em 0 1em;
 }
 .convergence .platform {
   width: 8em;

+ 19 - 14
src/view/allMedia/login.vue

@@ -1,7 +1,11 @@
 <template>
   <div class="login">
     <div class="mo">
-      <el-image style="width: 400px; height: 158px;margin-bottom: 10em;" :src="logo" fit="fill">
+      <el-image
+        style="width: 400px; height: 158px; margin-bottom: 10em"
+        :src="logo"
+        fit="fill"
+      >
         <template #error>
           <div class="image-slot">
             <el-icon><Picture /></el-icon>
@@ -26,9 +30,7 @@
           />
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="onSubmit">
-            登  录
-          </el-button>
+          <el-button type="primary" @click="onSubmit"> 登 录 </el-button>
         </el-form-item>
       </el-form>
     </div>
@@ -39,7 +41,7 @@
 import { reactive, ref } from 'vue';
 import sha256 from 'sha256';
 import { useRouter, useRoute } from 'vue-router';
-import { login } from '../../api/index';
+import { login, getInfo } from '../../api/index';
 import logo from '../../assets/img/logo.png';
 const router = useRouter();
 const route = useRoute();
@@ -53,7 +55,7 @@ const rules = reactive({
   pwd: [{ required: true, message: '请输入密码', trigger: 'blur' }],
 });
 
-document.title = '陕西广电融媒体集团'
+document.title = '陕西广电融媒体集团';
 
 async function onSubmit() {
   await formEle.value.validate((valid, fields) => {
@@ -65,11 +67,15 @@ async function onSubmit() {
       },
     }).then(r => {
       localStorage.setItem('token', r.token);
-      router.replace({
-        path: '/main_home/proofread',
-        query: {
-          ...route.query,
-        },
+      getInfo({}).then(res => {
+        let rule = res && res.userRole ? res.userRole.menus || [] : [];
+        localStorage.setItem('menu', JSON.stringify(rule));
+        router.replace({
+          path: rule[0] ? rule[0].path : '',
+          query: {
+            ...route.query,
+          },
+        });
       });
     });
   });
@@ -112,8 +118,7 @@ async function onSubmit() {
   line-height: 55px;
 }
 
-.login .el-form-item__content .el-button{
-    width: 100%;
+.login .el-form-item__content .el-button {
+  width: 100%;
 }
 </style>
-

+ 3 - 47
src/view/allMedia/main.vue

@@ -28,59 +28,15 @@
 </template>
 
 <script setup>
+import header_local from './components/header.vue';
 import { ref } from 'vue';
 import { useRoute, useRouter } from 'vue-router';
 
 const Router = useRouter();
 const Route = useRoute();
 const selectMenu = ref(Route.fullPath);
-const menu = [
-  {
-    title: '智能校对',
-    icon: 'icon-baoliao',
-    path: '/main_home/proofread',
-  },
-  {
-    title: '数据汇聚',
-    icon: 'icon-RectangleCopy2',
-    path: '/main_home/analysis',
-  },
-  {
-    title: '地域热点',
-    icon: 'icon-address',
-    path: '/main_home/analysis_map',
-  },
-  {
-    title: '报料中心',
-    icon: 'icon-RectangleCopy3',
-    path: '/main_home/reporting',
-  },
-  {
-    title: '账号分析',
-    icon: 'icon-RectangleCopy1',
-    path: '/main_home/convergence',
-  },
-  {
-    title: 'H5商城',
-    icon: 'icon-RectangleCopy',
-    path: '/main_home/H5Mall',
-  },
-  {
-    title: 'AI绘图',
-    icon: 'icon-aihuihua',
-    path: '/main_home/easy_diffusion',
-  },
-  {
-    title: 'AI对话',
-    icon: 'icon-ai-chat',
-    path: '/main_home/qh',
-  },
-  {
-    title: 'AI+写作',
-    icon: 'icon-ai-chat',
-    path: '/main_home/AIeditor',
-  },
-];
+
+const menu = JSON.parse(localStorage.getItem('menu') || '[]');
 
 for (let i = 0; i < menu.length; i++) {
   const v = menu[i];

+ 1 - 1
src/view/allMedia/proofread.vue

@@ -364,7 +364,7 @@ function getEle(colorPosition) {
 
 <style>
 .edito_youmei .el-popper.is-light,
-.el-popper .el-popper__arrow::before {
+.edito_youmei .el-popper .el-popper__arrow::before {
   background-color: #2974ff !important;
   color: #fff;
   border-color: #2974ff !important;

+ 2 - 2
src/view/easyDiffusion/index.vue

@@ -630,7 +630,7 @@ const makeimg = item => {
   background-color: #202225;
   color: #eee;
   width: 100vw;
-  height: 100%;
+  height: calc(100vh - 2em);
 }
 
 .diffusion > h1 {
@@ -641,7 +641,7 @@ const makeimg = item => {
 .body {
   background-color: #36393f;
   width: 100%;
-  height: 100%;
+  height: calc(100vh - 2em - 60px);
   overflow-y: auto;
   padding-bottom: 2em;
 }

+ 441 - 429
src/view/onlineText.vue

@@ -1,457 +1,468 @@
 <template>
-  <div class="edito">
+  <div>
     <Head />
-    <div
-      class="onlineTextMain"
-      v-loading="loading"
-      element-loading-background="rgba(225,225,225,0.1)"
-    >
-      <div class="flex1">
-        <div class="btn-grounp">
-          文章内容
-          <el-button
-            type="primary"
-            style="
-              float: right;
-              margin-top: 0.3em;
-              margin-right: 0.5em;
-              padding: 0 1.8em;
-            "
-            @click="getServer"
-            :loading="loading"
-          >
-            校验
-          </el-button>
-          <el-button
-            class="clearError"
-            type="primary"
-            style="float: right; margin-top: 0.3em; margin-right: 0.5em"
-            @click="clearError"
-            :icon="Delete"
-          >
-            清空
-          </el-button>
-        </div>
-        <div class="Fle">
-          <Editor v-model:rawText="rawText" />
-        </div>
-      </div>
-      <div class="flex2">
-        <div class="btn-grounp">检索结果</div>
-        <div style="padding: 1em 1em 0 1em">
-          <div class="tabs">
-            <div
-              class="tab"
-              @click="() => changeTabAll()"
-              style="background-color: #2974ff; color: #fff"
-            >
-              <p>全部错误</p>
-              {{ search.tabs[0] ? search.tabs[0].num : 0 }}
-            </div>
-            <div
-              class="tab"
-              @click="() => changeTab(1)"
-              v-if="tabSelect[1]"
-              :style="{
-                backgroundColor: getTypeError(1, 'rgba'),
-                color: getTypeError(1, 'rgb'),
-              }"
-            >
-              <p>严重错误</p>
-              {{ search.tabs[1] ? search.tabs[1].num : 0 }}
-            </div>
-            <div class="tab" @click="() => changeTab(1)" v-else>
-              <p>严重错误</p>
-              {{ search.tabs[1] ? search.tabs[1].num : 0 }}
-            </div>
-            <div
-              class="tab"
-              @click="() => changeTab(3)"
-              v-if="tabSelect[3]"
-              :style="{
-                backgroundColor: getTypeError(3, 'rgba'),
-                color: getTypeError(3, 'rgb'),
-              }"
+
+    <div class="edito">
+      <div
+        class="onlineTextMain"
+        v-loading="loading"
+        element-loading-background="rgba(225,225,225,0.1)"
+      >
+        <div class="flex1">
+          <div class="btn-grounp">
+            文章内容
+            <el-button
+              type="primary"
+              style="
+                float: right;
+                margin-top: 0.3em;
+                margin-right: 0.5em;
+                padding: 0 1.8em;
+              "
+              @click="getServer"
+              :loading="loading"
             >
-              <p>一般错误</p>
-              {{ search.tabs[3] ? search.tabs[3].num : 0 }}
-            </div>
-            <div class="tab" @click="() => changeTab(3)" v-else>
-              <p>一般错误</p>
-              {{ search.tabs[3] ? search.tabs[3].num : 0 }}
-            </div>
-            <div
-              class="tab"
-              @click="() => changeTab(2)"
-              v-if="tabSelect[2]"
-              :style="{
-                backgroundColor: getTypeError(2, 'rgba'),
-                color: 'rgba(73, 92, 202, 1)',
-              }"
+              校验
+            </el-button>
+            <el-button
+              class="clearError"
+              type="primary"
+              style="float: right; margin-top: 0.3em; margin-right: 0.5em"
+              @click="clearError"
+              :icon="Delete"
             >
-              <p>疑错</p>
-              {{ search.tabs[2] ? search.tabs[2].num : 0 }}
-            </div>
-            <div class="tab" @click="() => changeTab(2)" v-else>
-              <p>疑错</p>
-              {{ search.tabs[2] ? search.tabs[2].num : 0 }}
-            </div>
-            <div
-              class="tab"
-              v-if="tabSelect[4]"
-              @click="() => changeTab(4)"
-              :style="{
-                backgroundColor: getTypeError(4, 'rgba'),
-                color: 'rgba(156, 133, 255, 1)',
-              }"
-            >
-              <p>
-                自定义错误
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  trigger="hover"
-                  content="若自定义的词语(除正词外)与系统通用逻辑检测出的错误重叠,则该词语会展示两条错误。例:“尊守”为系统检出的错误,若同时设置“尊守”为禁用词,则当文章中出现“尊守”时,会展示两条错误,一条为系统检出,一条为自定义禁用词错误。"
-                >
-                  <template #reference>
-                    <div
-                      style="
-                        display: inline-block;
-                        border: 1px solid rgb(156, 133, 255);
-                        vertical-align: middle;
-                        border-radius: 50%;
-                        width: 1.2em;
-                        height: 1.2em;
-                        line-height: 1.2em;
-                        text-align: center;
-                        color: #5e5e5e;
-                      "
-                    >
-                      ?
-                    </div>
-                  </template>
-                </el-popover>
-              </p>
-              {{ search.tabs[4] ? search.tabs[4].num : 0 }}
-            </div>
-            <div class="tab" v-else @click="() => changeTab(4)">
-              <p>
-                自定义错误
-                <el-popover
-                  placement="top-start"
-                  :width="200"
-                  trigger="hover"
-                  content="若自定义的词语(除正词外)与系统通用逻辑检测出的错误重叠,则该词语会展示两条错误。例:“尊守”为系统检出的错误,若同时设置“尊守”为禁用词,则当文章中出现“尊守”时,会展示两条错误,一条为系统检出,一条为自定义禁用词错误。"
-                >
-                  <template #reference>
-                    <div
-                      style="
-                        display: inline-block;
-                        border: 1px solid rgb(156, 133, 255);
-                        vertical-align: middle;
-                        border-radius: 50%;
-                        width: 1.2em;
-                        height: 1.2em;
-                        line-height: 1.2em;
-                        text-align: center;
-                        color: #5e5e5e;
-                      "
-                    >
-                      ?
-                    </div>
-                  </template>
-                </el-popover>
-              </p>
-              {{ search.tabs[4] ? search.tabs[4].num : 0 }}
-            </div>
+              清空
+            </el-button>
           </div>
-          <div>
-            <el-radio-group v-model="tabAct">
-              <el-radio :label="0">未处理: {{ search.list.length }}</el-radio>
-              <el-radio :label="1">已忽略: {{ search.list1.length }}</el-radio>
-              <el-radio :label="2">已替换: {{ search.list2.length }}</el-radio>
-            </el-radio-group>
+          <div class="Fle">
+            <Editor v-model:rawText="rawText" />
           </div>
         </div>
-        <div class="search">
-          <div v-if="tabAct === 0">
-            <div v-for="(item, index) in search.list" :key="index">
-              <div v-for="(v, i) in item.htmlWords" :key="'son' + i">
-                <div
-                  v-if="tabSelect[item.um_error_level]"
-                  class="searchEnd"
-                  :style="{
-                    borderColor: getTypeError(item.um_error_level, 'rgb'),
-                    backgroundColor:
-                      select === index
-                        ? getTypeError(item.um_error_level, 'rgba')
-                        : '',
-                  }"
-                  @click="() => changeselect(index, item.type.belongId)"
-                >
-                  <p style="display: flex">
-                    <span
-                      v-text="v.word"
-                      :style="{
-                        flex: 1,
-                        color: getTypeError(item.um_error_level, 'rgb'),
-                      }"
-                    ></span>
-                    <span
-                      style="flex: 1; text-align: right; color: #2dc76d"
-                      v-text="item.suggest[i]"
-                    ></span>
-                  </p>
-                  <p style="line-height: 2.5em">
-                    <span
-                      :style="{
-                        float: 'left',
-                        fontSize: '12px',
-                      }"
-                    >
-                      <span style="vertical-align: middle; margin-right: 5px">
-                        错误原因:{{ item.youmeiWordName }}
-                      </span>
-                      <el-popover
-                        v-if="item.explanation"
-                        placement="top-start"
-                        :width="200"
-                        trigger="hover"
-                        :content="item.explanation"
+        <div class="flex2">
+          <div class="btn-grounp">检索结果</div>
+          <div style="padding: 1em 1em 0 1em">
+            <div class="tabs">
+              <div
+                class="tab"
+                @click="() => changeTabAll()"
+                style="background-color: #2974ff; color: #fff"
+              >
+                <p>全部错误</p>
+                {{ search.tabs[0] ? search.tabs[0].num : 0 }}
+              </div>
+              <div
+                class="tab"
+                @click="() => changeTab(1)"
+                v-if="tabSelect[1]"
+                :style="{
+                  backgroundColor: getTypeError(1, 'rgba'),
+                  color: getTypeError(1, 'rgb'),
+                }"
+              >
+                <p>严重错误</p>
+                {{ search.tabs[1] ? search.tabs[1].num : 0 }}
+              </div>
+              <div class="tab" @click="() => changeTab(1)" v-else>
+                <p>严重错误</p>
+                {{ search.tabs[1] ? search.tabs[1].num : 0 }}
+              </div>
+              <div
+                class="tab"
+                @click="() => changeTab(3)"
+                v-if="tabSelect[3]"
+                :style="{
+                  backgroundColor: getTypeError(3, 'rgba'),
+                  color: getTypeError(3, 'rgb'),
+                }"
+              >
+                <p>一般错误</p>
+                {{ search.tabs[3] ? search.tabs[3].num : 0 }}
+              </div>
+              <div class="tab" @click="() => changeTab(3)" v-else>
+                <p>一般错误</p>
+                {{ search.tabs[3] ? search.tabs[3].num : 0 }}
+              </div>
+              <div
+                class="tab"
+                @click="() => changeTab(2)"
+                v-if="tabSelect[2]"
+                :style="{
+                  backgroundColor: getTypeError(2, 'rgba'),
+                  color: 'rgba(73, 92, 202, 1)',
+                }"
+              >
+                <p>疑错</p>
+                {{ search.tabs[2] ? search.tabs[2].num : 0 }}
+              </div>
+              <div class="tab" @click="() => changeTab(2)" v-else>
+                <p>疑错</p>
+                {{ search.tabs[2] ? search.tabs[2].num : 0 }}
+              </div>
+              <div
+                class="tab"
+                v-if="tabSelect[4]"
+                @click="() => changeTab(4)"
+                :style="{
+                  backgroundColor: getTypeError(4, 'rgba'),
+                  color: 'rgba(156, 133, 255, 1)',
+                }"
+              >
+                <p>
+                  自定义错误
+                  <el-popover
+                    placement="top-start"
+                    :width="200"
+                    trigger="hover"
+                    content="若自定义的词语(除正词外)与系统通用逻辑检测出的错误重叠,则该词语会展示两条错误。例:“尊守”为系统检出的错误,若同时设置“尊守”为禁用词,则当文章中出现“尊守”时,会展示两条错误,一条为系统检出,一条为自定义禁用词错误。"
+                  >
+                    <template #reference>
+                      <div
+                        style="
+                          display: inline-block;
+                          border: 1px solid rgb(156, 133, 255);
+                          vertical-align: middle;
+                          border-radius: 50%;
+                          width: 1.2em;
+                          height: 1.2em;
+                          line-height: 1.2em;
+                          text-align: center;
+                          color: #5e5e5e;
+                        "
                       >
-                        <template #reference>
-                          <div
-                            style="
-                              display: inline-block;
-                              border: 1px solid #5e5e5e;
-                              vertical-align: middle;
-                              border-radius: 50%;
-                              width: 1.2em;
-                              height: 1.2em;
-                              line-height: 1.2em;
-                              text-align: center;
-                              color: #5e5e5e;
-                            "
-                          >
-                            ?
-                          </div>
-                        </template>
-                      </el-popover>
-                    </span>
-                    <span style="float: right; text-align: right">
-                      <span
-                        class="btn"
-                        v-if="item.suggest[i]"
-                        @click.stop="
-                          () =>
-                            clearEle(
-                              item.colorPosition,
-                              item.suggest[i],
-                              index,
-                              2
-                            )
+                        ?
+                      </div>
+                    </template>
+                  </el-popover>
+                </p>
+                {{ search.tabs[4] ? search.tabs[4].num : 0 }}
+              </div>
+              <div class="tab" v-else @click="() => changeTab(4)">
+                <p>
+                  自定义错误
+                  <el-popover
+                    placement="top-start"
+                    :width="200"
+                    trigger="hover"
+                    content="若自定义的词语(除正词外)与系统通用逻辑检测出的错误重叠,则该词语会展示两条错误。例:“尊守”为系统检出的错误,若同时设置“尊守”为禁用词,则当文章中出现“尊守”时,会展示两条错误,一条为系统检出,一条为自定义禁用词错误。"
+                  >
+                    <template #reference>
+                      <div
+                        style="
+                          display: inline-block;
+                          border: 1px solid rgb(156, 133, 255);
+                          vertical-align: middle;
+                          border-radius: 50%;
+                          width: 1.2em;
+                          height: 1.2em;
+                          line-height: 1.2em;
+                          text-align: center;
+                          color: #5e5e5e;
                         "
-                        >替换</span
                       >
+                        ?
+                      </div>
+                    </template>
+                  </el-popover>
+                </p>
+                {{ search.tabs[4] ? search.tabs[4].num : 0 }}
+              </div>
+            </div>
+            <div>
+              <el-radio-group v-model="tabAct">
+                <el-radio :label="0"
+                  >未处理: {{ search.list.length }}</el-radio
+                >
+                <el-radio :label="1"
+                  >已忽略: {{ search.list1.length }}</el-radio
+                >
+                <el-radio :label="2"
+                  >已替换: {{ search.list2.length }}</el-radio
+                >
+              </el-radio-group>
+            </div>
+          </div>
+          <div class="search">
+            <div v-if="tabAct === 0">
+              <div v-for="(item, index) in search.list" :key="index">
+                <div v-for="(v, i) in item.htmlWords" :key="'son' + i">
+                  <div
+                    v-if="tabSelect[item.um_error_level]"
+                    class="searchEnd"
+                    :style="{
+                      borderColor: getTypeError(item.um_error_level, 'rgb'),
+                      backgroundColor:
+                        select === index
+                          ? getTypeError(item.um_error_level, 'rgba')
+                          : '',
+                    }"
+                    @click="() => changeselect(index, item.type.belongId)"
+                  >
+                    <p style="display: flex">
                       <span
-                        class="btn"
-                        v-if="isDel(item.type.belongId)"
-                        @click.stop="
-                          () =>
-                            removeEle(
-                              item.colorPosition,
-                              item.suggest[i],
-                              index,
-                              2
-                            )
-                        "
-                        >删除
-                      </span>
+                        v-text="v.word"
+                        :style="{
+                          flex: 1,
+                          color: getTypeError(item.um_error_level, 'rgb'),
+                        }"
+                      ></span>
                       <span
-                        class="btn"
-                        @click.stop="
-                          () =>
-                            clearEle(
-                              item.colorPosition,
-                              item.wordHtml,
-                              index,
-                              1
-                            )
-                        "
-                        >忽略</span
+                        style="flex: 1; text-align: right; color: #2dc76d"
+                        v-text="item.suggest[i]"
+                      ></span>
+                    </p>
+                    <p style="line-height: 2.5em">
+                      <span
+                        :style="{
+                          float: 'left',
+                          fontSize: '12px',
+                        }"
                       >
-                    </span>
-                    <span style="clear: both; display: block"></span>
-                  </p>
+                        <span style="vertical-align: middle; margin-right: 5px">
+                          错误原因:{{ item.youmeiWordName }}
+                        </span>
+                        <el-popover
+                          v-if="item.explanation"
+                          placement="top-start"
+                          :width="200"
+                          trigger="hover"
+                          :content="item.explanation"
+                        >
+                          <template #reference>
+                            <div
+                              style="
+                                display: inline-block;
+                                border: 1px solid #5e5e5e;
+                                vertical-align: middle;
+                                border-radius: 50%;
+                                width: 1.2em;
+                                height: 1.2em;
+                                line-height: 1.2em;
+                                text-align: center;
+                                color: #5e5e5e;
+                              "
+                            >
+                              ?
+                            </div>
+                          </template>
+                        </el-popover>
+                      </span>
+                      <span style="float: right; text-align: right">
+                        <span
+                          class="btn"
+                          v-if="item.suggest[i]"
+                          @click.stop="
+                            () =>
+                              clearEle(
+                                item.colorPosition,
+                                item.suggest[i],
+                                index,
+                                2
+                              )
+                          "
+                          >替换</span
+                        >
+                        <span
+                          class="btn"
+                          v-if="isDel(item.type.belongId)"
+                          @click.stop="
+                            () =>
+                              removeEle(
+                                item.colorPosition,
+                                item.suggest[i],
+                                index,
+                                2
+                              )
+                          "
+                          >删除
+                        </span>
+                        <span
+                          class="btn"
+                          @click.stop="
+                            () =>
+                              clearEle(
+                                item.colorPosition,
+                                item.wordHtml,
+                                index,
+                                1
+                              )
+                          "
+                          >忽略</span
+                        >
+                      </span>
+                      <span style="clear: both; display: block"></span>
+                    </p>
+                  </div>
                 </div>
               </div>
+              <el-empty
+                description="所选类型下暂无信息"
+                v-if="!search.list || !search.list.length"
+              />
             </div>
-            <el-empty
-              description="所选类型下暂无信息"
-              v-if="!search.list || !search.list.length"
-            />
-          </div>
-          <div v-if="tabAct === 1">
-            <div v-for="(item, index) in search.list1 || []" :key="index">
-              <div v-for="(v, i) in item.htmlWords" :key="'son' + i">
-                <div
-                  class="searchEnd"
-                  v-if="tabSelect[item.um_error_level]"
-                  :style="{
-                    borderColor: getTypeError(item.um_error_level, 'rgb'),
-                    backgroundColor:
-                      select === index
-                        ? getTypeError(item.um_error_level, 'rgba')
-                        : '',
-                  }"
-                  @click="() => changeselect(index, item.type.belongId)"
-                >
-                  <p style="display: flex">
-                    <span
-                      v-text="v.word"
-                      :style="{
-                        flex: 1,
-                        color: getTypeError(item.um_error_level, 'rgb'),
-                      }"
-                    ></span>
-                    <span
-                      style="flex: 1; text-align: right; color: #2dc76d"
-                      v-text="item.suggest[i]"
-                    ></span>
-                  </p>
-                  <p style="line-height: 2.5em">
-                    <span
-                      :style="{
-                        float: 'left',
-                        fontSize: '12px',
-                      }"
-                    >
-                      <span style="vertical-align: middle; margin-right: 5px">
-                        错误原因:{{ item.youmeiWordName }}
-                      </span>
-                      <el-popover
-                        v-if="item.explanation"
-                        placement="top-start"
-                        :width="200"
-                        trigger="hover"
-                        :content="item.explanation"
-                      >
-                        <template #reference>
-                          <div
-                            style="
-                              display: inline-block;
-                              border: 1px solid #5e5e5e;
-                              vertical-align: middle;
-                              border-radius: 50%;
-                              width: 1.2em;
-                              height: 1.2em;
-                              line-height: 1.2em;
-                              text-align: center;
-                              color: #5e5e5e;
-                            "
-                          >
-                            ?
-                          </div>
-                        </template>
-                      </el-popover>
-                    </span>
-                    <span style="float: right; text-align: right">
-                      <span class="btn" @click.stop="() => back(item, index, 1)"
-                        >撤销</span
+            <div v-if="tabAct === 1">
+              <div v-for="(item, index) in search.list1 || []" :key="index">
+                <div v-for="(v, i) in item.htmlWords" :key="'son' + i">
+                  <div
+                    class="searchEnd"
+                    v-if="tabSelect[item.um_error_level]"
+                    :style="{
+                      borderColor: getTypeError(item.um_error_level, 'rgb'),
+                      backgroundColor:
+                        select === index
+                          ? getTypeError(item.um_error_level, 'rgba')
+                          : '',
+                    }"
+                    @click="() => changeselect(index, item.type.belongId)"
+                  >
+                    <p style="display: flex">
+                      <span
+                        v-text="v.word"
+                        :style="{
+                          flex: 1,
+                          color: getTypeError(item.um_error_level, 'rgb'),
+                        }"
+                      ></span>
+                      <span
+                        style="flex: 1; text-align: right; color: #2dc76d"
+                        v-text="item.suggest[i]"
+                      ></span>
+                    </p>
+                    <p style="line-height: 2.5em">
+                      <span
+                        :style="{
+                          float: 'left',
+                          fontSize: '12px',
+                        }"
                       >
-                    </span>
-                    <span style="clear: both; display: block"></span>
-                  </p>
+                        <span style="vertical-align: middle; margin-right: 5px">
+                          错误原因:{{ item.youmeiWordName }}
+                        </span>
+                        <el-popover
+                          v-if="item.explanation"
+                          placement="top-start"
+                          :width="200"
+                          trigger="hover"
+                          :content="item.explanation"
+                        >
+                          <template #reference>
+                            <div
+                              style="
+                                display: inline-block;
+                                border: 1px solid #5e5e5e;
+                                vertical-align: middle;
+                                border-radius: 50%;
+                                width: 1.2em;
+                                height: 1.2em;
+                                line-height: 1.2em;
+                                text-align: center;
+                                color: #5e5e5e;
+                              "
+                            >
+                              ?
+                            </div>
+                          </template>
+                        </el-popover>
+                      </span>
+                      <span style="float: right; text-align: right">
+                        <span
+                          class="btn"
+                          @click.stop="() => back(item, index, 1)"
+                          >撤销</span
+                        >
+                      </span>
+                      <span style="clear: both; display: block"></span>
+                    </p>
+                  </div>
                 </div>
               </div>
+              <el-empty
+                description="所选类型下暂无信息"
+                v-if="!search.list1 || !search.list1.length"
+              />
             </div>
-            <el-empty
-              description="所选类型下暂无信息"
-              v-if="!search.list1 || !search.list1.length"
-            />
-          </div>
-          <div v-if="tabAct === 2">
-            <div v-for="(item, index) in search.list2 || []" :key="index">
-              <div v-for="(v, i) in item.htmlWords" :key="'son' + i">
-                <div
-                  class="searchEnd"
-                  v-if="tabSelect[item.um_error_level]"
-                  :style="{
-                    borderColor: getTypeError(item.um_error_level, 'rgb'),
-                    backgroundColor:
-                      select === index
-                        ? getTypeError(item.um_error_level, 'rgba')
-                        : '',
-                  }"
-                  @click="() => changeselect(index, item.type.belongId)"
-                >
-                  <p style="display: flex">
-                    <span
-                      v-text="v.word"
-                      :style="{
-                        flex: 1,
-                        color: getTypeError(item.um_error_level, 'rgb'),
-                      }"
-                    ></span>
-                    <span
-                      style="flex: 1; text-align: right; color: #2dc76d"
-                      v-text="item.suggest[i]"
-                    ></span>
-                  </p>
-                  <p style="line-height: 2.5em">
-                    <span
-                      :style="{
-                        float: 'left',
-                        fontSize: '12px',
-                      }"
-                    >
-                      <span style="vertical-align: middle; margin-right: 5px">
-                        错误原因:{{ item.youmeiWordName }}
-                      </span>
-                      <el-popover
-                        v-if="item.explanation"
-                        placement="top-start"
-                        :width="200"
-                        trigger="hover"
-                        :content="item.explanation"
-                      >
-                        <template #reference>
-                          <div
-                            style="
-                              display: inline-block;
-                              border: 1px solid #5e5e5e;
-                              vertical-align: middle;
-                              border-radius: 50%;
-                              width: 1.2em;
-                              height: 1.2em;
-                              line-height: 1.2em;
-                              text-align: center;
-                              color: #5e5e5e;
-                            "
-                          >
-                            ?
-                          </div>
-                        </template>
-                      </el-popover>
-                    </span>
-                    <span style="float: right; text-align: right">
+            <div v-if="tabAct === 2">
+              <div v-for="(item, index) in search.list2 || []" :key="index">
+                <div v-for="(v, i) in item.htmlWords" :key="'son' + i">
+                  <div
+                    class="searchEnd"
+                    v-if="tabSelect[item.um_error_level]"
+                    :style="{
+                      borderColor: getTypeError(item.um_error_level, 'rgb'),
+                      backgroundColor:
+                        select === index
+                          ? getTypeError(item.um_error_level, 'rgba')
+                          : '',
+                    }"
+                    @click="() => changeselect(index, item.type.belongId)"
+                  >
+                    <p style="display: flex">
                       <span
-                        class="btn"
-                        @click.stop="() => back(item, index, 2)"
+                        v-text="v.word"
+                        :style="{
+                          flex: 1,
+                          color: getTypeError(item.um_error_level, 'rgb'),
+                        }"
+                      ></span>
+                      <span
+                        style="flex: 1; text-align: right; color: #2dc76d"
+                        v-text="item.suggest[i]"
+                      ></span>
+                    </p>
+                    <p style="line-height: 2.5em">
+                      <span
+                        :style="{
+                          float: 'left',
+                          fontSize: '12px',
+                        }"
                       >
-                        撤销
+                        <span style="vertical-align: middle; margin-right: 5px">
+                          错误原因:{{ item.youmeiWordName }}
+                        </span>
+                        <el-popover
+                          v-if="item.explanation"
+                          placement="top-start"
+                          :width="200"
+                          trigger="hover"
+                          :content="item.explanation"
+                        >
+                          <template #reference>
+                            <div
+                              style="
+                                display: inline-block;
+                                border: 1px solid #5e5e5e;
+                                vertical-align: middle;
+                                border-radius: 50%;
+                                width: 1.2em;
+                                height: 1.2em;
+                                line-height: 1.2em;
+                                text-align: center;
+                                color: #5e5e5e;
+                              "
+                            >
+                              ?
+                            </div>
+                          </template>
+                        </el-popover>
+                      </span>
+                      <span style="float: right; text-align: right">
+                        <span
+                          class="btn"
+                          @click.stop="() => back(item, index, 2)"
+                        >
+                          撤销
+                        </span>
                       </span>
-                    </span>
 
-                    <span style="clear: both; display: block"></span>
-                  </p>
+                      <span style="clear: both; display: block"></span>
+                    </p>
+                  </div>
                 </div>
               </div>
+              <el-empty
+                description="所选类型下暂无信息"
+                v-if="!search.list2 || !search.list2.length"
+              />
             </div>
-            <el-empty
-              description="所选类型下暂无信息"
-              v-if="!search.list2 || !search.list2.length"
-            />
           </div>
         </div>
       </div>
@@ -598,7 +609,8 @@ function getServer() {
           const ele = document.querySelector(
             "[data-umpos='" + item.colorPosition + "']"
           );
-          ele.style.borderBottom = '3px solid rgb(' + errType[item.um_error_level] + ')';
+          ele.style.borderBottom =
+            '3px solid rgb(' + errType[item.um_error_level] + ')';
           if (!tabs[item.um_error_level])
             tabs[item.um_error_level] = {
               num: 0,
@@ -615,7 +627,7 @@ function getServer() {
 }
 
 function geturl() {
-  const searchText = location.hash.split("?")[1] || "";
+  const searchText = location.hash.split('?')[1] || '';
   let search = searchText.replace('?', '').split('&');
   let obj = {};
   for (let i = 0; i < search.length; i++) {