Ver código fonte

批量审核完成

yuanmingze 5 meses atrás
pai
commit
4cd6e41500

+ 2 - 2
.env.development

@@ -1,8 +1,8 @@
 NODE_ENV = 'development'
 VUE_APP_TYPE= 'dev'
-# VUE_APP_URL = 'http://10.144.62.235:9999'
+VUE_APP_URL = 'http://10.144.62.235:9999'
 # VUE_APP_URL = 'https://mic.freerr.cn'
-VUE_APP_URL = 'https://mic.cnbg.com.cn'
+# VUE_APP_URL = 'https://mic.cnbg.com.cn'
 # VUE_APP_URL = 'https://cnbg.yaoyi.net'
 # VUE_APP_URL = 'http://192.168.110.25:9999'
 # VUE_APP_URL = 'https://mic-t.cnbg.com.cn'

BIN
dist.zip


+ 420 - 129
src/views/serviceManagement/quickReview/index.vue

@@ -1,11 +1,11 @@
 <template>
-  <div>
-    <basic-container class="cardTitle">
+  <div class="quicl-review" @scroll="handleScroll">
+    <div class="card-container">
       <p>
         <el-button type="primary" @click="backPage" style="width: 80px">返回</el-button>
       </p>
-    </basic-container>
-    <basic-container>
+    </div>
+    <div class="card-container">
       <div class="search-content">
         <el-form :model="searchFrom" label-width="140px">
           <el-row>
@@ -85,115 +85,149 @@
           </el-row>
         </el-form>
       </div>
-    </basic-container>
-    <basic-container>
-      <div class="card-list">
-        <div v-infinite-scroll="getList" style="overflow: auto">
-          <div class="cards" v-masonry :gutter="20">
-            <div v-for="curr in list" class="card" v-masonry-tile :key="curr.info.taskId">
-              <div class="task-info">
-                <div class="task-type-info">服务类型: {{ getName(curr?.info.taskTypeId) }}</div>
-                <div class="info">
-                  <p>任务ID:{{ curr?.info.taskId }}</p>
-                  <p>任务编号:{{ curr?.info.taskNumber }}</p>
-                </div>
-                <div class="info">
-                  <p>服务积分:{{ curr?.info.taskScore }}</p>
-                  <p>代表姓名:{{ curr?.info.salesName }}</p>
-                </div>
-                <div class="info">
-                  <p>产品名称:{{ curr?.info.skuName }}</p>
-                  <p>生产企业:{{ curr?.info.mahName }}</p>
-                </div>
-                <div class="info">
-                  <p>执行包名称:{{ curr?.info.pkgName }}</p>
-                  <p>起止时间:{{ curr?.info.pkgStartTime }} ~ {{ curr?.info.pkgEndTime }}</p>
-                </div>
+    </div>
+    <div class="card-container">
+      <div class="card-all-review">
+        <div class="btns">
+          <el-button type="primary" @click="allClick">批量审核</el-button>
+        </div>
+        <div class="check-info">
+          <el-checkbox v-model="allCheck" @change="allClick">全选</el-checkbox>
+          <p>当前已选择{{ checkAllLength }}项,总积分:{{ checkAllTaskScore }}</p>
+        </div>
+      </div>
+    </div>
+
+    <div class="card-list card-container" v-loading="getPageLoading">
+      <template v-if="list.length === 0">
+        <div class="no-data">
+          <el-empty description="暂无数据"></el-empty>
+        </div>
+      </template>
+      <div class="cards" v-masonry :cols="2" :gutter="20" style="width: 100%">
+        <template v-for="curr in list">
+          <div class="card" v-masonry-tile :key="curr.info.taskId" v-if="curr.reviewInfo.show">
+            <div class="task-info">
+              <div class="task-type-info">
+                <el-checkbox
+                  v-model="curr.reviewInfo.checked"
+                  @change="
+                    (val) => {
+                      itemChecked(val, curr);
+                    }
+                  "
+                ></el-checkbox>
+                服务类型: {{ getName(curr?.info.taskTypeId) }}
               </div>
-              <div class="detail">服务详情</div>
-              <template v-if="curr?.info?.configs">
-                <div v-for="(item, index) in curr?.info?.configs" :key="index" class="field-box">
-                  <template v-if="item.taskFiledType == 'domain' || item.taskFiledType == 'select'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value" v-show="!(item.taskTypeId == '19' && item.taskFiledKey == 'temp3')">
-                      {{ getDesc(curr.info, item) }}
-                    </div>
-                  </template>
-                  <!-- 城市选择 -->
-                  <template v-if="item.taskFiledType === 'area'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value">
-                      {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
-                    </div>
-                  </template>
-                  <!-- 文字输入 -->
-                  <template v-if="item.taskFiledType == 'text' || item.taskFiledType == 'inputautoselect' || item.taskFiledType == 'map' || item.taskFiledType == 'mapwithimg'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value">
-                      {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
-                    </div>
-                  </template>
-                  <!-- 时间 -->
-                  <template v-if="item.taskFiledType == 'datetime'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value">
-                      {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
-                    </div>
-                  </template>
-                  <!-- 日期范围 -->
-                  <template v-if="item.taskFiledType == 'datatimerange'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value">
-                      {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
-                    </div>
-                  </template>
-                  <!-- 图片上传 -->
-                  <div v-if="item.taskFiledType == 'img'" class="divline" style="width: 100%; height: 15px; background-color: #e9e9e9; margin-bottom: 5px"></div>
-                  <template v-if="item.taskFiledType == 'img'">
-                    <div class="upload-field">
-                      <div class="field-text" :class="{ required: item.isMustfill == '1' }">{{ item.taskFiledValue }}:</div>
-                      <!-- 上传组件 -->
-                      <div class="img-box" v-if="item.imgList">
-                        <div v-for="(iItem, index) in item.imgList" :key="index" class="img-box-content">
-                          <span class="type">{{ iItem.type }}</span>
-                          <el-image class="img-item" lazy :src="iItem.url" :preview-src-list="getPreviewList(item.previewList, index)" />
-                        </div>
+              <div class="info">
+                <p>任务ID:{{ curr?.info.taskId }}</p>
+                <p>任务编号:{{ curr?.info.taskNumber }}</p>
+              </div>
+              <div class="info">
+                <p>服务积分:{{ curr?.info.taskScore }}</p>
+                <p>代表姓名:{{ curr?.info.salesName }}</p>
+              </div>
+              <div class="info">
+                <p>产品名称:{{ curr?.info.skuName }}</p>
+                <p>生产企业:{{ curr?.info.mahName }}</p>
+              </div>
+              <div class="info">
+                <p>执行包名称:{{ curr?.info.pkgName }}</p>
+                <p>起止时间:{{ curr?.info.pkgStartTime }} ~ {{ curr?.info.pkgEndTime }}</p>
+              </div>
+            </div>
+            <div class="detail">服务详情</div>
+            <template v-if="curr?.info?.configs">
+              <div v-for="(item, index) in curr?.info?.configs" :key="index" class="field-box">
+                <template v-if="item.taskFiledType == 'domain' || item.taskFiledType == 'select'">
+                  <div class="title-value">{{ item.taskFiledValue }}:</div>
+                  <div class="desc-value" v-show="!(item.taskTypeId == '19' && item.taskFiledKey == 'temp3')">
+                    {{ getDesc(curr.info, item) }}
+                  </div>
+                </template>
+
+                <!-- * 文本类型 -->
+                <template v-if="typeArr.includes(item.taskFiledType)">
+                  <div class="title-value">{{ item.taskFiledValue }}:</div>
+                  <div class="desc-value">
+                    {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
+                  </div>
+                </template>
+
+                <!-- 图片上传 -->
+                <div v-if="item.taskFiledType == 'img'" class="divline" style="width: 100%; height: 15px; background-color: #e9e9e9; margin-bottom: 5px"></div>
+                <template v-if="item.taskFiledType == 'img'">
+                  <div class="upload-field">
+                    <div class="field-text" :class="{ required: item.isMustfill == '1' }">{{ item.taskFiledValue }}:</div>
+                    <!-- 上传组件 -->
+                    <div class="img-box" v-if="item.imgList">
+                      <div v-for="(iItem, index) in item.imgList" :key="index" class="img-box-content">
+                        <span class="type">{{ iItem.type }}</span>
+                        <el-image class="img-item" lazy :src="iItem.url" :preview-src-list="getPreviewList(item.previewList, index)" />
                       </div>
                     </div>
-                  </template>
-                  <!-- 金额 -->
-                  <template v-if="item.taskFiledType == 'money'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value">
-                      {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
-                    </div>
-                  </template>
-                  <!-- 数字 -->
-                  <template v-if="item.taskFiledType == 'number'">
-                    <div class="title-value">{{ item.taskFiledValue }}:</div>
-                    <div class="desc-value">
-                      {{ curr.info.taskContent[item.taskFiledKey] || '--' }}
-                    </div>
-                  </template>
-                  <!-- 长文本 -->
-                  <template v-if="item.taskFiledType == 'longtext'">
-                    <div class="longtext-box">
-                      <div class="field-text" :class="{ required: item.isMustfill == '1' }">{{ item.taskFiledValue }}:</div>
-                      <textarea class="textarea-box" :disabled="true" :value="curr.info.taskContent[item.taskFiledKey] || '--'" :maxlength="item.taskFiledMaxsize" />
-                    </div>
-                  </template>
-                </div>
-              </template>
-
-              <div class="btns">
-                <el-button class="btn" type="danger" @click="passClick(curr, true)">不通过</el-button>
-                <el-button class="btn" type="primary" @click="passClick(curr, true)">通过</el-button>
+                  </div>
+                </template>
+                <!-- 长文本 -->
+                <template v-if="item.taskFiledType == 'longtext'">
+                  <div class="longtext-box">
+                    <div class="field-text" :class="{ required: item.isMustfill == '1' }">{{ item.taskFiledValue }}:</div>
+                    <textarea class="textarea-box" :disabled="true" :value="curr.info.taskContent[item.taskFiledKey] || '--'" :maxlength="item.taskFiledMaxsize" />
+                  </div>
+                </template>
               </div>
+            </template>
+            <div class="divline" style="width: 100%; height: 15px; background-color: #e9e9e9; margin-bottom: 5px"></div>
+            <div class="longtext-box review-textarea">
+              <div class="field-text">意见说明</div>
+              <el-input type="textarea" class="textarea-box" resize="none" v-model="curr.reviewInfo.checkMessage" />
+            </div>
+
+            <div class="btns">
+              <el-button class="btn" type="danger" @click="passClick(curr, false)">不通过</el-button>
+              <el-button class="btn" type="primary" @click="passClick(curr, true)">通过</el-button>
             </div>
           </div>
-        </div>
+        </template>
+      </div>
+    </div>
+
+    <!-- 审核弹窗 -->
+    <el-dialog title="审核" :close-on-click-modal="false" :visible.sync="reviewDialog" top="12vh" width="50%" :before-close="handleClose" center>
+      <div class="reviewContent" v-loading="loading">
+        <div class="check-tips">审核令牌有效期为3分钟,请在【{{ expireTime }}】前完成审核操作,如果失效,请重新打开弹窗。</div>
+
+        <div class="teskDetailsty">审批意见</div>
+        <el-form :model="taskForm" :rules="rules" ref="taskForm" label-width="100px">
+          <el-form-item label="审批意见:" prop="checkResult" class="formitem-box">
+            <el-radio-group v-model="taskForm.checkResult">
+              <el-radio :label="true">通过</el-radio>
+              <el-radio :label="false">拒绝</el-radio>
+            </el-radio-group>
+          </el-form-item>
+
+          <el-form-item
+            label="意见说明:"
+            prop="checkMessage"
+            class="formitem-box"
+            :rules="[
+              {
+                required: !taskForm.checkResult,
+                message: '请输入审批说明',
+                trigger: 'blur'
+              }
+            ]"
+          >
+            <el-input type="textarea" v-model="taskForm.checkMessage"></el-input>
+          </el-form-item>
+          <refuseReason @selectRefuseReason="selectRefuseReason" />
+        </el-form>
       </div>
-    </basic-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">取 消</el-button>
+        <el-button type="primary" @click="checkForm" v-loading="loading">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -209,14 +243,17 @@ import {
   checkSingleApi,
   getTaskV2PageTileApi
 } from '@/api/serviceManagement/servicesToBeReviewed/index.js';
+import refuseReason from '@/components/refuseReason';
 import { getDictType } from '@/api/common';
 import abbreviationsProvinces from '@/const/abbreviationsProvinces.js';
 import dayjs from 'dayjs';
 import { mapGetters } from 'vuex';
 
 export default {
+  components: { refuseReason },
   data() {
     return {
+      typeArr: ['area', 'text', 'inputautoselect', 'map', 'mapwithimg', 'datetime', 'datatimerange', 'money', 'number', ''],
       taskStatusArr: [],
       taskTypeAvailArr: [],
       mahNameArr: [],
@@ -227,6 +264,7 @@ export default {
       drugDisabled: true,
       abbreviationsProvincesList: abbreviationsProvinces,
       nodeId: '',
+      getPageLoading: false,
       searchFrom: {
         year: '',
         taskTypeId: '',
@@ -240,21 +278,38 @@ export default {
         taskStatus: 3
       },
       page: {
-        current: 1,
-        size: 50
+        total: 0,
+        currentPage: 1,
+        pageSize: 6
       },
       nodeId: '',
-      list: []
+      list: [],
+      allCheck: false,
+      checkAllLength: 0,
+      checkAllTaskScore: 0,
+      checkIds: [],
+      reviewToken: '',
+      expireTime: '',
+      reviewDialog: false,
+      taskForm: {
+        checkResult: '',
+        checkMessage: ''
+      },
+      rules: {
+        checkResult: [{ required: true, message: '请选择审批意见', trigger: 'change' }]
+      },
+      loading: false
     };
   },
   async created() {
     await this.getDict();
-    this.getList();
   },
   computed: {
     ...mapGetters(['userInfo'])
   },
   mounted() {
+    window.addEventListener('scroll', this.handleScroll);
+
     const roles = this.userInfo.roles;
 
     let nodeId = '';
@@ -293,8 +348,22 @@ export default {
     this.searchFrom.nodeId = nodeId;
     this.getList();
   },
-
+  beforeDestroy() {
+    window.removeEventListener('scroll', this.handleScroll);
+  },
   methods: {
+    handleScroll(event) {
+      const scrollHeight = event.target.scrollHeight; // 获取滚动元素的总高度
+      const scrollTop = event.target.scrollTop; // 获取滚动元素的当前滚动高度
+      const windowHeight = event.target.clientHeight; // 获取滚动元素的可视区域高度
+      if (scrollTop + windowHeight >= scrollHeight - 10) {
+        if (!this.getPageLoading && this.page.total > this.page.currentPage * this.page.pageSize) {
+          this.page.currentPage += 1;
+          this.getList();
+        }
+      }
+    },
+
     getDict() {
       getDictType({ type: 'task_status' }).then((res) => {
         this.taskStatusArr = res.data.data;
@@ -329,6 +398,7 @@ export default {
       }
     },
     async getList() {
+      this.getPageLoading = true;
       const obj = Object.assign(
         {
           current: this.page.currentPage,
@@ -336,12 +406,90 @@ export default {
         },
         this.searchFrom
       );
-      const res = await getTaskV2PageTileApi(obj);
-      if (res.data.code === 0) {
-        this.list = res.data.data.records;
+
+      try {
+        const res = await getTaskV2PageTileApi(obj);
+        if (res.data.code === 0) {
+          let list = res.data.data.records;
+          // this.list.push(...res.data.data.records);
+          this.page.total = res.data.data.total;
+          list.forEach((item) => {
+            let reviewInfo = {
+              checked: false,
+              checkMessage: '',
+              show: true
+            };
+            item.reviewInfo = reviewInfo;
+          });
+          this.list.push(...list);
+          this.$forceUpdate();
+          this.getPageLoading = false;
+        }
+      } catch (err) {
+        console.log('err', err);
+
+        this.getPageLoading = false;
       }
     },
 
+    allClick(val) {
+      if (val) {
+        this.list.forEach((item) => (item.reviewInfo.checked = true));
+        this.$forceUpdate();
+        this.calcInfo();
+      }
+    },
+    calcInfo() {
+      let checkAllLength = 0;
+      let checkAllTaskScore = 0;
+      let ids = [];
+      this.list.forEach((item) => {
+        if (item.reviewInfo.checked) {
+          checkAllLength++;
+          checkAllTaskScore += Number(item.info.taskScore);
+          ids.push(item.info.taskId);
+        }
+      });
+      this.checkAllLength = checkAllLength;
+      this.checkAllTaskScore = checkAllTaskScore;
+      this.checkIds = ids;
+    },
+    itemChecked(val, item) {
+      this.$forceUpdate();
+
+      if (val) {
+        this.checkAllLength++;
+        this.checkIds.push(item.info.taskId);
+        this.checkAllTaskScore += Number(item.info.taskScore);
+      } else {
+        this.checkAllLength--;
+        let index = this.checkIds.findIndex((curr) => curr === item.info.taskId);
+        this.checkIds.splice(index, 1);
+        this.checkAllTaskScore -= Number(item.info.taskScore);
+      }
+    },
+    async allClick() {
+      if (!this.checkIds.length) {
+        return this.$message.error('请选择待审核数据');
+      }
+      await this.getToken(this.checkIds);
+      this.reviewDialog = true;
+    },
+    async getToken(taskIds) {
+      const tokenRes = await getTaskV2TokenApi({ taskIds: taskIds });
+      if (tokenRes.data.code !== 0 || !tokenRes.data.data?.token) {
+        return this.$message.error('获取token失败');
+      }
+      this.reviewToken = tokenRes.data.data.token;
+      this.expireTime = tokenRes.data.data.expireTime;
+    },
+    handleClose() {
+      this.reviewDialog = false;
+      this.taskForm = {
+        checkResult: '',
+        checkMessage: ''
+      };
+    },
     clickBtn() {
       this.tableData = [];
       this.page.currentPage = 1;
@@ -392,6 +540,11 @@ export default {
       return result.join(',');
     },
     async passClick(item, flag) {
+      if (!flag && !item.reviewInfo.checkMessage) {
+        return this.$message.error('请填写审核意见');
+      }
+
+      //
       let nodeId = '';
       const roles = this.userInfo.roles;
       switch (true) {
@@ -422,22 +575,95 @@ export default {
         default:
           nodeId = 1;
       }
-      console.log('item', item);
       let obj = {
         token: item.token.token,
         taskId: item.token.value,
         checkResult: flag,
-        checkMessage: '',
+        checkMessage: item.reviewInfo.checkMessage,
         nodeId: nodeId
       };
       try {
-        res = await checkSingleApi(obj);
-        console.log('res', res);
+        const res = await checkSingleApi(obj);
+        if (res.data.code === 0 && res.data.data) {
+          item.reviewInfo.show = false;
+          this.$forceUpdate();
+        }
       } catch (err) {
         console.log('err', err);
       }
     },
 
+    checkForm() {
+      let nodeId = '';
+      const roles = this.userInfo.roles;
+      switch (true) {
+        // 43	地市管理员
+        case roles.includes(43):
+          nodeId = 2;
+          break;
+        // 4	区域管理员
+        case roles.includes(4):
+          nodeId = 3;
+          break;
+        // 42	市场管理员
+        case roles.includes(42):
+          nodeId = 8;
+          break;
+        // 40	商务管理员
+        case roles.includes(40):
+          nodeId = 9;
+          break;
+        // 39	事业部总经理
+        case roles.includes(39):
+          nodeId = 6;
+          break;
+        // 41	事业部分管领导
+        case roles.includes(41):
+          nodeId = 5;
+          break;
+        default:
+          nodeId = 1;
+      }
+      this.$refs.taskForm.validate(async (valid) => {
+        if (valid) {
+          let obj = {
+            token: this.reviewToken,
+            taskIds: this.checkIds,
+            checkResult: this.taskForm.checkResult,
+            checkMessage: this.taskForm.checkMessage,
+            nodeId: nodeId
+          };
+          try {
+            const res = await taskV2CheckBatchApi(obj);
+            if (res.data.code === 0 && res.data.data) {
+              this.$message.success('审核成功!');
+              this.handleClose();
+              this.list.forEach((item) => {
+                if (item.reviewInfo.checked) {
+                  console.log('item', item);
+
+                  item.reviewInfo.show = false;
+                }
+              });
+            }
+            this.loading = false;
+          } catch (err) {
+            this.loading = false;
+            console.log('err', err);
+          }
+        }
+      });
+    },
+    selectRefuseReason(refuseReason) {
+      let info;
+      if (this.taskForm.checkMessage) {
+        info = this.taskForm.checkMessage + refuseReason + ';';
+      } else {
+        info = refuseReason + ';';
+      }
+
+      this.$set(this.taskForm, 'checkMessage', info);
+    },
     backPage() {
       this.$router.$avueRouter.closeTag();
       this.$router.back();
@@ -447,6 +673,20 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.quicl-review {
+  overflow: auto;
+  height: 100%;
+  padding-bottom: 30px;
+  .card-container {
+    margin: 0 10px;
+    margin-bottom: 10px;
+    padding: 20px;
+    border-radius: 10px;
+    background: #fff;
+    box-sizing: border-box;
+  }
+}
+
 .search-btns {
   margin-left: 50px;
   display: flex;
@@ -454,13 +694,17 @@ export default {
 }
 
 .card-list {
-  height: calc(100vh - 550px);
+  overflow: auto;
+  min-height: 200px;
+  box-sizing: border-box;
   .cards {
+    box-sizing: border-box;
     width: 100%;
     padding: 10px;
   }
 
   .card {
+    box-sizing: border-box;
     border-radius: 4px;
     box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.2);
     border: 1px solid #ebeef5;
@@ -468,10 +712,9 @@ export default {
     color: #303133;
     transition: 0.3s;
     min-height: 300px;
-    width: 49%;
-    min-width: 500px;
+    width: 48%;
+    // min-width: 500px;
     margin-bottom: 10px;
-
     padding: 10px;
   }
 
@@ -543,13 +786,7 @@ export default {
     height: 100px;
     margin-right: 5px;
   }
-  .longtext-box {
-    .textarea-box {
-      margin-top: 5px !important;
-      width: 100%;
-      padding: 3px;
-    }
-  }
+
   .divline {
     width: 100%;
     height: 5px;
@@ -563,6 +800,19 @@ export default {
     cursor: pointer;
   }
 }
+
+.longtext-box {
+  .textarea-box {
+    margin-top: 5px !important;
+    width: 100%;
+    padding: 3px;
+  }
+}
+
+.no-data {
+  margin: 0 auto;
+}
+
 .btns {
   padding: 0 20px;
   padding-top: 5px;
@@ -572,4 +822,45 @@ export default {
     width: 48%;
   }
 }
+
+.card-all-review {
+  width: 350px;
+}
+.check-info {
+  padding-left: 20px;
+  margin-top: 10px;
+  display: flex;
+  height: 30px;
+  align-items: center;
+  p {
+    color: #85ce61;
+    border-radius: 3px;
+    line-height: 14px;
+    font-size: 14px;
+  }
+}
+
+.teskDetailsty {
+  width: 100%;
+  height: 30px;
+  line-height: 30px;
+  font-size: 16px;
+  font-weight: 600;
+  color: #333333;
+  border-bottom: 1px solid #d7d6d5;
+  margin: 0 0 10px 0;
+}
+.check-btns {
+  width: 150px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.check-tips {
+  margin-bottom: 5px;
+  font-size: 16px;
+  color: rgb(233 77 77);
+  text-align: center;
+  font-weight: 600;
+}
 </style>

+ 2 - 2
src/views/serviceManagement/servicesToBeReviewed/index.vue

@@ -89,9 +89,9 @@
 
     <div class="check-btns">
       <el-button type="primary" @click="allClick">批量审核</el-button>
-      <!-- <el-button type="primary" @click="quickAuditClick">快捷审核</el-button> -->
+      <el-button type="primary" @click="quickAuditClick">快捷审核</el-button>
     </div>
-    <div class="tips">当前选择表格已选择{{ totalNum }}项,总积分:{{ totalScore }}</div>
+    <div class="tips">当前表格已选择{{ totalNum }}项,总积分:{{ totalScore }}</div>
 
     <div class="table">
       <vxe-table