Parcourir la source

Merge remote-tracking branch 'origin/V0.0.2' into V0.0.2

# Conflicts:
#	src/utils/globalMixins.js
凉纪 il y a 2 ans
Parent
commit
8f928940dd

+ 85 - 70
src/components/nfcPopup/alone.vue

@@ -3,154 +3,169 @@
     <van-popup v-model="visible" get-container="nfc-popup" lock-scroll>
       <div class="nfc-panel">
         <div>
-          <p  class="top-text">将手机背部靠近NFC标签扫描</p>
-          <div class="image-box" >
-            <img class="nfc-image"  v-show="nfcImage" :src="nfcImage" alt="">
+          <p class="top-text">将手机背部靠近NFC标签扫描</p>
+          <div class="image-box">
+            <img class="nfc-image" v-show="nfcImage" :src="nfcImage" alt="" />
           </div>
-          <div  class="bottom-box">
+          <div class="bottom-box">
             <div @click="submitNFC">
               <img :src="require('../../assets/img/icon/NFC扫描-01.png')" />
               <span>NFC</span>
             </div>
             <div @click="nfcTakePhotos">
               <img :src="require('../../assets/img/icon/camera.png')" />
-              <span >拍照</span>
+              <span>拍照</span>
             </div>
           </div>
         </div>
       </div>
-      <input v-show="false" ref="upload" type='file' accept="image/*" @change="fileChange"/>
+      <input v-show="false" ref="upload" type="file" accept="image/*" @change="fileChange" />
       <!--    <uploader v-show="false" ref="imageUpload" v-model="nfcImage" multiple :maxCount="1" :deletable="false"/>-->
     </van-popup>
   </div>
 </template>
 
 <script>
-import {baseImg} from "@/views/menu/LZRegister/api";
-import {upload} from "@/api/public";
-import ImageCompressor from "js-image-compressor";
+import { baseImg } from '@/views/menu/LZRegister/api'
+import { upload } from '@/api/public'
+import ImageCompressor from 'js-image-compressor'
+import { Toast } from 'vant'
 export default {
-  name: "index",
-  data(){
+  name: 'index',
+  data() {
     return {
       //nfc弹窗
-      visible:false,
+      visible: false,
       //nfc图片(base64)
-      nfcImage:null,
+      nfcImage: null,
       //是否显示底部按钮
-      showBottomBox:true,
+      showBottomBox: true,
+      objNfc: null
     }
   },
-  watch:{
-    visible(val){
-      if(val){
-        this.nfcImage = null;
-        
+  watch: {
+    visible(val) {
+      if (val) {
+        this.nfcImage = null
       }
     }
   },
-  methods:{
+  mounted() {
+    window.openNFCScanCallBack = this.openNFCScanCallBack
+  },
+  methods: {
     //上传前
-    async fileChange(e){
-      let file = e.target.files[0];
-      let fileName = e.target.files[0].name;
-      let imgFile = await this.imageCompress(file);
-      console.log(imgFile,'imgFile')
-      let formData = new FormData();
-      formData.append('file',imgFile);
-      upload(formData,'image').then(res=>{
-        console.log(res,'resssss')
-       // this.nfcImage = baseImg.base;
-        this.$emit('change',baseImg)
-        this.visible = false;
-    
-       // this.showBottomBox = false;
-      })
+    async fileChange(e) {
+      let file = e.target.files[0]
+      let fileName = e.target.files[0].name
+      let imgFile = await this.imageCompress(file)
+      console.log(imgFile, 'imgFile')
+      let formData = new FormData()
+      formData.append('file', imgFile)
+      upload(formData, 'image').then(res => {
+        console.log(res, 'resssss')
+        // this.nfcImage = baseImg.base;
+        this.$emit('change', baseImg)
+        this.visible = false
 
+        // this.showBottomBox = false;
+      })
     },
     //压缩图片
-    imageCompress(file){
-      let imageCom = new Promise((resolve,reject)=>{
+    imageCompress(file) {
+      let imageCom = new Promise((resolve, reject) => {
         new ImageCompressor({
           file,
           quality: 0.6,
-          success: (result) => {
-            
-            console.log(result,'图片压缩后')
+          success: result => {
+            console.log(result, '图片压缩后')
             let img = new File([result], result.name, {
               width: result.width,
               height: result.height,
-              type: result.type,
-            });
-            resolve(img);
+              type: result.type
+            })
+            resolve(img)
           },
-          error: (e) => {
-            console.log('imageError:'+e);
+          error: e => {
+            console.log('imageError:' + e)
             this.$toast('图片压缩失败')
-            reject(e);
-          },
-        });
-      });
-      return imageCom;
+            reject(e)
+          }
+        })
+      })
+      return imageCom
+    },
+    nfcTakePhotos() {
+      this.$refs.upload.click()
     },
-    nfcTakePhotos(){
-      this.$refs.upload.click();
+    submitNFC() {
+      this.useNFC()
+      // Toast.success(this.openNFCScanCallBack())
+
+      // alert(this.objNfc)
     },
-    submitNFC(){
-      let NFCurl='ssssssssss'
-      this.$emit('changeNFC',NFCurl)
+    openNFCScanCallBack(data) {
+      this.objNfc = JSON.parse(data)
+      if (this.objNfc.errorCode == 0) {
+        this.$emit('changeNFC', this.objNfc.content)
+        Toast.success('扫描成功')
+        
+        this.visible = false
+      } else {
+        Toast.error(this.objNfc.errorString)
+      }
     }
   }
 }
 </script>
 <style lang="scss">
-#app{
-  .nfc-popup{
-    .van-popup--center{
+#app {
+  .nfc-popup {
+    .van-popup--center {
       border-radius: 20px;
     }
   }
 }
 </style>
 <style scoped lang="scss">
-.nfc-panel{
+.nfc-panel {
   width: 400px;
-  background:url('../../assets/img/NFCphone.png') center no-repeat;
+  background: url('../../assets/img/NFCphone.png') center no-repeat;
   background-size: 50%;
-  >div{
+  > div {
     padding: 30px;
   }
 }
-.top-text{
+.top-text {
   text-align: center;
   font-size: 26px;
 }
-.image-box{
+.image-box {
   width: 100%;
   height: 350px;
   display: flex;
   align-items: center;
   justify-content: center;
 }
-.nfc-image{
+.nfc-image {
   width: 300px;
   height: 300px;
 }
-.bottom-box{
+.bottom-box {
   display: flex;
   justify-content: space-around;
   align-items: center;
-  >div{
+  > div {
     display: flex;
     flex-direction: column;
-    &:active{
-      opacity: .5;
+    &:active {
+      opacity: 0.5;
     }
-    >img{
+    > img {
       width: 70px;
       height: 70px;
     }
-    >span{
+    > span {
       text-align: center;
       font-size: 25px;
     }

+ 167 - 119
src/components/upload/index.vue

@@ -1,141 +1,189 @@
 <template>
-    <div>
-        <van-uploader
-        accept=""
-          ref="uploader"
-          v-bind="$attrs"
-          v-model="fileList"
-          :before-read="beforeRead"
-          :after-read="afterRead"
-          :max-count="maxCount"
-          @delete="deleteHandler"
-          :max-size="maxSize * 1024*1024"/>
-    </div>
+  <div>
+    <van-uploader
+      accept=""
+      ref="uploader"
+      v-bind="$attrs"
+      v-model="fileList"
+      :before-read="beforeRead"
+      :after-read="afterRead"
+      :max-count="maxCount"
+      :multiple="multiple"
+      @delete="deleteHandler"
+      :max-size="maxSize * 1024 * 1024"
+    />
+  </div>
 </template>
 <script>
-import {upload} from "@/api/public";
-import ImageCompressor from "js-image-compressor";
-import config from '@/config/index';
+import { upload } from '@/api/public'
+import ImageCompressor from 'js-image-compressor'
+import config from '@/config/index'
 export default {
-    props:{
-      value:{
-        type: Array,
-      },
-      //最大上传数量
-      maxCount:{
-        type: Number,
-        default: 6,
-      },
-      //文件大小,单位MB
-      maxSize:{
-        type: Number,
-        default: 5,
-      },
-
+  props: {
+    value: {
+      type: Array
     },
-    data() {
-      return {
-        fileList:[],
-        //上传之后的图片列表,双向绑定之后覆盖fileList
-        imageList:[]
-      };
+    multiple: {
+      type: Boolean,
+      default: false
     },
-
-    mounted() {
-
+    //最大上传数量
+    maxCount: {
+      type: Number,
+      default: 6
     },
-    watch:{
-      value:{
-        handler(val){
-          console.log(val,'sssssss');
-          this.imageList= this.fileList = val.map(v=>{
+    //文件大小,单位MB
+    maxSize: {
+      type: Number,
+      default: 5
+    }
+  },
+  data() {
+    return {
+      fileList: [],
+      //上传之后的图片列表,双向绑定之后覆盖fileList
+      imageList: []
+    }
+  },
 
-            let imgUrl =
-              process.env.NODE_ENV === "development"
-                ?  '/dev' + v.path
-                : window.origin + v.path;
-                console.log(imgUrl);
-            return {
-              name: v.name,
-              url:  imgUrl,
-              path:v.path,
+  mounted() {},
+  watch: {
+    value: {
+      handler(val) {
+        this.imageList = this.fileList = val.map(v => {
+          let imgUrl = process.env.NODE_ENV === 'development' ? '/dev' + v.path : window.origin + v.path
+          console.log(imgUrl)
+          return {
+            name: v.name,
+            url: imgUrl,
+            path: v.path
+          }
+        })
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  methods: {
+    //上传前压缩
+    beforeRead(file) {
+      console.log(file, '图片压缩前')
+      //当前是多文件的时候
+      if (file.length > 1) {
+        let list = []
+        for (let index = 0; index < file.length; index++) {
+          const element = file[index]
+          list.push(
+            new Promise((resolve, reject) => {
+              new ImageCompressor({
+                file: element,
+                quality: 0.6,
+                success: result => {
+                  console.log(result, '图片压缩后')
+                  let imgFile = new File([result], result.name, {
+                    width: result.width,
+                    height: result.height,
+                    type: result.type
+                  })
+                  console.log(imgFile, '后')
+                  resolve(imgFile)
+                },
+                error: e => {
+                  this.$toast(e)
+                  reject(e)
+                }
+              })
+            })
+          )
+          return list
+        }
+      } else {
+        return new Promise((resolve, reject) => {
+          new ImageCompressor({
+            file,
+            quality: 0.6,
+            success: result => {
+              console.log(result, '图片压缩后')
+              let imgFile = new File([result], result.name, {
+                width: result.width,
+                height: result.height,
+                type: result.type
+              })
+              console.log(imgFile, '后')
+              resolve(imgFile)
+            },
+            error: e => {
+              this.$toast(e)
+              reject(e)
             }
           })
-
-        },
-        deep:true,
-        immediate:true
+        })
       }
     },
-    methods: {
-      //上传前压缩
-      beforeRead(file){
-        console.log(file,'图片压缩前')
-        return new Promise((resolve, reject) => {
-            new ImageCompressor({
-              file,
-              quality: 0.6,
-              success: (result) => {
-                //this.$toast('图片压缩成功')
-                console.log(result,'图片压缩后')
-                let imgFile = new File([result], result.name, {
-                  width: result.width,
-                  height: result.height,
-                  type: result.type,
-                });
-                console.log(imgFile,'后')
-                resolve(imgFile);
-              },
-              error: (e) => {
-               
-                this.$toast(e)
-                reject(e);
-              },
-             });
-        });
-      },
-      //上传到服务器
-      afterRead(fileObj){
-        let formData = new FormData();
-        formData.append("file", fileObj.file);
-        upload(formData, "image").then((res) => {
-          /*上传成功*/
-          let imgUrl =
-            process.env.NODE_ENV === "development"
-              ?  config.baseUrl + res.data.url
-              : window.origin + res.data.url;
+    //上传到服务器
+    afterRead(fileObj) {
+      console.log(fileObj)
+      //多文件上传
+      if (this.multiple) {
+        for (let index = 0; index < fileObj.length; index++) {
+          const element = fileObj[index]
+          let formData = new FormData()
+          formData.append('file', element.file)
+          upload(formData, 'image')
+            .then(res => {
+              /*上传成功*/
+              let imgUrl =
+                process.env.NODE_ENV === 'development' ? config.baseUrl + res.data.url : window.origin + res.data.url
 
-          this.imageList.push({ name: res.data.name, url: imgUrl,path:res.data.url});
-          this.$emit('input',this.imageList)
+              this.imageList.push({ name: res.data.name, url: imgUrl, path: res.data.url })
+              this.$emit('input', this.imageList)
+            })
+            .catch(err => {
+              /*上传失败*/
 
-        }).catch((err) => {
-          /*上传失败*/
-
-          this.$toast.fail('上传失败')
-        });
-      },
-      //删除
-      deleteHandler(){
-        let imageList=JSON.parse(JSON.stringify(this.fileList))
-        imageList.forEach(item=>{
-          item.imgPath=item.path
-          item.path=item.imgPath
+              this.$toast.fail('上传失败')
+            })
+        }
+      } else {
+        let formData = new FormData()
+        formData.append('file', fileObj.file)
+        upload(formData, 'image')
+          .then(res => {
+            /*上传成功*/
+            let imgUrl =
+              process.env.NODE_ENV === 'development' ? config.baseUrl + res.data.url : window.origin + res.data.url
 
-        })
+            this.imageList.push({ name: res.data.name, url: imgUrl, path: res.data.url })
+            this.$emit('input', this.imageList)
+          })
+          .catch(err => {
+            /*上传失败*/
 
-        this.$emit('input',imageList)
+            this.$toast.fail('上传失败')
+          })
       }
     },
-    model:{
-      prop:'value',
-      event:'input'
+    //删除
+    deleteHandler() {
+      let imageList = JSON.parse(JSON.stringify(this.fileList))
+      imageList.forEach(item => {
+        item.imgPath = item.path
+        item.path = item.imgPath
+      })
+
+      this.$emit('input', imageList)
     }
-};
+  },
+  model: {
+    prop: 'value',
+    event: 'input'
+  }
+}
 </script>
 <style lang="scss" scoped>
-  .upload-text{
-    font-size: 18px;
-    color: #999;
-    margin-top: 5px;
-  }
+.upload-text {
+  font-size: 18px;
+  color: #999;
+  margin-top: 5px;
+}
 </style>

+ 54 - 26
src/utils/globalMixins.js

@@ -1,24 +1,25 @@
 import { getDict } from '@/api/toConsult.js'
 import dayjs from 'dayjs'
 import Dicts from '../utils/dicts'
-import {mapActions} from 'vuex'
-import {imgUrl} from "@/utils/index";
+import { mapActions } from 'vuex'
+import { imgUrl } from '@/utils/index'
+
+
 export default {
   data() {
-    return {
-
-    }
+    return {}
   },
   created() {
     /** 组件中设置dicts数组,会将字典存储在vuex中*/
-    if(this.dicts && this.dicts.length > 0){
+    if (this.dicts && this.dicts.length > 0) {
       this.setDicts()
     }
   },
+
   methods: {
     ...mapActions(['setDict']),
-    setDicts(){
-      this.dicts.forEach(item=>{
+    setDicts() {
+      this.dicts.forEach(item => {
         this.setDict(item)
       })
     },
@@ -26,11 +27,11 @@ export default {
      * key: String 字典类型
      * 组件页面中需要设置:mapGetters(['dictionary']']),
      * */
-    getDictItem(key){
-      let item = this.dictionary.find((v)=>{
-        return  v.key === key
+    getDictItem(key) {
+      let item = this.dictionary.find(v => {
+        return v.key === key
       })
-      console.log(item,'item')
+      console.log(item, 'item')
       return item?.value
     },
     /** 获取字典值
@@ -38,39 +39,38 @@ export default {
      * dictType: String 字典类型
      * 组件页面中需要设置:mapGetters(['dictionary']']),
      * */
-    getDictLabel(key,dictType){
-      let item = this.dictionary?.find((v)=>{
-        return  v.key === dictType
+    getDictLabel(key, dictType) {
+      let item = this.dictionary?.find(v => {
+        return v.key === dictType
       })
-      let dictLabel = item?.value?.find(v=>{
-        if( v.dictValue == key){
+      let dictLabel = item?.value?.find(v => {
+        if (v.dictValue == key) {
           return v?.dictLabel
         }
       })
       return dictLabel?.dictLabel
     },
     //时间范围模板:2020-01-01~2020-01-02
-    rangDate(start,end,a){
-      if(!start || !end) return '暂无';
+    rangDate(start, end, a) {
+      if (!start || !end) return '暂无'
       !a && (a = '~')
-      return  `${start}${a}${end}`;
+      return `${start}${a}${end}`
     },
     //根据字典类型获取字典值
-    getDictHandler(dictType,callBack) {
-      getDict( dictType ).then(res => {
+    getDictHandler(dictType, callBack) {
+      getDict(dictType).then(res => {
         let { data } = res
         callBack(data)
       })
     },
     //调用预览和pdf(内网银行)
     openFilePreview(item) {
-
-      let system = this.isAndroidOrIos
+      let system = this.isAndroidOrIos()
       const parms = {
         url: imgUrl(item.url),
         name: item.name
       }
-
+      console.log(item)
       if (system === 1) {
         //android
         // 判断当前环境是是否存在 js桥 'sap'
@@ -93,6 +93,35 @@ export default {
         }
       }
     },
+    //调用NFC
+    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))
+        }
+      }
+    },
+
     isAndroidOrIos() {
       const urls = navigator.userAgent
       console.log(urls,'urls')
@@ -106,6 +135,5 @@ export default {
       }
       return 3
     }
-
   }
 }

+ 4 - 4
src/utils/index.js

@@ -106,8 +106,8 @@ export function param2Obj(url) {
 //根据当前环境拼接图片地址
 export function imgUrl(url){
   if(!url) return "";
-  return window.origin + url;
-  // return  process.env.NODE_ENV === "development"
-  //   ?  config.baseUrl + url
-  //   :  window.origin + url;
+  // return window.origin + url;
+  return  process.env.NODE_ENV === "development"
+    ?  config.baseUrl + url
+    :  window.origin + url;
 }

+ 11 - 11
src/views/home/works.vue

@@ -3,7 +3,7 @@
     <top-bar ref="topbar"></top-bar>
 
     <!-- 步骤条 -->
-    <van-tabs class="tab-tabs" color="#1989fa" @click="tabClickHandler" v-if="workList && workList.length > 0">
+    <van-tabs class="tab-tabs" color="#008cd6" @click="tabClickHandler" v-if="workList && workList.length > 0">
       <van-tab
         :title="item.taskTypeText"
         :name="worksLink(1, item.taskType)"
@@ -41,7 +41,7 @@
               :value="worksLink(2, item.taskType, i.recStatus ? i.recStatus : i.status)"
               :label="i.startTime + '-' + i.endTime"
               
-              :value-class="i.status == 0 && item.taskType == 3 ? `title-blue` : `title-orange`"
+              :value-class="i.status == 0  ? `title-blue` : `title-orange`"
             >
               <template #title>
                 <span class="custom-title"
@@ -192,7 +192,7 @@ export default {
           break
         case 5:
           str = '/px'
-          strName = '待记'
+          strName = '待记'
           path = '/training'
           pathInfo = '/Addtraining/' + id
           break
@@ -216,7 +216,7 @@ export default {
         if (val == 0 && taskType == 2) {
           strName = '进行中'
         }
-        // id=1714836777629044738&enable=1&taskDate=2023-10-19
+        
         //监控调阅
         if (val == 3 && taskType == 1) {
           strName = '调阅中'
@@ -233,7 +233,7 @@ export default {
         }
         //教育培训
         if (val == 5 && taskType == 0) {
-          strName = '待记'
+          strName = '待记'
         } else if (val == 5 && taskType == 1) {
           strName = '待签名'
         } else if (val == 5 && taskType == 4) {
@@ -349,26 +349,26 @@ export default {
 </script>
 <style>
 .van-info {
-  background-color: #1989fa;
+  background-color: #008cd6;
 }
 </style>
 <style lang="scss" scoped>
 .van-cell__right-icon {
 }
 .van-cell::after {
-  background-color: #1989fa;
+  background-color: #008cd6;
 }
 .titleLeft {
   display: inline-block;
   width: 8px;
   height: 40px;
-  background-color: #1989fa;
+  background-color: #008cd6;
   vertical-align: middle;
   margin-right: 10px;
 }
 
 .van-cell__title {
-  color: #1989fa;
+  color: #008cd6;
 }
 ::v-deep.van-cell__value {
   // width: 20%;
@@ -403,10 +403,10 @@ export default {
 .index-container {
 }
 .title-orange {
-  color: #fd8104;
+  color: #bc9f71;
 }
 .title-blue {
-  color: #1989fa;
+  color: #008cd6;
 }
 .big_box {
   height: calc(100vh - 520px);

+ 1 - 1
src/views/menu/monitoringCall/components/monitoringList.vue

@@ -19,7 +19,7 @@
         </van-row>
         <van-row v-if="item.situation == 1">
 
-          <van-col class="abnorText" span="10">异常原因:</van-col>
+          <van-col class="abnorText" span="10">异常情况描述:</van-col>
           <van-col class="abnorText" span="14">{{ item.abnormalIllustrate }}</van-col>
         </van-row>
        

+ 2 - 2
src/views/menu/monitoringCall/components/taskInfo.vue

@@ -48,8 +48,8 @@
                     autosize
                     label=""
                     type="textarea"
-                    maxlength="150"
-                    placeholder="请输入异常情况描述"
+                    maxlength="200"
+                    placeholder="请输入情况描述"
                     show-word-limit
                     :rules="[{ required: true, message: '情况描述不能为空' }]"
                 /></van-col>

+ 8 - 5
src/views/menu/monitoringCall/index.vue

@@ -171,7 +171,7 @@ export default {
   methods: {
     //单元格点击事件
     linkHandler(status, id, item) {
-      if (item.isExist == 0) {
+      if (item.isExist == 0&&status ==0) {
         Dialog.alert({
           message: '机构下没有主机摄像头,不能开启调阅任务!',
           confirmButtonText:'关闭'
@@ -276,6 +276,9 @@ export default {
             this.finished = false
             this.taskList = rows
           }
+        }else{
+          this.finished = true
+          this.taskList =[]
         }
       })
     },
@@ -418,7 +421,7 @@ export default {
   font-size: 25px;
 }
 .monitor {
-  color: #1989fa;
+  color: #008cd6;
   padding-left: 10px;
   padding-right: 10px;
 
@@ -428,7 +431,7 @@ export default {
   // background-color: #8cb585;
 }
 .monitored {
-  color: #fd8104;
+  color: #bc9f71;
 
   padding-left: 10px;
   padding-right: 10px;
@@ -439,7 +442,7 @@ export default {
   // background-color: #1989fa;
 }
 .monitoring {
-  color: #7fd355;
+  color: #009240;
   padding-left: 10px;
   padding-right: 10px;
   float: right;
@@ -448,7 +451,7 @@ export default {
   // background-color: #25da0b;
 }
 .waringtoring {
-  color: #f16363;
+  color: #d7000f;
 
   padding-left: 10px;
   padding-right: 10px;

+ 2 - 1
src/views/menu/rehearsalTask/components/addRehearsalTask.vue

@@ -420,11 +420,12 @@ export default {
       obj.taskUserList = []
 
       obj.taskUserList.push(...this.userPeopleList, ...this.lackPeopleList)
+      obj.drillStartTime=obj.drillStartTime?obj.drillStartTime+':00':''
+      obj.drillEndTime=obj.drillEndTime?obj.drillEndTime+':00':''
       console.log(obj)
 
       drillInfo({
         id: this.trainingData.id,
-        // type: this.trainingData.type,
         submitType: type,
 
         ...obj

+ 10 - 4
src/views/menu/rehearsalTask/index.vue

@@ -76,13 +76,13 @@
             <div class="titleClass">
               <div class="title">{{ item.title }}</div>
               <div>
-                <van-button type="info" v-if="isSign(item)" size="mini" @click="trainSign(item.id)"
+                <van-button type="info" v-if="isSign(item)" size="small" @click="trainSign(item.id)"
                   >演练登记</van-button
                 >
-                <van-button type="info" v-if="isSignature(item)" size="mini" @click="signature(item.id)"
+                <van-button type="info" v-if="isSignature(item)" size="small" @click="signature(item.id)"
                   >签名</van-button
                 >
-                <van-button type="info" v-if="evaluateTure(item)" size="mini" @click="evaluate(item.id)"
+                <van-button type="info" v-if="evaluateTure(item)" size="small" @click="evaluate(item.id)"
                   >评价</van-button
                 >
               </div>
@@ -95,7 +95,10 @@
             </div>
             <div class="mainItem" @click="goInfo(item.id)">
               <div>演练状态</div>
-              <div>{{ item.statusText }}</div>
+              <div v-if="item.status == 0" :style="{ color: '#008cd6' }">{{ item.statusText }}</div>
+              <div v-else-if="item.status == 1" :style="{ color: '#bc9f71' }">{{ item.statusText }}</div>
+              <div v-else-if="item.status == 3" :style="{ color: '#009240' }">{{ item.statusText }}</div>
+              <div v-else-if="item.status == 4" :style="{ color: '#d7000f' }">{{ item.statusText }}</div>
             </div>
             <div class="mainItem" @click="goInfo(item.id)">
               <div>演练项目</div>
@@ -347,6 +350,9 @@ export default {
             this.finished = false
             this.taskList = rows
           }
+        } else {
+          this.finished = true
+          this.taskList = []
         }
       })
     },

+ 3 - 0
src/views/menu/rehearsalTask/learning.vue

@@ -232,6 +232,9 @@ export default {
             this.finished = false
             this.taskList = rows
           }
+        }else{
+          this.finished = true
+          this.taskList =[]
         }
       })
     },

+ 4 - 1
src/views/menu/rehearsalTask/optimal.vue

@@ -80,7 +80,7 @@
             <div class="titleClass">
               <div class="title">{{ item.title }}</div>
               <div>
-                <van-button type="info" v-if="isSign(item)" size="mini" @click="commentSign(item.id)"
+                <van-button type="info" v-if="isSign(item)" size="small" @click="commentSign(item.id)"
                   >评优推优</van-button
                 >
               </div>
@@ -308,6 +308,9 @@ export default {
             this.finished = false
             this.taskList = rows
           }
+        }else{
+          this.finished = true
+          this.taskList =[]
         }
       })
     },

+ 3 - 0
src/views/menu/resumptionEvaluate/index.vue

@@ -217,6 +217,9 @@ export default {
             this.finished = false
             this.taskList = rows
           }
+        }else{
+          this.finished = true
+          this.taskList =[]
         }
       })
     },

+ 3 - 3
src/views/menu/training/components/addTraining.vue

@@ -131,7 +131,7 @@
       <!-- 上传 -->
       <van-field readonly required clickable name="uploader" label="上传图片">
         <template #input>
-          <Upload v-model="form.imageList" :maxCount="5" @input="listHandler"></Upload>
+          <Upload v-model="form.imageList" :multiple="true" :maxCount="5" @input="listHandler"></Upload>
         </template>
       </van-field>
       <div class="btns">
@@ -414,8 +414,8 @@ export default {
     // 表单提交
     submitHandlerConfirm(type) {
       let obj = JSON.parse(JSON.stringify(this.form))
-      obj.trainingEndDateTime=obj.trainingEndDateTime+':00'
-      obj.trainingStartDateTime=obj.trainingStartDateTime+':00'
+      obj.trainingEndDateTime=obj.trainingEndDateTime?obj.trainingEndDateTime+':00':''
+      obj.trainingStartDateTime=obj.trainingStartDateTime?obj.trainingStartDateTime+':00':''
       obj.imageList = obj.imageList.map(item => item.path).join(',')
       console.log(obj.imageList)
       obj.taskUserList = []

+ 10 - 35
src/views/menu/training/index.vue

@@ -96,10 +96,10 @@
             <div class="titleClass">
               <div class="title">{{ item.title }}</div>
               <div>
-                <van-button type="info" v-if="isSign(item)" size="mini" @click="trainSign(item.id)"
+                <van-button type="info" v-if="isSign(item)" size="small" @click="trainSign(item.id)"
                   >培训登记</van-button
                 >
-                <van-button type="info" v-if="isSignature(item)" size="mini" @click="signature(item.id)"
+                <van-button type="info" v-if="isSignature(item)" size="small" @click="signature(item.id)"
                   >签名</van-button
                 >
               </div>
@@ -112,16 +112,11 @@
             </div>
             <div class="mainItem" @click="goInfo(item.id)">
               <div>培训状态</div>
-              <div>{{ item.statusText }}</div>
+              <div v-if="item.status==0" :style="{'color':'#008cd6'}">{{ item.statusText }}</div>
+              <div v-else-if="item.status==1" :style="{'color':'#bc9f71'}">{{ item.statusText }}</div>
+              <div v-else-if="item.status==3" :style="{'color':'#d7000f'}">{{ 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.trainingStartDateTime }}</div>
-            </div> -->
+            
             <div class="mainItem">
               <div>签名情况</div>
               <div class="condition" @click="signatureCondition(item.id)">{{ item.signNums }}</div>
@@ -209,30 +204,6 @@ export default {
     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)
@@ -367,6 +338,9 @@ export default {
             this.finished = false
             this.taskList = rows
           }
+        }else{
+          this.finished = true
+          this.taskList =[]
         }
       })
     },
@@ -582,6 +556,7 @@ export default {
 }
 :deep.van-field--disabled .van-field__label {
   color: #323233;
+
 }
 :deep .van-field__control[disabled] {
   color: #323233;

+ 2 - 2
vue.config.js

@@ -109,9 +109,9 @@ module.exports = defineConfig({
         }
       },
       '/dev': {
-        // target: "http://10.87.10.55:8080",
+        target: "http://10.87.10.55:8080",
         // target: "http://10.87.11.173:8080",
-        target: "http://10.87.10.47:8080",
+        // target: "http://10.87.10.47:8080",
         // ws:true,
         changOrigin:true,
         pathRewrite:{