admin-users-edit.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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.animated.fadeInUp(src='/svg/icon-male-user.svg', alt='Edit User', style='width: 80px;')
  7. .admin-header-title
  8. .headline.blue--text.text--darken-2.animated.fadeInLeft Edit User
  9. .subtitle-1.grey--text.animated.fadeInLeft.wait-p2s {{user.name}}
  10. v-spacer
  11. .caption.grey--text.animated.fadeInRight.wait-p5s ID #[strong {{user.id}}]
  12. v-divider.animated.fadeInRight.wait-p3s.ml-3(vertical)
  13. v-btn.ml-3.animated.fadeInDown.wait-p2s(color='grey', large, outlined, to='/users')
  14. v-icon mdi-arrow-left
  15. v-dialog(v-model='deleteUserDialog', max-width='500', v-if='user.id !== currentUserId && !user.isSystem')
  16. template(v-slot:activator='{ on }')
  17. v-btn.ml-3.animated.fadeInDown.wait-p1s(color='red', large, outlined, v-on='on')
  18. v-icon(color='red') mdi-trash-can-outline
  19. v-card
  20. .dialog-header.is-red Delete User?
  21. v-card-text Are you sure you want to delete user #[strong {{ user.name }}]?
  22. v-card-actions
  23. v-spacer
  24. v-btn(text, @click='deleteUserDialog = false') Cancel
  25. v-btn(color='red', dark, @click='deleteUser') Delete
  26. v-btn.ml-3.animated.fadeInDown(color='primary', large, depressed, @click='updateUser')
  27. v-icon(left) mdi-check
  28. span Update User
  29. v-flex(xs5)
  30. v-card.animated.fadeInUp
  31. v-toolbar(color='primary', dense, dark, flat)
  32. v-icon.mr-2 mdi-information-variant
  33. span Basic Info
  34. v-list.py-0(two-line, dense)
  35. v-list-item
  36. v-list-item-avatar(size='32')
  37. v-icon mdi-email-variant
  38. v-list-item-content
  39. v-list-item-title Email
  40. v-list-item-subtitle {{ user.email }}
  41. v-list-item-action(v-if='!user.isSystem')
  42. v-btn(icon, color='grey', flat, x-small)
  43. v-icon mdi-pencil
  44. v-divider
  45. v-list-item
  46. v-list-item-avatar(size='32')
  47. v-icon mdi-account
  48. v-list-item-content
  49. v-list-item-title Display Name
  50. v-list-item-subtitle {{ user.name }}
  51. v-list-item-action
  52. v-btn(icon, color='grey', flat, x-small)
  53. v-icon mdi-pencil
  54. v-card.mt-3.animated.fadeInUp.wait-p2s(v-if='!user.isSystem')
  55. v-toolbar(color='primary', dense, dark, flat)
  56. v-icon.mr-2 mdi-lock-outline
  57. span Authentication
  58. v-list.py-0(two-line, dense)
  59. v-list-item
  60. v-list-item-avatar(size='32')
  61. v-icon mdi-domain
  62. v-list-item-content
  63. v-list-item-title Provider
  64. v-list-item-subtitle {{ user.providerKey }}
  65. //- v-list-item-action
  66. //- v-img(src='https://static.requarks.io/logo/wikijs.svg', alt='', contain, max-height='32', position='center right')
  67. template(v-if='user.providerKey === `local`')
  68. v-divider
  69. v-list-item
  70. v-list-item-avatar(size='32')
  71. v-icon mdi-textbox-password
  72. v-list-item-content
  73. v-list-item-title Password
  74. v-list-item-subtitle &bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;
  75. v-list-item-action
  76. v-tooltip(top)
  77. template(v-slot:activator='{ on }')
  78. v-btn(icon, color='grey', flat, x-small, v-on='on')
  79. v-icon mdi-cached
  80. span Change Password
  81. v-list-item-action
  82. v-tooltip(top)
  83. template(v-slot:activator='{ on }')
  84. v-btn(icon, color='grey', flat, x-small, v-on='on')
  85. v-icon mdi-email
  86. span Send Password Reset Email
  87. v-divider
  88. v-list-item
  89. v-list-item-avatar(size='32')
  90. v-icon mdi-two-factor-authentication
  91. v-list-item-content
  92. v-list-item-title Two Factor Authentication (2FA)
  93. v-list-item-subtitle.red--text Inactive
  94. v-list-item-action
  95. v-tooltip(top)
  96. template(v-slot:activator='{ on }')
  97. v-btn(icon, color='grey', flat, x-small, v-on='on')
  98. v-icon mdi-power
  99. span Toggle 2FA
  100. template(v-if='user.providerId')
  101. v-divider
  102. v-list-item
  103. v-list-item-avatar(size='32')
  104. v-icon mdi-account
  105. v-list-item-content
  106. v-list-item-title Provider Id
  107. v-list-item-subtitle {{ user.providerId }}
  108. v-card.mt-3.animated.fadeInUp.wait-p4s
  109. v-toolbar(color='primary', dense, dark, flat)
  110. v-icon.mr-2 mdi-account-group
  111. span User Groups
  112. v-list(dense)
  113. template(v-for='(group, idx) in user.groups')
  114. v-list-item
  115. v-list-item-avatar(size='32')
  116. v-icon mdi-account-group-outline
  117. v-list-item-content
  118. v-list-item-title {{group.name}}
  119. v-list-item-action(v-if='!user.isSystem')
  120. v-btn(icon, color='red', x-small)
  121. v-icon mdi-close
  122. v-divider(v-if='idx < user.groups.length - 1')
  123. v-alert.mx-3(v-if='user.groups.length < 1', outlined, color='grey darken-1', icon='mdi-alert')
  124. .caption This user is not assigned to any group yet. You must assign at least 1 group to a user.
  125. v-card-chin(v-if='!user.isSystem')
  126. v-spacer
  127. v-btn(color='primary', text)
  128. v-icon(left) mdi-clipboard-account
  129. span Assign to group
  130. v-flex(xs7)
  131. v-card.animated.fadeInUp.wait-p2s
  132. v-toolbar(color='primary', dense, dark, flat)
  133. v-icon.mr-2 mdi-account-badge-outline
  134. span Extended Metadata
  135. v-list.py-0(two-line, dense)
  136. v-list-item
  137. v-list-item-avatar(size='32')
  138. v-icon mdi-map-marker
  139. v-list-item-content
  140. v-list-item-title Location
  141. v-list-item-subtitle {{ user.location }}
  142. v-list-item-action
  143. v-btn(icon, color='grey', flat, x-small)
  144. v-icon mdi-pencil
  145. v-divider
  146. v-list-item
  147. v-list-item-avatar(size='32')
  148. v-icon mdi-account-badge-horizontal-outline
  149. v-list-item-content
  150. v-list-item-title Job Title
  151. v-list-item-subtitle {{ user.jobTitle }}
  152. v-list-item-action
  153. v-btn(icon, color='grey', flat, x-small)
  154. v-icon mdi-pencil
  155. v-divider
  156. v-list-item
  157. v-list-item-avatar(size='32')
  158. v-icon mdi-map-clock-outline
  159. v-list-item-content
  160. v-list-item-title Timezone
  161. v-list-item-subtitle {{ user.timezone }}
  162. v-list-item-action
  163. v-btn(icon, color='grey', flat, x-small)
  164. v-icon mdi-pencil
  165. v-card.mt-3.animated.fadeInUp.wait-p4s
  166. v-toolbar(color='primary', dense, dark, flat)
  167. v-icon.mr-2 mdi-file-document-box-multiple-outline
  168. span Content
  169. v-card-text
  170. em.caption.grey--text Coming soon
  171. </template>
  172. <script>
  173. import _ from 'lodash'
  174. import { get } from 'vuex-pathify'
  175. import userQuery from 'gql/admin/users/users-query-single.gql'
  176. export default {
  177. data() {
  178. return {
  179. deleteUserDialog: false,
  180. user: {
  181. }
  182. }
  183. },
  184. computed: {
  185. currentUserId: get('user/id')
  186. },
  187. methods: {
  188. deleteUser() {},
  189. updateUser() {}
  190. },
  191. apollo: {
  192. user: {
  193. query: userQuery,
  194. variables() {
  195. return {
  196. id: _.toSafeInteger(this.$route.params.id)
  197. }
  198. },
  199. fetchPolicy: 'network-only',
  200. update: (data) => data.users.single,
  201. watchLoading (isLoading) {
  202. this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-users-refresh')
  203. }
  204. }
  205. }
  206. }
  207. </script>
  208. <style lang='scss'>
  209. </style>