Zory 2 dagen geleden
bovenliggende
commit
9137d66568

+ 42 - 0
src/views/merchant/member/analysis/components/search.vue

@@ -0,0 +1,42 @@
+<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:8">
+                            <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 {
+    props: {
+        status: { type: String, default: "1" },
+    },
+    data(){
+        return {
+            searchKey:{
+                ex_status:this.status
+            }
+        }
+    },
+    methods: {
+        searchForm(){
+            this.$emit("success",this.searchKey);
+        }
+    }
+}
+</script>

+ 86 - 0
src/views/merchant/member/analysis/components/table.vue

@@ -0,0 +1,86 @@
+<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_sn">
+            <template #default="scope">
+                {{scope.row.order_sn}}
+            </template>
+        </el-table-column>
+        <el-table-column label="套餐信息" prop="time">
+            <template #default="scope">
+                续费<span class="status-danger">{{scope.row.time}}天</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="套餐金额" prop="money">
+            <template #default="scope">
+                {{ scope.row.money }}元
+            </template>
+        </el-table-column>
+        <el-table-column label="支付状态" prop="certificate_id">
+            <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>
+            </template>
+        </el-table-column>
+        <el-table-column label="支付时间" prop="pay_at">
+            <template #default="scope">
+                {{ scope.row.pay_at?scope.row.pay_at:'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="create_at">
+            <template #default="scope">
+                {{ scope.row.create_at }}
+            </template>
+        </el-table-column>
+    </scTable>
+</template>
+
+<script>
+export default {
+    props: {
+        type: { type: String, default: "1" }
+    },
+    data(){
+        return {
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
+            list: {
+                apiObj: this.$API.mRenew.list
+            },
+            visible:false,
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{
+                type:this.type
+            }
+        }
+    },
+    methods:{
+        table_edit(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit",this.type).setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm("确定要删除该数据吗?","删除确认",{type: 'warning'}).then(async ()=>{
+                var resp = await this.$API.mPrice.del.post({"id":data.id,"type":""});
+                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()
+        },
+    }
+}
+</script>

+ 69 - 9
src/views/merchant/member/analysis/index.vue

@@ -1,42 +1,85 @@
 <template>
     <el-container class="flex-column">
-        <div class="table-search">
-            <el-card shadow="never" header="会员卡数据" class="borderNone mt10">
+        <div class="table-search" style="border-bottom: 0;">
+            <el-card shadow="never" class="borderNone mb10">
+                <template #header>
+                    <div class="news-title">会员卡数据</div>
+                </template>
                 <div class="user-card-body">
                     <div class="card-item">
                         <div class="card-num">0</div>
-                        <div class="card-tips">会员数量(个) <i class="layui-icon layui-icon-about" data-tips-text="扫描店铺二维码领取会员卡的人数"></i></div>
+                        <div class="card-tips">会员数量(个) 
+                            <el-tooltip effect="dark" content="扫描店铺二维码领取会员卡的人数">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
                     </div>
                     <div class="card-item">
                         <div class="card-num">0</div>
-                        <div class="card-tips">充值人数(个)<i class="layui-icon layui-icon-about" data-tips-text="充值会员卡的人数"></i></div>
+                        <div class="card-tips">充值人数(个)
+                            <el-tooltip effect="dark" content="充值会员卡的人数">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
                     </div>
                     <div class="card-item">
                         <div class="card-num">0.00</div>
-                        <div class="card-tips">充值总金额(元)<i class="layui-icon layui-icon-about" data-tips-text="会员卡充值金额总和"></i></div>
+                        <div class="card-tips">充值总金额(元)
+                            <el-tooltip effect="dark" content="会员卡充值金额总和">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
                     </div>
                     <div class="card-item">
                         <div class="card-num">0.00</div>
-                        <div class="card-tips">剩余余额(元)<i class="layui-icon layui-icon-about" data-tips-text="会员卡剩余余额总和"></i></div>
+                        <div class="card-tips">剩余余额(元)
+                            <el-tooltip effect="dark" content="会员卡剩余余额总和">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
                     </div>
                     <div class="card-item">
                         <div class="card-num">0.00</div>
-                        <div class="card-tips">历史总金额(元)<i class="layui-icon layui-icon-about" data-tips-text="历史总金额 = 历史的会员充值金额总和 + 充值后的赠送金额总和"></i></div>
+                        <div class="card-tips">历史总金额(元)
+                            <el-tooltip effect="dark" content="历史总金额 = 历史的会员充值金额总和 + 充值后的赠送金额总和">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
                     </div>
                     <div class="card-item">
                         <div class="card-num">0.00</div>
-                        <div class="card-tips">剩余额度(元)<i class="layui-icon layui-icon-about" data-tips-text="店铺会员卡剩余可充值余额=会员卡额度-会员总余额。剩余余额为0时,会员卡将不能充值,需提升额度或会员卡金额消费后才能充值"></i></div>
+                        <div class="card-tips">剩余额度(元)
+                            <el-tooltip effect="dark">
+                                <template #content> 店铺会员卡剩余可充值余额=会员卡额度-会员总余额。<br />剩余余额为0时,会员卡将不能充值,<br />需提升额度或会员卡金额消费后才能充值</template>
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
                     </div>
                 </div>
             </el-card>
+            <search @success="handleSuccess"></search>
         </div>
         <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull"></tablePage>
+            </div>
         </el-main>
     </el-container>
 </template>
 
 <script>
-
+import tablePage from './components/table';
+import search from './components/search';
+export default {
+    components: {
+        tablePage,search
+    },
+    data() {
+        return {
+            
+        }
+    },
+}
 </script>
 
 <style>
@@ -45,4 +88,21 @@
 .user-card-body .card-tips{font-size: 12px;color: #666;display: flex;align-items: center;}
 .user-card-body .card-tips i{font-style: normal;margin-left: 5px;}
 .user-card-body .card-num{font-size: 20px;font-weight: bold;}
+.mb10{margin-bottom: 15px;}
+.news-title{
+    font-size: 16px;
+    color: #000;
+    font-weight: bold;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+}
+.news-title::before{
+    content: "";
+    width: 4px;
+    height: 16px;
+    display: block;
+    background-color: var(--el-color-primary);;
+    margin-right: 8px;
+}
 </style>

+ 42 - 0
src/views/merchant/turnover/history/components/search.vue

@@ -0,0 +1,42 @@
+<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:8">
+                            <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 {
+    props: {
+        status: { type: String, default: "1" },
+    },
+    data(){
+        return {
+            searchKey:{
+                ex_status:this.status
+            }
+        }
+    },
+    methods: {
+        searchForm(){
+            this.$emit("success",this.searchKey);
+        }
+    }
+}
+</script>

+ 86 - 0
src/views/merchant/turnover/history/components/table.vue

@@ -0,0 +1,86 @@
+<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_sn">
+            <template #default="scope">
+                {{scope.row.order_sn}}
+            </template>
+        </el-table-column>
+        <el-table-column label="套餐信息" prop="time">
+            <template #default="scope">
+                续费<span class="status-danger">{{scope.row.time}}天</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="套餐金额" prop="money">
+            <template #default="scope">
+                {{ scope.row.money }}元
+            </template>
+        </el-table-column>
+        <el-table-column label="支付状态" prop="certificate_id">
+            <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>
+            </template>
+        </el-table-column>
+        <el-table-column label="支付时间" prop="pay_at">
+            <template #default="scope">
+                {{ scope.row.pay_at?scope.row.pay_at:'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="create_at">
+            <template #default="scope">
+                {{ scope.row.create_at }}
+            </template>
+        </el-table-column>
+    </scTable>
+</template>
+
+<script>
+export default {
+    props: {
+        type: { type: String, default: "1" }
+    },
+    data(){
+        return {
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
+            list: {
+                apiObj: this.$API.mRenew.list
+            },
+            visible:false,
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{
+                type:this.type
+            }
+        }
+    },
+    methods:{
+        table_edit(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit",this.type).setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm("确定要删除该数据吗?","删除确认",{type: 'warning'}).then(async ()=>{
+                var resp = await this.$API.mPrice.del.post({"id":data.id,"type":""});
+                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()
+        },
+    }
+}
+</script>

+ 76 - 1
src/views/merchant/turnover/history/index.vue

@@ -1,3 +1,78 @@
 <template>
+    <el-container class="flex-column">
+        <div class="table-search" style="border-bottom: 0;">
+            <el-alert class="mb10" title="温馨提示" type="error" :closable="false" description="当天数据统计非实时,如查看觉得数据不对,请过0点后刷新看前一天数据为准"></el-alert>
+            <el-card shadow="never" class="borderNone mb10">
+                <template #header>
+                    <div class="news-title">累计营业额</div>
+                </template>
+                <div class="user-card-body">
+                    <div class="card-item">
+                        <div class="card-num">0.00</div>
+                        <div class="card-tips">线上收款(元)
+                        </div>
+                    </div>
+                    <div class="card-item">
+                        <div class="card-num">0.00</div>
+                        <div class="card-tips">会员卡支付(元)
+                        </div>
+                    </div>
+                    <div class="card-item">
+                        <div class="card-num">0.00</div>
+                        <div class="card-tips">其他支付(元)
+                            <el-tooltip effect="dark" content="收款码付款金额">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
+                    </div>
+                </div>
+            </el-card>
+            <search @success="handleSuccess"></search>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull"></tablePage>
+            </div>
+        </el-main>
+    </el-container>
+</template>
 
-</template>
+<script>
+import tablePage from './components/table';
+import search from './components/search';
+export default {
+    components: {
+        tablePage,search
+    },
+    data() {
+        return {
+            
+        }
+    },
+}
+</script>
+
+<style>
+.user-card-body{display: flex;align-items: center;justify-content: space-around;padding: 10px 0;}
+.user-card-body .card-item{text-align: center;}
+.user-card-body .card-tips{font-size: 12px;color: #666;display: flex;align-items: center;}
+.user-card-body .card-tips i{font-style: normal;margin-left: 5px;}
+.user-card-body .card-num{font-size: 20px;font-weight: bold;}
+.mb10{margin-bottom: 15px;}
+.news-title{
+    font-size: 16px;
+    color: #000;
+    font-weight: bold;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+}
+.news-title::before{
+    content: "";
+    width: 4px;
+    height: 16px;
+    display: block;
+    background-color: var(--el-color-primary);;
+    margin-right: 8px;
+}
+</style>

+ 86 - 0
src/views/merchant/turnover/index/components/table.vue

@@ -0,0 +1,86 @@
+<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_sn">
+            <template #default="scope">
+                {{scope.row.order_sn}}
+            </template>
+        </el-table-column>
+        <el-table-column label="套餐信息" prop="time">
+            <template #default="scope">
+                续费<span class="status-danger">{{scope.row.time}}天</span>
+            </template>
+        </el-table-column>
+        <el-table-column label="套餐金额" prop="money">
+            <template #default="scope">
+                {{ scope.row.money }}元
+            </template>
+        </el-table-column>
+        <el-table-column label="支付状态" prop="certificate_id">
+            <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>
+            </template>
+        </el-table-column>
+        <el-table-column label="支付时间" prop="pay_at">
+            <template #default="scope">
+                {{ scope.row.pay_at?scope.row.pay_at:'-' }}
+            </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="create_at">
+            <template #default="scope">
+                {{ scope.row.create_at }}
+            </template>
+        </el-table-column>
+    </scTable>
+</template>
+
+<script>
+export default {
+    props: {
+        type: { type: String, default: "1" }
+    },
+    data(){
+        return {
+            colorData:['','彩色','黑白'],
+            duplexData:['','单面','双面'],
+            list: {
+                apiObj: this.$API.mRenew.list
+            },
+            visible:false,
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{
+                type:this.type
+            }
+        }
+    },
+    methods:{
+        table_edit(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit",this.type).setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm("确定要删除该数据吗?","删除确认",{type: 'warning'}).then(async ()=>{
+                var resp = await this.$API.mPrice.del.post({"id":data.id,"type":""});
+                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()
+        },
+    }
+}
+</script>

+ 74 - 1
src/views/merchant/turnover/index/index.vue

@@ -1,3 +1,76 @@
 <template>
+    <el-container class="flex-column">
+        <div class="table-search" style="border-bottom: 0;">
+            <el-card shadow="never" class="borderNone mb10">
+                <template #header>
+                    <div class="news-title">今日营业额</div>
+                </template>
+                <div class="user-card-body">
+                    <div class="card-item">
+                        <div class="card-num">0.00</div>
+                        <div class="card-tips">线上收款(元)
+                        </div>
+                    </div>
+                    <div class="card-item">
+                        <div class="card-num">0.00</div>
+                        <div class="card-tips">会员卡支付(元)
+                        </div>
+                    </div>
+                    <div class="card-item">
+                        <div class="card-num">0.00</div>
+                        <div class="card-tips">其他支付(元)
+                            <el-tooltip effect="dark" content="收款码付款金额">
+                                <el-icon><el-icon-question-filled /></el-icon>
+                            </el-tooltip>
+                        </div>
+                    </div>
+                </div>
+            </el-card>
+            <div class="news-title">线上支付总计(不涵盖会员卡支付和其他支付)</div>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull"></tablePage>
+            </div>
+        </el-main>
+    </el-container>
+</template>
 
-</template>
+<script>
+import tablePage from './components/table';
+export default {
+    components: {
+        tablePage
+    },
+    data() {
+        return {
+            
+        }
+    },
+}
+</script>
+
+<style>
+.user-card-body{display: flex;align-items: center;justify-content: space-around;padding: 10px 0;}
+.user-card-body .card-item{text-align: center;}
+.user-card-body .card-tips{font-size: 12px;color: #666;display: flex;align-items: center;}
+.user-card-body .card-tips i{font-style: normal;margin-left: 5px;}
+.user-card-body .card-num{font-size: 20px;font-weight: bold;}
+.mb10{margin-bottom: 15px;}
+.news-title{
+    font-size: 16px;
+    color: #000;
+    font-weight: bold;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+}
+.news-title::before{
+    content: "";
+    width: 4px;
+    height: 16px;
+    display: block;
+    background-color: var(--el-color-primary);;
+    margin-right: 8px;
+}
+</style>