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