Explorar o código

会议管理时间计算bug修改

ysc hai 1 ano
pai
achega
31bb725eb0
Modificáronse 2 ficheiros con 143 adicións e 126 borrados
  1. 7 1
      src/utils/date.js
  2. 136 125
      src/views/meeting/meeting.vue

+ 7 - 1
src/utils/date.js

@@ -89,7 +89,7 @@ export default {
   getMonthDays(date) {
     return moment(date).daysInMonth();
   },
-  lastDayOfMonth(date){
+  lastDayOfMonth(date) {
     if (date) {
       return moment(date).endOf('month').format(DATE_FORMAT)
     }
@@ -101,6 +101,12 @@ export default {
     }
     return moment().add(num, 'weeks').format(DATE_FORMAT)
   },
+  afterTime(date, minutes = 1) {
+    if (date) {
+      return moment(date).add(minutes, 'minutes').format(DATE_TIME_FORMAT)
+    }
+    return moment().add(minutes, 'minutes').format(DATE_TIME_FORMAT)
+  },
 
   firstDayOfNextWeek(date) {
     if (date) {

+ 136 - 125
src/views/meeting/meeting.vue

@@ -90,8 +90,13 @@
       </el-table-column>
       <el-table-column prop="status" label="确认状态" width="80">
         <template slot-scope="scope">
-          <div v-if="scope.row.meetingConfirmStatus===0 && (scope.row.meetingType===1 || scope.row.meetingType===2)">未确认</div>
-          <div v-else-if="scope.row.meetingConfirmStatus===1 && (scope.row.meetingType===1 || scope.row.meetingType===2)">已确认</div>
+          <div v-if="scope.row.meetingConfirmStatus===0 && (scope.row.meetingType===1 || scope.row.meetingType===2)">
+            未确认
+          </div>
+          <div
+            v-else-if="scope.row.meetingConfirmStatus===1 && (scope.row.meetingType===1 || scope.row.meetingType===2)">
+            已确认
+          </div>
           <div v-else>无需确认</div>
         </template>
       </el-table-column>
@@ -161,17 +166,17 @@
         <el-form-item label="会议地点:" prop="meetingPlace" :rules="[{required:true,message: '请输入会议地点', trigger: 'blur'}]">
           <el-input size="mini" v-model="editForm.meetingPlace"></el-input>
         </el-form-item>
-        <el-form-item v-show="false" label="会议时间:">
-          <el-date-picker
-            v-model="editForm.time"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            format="yyyy-MM-dd HH:mm:ss"
-            type="datetimerange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期">
-          </el-date-picker>
-        </el-form-item>
+        <!--        <el-form-item v-show="false" label="会议时间:">-->
+        <!--          <el-date-picker-->
+        <!--            v-model="editForm.time"-->
+        <!--            value-format="yyyy-MM-dd HH:mm:ss"-->
+        <!--            format="yyyy-MM-dd HH:mm:ss"-->
+        <!--            type="datetimerange"-->
+        <!--            range-separator="至"-->
+        <!--            start-placeholder="开始日期"-->
+        <!--            end-placeholder="结束日期">-->
+        <!--          </el-date-picker>-->
+        <!--        </el-form-item>-->
         <el-form-item label="会议时间:" prop="time">
           <el-date-picker
             v-model="editForm.beginTime"
@@ -189,9 +194,9 @@
             placeholder="选择会议结束时间" @change="chooseMeetingEndTime">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="会议时长:" :rules="[{required:true,message: '请选择会议时长'}]" >
-          <el-select v-model="editForm.duration"   placeholder="请选择会议时长"   @change="chooseMeetingTime">
-            <el-option label="15分钟"  :value="15" key="15分钟" >15分钟</el-option>
+        <el-form-item label="会议时长:" :rules="[{required:true,message: '请选择会议时长'}]">
+          <el-select v-model="editForm.duration" placeholder="请选择会议时长" @change="chooseMeetingTime">
+            <el-option label="15分钟" :value="15" key="15分钟">15分钟</el-option>
             <el-option label="30分钟" :value="30" key="30分钟">30分钟</el-option>
             <el-option label="45分钟" :value="45" key="45分钟">45分钟</el-option>
             <el-option label="1小时" :value="60" key="1小时">1小时</el-option>
@@ -241,12 +246,12 @@
           </el-table>
         </el-form-item>
         <el-form-item label="会议备注:">
-          <div id="editorElem" style="text-align:left" ></div>
+          <div id="editorElem" style="text-align:left"></div>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button size="mini" @click="closeDialog">取消</el-button>
-        <el-button size="mini" type="primary"  class="title" @click="submitForm('editForm')">保存</el-button>
+        <el-button size="mini" type="primary" class="title" @click="submitForm('editForm')">保存</el-button>
       </div>
     </el-dialog>
 
@@ -345,8 +350,9 @@
         <el-table-column label="执行人" width="180">
           <template slot-scope="scope">
             <el-input size="mini" v-model="scope.row.executorName" :readonly="true"
-                      @keyup.enter.native="openUsers1('executorName',scope.row)" @input="editMeetingContents(scope.row)">
-              <el-button @click="openUsers1('executorName',scope.row)" icon="el-icon-search" slot="append" ></el-button>
+                      @keyup.enter.native="openUsers1('executorName',scope.row)"
+                      @input="editMeetingContents(scope.row)">
+              <el-button @click="openUsers1('executorName',scope.row)" icon="el-icon-search" slot="append"></el-button>
             </el-input>
           </template>
         </el-table-column>
@@ -360,16 +366,19 @@
                             style="width: 100%"
                             range-separator="至"
                             start-placeholder="开始日期"
-                            end-placeholder="结束日期" @change="editMeetingContents(scope.row)" >
+                            end-placeholder="结束日期" @change="editMeetingContents(scope.row)">
             </el-date-picker>
           </template>
         </el-table-column>
       </el-table>
       <div slot="footer" class="dialog-footer">
-        <el-button v-if="pro.status!==0 && pro.meetingConfirmStatus===0" type="success" size="mini" @click="confirmMeeting(pro)">会议结果确认
+        <el-button v-if="pro.status!==0 && pro.meetingConfirmStatus===0" type="success" size="mini"
+                   @click="confirmMeeting(pro)">会议结果确认
+        </el-button>
+        <el-button size="mini" @click="closeProjectMeetingDailog">取消</el-button>
+        <el-button size="mini" v-if="pro.meetingConfirmStatus===0" type="primary" class="title"
+                   @click="submitMeetingOptionsForm(pro,'editForm')">保存
         </el-button>
-        <el-button size="mini" @click="closeProjectMeetingDailog" >取消</el-button>
-        <el-button size="mini" v-if="pro.meetingConfirmStatus===0" type="primary" class="title" @click="submitMeetingOptionsForm(pro,'editForm')">保存</el-button>
       </div>
     </el-dialog>
 
@@ -440,7 +449,8 @@ import {
 } from '@/api/meeting/meeting'
 import {getDeptUserTree} from '@/api/system/user'
 import {getProjectList} from "@/api/task/project";
-import { getProjects } from '@/api/meeting/work'
+import {getProjects} from '@/api/meeting/work'
+import DateUtil from "@/utils/date"
 
 export default {
   name: 'Meeting',
@@ -454,8 +464,8 @@ export default {
   },
   data() {
     return {
-      filterText:null,
-      filterText1:null,
+      filterText: null,
+      filterText1: null,
       projectMeetingDetailVisble: false,
       otherMeetingDetailVisble: false,
       tableData: [],
@@ -472,12 +482,12 @@ export default {
         meetingName: '',
         meetingType: null,
         status: null,
-        searchAuthFlag:false,
+        searchAuthFlag: false,
 
       },
       editFormVisible: false,
       title: '创建会议',
-      endTimeShow:false,
+      endTimeShow: false,
       editForm: {
         id: null,
         meetingName: '',
@@ -486,9 +496,9 @@ export default {
         projectId: null,
         meetingPlace: '',
         time: null,
-        beginTime:null,
-        startTime:null,
-        endTime:null,
+        beginTime: null,
+        startTime: null,
+        endTime: null,
         outAttendees: '',
         innerAttendees: '',
         innerAttendesss: null,
@@ -496,11 +506,11 @@ export default {
         remark: '',
         emcee: '',
         recorder: '',
-        duration:null,
+        duration: null,
         meetingContents: [
           {content: '会议内容', 'op': ''}
         ],
-        remarks:null,
+        remarks: null,
       },
       usersVisble: false,
       userList: [],
@@ -520,10 +530,10 @@ export default {
         recorder: '',
         remark: '',
         status: null,
-        beginTime:null,
-        endTime:null,
-        meetingConfirmStatus:0,
-        remarks:null,
+        beginTime: null,
+        endTime: null,
+        meetingConfirmStatus: 0,
+        remarks: null,
         meetingContents: [{
           id: null,
           meetingId: null,
@@ -563,10 +573,10 @@ export default {
     },
     getData(data) {
       // 获取会议列表查询权限
-      let permissions= this.$store.getters.permissions;
-      for(let i=0;i<permissions.length;i++){
-        if(permissions[i]==='meeting:meeting:list'){
-          this.formInline.searchAuthFlag=true
+      let permissions = this.$store.getters.permissions;
+      for (let i = 0; i < permissions.length; i++) {
+        if (permissions[i] === 'meeting:meeting:list') {
+          this.formInline.searchAuthFlag = true
           break;
         }
       }
@@ -643,29 +653,29 @@ export default {
       }
 
     },
-    async meetingAuth(id){
-     await  meetingAuthById(id).then(res=>{
-        let flag=true
-        if(res.success===false){
-          flag=false
+    async meetingAuth(id) {
+      await meetingAuthById(id).then(res => {
+        let flag = true
+        if (res.success === false) {
+          flag = false
           this.$message.error(res.data)
         }
         return flag;
       });
     },
-    submitForm(row,str) {
+    submitForm(row, str) {
       this.$refs["form"].validate((valid) => {
         if (valid) {
           let data = this.editForm;
-          let duration =data.duration;
-          if(duration===undefined || duration===null){
+          let duration = data.duration;
+          if (duration === undefined || duration === null) {
             this.$message.error("请选择会议时长!")
             return
-          }else{
-            let times=[]
+          } else {
+            let times = []
             times.push(this.editForm.beginTime)
             times.push(this.editForm.endTime)
-            this.editForm.time=times
+            this.editForm.time = times
             addMeeting(data).then(response => {
               this.$message({
                 message: '操作成功!',
@@ -699,10 +709,10 @@ export default {
       //删除会议
       let id = row.id;
       //验证会议删除权限--创建者才能删除
-      meetingAuthById(id).then(res=>{
+      meetingAuthById(id).then(res => {
         if (res.success === false) {
           this.$message.error(res.data)
-        }else{
+        } else {
           deleteMeeting(id).then(() => {
             this.$message({
               message: '操作成功!',
@@ -715,13 +725,13 @@ export default {
 
     },
     confirmMeeting(row) {
-      let status=row.status;
-      if(status!==2){
+      let status = row.status;
+      if (status !== 2) {
         this.$message.warning("会议暂未结束,请会议结束后在确认!");
         return
       }
-      let meetingConfirmStatus=row.meetingConfirmStatus
-      if(meetingConfirmStatus===1){
+      let meetingConfirmStatus = row.meetingConfirmStatus
+      if (meetingConfirmStatus === 1) {
         this.$message.warning("会议已经确认,请勿再次操作!")
         return
       }
@@ -730,7 +740,7 @@ export default {
       let data = this.pro.meetingContents;
       for (let i = 0; i < data.length; i++) {
         let t = data[i];
-        if (t.question === '' || t.optionss === '' || t.executorName === '' || t.times===null ||  t.times.length ===0  ) {
+        if (t.question === '' || t.optionss === '' || t.executorName === '' || t.times === null || t.times.length === 0) {
           this.$message({
             message: '请将信息填写完整!',
             type: 'warning'
@@ -765,11 +775,11 @@ export default {
         this.pro.innerAttendees = row.innerAttendees
         this.pro.recorder = row.recorder
         this.pro.times = row.beginTime + '至' + row.endTime
-        this.pro.beginTime=row.beginTime
-        this.pro.endTime=row.endTime
+        this.pro.beginTime = row.beginTime
+        this.pro.endTime = row.endTime
         this.pro.meetingPlace = row.meetingPlace
-        this.pro.meetingConfirmStatus=row.meetingConfirmStatus
-        this.pro.remarks=row.remarks
+        this.pro.meetingConfirmStatus = row.meetingConfirmStatus
+        this.pro.remarks = row.remarks
         let meetingType = row.meetingType
         //1-周例会,2-项目会议,3-实施会议,4-其他会议
         let meetingTypeNames = '';
@@ -802,12 +812,12 @@ export default {
         this.pro.id = row.id
         getMeetingDetailsById(meetingId).then(res => {
           let data = res.data.meetingContents
-          let innerAttendess=JSON.parse(res.data.innerAttendees)
-          let temp=[];
-          for(let i = 0; i < innerAttendess.length; i++) {
+          let innerAttendess = JSON.parse(res.data.innerAttendees)
+          let temp = [];
+          for (let i = 0; i < innerAttendess.length; i++) {
             temp.push(innerAttendess[i])
           }
-          this.pro.innerAttendeesNew=temp
+          this.pro.innerAttendeesNew = temp
           this.pro.meetingContents = data
           if (row.meetingType === 2) {
             this.projectMeetingDetailVisble = true
@@ -822,12 +832,12 @@ export default {
         this.$router.push({path: '/meeting/weeklyRecords', query: params});
       }
     },
-    startMeeting(row){
-      let id=row.id;
-      meetingAuthById(id).then(res=> {
+    startMeeting(row) {
+      let id = row.id;
+      meetingAuthById(id).then(res => {
         if (res.success === false) {
           this.$message.error(res.data)
-        }else{
+        } else {
           startMeetingById(id).then(res => {
             this.$message({
               message: '操作成功!',
@@ -838,12 +848,12 @@ export default {
         }
       })
     },
-    endMeetingClick(row){
-      let id=row.id;
-      meetingAuthById(id).then(res=> {
+    endMeetingClick(row) {
+      let id = row.id;
+      meetingAuthById(id).then(res => {
         if (res.success === false) {
           this.$message.error(res.data)
-        }else{
+        } else {
           endMeeting(id).then(res => {
             this.$message({
               message: '操作成功!',
@@ -938,11 +948,11 @@ export default {
       this.closeUser1Dialog()
     },
     handleEdit(row) {
-      let meetingId=row.id
-      meetingAuthById(meetingId).then(res=>{
+      let meetingId = row.id
+      meetingAuthById(meetingId).then(res => {
         if (res.success === false) {
           this.$message.error(res.data)
-        }else{
+        } else {
           getProjectList("").then(res => {
             this.projectList = res.data;
           })
@@ -962,9 +972,11 @@ export default {
             time.push(data.beginTime);
             time.push(data.endTime);
             this.editForm.time = time;
-            this.editForm.startTime=data.beginTime
-            this.editForm.endTime=data.endTime
-            this.editForm.duration=data.duration
+            this.editForm.endTime = data.endTime
+            this.editForm.duration = data.duration
+            if (this.editForm.duration === 0) {
+              this.endTimeShow = true
+            }
             this.title = '修改会议'
             this.editFormVisible = true
 
@@ -990,16 +1002,16 @@ export default {
     closeProjectMeetingDailog() {
       this.projectMeetingDetailVisble = false;
     },
-    submitMeetingOptionsForm(row,str) {
-      let meetingConfirmStatus=row.meetingConfirmStatus
-      if(meetingConfirmStatus===1){
+    submitMeetingOptionsForm(row, str) {
+      let meetingConfirmStatus = row.meetingConfirmStatus
+      if (meetingConfirmStatus === 1) {
         this.$message.warning("会议已经确认,请勿再次操作!")
         return
       }
       let data = this.pro.meetingContents;
       for (let i = 0; i < data.length; i++) {
         let t = data[i];
-        if (t.question === '' || t.optionss === '' || t.executorName === '' || t.times===null ||  t.times.length ===0) {
+        if (t.question === '' || t.optionss === '' || t.executorName === '' || t.times === null || t.times.length === 0) {
           this.$message({
             message: '请将信息填写完整!',
             type: 'warning'
@@ -1018,29 +1030,23 @@ export default {
     closeotherMeetingDailog() {
       this.otherMeetingDetailVisble = false;
     },
-    changeMeetingExternal(){
+    changeMeetingExternal() {
 
     },
-    chooseMeetingTime(){
+    chooseMeetingTime() {
       //选择会议时长
-      let duration=this.editForm.duration
-      if(duration===0){
-        this.endTimeShow=true
-      }else{
-        this.endTimeShow=false
+      let duration = this.editForm.duration
+      if (duration === 0) {
+        this.endTimeShow = true
+      } else {
+        this.endTimeShow = false
         //计算会议结束日期
-        let startTime=this.editForm.startTime
-        if(startTime===undefined || startTime===null){
-          let currentDate = new Date();
-          let newDate = new Date(currentDate.getTime() + duration * 60000);
-          let now = this.$moment(newDate).format('YYYY-MM-DD HH:mm:ss')
-          this.editForm.endTime=now
-        }else{
-          let currentDate = new Date(startTime);
-          let newDate = new Date(currentDate.getTime() + duration * 60000);
-          let now = this.$moment(newDate).format('YYYY-MM-DD HH:mm:ss')
-          this.editForm.endTime=now
+        let beginTime = this.editForm.beginTime
+        if (beginTime === undefined || beginTime === null) {
+          return
         }
+        let endTime = DateUtil.afterTime(beginTime, duration)
+        this.editForm.endTime = endTime
       }
     },
     addMinutesToCurrentTime(minutes) {
@@ -1048,48 +1054,53 @@ export default {
       let newDate = new Date(currentDate.getTime() + minutes * 60000);
       return newDate;
     },
-    chooseMeetingStartTime(){
-      let startTime=this.editForm.beginTime
-      if(startTime===undefined || startTime===null){
+    chooseMeetingStartTime() {
+      let beginTime = this.editForm.beginTime
+      if (beginTime === undefined || beginTime === null) {
         this.$message.error("请选择会议开始时间!")
         return
       }
-      let duration=this.editForm.duration
-      let currentDate = new Date(startTime);
-      let newDate = new Date(currentDate.getTime() + duration * 60000);
-      let now = this.$moment(newDate).format('YYYY-MM-DD HH:mm:ss')
-      this.editForm.endTime=now
-
+      let duration = this.editForm.duration
+      if (duration === undefined || duration === null) {
+        return;
+      }
+      let endTime = DateUtil.afterTime(beginTime, duration);
+      this.editForm.endTime = endTime
     },
-    chooseMeetingEndTime(){
-      let startTime=this.editForm.beginTime
-      let endTime=this.editForm.endTime
-      if(startTime===undefined || startTime===null){
+    chooseMeetingEndTime() {
+      let startTime = this.editForm.beginTime
+      let endTime = this.editForm.endTime
+      if (startTime === undefined || startTime === null) {
         this.$message.error("请选择会议开始时间!")
         return
       }
-      if(endTime===undefined || endTime===null){
+      if (endTime === undefined || endTime === null) {
         this.$message.error("请选择会议结束时间!")
         return
       }
-      if(startTime>endTime){
+      if (startTime > endTime) {
         this.$message.error("会议开始时间不能大于会议结束时间!")
+        this.editForm.endTime = null
         return
       }
       //计算时长
-      let calculateTimeDuration=this.calculateTimeDuration(startTime,endTime);
-      this.editForm.duration=calculateTimeDuration
+      let calculateTimeDuration = this.calculateTimeDuration(startTime, endTime);
+      this.editForm.duration = calculateTimeDuration
     },
     calculateTimeDuration(time1, time2) {
       let date1 = new Date(time1);
       let date2 = new Date(time2);
       let duration = Math.abs(date1.getTime() - date2.getTime());
+      let arr = [15, 30, 45, 60, 120, 180]
+      if (arr.indexOf(duration) < 0) {
+        duration = 0
+      }
       return duration;
     },
-    editMeetingContents(row){
-      let data=row;
-      editMeetingContent(data).then(res=>{
-       // this.$message.success("操作成功!")
+    editMeetingContents(row) {
+      let data = row;
+      editMeetingContent(data).then(res => {
+        // this.$message.success("操作成功!")
       });
     },
     filterNode(value, data) {