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
+312
View File
@@ -0,0 +1,312 @@
<template>
<user-dashboard-container page-class="post agent-requests-details" panel-title="فرم درخواست قطعه داغی">
<el-alert v-if="oldPieceRequest.status === 'temp'" :title="alertMsg" class="mb-3" type="warning"> </el-alert>
<form class="form form_3">
<div class="userInfo">
<div class="formRow">
<label for="customer_name">نام و نام خانوادگی:</label>
<input id="customer_name" type="text" :value="oldPieceRequest.agent_id.full_name" disabled />
</div>
<div class="formRow">
<label for="customer_code">کد نمایندگی:</label>
<input id="customer_code" type="text" :value="oldPieceRequest.agent_id.agent_code" disabled />
</div>
<div class="formRow">
<label for="mobile">شماره موبایل:</label>
<input id="mobile" type="text" :value="oldPieceRequest.agent_id.mobile_number" disabled />
</div>
<div class="formRow">
<label for="fax">شماره فکس:</label>
<input id="fax" type="text" :value="oldPieceRequest.agent_id.fax_number" disabled />
</div>
<div class="formRow">
<label for="province">استان:</label>
<input id="province" type="text" :value="oldPieceRequest.agent_id.province_name" disabled />
</div>
<div class="formRow">
<label for="city">شهر:</label>
<input id="city" type="text" :value="oldPieceRequest.agent_id.city_name" disabled />
</div>
</div>
<div class="formRow">
<label>آدرس:</label>
<textarea name="description" cols="30" rows="5" disabled :value="oldPieceRequest.agent_id.address"></textarea>
</div>
<hr />
<div class="formRow">
<label v-if="oldPieceRequest.status === 'temp'" for="description">توضیحات فرم (اختیاری):</label>
<label v-else for="description">توضیحات فرم:</label>
<el-tooltip
v-model="descriptionTooltip"
class="item"
effect="dark"
content="میتوانید توضیحات را در هر زمان تغییر دهید"
placement="top-start"
:disabled="oldPieceRequest.status !== 'temp'"
>
<textarea
id="description"
v-model="oldPieceRequest.description"
name="description"
:disabled="oldPieceRequest.status !== 'temp'"
:placeholder="descriptionPlaceHolder"
cols="30"
rows="10"
@blur="updateDescription"
></textarea>
</el-tooltip>
</div>
</form>
<div class="add-list">
<h2>لیست قطعات درخواستی:</h2>
<div class="tableBox">
<table class="pieces-items">
<thead>
<tr>
<th class="index">ردیف</th>
<th class="recieptDate">تاریخ پذیرش</th>
<th class="itemName">نام کالا</th>
<th class="itemSerial">سریال گارانتی</th>
<th class="pieceName">نام قطعه</th>
<th class="pieceCode">کد قطعه</th>
<th v-if="oldPieceRequest.status === 'temp'" class="removeBtn">حذف</th>
</tr>
</thead>
<tbody>
<tr
v-for="(item, index) in oldPieceRequest.items"
:key="item.ItemID + index + '_opr_oldPieces'"
:title="item.ItemName + ' - ' + item.pieceName"
>
<td class="index">
<span>{{ index + 1 }}</span>
</td>
<td class="recieptDate">
<span> {{ $jDate(item.ItemReceptionTransDate) }} </span>
</td>
<td class="itemName">
<span class="singleLineTxt">{{ item.ItemName }}</span>
</td>
<td class="itemSerial">
<span>{{ item.SerialNo1 || '-' }}</span>
</td>
<td class="pieceName">
<span> {{ item.pieceName }} </span>
</td>
<td class="pieceCode">
<span> {{ item.pieceCode }} </span>
</td>
<td v-if="oldPieceRequest.status === 'temp'" class="removeBtn">
<button class="trashIcon-btn" title="حذف پیشنویس" @click="removeItemFromList(item._id)">
<i class="fal fa-trash-alt"></i>
</button>
</td>
</tr>
<tr v-if="!oldPieceRequest.items.length" class="odd">
<td class="noItem" colspan="5">
<p style="color: #000">هنوز هیچ آیتمی اضافه نکردید.</p>
</td>
</tr>
<tr v-if="oldPieceRequest.status === 'temp'" class="addStuffBtn" @click="oldPiecesModal = true">
<td colspan="5">
<button>
<span>افزودن قطعه</span>
<i class="far fa-plus"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
<table-notice />
<hr />
<div v-if="oldPieceRequest.status === 'temp'" class="btnRow">
<button class="btn btn-primary" @click="sendForm">ارسال به آسان سرویس</button>
<button class="btn btn-danger" @click="removeOPR">حذف این فرم</button>
</div>
</div>
<template #body>
<AddOldPiecesToOldPieceRequest
:key="oldPiecesModalKey"
:show="oldPiecesModal"
:opr-id="oldPieceRequest._id"
@closeModal="closePiecesModal"
/>
</template>
</user-dashboard-container>
</template>
<script>
export default {
name: 'AccountAgentOpsDetails',
layout: 'user',
async asyncData({ $axios, params, error }) {
try {
const oldPieceRequest = await $axios.get(`/api/agent/opr/${params.op}`)
return {
oldPieceRequest: oldPieceRequest.data
}
} catch (e) {
error({ status: 404, message: 'There is a problem here' })
}
},
data() {
return {
oldPieceRequest: null,
validation: {},
oldPiecesModal: false,
oldPiecesModalKey: 0,
descriptionTooltip: false,
alertMsg:
'این درخواست در پیشنویس ها ذخیره شده و هنوز در پایگاه داده شرکت آسان سرویس ثبت نگردیده. شما میتوانید قطعات را در هر زمان به این فرم اضافه یا از فرم حذف کنید سپس نسبت به ارسال نهایی اقدام کنید.'
}
},
computed: {
oprId() {
return this.$route.params.op
},
descriptionPlaceHolder() {
if (this.oldPieceRequest.status === 'temp') return 'توضیحات راجع به قطعات داغی را میتوانید اینجا بنویسید'
else return 'بدون توضیحات'
}
},
mounted() {
setTimeout(() => {
if (this.oldPieceRequest.status === 'temp') this.descriptionTooltip = true
}, 1000)
},
methods: {
closePiecesModal() {
this.oldPiecesModal = false
this.oldPiecesModalKey = Math.random()
},
removeItemFromList(id) {
if (this.oldPieceRequest.status !== 'temp') return
this.$confirm('این مورد حذف شود؟', 'هشدار', {
confirmButtonText: 'بله',
cancelButtonText: 'لغو',
type: 'warning'
})
.then(() => {
this.$axios
.delete(`/api/agent/removeOprItems/${id}`)
.then(res => {
this.$message({
type: 'success',
message: res.data.message
})
this.$nuxt.refresh()
})
.catch(() => {
this.$message({
type: 'error',
message: 'مشکلی در انجام عملیات پیش آمده'
})
})
})
.catch(() => {
this.$message({
type: 'warning',
message: 'عملیات لغو شد'
})
})
},
updateDescription() {
if (this.oldPieceRequest.status !== 'temp') return
const data = { description: this.oldPieceRequest.description }
this.$axios
.put(`/api/agent/oprDescription/${this.oprId}`, data)
.then(res => {
this.$message({
type: 'success',
message: res.data.message
})
})
.catch(() => {
this.$message({
type: 'error',
message: 'مشکلی در ثبت اطلاعات پیش آمده'
})
})
},
sendForm() {
this.$confirm('فرم درخواست قطعه داغی به آسان سرویس ارسال شود؟', 'هشدار', {
confirmButtonText: 'بله',
cancelButtonText: 'لغو',
type: 'warning'
})
.then(() => {
this.$axios
.post(`/api/agent/sendOpr/${this.oprId}`)
.then(res => {
this.$message({
type: 'success',
message: res.data.message
})
this.$router.push({ name: 'account-agents-ops', query: { type: 'sent' } })
})
.catch(err => {
let msg = 'مشکلی در ارسال درخواست پیش آمده'
if (err.response.status === 406) msg = err.response.data.message
this.$message({
type: 'error',
message: msg
})
})
})
.catch(() => {
this.$message({
type: 'warning',
message: 'عملیات لغو شد'
})
})
},
removeOPR() {
this.$confirm('این فرم از پیشنویس ها حذف شود؟', 'هشدار', {
confirmButtonText: 'بله',
cancelButtonText: 'لغو',
type: 'warning'
})
.then(() => {
this.$axios
.delete(`/api/agent/opr/${this.oprId}`)
.then(res => {
this.$message({
type: 'success',
message: res.data.message
})
this.$router.push({ name: 'account-agents-ops', query: { type: 'temp' } })
})
.catch(() => {
this.$message({
type: 'error',
message: 'مشکلی در حذف پیشنویس پیش آمده'
})
})
})
.catch(() => {
this.$message({
type: 'warning',
message: 'عملیات لغو شد'
})
})
}
}
}
</script>
+230
View File
@@ -0,0 +1,230 @@
<template>
<user-dashboard-container page-class="agent-requests" panel-title="لیست درخواست های قطعه داغی">
<div class="filter mb-5">
<h4 style="display: inline-block; margin-left: 15px">مشاهده لیست:</h4>
<button class="switchBtns btn" :class="type === 'temp' && 'btn-primary'" @click="type = 'temp'">
پیشنویس ها
</button>
<button class="switchBtns btn" :class="type === 'sent' && 'btn-primary'" @click="type = 'sent'">
ارسال شده ها
</button>
<button class="switchBtns btn" :class="type === 'delivered' && 'btn-primary'" @click="type = 'delivered'">
انجام شده ها
</button>
<div v-if="type !== 'temp'" class="search mt-3" :class="serachBoxClass">
<el-input v-model="searchInput" clearable placeholder="جستجو در لیست با کد پیگیری" />
</div>
</div>
<div class="tableBox">
<table class="agent-requests" :class="type !== 'temp' && 'extended'">
<thead>
<tr>
<th class="index">ردیف</th>
<th class="description">توضیحات</th>
<th class="createDate">تاریخ ایجاد</th>
<template v-if="type === 'sent' || type === 'delivered'">
<th class="sendDate">تاریخ ارسال</th>
<th class="trackingCode">کد پیگیری</th>
<th class="status">وضعیت</th>
</template>
<th v-if="type === 'delivered'" class="deliveryCode">کد ارسال مرسوله</th>
<th class="quantity">تعداد قطعه</th>
<th class="details">جزئیات</th>
</tr>
</thead>
<tbody>
<template v-if="filteredList.length">
<tr v-for="(item, index) in filteredList" :key="item._id" :title="item.description">
<td class="index">
<span>{{ index + 1 }}</span>
</td>
<td class="description">
<span v-if="item.description" class="singleLineTxt">{{ item.description }}</span>
<span v-else style="color: gray">بدون توضیحات</span>
</td>
<td class="createDate">
<span> {{ $jDate(item.createDate) }} </span>
</td>
<template v-if="type === 'sent' || type === 'delivered'">
<td class="sendDate">
<span>{{ $jDate(item.sendDate) }}</span>
</td>
<td class="trackingCode">
<span>{{ item.trackingCode }}</span>
</td>
<td class="status">
<span v-if="item.status === 'sent'">ارسال شده</span>
<span v-if="item.status === 'ongoing'">در دست اقدام</span>
<span v-if="item.status === 'waiting'">در انتظار قطعه</span>
<span v-if="item.status === 'delivered'">تحویل شده</span>
</td>
</template>
<td v-if="type === 'delivered'" class="deliveryCode">
<span>{{ item.deliveryCode || '-' }}</span>
</td>
<td class="quantity">
<span>{{ totalItemsCount(item.items) }}</span>
</td>
<td class="details">
<template v-if="item.status === 'temp'">
<button class="trashIcon-btn" title="حذف پیشنویس" @click="removeOPR(item._id)">
<i class="fal fa-trash-alt"></i>
</button>
<nuxt-link
:to="{
name: 'account-agents-ops-op',
params: {
op: item._id
}
}"
class="btn btn-primary"
>
تکمیل فرم
</nuxt-link>
</template>
<nuxt-link
v-else
:to="{
name: 'account-agents-ops-op',
params: {
op: item._id
}
}"
class="btn btn-primary"
>
مشاهده
</nuxt-link>
</td>
</tr>
</template>
<tr v-else>
<td class="noItem">
<span>هیچ اطلاعاتی وجود ندارد</span>
</td>
</tr>
<tr v-if="type === 'temp'" class="addStuffBtn" @click="addOldPieceRequest">
<td colspan="5">
<button>
<span>افزودن درخواست</span>
<i class="far fa-plus"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
<table-notice />
</user-dashboard-container>
</template>
<script>
export default {
name: 'AccountAgentOpsList',
layout: 'user',
async asyncData({ $axios, error }) {
try {
const oldPieceRequests = await $axios.get('/api/agent/oprList')
return {
oldPieceRequests: oldPieceRequests.data
}
} catch (e) {
error({ status: 404, message: 'There is a problem here' })
}
},
data() {
return {
oldPieceRequests: null,
searchInput: ''
}
},
computed: {
type: {
get() {
return this.$route.query.type
},
set(val) {
this.$router.push({ name: 'account-agents-ops', query: { type: val } })
}
},
serachBoxClass() {
if (this.searchInput && this.filteredList.length) return 'success'
if (this.searchInput && !this.filteredList.length) return 'error'
return null
},
filteredList() {
let filteredBySearch
if (!this.searchInput || this.type === 'temp') filteredBySearch = this.oldPieceRequests
else {
filteredBySearch = this.oldPieceRequests.filter(item =>
item.trackingCode?.toLowerCase().includes(this.searchInput.toLowerCase())
)
}
return filteredBySearch.filter(item => {
if (this.type === 'temp') return item.status === 'temp'
if (this.type === 'sent') return item.status !== 'temp' && item.status !== 'delivered'
if (this.type === 'delivered') return item.status === 'delivered'
return false
})
}
},
methods: {
addOldPieceRequest() {
this.$axios
.post('/api/agent/opr')
.then(res => {
this.$message({
type: 'success',
message: 'درخواست جدید افزوده شد'
})
this.$nuxt.refresh()
})
.catch(() => {
this.$message({
type: 'error',
message: 'مشکلی در افزودن درخواست پیش آمده'
})
})
},
totalItemsCount(items) {
return items.length
},
removeOPR(id) {
this.$confirm('این درخواست از پیشنویس ها حذف شود؟', 'هشدار', {
confirmButtonText: 'بله',
cancelButtonText: 'لغو',
type: 'warning'
})
.then(() => {
this.$axios
.delete(`/api/agent/opr/${id}`)
.then(res => {
this.$message({
type: 'success',
message: res.data.message
})
this.$nuxt.refresh()
})
.catch(() => {
this.$message({
type: 'error',
message: 'مشکلی در حذف درخواست پیش آمده'
})
})
})
.catch(() => {
this.$message({
type: 'warning',
message: 'عملیات لغو شد'
})
})
}
}
}
</script>