Эх сурвалжийг харах

Merge branch 'http_test' of git.xiaojukeji.com:jacklijiajia/thoth-frontend into http_test

qinzhipeng_v@didiglobal.com 4 жил өмнө
parent
commit
0de37c35fc

+ 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({

+ 2 - 3
src/api/workSchedule.js

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

+ 21 - 0
src/utils/global.js

@@ -1,4 +1,5 @@
 let timer = null
+import dayjs from 'dayjs'
 export function debounce(func, delay) { // 防抖
   clearTimeout(timer)
   timer = setTimeout(() => {
@@ -22,3 +23,23 @@ export function deepClone(obj) {
 
   return newObj
 }
+export function getAllTime(start, end, noHoliday = true) {
+  console.log(start, end)
+  const NewArr = []
+  let nextDate = dayjs(start)
+  end = dayjs(end).add(1, 'day')
+  while (nextDate && nextDate.isBefore(end)) {
+    if (noHoliday) {
+      const isEx = NewArr.find(item => item === nextDate.format('YYYY.MM.DD'))
+      if (!isEx) {
+        NewArr.push(nextDate.format('YYYY.MM.DD'))
+      }
+    } else {
+      if (nextDate.day() < 6 && nextDate.day() > 0) { // 默认周六,末不在已选数组中
+        NewArr.push(nextDate.format('YYYY.MM.DD'))
+      }
+    }
+    nextDate = nextDate.add(1, 'day')
+  }
+  return NewArr
+}

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

@@ -175,11 +175,14 @@ export default {
     },
     detailData: {
       handler(newV, old) {
-        if (newV) {
+        if (newV && newV.id) {
           this.getScheduleData(newV.id)
+        } else if (newV) {
+          this.getSomeScheduleData(newV)
         }
       },
-      immediate: true
+      immediate: true,
+      deep: true
     },
     selectTaskList: { // 已选择任务列表
       handler(newV, old) {
@@ -207,7 +210,20 @@ export default {
     this.getNowTask()
   },
   methods: {
-    async getScheduleData(id) { // 当有传入的详细信息的时候
+    getSomeScheduleData(obj) { // 当传入部分详细信息时候
+      const len = obj.dayList.length
+      this.form = {
+        ...this.form,
+        dayList: [obj.dayList[0], obj.dayList[len - 1]]
+      }
+      this.bizId = obj.bizId
+      this.detailDayList = obj.dayList || []
+      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)
       let obj
       if (res.code === 200) {
@@ -229,7 +245,7 @@ export default {
       this.tasksDetailList = obj.taskObjectList || []
       this.peopleObjectList = obj.peopleObjectList.map(item => item.name) || []
     },
-    async getType() {
+    async getType() { // 获取排期类型
       const resEnum = await configShowTaskEnum()
       if (resEnum.code === 200) {
         this.taskScheduleEvent = resEnum.data.taskScheduleEvent

+ 38 - 6
src/views/workbench/components/createDialog.vue

@@ -12,8 +12,18 @@
     >
       <article>
         <div v-show="!bizSelect" class="select-section">
-          <div class="select-schedule" @click="create('schedule')">新建排期</div>
-          <div class="select-calendar" @click="create('calendar')">新建日程</div>
+          <div class="select-schedule" @click="create('schedule')">
+            <span class="select-icon">
+              <i class="el-icon-document" />
+            </span>
+            新建排期
+          </div>
+          <div class="select-calendar" @click="create('calendar')">
+            <span class="select-icon">
+              <i class="el-icon-date" />
+            </span>
+            新建日程
+          </div>
         </div>
         <div v-show="bizSelect" class="select-bizId">
           <i class="el-icon-arrow-left" @click="bizSelect = false;title = '请选择'" />
@@ -56,6 +66,12 @@ export default {
         this.show = newV
       },
       immediate: true
+    },
+    bizSelect: {
+      handler(newV) {
+        this.title = newV ? '新建排期' : '请选择'
+      },
+      immediate: true
     }
   },
   created() {
@@ -70,7 +86,6 @@ export default {
       if (type === 'calendar') {
         this.$emit('change')
       } else if (type === 'schedule') {
-        this.title = '新建排期'
         this.bizSelect = true
       }
     },
@@ -80,6 +95,8 @@ export default {
     },
     cancel() { // 关闭弹框
       this.show = false
+      this.bizSelect = false
+      this.bizId = null
       this.$emit('update:visible', this.show)
     }
   }
@@ -90,7 +107,7 @@ export default {
   padding: 20px !important;
 }
 >>>.el-dialog__body {
-  padding: 0 20px 10px 20px;
+  padding: 0 20px 0 20px;
 }
 >>>.el-dialog__title{
   padding-left: 10px;
@@ -118,12 +135,27 @@ export default {
   left: 10px;
   font-size: 18px;
 }
+.select-bizId {
+  margin-bottom: 25px;
+}
 .select-section {
   width: 100%;
   height: 100px;
   display: flex;
   flex-direction: column;
   justify-content: center;
+  color: #333B4A;
+  .select-icon {
+    height: 30px;
+    width: 30px;
+    margin-right: 10px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    border-radius: 50%;
+    background-color: rgba(64, 158, 255,1);
+    color: #FFFFFF;
+  }
   .select-schedule,.select-calendar {
     cursor: pointer;
     border-radius: 4px;
@@ -136,11 +168,11 @@ export default {
   }
   .select-schedule:hover{
     color:rgb(64, 158, 255);
-    background-color: rgba(64, 158, 255,0.1);
+    background-color: #EDEDED;
   }
   .select-calendar:hover{
     color:rgb(64, 158, 255);
-    background-color: rgba(64, 158, 255,0.1);
+    background-color: #EDEDED;
   }
 }
 </style>

+ 2 - 2
src/views/workbench/components/searchSection.vue

@@ -45,7 +45,7 @@
   </div>
 </template>
 <script>
-import { queryTeamMember, configShowWorkbenchEnum } from '@/api/workSchedule'
+import { queryTeamMember, showWorkbenchEnum } from '@/api/workSchedule'
 export default {
   props: {
     value: {
@@ -113,7 +113,7 @@ export default {
         this.checkAllMember = true
         this.colorHandler(this.memberList)
       }
-      const res_1 = await configShowWorkbenchEnum()
+      const res_1 = await showWorkbenchEnum()
       if (res_1.code === 200) {
         this.selfScheduleType = res_1.data.selfScheduleType // 日程类型
         this.taskScheduleEvent = res_1.data.taskScheduleEvent // 排期类型

+ 68 - 80
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,26 +103,28 @@ export default {
             message: '请选择日程时间',
             trigger: 'change'
           }
-        ],
-        bizId: [{ required: true, message: '请选择业务线', trigger: 'change' }]
+        ]
       }
     }
   },
   watch: {
-    visible(newVal, olfVal) {
-      this.isVisible = newVal
-      if (this.data && this.data.id) {
-        this.isEditData()
-      } else {
-        this.isExistDetail()
-      }
+    visible: {
+      handler(newV) {
+        this.isVisible = newV
+        this.data && this.data.id ? this.isEditData() : this.isExistDetail()
+      },
+      immediate: true,
+      deep: true
     },
-    data(newVal, olfVal) {
-      this.data = newVal
+    data: {
+      handler(newV) {
+        this.data = newV
+      },
+      deep: true
     }
   },
-  mounted() {
-    this.settingGetBizList()
+  created() {
+    this.showWorkbenchEnum()
   },
   methods: {
     confirmForm() {
@@ -144,24 +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() {
       // 当新建的时候存在详细日期时候的数据处理
       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 = []
       }
@@ -171,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)
@@ -186,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')
@@ -198,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
     }
   }
 }

+ 26 - 15
src/views/workbench/person/index.vue

@@ -162,6 +162,7 @@
       <!-- 新建操作 -->
       <!-- 日程操作弹框 -->
       <calendar-dialog
+        v-if="updateSchedule.visible"
         :title="'编辑日程'"
         :visible.sync="updateSchedule.visible"
         :data="updateSchedule.data"
@@ -193,6 +194,7 @@
 // const _ = require('lodash')
 import { mapGetters } from 'vuex'
 import moment from 'moment'
+import dayjs from 'dayjs'
 import {
   queryTeamInfoList,
   showTeamAndMemberEnum,
@@ -218,6 +220,7 @@ import bugTableList from '@/views/workbench/bugTableList.vue'
 import statisticsSection from '@/views/workbench/components/statisticsSection'
 import createDialog from '@/views/workbench/components/createDialog'
 import websocket from '@/views/workbench/mixins/websocket'
+import { getAllTime } from '@/utils/global.js'
 
 export default {
   components: {
@@ -257,7 +260,7 @@ export default {
       activeSchedule: '1', // 日程表和列表切换
       deleteDialogVisible: false,
       createDialog: false, // 新建弹框
-      selectRangeData: null, // 已选择的范围日期
+      selectRangeData: [], // 已选择的范围日期
       createSchedule: { // 新建日程
         visible: false,
         data: null
@@ -346,25 +349,33 @@ export default {
       this.showDetail = true
       this.detailXY = [`${e.jsEvent.clientX - 200}px`, `${e.jsEvent.clientY + 20}px`]
     },
-    selectDates(data) { // 日历中选择日期
-      console.log(data)
+    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) {
+    createSchOrCal(bizId) { // 创建排期或者日程
       this.createDialog = false
-      if (!bizId) this.dateClick(this.selectRangeData)
+      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
     },
-    select(selectionInfo) { // 多选日期新建日程弹框
-      this.createSchedule.data = {
-        startStr: selectionInfo.startStr,
-        endStr: moment(selectionInfo.endStr).subtract(1, 'day').format('YYYY-MM-DD')
-      }
-      this.createSchedule.visible = true
-    },
     editSchedule(data) { // 编辑日程弹框
       if (data) {
         this.nowDetailData = data
@@ -375,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
@@ -421,6 +431,7 @@ export default {
         this.showDetail = false
         this.queryWorkListByTime(this.calendarView)
         this.$message({ type: 'success', message: '删除成功!' })
+        this.DialogTitle = '编辑排期'
       }
     },
     async queryWorkListByTime(view) { // 获取指定时间段用户日程信息

+ 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