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