somewhere
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user