Files
barg-restuarant/pages/admin/_branch/orders/index.vue
T
hamid.zarghami1@gmail.com e644edbd65 transfer project in github
2024-05-12 15:29:27 +03:30

424 lines
14 KiB
Vue

<template>
<div>
<CustomSubHeader>
<CBreadcrumb class="border-0 mb-0">{{ title }}</CBreadcrumb>
</CustomSubHeader>
<CCard>
<CCardHeader>
<slot name="header">
<i class="fal fa-filter"></i>
<span style="color:#000">فیلتر</span>
</slot>
</CCardHeader>
<CCardBody>
<CRow>
<CCol md="6">
<CRow style="flex-direction : column;">
<CCol class="mt-3">
<CRow style="align-items: baseline;">
<CCol col="md-3" class="mb-2">
<span>شماره سفارش</span>
</CCol>
<CCol col="md-9">
<el-input style="width : 100%" placeholder="" v-model="search.number"></el-input>
</CCol>
</CRow>
</CCol>
<CCol class="mt-3">
<CRow style="align-items: baseline;">
<CCol col="md-3" class="mb-2">
<span>مشتری</span>
</CCol>
<CCol col="md-9">
<el-select filterable clearable style="width : 100%" v-model="search.userId"
placeholder="انتخاب مشتری">
<el-option
v-for="item in users"
:key="item._id"
:value="item._id"
:label="item.business_code + ' ' + '(' + item.first_name + ' ' + item.last_name + ')'"/>
</el-select>
</CCol>
</CRow>
</CCol>
<CCol class="mt-3">
<CRow style="align-items: baseline;">
<CCol col="md-3" class="mb-2">
<span>تاریخ</span>
</CCol>
<CCol col="md-9">
<date-picker range clearable format="YYYY-MM-DD" display-format="jMMMM jD"
v-model="search.date"></date-picker>
</CCol>
</CRow>
</CCol>
</CRow>
</CCol>
<CCol md="6">
<CRow style="flex-direction : column;">
<CCol class="mt-3">
<CRow style="align-items: baseline;">
<CCol col="md-3" class="mb-2">
<span>وضعیت سفارش</span>
</CCol>
<CCol col="md-9">
<el-select v-model="search.orderStatus" clearable style="width : 100%">
<el-option v-for="item in allStatus" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</CCol>
</CRow>
</CCol>
<CCol class="mt-3">
<CRow style="align-items: baseline;">
<CCol col="md-3" class="mb-2">
<span>وضعیت پرداخت</span>
</CCol>
<CCol col="md-9">
<el-select v-model="search.paymentStatus" clearable style="width : 100%">
<el-option :key="1" label="پرداخت شده" value="paid">
</el-option>
<el-option :key="2" label="پرداخت نشده" value="unpaid">
</el-option>
<el-option :key="3" label="برگشت خورده" value="refund">
</el-option>
</el-select>
</CCol>
</CRow>
</CCol>
</CRow>
</CCol>
</CRow>
<CRow>
<el-button :loading="loading" @click="handleSearch" size="small"
style="width: auto;margin: 25px auto auto auto;" type="primary"
icon="el-icon-search">
جست و جو
</el-button>
</CRow>
</CCardBody>
</CCard>
<CCard>
<CCardHeader>
<slot name="header">
<i class="fal fa-bars"></i>
<span>{{ list_title }}</span>
</slot>
</CCardHeader>
<CCardBody>
<el-table
v-loading="loading"
:data="orders.docs"
style="width: 100%">
<el-table-column
type="index"
label="#">
</el-table-column>
<!-- <el-table-column-->
<!-- label="شماره سفارش"-->
<!-- prop="number"-->
<!-- width="">-->
<!-- </el-table-column>-->
<el-table-column
label="مشتری"
min-width="150">
<template slot-scope="scope">
<nuxt-link v-if="scope.row.user_id"
:to="{name: 'admin-branch-customers-profile',params: {profile: scope.row.user_id._id}}">{{
scope.row.user_id.first_name + ' ' + scope.row.user_id.last_name }}
</nuxt-link>
</template>
</el-table-column>
<el-table-column
label="امتیاز"
min-width="70">
<template slot-scope="scope">
<span>{{ scope.row.scorePoint.toLocaleString() }}</span>
<!-- <span>{{ scope.row.orderType === 'club' ? ' امتیاز' : ' ریال'}}</span>-->
</template>
</el-table-column>
<el-table-column
label="ارزش امتیاز"
min-width="110">
<template slot-scope="scope">
<span>{{ scope.row.scoreCost.toLocaleString() + ' ریال'}}</span>
<!-- <span>{{ scope.row.orderType === 'club' ? ' امتیاز' : ' ریال'}}</span>-->
</template>
</el-table-column>
<el-table-column
label="کیف پول"
width="">
<template slot-scope="scope">
<span>{{ scope.row.bagCost.toLocaleString() + ' ریال' }}</span>
<!-- <span>{{ scope.row.orderType === 'club' ? ' امتیاز' : ' ریال'}}</span>-->
</template>
</el-table-column>
<el-table-column
label="پرداخت آنلاین"
min-width="115">
<template slot-scope="scope">
<span v-if="scope.row.payTotal">{{ scope.row.payTotal.toLocaleString() + ' ریال' }}</span>
<span v-else>0 ریال</span>
</template>
</el-table-column>
<el-table-column
label="جمع کل"
min-width="115">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<span>{{ scope.row.total.toLocaleString() }}</span>
<span>{{ scope.row.orderType === 'club' ? ' امتیاز' : ' ریال' }}</span>
<div slot="reference" class="name-wrapper">
<span>{{ scope.row.total.toLocaleString() }}</span>
<span>{{ scope.row.orderType === 'club' ? ' امتیاز' : ' ریال' }}</span>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="وضعیت سفارش"
min-width="120">
<template slot-scope="scope" :v-html="showOrderStatus(scope.row.status)">
<el-tag
:type="showOrderStatus(scope.row.status).type"
effect="dark">
<span>{{ showOrderStatus(scope.row.status).message }}</span>
</el-tag>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- label="وضعیت پرداخت"-->
<!-- width="">-->
<!-- <template slot-scope="scope">-->
<!-- <el-tag-->
<!-- :type="showPaymentStatus(scope.row.paymentStatus).type"-->
<!-- effect="dark">-->
<!-- <span>{{ showPaymentStatus(scope.row.paymentStatus).message }}</span>-->
<!-- </el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
label="تاریخ"
min-width="150">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<p>{{ jDate(scope.row.createdOn) }}</p>
<div slot="reference" class="name-wrapper">
{{ jDate(scope.row.createdOn) }}
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="مشاهده"
width="110"
align="center">
<template slot-scope="scope">
<CButton color="success" variant="outline" :key="scope.row._id"
:to="{name: 'admin-branch-orders-order',params: {order: scope.row._id}}">
<i class="far fa-eye"></i>
</CButton>
</template>
</el-table-column>
</el-table>
</CCardBody>
</CCard>
<CCard class="col" v-if="orders.totalDocs>20">
<CRow alignHorizontal="center" style="padding : 10px">
<el-pagination :hide-on-single-page="true" layout="prev, pager, next" :page-size="orders.limit"
@current-change="handleCurrentChange" :current-page.sync="orders.page" :total="orders.totalDocs">
</el-pagination>
</CRow>
</CCard>
</div>
</template>
<script>
import moment from "moment-jalaali";
const _ = require('lodash');
export default {
data() {
return {
title: 'لیست سفارشات',
list_title: 'لیست',
orders: null,
search: {},
users: null,
loading: false,
allStatus: [
{
label: 'لغو شده',
value: 'canceled'
},
{
label: 'در حال آماده سازی',
value: 'processing'
},
{
label: 'ارسال شده',
value: 'sent'
},
{
label: 'تحویل داده شده',
value: 'delivered'
}
]
}
},
computed: {
pageQuery() {
return this.$route.query.page;
}
},
watch: {
pageQuery(newPage, oldPage) {
this.$nuxt.refresh();
}
},
methods: {
jDate(date) {
return moment(date).format('jYYYY/jMM/jDD HH:mm')
},
showPaymentStatus(status) {
switch (status) {
case 'unpaid':
return {
type: 'danger',
message: 'پرداخت نشده'
}
case 'paid':
return {
type: 'success',
message: 'پرداخت شده'
}
case 'refund':
return {
type: 'warning',
message: 'برگشت خورده'
}
default :
return {
type: 'info',
message: 'وضعیت نا مشخص'
}
}
},
showOrderStatus(status) {
switch (status) {
case 'canceled':
return {
type: 'danger',
message: 'لغو شده'
}
case 'processing':
return {
type: 'primary',
message: 'در حال آماده سازی'
}
case 'sent':
return {
type: 'warning',
message: 'ارسال شده'
}
case 'delivered':
return {
type: 'success',
message: 'تحویل داده شده'
}
default :
return {
type: 'info',
message: 'وضعیت نا مشخص'
}
}
},
handleCurrentChange(page) {
if (!_.isEmpty(this.search)) {
this.handleSearch(page);
} else {
this.$router.push({
name: "admin-branch-orders",
query: {
page: page
}
});
}
},
handleSearch(page) {
this.loading = true;
const data = {
branchId: this.$route?.params?.branch,
number: this.search.number,
userId: this.search.userId,
orderStatus: this.search.orderStatus,
paymentStatus: this.search.paymentStatus,
date: this.search.date,
}
this.$axios.post(`/api/admin/order/search?page=${page}`, data, this.axiosConfig)
.then((result) => {
this.orders = result.data;
this.loading = false;
})
.catch(err => {
this.loading = false;
if (err.response.status === 401) {
return this.$message({
type: 'error',
message: 'لطفا دوباره وارد سیستم شوید.'
})
}
if (err.response.status === 422) this.validation = err.response.data.validation
else console.log(err.response.data)
})
}
},
head() {
return {
title: this.title
}
},
layout: 'admin',
async asyncData({$axios, query, error , params}) {
try {
const order = await $axios.get(`/api/admin/order/getAll/${params?.branch}?page=${query.page || 1}`)
const users = await $axios.get(`/api/admin/users/getAll/${params?.branch}`)
return {
orders: order.data,
users: users.data
}
} catch (e) {
if (e?.response?.status === 401) {
error({
status: 401,
message: 'شما اجازه دسترسی به این صفحه را ندارید لطفا دوباره وارد شوید'
})
} else {
error({
status: 500,
message: "مشکلی در گرفتن اطلاعات بوجود آمده است",
});
}
}
}
}
</script>