diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 8b1ecb25..571536d0 100644 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -251,6 +251,7 @@ class CompanyController extends Controller } return response()->json([ + 'user' => $user, 'success' => true ]); } diff --git a/app/Http/Controllers/OnboardingController.php b/app/Http/Controllers/OnboardingController.php index ddb69ad9..d6e55620 100644 --- a/app/Http/Controllers/OnboardingController.php +++ b/app/Http/Controllers/OnboardingController.php @@ -99,6 +99,32 @@ class OnboardingController extends Controller ]); } + public function uploadAdminAvatar(Request $request) + { + $setting = Setting::getSetting('profile_complete'); + + if ($setting == '1' || $setting == 'COMPLETED') { + return response()->json(['error' => 'Profile already created.']); + } + $data = json_decode($request->admin_avatar); + + if($data) { + $user = User::find($data->id); + if($user) { + $user->clearMediaCollection('admin_avatar'); + + $user->addMediaFromBase64($data->data) + ->usingFileName($data->name) + ->toMediaCollection('admin_avatar'); + } + } + + return response()->json([ + 'user' => $user, + 'success' => true + ]); + } + public function adminCompany(CompanyRequest $request) { $setting = Setting::getSetting('profile_complete'); diff --git a/resources/assets/js/plugins/en.js b/resources/assets/js/plugins/en.js index 73cf28af..d45ba227 100644 --- a/resources/assets/js/plugins/en.js +++ b/resources/assets/js/plugins/en.js @@ -603,6 +603,7 @@ export default { updated_message: 'Company information updated successfully' }, account_settings: { + profile_picture: 'Profile Picture', name: 'Name', email: 'Email', password: 'Password', diff --git a/resources/assets/js/plugins/es.js b/resources/assets/js/plugins/es.js index 0535b5c9..8b538215 100644 --- a/resources/assets/js/plugins/es.js +++ b/resources/assets/js/plugins/es.js @@ -599,6 +599,7 @@ export default { updated_message: 'Información de la empresa actualizada con éxito' }, account_settings: { + profile_picture: 'Foto de perfil', name: 'Nombre', email: 'Email', password: 'Contraseña', diff --git a/resources/assets/js/plugins/fr.js b/resources/assets/js/plugins/fr.js index 1a8a11cf..de90546d 100644 --- a/resources/assets/js/plugins/fr.js +++ b/resources/assets/js/plugins/fr.js @@ -599,6 +599,7 @@ export default { updated_message: 'Informations sur la société mises à jour avec succès' }, account_settings: { + profile_picture: 'Image de profil', name: 'Nom', email: 'Email', password: 'Mot de passe', diff --git a/resources/assets/js/store/modules/settings/company-info/actions.js b/resources/assets/js/store/modules/settings/company-info/actions.js index 712cc7a4..8991bed4 100644 --- a/resources/assets/js/store/modules/settings/company-info/actions.js +++ b/resources/assets/js/store/modules/settings/company-info/actions.js @@ -12,11 +12,7 @@ export const loadData = ({ commit, dispatch, state }, id) => { export const editCompany = ({ commit, dispatch, state }, data) => { return new Promise((resolve, reject) => { - window.axios.post('/api/settings/company', data, { - headers: { - 'Content-Type': 'multipart/form-data' - } - }).then((response) => { + window.axios.post('/api/settings/company', data).then((response) => { // commit(types.UPDATE_ITEM, response.data) resolve(response) }).catch((err) => { diff --git a/resources/assets/js/store/modules/settings/user-profile/actions.js b/resources/assets/js/store/modules/settings/user-profile/actions.js index 842ed9a2..0269b5c8 100644 --- a/resources/assets/js/store/modules/settings/user-profile/actions.js +++ b/resources/assets/js/store/modules/settings/user-profile/actions.js @@ -1,8 +1,9 @@ -// import * as types from './mutation-types' +import * as types from './mutation-types' export const loadData = ({ commit, dispatch, state }, id) => { return new Promise((resolve, reject) => { window.axios.get(`/api/settings/profile`).then((response) => { + commit(types.SET_USER, response.data) resolve(response) }).catch((err) => { reject(err) @@ -13,7 +14,29 @@ export const loadData = ({ commit, dispatch, state }, id) => { export const editUser = ({ commit, dispatch, state }, data) => { return new Promise((resolve, reject) => { window.axios.put('/api/settings/profile', data).then((response) => { - // commit(types.UPDATE_USER, response.data) + commit(types.UPDATE_USER, response.data) + resolve(response) + }).catch((err) => { + reject(err) + }) + }) +} + +export const uploadOnboardAvatar = ({ commit, dispatch, state }, data) => { + return new Promise((resolve, reject) => { + window.axios.post(`/api/admin/profile/upload-avatar`, data).then((response) => { + commit(types.UPDATE_USER, response.data.user) + resolve(response) + }).catch((err) => { + reject(err) + }) + }) +} + +export const uploadAvatar = ({ commit, dispatch, state }, data) => { + return new Promise((resolve, reject) => { + window.axios.post('/api/settings/profile/upload-avatar', data).then((response) => { + commit(types.UPDATE_USER, response.data.user) resolve(response) }).catch((err) => { reject(err) diff --git a/resources/assets/js/store/modules/settings/user-profile/mutation-types.js b/resources/assets/js/store/modules/settings/user-profile/mutation-types.js index 47bfc3f7..d13ad92a 100644 --- a/resources/assets/js/store/modules/settings/user-profile/mutation-types.js +++ b/resources/assets/js/store/modules/settings/user-profile/mutation-types.js @@ -1,2 +1,3 @@ export const SET_USER = 'SET_USER' export const UPDATE_USER = 'UPDATE_USER' +export const UPDATE_USER_AVATAR = 'UPDATE_USER_AVATAR' diff --git a/resources/assets/js/store/modules/settings/user-profile/mutations.js b/resources/assets/js/store/modules/settings/user-profile/mutations.js index a92b9e87..5453b33e 100644 --- a/resources/assets/js/store/modules/settings/user-profile/mutations.js +++ b/resources/assets/js/store/modules/settings/user-profile/mutations.js @@ -2,10 +2,14 @@ import * as types from './mutation-types' export default { [types.SET_USER] (state, data) { - state.user = data.user + state.user = data }, [types.UPDATE_USER] (state, data) { state.user = data + }, + + [types.UPDATE_USER_AVATAR] (state, data) { + state.user.avatar = data.avatar } } diff --git a/resources/assets/js/views/layouts/partials/TheSiteHeader.vue b/resources/assets/js/views/layouts/partials/TheSiteHeader.vue index 8a6c82be..f1259ec1 100644 --- a/resources/assets/js/views/layouts/partials/TheSiteHeader.vue +++ b/resources/assets/js/views/layouts/partials/TheSiteHeader.vue @@ -58,7 +58,7 @@ aria-expanded="false" class="avatar" > - Avatar + Avatar @@ -83,7 +83,25 @@ import { mapGetters, mapActions } from 'vuex' export default { + computed: { + ...mapGetters('userProfile', [ + 'user' + ]), + ProfilePicture () { + if (this.user && this.user.avatar !== null) { + return this.user.avatar + } else { + return '/images/default-avatar.jpg' + } + } + }, + created () { + this.loadData() + }, methods: { + ...mapActions('userProfile', [ + 'loadData' + ]), ...mapActions({ companySelect: 'changeCompany' }), diff --git a/resources/assets/js/views/settings/CompanyInfo.vue b/resources/assets/js/views/settings/CompanyInfo.vue index 3ee7f303..fae1d34c 100644 --- a/resources/assets/js/views/settings/CompanyInfo.vue +++ b/resources/assets/js/views/settings/CompanyInfo.vue @@ -12,6 +12,9 @@
+
+ +
@@ -174,7 +177,6 @@ export default { isFetchingData: false, formData: { name: null, - logo: '', email: '', phone: '', zip: '', @@ -301,17 +303,8 @@ export default { return true } this.isLoading = true - let data = new FormData() - data.append('name', this.formData.name) - data.append('address_street_1', this.formData.address_street_1) - data.append('address_street_2', this.formData.address_street_2) - data.append('city_id', this.formData.city_id) - data.append('state_id', this.formData.state_id) - data.append('country_id', this.formData.country_id) - data.append('zip', this.formData.zip) - data.append('phone', this.formData.phone) - let response = await this.editCompany(data) + let response = await this.editCompany(this.formData) if (response.data.success) { this.isLoading = false if (this.fileObject && this.previewLogo) { diff --git a/resources/assets/js/views/settings/UserProfile.vue b/resources/assets/js/views/settings/UserProfile.vue index 18cb084c..a9bedba0 100644 --- a/resources/assets/js/views/settings/UserProfile.vue +++ b/resources/assets/js/views/settings/UserProfile.vue @@ -8,6 +8,31 @@ {{ $t('settings.account_settings.section_description') }}

+
+
+ +
+
+ +
+ +
+ +

{{ $tc('general.choose_file') }}

+
+
+
+ +
@@ -81,19 +106,33 @@