| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalAlertWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="ï¼"> |
| | | <el-form-item label="å
³èä¼è®®å®¤" prop="roomId"> |
| | | <el-select |
| | | v-model="form.roomId" |
| | | filterable |
| | | clearable |
| | | placeholder="è¯·éæ©å
³èä¼è®®å®¤" |
| | | @change="selectRoom" |
| | | > |
| | | <el-option v-for="item in rooms()" :key="item.id" :value="item.id" :label="item.name" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="é¢å®æ¥æ" prop="date"> |
| | | <el-date-picker |
| | | v-model="form.date" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©é¢å®æ¥æ" |
| | | @change="selectDate" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="é¢å®æ¶é´" prop="times"> |
| | | <div class="time-style"> |
| | | <div |
| | | class="time-item" |
| | | v-for="(item, index) in timelist" |
| | | :key="item.id" |
| | | :class="form.times.indexOf(index)!=-1?'time-item-sel': item.isUse ? 'time-item-disable' : ''" |
| | | @click="selectTimes(index, item)" |
| | | >{{ `${item.startTime}-${item.endTime}` }}</div> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="ä¼è®®ä¸»é¢" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥ä¼è®®ä¸»é¢" :maxlength="30" v-trim/> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="åä¼äººå" prop="sysList"> |
| | | <!-- <el-input style="width:40%" disabled v-model="sysList" placeholder="éæ©åä¼äººå" v-trim/> --> |
| | | <el-select |
| | | v-model="form.sysList" |
| | | filterable |
| | | clearable |
| | | multiple |
| | | placeholder="éæ©é¨é¨æå" |
| | | > |
| | | <el-option |
| | | v-for="item in sysList" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.department?`${item.department.name}-${item.realname}`:item.realname" |
| | | ></el-option> |
| | | <!-- <el-option :key="1" :value="1" label="ç¦ç¨" /> --> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¼è®®å
容" prop="content"> |
| | | <el-input |
| | | type="textarea" |
| | | v-model="form.content" |
| | | :maxlength="300" |
| | | show-word-limit |
| | | :autosize="{ minRows: 4, maxRows: 12}" |
| | | placeholder="请è¾å
¥ä¼è®®å
容" |
| | | v-trim |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-if="projectList.length" label="éæ©æå¡é¡¹ç®" prop="projectList"> |
| | | <el-checkbox-group v-model="form.projectList"> |
| | | <el-checkbox |
| | | v-for="project in projectList" |
| | | :label="project.id" |
| | | :key="project.id" |
| | | >{{project.name}}</el-checkbox> |
| | | </el-checkbox-group> |
| | | </el-form-item> |
| | | <el-form-item label="ä¼è®®éä»¶" prop="fileList"> |
| | | <div> |
| | | <el-button type="primary" icon="el-icon-upload" @click="$refs.upFile.click()">ä¼è®®éä»¶</el-button> |
| | | </div> |
| | | <div class="data-list"> |
| | | <FileLink |
| | | :links="form.fileList" |
| | | linkName="fileFullUrl" |
| | | /> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="ä¼è®®å¤æ³¨" prop="remark"> |
| | | <el-input type="textarea" v-model="form.remark" placeholder="请è¾å
¥ä¼è®®å¤æ³¨" v-trim/> |
| | | </el-form-item> |
| | | <input type="file" @change="upFiles" ref="upFile" style="display: none;" /> |
| | | </el-form> |
| | | </GlobalAlertWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalAlertWindow from '@/components/common/GlobalAlertWindow' |
| | | import FileLink from '@/views/meeting/components/common/FileLink' |
| | | import { uploadFileLocal as upload } from '@/api/system/common' |
| | | import { fetchList as userList } from '@/api/system/user' |
| | | import { findListByObjId } from '@/api/meeting/projects' |
| | | import { findList } from '@/api/meeting/roomTime' |
| | | import { numRule, arrayRule } from '@/utils/form' |
| | | export default { |
| | | name: 'OperaBookingsWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalAlertWindow, FileLink }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | id: null, |
| | | date: '', |
| | | editDate: '', |
| | | projectList: [], |
| | | remark: '', |
| | | name: '', |
| | | roomId: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | times: [], |
| | | content: '', |
| | | sysList: [], |
| | | fileList: [], |
| | | }, |
| | | isEdit: false, |
| | | // room: [], |
| | | sysList: [], |
| | | projectList: [], |
| | | timelist: [], |
| | | // éªè¯è§å |
| | | rules: { |
| | | roomId: [ |
| | | { required: true, validator: numRule, message: 'è¯·éæ©å
³èä¼è®®å®¤', tigger: 'change' } |
| | | ], |
| | | date: [ |
| | | { required: true, message: 'è¯·éæ©é¢å®æ¥æ', tigger: 'change' } |
| | | ], |
| | | times: [ |
| | | { required: true, validator: arrayRule, message: 'è¯·éæ©é¢çº¦æ¶é´', tigger: 'change' } |
| | | ], |
| | | sysList: [ |
| | | { required: true, validator: arrayRule, message: 'è¯·éæ©åä¼äººå', tigger: 'change' } |
| | | ], |
| | | name: [ |
| | | { required: true, message: 'è¯·éæ©è¾å
¥ä¼è®®ä¸»é¢', tigger: 'blur' } |
| | | ], |
| | | // content: [ |
| | | // { required: true, message: '请è¾å
¥ä¼è®®å
容', tigger: 'blur' } |
| | | // ], |
| | | } |
| | | } |
| | | }, |
| | | inject: ['rooms'], |
| | | created () { |
| | | this.config({ |
| | | api: '/meeting/bookings', |
| | | 'field.id': 'id' |
| | | }) |
| | | userList({ |
| | | page: 1, |
| | | capacity: 9999, |
| | | model: { realname: this.filterText }, |
| | | }) |
| | | .then(res => { |
| | | console.log('userList', res); |
| | | this.sysList = res.records |
| | | }) |
| | | }, |
| | | methods: { |
| | | /** |
| | | * æå¼çªå£ |
| | | * @title çªå£æ é¢ |
| | | * @target ç¼è¾ç对象 |
| | | */ |
| | | open (title, target) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.timelist = [] |
| | | this.isEdit = false |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | console.log(this.form.content); |
| | | debugger |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | this.isEdit = true |
| | | this.form.projectList = target.projectList ? target.projectList.map(item => item.projectId) : [] |
| | | this.form.sysList = this.form.sysList ? this.form.sysList.map(item => item.userId) : [] |
| | | // console.log(target.startTime.split(' ')); |
| | | // debugger |
| | | this.form.date = target.startTime.split(' ')[0] |
| | | this.getTimes(true) |
| | | this.selectRoom(this.form.roomId) |
| | | }) |
| | | }, |
| | | selectRoom(objId) { |
| | | this.getTimes() |
| | | findListByObjId({ |
| | | objId, |
| | | objType: 0, |
| | | }) |
| | | .then(res => { |
| | | this.projectList = res |
| | | }) |
| | | }, |
| | | selectDate(v) { |
| | | // console.log(v); |
| | | this.getTimes() |
| | | }, |
| | | getTimes(isInit=false) { |
| | | this.form.times = [] |
| | | this.timelist = [] |
| | | |
| | | if (this.form.date && this.form.roomId) { |
| | | findList({ |
| | | yudingDate: this.form.date + ' 00:00:00', |
| | | roomId: this.form.roomId, |
| | | bookingId: this.form.id |
| | | }) |
| | | .then(res => { |
| | | this.timelist = res |
| | | if (isInit) { |
| | | this.timelist.forEach((itme, index) => { |
| | | if (itme.isChoose) { |
| | | itme.isUse = false |
| | | this.form.times.push(index) |
| | | } |
| | | }) |
| | | // let startTime = this.form.startTime.split(' ')[1] |
| | | // let endTime = this.form.endTime.split(' ')[1] |
| | | // let firstIndex = this.timelist.findIndex(item => item.startTime == startTime) |
| | | // let lastIndex = this.timelist.findIndex(item => item.endTime == endTime) |
| | | // let index = firstIndex |
| | | // while(index <= lastIndex) { |
| | | // this.form.times.push(index) |
| | | // index ++ |
| | | // } |
| | | // console.log('startTime', startTime); |
| | | // console.log('endTime', endTime); |
| | | // console.log('firstIndex', firstIndex); |
| | | // console.log('lastIndex', lastIndex); |
| | | // console.log('this.form.times', this.form.times); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | selectTimes(index, item) { |
| | | if (this.isEdit) { |
| | | return |
| | | } |
| | | let tempIndex = this.form.times.indexOf(index) |
| | | if (tempIndex != -1) { |
| | | if (tempIndex==0) { |
| | | // console.log(this.form.times); |
| | | // debugger |
| | | this.form.times.splice(0, 1) |
| | | } else if (tempIndex==this.form.times.length-1) { |
| | | this.form.times.splice(tempIndex, 1) |
| | | } |
| | | } else { |
| | | if (item.isUse) { |
| | | return |
| | | } |
| | | if (this.form.times.length && index+1 !== this.form.times[0] && index-1 !== this.form.times[this.form.times.length-1]) { |
| | | this.$message.error('é¢çº¦æ¶é´å¿
é¡»æ¯ç¸é»çï¼') |
| | | return |
| | | } |
| | | this.form.times.push(index) |
| | | this.form.times.sort((x,y)=> x - y) |
| | | } |
| | | // console.log(this.form.times); |
| | | }, |
| | | upFiles(file) { |
| | | const formdate = new FormData() |
| | | this.isUploading = true |
| | | formdate.append('file', file.target.files[0]) |
| | | formdate.append('folder', 'projects') |
| | | upload(formdate) |
| | | .then(res => { |
| | | // console.log(this.form); |
| | | this.form.fileList.push({ |
| | | name: res.originname, |
| | | url: res.url, |
| | | fileurl: res.imgaddr |
| | | }) |
| | | }) |
| | | .catch(err => { |
| | | console.log(err) |
| | | }) |
| | | .finally(() => this.isUploading = false) |
| | | this.$refs.upFile.value = null |
| | | }, |
| | | // 确认æ°å»º |
| | | __confirmCreate () { |
| | | this.$refs.form.validate((valid) => { |
| | | // debugger |
| | | if (!valid) { |
| | | return |
| | | } |
| | | // console.log(this.form); |
| | | // debugger |
| | | // è°ç¨æ°å»ºæ¥å£ |
| | | this.isWorking = true |
| | | let sysList = [...this.form.sysList] |
| | | sysList = sysList.map(item => { |
| | | return {userId: item} |
| | | }) |
| | | let projectList = [...this.form.projectList] |
| | | projectList = projectList.map(item => { |
| | | return {projectId: item} |
| | | }) |
| | | let bookingTimeList = [] |
| | | this.form.times.forEach(item => { |
| | | bookingTimeList.push({ |
| | | timeId: this.timelist[item].id, |
| | | id: this.timelist[item].bookingTimeId |
| | | }) |
| | | }) |
| | | let startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00' |
| | | let endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length-1]].endTime + ':00' |
| | | this.api.create({ |
| | | ...this.form, |
| | | sysList, |
| | | projectList, |
| | | startTime, |
| | | endTime, |
| | | bookingTimeList |
| | | }) |
| | | .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 |
| | | } |
| | | // è°ç¨æ°å»ºæ¥å£ |
| | | this.isWorking = true |
| | | let sysList = [...this.form.sysList] |
| | | sysList = sysList.map(item => { |
| | | return {userId: item} |
| | | }) |
| | | let projectList = [...this.form.projectList] |
| | | projectList = projectList.map(item => { |
| | | return {projectId: item} |
| | | }) |
| | | let bookingTimeList = [] |
| | | this.form.times.forEach(item => { |
| | | bookingTimeList.push({ |
| | | timeId: this.timelist[item].id, |
| | | id: this.timelist[item].bookingTimeId |
| | | }) |
| | | }) |
| | | let startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00' |
| | | let endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length-1]].endTime + ':00' |
| | | this.api.updateById({ |
| | | ...this.form, |
| | | sysList, |
| | | projectList, |
| | | startTime, |
| | | endTime, |
| | | bookingTimeList |
| | | }) |
| | | .then(() => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('ä¿®æ¹æå') |
| | | this.$emit('success') |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/style/alertstyle.scss"; |
| | | @import "@/assets/style/variables.scss"; |
| | | |
| | | ::v-deep .el-input.is-disabled .el-input__inner { |
| | | background-color: #fff !important; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .time-style { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | cursor: pointer; |
| | | .time-item { |
| | | margin-right: 8px; |
| | | margin-bottom: 8px; |
| | | border: #111 solid 1px; |
| | | font-size: 14px; |
| | | line-height: 14px; |
| | | padding: 5px; |
| | | border-radius: 5px; |
| | | color: #111; |
| | | } |
| | | .time-item-sel { |
| | | border-color: $primary-color; |
| | | background-color: $primary-color; |
| | | color: #fff; |
| | | } |
| | | .time-item-disable { |
| | | border-color: #999; |
| | | background-color: #999; |
| | | color: #111; |
| | | } |
| | | } |
| | | |
| | | </style> |