xiaohaizhao 11 месяцев назад
Родитель
Сommit
6e83867bfc

+ 153 - 0
salesPanel/dataOverview/Client/dataOverview.js

@@ -0,0 +1,153 @@
+const _Http = getApp().globalData.http;
+Component({
+    options: {
+        addGlobalClass: true,
+    },
+    properties: {
+        update: {
+            type: Function
+        }
+    },
+    lifetimes: {
+        attached: function () {
+            getApp().globalData.Language.getLanguagePackage(this)
+            this.setData({
+                dates: this.data.dates.map(v => {
+                    v.name = getApp().globalData.Language.getMapText(v.value);
+                    v.color = v.value == this.data.content.dateType ? "#3874F6" : "";
+                    return v
+                })
+            })
+        }
+    },
+    data: {
+        "content": {
+            dateType: "本年",
+            dataid: wx.getStorageSync('userMsg').userid,
+            username: wx.getStorageSync('userMsg').name,
+            type: 0,
+            "where": {
+                isleave: "1"
+            }
+        },
+        detaShow: false,
+        dates: [{
+            value: "全部"
+        }, {
+            value: "本年"
+        }, {
+            value: "本季"
+        }, {
+            value: "本月"
+        }, {
+            value: "去年"
+        }, ],
+    },
+    methods: {
+        getList() {
+            let content = this.data.content;
+            _Http.basic({
+                "id": 20231015170504,
+                content
+            }).then(res => {
+                console.log("客户数据概况", res)
+                if (res.code != '1') return wx.showToast({
+                    title: res.msg,
+                    icon: "none"
+                })
+                const getMapText = getApp().globalData.Language.getMapText;
+                let list = [{
+                        title: '客户总数',
+                        value: res.data.total,
+                        tips: getMapText('客户总数:包含我的客户、公海客户数量'),
+                        link: true
+                    },
+                    {
+                        title: '公海客户数',
+                        value: res.data.customerpoolqty,
+                        tips: '',
+                        link: true
+                    },
+                    {
+                        title: '成交客户数',
+                        value: res.data.tradedCustomers,
+                        tips: getMapText('成交客户:已成交、多次成交状态的客户数量'),
+                        link: true
+                    },
+                    {
+                        title: '参与项目客户数',
+                        value: res.data.participateProject,
+                        tips: getMapText('参与项目客户数:参与有下订单的项目的关联客户数'),
+                        link: true
+                    },
+                ]
+                try {
+                    list = list.concat(res.data.data.map(v => {
+                        return {
+                            title: v.value,
+                            value: v.qty,
+                            tips: v.value == '无分类客户' ? getMapText('统计没有客户分类信息的客户数量') : "",
+                            link: true
+                        }
+                    }))
+                } catch (error) {
+
+                }
+                this.setData({
+                    list,
+                    content
+                })
+                this.onCancel()
+            })
+        },
+        showTips(e) {
+            const {
+                tips
+            } = e.currentTarget.dataset;
+            wx.showModal({
+                content: tips,
+                showCancel: false,
+                confirmText: getApp().globalData.Language.getMapText('确定'),
+            })
+        },
+        toDetail(e) {
+            const {
+                item
+            } = e.currentTarget.dataset;
+        },
+        openDateType() {
+            this.setData({
+                detaShow: true
+            })
+        },
+        dateOnSelect(event) {
+            const {
+                value
+            } = event.detail;
+            if (this.data.content.dateType == value) return this.onCancel();
+            this.setData({
+                "content.dateType": value,
+                dates: this.data.dates.map(item => {
+                    item.color = item.value == value ? "#3874F6" : "";
+                    item.loading = item.value == value ? true : false;
+                    return item
+                }),
+            })
+            this.getList(true)
+        },
+        onCancel() {
+            this.setData({
+                actionShow: false,
+                detaShow: false,
+                list: this.data.list.map(item => {
+                    item.loading = false;
+                    return item
+                }),
+                dates: this.data.dates.map(item => {
+                    item.loading = false;
+                    return item
+                })
+            })
+        },
+    }
+})

+ 4 - 0
salesPanel/dataOverview/Client/dataOverview.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 71 - 0
salesPanel/dataOverview/Client/dataOverview.scss

@@ -0,0 +1,71 @@
+.head {
+	display: flex;
+	justify-content: space-between;
+	margin-bottom: 0;
+	line-height: 40rpx;
+	font-family: PingFang SC, PingFang SC;
+	font-weight: 700;
+	font-size: 28rpx;
+	color: #333333;
+	margin-top: 10rpx;
+
+	.right {
+		display: flex;
+		align-items: center;
+
+		.iconfont {
+			margin-left: 10rpx;
+		}
+	}
+}
+
+.list {
+	display: flex;
+	flex-wrap: wrap;
+	justify-content: space-between;
+
+	.item {
+		position: relative;
+		width: 314rpx;
+		padding: 10rpx 20rpx;
+		box-sizing: border-box;
+		border-radius: 20rpx;
+		border: 1rpx solid #E0E0E0;
+		margin-bottom: 20rpx;
+
+		.title {
+			display: flex;
+			align-items: center;
+			line-height: 28rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-size: 20rpx;
+			color: #999999;
+			margin-top: 6rpx;
+
+			.iconfont{
+				font-size: 20rpx;
+				padding-left: 10rpx;
+			}
+		}
+
+		.value {
+			line-height: 44rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: bold;
+			font-size: 32rpx;
+			color: #333333;
+		}
+
+		.title,.value{
+			width: 90%;
+		}
+
+		.detail {
+			position: absolute;
+			right: 10rpx;
+			top: 50%;
+			transform: translateY(-50%) rotate(-90deg);
+		}
+
+	}
+}

+ 16 - 0
salesPanel/dataOverview/Client/dataOverview.wxml

@@ -0,0 +1,16 @@
+<view class="global-card head">
+    <view class="left">{{language[content.username]||content.username}}_{{language['数据概况']||'数据概况'}}</view>
+    <view class="right" bind:tap="openDateType">
+        {{language[content.dateType]||content.dateType}}
+        <text class="iconfont icon-xiangxiazhankai" />
+    </view>
+</view>
+<view class="global-card list">
+    <view class="item" hover-class="{{item.link?'navigator-hover':''}}" wx:for="{{list}}" wx:key="title" bind:tap="toDetail" data-item="{{item}}">
+        <view class="value">{{item.value}}</view>
+        <view class="title">{{language[item.title]||item.title}} <text catch:tap="showTips" wx:if="{{item.tips}}" data-tips="{{item.tips}}" class="iconfont icon-wenhao" /></view>
+        <view wx:if="{{item.link}}" class="iconfont icon-xiangxiazhankai detail" />
+    </view>
+</view>
+<My_empty wx:if="{{list.length==0}}" />
+<van-action-sheet show="{{  detaShow }}" actions="{{ dates }}" bind:select='dateOnSelect' bind:cancel='onCancel' bind:click-overlay='onCancel' cancel-text="{{language['取消']||'取消'}}" />

+ 4 - 15
salesPanel/dataOverview/Clue/dataOverview.js

@@ -11,8 +11,6 @@ Component({
     lifetimes: {
         attached: function () {
             getApp().globalData.Language.getLanguagePackage(this)
-            this.triggerEvent('update', "Clue")
-
             this.setData({
                 dates: this.data.dates.map(v => {
                     v.name = getApp().globalData.Language.getMapText(v.value);
@@ -26,6 +24,7 @@ Component({
         "content": {
             dateType: "本年",
             dataid: wx.getStorageSync('userMsg').userid,
+            type: 0,
             username: wx.getStorageSync('userMsg').name,
             "where": {
                 isleave: "1"
@@ -45,19 +44,8 @@ Component({
         }, ],
     },
     methods: {
-        getList(init = false) {
-            let content = this.data.content
-            const {
-                dataid,
-                type,
-                username,
-                isleave
-            } = getCurrentPages()[getCurrentPages().length - 1].data;
-            if (content.dataid != dataid || content.type != type || isleave != isleave) init = true
-            content.dataid = dataid;
-            content.type = type;
-            content.username = username;
-            content.where.isleave = isleave;
+        getList() {
+            let content = this.data.content;
             _Http.basic({
                 "id": 20231014114204,
                 content
@@ -179,6 +167,7 @@ Component({
                 ]
                 this.setData({
                     list,
+                    content
                 })
                 this.onCancel()
             })

+ 22 - 7
salesPanel/dataOverview/index.js

@@ -5,6 +5,7 @@ Page({
         ops: [],
         unfolds: [],
         showFiltrate: false,
+
         dataid: wx.getStorageSync('userMsg').userid,
         username: wx.getStorageSync('userMsg').name,
         type: 0,
@@ -66,8 +67,24 @@ Page({
         if (detail && this.data.active != detail) return;
         const page = this.selectComponent("#" + this.data.active);
         if (page) {
-            if (page.data.total == null) page.getList();
-            this.data.page = page;
+            const {
+                dataid,
+                type,
+                username,
+                isleave
+            } = this.data;
+            let content = {};
+            try {
+                content = page.data.model.data.content;
+            } catch (error) {
+                content = page.getContent()
+            }
+            if (content.dataid != dataid || content.type != type || content.where.isleave != isleave) page.data.init = false
+            content.dataid = dataid;
+            content.type = type;
+            content.username = username;
+            content.where.isleave = isleave;
+            if (!page.data.init) page.getList();
         }
     },
     openFiltrate() {
@@ -102,10 +119,8 @@ Page({
                 username: active.name
             })
         }
-        const page = this.selectComponent("#" + this.data.active);
-        if (page) {
-            if (page.data.total == null) page.getList();
-            this.data.page = page;
-        }
+        this.getList({
+            detail: this.data.active
+        });
     },
 })

+ 2 - 1
salesPanel/dataOverview/index.json

@@ -1,6 +1,7 @@
 {
     "usingComponents": {
-        "Clue": "./list/Clue"
+        "Clue": "./list/Clue",
+        "Client":"./list/client"
     },
     "navigationBarTitleText": "数据总览"
 }

+ 0 - 2
salesPanel/dataOverview/index.wxml

@@ -18,8 +18,6 @@
 <view hidden="{{active != 'Clue'}}">
 	<Clue id='Clue' wx:if="{{per.query(unfolds,'Clue')}}" bindupdate="getList" />
 </view>
-
-
 <view hidden="{{active != 'Client'}}">
 	<Client id='Client' wx:if="{{per.query(unfolds,'Client')}}" bindupdate="getList" />
 </view>

+ 7 - 0
salesPanel/dataOverview/list/Clue.js

@@ -20,10 +20,12 @@ Component({
             label: "数据概况",
             model: "#DataOverview"
         }],
+        init: false
     },
     methods: {
         getList() {
             this.partialRenewal()
+            this.data.init = true;
         },
         tabsChange({
             detail
@@ -40,6 +42,11 @@ Component({
                 const Component = this.selectComponent(model);
                 Component.getList(true);
             }
+            this.data.model = model;
         },
+        getContent() {
+            const model = this.data.tabsList[this.data.tabsActive].model;
+            if (model) return this.selectComponent(model).data.content
+        }
     }
 })

+ 52 - 0
salesPanel/dataOverview/list/client.js

@@ -0,0 +1,52 @@
+const _Http = getApp().globalData.http;
+Component({
+    options: {
+        addGlobalClass: true,
+    },
+    properties: {
+        update: {
+            type: Function
+        }
+    },
+    lifetimes: {
+        attached: function () {
+            getApp().globalData.Language.getLanguagePackage(this)
+            this.triggerEvent('update', "Client")
+        }
+    },
+    data: {
+        tabsActive: 0,
+        tabsList: [{
+            label: "数据概况",
+            model: "#DataOverview"
+        }],
+        init: false
+    },
+    methods: {
+        getList() {
+            this.partialRenewal()
+            this.data.init = true;
+        },
+        tabsChange({
+            detail
+        }) {
+            this.setData({
+                tabsActive: detail
+            });
+            this.partialRenewal();
+        },
+        //局部数据更新 tabs
+        partialRenewal() {
+            const model = this.data.tabsList[this.data.tabsActive].model;
+            if (model) {
+                const Component = this.selectComponent(model);
+                Component.getList(true);
+            }
+            this.data.model = model;
+        },
+        getContent() {
+            const model = this.data.tabsList[this.data.tabsActive].model;
+            if (model) return this.selectComponent(model).data.content
+        }
+    }
+})

+ 6 - 0
salesPanel/dataOverview/list/client.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "DataOverview": "../Client/dataOverview"
+    }
+}

+ 1 - 0
salesPanel/dataOverview/list/client.scss

@@ -0,0 +1 @@
+@import "./Clue.scss";

+ 3 - 0
salesPanel/dataOverview/list/client.wxml

@@ -0,0 +1,3 @@
+<Yl_FunTabs id='Yl_FunTabs' safety='{{false}}' list='{{tabsList}}' mode='buts' active='{{tabsActive}}' bind:onChenge="tabsChange">
+    <DataOverview slot='数据概况' id='DataOverview' />
+</Yl_FunTabs>