| <template> | 
|   <GlobalWindow width="520px" :title="title" @close="close" :visible.sync="visible" :confirm-working="isWorking" | 
|     @confirm="confirm"> | 
|     <div class="warnning"> | 
|       {{ form.id ? '编辑计划对已生成的任务无效,会在下次生成任务时生效,且当天不会生成两个任务' : '新建巡检计划会从当天开始,按照配置规则产生对应的巡检任务' }} | 
|     </div> | 
|     <el-form :model="form" ref="form" :rules="rules"> | 
|       <el-form-item label="计划名称" prop="title"> | 
|         <el-input v-model="form.title" placeholder="请输入标题" v-trim /> | 
|       </el-form-item> | 
|       <el-form-item label="巡检线路" prop="lineId"> | 
|         <el-select v-model="form.lineId" filterable clearable> | 
|           <el-option v-for="item in lineList" :value="item.id" :label="item.name"></el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="巡检负责人" prop="userIds"> | 
|         <el-select v-model="form.userIds" multiple filterable clearable> | 
|           <el-option v-for="item in staffList" :value="item.id" :label="item.realname"></el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="计划开始日期-结束日期" prop="selDate"> | 
|         <el-date-picker v-model="form.selDate" @change="changeDate" is-range range-separator="-" | 
|           value-format="yyyy-MM-dd" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" /> | 
|       </el-form-item> | 
|       <el-form-item label="计划执行时间"> | 
|         <el-time-picker v-model="form.selTime" @change="changeTime" is-range range-separator="-" format="HH:mm" | 
|           value-format="HH:mm:ss" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围" /> | 
|       </el-form-item> | 
|       <el-form-item label="重复频率"> | 
|         <el-select v-model="form.circleType" @change="changeType" filterable> | 
|           <el-option :value="0" label="每天"></el-option> | 
|           <el-option :value="1" label="每周"></el-option> | 
|           <el-option :value="2" label="每月"></el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item v-if="form.circleType == 1" prop="circleDays" label="重复规则"> | 
|         <div class="weeks"> | 
|           <div class="week" @click="weekClick(i)" :class="{ active: item.sel }" v-for="item, i in weeks">{{ item.la }} | 
|           </div> | 
|         </div> | 
|       </el-form-item> | 
|       <el-form-item v-if="form.circleType == 2" prop="circleDays" label="重复规则"> | 
|         <div class="weeks"> | 
|           <div class="week" @click="monthClick(i)" :class="{ active: item.sel }" v-for="item, i in monthsList">{{ | 
|             item.la | 
|             }}</div> | 
|         </div> | 
|       </el-form-item> | 
|   | 
|     </el-form> | 
|   </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
| import BaseOpera from '@/components/base/BaseOpera' | 
| import GlobalWindow from '@/components/common/GlobalWindow' | 
| import { fetchList as getLineList } from '@/api/Inspection/ywPatrolLine' | 
| import { detailById } from '@/api/Inspection/ywPatrolScheme' | 
| import { getUserList } from '@/api/system/user' | 
| export default { | 
|   name: 'OperaYwPatrolSchemeWindow', | 
|   extends: BaseOpera, | 
|   components: { GlobalWindow }, | 
|   data() { | 
|     return { | 
|       // 表单数据 | 
|       form: { | 
|         id: null, | 
|         creator: '', | 
|         createDate: '', | 
|         editor: '', | 
|         editDate: '', | 
|         isdeleted: '', | 
|         title: '', | 
|         remark: '', | 
|         status: '', | 
|         sortnum: '', | 
|         lineId: '', | 
|         userIds: [], | 
|         dealUserId: '', | 
|         dealDate: '', | 
|         dealInfo: '', | 
|         circleType: 0, | 
|         circleDays: '', | 
|         startDate: '', | 
|         endDate: '', | 
|         startTime: '', | 
|         endTime: '', | 
|         processStatus: '', | 
|         selDate: [], | 
|       }, | 
|       lineList: [], | 
|       staffList: [], | 
|       weeks: [ | 
|         { la: '周一', va: 1, sel: false }, | 
|         { la: '周二', va: 2, sel: false }, | 
|         { la: '周三', va: 3, sel: false }, | 
|         { la: '周四', va: 4, sel: false }, | 
|         { la: '周五', va: 5, sel: false }, | 
|         { la: '周六', va: 6, sel: false }, | 
|         { la: '周日', va: 7, sel: false }, | 
|       ], | 
|       monthsList: [], | 
|       selCircleDays: [], | 
|       rules: { | 
|         title: [{ required: true, message: '请输入' }], | 
|         lineId: [{ required: true, message: '请选择' }], | 
|         userIds: [{ required: true, message: '请选择' }], | 
|         selDate: [{ type: 'array', required: true, message: '请选择' }], | 
|         circleDays: [{ required: true, message: '请选择' }], | 
|       } | 
|     } | 
|   }, | 
|   created() { | 
|     this.config({ | 
|       api: '/Inspection/ywPatrolScheme', | 
|       'field.id': 'id' | 
|     }) | 
|   }, | 
|   methods: { | 
|     __confirmCreate () { | 
|       this.$refs.form.validate((valid) => { | 
|         if (!valid) { | 
|           return | 
|         } | 
|         let obj = JSON.parse(JSON.stringify(this.form)) | 
|         obj.userIds = obj.userIds.join(',') | 
|         // 调用新建接口 | 
|         this.isWorking = true | 
|         this.api.create(obj) | 
|           .then(() => { | 
|             this.visible = false | 
|             this.$tip.apiSuccess('新建成功') | 
|             this.$emit('success') | 
|           }) | 
|           .catch(e => { | 
|             // this.$tip.apiFailed(e) | 
|           }) | 
|           .finally(() => { | 
|             this.isWorking = false | 
|           }) | 
|       }) | 
|     }, | 
|     __confirmEdit () { | 
|       this.$refs.form.validate((valid) => { | 
|         if (!valid) { | 
|           return | 
|         } | 
|         let obj = JSON.parse(JSON.stringify(this.form)) | 
|         obj.userIds = obj.userIds.join(',') | 
|         // 调用新建接口 | 
|         this.isWorking = true | 
|         this.api.updateById(obj) | 
|           .then(() => { | 
|             this.visible = false | 
|             this.$tip.apiSuccess('修改成功') | 
|             this.$emit('success') | 
|           }) | 
|           .catch(e => { | 
|             // this.$tip.apiFailed(e) | 
|           }) | 
|           .finally(() => { | 
|             this.isWorking = false | 
|           }) | 
|       }) | 
|     }, | 
|     weekClick(i) { | 
|       this.weeks.forEach((item, index) => { | 
|         if (i == index) { item.sel = !item.sel } | 
|       }) | 
|       this.$set(this.form, 'circleDays', this.weeks.filter(j => j.sel).map(a => a.va).join(',')) | 
|     }, | 
|     monthClick(i) { | 
|       this.monthsList.forEach((item, index) => { | 
|         if (i == index) { item.sel = !item.sel } | 
|       }) | 
|       this.$set(this.form, 'circleDays', this.monthsList.filter(j => j.sel).map(a => a.va).join(',')) | 
|     }, | 
|     changeTime(e) { | 
|       if (e && e.length > 0) { | 
|         this.$set(this.form, 'startTime', e[0]) | 
|         this.$set(this.form, 'endTime', e[1]) | 
|       } else { | 
|         this.$set(this.form, 'startTime', '') | 
|         this.$set(this.form, 'endTime', '') | 
|       } | 
|     }, | 
|     changeDate(e) { | 
|       if (e && e.length > 0) { | 
|         this.$set(this.form, 'startDate', e[0]) | 
|         this.$set(this.form, 'endDate', e[1]) | 
|       } else { | 
|         this.$set(this.form, 'startDate', '') | 
|         this.$set(this.form, 'endDate', '') | 
|       } | 
|     }, | 
|     changeType() { | 
|       this.$set(this.form, 'circleDays', '') | 
|     }, | 
|     getDetail(id) { | 
|       detailById(id).then(res => { | 
|         this.form = res | 
|         if (res.userIds) { | 
|           this.$set(this.form, 'userIds', Number(res.userIds)) | 
|         } | 
|         if (res.startTime) { | 
|           this.$set(this.form, 'selTime', [res.startTime, res.endTime]) | 
|         } | 
|         if (res.circleDays) { | 
|           const circleDays = res.circleDays.split(',') | 
|           if (res.circleType == 1) { | 
|             circleDays.forEach(i => { | 
|               this.weeks.forEach(j => { | 
|                 if (i == j.va) { | 
|                   j.sel = true | 
|                 } | 
|               }) | 
|             }) | 
|           } else { | 
|             setTimeout(() => { | 
|               circleDays.forEach(i => { | 
|                 this.monthsList.forEach(j => { | 
|                   if (i == j.va) { | 
|                     j.sel = true | 
|                   } | 
|                 }) | 
|               }) | 
|             }, 500) | 
|           } | 
|         } | 
|         this.$set(this.form, 'selDate', [res.startDate, res.endDate]) | 
|       }) | 
|     }, | 
|     initData() { | 
|       getLineList({ | 
|         model: {}, | 
|         capacity: 9999, | 
|         page: 1, | 
|       }).then(res => { | 
|         this.lineList = res.records | 
|       }) | 
|       getUserList({}).then(res => { | 
|         this.staffList = res | 
|       }) | 
|       this.monthsList = [] | 
|       for (let i = 1; i < 32; i++) { | 
|         this.monthsList.push({ la: i, va: i, sel: false }) | 
|       } | 
|     }, | 
|     close() { | 
|       this.$refs.form.resetFields() | 
|       this.visible = false | 
|     } | 
|   } | 
|   | 
| } | 
| </script> | 
| <style lang="scss" scoped> | 
| @import '@/assets/style/variables.scss'; | 
| .warnning{ | 
|   padding: 6px 10px; | 
|   background-color: #fcf3e6; | 
|   font-size: 12px; | 
|   color: #333333; | 
| } | 
| .weeks { | 
|   display: flex; | 
|   align-items: center; | 
|   flex-wrap: wrap; | 
|   | 
|   .week { | 
|     border: 1px solid #999999; | 
|     width: 40px; | 
|     height: 18px; | 
|     text-align: center; | 
|     line-height: 18px; | 
|     font-size: 12px; | 
|     margin-right: 8px; | 
|     cursor: pointer; | 
|     margin-bottom: 6px; | 
|   } | 
|   | 
|   .active { | 
|     color: $primary-color; | 
|     border: 1px solid $primary-color; | 
|   } | 
| } | 
| </style> |