|
@@ -184,7 +184,7 @@
|
|
/>
|
|
/>
|
|
|
|
|
|
<!-- 添加或修改会议列表对话框 -->
|
|
<!-- 添加或修改会议列表对话框 -->
|
|
- <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
|
|
|
|
|
+ <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="left">
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="left">
|
|
<el-form-item label="会议类型" prop="meetingType">
|
|
<el-form-item label="会议类型" prop="meetingType">
|
|
<el-select v-model="form.meetingType" placeholder="请选择会议类型">
|
|
<el-select v-model="form.meetingType" placeholder="请选择会议类型">
|
|
@@ -209,24 +209,30 @@
|
|
<el-form-item label="会议名称" prop="meetingName">
|
|
<el-form-item label="会议名称" prop="meetingName">
|
|
<el-input v-model="form.meetingName" placeholder="请输入会议名称" />
|
|
<el-input v-model="form.meetingName" placeholder="请输入会议名称" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="会议开始时间" prop="startTime">
|
|
|
|
- <el-date-picker clearable
|
|
|
|
- v-model="form.startTime"
|
|
|
|
- type="datetime"
|
|
|
|
- value-format="yyyy-MM-dd HH:mm"
|
|
|
|
- format="yyyy-MM-dd HH:mm"
|
|
|
|
- placeholder="请选择会议开始时间">
|
|
|
|
- </el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="会议结束时间" prop="endTime">
|
|
|
|
- <el-date-picker clearable
|
|
|
|
- v-model="form.endTime"
|
|
|
|
- type="datetime"
|
|
|
|
- value-format="yyyy-MM-dd HH:mm"
|
|
|
|
- format="yyyy-MM-dd HH:mm"
|
|
|
|
- placeholder="请选择会议结束时间">
|
|
|
|
- </el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
+ <el-row :gutter="20">
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="会议开始时间" prop="startTime">
|
|
|
|
+ <el-date-picker clearable
|
|
|
|
+ v-model="form.startTime"
|
|
|
|
+ type="datetime"
|
|
|
|
+ value-format="yyyy-MM-dd HH:mm"
|
|
|
|
+ format="yyyy-MM-dd HH:mm"
|
|
|
|
+ placeholder="请选择会议开始时间">
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="会议结束时间" prop="endTime">
|
|
|
|
+ <el-date-picker clearable
|
|
|
|
+ v-model="form.endTime"
|
|
|
|
+ type="datetime"
|
|
|
|
+ value-format="yyyy-MM-dd HH:mm"
|
|
|
|
+ format="yyyy-MM-dd HH:mm"
|
|
|
|
+ placeholder="请选择会议结束时间">
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
<el-form-item label="会议室" prop="roomId">
|
|
<el-form-item label="会议室" prop="roomId">
|
|
<el-input v-model="form.roomId" placeholder="请输入会议室" />
|
|
<el-input v-model="form.roomId" placeholder="请输入会议室" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -245,7 +251,7 @@
|
|
<div v-for="(item, index) in form.members" :key="index" class="attendee-item">
|
|
<div v-for="(item, index) in form.members" :key="index" class="attendee-item">
|
|
<!-- 角色选择(字典) -->
|
|
<!-- 角色选择(字典) -->
|
|
<el-select
|
|
<el-select
|
|
- v-model="item.role"
|
|
|
|
|
|
+ v-model="item.membersRole"
|
|
placeholder="请选择角色"
|
|
placeholder="请选择角色"
|
|
style="width: 120px; margin-right: 10px;"
|
|
style="width: 120px; margin-right: 10px;"
|
|
clearable
|
|
clearable
|
|
@@ -260,10 +266,10 @@
|
|
|
|
|
|
<!-- 用户选择(树形多选) -->
|
|
<!-- 用户选择(树形多选) -->
|
|
<treeselect
|
|
<treeselect
|
|
- v-model="item.userIds"
|
|
|
|
|
|
+ v-model="item.membersName"
|
|
:options="deptOptions"
|
|
:options="deptOptions"
|
|
:normalizer="normalizer"
|
|
:normalizer="normalizer"
|
|
- :multiple="true"
|
|
|
|
|
|
+ :multiple="false"
|
|
:disable-branch-nodes="true"
|
|
:disable-branch-nodes="true"
|
|
placeholder="请选择员工"
|
|
placeholder="请选择员工"
|
|
style="width: 300px; margin-right: 10px;"
|
|
style="width: 300px; margin-right: 10px;"
|
|
@@ -286,28 +292,33 @@
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="会议签到" prop="meetingCheck">
|
|
|
|
- <el-radio-group v-model="form.meetingCheck">
|
|
|
|
- <el-radio label="1">是</el-radio>
|
|
|
|
- <el-radio label="0">否</el-radio>
|
|
|
|
- </el-radio-group>
|
|
|
|
- </el-form-item>
|
|
|
|
-
|
|
|
|
|
|
+ <el-row :gutter="20">
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="会议签到" prop="meetingCheck">
|
|
|
|
+ <el-radio-group v-model="form.meetingCheck">
|
|
|
|
+ <el-radio label="1">是</el-radio>
|
|
|
|
+ <el-radio label="0">否</el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="会议通知" prop="meetingNotice">
|
|
|
|
+ <el-switch
|
|
|
|
+ v-model="form.meetingNotice"
|
|
|
|
+ active-value="1"
|
|
|
|
+ inactive-value="0"
|
|
|
|
+ active-text="启用"
|
|
|
|
+ inactive-text="禁用"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
<el-form-item label="签到模式" prop="checkmode" v-if="form.meetingCheck === '1'">
|
|
<el-form-item label="签到模式" prop="checkmode" v-if="form.meetingCheck === '1'">
|
|
<el-radio-group v-model="form.checkmode">
|
|
<el-radio-group v-model="form.checkmode">
|
|
<el-radio label="0">点击签到</el-radio>
|
|
<el-radio label="0">点击签到</el-radio>
|
|
<el-radio label="1">手写签到</el-radio>
|
|
<el-radio label="1">手写签到</el-radio>
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="会议通知" prop="meetingNotice">
|
|
|
|
- <el-switch
|
|
|
|
- v-model="form.meetingNotice"
|
|
|
|
- active-value="1"
|
|
|
|
- inactive-value="0"
|
|
|
|
- active-text="启用"
|
|
|
|
- inactive-text="禁用"
|
|
|
|
- />
|
|
|
|
- </el-form-item>
|
|
|
|
<el-form-item label="通知内容" prop="noticeText">
|
|
<el-form-item label="通知内容" prop="noticeText">
|
|
<el-input v-model="form.noticeText" placeholder="请输入会议签到" />
|
|
<el-input v-model="form.noticeText" placeholder="请输入会议签到" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -318,7 +329,7 @@
|
|
<el-cascader
|
|
<el-cascader
|
|
v-model="form.checkOrganization"
|
|
v-model="form.checkOrganization"
|
|
:options="userTreeOptions"
|
|
:options="userTreeOptions"
|
|
- :props="{ multiple: true,
|
|
|
|
|
|
+ :props="{ multiple: false,
|
|
checkStrictly: true }"
|
|
checkStrictly: true }"
|
|
placeholder="请选择承办组织"
|
|
placeholder="请选择承办组织"
|
|
style="width: 300px; margin-right: 10px;"
|
|
style="width: 300px; margin-right: 10px;"
|
|
@@ -409,7 +420,7 @@
|
|
|
|
|
|
<!-- 内容详情(展开后显示) -->
|
|
<!-- 内容详情(展开后显示) -->
|
|
<div v-show="topic.expanded" class="topic-details">
|
|
<div v-show="topic.expanded" class="topic-details">
|
|
- <p> <strong>议题密码:</strong>{{ topic.topicName || '无' }}</p>
|
|
|
|
|
|
+ <p> <strong>议题名称:</strong>{{ topic.topicName || '无' }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -445,6 +456,7 @@
|
|
style="width: 100%"
|
|
style="width: 100%"
|
|
@selection-change="handleTopicSelectionChange"
|
|
@selection-change="handleTopicSelectionChange"
|
|
border
|
|
border
|
|
|
|
+ :row-key="row => row.topicId"
|
|
>
|
|
>
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<el-table-column label="议题名称" prop="topicName" />
|
|
<el-table-column label="议题名称" prop="topicName" />
|
|
@@ -505,7 +517,7 @@
|
|
<div class="attendees-container">
|
|
<div class="attendees-container">
|
|
<div v-for="(item, index) in formTopic.members" :key="index" class="attendee-item">
|
|
<div v-for="(item, index) in formTopic.members" :key="index" class="attendee-item">
|
|
<el-select
|
|
<el-select
|
|
- v-model="item.role"
|
|
|
|
|
|
+ v-model="item.membersRole"
|
|
placeholder="请选择角色"
|
|
placeholder="请选择角色"
|
|
style="width: 120px; margin-right: 10px;"
|
|
style="width: 120px; margin-right: 10px;"
|
|
clearable
|
|
clearable
|
|
@@ -519,10 +531,10 @@
|
|
</el-select>
|
|
</el-select>
|
|
|
|
|
|
<treeselect
|
|
<treeselect
|
|
- v-model="item.userIds"
|
|
|
|
- :options="deptOptions"
|
|
|
|
|
|
+ v-model="item.membersName"
|
|
|
|
+ :options="deptOptionsli"
|
|
:normalizer="normalizer"
|
|
:normalizer="normalizer"
|
|
- :multiple="true"
|
|
|
|
|
|
+ :multiple="false"
|
|
:disable-branch-nodes="true"
|
|
:disable-branch-nodes="true"
|
|
placeholder="请选择员工"
|
|
placeholder="请选择员工"
|
|
style="width: 300px; margin-right: 10px;"
|
|
style="width: 300px; margin-right: 10px;"
|
|
@@ -577,6 +589,7 @@ export default {
|
|
meetingList: [],
|
|
meetingList: [],
|
|
userTreeOptions: [], // 用户树形数据,需从接口获取
|
|
userTreeOptions: [], // 用户树形数据,需从接口获取
|
|
deptOptions: [],
|
|
deptOptions: [],
|
|
|
|
+ deptOptionsli:[],
|
|
fileList: [],
|
|
fileList: [],
|
|
topicDialogVisible: false,
|
|
topicDialogVisible: false,
|
|
topicManageVisible: false,
|
|
topicManageVisible: false,
|
|
@@ -596,7 +609,9 @@ export default {
|
|
topicText: '',
|
|
topicText: '',
|
|
filePath: '',
|
|
filePath: '',
|
|
fileName: '',
|
|
fileName: '',
|
|
- members: []
|
|
|
|
|
|
+ members: [],
|
|
|
|
+ topicState:'1',
|
|
|
|
+ membersId: null
|
|
},
|
|
},
|
|
topicList: [],
|
|
topicList: [],
|
|
topic:null,
|
|
topic:null,
|
|
@@ -622,7 +637,7 @@ export default {
|
|
form: {
|
|
form: {
|
|
meetingId: null,
|
|
meetingId: null,
|
|
meetingType: null,
|
|
meetingType: null,
|
|
- meetingState: null,
|
|
|
|
|
|
+ meetingState: 2,
|
|
meetingName: null,
|
|
meetingName: null,
|
|
startTime: null,
|
|
startTime: null,
|
|
endTime: null,
|
|
endTime: null,
|
|
@@ -638,7 +653,7 @@ export default {
|
|
checkOrganization: null,
|
|
checkOrganization: null,
|
|
selectText: null,
|
|
selectText: null,
|
|
meetingTime: this.getCurrentDateTime(),
|
|
meetingTime: this.getCurrentDateTime(),
|
|
- delFlag: null,
|
|
|
|
|
|
+ delFlag: 0,
|
|
remark: null,
|
|
remark: null,
|
|
topicId: null,
|
|
topicId: null,
|
|
topicList: []
|
|
topicList: []
|
|
@@ -696,7 +711,7 @@ export default {
|
|
methods: {
|
|
methods: {
|
|
// 添加议题与会人员
|
|
// 添加议题与会人员
|
|
addTopicMember() {
|
|
addTopicMember() {
|
|
- this.formTopic.members.push({ role: null, userIds: [] });
|
|
|
|
|
|
+ this.formTopic.members.push({ membersRole: null, membersName: null });
|
|
},
|
|
},
|
|
|
|
|
|
// 删除议题与会人员
|
|
// 删除议题与会人员
|
|
@@ -728,7 +743,7 @@ export default {
|
|
|
|
|
|
// 预览文件
|
|
// 预览文件
|
|
previewFile(topic) {
|
|
previewFile(topic) {
|
|
- const url = `/meeting/library/download/${topic.filePath}`;
|
|
|
|
|
|
+ const url = `/library/download/${topic.filePath}`;
|
|
window.open(url, '_blank');
|
|
window.open(url, '_blank');
|
|
},
|
|
},
|
|
|
|
|
|
@@ -754,9 +769,9 @@ export default {
|
|
|
|
|
|
// 多选处理
|
|
// 多选处理
|
|
handleTopicSelectionChange(selection) {
|
|
handleTopicSelectionChange(selection) {
|
|
- this.selectedTopics = selection;
|
|
|
|
- this.topicMultiple = !selection.length;
|
|
|
|
- this.topicSingle = selection.length !== 1;
|
|
|
|
|
|
+ this.selectedTopics = selection || []; // 防止 null
|
|
|
|
+ this.topicMultiple = this.selectedTopics.length === 0;
|
|
|
|
+ this.topicSingle = this.selectedTopics.length !== 1;
|
|
},
|
|
},
|
|
|
|
|
|
// 新增议题
|
|
// 新增议题
|
|
@@ -841,7 +856,8 @@ export default {
|
|
topicText: item.topicText,
|
|
topicText: item.topicText,
|
|
filePath: item.filePath,
|
|
filePath: item.filePath,
|
|
fileName: item.fileName,
|
|
fileName: item.fileName,
|
|
- members: item.members || []
|
|
|
|
|
|
+ members: item.members || [],
|
|
|
|
+ topicState: item.topicState
|
|
}));
|
|
}));
|
|
// 添加到本地 topicList
|
|
// 添加到本地 topicList
|
|
this.form.topicList.push(...selected);
|
|
this.form.topicList.push(...selected);
|
|
@@ -858,7 +874,8 @@ export default {
|
|
topicText: '',
|
|
topicText: '',
|
|
filePath: '',
|
|
filePath: '',
|
|
fileName: '',
|
|
fileName: '',
|
|
- members: [{ role: null, userIds: [] }] // 默认一条
|
|
|
|
|
|
+ members: [{ membersRole: null, membersName: null }] ,// 默认一条
|
|
|
|
+ topicState: '1'
|
|
};
|
|
};
|
|
this.topicModalTitle = title;
|
|
this.topicModalTitle = title;
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
@@ -895,25 +912,34 @@ export default {
|
|
this.handleTopicSearch();
|
|
this.handleTopicSearch();
|
|
},
|
|
},
|
|
|
|
|
|
- // 处理选中变化
|
|
|
|
- handleTopicSelectionChange(selection) {
|
|
|
|
- this.selectedTopics = selection;
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
// 确认选择议题
|
|
// 确认选择议题
|
|
- confirmTopicSelect() {
|
|
|
|
- if (this.selectedTopics.length === 0) {
|
|
|
|
|
|
+ async confirmTopicSelect() {
|
|
|
|
+ if (!this.selectedTopics || this.selectedTopics.length === 0) {
|
|
this.$message.warning('请至少选择一个议题');
|
|
this.$message.warning('请至少选择一个议题');
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- // 将选中的议题 ID 添加到 form.topicId
|
|
|
|
- const topicIds = this.selectedTopics.map(item => item.topicId);
|
|
|
|
- this.form.topicId = topicIds.join(',');
|
|
|
|
- console.log(this.form.topicId);
|
|
|
|
|
|
+ if (this.selectedTopics.length > 1) {
|
|
|
|
+ this.$message.warning('暂不支持多选,请选择单个议题');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- this.topicDialogVisible = false;
|
|
|
|
- this.$message.success('已成功添加议题');
|
|
|
|
|
|
+ try {
|
|
|
|
+ const topics = await Promise.all(
|
|
|
|
+ this.selectedTopics.map(item =>
|
|
|
|
+ getLibrary(item.topicId).then(res => ({
|
|
|
|
+ ...res.data,
|
|
|
|
+ expanded: false
|
|
|
|
+ }))
|
|
|
|
+ )
|
|
|
|
+ );
|
|
|
|
+ this.form.topicList.push(...topics);
|
|
|
|
+ this.topicDialogVisible = false;
|
|
|
|
+ this.$message.success('已成功添加议题');
|
|
|
|
+ } catch (error) {
|
|
|
|
+ this.$message.error('获取议题失败,请检查网络或联系管理员');
|
|
|
|
+ console.error(error);
|
|
|
|
+ }
|
|
},
|
|
},
|
|
handleTopicLibrary() {
|
|
handleTopicLibrary() {
|
|
this.handleLibrary();
|
|
this.handleLibrary();
|
|
@@ -931,6 +957,7 @@ export default {
|
|
});
|
|
});
|
|
listDept().then(response => {
|
|
listDept().then(response => {
|
|
this.deptOptions = this.handleTree(response.data, 'deptId')
|
|
this.deptOptions = this.handleTree(response.data, 'deptId')
|
|
|
|
+ this.deptOptionsli = this.deptOptions
|
|
})
|
|
})
|
|
},
|
|
},
|
|
handleTree(data, idField) {
|
|
handleTree(data, idField) {
|
|
@@ -965,7 +992,7 @@ export default {
|
|
return tree;
|
|
return tree;
|
|
},
|
|
},
|
|
addAttendee() {
|
|
addAttendee() {
|
|
- this.form.members.push({ role: null, userIds: [] });
|
|
|
|
|
|
+ this.form.members.push({ membersRole: null, membersName: null });
|
|
},
|
|
},
|
|
removeAttendee(index) {
|
|
removeAttendee(index) {
|
|
if (this.form.members.length > 1) {
|
|
if (this.form.members.length > 1) {
|
|
@@ -991,7 +1018,7 @@ export default {
|
|
this.form = {
|
|
this.form = {
|
|
meetingId: null,
|
|
meetingId: null,
|
|
meetingType: null,
|
|
meetingType: null,
|
|
- meetingState: null,
|
|
|
|
|
|
+ meetingState: 2,
|
|
meetingName: null,
|
|
meetingName: null,
|
|
startTime: null,
|
|
startTime: null,
|
|
endTime: null,
|
|
endTime: null,
|
|
@@ -1007,7 +1034,7 @@ export default {
|
|
checkOrganization: null,
|
|
checkOrganization: null,
|
|
selectText: null,
|
|
selectText: null,
|
|
meetingTime: this.getCurrentDateTime(),
|
|
meetingTime: this.getCurrentDateTime(),
|
|
- delFlag: null,
|
|
|
|
|
|
+ delFlag: 0,
|
|
remark: null,
|
|
remark: null,
|
|
topicId: null,
|
|
topicId: null,
|
|
topicList: []
|
|
topicList: []
|