Zory преди 2 седмици
родител
ревизия
ffe567b9d7

+ 40 - 0
src/api/model/orderlife.js

@@ -0,0 +1,40 @@
+import config from "@/config";
+import http from "@/utils/request";
+
+export default {
+    list: {
+        url: `${config.API_URL}/order/life/list`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    refund: {
+        url: `${config.API_URL}/order/life/refund`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    sms: {
+        url: `${config.API_URL}/order/life/sms`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+    del: {
+        url: `${config.API_URL}/order/life/send`,
+        name: "-",
+        post: async function (params) {
+            return await http.post(this.url, params);
+        },
+    },
+    export: {
+        url: `${config.API_URL}/order/life/export`,
+        name: "-",
+        get: async function (params) {
+            return await http.get(this.url, params);
+        },
+    },
+}

+ 96 - 0
src/views/manage/components/send.vue

@@ -0,0 +1,96 @@
+<template>
+    <el-dialog :title="titleMap[mode]" v-model="visible" :width="600" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
+        <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
+            <el-form-item label="订单编号" prop="order_id" v-if="mode=='add'">
+                <el-input v-model="formData.order_id" clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="订单编号" prop="order_id" v-if="mode=='edit'">
+                <el-input v-model="formData.order_id" readonly clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="联系人" prop="username">
+                <el-input v-model="formData.username" clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="联系电话" prop="mobile">
+                <el-input v-model="formData.mobile" clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="详细地址" prop="address">
+                <el-input v-model="formData.address" clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg">填写详细的地址,需要带有省市区</div>
+            </el-form-item>
+        </el-form>
+		<template #footer>
+			<el-button @click="visible=false" >取 消</el-button>
+			<el-button type="primary" :loading="isSaveing" @click="submit()">提交</el-button>
+		</template>
+    </el-dialog>
+    <agentData ref="agentData" :multiple="false" @success="handleSuccess"></agentData>
+</template>
+<script>
+export default {
+    data(){
+        return {
+            stepActive:1,
+            loading: false,
+            mode:"add",
+            titleMap:{
+                add:"手动录单",
+                edit:"手动录单"
+            },
+            visible: false,
+            isSaveing: false,
+            formData:{},
+            disabled:false,
+            rules:{
+                order_id: [
+                    {required: true, message: '请输入'}
+                ],
+                username: [
+                    {required: true, message: '请输入'}
+                ],
+                mobile: [
+                    {required: true, message: '请输入'}
+                ],
+                address: [
+                    {required: true, message: '请输入'}
+                ]
+            }
+        }
+    },
+    methods:{
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            this.formData.order_id = data.order_id;
+        },
+        async submit(){
+            var validate = await this.$refs.dialogForm.validate().catch(()=>{});
+            if(!validate){ return false }
+            this.isSaveing = true;
+            let submitData = JSON.parse(JSON.stringify(this.formData));
+            var resp = await this.$API.merOrder.system.post(submitData);
+            this.isSaveing = false;
+            if (resp.code !== 1) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.visible = false;
+            this.formData = {};
+            this.submitState = false;
+            this.$emit("success");
+        }
+    }
+}
+</script>
+<style>
+.mt20 {margin-top: 20px;}
+.login-msg-yzm {display: flex;width: 100%;}
+.login-msg-yzm .el-button {margin-left: 10px;--el-button-size:42px;}
+</style>

+ 7 - 0
src/views/manage/order/before/index.vue

@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script>
+
+</script>

+ 7 - 0
src/views/manage/order/done/index.vue

@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script>
+
+</script>

+ 60 - 0
src/views/manage/order/life/components/form.vue

@@ -0,0 +1,60 @@
+<template>
+    <el-dialog :title="titleMap[mode]" v-model="visible" :width="600" destroy-on-close @closed="$emit('closed')" :close-on-click-modal="false" :close-on-press-escape="false">
+        <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
+            <el-form-item label="短信内容">
+                <el-input v-model="sms" type="textarea" disabled readonly clearable placeholder="门店名称" rows="5"></el-input>
+                <div class="el-form-item-msg" style="margin-top: 10px;">
+                    <el-button v-copy="sms">复制</el-button>
+                </div>
+            </el-form-item>
+        </el-form>
+		<template #footer>
+			<el-button @click="visible=false" >关 闭</el-button>
+		</template>
+    </el-dialog>
+</template>
+<script>
+export default {
+    data(){
+        return {
+            loading: false,
+            mode:"add",
+            titleMap:{
+                add:"查看短信",
+                edit:"查看短信"
+            },
+            visible: false,
+            isSaveing: false,
+            formData:{},
+            submitState:false,
+            disabled:false,
+            rules:{},
+            sms:""
+        }
+    },
+    methods:{
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            this.formData = data;
+            this.getSms();
+        },
+        async getSms(){
+            var resp = await this.$API.merOrderlife.sms.get({id:this.formData.id});
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.sms = resp.data.sms;
+        }
+    }
+}
+</script>
+<style>
+.mt20 {margin-top: 20px;}
+.login-msg-yzm {display: flex;width: 100%;}
+.login-msg-yzm .el-button {margin-left: 10px;--el-button-size:42px;}
+</style>

+ 56 - 0
src/views/manage/order/life/components/option.vue

@@ -0,0 +1,56 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">按需操作</el-tag>
+        </legend>
+        <div class="op-header">
+            <div class="left-panel">
+                <sc-file-export :apiObj="$API.orderlife.export" :data="searchKey" :fileName="'来客订单_'+(new Date().getTime())" async>
+                    <template #default="{ open }">
+                        <el-button type="primary" icon="sc-icon-download" @click="open">导出</el-button>
+                    </template>
+                </sc-file-export>
+            </div>
+        </div>
+    </fieldset>
+</template>
+
+<script>
+import scFileExport from '@/components/scFileExport'
+export default {
+    components: {
+        scFileExport
+    },
+    props: {
+        type: { type: String, default: "1" },
+        dataSelect: { type: Array, default: () => [] },
+        searchKey: { type: Object, default: () => {} },
+        dataSelectFull: { type: Array, default: () => [] }
+    },
+    data(){
+        return {
+
+        }
+    },
+    methods: {
+        table_export(){
+            
+        },
+        async table_batch_status(status){
+            if (this.dataSelect.length == 0) {
+                return this.$message.error("请选择修改数据")
+            }
+            let submitData = {"id":this.dataSelect,"value":status,"field":"status","type":"batch"};
+            var resp = await this.$API.merGoods.batch.post(submitData);
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.$emit("success");
+        },
+        handleSuccess(){
+            this.$emit("success");
+        },
+    }
+}
+</script>

+ 69 - 0
src/views/manage/order/life/components/search.vue

@@ -0,0 +1,69 @@
+<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 :span="this.$store.state.global.ismobile?12:4">
+                            <el-input v-model="searchKey.orderid" placeholder="订单编号" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>订单编号</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <el-input v-model="searchKey.product" placeholder="商品ID" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>商品ID</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <el-input v-model="searchKey.name" placeholder="商品标题" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>商品标题</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <el-input v-model="searchKey.mobile" placeholder="手机号码" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>手机号码</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <el-select v-model="searchKey.status" clearable placeholder="请选择状态" @change="searchForm" :style="{width: '100%'}" class="diy-select">
+                                <el-option value="1" label="待支付"></el-option>
+                                <el-option value="2" label="已支付"></el-option>
+                                <el-option value="3" label="待核销"></el-option>
+                                <el-option value="4" label="已核销"></el-option>
+                                <el-option value="5" label="已取消"></el-option>
+                                <el-option value="6" label="退款审核"></el-option>
+                                <el-option value="7" label="拒绝退款"></el-option>
+                                <template #prefix>状态</template>
+                            </el-select>
+                        </el-col>
+                        <el-col :span="this.$store.state.global.ismobile?12:4">
+                            <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>

+ 176 - 0
src/views/manage/order/life/components/table.vue

@@ -0,0 +1,176 @@
+<template>
+    <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id">
+        <el-table-column type="selection" width="50" fixed="left"></el-table-column>
+        <el-table-column label="订单编号" prop="order_id" width="220" fixed="left">
+            <template #default="scope">
+                <span v-if="scope.row.order_id">{{ scope.row.order_id }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="所属代理" prop="status" width="160">
+            <template #default="scope">
+                <span>{{ scope.row.agent?scope.row.agent.name:'-' }}</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="所属店铺" prop="status" width="160">
+            <template #default="scope">
+                <span>{{ scope.row.store?scope.row.store.store_name:'-' }}</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="商品ID" prop="out_id" width="150">
+            <template #default="scope">
+                <span v-if="scope.row.out_id">{{ scope.row.out_id }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="商品名称" prop="product_name" width="220">
+            <template #default="scope">
+                <span v-if="scope.row.product_name">{{ scope.row.product_name }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="手机号码" prop="mobile" width="120">
+            <template #default="scope">
+                <span v-if="scope.row.mobile">{{ scope.row.mobile }}</span>
+                <span class="status-danger" v-else>未同步</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="数量" prop="count" width="100">
+            <template #default="scope">
+                <span>{{ scope.row.count }}件</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="订单金额" prop="order_amount" width="150">
+            <template #default="scope">
+                <span v-if="scope.row.order_amount">¥{{ scope.row.order_amount }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="支付金额" prop="pay_amount" width="150">
+            <template #default="scope">
+                <span v-if="scope.row.pay_amount">¥{{ scope.row.pay_amount }}</span>
+                <span class="status-danger" v-else>未设置</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="状态" prop="status" width="180">
+            <template #default="scope">
+                <div class="status-danger" v-if="scope.row.status==0"><sc-status-indicator type="danger"></sc-status-indicator> 待支付</div>
+                <div class="status-success" v-if="scope.row.status==1"><sc-status-indicator type="success"></sc-status-indicator> 已支付</div>
+                <div class="status-danger" v-if="scope.row.status==2"><sc-status-indicator type="danger"></sc-status-indicator> 待核销</div>
+                <div class="status-info" v-if="scope.row.status==3"><sc-status-indicator type="info"></sc-status-indicator> 已核销</div>
+                <div class="status-info" v-if="scope.row.status==4"><sc-status-indicator type="info"></sc-status-indicator> 已取消</div>
+                <div class="status-info" v-if="scope.row.status==5"><sc-status-indicator type="info"></sc-status-indicator> 退款审核</div>
+                <div class="status-info" v-if="scope.row.status==6"><sc-status-indicator type="info"></sc-status-indicator> 拒绝退款</div>
+                <div v-if="scope.row.status==2 && scope.row.remark">{{ scope.row.remark }}</div>
+            </template>
+        </el-table-column>
+        <el-table-column label="支付时间" prop="pay_at" width="180">
+            <template #default="scope">
+                <span v-if="scope.row.pay_at">{{ scope.row.pay_at }}</span>
+                <span class="status-danger" v-else>-</span>
+            </template>
+
+        </el-table-column>
+        <el-table-column label="退款时间" prop="refund_at" width="180">
+            <template #default="scope">
+                <span v-if="scope.row.refund_at">{{ scope.row.refund_at }}</span>
+                <span class="status-danger" v-else>-</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="create_at" width="180"></el-table-column>
+        <el-table-column label="操作" width="80" align="right" fixed="right">
+            <template #default="scope">
+                <el-button-group>
+                    <el-button text size="small" @click="table_express(scope.row)" v-if="scope.row.status==1">手动录单</el-button>
+                </el-button-group>
+            </template>
+        </el-table-column>
+    </scTable>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+    <addMain ref="addMain" @success="handleSuccess"></addMain>
+</template>
+
+<script>
+import formMain from './form';
+import addMain from "@/views/manage/components/send";
+export default {
+    components: {
+        formMain,addMain
+    },
+    data(){
+        return {
+            list: {
+                apiObj: this.$API.orderlife.list
+            },
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{}
+        }
+    },
+    methods: {
+        table_express(data){
+            this.$confirm(`手动录入核销订单后,开启自动呼叫快递订单将转移至【待核销】列表中,未开启则转移至【待发货】中`, '提示', {
+                type: 'warning'
+            }).then(() => {
+                this.$nextTick(() => {
+                    this.$refs.addMain.open("edit").setData(data)
+                })
+            }).catch(() => {
+
+            })
+        },
+        async table_send(data){
+            var resp = await this.$API.orderlife.del.post({"id":data.id});
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg)
+            }
+            this.$message.success(resp.msg)
+            this.$refs.table.refresh()
+        },
+        table_view(data){
+            this.$nextTick(() => {
+                this.$refs.detailMain.open().setData(data)
+            })
+        },
+        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);
+        },
+        table_passwd(row){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit").setData(row)
+            })
+        },
+    }
+}
+</script>

+ 49 - 0
src/views/manage/order/life/index.vue

@@ -0,0 +1,49 @@
+<template>
+    <el-container class="flex-column">
+        <div class="table-search">
+            <search @success="handleSuccess"></search>
+            <optionBtn @success="handleSuccess" :dataSelect="dataSelect" :dataSelectFull="dataSelectFull" type="3"></optionBtn>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull" type="3"></tablePage>
+            </div>
+        </el-main>
+    </el-container>  
+</template>
+
+<script>
+import search from './components/search';
+import optionBtn from './components/option';
+import tablePage from './components/table';
+export default {
+    components: {
+        search,tablePage,optionBtn
+    },
+    data(){
+        return {
+            searchKey:{
+                status:7
+            },
+            dataSelect:[],
+            dataSelectFull:[],
+        }
+    },
+    methods: {
+        tableHandle(data){
+            this.dataSelect = data;
+        },
+        tableHandleFull(data){
+            this.dataSelectFull = data;
+        },
+        handleSuccess(data){
+            this.$refs.tablePage.upData(data)
+        },
+        handleClick(name){
+            this.activeName = name;
+            this.searchKey.type = name;
+            this.$refs.tablePage.upData(this.searchKey)
+        }
+    }
+}
+</script>

+ 7 - 0
src/views/manage/order/refund/index.vue

@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script>
+
+</script>

+ 7 - 0
src/views/manage/order/send/index.vue

@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script>
+
+</script>

+ 7 - 0
src/views/manage/refund/index.vue

@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script>
+
+</script>

+ 13 - 2
src/views/manage/shop/index/components/form.vue

@@ -109,13 +109,13 @@
                                     />
                                 </el-form-item>
                             </el-col>
-                            <el-col :span="12">
+                            <el-col :span="6">
                                 <el-form-item label="客服电话" prop="service_mobile">
                                     <el-input v-model="formData.service_mobile" clearable placeholder="请输入"></el-input>
                                     <div class="el-form-item-msg">在小程序选择门店中展现</div>
                                 </el-form-item>
                             </el-col>
-                            <el-col :span="12">
+                            <el-col :span="6">
                                 <el-form-item label="核销形式" prop="service_type">
                                     <el-select v-model="formData.service_type" clearable placeholder="请选择" :style="{width: '100%'}">
                                         <el-option :value="1" label="预约"></el-option>
@@ -124,6 +124,14 @@
                                     <div class="el-form-item-msg">预约无需添加收货地址</div>
                                 </el-form-item>
                             </el-col>
+                            <el-col :span="6">
+                                <el-form-item label="券码时效" prop="code_time">
+                                    <el-input v-model="formData.code_time" clearable placeholder="请输入">
+                                        <template #append>天</template>
+                                    </el-input>
+                                    <div class="el-form-item-msg">提交订单后计算</div>
+                                </el-form-item>
+                            </el-col>
                         </el-row>
                     </fieldset>
                     <fieldset>
@@ -252,6 +260,9 @@ export default {
                 service_type: [
                     {required: true, message: '请选择'}
                 ],
+                code_time: [
+                    {required: true, message: '请输入'}
+                ],
                 service_mobile: [
                     {required: true, message: '请输入'}
                 ],