|
@@ -1,78 +1,75 @@
|
|
|
<template>
|
|
|
- <el-dialog class="workbench_schedule__dialog" :visible.sync="isVisible" width="70%" :close-on-click-modal="false" :append-to-body="true">
|
|
|
- <template v-slot:title>
|
|
|
- <div class="module_title">
|
|
|
- <div class="module_title__sign" />
|
|
|
- <div class="module_title__caption">{{ title }}</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <el-form ref="calendarform" :model="form" :rules="rules" label-position="left" label-width="90px">
|
|
|
- <el-form-item label="日程名称" prop="name">
|
|
|
- <el-input v-model="form.name" />
|
|
|
- </el-form-item>
|
|
|
- <el-container>
|
|
|
- <el-aside width="60%">
|
|
|
- <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-form-item>
|
|
|
- <el-form-item label="时间" prop="time">
|
|
|
- <el-date-picker
|
|
|
- v-model="form.time"
|
|
|
- type="datetimerange"
|
|
|
- range-separator="-"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="syncTeam">
|
|
|
- <el-checkbox v-model="form.syncTeam" :true-label="1" :false-label="0">同步到团队</el-checkbox>
|
|
|
- </el-form-item>
|
|
|
- </el-aside>
|
|
|
- <el-aside width="40%">
|
|
|
- <el-form-item v-show="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-form-item>
|
|
|
- <el-form-item v-show="!form.isJoin" style="visibility:hidden" label="业务线" />
|
|
|
- <el-form-item prop="noHoliday">
|
|
|
- <el-checkbox v-model="form.noHoliday" :true-label="1" :false-label="0">排除周末</el-checkbox>
|
|
|
- </el-form-item>
|
|
|
- </el-aside>
|
|
|
- </el-container>
|
|
|
- <el-form-item label="描述">
|
|
|
- <el-input
|
|
|
- v-model="form.desc"
|
|
|
- type="textarea"
|
|
|
- placeholder="请输入描述内容"
|
|
|
- maxlength="300"
|
|
|
- show-word-limit
|
|
|
- :autosize="{ minRows: 3, maxRows: 5}"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <template v-slot:footer>
|
|
|
- <el-button @click="cancel">取 消</el-button>
|
|
|
- <el-button type="primary" @click="confirm">确 认</el-button>
|
|
|
- </template>
|
|
|
- </el-dialog>
|
|
|
+ <normal-dialog :show-dialog.sync="isVisible" :title="title" :is-default-close="false" @confirm="confirmForm()" @cancel="cancel()">
|
|
|
+ <article>
|
|
|
+ <el-form ref="calendarform" :model="form" :rules="rules" label-position="left" label-width="90px">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="18">
|
|
|
+ <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-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-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-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-form-item label="时间" prop="dayList">
|
|
|
+ <div v-show="form.dayList.length > 0 ">{{ schedule }}(用时<span class="blue">{{ detailDayList.length }}</span>天)</div>
|
|
|
+ <div v-show="form.dayList.length <= 0 " class="empty-schedule">添加排期</div>
|
|
|
+ <div class="picker-hidden">
|
|
|
+ <sel-date-picker :start-end.sync="form.dayList" :detail-day-list="detailDayList" @getDetailDay="getDetailDay" />
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="描述">
|
|
|
+ <el-input
|
|
|
+ v-model="form.desc"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入描述内容"
|
|
|
+ maxlength="300"
|
|
|
+ show-word-limit
|
|
|
+ :autosize="{ minRows: 3, maxRows: 5}"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </article>
|
|
|
+ </normal-dialog>
|
|
|
</template>
|
|
|
<script>
|
|
|
+const _ = require('lodash')
|
|
|
+import moment from 'moment'
|
|
|
import { settingGetBizList } from '@/api/defectManage'
|
|
|
-import {
|
|
|
- createSelfSchedule,
|
|
|
- updateSelfSchedule
|
|
|
-} from '@/api/workSchedule.js'
|
|
|
+import { createSelfSchedule, updateSelfSchedule } from '@/api/workSchedule.js'
|
|
|
+import normalDialog from '@/components/dialog/normalDialog'
|
|
|
+import selDatePicker from '@/components/picker/SelDatePicker'
|
|
|
|
|
|
export default {
|
|
|
+ components: {
|
|
|
+ normalDialog,
|
|
|
+ selDatePicker
|
|
|
+ },
|
|
|
props: {
|
|
|
title: {
|
|
|
type: String,
|
|
@@ -84,21 +81,24 @@ export default {
|
|
|
},
|
|
|
data: {
|
|
|
type: Object,
|
|
|
- default() {
|
|
|
- return null
|
|
|
- }
|
|
|
+ default: () => null
|
|
|
}
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
refresh: true,
|
|
|
businesslines: [],
|
|
|
+ isVisible: this.visible,
|
|
|
form: {
|
|
|
- isJoin: 0,
|
|
|
- noHoliday: 1,
|
|
|
- syncTeam: 1
|
|
|
+ name: '',
|
|
|
+ dayList: [],
|
|
|
+ isJoin: 0, // 是否关联业务线
|
|
|
+ syncTeam: 1, // 是否同步 0 不同步 1同步
|
|
|
+ bizId: null,
|
|
|
+ desc: ''
|
|
|
},
|
|
|
- isVisible: false,
|
|
|
+ detailDayList: [], // 详细的日期
|
|
|
+ schedule: '',
|
|
|
rules: {
|
|
|
name: [
|
|
|
{ required: true, message: '请输入日程名称', trigger: 'blur' }
|
|
@@ -106,8 +106,8 @@ export default {
|
|
|
isJoin: [
|
|
|
{ required: true, message: '请选择是否关联业务线', trigger: 'change' }
|
|
|
],
|
|
|
- time: [
|
|
|
- { required: true, message: '请选择日程时间', trigger: 'change' }
|
|
|
+ dayList: [
|
|
|
+ { type: 'array', required: true, message: '请选择日程时间', trigger: 'change' }
|
|
|
],
|
|
|
bizId: [
|
|
|
{ required: true, message: '请选择业务线', trigger: 'change' }
|
|
@@ -118,69 +118,64 @@ export default {
|
|
|
watch: {
|
|
|
visible(newVal, olfVal) {
|
|
|
this.isVisible = newVal
|
|
|
- },
|
|
|
- isVisible(newVal, olfVal) {
|
|
|
- if (newVal) {
|
|
|
- if (this.title === '编辑日程') {
|
|
|
- this.form = JSON.parse(JSON.stringify(this.data))
|
|
|
- } else {
|
|
|
- this.form = {
|
|
|
- time: [this.data.start, this.data.end],
|
|
|
- isJoin: 0,
|
|
|
- noHoliday: 1,
|
|
|
- syncTeam: 1
|
|
|
- }
|
|
|
- }
|
|
|
+ if (this.data && this.data.id) {
|
|
|
+ this.form = _.cloneDeep(this.data)
|
|
|
} else {
|
|
|
- this.$emit('cancel', false)
|
|
|
+ this.form.dayList = [this.data.startStr, this.data.endStr]
|
|
|
}
|
|
|
+ },
|
|
|
+ data(newVal, olfVal) {
|
|
|
+ this.data = newVal
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
|
this.settingGetBizList()
|
|
|
},
|
|
|
methods: {
|
|
|
- cancel() {
|
|
|
- this.$emit('cancel', false)
|
|
|
- },
|
|
|
- confirm() {
|
|
|
- this.$refs.calendarform.validate((valid, object) => {
|
|
|
- let bizIdValid = false
|
|
|
- if (!valid && !this.form.isJoin) {
|
|
|
- bizIdValid = true
|
|
|
- for (const i in object) {
|
|
|
- if (i !== 'bizId') {
|
|
|
- bizIdValid = false
|
|
|
- break
|
|
|
- }
|
|
|
+ confirmForm() { // 确认提交表单
|
|
|
+ this.$refs['calendarform'].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ const params = _.cloneDeep(this.form)
|
|
|
+ params.dayList = this.detailDayList
|
|
|
+ if (this.data && this.data.id) {
|
|
|
+ this.updateSelfSchedule(params)
|
|
|
+ } else {
|
|
|
+ this.createSelfSchedule(params)
|
|
|
}
|
|
|
}
|
|
|
- if (valid || bizIdValid) {
|
|
|
- this.title === '新建日程' ? this.createSelfSchedule() : this.updateSelfSchedule()
|
|
|
- }
|
|
|
})
|
|
|
},
|
|
|
- dateFomat() {
|
|
|
- this.form.startTime = this.form.time[0]
|
|
|
- this.form.endTime = this.form.time[1]
|
|
|
+ getDetailDay(e) { // 获取详细排期日期
|
|
|
+ this.detailDayList = e
|
|
|
+ this.getSeprateDayInfo(e)
|
|
|
+ },
|
|
|
+ async getSeprateDayInfo(dataArr) { // 获取选中时间中的工作日时间
|
|
|
+ const res = await getSeprateDayInfo(dataArr)
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.schedule = res.data.seperateDaysNoHoliday
|
|
|
+ }
|
|
|
+ },
|
|
|
+ cancel() { // 关闭弹框
|
|
|
+ this.isVisible = false
|
|
|
+ this.$emit('update:visible', this.isVisible)
|
|
|
+ this.$emit('cancel')
|
|
|
},
|
|
|
// 新建日程
|
|
|
async createSelfSchedule() {
|
|
|
- this.dateFomat()
|
|
|
if (this.form.isJoin === 0) {
|
|
|
this.form.bizId = null
|
|
|
}
|
|
|
const res = await createSelfSchedule(this.form)
|
|
|
if (res.code === 200) {
|
|
|
- this.$emit('confirm', false)
|
|
|
+ this.$emit('confirm')
|
|
|
+ this.cancel()
|
|
|
}
|
|
|
},
|
|
|
// 编辑日程
|
|
|
async updateSelfSchedule() {
|
|
|
- this.dateFomat()
|
|
|
const res = await updateSelfSchedule(this.form)
|
|
|
if (res.code === 200) {
|
|
|
- this.$emit('confirm', false)
|
|
|
+ this.$emit('confirm')
|
|
|
}
|
|
|
},
|
|
|
async settingGetBizList() {
|
|
@@ -210,25 +205,19 @@ export default {
|
|
|
}
|
|
|
</style>
|
|
|
|
|
|
-<style scoped>
|
|
|
-.module_title{
|
|
|
- display:flex;
|
|
|
- align-items: center;
|
|
|
- margin-bottom: 20px
|
|
|
+<style scoped lang="scss">
|
|
|
+article{
|
|
|
+ padding: 0 50px;
|
|
|
+}
|
|
|
+.blue {
|
|
|
+ color: #409EFF;
|
|
|
}
|
|
|
-.module_title__sign {
|
|
|
- width:4px;
|
|
|
- height:15px;
|
|
|
- background:#409EFF;
|
|
|
- border-radius:1px;
|
|
|
+.empty-schedule {
|
|
|
+ color:rgba(51,51,51,0.45);
|
|
|
}
|
|
|
-.module_title__caption{
|
|
|
- width:83px;
|
|
|
- height:18px;
|
|
|
- font-size:16px;
|
|
|
- font-family:MicrosoftYaHei;
|
|
|
- color:rgba(51,59,74,1);
|
|
|
- margin-left:6px;
|
|
|
- font-weight: 500;
|
|
|
+.picker-hidden {
|
|
|
+ opacity: 0;
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
}
|
|
|
</style>
|