xgwangman 4 years ago
parent
commit
46e71b5e82

+ 1 - 1
.env

@@ -1,5 +1,5 @@
 VUE_APP_ADMIN_TOKEN_NAME = 'admin_token'
-VUE_APP_API_URL_PREFIX = '/api/admin/'
+VUE_APP_API_URL_PREFIX = 'http://kf-qmx-test.jianyu360.cn/api/admin/'
 VUE_APP_API_ACTION_NAME = '_action'
 VUE_APP_API_TOKEN_NAME = '_token'
 VUE_APP_INDEX_URL = '/'

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
   "dependencies": {
     "axios": "^0.19.0",
     "iview": "^3.5.1",
+    "jquery": "^3.5.1",
     "localStorage": "^1.0.4",
     "lodash": "^4.17.15",
     "marked": "^0.7.0",

+ 1 - 1
src/assets/css/common.css

@@ -329,7 +329,7 @@ textarea:-ms-input-placeholder {
 .ding-dan .ivu-input-with-prefix {
   padding-left: 20px;
 }
-.jie-suan .ivu-table-tbody tr {
+.jie-suan .ivu-table-tbody tr,.ding-dan .ivu-table-tbody tr {
   cursor: pointer;
 }
 .shen-model .ivu-modal-body p {

+ 7 - 5
src/components/tableLists.vue

@@ -4,14 +4,12 @@
             <slot name="filterTitle"></slot>
             <slot name="filterContent"></slot>
             <slot name="filterButton">
-                <Button type="primary" size="large" @click="reload()" v-if="filterType === 1" :class="{bActive:bott}">查 询</Button>
+                <Button type="primary" size="large" @click="reload()" v-if="filterType === 1" :class="{bActive:bott}">{{mage ? '搜 索' : '查 询'}}</Button>
                 <Button type="primary" size="large" @click="reset()" style="margin-left: 10px" v-if="filterReset === 1" :class="{bActive:bott}">重 置</Button>
             </slot>
             <slot name="exportData"></slot>
             <div slot="right">
-                <slot name="filterRight">
-                    <!-- <Input prefix="md-search" type="text" v-model="filter.keyword" placeholder="搜索..." clearable/> -->
-                </slot>
+                <slot name="filterRight"></slot>
             </div>
         </page-bar>
         <slot></slot>
@@ -43,7 +41,8 @@
                 page: 1,
                 total: 0,
                 pageSizeData: this.pageSize,
-                bott: false
+                bott: false,
+                mage: false
             };
         },
         props: {
@@ -119,6 +118,9 @@
             if (rout == '/order/orderList') {
                 this.bott = true
             }
+            if (rout == '/userManage/userList') {
+                this.mage = true
+            }
             if (this.autoLoad) {
                 this.load();
             }

+ 5 - 0
src/router.js

@@ -34,6 +34,11 @@ const routes = [
         path: '/order/orderList/orderDetail',
         name: 'orderDetail',
         component: () => import('./views/order/orderDetail.vue')
+    },
+    {
+        path: '/userMage/userList/userDetail',
+        name: 'userDetail',
+        component: () => import('./views/userManage/userDetail.vue')
     }
 ];
 

+ 40 - 23
src/views/order/components/details.vue

@@ -7,9 +7,9 @@
                 <div class="classfity">
                     <span>订单编号: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{orDetails?orDetails.order_code:'--'}}</span>
                     <span>订单时间: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{orDetails?orDetails.create_time:'--'}}</span>
-                    <span v-if="orderType == 7">订单类型: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{orDetails?orDetails.dis_word ? '分销' : '直销':'--'}}</span>
+                    <span>订单类型: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{orDetails?orDetails.dis_word ? '分销' : '直销':'--'}}</span>
                     <span>产品类型: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{orDetails?orDetails.product_type:'--'}}</span>
-                    <span v-if="orderType == 7">审核状态: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i :class="orDetails.course_status | courseColr">{{orDetails.course_status | coursed}}</i></span>
+                    <span>审核状态: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i :class="orDetails.course_status | courseColr">{{orDetails.course_status | coursed}}</i></span>
                 </div>
             </div>
             <Divider />
@@ -52,17 +52,17 @@
             <div class="cont">
                 <div class="tit">导出信息</div>
                 <div class="classfity">
-                    <span>筛选日期: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{book.startime}} - {{book.endtime}}</i></span>
-                    <span>区域: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{{String(book.area) || '--'}}</i></span>
-                    <span>行业: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{{String(book.industry) || '--'}}</i></span>
+                    <span>筛选日期: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{orderObjectd(book.startime)?book.startime+' - ':'-'}}{{orderObjectd(book.endtime)?book.endtime:'-'}}</i></span>
+                    <span>区域: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{{orderObjectd(book.area)?String(book.area):'--'}}</i></span>
+                    <span>行业: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{{orderObjectd(book.industry)?String(book.industry):'--'}}</i></span>
                     <span>关键词:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{{String(book.keywordsArr) || '--'}}</i></span>
                     <span>金额: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                         <i v-if="book.minprice && book.maxprice">{{book.minprice || ''}}万元 - {{book.maxprice || ''}}万元</i>
                         <i v-else>--</i>
                     </span>
                     <span>信息类型: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{book.subtype || '--'}}</i></span>
-                    <span>采购单位: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{String(book.buyer) || '--'}}</i></span>
-                    <span>中标单位: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{String(book.winner) || '--'}}</i></span>
+                    <span>采购单位: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{orderObjectd(book.buyer)?String(book.buyer):'--'}}</i></span>
+                    <span>中标单位: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{orderObjectd(book.winner)?String(book.winner):'--'}}</i></span>
                     <span>数据规格: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="orDetails">{{orDetails.data_spec || '--'}}</i></span>
                     <span>数据数量: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="orDetails">{{orDetails.data_count}}条</i></span>
                     <span>邮箱地址: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="orDetails">{{orDetails.user_mail || '--'}}</i></span>
@@ -96,12 +96,9 @@
                 <div class="tit">管理信息</div>
                 <div class="classfity">
                     <span>企业信息: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{book?book.entname:''}}</i></span>
-                    <!-- <span>管理员: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book"></i></span>
-                    <span>手机号: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book"></i></span> -->
-                    <span>使用产品人数: &nbsp;<i v-if="book">{{book?book.personnum:''}}人</i></span>
                     <span>行业: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{book?book.industry:''}}</i></span>
+                    <span>使用产品人数: &nbsp;<i v-if="book">{{book?book.personnum:''}}人</i></span>
                     <span>使用周期: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{book?book.cycle+'年':'--'}}</i></span>
-                    <!-- <span>有效周期: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book"></i></span> -->
                 </div>
             </div>
             <Divider />
@@ -112,7 +109,7 @@
                 <div class="tit">会员信息</div>
                 <div class="classfity">
                     <span>会员等级: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="book">{{book?book.level:''}}</i></span>                   
-                    <span>有效周期: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="orDetails">{{orDetails?vip_starttime+' - '+vip_endtime:''}}</i></span>
+                    <span>订阅周期: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i v-if="orDetails">{{orDetails?vip_starttime:''}}{{orDetails?vip_endtime:''}}</i></span>
                 </div>
             </div>
             <Divider />
@@ -135,13 +132,13 @@
                         <i :class="orDetails.order_status" v-if="orDetails">--</i>
                     </span>
                     <span v-if="orderType == 7">订单金额: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                        <i :class="orDetails.money" v-if="orDetails">{{orDetails.order_money?('¥'+orDetails.order_money/100).toLocaleString('en-US'):'--'}}</i>
+                        <i :class="orDetails.money" v-if="orDetails">{{orDetails.order_money?'¥'+orDetails.order_money.toLocaleString('en-US'):'--'}}</i>
                     </span>
                     <span v-if="orderType == 1">实付数量: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                         <i v-if="orDetails">{{orDetails.original_price?orDetails.original_price:'--'}}</i>
                     </span><!-- 线下课程 -->
                     <span>实付金额: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                        <i v-if="orDetails">{{orDetails.pay_money?('¥'+orDetails.pay_money/100).toLocaleString('en-US'):'--'}}</i>
+                        <i v-if="orDetails">{{orDetails.pay_money?'¥'+(orDetails.pay_money/100).toLocaleString('en-US'):'--'}}</i>
                     </span><!-- VIP订阅 -->
                     <span v-if="orderType == 1">支付状态: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                         <i :class="orDetails.order_status | orderColr" v-if="orDetails">{{orDetails.order_status | orderPay}}</i>
@@ -215,7 +212,7 @@
                 type="primary" 
                 size="large"
                 @click="audited()"
-                v-if="orDetails.course_status == 2 && orDetails.order_status !== '已取消' && orDetails.order_status !== -2"
+                v-if="courseDis"
             >审核</Button>
             <Button 
                 class="shen-btn" 
@@ -263,10 +260,36 @@ export default {
     props:{
         orderType: String
     },
+    computed: {
+        courseDis:function() {
+            if (this.orDetails.course_status == 2) {
+                if (this.orDetails.order_status == '未支付') {
+                    return true
+                } else if (this.orDetails.order_status == 0) {
+                    return true
+                }
+            } else {
+                return false
+            }
+        }
+    },
     created () {
         this.ordered()
     },
     methods: {
+        orderObjectd(val) {
+            if (val) {
+                if (val == null) {
+                    return false
+                }
+                if (val.length == 0) {
+                    return false
+                }
+                return true
+            } else {
+                return false
+            }
+        },
         ordered() {
             let rout = this.$route.query
             this.$request('/order/orderList/orderDetails').data({
@@ -276,20 +299,14 @@ export default {
                 this.orders = r.data
                 this.orDetails = r.data.res;
                 this.book = r.data.filterData;
-                // if (this.book && this.book.keywords) {
-                //     this.book.keywords.forEach(e => {// 将对象转为用,分割开的数组
-                //         this.arr.push(e.keyword)
-                //         this.keyMsg = this.arr.join(",")
-                //     });
-                // }
                 this.strCourse = r.data.resCourse;
                 if (this.strCourse) {
                     this.l_starttime = ChangeDate1(this.strCourse.l_starttime);
                     this.l_endtime = ChangeDate1(this.strCourse.l_endtime);
                 }
                 if (this.orDetails) {
-                    this.vip_starttime = ChangeDate(this.orDetails.vip_starttime);
-                    this.vip_endtime = ChangeDate(this.orDetails.vip_endtime);
+                    this.vip_starttime = this.orderObjectd(this.orDetails.vip_starttime)?ChangeDate(this.orDetails.vip_starttime)+' - ':'-';
+                    this.vip_endtime = this.orderObjectd(this.orDetails.vip_endtime)?ChangeDate(this.orDetails.vip_endtime):'-';
                 }
             }).get()
         },

+ 29 - 4
src/views/order/orderList.vue

@@ -15,7 +15,16 @@
         style="background:#fff;padding:10px"
     >
         <template slot="filterTitle">
-            <div class="shai_xuan"><span @click="screened">高级筛选<Icon :class="{'arrowTransform': !flag, 'arrowTransformReturn': flag}" type="ios-arrow-down" /></span><Input suffix="md-search" type="text" size="large" v-model="sear.keyword" placeholder="搜索订单编号" clearable class="ser-ipt"/></div>
+            <div class="shai_xuan">
+                <span @click="screened">
+                    高级筛选
+                    <Icon :class="{'arrowTransform': !flag, 'arrowTransformReturn': flag}" type="ios-arrow-down" />
+                </span>
+                <div class="right-msg">
+                    <Button type="primary" size="large" @click="orderCreated" class="create-order">创建订单</Button>
+                    <Input suffix="md-search" type="text" size="large" v-model="sear.keyword" placeholder="搜索订单编号" clearable class="ser-ipt"/>
+                </div>
+            </div>
             <Divider style="margin:15px 0" />
         </template>
         <template slot="filterContent" v-if="flag">
@@ -197,6 +206,9 @@ export default {
         }
     },
     methods: {
+        orderCreated() {
+
+        },
         screened () {
             this.flag = !this.flag
             if (this.flag) {
@@ -229,10 +241,14 @@ export default {
                 this.filter.invoiceType = ''
                 this.dataVal1 = ''
                 this.dataVal2 = ''
+                this.select1 = false
+                this.select2 = false
+                this.select3 = false
+                this.select4 = false
             }
         },
         rowClick(row) {
-            const news = this.$router.resolve({path:'/order/orderList/orderDetail',query:{id:row.id,proType:row.product_type,orderStas:row.course_status}})
+            const news = this.$router.resolve({path:'/order/orderList/orderDetail',query:{id:row.id,proType:row.product_type,orderStas:row.order_status}})
             window.open(news.href,'_blank')
         },
         handleChange1 (date) {
@@ -659,9 +675,18 @@ export default {
     .tui-btn {
         color: #f4516c;
     }
-    .ser-ipt {
+    
+    .right-msg {
         float: right;
-        width: 162px;
+        .create-order {
+            margin-bottom: 10px;
+            margin-right: 20px;
+            background-color: rgba(52, 191, 163, 1);
+            border-color: rgba(52, 191, 163, 1);
+        }
+        .ser-ipt {
+            width: 162px;
+        }
     }
     .shai_xuan {
         font-size: 18px;

+ 1 - 6
src/views/sales/commissionList.vue

@@ -66,16 +66,11 @@
           </Tooltip>
         </template>
         <template slot-scope="{ row }" slot="op">
-          <Button 
-            size="small" 
-            type="primary" 
-          >
             <router-link 
                 :to="{path:'/order/orderList/orderDetail',query:{id:row.order_id,proType:row.product_name}}"
                 target="_blank"
                 style="color:#fff"
-            >订单</router-link>
-        </Button>
+            ><Button size="small" type="primary">订单</Button></router-link>
         </template>
       </Table>
       <template slot="options">

+ 1 - 3
src/views/sales/partnerList.vue

@@ -44,13 +44,11 @@
           </Tooltip>
         </template>
         <template slot-scope="{ row }" slot="op">
-          <Button size="small" type="primary">
             <router-link 
               :to="{path:'/sales/partnerList/partnerDetail',query:{uid: row.uid, id: row.id, type: row.type}}"
               target="_blank"
               style="color:#fff"
-            >查看</router-link>
-            </Button>
+            ><Button size="small" type="primary">查看</Button></router-link>
         </template>
       </Table>
       <template slot="options">

+ 13 - 20
src/views/sales/withdrawList.vue

@@ -74,30 +74,23 @@
           <div style="color:#f4516c" :class="{casActive:row.cashout_status == 1}">{{row.cashout_status | casStat}}</div>
         </template>
         <template slot-scope="{ row }" slot="op">
-          <Button  
-            size="small" 
-            type="primary" 
-            style="margin-right:5px"
-            
-          >
             <router-link
                 :to="{path:'/sales/withdrawList/withdrawDetail',query:{id:row.id, uid:row.uid, deType:'tixian', peType:String(row.type)}}"
                 target="_blank"
                 style="color:#fff"
-            >查看</router-link>
-          </Button>
-          <Button 
-            size="small" 
-            type="success" 
-            @click="finished(row.id)"
-            v-if="row.cashout_status == 1? false : true"
-          >完成</Button>
-          <Button 
-            size="small" 
-            type="success" 
-            disabled
-            v-else
-          >完成</Button>
+            ><Button size="small" type="primary" style="margin-right:5px">查看</Button></router-link>
+            <Button 
+                size="small" 
+                type="success" 
+                @click="finished(row.id)"
+                v-if="row.cashout_status == 1? false : true"
+            >完成</Button>
+            <Button 
+                size="small" 
+                type="success" 
+                disabled
+                v-else
+            >完成</Button>
         </template>
       </Table>
       <template slot="options">

+ 511 - 0
src/views/userManage/userDetail.vue

@@ -0,0 +1,511 @@
+<template>
+    <div class="user-detail">
+        <h1>剑鱼伙伴</h1>
+        <Row class="par-row">
+            <Col style="float:left;width: 20%" class="top-col">
+                <Card>
+                    <div slot="title" class="top-tit">
+                        <div class="avatr">
+                            <img :src="parDetail.headImg" v-if="parDetail.headImg">
+                            <img src="../../assets/images/moren.png" v-else>
+                        </div>
+                        <div class="names">{{parDetail.name}}</div>
+                        <div class="msg1"><span>{{parDetail.phone}}</span></div>
+                        <div class="msg1 msg2"><span>{{parDetail.email}}</span></div>
+                    </div>
+                    <div class="bot-tit">
+                        <div class="over-view" @click="tabClick(1)" :class="{active:infor === 1}"><span>概览</span></div>
+                        <div class="basic" @click="tabClick(2)" :class="{active:infor === 2}"><span>基本信息<i :class="parDetail.auth_status | authColor">{{parDetail.auth_status | authStatus}}</i></span></div>
+                        <div class="fund" @click="tabClick(3)" :class="{active:infor === 3}"><span>资金明细</span></div>
+                    </div>
+                </Card>
+            </Col>
+            <Col style="float:left;width: 77.5%">
+                <Card v-if="infor == 1">
+                    <div slot="title" class="right-fund">概览</div>
+                    <div class="msg-card">
+                        <Card>
+                            <div class="add-time">
+                                <div class="time1"><img src="../../assets/images/riqi.png" />加入日期</div>
+                                <div class="time2">{{parDetail.createtime}}</div>
+                            </div>
+                        </Card>
+                        <Card>
+                            <div class="add-time">
+                                <div class="time1"><img src="../../assets/images/riqi.png" />最后使用日期</div>
+                                <div class="time2">{{parDetail.lastlogintime}}</div>
+                            </div>
+                        </Card>
+                        <Card>
+                            <div class="add-time">
+                                <div class="time1"><img src="../../assets/images/yongjin.png" />累计销售额</div>
+                                <div class="time2">¥{{(parDetail.dis_sales/100).toLocaleString('en-US')}}</div>
+                            </div>
+                        </Card>
+                        <Card>
+                            <div class="add-time">
+                                <div class="time1"><img src="../../assets/images/dingdan.png" />累计销售订单</div>
+                                <div class="time2">{{parDetail.dis_order}}</div>
+                            </div>
+                        </Card>
+                        <Card>
+                            <div class="add-time">
+                                <div class="time1"><img src="../../assets/images/yongjin.png" />累计佣金</div>
+                                <div class="time2">¥{{(parDetail.dis_commission/100).toLocaleString('en-US')}}</div>
+                            </div>
+                        </Card>
+                    </div>
+                    <Table 
+                        size="large"
+                        ellipsis 
+                        :loading="loading" 
+                        :columns="column1" 
+                        :data="datas1" 
+                        stripe 
+                        style="margin-top: 30px"
+                        v-if="infor == 1"
+                    ></Table>
+                </Card>
+                <Card v-else-if="infor == 2">
+                    <div slot="title" class="right-fund">基本信息</div>
+                    <div class="infor-card">
+                        <div class="con" v-if="types == '2'">
+                            <span>企业名称</span>
+                            <span class="spa2">{{parDetail.name?parDetail.name:'-'}}</span>
+                        </div>
+                        <div class="con" v-else>
+                            <span>用户名</span>
+                            <span class="spa2">{{parDetail.name?parDetail.name:'-'}}</span>
+                        </div>
+                        <Divider />
+                        <div class="con">
+                            <span>手机</span>
+                            <span class="spa2">{{parDetail.phone}}</span>
+                        </div>
+                        <Divider />
+                        <div class="con">
+                            <span>邮箱</span>
+                            <span class="spa2">{{parDetail.email}}</span>
+                        </div>
+                        <Divider />
+                        <div class="con">
+                            <span>类型</span>
+                            <span class="spa2">{{parDetail.type == '1'?'个人':parDetail.type == '2'?'企业':'其他'}}</span>
+                        </div>
+                        <Divider />
+                        <div class="con">
+                            <span>渠道</span>
+                            <span class="spa2">{{parDetail.channel}}</span>
+                        </div>
+                        <Divider />
+                        <div class="con" v-if="types == '2'">
+                            <span class="spa1">营业执照</span>
+                            <img class="imgs" @click="fruit" :src="parDetail.license"/>
+                        </div>
+                        <Divider v-if="types == '2'" />
+                    </div>
+                </Card>
+                <Card v-else>
+                    <div slot="title" class="right-fund">资金明细</div>
+                    <Table 
+                        size="large"
+                        ellipsis 
+                        :loading="loading" 
+                        :columns="column2" 
+                        :data="datas2" 
+                        stripe 
+                        style="margin-top: 10px"
+                        v-if="infor == 3"
+                    >
+                        <template slot-scope="{ row }" slot="_code">
+                            <div @click="rowsClick(row)">{{row.code}}</div>
+                        </template>
+                    </Table>
+                </Card>
+            </Col>
+        </Row>
+        <Modal v-model="preview" footer-hide :styles="{top:0}" :width="800" class-name="par-model">
+            <img :src="parDetail.license">
+        </Modal>
+    </div>
+</template>
+
+<script>
+import { ChangeDate } from '../../assets/js/date'
+export default {
+    created () {
+        let rout = this.$route.query
+        this.$request('/sales/partnerList/partnerDetail').data({// 基本信息
+            uid: rout.uid,
+            id: rout.id
+        }).success((r) => {
+            this.parDetail = r.data;
+            this.parDetail.createtime = ChangeDate(this.parDetail.createtime);
+            this.parDetail.lastlogintime = ChangeDate(this.parDetail.lastlogintime)
+        }).get()
+
+        this.$request('/sales/partnerList/overview').data({// 概览
+            uid: rout.uid,
+            id: rout.id
+        }).success((r) => {
+            this.datas1 = r.data?r.data:[];
+        }).get()
+
+        this.$request('/sales/partnerList/capitalDetails').data({// 资金明细
+            uid: rout.uid
+        }).success((r) => {
+            let atr = [], atr1 = []
+            // 按时间先后排序
+            if (r.data) {
+                r.data.forEach(e => {
+                    atr.push(new Date(e.createtime).getTime())
+                })
+                atr.sort(this.sortNum)
+                atr.forEach((v) => {
+                    r.data.forEach(res => {
+                        let ar = new Date(res.createtime).getTime()
+                        if (ar === v) {
+                            atr1.push(res)
+                        }
+                    })
+                })
+                this.datas2 = atr1
+            }
+        }).get()
+    },
+    methods: {
+        load(val) {
+            this.loading = val
+        },
+        sortNum (a, b) {
+            return b - a
+        },
+        tabClick(index) {
+            this.infor = index
+        },
+        fruit() {
+            this.preview = true
+        },
+        rowsClick (arr) {
+            if (arr.type == '佣金') {
+                const paths = this.$router.resolve({
+                    path: '/order/orderList/orderDetail', 
+                    query:{
+                        id: arr.order_id,
+                        proType: arr.product_name,
+                        par: 1
+                    }})
+                window.open(paths.href,'_blank')
+            } else if (arr.type == '提现') {
+                const paths = this.$router.resolve({
+                    path: '/sales/withdrawList/withdrawDetail', 
+                    query:{
+                        id: arr.id,
+                        uid: arr.uid,
+                        peType: String(arr.ptype),
+                        deType: 'tixian',
+                        par: 1
+                    }})
+                window.open(paths.href,'_blank')
+            } else if (arr.type == '结算') {
+                const paths = this.$router.resolve({
+                    path: '/sales/settleList/settleDetail', 
+                    query:{
+                        id: arr.id,
+                        uid: arr.uid,
+                        deType: 'jiesuan',
+                        par: 1
+                    }})
+                window.open(paths.href,'_blank')
+            }
+        }
+    },
+    filters: {
+        authStatus (val) {
+            if (val == -1) {
+                return '未通过'
+            } else if (val == 0) {
+                return '未认证'
+            } else if (val == 1) {
+                return '已认证'
+            }
+        },
+        authColor (val) {
+            if (val == -1) {
+                return 'color1'
+            } else if (val == 0) {
+                return 'color2'
+            } else if (val == 1) {
+                return 'color3'
+            }
+        },
+    },
+    data () {
+        return {
+            loading: false,
+            parDetail: [],
+            infor: 1,
+            types: this.$route.query.type,
+            preview: false,
+            datas1: [],
+            datas2: [],
+            column1: [
+                  {
+                      title: '产品名称',
+                      key: 'product_name',
+                      align: 'center'
+                  },
+                  {
+                      title: '累计销售额',
+                      key: 'sale_money_sum',
+                      align: 'center',
+                      render: (h, {row}) => {
+                        return h('span','¥' + parseFloat(row.sale_money_sum/100).toLocaleString('en-US'))
+                      }
+                  },
+                  {
+                      title: '累计销售订单',
+                      key: 'count',
+                      align: 'center'
+                  },
+                  {
+                      title: '累计佣金',
+                      key: 'commission_sum',
+                      align: 'center',
+                      render: (h, {row}) => {
+                        return h('span','¥' + parseFloat(row.commission_sum/100).toLocaleString('en-US'))
+                      }
+                  },
+                  {
+                      title: '平均佣金',
+                      key: 'average',
+                      align: 'center',
+                      render: (h, {row}) => {
+                        return h('span','¥' + parseFloat(row.average/100).toLocaleString('en-US'))
+                      }
+                  }
+              ],
+            column2: [
+                  {
+                      title: '订单号',
+                      slot: '_code',
+                      className: 'table-info-money',
+                      align: 'center'
+                  },
+                  {
+                      title: '类型',
+                      key: 'type',
+                      align: 'center'
+                  },
+                  {
+                      title: '时间',
+                      key: 'createtime',
+                      align: 'center'
+                  },
+                  {
+                      title: '金额',
+                      key: 'money',
+                      align: 'center',
+                      render: (h, {row}) => {
+                        return h('span','¥' + parseFloat(row.money/100).toLocaleString('en-US'))
+                      }
+                  }
+              ]
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.user-detail {
+    .par-row {
+        background:#Fff;
+        padding:20px 0 20px 15px;
+    }
+    h1 {
+        font-size:24px;
+        color:#3f4047;
+        padding: 10px 0 20px 10px;
+    }
+    .top-col {
+        margin-right: 20px;
+        .ivu-card /deep/ {
+            .ivu-card-head {
+                padding: 28px 0;
+            }
+            .ivu-card-body {
+                padding: 0px!important;
+            }
+        }
+    }
+    .top-tit {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        padding: 0 25px;
+        .avatr {
+            width: 80px; 
+            height: 80px; 
+            border: 2px solid #f4f5f8;
+            border-radius: 63px;
+            overflow: hidden;
+            margin: 20px 0 28px 0;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
+        .names {
+            line-height: 23px;
+            font-size: 16px;
+            font-weight: 700;
+            color: #1b1c1e;
+            margin-bottom: 20px;
+        }
+        .msg1 {
+            width: 100%;
+            span {
+                display: block;
+                width: 100%;
+                height: 32px;
+                line-height: 20px;
+                color: #7b7e8a;
+                background: url(../../assets/images/shoujihao.png) no-repeat 6px top; 
+                background-size: 20px 20px;
+                padding-left: 40px;
+                word-break:break-all;
+            }
+        }
+        .msg2 {
+            span {
+                background: url(../../assets/images/youxiang.png) no-repeat 6px top;
+                background-size: 20px 20px;
+            }
+        }
+    }
+    .bot-tit {
+        padding: 20px 0;
+        div {
+            display: flex;
+            justify-content: center;
+            align-content: center;
+            align-items: center;
+            width: 100%!important;
+            height: 55px!important;
+            line-height: 55px!important;
+            color: #6f727d!important;
+            cursor: pointer;
+            &:hover {
+                span {
+                    color: #475962;
+                }
+            }
+            span {
+                width: 100%;
+                background-size: 20px 20px!important;
+                padding-left: 40px;
+                margin: 0 25px;
+            }
+        }
+        .over-view {
+            span {
+                background: url(../../assets/images/gailan.png) no-repeat 6px center;
+            }
+        }
+        .basic {
+            span {
+                background: url(../../assets/images/xinxi.png) no-repeat 6px center; 
+            }
+            i {
+                display: inline-block;
+                width: 60px;
+                color: #70b603;
+                text-align: right;
+            }
+            .color1 {
+                color: #f4516c;
+            }
+            .color2 {
+                color: #ffb822;
+            }
+            .color3 {
+                color: #34bfa3;
+            }
+        }
+        .fund {
+            span {
+                background: url(../../assets/images/mingxi.png) no-repeat 6px center;
+            }
+        }
+        .active {
+            background:rgba(54,163,247, 0.2);
+        }
+    }
+    .right-fund {
+        font-size: 16px;
+        color: #575962;
+    }
+    .msg-card {
+        display: flex;
+        justify-content: center;
+        flex-direction: initial;
+        align-items: center;
+        .ivu-card {
+            overflow:hidden;
+            width: 252px;
+        }
+        .ivu-card:not(:last-child) {
+            margin-right: 20px;
+        }
+        .add-time {
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            font-weight: 700;
+            color: #1b1c1e;
+            .time1 {
+                display: flex;
+                flex-direction: initial;
+                justify-content: center;
+                align-items: center;
+                width: 100%;
+                height: 40px;
+                font-size: 14px;
+                img {
+                    width: 24px;
+                    height: 24px;
+                    margin-right: 8px;
+                }
+            }
+            .time2 {
+                font-size: 18px;
+            }
+        }
+    }
+    .infor-card {
+        margin: 30px auto;
+        width: 500px;
+        .con {
+            padding: 5px 30px;
+            font-size: 15px;
+            span {
+                display: inline-block;
+                width: 50%;
+            }
+            .spa2 {
+                text-align: right;
+                
+            }
+            .spa1 {
+                float: left;
+            }
+            .imgs {
+                float: right;
+                width: 192px;
+                // min-height: 197px;
+                margin-bottom: 30px;
+                cursor: pointer;
+            }
+        }
+    }
+}
+</style>

+ 149 - 0
src/views/userManage/userList.vue

@@ -0,0 +1,149 @@
+<template>
+  <div class="user-list">
+    <h1>个人用户</h1>
+    <table-lists 
+      ref="tableLists" 
+      v-model="list" 
+      :filter="filter"
+      :filterSear="2"
+      :filterReset="0"
+      class="user-class"
+      requestApi="/sales/partnerList" 
+      @loading="load" 
+      style="background:#fff;padding:10px"
+    >
+      <template slot="filterContent">
+          <h2>剑 鱼 个 人 用 户 查 询 系 统  <i>bate版</i></h2>
+          <Input type="text" size="large" v-model="filter.keyword" placeholder="输入手机号搜索" class="user-ipt"/>
+      </template>
+      <Table 
+        size="large" 
+        ellipsis 
+        :loading="loading" 
+        :columns="columns" 
+        :data="list.lists"
+        @on-row-click="rowClick" 
+        stripe
+      ></Table>
+      <template slot="options">
+        <div style="color:#d7d7d7;font-size:14px">共计{{list.total ? list.total : '0'}}位用户</div>
+      </template>
+    </table-lists>
+  </div>
+</template>
+<script>
+export default {
+  methods: {
+    load (val) {
+      this.loading = val
+    },
+    rowClick(row) {
+        const srcs = this.$router.resolve({path:'/userMage/userList/userDetail',query:{uid: row.uid, id: row.id, type: row.type}})
+        window.open(srcs.href,'_blank')
+    },
+  },
+  data () {
+      return {
+        lis: '',
+        loading: false,
+        parType: [{v: '', n: '全部'},{v: '1', n: '个人'}, {v: '2', n: '企业'}, {v: '3', n: '其他'}],
+        filter: {
+            keyword: ''
+        },
+        columns: [
+            {
+                title: '用户名',
+                key: 'name',
+                align: 'center',
+                render: (h, {row}) => {
+                  return h('span',row.name == ''||row.name == null?'-':row.name)
+                }
+            },
+            {
+                title: '微信号',
+                key: 'phone',
+                align: 'center',
+                render: (h, {row}) => {
+                  return h('span',row.phone == '0'?'-':row.phone)
+                }
+            },
+            {
+                title: '联系方式',
+                key: 'createtime',
+                align: 'center'
+            },
+            {
+                title: '注册日期',
+                key: 'lastlogintime',
+                align: 'center'
+            },
+            {
+                title: '最后登录日期',
+                key: 'lastlogintime',
+                align: 'center'
+            }
+        ],
+        list: []
+      }
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.user-list {
+  h1 {
+    font-size:24px;
+    color:#3f4047;
+    padding: 10px 0 20px 10px;
+  }
+  .user-class {
+      /deep/.top-bar {
+        .ivu-layout-content {
+            .ivu-form {
+                margin: 30px auto;
+                h2 {
+                    font-size: 24px;
+                    color: #3f4047;
+                    margin-bottom: 30px;
+                    text-align: center;
+                    i {
+                        font-size: 14px;
+                        color: #ffb822;
+                    }
+                }
+                .user-ipt {
+                    width: 500px;
+                    .ivu-input {
+                        height: 44px;
+                        border-radius: 4px 0 0 4px;
+                        &:hover {
+                            border-color: #dcdee2;
+                        }
+                        &:focus {
+                            border-color: #dcdee2;
+                            box-shadow: none;
+                        }
+                    }
+                    }
+                    .ivu-btn-primary {
+                        width: 108px;
+                        height: 44px;
+                        background-color:rgba(52, 191, 163, 1);
+                        border-color: rgba(52, 191, 163, 1);
+                        font-size: 17px;
+                        border-radius: 0 4px 4px 0;
+                        &:focus {
+                            border-color: none;
+                            box-shadow: none;
+                        }
+                    }
+            }
+        }
+        .ivu-layout-sider {
+          display: none;
+        }
+      }
+  }
+  
+}
+</style>

+ 10 - 1
vue.config.js

@@ -1,6 +1,15 @@
+const webpack = require('webpack')
 module.exports = {
   publicPath: '/',
   outputDir: "dist",
   productionSourceMap: false,
-  // devServer: {}
+  configureWebpack: {
+    plugins: [
+      new webpack.ProvidePlugin({
+        $:"jquery",
+        jQuery:"jquery",
+        "windows.jQuery":"jquery"
+      })
+    ]
+  }
 }