From 69a1b3bf45738f048361ee4ccb6bdc64fce35720 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 12 三月 2025 11:31:46 +0800
Subject: [PATCH] 更新
---
admin/src/views/meeting/components/OperaRoomsWindow.vue | 380 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 380 insertions(+), 0 deletions(-)
diff --git a/admin/src/views/meeting/components/OperaRoomsWindow.vue b/admin/src/views/meeting/components/OperaRoomsWindow.vue
new file mode 100644
index 0000000..f850a63
--- /dev/null
+++ b/admin/src/views/meeting/components/OperaRoomsWindow.vue
@@ -0,0 +1,380 @@
+<template>
+ <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-form-item>
+ <el-form-item label="寮�鏀炬椂闂�" prop="timeRange">
+ <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" :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-form-item>
+ <el-form-item label="绠$悊鍛�" prop="sysList">
+ <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-group>
+ </el-form-item>
+ <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-form-item>
+ </el-form>
+ </GlobalAlertWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+import UploadAvatarVideo from '@/components/common/UploadAvatarVideo'
+import { numRule } from '@/utils/form'
+import { fetchList } from '@/api/meeting/projects'
+import { Loading } from 'element-ui'
+export default {
+ name: 'OperaRoomsWindow',
+ extends: BaseOpera,
+ components: { GlobalAlertWindow, UploadAvatarVideo },
+ data() {
+ let timeRangeRule = (rule, value, callBack) => {
+ if (!this.form.startTime) {
+ callBack(new Error('璇烽�夋嫨寮�濮嬫椂闂�'))
+ return
+ }
+ if (!this.form.endTime) {
+ callBack(new Error('璇烽�夋嫨缁撴潫鏃堕棿'))
+ return
+ }
+ 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: null,
+ isdeleted: 0,
+ fileType: 2,
+ name: '',
+ remark: '',
+ startTime: '',
+ endTime: '',
+ limitNum: 0,
+ imgurl: '',
+ imgFullUrl: '',
+ tips: '',
+ status: 0,
+ intervalTime: 0,
+ bookingNum: 0,
+ },
+ user: [],
+ projectList: [],
+ // 楠岃瘉瑙勫垯
+ rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ヤ細璁鍚嶇О', tigger: 'blur' }
+ ],
+ intervalTime: [
+ { required: true, validator: numRule, message: '璇疯緭鍏ユ椂闂寸矑搴�', tigger: 'blur' }
+ ],
+ timeRange: [
+ { required: true, validator: timeRangeRule, tigger: 'change' }
+ ]
+ }
+ }
+ },
+ inject: ['userList'],
+ created() {
+ this.config({
+ api: '/meeting/rooms',
+ 'field.id': 'id'
+ })
+ // realname: this.filterText
+ fetchList({
+ page: 1,
+ capacity: 9999,
+ model: {},
+ })
+ .then(res => {
+ this.projectList = res.records
+ })
+ },
+ methods: {
+ /**
+ * 鎵撳紑绐楀彛
+ * @title 绐楀彛鏍囬
+ * @target 缂栬緫鐨勫璞�
+ */
+ open(title, target) {
+ this.title = title
+ this.visible = true
+ this.timeRange = ['', '']
+ // 鏂板缓
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ 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)
+ this.form.startTime = v[0]
+ this.form.endTime = v[1]
+ console.log(this.form.startTime, this.form.endTime)
+ },
+ changeFile() {
+ this.$set(this.form, 'multifileList', [])
+ },
+ uploadAvatarSuccess(file) {
+ 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() {
+ 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 }
+ })
+ this.api.create({
+ ...this.form,
+ sysList,
+ projectList
+ })
+ .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
+ }
+ 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 }
+ })
+ this.api.updateById({
+ ...this.form,
+ sysList,
+ projectList
+ })
+ .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>
+$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