somewhere

This commit is contained in:
Swift
2023-08-17 13:05:51 +03:30
parent 30c7eb0e7b
commit 53843207cc
429 changed files with 117489 additions and 1 deletions
+97
View File
@@ -0,0 +1,97 @@
<template>
<el-dialog :title="title" :visible.sync="showModal">
<div class="agentDetailsModal">
<el-form label-position="top" :model="agent">
<el-form-item label="نوع نماینده">
<el-input v-if="agent.representation_type === 'both'" disabled value="نماینده هر دو نوع لوازم"/>
<el-input v-if="agent.representation_type === 'verity'" disabled value="نماینده لوازم جانبی کامپیوتر و موبایل"/>
<el-input v-if="agent.representation_type === 'panatech'" disabled value="نماینده لوازم صوتی تصویری خودرو"/>
</el-form-item>
<el-form-item label="نام فروشگاه">
<el-input disabled :value="agent.store_name"></el-input>
</el-form-item>
<el-form-item label="کد نماینده">
<el-input disabled :value="agent.agent_code"></el-input>
</el-form-item>
<el-form-item label="نام و نام خانوادگی">
<el-input disabled :value="agent.full_name"></el-input>
</el-form-item>
<el-form-item label="شماره تلفن ثابت">
<el-input disabled :value="agent.tel_number"></el-input>
</el-form-item>
<el-form-item label="شماره فکس">
<el-input disabled :value="agent.fax_number || '-'"></el-input>
</el-form-item>
<el-form-item label="شماره موبایل">
<el-input disabled :value="agent.mobile_number"></el-input>
</el-form-item>
<el-form-item label="ایمیل">
<el-input disabled :value="agent.email"></el-input>
</el-form-item>
<el-form-item label="استان">
<el-input disabled :value="agent.province_name"></el-input>
</el-form-item>
<el-form-item label="شهر">
<el-input disabled :value="agent.city_name"></el-input>
</el-form-item>
<el-form-item label="آدرس" :title="agent.address">
<el-input disabled :value="agent.address"></el-input>
</el-form-item>
<el-form-item label="کد پستی">
<el-input disabled :value="agent.postal_code"></el-input>
</el-form-item>
</el-form>
<div class="btnRow" style="text-align: center">
<a class="btn btn-primary mb-1" :href="`tel: ${agent.mobile_number}`">تماس به همراه</a>
<a class="btn btn-primary mb-1" :href="`tel: ${agent.tel_number}`">تماس به تلفن ثابت</a>
<a class="btn btn-primary mb-1" :href="`mailto: ${agent.email}`">ایمیل</a>
<el-button class="btn btn-primary mb-1" @click="showModal = false">بستن</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'AgentDetailsModal',
props: {
show: {
type: Boolean,
default: false
},
agent: {
requred: true,
type: Object,
default: null
}
},
data() {
return {}
},
computed: {
showModal: {
get() {
return this.show
},
set(value) {
this.$emit('closeModal')
}
},
title() {
return 'اطلاعات تماس نماینده'
}
}
}
</script>
+136
View File
@@ -0,0 +1,136 @@
<template>
<el-dialog title="پیگیری وضعیت درخواست" :visible.sync="showModal">
<div v-if="!$auth.loggedIn || !$auth.hasScope('user')" class="panel not-logged-in">
<h3>
<span> برای بررسی درخواست نمایندگی باید </span>
<nuxt-link :to="{ name: 'auth-login-register', query: { path: 'representation' } }">وارد حساب کاربری</nuxt-link>
<span>خود شوید.</span>
</h3>
</div>
<div v-else class="checkUploadModalContent">
<div class="repCheckBox">
<form class="form form_3" @submit.prevent="checkRepCode">
<div class="formRow" :class="validation.representation_code && 'err'">
<input
id="repCodeInput"
v-model="repCodeInput"
type="text"
placeholder="کد پیگیری درخواست خود را وارد کنید"
/>
<p v-if="validation.representation_code">{{ validation.representation_code.msg }}</p>
</div>
<div class="formRow">
<button type="submit" class="btn btn-primary">بررسی</button>
</div>
</form>
</div>
<div class="resultBox">
<div class="repInfo" :class="repInfo.status">
<p>
<span>تاریخ ثبت درخواست:</span>
<b> {{ $jDate(repInfo.created_at) }} </b>
</p>
<p>
<span>وضعیت درخواست: </span>
<b v-if="repInfo.status === 'registered'"> ثبت شده در سیستم </b>
<b v-if="repInfo.status === 'ongoing'"> در دست اقدام </b>
<b v-if="repInfo.status === 'verification'"> احراز هویت و بررسی مدارک </b>
<b v-if="repInfo.status === 'accepted'"> تایید شده </b>
<b v-if="repInfo.status === 'rejected'"> رد شده </b>
</p>
<p v-if="repInfo.status !== 'rejected'">
<span>دسترسی برای آپلود مدارک: </span>
<b v-if="repInfo.upload"> دارید </b>
<b v-else> ندارید </b>
</p>
</div>
</div>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'CheckRepAndUploadDocs',
props: {
show: {
type: Boolean,
default: false
}
},
data() {
return {
checkingRepCode: false,
repCodeInput: '',
repInfo: {},
validation: {}
}
},
computed: {
showModal: {
get() {
return this.show
},
set(value) {
this.$emit('closeModal')
}
}
},
watch: {
showModal(newVal, oldVal) {
if (newVal) setTimeout(() => $('#repCodeInput').focus(), 300)
}
},
methods: {
showResult() {
const _DU = 0.3
this.$gsap
.timeline({ onCompleted: () => console.log('hiiiiiiiiiiii') })
.to(
$('.checkUploadModalContent'),
{ height: $('.checkUploadModalContent .resultBox').height() + 32, duration: _DU },
0
)
.set($('.checkUploadModalContent .repCheckBox'), { position: 'absolute', left: 0, top: 0 }, 0)
.to($('.checkUploadModalContent .repCheckBox'), { top: '-100%', opacity: 0, duration: _DU }, 0)
.to($('.checkUploadModalContent .resultBox'), { top: 0, opacity: 1, duration: _DU }, 0.05)
.set($('.checkUploadModalContent .resultBox'), { position: 'static' })
.set($('.checkUploadModalContent'), { height: 'auto' })
},
checkRepCode() {
this.validation = {}
this.$axios
.post('/api/user/checkRepresentation', { representation_code: this.repCodeInput?.trim() })
.then(res => {
this.repInfo = res.data
setTimeout(() => this.showResult(), 300)
})
.catch(err => {
if (err.response.status === 422) this.validation = err.response.data.validation
else {
const title = 'خطا'
this.$alert(err.response.data.message, title, {
confirmButtonText: 'بستن'
})
}
})
}
}
}
</script>
@@ -0,0 +1,97 @@
<template>
<div class="panel upload-assets">
<div class="title">
<h3>
<span>درخواست نمایندگی شما با کد</span>
<b>{{ user.representation_code }}</b>
<span>ثبت شده است.</span>
</h3>
</div>
<el-skeleton v-if="loading" class="mt-5" :rows="6" />
<template v-else>
<template v-if="lastRepresentation.upload">
<div class="level-description">
<h3>مرحله دوم ثبت درخواست:</h3>
<p>اطلاعات شما تا این مرجله در سیستم ثبت شده است، لطفا از طریق این صفحه اقدام به بارگذاری مدارک خود کنید.</p>
<p>
تا زمانی که درخواست شما تعیین وضعیت نشده است در هر زمانی میتوانید با مراجعه به همین صفحه مدارک بیشتری
بارگذاری کنید یا مدارک قبلی را ویرایش کنید.
</p>
</div>
<div class="upload-description">
<h3>نکاتی درباره بارگذاری مدارک:</h3>
<ul>
<li>
<span>در هر بخش تصاویر مدارک مربوطه را بارگذاری نمایید.</span>
</li>
<li>
<span>فیلدهای بارگذاری عکس در این صفحه هیچ کدام اجباری نیست.</span>
</li>
<li>
<span>فرمت مجاز تصاور jpeg میباشد.</span>
</li>
<li>
<span>نهایت حجم مجاز برای هر تصویر 2 مگابایت میباشد.</span>
</li>
</ul>
</div>
<div class="upload">
<section v-for="item in agentAssetCategories" :key="item.title">
<h3>{{ item.title }}</h3>
<p>{{ item.description }}</p>
<RepresentationImageUploader
:name="item.fieldName"
:files-list="lastRepresentation[item.fieldName] || []"
:representation_code="lastRepresentation.representation_code"
/>
</section>
</div>
</template>
<div v-else class="mt-5" style="text-align: center; color: red">
<h1>شما دسترسی آپلود مدارک ندارید</h1>
</div>
</template>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'EnrollRepresentationAssets',
data() {
return {
lastRepresentation: {},
loading: true
}
},
head() {
return {
title: 'آسان سرویس | آپلود مدارک'
}
},
computed: {
...mapGetters({
agentAssetCategories: 'front/agentAssetCategories'
}),
user() {
return this.$auth.user
},
userFullName() {
return this.user.first_name + ' ' + this.user.last_name
}
},
async mounted() {
try {
const lastRep = await this.$axios.$get(`/api/user/representation/${this.user.representation_code}`)
this.lastRepresentation = lastRep
} catch (err) {
console.log('err', err)
}
this.loading = false
}
}
</script>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,116 @@
<template>
<div>
<el-upload
:action="uploadUrl"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:on-success="handleAvatarSuccess"
:before-upload="validateFile"
:headers="requestHeaders"
:file-list="files"
:before-remove="beforeRemove"
:disabled="disabled"
multiple
>
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible" append-to-body>
<img width="100%" :src="dialogImageUrl" alt="" />
</el-dialog>
</div>
</template>
<script>
export default {
name: 'RepresentationImageUploader',
props: {
name: {
type: String,
required: true,
default: ''
},
filesList: {
type: Array,
required: true,
default: () => []
},
representation_code: {
type: String,
required: true,
default: ''
},
disabled: {
type: Boolean,
required: false,
default: false
},
isAdmin: {
type: Boolean,
required: false,
default: false
}
},
data() {
return {
dialogImageUrl: '',
dialogVisible: false,
requestHeaders: {
authorization: this.$auth?.$storage?._state?.['_token.local'] || ''
}
}
},
computed: {
files() {
return this.filesList.map(item => {
return { id: item._id, name: item.name, url: item.url }
})
},
uploadUrl() {
const adminUrl = `/api/admin/representationImages/admin/${this.representation_code}?name=${this.name}`
const userUrl = `/api/user/representationImages/${this.representation_code}?name=${this.name}`
return this.isAdmin ? adminUrl : userUrl
}
},
methods: {
handleAvatarSuccess(res, file) {
this.imageUrl = URL.createObjectURL(file.raw)
},
validateFile(file) {
const isJPG = file.type === 'image/jpeg'
const isLt2M = file.size / 1024 / 1024 < 2
if (!isJPG) {
this.$message.error('فقط فرمت jpg قایل قبول است')
}
if (!isLt2M) {
this.$message.error('تصویر نباید بیشتر از 2 مگابایت باشد')
}
return isJPG && isLt2M
},
handleRemove(file, fileList) {
if (!file.raw) {
const adminUrl = `/api/admin/representationImages/admin/${this.representation_code}/${file.id}?name=${this.name}`
const userUrl = `/api/user/representationImages/${this.representation_code}/${file.id}?name=${this.name}`
this.$axios.delete(this.isAdmin ? adminUrl : userUrl)
}
},
beforeRemove(file) {
if (file.raw && !this.validateFile(file.raw)) {
return true
}
const title = 'هشدار'
const msg = 'شما در حال حذف این فایل هستید، ادامه میدهید؟'
return this.$confirm(msg, title, {
confirmButtonText: 'ادامه',
cancelButtonText: 'لغو',
type: 'warning'
})
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
}
}
}
</script>