From 7298d5354963a88643a543b51b90192dc9fc934c Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 11 九月 2025 18:43:14 +0800
Subject: [PATCH] 最新版本541200007

---
 admin/src/views/meeting/components/OperaBookingsWindow.vue |  276 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 158 insertions(+), 118 deletions(-)

diff --git a/admin/src/views/meeting/components/OperaBookingsWindow.vue b/admin/src/views/meeting/components/OperaBookingsWindow.vue
index 74de916..70f7c03 100644
--- a/admin/src/views/meeting/components/OperaBookingsWindow.vue
+++ b/admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -1,81 +1,48 @@
 <template>
-  <GlobalAlertWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
+  <GlobalAlertWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"
+    width="880px">
     <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-select v-model="form.roomId" @change="selectRoom" filterable clearable :disabled="isEdit" placeholder="璇烽�夋嫨鍏宠仈浼氳瀹�"
         >
           <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-date-picker :disabled="isEdit" 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 class="time-item" v-for="(item, index) in timelist" :key="item.id" :class="{
+            'time-item-sel': form.times.indexOf(index) != -1,
+            'time-item-disable': item.isUse,
+            'disable': item.bookingTimeId
+          }" @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-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 label="鍙備細浜哄憳">
+          <el-select style="width: 100%" v-model="form.sysList" filterable clearable multiple placeholder="閫夋嫨閮ㄩ棬鎴愬憳">
+            <el-option v-for="item in sysList" :key="item.id" :value="item.id"
+              :label="item.companyName ? `${item.realname}-${item.companyName}` : item.realname"></el-option>
+            <!-- <el-option :key="1" :value="1" label="绂佺敤" /> -->
+          </el-select>
+        </el-form-item>
+      <el-form-item   label-width="140px" label="鏄惁閫氱煡鍙備細浜哄憳">
+        <el-radio v-model="form.joinNotice" :label="1">涓嶉�氱煡</el-radio>
+        <el-radio v-model="form.joinNotice" :label="0">閫氱煡</el-radio>
       </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-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 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">
@@ -83,17 +50,35 @@
           <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"
-          />
+          <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 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>
+
+    <el-dialog title="浼氳瀹ら绾︽儏鍐�" :visible.sync="isShowDetail" append-to-body width="600px">
+      <div class="detail_modal">
+        <div class="h1">{{ activeInfo.meetingName }}</div>
+        <div class="line">
+          <div class="label">浼氳鏃堕棿</div>
+          <div class="value" v-if="activeInfo.meetingDate">
+            {{ activeInfo.meetingDate.slice(5) }} {{ activeInfo.meetingTime }}
+          </div>
+        </div>
+        <div class="line">
+          <div class="label">浼氳瀹�</div>
+          <div class="value">{{ activeInfo.roomName }}</div>
+        </div>
+        <div class="line">
+          <div class="label">棰勭害浜�</div>
+          <div class="value">{{ activeInfo.bookingUserName }}</div>
+        </div>
+        <el-button @click="isShowDetail = false">鍏抽棴</el-button>
+      </div>
+    </el-dialog>
   </GlobalAlertWindow>
 </template>
 
@@ -101,16 +86,17 @@
 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 '@/views/meeting/api/projects'
-import { findList } from '@/views/meeting/api/roomTime'
+import { upload } from '@/api/system/common'
+import { findAllList as userList } from '@/api/system/user'
+import { findListByObjId } from '@/api/meeting/projects'
+import { BookDetailById } from '@/api/meeting/bookings'
+import { findList } from '@/api/meeting/roomTime'
 import { numRule, arrayRule } from '@/utils/form'
 export default {
   name: 'OperaBookingsWindow',
   extends: BaseOpera,
   components: { GlobalAlertWindow, FileLink },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -124,10 +110,13 @@
         startTime: '',
         endTime: '',
         times: [],
+        joinNotice: 1,
         content: '',
         sysList: [],
-        fileList: [],
+        fileList: []
       },
+      activeInfo: {},
+      isShowDetail: false,
       isEdit: false,
       // room: [],
       sysList: [],
@@ -136,20 +125,20 @@
       // 楠岃瘉瑙勫垯
       rules: {
         roomId: [
-         { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
+          { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
         ],
         date: [
-         { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
+          { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
         ],
         times: [
-         { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
+          { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
         ],
         sysList: [
-         { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
+          { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
         ],
         name: [
-         { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
-        ],
+          { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
+        ]
         // content: [
         //  { required: true, message: '璇疯緭鍏ヤ細璁唴瀹�', tigger: 'blur' }
         // ],
@@ -157,19 +146,15 @@
     }
   },
   inject: ['rooms'],
-  created () {
+  created() {
     this.config({
-      api: '@/views/meeting/api/bookings',
+      api: '/meeting/bookings',
       'field.id': 'id'
     })
-    userList({
-      page: 1,
-      capacity: 9999,
-      model: { realname: this.filterText },
-    })
+    userList({queryParam: this.filterText,querySpecial: 1, type: 2, companyType: 1,workStatus:0})
       .then(res => {
-        console.log('userList', res);
-        this.sysList = res.records
+        console.log('userList', res)
+        this.sysList = res
       })
   },
   methods: {
@@ -178,7 +163,7 @@
      * @title 绐楀彛鏍囬
      * @target 缂栬緫鐨勫璞�
      */
-     open (title, target) {
+    open(title, target) {
       this.title = title
       this.visible = true
       this.timelist = []
@@ -187,8 +172,6 @@
       if (target == null) {
         this.$nextTick(() => {
           this.$refs.form.resetFields()
-          console.log(this.form.content);
-          debugger
           this.form[this.configData['field.id']] = null
         })
         return
@@ -211,8 +194,8 @@
     selectRoom(objId) {
       this.getTimes()
       findListByObjId({
-        objId,
-        objType: 0,
+        objId: objId,
+        objType: 0
       })
         .then(res => {
           this.projectList = res
@@ -222,7 +205,7 @@
       // console.log(v);
       this.getTimes()
     },
-    getTimes(isInit=false) {
+    getTimes(isInit = false) {
       this.form.times = []
       this.timelist = []
 
@@ -259,29 +242,41 @@
           })
       }
     },
+    getDetail(id) {
+      BookDetailById({
+        id
+      }).then(res => {
+        this.activeInfo = res
+        this.isShowDetail = true
+      })
+    },
     selectTimes(index, item) {
+      if (item.bookingTimeId) {
+        this.getDetail(item.bookingTimeId)
+        return
+      }
       if (this.isEdit) {
         return
       }
-      let tempIndex = this.form.times.indexOf(index)
+      const tempIndex = this.form.times.indexOf(index)
       if (tempIndex != -1) {
-        if (tempIndex==0) {
+        if (tempIndex == 0) {
           // console.log(this.form.times);
           // debugger
           this.form.times.splice(0, 1)
-        } else if (tempIndex==this.form.times.length-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]) {
+        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)
+        this.form.times.sort((x, y) => x - y)
       }
       // console.log(this.form.times);
     },
@@ -306,7 +301,7 @@
       this.$refs.upFile.value = null
     },
     // 纭鏂板缓
-    __confirmCreate () {
+    __confirmCreate() {
       this.$refs.form.validate((valid) => {
         // debugger
         if (!valid) {
@@ -318,21 +313,21 @@
         this.isWorking = true
         let sysList = [...this.form.sysList]
         sysList = sysList.map(item => {
-          return {userId: item}
+          return { userId: item }
         })
         let projectList = [...this.form.projectList]
         projectList = projectList.map(item => {
-          return {projectId: item}
+          return { projectId: item }
         })
-        let bookingTimeList = []
+        const 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'
+        const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
+        const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00'
         this.api.create({
           ...this.form,
           sysList,
@@ -347,7 +342,7 @@
             this.$emit('success')
           })
           .catch(e => {
-            this.$tip.apiFailed(e)
+            // this.$tip.apiFailed(e)
           })
           .finally(() => {
             this.isWorking = false
@@ -355,7 +350,7 @@
       })
     },
     // 纭淇敼
-    __confirmEdit () {
+    __confirmEdit() {
       this.$refs.form.validate((valid) => {
         if (!valid) {
           return
@@ -364,21 +359,21 @@
         this.isWorking = true
         let sysList = [...this.form.sysList]
         sysList = sysList.map(item => {
-          return {userId: item}
+          return { userId: item }
         })
         let projectList = [...this.form.projectList]
         projectList = projectList.map(item => {
-          return {projectId: item}
+          return { projectId: item }
         })
-        let bookingTimeList = []
+        const 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'
+        const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
+        const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00'
         this.api.updateById({
           ...this.form,
           sysList,
@@ -393,14 +388,14 @@
             this.$emit('success')
           })
           .catch(e => {
-            this.$tip.apiFailed(e)
+            // this.$tip.apiFailed(e)
           })
           .finally(() => {
             this.isWorking = false
           })
       })
     }
-  },
+  }
 }
 </script>
 
@@ -417,26 +412,71 @@
   display: flex;
   flex-wrap: wrap;
   cursor: pointer;
+
   .time-item {
     margin-right: 8px;
     margin-bottom: 8px;
-    border: #111 solid 1px;
     font-size: 14px;
+    font-weight: 400;
     line-height: 14px;
-    padding: 5px;
+    width: 124px;
+    height: 36px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
     border-radius: 5px;
     color: #111;
+    border: #cccccc solid 1px;
+    cursor: pointer;
   }
+
   .time-item-sel {
     border-color: $primary-color;
-    background-color: $primary-color;
-    color: #fff;
+    background-color: #f6f9fe;
+    color: $primary-color;
   }
+
   .time-item-disable {
-    border-color: #999;
-    background-color: #999;
-    color: #111;
+    color: #fff;
+    border-color: #cccccc;
+    background-color: #cccccc;
+  }
+
+  .disable {
+    border-color: #bed6f9;
+    background-color: #bed6f9;
+    color: #fff;
   }
 }
 
+.detail_modal {
+  padding: 20px 16px;
+
+  .title {
+    text-align: center;
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 20px;
+  }
+
+  .h1 {
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 15px;
+  }
+
+  .line {
+    display: flex;
+    margin-bottom: 10px;
+
+    .label {
+      width: 70px;
+      color: #888888;
+    }
+
+    .value {
+      color: #333333;
+    }
+  }
+}
 </style>

--
Gitblit v1.9.3