From f658bcc1141487067b4f94206e2f416925403bbf Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 09 六月 2026 14:15:49 +0800
Subject: [PATCH] pro 1.会议申请开始结束时间没法选择问题 2.会议审批、发布、总结人数无法显示问题

---
 src/views/collaborativeApproval/notificationManagement/meetApplication/index.vue |  741 ++++++++++++++++++++++++++------------------------------
 1 files changed, 349 insertions(+), 392 deletions(-)

diff --git a/src/views/collaborativeApproval/notificationManagement/meetApplication/index.vue b/src/views/collaborativeApproval/notificationManagement/meetApplication/index.vue
index b2fb88d..ac7a123 100644
--- a/src/views/collaborativeApproval/notificationManagement/meetApplication/index.vue
+++ b/src/views/collaborativeApproval/notificationManagement/meetApplication/index.vue
@@ -1,154 +1,148 @@
 <template>
-  <div>
-
-    <!-- 鐢宠绫诲瀷閫夋嫨 -->
-    <el-card class="type-card">
-      <div class="type-selector">
-        <div
-            v-for="type in applicationTypes"
-            :key="type.value"
-            class="type-item"
-            :class="{ active: currentType === type.value }"
-            @click="changeType(type.value)"
-        >
-          <div class="type-icon">
-            <el-icon :size="24"><component :is="type.icon"/></el-icon>
-          </div>
-          <div class="type-info">
-            <div class="type-name">{{ type.name }}</div>
-            <div class="type-desc">{{ type.desc }}</div>
-          </div>
-        </div>
-      </div>
-    </el-card>
-
-    <!-- 浼氳鐢宠琛ㄥ崟 -->
-    <el-card>
-      <div class="form-header">
-        <h3>{{ getCurrentTypeName() }}鐢宠</h3>
-      </div>
-
-      <el-form
-          ref="meetingFormRef"
-          :model="meetingForm"
-          :rules="rules"
-          label-width="100px"
-      >
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="浼氳涓婚" prop="title">
-              <el-input v-model="meetingForm.title" placeholder="璇疯緭鍏ヤ細璁富棰�"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="浼氳瀹�" prop="roomId">
-              <el-select v-model="meetingForm.roomId" placeholder="璇烽�夋嫨浼氳瀹�" style="width: 100%">
-                <el-option
-                    v-for="room in meetingRooms"
-                    :key="room.id"
-                    :label="`${room.name} (${room.location})`"
-                    :value="room.id"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="涓绘寔浜�" prop="host">
-              <el-input v-model="meetingForm.host" placeholder="璇疯緭鍏ヤ富鎸佷汉濮撳悕"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="浼氳鏃ユ湡" prop="meetingDate">
-              <el-date-picker
-                  v-model="meetingForm.meetingDate"
-                  type="date"
-                  placeholder="璇烽�夋嫨浼氳鏃ユ湡"
-                  value-format="YYYY-MM-DD"
-                  format="YYYY-MM-DD"
-                  :disabled-date="disabledDate"
-                  style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <!-- 绌哄垪锛屼繚鎸佸竷灞� -->
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="寮�濮嬫椂闂�" prop="startTime">
-              <el-select
-                  v-model="meetingForm.startTime"
-                  placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="time in startTimeOptions"
-                    :key="time.value"
-                    :label="time.label"
-                    :value="time.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="缁撴潫鏃堕棿" prop="endTime">
-              <el-select
-                  v-model="meetingForm.endTime"
-                  placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
-                  style="width: 100%"
-              >
-                <el-option
-                    v-for="time in endTimeOptions"
-                    :key="time.value"
-                    :label="time.label"
-                    :value="time.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item label="鍙備細浜哄憳" prop="participants">
-          <el-select
-              v-model="meetingForm.participants"
-              multiple
-              filterable
-              placeholder="璇烽�夋嫨鍙備細浜哄憳"
-              style="width: 100%"
-          >
-            <el-option
-                v-for="person in employees"
-                :key="person.id"
-                :label="`${person.staffName}${person.postName ? ` (${person.postName})` : ''}`"
-                :value="person.id"
-            />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="浼氳璇存槑" prop="description">
-          <el-input
-              v-model="meetingForm.description"
-              type="textarea"
-              :rows="4"
-              placeholder="璇疯緭鍏ヤ細璁鏄�"
-          />
-        </el-form-item>
-      </el-form>
-
-      <div class="form-footer">
-        <el-button @click="resetForm">閲嶇疆</el-button>
-        <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
-      </div>
-    </el-card>
-  </div>
+	<div>
+		
+		<!-- 鐢宠绫诲瀷閫夋嫨 -->
+		<el-card class="type-card">
+			<div class="type-selector">
+				<div
+					v-for="type in applicationTypes"
+					:key="type.value"
+					class="type-item"
+					:class="{ active: currentType === type.value }"
+					@click="changeType(type.value)"
+				>
+					<div class="type-icon">
+						<el-icon :size="24"><component :is="type.icon"/></el-icon>
+					</div>
+					<div class="type-info">
+						<div class="type-name">{{ type.name }}</div>
+						<div class="type-desc">{{ type.desc }}</div>
+					</div>
+				</div>
+			</div>
+		</el-card>
+		
+		<!-- 浼氳鐢宠琛ㄥ崟 -->
+		<el-card>
+			<div class="form-header">
+				<h3>{{ getCurrentTypeName() }}鐢宠</h3>
+			</div>
+			
+			<el-form
+				ref="meetingFormRef"
+				:model="meetingForm"
+				:rules="rules"
+				label-width="100px"
+			>
+				<el-row :gutter="20">
+					<el-col :span="12">
+						<el-form-item label="浼氳涓婚" prop="title">
+							<el-input v-model="meetingForm.title" placeholder="璇疯緭鍏ヤ細璁富棰�"/>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				
+				<el-row :gutter="20">
+					<el-col :span="12">
+						<el-form-item label="浼氳瀹�" prop="roomId">
+							<el-select v-model="meetingForm.roomId" placeholder="璇烽�夋嫨浼氳瀹�" style="width: 100%">
+								<el-option
+									v-for="room in meetingRooms"
+									:key="room.id"
+									:label="`${room.name} (${room.location})`"
+									:value="room.id"
+								/>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="涓绘寔浜�" prop="host">
+							<el-input v-model="meetingForm.host" placeholder="璇疯緭鍏ヤ富鎸佷汉濮撳悕"/>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				
+				<el-row :gutter="20">
+					<el-col :span="12">
+						<el-form-item label="浼氳鏃ユ湡" prop="meetingDate">
+							<el-date-picker
+								v-model="meetingForm.meetingDate"
+								type="date"
+								placeholder="璇烽�夋嫨浼氳鏃ユ湡"
+								value-format="YYYY-MM-DD"
+								format="YYYY-MM-DD"
+								:disabled-date="disabledDate"
+								style="width: 100%"
+							/>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<!-- 绌哄垪锛屼繚鎸佸竷灞� -->
+					</el-col>
+				</el-row>
+				
+				<el-row :gutter="20">
+					<el-col :span="12">
+						<el-form-item label="寮�濮嬫椂闂�" prop="startTime">
+							<el-time-picker
+								v-model="meetingForm.startTime"
+								placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
+								format="HH:mm"
+								value-format="HH:mm"
+								:disabled-hours="disabledStartHours"
+								:disabled-minutes="disabledStartMinutes"
+								style="width: 100%"
+							/>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="缁撴潫鏃堕棿" prop="endTime">
+							<el-time-picker
+								v-model="meetingForm.endTime"
+								placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
+								format="HH:mm"
+								value-format="HH:mm"
+								:disabled-hours="disabledEndHours"
+								:disabled-minutes="disabledEndMinutes"
+								style="width: 100%"
+							/>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				
+				<el-form-item label="鍙備細浜哄憳" prop="participants">
+					<el-select
+						v-model="meetingForm.participants"
+						multiple
+						filterable
+						placeholder="璇烽�夋嫨鍙備細浜哄憳"
+						style="width: 100%"
+					>
+						<el-option
+							v-for="person in employees"
+							:key="person.id"
+							:label="`${person.staffName}${person.postName ? ` (${person.postName})` : ''}`"
+							:value="person.id"
+						/>
+					</el-select>
+				</el-form-item>
+				
+				<el-form-item label="浼氳璇存槑" prop="description">
+					<el-input
+						v-model="meetingForm.description"
+						type="textarea"
+						:rows="4"
+						placeholder="璇疯緭鍏ヤ細璁鏄�"
+					/>
+				</el-form-item>
+			</el-form>
+			
+			<div class="form-footer">
+				<el-button @click="resetForm">閲嶇疆</el-button>
+				<el-button type="primary" @click="submitForm">鎻愪氦</el-button>
+			</div>
+		</el-card>
+	</div>
 </template>
 
 <script setup>
@@ -163,37 +157,37 @@
 
 // 鐢宠绫诲瀷閫夐」
 const applicationTypes = ref([
-  {
-    value: 'approval',
-    name: '瀹℃壒娴佺▼浼氳',
-    desc: '闇�瑕佺粡杩囧绾у鎵圭殑浼氳鐢宠',
-    icon: Document
-  },
-  {
-    value: 'department',
-    name: '閮ㄩ棬绾т細璁�',
-    desc: '閮ㄩ棬鍐呴儴浼氳鐢宠娴佺▼',
-    icon: Promotion
-  },
-  {
-    value: 'notification',
-    name: '浼氳閫氱煡',
-    desc: '鏃犻渶瀹℃壒鐩存帴鍙戝竷鐨勪細璁�氱煡',
-    icon: Bell
-  }
+	{
+		value: 'approval',
+		name: '瀹℃壒娴佺▼浼氳',
+		desc: '闇�瑕佺粡杩囧绾у鎵圭殑浼氳鐢宠',
+		icon: Document
+	},
+	{
+		value: 'department',
+		name: '閮ㄩ棬绾т細璁�',
+		desc: '閮ㄩ棬鍐呴儴浼氳鐢宠娴佺▼',
+		icon: Promotion
+	},
+	{
+		value: 'notification',
+		name: '浼氳閫氱煡',
+		desc: '鏃犻渶瀹℃壒鐩存帴鍙戝竷鐨勪細璁�氱煡',
+		icon: Bell
+	}
 ])
 
 // 琛ㄥ崟鏁版嵁
 const meetingForm = reactive({
-  title: '',
-  type: '',
-  roomId: '',
-  host: '',
-  meetingDate: '',
-  startTime: '',
-  endTime: '',
-  participants: [],
-  description: ''
+	title: '',
+	type: '',
+	roomId: '',
+	host: '',
+	meetingDate: '',
+	startTime: '',
+	endTime: '',
+	participants: [],
+	description: ''
 })
 
 // 琛ㄥ崟寮曠敤
@@ -205,307 +199,270 @@
 // 鍛樺伐鍒楄〃
 const employees = ref([])
 
-// 鏃堕棿閫夐」锛堜互鍗婂皬鏃朵负闂撮殧锛�
-const timeOptions = ref([])
-
 const getTimeInMinutes = (time) => {
-  if (!time) return -1
-  const [hour, minute] = time.split(':').map(Number)
-  return hour * 60 + minute
+	if (!time) return -1
+	const [hour, minute] = time.split(':').map(Number)
+	return hour * 60 + minute
 }
 
 const isToday = (dateText) => {
-  if (!dateText) return false
-  const [year, month, day] = dateText.split('-').map(Number)
-  const now = new Date()
-  return year === now.getFullYear() && month === now.getMonth() + 1 && day === now.getDate()
+	if (!dateText) return false
+	const [year, month, day] = dateText.split('-').map(Number)
+	const now = new Date()
+	return year === now.getFullYear() && month === now.getMonth() + 1 && day === now.getDate()
 }
 
 const validateStartTime = (_rule, value, callback) => {
-  if (!value) {
-    callback()
-    return
-  }
-
-  if (isToday(meetingForm.meetingDate)) {
-    const now = new Date()
-    const currentMinutes = now.getHours() * 60 + now.getMinutes()
-    if (getTimeInMinutes(value) > currentMinutes) {
-      callback(new Error('褰撳ぉ寮�濮嬫椂闂翠笉鑳芥櫄浜庡綋鍓嶆椂闂�'))
-      return
-    }
-  }
-
-  callback()
+	if (!value) {
+		callback()
+		return
+	}
+	callback()
 }
 
 const validateEndTime = (_rule, value, callback) => {
-  if (!value || !meetingForm.startTime) {
-    callback()
-    return
-  }
-
-  if (getTimeInMinutes(value) <= getTimeInMinutes(meetingForm.startTime)) {
-    callback(new Error('缁撴潫鏃堕棿蹇呴』澶т簬寮�濮嬫椂闂�'))
-    return
-  }
-
-  callback()
+	if (!value || !meetingForm.startTime) {
+		callback()
+		return
+	}
+	if (getTimeInMinutes(value) <= getTimeInMinutes(meetingForm.startTime)) {
+		callback(new Error('缁撴潫鏃堕棿蹇呴』澶т簬寮�濮嬫椂闂�'))
+		return
+	}
+	callback()
 }
 
-// 琛ㄥ崟鏍¢獙瑙勫垯
 const rules = {
-  title: [{required: true, message: '璇疯緭鍏ヤ細璁富棰�', trigger: 'blur'}],
-  roomId: [{required: true, message: '璇烽�夋嫨浼氳瀹�', trigger: 'change'}],
-  host: [{required: true, message: '璇疯緭鍏ヤ富鎸佷汉', trigger: 'blur'}],
-  meetingDate: [{required: true, message: '璇烽�夋嫨浼氳鏃ユ湡', trigger: 'change'}],
-  startTime: [
-    {required: true, message: '璇烽�夋嫨寮�濮嬫椂闂�', trigger: 'change'},
-    {validator: validateStartTime, trigger: 'change'}
-  ],
-  endTime: [
-    {required: true, message: '璇烽�夋嫨缁撴潫鏃堕棿', trigger: 'change'},
-    {validator: validateEndTime, trigger: 'change'}
-  ],
-  participants: [{required: true, message: '璇烽�夋嫨鍙備細浜哄憳', trigger: 'change'}]
+	title: [{required: true, message: '璇疯緭鍏ヤ細璁富棰�', trigger: 'blur'}],
+	roomId: [{required: true, message: '璇烽�夋嫨浼氳瀹�', trigger: 'change'}],
+	host: [{required: true, message: '璇疯緭鍏ヤ富鎸佷汉', trigger: 'blur'}],
+	meetingDate: [{required: true, message: '璇烽�夋嫨浼氳鏃ユ湡', trigger: 'change'}],
+	startTime: [
+		{required: true, message: '璇烽�夋嫨寮�濮嬫椂闂�', trigger: 'change'},
+		{validator: validateStartTime, trigger: 'change'}
+	],
+	endTime: [
+		{required: true, message: '璇烽�夋嫨缁撴潫鏃堕棿', trigger: 'change'},
+		{validator: validateEndTime, trigger: 'change'}
+	],
+	participants: [{required: true, message: '璇烽�夋嫨鍙備細浜哄憳', trigger: 'change'}]
 }
 
-const startTimeOptions = computed(() => {
-  if (!isToday(meetingForm.meetingDate)) {
-    return timeOptions.value
-  }
-  const now = new Date()
-  const currentMinutes = now.getHours() * 60 + now.getMinutes()
-  return timeOptions.value.filter(item => getTimeInMinutes(item.value) <= currentMinutes)
-})
-
-const endTimeOptions = computed(() => {
-  if (!meetingForm.startTime) {
-    return timeOptions.value
-  }
-  const startMinutes = getTimeInMinutes(meetingForm.startTime)
-  return timeOptions.value.filter(item => getTimeInMinutes(item.value) > startMinutes)
-})
-
-// 鍒濆鍖栨椂闂撮�夐」
-const initTimeOptions = () => {
-  const options = []
-  const now = new Date()
-  const currentHour = now.getHours()
-  const currentMinute = now.getMinutes()
-  // meetingDate 鏄� "yyyy-MM-dd"
-  const meetingDate = new Date(meetingForm.meetingDate)
-
-  const isSameDay =
-    now.getFullYear() === meetingDate.getFullYear() &&
-    now.getMonth() === meetingDate.getMonth() &&
-    now.getDate() === meetingDate.getDate()
-
-  console.log('鏄惁鍚屼竴澶�:', isSameDay)
-  for (let hour = 8; hour <= 18; hour++) {
-    // 寮�濮嬫椂闂村繀椤绘櫄浜庡綋鍓嶆椂闂�
-    if (hour < currentHour && isSameDay) {
-      continue
-    }
-    if (hour === currentHour && currentMinute > 30 && isSameDay) {
-      continue
-    }
-    // 姣忎釜灏忔椂娣诲姞涓や釜閫夐」锛氭暣鐐瑰拰鍗婄偣
-    options.push({
-      value: `${hour.toString().padStart(2, '0')}:00`,
-      label: `${hour.toString().padStart(2, '0')}:00`
-    })
-
-    if (hour < 18) { // 18:00涔嬪悗娌℃湁鍗婄偣閫夐」
-      options.push({
-        value: `${hour.toString().padStart(2, '0')}:30`,
-        label: `${hour.toString().padStart(2, '0')}:30`
-      })
-    }
-  }
-  timeOptions.value = options
+// 鏃堕棿閫夋嫨鍣ㄧ鐢ㄩ�昏緫
+const disabledStartHours = () => {
+	const hours = []
+	for (let h = 0; h < 24; h++) {
+		if (h < 8 || h > 18) hours.push(h)
+	}
+	if (isToday(meetingForm.meetingDate)) {
+		const now = new Date()
+		for (let h = 8; h < now.getHours(); h++) {
+			if (!hours.includes(h)) hours.push(h)
+		}
+	}
+	return hours
 }
 
-watch(() => meetingForm.meetingDate, () => {
-  if (meetingForm.startTime && !startTimeOptions.value.some(item => item.value === meetingForm.startTime)) {
-    meetingForm.startTime = ''
-  }
-  if (meetingForm.endTime && !endTimeOptions.value.some(item => item.value === meetingForm.endTime)) {
-    meetingForm.endTime = ''
-  }
-  if (meetingForm.startTime) {
-    meetingFormRef.value?.validateField('startTime')
-  }
-  if (meetingForm.endTime) {
-    meetingFormRef.value?.validateField('endTime')
-  }
-  initTimeOptions()
-})
+const disabledStartMinutes = (hour) => {
+	const minutes = []
+	for (let m = 0; m < 60; m++) {
+		if (m !== 0 && m !== 30) minutes.push(m)
+	}
+	if (isToday(meetingForm.meetingDate)) {
+		const now = new Date()
+		if (hour === now.getHours()) {
+			if (now.getMinutes() >= 30) {
+				minutes.push(0)
+			}
+		}
+	}
+	return minutes
+}
+
+const disabledEndHours = () => {
+	const hours = []
+	for (let h = 0; h < 24; h++) {
+		if (h < 8 || h > 18) hours.push(h)
+	}
+	if (meetingForm.startTime) {
+		const startHour = parseInt(meetingForm.startTime.split(':')[0])
+		for (let h = 8; h < startHour; h++) {
+			if (!hours.includes(h)) hours.push(h)
+		}
+	}
+	return hours
+}
+
+const disabledEndMinutes = (hour) => {
+	const minutes = []
+	for (let m = 0; m < 60; m++) {
+		if (m !== 0 && m !== 30) minutes.push(m)
+	}
+	if (meetingForm.startTime) {
+		const startHour = parseInt(meetingForm.startTime.split(':')[0])
+		const startMinute = parseInt(meetingForm.startTime.split(':')[1])
+		if (hour === startHour) {
+			if (startMinute >= 0) minutes.push(0)
+			if (startMinute >= 30) minutes.push(30)
+			// only keep minutes > startMinute
+			for (let m = 0; m <= startMinute; m++) {
+				if (!minutes.includes(m)) minutes.push(m)
+			}
+		}
+	}
+	return minutes
+}
 
 watch(() => meetingForm.startTime, () => {
-  if (meetingForm.endTime && getTimeInMinutes(meetingForm.endTime) <= getTimeInMinutes(meetingForm.startTime)) {
-    meetingForm.endTime = ''
-  }
-  if (meetingForm.endTime) {
-    meetingFormRef.value?.validateField('endTime')
-  }
-  
+	if (meetingForm.endTime && getTimeInMinutes(meetingForm.endTime) <= getTimeInMinutes(meetingForm.startTime)) {
+		meetingForm.endTime = ''
+	}
+	if (meetingForm.endTime) {
+		meetingFormRef.value?.validateField('endTime')
+	}
+	
 })
 
 // 绂佺敤鏃ユ湡锛堢鐢ㄤ粖澶╀箣鍓嶇殑鏃ユ湡锛�
 const disabledDate = (time) => {
-  // 绂佺敤浠婂ぉ涔嬪墠鐨勬棩鏈�
-  return time.getTime() < Date.now() - 86400000
+	// 绂佺敤浠婂ぉ涔嬪墠鐨勬棩鏈�
+	return time.getTime() < Date.now() - 86400000
 }
 
 // 鍒囨崲鐢宠绫诲瀷
 const changeType = (type) => {
-  currentType.value = type
+	currentType.value = type
 }
 
 // 鑾峰彇褰撳墠绫诲瀷鍚嶇О
 const getCurrentTypeName = () => {
-  const type = applicationTypes.value.find(t => t.value === currentType.value)
-  return type ? type.name : ''
+	const type = applicationTypes.value.find(t => t.value === currentType.value)
+	return type ? type.name : ''
 }
 
 // 閲嶇疆琛ㄥ崟
 const resetForm = () => {
-  meetingFormRef.value?.resetFields()
+	meetingFormRef.value?.resetFields()
 }
 
 // 鎻愪氦琛ㄥ崟
 const submitForm = () => {
-  meetingFormRef.value?.validate((valid) => {
-    if (valid) {
-
-      let formData = {...meetingForm}
-      formData.applicationType = currentType.value
-      formData.startTime = `${meetingForm.meetingDate} ${meetingForm.startTime}:00`
-      formData.endTime = `${meetingForm.meetingDate} ${meetingForm.endTime}:00`
-      formData.participants = JSON.stringify(formData.participants)
-      console.log(formData)
-      saveMeetingApplication(formData).then(() => {
-
-        // 妯℃嫙鎻愪氦鎿嶄綔
-        ElMessage.success(`${getCurrentTypeName()}鎻愪氦鎴愬姛`)
-
-        // 鏍规嵁涓嶅悓绫诲瀷鎵ц涓嶅悓鎿嶄綔
-        switch (currentType.value) {
-          case 'approval':
-            ElMessage.info('浼氳宸叉彁浜ゅ鎵规祦绋�')
-            break
-          case 'department':
-            ElMessage.info('閮ㄩ棬绾т細璁敵璇峰凡鎻愪氦')
-            break
-          case 'notification':
-            ElMessage.info('浼氳閫氱煡宸插彂甯�')
-            break
-        }
-        resetForm()
-      })
-
-    }
-  })
+	meetingFormRef.value?.validate((valid) => {
+		if (valid) {
+			
+			let formData = {...meetingForm}
+			formData.applicationType = currentType.value
+			formData.startTime = `${meetingForm.meetingDate} ${meetingForm.startTime}:00`
+			formData.endTime = `${meetingForm.meetingDate} ${meetingForm.endTime}:00`
+			formData.participants = JSON.stringify(formData.participants)
+			console.log(formData)
+			saveMeetingApplication(formData).then(() => {
+				
+				// 妯℃嫙鎻愪氦鎿嶄綔
+				ElMessage.success(`${getCurrentTypeName()}鎻愪氦鎴愬姛`)
+				resetForm()
+			})
+			
+		}
+	})
 }
 
 // 椤甸潰鍔犺浇鏃跺垵濮嬪寲
 onMounted(() => {
-  initTimeOptions()
-  getRoomEnum().then(res => {
-    meetingRooms.value = res.data
-  })
-  staffOnJobListPage({
-    current: -1,
-    size: -1,
-    staffState: 1
-  }).then(res => {
-    employees.value = res.data.records.sort((a, b) => (a.postName || '').localeCompare(b.postName || ''))
-  })
+	getRoomEnum().then(res => {
+		meetingRooms.value = res.data
+	})
+	staffOnJobListPage({
+		current: -1,
+		size: -1,
+		staffState: 1
+	}).then(res => {
+		employees.value = res.data.records.sort((a, b) => (a.postName || '').localeCompare(b.postName || ''))
+	})
 })
 </script>
 
 <style scoped>
 .app-container {
-  padding: 20px;
+	padding: 20px;
 }
 
 .page-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	margin-bottom: 20px;
 }
 
 .page-header h2 {
-  margin: 0;
-  color: #303133;
+	margin: 0;
+	color: #303133;
 }
 
 .type-card {
-  margin-bottom: 20px;
+	margin-bottom: 20px;
 }
 
 .type-selector {
-  display: flex;
-  gap: 20px;
+	display: flex;
+	gap: 20px;
 }
 
 .type-item {
-  flex: 1;
-  display: flex;
-  align-items: center;
-  padding: 20px;
-  border: 1px solid #ebeef5;
-  border-radius: 8px;
-  cursor: pointer;
-  transition: all 0.3s;
+	flex: 1;
+	display: flex;
+	align-items: center;
+	padding: 20px;
+	border: 1px solid #ebeef5;
+	border-radius: 8px;
+	cursor: pointer;
+	transition: all 0.3s;
 }
 
 .type-item:hover {
-  border-color: #409eff;
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+	border-color: #409eff;
+	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 }
 
 .type-item.active {
-  border-color: #409eff;
-  background-color: #ecf5ff;
+	border-color: #409eff;
+	background-color: #ecf5ff;
 }
 
 .type-icon {
-  margin-right: 15px;
-  color: #409eff;
+	margin-right: 15px;
+	color: #409eff;
 }
 
 .type-name {
-  font-size: 16px;
-  font-weight: 500;
-  color: #303133;
-  margin-bottom: 5px;
+	font-size: 16px;
+	font-weight: 500;
+	color: #303133;
+	margin-bottom: 5px;
 }
 
 .type-desc {
-  font-size: 14px;
-  color: #909399;
+	font-size: 14px;
+	color: #909399;
 }
 
 .form-header {
-  margin-bottom: 20px;
-  padding-bottom: 15px;
-  border-bottom: 1px solid #ebeef5;
+	margin-bottom: 20px;
+	padding-bottom: 15px;
+	border-bottom: 1px solid #ebeef5;
 }
 
 .form-header h3 {
-  margin: 0;
-  color: #303133;
+	margin: 0;
+	color: #303133;
 }
 
 .form-footer {
-  display: flex;
-  justify-content: flex-end;
-  gap: 10px;
-  margin-top: 30px;
-  padding-top: 20px;
-  border-top: 1px solid #ebeef5;
+	display: flex;
+	justify-content: flex-end;
+	gap: 10px;
+	margin-top: 30px;
+	padding-top: 20px;
+	border-top: 1px solid #ebeef5;
 }
 </style>

--
Gitblit v1.9.3