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
+159
View File
@@ -0,0 +1,159 @@
<template>
<user-dashboard-container page-class="guarantee" panel-title="صندوق ورودی نماینده">
<div class="filter mb-5">
<h4 style="display: inline-block; margin-left: 15px">مشاهده لیست:</h4>
<button class="switchBtns btn" :class="type === 'ttl' && 'btn-primary'" @click="type = 'ttl'">دریافتی ها</button>
<button class="switchBtns btn" :class="type === 'atl' && 'btn-primary'" @click="type = 'atl'">
پذیرش شده ها
</button>
<div class="search mt-3" :class="serachBoxClass">
<el-input v-model="searchInput" clearable placeholder="جستجو در لیست با کد پذیرش موقت یا دائم" />
</div>
</div>
<div class="tableBox">
<table class="qaurantee">
<thead>
<tr>
<th>ردیف</th>
<th>شماره پذیرش موقت</th>
<th>تاریخ ارسال فرم</th>
<template v-if="type === 'atl'">
<th>شماره پذیرش دائم</th>
<th>تاریخ پذیرش</th>
<th>وضعیت</th>
</template>
<th class="brand">برند</th>
<th>جزئیات</th>
</tr>
</thead>
<tbody>
<template v-if="filteredList.length">
<tr v-for="(item, index) in filteredList" :key="item._id" :class="!item.seen && 'unread'">
<td>
<span>{{ index + 1 }}</span>
</td>
<td>
<span>{{ item.TempReceiptTransNumber }}</span>
</td>
<td>
<span>{{ $jDate(item.TempReceiptTransDate) }}</span>
</td>
<template v-if="type === 'atl'">
<td>
<span>{{ item.ItemReceptionTransNumber }}</span>
</td>
<td>
<span>{{ $jDate(item.ItemReceptionTransDate) }}</span>
</td>
<td>
<span v-if="item.status === 'recieved'">پذیرش شده</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 class="brand">
<!-- <img
v-if="item.db_name === 'verity'"
src="/assets/img/verity-small.png"
alt="verity"
style="width: 80px;"
/>
<img
v-if="item.db_name === 'panatech'"
src="/assets/img/panatech-small.png"
alt="panatech"
style="width: 80px;"
/> -->
<i
v-if="item.db_name === 'verity'"
class="fas fa-phone-laptop"
title="لوازم جانبی کامپیوتر و موبایل"
></i>
<i v-if="item.db_name === 'panatech'" class="fas fa-photo-video" title="لوازم صوتی و تصویری خودرو"></i>
</td>
<td>
<nuxt-link
:to="{
name: 'account-agents-inbox-view',
query: {
tid: item._id,
ttn: item.TempReceiptTransNumber,
atn: item.ItemReceptionTransNumber || undefined,
db_name: item.db_name
}
}"
class="btn btn-primary"
>
مشاهده
</nuxt-link>
</td>
</tr>
</template>
<tr v-else>
<td class="noItem">
<span>هیچ اطلاعاتی وجود ندارد</span>
</td>
</tr>
</tbody>
</table>
</div>
<table-notice />
</user-dashboard-container>
</template>
<script>
export default {
name: 'AccountAgentInbox',
layout: 'user',
async asyncData({ $axios, error }) {
try {
const transactions = await $axios.get('/api/agent/inbox')
return {
transactions: transactions.data
}
} catch (e) {
error({ status: 404, message: 'There is a problem here' })
}
},
data() {
return {
transactions: null,
searchInput: ''
}
},
computed: {
type: {
get() {
return this.$route.query.type
},
set(val) {
this.$router.push({ name: 'account-agents-inbox', query: { type: val } })
}
},
serachBoxClass() {
if (this.searchInput && this.filteredList.length) return 'success'
if (this.searchInput && !this.filteredList.length) return 'error'
return null
},
filteredList() {
let filteredByTC
if (!this.searchInput) filteredByTC = this.transactions
else {
filteredByTC = this.transactions.filter(
item =>
item.TempReceiptTransNumber?.toLowerCase().includes(this.searchInput.toLowerCase()) ||
item.ItemReceptionTransNumber?.toLowerCase().includes(this.searchInput.toLowerCase())
)
}
const transactions = filteredByTC.filter(item => {
if (this.type === 'ttl') return !item.ItemReceptionTransNumber
else if (this.type === 'atl') return item.ItemReceptionTransNumber
return false
})
if (this.type === 'ttl') return transactions.reverse()
else return transactions
}
}
}
</script>
+340
View File
@@ -0,0 +1,340 @@
<template>
<user-dashboard-container page-class="guarantee-details agent-guarantee-details" panel-title="جزئیات">
<div class="agentActions">
<div class="row">
<div class="col-12 col-lg-6">
<div class="statuses">
<h3>تغییر وضعیت فرم:</h3>
<div class="btns">
<!--------------- recieved status btn --------------->
<button
class="btn btn-primary"
:disabled="transaction.status !== 'saved'"
@click="changeStatus('recieved')"
>
{{ getStatusName('recieved') }}
</button>
<!--------------- ongoing status btn --------------->
<button
class="btn btn-primary"
:disabled="transaction.status !== 'recieved'"
@click="changeStatus('ongoing')"
>
{{ getStatusName('ongoing') }}
</button>
<!--------------- waiting status btn --------------->
<button
class="btn btn-primary"
:disabled="
transaction.status === 'saved' ||
transaction.status === 'recieved' ||
transaction.status === 'delivered' ||
transaction.status === 'waiting'
"
@click="changeStatus('waiting')"
>
{{ getStatusName('waiting') }}
</button>
<!--------------- delivered status btn --------------->
<el-popover v-model="deliverPopover" placement="bottom" width="160" @click="deliveryPopover = true">
<el-input v-model="deliveryCode" placeholder="کد ارسال مرسوله"></el-input>
<div class="mt-1" style="text-align: center">
<el-button
size="mini"
type="text"
class="agentsStatus-popover-insideBtn"
@click="changeStatus('delivered')"
>ارسال</el-button
>
</div>
<button
slot="reference"
class="btn btn-primary"
:disabled="
transaction.status === 'saved' ||
transaction.status === 'recieved' ||
transaction.status === 'delivered'
"
>
{{ getStatusName('delivered') }}
</button>
</el-popover>
</div>
</div>
</div>
<div class="col-12 col-lg-6 mt-4 mt-lg-0">
<div class="timeLine">
<h3>تاریخچه وضعیت های فرم:</h3>
<ul>
<li v-for="item in statusHistory" :key="item._id" :class="item.status">
<span> {{ getStatusName(item.status) }} </span>
<span> {{ $jDateTime(item.date) }} </span>
</li>
</ul>
</div>
</div>
</div>
</div>
<form action="" class="form form_3">
<div class="userInfo">
<div class="formRow">
<label>کد مشتری:</label>
<input type="text" disabled :value="transaction.BusinessID" />
</div>
<div class="formRow">
<label>نام و نام خانوادگی:</label>
<input type="text" disabled :value="transaction.TransCCustom1" />
</div>
<div class="formRow">
<label>شماره تماس:</label>
<input type="text" disabled :value="transaction.cTel1" />
</div>
<div class="formRow">
<label>شماره پذیرش موقت:</label>
<input type="text" disabled :value="transaction.TempReceiptTransNumber" />
</div>
<div class="formRow">
<label>شماره پذیرش دائم:</label>
<input type="text" disabled :value="transaction.ItemReceptionTransNumber || '-'" />
</div>
<div class="formRow">
<label>تاریخ ارسال فرم:</label>
<input type="text" disabled :value="$jDate(transaction.TempReceiptTransDate)" />
</div>
</div>
<div class="formRow">
<label>آدرس:</label>
<textarea name="" rows="3" disabled :value="transaction.cAddress1"></textarea>
</div>
<div class="formRow">
<label>توضیحات فرم:</label>
<textarea name="" rows="3" disabled :value="transaction.Description"></textarea>
</div>
</form>
<hr />
<div class="formDB">
<template v-if="transaction.db_name === 'verity'">
<i class="fas fa-phone-laptop"></i>
<span>لوازم جانبی کامپیوتر و موبایل</span>
</template>
<template v-if="transaction.db_name === 'panatech'">
<i class="fas fa-photo-video"></i>
<span>لوازم صوتی و تصویری خودرو</span>
</template>
</div>
<div class="tableBox">
<table class="formItems">
<thead>
<tr>
<th class="index">ردیف</th>
<th class="itemName">نام کالا</th>
<th class="quantity">تعداد</th>
<th class="itemSerial">سریال گارانتی</th>
<th class="date">تاریخ اتمام گارانتی</th>
<th v-if="selectorAvailable" class="selector">
<el-checkbox :value="allItemsAreinDraftsItems" @change="addAllItemsToAgentsDraftItems" />
</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in transaction.items" :key="index + '_guaranteeItemsList'" :title="item.ItemName">
<td class="index">
<span>{{ index + 1 }}</span>
</td>
<td class="itemName">
<span class="singleLineTxt">{{ getItemName(item.ItemID) || 'درحال بارگیری ...' }}</span>
</td>
<td class="quantity">
<span>{{ item.MjQty }}</span>
</td>
<td class="itemSerial">
<span>{{ item.SerialNo1 || '-' }}</span>
</td>
<td class="date">
<span>{{ item.GEndDate || '-' }}</span>
</td>
<td v-if="selectorAvailable" class="selector">
<el-checkbox
:value="isInAgentDraftsItem(item.ItemID, item.SerialNo1)"
@change="addSelectedItemsToAgentDraftItems(item.ItemID, item.SerialNo1)"
/>
</td>
</tr>
</tbody>
</table>
</div>
<table-notice />
<div class="addToDraftsBtn">
<button v-if="agentDraftItems.length" class="btn btn-primary" @click="showDraftsModal = true">
<span>افزودن موارد انتخاب شده به پیشنویس ها</span>
<i class="fas fa-link"></i>
</button>
</div>
<template #body>
<AddUserItemsToAgentDraft
:key="addItemsToDraftModalKey"
:show="showDraftsModal"
:db_name="transaction.db_name"
:items="agentDraftItems"
@closeModal="closeAddItemToDraftModal"
/>
</template>
</user-dashboard-container>
</template>
<script>
export default {
name: 'AccountAgentInboxItemView',
layout: 'user',
async asyncData({ $axios, $auth, query, error }) {
try {
const tid = query?.tid
// fetch data from asan-service
const transaction = await $axios.get(`/api/agent/inbox/${tid}`)
return {
transaction: transaction.data
}
} catch (e) {
error({ status: 404, message: 'Page not found' })
}
},
data() {
return {
transaction: null,
factor: null,
paymentFactor: null,
deliverPopover: false,
deliveryCode: '',
showDraftsModal: false,
addItemsToDraftModalKey: 0,
agentDraftItems: []
}
},
computed: {
selectorAvailable() {
return this.transaction.status === 'ongoing' || this.transaction.status === 'waiting'
},
products() {
if (this.$route.query.db_name === 'verity') return this.$store.state.front.verityProducts
else if (this.$route.query.db_name === 'panatech') return this.$store.state.front.panatechProducts
else return []
},
host() {
return this.$route.query?.host
},
statusHistory() {
const statusHistory = this.transaction.statusHistory
return statusHistory.reverse()
},
allItemsAreinDraftsItems() {
return this.agentDraftItems.length === this.transaction.items.length
}
},
methods: {
closeAddItemToDraftModal() {
this.showDraftsModal = false
this.agentDraftItems = []
this.addItemsToDraftModalKey = Math.random()
},
addAllItemsToAgentsDraftItems(val) {
if (val) this.agentDraftItems = this.transaction.items
else this.agentDraftItems = []
},
addSelectedItemsToAgentDraftItems(id, serial) {
if (this.isInAgentDraftsItem(id, serial)) {
this.agentDraftItems = this.agentDraftItems.filter(item => {
if (serial) return item.SerialNo1 !== serial
else return item.ItemID !== id
})
} else {
const thisItem = this.transaction.items.find(item => {
if (serial) return item.SerialNo1 === serial
else return item.ItemID === id
})
this.agentDraftItems.push(thisItem)
}
},
isInAgentDraftsItem(id, serial) {
return Boolean(
this.agentDraftItems.find(item => {
if (serial) return item.SerialNo1 === serial
else return item.ItemID === id
})
)
},
getItemName(ItemID) {
return this.products.find(item => item.ItemID === ItemID)?.ItemName
},
getStatusName(status) {
if (status === 'saved') return 'ثبت شده'
else if (status === 'recieved') return 'پذیرش'
else if (status === 'ongoing') return 'در دست اقدام'
else if (status === 'waiting') return 'در انتظار قطعه'
else if (status === 'delivered') return 'تحویل شد'
else return 'invalid status'
},
changeStatus(status) {
const deliveryCode = this.deliveryCode
const alertTitle = 'هشدار'
function alertMsg() {
if (status === 'recieved')
return 'نماینده گرامی تنها در صورتی که تمام کالاها به دست شما رسیده فرم را پذیرش کنید. در غیر اینصورت هرگونه مسئولیتی در قبال مفقودی کالاها بر عهده شما میباشد.'
else if (status === 'ongoing') return 'وضعیت فرم را به در دست اقدام تغییر میدهید'
else if (status === 'waiting') return 'وضعیت فرم را به در انتظار قطعه تغییر میدهید'
else if (status === 'delivered' && deliveryCode.length)
return (
`تغییر وضعیت فرم به ارسال شده با کد ارسال مرسوله "${deliveryCode}".` +
' در آینده قادر به تغییر این وضعیت یا تغییر کد مرسوله نخواهید بود، ادمه میدهید؟ '
)
else if (status === 'delivered')
return (
'تغییر وضعیت فرم به ارسال شدوه بدون کد ارسال مرسوله.' +
' در آینده قادر به تغییر این وضعیت یا افزودن کد مرسوله نخواهید بود، ادامه میدهید؟ '
)
}
this.$confirm(alertMsg(), alertTitle, {
confirmButtonText: 'ادامه',
cancelButtonText: 'لغو',
type: 'warning'
})
.then(() => {
this.$axios
.put(`/api/agent/changeTStatus/${this.transaction._id}`, { status, deliveryCode })
.then(res => {
this.$message({
type: 'success',
message: 'وضعیت فرم با موفقیت تغییر کرد و پیامک اطلاع رسانی برای کاربر ارسال شد'
})
this.deliveryCode = ''
this.$nuxt.refresh()
})
.catch(err => {
this.$message({
type: 'error',
message: err.response.data.message
})
})
})
.catch(() => {
this.$message({
type: 'warning',
message: 'عملیات لغو شد'
})
})
}
}
}
</script>