Explorar el Código

优化任务监督-回显

yuanmingze hace 5 meses
padre
commit
eea83939d2

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

@@ -111,7 +111,7 @@
           <el-empty description="暂无数据"></el-empty>
         </div>
       </template>
-      <div class="cards" v-masonry :cols="2" :gutter="20" style="width: 100%">
+      <div class="cards" v-masonry :cols="2" :gutter="20" style="width: 100%" v-else>
         <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">
@@ -552,7 +552,6 @@ export default {
     },
 
     getPreviewList(imgList, index) {
-      console.log('getPreviewList', imgList, index);
       // 解决el-image大图预览定位图片不准确的问题
       return imgList.slice(index).concat(imgList.slice(0, index));
     },
@@ -669,6 +668,7 @@ export default {
       try {
         const res = await checkSingleApi(obj);
         if (res.data.code === 0 && res.data.data) {
+          item.reviewInfo.checked = flag;
           item.reviewInfo.show = false;
           this.$forceUpdate();
         }

+ 17 - 13
src/views/servicePackageMonitoring/riskEventAudit/index.vue

@@ -57,10 +57,10 @@
       <!-- 角色 -->
       <template slot="roleNumber" slot-scope="scope">
         <div class="role-number">
-          <div style="color: #67C23A;"><span>生产企业财务监督:</span>{{ scope.row.taskSupStat.mahFinaSupTotal }}</div>
-          <div style="color: #E6A23C;"><span>生产企业销售监督:</span>{{ scope.row.taskSupStat.mahSalesSupTotal }}</div>
-          <div style="color: #F56C6C;"><span>营销中心财务监督:</span>{{ scope.row.taskSupStat.optFinaSupTotal }}</div>
-          <div style="color: #409EFF;"><span>营销中心合规监督:</span>{{ scope.row.taskSupStat.optLawSupTotal }}</div>
+          <div style="color: #67c23a"><span>生产企业财务监督:</span>{{ scope.row.taskSupStat.mahFinaSupTotal }}</div>
+          <div style="color: #e6a23c"><span>生产企业销售监督:</span>{{ scope.row.taskSupStat.mahSalesSupTotal }}</div>
+          <div style="color: #f56c6c"><span>营销中心财务监督:</span>{{ scope.row.taskSupStat.optFinaSupTotal }}</div>
+          <div style="color: #409eff"><span>营销中心合规监督:</span>{{ scope.row.taskSupStat.optLawSupTotal }}</div>
         </div>
       </template>
       <!-- 进度 -->
@@ -90,15 +90,15 @@
 </template>
 
 <script>
-import {fetchList, supervisionPkgStatApi, reportExportApi} from '@/api/riskEventAudit.js';
+import { fetchList, supervisionPkgStatApi, reportExportApi } from '@/api/riskEventAudit.js';
 import ElQuarterPicker from '@/components/ElQuarterPicker/index';
-import {tableOption} from '@/const/crud/riskEventAudit.js';
-import {getAreaTreeApi} from '@/api/areaTree';
+import { tableOption } from '@/const/crud/riskEventAudit.js';
+import { getAreaTreeApi } from '@/api/areaTree';
 import monitorDialog from './components/monitorDialog.vue';
-import {mapGetters} from 'vuex';
+import { mapGetters } from 'vuex';
 
 export default {
-  components: {monitorDialog, ElQuarterPicker},
+  components: { monitorDialog, ElQuarterPicker },
   data() {
     return {
       tableLoading: false,
@@ -106,7 +106,7 @@ export default {
       page: {
         total: 0, // 总页数
         currentPage: 1, // 当前页数
-        pageSize: 50 // 每页显示多少条
+        pageSize: 10 // 每页显示多少条
       },
       tableData: [],
       treeList: [],
@@ -138,9 +138,12 @@ export default {
 
     const roles = this.userInfo.roles;
     const rolesArr = [49, 52, 53, 56];
-    this.IS_JDY = roles.some(item => rolesArr.includes(item));
+    this.IS_JDY = roles.some((item) => rolesArr.includes(item));
   },
 
+  activated() {
+    this.getList(this.page);
+  },
   methods: {
     exportDialogHandleClose() {
       this.exportMonthrange = '';
@@ -157,7 +160,6 @@ export default {
       }
     },
     exportFn(row) {
-      console.log('riw', row);
       this.currRow = row;
       this.exportDialog = true;
     },
@@ -224,7 +226,7 @@ export default {
     getShowtaskMonitorBtn(row) {
       const roles = this.userInfo.roles;
       const rolesArr = [49, 52, 53, 56];
-      let flag = roles.some(item => rolesArr.includes(item));
+      let flag = roles.some((item) => rolesArr.includes(item));
       const supervision = row.supervision;
       const scorePackageStatus = row.scorePackageStatus;
       const flag2 = scorePackageStatus === '4' && (!supervision || supervision === 'REJECTED');
@@ -278,10 +280,12 @@ export default {
       return result;
     },
     searchChange(form, done) {
+      this.searchForm = form;
       if (this.searchFormAreaCodes.length) {
         const codes = this.extractLastElements(this.searchFormAreaCodes);
         this.searchForm.areaCode = codes;
       }
+
       this.page.currentPage = 1;
       this.getList(this.page, form);
       done();

+ 415 - 926
src/views/servicePackageMonitoring/riskEventAudit/taskMonitor.vue

@@ -1,279 +1,134 @@
 <template>
-  <basic-container class="basic">
-    <el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="viewerList" />
-    <Card 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>
-    </Card>
-    <div class="search">
-      <el-form :model="form" label-width="100px" ref="formRef">
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="任务ID" prop="taskId">
-              <el-input v-model="form.taskId" placeholder="执行任务" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="任务编号" prop="taskNumber">
-              <el-input v-model="form.taskNumber" placeholder="任务编号" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="服务类型" prop="taskTypeId">
-              <el-select v-model="form.taskTypeId" placeholder="服务类型" class="w100" clearable>
-                <el-option :label="item.taskTypeName" :value="item.id" v-for="item in taskList" :key="item.id"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="起止时间">
-              <ElQuarterPicker placeholder="请选择" v-model="monthrange" @change="monthrangeChange" class="w100" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="执行包名称" prop="pkgName">
-              <el-input v-model="form.pkgName" placeholder="执行包名称" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="生产企业" prop="mahName">
-              <el-select v-model="form.mahName" placeholder="生产企业" clearable class="w100">
-                <el-option :label="item.label" :value="item.value" v-for="item in mahNameList" :key="item.value"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="代表名字" prop="memberName">
-              <el-input v-model="form.memberName" placeholder="代表名字" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="3">
-            <div class="search-btns">
-              <el-form-item>
-                <el-button type="primary" @click="onSubmit">查询</el-button>
+    </div>
+    <div class="card-container">
+      <div class="search-content">
+        <el-form :model="form" label-width="100px" ref="formRef">
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="任务ID" prop="taskId">
+                <el-input v-model="form.taskId" placeholder="执行任务" clearable></el-input>
               </el-form-item>
-              <el-form-item>
-                <el-button type="primary" @click="restFn">重置</el-button>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="任务编号" prop="taskNumber">
+                <el-input v-model="form.taskNumber" placeholder="任务编号" clearable></el-input>
               </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div class="content" v-if="!IS_FWS && type">
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="服务类型" prop="taskTypeId">
+                <el-select v-model="form.taskTypeId" placeholder="服务类型" class="w100" clearable>
+                  <el-option :label="item.taskTypeName" :value="item.id" v-for="item in taskList" :key="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="起止时间">
+                <ElQuarterPicker placeholder="请选择" v-model="monthrange" @change="monthrangeChange" class="w100" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="执行包名称" prop="pkgName">
+                <el-input v-model="form.pkgName" placeholder="执行包名称" clearable></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="生产企业" prop="mahName">
+                <el-select v-model="form.mahName" placeholder="生产企业" clearable class="w100">
+                  <el-option :label="item.label" :value="item.value" v-for="item in mahNameList" :key="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="代表名字" prop="memberName">
+                <el-input v-model="form.memberName" placeholder="代表名字" clearable></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <div class="search-btns">
+                <el-button type="primary" @click="onSubmit">查询</el-button>
+                <el-button type="primary" @click="restFn">重置</el-button>
+              </div>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+    </div>
+
+    <div class="card-container" v-if="!IS_FWS && type">
+      <div class="btns">
         <el-button type="primary" class="all-btn" @click="allPassClick">批量审核</el-button>
         <el-checkbox v-model="allCheck" @change="allClick">全选</el-checkbox>
       </div>
     </div>
-    <div class="content">
-      <div class="list" v-if="list.length">
-        <el-card
-          shadow="always"
-          class="item"
-          v-for="(item, index) in list"
-          :key="index"
-          v-show="item.show"
-          :class="'cls' + item.id"
-          :style="{
-            left: item.left,
-            top: item.top
-          }"
-        >
-          <div class="task-type-name">
-            <el-checkbox
-              v-if="!IS_FWS && type"
-              v-model="item.checked"
-              @change="
-                val => {
-                  itemChecked(val, item.id, item.score);
-                }
-              "
-            ></el-checkbox>
-            服务类型: {{ getName(item.taskType) }}
-          </div>
-          <div class="info">
-            <p>任务ID:{{ item.id }}</p>
-            <p>任务编号:{{ item.taskInfo.taskNumber }}</p>
-          </div>
-          <div class="info">
-            <p>服务积分:{{ item.score }}</p>
-            <p>代表姓名:{{ item.taskUserName }}</p>
-          </div>
-          <div class="info">
-            <p>产品名称:{{ item.drugName }}</p>
-            <p>生产企业:{{ item.mah }}</p>
-          </div>
-          <div class="info">
-            <p>执行包名称:{{ item.pkgName }}</p>
-            <p>起止时间:{{ item.period }}</p>
-          </div>
-          <div class="detail">
-            服务详情
-          </div>
-          <el-image v-if="item.taskInfo.shareImgUrl" :src="item.taskInfo.shareImgUrl" :preview-src-list="[item.taskInfo.shareImgUrl]"> </el-image>
-          <template v-if="['8', '9', '10', '11'].includes(item.taskType)">
-            <div v-if="item.taskInfo">
-              <div>转发时间: {{ item.taskInfo.createTime || '' }}</div>
-              <div>文章标题:{{ item.title }}</div>
-              <div>获得积分:+{{ item.score }}</div>
-              <div>备注:{{ item.remark }}</div>
-              <div class="tc" v-if="item.ercodeUrl" :style="{height: '150px'}">
-                <img class="ercode-icon" :src="item.ercodeUrl" />
+
+    <div class="card-list card-container" v-loading="getPageLoading">
+      <template v-if="noData">
+        <div class="no-data">
+          <el-empty description="暂无数据"></el-empty>
+        </div>
+      </template>
+      <div class="cards" v-masonry :cols="2" :gutter="20" style="width: 100%" v-else>
+        <template v-for="(item, index) in list">
+          <div class="card" v-masonry-tile :key="index" v-if="item.show">
+            <div class="task-info">
+              <div class="task-type-info">
+                <el-checkbox
+                  v-if="!IS_FWS && type"
+                  v-model="item.checked"
+                  @change="
+                    (val) => {
+                      itemChecked(val, item.id, item.score);
+                    }
+                  "
+                ></el-checkbox>
+                服务类型: {{ getName(item.taskType) }}
               </div>
             </div>
-          </template>
-          <template v-if="['5', '6', '33'].includes(item.taskType)">
-            <div v-for="(iten, index) in item.wmUserSignList" :key="index" class="visit-list">
-              <div class="visit-title">
-                拜访记录:
-              </div>
-              <div>{{ iten.signEntName }} {{ iten.signDate }} 打卡</div>
-              <template v-if="iten.userSignDetail">
-                <div class="visit-title">
-                  拜访明细:
-                </div>
-                <div class="detail-info">
-                  <ul>
-                    <li v-if="iten.userSignDetail.drug.length > 0">
-                      <span>推广产品:</span>
-                      <p>
-                        {{ iten.userSignDetail.drug && iten.userSignDetail.drug.join(',') }}
-                      </p>
-                    </li>
-                    <li
-                      v-if="
-                        iten.signEntType == '1' &&
-                          iten.userSignDetail &&
-                          iten.userSignDetail.templateType !== 'TEMPLATE2' &&
-                          iten.userSignDetail.detail &&
-                          iten.userSignDetail.detail.length > 0
-                      "
-                    >
-                      <span>拜访科室:</span>
-                      <div>
-                        <div v-for="(iteo, indey) in iten.userSignDetail.detail" :key="indey">
-                          <div>{{ iteo.departmentName }}</div>
-                          <el-image v-if="iteo.fileUrl.length" :preview-src-list="iteo.fileUrl" style="width: 100px; height: 100px" :src="getUrl(iteo.fileUrl[0])"></el-image>
-                        </div>
-                      </div>
-                    </li>
-                    <li v-if="iten.signEntType == '1' && iten.userSignDetail && iten.userSignDetail.department">
-                      <span>拜访科室:</span>
-                      <p>{{ iten.userSignDetail.department }}</p>
-                    </li>
-                    <li v-if="iten.userSignDetail && iten.userSignDetail.visitor">
-                      <span>拜访人员:</span>
-                      <p>{{ iten.userSignDetail.visitor }}</p>
-                    </li>
-                    <li>
-                      <span>拜访目的:</span>
-                      <p>
-                        {{ iten.userSignDetail.purposeName && iten.userSignDetail.purposeName.join(',') }}
-                      </p>
-                    </li>
-                    <li>
-                      <span>拜访结果:</span>
-                      <p>{{ iten.userSignDetail.resultName }}</p>
-                    </li>
-                    <template v-if="iten.userSignDetail.templateType === 'TEMPLATE2'">
-                      <li>
-                        <span>是否针对了正确的HCP:</span>
-                        <p>
-                          {{ iten.userSignDetail.detail[0].rightHcp ? '是' : '否' }}
-                        </p>
-                      </li>
-                      <li>
-                        <span>是否传递了正确的信息:</span>
-                        <p>
-                          {{ iten.userSignDetail.detail[0].rightInfo ? '是' : '否' }}
-                        </p>
-                      </li>
-                      <li>
-                        <span>是否采取了正确的活动形式和频率:</span>
-                        <p>
-                          {{ iten.userSignDetail.detail[0].rightActivity ? '是' : '否' }}
-                        </p>
-                      </li>
-                    </template>
-                    <li>
-                      <span>备注:</span>
-                      <p>{{ iten.userSignDetail.remark }}</p>
-                    </li>
-                  </ul>
-                </div>
-              </template>
+            <div class="info">
+              <p>任务ID:{{ item.id }}</p>
+              <p>任务编号:{{ item.taskInfo.taskNumber }}</p>
+            </div>
+            <div class="info">
+              <p>服务积分:{{ item.score }}</p>
+              <p>代表姓名:{{ item.taskUserName }}</p>
+            </div>
+            <div class="info">
+              <p>产品名称:{{ item.drugName }}</p>
+              <p>生产企业:{{ item.mah }}</p>
+            </div>
+            <div class="info">
+              <p>执行包名称:{{ item.pkgName }}</p>
+              <p>起止时间:{{ item.period }}</p>
             </div>
-          </template>
-          <template v-if="item.config && item.config.length != 0">
-            <div>
-              <div v-for="iten in item.config" :key="iten.id" class="field-box">
+            <div class="detail">服务详情</div>
+            <template v-if="item.config && item.config.length != 0">
+              <div class="field-box" v-for="iten in item.config" :key="iten.id">
                 <template v-if="iten.taskFiledType == 'domain' || iten.taskFiledType == 'select'">
                   <div class="title-value">{{ iten.taskFiledValue }}:</div>
                   <div class="desc-value" v-show="!(iten.taskTypeId == '19' && iten.taskFiledKey == 'temp3')">
                     {{ getDesc(iten, item) }}
                   </div>
                 </template>
-                <!-- 城市选择 -->
-                <template v-if="iten.taskFiledType === 'area'">
+                <!-- * 文本类型 -->
+                <template v-if="typeArr.includes(iten.taskFiledType)">
+                  {{ item.taskFiledType }}
                   <div class="title-value">{{ iten.taskFiledValue }}:</div>
                   <div class="desc-value">
-                    {{ getAddress(iten, item) }}
+                    {{ item?.wmTaskContent[iten?.taskFiledKey] || '--' }}
                   </div>
                 </template>
-                <!-- 文字输入 -->
-                <template v-if="iten.taskFiledType == 'text' || iten.taskFiledType == 'inputautoselect' || iten.taskFiledType == 'map'">
-                  <div class="title-value">{{ iten.taskFiledValue }}:</div>
-                  <div class="desc-value">
-                    {{ item.wmTaskContent[iten.taskFiledKey] || '--' }}
-                  </div>
-                  <!-- 地图 -->
-                  <template v-if="getMapShow(iten) && mapShow">
-                    <div :id="item.id" style="width:100%; height:300px">
-                      <!-- {{ iten.id && initMap(iten.id, item)}} -->
-                    </div>
-                  </template>
-                </template>
-                <!-- 时间 -->
-                <template v-if="iten.taskFiledType == 'datetime'">
-                  <div class="title-value">{{ iten.taskFiledValue }}:</div>
-                  <div class="desc-value">
-                    {{ item.wmTaskContent[iten.taskFiledKey] || '--' }}
-                  </div>
-                </template>
-                <!-- 日期范围 -->
-                <template v-if="iten.taskFiledType == 'datatimerange'">
-                  <div class="title-value">{{ iten.taskFiledValue }}:</div>
-                  <div class="desc-value">
-                    {{ item.wmTaskContent[iten.taskFiledKey] }}
-                  </div>
-                </template>
-                <!-- 签名 -->
-                <div v-if="item.taskFiledType == 'sign'" class="divline" />
-                <template v-if="iten.taskFiledType == 'sign'">
-                  <div class="upload-field">
-                    <div class="field-text" :class="{required: iten.isMustfill == '1'}">{{ iten.taskFiledValue }}:</div>
-                    <!-- 上传组件 -->
-                    <div class="img-box">
-                      <el-image
-                        :key="index"
-                        class="img-iten"
-                        fit="fill"
-                        :src="baseUrl + item.wmTaskContent[iten.taskFiledKey]"
-                        :preview-src-list="getPreviewList([baseUrl + item.wmTaskContent[iten.taskFiledKey]], 0)"
-                      >
-                      </el-image>
-                    </div>
-                  </div>
-                </template>
-                <!-- 图片上传 -->
                 <div v-if="iten.taskFiledType == 'img'" class="divline"></div>
+                <!-- 图片上传 -->
                 <template v-if="iten.taskFiledType == 'img'">
                   <div class="upload-field">
-                    <div class="field-text" :class="{required: iten.isMustfill == '1'}">
+                    <div class="field-text" :class="{ required: iten.isMustfill == '1' }">
                       {{ iten.taskFiledValue }}:
                       <!-- {{ getImgList(item.wmTaskContent[iten.taskFiledKey], iten) }} -->
                     </div>
@@ -286,97 +141,44 @@
                     </div>
                   </div>
                 </template>
-                <!-- 文件类型 -->
-                <template v-if="iten.taskFiledType === 'fileurl'">
-                  <div class="upload-field">
-                    <div class="field-text" :class="{required: iten.isMustfill == '1'}">
-                      {{ iten.taskFiledValue }}:
-                      {{ getFileList(item.wmTaskContent[iten.taskFiledKey], iten) }}
-                    </div>
-                    <div v-if="iten.fileList" class="pl60 pr60">
-                      <!-- 图片文件 -->
-                      <div class="img-box">
-                        <template v-for="(iItem, index) in iten.fileList">
-                          <el-image
-                            v-if="imgTypeList.includes(iItem.url.split('.')[1])"
-                            :key="index"
-                            class="img-item"
-                            :src="iItem.url"
-                            :preview-src-list="getPreviewList(iten.fileList.map(ele => ele.url), index)"
-                          >
-                          </el-image>
-                        </template>
-                      </div>
-                      <!-- 其他文件 -->
-                      <div class="file-box">
-                        <template v-for="(iItem, index) in iten.fileList">
-                          <div v-if="!imgTypeList.includes(iItem.url.split('.')[1])" :key="index" class="df_sb file-item">
-                            <span>{{ iItem.fileName }}</span>
-                            <span @click="downloadFn(iItem)">下载</span>
-                          </div>
-                        </template>
-                      </div>
-                    </div>
-                  </div>
-                </template>
-                <!-- 金额 -->
-                <template v-if="iten.taskFiledType == 'money'">
-                  <div class="title-value">{{ iten.taskFiledValue }}:</div>
-                  <div class="desc-value">
-                    {{ item.wmTaskContent[iten.taskFiledKey] || '--' }}
-                  </div>
-                </template>
-                <!-- 数字 -->
-                <template v-if="iten.taskFiledType == 'number'">
-                  <div class="title-value">{{ iten.taskFiledValue }}:</div>
-                  <div class="desc-value">
-                    {{ item.wmTaskContent[iten.taskFiledKey] || '--' }}
-                  </div>
-                </template>
                 <!-- 长文本 -->
                 <template v-if="iten.taskFiledType == 'longtext'">
                   <div class="longtext-box">
-                    <div class="field-text" :class="{required: iten.isMustfill == '1'}">{{ iten.taskFiledValue }}:</div>
+                    <div class="field-text" :class="{ required: iten.isMustfill == '1' }">{{ iten.taskFiledValue }}:</div>
                     <textarea class="textarea-box" :disabled="true" :value="item.wmTaskContent[iten.taskFiledKey] || '--'" :maxlength="iten.taskFiledMaxsize" />
                   </div>
                 </template>
               </div>
-            </div>
-          </template>
-          <template>
-            <div class="reason" v-if="item.supervisionMessage">
-              <div class="reason-list">
-                <span>监督员监督结果</span>
-                <div class="text">{{ item.supervisionMessage }}</div>
+            </template>
+
+            <template>
+              <div class="reason" v-if="item.supervisionMessage">
+                <div class="reason-list">
+                  <span>监督员监督结果</span>
+                  <div class="text">{{ item.supervisionMessage }}</div>
+                </div>
               </div>
-            </div>
-          </template>
-          <template>
-            <div class="reason" v-if="item.adviceMessages && item.adviceMessages.length">
-              <div class="reason-list" v-for="(iten, indey) in item.adviceMessages" :key="indey">
-                <div class="text">{{ iten }}</div>
+            </template>
+            <template>
+              <div class="reason" v-if="item.adviceMessages && item.adviceMessages.length">
+                <div class="reason-list" v-for="(iten, indey) in item.adviceMessages" :key="indey">
+                  <div class="text">{{ iten }}</div>
+                </div>
               </div>
+            </template>
+            <template v-if="!IS_FWS && type">
+              <div class="reason">
+                <div class="field-text">监督结果</div>
+                <el-input type="textarea" v-model="item.submitRemark"></el-input>
+              </div>
+            </template>
+            <div class="btns" v-if="!IS_FWS && type">
+              <el-button class="btn" type="danger" @click="passClick(index, false, item.id, item)">不通过</el-button>
+              <el-button class="btn" type="primary" @click="passClick(index, true, item.id, item)">通过</el-button>
             </div>
-          </template>
-
-          <template v-if="!IS_FWS && type">
-            <div class="reason">
-              <div class="field-text">监督结果</div>
-              <el-input type="textarea" v-model="item.submitRemark"></el-input>
-            </div>
-          </template>
-
-          <div class="btns" v-if="!IS_FWS && type">
-            <el-button class="btn" type="danger" @click="passClick(index, false, item.id, item)">不通过</el-button>
-            <el-button class="btn" type="primary" @click="passClick(index, true, item.id, item)">通过</el-button>
           </div>
-        </el-card>
+        </template>
       </div>
-      <template v-else>
-        <div class="empty">
-          <el-empty description="无查找结果数据"></el-empty>
-        </div>
-      </template>
     </div>
     <!-- 批量审核弹窗 -->
     <el-dialog title="批量审核" :visible.sync="dialogVisible" width="45%" center :before-close="handleClose">
@@ -407,25 +209,21 @@
         <el-button type="primary" @click="sureBtn">确 定</el-button>
       </span>
     </el-dialog>
-  </basic-container>
+  </div>
 </template>
 
 <script>
-import {supervisionTaskListApi, supervisionTaskCreateApi, supervisionCreateBatchApi} from '@/api/monitor.js';
-import {getTaskList} from '@/api/assignPoints/currency/taskAudit';
-import provinces from '@/util/lib/province';
-import citys from '@/util/lib/city';
-import areas from '@/util/lib/area';
-import QRCode from 'qrcode';
-import request from '@/router/axios';
+import { supervisionTaskListApi, supervisionTaskCreateApi, supervisionCreateBatchApi } from '@/api/monitor.js';
+import { getTaskList } from '@/api/assignPoints/currency/taskAudit';
 import ElImageViewer from 'element-ui/packages/image/src/image-viewer';
-import {mapGetters} from 'vuex';
+import { mapGetters } from 'vuex';
 import ElQuarterPicker from '@/components/ElQuarterPicker/index';
-import {getDictType} from '@/api/common';
+import { getDictType } from '@/api/common';
 export default {
-  components: {ElImageViewer, ElQuarterPicker},
+  components: { ElImageViewer, ElQuarterPicker },
   data() {
     return {
+      typeArr: ['area', 'text', 'inputautoselect', 'map', 'mapwithimg', 'datetime', 'datatimerange', 'money', 'number', ''],
       type: 0,
       hasMap: false,
       mapShow: true,
@@ -465,8 +263,10 @@ export default {
         remarks: ''
       },
       rules: {
-        supervision: [{required: true, message: '请选择审批意见', trigger: 'change'}]
-      }
+        supervision: [{ required: true, message: '请选择审批意见', trigger: 'change' }]
+      },
+      getPageLoading: false,
+      noData: false
     };
   },
   computed: {
@@ -485,55 +285,32 @@ export default {
     if (this.userInfo.roles.includes(37)) {
       this.IS_FWS = true;
     }
-    document.querySelector('.basic').addEventListener('scroll', this.handleScroll);
-    document.addEventListener('click', this.imgClose);
-    let timer = setInterval(() => {
-      if (this.mapIds.length) {
-        clearInterval(timer);
-        const maps = {};
-        this.mapIds.forEach(info => {
-          const observer = new IntersectionObserver(entries => {
-            entries.forEach(entry => {
-              const containerId = entry.target.id;
-              if (entry.isIntersecting) {
-                if (!maps[containerId]) {
-                  maps[containerId] = this.init(info.id, info.item);
-                }
-              } else {
-                if (maps[containerId]) {
-                  maps[containerId].destroy && maps[containerId].destroy();
-                  maps[containerId].setMap && maps[containerId].setMap(null);
-                  delete maps[containerId];
-                }
-              }
-            });
-          });
-          observer.observe(document.getElementById(info.id));
-        });
-      }
-    }, 400);
-    setTimeout(() => {
-      if (timer && !this.mapIds.length) clearInterval(timer);
-    }, 10000);
-  },
-  destroyed() {
-    document.removeEventListener('click', this.imgClose);
-    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();
+        }
+      }
+    },
     allClick(val) {
       this.checkedIds = [];
       if (val) {
         this.checkedIds = [];
-        this.list.forEach(item => {
+        this.list.forEach((item) => {
           item.checked = true;
           this.checkedIds.push(item.id);
         });
       } else {
         this.checkedIds = [];
         this.allCheck = false;
-        this.list.forEach(item => {
+        this.list.forEach((item) => {
           item.checked = false;
         });
       }
@@ -548,7 +325,7 @@ export default {
       if (val) {
         this.checkedIds.push(id);
       } else {
-        let index = this.checkedIds.findIndex(item => item === id);
+        let index = this.checkedIds.findIndex((item) => item === id);
         this.checkedIds.splice(index, 1);
       }
     },
@@ -560,7 +337,7 @@ export default {
       this.dialogVisible = false;
     },
     sureBtn() {
-      this.$refs.allFormRef.validate(valid => {
+      this.$refs.allFormRef.validate((valid) => {
         if (valid) {
           let args = {
             supervisionIds: this.checkedIds,
@@ -568,27 +345,22 @@ export default {
             remarks: this.taskForm.remarks
           };
           supervisionCreateBatchApi(args)
-            .then(res => {
-              console.log('res', res);
+            .then((res) => {
               if (res.data.code === 0) {
+                this.handleClose();
                 this.$message.success('批量审核成功');
-                this.list.forEach(item => {
+                this.list.forEach((item) => {
                   if (item.checked) {
+                    item.checked = false;
+                    item.allCheck = false;
                     item.show = false;
-                    this.column1Height = 400;
-                    this.column2Height = 400;
-                    this.calculateItemHeights();
                   }
                 });
-                this.handleClose();
               }
             })
             .catch(() => {
               this.tableLoading = false;
             });
-        } else {
-          console.log('error submit!!');
-          return false;
         }
       });
     },
@@ -648,95 +420,33 @@ export default {
       this.viewerList = [url];
       this.showViewer = true;
     },
-    getUrl(url) {
-      return `${process.env.VUE_APP_URL}${url}`;
-    },
-    imgClose(e) {
-      if (e.target.className == 'el-image-viewer__mask') {
-        let close = document.querySelector('.el-icon-circle-close');
-        close.click();
-      }
-    },
+
     backPage() {
       this.$router.$avueRouter.closeTag();
       this.$router.back();
     },
-    calculateItemHeights() {
-      this.list.forEach(item => {
-        if (item.show) {
-          let className = '.cls' + item.id + ' .el-card__body';
-          let element = document.querySelector(className);
-          let top = 0;
-          let left = 0;
-          item.height = element.clientHeight;
-
-          if (this.column1Height <= this.column2Height) {
-            top = this.column1Height;
-            this.column1Height += element.clientHeight + 20;
-            left = '3%';
-          } else {
-            top = this.column2Height;
-            this.column2Height += element.clientHeight + 20;
-            left = '51%';
-          }
-          item.top = top + 'px';
-          item.left = left;
-        }
-      });
-      this.$forceUpdate();
-    },
-    async search() {
-      await this.getList();
-      if (this.list.length) {
-        this.column1Height = 400;
-        this.column2Height = 400;
-        this.calculateItemHeights();
-      }
-    },
-    resetClick() {
-      this.form.taskTypeId = '';
-    },
 
     async getTaskList() {
       let res;
       res = await getTaskList(this.$route.query.deptId, this.$route.query.taskStatus == '2' ? '2' : '');
       this.taskList = res.data.data;
-      getDictType({type: 'mah_name'}).then(res => {
+      getDictType({ type: 'mah_name' }).then((res) => {
         this.mahNameList = res.data.data;
-        console.log('res', res);
       });
     },
 
     getName(taskType) {
-      let curr = this.taskList.find(item => item.id == taskType);
+      let curr = this.taskList.find((item) => item.id == taskType);
       return curr.taskTypeName;
     },
-    handleScroll() {
-      const basicElement = document.querySelector('.basic');
-      const scrollTop = basicElement.scrollTop; // 获取滚动条高度(对于 .basic 元素)
-      const clientHeight = basicElement.clientHeight; // 可视区域高度
-      const scrollHeight = basicElement.scrollHeight; // 文档总高度
-      // 判断是否滚动到底部
-      if (scrollTop + clientHeight >= scrollHeight - 1) {
-        this.onScrollToBottom(); // 调用滚动到底部的处理逻辑
-      }
-    },
-    onScrollToBottom() {
-      // 处理滚动到底部的业务逻辑
-      if (this.list.length < this.page.total) {
-        this.page.currentPage += 1;
-        this.getList(); // 示例:加载更多数据
-      }
-    },
+
     restFn() {
       this.$refs.formRef.resetFields();
       this.monthrange = '';
       this.form.pkgPeriod = [];
     },
     async getList() {
-      console.log(' this.from', this.form);
-
-      let res;
+      this.getPageLoading = true;
       let obj = Object.assign(
         {
           deptId: this.$route.query.deptId,
@@ -747,532 +457,311 @@ export default {
         this.form
       );
 
-      res = await supervisionTaskListApi(obj);
-
-      this.page.total = res.data.data.total;
-      let list = this.list.concat(res.data.data.records);
-      await list.forEach(async item => {
-        if (item.config && item.config.length != 0) {
-          item.config.forEach(iten => {
+      let res = await supervisionTaskListApi(obj);
+      if (res.data.code == 0) {
+        this.page.total = res.data.data.total;
+        let list = res.data.data.records;
+        list.forEach((item) => {
+          item.show = true;
+          item.submitRemark = '';
+          item.checked = false;
+          item?.config?.forEach((iten) => {
             iten.taskFiledType = iten.taskFiledType.trim();
             if (iten.taskFiledType == 'img') {
               this.getImgList(item.wmTaskContent[iten.taskFiledKey], iten);
             }
           });
-        }
-        item.submitRemark = '';
-        item.checked = false;
-        item.show = true;
-        if (['7', '8', '9', '10', '11'].includes(item.taskType)) {
-          let type = null;
-          if (item.taskType == '9' || item.taskType == '10') {
-            type = 'article';
-          }
-          let shareUrl = `${process.env.VUE_APP_URL}/h5/#/pages/artile/detail?type=${type}&id=${item.shareId}`;
-          const canvas = document.createElement('canvas');
-          QRCode.toDataURL(canvas, shareUrl, {
-            width: 400, // 二维码宽度
-            height: 400 // 二维码高度
-          }).then(url => {
-            item.ercodeUrl = url;
-          });
-
-          this.$forceUpdate();
-        }
-      });
-      this.list = list;
-      if (this.list.length) {
-        this.column1Height = 400;
-        this.column2Height = 400;
-        this.$nextTick(() => {
-          this.calculateItemHeights();
         });
-      }
-      this.checkedIds = [];
-      this.allPoints = 0;
-      this.allCheck = false;
-
-      for (let val of this.list) {
-        if (!val.config) continue;
-        for (let item of val.config) {
-          if (this.getMapShow(item)) {
-            let obj = {
-              id: val.id,
-              item: val
-            };
-            this.mapIds.push(obj);
-          }
-        }
+        this.list.push(...list);
+        this.$forceUpdate();
+        this.getPageLoading = false;
       }
     },
-    getDesc(item, data) {
+    getDesc(item, curr) {
+      // 拜访类任务
       const arr = ['51', '52', '53'];
-      // 拜访类服务
       if (arr.includes(item.taskTypeId) && item.taskFiledKey === 'temp24') {
-        return data.wmTaskContent['temp24label'];
-      }
-      let value = data.wmTaskContent[item.taskFiledKey];
-      if (item.taskFiledKey === 'temp12') {
-        // 推广产品
-        return value;
-      }
-      if (item.taskFiledKey == 'temp32') {
-        return value;
-      }
-      let itemList = data.dict[item.dictGroupName] || [];
-      let resItem = {};
-      // 如果是库存调查 && 调查类型字段
-      if (data.taskType == 14 && item.taskFiledKey == 'temp3') {
-        let resStr = '';
-        if (!value) return '--';
-        let dArr = value.split(',');
-        let descName = '';
-        let descObj = {};
-        dArr.forEach(dItem => {
-          // 查找对应医院
-          if (data.dict.hospital_service && data.dict.hospital_service.length > 0) {
-            descObj = data.dict.hospital_service.find(hItem => {
-              return dItem == hItem.value;
-            });
-          }
-          if (!descObj) {
-            // 查找对应公司
-            descObj = data.dict.distribution_service.find(hItem => {
-              return dItem == hItem.value;
-            });
-          }
-          if (descName) {
-            descName += ',' + descObj.label;
-          } else {
-            descName = descObj.label;
-          }
-        });
-        return descName;
-      }
-      if (item.taskFiledKey == 'temp1') {
-        return this.getTemp1Desc(item);
-      }
-      //                            并且不是药店调查
-      if (item.dictGroupName && item.dictGroupName != 'ent_pharmacy1') {
-        let resStr = '';
-        if (!value) return '--';
-        let vArr = value.split(',');
-        vArr.forEach(vItem => {
-          resItem = itemList.find(lItem => {
-            return lItem.value == value;
-          });
-          if (resItem) {
-            if (resStr) {
-              resStr += ',' + resItem.label;
-            } else {
-              resStr = resItem.label;
-            }
-          } else {
-            resStr = '--';
-          }
-        });
-        return resStr;
-      } else {
-        // 如果是药店调查  并  为 药店的名字 的 key
-        if (item.taskTypeId == 18 && item.taskFiledKey == 'temp3') {
-          return data.wmTaskContent[item.taskFiledKey];
-        } else {
-          return item;
-        }
-      }
-    },
-    getAddress(item, data) {
-      if (item.taskFiledType == 'area') {
-        let e = data.wmTaskContent[item.taskFiledKey];
-        if (!e) return '--';
-        let arr = e.split(',');
-        let provincesName = '';
-        let provincesIndex = '';
-        let cityName = '';
-        let cityIndex = '';
-        let areasName = '';
-        // 如果为数字,方形,不为数组则展示
-        var n = parseInt(arr[0]);
-        // 如果不为数字,则返回
-        if (isNaN(n)) {
-          return arr[0];
-        }
-        if (arr[0]) {
-          provinces.map((v, k) => {
-            if (v.value + '0000' == arr[0]) {
-              provincesName = v.label;
-              provincesIndex = k;
-            }
-          });
-        }
-        if (arr[1]) {
-          citys[provincesIndex].map((v, k) => {
-            if (v.value + '00' == arr[1]) {
-              cityName = v.label;
-              cityIndex = k;
-            }
-          });
-        }
-        if (arr[2]) {
-          areas[provincesIndex][cityIndex].map((v, k) => {
-            if (v.value == arr[2]) {
-              areasName = v.label;
-            }
-          });
-        }
-        return `${provincesName}-${cityName}-${areasName}`;
-      }
-    },
-    getMapShow(item) {
-      if (item.taskTypeId == '16' && item.taskFiledKey == 'temp4') {
-        return true;
-      }
-      if (item.taskTypeId == '18' && item.taskFiledKey == 'temp4') {
-        return true;
-      }
-      if ((item.taskTypeId == '30' || item.taskTypeId == '15') && item.taskFiledKey == 'temp16') {
-        return true;
+        return curr.wmTaskContent['temp24label'];
+      }
+      // 获取需要转换的字符串(例如 '1,2,3')
+      const contentValue = curr.wmTaskContent[item.taskFiledKey];
+      if (!contentValue) return '--';
+      // 获取字典表对应数组
+      const itemList = curr.dict[item.dictGroupName] || [];
+      // 按逗号拆分成数组
+      const valueArray = contentValue.split(',');
+      // 将每个拆分值找到对应的 label
+      const result = valueArray.map((val) => {
+        const foundItem = itemList.find((dictItem) => dictItem.value === val);
+        return foundItem ? foundItem.label : null;
+      });
+      // 如果有任意一个值无法找到对应的 label,则直接返回 '--'
+      if (result.some((label) => label === null)) {
+        return '--';
       }
-      return false;
-    },
-    getPreviewList(imgList, index) {
-      // 解决el-image大图预览定位图片不准确的问题
-      return imgList.slice(index).concat(imgList.slice(0, index));
+      // 否则,使用逗号拼接并返回
+      return result.join(',');
     },
+
     getImgList(urlStr, item) {
-      if (item.taskFiledType != 'img') return '';
-      if (!urlStr) return '';
-      let uArr = urlStr.split(',');
-      if (!uArr) return '';
-      let imgList = [];
-      let previewList = [];
-      uArr.forEach(uItem => {
-        let type = '无 ';
-        if (uItem.includes(';1')) {
+      // 如果类型不匹配或者 urlStr 为空,直接返回
+      if (item.taskFiledType !== 'img' || !urlStr) return '';
+
+      // 缓存环境变量中的基础 URL
+      const { VUE_APP_URL } = process.env;
+
+      // 以逗号分割,并过滤掉空字符串
+      const imgArray = urlStr.split(',').filter(Boolean);
+      if (!imgArray.length) return '';
+
+      // 生成包含 type 和 url 的数组
+      const imgList = imgArray.map((originalUrl) => {
+        let type = '无';
+        let url = originalUrl;
+
+        if (url.includes(';1')) {
           type = '拍照';
-          uItem = uItem.replace(';1', '');
-        }
-        if (uItem.includes(';2')) {
+          url = url.replace(';1', '');
+        } else if (url.includes(';2')) {
           type = '相册';
-          uItem = uItem.replace(';2', '');
+          url = url.replace(';2', '');
         }
-        imgList.push({
+
+        return {
           type,
-          url: process.env.VUE_APP_URL + uItem
-        });
-        previewList.push(process.env.VUE_APP_URL + uItem);
+          url: VUE_APP_URL + url
+        };
       });
+
+      // 提取预览图片的 URL 列表
+      const previewList = imgList.map((item) => item.url);
+
+      // 将处理结果赋值给对应字段
       item.imgList = imgList;
+
       item.previewList = previewList;
+
+      // 函数约定返回空字符串
       return '';
     },
-    // 得出文件 jsonStr: temp字符串
-    getFileList(jsonStr, item) {
-      if (item.taskFiledType !== 'fileurl') return '';
-      if (!jsonStr) return '';
-      const parseFileList = JSON.parse(jsonStr);
-      if (!parseFileList) return '';
-      let fileList = [];
-      parseFileList.forEach(fileItem => {
-        fileList.push({
-          fileName: fileItem.fileName,
-          url: process.env.VUE_APP_URL + fileItem.url
-        });
-      });
-      item.fileList = parseFileList;
-      return '';
-    },
-    // 下载文件
-    downloadFn(item) {
-      request({
-        url: item.url,
-        method: 'get',
-        responseType: 'blob'
-      }).then(response => {
-        // 处理返回的文件流
-        const blob = response.data;
-        const link = document.createElement('a');
-        link.href = URL.createObjectURL(blob);
-        link.download = item.fileName;
-        document.body.appendChild(link);
-        link.click();
-        window.setTimeout(function() {
-          URL.revokeObjectURL(blob);
-          document.body.removeChild(link);
-        }, 0);
-      });
-    },
-    init(id, item) {
-      if (!document.getElementById(id)) return;
-      //定义地图中心点坐标
-      var center = new TMap.LatLng(22.547931568083015, 114.1306221485138);
-      //定义map变量,调用 TMap.Map() 构造函数创建地图
-      const map = new TMap.Map(document.getElementById(id), {
-        center: center, //设置地图中心点坐标
-        zoom: 16, //设置地图缩放级别
-        viewMode: '2D' // 可选 2D 3D
-      });
-      // this.mapInstance.push(map)
-      // 新建一个正逆地址解析类
-      const geocoder = new TMap.service.Geocoder();
-      //初始化marker图层
-      const markerLayer = new TMap.MultiMarker({
-        id: 'marker-layer',
-        map: map
-      });
-      // this.map.on("click",this.clickHandler)
-      this.getAddressKeyword(item, map, geocoder, markerLayer);
-      this.maps[id] = map;
-      return map;
-    },
-    removeMarker(markerLayer) {
-      const markList = markerLayer.getGeometries();
-      if (markerLayer && markList.length > 0) {
-        markerLayer.remove(markList[0].id);
-      }
-    },
-    getAddressKeyword(item, map, geocoder, markerLayer) {
-      let address = this.getMapAddress(item);
-      const convert = () => {
-        // 将给定的地址转换为坐标位置
-        geocoder.getLocation({address}).then(result => {
-          this.removeMarker(markerLayer);
-          this.$nextTick(() => {
-            markerLayer.updateGeometries([
-              {
-                position: result.result.location // 将得到的坐标位置用点标记标注在地图上
-              }
-            ]);
-          });
-          map.setCenter(result.result.location);
-        });
-      };
-      convert();
-    },
-    getMapAddress(item) {
-      let address;
-      // 商业公司信息收集
-      if (item.taskType == '16') {
-        address = item.wmTaskContent['temp4'] + item.wmTaskContent['temp3'];
-      }
-      // 药店调查
-      if (item.taskType == '18') {
-        let str = item.wmTaskContent['temp7'].replaceAll('-', '');
-        address = str + item.wmTaskContent['temp4'] + item.wmTaskContent['temp3'];
-      }
-      // 医院信息收集
-      if (item.taskType == '30' || item.taskType == '15') {
-        let str = item.wmTaskContent['temp4'].replaceAll('-', '');
-        address = str + item.wmTaskContent['temp16'] + item.wmTaskContent['temp3'];
-      }
-      return address;
-    },
+
     async passClick(index, type, id, item) {
-      let remarks;
       if (!type && !item.submitRemark) {
         return this.$message.info('请填写异常原因');
       }
-      if (item.submitRemark) {
-        remarks = item.submitRemark;
-      }
-
-      remarks = item.submitRemark ? item.submitRemark : '监督无异常';
-
+      let remarks = item.submitRemark ? item.submitRemark : '监督无异常';
       let obj = {
         taskId: id,
         pkgId: item.taskInfo.scorePackageId,
         supervision: type,
         remarks: remarks
       };
-      const res = await supervisionTaskCreateApi(obj);
-      this.list[index].show = false;
-      this.column1Height = 400;
-      this.column2Height = 400;
-      this.calculateItemHeights();
-      if (this.maps[id]) {
-        this.maps[id].destroy && this.maps[id].destroy();
-        this.maps[id].setMap && this.maps[id].setMap(null);
+      try {
+        const res = await supervisionTaskCreateApi(obj);
+        this.list[index].show = false;
+        this.list[index].checked = false;
+        this.$forceUpdate();
+      } catch (error) {
+        console.error('Error:', error);
       }
-      this.$forceUpdate();
     }
   }
 };
 </script>
 
 <style lang="scss" scoped>
-.basic {
-  height: calc(100vh - 130px);
-  padding-bottom: 30px;
+.quicl-review {
   overflow: auto;
-  position: relative;
-  ::v-deep .el-card__body {
-    background-color: #f7f7f7;
+  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 {
-  width: 100%;
-  margin-top: 20px;
-  .search-btns {
-    display: flex;
-    justify-content: space-between;
-  }
+
+.search-btns {
+  margin-left: 50px;
+  width: 150px;
+  display: flex;
+  justify-content: space-between;
 }
-.content {
-  margin-top: 20px;
-  .head {
-    .clear {
-      cursor: pointer;
-    }
-    .btn {
-      margin: 0 20px;
-    }
-  }
-  .list {
-    margin-top: 20px;
-    padding: 0 20px;
 
-    .item {
-      position: absolute;
-      width: 45%;
-      min-height: 50px;
-      box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-      ::v-deep .el-card__body {
-        background-color: #fff;
-      }
+.card-list {
+  overflow: auto;
+  min-height: 200px;
+  box-sizing: border-box;
+  .cards {
+    box-sizing: border-box;
+    width: 100%;
+    padding: 10px;
+  }
 
-      .task-type-name {
-        font-size: 16px;
-        color: #333;
-        font-weight: 600;
-        margin-bottom: 5px;
-      }
-      .info {
-        display: flex;
-        font-size: 12px;
-        color: #7f7f7f;
-        margin-bottom: 5px;
+  .card {
+    box-sizing: border-box;
+    border-radius: 4px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.2);
+    border: 1px solid #ebeef5;
+    background-color: #fff;
+    color: #303133;
+    transition: 0.3s;
+    min-height: 300px;
+    width: 48%;
+    // min-width: 500px;
+    margin-bottom: 10px;
+    padding: 10px;
 
-        p {
-          flex: 1;
-          margin-right: 30px;
-        }
-      }
-      .detail {
-        font-size: 14px;
-        font-weight: 500;
-        color: #333333;
-        border-bottom: 1px solid #d7d6d5;
-        line-height: 30px;
-        margin-bottom: 5px;
-      }
-      .field-box {
-        padding: 0 10px 5px;
-        overflow: hidden;
-        .title-value {
-          //width: 50%;
-          float: left;
-        }
-        .desc-value {
-          float: left;
-        }
-        .upload-field {
-          .img-box {
-            padding-top: 5px;
-            display: flex;
-          }
-          .file-box {
-            .file-item {
-              padding: 2px 8px;
-              cursor: pointer;
-              &:hover {
-                background-color: #f5f7fa;
-                color: #2d8cf0;
-              }
-            }
-          }
-        }
-        .img-box-content {
-          padding-top: 15px;
-          position: relative;
-          .type {
-            font-size: 12px;
-            position: absolute;
-            top: 0;
-          }
-        }
-        .img-item {
-          width: 100px;
-          height: 100px;
-          margin-right: 5px;
-        }
-        .longtext-box {
-          .textarea-box {
-            margin-top: 5px !important;
-            width: 100%;
-            padding: 3px;
-          }
-        }
-        .divline {
-          width: 100%;
-          height: 5px;
-          background-color: #e9e9e9;
-          margin-bottom: 5px;
-        }
-        .img-iten {
-          height: 60px;
-          margin-right: 5px;
-          width: 50px;
-          cursor: pointer;
-        }
-      }
-      .visit-list {
-        .visit-title {
-          color: #2689ff;
-          padding-bottom: 5px;
-        }
-        .detail-info {
-          ul {
-            list-style: none;
-            li {
-              span {
-                min-width: 80px;
-              }
-              display: flex;
-              margin-bottom: 5px;
-            }
-          }
-        }
-      }
-      .btns {
-        padding: 0 20px;
-        padding-top: 5px;
-        display: flex;
-        justify-content: space-between;
-        .btn {
-          width: 48%;
+    .reason {
+      padding: 0 10px 5px;
+      .reason-list {
+        margin-bottom: 6px;
+        .text {
+          margin: 5px 0;
+          font-size: 14px;
+          color: #e93d3d;
         }
       }
     }
   }
+
+  .task-type-info {
+    font-size: 16px;
+    color: #333;
+    font-weight: 600;
+    margin-bottom: 5px;
+  }
+  .info {
+    display: flex;
+    font-size: 12px;
+    color: #7f7f7f;
+    margin-bottom: 5px;
+
+    p {
+      flex: 1;
+      margin-right: 30px;
+    }
+  }
+
+  .detail {
+    font-size: 14px;
+    font-weight: 500;
+    color: #333333;
+    border-bottom: 2px solid #d7d6d5;
+    line-height: 30px;
+    margin: 5px 0;
+  }
 }
-.reason {
+
+.field-box {
   padding: 0 10px 5px;
-  .reason-list {
-    margin-bottom: 6px;
-    .text {
-      margin: 5px 0;
-      font-size: 14px;
-      color: #e93d3d;
+  overflow: hidden;
+  .title-value {
+    //width: 50%;
+    float: left;
+  }
+  .desc-value {
+    float: left;
+  }
+  .upload-field {
+    .img-box {
+      padding-top: 5px;
+      display: flex;
+    }
+    .file-box {
+      .file-item {
+        padding: 2px 8px;
+        cursor: pointer;
+        &:hover {
+          background-color: #f5f7fa;
+          color: #2d8cf0;
+        }
+      }
+    }
+  }
+  .img-box-content {
+    padding-top: 15px;
+    position: relative;
+    .type {
+      font-size: 12px;
+      position: absolute;
+      top: 0;
     }
   }
+  .img-item {
+    width: 100px;
+    height: 100px;
+    margin-right: 5px;
+  }
+
+  .divline {
+    width: 100%;
+    height: 5px;
+    background-color: #e9e9e9;
+    margin-bottom: 5px;
+  }
+  .img-iten {
+    height: 60px;
+    margin-right: 5px;
+    width: 50px;
+    cursor: pointer;
+  }
+}
+
+.longtext-box {
+  .textarea-box {
+    margin-top: 5px !important;
+    width: 100%;
+    padding: 3px;
+  }
 }
-.empty {
-  margin-top: 10px;
+
+.no-data {
+  margin: 0 auto;
 }
-.form {
-  margin-top: 10px;
+
+.btns {
+  padding: 0 20px;
+  padding-top: 5px;
+  display: flex;
+  align-items: center;
+  .btn {
+    width: 48%;
+  }
 }
+
 .all-btn {
-  margin-right: 10px;
+  margin-right: 18px;
+}
+
+.card-all-review {
+  width: 350px;
+}
+
+.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>