doum
2025-09-11 7298d5354963a88643a543b51b90192dc9fc934c
admin/src/views/meeting/components/OperaRoomsWindow.vue
@@ -1,25 +1,28 @@
<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" format="HH:mm" v-model="timeRange" range-separator="至"
        <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-form-item>
      <el-form-item label="管理员" prop="sysList">
        <el-select v-model="form.sysList" filterable multiple clearable placeholder="请选择部门">
        <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.companyName}-${item.companyName}` : item.realname" />
            :label="item.companyId ? `${item.realname}-${item.companyName}` : item.realname" />
        </el-select>
      </el-form-item>
      <el-form-item label="提供服务项目" prop="projectList">
@@ -36,7 +39,8 @@
      <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" :on-success="handleImgSuccess">
            :show-file-list="false" :before-upload="beforeAvatarUpload" :on-error="uploadError"
            :on-success="handleImgSuccess">
            <div>
              <i class="el-icon-plus avatar-uploader-icon"></i>
            </div>
@@ -48,8 +52,9 @@
        </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" />
        <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 />
@@ -64,6 +69,7 @@
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,
@@ -87,6 +93,7 @@
        folder: 'projects'
      },
      timeRange: ['', ''],
      loading: null,
      // 表单数据
      form: {
        id: null,
@@ -107,7 +114,8 @@
        imgFullUrl: '',
        tips: '',
        status: 0,
        intervalTime: 0
        intervalTime: 0,
        bookingNum: 0,
      },
      user: [],
      projectList: [],
@@ -164,7 +172,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        if(target.fileType == 1 && target.multifileList && target.multifileList.length > 0){
        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)
        }
@@ -178,7 +186,11 @@
      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({
@@ -189,6 +201,22 @@
        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);
@@ -202,11 +230,13 @@
    },
    uploadAvatarSuccess(file) {
      console.log('file', file)
      this.form.multifileList.push({
      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)
    },
@@ -347,4 +377,4 @@
  max-height: 90px;
  display: block;
}
</style>
</style>