From 7298d5354963a88643a543b51b90192dc9fc934c Mon Sep 17 00:00:00 2001 From: doum <doum> Date: 星期四, 11 九月 2025 18:43:14 +0800 Subject: [PATCH] 最新版本541200007 --- admin/src/views/meeting/components/OperaBookingsWindow.vue | 270 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 155 insertions(+), 115 deletions(-) diff --git a/admin/src/views/meeting/components/OperaBookingsWindow.vue b/admin/src/views/meeting/components/OperaBookingsWindow.vue index 0af16af..70f7c03 100644 --- a/admin/src/views/meeting/components/OperaBookingsWindow.vue +++ b/admin/src/views/meeting/components/OperaBookingsWindow.vue @@ -1,81 +1,48 @@ <template> - <GlobalAlertWindow - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalAlertWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" + width="880px"> <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-select v-model="form.roomId" @change="selectRoom" filterable clearable :disabled="isEdit" placeholder="璇烽�夋嫨鍏宠仈浼氳瀹�" > <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-date-picker :disabled="isEdit" 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 class="time-item" v-for="(item, index) in timelist" :key="item.id" :class="{ + 'time-item-sel': form.times.indexOf(index) != -1, + 'time-item-disable': item.isUse, + 'disable': item.bookingTimeId + }" @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-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 label="鍙備細浜哄憳"> + <el-select style="width: 100%" v-model="form.sysList" filterable clearable multiple placeholder="閫夋嫨閮ㄩ棬鎴愬憳"> + <el-option v-for="item in sysList" :key="item.id" :value="item.id" + :label="item.companyName ? `${item.realname}-${item.companyName}` : item.realname"></el-option> + <!-- <el-option :key="1" :value="1" label="绂佺敤" /> --> + </el-select> + </el-form-item> + <el-form-item label-width="140px" label="鏄惁閫氱煡鍙備細浜哄憳"> + <el-radio v-model="form.joinNotice" :label="1">涓嶉�氱煡</el-radio> + <el-radio v-model="form.joinNotice" :label="0">閫氱煡</el-radio> </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-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 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"> @@ -83,17 +50,35 @@ <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" - /> + <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 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> + + <el-dialog title="浼氳瀹ら绾︽儏鍐�" :visible.sync="isShowDetail" append-to-body width="600px"> + <div class="detail_modal"> + <div class="h1">{{ activeInfo.meetingName }}</div> + <div class="line"> + <div class="label">浼氳鏃堕棿</div> + <div class="value" v-if="activeInfo.meetingDate"> + {{ activeInfo.meetingDate.slice(5) }} {{ activeInfo.meetingTime }} + </div> + </div> + <div class="line"> + <div class="label">浼氳瀹�</div> + <div class="value">{{ activeInfo.roomName }}</div> + </div> + <div class="line"> + <div class="label">棰勭害浜�</div> + <div class="value">{{ activeInfo.bookingUserName }}</div> + </div> + <el-button @click="isShowDetail = false">鍏抽棴</el-button> + </div> + </el-dialog> </GlobalAlertWindow> </template> @@ -101,16 +86,17 @@ 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 { upload } from '@/api/system/common' +import { findAllList as userList } from '@/api/system/user' import { findListByObjId } from '@/api/meeting/projects' +import { BookDetailById } from '@/api/meeting/bookings' import { findList } from '@/api/meeting/roomTime' import { numRule, arrayRule } from '@/utils/form' export default { name: 'OperaBookingsWindow', extends: BaseOpera, components: { GlobalAlertWindow, FileLink }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 form: { @@ -124,10 +110,13 @@ startTime: '', endTime: '', times: [], + joinNotice: 1, content: '', sysList: [], - fileList: [], + fileList: [] }, + activeInfo: {}, + isShowDetail: false, isEdit: false, // room: [], sysList: [], @@ -136,20 +125,20 @@ // 楠岃瘉瑙勫垯 rules: { roomId: [ - { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' } + { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' } ], date: [ - { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' } + { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' } ], times: [ - { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' } + { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' } ], sysList: [ - { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' } + { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' } ], name: [ - { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' } - ], + { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' } + ] // content: [ // { required: true, message: '璇疯緭鍏ヤ細璁唴瀹�', tigger: 'blur' } // ], @@ -157,19 +146,15 @@ } }, inject: ['rooms'], - created () { + created() { this.config({ api: '/meeting/bookings', 'field.id': 'id' }) - userList({ - page: 1, - capacity: 9999, - model: { realname: this.filterText }, - }) + userList({queryParam: this.filterText,querySpecial: 1, type: 2, companyType: 1,workStatus:0}) .then(res => { - console.log('userList', res); - this.sysList = res.records + console.log('userList', res) + this.sysList = res }) }, methods: { @@ -178,7 +163,7 @@ * @title 绐楀彛鏍囬 * @target 缂栬緫鐨勫璞� */ - open (title, target) { + open(title, target) { this.title = title this.visible = true this.timelist = [] @@ -187,8 +172,6 @@ if (target == null) { this.$nextTick(() => { this.$refs.form.resetFields() - console.log(this.form.content); - debugger this.form[this.configData['field.id']] = null }) return @@ -211,8 +194,8 @@ selectRoom(objId) { this.getTimes() findListByObjId({ - objId, - objType: 0, + objId: objId, + objType: 0 }) .then(res => { this.projectList = res @@ -222,7 +205,7 @@ // console.log(v); this.getTimes() }, - getTimes(isInit=false) { + getTimes(isInit = false) { this.form.times = [] this.timelist = [] @@ -259,29 +242,41 @@ }) } }, + getDetail(id) { + BookDetailById({ + id + }).then(res => { + this.activeInfo = res + this.isShowDetail = true + }) + }, selectTimes(index, item) { + if (item.bookingTimeId) { + this.getDetail(item.bookingTimeId) + return + } if (this.isEdit) { return } - let tempIndex = this.form.times.indexOf(index) + const tempIndex = this.form.times.indexOf(index) if (tempIndex != -1) { - if (tempIndex==0) { + if (tempIndex == 0) { // console.log(this.form.times); // debugger this.form.times.splice(0, 1) - } else if (tempIndex==this.form.times.length-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]) { + 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) + this.form.times.sort((x, y) => x - y) } // console.log(this.form.times); }, @@ -306,7 +301,7 @@ this.$refs.upFile.value = null }, // 纭鏂板缓 - __confirmCreate () { + __confirmCreate() { this.$refs.form.validate((valid) => { // debugger if (!valid) { @@ -318,21 +313,21 @@ this.isWorking = true let sysList = [...this.form.sysList] sysList = sysList.map(item => { - return {userId: item} + return { userId: item } }) let projectList = [...this.form.projectList] projectList = projectList.map(item => { - return {projectId: item} + return { projectId: item } }) - let bookingTimeList = [] + const 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' + const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00' + const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00' this.api.create({ ...this.form, sysList, @@ -347,7 +342,7 @@ this.$emit('success') }) .catch(e => { - this.$tip.apiFailed(e) + // this.$tip.apiFailed(e) }) .finally(() => { this.isWorking = false @@ -355,7 +350,7 @@ }) }, // 纭淇敼 - __confirmEdit () { + __confirmEdit() { this.$refs.form.validate((valid) => { if (!valid) { return @@ -364,21 +359,21 @@ this.isWorking = true let sysList = [...this.form.sysList] sysList = sysList.map(item => { - return {userId: item} + return { userId: item } }) let projectList = [...this.form.projectList] projectList = projectList.map(item => { - return {projectId: item} + return { projectId: item } }) - let bookingTimeList = [] + const 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' + const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00' + const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00' this.api.updateById({ ...this.form, sysList, @@ -393,14 +388,14 @@ this.$emit('success') }) .catch(e => { - this.$tip.apiFailed(e) + // this.$tip.apiFailed(e) }) .finally(() => { this.isWorking = false }) }) } - }, + } } </script> @@ -417,26 +412,71 @@ display: flex; flex-wrap: wrap; cursor: pointer; + .time-item { margin-right: 8px; margin-bottom: 8px; - border: #111 solid 1px; font-size: 14px; + font-weight: 400; line-height: 14px; - padding: 5px; + width: 124px; + height: 36px; + display: flex; + justify-content: center; + align-items: center; border-radius: 5px; color: #111; + border: #cccccc solid 1px; + cursor: pointer; } + .time-item-sel { border-color: $primary-color; - background-color: $primary-color; - color: #fff; + background-color: #f6f9fe; + color: $primary-color; } + .time-item-disable { - border-color: #999; - background-color: #999; - color: #111; + color: #fff; + border-color: #cccccc; + background-color: #cccccc; + } + + .disable { + border-color: #bed6f9; + background-color: #bed6f9; + color: #fff; } } +.detail_modal { + padding: 20px 16px; + + .title { + text-align: center; + font-weight: 600; + font-size: 16px; + margin-bottom: 20px; + } + + .h1 { + font-weight: 600; + font-size: 16px; + margin-bottom: 15px; + } + + .line { + display: flex; + margin-bottom: 10px; + + .label { + width: 70px; + color: #888888; + } + + .value { + color: #333333; + } + } +} </style> -- Gitblit v1.9.3