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/OperaRoomsWindow.vue | 257 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 181 insertions(+), 76 deletions(-) diff --git a/admin/src/views/meeting/components/OperaRoomsWindow.vue b/admin/src/views/meeting/components/OperaRoomsWindow.vue index f8d603a..f850a63 100644 --- a/admin/src/views/meeting/components/OperaRoomsWindow.vue +++ b/admin/src/views/meeting/components/OperaRoomsWindow.vue @@ -1,68 +1,63 @@ <template> - <GlobalAlertWindow - v-loading="isUploading" - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalAlertWindow v-loading="isUploading" :title="title" :visible.sync="visible" :confirm-working="isWorking" + @confirm="confirm"> + <p class="tip-warn" v-if="form.id"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛�<br> + <span style="color: #e75314">濡傛灉褰撳墠浼氳瀹ゅ瓨鍦ㄦ湭缁撴潫鐨勪細璁紝涓嶅厑璁告洿鏂板紑鏀炬椂闂村拰绮掑害鍒嗛挓锛屾彁浜ゅ悗寮�鏀炬椂闂村拰绮掑害鍒嗛挓淇敼涓嶇敓鏁堬紒</span> + </p> <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�"> <el-form-item label="浼氳瀹ゅ悕绉�" prop="name"> - <el-input v-model="form.name" placeholder="璇疯緭鍏ヤ細璁鍚嶇О" :maxlength="10" v-trim/> + <el-input v-model="form.name" placeholder="璇疯緭鍏ヤ細璁鍚嶇О" :maxlength="10" v-trim /> </el-form-item> <el-form-item label="寮�鏀炬椂闂�" prop="timeRange"> - <el-time-picker - is-range - value-format="HH:mm" - format="HH:mm" - v-model="timeRange" - range-separator="鑷�" - start-placeholder="寮�濮嬫椂闂�" - end-placeholder="缁撴潫鏃堕棿" - placeholder="閫夋嫨鏃堕棿鑼冨洿" - @change="selectRange" - ></el-time-picker> + <el-time-picker is-range value-format="HH:mm" :disabled=" form.bookingNum && form.bookingNum>0" format="HH:mm" v-model="timeRange" range-separator="鑷�" + start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" @change="selectRange"></el-time-picker> </el-form-item> <el-form-item label="绮掑害鍒嗛挓" prop="intervalTime"> - <el-input v-model="form.intervalTime" type="number" placeholder="璇疯緭鍏ユ椂闂寸矑搴︼紙鍒嗛挓锛�" v-trim/> + <el-input v-model="form.intervalTime" type="number" :disabled="form.bookingNum && form.bookingNum>0" placeholder="璇疯緭鍏ユ椂闂寸矑搴︼紙鍒嗛挓锛�" v-trim /> </el-form-item> <el-form-item label="瀹圭撼浜烘暟" prop="limitNum"> - <el-input v-model="form.limitNum" type="number" placeholder="璇疯緭鍏ュ绾充汉鏁�" v-trim/> + <el-input v-model="form.limitNum" type="number" placeholder="璇疯緭鍏ュ绾充汉鏁�" v-trim /> </el-form-item> <el-form-item label="绠$悊鍛�" prop="sysList"> - <el-select - v-model="form.sysList" - filterable - multiple - clearable - placeholder="璇烽�夋嫨閮ㄩ棬" - > - <!-- :label="`${item.department.name}-${item.realname}`" --> - <el-option - v-for="item in userList()" - :key="item.id" - :value="item.id" - - :label="item.department?`${item.department.name}-${item.realname}`:item.realname" - /> + <el-select style="width: 100%" v-model="form.sysList" filterable multiple clearable placeholder="璇烽�夋嫨閮ㄩ棬"> + <!-- :label="`${item.department.name}-${item.realname}`" --> + <el-option v-for="item in userList()" :key="item.id" :value="item.id" + :label="item.companyId ? `${item.realname}-${item.companyName}` : item.realname" /> </el-select> </el-form-item> <el-form-item 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="imgurl"> - <UploadAvatarImage - :file="{ 'imgurlfull': form.imgFullUrl, 'imgurl': form.imgurl }" - :uploadData="uploadData" - @uploadSuccess="uploadAvatarSuccess" - @uploadEnd="isUploading = false" - @uploadBegin="isUploading = true" - /> + <el-form-item label="绌洪棽灞曠ず鍐呭" prop="fileType"> + <el-radio v-model="form.fileType" @change="changeFile" :label="2">鏃�</el-radio> + <el-radio v-model="form.fileType" @change="changeFile" :label="0">鍥剧墖</el-radio> + <el-radio v-model="form.fileType" @change="changeFile" :label="1">瑙嗛</el-radio> + </el-form-item> + <el-form-item v-if="form.fileType == 0" label="灞曠ず鍥剧墖" prop="imgurl"> + <div class="upload_wrap"> + <el-upload class="avatar-uploader" accept=".png,.jpg,.jpeg" :action="uploadImgUrl" :data="uploadData" + :show-file-list="false" :before-upload="beforeAvatarUpload" :on-error="uploadError" + :on-success="handleImgSuccess"> + <div> + <i class="el-icon-plus avatar-uploader-icon"></i> + </div> + </el-upload> + <div v-for="item, i in form.multifileList" class="img_wrap"> + <img :src="item.fileurlFull" class="img"> + <i class="el-icon-error del" @click="imgDel(i)"></i> + </div> + </div> + </el-form-item> + <el-form-item v-if="form.fileType == 1" label="灞曠ず瑙嗛" prop="imgurl"> + <UploadAvatarVideo :file="{ 'videourlfull': form.videoFullUrl, 'videourl': form.videourl }" + :uploadData="uploadData" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" + @uploadBegin="isUploading = true" /> </el-form-item> <el-form-item label="浣跨敤椤荤煡" prop="tips"> - <el-input v-model="form.tips" type="textarea" placeholder="璇疯緭鍏ヤ娇鐢ㄩ』鐭�" v-trim/> + <el-input v-model="form.tips" type="textarea" placeholder="璇疯緭鍏ヤ娇鐢ㄩ』鐭�" v-trim /> </el-form-item> </el-form> </GlobalAlertWindow> @@ -71,14 +66,15 @@ <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalAlertWindow from '@/components/common/GlobalAlertWindow' -import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import UploadAvatarVideo from '@/components/common/UploadAvatarVideo' import { numRule } from '@/utils/form' -import { fetchList } from '@/views/meeting/api/projects' +import { fetchList } from '@/api/meeting/projects' +import { Loading } from 'element-ui' export default { name: 'OperaRoomsWindow', extends: BaseOpera, - components: { GlobalAlertWindow, UploadAvatarImage }, - data () { + components: { GlobalAlertWindow, UploadAvatarVideo }, + data() { let timeRangeRule = (rule, value, callBack) => { if (!this.form.startTime) { callBack(new Error('璇烽�夋嫨寮�濮嬫椂闂�')) @@ -91,30 +87,35 @@ callBack() } return { + uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload', isUploading: false, uploadData: { folder: 'projects' }, timeRange: ['', ''], + loading: null, // 琛ㄥ崟鏁版嵁 form: { id: null, sysList: [], + multifileList: [], projectList: [], createDate: '', editor: '', - editDate: '', - isdeleted: '', + editDate: null, + isdeleted: 0, + fileType: 2, name: '', remark: '', startTime: '', endTime: '', - limitNum: '', + limitNum: 0, imgurl: '', imgFullUrl: '', tips: '', - status: '', - intervalTime: '' + status: 0, + intervalTime: 0, + bookingNum: 0, }, user: [], projectList: [], @@ -133,9 +134,9 @@ } }, inject: ['userList'], - created () { + created() { this.config({ - api: '@/views/meeting/api/rooms', + api: '/meeting/rooms', 'field.id': 'id' }) // realname: this.filterText @@ -154,12 +155,9 @@ * @title 绐楀彛鏍囬 * @target 缂栬緫鐨勫璞� */ - open (title, target) { + open(title, target) { this.title = title this.visible = true - this.form.imgFullUrl = '' - // this.timeRange = ['14:34:55', '14:34:55'] - // debugger this.timeRange = ['', ''] // 鏂板缓 if (target == null) { @@ -174,26 +172,76 @@ for (const key in this.form) { this.form[key] = target[key] } + if (target.fileType == 1 && target.multifileList && target.multifileList.length > 0) { + this.$set(this.form, 'videoFullUrl', target.multifileList[0].fileurlFull) + this.$set(this.form, 'videourl', target.multifileList[0].fileurl) + } this.timeRange = [target.startTime, target.endTime] this.form.projectList = this.form.projectList ? target.projectList.map(item => item.projectId) : [] this.form.sysList = this.form.sysList ? this.form.sysList.map(item => item.userId) : [] // console.log(this.form.imgFullUrl); }) }, + imgDel(i) { + this.form.multifileList.splice(i, 1) + }, + handleImgSuccess(res) { + this.$nextTick(() => { + this.loading.close() + }) + const list = [...this.form.multifileList] + + if (res.code == 200) { + let { data } = res + list.push({ + fileurl: data.imgaddr, + fileurlFull: data.url, + type: 0 + }) + this.$set(this.form, 'multifileList', list) + + } + }, + uploadError() { + // this.$message.error('涓婁紶澶辫触') + this.$nextTick(() => { + this.loading.close() + }) + }, + // // 鎷︽埅 + beforeAvatarUpload(file) { + this.loading = Loading.service({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + return true + }, selectRange(v) { // console.log(this.timeRange); - console.log(v); + console.log(v) this.form.startTime = v[0] this.form.endTime = v[1] - console.log(this.form.startTime, this.form.endTime); + console.log(this.form.startTime, this.form.endTime) }, - // 涓婁紶鍥剧墖 + changeFile() { + this.$set(this.form, 'multifileList', []) + }, uploadAvatarSuccess(file) { - this.form.imgurl = file.imgurl; - this.form.imgFullUrl = file.imgurlfull; + console.log('file', file) + let temp = [] + temp.push({ + fileurl: file.imgurl, + fileurlFull: file.imgurlfull, + type: 1 + }) + this.form.multifileList = temp + this.$set(this.form, 'videourl', file.imgurl) + this.$set(this.form, 'videoFullUrl', file.imgurlfull) }, // 纭鏂板缓 - __confirmCreate () { + __confirmCreate() { this.$refs.form.validate((valid) => { // debugger if (!valid) { @@ -205,11 +253,11 @@ 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 } }) this.api.create({ ...this.form, @@ -222,7 +270,7 @@ this.$emit('success') }) .catch(e => { - this.$tip.apiFailed(e) + // this.$tip.apiFailed(e) }) .finally(() => { this.isWorking = false @@ -230,22 +278,22 @@ }) }, // 纭淇敼 - __confirmEdit () { + __confirmEdit() { this.$refs.form.validate((valid) => { if (!valid) { return } - console.log(this.form); + console.log(this.form) debugger // 璋冪敤鏂板缓鎺ュ彛 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 } }) this.api.updateById({ ...this.form, @@ -258,7 +306,7 @@ this.$emit('success') }) .catch(e => { - this.$tip.apiFailed(e) + // this.$tip.apiFailed(e) }) .finally(() => { this.isWorking = false @@ -270,6 +318,63 @@ </script> <style lang="scss" scoped> -@import "@/assets/style/alertstyle.scss"; +$image-width: 90px; +.upload_wrap { + display: flex; + + .img_wrap { + margin-left: 10px; + border: 1px dashed #d9d9d9; + width: $image-width; + height: $image-width; + border-radius: 6px; + position: relative; + + .img { + width: $image-width; + height: $image-width; + } + + .del { + position: absolute; + top: -6px; + right: -6px; + cursor: pointer; + color: red; + } + } +} + +.avatar-uploader { + width: $image-width; + height: $image-width; +} + +::v-deep .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; +} + +.avatar-uploader .el-upload:hover { + border-color: #409EFF; +} + +.avatar-uploader-icon { + line-height: 90px; + font-size: 28px; + color: #8c939d; + width: $image-width; + height: $image-width; + text-align: center; +} + +.avatar { + width: 90px; + max-height: 90px; + display: block; +} </style> -- Gitblit v1.9.3