mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-13 01:28:11 +00:00
完善会议功能
This commit is contained in:
parent
bf59fae173
commit
357f0e4df4
@ -153,6 +153,49 @@ class SystemController extends AbstractController
|
||||
return Base::retSuccess('success', $setting ?: json_decode('{}'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/system/setting/meeting 03. 获取会议设置、保存会议设置(限管理员)
|
||||
*
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup system
|
||||
* @apiName setting__meeting
|
||||
*
|
||||
* @apiParam {String} type
|
||||
* - get: 获取(默认)
|
||||
* - save: 保存设置(参数:['open', 'appid', 'app_certificate'])
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
*/
|
||||
public function setting__meeting()
|
||||
{
|
||||
User::auth('admin');
|
||||
//
|
||||
$type = trim(Request::input('type'));
|
||||
if ($type == 'save') {
|
||||
if (env("SYSTEM_SETTING") == 'disabled') {
|
||||
return Base::retError('当前环境禁止修改');
|
||||
}
|
||||
$all = Request::input();
|
||||
foreach ($all as $key => $value) {
|
||||
if (!in_array($key, [
|
||||
'open',
|
||||
'appid',
|
||||
'app_certificate',
|
||||
])) {
|
||||
unset($all[$key]);
|
||||
}
|
||||
}
|
||||
$setting = Base::setting('meetingSetting', Base::newTrim($all));
|
||||
} else {
|
||||
$setting = Base::setting('meetingSetting');
|
||||
}
|
||||
//
|
||||
$setting['open'] = $setting['open'] ?: 'close';
|
||||
//
|
||||
return Base::retSuccess('success', $setting ?: json_decode('{}'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/system/setting/apppush 03. 获取APP推送设置、保存APP推送设置(限管理员)
|
||||
*
|
||||
|
||||
@ -773,9 +773,12 @@ class UsersController extends AbstractController
|
||||
* @apiGroup users
|
||||
* @apiName meeting__open
|
||||
*
|
||||
* @apiParam {String} [meetingid] 会议ID(不是数字,留空自动创建)
|
||||
* @apiParam {String} [name] 会话ID
|
||||
* @apiParam {Array} [userids] 邀请成员
|
||||
* @apiParam {String} type 类型
|
||||
* - create: 创建会议,有效参数:name、userids
|
||||
* - join: 加入会议,有效参数:meetingid (必填)
|
||||
* @apiParam {String} [meetingid] 频道ID(不是数字)
|
||||
* @apiParam {String} [name] 会话ID
|
||||
* @apiParam {Array} [userids] 邀请成员
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
@ -785,17 +788,18 @@ class UsersController extends AbstractController
|
||||
{
|
||||
$user = User::auth();
|
||||
//
|
||||
$type = trim(Request::input('type'));
|
||||
$meetingid = trim(Request::input('meetingid'));
|
||||
$name = trim(Request::input('name'));
|
||||
$userids = Request::input('userids');
|
||||
$isCreate = false;
|
||||
//
|
||||
if ($meetingid) {
|
||||
if ($type === 'join') {
|
||||
$meeting = Meeting::whereMeetingid($meetingid)->first();
|
||||
if (empty($meeting)) {
|
||||
return Base::retError('会议不存在');
|
||||
return Base::retError('频道ID不存在');
|
||||
}
|
||||
} else {
|
||||
} elseif ($type === 'create') {
|
||||
$meetingid = strtoupper(Base::generatePassword());
|
||||
$name = $name ?: "{$user->nickname} 发起的会议";
|
||||
$channel = "DooTask:" . substr(md5($meetingid . env("APP_KEY")), 16);
|
||||
@ -807,14 +811,20 @@ class UsersController extends AbstractController
|
||||
]);
|
||||
$meeting->save();
|
||||
$isCreate = true;
|
||||
} else {
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
// 创建令牌
|
||||
$appid = '342c604542484b0d9659527f79aefcdb';
|
||||
$app_certificate = '920eb911c1f549948366e44d6dcabcbe';
|
||||
$channel = $meeting->channel;
|
||||
$meetingSetting = Base::setting('meetingSetting');
|
||||
if ($meetingSetting['open'] !== 'open') {
|
||||
return Base::retError('会议功能未开启,请联系管理员开启');
|
||||
}
|
||||
if (empty($meetingSetting['appid']) || empty($meetingSetting['app_certificate'])) {
|
||||
return Base::retError('会议功能配置错误,请联系管理员');
|
||||
}
|
||||
$uid = $user->userid . '_' . Request::header('fd');
|
||||
try {
|
||||
$service = new AgoraTokenGenerator($appid, $app_certificate, $channel, $uid);
|
||||
$service = new AgoraTokenGenerator($meetingSetting['appid'], $meetingSetting['app_certificate'], $meeting->channel, $uid);
|
||||
} catch (\Exception $e) {
|
||||
return Base::retError($e->getMessage());
|
||||
}
|
||||
@ -840,7 +850,7 @@ class UsersController extends AbstractController
|
||||
}
|
||||
//
|
||||
$data = $meeting->toArray();
|
||||
$data['appid'] = $appid;
|
||||
$data['appid'] = $meetingSetting['appid'];
|
||||
$data['uid'] = $uid;
|
||||
$data['token'] = $token;
|
||||
$data['msgs'] = $msgs;
|
||||
|
||||
@ -214,12 +214,14 @@
|
||||
</div>
|
||||
<ButtonGroup class="manage-box-new-group">
|
||||
<Button class="manage-box-new" type="primary" icon="md-add" @click="onAddShow">{{$L('新建项目')}}</Button>
|
||||
<Dropdown @on-click="onAddTask(0)">
|
||||
<Dropdown @on-click="onAddMenu" trigger="click">
|
||||
<Button type="primary">
|
||||
<Icon type="ios-arrow-down"></Icon>
|
||||
</Button>
|
||||
<DropdownMenu slot="list">
|
||||
<DropdownItem>{{$L('新建任务')}} ({{mateName}}+K)</DropdownItem>
|
||||
<DropdownItem name="task">{{$L('新建任务')}} ({{mateName}}+K)</DropdownItem>
|
||||
<DropdownItem name="createMeeting">{{$L('新会议')}} ({{mateName}}+J)</DropdownItem>
|
||||
<DropdownItem name="joinMeeting">{{$L('加入会议')}}</DropdownItem>
|
||||
</DropdownMenu>
|
||||
</Dropdown>
|
||||
</ButtonGroup>
|
||||
@ -815,6 +817,27 @@ export default {
|
||||
};
|
||||
},
|
||||
|
||||
onAddMenu(name) {
|
||||
switch (name) {
|
||||
case 'task':
|
||||
this.onAddTask(0)
|
||||
break;
|
||||
|
||||
case 'createMeeting':
|
||||
Store.set('addMeeting', {
|
||||
type: 'create',
|
||||
userids: [this.userId],
|
||||
});
|
||||
break;
|
||||
|
||||
case 'joinMeeting':
|
||||
Store.set('addMeeting', {
|
||||
type: 'join',
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onAddShow() {
|
||||
this.$store.dispatch("getColumnTemplate").catch(() => {})
|
||||
this.addShow = true;
|
||||
@ -866,9 +889,12 @@ export default {
|
||||
|
||||
shortcutEvent(e) {
|
||||
if (e.metaKey || e.ctrlKey) {
|
||||
if (e.keyCode === 75 || e.keyCode === 78) {
|
||||
if (e.keyCode === 74) {
|
||||
e.preventDefault();
|
||||
this.onAddTask(0)
|
||||
this.onAddMenu('createMeeting')
|
||||
} else if (e.keyCode === 75 || e.keyCode === 78) {
|
||||
e.preventDefault();
|
||||
this.onAddMenu('task')
|
||||
} else if (e.keyCode === 83 && this.taskId > 0) {
|
||||
e.preventDefault();
|
||||
this.$refs.taskDetail.checkUpdate(true)
|
||||
|
||||
@ -788,6 +788,7 @@ export default {
|
||||
|
||||
case 'meeting':
|
||||
Store.set('addMeeting', {
|
||||
type: 'create',
|
||||
dialog_id: this.dialogId,
|
||||
userids: [this.userId],
|
||||
});
|
||||
|
||||
@ -332,7 +332,11 @@ export default {
|
||||
},
|
||||
|
||||
openMeeting() {
|
||||
Store.set('addMeeting', this.msgData.msg);
|
||||
Store.set('addMeeting', {
|
||||
type: 'join',
|
||||
name: this.msgData.msg.name,
|
||||
meetingid: this.msgData.msg.meetingid,
|
||||
});
|
||||
},
|
||||
|
||||
withdraw() {
|
||||
|
||||
@ -2,16 +2,16 @@
|
||||
<div v-show="false">
|
||||
<Modal
|
||||
v-model="addShow"
|
||||
:title="$L(addData.meetingid ? '加入会议' : '新会议')"
|
||||
:title="$L(addData.type === 'join' ? '加入会议' : '新会议')"
|
||||
:mask-closable="false">
|
||||
<Form ref="addForm" :model="addData" label-width="auto" @submit.native.prevent>
|
||||
<template v-if="addData.meetingid">
|
||||
<template v-if="addData.type === 'join'">
|
||||
<!-- 加入会议 -->
|
||||
<FormItem prop="userids" :label="$L('会议主题')">
|
||||
<FormItem v-if="addData.name" prop="userids" :label="$L('会议主题')">
|
||||
<Input v-model="addData.name" disabled/>
|
||||
</FormItem>
|
||||
<FormItem prop="meetingid" :label="$L('会议频道')">
|
||||
<Input v-model="addData.meetingid" disabled/>
|
||||
<FormItem prop="meetingid" :label="$L('会议频道ID')">
|
||||
<Input v-model="addData.meetingid" :placeholder="$L('请输入会议频道ID')"/>
|
||||
</FormItem>
|
||||
</template>
|
||||
<template v-else>
|
||||
@ -36,7 +36,7 @@
|
||||
</Form>
|
||||
<div slot="footer" class="adaption">
|
||||
<Button type="default" @click="addShow=false">{{$L('取消')}}</Button>
|
||||
<Button type="primary" :loading="loadIng > 0" @click="onSubmit">{{$L(addData.meetingid ? '进入会议' : '开始会议')}}</Button>
|
||||
<Button type="primary" :loading="loadIng > 0" @click="onSubmit">{{$L(addData.type === 'join' ? '进入会议' : '开始会议')}}</Button>
|
||||
</div>
|
||||
</Modal>
|
||||
<Modal
|
||||
@ -123,7 +123,7 @@ export default {
|
||||
onAdd(data) {
|
||||
data = $A.isJson(data) ? data : {};
|
||||
// 获取会话成员
|
||||
if (!data.meetingid && /\d+/.test(data.dialog_id)) {
|
||||
if (/\d+/.test(data.dialog_id)) {
|
||||
this.loadIng++;
|
||||
this.$store.dispatch("call", {
|
||||
url: 'dialog/user',
|
||||
|
||||
@ -0,0 +1,82 @@
|
||||
<template>
|
||||
<div class="setting-component-item">
|
||||
<Form ref="formData" :model="formData" :rules="ruleData" label-width="auto" @submit.native.prevent>
|
||||
<div class="block-setting-box">
|
||||
<h3>{{ $L('AgoraIO') }}</h3>
|
||||
<FormItem :label="$L('会议功能')" prop="open">
|
||||
<RadioGroup v-model="formData.open">
|
||||
<Radio label="open">{{ $L('开启') }}</Radio>
|
||||
<Radio label="close">{{ $L('关闭') }}</Radio>
|
||||
</RadioGroup>
|
||||
</FormItem>
|
||||
<template v-if="formData.open === 'open'">
|
||||
<FormItem label="App ID " prop="appid">
|
||||
<Input :maxlength="255" v-model="formData.appid"/>
|
||||
</FormItem>
|
||||
<FormItem label="App certificate" prop="app_certificate">
|
||||
<Input :maxlength="255" v-model="formData.app_certificate" type="password"/>
|
||||
</FormItem>
|
||||
</template>
|
||||
</div>
|
||||
</Form>
|
||||
<div class="setting-footer">
|
||||
<Button :loading="loadIng > 0" type="primary" @click="submitForm">{{ $L('提交') }}</Button>
|
||||
<Button :loading="loadIng > 0" @click="resetForm" style="margin-left: 8px">{{ $L('重置') }}</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "SystemMeeting",
|
||||
data() {
|
||||
return {
|
||||
loadIng: 0,
|
||||
formData: {
|
||||
open: '',
|
||||
appid: '',
|
||||
app_certificate: '',
|
||||
},
|
||||
ruleData: {},
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.systemSetting();
|
||||
},
|
||||
|
||||
methods: {
|
||||
submitForm() {
|
||||
this.$refs.formData.validate((valid) => {
|
||||
if (valid) {
|
||||
this.systemSetting(true);
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
resetForm() {
|
||||
this.formData = $A.cloneJSON(this.formDatum_bak);
|
||||
},
|
||||
|
||||
systemSetting(save) {
|
||||
this.loadIng++;
|
||||
this.$store.dispatch("call", {
|
||||
url: 'system/setting/meeting?type=' + (save ? 'save' : 'all'),
|
||||
data: this.formData,
|
||||
}).then(({data}) => {
|
||||
if (save) {
|
||||
$A.messageSuccess('修改成功');
|
||||
}
|
||||
this.formData = data;
|
||||
this.formDatum_bak = $A.cloneJSON(this.formData);
|
||||
}).catch(({msg}) => {
|
||||
if (save) {
|
||||
$A.modalError(msg);
|
||||
}
|
||||
}).finally(_ => {
|
||||
this.loadIng--;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -10,6 +10,9 @@
|
||||
<TabPane :label="$L('项目模板')" name="columnTemplate">
|
||||
<SystemColumnTemplate/>
|
||||
</TabPane>
|
||||
<TabPane :label="$L('会议功能')" name="meeting">
|
||||
<SystemMeeting/>
|
||||
</TabPane>
|
||||
<TabPane :label="$L('邮件设置')" name="emailSetting">
|
||||
<SystemEmailSetting/>
|
||||
</TabPane>
|
||||
@ -26,9 +29,12 @@ import SystemTaskPriority from "./components/SystemTaskPriority";
|
||||
import SystemColumnTemplate from "./components/SystemColumnTemplate";
|
||||
import SystemEmailSetting from "./components/SystemEmailSetting";
|
||||
import SystemAppPush from "./components/SystemAppPush";
|
||||
import SystemMeeting from "./components/SystemMeeting";
|
||||
|
||||
export default {
|
||||
components: {SystemAppPush, SystemColumnTemplate, SystemTaskPriority, SystemSetting, SystemEmailSetting},
|
||||
components: {
|
||||
SystemMeeting,
|
||||
SystemAppPush, SystemColumnTemplate, SystemTaskPriority, SystemSetting, SystemEmailSetting},
|
||||
data() {
|
||||
return {
|
||||
tabAction: 'setting',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user