Ver código fonte

销售数据

xiaohaizhao 6 meses atrás
pai
commit
6bedf60915

+ 0 - 83
project.private.config.json

@@ -6,88 +6,5 @@
         "compileHotReLoad": true,
         "bigPackageSizeSupport": false
     },
-    "condition": {
-        "miniprogram": {
-            "list": [
-                {
-                    "name": "portrayal/details/project",
-                    "pathName": "portrayal/details/project",
-                    "query": "id=8286",
-                    "scene": null,
-                    "launchMode": "default"
-                },
-                {
-                    "name": "portrayal/details/client",
-                    "pathName": "portrayal/details/client",
-                    "query": "id=1400",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "portrayal/index/index",
-                    "pathName": "portrayal/index/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "portrayal/details/client",
-                    "pathName": "portrayal/details/client",
-                    "query": "id=6057",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "销售数据",
-                    "pathName": "salesPanel/index/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "salesPanel/panel/detail",
-                    "pathName": "salesPanel/panel/detail",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "salesPanel/index/index",
-                    "pathName": "salesPanel/index/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "/portrayal/index/index",
-                    "pathName": "/portrayal/index/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "packageA/setclient/detail",
-                    "pathName": "packageA/setclient/detail",
-                    "query": "id=5822",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "推广素材",
-                    "pathName": "pages/promotional/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "销售漏斗",
-                    "pathName": "packageA/salesHourglass/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                }
-            ]
-        }
-    },
     "libVersion": "3.8.2"
 }

+ 1 - 1
salesPanel/AnalysisOfTheProportionOfProductCategoriesInOrders/index.js

@@ -265,7 +265,7 @@ Component({
             detail
         }) {
             this.setData({
-                dateType: detail.dateType,
+                "content.dateType": detail.dateType,
                 "content.where.begdate": detail.begdate || "",
                 "content.where.enddate": detail.enddate || ""
             })

+ 1 - 3
salesPanel/AnalysisOfTheProportionOfProductCategoriesInOrders/index.wxml

@@ -20,9 +20,7 @@
 	<My_empty wx:if='{{list[0].isEmpty}}' />
 	<block wx:else>
 		<navigator url="#" class="global-card item" wx:for="{{list}}" version='develop' wx:key="sonum" target='miniProgram' app-id='wxc1b6ae925ac1d06a' path="{{'/packageA/orderForm/detail'+'?auth='+auth+'&userMsg='+userMsg+'&site='+site+'&templetList='+templetList+'$languagecode='+languagecode+'&id='+item.sa_orderid}}" url="/packageA/orderForm/detail" open-type="navigate">
-			<view class="title">
-				<text class="tag" style="background-color: #67C23A;">{{language[item.tradefield]||item.tradefield}}</text>
-				{{item.sonum}}
+			<view class="title"><text class="tag" style="background-color: #67C23A;">{{language[item.tradefield]||item.tradefield}}</text>{{item.sonum}}
 			</view>
 			<view class="row">erp{{language['单号']||'单号'}}:{{item.erpbillno ||' --'}}</view>
 			<view class="row">

+ 1 - 1
salesPanel/analysisOfOrderTypeDistribution/index.js

@@ -182,7 +182,7 @@ Component({
             detail
         }) {
             this.setData({
-                dateType: detail.dateType,
+                "content.dateType": detail.dateType,
                 "content.where.begdate": detail.begdate || "",
                 "content.where.enddate": detail.enddate || ""
             })

+ 1 - 3
salesPanel/analysisOfOrderTypeDistribution/index.wxml

@@ -13,9 +13,7 @@
 	<block wx:else>
 		<navigator url="#" class="global-card item" wx:for="{{list}}" version='develop' wx:key="sonum" target='miniProgram' app-id='wxc1b6ae925ac1d06a' path="{{'/packageA/orderForm/detail'+'?auth='+auth+'&userMsg='+userMsg+'&site='+site+'&templetList='+templetList+'$languagecode='+languagecode+'&id='+item.sa_orderid}}" url="/packageA/orderForm/detail" open-type="navigate">
 			<view class="title">
-				<text class="tag" style="background-color: #67C23A;">
-					{{language[item.tradefield]||item.tradefield}}
-				</text>
+				<text class="tag" style="background-color: #67C23A;">{{language[item.tradefield]||item.tradefield}}</text>
 				{{item.sonum}}
 			</view>
 			<view class="row">erp{{language['单号']||'单号'}}:{{item.erpbillno ||' --'}}</view>

+ 3 - 2
salesPanel/index/index.js

@@ -18,7 +18,8 @@ Page({
             label: "客户账户余额分析",
             model: "#CustomerBlance"
         }, {
-            label: "销售TOP10"
+            label: "销售TOP10",
+            model: "#Top10"
         }, {
             label: "报价分析",
             model: "#BiddingAnalysis"
@@ -53,7 +54,7 @@ Page({
         }, {
             label: "财务回款分析"
         }],
-        tabsActive: 0,
+        tabsActive: 2,
         showFiltrate: false,
         dataid: wx.getStorageSync('userMsg').userid,
         username: wx.getStorageSync('userMsg').name,

+ 2 - 1
salesPanel/index/index.json

@@ -6,7 +6,8 @@
         "TrendAnalysis": "../trendAnalysis/index",
         "ShipmentAnalysis": "../shipmentAnalysis/index",
         "analysisOfOrderTypeDistribution": "../analysisOfOrderTypeDistribution/index",
-        "AnalysisOfTheProportionOfProductCategoriesInOrders": "../AnalysisOfTheProportionOfProductCategoriesInOrders/index"
+        "AnalysisOfTheProportionOfProductCategoriesInOrders": "../AnalysisOfTheProportionOfProductCategoriesInOrders/index",
+        "top10": "../top10/index"
     },
     "navigationBarTitleText": "销售数据"
 }

+ 1 - 0
salesPanel/index/index.wxml

@@ -26,6 +26,7 @@
     <ShipmentAnalysis slot="未出货已延期情况分析" mode='未出货已延期情况分析' id="ShipmentAnalysis3" />
     <analysisOfOrderTypeDistribution slot="订单类型占比分析" id="AnalysisOfOrderTypeDistribution" />
     <AnalysisOfTheProportionOfProductCategoriesInOrders slot="订单产品类别占比分析" id="AnalysisOfTheProportionOfProductCategoriesInOrders" />
+    <top10 slot="销售TOP10" id="Top10" />
 </Yl_FunTabs>
 <Yl_Filtrate1 id="Yl_Filtrate1" show='{{showFiltrate}}' list="{{[]}}" bindhandle="handleFilter" bindinterrupt='interrupt'>
     <organization slot='head' defaultIsleave='1' dimissionF id='organization' />

+ 120 - 0
salesPanel/top10/index.js

@@ -0,0 +1,120 @@
+const _Http = getApp().globalData.http,
+    currency = require("../../utils/currency"),
+    CNY = (value, symbol = "¥", precision = 2) => currency(value, {
+        symbol,
+        precision
+    }).format();
+
+Component({
+    properties: {},
+    options: {
+        addGlobalClass: true,
+    },
+    lifetimes: {
+        attached: function () {
+            getApp().globalData.Language.getLanguagePackage(this)
+        }
+    },
+    data: {
+        "id": 20231010133804,
+        tabs: ['订单', '出货', '开票', '回款'],
+        dateTypes: ["本年", "本季", "本月"],
+        "content": {
+            pageNumber: 1,
+            pageTotal: 1,
+            dateType: "本年",
+            dataid: wx.getStorageSync('userMsg').userid,
+            username: wx.getStorageSync('userMsg').name,
+            sequence: "订单",
+            type: 0,
+            where: {
+                begdate: "",
+                enddate: "",
+                isleave: "1",
+            }
+        },
+    },
+    methods: {
+        async getList(init = false) {
+            if (init.detail != undefined) init = init.detail;
+            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;
+            const dividend = wx.getStorageSync('languagecode') == 'ZH' ? 10000 : 1000,
+                getMapText = getApp().globalData.Language.getMapText;
+            if (init) {
+                content.pageNumber = 1;
+                content.pageTotal = 1;
+            }
+            if (content.pageNumber > content.pageTotal) return;
+            _Http.basic({
+                id: this.data.id,
+                content
+            }).then(res => {
+                this.selectComponent('#ListBox').RefreshToComplete();
+                console.log(this.data.id, res)
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                res.data = res.data.map(v => {
+                    const colors = ['#F56C6C', '#EF8E51', '#FFC148', '#999999'];
+                    v.color = colors[v.rowindex - 1] || colors[3];
+                    v.amount = CNY(v.amunt)
+                    v.outamount = CNY(v.outamount)
+                    v.taxincludedamount = CNY(v.taxincludedamount)
+                    v.writeoffamount = CNY(v.writeoffamount)
+                    return v
+                })
+                this.setData({
+                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
+                    "content.pageNumber": res.pageNumber + 1,
+                    "content.pageSize": res.pageSize,
+                })
+                try {
+                    this.selectComponent("#TimeRange").onCancel()
+                } catch (error) {
+
+                }
+            })
+        },
+        changeDate({
+            detail
+        }) {
+            console.log("detail", detail)
+            this.setData({
+                "content.dateType": detail.dateType,
+                "content.where.begdate": detail.begdate || "",
+                "content.where.enddate": detail.enddate || ""
+            })
+            this.getList(true)
+        },
+        changeSequence(e) {
+            const {
+                name
+            } = e.currentTarget.dataset;
+            if (this.data.content.sequence == name) return;
+            this.setData({
+                "content.sequence": name
+            })
+            this.getList(true)
+        },
+        tabsOnChange(e) {
+            let name = e.detail.name
+            if (name == this.data.id) return;
+            this.setData({
+                id: name
+            })
+            this.getList(true);
+        }
+    }
+})

+ 4 - 0
salesPanel/top10/index.json

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

+ 69 - 0
salesPanel/top10/index.scss

@@ -0,0 +1,69 @@
+.tabs {
+	display: flex;
+	margin-bottom: 0;
+	margin-top: 20rpx;
+
+	.tab {
+		line-height: 34rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-size: 24rpx;
+		color: #999999;
+		margin-right: 40rpx;
+	}
+
+	.active {
+		font-family: PingFang SC, PingFang SC;
+		font-size: 24rpx;
+		color: #1965E8;
+	}
+}
+
+.tab-class {
+	font-weight: 600 !important;
+	font-size: 28rpx !important;
+	color: #333333 !important;
+}
+
+.item {
+	width: 650rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx;
+	border: 2rpx solid #F0F0F0;
+	padding: 20rpx;
+	box-sizing: border-box;
+	margin: 20rpx auto 0;
+
+	.index {
+		min-width: 48rpx;
+		height: 48rpx;
+		background: #F56C6C;
+		display: inline-block;
+		border-radius: 24rpx;
+		text-align: center;
+		line-height: 48rpx;
+		margin-right: 20rpx;
+		font-family: Microsoft YaHei, Microsoft YaHei;
+		font-size: 28rpx;
+		color: #FFFFFF;
+		padding: 0 6rpx;
+		box-sizing: border-box;
+	}
+
+	.row {
+		line-height: 32rpx;
+		font-family: Microsoft YaHei, Microsoft YaHei;
+		font-size: 24rpx;
+		color: #999999;
+		margin-top: 10rpx;
+	}
+
+	.bottom {
+		display: flex;
+		border-top: 2rpx solid #E0E0E0;
+		margin-top: 20rpx;
+
+		.col {
+			width: 50%;
+		}
+	}
+}

+ 70 - 0
salesPanel/top10/index.wxml

@@ -0,0 +1,70 @@
+<van-tabs color='#3874F6' active="{{ active }}" tab-class='tab-class' tab-active-class='tab-class' bind:change="tabsOnChange">
+	<van-tab title="{{(language['客户销售']||'客户销售')+'TOP10'}}" name='20231010133804' />
+	<van-tab title="{{(language['业务员销售']||'业务员销售')+'TOP10'}}" name='20231011111504' />
+</van-tabs>
+<view class="global-card tabs">
+	<view wx:for="{{tabs}}" wx:key="item" class="tab {{content.sequence == item ? 'active':''}}" data-name='{{item}}' bind:tap="changeSequence">
+		{{language[item]||item}}
+	</view>
+</view>
+<timeRange id='TimeRange' dateTypes='{{dateTypes}}' dateType='{{content.dateType}}' bind:onChange='changeDate' />
+<view class="global-card" style="margin-bottom: 0;padding: 0;">
+	<Yl_ListBox id='ListBox' bind:getlist='getList'>
+		<My_empty wx:if='{{!list.length||list[0].isEmpty}}' />
+		<block wx:else>
+			<view class="item" wx:for="{{list}}" wx:key="sys_enterpriseid">
+				<view class="title">
+					<text class="index" style="background:{{item.color}};">{{item.rowindex}}</text>
+					{{item.enterprisename || item.name}}
+				</view>
+				<block wx:if="{{id == '20231010133804'}}">
+					<view class="row">
+						{{language['客户类型']||'客户类型'}}:{{language[item.type]||item.type || ' --'}}
+					</view>
+					<view class="row">
+						{{language['客户分类']||'客户分类'}}:{{language[item.customergrade]||item.customergrade || ' --'}}
+					</view>
+					<view class="row">
+						{{language['部门']||'部门'}}:{{language[item.depname]||item.depname || ' --'}}
+					</view>
+					<view class="row">
+						{{language['业务员']||'业务员'}}:{{language[item.name]||item.name || ' --'}}
+					</view>
+				</block>
+				<block wx:else>
+					<view class="row">
+						{{language['部门']||'部门'}}:{{language[item.depname]||item.depname || ' --'}}
+					</view>
+					<view class="row">
+						{{language['客户总数']||'客户总数'}}:{{language[item.customersqty]||item.customersqty || '0'}}
+					</view>
+					<view class="row">
+						{{language['产出客户数']||'产出客户数'}}:{{language[item.outproejct]||item.outproejct || '0'}}
+					</view>
+					<view class="row">
+						{{language['项目总数']||'项目总数'}}:{{language[item.projectqty]||item.projectqty || '0'}}
+					</view>
+				</block>
+
+				<view class="bottom">
+					<view class="col">
+						<view class="row">
+							{{language['订单金额']||'订单金额'}}:{{item.amount}}
+						</view>
+						<view class="row">
+							{{language['开票金额']||'开票金额'}}:{{item.taxincludedamount}}
+						</view>
+					</view>
+					<view class="col">
+						<view class="row">
+							{{language['出货金额']||'出货金额'}}:{{item.outamount}}
+						</view>
+						<view class="row">
+							{{language['回款金额']||'回款金额'}}:{{item.writeoffamount}}
+						</view>
+					</view>
+				</view>
+			</view>
+		</block>
+	</Yl_ListBox>
+</view>