Parcourir la source

添加安全检查

凉纪 il y a 2 ans
Parent
commit
4155f476c4

+ 1 - 0
src/components/dateCell/index.vue

@@ -84,6 +84,7 @@ export default {
      let h = new Date().getHours();
      this.defaultTime = `${h}:00`;
     }
+    this.defaultTime = new Date();
   },
   methods:{
     cancelPicker(){

+ 27 - 42
src/components/scroll/scroll.vue

@@ -7,7 +7,6 @@
       <div class="list">
         <slot></slot>
       </div>
-
       <div v-if="pullupShow" class="pullup-tip">
         <span>{{pullupTip.text}}</span>
       </div>
@@ -50,7 +49,7 @@
         //滚动到底部事件,用于上拉加载
         pullup: {
           type: Boolean,
-          default: false
+          default: true
         },
         //顶部下拉事件,用于下拉刷新
         pulldown: {
@@ -74,38 +73,27 @@
           pullupShow:false,
           pulldownTip: {
             text: '下拉刷新',
-            rotate: ''
           },
           pullupTip: {
             text: '上拉加载',
-            rotate: ''
           },
         }
       },
       mounted() {
-        this.$nextTick(()=>{
           this.initScroll();
-        })
+      },
+      watch: {
+        pullup(v){
+          console.log(v,'监听pullup事件')
+          //this.pullup = v;
+        },
+        data(v) {
+          setTimeout(() => {
+            this.refresh()
+          }, this.refreshDelay)
+        }
       },
       methods: {
-        // initScroll(){
-        //   if (!this.$refs.wrapper) {
-        //     return;
-        //   }
-          // better-scroll的初始化
-          // this.scroll = new BScroll(this.$refs.wrapper, {
-          //   pullDownRefresh: true,
-          //   pullUpLoad: true
-          // });
-          // this.scroll.on('pullingDown', () => {
-          //   //this.scroll.finishPullDown()
-          // })
-          //
-          // this.scroll.on('pullingUp', () => {
-          //   //this.scroll.finishPullUp()
-          // })
-
-        //},
         initScroll() {
           if (!this.$refs.wrapper) {
             return;
@@ -136,6 +124,7 @@
                   }
                 }
               }
+
               //上拉加载
               if (this.pullup) {
                 if (pos.y < (this.scroll.maxScrollY + -50)) {
@@ -144,37 +133,40 @@
                   };
                 }else {
                   this.pullupTip = {
-                    text: '上拉刷新',
+                    text: '上拉加载',
                   };
-                  this.pullupShow = true;
                 }
-              }else {
-                this.pullupShow = false;
+                this.pullupShow = true;
               }
+
             })
           }
-
+          console.log(this.pullup,'pullup')
           // 底部上拉事件,上拉加载
           if (this.pullup) {
             this.scroll.on('touchEnd', (pos) => {
+
               // 下拉动作
               if (pos.y < -40) {
-                this.pulldownTip = {
-                  text: '下拉刷新',     // 松开立即刷新
-                };
+                // this.pullupTip = {
+                //   text: '111',     // 松开立即刷新
+                // };
+                console.log('上拉加载,touchEnd')
                 this.$emit('pullup');
               }
             });
           }
+
           //顶部下拉事件,下拉刷新
           if (this.pulldown) {
             this.scroll.on('touchEnd', (pos) => {
               // 下拉动作
               if (pos.y > 50) {
                 // 重置提示信息
-                this.pulldownTip = {
-                  text: '下拉刷新',     // 松开立即刷新
-                };
+                // this.pulldownTip = {
+                //   text: '222',     // 松开立即刷新
+                // };
+                console.log('下拉刷新,touchEnd')
                 this.$emit('pulldown');
               }
             });
@@ -208,13 +200,6 @@
           this.scroll && this.scroll.scrollToElement.apply(this.scroll, arguments);
         }
       },
-      watch: {
-        data() {
-          setTimeout(() => {
-            this.refresh()
-          }, this.refreshDelay)
-        }
-      }
     }
 </script>
 <style lang="scss">

+ 6 - 2
src/components/upload/uploader.vue

@@ -34,6 +34,7 @@ export default {
     },
     data() {
       return {
+        //组件显示用
         fileList:[],
         //上传之后的图片列表,双向绑定之后覆盖fileList
         imageList:[]
@@ -47,7 +48,10 @@ export default {
       value:{
         handler(val){
           console.log(val,'ttttt')
-          if(!val || val.length === 0) return;
+          if(!val || val.length === 0) {
+            this.imageList = [];
+            return
+          }
           this.fileList = val.map(v=>{
             v.url = imgUrl(v.imgPath);
             return v
@@ -81,7 +85,7 @@ export default {
                 this.$toast('图片压缩失败')
                 reject(e);
               },
-             });
+            });
         });
       },
       //上传到服务器

+ 3 - 3
src/router/router.config.js

@@ -206,11 +206,11 @@ export let routers = [
         path: '/securityDetail',
         name: 'securityDetail',
         component: () => import('@/views/menu/securityCheckRegister/detail'),
-        meta: { title: '安全检查详情', keepAlive: false }
+        meta: { title: '安全检查详情', keepAlive: true }
       },
       {
-        path: '/addCheckRegister',
-        name: 'addCheckRegister',
+        path: '/addCheck',
+        name: 'addCheck',
         component: () => import('@/views/menu/securityCheckRegister/addCheck'),
         meta: { title: '添加检查内容', keepAlive: false ,hideTabBar:true}
       },

+ 5 - 7
src/utils/globalMixins.js

@@ -12,11 +12,6 @@ export default {
     /** 组件中设置dicts数组,会将字典存储在vuex中*/
     if(this.dicts && this.dicts.length > 0){
       this.setDicts()
-      // this.dicts.forEach(item=>{
-      //   this.getDictHandler(item,(res)=>{
-      //     this[item] = res
-      //   })
-      // })
     }
   },
   methods: {
@@ -27,21 +22,24 @@ export default {
       })
     },
     /** 获取字典值
+     * key: String 字典类型
      * 组件页面中需要设置:mapGetters(['dictionary']']),
      * */
     getDictItem(key){
       let item = this.dictionary.find((v)=>{
         return  v.key === key
       })
-      return item.value
+      console.log(item,'item')
+      return item?.value
     },
+    //查询字典具体类型的中的某一项
     getDictLabel(key,dictType){
       let item = this.dictionary?.find((v)=>{
         return  v.key === dictType
       })
       let dictLabel = item?.value?.find(v=>{
         if( v.dictValue == key){
-          return v.dictLabel
+          return v?.dictLabel
         }
       })
       return dictLabel?.dictLabel

+ 2 - 2
src/views/home/menu.vue

@@ -2,7 +2,7 @@
   <div class="menu-container">
     <top-bar></top-bar>
     <!-- 天气预警 -->
-    <van-swipe style="height: 50px" vertical autoplay="2000">
+    <van-swipe v-if="list.length > 0" style="height: 50px" vertical autoplay="2000">
       <van-swipe-item v-for="item in list" :key="item.id" @click="clickHandler(item)">
         <div class="color" :style="{ color: item.bgc, backgroundColor: '#fff' }">
           <van-icon name="warn-o" /> {{ item.alarmTitle }}
@@ -28,7 +28,7 @@
       </div>
     </div>
     <van-dialog v-model="show" title="标题" confirmButtonText="关闭">
-      
+
       <p class="text">
         {{ info }}
       </p>

+ 42 - 22
src/views/menu/problemItem/detail.vue

@@ -37,18 +37,18 @@
       <div class="card" v-if="taskInfo.confirm" >
         <van-panel title="处理">
           <div class="panel-box">
-            <van-cell title="确认结果" :label="taskInfo.confirm.executeStatus === 0 ? '确认' : '提出异议'"></van-cell>
-            <van-cell title="确认人" :label="taskInfo.confirm.executorName"></van-cell>
-            <van-cell v-show="taskInfo.confirm.executeStatus===1" title="审核结果" :label="taskInfo.confirm.description"></van-cell>
+            <van-cell title="处理意见" :label="taskInfo.confirm.executeStatus === 0 ? '确认' : '提出异议'"></van-cell>
+            <van-cell v-show="taskInfo.confirm.executeStatus===1" title="异议内容" :label="taskInfo.confirm.description"></van-cell>
+            <van-cell title="异议人" :label="taskInfo.confirm.executorName"></van-cell>
           </div>
         </van-panel>
       </div>
 
       <div class="card" v-if="taskInfo.confirmDissent" >
-        <van-panel title="审">
+        <van-panel title="审">
           <div class="panel-box">
             <van-cell title="审核结果" :label="taskInfo.confirmDissent.executeStatus === 0 ? '同意' : '不同意'"></van-cell>
-            <van-cell title="审核人" :label="taskInfo.confirmDissent.executorName"></van-cell>
+<!--            <van-cell title="审核人" :label="taskInfo.confirmDissent.executorName"></van-cell>-->
             <van-cell v-show="taskInfo.confirmDissent.executeStatus===1" title="原因" :label="taskInfo.confirmDissent.description"></van-cell>
           </div>
         </van-panel>
@@ -57,13 +57,13 @@
       <div class="card" v-if="taskInfo.reform" >
         <van-panel title="整改">
           <div class="panel-box">
-            <van-cell title="整改期" :label="formatDate(taskInfo.reform.executeTime,'YYYY-MM-DD')"></van-cell>
-            <van-cell title="审核结果" :label="taskInfo.reform.executeStatus === 0 ? '已整改' : '未整改'"></van-cell>
-            <van-cell title="审核结果" :label="taskInfo.reform.description"></van-cell>
+            <van-cell title="整改期" :label="formatDate(taskInfo.reform.executeTime,'YYYY-MM-DD')"></van-cell>
+<!--            <van-cell title="审核结果" :label="taskInfo.reform.executeStatus === 0 ? '已整改' : '未整改'"></van-cell>-->
+            <van-cell title="整改描述" :label="taskInfo.reform.description"></van-cell>
             <div class="upload-box" v-if="taskInfo.reform.images?.length > 0">
               <van-cell>
-                <div class="nfc-img van-hairline--surround" v-for="(v,i) in taskInfo.reform.images" :key="v.url" @click="clickImage(taskInfo.reform.images,i)">
-                  <img :src="imgUrl(v.url)" alt="" >
+                <div class="nfc-img van-hairline--surround" v-for="(v,i) in taskInfo.reform.images" :key="v" @click="clickImage(taskInfo.reform.images,i)">
+                  <img :src="imgUrl(v)" alt="" >
                 </div>
               </van-cell>
             </div>
@@ -80,19 +80,19 @@
               <van-cell-group>
                 <van-cell title="确认情况" clickable>
                   <template #right-icon>
-                    <van-radio :name="1" />
+                    <van-radio :name="0" />
                   </template>
                 </van-cell>
                 <van-cell title="提出异议" clickable>
                   <template #right-icon>
-                    <van-radio :name="0" />
+                    <van-radio :name="1" />
                   </template>
                 </van-cell>
               </van-cell-group>
             </van-radio-group>
 
             <van-field
-              v-show="!confirmData.status"
+              v-show="confirmData.status"
               v-model="confirmData.description"
               rows="1"
               autosize
@@ -113,19 +113,19 @@
               <van-cell-group>
                 <van-cell title="同意" clickable>
                   <template #right-icon>
-                    <van-radio :name="1" />
+                    <van-radio :name="0" />
                   </template>
                 </van-cell>
                 <van-cell title="不同意" clickable>
                   <template #right-icon>
-                    <van-radio :name="0" />
+                    <van-radio :name="1" />
                   </template>
                 </van-cell>
               </van-cell-group>
             </van-radio-group>
 
             <van-field
-              v-show="!confirmDissentData.status"
+              v-show="confirmDissentData.status"
               v-model="confirmDissentData.description"
               rows="1"
               autosize
@@ -142,7 +142,7 @@
       <div class="card" v-if="type === 'reform'">
         <van-panel title="整改">
           <div class="panel-box">
-            <select-cell required  title="整改期限" v-model="reformData.reformDate"  :data-list="getDictItem('rectification_deadline')" />
+            <date-cell required  title="整改日期" v-model="reformData.reformDate" dateType="date" />
             <van-field
               required
               v-model="reformData.description"
@@ -154,7 +154,7 @@
             <div class="upload-box" >
               <uploader :maxCount="5" v-model="reformData.images"/>
             </div>
-            <div class="big-btn-box" v-if="taskInfo.orgId==orgId && taskInfo.confirmStatus==2 && taskInfo.reformStatus==10">
+            <div class="big-btn-box" v-if="taskInfo.orgId==orgId && taskInfo.confirmStatus==2 && taskInfo.reformStatus!=11">
               <van-button  type="info" size="large"  @click="onSubmit('整改')">提交</van-button>
             </div>
           </div>
@@ -214,7 +214,7 @@ export default {
     formatDate,
     //图片预览
     clickImage(arr,i){
-      this.preViewImages.images = arr.map(v=>imgUrl(v.imgPath));
+      this.preViewImages.images = arr.map(v=>imgUrl(v));
       this.preViewImages.startPosition = i;
       ImagePreview(this.preViewImages);
     },
@@ -234,8 +234,16 @@ export default {
           data = this.reformData;
           queryMethod = reform;
       }
-      if(!data.reformDate || !data.description){
-        return this.$toast("请填写完整信息");
+      if(type === '确认' || type === '审核'){
+        if(!data.description) {
+          return this.$toast("请填写完整信息");
+        }
+      }else {
+        if(!data.reformDate || !data.description){
+          return this.$toast("请填写完整信息");
+        }
+        let img = data.images.map(v=>{return v.imgPath});
+        data.images = img.toString();
       }
       data.id = this.taskInfo.id;
       queryMethod(data).then((r) => {
@@ -282,6 +290,15 @@ export default {
   }
 }
 </script>
+
+<style lang="scss">
+//.question-edit{
+//  .van-panel__header{
+//    color:red
+//  }
+//}
+
+</style>
 <style lang="scss" scoped>
 
 .question-edit{
@@ -289,7 +306,7 @@ export default {
   overflow: hidden;
 }
 .page-container{
-  height: calc(100vh - 100px);
+  height: calc(100vh - 194px);
   overflow: auto;
   padding: 20px;
 }
@@ -305,6 +322,9 @@ export default {
   margin-bottom: 20px;
   box-shadow: 0 10px 10px #eaeaea;
 }
+.card:last-child{
+  margin-bottom: 0;
+}
 .panel-box{
   padding:0 20px;
 }

+ 73 - 64
src/views/menu/problemItem/index.vue

@@ -3,70 +3,70 @@
     <NavBar />
     <div class="page-container">
       <van-search v-model="query.searchKey" class="van-hairline--bottom" placeholder="请输入搜索关键词" />
-      <org-tree v-model="query.orgId"  @change="getDataList"></org-tree>
+      <org-tree v-model="query.orgId"  @change="refreshData"></org-tree>
       <div class="search-flex">
-        <select-cell class="van-hairline--right" title="确认状态" v-model="query.confirmStatus" :data-list="getDictItem('question_confirm_status')" @change="getDataList"/>
-        <date-cell title="发现日期"  v-model="query.submitTime" date-type="date" @change="getDataList"/>
+        <select-cell class="van-hairline--right" title="确认状态" v-model="query.confirmStatus" :data-list="getDictItem('question_confirm_status')" @change="refreshData"/>
+        <date-cell title="发现日期"  v-model="query.submitTime" date-type="date" @change="refreshData"/>
       </div>
       <div class="card-list">
-<!--        <van-list-->
-<!--          v-model="loading"-->
-<!--          :finished="finished"-->
-<!--          finished-text="没有更多了"-->
-<!--          @load="getDataList"-->
-<!--        >-->
-          <van-empty description="暂无数据" v-if="!dataList || dataList.length === 0" />
-            <template v-else>
-              <van-cell-group  v-for="(v,i) in dataList">
-                <van-cell :title="v.orgName">
-                  <template #extra>
-                    <van-button
-                      style="width: 60px;"
-                      v-if="v.orgId==orgId && v.confirmStatus==0"
-                      hairline
-                      size="mini"
-                      type="info"
-                      @click.stop="clickItem(v.id,'confirm')">
-                      隐患确认
-                    </van-button>
-                    <van-button
-                      style="width: 60px;"
-                      v-if="v.submitorId== id && v.confirmStatus==1"
-                      hairline
-                      size="mini"
-                      type="info"
-                      @click.stop="clickItem(v.id,'confirmDissent')">
-                      异议审批
-                    </van-button>
-                    <van-button
-                      style="width: 60px;"
-                      v-if="v.orgId==orgId && v.confirmStatus==2 && v.reformStatus==10"
-                      hairline
-                      size="mini"
-                      type="info"
-                      @click.stop="clickItem(v.id,'reform')">
-                      整改
-                    </van-button>
-                    <van-button
-                      style="width: 60px;"
-                      v-if="v.confirmStatus ===3"
-                      hairline
-                      size="mini"
-                      type="info"
-                      @click.stop="clickItem(v.id,'detail')">
-                      详情
-                    </van-button>
-                  </template>
-                  <template #label>
-                    <div class="info-box">
-                      <div class="info-desc">隐患描述:<span>{{v.questionDesc}}</span></div>
-                      <div class="info-item">发现日期:<span>{{v.submitTime}}</span></div>
-                    </div>
-                  </template>
-                </van-cell>
-              </van-cell-group>
-            </template>
-<!--        </van-list>-->
+        <van-empty description="暂无数据" v-if="!dataList || dataList.length === 0" />
+        <Scroll
+          v-else
+          @pulldown="refreshData"
+          @pullup="getDataList"
+          :data='dataList'
+          :pullup="pullup"
+          class="wrapper"
+          ref="wrapper">
+            <van-cell-group  v-for="(v,i) in dataList">
+              <van-cell :title="v.orgName">
+                <template #extra>
+                  <van-button
+                    style="width: 60px;"
+                    v-if="v.orgId==orgId && v.confirmStatus==0"
+                    hairline
+                    size="mini"
+                    type="info"
+                    @click.stop="clickItem(v.id,'confirm')">
+                    隐患确认
+                  </van-button>
+                  <van-button
+                    style="width: 60px;"
+                    v-if="v.submitorId== id && v.confirmStatus==1"
+                    hairline
+                    size="mini"
+                    type="info"
+                    @click.stop="clickItem(v.id,'confirmDissent')">
+                    异议审批
+                  </van-button>
+                  <van-button
+                    style="width: 60px;"
+                    v-if="v.orgId==orgId && v.confirmStatus==2 && v.reformStatus!=11"
+                    hairline
+                    size="mini"
+                    type="info"
+                    @click.stop="clickItem(v.id,'reform')">
+                    整改
+                  </van-button>
+                  <van-button
+                    style="width: 60px;"
+                    v-if="v.confirmStatus ===3"
+                    hairline
+                    size="mini"
+                    type="info"
+                    @click.stop="clickItem(v.id,'detail')">
+                    详情
+                  </van-button>
+                </template>
+                <template #label>
+                  <div class="info-box">
+                    <div class="info-desc">隐患描述:<span>{{v.questionDesc}}</span></div>
+                    <div class="info-item">发现日期:<span>{{v.submitTime}}</span></div>
+                  </div>
+                </template>
+              </van-cell>
+            </van-cell-group>
+        </Scroll>
       </div>
     </div>
   </div>
@@ -74,15 +74,17 @@
 <script>
 import NavBar from '@/components/NavBar'
 import OrgTree from '@/components/orgTree'
+import Scroll from '@/components/scroll/scroll'
 import dateCell from '@/components/dateCell'
 import selectCell from '@/components/selectCell'
-import {dataList,planList} from './api'
+import {dataList} from './api'
 import {mapGetters} from "vuex";
 import {formatDate} from "@/filters/filter";
 export default {
   components: {
     NavBar,
     OrgTree,
+    Scroll,
     dateCell,
     selectCell
   },
@@ -92,7 +94,7 @@ export default {
         submitTime:null,
         orgId:null,
         confirmStatus:'0',
-        pageSize:20,
+        pageSize:10,
         pageNum:1,
       },
       planList:[],
@@ -115,6 +117,7 @@ export default {
         { field: "finishRate", key: "d", title: "完成率", align: "center" },
       ],
       dataList:[],
+      pullup:false,
       dicts:['question_confirm_status','question_reform_status']
     }
   },
@@ -125,6 +128,12 @@ export default {
     ...mapGetters(['orgId','id','dictionary']),
   },
   methods: {
+    refreshData(){
+      this.query.pageNum = 1;
+      this.pullup = false;
+      this.dataList = [];
+      this.getDataList();
+    },
     //初始化数据
     initData(){
       this.query.orgId = this.orgId;
@@ -177,7 +186,7 @@ export default {
 }
 .card-list{
   padding: 20px;
-  height: calc(100vh - 420px);
+  height: calc(100vh - 518px);
   overflow:  auto;
 }
 .card-num{

+ 40 - 16
src/views/menu/securityCheckRegister/addCheck.vue

@@ -3,20 +3,20 @@
     <NavBar />
     <div class="addCheck-container">
       <div class="search-flex">
-        <van-search v-model="query.value" placeholder="请输入检查子项" />
-        <select-cell class="van-hairline--right" title="检查内容库" v-model="query.ruleId" :dataList="ruleList" :prop="prop" @change="getDataList"/>
+        <van-search v-model="query.key" placeholder="请输入检查子项"  @change="refreshData"/>
+        <select-cell class="van-hairline--right" title="选择检查内容库" v-model="query.ruleId" :dataList="ruleList" :prop="prop" @change="refreshData"/>
       </div>
       <div class="card-list">
         <Scroll
-          @pulldown="getDataList"
+          @pulldown="refreshData"
           @pullup="getDataList"
           :data='dataList'
           :pullup="pullup"
-          class="wrapper"
-          ref="wrapper">
+          class="wrapper">
           <van-empty description="暂无数据" v-if="!dataList || dataList.length === 0" />
           <div  v-else class="list-item">
             <van-cell
+              :class="{'active':item.checked}"
               v-for="(item, index) in dataList"
               clickable
               :key="item.id"
@@ -31,7 +31,7 @@
         </Scroll>
       </div>
       <div>
-        <van-button type="info" size="large" @click="addItem">确认选中</van-button>
+        <van-button  type="info" size="large" @click="addItem">确认选中</van-button>
       </div>
     </div>
   </div>
@@ -51,11 +51,12 @@ export default {
   },
   data(){
     return {
+      id:null,
       query:{
-        value:'',
+        key:'',
         ruleId:null,
         pageNum:1,
-        pageSize:10,
+        pageSize:2,
       },
       dataList:[],
       ruleList:[],
@@ -68,16 +69,30 @@ export default {
     }
   },
   mounted(){
+    this.id = this.$route.query.id;
     this.getCheckItem();
   },
   methods:{
+    refreshData(){
+      this.query.pageNum = 1;
+      this.pullup = false;
+      this.dataList = [];
+      this.getDataList();
+    },
     click(v,i){
       this.$set(this.dataList[i],'checked',!this.dataList[i].checked);
     },
     addItem(){
       this.selected = this.dataList.filter(v=>v.checked);
-      console.log(this.selected, 666)
-      this.$router.push({path:'/securityCheckRegister',params:{selected:this.selected}})
+      if(this.selected.length === 0) return this.$toast('请选择检查项');
+      sessionStorage.setItem('selected',JSON.stringify(this.selected));
+      this.$router.push({
+        path:'/securityDetail',
+        name:'securityDetail',
+        query:{
+          id:this.id,
+        },
+      })
     },
     getCheckItem(){
       let data = {orgType:4};
@@ -92,7 +107,14 @@ export default {
         res.rows.forEach(v=>{
           v.checked = false;
         });
-        this.dataList = res.rows
+        this.query.pageNum === 1 ? this.dataList = res.rows : this.dataList = [...this.dataList,...res.rows];
+        console.log(this.dataList.length,res.total,'this.dataList')
+        if(this.dataList.length < res.total){
+          this.pullup = true;
+          this.query.pageNum++;
+        }else {
+          this.pullup = false;
+        }
       })
     },
   }
@@ -101,10 +123,12 @@ export default {
 
 <style lang="scss" scoped>
 .addCheck{
-
-}
-.card-list{
-  height: calc(100vh - 424px);
-  overflow: auto;
+  .card-list{
+    height: calc(100vh - 424px);
+    overflow: auto;
+  }
+  .active{
+    color:#1989fa;
+  }
 }
 </style>

+ 128 - 5
src/views/menu/securityCheckRegister/addWorker.vue

@@ -1,13 +1,136 @@
 <template>
-
+  <div class="addWork">
+    <NavBar />
+    <div class="addWork-container">
+      <div class="search-flex">
+        <van-search v-model="query.name" placeholder="请输入姓名"  @change="refreshData"/>
+      </div>
+      <div class="card-list">
+        <Scroll
+          @pulldown="refreshData"
+          @pullup="getDataList"
+          :data='dataList'
+          :pullup="pullup"
+          class="wrapper"
+          ref="wrapper">
+          <van-empty description="暂无数据" v-if="!dataList || dataList.length === 0" />
+          <div v-else class="list-item">
+            <van-cell
+              :class="{'active':item.checked}"
+              v-for="(item, index) in dataList"
+              clickable
+              :key="item.id"
+              :title="item.name"
+              :value="item.orgName"
+              :label="item.phone || '无'"
+              @click="click(item,index)">
+            </van-cell>
+          </div>
+        </Scroll>
+      </div>
+      <div>
+        <van-button :disabled="!selected" type="info" size="large" @click="onSubmit">确认授权</van-button>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
+import NavBar from '@/components/NavBar'
+import Scroll from '@/components/scroll/scroll'
+import {workerList,accredit} from './api'
 export default {
-  name: "selectWorker"
+  components: {
+    NavBar,
+    Scroll,
+  },
+  data(){
+    return {
+      query:{
+        name:'',
+        orgId:null,
+        checkSub:true,
+        pageNum:1,
+        pageSize:10
+      },
+      formData:{
+        planId:null,
+        beCheckedOrgId:null,
+        taskId:null,
+        ymdDate:null,
+        userId:null,
+      },
+      dataList:[],
+      ruleList:[],
+      selected:null,
+      prop:{
+        label:'name',
+        value:'id'
+      },
+      pullup:false,
+    }
+  },
+  mounted(){
+    console.log(this.$route,'this.$route')
+    this.query.orgId = this.$route.query.orgId;
+    this.formData.planId = this.$route.query.planId;
+    this.formData.beCheckedOrgId = this.$route.query.beCheckedOrgId;
+    this.formData.taskId = this.$route.query.taskId;
+    this.formData.ymdDate = this.$route.query.ymdDate;
+    this.getDataList();
+  },
+  methods:{
+    onSubmit(){
+      this.formData.userId = this.selected;
+      accredit(this.formData).then(res=>{
+        this.$toast('授权成功');
+        this.$router.go(-2);
+      })
+    },
+    click(v,i){
+      this.dataList.forEach(v=>v.checked = false);
+      this.$set(this.dataList[i],'checked',!this.dataList[i].checked);
+      this.selected = v.id;
+    },
+    refreshData(){
+      this.query.pageNum = 1;
+      this.pullup = false;
+      this.dataList = [];
+      this.getDataList();
+    },
+    getDataList(){
+      workerList(this.query).then(res=>{
+        res.data.rows.forEach(v=>{
+          v.checked = false;
+        });
+        this.dataList = res.data.rows;
+      })
+    },
+  }
 }
 </script>
-
-<style scoped>
-
+<style lang="scss">
+.addWork{
+  .active{
+    color:#1989fa;
+    .van-cell__value{
+      color:#1989fa;
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.addWork{
+  .card-list{
+    height: calc(100vh - 300px);
+    overflow: auto;
+  }
+  .list-item{
+    padding:20px;
+  }
+  .active{
+    color:#1989fa;
+    border-left: 5px solid #1989fa;
+  }
+}
 </style>

+ 21 - 13
src/views/menu/securityCheckRegister/api.js

@@ -16,19 +16,10 @@ export function registerDetail(id){
   });
 }
 
-//查询机构可用的规范
+//保存提交
 export function registerSubmit(data){
   return request({
-    url: "/core/safetycheck/register/submit",
-    method: "post",
-    data
-  });
-}
-
-//查询授权
-export function registerGrant(data){
-  return request({
-    url: "/core/safetycheck/register/grant",
+    url: "/core/safetycheck/register/appsubmit",
     method: "post",
     data
   });
@@ -45,7 +36,7 @@ export function registerRole(orgId){
 //获取检查内容库
 export function checkItemList(params){
   return request({
-    url: "core/safetycheck/rule/ruleListForOrg",
+    url: "/core/safetycheck/rule/ruleListForOrg",
     method: "get",
     params
   });
@@ -53,9 +44,26 @@ export function checkItemList(params){
 //
 export function checkList(params){
   return request({
-    url: "core/safetycheck/ruleItem/pointSelectionPage",
+    url: "/core/safetycheck/ruleItem/pointSelectionPage",
     method: "get",
     params
   });
 }
 
+//授权人员列表
+export function workerList(params){
+  return request({
+    url: "/system/user/list",
+    method: "get",
+    params
+  });
+}
+
+//授权提交
+export function accredit(data){
+  return request({
+    url: "/core/safetycheck/register/grant",
+    method: "post",
+    data
+  });
+}

+ 205 - 205
src/views/menu/securityCheckRegister/detail.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="lz-edit">
+  <div class="register-edit">
     <nav-bar></nav-bar>
     <div class="page-container">
       <!--   基本信息   -->
@@ -8,12 +8,13 @@
           <van-cell title="日期时间" :value="rangDate(taskInfo.planstarttime,taskInfo.planendtime)" />
           <van-cell title="受检机构" :value="taskInfo.beCheckedOrgName" />
           <van-field
+            :disabled="!enable"
             v-model="taskInfo.checkTeam"
             label="检查组成员"
             rows="2"
             autosize
             type="textarea"
-            placeholder="请输入用户名" />
+            placeholder="请输入" />
         </van-panel>
       </div>
 
@@ -21,16 +22,17 @@
       <!--  检查项目    -->
       <fieldset class="fieldset"  :disabled="!enable">
         <div class="card" >
-          <p class="legend">检查项目 <span @click="addCheck">添加检查内容</span></p>
-          <van-collapse v-model="activeNames" v-for="v in checkList" :key="v.areaId">
+          <p class="legend">检查项目 <span v-if="enable" @click="addCheck">添加检查内容</span></p>
+          <van-collapse v-model="activeNames" v-for="v in checkList" :key="v.itemId">
             <van-collapse-item :title="v.itemName" :name="v.itemName" >
-              <div v-for="(item,index) in v.pointList" :key="item.itemId">
-                <van-cell :title="item.itemName">
+              <div v-for="(item,index) in v.pointList" :key="item.pointId">
+                <van-cell :title="item.pointName">
                   <template #right-icon>
+                    <img v-if="enable && item.nfcList.length > 0" :src="require('../../../assets/svg/NFC.svg')" class="nfc-icon" @click="clickNFC(item.nfcList)"/>
                     <van-switch
                       v-if="enable"
                       style="margin-left: 10px;"
-                      v-model="item.resvalue"
+                      v-model="item.status"
                       :active-value="1"
                       :inactive-value="0"
                       inactive-color="#4fc08d"
@@ -38,18 +40,22 @@
                       @change="switchChange(item)"
                       size="20" />
                     <span v-else>
-<!--                      <van-icon  v-if="item.resvalue" name="success" color="#07c160" />-->
-<!--                      <van-icon v-else name="fail" color="#ee0a24"/>-->
-                      <van-tag v-if="item.resvalue" type="warning">隐患</van-tag>
+                      <van-tag v-if="item.status" type="warning">隐患</van-tag>
                       <van-tag v-else type="success">正常</van-tag>
                     </span>
                   </template>
                 </van-cell>
-                <van-cell-group v-show="item.resvalue">
+                <van-cell-group v-show="item.status">
+                  <van-cell v-show="item.nfcList.length > 0" :border="false" >
+                    <div v-if="img.img" class="nfc-img" v-for="(img,i) in item.nfcList" :key="img.img" @click="preViewNFC(i)">
+                      <img :src="imgUrl(img.img)" alt="" >
+                      <span>{{img.checkName}}</span>
+                    </div>
+                  </van-cell>
                   <select-cell required :disabled="!enable" title="整改期限" v-model="item.rectificationDeadline"  :data-list="dayList" />
                   <van-field
                     required
-                    v-model="item.resremark"
+                    v-model="item.remark"
                     rows="1"
                     autosize
                     label="情况描述:"
@@ -80,7 +86,7 @@
         </div >
 
         <div v-if="enable" class="flex-box">
-          <van-button type="default" style="width: 30%;" plain  @click="goBack">授权</van-button>
+          <van-button type="default" style="width: 30%;" plain  @click="accredit">授权</van-button>
           <van-button type="info" style="width: 30%;" plain hairline @click="saveData">保存</van-button>
           <van-button type="info" style="width: 30%;"  @click="submitData">提交</van-button>
         </div>
@@ -108,10 +114,13 @@ import {getDict} from "@/api/toConsult";
 import {imgUrl} from "@/utils";
 import { ImagePreview } from 'vant';
 import {mapGetters} from "vuex";
+import taskInfo from "@/views/menu/monitoringCall/components/taskInfo";
 export default {
+  name:'securityDetail',
   components:{NavBar,SelectCell,DateCell,Uploader,NfcPopup},
   data(){
     return {
+      id:null,
       activeNames: ['1'],
       //基本信息
       taskInfo:[],
@@ -137,8 +146,56 @@ export default {
       },
       dicts:['safety_check_status'],
       showPreView:false,
+      selected:null,
     }
   },
+  beforeRouteEnter: (to, from, next) => {
+    if(from.name === 'addCheck'){
+      let str = sessionStorage.getItem('selected') ;
+      next(vm => {
+        vm.selected = JSON.parse(str);
+        sessionStorage.removeItem('selected');
+      })
+    }
+    next()
+  },
+  watch:{
+    selected:{
+      handler(val){
+        console.log(val,'val')
+        if(!val)return
+
+        val.forEach((valItem) => {
+          // 查找是否有与 valItem.itemId 相同的项
+          const existingItem = this.checkList.find((checkItem) => checkItem.itemId === valItem.itemId);
+
+          if (existingItem) {
+            // 如果存在相同 itemId 的项,查找 pointList 是否有与 valItem.pointId 相同的项
+            const existingPoint = existingItem.pointList.find((pointItem) => pointItem.pointId === valItem.id);
+
+            if (!existingPoint) {
+              console.log(existingItem,'point添加成功')
+              // 如果不存在相同 pointId 的项,将 valItem 添加到 pointList 中
+              existingItem.pointList.push({
+                pointId: valItem.id,
+                pointName: valItem.pointName,
+                mustCheck: valItem.checked ? 1 : 0,
+              });
+            }
+          } else {
+            console.log(valItem,'item添加成功')
+            // 如果不存在相同 itemId 的项,创建一个新的项并添加到 checkList 数组中
+            this.checkList.push({
+              itemId: valItem.itemId,
+              itemName: valItem.itemName,
+              pointList: [valItem],
+            });
+          }
+        });
+      },
+      deep:true
+    },
+  },
   computed:{
     ...mapGetters(['dictionary'])
   },
@@ -153,11 +210,12 @@ export default {
     })
   },
   mounted() {
+    this.id = this.$route.query.id;
     this.getData();
   },
   methods:{
     addCheck(){
-      this.$router.push({path:'/addCheckRegister'});
+      this.$router.push({path:'/addCheck',query:{id:this.id}});
     },
     clickWarnImage(arr,i){
       this.preViewImages.images = arr.map(v=>imgUrl(v.imgPath));
@@ -180,134 +238,77 @@ export default {
         this.taskInfo = res.data;
         this.enable = this.taskInfo.status === 1 || this.taskInfo.status === 2; //是否可编辑
         this.checkList = res.data.checkList;
+        //设置默认展开项
+        this.activeNames = this.checkList.map(v=>v.itemName);
       })
     },
     //保存数据
     saveData(){
-      let pointdata = [];
-      let checkNFC = [];
-      this.areaList.forEach(area=>{
-        area.nfclist.forEach(v=>{
-          if(v.status === 1){
-            checkNFC.push(v)
-          }
-        })
-        area.checklist.forEach(item=>{
-         item.checkitemlist.forEach(checkItem=>{
-            checkItem.protections = checkItem.protectionVo;
-            checkItem.resRemark = checkItem.resremark;
-            checkItem.resStatus = checkItem.resstatus;
-            checkItem.areaId = checkItem.areaid;
-            checkItem.id = checkItem.pointdataid;
-            checkItem.pointId = checkItem.pointid;
-            checkItem.resValue = checkItem.resvalue;
-            checkItem.resumptionId = this.$route.query.id;
-            pointdata.push(checkItem);
-          })
-        })
-      });
       //验证必填项
-      let arr = pointdata.filter(v=>{
-        if(v.resvalue === 1 ){
-          return !v.resremark || !v.rectificationDeadline
+      let pointData = [];
+      this.checkList.forEach(v=>{
+        v.pointList.forEach(item=>{
+          pointData.push(item);
+        })
+      })
+      let arr = pointData.filter(v=>{
+        if(v.status === 1 ){
+          return !v.remark || !v.rectificationDeadline
         }
       })
-      if(arr.length) return this.$toast(`${arr[0].areaname}-${arr[0].itemname}:信息不完整请填写`);
-      let data = {
-        dateTime:new Date(),
-        isSubmit:0,
-        resumptionId:this.$route.query.id,
-        year: this.taskInfo.year,
-        quarter: this.taskInfo.quarter,
-        nfcData:checkNFC,
-        pointdata,
-      }
-      saveTaskData(data).then(res=>{
-        this.$toast('提交成功');
+      if(arr.length) return this.$toast(`${arr[0].itemName}:该信息不完整请填写`);
+      //console.log( this.taskInfo,' this.taskInfo')
+      this.taskInfo.isSubmit = 0;
+      registerSubmit(this.taskInfo).then(res=>{
+        this.$toast('保存成功');
         this.$router.go(-1);
       })
     },
 
-
-    //获取当前区域检查项数量
-    getCheckItemNum(){
-      let num = 0;
-      this.selectArea.checklist.forEach(v=>{
-        num += v.checkitemlist.length;
-      });
-      this.checkNum = num;
-    },
-    //获取当前区域nfc数量
-    getNFCItemNum(){
-      let num = 0;
-      this.selectArea.nfclist.forEach(v=>{
-        if(v.status === 0 || !v.img){
-          num++;
-        }
-      })
-      this.NFCNum = num;
-    },
     //提交数据
     submitData(){
-      let pointdata = [];
-      let checkNFC = [];
-      this.areaList.forEach(area=>{
-        area.nfclist.forEach(v=>{
-          if(v.status === 1){
-            checkNFC.push(v)
-          }
-        })
-        area.checklist.forEach(item=>{
-          item.checkitemlist.forEach(checkItem=>{
-            checkItem.protections = checkItem.protectionVo;
-            checkItem.resRemark = checkItem.resremark;
-            checkItem.resStatus = checkItem.resstatus;
-            checkItem.areaId = checkItem.areaid;
-            checkItem.id = checkItem.pointdataid;
-            checkItem.pointId = checkItem.pointid;
-            checkItem.resValue = checkItem.resvalue;
-            checkItem.resumptionId = this.$route.query.id;
-            pointdata.push(checkItem);
-          })
-
+      //验证必填项
+      let pointData = [];
+      this.checkList.forEach(v=>{
+        v.pointList.forEach(item=>{
+          pointData.push(item);
         })
       })
-
-      //验证必填项
-      let arr = pointdata.filter(v=>{
-        if(v.resvalue === 1 ){
-          console.log(v,'验证')
-          return !v.resremark || !v.rectificationDeadline
+      let arr = pointData.filter(v=>{
+        if(v.status === 1 ){
+          return !v.remark || !v.rectificationDeadline
         }
       })
-      if(arr.length) return this.$toast(`${arr[0].areaname}-${arr[0].itemname}:信息不完整请填写`);
-
-      let data = {
-        dateTime:new Date(),
-        isSubmit:1,
-        resumptionId:this.$route.query.id,
-        year: this.taskInfo.year,
-        quarter: this.taskInfo.quarter,
-        nfcData:checkNFC,
-        pointdata,
-      }
-      saveTaskData(data).then(res=>{
+      if(arr.length) return this.$toast(`${arr[0].itemName}:该信息不完整请填写`);
+      //console.log( this.taskInfo,' this.taskInfo')
+      this.taskInfo.isSubmit = 1;
+      registerSubmit(this.taskInfo).then(res=>{
         this.$toast('提交成功');
         this.$router.go(-1);
       })
     },
 
-    //返回
-    goBack(){
-      this.$router.go(-1);
-      this.clearData();
+    //授权
+    accredit(){
+      let {checkOrgId,ymdDate,planId,beCheckedOrgId,id } = this.taskInfo;
+      console.log(checkOrgId,'checkOrgId')
+      this.$router.push({
+        path: '/addWorker',
+        query:{
+          orgId:checkOrgId,
+          ymdDate,
+          planId,
+          beCheckedOrgId,
+          taskId:id
+        }
+      });
     },
     //点击NFC图标
-    clickNFC(){
-      if(!this.NFCNum) return;
-      let arr = this.selectArea.nfclist.filter(item=>{
-        return item.status == 0;
-      })
+    clickNFC(arr){
+      //if(arr.length === 0) return;
+      // let arr = this.selectArea.nfclist.filter(item=>{
+      //   return item.status == 0;
+      // })
       this.$refs.NfcPopup.show(arr);
     },
     //清空数据
@@ -343,99 +344,98 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
-
-  .lz-edit{
+  .register-edit{
     height: 100%;
     overflow: hidden;
-  }
-  .page-container{
-    height: calc(100vh - 194px);
-    overflow: auto;
-    padding: 20px;
-  }
-  .flex-box{
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    >span{
-      margin: 0 20px;
+    .page-container{
+      height: calc(100vh - 194px);
+      overflow: auto;
+      padding: 20px;
     }
-  }
-  .legend{
-    background-color: #fff;
-    padding: 0 20px;
-    height: 80px;
-    line-height: 80px;
-    font-size: 30px;
-    display: flex;
-    justify-content: space-between;
-    >span{
+    .flex-box{
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      >span{
+        margin: 0 20px;
+      }
+    }
+    .legend{
+      background-color: #fff;
+      padding: 0 20px;
+      height: 80px;
+      line-height: 80px;
+      font-size: 30px;
+      display: flex;
+      justify-content: space-between;
+      >span{
+        color: orange;
+      }
+    }
+    .card{
+      margin-bottom: 20px;
+      box-shadow: 0 10px 10px #eaeaea;
+    }
+    .check-area{
+      background-color: #f1f1f1;
+      margin: 10px;
+      padding:20px;
+      color:#aaa;
+      border-radius: 6px;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      box-shadow: 0 2px 6px #ddd;
+    }
+    .nfc-icon{
+      width: 50px;
+      height: 50px;
+      margin-left: 20px;
+    }
+    .custom-title {
+      align-self: center;
+      vertical-align: middle;
+    }
+    .upload-box{
+      margin: 30px;
+    }
+    .warning-msg{
       color: orange;
+      text-align: center;
+      height: 80px;
+      line-height: 80px;
     }
-  }
-  .card{
-    margin-bottom: 20px;
-    box-shadow: 0 10px 10px #eaeaea;
-  }
-  .check-area{
-    background-color: #f1f1f1;
-    margin: 10px;
-    padding:20px;
-    color:#aaa;
-    border-radius: 6px;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    box-shadow: 0 2px 6px #ddd;
-  }
-  .nfc-icon{
-    width: 50px;
-    height: 50px;
-    margin-left: 20px;
-  }
-  .custom-title {
-    align-self: center;
-    vertical-align: middle;
-  }
-  .upload-box{
-    margin: 30px;
-  }
-  .warning-msg{
-    color: orange;
-    text-align: center;
-    height: 80px;
-    line-height: 80px;
-  }
-  .active{
-    color: #fff;
-    background-color: #1989fa;
-  }
-  .nfc-img{
-    display: inline-block;
-    width: 140px;
-    height: 140px;
-    margin: 0 10px;
-    position: relative;
-    >img{
-      width: 100%;
-      height: 100%;
-      border: none;
+    .active{
+      color: #fff;
+      background-color: #1989fa;
     }
-    >span{
-      position: absolute;
-      padding: 0 10px;
-      bottom: 0;
-      left: 0;
-      display: block;
-      width: 100%;
-      background-color: rgba(0,0,0,.2 );
-      color: #eaeaea;
-      font-size: 20px;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      white-space: nowrap;
-      line-height: 30px;
-      height: 30px;
+    .nfc-img{
+      display: inline-block;
+      width: 140px;
+      height: 140px;
+      margin: 0 10px;
+      position: relative;
+      >img{
+        width: 100%;
+        height: 100%;
+        border: none;
+      }
+      >span{
+        position: absolute;
+        padding: 0 10px;
+        bottom: 0;
+        left: 0;
+        display: block;
+        width: 100%;
+        background-color: rgba(0,0,0,.2 );
+        color: #eaeaea;
+        font-size: 20px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        line-height: 30px;
+        height: 30px;
+      }
     }
   }
 </style>

+ 59 - 59
src/views/menu/securityCheckRegister/index.vue

@@ -10,7 +10,7 @@
 <!--              <div class="org-label">检查机构</div>-->
 <!--            </van-col>-->
             <van-col span="24">
-              <org-tree v-model="query.checkOrgId" placeholder="选择检查机构" @change="getDataList"></org-tree>
+              <org-tree v-model="query.checkOrgId" placeholder="选择检查机构" @change="refreshData"></org-tree>
             </van-col>
           </van-row>
         </div>
@@ -20,23 +20,23 @@
 <!--              <div class="org-label">受检机构</div>-->
 <!--            </van-col>-->
             <van-col span="24">
-              <org-tree v-model="query.beCheckedOrgId" clearable placeholder="选择受检机构" @change="getDataList"></org-tree>
+              <org-tree v-model="query.beCheckedOrgId" clearable placeholder="选择受检机构" @change="refreshData"></org-tree>
             </van-col>
           </van-row>
         </div>
       </div>
 
       <div class="van-hairline--bottom">
-        <search-select-cell title="检查角色" v-model="query.roldIds" :dataList="rolesList" :prop="prop" @change="getDataList"/>
+        <search-select-cell title="检查角色" v-model="query.roldIds" :dataList="rolesList" :prop="prop" @change="refreshData"/>
       </div>
       <div class="van-hairline--bottom">
-        <date-cell title="检查日期"  v-model="query.taskTime" date-type="date" @change="getDataList"/>
+        <date-cell title="检查日期"  v-model="query.taskTime" date-type="date" @change="refreshData"/>
 <!--        <select-cell title="状态" v-model="query.state" :dataList="getDictItem('safety_check_status')" @change="getDataList"/>-->
       </div>
 
       <div class="card-list">
         <Scroll
-          @pulldown="getDataList"
+          @pulldown="refreshData"
           @pullup="getDataList"
           :data='dataList'
           :pullup="pullup"
@@ -176,13 +176,16 @@ export default {
   },
   methods: {
     formatDate,
-    changeList(item,type,event){
-      console.log(item,'eeeeeee')
+    changeList(item,type){
       this.$set(item,'active',type);
     },
-
+    refreshData(){
+      this.query.pageNum = 1;
+      this.pullup = false;
+      this.dataList = [];
+      this.getDataList();
+    },
     initData(){
-      console.log('getDataList');
       this.query.checkOrgId = this.orgId;
       this.query.taskTime = formatDate(new Date(),'YYYY-MM-DD');
       this.getDataList();
@@ -193,7 +196,6 @@ export default {
       })
     },
     getDataList(){
-      console.log('getDataList')
       let data = {
         ...this.query
       }
@@ -203,7 +205,6 @@ export default {
           v.active = 1
           return v
         });
-        console.log(this.dataList,'ressssssss')
       })
     }
   }
@@ -225,59 +226,58 @@ export default {
 </style>
 <style lang="scss" scoped>
 .check-register{
-
-}
-.org-line{
-  padding:0 10px;
-  background-color: #fff;
-}
-.org-label{
-  height: 90px;
-  width: 100%;
-  display: flex;
-  align-items: center;
-  font-size: 28px;
-}
-.card-list{
-  height: calc(100vh - 580px);
-  overflow: auto;
-}
-.list-item{
-  padding: 20px;
-}
-.card-num{
-  display: flex;
-  align-items: center;
-  font-size: 28px;
-  color: #009dff;
-}
-.collapse-title{
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  font-size: 28px;
-  color: #ccc;
-  >div{
-    width: 40%;
+  .org-line{
+    padding:0 10px;
+    background-color: #fff;
+  }
+  .org-label{
+    height: 90px;
+    width: 100%;
     display: flex;
+    align-items: center;
+    font-size: 28px;
+  }
+  .card-list{
+    height: calc(100vh - 580px);
+    overflow: auto;
   }
-  >div.active{
+  .list-item{
+    padding: 20px;
+  }
+  .card-num{
+    display: flex;
+    align-items: center;
+    font-size: 28px;
     color: #009dff;
   }
-}
-.flex-box{
-  display: flex;
-  align-items: center;
-  >div{
-    margin-right: 40px;
+  .collapse-title{
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    font-size: 28px;
+    color: #ccc;
+    >div{
+      width: 40%;
+      display: flex;
+    }
+    >div.active{
+      color: #009dff;
+    }
   }
-}
-.search-box{
- display: flex;
-  justify-content: space-between;
-  align-items: center;
-  >div{
-    width: 50%;
+  .flex-box{
+    display: flex;
+    align-items: center;
+    >div{
+      margin-right: 40px;
+    }
+  }
+  .search-box{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    >div{
+      width: 50%;
+    }
   }
 }
 </style>