coys 2 年之前
父节点
当前提交
51f5b8903c

+ 1 - 1
src/api/drillTask.js

@@ -1,4 +1,4 @@
-// 调阅相关接口
+// 演练相关接口
 import request from '@/utils/request'
 
 

+ 10 - 1
src/api/training.js

@@ -1,4 +1,4 @@
-// 调阅相关接口
+// 教育培训相关接口
 import request from '@/utils/request'
 
 
@@ -11,6 +11,15 @@ export function gettrainingList(query) {
     params:query
   })
 }
+// 获取学习资料列表
+export function materialsFileList(data) {
+  return request({
+    url: '/core/materials/fileList',
+    
+    method: 'post',
+   data
+  })
+}
 //获取任务登记详情
 export function gettrainingInfo(query) {
   return request({

+ 152 - 0
src/components/list.vue

@@ -0,0 +1,152 @@
+<template>
+    <div class="resumption" ref="container">
+        <van-cell-group>
+           <van-field v-model="fileUrl" label="文件地址" placeholder="请输入文件地址" />
+           <van-field v-model="type" label="文件名称" placeholder="请输入文件名" />
+        </van-cell-group>
+        <van-button type="default" @click="openFilePreview">文件预览</van-button>
+
+        <van-button type="primary" @click="useNFC">NFC读取</van-button>
+        <van-button type="warning" @click="useCamera(1)">调用相机</van-button>
+        <van-button type="danger" @click="useCamera(2)">调用相册</van-button>
+    </div>
+  </template>
+  
+  <script>
+  import NavBar from '@/components/NavBar';
+  import {mapGetters} from "vuex";
+  import dayjs from "dayjs";
+  export default {
+    name: 'resumption',
+    components:{NavBar},
+    data(){
+      return{
+        //绑定的日期
+        fileUrl:"",
+        fileName:null,
+        result:null,
+        date:'',
+        show:false,
+        //设置浮动的容器
+        container: null,
+        //配置子页面路径
+        path:'/lz-edit',
+  
+      }
+    },
+    created() {
+    },
+    mounted() {
+      window.openNFCScanCallBack = this.openNFCScanCallBack;
+      window.openCameraCallBack = this.openCameraCallBack;
+    },
+    computed:{
+    },
+    methods:{  
+      useCamera(actionType){
+          let parms = {};
+          if(actionType){
+            parms.actionType = actionType;
+          }
+          let system = this.isAndroidOrIos();
+          if(system === 1){
+            //android
+            // 判断当前环境是是否存在 js桥 'sap'
+            const hasSap = window.hasOwnProperty('sap');
+            if (hasSap) {
+              // 判断是否存在方法 ?preview
+              const fun = sap.hasOwnProperty('openCamera');
+              if (fun) {
+                sap.openCamera(JSON.stringify(parms));
+              }
+            }
+          }
+
+          if(system === 2){
+            //ios
+            // 判断 ios是否存在方法 preview
+            const preview = window.webkit.messageHandlers.hasOwnProperty('openCamera')
+            if (preview) {
+              window.webkit.messageHandlers.openCamera.postMessage(JSON.stringify(parms))
+            }
+          }
+      },
+      openCameraCallBack(data){
+        alert(data);
+      },
+      useNFC(){
+        let system = this.isAndroidOrIos();
+        const parms = {
+            "iOS_SessionType":"0"
+        };
+        if(system === 1){
+          //android
+          // 判断当前环境是是否存在 js桥 'sap'
+          const hasSap = window.hasOwnProperty('sap');
+          if (hasSap) {
+            // 判断是否存在方法 ?preview
+            const fun = sap.hasOwnProperty('openNFCScan');
+            if (fun) {
+              sap.openNFCScan(JSON.stringify(parms));
+            }
+          }
+        }
+
+        if(system === 2){
+          //ios
+          // 判断 ios是否存在方法 preview
+          const fun = window.webkit.messageHandlers.hasOwnProperty('openNFCScan')
+          if (fun) {
+            window.webkit.messageHandlers.openNFCScan.postMessage(JSON.stringify(parms))
+          }
+        }
+      },
+      openNFCScanCallBack(data){
+        alert(data);
+      },
+      openFilePreview(){
+        let system = this.isAndroidOrIos;
+        const parms = {
+            "url":this.fileUrl,
+            "name":this.fileName
+        };
+        if(system === 1){
+          //android
+          // 判断当前环境是是否存在 js桥 'sap'
+          const hasSap = window.hasOwnProperty('sap');
+          if (hasSap) {
+            // 判断是否存在方法 ?preview
+            const fun = sap.hasOwnProperty('preview');
+            if (fun) {
+              sap.preview(JSON.stringify(parms));
+            }
+          }
+        }
+
+        if(system === 2){
+          //ios
+          // 判断 ios是否存在方法 preview
+          const fun = window.webkit.messageHandlers.hasOwnProperty('preview')
+          if (fun) {
+            window.webkit.messageHandlers.preview.postMessage(JSON.stringify(parms))
+          }
+        }
+      },
+      isAndroidOrIos(){
+        const urls = navigator.userAgent;
+        let isAndroid = urls.indexOf('Android') > -1 || urls.indexOf('Linux') > -1;
+        let isIos = !!urls.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
+        if(isAndroid){
+          return 1;
+        }
+        if(isIos){
+          return 2;
+        }
+      },
+    }
+  }
+  </script>
+  <style lang="scss">
+ 
+  </style>
+  

+ 27 - 0
src/components/upload/fileList.vue

@@ -0,0 +1,27 @@
+<template>
+    <div>
+        
+    </div>
+</template>
+<script>
+export default {
+    name: 'SocAppFileList',
+
+    data() {
+        return {
+            
+        };
+    },
+
+    mounted() {
+        
+    },
+
+    methods: {
+        
+    },
+};
+</script>
+<style lang="scss" scoped>
+    
+</style>

+ 2 - 0
src/components/upload/index.vue

@@ -1,6 +1,7 @@
 <template>
     <div>
         <van-uploader
+        accept=""
           ref="uploader"
           v-bind="$attrs"
           v-model="fileList"
@@ -46,6 +47,7 @@ export default {
     watch:{
       value:{
         handler(val){
+          console.log(val,'sssssss');
           this.imageList= this.fileList = val.map(v=>{
 
             let imgUrl =

+ 6 - 0
src/views/home/works.vue

@@ -322,4 +322,10 @@ a {
   color: inherit;
   margin-right: 10px;
 }
+.van-step--horizontal:last-child{
+  left: 1px;
+}
+::v-deep.van-step--horizontal:last-child .van-step__circle-container{
+  display: none;
+}
 </style>

+ 3 - 0
src/views/menu/monitoringCall/components/taskInfo.vue

@@ -11,6 +11,9 @@
             <van-col span="24">
               <div class="text">{{ videoChannelName }}</div>
             </van-col>
+            <van-col span="24">
+              <div class="text">{{ videoChannelName }}</div>
+            </van-col>
           </van-row>
           <!-- //主体内容 -->
           <div class="mainBox">

+ 1 - 1
src/views/menu/rehearsalTask/components/dialog.vue

@@ -162,7 +162,7 @@ export default {
       this.$emit('checkList', list)
     },
     checkedHandler(id){
-      console.log(id);
+      
       this.result.push(id)
     }
   }

+ 131 - 36
src/views/menu/training/components/addTraining.vue

@@ -4,13 +4,13 @@
     <van-form class="bigbox" ref="form">
       <div class="mainItem">
         <div class="label">标题</div>
-        <div >{{ trainingData.title }}</div>
+        <div>{{ trainingData.title }}</div>
       </div>
       <div class="mainItem">
         <div class="label">单位名称</div>
-        <div >{{ trainingData.orgName }}</div>
+        <div>{{ trainingData.orgName }}</div>
       </div>
-      <van-field
+      <!-- <van-field
         readonly
         clickable
         required
@@ -23,7 +23,7 @@
       />
       <van-popup v-model="showPicker" position="bottom">
         <van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
-      </van-popup>
+      </van-popup> -->
       <!-- 培训开始时间 -->
       <van-field
         readonly
@@ -64,17 +64,23 @@
           @cancel="showEndDate = false"
         />
       </van-popup>
-      <div class="mainItem">
-      <div class="label labelPeople">培训资料</div>
-      <!-- <PDFAndImgLook ref="PDFAndImgLook" :studyList="studyList"></PDFAndImgLook> -->
-      
-      <template v-for="item in studyList">
-        <div :key="item.url" class="imglIST" style="{width:'100px',height: '100px';}" @click="clikHadner">
-          <imgCom  :width="'100'" v-if="item.url&&item.type==0"  :height="'100'" :src="item.url"></imgCom>
-          <VuePdf  v-else  :src="item.url"></VuePdf>
+
+      <!-- <van-button type="info">从学习资料选取</van-button> -->
+      <div class="mainItem mainItemData">
+        <p class="label labelPeople">培训资料</p>
+        <div>
+          <template v-for="item in studyList">
+            <van-tag type="primary" :key="item.name" class="tagCls" plain @click="tagHandler(item)">{{
+              item.name
+            }}</van-tag>
+          </template>
         </div>
-      </template>
-    </div>
+      </div>
+      <van-field label="">
+        <template #input>
+          <van-button type="info" size="small" @click="selectData">从学习资料选取</van-button>
+        </template>
+      </van-field>
       <!-- 培训内容 -->
       <van-field
         required
@@ -106,7 +112,6 @@
 
       <!-- 必填 -->
       <CheckPeople
-        ref="checkPeople"
         :userList="userPeopleList"
         :organizationId="trainingData.orgId"
         :isRequired="true"
@@ -114,7 +119,6 @@
       ></CheckPeople>
       <!-- 缺席人员 -->
       <CheckPeople
-        ref="checkPeople"
         :userList="lackPeopleList"
         :inpitLabel="'缺席人员'"
         :organizationId="trainingData.orgId"
@@ -131,15 +135,18 @@
         <van-button type="info" @click="submitHandler(1)">保存</van-button>
         <van-button type="info" @click="submitHandler(2)">提交</van-button>
       </div>
+      <!-- 选择资料 -->
+      <SelectData ref="SelectData" :organizationId="trainingData.orgId" @dataList="dataList"></SelectData>
     </van-form>
   </div>
 </template>
 <script>
 import NavBar from '@/components/NavBar'
 import CheckPeople from '@/components/peopleList/index.vue'
+import SelectData from './selectData.vue'
 import Upload from '@/components/upload/index.vue'
-import imgCom from '@/components/imgCom/index.vue'
-import VuePdf from "@/components/pdfCom/index.vue"
+// import imgCom from '@/components/imgCom/index.vue'
+// import VuePdf from '@/components/pdfCom/index.vue'
 import { gettrainingInfo, edittrainingInfo } from '@/api/training.js'
 import { newDateTime } from '@/utils/date.js'
 import { Dialog, Toast } from 'vant'
@@ -147,18 +154,18 @@ import PDFAndImgLook from '@/components/imgAndPDF/index.vue'
 export default {
   name: 'SocAppAddTraining',
   components: {
-    VuePdf,
+    SelectData,
+
     NavBar,
     PDFAndImgLook,
-    imgCom,
+    // imgCom,
     Upload,
     CheckPeople
   },
   data() {
     return {
-      
-      current:0,
-      this_window:window,
+      current: 0,
+      this_window: window,
       studyList: [], //学习资料数组
       startDateTime: new Date(),
       endDateTime: new Date(),
@@ -196,13 +203,14 @@ export default {
         let newlist = data.fileList || []
         if (newlist.length > 0) {
           newlist.forEach(item => {
-           let i=JSON.parse(item)
-           console.log(i);
-            if(i.url.split('.')[1]=='pdf'){
-              i.type=1
-            }else{
-              i.type=0
+            let i = JSON.parse(item)
+
+            if (i.url.split('.')[1] == 'pdf') {
+              i.type = 1
+            } else {
+              i.type = 0
             }
+            i.path = i.url
             this.studyList.push(i)
           })
         }
@@ -246,14 +254,18 @@ export default {
   mounted() {},
 
   methods: {
-    clikHadner(){
-      this.$refs.PDFAndImgLook.show=true
+    //从资料里选取
+    selectData() {
+      this.$refs.SelectData.show = true
+    },
+    clikHadner() {
+      this.$refs.PDFAndImgLook.show = true
     },
     onChange(index) {
       this.current = index
     },
     // 查看pdf
-    
+
     onSubmit(values) {
       console.log('submit', values)
       Dialog.confirm({
@@ -314,7 +326,7 @@ export default {
     },
     //上传附件成功
     listHandler(list) {
-      console.log(list,'mmmm');
+      console.log(list, 'mmmm')
       this.form.imageList = list || []
     },
     //表单提交前校验
@@ -398,9 +410,9 @@ export default {
       let obj = JSON.parse(JSON.stringify(this.form))
 
       obj.imageList = obj.imageList.map(item => item.path).join(',')
-      console.log(obj.imageList);
+      console.log(obj.imageList)
       obj.taskUserList = []
-      
+
       obj.taskUserList.push(...this.userPeopleList, ...this.lackPeopleList)
 
       edittrainingInfo({
@@ -418,6 +430,76 @@ export default {
           Toast(msg)
         }
       })
+    },
+    dataList(list) {
+      console.log(list)
+      let copyList = JSON.parse(JSON.stringify(this.studyList)).map(item=>item.name)
+      let ArrItem=[]
+        for (let index = 0; index < copyList.length; index++) {
+          const element = copyList[index];
+        
+          ArrItem.push(...list.filter(item => item.name !== element));
+        }
+        this.studyList=ArrItem
+        console.log(this.studyList);
+
+    },
+    tagHandler(i) {
+      let str = i.name.split('.')[1]
+      if (str == 'png' || str == 'jpg' || str == 'jpeg' || str == 'pdf') {
+        //当前是图片||PDF
+        this.openFilePreview(i)
+      } else {
+        const filePath = `${process.env.NODE_ENV === 'development' ? '/dev' : window.origin}${i.url}`
+        const tempLink = document.createElement('a')
+        tempLink.style.display = 'none'
+        tempLink.href = filePath
+        tempLink.setAttribute('download', i.name)
+        tempLink.setAttribute('target', '_blank')
+        document.body.appendChild(tempLink)
+        tempLink.click()
+        document.body.removeChild(tempLink)
+      }
+    },
+    openFilePreview(item) {
+      
+      let system = this.isAndroidOrIos
+      const parms = {
+        url: item.url,
+        name: item.name
+      }
+      if (system === 1) {
+        //android
+        // 判断当前环境是是否存在 js桥 'sap'
+        const hasSap = window.hasOwnProperty('sap')
+        if (hasSap) {
+          // 判断是否存在方法 ?preview
+          const fun = sap.hasOwnProperty('preview')
+          if (fun) {
+            sap.preview(JSON.stringify(parms))
+          }
+        }
+      }
+
+      if (system === 2) {
+        //ios
+        // 判断 ios是否存在方法 preview
+        const fun = window.webkit.messageHandlers.hasOwnProperty('preview')
+        if (fun) {
+          window.webkit.messageHandlers.preview.postMessage(JSON.stringify(parms))
+        }
+      }
+    },
+    isAndroidOrIos() {
+      const urls = navigator.userAgent
+      let isAndroid = urls.indexOf('Android') > -1 || urls.indexOf('Linux') > -1
+      let isIos = !!urls.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
+      if (isAndroid) {
+        return 1
+      }
+      if (isIos) {
+        return 2
+      }
     }
   }
 }
@@ -426,19 +508,28 @@ export default {
 .mainItem {
   display: flex;
   font-size: 28px;
+  align-items: center;
   padding: 34px;
   justify-content: space-between;
   background-color: #fff;
+  flex-wrap: wrap;
   div {
     flex: 1;
     text-align: left;
   }
+  p {
+  }
   .label {
     width: 200px;
     flex: none;
-    text-align: left;
+  }
+  .labelPeople {
+    margin-bottom: 20px;
   }
 }
+.mainItemData {
+  justify-content: end;
+}
 .bigbox {
   height: calc(100vh - 200px);
   overflow: scroll;
@@ -461,4 +552,8 @@ export default {
     margin-left: 50px;
   }
 }
+.tagCls {
+  margin-bottom: 20px;
+  margin-left: 10px;
+}
 </style>

+ 108 - 40
src/views/menu/training/components/personnelSignature.vue

@@ -10,10 +10,10 @@
       <div class="label">单位名称</div>
       <div>{{ trainingData.orgName }}</div>
     </div>
-    <div class="mainItem">
+    <!-- <div class="mainItem">
       <div class="label">培训类型</div>
       <div>{{ trainingData.typeText }}</div>
-    </div>
+    </div> -->
     <div class="mainItem">
       <div class="label">培训开始时间</div>
       <div>{{ trainingData.trainingStartDateTime }}</div>
@@ -30,18 +30,16 @@
       <div class="label">记录人</div>
       <div>{{ trainingData.recorderName }}</div>
     </div>
-    <div class="mainItem">
-      
-      <div class="label labelPeople">培训资料</div>
-      <template v-for="item in studyList">
-        <div :key="item.url" class="imglIST" style="{width:'100px',height: '100px';}">
-
-          <imgCom :width="'100'"  v-if="item.url&&item.type==0"  :height="'100'" :src="item.url"></imgCom>
-          <!-- <VuePdf v-else :src="item.url"></VuePdf> -->
-          <VuePdf v-else  :src="item.url"></VuePdf>
+    <div class="mainItem mainItemData">
+        <p class="label labelPeople">培训资料</p>
+        <div>
+          <template v-for="item in studyList">
+            <van-tag type="primary" :key="item.name" class="tagCls" plain @click="tagHandler(item)">{{
+              item.name
+            }}</van-tag>
+          </template>
         </div>
-      </template>
-    </div>
+      </div>
     <div class="mainItem">
       <div class="label">培训内容</div>
       <div>{{ trainingData.content }}</div>
@@ -90,21 +88,21 @@ import NavBar from '@/components/NavBar'
 import writingPad from '@/components/writingPad/index.vue'
 import { gettrainingInfo, signtrainingInfo } from '@/api/training.js'
 import { upload } from '@/api/public'
-import imgCom from '@/components/imgCom/index.vue'
+// import imgCom from '@/components/imgCom/index.vue'
 import { base64ToBlob } from '@/utils/base64TurnImg.js'
 import config from '@/config/index'
-import VuePdf from "@/components/pdfCom/index.vue"
+// import VuePdf from '@/components/pdfCom/index.vue'
 export default {
   name: 'SocAppAddTraining',
   components: {
     NavBar,
-    VuePdf,
-    imgCom,
+    // VuePdf,
+    // imgCom,
     writingPad
   },
   data() {
     return {
-      this_window:window,
+      this_window: window,
       show: false,
       taskUserList: [], //参与人员
       qsUserList: [], //缺席人员
@@ -120,34 +118,38 @@ export default {
       let { code, data, msg } = res
       if (code == 200) {
         this.trainingData = data
-        this.trainingData.taskUserList.map(item => {
-          if (item.type == 1) {
-            this.taskUserList.push(item.userName)
-          }
-        })
+
+        if (this.trainingData.taskUserList && this.trainingData.taskUserList.length > 0) {
+          this.trainingData.taskUserList.forEach(item => {
+            if (item.type == 1) {
+              this.taskUserList.push(item.userName)
+            } else {
+              this.qsUserList.push(item.userName)
+            }
+          })
+        }
+
         this.taskUserList = this.taskUserList.join(',')
-        this.trainingData.taskUserList.map(item => {
-          if (item.type == 2) {
-            this.qsUserList.push(item.userName)
-          }
-        })
+        
         this.qsUserList = this.qsUserList.join(',')
+
         this.signUserList = data.taskUserList || []
+
         let list = data.fileList || []
         if (list.length > 0) {
           list.forEach(item => {
-           let i=JSON.parse(item)
-           console.log(i);
-            if(i.url.split('.')[1]=='pdf'){
-              i.type=1
-            }else{
-              i.type=0
+            let i = JSON.parse(item)
+            console.log(i)
+            if (i.url.split('.')[1] == 'pdf') {
+              i.type = 1
+            } else {
+              i.type = 0
             }
             this.studyList.push(i)
           })
         }
-        
-        this.imgList = this.trainingData.imageList.split(',') || []
+
+        this.imgList = this.trainingData.imageList?.split(',') || []
       }
     })
   },
@@ -193,6 +195,63 @@ export default {
       }).then(res => {
         this.$router.push('/training')
       })
+    },
+    tagHandler(i) {
+      let str = i.name.split('.')[1]
+      if (str == 'png' || str == 'jpg' || str == 'jpeg' || str == 'pdf') {
+        //当前是图片||PDF
+        this.openFilePreview(i)
+      } else {
+        const filePath = `${process.env.NODE_ENV === 'development' ? '/dev' : window.origin}${i.url}`
+        const tempLink = document.createElement('a')
+        tempLink.style.display = 'none'
+        tempLink.href = filePath
+        tempLink.setAttribute('download', i.name)
+        tempLink.setAttribute('target', '_blank')
+        document.body.appendChild(tempLink)
+        tempLink.click()
+        document.body.removeChild(tempLink)
+      }
+    },
+    openFilePreview(item) {
+      
+      let system = this.isAndroidOrIos
+      const parms = {
+        url: item.url,
+        name: item.name
+      }
+      if (system === 1) {
+        //android
+        // 判断当前环境是是否存在 js桥 'sap'
+        const hasSap = window.hasOwnProperty('sap')
+        if (hasSap) {
+          // 判断是否存在方法 ?preview
+          const fun = sap.hasOwnProperty('preview')
+          if (fun) {
+            sap.preview(JSON.stringify(parms))
+          }
+        }
+      }
+
+      if (system === 2) {
+        //ios
+        // 判断 ios是否存在方法 preview
+        const fun = window.webkit.messageHandlers.hasOwnProperty('preview')
+        if (fun) {
+          window.webkit.messageHandlers.preview.postMessage(JSON.stringify(parms))
+        }
+      }
+    },
+    isAndroidOrIos() {
+      const urls = navigator.userAgent
+      let isAndroid = urls.indexOf('Android') > -1 || urls.indexOf('Linux') > -1
+      let isIos = !!urls.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
+      if (isAndroid) {
+        return 1
+      }
+      if (isIos) {
+        return 2
+      }
     }
   }
 }
@@ -201,23 +260,32 @@ export default {
 .mainItem {
   display: flex;
   font-size: 28px;
+  align-items: center;
   padding: 34px;
   justify-content: space-between;
   background-color: #fff;
-  overflow: scroll;
+  flex-wrap: wrap;
   div {
     flex: 1;
-    text-align: right;
+    text-align: left;
+  }
+  p {
   }
   .label {
     width: 200px;
     flex: none;
-    text-align: left;
   }
   .labelPeople {
-    width: 300px;
+    margin-bottom: 20px;
   }
 }
+.mainItemData {
+  justify-content: end;
+}
+.tagCls {
+  margin-bottom: 20px;
+  margin-left: 10px;
+}
 .btns {
   background-color: #fff;
   width: 100%;

+ 233 - 0
src/views/menu/training/components/selectData.vue

@@ -0,0 +1,233 @@
+<template>
+  <div>
+    <van-action-sheet class="bigsheetbox" v-model="show" position="bottom" title="选择资料">
+      <van-row>
+        <van-col span="24">
+          <!-- <van-search v-model="searchVal" placeholder="请输入搜索关键词" /> -->
+          <van-search v-model="searchVal" placeholder="请输入搜索关键词" clearable @input="onSearch" />
+        </van-col>
+      </van-row>
+
+      <van-row>
+        <van-col span="24">
+          <van-collapse v-model="activeNames" @change="checkedHandler" accordion>
+            <van-checkbox-group v-model="result" >
+              <van-collapse-item
+                :ref="item.id"
+                :name="item.id"
+                v-for="item in peopleListCpoy"
+                :key="item.id"
+                :title="`${item.title}-(${item.orgName})`"
+              >
+                <!-- :title="item.defaultCause" -->
+                <template #right-icon>
+                  <van-checkbox :name="item.id" ref="checkboxes" class="checkboxList" />
+                </template>
+                <van-row>
+                  <van-col class="colCls" span="24" v-for="i in item.fileList" :key="i.name">
+                    <van-tag type="primary" class="tagCls" plain @click="tagHandler(i)">{{ i.name }}</van-tag>
+                  </van-col>
+                </van-row>
+              </van-collapse-item>
+            </van-checkbox-group>
+          </van-collapse>
+        </van-col>
+      </van-row>
+      <van-row class="bottomdiv">
+        <van-col span="24">
+          <van-button class="btns" size="small" type="info" @click="submitHandler">确认</van-button>
+        </van-col>
+      </van-row>
+    </van-action-sheet>
+  </div>
+</template>
+<script>
+import { deptTreeList } from '@/api/toConsult.js'
+import { materialsFileList } from '@/api/training.js'
+import OrgTree from '@/components/orgTree'
+export default {
+  name: 'SocAppIndex',
+  components: {
+    OrgTree
+  },
+
+  props: {
+    organizationId: {
+      //机构ID
+    },
+    userList: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    isRequired: {
+      //是否必填
+      type: Boolean,
+      default: false
+    },
+    inpitLabel: {
+      type: String,
+      default: '参与资料'
+    },
+    fieldNames: {
+      //树行配置映射项
+      type: Object,
+      default: () => {
+        return {
+          text: 'name',
+          value: 'id',
+          children: 'children'
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      activeNames: [],
+      result: [],
+      orgId: this.organizationId || '',
+      show: false,
+      value1: '',
+      showcascader: false,
+      cascaderValue: '',
+      loading: false,
+      options: [], //机构列表
+      peoplesId: [], //资料ID集合
+      searchVal: '', //搜索值
+      peopleList: [], //资料列表
+      peopleListCpoy: [], //资料列表2
+      orgName: '', //机构名称
+      peoples: '' //资料列表
+    }
+  },
+  watch: {
+    organizationId(val) {
+      this.orgId = val + ''
+      this.getSelectData()
+    },
+    //监听弹框是否打开
+    show(val) {
+      if (val) {
+        this.getSelectData()
+      }
+    },
+    //监听资料数组变化
+    userList(val) {
+      this.peoplesId = []
+      this.$set(this.$data, 'peoples', val.map(item => item.userName).join(','))
+
+      val.map(item => {
+        this.peoplesId.push(item.userId)
+      })
+    }
+  },
+
+  created() {},
+  mounted() {},
+
+  methods: {
+    onLoad() {},
+    //获取资料
+    getSelectData() {
+      materialsFileList({ orgId: this.orgId, pageNum: 1, pageSize: 100000 }).then(res => {
+        let { code, rows, msg } = res
+        if (code == 200) {
+          rows.forEach(item => {
+            if (item.fileList && item.fileList.length > 0) {
+              item.fileList = item.fileList.map(i => {
+                i = JSON.parse(i)
+                return i
+              })
+            }
+          })
+
+          this.peopleList = rows
+          this.peopleListCpoy = JSON.parse(JSON.stringify(rows))
+        }
+      })
+    },
+
+    onSearch(val) {
+      this.peopleListCpoy = this.peopleList.filter(item => {
+        if (item.title.indexOf(val) != -1 || item.orgName.indexOf(val) != -1) {
+          return item
+        }
+      })
+    },
+
+    onCancel() {
+      this.searchVal = ''
+      this.peopleListCpoy = this.peopleList
+    },
+    submitHandler() {
+      let list = []
+      this.peopleListCpoy.filter(item => {
+        this.result.forEach(r => {
+          if (r == item.id) {
+            list.push(...item.fileList)
+          }
+        })
+      })
+
+      // this.peoples = list.map(item => item.name).join(',')
+
+      this.$set(this.$data, 'peoples', list.map(item => item.name).join(','))
+      // 抛出已选择资料信息
+      this.$emit('dataList', list)
+      this.show = false
+    },
+    //复选框单选
+    // changeCheckBox(list) {
+    //   if (list && list.length > 1) {
+    //     this.result = [list[list.length - 1]]
+    //   }
+    // },
+    checkedHandler(id) {
+      this.result.push(id)
+    },
+    tagHandler(i) {
+        
+      const filePath = `${process.env.NODE_ENV === 'development' ? '/dev' : window.origin}${i.url}`
+      const tempLink = document.createElement('a')
+      tempLink.style.display = 'none'
+      tempLink.href = filePath
+      tempLink.setAttribute('download', i.name)
+      tempLink.setAttribute('target', '_blank')
+      document.body.appendChild(tempLink)
+      tempLink.click()
+      document.body.removeChild(tempLink)
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.van-action-sheet {
+  min-height: 90%;
+}
+.btns {
+  width: 100%;
+}
+.bottomdiv {
+  width: 100%;
+  bottom: 0%;
+  position: fixed;
+}
+.bigsheetbox {
+  height: calc(100vh - 100px);
+}
+.van-field__control {
+  padding-right: 20px;
+}
+.line {
+  width: 100%;
+  height: 3px;
+  background-color: #1989fa;
+}
+.colCls {
+  display: flex;
+  .tagCls {
+    margin-top: 10px;
+  }
+}
+</style>

+ 4 - 4
src/views/menu/training/index.vue

@@ -113,14 +113,14 @@
               <div>培训状态</div>
               <div>{{ item.statusText }}</div>
             </div>
-            <div class="mainItem" @click="goInfo(item.id)">
+            <!-- <div class="mainItem" @click="goInfo(item.id)">
               <div>培训类型</div>
               <div>{{ item.typeText }}</div>
-            </div>
-            <div class="mainItem" @click="goInfo(item.id)">
+            </div> -->
+            <!-- <div class="mainItem" @click="goInfo(item.id)">
               <div>培训时间</div>
               <div>{{ item.trainingStartDateTime }}</div>
-            </div>
+            </div> -->
             <div class="mainItem">
               <div>签名情况</div>
               <div class="condition" @click="signatureCondition(item.id)">{{ item.signNums }}</div>