Add system announcements interface
This commit is contained in:
@@ -38,6 +38,7 @@ const template = `
|
||||
<h6 class="dropdown-header">Hello, {{ first_name }}.</h6>
|
||||
<a href="/dash/profile" class="dropdown-item">My Profile</a>
|
||||
<a href="/dash/c/listing/reflect/Token" v-if="can.api_tokens" class="dropdown-item">API Tokens</a>
|
||||
<a href="/dash/c/listing/system/Announcement" v-if="can.messages" class="dropdown-item">System Announcements</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="/auth/logout" class="dropdown-item">Sign-Out of {{ app_name }}</a>
|
||||
</div>
|
||||
@@ -64,6 +65,7 @@ export default class NavBarComponent extends Component {
|
||||
|
||||
async vue_on_create() {
|
||||
this.can.api_tokens = await session.check_permissions('v1:reflect:tokens:list')
|
||||
this.can.messages = await session.check_permissions('v1:message:banners:create')
|
||||
this.$forceUpdate()
|
||||
}
|
||||
|
||||
|
||||
98
app/assets/app/resource/system/Announcement.resource.js
Normal file
98
app/assets/app/resource/system/Announcement.resource.js
Normal file
@@ -0,0 +1,98 @@
|
||||
import CRUDBase from '../CRUDBase.js'
|
||||
|
||||
class AnnouncementResource extends CRUDBase {
|
||||
endpoint = '/api/v1/system/announcements'
|
||||
required_fields = ['user_ids', 'group_ids', 'title', 'message', 'type']
|
||||
permission_base = 'v1:system:announcements'
|
||||
|
||||
item = 'System Announcement'
|
||||
plural = 'System Announcements'
|
||||
|
||||
listing_definition = {
|
||||
display: `
|
||||
System announcements are administrative messages that you want all or some of your users to see. These messages can be delivered via e-mail, as a message after login, or as a system banner announcement.
|
||||
`,
|
||||
columns: [
|
||||
{
|
||||
name: 'Title',
|
||||
field: 'title',
|
||||
},
|
||||
{
|
||||
name: 'Message',
|
||||
field: 'message',
|
||||
renderer: (message) => String(message).slice(0, 150),
|
||||
},
|
||||
],
|
||||
actions: [
|
||||
{
|
||||
type: 'resource',
|
||||
position: 'main',
|
||||
action: 'insert',
|
||||
text: 'Create New',
|
||||
color: 'success',
|
||||
},
|
||||
{
|
||||
type: 'resource',
|
||||
position: 'row',
|
||||
action: 'delete',
|
||||
icon: 'fa fa-times',
|
||||
color: 'danger',
|
||||
confirm: true,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
form_definition = {
|
||||
fields: [
|
||||
{
|
||||
name: 'Title',
|
||||
field: 'title',
|
||||
type: 'text',
|
||||
},
|
||||
{
|
||||
name: 'Message',
|
||||
field: 'message',
|
||||
type: 'textarea',
|
||||
},
|
||||
{
|
||||
name: 'Users',
|
||||
field: 'user_ids',
|
||||
type: 'select.dynamic.multiple',
|
||||
options: {
|
||||
resource: 'auth/User',
|
||||
display: (user) => `${user.last_name}, ${user.first_name} (${user.uid})`,
|
||||
value: 'id',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Groups',
|
||||
field: 'group_ids',
|
||||
type: 'select.dynamic.multiple',
|
||||
options: {
|
||||
resource: 'auth/Group',
|
||||
display: (group) => `${group.name}`,
|
||||
value: 'id',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Type',
|
||||
field: 'type',
|
||||
type: 'select',
|
||||
options: [
|
||||
{ display: 'Login Intercept', value: 'login' },
|
||||
{ display: 'E-Mail', value: 'email' },
|
||||
{ display: 'System Banner', value: 'banner' },
|
||||
],
|
||||
},
|
||||
],
|
||||
handlers: {
|
||||
insert: {
|
||||
action: 'redirect',
|
||||
next: '/dash/c/listing/system/Announcement',
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const system_announcement = new AnnouncementResource()
|
||||
export { system_announcement }
|
||||
Reference in New Issue
Block a user