Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

1 linha
26 KiB

  1. {"ast":null,"code":"import { ref, watch, toRef } from \"vue\";\nimport axios from \"axios\";\nimport Swal from \"sweetalert2\";\nimport { toast } from \"vue3-toastify\";\nexport default {\n props: {\n mobile: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n role: {\n type: String,\n required: true\n },\n id: {\n type: String,\n required: true\n },\n access: {\n type: Array,\n required: true\n }\n },\n setup(props, {\n emit\n }) {\n const localName = toRef(props.name);\n const localMobile = toRef(props.mobile);\n const Password = toRef(props.password);\n const localRole = toRef(props.role);\n const localAccess = toRef([props.access]);\n const localId = toRef(props.id);\n // Watch for prop changes to update local state\n watch(() => props.name, newVal => localName.value = newVal);\n watch(() => props.mobile, newVal => localMobile.value = newVal);\n watch(() => props.role, newVal => localRole.value = newVal);\n watch(() => props.access, newVal => {\n localAccess.value = newVal;\n });\n watch(() => props.id, newVal => localId.value = newVal);\n const errors = ref({});\n const loading = ref(false);\n const url = process.env.VUE_APP_ROOT_URL;\n const token = localStorage.getItem(\"token\");\n const validateForm = () => {\n errors.value = {};\n if (!localName.value) errors.value.localName = \"وارد کردن نام الزامی می باشد\";\n if (!localMobile.value) errors.value.localMobile = \"وارد کردن شماره موبایل الزامی می باشد\";\n if (!localRole.value) errors.value.localRole = \"انتخاب نوع کاربر الزامی است\";\n return Object.keys(errors.value).length === 0;\n };\n const clearError = field => {\n errors.value[field] = \"\";\n };\n const toggleAccess = (permission, isChecked) => {\n // Ensure localAccess is an array and not a stringified array or anything else\n if (typeof localAccess.value === 'string') {\n // If it's a stringified array, parse it back into an array\n try {\n localAccess.value = JSON.parse(localAccess.value);\n } catch (e) {\n console.error(\"Failed to parse stringified localAccess: \", e);\n localAccess.value = []; // Reset to empty array in case of error\n }\n }\n\n // Ensure it's still an array after parsing (or initializing)\n if (!Array.isArray(localAccess.value)) {\n localAccess.value = [];\n }\n\n // Add or remove permission based on whether the checkbox is checked\n if (isChecked) {\n if (!localAccess.value.includes(permission)) {\n localAccess.value = [...localAccess.value, permission];\n }\n } else {\n localAccess.value = localAccess.value.filter(item => item !== permission);\n }\n };\n const editUser = async () => {\n if (!validateForm()) return;\n loading.value = true;\n console.log(localAccess.value);\n try {\n const formData = new FormData();\n formData.append(\"name\", localName.value);\n formData.append(\"mobile\", localMobile.value);\n if (Password.value) {\n formData.append(\"password\", Password.value);\n }\n formData.append(\"role\", localRole.value);\n formData.append(\"id\", localId.value);\n if (Array.isArray(localAccess.value)) {\n localAccess.value.forEach(item => {\n formData.append(\"access[]\", item);\n });\n } else {\n console.error(\"localAccess.value is not an array\", localAccess.value);\n }\n const response = await axios.post(`${url}/admin/edit-user`, formData, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token} `\n }\n });\n console.log(response);\n if (response.data.status == true) {\n toast.success(\"کاربر با موفقیت ویرایش شد!\", {\n position: \"top-right\",\n autoClose: 1000,\n onClose: () => emit(\"user-updated\")\n });\n } else {\n Swal.fire({\n icon: \"error\",\n title: \"خطا\",\n text: \"ویرایش کاربر با مشکل مواجه شد. لطفا دوباره امتحان کنید.\"\n });\n }\n } catch (error) {\n console.log(error);\n Swal.fire({\n icon: \"error\",\n title: \"خطا\",\n text: `ویرایش کاربر با مشکل مواجه شد`\n });\n } finally {\n loading.value = false;\n }\n };\n return {\n localName,\n localMobile,\n Password,\n localRole,\n localAccess,\n errors,\n loading,\n clearError,\n editUser,\n toggleAccess\n };\n }\n};","map":{"version":3,"names":["ref","watch","toRef","axios","Swal","toast","props","mobile","type","String","required","name","role","id","access","Array","setup","emit","localName","localMobile","Password","password","localRole","localAccess","localId","newVal","value","errors","loading","url","process","env","VUE_APP_ROOT_URL","token","localStorage","getItem","validateForm","Object","keys","length","clearError","field","toggleAccess","permission","isChecked","JSON","parse","e","console","error","isArray","includes","filter","item","editUser","log","formData","FormData","append","forEach","response","post","headers","Authorization","data","status","success","position","autoClose","onClose","fire","icon","title","text"],"sources":["C:\\Users\\hp\\Desktop\\satari\\Vue\\Admin\\src\\components\\modals\\editUser.vue"],"sourcesContent":["<template>\r\n <div\r\n class=\"modal fade\"\r\n id=\"editUser\"\r\n tabindex=\"-1\"\r\n role=\"dialog\"\r\n aria-labelledby=\"exampleModalLabel\"\r\n aria-hidden=\"false\"\r\n >\r\n <div class=\"modal-dialog modal-sm\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\">ویرایش کردن کاربر</h5>\r\n <button\r\n type=\"button\"\r\n class=\"btn-close\"\r\n data-bs-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <form @submit.prevent=\"editUser\">\r\n <BRow class=\"g-3\">\r\n <!-- Form fields -->\r\n <BCol class=\"col-lg-6\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">نام </label>\r\n <input\r\n v-model=\"localName\"\r\n @input=\"clearError('name')\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"نام کاربر را وارد نمایید\"\r\n />\r\n <small v-if=\"errors.name\" class=\"text-danger\">{{\r\n errors.name\r\n }}</small>\r\n </div>\r\n </BCol>\r\n\r\n <BCol class=\"col-lg-6\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">موبایل</label>\r\n <input\r\n v-model=\"localMobile\"\r\n @input=\"clearError('mobile')\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"شماره موبایل کاربر را وارد نمایید\"\r\n />\r\n <small v-if=\"errors.mobile\" class=\"text-danger\">{{\r\n errors.mobile\r\n }}</small>\r\n </div>\r\n </BCol>\r\n </BRow>\r\n\r\n <BRow class=\"g-3\">\r\n <!-- User Type -->\r\n <BCol class=\"col-lg-6\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">نوع کاربر</label>\r\n <div class=\"input-group\">\r\n <select\r\n v-if=\"localRole != 0\"\r\n class=\"form-select\"\r\n v-model=\"localRole\"\r\n @change=\"clearError('role')\"\r\n >\r\n <option disabled value=\"\">نوع کاربر</option>\r\n <option value=\"1\">کاربر</option>\r\n <option value=\"2\">اپراتور</option>\r\n </select>\r\n <select\r\n v-else-if=\"localRole == 0\"\r\n class=\"form-select\"\r\n v-model=\"localRole\"\r\n @change=\"clearError('role')\"\r\n >\r\n <option disabled value=\"\">نوع کاربر</option>\r\n <option value=\"1\">کاربر</option>\r\n <option value=\"2\">اپراتور</option>\r\n <option value=\"0\">مدیر</option>\r\n </select>\r\n </div>\r\n <small v-if=\"errors.role\" class=\"text-danger\">{{\r\n errors.role\r\n }}</small>\r\n </div>\r\n </BCol>\r\n\r\n <BCol class=\"col-lg-6\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">رمز عبور</label>\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text\">\r\n <i class=\"feather icon-lock\"></i>\r\n </span>\r\n <input\r\n v-model=\"Password\"\r\n @input=\"clearError('password')\"\r\n type=\"password\"\r\n class=\"form-control\"\r\n placeholder=\"رمز عبور خود را وارد نمایید\"\r\n />\r\n </div>\r\n <small v-if=\"errors.password\" class=\"text-danger\">{{\r\n errors.password\r\n }}</small>\r\n </div>\r\n </BCol>\r\n </BRow>\r\n\r\n <BCard v-if=\"localRole == `2`\" class=\"p-4\">\r\n <!-- Access Checkboxes -->\r\n <BRow class=\"g-3 justify-content-center\">\r\n <BCol cols=\"6\" class=\"d-flex\">\r\n <BFormCheckbox\r\n class=\"ml-3\"\r\n :checked=\"localAccess?.includes('user')\"\r\n @change=\"toggleAccess('user')\"\r\n >دسترسی به کاربران</BFormCheckbox\r\n >\r\n </BCol>\r\n <BCol cols=\"6\" class=\"d-flex\">\r\n <BFormCheckbox\r\n class=\"ml-3\"\r\n :checked=\"localAccess?.includes('subjects')\"\r\n @change=\"toggleAccess('subjects')\"\r\n >دسترسی به موضوع ها</BFormCheckbox\r\n >\r\n </BCol>\r\n <BCol cols=\"6\" class=\"d-flex\">\r\n <BFormCheckbox\r\n class=\"ml-3\"\r\n :checked=\"localAccess?.includes('locations')\"\r\n @change=\"toggleAccess('locations')\"\r\n >دسترسی به موقعیت ها</BFormCheckbox\r\n >\r\n </BCol>\r\n <BCol cols=\"6\" class=\"d-flex\">\r\n <BFormCheckbox\r\n class=\"ml-3\"\r\n :checked=\"localAccess?.includes('meeting')\"\r\n @change=\"toggleAccess('meeting')\"\r\n >دسترسی به جلسات</BFormCheckbox\r\n >\r\n </BCol>\r\n <BCol cols=\"6\" class=\"d-flex\">\r\n <BFormCheckbox\r\n class=\"ml-3\"\r\n :checked=\"localAccess?.includes('private_meeting')\"\r\n @change=\"toggleAccess('private_meeting')\"\r\n >دسترسی به جلسات شخصی</BFormCheckbox\r\n >\r\n </BCol>\r\n <BCol cols=\"6\" class=\"d-flex\">\r\n <BFormCheckbox\r\n class=\"ml-3\"\r\n :checked=\"localAccess?.includes('note')\"\r\n @change=\"toggleAccess('note')\"\r\n >دسترسی به یاد داشت ها</BFormCheckbox\r\n >\r\n </BCol>\r\n </BRow>\r\n </BCard>\r\n\r\n <!-- Submit Buttons -->\r\n <div\r\n class=\"d-flex justify-content-end gap-2\"\r\n style=\"margin-top: 20px\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary\"\r\n data-bs-dismiss=\"modal\"\r\n >\r\n بستن\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary\" :disabled=\"loading\">\r\n <span\r\n v-if=\"loading\"\r\n class=\"spinner-border spinner-border-sm\"\r\n role=\"status\"\r\n ></span>\r\n ذخیره\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { ref, watch, toRef } from \"vue\";\r\nimport axios from \"axios\";\r\nimport Swal from \"sweetalert2\";\r\nimport { toast } from \"vue3-toastify\";\r\n\r\nexport default {\r\n props: {\r\n mobile: {\r\n type: String,\r\n required: true,\r\n },\r\n name: {\r\n type: String,\r\n required: true,\r\n },\r\n role: {\r\n type: String,\r\n required: true,\r\n },\r\n id: {\r\n type: String,\r\n required: true,\r\n },\r\n access: {\r\n type: Array,\r\n required: true,\r\n },\r\n },\r\n setup(props, { emit }) {\r\n const localName = toRef(props.name);\r\n const localMobile = toRef(props.mobile);\r\n const Password = toRef(props.password);\r\n const localRole = toRef(props.role);\r\n const localAccess = toRef([props.access]);\r\n const localId = toRef(props.id);\r\n // Watch for prop changes to update local state\r\n watch(\r\n () => props.name,\r\n (newVal) => (localName.value = newVal)\r\n );\r\n watch(\r\n () => props.mobile,\r\n (newVal) => (localMobile.value = newVal)\r\n );\r\n watch(\r\n () => props.role,\r\n (newVal) => (localRole.value = newVal)\r\n );\r\n watch(\r\n () => props.access,\r\n (newVal) => {\r\n localAccess.value = newVal;\r\n }\r\n );\r\n watch(\r\n () => props.id,\r\n (newVal) => (localId.value = newVal)\r\n );\r\n\r\n const errors = ref({});\r\n const loading = ref(false);\r\n const url = process.env.VUE_APP_ROOT_URL;\r\n const token = localStorage.getItem(\"token\");\r\n\r\n const validateForm = () => {\r\n errors.value = {};\r\n if (!localName.value)\r\n errors.value.localName = \"وارد کردن نام الزامی می باشد\";\r\n if (!localMobile.value)\r\n errors.value.localMobile = \"وارد کردن شماره موبایل الزامی می باشد\";\r\n if (!localRole.value)\r\n errors.value.localRole = \"انتخاب نوع کاربر الزامی است\";\r\n return Object.keys(errors.value).length === 0;\r\n };\r\n\r\n const clearError = (field) => {\r\n errors.value[field] = \"\";\r\n };\r\n\r\n const toggleAccess = (permission, isChecked) => {\r\n // Ensure localAccess is an array and not a stringified array or anything else\r\n if (typeof localAccess.value === 'string') {\r\n // If it's a stringified array, parse it back into an array\r\n try {\r\n localAccess.value = JSON.parse(localAccess.value);\r\n } catch (e) {\r\n console.error(\"Failed to parse stringified localAccess: \", e);\r\n localAccess.value = []; // Reset to empty array in case of error\r\n }\r\n }\r\n\r\n // Ensure it's still an array after parsing (or initializing)\r\n if (!Array.isArray(localAccess.value)) {\r\n localAccess.value = [];\r\n }\r\n\r\n // Add or remove permission based on whether the checkbox is checked\r\n if (isChecked) {\r\n if (!localAccess.value.includes(permission)) {\r\n localAccess.value = [...localAccess.value, permission];\r\n }\r\n } else {\r\n localAccess.value = localAccess.value.filter((item) => item !== permission);\r\n }\r\n};\r\n\r\n\r\n const editUser = async () => {\r\n if (!validateForm()) return;\r\n loading.value = true;\r\n console.log(localAccess.value)\r\n try {\r\n const formData = new FormData();\r\n formData.append(\"name\", localName.value);\r\n formData.append(\"mobile\", localMobile.value);\r\n if (Password.value) {\r\n formData.append(\"password\", Password.value);\r\n }\r\n formData.append(\"role\", localRole.value);\r\n formData.append(\"id\", localId.value);\r\n if (Array.isArray(localAccess.value)) {\r\n localAccess.value.forEach((item) => {\r\n formData.append(\"access[]\", item);\r\n });\r\n } else {\r\n console.error(\"localAccess.value is not an array\", localAccess.value);\r\n }\r\n const response = await axios.post(`${url}/admin/edit-user`, formData, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${token} `,\r\n },\r\n });\r\n console.log(response);\r\n\r\n if (response.data.status == true) {\r\n toast.success(\"کاربر با موفقیت ویرایش شد!\", {\r\n position: \"top-right\",\r\n autoClose: 1000,\r\n onClose: () => emit(\"user-updated\"),\r\n });\r\n } else {\r\n Swal.fire({\r\n icon: \"error\",\r\n title: \"خطا\",\r\n text: \"ویرایش کاربر با مشکل مواجه شد. لطفا دوباره امتحان کنید.\",\r\n });\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n Swal.fire({\r\n icon: \"error\",\r\n title: \"خطا\",\r\n text: `ویرایش کاربر با مشکل مواجه شد`,\r\n });\r\n } finally {\r\n loading.value = false;\r\n }\r\n };\r\n\r\n return {\r\n localName,\r\n localMobile,\r\n Password,\r\n localRole,\r\n localAccess,\r\n errors,\r\n loading,\r\n clearError,\r\n editUser,\r\n toggleAccess,\r\n };\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.profile-upload-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.profile-upload-icon {\r\n font-size: 64px;\r\n color: #6c757d;\r\n border: 2px dashed #6c757d;\r\n border-radius: 50%;\r\n width: 120px;\r\n height: 120px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-bottom: 10px;\r\n}\r\n.modal-dialog {\r\n max-width: 50%;\r\n}\r\n\r\n.modal-content {\r\n padding: 20px;\r\n}\r\n\r\n.modal-header {\r\n border-bottom: 1px solid #dee2e6;\r\n}\r\n\r\n.modal-body {\r\n padding: 20px;\r\n}\r\n\r\n.form-group {\r\n margin-bottom: 1rem;\r\n}\r\n\r\n.input-group {\r\n margin-top: 0.5rem;\r\n}\r\n.profile-upload-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.profile-upload-btn {\r\n width: 50px;\r\n height: 50px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n border: 2px solid #007bff;\r\n background-color: #ffffff;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.profile-upload-btn i {\r\n font-size: 20px;\r\n color: #007bff;\r\n}\r\n\r\n.profile-image-preview {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.profile-placeholder {\r\n border: 2px dashed #007bff;\r\n}\r\n\r\n.d-none {\r\n display: none;\r\n}\r\n.profile-upload-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n.profile-upload-btn {\r\n width: 30px; /* اندازه دکمه را کوچک‌تر کنید */\r\n height: 30px;\r\n padding: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid #ccc; /* کمی خط دور دکمه برای بهتر دیده شدن */\r\n background-color: #fff;\r\n cursor: pointer;\r\n}\r\n\r\n.profile-upload-btn i {\r\n font-size: 16px; /* اندازه آیکون را کوچک‌تر کنید */\r\n color: #007bff; /* رنگ آیکون را تغییر دهید */\r\n}\r\n\r\n.profile-image-preview img,\r\n.profile-placeholder {\r\n width: 80px;\r\n height: 80px;\r\n}\r\n\r\n.profile-placeholder i {\r\n font-size: 40px;\r\n}\r\n.modal-dialog {\r\n max-width: 50%;\r\n}\r\n\r\n.modal-content {\r\n padding: 1.5rem; /* Increased padding for better spacing */\r\n}\r\n\r\n.modal-header {\r\n border-bottom: 1px solid #dee2e6;\r\n padding-bottom: 1rem; /* Added padding-bottom to separate the header from the content */\r\n}\r\n\r\n.modal-body {\r\n padding: 1rem 1.5rem; /* Adjusted padding for a more balanced layout */\r\n}\r\n\r\n.form-group {\r\n margin-bottom: 1.5rem; /* Increased margin between form groups */\r\n}\r\n\r\n.input-group {\r\n margin-top: 0.5rem;\r\n}\r\n\r\n.profile-image-preview:hover .overlay {\r\n opacity: 1;\r\n}\r\n\r\n.profile-image-preview:hover img,\r\n.profile-image-preview:hover .profile-placeholder {\r\n opacity: 0.7;\r\n}\r\n</style>\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}