作者 lixiang

会议管理修改

@@ -288,5 +288,13 @@ export default { @@ -288,5 +288,13 @@ export default {
288 attendee_id_R: '個人IDは空白にできない', 288 attendee_id_R: '個人IDは空白にできない',
289 meeting_id_R: '会議IDを空にすることはできません', 289 meeting_id_R: '会議IDを空にすることはできません',
290 290
  291 + },
  292 + tab: {
  293 + basic: '基本情報',
  294 + signup: '申し込み情報',
  295 + fee: '料金情報',
  296 + invitation: '会議の招待',
  297 + robot: 'ロボットインタフェース',
291 } 298 }
292 -}  
  299 +
  300 +}
@@ -3,15 +3,17 @@ @@ -3,15 +3,17 @@
3 <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> 3 <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4 <el-form-item :label="$t('meet.meeting_id')" prop="meetingId"> 4 <el-form-item :label="$t('meet.meeting_id')" prop="meetingId">
5 <el-input v-model="queryParams.meetingId" :placeholder="$t('meet.meeting_id_P')" clearable 5 <el-input v-model="queryParams.meetingId" :placeholder="$t('meet.meeting_id_P')" clearable
6 - @keyup.enter.native="handleQuery" maxlength="20" /> 6 + @keyup.enter.native="handleQuery" maxlength="20"/>
7 </el-form-item> 7 </el-form-item>
8 <el-form-item :label="$t('meet.meeting_name')" prop="meetingName"> 8 <el-form-item :label="$t('meet.meeting_name')" prop="meetingName">
9 <el-input v-model="queryParams.meetingName" :placeholder="$t('meet.meeting_name_P')" clearable 9 <el-input v-model="queryParams.meetingName" :placeholder="$t('meet.meeting_name_P')" clearable
10 - @keyup.enter.native="handleQuery" maxlength="50" /> 10 + @keyup.enter.native="handleQuery" maxlength="50"/>
11 </el-form-item> 11 </el-form-item>
12 <el-form-item> 12 <el-form-item>
13 - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('meet.query')  
14 - }}</el-button> 13 + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">{{
  14 + $t('meet.query')
  15 + }}
  16 + </el-button>
15 <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('meet.reset') }}</el-button> 17 <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('meet.reset') }}</el-button>
16 </el-form-item> 18 </el-form-item>
17 </el-form> 19 </el-form>
@@ -19,49 +21,57 @@ @@ -19,49 +21,57 @@
19 <el-row :gutter="10" class="mb8"> 21 <el-row :gutter="10" class="mb8">
20 <el-col :span="1.5"> 22 <el-col :span="1.5">
21 <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" 23 <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
22 - v-hasPermi="['xvisit:meeting:add']">{{ $t('meet.add') }}</el-button> 24 + v-hasPermi="['xvisit:meeting:add']">{{ $t('meet.add') }}
  25 + </el-button>
23 </el-col> 26 </el-col>
24 </el-row> 27 </el-row>
25 28
26 <el-table v-loading="loading" :data="meetingList" @selection-change="handleSelectionChange"> 29 <el-table v-loading="loading" :data="meetingList" @selection-change="handleSelectionChange">
27 - <el-table-column :label="$t('meet.meeting_id')" align="center" prop="meetingId" fixed="left" />  
28 - <el-table-column :label="$t('meet.meeting_name')" align="center" prop="meetingName" fixed="left" />  
29 - <el-table-column :label="$t('meet.meeting_stime')" align="center" prop="meetingStime" > 30 + <el-table-column :label="$t('meet.meeting_id')" align="center" prop="meetingId" fixed="left" width="100px"/>
  31 + <el-table-column :label="$t('meet.meeting_name')" align="center" prop="meetingName" fixed="left" width="100px"/>
  32 + <el-table-column :label="$t('meet.meeting_stime')" align="center" prop="meetingStime" width="100px">
30 <template slot-scope="scope"> 33 <template slot-scope="scope">
31 <span>{{ parseTime(scope.row.meetingStime, '{y}-{m}-{d}') }}</span> 34 <span>{{ parseTime(scope.row.meetingStime, '{y}-{m}-{d}') }}</span>
32 </template> 35 </template>
33 </el-table-column> 36 </el-table-column>
34 - <el-table-column :label="$t('meet.meeting_etime')" align="center" prop="meetingEtime" > 37 + <el-table-column :label="$t('meet.meeting_etime')" align="center" prop="meetingEtime" width="100px">
35 <template slot-scope="scope"> 38 <template slot-scope="scope">
36 <span>{{ parseTime(scope.row.meetingEtime, '{y}-{m}-{d}') }}</span> 39 <span>{{ parseTime(scope.row.meetingEtime, '{y}-{m}-{d}') }}</span>
37 </template> 40 </template>
38 </el-table-column> 41 </el-table-column>
39 - <el-table-column :label="$t('meet.meeting_place')" align="center" prop="meetingPlace" />  
40 - <el-table-column :label="$t('meet.meeting_leader')" align="center" prop="meetingLeader" />  
41 - <el-table-column :label="$t('meet.leader_telephone')" align="center" prop="leaderTelephone" />  
42 - <el-table-column :label="$t('meet.leader_email')" align="center" prop="leaderEmail" /> 42 + <el-table-column :label="$t('meet.meeting_place')" align="center" prop="meetingPlace" width="100px"/>
  43 + <el-table-column :label="$t('meet.meeting_leader')" align="center" prop="meetingLeader" width="100px"/>
  44 + <el-table-column :label="$t('meet.leader_telephone')" align="center" prop="leaderTelephone" width="120px"/>
  45 + <el-table-column :label="$t('meet.leader_email')" align="center" prop="leaderEmail" width="180px"/>
43 46
44 - <el-table-column :label="$t('meet.meeting_subject')" align="center" prop="meetingSubject" />  
45 47
46 - <el-table-column :label="$t('meet.meeting_charge')" align="center" prop="meetingCharge"> 48 + <el-table-column :label="$t('meet.meeting_subject')" align="center" width="100px">
  49 + <template #default="{ row }">
  50 + <span :title="row.meetingSubject || ''">
  51 + {{ row.meetingSubject | truncate }}
  52 + </span>
  53 + </template>
  54 + </el-table-column>
  55 +
  56 + <el-table-column :label="$t('meet.meeting_charge')" align="center" prop="meetingCharge" width="100px">
47 <template #default="scope"> 57 <template #default="scope">
48 <el-tag v-if="scope.row.meetingCharge == '0'">不要</el-tag> 58 <el-tag v-if="scope.row.meetingCharge == '0'">不要</el-tag>
49 <el-tag v-else-if="scope.row.meetingCharge == '1'">要</el-tag> 59 <el-tag v-else-if="scope.row.meetingCharge == '1'">要</el-tag>
50 </template> 60 </template>
51 </el-table-column> 61 </el-table-column>
52 - <el-table-column :label="$t('meet.meeting_charge_info')" align="center" prop="meetingChargeInfo" />  
53 - <el-table-column :label="$t('meet.meeting_charge_bank')" align="center" prop="meetingChargeBank" /> 62 + <el-table-column :label="$t('meet.meeting_charge_info')" align="center" prop="meetingChargeInfo" width="100px"/>
  63 + <el-table-column :label="$t('meet.meeting_charge_bank')" align="center" prop="meetingChargeBank" width="100px"/>
54 <el-table-column :label="$t('meet.qr_code_pic')" align="center" prop="qrCodePic" width="100"> 64 <el-table-column :label="$t('meet.qr_code_pic')" align="center" prop="qrCodePic" width="100">
55 <template slot-scope="scope"> 65 <template slot-scope="scope">
56 - <image-preview :src="scope.row.qrCodePic" :width="50" :height="50" /> 66 + <image-preview :src="scope.row.qrCodePic" :width="50" :height="50"/>
57 </template> 67 </template>
58 </el-table-column> 68 </el-table-column>
59 - <el-table-column :label="$t('meet.meeting_dues')" align="center" prop="meetingDues" /> 69 + <el-table-column :label="$t('meet.meeting_dues')" align="center" prop="meetingDues" width="100px"/>
60 70
61 <!-- <el-table-column :label="$t('meet.meeting_robot')" align="center" prop="meetingRobot" /> --> 71 <!-- <el-table-column :label="$t('meet.meeting_robot')" align="center" prop="meetingRobot" /> -->
62 - <el-table-column :label="$t('meet.meeting_print')" align="center" prop="meetingPrint" />  
63 - <el-table-column :label="$t('meet.meeting_reg_site')" align="center" prop="meetingRegSite" />  
64 - <el-table-column :label="$t('meet.meeting_info_flg')" align="center" prop="meetingInfoFlg"> 72 + <el-table-column :label="$t('meet.meeting_print')" align="center" prop="meetingPrint" width="100px"/>
  73 + <el-table-column :label="$t('meet.meeting_reg_site')" align="center" prop="meetingRegSite" width="100px"/>
  74 + <el-table-column :label="$t('meet.meeting_info_flg')" align="center" prop="meetingInfoFlg" width="100px">
65 75
66 <template #default="scope"> 76 <template #default="scope">
67 <el-tag v-if="scope.row.meetingInfoFlg == '0'">不可</el-tag> 77 <el-tag v-if="scope.row.meetingInfoFlg == '0'">不可</el-tag>
@@ -69,9 +79,9 @@ @@ -69,9 +79,9 @@
69 </template> 79 </template>
70 </el-table-column> 80 </el-table-column>
71 81
72 - <el-table-column :label="$t('meet.meeting_info_site')" align="center" prop="meetingInfoSite" /> 82 + <el-table-column :label="$t('meet.meeting_info_site')" align="center" prop="meetingInfoSite" width="100px"/>
73 <!-- <el-table-column :label="$t('meet.meeting_para')" align="center" prop="meetingPara" /> --> 83 <!-- <el-table-column :label="$t('meet.meeting_para')" align="center" prop="meetingPara" /> -->
74 - <el-table-column :label="$t('meet.meeting_check')" align="center" prop="meetingCheck"> 84 + <el-table-column :label="$t('meet.meeting_check')" align="center" prop="meetingCheck" width="100px">
75 85
76 <template #default="scope"> 86 <template #default="scope">
77 <el-tag v-if="scope.row.meetingCheck == '0'">顔</el-tag> 87 <el-tag v-if="scope.row.meetingCheck == '0'">顔</el-tag>
@@ -82,20 +92,42 @@ @@ -82,20 +92,42 @@
82 </template> 92 </template>
83 </el-table-column> 93 </el-table-column>
84 94
85 - <el-table-column :label="$t('meet.meeting_config')" align="center" prop="meetingConfig"> 95 + <el-table-column :label="$t('meet.meeting_config')" align="center" prop="meetingConfig" width="100px">
86 <template #default="scope"> 96 <template #default="scope">
87 - <!-- <el-tag v-if="scope.row.meetingConfig == '0'">0</el-tag>  
88 - <el-tag v-else-if="scope.row.meetingConfig == '1'">1</el-tag> -->  
89 - <div v-if="scope.row.meetingConfig"> <!-- 新增条件判断 -->  
90 - <el-tag v-for="item in formatConfig(scope.row.meetingConfig)" :key="item.value"> 97 + <div v-if="scope.row.meetingConfig" class="config-tags-wrapper">
  98 + <!-- 显示前3个配置项 -->
  99 + <el-tag
  100 + v-for="(item, index) in formatConfig(scope.row.meetingConfig).slice(0, 3)"
  101 + :key="item.value"
  102 + class="config-tag"
  103 + >
91 {{ item.text }} 104 {{ item.text }}
92 </el-tag> 105 </el-tag>
93 - </div>  
94 106
  107 + <!-- 超过3个时显示 +N,并在下方弹出全部配置 -->
  108 + <el-tag
  109 + v-if="formatConfig(scope.row.meetingConfig).length > 3"
  110 + class="more-tag"
  111 + >
  112 + <el-popover
  113 + placement="bottom"
  114 + trigger="hover"
  115 + popper-class="white-popover"
  116 + width="auto"
  117 + >
  118 + <template #reference>
  119 + <span>+{{ formatConfig(scope.row.meetingConfig).length - 3 }}</span>
  120 + </template>
  121 + <div class="all-configs">
  122 + {{ getAllConfigText(scope.row.meetingConfig) }}
  123 + </div>
  124 + </el-popover>
  125 + </el-tag>
  126 + </div>
95 </template> 127 </template>
96 </el-table-column> 128 </el-table-column>
97 129
98 - <el-table-column :label="$t('meet.meeting_logo_flg')" align="center" prop="meetingLogoFlg"> 130 + <el-table-column :label="$t('meet.meeting_logo_flg')" align="center" prop="meetingLogoFlg" width="100px">
99 131
100 <template #default="scope"> 132 <template #default="scope">
101 <el-tag v-if="scope.row.meetingLogoFlg == '0'">不要</el-tag> 133 <el-tag v-if="scope.row.meetingLogoFlg == '0'">不要</el-tag>
@@ -105,11 +137,11 @@ @@ -105,11 +137,11 @@
105 137
106 <el-table-column :label="$t('meet.meeting_logo')" align="center" prop="meetingLogo" width="100"> 138 <el-table-column :label="$t('meet.meeting_logo')" align="center" prop="meetingLogo" width="100">
107 <template slot-scope="scope"> 139 <template slot-scope="scope">
108 - <image-preview :src="scope.row.meetingLogo" :width="50" :height="50" /> 140 + <image-preview :src="scope.row.meetingLogo" :width="50" :height="50"/>
109 </template> 141 </template>
110 </el-table-column> 142 </el-table-column>
111 143
112 - <el-table-column :label="$t('meet.meeting_bg_flg')" align="center" prop="meetingBgFlg"> 144 + <el-table-column :label="$t('meet.meeting_bg_flg')" align="center" prop="meetingBgFlg" width="100px">
113 145
114 <template #default="scope"> 146 <template #default="scope">
115 <el-tag v-if="scope.row.meetingBgFlg == '0'">不要</el-tag> 147 <el-tag v-if="scope.row.meetingBgFlg == '0'">不要</el-tag>
@@ -120,11 +152,11 @@ @@ -120,11 +152,11 @@
120 152
121 <el-table-column :label="$t('meet.meeting_bg')" align="center" prop="meetingBg" width="100"> 153 <el-table-column :label="$t('meet.meeting_bg')" align="center" prop="meetingBg" width="100">
122 <template slot-scope="scope"> 154 <template slot-scope="scope">
123 - <image-preview :src="scope.row.meetingBg" :width="50" :height="50" /> 155 + <image-preview :src="scope.row.meetingBg" :width="50" :height="50"/>
124 </template> 156 </template>
125 </el-table-column> 157 </el-table-column>
126 158
127 - <el-table-column :label="$t('meet.meeting_way_flg')" align="center" prop="meetingWayFlg"> 159 + <el-table-column :label="$t('meet.meeting_way_flg')" align="center" prop="meetingWayFlg" width="100px">
128 <template #default="scope"> 160 <template #default="scope">
129 <el-tag v-if="scope.row.meetingWayFlg == '0'">不要</el-tag> 161 <el-tag v-if="scope.row.meetingWayFlg == '0'">不要</el-tag>
130 <el-tag v-else-if="scope.row.meetingWayFlg == '1'">要</el-tag> 162 <el-tag v-else-if="scope.row.meetingWayFlg == '1'">要</el-tag>
@@ -134,18 +166,18 @@ @@ -134,18 +166,18 @@
134 166
135 <el-table-column :label="$t('meet.meeting_way')" align="center" prop="meetingWay" width="100"> 167 <el-table-column :label="$t('meet.meeting_way')" align="center" prop="meetingWay" width="100">
136 <template slot-scope="scope"> 168 <template slot-scope="scope">
137 - <image-preview :src="scope.row.meetingWay" :width="50" :height="50" /> 169 + <image-preview :src="scope.row.meetingWay" :width="50" :height="50"/>
138 </template> 170 </template>
139 </el-table-column> 171 </el-table-column>
140 172
141 - <el-table-column :label="$t('meet.meeting_seat_flg')" align="center" prop="meetingSeatFlg"> 173 + <el-table-column :label="$t('meet.meeting_seat_flg')" align="center" prop="meetingSeatFlg" width="100px">
142 <template #default="scope"> 174 <template #default="scope">
143 <el-tag v-if="scope.row.meetingSeatFlg == '0'">不要</el-tag> 175 <el-tag v-if="scope.row.meetingSeatFlg == '0'">不要</el-tag>
144 <el-tag v-else-if="scope.row.meetingSeatFlg == '1'">要</el-tag> 176 <el-tag v-else-if="scope.row.meetingSeatFlg == '1'">要</el-tag>
145 </template> 177 </template>
146 </el-table-column> 178 </el-table-column>
147 179
148 - <el-table-column :label="$t('meet.meeting_chat_flg')" align="center" prop="meetingChatFlg"> 180 + <el-table-column :label="$t('meet.meeting_chat_flg')" align="center" prop="meetingChatFlg" width="100px">
149 <template #default="scope"> 181 <template #default="scope">
150 <el-tag v-if="scope.row.meetingChatFlg == '0'">不要</el-tag> 182 <el-tag v-if="scope.row.meetingChatFlg == '0'">不要</el-tag>
151 <el-tag v-else-if="scope.row.meetingChatFlg == '1'">要</el-tag> 183 <el-tag v-else-if="scope.row.meetingChatFlg == '1'">要</el-tag>
@@ -155,17 +187,32 @@ @@ -155,17 +187,32 @@
155 187
156 <el-table-column :label="$t('meet.meeting_chat')" align="center" prop="meetingChat" width="100"> 188 <el-table-column :label="$t('meet.meeting_chat')" align="center" prop="meetingChat" width="100">
157 <template slot-scope="scope"> 189 <template slot-scope="scope">
158 - <image-preview :src="scope.row.meetingWay" :width="50" :height="50" /> 190 + <image-preview :src="scope.row.meetingWay" :width="50" :height="50"/>
159 </template> 191 </template>
160 </el-table-column> 192 </el-table-column>
161 193
162 - <el-table-column :label="$t('meet.memo')" align="center" prop="memo" />  
163 - <el-table-column :label="$t('meet.act')" align="center" class-name="small-padding fixed-width" fixed="right"> 194 +<!-- <el-table-column :label="$t('meet.memo')" align="center" prop="memo" width="100px"/>-->
  195 +
  196 + <el-table-column :label="$t('meet.memo')" align="center" width="100px">
  197 + <template #default="{ row }">
  198 + <span :title="row.memo || ''">
  199 + {{ row.memo | truncate }}
  200 + </span>
  201 + </template>
  202 + </el-table-column>
  203 +
  204 +
  205 +
  206 +
  207 + <el-table-column :label="$t('meet.act')" align="center" class-name="small-padding fixed-width" fixed="right"
  208 + width="120px">
164 <template slot-scope="scope"> 209 <template slot-scope="scope">
165 <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" 210 <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
166 - v-hasPermi="['xvisit:meeting:edit']">{{ $t('meet.edit') }}</el-button> 211 + v-hasPermi="['xvisit:meeting:edit']">{{ $t('meet.edit') }}
  212 + </el-button>
167 <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" 213 <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
168 - v-hasPermi="['xvisit:meeting:remove']">{{ $t('meet.del') }}</el-button> 214 + v-hasPermi="['xvisit:meeting:remove']">{{ $t('meet.del') }}
  215 + </el-button>
169 216
170 <!-- <el-button size="mini" type="text" icon="el-icon-user" @click="handleAuthUser(scope.row)" 217 <!-- <el-button size="mini" type="text" icon="el-icon-user" @click="handleAuthUser(scope.row)"
171 v-hasPermi="['xvisit:meeting:edit']">{{ $t('meet.add2') }}</el-button> --> 218 v-hasPermi="['xvisit:meeting:edit']">{{ $t('meet.add2') }}</el-button> -->
@@ -174,178 +221,330 @@ @@ -174,178 +221,330 @@
174 </el-table> 221 </el-table>
175 222
176 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" 223 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
177 - @pagination="getList" /> 224 + @pagination="getList"/>
178 225
179 <!-- 添加或修改会议对话框 --> 226 <!-- 添加或修改会议对话框 -->
180 - <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>  
181 - <el-form ref="form" :model="form" :rules="rules" label-width="200px">  
182 - <el-form-item :label="$t('meet.meeting_id')" prop="meetingId">  
183 - <el-input v-model="form.meetingId" :placeholder="$t('meet.meeting_id_P')" :disabled="condition"  
184 - maxlength="20" />  
185 - </el-form-item>  
186 - <el-form-item :label="$t('meet.meeting_name')" prop="meetingName">  
187 - <el-input v-model="form.meetingName" :placeholder="$t('meet.meeting_name_P')" maxlength="50" />  
188 - </el-form-item>  
189 - <el-form-item :label="$t('meet.meeting_stime')" prop="meetingStime">  
190 - <el-date-picker v-model="form.meetingStime" type="date" :placeholder="$t('meet.meeting_stime_P')"  
191 - format="yyyy-MM-dd" :picker-options="pickerOptionsS" value-format="yyyy-MM-dd">  
192 - </el-date-picker>  
193 - </el-form-item>  
194 - <el-form-item :label="$t('meet.meeting_etime')" prop="meetingEtime">  
195 - <el-date-picker v-model="form.meetingEtime" type="date" :placeholder="$t('meet.meeting_etime_P')"  
196 - format="yyyy-MM-dd" :picker-options="pickerOptionsE" value-format="yyyy-MM-dd">  
197 - </el-date-picker>  
198 - </el-form-item>  
199 -  
200 - <el-form-item :label="$t('meet.meeting_leader')" prop="meetingLeader">  
201 - <el-input v-model="form.meetingLeader" :placeholder="$t('meet.meeting_leader_P')" maxlength="20" />  
202 - </el-form-item>  
203 - <el-form-item :label="$t('meet.leader_telephone')" prop="leaderTelephone">  
204 - <el-input v-model="form.leaderTelephone" :placeholder="$t('meet.leader_telephone_P')" maxlength="11" />  
205 - </el-form-item>  
206 - <el-form-item :label="$t('meet.leader_email')" prop="leaderEmail">  
207 - <el-input v-model="form.leaderEmail" :placeholder="$t('meet.leader_email_P')" maxlength="50" />  
208 - </el-form-item>  
209 -  
210 - <el-form-item :label="$t('meet.meeting_subject')" prop="meetingSubject">  
211 - <el-input v-model="form.meetingSubject" type="textarea" :placeholder="$t('meet.meeting_subject_P')" />  
212 - </el-form-item>  
213 -  
214 - <el-form-item :label="$t('meet.meeting_place')" prop="meetingPlace">  
215 - <el-input v-model="form.meetingPlace" :placeholder="$t('meet.meeting_place_P')" maxlength="100" />  
216 - </el-form-item>  
217 - <!-- <el-form-item :label="$t('meet.meeting_robot')" prop="meetingRobot">  
218 - <el-input v-model="form.meetingRobot" placeholder="$t('meet.meeting_robot_P')" />  
219 - </el-form-item> -->  
220 - <el-form-item :label="$t('meet.meeting_print')" prop="meetingPrint">  
221 - <el-input v-model="form.meetingPrint" :placeholder="$t('meet.meeting_print_P')" />  
222 - </el-form-item>  
223 -  
224 -  
225 - <el-form-item :label="$t('meet.meeting_charge')" prop="meetingCharge">  
226 - <!-- <el-input v-model="form.meetingCharge" :placeholder="$t('meet.meeting_charge_P')" /> -->  
227 - <el-select v-model="form.meetingCharge" clearable>  
228 - <el-option v-for="item in dataB" :key="item.value" :label="item.label" :value="item.value"></el-option>  
229 - </el-select>  
230 - </el-form-item>  
231 -  
232 -  
233 - <el-form-item :label="$t('meet.meeting_dues')" prop="meetingDues" v-if="form.meetingCharge === '1'">  
234 - <el-input v-model="form.meetingDues" :placeholder="$t('meet.meeting_dues_P')" maxlength="10" />  
235 - </el-form-item>  
236 -  
237 - <el-form-item :label="$t('meet.qr_code_pic')" prop="qrCodePic" v-if="form.meetingCharge === '1'">  
238 - <image-upload v-model="form.qrCodePic" />  
239 - </el-form-item>  
240 -  
241 -  
242 - <el-form-item :label="$t('meet.meeting_charge_info')" prop="meetingChargeInfo" v-if="form.meetingCharge === '1'">  
243 - <el-input v-model="form.meetingChargeInfo" :placeholder="$t('meet.meeting_charge_info_P')" />  
244 - </el-form-item>  
245 - <el-form-item :label="$t('meet.meeting_charge_bank')" prop="meetingChargeBank" v-if="form.meetingCharge === '1'">  
246 - <el-input v-model="form.meetingChargeBank" :placeholder="$t('meet.meeting_charge_bank_P')" />  
247 - </el-form-item>  
248 -  
249 -  
250 - <el-form-item :label="$t('meet.meeting_reg_site')" prop="meetingRegSite">  
251 - <el-input v-model="form.meetingRegSite" :placeholder="$t('meet.meeting_reg_site_P')" />  
252 - </el-form-item>  
253 - <el-form-item :label="$t('meet.meeting_info_flg')" prop="meetingInfoFlg">  
254 - <!-- <el-input v-model="form.meetingInfoFlg" :placeholder="$t('meet.meeting_info_flg_P')" /> -->  
255 -  
256 - <el-select v-model="form.meetingInfoFlg" clearable>  
257 - <el-option v-for="item in dataC" :key="item.value" :label="item.label" :value="item.value"></el-option>  
258 - </el-select>  
259 -  
260 -  
261 - </el-form-item>  
262 - <el-form-item :label="$t('meet.meeting_info_site')" prop="meetingInfoSite">  
263 - <el-input v-model="form.meetingInfoSite" :placeholder="$t('meet.meeting_info_site_P')" />  
264 - </el-form-item>  
265 - <!-- <el-form-item :label="$t('meet.meeting_para')" prop="meetingPara">  
266 - <el-input v-model="form.meetingPara" placeholder="$t('meet.meeting_para_P')" />  
267 - </el-form-item> -->  
268 - <el-form-item :label="$t('meet.meeting_check')" prop="meetingCheck">  
269 - <span slot="label">  
270 - <el-tooltip :content="$t('meet.meeting_check1')" placement="top">  
271 - <i class="el-icon-question"></i>  
272 - </el-tooltip>  
273 - {{ $t('meet.meeting_check') }}  
274 - </span>  
275 - <!-- <el-input v-model="form.meetingCheck" :placeholder="$t('meet.meeting_check_P')" /> -->  
276 -  
277 -  
278 - <el-select v-model="form.meetingCheck" clearable>  
279 - <el-option v-for="item in dataA" :key="item.value" :label="item.label" :value="item.value"></el-option>  
280 - </el-select>  
281 -  
282 -  
283 - </el-form-item>  
284 - <el-form-item :label="$t('meet.meeting_config')" prop="meetingConfig">  
285 -  
286 - <span slot="label">  
287 - <el-tooltip :content="$t('meet.meeting_config1')" placement="top">  
288 - <i class="el-icon-question"></i>  
289 - </el-tooltip>  
290 - {{ $t('meet.meeting_config') }}  
291 - </span>  
292 - <!-- <el-input v-model="form.meetingConfig" :placeholder="$t('meet.meeting_config_P')" /> -->  
293 -  
294 - <el-select v-model="form.meetingConfig" clearable multiple>  
295 - <el-option v-for="item in dataE" :key="item.value" :label="item.label" :value="item.value"></el-option>  
296 - </el-select>  
297 -  
298 - </el-form-item>  
299 - <el-form-item :label="$t('meet.meeting_logo_flg')" prop="meetingLogoFlg">  
300 - <!-- <el-input v-model="form.meetingLogoFlg" :placeholder="$t('meet.meeting_logo_flg_P')" /> -->  
301 -  
302 - <el-select v-model="form.meetingLogoFlg" clearable>  
303 - <el-option v-for="item in dataB" :key="item.value" :label="item.label" :value="item.value"></el-option>  
304 - </el-select>  
305 -  
306 - </el-form-item>  
307 - <el-form-item :label="$t('meet.meeting_logo')" prop="meetingLogo" v-if="form.meetingLogoFlg === '1'">  
308 - <image-upload v-model="form.meetingLogo" />  
309 - </el-form-item>  
310 - <el-form-item :label="$t('meet.meeting_bg_flg')" prop="meetingBgFlg">  
311 - <!-- <el-input v-model="form.meetingBgFlg" :placeholder="$t('meet.meeting_bg_flg_P')" /> -->  
312 - <el-select v-model="form.meetingBgFlg" clearable>  
313 - <el-option v-for="item in dataB" :key="item.value" :label="item.label" :value="item.value"></el-option>  
314 - </el-select>  
315 - </el-form-item>  
316 - <el-form-item :label="$t('meet.meeting_bg')" prop="meetingBg" v-if="form.meetingBgFlg === '1'">  
317 - <image-upload v-model="form.meetingBg" />  
318 - </el-form-item>  
319 - <el-form-item :label="$t('meet.meeting_way_flg')" prop="meetingWayFlg">  
320 - <!-- <el-input v-model="form.meetingWayFlg" :placeholder="$t('meet.meeting_way_flg_P')" /> -->  
321 - <el-select v-model="form.meetingWayFlg" clearable>  
322 - <el-option v-for="item in dataB" :key="item.value" :label="item.label" :value="item.value"></el-option>  
323 - </el-select>  
324 - </el-form-item>  
325 - <el-form-item :label="$t('meet.meeting_way')" prop="meetingWay" v-if="form.meetingWayFlg === '1'">  
326 - <image-upload v-model="form.meetingWay" />  
327 - </el-form-item>  
328 - <el-form-item :label="$t('meet.meeting_seat_flg')" prop="meetingSeatFlg">  
329 - <!-- <el-input v-model="form.meetingSeatFlg" :placeholder="$t('meet.meeting_seat_flg_P')" /> -->  
330 - <el-select v-model="form.meetingSeatFlg" clearable>  
331 - <el-option v-for="item in dataD" :key="item.value" :label="item.label" :value="item.value"></el-option>  
332 - </el-select>  
333 - </el-form-item>  
334 -  
335 - <el-form-item :label="$t('meet.meeting_chat_flg')" prop="meetingChatFlg">  
336 - <!-- <el-input v-model="form.meetingChatFlg" :placeholder="$t('meet.meeting_chat_flg')" /> -->  
337 - <el-select v-model="form.meetingChatFlg" clearable>  
338 - <el-option v-for="item in dataB" :key="item.value" :label="item.label" :value="item.value"></el-option>  
339 - </el-select>  
340 - </el-form-item>  
341 - <el-form-item :label="$t('meet.meeting_chat')" prop="meetingChat" v-if="form.meetingChatFlg === '1'">  
342 - <image-upload v-model="form.meetingChat" />  
343 - </el-form-item>  
344 -  
345 - <el-form-item :label="$t('meet.memo')" prop="memo">  
346 - <el-input v-model="form.memo" :placeholder="$t('meet.memo_P')" maxlength="200" />  
347 - </el-form-item> 227 +
  228 + <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body >
  229 + <div style=" max-height: 65vh;">
  230 +<!-- <el-row>-->
  231 +<!-- <el-col :xs="24" :sm="24" :md="12" :lg="12">-->
  232 +<!-- <el-form-item>-->
  233 +<!-- <el-checkbox v-model="open" @change="handleOpenChange">{{ $t('meet.meeting_invite') }}</el-checkbox>-->
  234 +<!-- </el-form-item>-->
  235 +<!-- </el-col>-->
  236 +<!-- </el-row>-->
  237 + <el-form ref="form" :model="form" :rules="rules" label-width="120px" class="responsive-form">
  238 + <el-tabs v-model="activeTab" type="card">
  239 + <!-- 基本信息标签页 -->
  240 + <el-tab-pane :label="$t('tab.basic')" name="basic">
  241 + <div style="overflow-y: auto; overflow-x: hidden; max-height: 60vh;">
  242 + <el-row :gutter="20">
  243 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  244 + <el-form-item :label="$t('meet.meeting_id')" prop="meetingId">
  245 + <el-input v-model="form.meetingId" :placeholder="$t('meet.meeting_id_P')" :disabled="condition"
  246 + maxlength="20"/>
  247 + </el-form-item>
  248 + </el-col>
  249 +
  250 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  251 + <el-form-item :label="$t('meet.meeting_name')" prop="meetingName">
  252 + <el-input v-model="form.meetingName" :placeholder="$t('meet.meeting_name_P')" maxlength="50"/>
  253 + </el-form-item>
  254 + </el-col>
  255 +
  256 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  257 + <el-form-item :label="$t('meet.meeting_stime')" prop="meetingStime">
  258 + <el-date-picker
  259 + v-model="form.meetingStime"
  260 + type="date"
  261 + :placeholder="$t('meet.meeting_stime_P')"
  262 + format="yyyy-MM-dd"
  263 + :picker-options="pickerOptionsS"
  264 + value-format="yyyy-MM-dd"
  265 + style="width: 100%"
  266 + />
  267 + </el-form-item>
  268 + </el-col>
  269 +
  270 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  271 + <el-form-item :label="$t('meet.meeting_etime')" prop="meetingEtime">
  272 + <el-date-picker
  273 + v-model="form.meetingEtime"
  274 + type="date"
  275 + :placeholder="$t('meet.meeting_etime_P')"
  276 + format="yyyy-MM-dd"
  277 + :picker-options="pickerOptionsE"
  278 + value-format="yyyy-MM-dd"
  279 + style="width: 100%"
  280 + />
  281 + </el-form-item>
  282 + </el-col>
  283 +
  284 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  285 + <el-form-item :label="$t('meet.leader_email')" prop="leaderEmail">
  286 + <el-input v-model="form.leaderEmail" :placeholder="$t('meet.leader_email_P')" maxlength="50"/>
  287 + </el-form-item>
  288 + </el-col>
  289 +
  290 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  291 + <el-form-item :label="$t('meet.meeting_place')" prop="meetingPlace">
  292 + <el-input v-model="form.meetingPlace" :placeholder="$t('meet.meeting_place_P')" maxlength="100"/>
  293 + </el-form-item>
  294 + </el-col>
  295 +
  296 +
  297 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  298 + <el-form-item :label="$t('meet.meeting_leader')" prop="meetingLeader">
  299 + <el-input v-model="form.meetingLeader" :placeholder="$t('meet.meeting_leader_P')" maxlength="20"/>
  300 + </el-form-item>
  301 + </el-col>
  302 +
  303 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  304 + <el-form-item :label="$t('meet.leader_telephone')" prop="leaderTelephone">
  305 + <el-input v-model="form.leaderTelephone" :placeholder="$t('meet.leader_telephone_P')" maxlength="11"/>
  306 + </el-form-item>
  307 + </el-col>
  308 +
  309 +
  310 +
  311 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  312 + <el-form-item :label="$t('meet.meeting_print')" prop="meeting_print">
  313 + <el-input v-model="form.meetingPrint" :placeholder="$t('meet.meeting_print')" maxlength="50"/>
  314 + </el-form-item>
  315 + </el-col>
  316 +
  317 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  318 + <el-form-item :label="$t('meet.meeting_seat_flg')" prop="meetingSeatFlg">
  319 + <el-select v-model="form.meetingSeatFlg" clearable style="width: 100%">
  320 + <el-option v-for="item in dataD" :key="item.value" :label="item.label"
  321 + :value="item.value"></el-option>
  322 + </el-select>
  323 + </el-form-item>
  324 + </el-col>
  325 +
  326 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  327 + <el-form-item :label="$t('meet.meeting_chat_flg')" prop="meetingChatFlg">
  328 + <el-select v-model="form.meetingChatFlg" clearable style="width: 100%">
  329 + <el-option v-for="item in dataB" :key="item.value" :label="item.label"
  330 + :value="item.value"></el-option>
  331 + </el-select>
  332 + </el-form-item>
  333 + </el-col>
  334 +
  335 + <el-col :xs="24" :sm="24" :md="24" :lg="24" v-if="form.meetingChatFlg === '1'">
  336 + <el-form-item :label="$t('meet.meeting_chat')" prop="meetingChat">
  337 + <image-upload v-model="form.meetingChat"/>
  338 + </el-form-item>
  339 + </el-col>
  340 +
  341 + <el-col :xs="24" :sm="24" :md="24" :lg="24">
  342 + <el-form-item :label="$t('meet.memo')" prop="memo">
  343 + <el-input v-model="form.memo" :placeholder="$t('meet.memo_P')" maxlength="200" type="textarea" style="height: 80px"/>
  344 + </el-form-item>
  345 + </el-col>
  346 + </el-row>
  347 + </div>
  348 + </el-tab-pane>
  349 + <!-- 报名信息标签页 -->
  350 + <el-tab-pane :label="$t('tab.signup')" name="signup">
  351 + <div style="overflow-y: auto; overflow-x: hidden; max-height: 60vh;">
  352 + <el-row :gutter="20">
  353 + <el-col :xs="24" :sm="24" :md="12" :lg="12">
  354 + <el-form-item :label="$t('meet.meeting_check')" prop="meetingCheck">
  355 + <span slot="label">
  356 + <el-tooltip :content="$t('meet.meeting_check1')" placement="top">
  357 + <i class="el-icon-question"></i>
  358 + </el-tooltip>
  359 + {{ $t('meet.meeting_check') }}
  360 + </span>
  361 + <el-select
  362 + v-model="form.meetingCheck"
  363 + clearable
  364 + style="width: 100%"
  365 + @change="handleMeetingCheckChange">
  366 + <el-option
  367 + v-for="item in dataA"
  368 + :key="item.value"
  369 + :label="item.label"
  370 + :value="item.value">
  371 + </el-option>
  372 + </el-select>
  373 + </el-form-item>
  374 + </el-col>
  375 + <el-col :xs="24" :sm="24" :md="24" :lg="24">
  376 + <el-form-item :label="$t('meet.meeting_config')" prop="meetingConfig">
  377 + <el-checkbox-group
  378 + v-model="meetingConfig"
  379 + class="checkbox-group-grid"
  380 + >
  381 + <el-row :gutter="20">
  382 + <el-col
  383 + v-for="item in dataE"
  384 + :key="item.value"
  385 + :xs="24" :sm="8" :md="8" :lg="8"
  386 + >
  387 + <div class="checkbox-item">
  388 + <el-checkbox
  389 + :label="item.value"
  390 + :disabled="isConfigDisabled(item.value)">
  391 + {{ item.label }}
  392 + </el-checkbox>
  393 + </div>
  394 + </el-col>
  395 + </el-row>
  396 + </el-checkbox-group>
  397 + </el-form-item>
  398 + </el-col>
  399 + </el-row>
  400 + </div>
  401 + </el-tab-pane>
  402 + <!-- 收费信息标签页 -->
  403 + <el-tab-pane :label="$t('tab.fee')" name="fee">
  404 + <div style="overflow-y: auto; overflow-x: hidden; max-height: 60vh;">
  405 + <el-row :gutter="20">
  406 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  407 + <el-form-item :label="$t('meet.meeting_charge')" prop="meetingCharge">
  408 + <el-select v-model="form.meetingCharge" clearable style="width: 100%">
  409 + <el-option v-for="item in dataB" :key="item.value" :label="item.label"
  410 + :value="item.value"></el-option>
  411 + </el-select>
  412 + </el-form-item>
  413 + </el-col>
  414 +
  415 + <template v-if="form.meetingCharge === '1'">
  416 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  417 + <el-form-item :label="$t('meet.meeting_dues')" prop="meetingDues">
  418 + <el-input v-model="form.meetingDues" :placeholder="$t('meet.meeting_dues_P')" maxlength="10"/>
  419 + </el-form-item>
  420 + </el-col>
  421 +
  422 + <el-col :xs="24" :sm="24" :md="24" :lg="24">
  423 + <el-form-item :label="$t('meet.qr_code_pic')" prop="qrCodePic">
  424 + <image-upload v-model="form.qrCodePic"/>
  425 + </el-form-item>
  426 + </el-col>
  427 +
  428 + <el-col :xs="24" :sm="24" :md="12" :lg="12">
  429 + <el-form-item :label="$t('meet.meeting_charge_info')" prop="meetingChargeInfo">
  430 + <el-input v-model="form.meetingChargeInfo" :placeholder="$t('meet.meeting_charge_info_P')"/>
  431 + </el-form-item>
  432 + </el-col>
  433 +
  434 + <el-col :xs="24" :sm="24" :md="12" :lg="12">
  435 + <el-form-item :label="$t('meet.meeting_charge_bank')" prop="meetingChargeBank">
  436 + <el-input v-model="form.meetingChargeBank" :placeholder="$t('meet.meeting_charge_bank_P')"/>
  437 + </el-form-item>
  438 + </el-col>
  439 + </template>
  440 + </el-row>
  441 + </div>
  442 + </el-tab-pane>
  443 + <!-- 会议邀请标签页 -->
  444 + <el-tab-pane :label="$t('tab.invitation')" name="invitation">
  445 + <div style="overflow-y: auto; overflow-x: hidden; max-height: 60vh;">
  446 + <el-row :gutter="20">
  447 +
  448 + <el-col :xs="24" :sm="24" :md="24" :lg="24">
  449 + <el-form-item :label="$t('meet.meeting_subject')" prop="meetingSubject">
  450 + <div v-if="open" ref="editor" class="quill-editor-container"></div>
  451 + </el-form-item>
  452 + </el-col>
  453 +
  454 +
  455 + <el-col :xs="24" :sm="12" :md="12" :lg="12" style="margin-top: 8%" v-if="isUpdate">
  456 + <el-form-item :label="$t('meet.meeting_info_site')" prop="meetingInfoSite">
  457 + <el-input
  458 + v-model="form.meetingInfoSite"
  459 + readonly>
  460 + <i
  461 + slot="suffix"
  462 + class="el-icon-document-copy copy-icon"
  463 + @click="handleCopy(form.meetingInfoSite, $t('meet.meeting_info_site'))">
  464 + </i>
  465 + </el-input>
  466 + </el-form-item>
  467 + </el-col>
  468 +
  469 + <el-col :xs="24" :sm="12" :md="12" :lg="12" style="margin-top: 8%" v-if="isUpdate">
  470 + <el-form-item :label="$t('meet.meeting_reg_site')" prop="meetingRegSite">
  471 + <el-input
  472 + v-model="form.meetingRegSite"
  473 + readonly>
  474 + <i
  475 + slot="suffix"
  476 + class="el-icon-document-copy copy-icon"
  477 + @click="handleCopy(form.meetingRegSite, $t('meet.meeting_reg_site'))">
  478 + </i>
  479 + </el-input>
  480 + </el-form-item>
  481 + </el-col>
  482 +
  483 + <el-col :xs="24" :sm="12" :md="12" :lg="12" :style="{ marginTop: isUpdate ? '0%' : '8%' }">
  484 + <el-form-item :label="$t('meet.meeting_info_flg')" prop="meetingInfoFlg">
  485 + <el-select v-model="form.meetingInfoFlg" clearable style="width: 100%">
  486 + <el-option v-for="item in dataC" :key="item.value" :label="item.label"
  487 + :value="item.value"></el-option>
  488 + </el-select>
  489 + </el-form-item>
  490 + </el-col>
  491 + </el-row>
  492 + </div>
  493 + </el-tab-pane>
  494 + <!-- 机器人界面标签页 -->
  495 + <el-tab-pane :label="$t('tab.robot')" name="robot">
  496 + <div style="overflow-y: auto; overflow-x: hidden; max-height: 60vh;">
  497 + <el-row :gutter="20">
  498 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  499 + <el-form-item :label="$t('meet.meeting_logo_flg')" prop="meetingLogoFlg">
  500 + <el-select v-model="form.meetingLogoFlg" clearable style="width: 100%">
  501 + <el-option v-for="item in dataB" :key="item.value" :label="item.label"
  502 + :value="item.value"></el-option>
  503 + </el-select>
  504 + </el-form-item>
  505 + </el-col>
  506 +
  507 + <el-col :xs="24" :sm="24" :md="24" :lg="24" v-if="form.meetingLogoFlg === '1'">
  508 + <el-form-item :label="$t('meet.meeting_logo')" prop="meetingLogo">
  509 + <image-upload v-model="form.meetingLogo"/>
  510 + </el-form-item>
  511 + </el-col>
  512 +
  513 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  514 + <el-form-item :label="$t('meet.meeting_bg_flg')" prop="meetingBgFlg">
  515 + <el-select v-model="form.meetingBgFlg" clearable style="width: 100%">
  516 + <el-option v-for="item in dataB" :key="item.value" :label="item.label"
  517 + :value="item.value"></el-option>
  518 + </el-select>
  519 + </el-form-item>
  520 + </el-col>
  521 +
  522 + <el-col :xs="24" :sm="24" :md="24" :lg="24" v-if="form.meetingBgFlg === '1'">
  523 + <el-form-item :label="$t('meet.meeting_bg')" prop="meetingBg">
  524 + <image-upload v-model="form.meetingBg"/>
  525 + </el-form-item>
  526 + </el-col>
  527 +
  528 + <el-col :xs="24" :sm="12" :md="12" :lg="12">
  529 + <el-form-item :label="$t('meet.meeting_way_flg')" prop="meetingWayFlg">
  530 + <el-select v-model="form.meetingWayFlg" clearable style="width: 100%">
  531 + <el-option v-for="item in dataB" :key="item.value" :label="item.label"
  532 + :value="item.value"></el-option>
  533 + </el-select>
  534 + </el-form-item>
  535 + </el-col>
  536 +
  537 + <el-col :xs="24" :sm="24" :md="24" :lg="24" v-if="form.meetingWayFlg === '1'">
  538 + <el-form-item :label="$t('meet.meeting_way')" prop="meetingWay">
  539 + <image-upload v-model="form.meetingWay"/>
  540 + </el-form-item>
  541 + </el-col>
  542 + </el-row>
  543 + </div>
  544 + </el-tab-pane>
  545 + </el-tabs>
348 </el-form> 546 </el-form>
  547 + </div>
349 <div slot="footer" class="dialog-footer"> 548 <div slot="footer" class="dialog-footer">
350 <el-button type="primary" @click="submitForm">{{ $t('meet.submit') }}</el-button> 549 <el-button type="primary" @click="submitForm">{{ $t('meet.submit') }}</el-button>
351 <el-button @click="cancel">{{ $t('meet.cancel') }}</el-button> 550 <el-button @click="cancel">{{ $t('meet.cancel') }}</el-button>
@@ -358,12 +557,12 @@ @@ -358,12 +557,12 @@
358 <el-table :data="visitList" @selection-change="handleSelectionChange2" height="260px"> 557 <el-table :data="visitList" @selection-change="handleSelectionChange2" height="260px">
359 <el-table-column type="selection" width="55"></el-table-column> 558 <el-table-column type="selection" width="55"></el-table-column>
360 <el-table-column :label="$t('visit.attendee_id')" align="center" prop="attendeeId" 559 <el-table-column :label="$t('visit.attendee_id')" align="center" prop="attendeeId"
361 - :show-overflow-tooltip="true" />  
362 - <el-table-column :label="$t('visit.name')" align="center" prop="name" :show-overflow-tooltip="true" /> 560 + :show-overflow-tooltip="true"/>
  561 + <el-table-column :label="$t('visit.name')" align="center" prop="name" :show-overflow-tooltip="true"/>
363 562
364 </el-table> 563 </el-table>
365 <pagination v-show="total2 > 0" :total="total2" :page.sync="queryParams2.pageNum" 564 <pagination v-show="total2 > 0" :total="total2" :page.sync="queryParams2.pageNum"
366 - :limit.sync="queryParams2.pageSize" @pagination="getList2" /> 565 + :limit.sync="queryParams2.pageSize" @pagination="getList2"/>
367 </el-row> 566 </el-row>
368 <div slot="footer" class="dialog-footer"> 567 <div slot="footer" class="dialog-footer">
369 <el-button type="primary" @click="handleSelectUser">{{ $t('meet.submit') }}</el-button> 568 <el-button type="primary" @click="handleSelectUser">{{ $t('meet.submit') }}</el-button>
@@ -374,6 +573,8 @@ @@ -374,6 +573,8 @@
374 </template> 573 </template>
375 574
376 <script> 575 <script>
  576 +import Quill from "quill";
  577 +import "quill/dist/quill.snow.css";
377 import { 578 import {
378 listMeeting, 579 listMeeting,
379 getMeeting, 580 getMeeting,
@@ -391,6 +592,9 @@ import { @@ -391,6 +592,9 @@ import {
391 } from "@/api/xvisit/meetingattendance"; 592 } from "@/api/xvisit/meetingattendance";
392 593
393 export default { 594 export default {
  595 + props: {
  596 + value: String // 接收父组件 v-model 传值
  597 + },
394 name: "Meeting", 598 name: "Meeting",
395 data() { 599 data() {
396 600
@@ -440,6 +644,9 @@ export default { @@ -440,6 +644,9 @@ export default {
440 }; 644 };
441 645
442 return { 646 return {
  647 + activeTab: 'basic',
  648 + isUpdate: false,
  649 + quill: null,
443 // 遮罩层 650 // 遮罩层
444 loading: true, 651 loading: true,
445 // 选中数组 652 // 选中数组
@@ -467,41 +674,55 @@ export default { @@ -467,41 +674,55 @@ export default {
467 meetingName: null, 674 meetingName: null,
468 }, 675 },
469 // 表单参数 676 // 表单参数
470 - form: {},  
471 - // 表单校验 677 + form: {
  678 + meetingConfig: []
  679 + },
  680 + meetingConfig: [],
472 rules: { 681 rules: {
473 meetingId: [{ 682 meetingId: [{
474 required: true, 683 required: true,
475 message: this.$t('meet.meeting_id_R'), 684 message: this.$t('meet.meeting_id_R'),
476 - trigger: "blur" 685 + trigger: "blur",
  686 + tab: 'basic' // 添加标签页标识
477 }], 687 }],
478 meetingName: [{ 688 meetingName: [{
479 required: true, 689 required: true,
480 message: this.$t('meet.meeting_name_R'), 690 message: this.$t('meet.meeting_name_R'),
481 - trigger: "blur" 691 + trigger: "blur",
  692 + tab: 'basic'
  693 + }],
  694 + meetingCheck: [{
  695 + required: true,
  696 + message: this.$t('meet.meeting_check'),
  697 + trigger: "blur",
  698 + tab: 'signup'
482 }], 699 }],
483 -  
484 leaderEmail: [{ 700 leaderEmail: [{
  701 + required: true,
485 type: "email", 702 type: "email",
486 message: this.$t('visit.email_R'), 703 message: this.$t('visit.email_R'),
487 - trigger: ["blur", "change"] 704 + trigger: ["blur", "change"],
  705 + tab: 'basic'
488 }], 706 }],
489 leaderTelephone: [{ 707 leaderTelephone: [{
490 pattern: /\d{11}$/, 708 pattern: /\d{11}$/,
491 message: this.$t('visit.phone_number_R'), 709 message: this.$t('visit.phone_number_R'),
492 - trigger: "blur" 710 + trigger: "blur",
  711 + tab: 'basic'
493 }], 712 }],
494 -  
495 meetingStime: [{ 713 meetingStime: [{
  714 + required: true,
496 validator: validateStartDatetime, 715 validator: validateStartDatetime,
497 - trigger: "change" 716 + trigger: "change",
  717 + tab: 'basic'
498 }], 718 }],
499 meetingEtime: [{ 719 meetingEtime: [{
  720 + required: true,
500 validator: validateEndDatetime, 721 validator: validateEndDatetime,
501 - trigger: "change" 722 + trigger: "change",
  723 + tab: 'basic'
502 }], 724 }],
503 }, 725 },
504 -  
505 pickerOptionsS: { 726 pickerOptionsS: {
506 disabledDate: (time) => { //设置禁用范围 727 disabledDate: (time) => { //设置禁用范围
507 if (this.form.meetingEtime) { 728 if (this.form.meetingEtime) {
@@ -686,7 +907,6 @@ export default { @@ -686,7 +907,6 @@ export default {
686 memo: null, 907 memo: null,
687 }, 908 },
688 total2: 0, 909 total2: 0,
689 -  
690 title2: "", 910 title2: "",
691 open2: false, 911 open2: false,
692 meetId: "", 912 meetId: "",
@@ -701,12 +921,146 @@ export default { @@ -701,12 +921,146 @@ export default {
701 this.getList(); 921 this.getList();
702 }, 922 },
703 923
704 - computed: {  
705 - 924 + computed: {},
  925 + filters: {
  926 + truncate(text, maxLength = 20) {
  927 + if (!text) return '';
  928 + return text.length > maxLength ? text.slice(0, maxLength) + '...' : text;
  929 + }
706 }, 930 },
707 -  
708 methods: { 931 methods: {
  932 + handleMeetingCheckChange(value) {
  933 + // 根据选择的验证方式自动设置必选配置项
  934 + // 顔认证(0):必须选中氏名(1)、Eメール(5)、会社名(6)、業種(8)、写真(15)
  935 + // 名前(1)/QRコード(3)/認証コード(4):必须选中氏名(1)、Eメール(5)、会社名(6)、業種(8)
  936 + // 携帯電話番号(2):必须选中氏名(1)、電話番号(4)、Eメール(5)、会社名(6)、業種(8)
  937 + if (value === '0') {
  938 + // 顔认证必须选中1,5,6,8,15
  939 + this.meetingConfig = [...new Set([
  940 + ...this.meetingConfig,
  941 + '1', '5', '6', '8', '15'
  942 + ])];
  943 + } else if (value === '1' || value === '3' || value === '4') {
  944 + // 名前/QRコード/認証コード必须选中1,5,6,8
  945 + this.meetingConfig = [...new Set([
  946 + ...this.meetingConfig,
  947 + '1', '5', '6', '8'
  948 + ])];
  949 + } else if (value === '2') {
  950 + // 携帯電話番号必须选中1,4,5,6,8
  951 + this.meetingConfig = [...new Set([
  952 + ...this.meetingConfig,
  953 + '1', '4', '5', '6', '8'
  954 + ])];
  955 + }
  956 + },
  957 +
  958 + isConfigDisabled(value) {
  959 + // 根据当前选择的验证方式判断哪些配置项是必选的且不可取消
  960 + const requiredConfigs = this.getRequiredConfigs();
  961 + return requiredConfigs.includes(value);
  962 + },
709 963
  964 + getRequiredConfigs() {
  965 + // 根据当前验证方式返回必选的配置项
  966 + if (!this.form.meetingCheck) return [];
  967 +
  968 + if (this.form.meetingCheck === '0') {
  969 + return ['1', '5', '6', '8', '15'];
  970 + } else if (this.form.meetingCheck === '1' ||
  971 + this.form.meetingCheck === '3' ||
  972 + this.form.meetingCheck === '4') {
  973 + return ['1', '5', '6', '8'];
  974 + } else if (this.form.meetingCheck === '2') {
  975 + return ['1', '4', '5', '6', '8'];
  976 + }
  977 + return [];
  978 + },
  979 + handleCopy(text, label) {
  980 + if (!text) {
  981 + this.$message.warning(this.$t('common.empty_content'));
  982 + return;
  983 + }
  984 + navigator.clipboard.writeText(text).then(() => {
  985 + this.$message.success(`${label} ${this.$t('common.copy_success')}`);
  986 + }).catch(err => {
  987 + console.error('复制失败:', err);
  988 + const textarea = document.createElement('textarea');
  989 + textarea.value = text;
  990 + document.body.appendChild(textarea);
  991 + textarea.select();
  992 + try {
  993 + document.execCommand('copy');
  994 + this.$message.success(`${label} ${this.$t('common.copy_success')}`);
  995 + } catch (e) {
  996 + this.$message.error(this.$t('common.copy_failed'));
  997 + }
  998 + document.body.removeChild(textarea);
  999 + });
  1000 + },
  1001 + initEditor() {
  1002 + this.$nextTick(() => {
  1003 + if (!this.$refs.editor) {
  1004 + console.error('Quill container not found');
  1005 + return;
  1006 + }
  1007 +
  1008 + // 清理旧编辑器(正确方式)
  1009 + if (this.quill) {
  1010 + this.quill.off('text-change');
  1011 + // 保留容器结构,只移除Quill添加的类
  1012 + this.$refs.editor.classList.remove('ql-container');
  1013 + this.$refs.editor.classList.remove('ql-snow');
  1014 + this.$refs.editor.innerHTML = ''; // 保留空容器
  1015 + this.quill = null;
  1016 + }
  1017 +
  1018 + // 重新创建容器结构
  1019 + const editorContainer = this.$refs.editor;
  1020 + editorContainer.innerHTML = `
  1021 + <div class="ql-container ql-snow" >
  1022 + <div class="ql-editor" ></div>
  1023 + </div>
  1024 + `;
  1025 +
  1026 + const toolbarOptions = [
  1027 + ['bold', 'italic', 'underline', 'strike'],
  1028 + ['blockquote', 'code-block'],
  1029 + [{'header': 1}, {'header': 2}],
  1030 + [{'list': 'ordered'}, {'list': 'bullet'}],
  1031 + [{'script': 'sub'}, {'script': 'super'}],
  1032 + [{'indent': '-1'}, {'indent': '+1'}],
  1033 + [{'direction': 'rtl'}],
  1034 + [{'color': []}, {'background': []}],
  1035 + [{'align': []}],
  1036 + ['clean']
  1037 + ];
  1038 +
  1039 + this.quill = new Quill(editorContainer.querySelector('.ql-container'), {
  1040 + modules: {
  1041 + // toolbar: editorContainer.querySelector('.ql-toolbar')
  1042 + toolbar: toolbarOptions
  1043 + },
  1044 + theme: 'snow',
  1045 + placeholder: this.$t('meet.meeting_subject_P') || '请输入会议主题'
  1046 + });
  1047 +
  1048 + // 设置初始内容
  1049 + if (this.form.meetingSubject) {
  1050 + this.quill.root.innerHTML = this.form.meetingSubject;
  1051 + }
  1052 +
  1053 + // 监听内容变化
  1054 + this.quill.on('text-change', () => {
  1055 + this.form.meetingSubject = this.quill.root.innerHTML;
  1056 + });
  1057 + });
  1058 +
  1059 + },
  1060 + getAllConfigText(config) {
  1061 + const configItems = this.formatConfig(config);
  1062 + return configItems.map(item => item.text).join(', ');
  1063 + },
710 formatConfig(configStr) { 1064 formatConfig(configStr) {
711 const configMap = { 1065 const configMap = {
712 1066
@@ -773,7 +1127,7 @@ export default { @@ -773,7 +1127,7 @@ export default {
773 }; 1127 };
774 1128
775 return configStr.split(',').map(num => { 1129 return configStr.split(',').map(num => {
776 - return configMap[Number(num)] || { value: num, text: `未知类型${num}` }; 1130 + return configMap[Number(num)] || {value: num, text: `未知类型${num}`};
777 }); 1131 });
778 }, 1132 },
779 1133
@@ -782,7 +1136,7 @@ export default { @@ -782,7 +1136,7 @@ export default {
782 getList() { 1136 getList() {
783 this.loading = true; 1137 this.loading = true;
784 listMeeting(this.queryParams).then(response => { 1138 listMeeting(this.queryParams).then(response => {
785 - console.log(response) 1139 + console.log("response", response);
786 this.meetingList = response.rows; 1140 this.meetingList = response.rows;
787 this.total = response.total; 1141 this.total = response.total;
788 this.loading = false; 1142 this.loading = false;
@@ -791,6 +1145,10 @@ export default { @@ -791,6 +1145,10 @@ export default {
791 1145
792 // 取消按钮 1146 // 取消按钮
793 cancel() { 1147 cancel() {
  1148 + if (this.quill) {
  1149 + this.quill.off('text-change');
  1150 + this.quill = null;
  1151 + }
794 this.open = false; 1152 this.open = false;
795 this.reset(); 1153 this.reset();
796 }, 1154 },
@@ -836,6 +1194,7 @@ export default { @@ -836,6 +1194,7 @@ export default {
836 meetingChatFlg: null, 1194 meetingChatFlg: null,
837 meetingChat: null 1195 meetingChat: null
838 }; 1196 };
  1197 + this.meetingConfig = []
839 this.resetForm("form"); 1198 this.resetForm("form");
840 }, 1199 },
841 1200
@@ -865,30 +1224,50 @@ export default { @@ -865,30 +1224,50 @@ export default {
865 /** 新增按钮操作 */ 1224 /** 新增按钮操作 */
866 handleAdd() { 1225 handleAdd() {
867 this.reset(); 1226 this.reset();
  1227 + this.isUpdate = false;
  1228 + this.activeTab = 'basic';
868 this.open = true; 1229 this.open = true;
869 this.title = this.$t('meet.add_title'); 1230 this.title = this.$t('meet.add_title');
870 this.sts = 0; 1231 this.sts = 0;
871 this.condition = false; 1232 this.condition = false;
  1233 + this.$nextTick(() => {
  1234 + this.initEditor();
  1235 + });
872 }, 1236 },
873 1237
874 /** 修改按钮操作 */ 1238 /** 修改按钮操作 */
875 handleUpdate(row) { 1239 handleUpdate(row) {
876 this.reset(); 1240 this.reset();
  1241 + this.isUpdate = true;
  1242 + this.activeTab = 'basic';
877 this.sts = 1; 1243 this.sts = 1;
878 this.condition = true; 1244 this.condition = true;
879 - const meetingId = row.meetingId || this.ids 1245 + const meetingId = row.meetingId || this.ids;
880 getMeeting(meetingId).then(response => { 1246 getMeeting(meetingId).then(response => {
881 this.form = response.data; 1247 this.form = response.data;
882 - this.form.meetingConfig = response.data.meetingConfig ? response.data.meetingConfig.split(',') : [] 1248 + this.meetingConfig = response.data.meetingConfig ? response.data.meetingConfig.split(',') : [];
883 this.open = true; 1249 this.open = true;
884 this.title = this.$t('meet.add_title'); 1250 this.title = this.$t('meet.add_title');
  1251 +
  1252 + this.$nextTick(() => {
  1253 + this.initEditor();
  1254 + });
885 }); 1255 });
886 }, 1256 },
887 1257
888 /** 提交按钮 */ 1258 /** 提交按钮 */
889 submitForm() { 1259 submitForm() {
890 - this.$refs["form"].validate(valid => { 1260 + this.$refs["form"].validate((valid,errorFields )=> {
891 if (valid) { 1261 if (valid) {
  1262 + if (this.quill) {
  1263 + this.form.meetingSubject = this.quill.root.innerHTML;
  1264 + }
  1265 + if (this.form.meetingSubject === '<p><br></p>') {
  1266 + this.form.meetingSubject = ''
  1267 + }
  1268 + this.form.meetingConfig = this.meetingConfig.join(",")
  1269 + this.form.meetingRegSite = 'http://invite.meeting.zgftlm.com/static/register.html?meetingId=' + this.form.meetingId + '&lang=zh'
  1270 + this.form.meetingInfoSite = 'http://invite.meeting.zgftlm.com/static/personnelList.html?meetingId=' + this.form.meetingId + '&lang=zh'
892 if (this.sts == 1 && this.form.meetingId != null) { 1271 if (this.sts == 1 && this.form.meetingId != null) {
893 1272
894 let originalTimeString1 = this.form.meetingStime; 1273 let originalTimeString1 = this.form.meetingStime;
@@ -922,7 +1301,7 @@ export default { @@ -922,7 +1301,7 @@ export default {
922 let modifiedTime2 = `${year2}-${month2}-${day2} ${hours2}:${minutes2}:${seconds2}`; 1301 let modifiedTime2 = `${year2}-${month2}-${day2} ${hours2}:${minutes2}:${seconds2}`;
923 1302
924 this.form.meetingEtime = modifiedTime2 1303 this.form.meetingEtime = modifiedTime2
925 - this.form.meetingConfig = this.form.meetingConfig.join(',') 1304 + // this.form.meetingConfig = this.form.meetingConfig.join(',')
926 1305
927 updateMeeting(this.form).then(response => { 1306 updateMeeting(this.form).then(response => {
928 this.$modal.msgSuccess(this.$t('meet.edit_msg')); 1307 this.$modal.msgSuccess(this.$t('meet.edit_msg'));
@@ -974,6 +1353,28 @@ export default { @@ -974,6 +1353,28 @@ export default {
974 } 1353 }
975 }); 1354 });
976 } 1355 }
  1356 + } else {
  1357 + // 验证失败,找到第一个错误字段对应的标签页
  1358 + if (errorFields) {
  1359 + const firstErrorField = Object.keys(errorFields)[0];
  1360 + console.log("this.rules[firstErrorField]",this.rules[firstErrorField])
  1361 + const firstErrorRule = this.rules[firstErrorField][0];
  1362 + if (firstErrorRule.tab) {
  1363 + this.activeTab = firstErrorRule.tab;
  1364 +
  1365 + // 滚动到错误字段
  1366 + this.$nextTick(() => {
  1367 + const errorElement = this.$refs.form.$el.querySelector('.is-error');
  1368 + if (errorElement) {
  1369 + errorElement.scrollIntoView({
  1370 + behavior: 'smooth',
  1371 + block: 'center'
  1372 + });
  1373 + }
  1374 + });
  1375 + }
  1376 + }
  1377 + return false;
977 } 1378 }
978 }); 1379 });
979 }, 1380 },
@@ -986,7 +1387,8 @@ export default { @@ -986,7 +1387,8 @@ export default {
986 }).then(() => { 1387 }).then(() => {
987 this.getList(); 1388 this.getList();
988 this.$modal.msgSuccess(this.$t('meet.del_msg')); 1389 this.$modal.msgSuccess(this.$t('meet.del_msg'));
989 - }).catch(() => { }); 1390 + }).catch(() => {
  1391 + });
990 }, 1392 },
991 1393
992 getList2() { 1394 getList2() {
@@ -1051,8 +1453,121 @@ export default { @@ -1051,8 +1453,121 @@ export default {
1051 this.open2 = false; 1453 this.open2 = false;
1052 } 1454 }
1053 }); 1455 });
1054 - } 1456 + },
  1457 +
1055 1458
  1459 + },
  1460 + mounted() {
  1461 + this.$nextTick(() => {
  1462 + this.initEditor(); // 确保 DOM 已渲染
  1463 + });
  1464 + },
  1465 + watch: {
  1466 + value(newVal) {
  1467 + if (this.quill && newVal !== this.quill.root.innerHTML) {
  1468 + this.quill.root.innerHTML = newVal
  1469 + }
  1470 + }
  1471 + },
  1472 + beforeDestroy() {
  1473 + if (this.quill) {
  1474 + this.quill.off('text-change')
  1475 + }
1056 } 1476 }
1057 }; 1477 };
1058 </script> 1478 </script>
  1479 +<style scoped>
  1480 +/* 容器样式 */
  1481 +.quill-editor-container {
  1482 + height: 300px;
  1483 +}
  1484 +
  1485 +/* 确保编辑器填充容器 */
  1486 +.quill-editor-container .ql-container {
  1487 + height: calc(100% - 42px); /* 减去工具栏高度 */
  1488 + border-bottom-left-radius: 4px;
  1489 + border-bottom-right-radius: 4px;
  1490 +}
  1491 +
  1492 +/* 工具栏样式 */
  1493 +.quill-editor-container .ql-toolbar {
  1494 + border-top-left-radius: 4px;
  1495 + border-top-right-radius: 4px;
  1496 + border: 1px solid #dcdfe6;
  1497 +}
  1498 +
  1499 +.quill-editor-container .ql-container {
  1500 + border: 1px solid #dcdfe6;
  1501 + border-top: none;
  1502 +}
  1503 +
  1504 +
  1505 +/* 确保每项等高对齐 */
  1506 +.checkbox-group-grid .el-row {
  1507 + display: flex;
  1508 + flex-wrap: wrap;
  1509 +}
  1510 +
  1511 +.checkbox-group-grid .el-col {
  1512 + display: flex;
  1513 +}
  1514 +
  1515 +.checkbox-item {
  1516 + width: 100%;
  1517 + padding: 8px;
  1518 + height: 100%;
  1519 + display: flex;
  1520 + align-items: center; /* 垂直居中 */
  1521 +}
  1522 +
  1523 +/* 修复Element UI复选框的默认边距 */
  1524 +.checkbox-item .el-checkbox {
  1525 + margin: 0;
  1526 + width: 100%;
  1527 +}
  1528 +
  1529 +/* 确保标签文字不换行 */
  1530 +.checkbox-item .el-checkbox__label {
  1531 + white-space: nowrap;
  1532 + overflow: hidden;
  1533 + text-overflow: ellipsis;
  1534 +}
  1535 +
  1536 +
  1537 +/* 白色背景的弹出框 */
  1538 +.white-popover {
  1539 + background: white !important;
  1540 + color: #333 !important;
  1541 + border: 1px solid #dcdfe6 !important;
  1542 + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !important;
  1543 +}
  1544 +
  1545 +/* 弹出框内容样式 */
  1546 +.all-configs {
  1547 + padding: 4px 6px;
  1548 + line-height: 1;
  1549 +}
  1550 +
  1551 +/* 标签容器 */
  1552 +.config-tags-wrapper {
  1553 + display: flex;
  1554 + flex-wrap: wrap;
  1555 + gap: 4px;
  1556 +}
  1557 +
  1558 +/* 普通标签样式 */
  1559 +.config-tag {
  1560 + margin-right: 4px;
  1561 +}
  1562 +
  1563 +/* +N 标签样式 */
  1564 +.more-tag {
  1565 + cursor: pointer;
  1566 + background-color: #f4f4f5;
  1567 + color: #909399;
  1568 +}
  1569 +.ql-toolbar.ql-snow {
  1570 + padding: 2px 4px !important;
  1571 + height: 16px !important;
  1572 +}
  1573 +</style>