From c58ada7f49aac20b06ea2ebda2cb5c006decf122 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 10 五月 2024 17:01:55 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
---
 admin/src/views/meeting/components/OperaBookingsWindow.vue |  442 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 442 insertions(+), 0 deletions(-)
diff --git a/admin/src/views/meeting/components/OperaBookingsWindow.vue b/admin/src/views/meeting/components/OperaBookingsWindow.vue
new file mode 100644
index 0000000..0af16af
--- /dev/null
+++ b/admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -0,0 +1,442 @@
+<template>
+  <GlobalAlertWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <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-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-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>
+      </el-form-item>
+      <el-form-item label="浼氳涓婚" prop="name">
+        <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>
+      <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-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-group>
+      </el-form-item>
+      <el-form-item label="浼氳闄勪欢" prop="fileList">
+        <div>
+          <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"
+          />
+        </div>
+      </el-form-item>
+      <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>
+  </GlobalAlertWindow>
+</template>
+
+<script>
+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 { findListByObjId } from '@/api/meeting/projects'
+import { findList } from '@/api/meeting/roomTime'
+import { numRule, arrayRule } from '@/utils/form'
+export default {
+  name: 'OperaBookingsWindow',
+  extends: BaseOpera,
+  components: { GlobalAlertWindow, FileLink },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        date: '',
+        editDate: '',
+        projectList: [],
+        remark: '',
+        name: '',
+        roomId: '',
+        startTime: '',
+        endTime: '',
+        times: [],
+        content: '',
+        sysList: [],
+        fileList: [],
+      },
+      isEdit: false,
+      // room: [],
+      sysList: [],
+      projectList: [],
+      timelist: [],
+      // 楠岃瘉瑙勫垯
+      rules: {
+        roomId: [
+         { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
+        ],
+        date: [
+         { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
+        ],
+        times: [
+         { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
+        ],
+        sysList: [
+         { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
+        ],
+        name: [
+         { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
+        ],
+        // content: [
+        //  { required: true, message: '璇疯緭鍏ヤ細璁唴瀹�', tigger: 'blur' }
+        // ],
+      }
+    }
+  },
+  inject: ['rooms'],
+  created () {
+    this.config({
+      api: '/meeting/bookings',
+      'field.id': 'id'
+    })
+    userList({
+      page: 1,
+      capacity: 9999,
+      model: { realname: this.filterText },
+    })
+      .then(res => {
+        console.log('userList', res);
+        this.sysList = res.records
+      })
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+     open (title, target) {
+      this.title = title
+      this.visible = true
+      this.timelist = []
+      this.isEdit = false
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          console.log(this.form.content);
+          debugger
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.isEdit = true
+        this.form.projectList = target.projectList ? target.projectList.map(item => item.projectId) : []
+        this.form.sysList = this.form.sysList ? this.form.sysList.map(item => item.userId) : []
+        // console.log(target.startTime.split(' '));
+        // debugger
+        this.form.date = target.startTime.split(' ')[0]
+        this.getTimes(true)
+        this.selectRoom(this.form.roomId)
+      })
+    },
+    selectRoom(objId) {
+      this.getTimes()
+      findListByObjId({
+        objId,
+        objType: 0,
+      })
+        .then(res => {
+          this.projectList = res
+        })
+    },
+    selectDate(v) {
+      // console.log(v);
+      this.getTimes()
+    },
+    getTimes(isInit=false) {
+      this.form.times = []
+      this.timelist = []
+
+      if (this.form.date && this.form.roomId) {
+        findList({
+          yudingDate: this.form.date + ' 00:00:00',
+          roomId: this.form.roomId,
+          bookingId: this.form.id
+        })
+          .then(res => {
+            this.timelist = res
+            if (isInit) {
+              this.timelist.forEach((itme, index) => {
+                if (itme.isChoose) {
+                  itme.isUse = false
+                  this.form.times.push(index)
+                }
+              })
+              // let startTime = this.form.startTime.split(' ')[1]
+              // let endTime = this.form.endTime.split(' ')[1]
+              // let firstIndex = this.timelist.findIndex(item => item.startTime == startTime)
+              // let lastIndex = this.timelist.findIndex(item => item.endTime == endTime)
+              // let index = firstIndex
+              // while(index <= lastIndex) {
+              //   this.form.times.push(index)
+              //   index ++
+              // }
+              // console.log('startTime', startTime);
+              // console.log('endTime', endTime);
+              // console.log('firstIndex', firstIndex);
+              // console.log('lastIndex', lastIndex);
+              // console.log('this.form.times', this.form.times);
+            }
+          })
+      }
+    },
+    selectTimes(index, item) {
+      if (this.isEdit) {
+        return
+      }
+      let tempIndex = this.form.times.indexOf(index)
+      if (tempIndex != -1) {
+        if (tempIndex==0) {
+          // console.log(this.form.times);
+          // debugger
+          this.form.times.splice(0, 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]) {
+          this.$message.error('棰勭害鏃堕棿蹇呴』鏄浉閭荤殑锛�')
+          return
+        }
+        this.form.times.push(index)
+        this.form.times.sort((x,y)=> x - y)
+      }
+      // console.log(this.form.times);
+    },
+    upFiles(file) {
+      const formdate = new FormData()
+      this.isUploading = true
+      formdate.append('file', file.target.files[0])
+      formdate.append('folder', 'projects')
+      upload(formdate)
+        .then(res => {
+          // console.log(this.form);
+          this.form.fileList.push({
+            name: res.originname,
+            url: res.url,
+            fileurl: res.imgaddr
+          })
+        })
+        .catch(err => {
+          console.log(err)
+        })
+        .finally(() => this.isUploading = false)
+      this.$refs.upFile.value = null
+    },
+    // 纭鏂板缓
+    __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}
+        })
+        let 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'
+        this.api.create({
+          ...this.form,
+          sysList,
+          projectList,
+          startTime,
+          endTime,
+          bookingTimeList
+        })
+          .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
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        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}
+        })
+        let 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'
+        this.api.updateById({
+          ...this.form,
+          sysList,
+          projectList,
+          startTime,
+          endTime,
+          bookingTimeList
+        })
+          .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>
+@import "@/assets/style/alertstyle.scss";
+@import "@/assets/style/variables.scss";
+
+::v-deep .el-input.is-disabled .el-input__inner {
+  background-color: #fff !important;
+  cursor: pointer;
+}
+
+.time-style {
+  display: flex;
+  flex-wrap: wrap;
+  cursor: pointer;
+  .time-item {
+    margin-right: 8px;
+    margin-bottom: 8px;
+    border: #111 solid 1px;
+    font-size: 14px;
+    line-height: 14px;
+    padding: 5px;
+    border-radius: 5px;
+    color: #111;
+  }
+  .time-item-sel {
+    border-color: $primary-color;
+    background-color: $primary-color;
+    color: #fff;
+  }
+  .time-item-disable {
+    border-color: #999;
+    background-color: #999;
+    color: #111;
+  }
+}
+
+</style>
--
Gitblit v1.9.3