@fishawack/lab-velocity 2.0.0-beta.3 → 2.0.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +441 -37
  2. package/_Build/vue/components/basic/Button.vue +1 -1
  3. package/_Build/vue/components/form/Select.vue +2 -2
  4. package/_Build/vue/components/form/Spinner.vue +5 -0
  5. package/_Build/vue/components/layout/Alert.vue +5 -5
  6. package/_Build/vue/{modules/AuthModule/components/VBreadcrumbs.vue → components/layout/Breadcrumbs.vue} +4 -4
  7. package/_Build/vue/{modules/AuthModule/components → components/layout}/Chips.vue +2 -2
  8. package/_Build/vue/components/layout/Footer.vue +11 -10
  9. package/_Build/vue/{modules/AuthModule/components/VFormFooter.vue → components/layout/FormFooter.vue} +13 -7
  10. package/_Build/vue/{modules/AuthModule/components → components/layout}/FormRole.vue +10 -8
  11. package/_Build/vue/components/layout/Layout.vue +76 -0
  12. package/_Build/vue/components/layout/Navigation.vue +77 -0
  13. package/_Build/vue/{modules/AuthModule/components/VPageHeader.vue → components/layout/PageHeader.vue} +7 -2
  14. package/_Build/vue/components/layout/SideBar.vue +26 -0
  15. package/_Build/vue/{modules/AuthModule/components/VTable.vue → components/layout/Table.vue} +32 -16
  16. package/_Build/vue/{modules/AuthModule/components/VTableSorter.vue → components/layout/TableSorter.vue} +68 -43
  17. package/_Build/vue/components/layout/pageTitle.vue +1 -1
  18. package/_Build/vue/components/navigation/MenuItem.vue +7 -2
  19. package/_Build/vue/components/navigation/MenuItemGroup.vue +7 -2
  20. package/_Build/vue/modules/AuthModule/js/axios.js +19 -0
  21. package/_Build/vue/modules/AuthModule/js/router.js +28 -88
  22. package/_Build/vue/modules/AuthModule/js/store.js +15 -6
  23. package/_Build/vue/modules/AuthModule/{adminRoutes/PCompanies/Children/partials → routes/PCompanies}/form.vue +50 -18
  24. package/_Build/vue/modules/AuthModule/routes/PCompanies/resource.js +259 -0
  25. package/_Build/vue/modules/AuthModule/routes/PTeams/resource.js +308 -0
  26. package/_Build/vue/modules/AuthModule/{adminRoutes/PUsers/Children/partials → routes/PUsers}/form.vue +30 -18
  27. package/_Build/vue/modules/AuthModule/routes/PUsers/resource.js +215 -0
  28. package/_Build/vue/modules/AuthModule/routes/account-exists.vue +2 -2
  29. package/_Build/vue/modules/AuthModule/routes/change-password.vue +23 -24
  30. package/_Build/vue/modules/AuthModule/routes/container.vue +2 -11
  31. package/_Build/vue/modules/AuthModule/routes/expired-reset.vue +4 -4
  32. package/_Build/vue/modules/AuthModule/routes/expired-verification.vue +9 -8
  33. package/_Build/vue/modules/AuthModule/routes/force-reset.vue +24 -28
  34. package/_Build/vue/modules/AuthModule/routes/forgot.vue +4 -4
  35. package/_Build/vue/modules/AuthModule/routes/login.vue +7 -11
  36. package/_Build/vue/modules/AuthModule/routes/logincallback.vue +2 -4
  37. package/_Build/vue/modules/AuthModule/routes/loginsso.vue +7 -9
  38. package/_Build/vue/modules/AuthModule/routes/logout.vue +1 -3
  39. package/_Build/vue/modules/AuthModule/routes/logoutheadless.vue +1 -3
  40. package/_Build/vue/modules/AuthModule/routes/register.vue +19 -21
  41. package/_Build/vue/modules/AuthModule/routes/reset.vue +14 -13
  42. package/_Build/vue/modules/AuthModule/routes/success-forgot.vue +8 -7
  43. package/_Build/vue/modules/AuthModule/routes/success-reset.vue +2 -2
  44. package/_Build/vue/modules/AuthModule/routes/success-verify.vue +1 -3
  45. package/_Build/vue/modules/AuthModule/routes/verify.vue +11 -14
  46. package/_Build/vue/modules/resource/Children/create.vue +70 -0
  47. package/_Build/vue/modules/resource/Children/edit.vue +92 -0
  48. package/_Build/vue/modules/resource/Children/index.vue +42 -0
  49. package/_Build/vue/modules/resource/Children/partials/form.vue +57 -0
  50. package/_Build/vue/modules/resource/Children/show.vue +133 -0
  51. package/_Build/vue/modules/resource/index.js +486 -0
  52. package/_Build/vue/modules/resource/parent.vue +63 -0
  53. package/_base.scss +0 -1
  54. package/_defaults.scss +2 -13
  55. package/_variables.scss +9 -4
  56. package/components/_alert.scss +5 -0
  57. package/components/_auth.scss +163 -0
  58. package/components/_basic.scss +55 -0
  59. package/components/_breadcrumbs.scss +39 -0
  60. package/components/_button.scss +304 -0
  61. package/components/_cascader.scss +12 -0
  62. package/components/_checkbox.scss +41 -0
  63. package/components/_chip.scss +24 -0
  64. package/components/_collapse.scss +24 -0
  65. package/components/_datepicker.scss +52 -0
  66. package/components/_descriptions.scss +2 -0
  67. package/components/_footer.scss +47 -0
  68. package/components/_form.scss +24 -0
  69. package/components/_header.scss +30 -0
  70. package/components/_icon.scss +25 -0
  71. package/components/_inputNumber.scss +22 -0
  72. package/components/_layout.scss +56 -0
  73. package/components/_link.scss +44 -0
  74. package/components/_loader.scss +43 -0
  75. package/components/_menu.scss +112 -0
  76. package/components/_modal.scss +24 -0
  77. package/components/_pageTitle.scss +8 -0
  78. package/components/_permissionLegend.scss +18 -0
  79. package/components/_select.scss +29 -0
  80. package/components/_sidebar.scss +41 -0
  81. package/components/_switch.scss +14 -0
  82. package/components/_table.scss +20 -0
  83. package/components/_tooltip.scss +4 -0
  84. package/components/_typography.scss +162 -0
  85. package/components/_upload.scss +15 -0
  86. package/components/_wysiwyg.scss +7 -0
  87. package/components/_wysiwyg2.scss +142 -0
  88. package/index.js +9 -1
  89. package/package.json +4 -2
  90. package/vendor.scss +0 -1
  91. package/_Build/vue/components/layout/sideBar.vue +0 -25
  92. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/Upload/upload.vue +0 -251
  93. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/create.vue +0 -62
  94. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/edit.vue +0 -98
  95. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/index.vue +0 -90
  96. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/show.vue +0 -262
  97. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/parent.vue +0 -36
  98. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/create.vue +0 -112
  99. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/edit.vue +0 -103
  100. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/index.vue +0 -112
  101. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/show.vue +0 -120
  102. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/parent.vue +0 -36
  103. /package/_Build/vue/{modules/AuthModule/components → components/layout}/AuthModal.vue +0 -0
  104. /package/_Build/vue/{modules/AuthModule/components → components/layout}/Chip.vue +0 -0
  105. /package/_Build/vue/{modules/AuthModule/components/VPasswordValidation.vue → components/layout/PasswordValidation.vue} +0 -0
  106. /package/_Build/vue/{modules/AuthModule/components/VRoleLegend.vue → components/layout/RoleLegend.vue} +0 -0
@@ -1,62 +0,0 @@
1
- <template>
2
- <VBreadcrumbs :items="breadcrumbs" class="mb-8" container-classes="m-0" />
3
-
4
- <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
5
- <div class="grid__1/1">
6
- <div class="grid__1/1 mb-4">
7
- <h2 class="h1">Create Company</h2>
8
- </div>
9
- <div class="mt grid__1/2">
10
- <XForm ref="form" :form="form" :submit="submit" />
11
- </div>
12
- </div>
13
- </div>
14
- </template>
15
-
16
- <script>
17
- import Form from "form-backend-validation";
18
-
19
- export default {
20
- name: "PCreate",
21
-
22
- components: {
23
- VBreadcrumbs: require("../../../components/VBreadcrumbs.vue").default,
24
- XForm: require("./partials/form.vue").default,
25
- },
26
-
27
- props: {
28
- breadcrumbs: {
29
- type: Array,
30
- required: true,
31
- },
32
- },
33
-
34
- data() {
35
- return {
36
- form: new Form({
37
- name: null,
38
- domains: [],
39
- roles: [],
40
- sso_client_id: undefined,
41
- sso_tenant: undefined,
42
- sso_client_secret: undefined,
43
- sso_type: undefined,
44
- }),
45
- };
46
- },
47
-
48
- methods: {
49
- async submit() {
50
- try {
51
- let res = await this.form.post(`/api/companies`);
52
- this.$router.replace({
53
- name: "companies.show",
54
- params: { id: res.data.id },
55
- });
56
- } catch (e) {
57
- this.$root.errors(e);
58
- }
59
- },
60
- },
61
- };
62
- </script>
@@ -1,98 +0,0 @@
1
- <template>
2
- <VBreadcrumbs
3
- :items="addBreadcrumbs"
4
- class="mb-8"
5
- container-classes="m-0"
6
- />
7
-
8
- <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
9
- <div class="grid__1/1">
10
- <div class="grid__1/1 mb-4">
11
- <h2 class="h1">Edit Company</h2>
12
- </div>
13
- <div class="grid__1/2">
14
- <XForm
15
- :id="id"
16
- ref="form"
17
- :form="form"
18
- :submit="submit"
19
- method="patch"
20
- />
21
- </div>
22
- </div>
23
- </div>
24
- </template>
25
-
26
- <script>
27
- import Form from "form-backend-validation";
28
- export default {
29
- name: "PEdit",
30
-
31
- components: {
32
- VBreadcrumbs: require("../../../components/VBreadcrumbs.vue").default,
33
- XForm: require("./partials/form.vue").default,
34
- },
35
-
36
- props: {
37
- breadcrumbs: {
38
- type: Array,
39
- required: true,
40
- },
41
- },
42
-
43
- data() {
44
- return {
45
- id: null,
46
- form: new Form({
47
- name: null,
48
- domains: [],
49
- roles: [],
50
- primary_contact: null,
51
- sso_client_id: undefined,
52
- sso_tenant: undefined,
53
- sso_client_secret: undefined,
54
- sso_type: undefined,
55
- }),
56
- addBreadcrumbs: [...this.$props.breadcrumbs],
57
- };
58
- },
59
-
60
- async mounted() {
61
- this.id = this.$route.params.id;
62
- window.axios
63
- .get(`/api/companies/${this.id}?include=primary_contact`)
64
- .then((res) => {
65
- const company = res.data.data;
66
- this.form.name = company.name;
67
- this.form.primary_contact = company?.primary_contact?.id;
68
- this.form.domains = company.domains;
69
- this.form.roles = company.roles.map((val) => val.id);
70
- this.form.sso_client_id = company.sso_client_id;
71
- this.form.sso_tenant = company.sso_tenant;
72
- this.form.sso_client_secret = company.sso_client_secret;
73
- this.form.sso_type = company.sso_type;
74
- this.addBreadcrumbs.push({
75
- href: {
76
- name: "companies.show",
77
- param: this.id,
78
- },
79
- text: company.name,
80
- });
81
- });
82
- },
83
-
84
- methods: {
85
- async submit() {
86
- try {
87
- let res = await this.form.patch(`/api/companies/${this.id}`);
88
- this.$router.replace({
89
- name: "companies.show",
90
- params: { id: res.data.id },
91
- });
92
- } catch (e) {
93
- this.$root.errors(e);
94
- }
95
- },
96
- },
97
- };
98
- </script>
@@ -1,90 +0,0 @@
1
- <template>
2
- <VBreadcrumbs :items="breadcrumbs" class="mb-8" container-classes="m-0" />
3
-
4
- <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
5
- <div class="grid__1/1">
6
- <h2 class="h1 pb-4">
7
- {{ breadcrumbs[breadcrumbs.length - 1].text }}
8
- </h2>
9
-
10
- <VTableSorter
11
- key="PIndex"
12
- :json-data="jsonData"
13
- api="companies"
14
- :fixed-height="false"
15
- :display-edit-action="$store.getters.can('write companies')"
16
- />
17
-
18
- <VRoleLegend class="mt-5" />
19
- </div>
20
- </div>
21
- </template>
22
-
23
- <script>
24
- export default {
25
- name: "PIndex",
26
-
27
- components: {
28
- VBreadcrumbs: require("../../../components/VBreadcrumbs.vue").default,
29
- VTableSorter: require("../../../components/VTableSorter.vue").default,
30
- VRoleLegend: require("../../../components/VRoleLegend.vue").default,
31
- },
32
-
33
- props: {
34
- breadcrumbs: {
35
- type: Array,
36
- required: true,
37
- },
38
- },
39
-
40
- data() {
41
- return {
42
- jsonData: {
43
- label: "company",
44
- multiLabel: "companies",
45
- pageLink: "companies",
46
- api: "/api/companies",
47
- searchable: {
48
- label: "Search companies",
49
- value: "name",
50
- },
51
- tableStructure: [
52
- {
53
- label: "Name",
54
- key: "name",
55
- sortable: true,
56
- },
57
- {
58
- label: "Total users",
59
- key: "user_count",
60
- sortable: false,
61
- width: "150",
62
- },
63
- {
64
- label: "Role",
65
- component: {
66
- module: (row) => {
67
- if (row.roles.length === 1)
68
- return require("../../../components/Chip.vue")
69
- .default;
70
-
71
- return require("../../../components/Chips.vue")
72
- .default;
73
- },
74
- props: (row) =>
75
- row.roles.length === 1
76
- ? {
77
- name: row.roles[0].name,
78
- label: row.roles[0].label,
79
- }
80
- : { array: row.roles },
81
- },
82
- },
83
- ],
84
- },
85
- };
86
- },
87
-
88
- mounted() {},
89
- };
90
- </script>
@@ -1,262 +0,0 @@
1
- <template>
2
- <VBreadcrumbs
3
- :items="addBreadcrumbs"
4
- class="mb-8"
5
- container-classes="m-0"
6
- />
7
-
8
- <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
9
- <div class="grid__1/1">
10
- <template v-if="company">
11
- <div class="bg-0 p-3 box-shadow-1 border-r-4 mb-6">
12
- <VPageHeader icon="icon-business" :title="company.name">
13
- <!--
14
- Temporarily disabled
15
- <el-button tag="a" type="secondary" :href="`/companies/${company.id}/upload`">
16
- <GIcon class="fill-1 mr-0.5" name="icon-plus" embed artboard /> Import users
17
- </el-button>
18
- <el-button tag="a" type="secondary" :href="`/api/companies/${company.id}/export`">
19
- <GIcon class="fill-1 mr-0.5" name="icon-download" embed artboard /> Export users
20
- </el-button>
21
- Temporarily disabled
22
- -->
23
-
24
- <el-button
25
- v-if="company.primary_contact"
26
- type="primary"
27
- @click="sendWelcome"
28
- >
29
- Send welcome email
30
- </el-button>
31
-
32
- <el-button
33
- v-if="$store.getters.can('write companies')"
34
- tag="a"
35
- type="primary"
36
- @click="
37
- $router.push({
38
- name: 'companies.edit',
39
- param: company.id,
40
- })
41
- "
42
- >
43
- <GIcon
44
- class="fill-0 mr-0.5"
45
- name="icon-edit"
46
- embed
47
- artboard
48
- />
49
- Edit company
50
- </el-button>
51
- </VPageHeader>
52
-
53
- <hr class="my-3 hr-muted" />
54
-
55
- <table>
56
- <tbody>
57
- <tr>
58
- <td class="p">Domains</td>
59
- <td class="p">
60
- {{ company.domains.join(", ") }}
61
- </td>
62
- </tr>
63
- <tr>
64
- <td class="p">SSO Enabled</td>
65
- <td class="p">
66
- {{ company.sso_enabled }}
67
- </td>
68
- </tr>
69
- <tr>
70
- <td class="p">Primary Contact</td>
71
- <td class="p">
72
- {{ company.primary_contact?.name }}
73
- </td>
74
- </tr>
75
- <tr>
76
- <td class="p">Primary Contact Email</td>
77
- <td class="p">
78
- {{ company.primary_contact?.email }}
79
- </td>
80
- </tr>
81
- <tr>
82
- <td class="p">Primary Contact Contacted</td>
83
- <td class="p">
84
- {{ !!company.primary_contact_contacted }}
85
- </td>
86
- </tr>
87
- <tr>
88
- <td class="p">Total users</td>
89
- <td class="p">
90
- {{ company.user_count }}
91
- </td>
92
- </tr>
93
- </tbody>
94
- </table>
95
-
96
- <hr class="my-3 hr-muted" />
97
-
98
- <FormRole
99
- :form="{ roles: company.roles.map((d) => d.id) }"
100
- :readonly="true"
101
- />
102
- </div>
103
-
104
- <VTableSorter
105
- key="PShow"
106
- api="users"
107
- :json-data="jsonData"
108
- :defaults="`filter[company_id]=${id}`"
109
- :fixed-height="false"
110
- >
111
- <template #table-action>
112
- <el-button
113
- type="primary"
114
- tag="a"
115
- class="ml-2"
116
- @click="
117
- $router.push({
118
- name: `${jsonData.pageLink}.create`,
119
- query: { company_id: id },
120
- })
121
- "
122
- >
123
- <GIcon
124
- name="icon-plus"
125
- embed
126
- asis
127
- class="fill-0 mr-0.5"
128
- />
129
- Create new {{ jsonData.label }}
130
- </el-button>
131
- </template>
132
- </VTableSorter>
133
- </template>
134
-
135
- <div v-else class="absolute transform-center text-center">
136
- <GSpinner class="fill-5" />
137
- <p v-text="`Loading...`" />
138
- </div>
139
- </div>
140
- </div>
141
- </template>
142
-
143
- <script>
144
- import axios from "axios";
145
-
146
- export default {
147
- name: "PShow",
148
-
149
- components: {
150
- VBreadcrumbs: require("../../../components/VBreadcrumbs.vue").default,
151
- VTableSorter: require("../../../components/VTableSorter.vue").default,
152
- VPageHeader: require("../../../components/VPageHeader.vue").default,
153
- },
154
- props: {
155
- breadcrumbs: {
156
- type: Array,
157
- required: true,
158
- },
159
- },
160
-
161
- data() {
162
- return {
163
- processing: false,
164
- company: null,
165
- id: null,
166
- addBreadcrumbs: [...this.$props.breadcrumbs],
167
- jsonData: {
168
- label: "user",
169
- multiLabel: "users",
170
- pageLink: "users",
171
- api: "/api/users",
172
- searchable: {
173
- label: "Search users",
174
- value: "name",
175
- },
176
- tableStructure: [
177
- {
178
- label: "Name",
179
- key: "name",
180
- sortable: true,
181
- },
182
- {
183
- label: "Email",
184
- key: "email",
185
- sortable: true,
186
- },
187
- {
188
- label: "Role",
189
- component: {
190
- module: (row) => {
191
- if (
192
- !row.overrides_roles_and_permissions ||
193
- row.roles.length === 1
194
- )
195
- return require("../../../components/Chip.vue")
196
- .default;
197
-
198
- return require("../../../components/Chips.vue")
199
- .default;
200
- },
201
- props: (row) => {
202
- if (!row.overrides_roles_and_permissions)
203
- return {
204
- name: "inherited",
205
- label: "Inherited",
206
- };
207
-
208
- return row.roles.length === 1
209
- ? {
210
- name: row.roles[0].name,
211
- label: row.roles[0].label,
212
- }
213
- : { array: row.roles };
214
- },
215
- },
216
- },
217
- ],
218
- },
219
- };
220
- },
221
-
222
- mounted() {
223
- this.id = this.$route.params.id;
224
-
225
- axios
226
- .get(`/api/companies/${this.id}?include=primary_contact`)
227
- .then((res) => {
228
- this.company = res.data.data;
229
- this.addBreadcrumbs.push({
230
- href: {
231
- name: "companies.show",
232
- param: this.company.id,
233
- },
234
- text: this.company.name,
235
- });
236
- });
237
- },
238
-
239
- methods: {
240
- async sendWelcome() {
241
- try {
242
- const res = await axios.post(
243
- `/api/companies/${this.id}/welcome`,
244
- );
245
- this.$notify({
246
- title: "Success",
247
- message: res.data.message,
248
- type: "success",
249
- });
250
-
251
- this.company.primary_contact_contacted = true;
252
- } catch (e) {
253
- this.$notify({
254
- title: "Warning",
255
- message: e.response?.data?.message || e.message,
256
- type: "warning",
257
- });
258
- }
259
- },
260
- },
261
- };
262
- </script>
@@ -1,36 +0,0 @@
1
- <template>
2
- <PageTitle title="Companies" />
3
-
4
- <router-view :key="$route.path" :breadcrumbs="breadcrumbs" />
5
- </template>
6
-
7
- <script>
8
- import PageTitle from "../../../../components/layout/pageTitle.vue";
9
-
10
- export default {
11
- name: "PCompanies",
12
-
13
- components: {
14
- PageTitle,
15
- },
16
-
17
- data() {
18
- return {
19
- breadcrumbs: [
20
- {
21
- href: {
22
- name: "index",
23
- },
24
- text: "Home",
25
- },
26
- {
27
- href: {
28
- name: "companies.index",
29
- },
30
- text: "Companies",
31
- },
32
- ],
33
- };
34
- },
35
- };
36
- </script>
@@ -1,112 +0,0 @@
1
- <template>
2
- <VBreadcrumbs :items="breadcrumbs" class="mb-8" container-classes="m-0" />
3
-
4
- <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
5
- <div class="grid__1/1">
6
- <div class="grid__1/1 mb-4">
7
- <h2 class="h1">Create User</h2>
8
- </div>
9
- <div class="grid__1/2">
10
- <XForm ref="form" :form="form" :submit="submit" />
11
- </div>
12
- </div>
13
- </div>
14
- </template>
15
-
16
- <script>
17
- import { ElMessageBox } from "element-plus";
18
- import Form from "form-backend-validation";
19
-
20
- export default {
21
- name: "PCreate",
22
-
23
- components: {
24
- VBreadcrumbs: require("../../../components/VBreadcrumbs.vue").default,
25
- XForm: require("./partials/form.vue").default,
26
- },
27
-
28
- props: {
29
- breadcrumbs: {
30
- type: Array,
31
- required: true,
32
- },
33
- },
34
-
35
- data() {
36
- return {
37
- form: new Form(
38
- {
39
- name: null,
40
- email: null,
41
- roles: [],
42
- notify_user: true,
43
- company_id: null,
44
- force_password_change: true,
45
- set_password: true,
46
- password: null,
47
- password_confirmation: null,
48
- },
49
- {
50
- resetOnSuccess: false,
51
- },
52
- ),
53
- };
54
- },
55
-
56
- methods: {
57
- generatePassword(
58
- length = 20,
59
- characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$",
60
- ) {
61
- return Array.from(crypto.getRandomValues(new Uint32Array(length)))
62
- .map((x) => characters[x % characters.length])
63
- .join("");
64
- },
65
- async submit() {
66
- try {
67
- if (this.form.set_password) {
68
- const password = this.generatePassword();
69
- this.form.password = password;
70
- this.form.password_confirmation = password;
71
- }
72
-
73
- let res = await this.form.post(`/api/users`);
74
-
75
- if (!this.form.set_password) {
76
- this.open(res.data.id);
77
- } else {
78
- this.$notify({
79
- title: "Success",
80
- message: "User created a notified of their new account",
81
- type: "success",
82
- });
83
-
84
- this.$router.replace({
85
- name: "users.show",
86
- params: { id: res.data.id },
87
- });
88
- }
89
- } catch (e) {
90
- this.$root.errors(e);
91
- }
92
- },
93
- open(id) {
94
- ElMessageBox.alert(
95
- `<p>The password below will not be shown again. Ensure you've taken a copy if you plan to send manually. <br><br><strong>Email</strong>: ${this.form.email}<br> <strong>Password</strong>: ${this.form.password}</p>`,
96
- "User Created",
97
- {
98
- confirmButtonText: "Ok",
99
- dangerouslyUseHTMLString: true,
100
- },
101
- )
102
- .then(() => {
103
- this.$router.replace({
104
- name: "users.show",
105
- params: { id },
106
- });
107
- })
108
- .catch(() => {});
109
- },
110
- },
111
- };
112
- </script>