admin-groups-edit.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template lang='pug'>
  2. v-container(fluid, grid-list-lg)
  3. v-layout(row wrap)
  4. v-flex(xs12)
  5. .admin-header
  6. img(src='/_assets/svg/icon-social-group.svg', alt='Edit Group', style='width: 80px;')
  7. .admin-header-title
  8. .headline.blue--text.text--darken-2 Edit Group
  9. .subtitle-1.grey--text {{group.name}}
  10. v-spacer
  11. v-btn(color='grey', icon, outlined, to='/groups')
  12. v-icon mdi-arrow-left
  13. v-dialog(v-model='deleteGroupDialog', max-width='500', v-if='!group.isSystem')
  14. template(v-slot:activator='{ on }')
  15. v-btn.ml-2(color='red', icon, outlined, v-on='on')
  16. v-icon(color='red') mdi-trash-can-outline
  17. v-card
  18. .dialog-header.is-red Delete Group?
  19. v-card-text.pa-4 Are you sure you want to delete group #[strong {{ group.name }}]? All users will be unassigned from this group.
  20. v-card-actions
  21. v-spacer
  22. v-btn(text, @click='deleteGroupDialog = false') Cancel
  23. v-btn(color='red', dark, @click='deleteGroup') Delete
  24. v-btn.ml-2(color='success', large, depressed, @click='updateGroup')
  25. v-icon(left) mdi-check
  26. span Update Group
  27. v-card.mt-3
  28. v-tabs.grad-tabs(v-model='tab', :color='$vuetify.theme.dark ? `blue` : `primary`', fixed-tabs, show-arrows, icons-and-text)
  29. v-tab(key='permissions')
  30. span Permissions
  31. v-icon mdi-lock-pattern
  32. v-tab(key='rules')
  33. span Page Rules
  34. v-icon mdi-file-lock
  35. v-tab(key='users')
  36. span Users
  37. v-icon mdi-account-group
  38. v-tab-item(key='permissions', :transition='false', :reverse-transition='false')
  39. group-permissions(v-model='group', @refresh='refresh')
  40. v-tab-item(key='rules', :transition='false', :reverse-transition='false')
  41. group-rules(v-model='group', @refresh='refresh')
  42. v-tab-item(key='users', :transition='false', :reverse-transition='false')
  43. group-users(v-model='group', @refresh='refresh')
  44. v-card-chin
  45. v-spacer
  46. .caption.grey--text.pr-2 Group ID #[strong {{group.id}}]
  47. </template>
  48. <script>
  49. import _ from 'lodash'
  50. import GroupPermissions from './admin-groups-edit-permissions.vue'
  51. import GroupRules from './admin-groups-edit-rules.vue'
  52. import GroupUsers from './admin-groups-edit-users.vue'
  53. import groupQuery from 'gql/admin/groups/groups-query-single.gql'
  54. import deleteGroupMutation from 'gql/admin/groups/groups-mutation-delete.gql'
  55. import updateGroupMutation from 'gql/admin/groups/groups-mutation-update.gql'
  56. export default {
  57. components: {
  58. GroupPermissions,
  59. GroupRules,
  60. GroupUsers
  61. },
  62. data() {
  63. return {
  64. group: {
  65. id: 0,
  66. name: '',
  67. isSystem: false,
  68. permissions: [],
  69. pageRules: [],
  70. users: []
  71. },
  72. deleteGroupDialog: false,
  73. tab: null
  74. }
  75. },
  76. methods: {
  77. async updateGroup() {
  78. try {
  79. await this.$apollo.mutate({
  80. mutation: updateGroupMutation,
  81. variables: {
  82. id: this.group.id,
  83. name: this.group.name,
  84. permissions: this.group.permissions,
  85. pageRules: this.group.pageRules
  86. },
  87. watchLoading (isLoading) {
  88. this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-groups-update')
  89. }
  90. })
  91. this.$store.commit('showNotification', {
  92. style: 'success',
  93. message: `Group changes have been saved.`,
  94. icon: 'check'
  95. })
  96. } catch (err) {
  97. this.$store.commit('pushGraphError', err)
  98. }
  99. },
  100. async deleteGroup() {
  101. this.deleteGroupDialog = false
  102. try {
  103. await this.$apollo.mutate({
  104. mutation: deleteGroupMutation,
  105. variables: {
  106. id: this.group.id
  107. },
  108. watchLoading (isLoading) {
  109. this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-groups-delete')
  110. }
  111. })
  112. this.$store.commit('showNotification', {
  113. style: 'success',
  114. message: `Group ${this.group.name} has been deleted.`,
  115. icon: 'delete'
  116. })
  117. this.$router.replace('/groups')
  118. } catch (err) {
  119. this.$store.commit('pushGraphError', err)
  120. }
  121. },
  122. async refresh() {
  123. return this.$apollo.queries.group.refetch()
  124. }
  125. },
  126. apollo: {
  127. group: {
  128. query: groupQuery,
  129. variables() {
  130. return {
  131. id: _.toSafeInteger(this.$route.params.id)
  132. }
  133. },
  134. fetchPolicy: 'network-only',
  135. update: (data) => _.cloneDeep(data.groups.single),
  136. watchLoading (isLoading) {
  137. this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-groups-refresh')
  138. }
  139. }
  140. }
  141. }
  142. </script>
  143. <style lang='scss'>
  144. </style>