Zory 3 tuần trước cách đây
mục cha
commit
e08f56cba2

+ 7 - 0
src/api/model/merOrder.js

@@ -72,6 +72,13 @@ export default {
             return await http.post(this.url, params);
         },
     },
+    refundAudit: {
+        url: `${config.API_URL}/merchant/order/audit`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
     black: {
         url: `${config.API_URL}/merchant/order/black`,
         name: "-",

+ 2 - 2
src/style/app.scss

@@ -102,10 +102,10 @@ textarea {
 	}
 }
 .error-row{
-	background-color: var(--el-color-warning-light-9) !important;
+	background-color: #fef0f0 !important;
 }
 .el-table__body-wrapper tr.error-row td.el-table-fixed-column--left ,.el-table__body-wrapper tr.error-row td.el-table-fixed-column--right{
-	background-color: var(--el-color-warning-light-9) !important;
+	background-color: #fef0f0 !important;
 }
 /*布局设置*/
 .layout-setting {

+ 0 - 1
src/utils/request.js

@@ -59,7 +59,6 @@ axios.interceptors.response.use(
 					ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', {
 						type: 'error',
 						closeOnClickModal: false,
-						center: true,
 						confirmButtonText: '重新登录',
 						beforeClose: (action, instance, done) => {
 							MessageBox_401_show = false

+ 1 - 0
src/views/manage/order/index/components/table.vue

@@ -85,6 +85,7 @@
                 </div>
                 <div class="order-name" v-if="scope.row.status == 2">
                     <span>已核销</span>
+                    <span class="dec" v-if="scope.row.is_error==1">拒绝退款</span>
                 </div>
                 <div class="order-name" v-if="scope.row.status == 3">
                     <span>已退款</span>

+ 1 - 0
src/views/merchant/order/index/components/table.vue

@@ -64,6 +64,7 @@
                 </div>
                 <div class="order-name" v-if="scope.row.status == 2">
                     <span>已核销</span>
+                    <span class="dec" v-if="scope.row.is_error==1">拒绝退款</span>
                 </div>
                 <div class="order-name" v-if="scope.row.status == 3">
                     <span>已退款</span>

+ 1 - 0
src/views/service/order/index/components/table.vue

@@ -91,6 +91,7 @@
                 </div>
                 <div class="order-name" v-if="scope.row.status == 2">
                     <span>已核销</span>
+                    <span class="dec" v-if="scope.row.is_error==1">拒绝退款</span>
                 </div>
                 <div class="order-name" v-if="scope.row.status == 3">
                     <span>已退款</span>

+ 209 - 0
src/views/service/order/refund/components/refund.vue

@@ -0,0 +1,209 @@
+<template>
+    <el-drawer :title="titleMap[mode]" :append-to-body="true" v-model="visible" :size="600" destroy-on-close :close-on-click-modal="false" @closed="$emit('closed')" :with-header="false">
+        <el-container class="flex-column" v-loading="loading">
+            <div class="drawer-detail-main">
+                <div class="drawer-detail-header">
+                    <div class="drawer-detail-header-body">
+                        <div class="drawer-detail-header-left">{{ titleMap[mode] }}</div>
+                        <div class="drawer-detail-header-left">
+                            <el-button type="default" icon="el-icon-close" @click="visible=false"></el-button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <el-main class="nopadding" v-loading="loading">
+                <div class="order-detail" v-if="orderData">
+                    <div class="order-goods">
+                        <div class="goods-img"><img :src="orderData.img" /></div>
+                        <div class="goods-info">
+                            <div class="name" v-if="orderData.product.is_new == 1">{{orderData.product.price}}元代{{orderData.product.line_price}}元商场权益券{{ orderData.product.product_name }}</div>
+                            <div class="name" v-else>{{ orderData.product.product_name }}</div>
+                            <div class="desc">
+                                <div class="time" v-if="orderData.end_at">有效期至:{{ orderData.end_at }} </div>
+                                <div class="num">x {{ orderData.number }}</div>
+                            </div>
+                            <div class="total">退款金额 {{ $TOOL.money(orderData.pay_money) }}</div>
+                        </div>
+                    </div>
+                    <div class="order-info" v-if="orderData.refund">
+                        <div class="title">退款信息</div>
+                        <div class="info-item">
+                            <div class="name">退款路径</div>
+                            <div class="right">{{orderData.refund.type=='alipay'?'支付宝':'银行卡'}}</div>
+                        </div>
+                        <template v-if="orderData.refund.type=='alipay'">
+                            <div class="info-item">
+                                <div class="name">真实姓名</div>
+                                <div class="right">{{ orderData.refund.content.truename }}</div>
+                            </div>
+                            <div class="info-item">
+                                <div class="name">支付宝账号</div>
+                                <div class="right">{{ orderData.refund.content.account }}</div>
+                            </div>
+                        </template>
+                        <template v-else>
+                            <div class="info-item">
+                                <div class="name">真实姓名</div>
+                                <div class="right">{{ orderData.refund.content.truename }}</div>
+                            </div>
+                            <div class="info-item">
+                                <div class="name">银行卡号</div>
+                                <div class="right">{{ orderData.refund.content.bank }}</div>
+                            </div>
+                            <div class="info-item">
+                                <div class="name">开户行</div>
+                                <div class="right">{{ orderData.refund.content.name }}</div>
+                            </div>
+                        </template>
+                        <div class="info-item">
+                            <div class="name">系统单号</div>
+                            <div class="right">{{ formData.out_order_no }}</div>
+                        </div>
+                        <div class="info-item">
+                            <div class="name">来客订单号</div>
+                            <div class="right">{{ formData.order_sn }}</div>
+                        </div>
+                    </div>
+                    <div class="order-info" v-if="orderData.refund">
+                        <div class="title">处理操作</div>
+                        <div style="margin-top: 10px;">
+                            <el-form ref="dialogForm" :model="refundData" :rules="rules" label-width="100px" label-position="left">
+                                <el-form-item label="是否同意" prop="status">
+                                    <el-radio-group v-model="refundData.status">
+                                        <el-radio border :label="1">同意</el-radio>
+                                        <el-radio border :label="2">拒绝</el-radio>
+                                    </el-radio-group>
+                                    <div class="el-form-item-msg"></div>
+                                </el-form-item>
+                                <el-form-item label="打款凭证" prop="sign" v-if="refundData.status==1">
+                                    <sc-upload v-model="refundData.sign" title="支付宝或银行卡打款凭证"></sc-upload>
+                                    <div class="el-form-item-msg"></div>
+                                </el-form-item>
+                                <el-form-item label="拒绝原因" prop="reason" v-if="refundData.status==2">
+                                    <el-input type="textarea" rows="5" v-model="refundData.reason" clearable placeholder="请输入"></el-input>
+                                    <div class="el-form-item-msg"></div>
+                                </el-form-item>
+                            </el-form>
+                        </div>
+                    </div>
+                </div>
+            </el-main>
+            <el-footer style="text-align: right;" v-if="orderData&&orderData.refund">
+                <el-button @click="visible=false" size="large">关 闭</el-button>
+                <el-button size="large" type="primary" :loading="isSaveing" @click="submit()">保 存</el-button>
+            </el-footer>
+        </el-container>
+    </el-drawer>
+    
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            loading: false,
+            isSaveing: false,
+            mode:"add",
+            titleMap:{
+                add:"核销后售后处理",
+                edit:"核销后售后处理"
+            },
+            visible:false,
+            formData:{
+                type:1
+            },
+            rules:{
+                status: [
+                    {required: true, message: '请选择'}
+                ],
+                sign: [
+                    {required: true, message: '请上传'}
+                ],
+                reason: [
+                    {required: true, message: '请输入'}
+                ],
+                express_sn: [
+                    {required: true, message: '请输入'}
+                ],
+                express_name: [
+                    {required: true, message: '请输入'}
+                ]
+            },
+            refundData:{
+                status:1
+            },
+            orderData:null
+        }
+    },
+    methods:{
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            this.formData = JSON.parse(JSON.stringify(data));
+            this.getOrderDetail()
+        },
+        async getOrderDetail(){
+            this.loading = true;
+            var resp = await this.$API.merOrder.detail.get({"order":this.formData.out_order_no});
+            this.loading = false;
+            if (resp.code == 0) {
+                this.$message.error(resp.msg);
+                this.visible = false;
+                return ;
+            }
+            this.orderData = resp.data;
+        },
+        async submit(){
+            var validate = await this.$refs.dialogForm.validate().catch(()=>{});
+            if(!validate){ return false }
+            this.isSaveing = true;
+            let submitData = JSON.parse(JSON.stringify(this.refundData));
+            submitData.order = this.formData.out_order_no;
+            var resp = await this.$API.merOrder.refundAudit.post(submitData);
+            this.isSaveing = false;
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.visible = false;
+            this.refundData = {
+                status:1
+            };
+            this.$emit("success");
+        }
+    }
+}
+</script>
+
+<style>
+.text-center{text-align: center;}
+.border-none{border: 0;}
+.order-detail{padding: 10px;}
+.order-detail .order-goods{display: flex;align-items: flex-start;background-color: #fff;border-bottom: 1px solid #f8f8f8;}
+.order-detail .order-goods .goods-img{width: 80px;overflow: hidden;}
+.order-detail .order-goods img{width: 80px;border-radius: 5px;}
+.order-detail .goods-info{margin-left: 10px;font-size: 12px;flex: 1;padding: 10px 0;}
+.order-detail .goods-info .name{font-size: 16px;color: #333;}
+.order-detail .goods-info .desc{font-size: 12px;color: #999;display: flex;align-items: center;justify-content: space-between;margin: 10px 0;}
+.order-detail .goods-info .total{font-size: 16px;color: #333;text-align: right;font-weight: bold;}
+.order-detail .order-info{background-color: #fff;padding: 10px;margin-top: 10px;}
+.order-detail .order-info .title{font-size: 16px;color: #333;font-weight: bold;padding-bottom: 10px;border-bottom: 1px solid #f8f8f8;display: flex;align-items: center;justify-content: space-between;}
+.order-detail .order-info .title span{font-size: 12px;color: #333;font-weight: normal;border: 1px solid #ededed;padding: 5px 10px;cursor: pointer;}
+
+.order-detail .order-info .info-item{height: 40px;line-height: 40px;font-size: 12px;display: flex;align-items: center;border-bottom: 1px solid #f8f8f8;}
+.order-detail .order-info .info-item .right{color: #666;margin-left: auto;margin-right: 0;}
+.order-detail .order-info .info-item .right text{border: 1px solid #ccc;color: #333;font-size: 12px;padding: 0 15upx;margin-left: 10px;border-radius: 5px;}
+.empty-data-item{margin-top: 10px;}
+
+.order-detail .order-status{padding: 20px 10px;text-align: center;background-color: #f8f8f8;margin-bottom: 10px;}
+.order-detail .order-status .status-name{text-align: center;font-size: 16px;color: #333;font-weight: bold;display: flex;align-items: center;justify-content: center;}
+.order-detail .order-status .status-desc{font-size: 12px;color: #666;margin-top: 10px;}
+
+.order-data-goods{display: flex;align-items:flex-start;gap: 10px;padding: 10px;}
+.order-data-goods .icon{border: 1px solid #f1f1f1;border-radius: 5px;padding: 3px;display: flex;align-items: center;justify-content: center;}
+.order-data-goods img{width: 50px;height: 50px;}
+</style>

+ 47 - 0
src/views/service/order/refund/components/search.vue

@@ -0,0 +1,47 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">条件筛选</el-tag>
+        </legend>
+        <el-form class="lv-form-inline" ref="searchForm" :model="searchKey" label-position="right" label-width="100px">
+            <div class="search-form">
+                <div class="form-left">
+                    <el-row :gutter="10">
+                        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
+                            <el-input v-model="searchKey.order_sn" placeholder="来客订单编号" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>订单编号</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="6">
+                            <el-input v-model="searchKey.out_order_no" placeholder="系统单号" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>系统单号</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :xs="12" :sm="6" :md="6" :lg="8" :xl="6">
+                            <el-date-picker v-model="searchKey.create" :style="{width: '100%'}" placeholder="请选择创建时间" start-placeholder="开始时间" end-placeholder="结束时间" type="daterange" range-separator="至" @change="searchForm" />
+                        </el-col>
+                    </el-row>
+                </div>
+                <div class="form-line"></div>
+                <div class="form-right">
+                    <el-button type="primary" icon="el-icon-search" @click="searchForm">搜索</el-button>
+                </div>
+            </div>
+        </el-form>
+    </fieldset>
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            searchKey:{}
+        }
+    },
+    methods: {
+        searchForm(){
+            this.$emit("success",this.searchKey);
+        }
+    }
+}
+</script>

+ 359 - 0
src/views/service/order/refund/components/table.vue

@@ -0,0 +1,359 @@
+<template>
+    <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id" :row-class-name="tableRowClassName">
+        <el-table-column type="selection" width="50" fixed="left"></el-table-column>
+        <el-table-column label="订单编号" width="260" fixed="left" prop="goods_id">
+            <template #default="scope">
+                <div class="order-name">
+                    <span>{{ scope.row.order_sn }}</span>
+                    <span class="dec">系统单号:{{ scope.row.out_order_no }}</span>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="商品类型" prop="types" width="100">
+            <template #default="scope">
+                {{ scope.row.product?scope.row.product.types:'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="商品信息" width="340" prop="name">
+            <template #default="scope">
+                <div class="goods-img">
+                    <div class="img">
+                        <el-image 
+                        style="width: 54px; height: 54px"
+                        :src="scope.row.img"
+                        :zoom-rate="1.2"
+                        :max-scale="7"
+                        :min-scale="0.2"
+                        :preview-src-list="[scope.row.img]"
+                        preview-teleported
+                        z-index="999"
+                        fit="cover"></el-image>
+                    </div>
+                    <div class="name">
+                        <template v-if="scope.row.product">
+                            <span v-if="scope.row.product.is_new == 1">{{scope.row.product.price}}元代{{scope.row.product.line_price}}元商场权益券{{ scope.row.product.product_name }}</span>
+                            <span v-else>{{ scope.row.product?scope.row.product.product_name:'-' }}</span>
+                            <span class="dec">商品编码:{{ scope.row.product?scope.row.product.product_id:'-' }}</span>
+                        </template>
+                    </div>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="下单用户" width="340" prop="name">
+            <template #default="scope">
+                <div class="goods-img">
+                    <div class="img">
+                        <el-image 
+                        style="width: 54px; height: 54px"
+                        :src="scope.row.user.avatar"
+                        :zoom-rate="1.2"
+                        :max-scale="7"
+                        :min-scale="0.2"
+                        :preview-src-list="[scope.row.user.avatar]"
+                        preview-teleported
+                        z-index="999"
+                        fit="cover"></el-image>
+                    </div>
+                    <div class="name">
+                        <span>{{ scope.row.user.nickname }}</span>
+                        <span class="dec">{{ scope.row.user.openid }}</span>
+                    </div>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="商品售价" prop="types" width="120" align="right">
+            <template #default="scope">
+                <div class="order-name">
+                    <span>{{ scope.row.price?$TOOL.money(scope.row.price):'-' }}</span>
+                    <span class="dec">{{ scope.row.number }}份</span>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="顾客支付" prop="types" width="120" align="right">
+            <template #default="scope">
+                {{ scope.row.pay_money?$TOOL.money(scope.row.pay_money):'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="留资号码" prop="types" width="120">
+            <template #default="scope">
+                {{ scope.row.mobile?scope.row.mobile:'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="订单状态" prop="types" width="160" align="left">
+            <template #default="scope">
+                <div class="order-name" v-if="scope.row.status == 0">
+                    <span>待支付</span>
+                    <span class="dec" v-if="scope.row.end_time.min == 0 && scope.row.end_time.sec == 0">已超时,取消支付</span>
+                    <span class="dec" v-else>剩余{{ scope.row.end_time.min }}:{{ scope.row.end_time.sec }}</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 1">
+                    <span>待使用</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 2">
+                    <span>已核销</span>
+                    <span class="dec" v-if="scope.row.is_error==1">拒绝退款</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 3">
+                    <span>已退款</span>
+                    <span class="dec">款项已原路退回</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 4">
+                    <span>退款中</span>
+                    <span class="dec">款项已原路退回</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 5">
+                    <span>已关闭</span>
+                    <span class="dec">用户已取消</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 6">
+                    <span>部分退款</span>
+                    <span class="dec">已退款 <em style="color: #f00;">{{ scope.row.refund_num }}</em> 份</span>
+                </div>
+                <div class="order-name" v-if="scope.row.status == 7">
+                    <span>履约中</span>
+                    <span class="dec">{{scope.row.express_status==2?'货物运输中':'等待发货'}}</span>
+                </div>
+                <!-- 发货后退款 -->
+                <div class="order-name" v-if="scope.row.status == 8">
+                    <span>退款审核中</span>
+                    <span class="dec">已发快递,等待审核拦截</span>
+                </div>
+                <!-- 核销后退款 -->
+                <div class="order-name" v-if="scope.row.status == 9">
+                    <span>退款审核中</span>
+                    <span class="dec">订单已完成核销,售后申请中</span>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="发货状态" prop="types" width="160" align="left">
+            <template #default="scope">
+                <div class="order-name" v-if="scope.row.express_status == 0">
+                    <span>待订单完成</span>
+                </div>  
+                <div class="order-name" v-if="scope.row.express_status == 1">
+                    <span>待发货</span>
+                </div>
+                <div class="order-name" v-if="scope.row.express_status == 2">
+                    <span>已发货</span>
+                </div>
+                <div class="order-name" v-if="scope.row.express_status == 3">
+                    <span>已签收</span>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="来源达人" prop="scene" width="260">
+            <template #default="scope">
+                <div class="goods-img" v-if="scope.row.star">
+                    <div class="name">
+                        <span>{{ scope.row.star?scope.row.star.nick_name:'-' }}</span>
+                        <span class="dec">抖音ID:{{ scope.row.star?scope.row.star.uid:'-' }}</span>
+                    </div>
+                </div>
+                <div v-else>-</div>
+            </template>
+        </el-table-column>
+        <el-table-column label="来源" prop="scene" width="160"></el-table-column>
+        <el-table-column label="下单时间" prop="create_at" width="160"></el-table-column>
+        <el-table-column label="支付时间" prop="pay_at" width="160">
+            <template #default="scope">
+                {{ scope.row.pay_at?scope.row.pay_at:'未支付' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="核销时间" prop="pay_at" width="160">
+            <template #default="scope">
+                {{ scope.row.done_at?scope.row.done_at:'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="操作" width="140" align="left" fixed="right">
+            <template #default="scope">
+                <el-button-group>
+                    <el-button size="small" text @click="table_view(scope.row)">详情</el-button>
+                    <el-button type="danger" size="small" text @click="table_refund(scope.row)" v-if="scope.row.status==8">同意退款</el-button>
+                    <el-button type="danger" size="small" text @click="refund_detail(scope.row)" v-if="scope.row.status==9">处理退款</el-button>
+                </el-button-group>
+            </template>
+        </el-table-column>
+    </scTable>
+    <orderDetail ref="orderDetail" @success="orderSuccess"></orderDetail>
+    <refundMain ref="refundMain" @success="orderSuccess"></refundMain>
+</template>
+
+<script>
+import orderDetail from "@/components/imFloat/order";
+import refundMain from "./refund";
+export default {
+    components:{
+        orderDetail,refundMain
+    },
+    props: {
+        trade: { type: String, default: "0" },
+        status: { type: String, default: "0" },
+    },
+    data(){
+        return {
+            list: {
+                apiObj: this.$API.merOrder.list
+            },
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{
+                status:9
+            }
+        }
+    },
+    methods: {
+        refund_detail(data){
+            this.$nextTick(() => {
+                this.$refs.refundMain.open().setData(data)
+            })
+        },
+        tableRowClassName(row, rowIndex) {
+            if (row.row.is_error === 1) {
+                return 'error-row';
+            } else {
+                return 'success-row';
+            }
+        },
+        orderSuccess(){
+            this.$refs.table.refresh()
+        },
+        table_view(data){
+            this.$nextTick(() => {
+                data.order = data.out_order_no
+                this.$refs.orderDetail.open("edit").setData(data)
+            })
+        },
+        table_black(data){
+            this.$confirm(`拉黑该用户后,用户再整个系统将无法再次下单`, '提示', {
+                type: 'warning'
+            }).then(async () => {
+                var loading = this.$loading();
+                var resp = await this.$API.merOrder.black.post({"order":data.out_order_no,});
+                loading.close();
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.$refs.table.refresh()
+            }).catch(() => {
+
+            })
+        },
+        table_refund(data){
+            this.$confirm(`同意退款前请先确认是否已发出货物,或发出货物是否已拦截、回退,同意后款项直接原路退回,确定执行该操作吗`, '提示', {
+                type: 'warning'
+            }).then(async () => {
+                var loading = this.$loading();
+                var resp = await this.$API.merOrder.refundUser.post({"order":data.out_order_no,});
+                loading.close();
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.$refs.table.refresh()
+            }).catch(() => {
+
+            })
+        },
+        table_del(data){
+            
+        },
+        table_done(data){
+            this.$confirm(`核销后,订单不再支持退款,确定要执行吗`, '提示', {
+                type: 'warning'
+            }).then(async () => {
+                var resp = await this.$API.merOrder.doneMini.post({"order":data.out_order_no});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.$refs.table.refresh()
+            }).catch(() => {
+
+            })
+        },
+        table_cancel(data){
+            this.$confirm(`取消该笔订单的核销,并非是直接退款,订单状态将恢复到【待使用】状态`, '提示', {
+                type: 'warning'
+            }).then(async () => {
+                var resp = await this.$API.merOrder.save.post({"order":data.out_order_no,"field":'status',"val":1});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.$refs.table.refresh()
+            }).catch(() => {
+
+            })
+        },
+        table_error(data){
+            this.$confirm(`订单标记异常后,该笔订单只能通过【异常订单】中进行下一步的操作,并且需等待24小时后系统判定后方可操作`, '提示', {
+                type: 'warning'
+            }).then(async () => {
+                var resp = await this.$API.merOrder.save.post({"order":data.out_order_no,"field":'is_error',"val":1});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.$refs.table.refresh()
+            }).catch(() => {
+
+            })
+        },
+        refresh(){
+            this.$refs.table.refresh()
+        },
+        upData(data){
+            this.$refs.table.upData(data)
+        },
+        handleSuccess(){
+            this.$refs.table.refresh()
+        },
+        sortChange(event){
+            if (event.order) {
+                var data = {
+                    "field":event.prop,
+                    "order":event.order
+                }
+                this.$refs.table.upData(data)
+            } else {
+                this.$refs.table.reload(this.searchKey)
+            }
+            return ;
+        },
+        selectionChange(event){
+            this.dataSelect = [];
+            var arr = [];
+            var arrCompany = [];
+            event.forEach(function(val,index){
+                arr[index] = val.id;
+                arrCompany[index] = val;
+            });
+            this.dataSelectFull = arrCompany;
+            this.dataSelect = arr;
+            this.$emit("success",this.dataSelect);
+            this.$emit("successFull",this.dataSelectFull);
+        },
+    }
+}
+</script>
+
+<style>
+.order-name span{display: block;}
+.order-name span.dec{color: #999;font-size: 12px;}
+.goods-img{display: flex;gap: 5px;}
+.goods-img .name span{display: block;}
+.goods-img .name span.dec{color: #999;font-size: 12px;}
+.goods-price,.price{display: flex;align-items: center;gap: 5px;font-size: 14px;}
+.goods-price .del{text-decoration: line-through;}
+.goods-price span{background-color: #fff !important;
+    border: 1px solid #d3d9e0 !important;
+    border-radius: 4px;
+    box-sizing: border-box;
+    color: #6c737a !important;
+    display: inline-flex;
+    flex: none;
+    font-size: 12px;
+    line-height: 18px !important;
+    padding: 1px 6px !important;text-decoration: none;}
+</style>

+ 52 - 2
src/views/service/order/refund/index.vue

@@ -1,7 +1,57 @@
 <template>
-
+    <el-container class="flex-column">
+        <el-header class="header-tabs">
+            <el-tabs v-model="activeName" type="card" @tab-change="tabChange">
+                <el-tab-pane name="no" label="未核销退款"></el-tab-pane>
+                <el-tab-pane name="yes" label="核销后退款"></el-tab-pane>
+            </el-tabs>
+        </el-header>
+        <div class="table-search">
+            <search @success="handleSuccess"></search>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull" :trade="userInfo.trade" :status="orderStatus"></tablePage>
+            </div>
+        </el-main>
+    </el-container>
 </template>
 
 <script>
+import search from './components/search';
+import tablePage from './components/table';
+export default {
+    components: {
+        search,tablePage
+    },
+    data(){
+        return {
+            activeName:"no",
+            searchKey:{},
+            dataSelect:[],
+            dataSelectFull:[],
+            userInfo:null,
+            orderStatus:9
+        }
+    },
+    created(){
+		var userInfo = this.$TOOL.data.get("USER_INFO");
+		this.userInfo = userInfo;
+    },
+    methods: {
+        tabChange(event) {
+            this.activeName = event;
+            if (event == 'no'){
+                this.orderStatus = 9
+            } else {
+                this.orderStatus = 10
+            }
+            this.$refs.tablePage.upData({"status":this.orderStatus})
+        }
+    }
+}
+</script>
+
+<style scoped>
 
-</script>
+</style>