mirror of
				https://github.com/creativetimofficial/vue-material-kit.git
				synced 2025-10-31 21:26:11 +08:00 
			
		
		
		
	qwqwqwqw2q
This commit is contained in:
		
							parent
							
								
									be2359d05a
								
							
						
					
					
						commit
						3f3d99f7e7
					
				| @ -0,0 +1,177 @@ | ||||
| <script setup> | ||||
| import axios from 'axios'; | ||||
| import { onMounted, ref, computed } from "vue"; | ||||
| import NavbarDefault from "../../../examples/navbars/NavbarDefault.vue"; | ||||
| import { useRouter } from "vue-router"; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| const isAuthenticated = computed(() => !!sessionStorage.getItem('access_token')); | ||||
| const userId = computed(() => sessionStorage.getItem('user_id')); | ||||
| const loggedUserName = computed(() => sessionStorage.getItem('username')); | ||||
| const token = computed(() => sessionStorage.getItem('access_token')); | ||||
| 
 | ||||
| const profileData = ref([]); | ||||
| const router = useRouter(); | ||||
| 
 | ||||
| const debugText = ref(''); | ||||
| 
 | ||||
| 
 | ||||
| const getProfile = async () => { | ||||
|     const profileDataRecieved = await axios.get(`http://somebodyhire.me/api/profile/${userId.value}/`); | ||||
|     profileData.value = processProfileData(profileDataRecieved.data); | ||||
| }; | ||||
| 
 | ||||
| const processProfileData = (data) => { | ||||
|     return { | ||||
|         ...data, | ||||
|         name: data.name || '🤷 No Name Provided', | ||||
|         location: data.location || '🌍 No Location Provided', | ||||
|         short_intro: data.short_intro || '📝 No Short Intro Provided', | ||||
|         bio: data.bio || '📘 No Bio Provided', | ||||
|         profile_image: data.profile_image || '📷 No Image Provided', | ||||
|         social_github: data.social_github || '👨💻 No Github Provided', | ||||
|         social_twitter: data.social_twitter || '🐦 No Twitter Provided', | ||||
|         social_vk: data.social_vk || '🔵 No VK Provided', | ||||
|         social_youtube: data.social_youtube || '▶️ No YouTube Provided', | ||||
|         social_website: data.social_website || '🌐 No Website Provided', | ||||
|     }; | ||||
| }; | ||||
| 
 | ||||
| // Axios request and response interceptors | ||||
| axios.interceptors.request.use((request) => { | ||||
|   debugText.value += '\n\nRequest:\n' + JSON.stringify(request, null, 2); | ||||
|   return request; | ||||
| }); | ||||
| 
 | ||||
| axios.interceptors.response.use((response) => { | ||||
|   debugText.value += '\n\nResponse:\n' + JSON.stringify(response, null, 2); | ||||
|   return response; | ||||
| }, (error) => { | ||||
|   debugText.value += '\n\nResponse Error:\n' + JSON.stringify(error.toJSON(), null, 2); | ||||
|   return Promise.reject(error); | ||||
| }); | ||||
| 
 | ||||
| const updateProfile = async () => { | ||||
|     try { | ||||
|         const token = computed(() => sessionStorage.getItem('access_token')); | ||||
|         debugText.value = `Type of token: ${typeof token.value}, Value of token: ${token.value}`; | ||||
|         const headers = { 'Authorization': `Bearer ${token.value}` }; | ||||
|         await axios.put(`http://somebodyhire.me/api/profile/${userId.value}/`, profileData.value, { headers }); | ||||
|         router.push('/ViewMyProfile'); | ||||
|     } catch (error) { | ||||
|         debugText.value = `Error: ${JSON.stringify(error, null, 2)}`; | ||||
|         console.error(error); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| const cancelUpdate = () => { | ||||
|     router.push('/ViewMyProfile'); | ||||
| }; | ||||
| 
 | ||||
| onMounted(async() => { | ||||
|     await getProfile(); | ||||
| }); | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <script> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| 
 | ||||
| <template> | ||||
|     <NavbarDefault /> | ||||
|     <div class="profile-container"> | ||||
|       <h1>Профиль пользователя {{ loggedUserName }}</h1> | ||||
|         <textarea readonly v-model="debugText"></textarea> | ||||
|         <input type="text" v-model="profileData.username" placeholder="Username"> | ||||
|         <input type="email" v-model="profileData.email" placeholder="Email"> | ||||
|         <input type="text" v-model="profileData.name" placeholder="Имя"> | ||||
|         <input type="text" v-model="profileData.short_intro" placeholder="Краткое описание"> | ||||
|         <textarea v-model="profileData.bio" placeholder="Биография"></textarea> | ||||
|         <textarea v-model="profileData.profile_image" placeholder="Ссылка на изображение"></textarea> | ||||
|         <textarea v-model="profileData.social_github" placeholder="Ссылка на GitHub"></textarea> | ||||
|         <textarea v-model="profileData.social_twitter" placeholder="Ссылка на Twitter"></textarea> | ||||
|         <textarea v-model="profileData.social_vk" placeholder="Ссылка на VK"></textarea> | ||||
|         <textarea v-model="profileData.social_youtube" placeholder="Ссылка на YouTube"></textarea> | ||||
|         <textarea v-model="profileData.social_website" placeholder="Ссылка на сайт"></textarea> | ||||
|         <button @click="updateProfile" class="btn-submit">Submit</button> | ||||
|         <button @click="cancelUpdate" class="btn-cancel">Cancel</button> | ||||
|     </div> | ||||
| 
 | ||||
| 
 | ||||
| </template> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <style scoped> | ||||
| .profile-container { | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   align-items: center; | ||||
|   width: 80%; | ||||
|   margin: auto; | ||||
|   padding: 20px; | ||||
|   box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.1); | ||||
| } | ||||
| 
 | ||||
| .profile-container img { | ||||
|   width: 100px; | ||||
|   height: 100px; | ||||
|   border-radius: 50%; | ||||
|   object-fit: cover; | ||||
|   margin-bottom: 20px; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| .profile-container input, .profile-container textarea { | ||||
|   width: 100%; /* Make inputs and textareas take up the full width of the container */ | ||||
|   padding: 10px; /* Add some padding */ | ||||
|   margin-bottom: 15px; /* Add some margin */ | ||||
|   box-sizing: border-box; /* Ensure padding doesn't affect final dimensions */ | ||||
|   border: 1px solid #ccc; /* Add a border */ | ||||
|   border-radius: 5px; /* Add rounded corners */ | ||||
| } | ||||
| 
 | ||||
| /* Style for smaller screens */ | ||||
| @media (max-width: 768px) { | ||||
|   .profile-container { | ||||
|     width: 95%; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| .btn-submit { | ||||
|     color: #fff; | ||||
|     background-color: #4CAF50; | ||||
|     border: none; | ||||
|     padding: 15px 32px; | ||||
|     text-align: center; | ||||
|     text-decoration: none; | ||||
|     display: inline-block; | ||||
|     font-size: 16px; | ||||
|     margin: 4px 2px; | ||||
|     cursor: pointer; | ||||
|     border-radius: 5px; | ||||
| } | ||||
| 
 | ||||
| .btn-cancel { | ||||
|     color: #fff; | ||||
|     background-color: #f44336; | ||||
|     border: none; | ||||
|     padding: 15px 32px; | ||||
|     text-align: center; | ||||
|     text-decoration: none; | ||||
|     display: inline-block; | ||||
|     font-size: 16px; | ||||
|     margin: 4px 2px; | ||||
|     cursor: pointer; | ||||
|     border-radius: 5px; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										0
									
								
								src/views/LandingPages/Project/AddProject.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/views/LandingPages/Project/AddProject.vue
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								src/views/LandingPages/Project/EditProject.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/views/LandingPages/Project/EditProject.vue
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								src/views/LandingPages/Project/ViewProject.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/views/LandingPages/Project/ViewProject.vue
									
									
									
									
									
										Normal file
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 FEARmeR
						FEARmeR