coys před 2 roky
rodič
revize
a2ea635d9a

+ 6 - 0
src/router/router.config.js

@@ -135,6 +135,12 @@ export let routers = [
         meta: { title: '监控调阅', keepAlive: true }
       },
       {
+        path: '/rehearsalTask',
+        name: 'rehearsalTask',
+        component: () => import('@/views/menu/rehearsalTask/index'),
+        meta: { title: '演练登记', keepAlive: true }
+      },
+      {
         path: '/educationStatistics',
         name: 'educationStatistics',
         component: () => import('@/views/menu/educationStatistics/index'),

+ 1 - 0
src/views/home/menu.vue

@@ -96,6 +96,7 @@ export default {
           list:[
             {
               menu:'演练登记',
+              path:'/rehearsalTask'
             },
             {
               menu:'演练排名',

+ 1 - 3
src/views/menu/monitoringCall/index.vue

@@ -48,9 +48,7 @@
           />
         </van-popup>
       </van-col>
-      <!-- <van-col span="6" class="btnf_box">
-        <van-button type="info" class="btn" @click="clearSearch" size="small">重置</van-button>
-      </van-col> -->
+
     </van-row>
     <!-- 调阅列表 -->
     <div class="bigbox">

+ 392 - 0
src/views/menu/rehearsalTask/components/addTraining.vue

@@ -0,0 +1,392 @@
+<template>
+  <div>
+    <NavBar :go="{type:'push',path:'/training'}" />
+    <van-form class="bigbox" ref="form">
+      <div class="mainItem">
+        <div>标题</div>
+        <div>{{ trainingData?.title }}</div>
+      </div>
+      <div class="mainItem">
+        <div>单位名称</div>
+        <div>{{ trainingData?.orgName }}</div>
+      </div>
+      <van-field
+        readonly
+        clickable
+        required
+        name="picker"
+        :value="form.typeText"
+        label="培训类型"
+        :rules="[{ required: true, message: '培训类型不能为空' }]"
+        placeholder="请选择培训类型"
+        @click="showPicker = true"
+      />
+      <van-popup v-model="showPicker" position="bottom">
+        <van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
+      </van-popup>
+      <!-- 培训开始时间 -->
+      <van-field
+        readonly
+        clickable
+        name="datetimePicker"
+        :value="form.trainingStartDateTime"
+        required
+        :rules="[{ required: true, message: '培训开始时间不能为空' }]"
+        label="培训开始时间"
+        placeholder="请选择培训开始时间"
+        @click="showStartDate = true"
+      />
+      <van-popup v-model="showStartDate" position="bottom">
+        <van-datetime-picker
+          v-model="startDateTime"
+          type="datetime"
+          @confirm="onConfirmDate"
+          @cancel="showStartDate = false"
+        />
+      </van-popup>
+      <!-- 培训结束时间 -->
+      <van-field
+        readonly
+        clickable
+        name="datetimePicker"
+        :value="form.trainingEndDateTime"
+        required
+        :rules="[{ required: true, message: '培训结束时间不能为空' }]"
+        label="培训结束时间"
+        placeholder="请选择培训结束时间"
+        @click="showEndDate = true"
+      />
+      <van-popup v-model="showEndDate" position="bottom">
+        <van-datetime-picker
+          v-model="endDateTime"
+          type="datetime"
+          @confirm="onConfirmEndDate"
+          @cancel="showEndDate = false"
+        />
+      </van-popup>
+      <!-- 培训内容 -->
+      <van-field
+        required
+        :rules="[{ required: true, message: '培训内容不能为空' }]"
+        v-model="form.content"
+        name="content"
+        label="培训内容"
+        type="textarea"
+        row="2"
+        placeholder="请填写培训内容"
+      />
+      <!-- 总结 -->
+      <van-field
+        required
+        :rules="[{ required: true, message: '总结不能为空' }]"
+        v-model="form.note"
+        name="note"
+        label="总结"
+        type="textarea"
+        row="3"
+        placeholder="请结合网点进行总结"
+      />
+
+      <!-- 参与人员 -->
+
+      <!-- 必填 -->
+      <CheckPeople
+        ref="checkPeople"
+        :userList="userPeopleList"
+        :organizationId="trainingData.orgId"
+        :isRequired="true"
+        @userList="userListHandler"
+      ></CheckPeople>
+      <!-- 缺席人员 -->
+      <CheckPeople
+        ref="checkPeople"
+        :userList="lackPeopleList"
+        :inpitLabel="'缺席人员'"
+        :organizationId="trainingData.orgId"
+        :isRequired="false"
+        @userList="lackUserListHandler"
+      ></CheckPeople>
+      <!-- 上传 -->
+      <van-field readonly clickable name="uploader" label="上传图片">
+        <template #input>
+          <Upload v-model="form.imageList"></Upload>
+        </template>
+      </van-field>
+      <div class="btns">
+        <van-button type="info" @click="submitHandler(1)">保存</van-button>
+        <van-button type="info" @click="submitHandler(2)">提交</van-button>
+      </div>
+    </van-form>
+  </div>
+</template>
+<script>
+import NavBar from '@/components/NavBar'
+import CheckPeople from '@/components/peopleList/index.vue'
+import Upload from '@/components/upload/index.vue'
+import { gettrainingInfo, edittrainingInfo } from '@/api/training.js'
+import { newDateTime } from '@/utils/date.js'
+import { Dialog, Toast } from 'vant'
+export default {
+  name: 'SocAppAddTraining',
+  components: {
+    NavBar,
+    Upload,
+    CheckPeople
+  },
+  data() {
+    return {
+      startDateTime: new Date(),
+      endDateTime: new Date(),
+      falg: false, //校验是否通过
+      username: '',
+      password: '',
+      form: {
+        typeText: '', //培训类型
+        type: '', //培训value
+        content: '', //培训内容
+        note: '', //培训总结
+        taskUserList: [], //人员数组
+        imageList: [], //图片数组
+        trainingStartDateTime: '', //开始时间
+        trainingEndDateTime: '' //结束时间
+      },
+      trainingData: {},
+      userPeopleList: [], //参与人员数组
+      lackPeopleList: [], //缺席人员数组
+      showPicker: false, //培训类型显示隐藏
+      showStartDate: false, //开始时间显示隐藏
+      showEndDate: false, //结束时间显示隐藏
+      columns: ['每月安全培训教育', '专项安全培训教育']
+    }
+  },
+  created() {
+    //获取详情信息
+    gettrainingInfo(this.$route.params.id).then(res => {
+      let { code, data, msg } = res
+      if (code == 200) {
+        this.trainingData = data
+        if (!data.taskUserList) {
+          data.taskUserList = []
+        }
+        if (!data.imageList) {
+          data.imageList = []
+        } else {
+          data.imageList = [data.imageList]
+        }
+        Object.assign(this.form, data)
+        // checkPeople
+
+        this.form.taskUserList
+          .map(item => {
+            if (item.type === 1) {
+              this.userPeopleList.push(item)
+              return item.userName
+            }
+          })
+          .join(',')
+
+        this.form.taskUserList
+          .map(item => {
+            if (item.type === 2) {
+              this.lackPeopleList.push(item)
+              return item.userName
+            }
+          })
+          .join(',')
+      }
+    })
+  },
+  mounted() {},
+
+  methods: {
+    onSubmit(values) {
+      console.log('submit', values)
+      Dialog.confirm({
+        title: '',
+        message: '是否提交培训数据?'
+      })
+        .then(() => {
+          // on confirm
+        })
+        .catch(() => {
+          // on cancel
+        })
+    },
+    //培训类型确认
+    onConfirm(val) {
+      this.form.typeText = val //培训类型赋值
+
+      switch (val) {
+        case '每月安全培训教育':
+          this.form.type = '0'
+
+          break
+        case '专项安全培训教育':
+          this.form.type = '1'
+          break
+      }
+      this.showPicker = false
+    },
+    //开始时间确认
+    onConfirmDate(val) {
+      this.form.trainingStartDateTime = newDateTime(val)
+
+      this.showStartDate = false
+    },
+    //结束时间
+    onConfirmEndDate(val) {
+      this.form.trainingEndDateTime = newDateTime(val)
+      this.showEndDate = false
+    },
+    userListHandler(list) {
+      list.forEach(item => {
+        ;(item.type = 1), (item.userId = item.id)
+        item.userName = item.username
+        item.name = item.userName
+        delete item.username
+      })
+
+      this.userPeopleList = list
+    },
+    lackUserListHandler(list) {
+      list.forEach(item => {
+        item.type = 2
+        ;(item.userId = item.id), (item.userName = item.username)
+        delete item.username
+      })
+
+      this.lackPeopleList = list
+    },
+    //上传附件成功
+    listHandler(list) {},
+    //表单提交前校验
+    beforSubmitV() {
+      this.falg = false
+      let startDate = JSON.parse(JSON.stringify(this.form.trainingStartDateTime))
+      startDate = Date.parse(new Date(startDate))
+
+      let endDate = JSON.parse(JSON.stringify(this.form.trainingEndDateTime))
+      endDate = Date.parse(new Date(endDate))
+      if (startDate > endDate) {
+        Toast('开始时间不能大于结束时间')
+        this.falg = true
+        return
+      }
+
+      if (this.form.imageList.length == 0) {
+        Toast('上传图片不能为空')
+        this.falg = true
+        return
+      }
+      if (this.userPeopleList.length == 0) {
+        Toast('参与人员不能为空!')
+        this.falg = true
+        return
+      }
+      if (this.userPeopleList.length > this.lackPeopleList.length) {
+        let isTrue = false
+        this.userPeopleList.forEach(item => {
+          this.lackPeopleList.forEach(i => {
+            if (item.userId == i.userId) {
+              isTrue = true
+            }
+          })
+        })
+        if (isTrue) {
+          Toast('参与人员与缺席人员存在同一个人请修正!')
+          this.falg = true
+        }
+      } else {
+        let isTrue = false
+        this.lackPeopleList.forEach(item => {
+          this.userPeopleList.forEach(i => {
+            if (item.userId == i.userId) {
+              isTrue = true
+            }
+          })
+        })
+        if (isTrue) {
+          Toast('参与人员与缺席人员存在同一个人请修正!')
+          this.falg = true
+        }
+      }
+    },
+    //表单提交校验
+    submitHandler(type) {
+      Dialog.confirm({
+        title: '',
+        message: `是否${type === 2 ? '提交' : '保存'}培训数据?`
+      })
+        .then(() => {
+          this.beforSubmitV() //校验
+          if (!this.falg) {
+            //校验通过触发
+
+            if (type === 1) {
+              //type 1保存2提交
+              this.submitHandlerConfirm(type)
+            } else {
+              this.$refs.form.validate().then(() => {
+                this.submitHandlerConfirm(type)
+              })
+            }
+          }
+        })
+        .catch(() => {
+          // on cancel
+        })
+    },
+    // 表单提交
+    submitHandlerConfirm(type) {
+      let obj = JSON.parse(JSON.stringify(this.form))
+
+      obj.imageList = obj.imageList.map(item => item.imgPath).join(',')
+      obj.taskUserList = []
+      obj.taskUserList.push(...this.userPeopleList, ...this.lackPeopleList)
+
+      edittrainingInfo({
+        id: this.trainingData.id,
+        type: this.trainingData.type,
+        submitType: type,
+
+        ...obj
+      }).then(res => {
+        let { code, msg } = res
+        if (code == 200) {
+          Toast('登记成功')
+          this.$router.push('/training')
+        } else {
+          Toast(msg)
+        }
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.mainItem {
+  display: flex;
+  font-size: 28px;
+  padding: 34px;
+  justify-content: space-between;
+  background-color: #fff;
+}
+.bigbox {
+  height: calc(100vh - 200px);
+  overflow: scroll;
+}
+.btns {
+  position: fixed;
+  bottom: -7%;
+  height: 200px;
+  width: 100%;
+  background-color: #fff;
+  // margin: 16px;
+  display: flex;
+  justify-content: space-around;
+  .van-button {
+    width: 300px;
+    margin-left: 50px;
+  }
+}
+</style>

+ 182 - 0
src/views/menu/rehearsalTask/components/personnelSignature.vue

@@ -0,0 +1,182 @@
+<template>
+  <div>
+    <NavBar :go="{type:'push',path:'/training'}"/>
+
+    <div class="mainItem">
+      <div>标题</div>
+      <div>{{ trainingData?.title }}</div>
+    </div>
+    <div class="mainItem">
+      <div>单位名称</div>
+      <div>{{ trainingData?.orgName }}</div>
+    </div>
+    <div class="mainItem">
+      <div>培训类型</div>
+      <div>{{ trainingData?.typeText }}</div>
+    </div>
+    <div class="mainItem">
+      <div>培训开始时间</div>
+      <div>{{ trainingData?.trainingStartDateTime }}</div>
+    </div>
+    <div class="mainItem">
+      <div>培训结束时间</div>
+      <div>{{ trainingData?.trainingEndDateTime }}</div>
+    </div>
+    <div class="mainItem">
+      <div>主持人</div>
+      <div>{{ trainingData?.hostName }}</div>
+    </div>
+    <div class="mainItem">
+      <div>培训内容</div>
+      <div>{{ trainingData?.content }}</div>
+    </div>
+    <div class="mainItem">
+      <div>总结</div>
+      <div>{{ trainingData?.note }}</div>
+    </div>
+    <div class="mainItem">
+      <div>参与人员</div>
+      <div>{{ taskUserList }}</div>
+    </div>
+    <div class="mainItem">
+      <div>缺席人员</div>
+      <div>{{ qsUserList }}</div>
+    </div>
+    <div class="mainItem">
+      <div>上传图片</div>
+      
+      <imgCom :width="'100'" v-for="item in imgList" :key="item" :height="'100'" :src="item"></imgCom>
+      
+    </div>
+    <div class="mainItem" v-if="this.$route.params.id.split('_')[1]==='info'">
+      <div>参与人员签名图片</div>
+      <imgCom :width="'100'" v-for="item in signUserList" :key="item.userId" :height="'100'" :src="item.signImage||''"></imgCom>
+
+     
+    </div>
+    <van-row>
+      <van-col span="24" class="btns">
+        <van-button type="info" class="btn" v-if="this.$route.params.id.split('_')[1]==='edit'" @click="signatureHandler">签名</van-button>
+      </van-col>
+    </van-row>
+    <van-action-sheet v-model="show" title="签署名字" class="sheet">
+      <writingPad ref="esign" @resultImg="resultImg"></writingPad>
+    </van-action-sheet>
+  </div>
+</template>
+<script>
+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 {base64ToBlob} from '@/utils/base64TurnImg.js'
+import config from '@/config/index';
+export default {
+  name: 'SocAppAddTraining',
+  components: {
+    NavBar,
+    imgCom,
+    writingPad
+  },
+  data() {
+    return {
+      show: false,
+      taskUserList: [], //参与人员
+      qsUserList: [], //缺席人员
+      imgList: [], //图片数组
+      signUserList: [], //参与人员签名数组
+      trainingData: {} //详情数据
+    }
+  },
+  created() {
+    //获取详情信息
+    gettrainingInfo(this.$route.params.id.split('_')[0]).then(res => {
+      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)
+          }
+        })
+        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||[]
+        this.imgList = this.trainingData?.imageList?.split(',')||[]
+        console.log(this.qsUserList);
+        console.log(this.signUserList);
+        console.log(this.imgList);
+      }
+    })
+  },
+  mounted() {},
+
+  methods: {
+    signatureHandler() {
+      this.show = true
+    },
+    clearHandler() {
+      this.$refs.esign.handleReset()
+    },
+    submitHandler() {
+      console.log(this.file)
+    },
+    //上传签名图到服务器
+    resultImg(img) {
+      let obj = base64ToBlob(img)
+      let formData = new FormData()
+      
+      obj.name = '签名.jpg'
+      formData.append('file', base64ToBlob(img))
+      
+      upload(formData, 'image')
+        .then(res => {
+          console.log(process.env.NODE_ENV);
+          /*上传成功*/
+          let imgUrl = process.env.NODE_ENV === 'development' ?  res.data.url : window.origin + res.data.url
+         this.submitSign(imgUrl)
+          
+          // this.$emit("imgUrl", res.data.url);
+        })
+        .catch(err => {
+          /*上传失败*/
+        })
+    },
+    
+    //提交到后端数据
+    submitSign(url){
+      signtrainingInfo({
+        id:this.trainingData.id,
+        signImage:url,
+      }).then(res=>{
+        this.$router.push('/training')
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.mainItem {
+  display: flex;
+  font-size: 28px;
+  padding: 34px;
+  justify-content: space-between;
+  background-color: #fff;
+}
+.btns {
+  background-color: #fff;
+  width: 100%;
+}
+.btn {
+  width: 100%;
+}
+.sheet {
+  height: 60%;
+}
+</style>

+ 557 - 0
src/views/menu/rehearsalTask/index.vue

@@ -0,0 +1,557 @@
+<template>
+  <div>
+    <div class="topBox">
+      <NavBar :go="{type:'push',path:'/menu'}" />
+
+      <van-row>
+        <van-col span="24">
+          <org-tree v-model="cascaderValue" :name="'sss'" @changeItem="getDataList"></org-tree>
+         
+        </van-col>
+      </van-row>
+      <van-row>
+        <van-col span="12"
+          ><van-field
+            v-model="fieldValue"
+            is-link
+            label-width="3em"
+            clearable
+            :disabled="showStatus"
+            label="状态"
+            placeholder=""
+            @click="showStatus = true"
+          />
+          <van-popup v-model="showStatus" round position="bottom">
+            <van-picker
+              title="状态"
+              show-toolbar
+              :columns="columns"
+              @confirm="onConfirm"
+              @cancel="onCancel"
+              @change="onChange"
+              :close-on-click-overlay="false"
+            />
+          </van-popup>
+        </van-col>
+        <van-col span="12">
+          <van-field
+            v-model="currentDate"
+            clearable
+            label-width="3em"
+            label="月份"
+            placeholder=""
+            :disabled="showDate"
+            @click="showDate = true"
+          />
+          <van-popup v-model="showDate" round position="bottom">
+            <van-datetime-picker
+              v-model="presentDate"
+              @cancel="onCancel"
+              @confirm="onDateConfirm"
+              type="year-month"
+              title="月份"
+            />
+          </van-popup>
+        </van-col>
+      </van-row>
+      <van-row>
+        <van-col span="24"
+          ><van-field
+            v-model="typeName"
+            is-link
+            label-width="3em"
+            clearable
+            label="类型"
+            :disabled="typeStatus"
+            placeholder=""
+            @click="typeStatus = true"
+          />
+          <van-popup v-model="typeStatus" round position="bottom">
+            <van-picker
+              title="类型"
+              show-toolbar
+              :columns="typeColumns"
+              @confirm="onConfirmHandler"
+              @cancel="onCancel"
+              @change="onChange"
+              :close-on-click-overlay="false"
+            />
+          </van-popup>
+        </van-col>
+
+        <!-- <van-col span="6" class="btnf_box">
+        <van-button type="info" class="btn" @click="clearSearch" size="small">重置</van-button>
+      </van-col> -->
+      </van-row>
+    </div>
+
+    <!-- //卡片内容区域 -->
+    <div class="navBarclas">
+      <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
+        <van-panel :title="item.title" v-for="item in taskList" :key="item.id" class="card" status="状态">
+          <template #header>
+            <div class="titleClass">
+              <div class="title">{{ item.title }}</div>
+              <div>
+                <van-button plain type="info" v-if="isSign(item)" size="mini" @click="trainSign(item.id)"
+                  >培训登记</van-button
+                >
+                <van-button plain type="info" v-if="isSignature(item)" size="mini" @click="signature(item.id)"
+                  >签名</van-button
+                >
+              </div>
+            </div>
+          </template>
+          <div>
+            <div class="mainItem" @click="goInfo(item.id)">
+              <div>单位名称</div>
+              <div>{{ item.orgName }}</div>
+            </div>
+            <div class="mainItem" @click="goInfo(item.id)">
+              <div>培训状态</div>
+              <div>{{ item.statusText }}</div>
+            </div>
+            <div class="mainItem" @click="goInfo(item.id)">
+              <div>培训类型</div>
+              <div>{{ item.typeText }}</div>
+            </div>
+            <div class="mainItem" @click="goInfo(item.id)">
+              <div>培训时间</div>
+              <div>{{ item.startDate }}</div>
+            </div>
+            <div class="mainItem">
+              <div>签名情况</div>
+              <div class="condition" @click="signatureCondition(item.id)">{{ item.signNums }}</div>
+            </div>
+          </div>
+        </van-panel>
+      </van-list>
+    </div>
+    <!-- 卡片弹框 -->
+    <van-dialog v-model="conditionShow" title="签名情况" show-cancel-button>
+      <div class="conditionCls">
+        <div class="title">已签名人员({{ participationList.num }}人):</div>
+        <div class="people">{{ participationList.list }}</div>
+        <div class="title">未签名人员({{ absenceList.num }}人):</div>
+        <div class="people">{{ absenceList.list }}</div>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+<script>
+import NavBar from '@/components/NavBar'
+import { Col, Row, Cascader, Dialog, DatetimePicker, Icon, Picker } from 'vant'
+import { gettrainingList, getsignUserList } from '@/api/training.js'
+import { deptTreeList } from '@/api/toConsult.js'
+import { Toast } from 'vant'
+import OrgTree from '@/components/orgTree'
+import { newDateMonth } from '@/utils/date.js'
+export default {
+  data() {
+    return {
+      orgName: '',
+      orgShow: false,
+      presentDate: '', //默认时间
+      pageNum: 1,
+      loading: false, //加载状态
+      finished: false, //是否全部加载完毕
+      participationList: {
+        list: [], // 参与人员
+        num: 0 //人数
+      },
+      absenceList: {
+        list: [],
+        num: 0
+      }, // 缺席人员
+      orgName: JSON.parse(sessionStorage.getItem('SET_USER_ORGNAME')) || '', //机构名称
+      cascaderValue: '', //机构ID
+      show: false, //机构弹框显示隐藏
+
+      fieldNames: {
+        text: 'name',
+        value: 'id',
+        children: 'children'
+      },
+      taskList: [], //列表数据
+      typeValue: ' ', //类型值
+      typeName: '全部', //类型名称
+      value1: JSON.parse(sessionStorage.getItem('SET_USER_ID')) || '', //输入框model
+
+      typeStatus: false, //类型显示隐藏
+      showStatus: false, //状态显示隐藏
+      showDate: false, //月份显示隐藏
+      fieldValue: '全部', //状态名称
+      statusValue: ' ', //状态值
+      columns: ['全部', '待记录', '待签名', '已完成'], //状态数组
+      typeColumns: ['每月安全培训教育', '专项安全培训教育'], //类型数组
+      currentDate: newDateMonth(), //月份值
+      conditionShow: false //机构弹框显示隐藏
+    }
+  },
+  components: {
+    NavBar,
+    OrgTree,
+    Dialog,
+    Icon,
+    DatetimePicker,
+    Picker,
+    Col,
+    Row,
+    Cascader
+  },
+
+  filters: {
+    statusFilter: function (value) {
+      let str = ''
+      // 0待调阅,1调阅中,2已调阅,3已超期
+      switch (value) {
+        case 0:
+          str = '待调阅'
+
+          break
+        case 1:
+          str = '调阅中'
+          break
+
+        case 2:
+          str = '已调阅'
+          break
+
+        case 3:
+          str = '已超期'
+          break
+      }
+      return str
+    }
+  },
+
+  created() {
+    this.presentDate = new Date(+newDateMonth().split('-')[0], +newDateMonth().split('-')[1] - 1)
+  },
+  mounted() {
+    this.cascaderValue = JSON.parse(window.sessionStorage.getItem('SET_USER_ORGID')) + ''
+    console.log(this.cascaderValue)
+    this.init()
+  },
+  methods: {
+    //机构搜索
+    getDataList(val) {
+      this.cascaderValue = val.id
+      this.orgName = val.name
+      this.selectListAppHandler()
+    },
+    //判断是否展示签名按钮
+    isSignature(list) {
+      let falg = false
+      let timefalg = false
+      //value1 当前登陆用户ID
+      //任务处于待记录状态,且任务在规定完成时间范围内,登录人所在机构和角色与任务培训角色、培训机构一致才显示
+      if (list.startDate && list.endDate && list.status == 1) {
+        let date = new Date().getTime()
+        let startDate = Date.parse(new Date(list.startDate))
+        let endDate = Date.parse(new Date(list.endDate))
+
+        if (date >= startDate && date <= endDate) {
+          console.log(list.id, 'ssss')
+          timefalg = true
+        }
+      }
+      list.userList?.forEach(item => {
+        console.log(this.value1, 'sss')
+        if (this.value1 == item.userId && item.sign === 0) {
+          console.log(list.id, 'fff')
+          falg = true
+        }
+      })
+
+      if (falg && timefalg) {
+        return true
+      }
+    },
+    //判断是否展示登记按钮
+    isSign(list) {
+      let falg = false
+      let timefalg = false
+      //value1 当前登陆用户ID
+      let date = new Date().getTime()
+      let startDate = Date.parse(new Date(list.startDate))
+      let endDate = Date.parse(new Date(list.endDate))
+      //当前时间再时间范围内且签名是待签名状态且签名列表存在当前登录人未签名的情况才可以进行签名
+      if (list.startDate && list.endDate && list.status == 0) {
+        if (date >= startDate && date <= endDate) {
+          timefalg = true
+        }
+      }
+      //cascaderValue  当前机构ID
+      //当前用户角色ID
+      let roleL = JSON.parse(sessionStorage.getItem('SET_USER_ROLELIST'))
+      roleL.forEach(i => {
+        list.taskRoleList?.forEach(item => {
+          if (this.cascaderValue == list.orgId && i.roleId == item.roleId) {
+            falg = true
+          }
+        })
+      })
+      if (date > endDate) {
+        //当前时间大于结束时间表示已超期
+      
+        timefalg = false
+        falg = false
+      }
+      if (falg && timefalg) {
+        return true
+      }
+    },
+    //清空查询条件
+    clearSearch() {
+      this.fieldValue = ''
+      this.statusValue = ''
+      this.cascaderValue = ''
+      this.currentDate = ''
+      this.typeValue = ''
+      this.typeName = ''
+      this.orgName = ''
+
+      this.selectListAppHandler()
+    },
+
+    //初始化
+    init() {
+      this.selectListAppHandler()
+    },
+    selectListAppHandler(type = 0, callback = () => {}) {
+      let obj = {
+        isAppSelect: 1,
+        pageNum: this.pageNum,
+        pageSize: 10
+      }
+      if (!type) {
+        obj.pageNum = 1
+        this.pageNum = 1
+      }
+      if (this.statusValue) {
+        obj.status = this.statusValue
+      }
+      if (this.cascaderValue) {
+        obj.orgId = this.cascaderValue
+      }
+      if (this.currentDate) {
+        obj.date = this.currentDate + '-01'
+      }
+      if (this.typeValue) {
+        obj.type = this.typeValue
+      }
+
+      //获取任务列表
+      gettrainingList(obj).then(res => {
+        let { code, rows, msg } = res
+        if (code == 200) {
+          if (type) {
+            this.taskList.push(...rows)
+            if (rows.length == 0 || rows.length < 10) {
+              //已加载完全部数据
+              this.finished = true
+            }
+            callback()
+          } else {
+            this.finished = false
+            this.taskList = rows
+          }
+        }
+      })
+    },
+
+    // 开始调阅事件
+    startMonitorHandler(taskId) {
+      this.taskId = taskId
+      this.showDialog = true
+    },
+    //已调阅事件
+    endMonitorHandler(status, taskId) {
+      // 0待调阅,1调阅中,2已调阅,3已超期
+      //跳转详情
+      if (status <= 1) return
+      this.$router.push('/consultInfo/' + taskId)
+    },
+
+    //搜索选择状态时触发
+    onConfirm(value, index) {
+      this.fieldValue = value
+
+      switch (value) {
+        case '待记录':
+          this.statusValue = '0'
+
+          break
+        case '待签名':
+          this.statusValue = '1'
+          break
+
+        case '已完成':
+          this.statusValue = '2'
+          break
+        case '全部':
+          this.statusValue = ' '
+          break
+      }
+      this.selectListAppHandler()
+      this.showStatus = false
+    },
+    //类型确认框
+    onConfirmHandler(value, index) {
+      this.typeName = value
+
+      switch (value) {
+        case '每月安全培训教育':
+          this.typeValue = '0'
+
+          break
+        case '专项安全培训教育':
+          this.typeValue = '1'
+          break
+      }
+      console.log(this.typeValue)
+      this.typeStatus = false
+      this.selectListAppHandler()
+    },
+    //月份选中触发
+    onDateConfirm() {
+      this.currentDate = this.newDate(this.presentDate)
+
+      this.showDate = false
+      this.selectListAppHandler()
+    },
+    //日期转换
+    newDate(time) {
+      var date = new Date(time)
+      var y = date.getFullYear()
+      var m = date.getMonth() + 1
+      m = m < 10 ? '0' + m : m
+      var d = date.getDate()
+      d = d < 10 ? '0' + d : d
+      return y + '-' + m
+    },
+    //onLoad下拉刷新
+    onLoad() {
+      if (this.pageNum == 1) {
+        this.pageNum = 2
+      }
+      this.loading = true
+      this.selectListAppHandler(1, () => {
+        this.pageNum++
+        this.loading = false
+        console.log(1)
+      })
+    },
+    //查看签名情况
+    signatureCondition(id) {
+      this.conditionShow = true
+      getsignUserList(id).then(res => {
+        console.log(res, 'ssss')
+        let { meg, code, data } = res
+        data.map(item => {
+          if (item.sign !== 1) {
+            this.absenceList.list.push(item.userName)
+            this.absenceList.num++
+          } else {
+            this.participationList.list.push(item.userName)
+            this.participationList.num++
+          }
+        })
+        this.absenceList.list = this.absenceList.list.join(',')
+        this.participationList.list = this.participationList.list.join(',')
+      })
+    },
+    //培训登记跳转
+    trainSign(id) {
+      this.$router.push('/Addtraining/' + id)
+    },
+    //签名
+    signature(id) {
+      this.$router.push('/personnelSignature/' + id + '_edit')
+    },
+    //跳转详情
+    goInfo(id) {
+      this.$router.push('/personnelSignature/' + id + '_info')
+    },
+    onChange(picker, value, index) {},
+    onCancel() {
+      this.show = false
+      this.typeStatus = false
+      this.showDate = false
+      this.showStatus = false
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.popup {
+  height: 40vh;
+}
+.navBarclas {
+  height: calc(100vh - 380px);
+  overflow: scroll;
+}
+.btnf_box {
+  background-color: #fff;
+}
+.card {
+  margin: 20px;
+  margin-bottom: 0px;
+  box-shadow: 0 8px 12px #ebedf0;
+}
+.btn {
+  float: right;
+  margin-top: 24px;
+  margin-right: 20px;
+  box-sizing: border-box;
+}
+.titleClass {
+  display: flex;
+  align-items: center;
+  height: 100%;
+  padding: 20px;
+  border-bottom: 1px solid #ccc;
+
+  .title {
+    font-size: 30px;
+    flex: 1;
+    line-height: 50px;
+  }
+}
+.mainItem {
+  display: flex;
+  font-size: 28px;
+  padding: 20px;
+  justify-content: space-between;
+  .condition {
+    color: #1989fa;
+    text-decoration: underline;
+  }
+}
+.conditionCls {
+  .title {
+    color: #1989fa;
+    margin-left: 30px;
+    // margin-top: 30px;
+  }
+  .people {
+    margin-left: 80px;
+    margin-bottom: 30px;
+    margin-top: 30px;
+  }
+}
+.topBox {
+  overflow: hidden;
+}
+:deep.van-field--disabled{
+  color: #323233;
+}
+:deep.van-field--disabled .van-field__label{
+  color: #323233;
+}
+:deep .van-field__control[disabled]{
+			color: #323233;
+			-webkit-text-fill-color: #323233;
+		}
+</style>