소스 검색

新建日程优化

wangziqian 4 년 전
부모
커밋
616216f172

+ 1 - 1
src/api/onlineQuality.js

@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-const commonUrl = 'http://10.179.22.191:8083'
+const commonUrl = 'http://10.179.148.222:8083'
 
 export function addCheckTemplate(data) {
   return request({

+ 7 - 0
src/api/workSchedule.js

@@ -224,3 +224,10 @@ export function teamReminding(data) {
     data
   })
 }
+// 获取日程类型枚举类接口
+export function showWorkbenchEnum(data) {
+  return request({
+    url: TeamManagement + `/config/showWorkbenchEnum`,
+    method: 'get'
+  })
+}

+ 4 - 1
src/views/projectManage/projectList/components/modifySchedule.vue

@@ -218,7 +218,10 @@ export default {
       }
       this.bizId = obj.bizId
       this.detailDayList = obj.dayList || []
-      this.schedule = `${obj.dayList[0]}-${obj.dayList[len - 1]}`
+      this.schedule =
+          obj.dayList[0] === obj.dayList[len - 1]
+            ? `${obj.dayList[0]}`
+            : `${obj.dayList[0]}-${obj.dayList[len - 1]}`
     },
     async getScheduleData(id) { // 当有传入的排期id的时候
       const res = await scheduleGet(id)

+ 58 - 79
src/views/workbench/person/components/calendarFormDialog.vue

@@ -3,36 +3,36 @@
     <article>
       <el-form ref="calendarform" :model="form" :rules="rules" label-position="left" label-width="90px">
         <el-row>
-          <el-col :span="18">
+          <el-col :span="24">
             <el-form-item label="日程名称" prop="name">
-              <el-input v-model="form.name" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="4">
-            <el-form-item prop="syncTeam">
-              <el-checkbox v-model="form.syncTeam" :true-label="1" :false-label="0">同步到团队</el-checkbox>
+              <el-input v-model="form.name" placeholder="请输入日程标题" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="12">
-            <el-form-item label="是否关联业务线" prop="isJoin" label-width="150px">
-              <el-radio-group v-model="form.isJoin" style="margin-bottom: -8px">
-                <el-radio :label="0">否</el-radio>
-                <el-radio :label="1">是</el-radio>
-              </el-radio-group>
+          <el-col :span="24">
+            <el-form-item label="日程类型" prop="type">
+              <el-select v-model="form.type" placeholder="请选择" style="width: 100%">
+                <el-option
+                  v-for="item in selfScheduleType"
+                  :key="'selfScheduleType'+item.code"
+                  :label="item.msg"
+                  :value="item.code"
+                />
+              </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item v-if="form.isJoin" label="业务线" prop="bizId">
-              <el-select v-model="form.bizId" style="width: 100%">
-                <el-option v-for="item in businesslines" :key="item.code" :label="item.name" :value="item.code" />
-              </el-select>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="日程模式" prop="syncTeam">
+              <el-radio v-model="form.syncTeam" :label="1">公开</el-radio>
+              <el-radio v-model="form.syncTeam" :label="0">私密(仅参与人员可见)</el-radio>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-form-item label="参与人" prop="people">
-          {{ form.people }}
+        <el-form-item label="参与人" prop="peopleList">
+          <search-people :value.sync="form.peopleList" :multiple="true" style="width: 100%" :size="'medium'" />
         </el-form-item>
         <el-form-item label="时间" prop="dayList">
           <div v-show="form.dayList.length > 0 ">{{ schedule }}(用时<span class="blue">{{ detailDayList.length }}</span>天)</div>
@@ -50,17 +50,17 @@
 </template>
 <script>
 const _ = require('lodash')
-import moment from 'moment'
-import { settingGetBizList } from '@/api/defectManage'
-import { createSelfSchedule, updateSelfSchedule } from '@/api/workSchedule.js'
+import { createSelfSchedule, updateSelfSchedule, showWorkbenchEnum } from '@/api/workSchedule.js'
 import { getSeprateDayInfo } from '@/api/projectViewDetails'
 import normalDialog from '@/components/dialog/normalDialog'
 import selDatePicker from '@/components/picker/SelDatePicker'
+import searchPeople from '@/components/select/searchPeople'
 
 export default {
   components: {
     normalDialog,
-    selDatePicker
+    selDatePicker,
+    searchPeople
   },
   props: {
     title: {
@@ -79,25 +79,23 @@ export default {
   data() {
     return {
       refresh: true,
-      businesslines: [],
       isVisible: this.visible,
       form: {
-        name: '',
+        name: null,
         dayList: [],
-        isJoin: 0, // 是否关联业务线
-        syncTeam: 1, // 是否同步 0 不同步 1同步
-        bizId: null,
+        syncTeam: 1, // 0 私密 1 公开
         desc: '',
-        people: localStorage.getItem('realname')
+        peopleList: [],
+        type: null
       },
+      selfScheduleType: [], // 类型列表
       detailDayList: [], // 详细的日期
       schedule: '',
       rules: {
         name: [{ required: true, message: '请输入日程名称', trigger: 'blur' }],
-        isJoin: [
-          { required: true, message: '请选择是否关联业务线', trigger: 'change' }
-        ],
         people: [{ required: true, message: '请输入负责人', trigger: 'blur' }],
+        syncTeam: [{ required: true, message: '请选择日程模式', trigger: 'blur' }],
+        peopleList: [{ required: true, message: '请选择参与人', trigger: 'blur' }],
         dayList: [
           {
             type: 'array',
@@ -105,8 +103,7 @@ export default {
             message: '请选择日程时间',
             trigger: 'change'
           }
-        ],
-        bizId: [{ required: true, message: '请选择业务线', trigger: 'change' }]
+        ]
       }
     }
   },
@@ -114,11 +111,7 @@ export default {
     visible: {
       handler(newV) {
         this.isVisible = newV
-        if (this.data && this.data.id) {
-          this.isEditData()
-        } else {
-          this.isExistDetail()
-        }
+        this.data && this.data.id ? this.isEditData() : this.isExistDetail()
       },
       immediate: true,
       deep: true
@@ -127,12 +120,11 @@ export default {
       handler(newV) {
         this.data = newV
       },
-      deep: true,
-      immediate: true
+      deep: true
     }
   },
-  mounted() {
-    this.settingGetBizList()
+  created() {
+    this.showWorkbenchEnum()
   },
   methods: {
     confirmForm() {
@@ -152,25 +144,29 @@ export default {
     },
     isEditData() {
       // 编辑状态下处理数据
-      this.form = _.cloneDeep(this.data)
-      this.detailDayList = _.cloneDeep(this.form.detailDayList)
-      this.schedule = this.form.schedule
-      this.schedule = `${this.form.dayList[0]}-${this.form.dayList[1]}`
-      delete this.form.detailDayList
-      delete this.form.schedule
+      this.$nextTick(() => {
+        this.form = _.cloneDeep(this.data)
+        this.detailDayList = _.cloneDeep(this.form.detailDayList)
+        this.schedule = this.form.schedule
+        this.schedule = `${this.form.dayList[0]}-${this.form.dayList[1]}`
+        delete this.form.detailDayList
+        delete this.form.schedule
+      })
     },
     isExistDetail() {
-      console.log(this.data)
       // 当新建的时候存在详细日期时候的数据处理
       if (this.data) {
-        this.form.dayList = Array.from(
-          new Set([this.data.startStr, this.data.endStr])
-        )
-        this.getDetailDayByDayList(this.data.startStr, this.data.endStr)
+        const obj = _.cloneDeep(this.data)
+        const len = obj.dayList.length
+        this.form = {
+          ...this.form,
+          dayList: [obj.dayList[0], obj.dayList[len - 1]]
+        }
+        this.detailDayList = obj.dayList || []
         this.schedule =
-          this.data.startStr === this.data.endStr
-            ? `${this.data.startStr}`
-            : `${this.data.startStr}-${this.data.endStr}`
+          obj.dayList[0] === obj.dayList[len - 1]
+            ? `${obj.dayList[0]}`
+            : `${obj.dayList[0]}-${obj.dayList[len - 1]}`
       } else {
         this.form.dayList = []
       }
@@ -180,6 +176,10 @@ export default {
       this.detailDayList = e
       this.getSeprateDayInfo(e)
     },
+    async showWorkbenchEnum() {
+      const res = await showWorkbenchEnum()
+      if (res.code === 200) this.selfScheduleType = res.data.selfScheduleType
+    },
     async getSeprateDayInfo(dataArr) {
       // 获取选中时间中的工作日时间
       const res = await getSeprateDayInfo(dataArr)
@@ -195,10 +195,6 @@ export default {
     },
     // 新建日程
     async createSelfSchedule(params) {
-      console.log(params)
-      if (params.isJoin === 0) {
-        params.bizId = null
-      }
       const res = await createSelfSchedule(params)
       if (res.code === 200) {
         this.$emit('confirm')
@@ -207,28 +203,11 @@ export default {
     },
     // 编辑日程
     async updateSelfSchedule(params) {
-      console.log(params)
       const res = await updateSelfSchedule(params)
       if (res.code === 200) {
         this.$emit('confirm')
         this.cancel()
       }
-    },
-    async settingGetBizList() {
-      const res = await settingGetBizList({})
-      res.code === 200
-        ? (this.businesslines = res.data)
-        : (this.businesslines = [])
-    },
-    getDetailDayByDayList(start, end) {
-      let nextDate = moment(_.cloneDeep(start))
-      end = moment(end).add(1, 'day')
-      const NewArr = []
-      while (nextDate.isBefore(end)) {
-        NewArr.push(nextDate.format('YYYY.MM.DD'))
-        nextDate = nextDate.add(1, 'day')
-      }
-      this.detailDayList = NewArr
     }
   }
 }

+ 4 - 5
src/views/workbench/person/index.vue

@@ -162,6 +162,7 @@
       <!-- 新建操作 -->
       <!-- 日程操作弹框 -->
       <calendar-dialog
+        v-if="updateSchedule.visible"
         :title="'编辑日程'"
         :visible.sync="updateSchedule.visible"
         :data="updateSchedule.data"
@@ -359,8 +360,7 @@ export default {
       this.createDialog = false
       if (!bizId) { // 新建日程
         this.dateClick({
-          startStr: this.selectRangeData[0].replace(/-/g, '.'),
-          endStr: this.selectRangeData[1].replace(/-/g, '.')
+          dayList: getAllTime(...this.selectRangeData)
         })
       } else { // 新建排期
         this.visibleSchedule = true
@@ -386,11 +386,10 @@ export default {
         id: this.nowDetailData.id,
         name: this.nowDetailData.name,
         dayList: Array.from(new Set([dayArr[0], dayArr[dayArr.length - 1]])),
-        isJoin: this.nowDetailData.bizId !== null ? 1 : 0, // 是否关联业务线
         syncTeam: this.nowDetailData.syncTeam, // 是否同步 0 不同步 1同步
-        bizId: this.nowDetailData.bizId || null,
+        type: this.nowDetailData.type,
         desc: this.nowDetailData.desc,
-        people: this.nowDetailData.peopleObject.name,
+        peopleList: this.nowDetailData.peoples.split(','),
         schedule: this.nowDetailData.seperateDaysHasHoliday
       }
       this.updateSchedule.data = form

+ 36 - 4
src/views/workbench/team/index.vue

@@ -65,6 +65,7 @@
             :add-button="false"
             @change="queryTeamWorkListByTime"
             @eventClick="showSchedule"
+            @select="selectDates"
           >
             <el-checkbox-group v-model="origin" class="origin">
               <el-checkbox :label="0" @change="queryTeamWorkListByTime(calendarView)">任务排期</el-checkbox>
@@ -154,6 +155,9 @@
       </section>
     </el-container>
     <!-- 日程 -->
+    <!-- 新建操作 -->
+    <create-dialog :visible.sync="createDialog" @change="createSchOrCal" />
+    <!-- 新建操作 -->
     <!-- 日程操作弹框 -->
     <calendar-dialog
       :title="'编辑日程'"
@@ -183,6 +187,7 @@
 
 <script>
 import moment from 'moment'
+import dayjs from 'dayjs'
 import { settingGetBizList } from '@/api/defectManage'
 import {
   queryTeamInfoList,
@@ -208,6 +213,8 @@ import taskList from '@/views/workbench/team/components/taskList'
 import bugTableList from '@/views/workbench/bugTableList.vue'
 import statisticsSection from '@/views/workbench/components/statisticsSection'
 import searchSection from '@/views/workbench/components/searchSection'
+import createDialog from '@/views/workbench/components/createDialog'
+import { getAllTime } from '@/utils/global.js'
 
 export default {
   components: {
@@ -221,7 +228,8 @@ export default {
     needsList,
     taskList,
     statisticsSection,
-    searchSection
+    searchSection,
+    createDialog
   },
   data() {
     return {
@@ -253,6 +261,8 @@ export default {
       nowDetailData: {}, // 当前选中日程的数据
       detailXY: [0, 0], // 详情弹框位置
       origin: [0, 1], // 日程,排期
+      createDialog: false, // 新建弹框
+      selectRangeData: [], // 已选择的范围日期
       createSchedule: { // 新建日程
         visible: false,
         data: null
@@ -357,6 +367,29 @@ export default {
       this.showDetail = true
       this.detailXY = [`${e.jsEvent.clientX - 200}px`, `${e.jsEvent.clientY + 20}px`]
     },
+    selectDates(selectionInfo) { // 多选日期新建日程弹框
+      this.selectRangeData = [
+        dayjs(selectionInfo.startStr).format('YYYY-MM-DD'),
+        dayjs(selectionInfo.endStr).subtract(1, 'day').format('YYYY-MM-DD')
+      ]
+      this.createDialog = true
+    },
+    createSchOrCal(bizId) { // 创建排期或者日程
+      this.createDialog = false
+      if (!bizId) { // 新建日程
+        this.dateClick({
+          dayList: getAllTime(...this.selectRangeData)
+        })
+      } else { // 新建排期
+        this.visibleSchedule = true
+        this.isDelete = false
+        this.nowDetailData = {
+          dayList: getAllTime(...this.selectRangeData),
+          bizId: bizId
+        }
+        this.DialogTitle = '新建排期'
+      }
+    },
     dateClick(arg) { // 新建日程弹框
       this.createSchedule.data = arg
       this.createSchedule.visible = true
@@ -378,11 +411,10 @@ export default {
         id: this.nowDetailData.id,
         name: this.nowDetailData.name,
         dayList: Array.from(new Set([dayArr[0], dayArr[dayArr.length - 1]])),
-        isJoin: this.nowDetailData.bizId !== null ? 1 : 0, // 是否关联业务线
         syncTeam: this.nowDetailData.syncTeam, // 是否同步 0 不同步 1同步
-        bizId: this.nowDetailData.bizId || null,
+        type: this.nowDetailData.type,
         desc: this.nowDetailData.desc,
-        people: this.nowDetailData.peopleObject.name,
+        peopleList: this.nowDetailData.peoples.split(','),
         schedule: this.nowDetailData.seperateDaysHasHoliday
       }
       this.updateSchedule.data = form