xiaohaizhao 1 рік тому
батько
коміт
88f905f741

+ 123 - 0
salesPanel/analysisOfOrderTypeDistribution/index.js

@@ -0,0 +1,123 @@
+const _Http = getApp().globalData.http,
+    currency = require("../../utils/currency"),
+    CNY = (value, symbol = "¥", precision = 2) => currency(value, {
+        symbol,
+        precision
+    }).format();
+
+import * as echarts from '../ec-canvas/echarts';
+Component({
+    properties: {},
+    options: {
+        addGlobalClass: true
+    },
+    lifetimes: {
+        attached: function () {
+            getApp().globalData.Language.getLanguagePackage(this)
+            this.setData({
+                auth: JSON.stringify(wx.getStorageSync('auth')),
+                userMsg: JSON.stringify(wx.getStorageSync('userMsg')),
+                site: JSON.stringify(wx.getStorageSync('siteP')),
+                templetList: JSON.stringify(wx.getStorageSync('templetList')),
+                languagecode: wx.getStorageSync('languagecode'),
+            })
+        }
+    },
+    data: {
+        "content": {
+            pageNumber: 1,
+            pageTotal: 1,
+            dataid: wx.getStorageSync('userMsg').userid,
+            username: wx.getStorageSync('userMsg').name,
+            dateType: "本年",
+            dataType: "金额",
+            type: 0,
+            where: {
+                begdate: "",
+                enddate: "",
+                isleave: "1",
+                type: "",
+            }
+        },
+    },
+    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": 20231012134604,
+                content
+            }).then(res => {
+                this.selectComponent('#ListBox').RefreshToComplete();
+                console.log("订单类型占比分析", res)
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                res.data = res.data.map(v => {
+                    v.amount = CNY(v.amount)
+                    v.returnamount = CNY(v.returnamount)
+                    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,
+                })
+                this.initChart(res.data[0].ratio, content.dataType == '金额' ? CNY(res.data[0].ratio[0].total / dividend) : res.data[0].ratio[0].total, getMapText);
+            })
+        },
+        initChart(data, total, getMapText) {
+            let option = {
+                tooltip: {
+                    trigger: 'item'
+                },
+                legend: {
+                    top: '5%',
+                    left: 'center'
+                },
+                series: [{
+                    name: 'Access From',
+                    type: 'pie',
+                    radius: ['40%', '70%'],
+                    center: ['50%', '70%'],
+                    endAngle: 360,
+                    data: data.map(v => {
+                        return {
+                            name: getMapText(v.type),
+                            value: (v.ratio * 100).toFixed(2)
+                        }
+                    })
+                }]
+            };
+            this.chartComponent = this.selectComponent('#mychart');
+            this.chartComponent.init((canvas, width, height, dpr) => {
+                const chart = echarts.init(canvas, null, {
+                    width,
+                    height,
+                    devicePixelRatio: dpr
+                });
+                chart.setOption(option);
+                return chart;
+            });
+        }
+    }
+})

+ 6 - 0
salesPanel/analysisOfOrderTypeDistribution/index.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "ec-canvas": "../ec-canvas/ec-canvas"
+    }
+}

+ 35 - 0
salesPanel/analysisOfOrderTypeDistribution/index.scss

@@ -0,0 +1,35 @@
+@import "../shipmentAnalysis/index.scss";
+
+.item {
+	position: relative;
+
+	.but {
+		display: flex;
+		align-items: center;
+		position: absolute;
+		bottom: 20rpx;
+		right: 20rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 20rpx;
+		line-height: 20rpx;
+		color: #3874F6;
+
+		.iconfont {
+			color: #333333;
+			transform: scaleX(-1);
+			font-size: 26rpx;
+		}
+	}
+}
+
+
+.chart {
+	height: 800rpx;
+	width: 100%;
+
+	ec-canvas {
+		width: 100%;
+		height: 100%;
+	}
+}

+ 30 - 0
salesPanel/analysisOfOrderTypeDistribution/index.wxml

@@ -0,0 +1,30 @@
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<view class="global-card">
+		<view class="chart">
+			<ec-canvas id="mychart" canvas-id="chart" ec="{{ ec }}"></ec-canvas>
+		</view>
+	</view>
+
+	<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>
+			<view class="row">erp{{language['单号']||'单号'}}:{{item.erpbillno ||' --'}}</view>
+			<view class="row">{{language['订单类型']||'订单类型'}}:{{language[item.type]||item.type || ' --'}}</view>
+			<view class="row">{{language['企业名称']||'企业名称'}}:{{item.enterprisename ||' --'}}</view>
+			<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
+			<view class="row">{{language['产品总数量']||'产品总数量'}}:{{item.qty ||'0'}}</view>
+			<view class="row">{{language['总金额']||'总金额'}}:{{item.amount ||'0'}}</view>
+			<view class="row">{{language['退款金额']||'退款金额'}}:{{item.returnamount ||'0'}}</view>
+			<view class="row">{{language['业务员']||'业务员'}}:{{item.name ||' --'}}</view>
+			<view class="row" style="color: {{item.status?'#999':''}};">{{language['订单状态']||'订单状态'}}:{{item.status ||' --'}}</view>
+			<view class="but">
+				{{language['查看详情']||'查看详情'}}
+				<text class='iconfont icon-webfanhui' />
+			</view>
+		</navigator>
+	</block>
+</Yl_ListBox>

+ 3 - 2
salesPanel/index/index.js

@@ -26,7 +26,8 @@ Page({
             label: "订单趋势分析",
             model: "#OrderTrendAnalysis"
         }, {
-            label: "订单类型占比分析"
+            label: "订单类型占比分析",
+            model: "#AnalysisOfOrderTypeDistribution"
         }, {
             label: "订单产品类别占比分析"
         }, {
@@ -51,7 +52,7 @@ Page({
         }, {
             label: "财务回款分析"
         }],
-        tabsActive: 8,
+        tabsActive: 5,
         showFiltrate: false,
         dataid: wx.getStorageSync('userMsg').userid,
         username: wx.getStorageSync('userMsg').name,

+ 2 - 1
salesPanel/index/index.json

@@ -4,7 +4,8 @@
         "CustomerBlance": "../customerBlance/index",
         "biddingAnalysis": "../biddingAnalysis/index",
         "TrendAnalysis": "../trendAnalysis/index",
-        "ShipmentAnalysis": "../shipmentAnalysis/index"
+        "ShipmentAnalysis": "../shipmentAnalysis/index",
+        "analysisOfOrderTypeDistribution":"../analysisOfOrderTypeDistribution/index"
     },
     "navigationBarTitleText": "销售数据"
 }

+ 1 - 0
salesPanel/index/index.wxml

@@ -24,6 +24,7 @@
     <ShipmentAnalysis slot="已下单未出货分析" mode='已下单未出货分析' id="ShipmentAnalysis1" />
     <ShipmentAnalysis slot="近12月延期出货情况分析" mode='近12月延期出货情况分析' id="ShipmentAnalysis2" />
     <ShipmentAnalysis slot="未出货已延期情况分析" mode='未出货已延期情况分析' id="ShipmentAnalysis3" />
+    <analysisOfOrderTypeDistribution slot="订单类型占比分析" mode='订单类型占比分析' id="AnalysisOfOrderTypeDistribution" />
 </Yl_FunTabs>
 <Yl_Filtrate1 id="Yl_Filtrate1" show='{{showFiltrate}}' list="{{[]}}" bindhandle="handleFilter" bindinterrupt='interrupt'>
     <organization slot='head' defaultIsleave='1' dimissionF id='organization' />

+ 9 - 0
salesPanel/shipmentAnalysis/index.js

@@ -25,6 +25,8 @@ Component({
     },
     data: {
         "content": {
+            pageNumber: 1,
+            pageTotal: 1,
             dataid: wx.getStorageSync('userMsg').userid,
             username: wx.getStorageSync('userMsg').name,
             enddate: new Date().toISOString().split('T')[0],
@@ -33,6 +35,7 @@ Component({
     },
     methods: {
         async getList(init = false) {
+            if (init.detail != undefined) init = init.detail;
             let content = this.data.content
             const {
                 dataid,
@@ -45,6 +48,11 @@ Component({
             content.type = type;
             content.username = username;
             content.where.isleave = isleave;
+            if (init) {
+                content.pageNumber = 1;
+                content.pageTotal = 1;
+            }
+            if (content.pageNumber > content.pageTotal) return;
             const dividend = wx.getStorageSync('languagecode') == 'ZH' ? 10000 : 1000,
                 getMapText = getApp().globalData.Language.getMapText;
             let ids = {
@@ -57,6 +65,7 @@ Component({
                 "id": ids[this.properties.mode],
                 content
             }).then(res => {
+                this.selectComponent('#ListBox').RefreshToComplete();
                 console.log(this.properties.mode, res)
                 if (res.code != '1') return wx.showToast({
                     title: res.data,

+ 65 - 62
salesPanel/shipmentAnalysis/index.wxml

@@ -8,80 +8,83 @@
 		<ec-canvas id="mychart" canvas-id="chart" ec="{{ ec }}"></ec-canvas>
 	</view>
 
-	<view class="global-card" wx:for="{{list}}" wx:key="sa_orderitemsid">
-		<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">{{language['企业名称']||'企业名称'}}:{{item.enterprisename ||' --'}}</view>
-		<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
-		<view class="row">{{language['业务员']||'业务员'}}:{{item.salername ||' --'}}</view>
-		<view class="row" wx:if="{{item.expanded}}">
-			{{language['行号']||'行号'}}:{{item.rowno ||' --'}}
-		</view>
-		<view class="row">{{language['产品名称']||'产品名称'}}:{{item.itemname ||' --'}}</view>
-		<view class="row">{{language['产品编号']||'产品编号'}}:{{item.itemno ||' --'}}</view>
-		<view class="row">
-			{{language['型号']||'型号'}}:{{language[item.model]||item.model||' --'}}
-		</view>
-		<view class="row" wx:if="{{siteid!='HY' && item.expanded}}">
-			{{language['规格']||'规格'}}:{{language[item.spec]||item.spec||' --'}}
-		</view>
-		<view class="row" wx:if="{{siteid=='HY' && item.expanded}}">
-			{{language['公称通径']||'公称通径'}}:{{item.caliber||' --'}}
-		</view>
-		<view class="row" wx:if="{{siteid=='HY' && item.expanded}}">
-			{{language['公称压力']||'公称压力'}}:{{item.nominalpressureStr||' --'}}
-		</view>
-		<block wx:if="{{item.expanded}}">
+	<My_empty wx:if='{{list[0].isEmpty}}' />
+	<block wx:else>
+		<view class="global-card" wx:for="{{list}}" wx:key="sa_orderitemsid">
+			<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">{{language['企业名称']||'企业名称'}}:{{item.enterprisename ||' --'}}</view>
+			<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
+			<view class="row">{{language['业务员']||'业务员'}}:{{item.salername ||' --'}}</view>
+			<view class="row" wx:if="{{item.expanded}}">
+				{{language['行号']||'行号'}}:{{item.rowno ||' --'}}
+			</view>
+			<view class="row">{{language['产品名称']||'产品名称'}}:{{item.itemname ||' --'}}</view>
+			<view class="row">{{language['产品编号']||'产品编号'}}:{{item.itemno ||' --'}}</view>
+			<view class="row">
+				{{language['型号']||'型号'}}:{{language[item.model]||item.model||' --'}}
+			</view>
+			<view class="row" wx:if="{{siteid!='HY' && item.expanded}}">
+				{{language['规格']||'规格'}}:{{language[item.spec]||item.spec||' --'}}
+			</view>
+			<view class="row" wx:if="{{siteid=='HY' && item.expanded}}">
+				{{language['公称通径']||'公称通径'}}:{{item.caliber||' --'}}
+			</view>
+			<view class="row" wx:if="{{siteid=='HY' && item.expanded}}">
+				{{language['公称压力']||'公称压力'}}:{{item.nominalpressureStr||' --'}}
+			</view>
+			<block wx:if="{{item.expanded}}">
+				<view class="row">
+					{{language['需求日期']||'需求日期'}}:{{item.needdate||' --'}}
+				</view>
+				<view class="row">
+					{{language['回复交期']||'回复交期'}}:{{item.deliverydate||' --'}}
+				</view>
+				<view class="row">{{language['数量']||'数量'}}:{{item.qty||' --'}}</view>
+			</block>
 			<view class="row">
-				{{language['需求日期']||'需求日期'}}:{{item.needdate||' --'}}
+				{{language['牌价']||'牌价'}}:
+				<text style="color: #3874F6;">{{item.marketprice||' --'}}</text>
 			</view>
 			<view class="row">
-				{{language['回复交期']||'回复交期'}}:{{item.deliverydate||' --'}}
+				{{language['订单单价']||'订单单价'}}:
+				<text style="color: #3874F6;">{{item.price||' --'}}</text>
 			</view>
-			<view class="row">{{language['数量']||'数量'}}:{{item.qty||' --'}}</view>
-		</block>
-		<view class="row">
-			{{language['牌价']||'牌价'}}:
-			<text style="color: #3874F6;">{{item.marketprice||' --'}}</text>
-		</view>
-		<view class="row">
-			{{language['订单单价']||'订单单价'}}:
-			<text style="color: #3874F6;">{{item.price||' --'}}</text>
-		</view>
-		<view class="row">
-			{{language['订单金额']||'订单金额'}}:
-			<text style="color: #3874F6;">{{item.amount||' --'}}</text>
-		</view>
-		<view class="row">
-			{{language['未出货数量']||'未出货数量'}}:
-			<text style="color: #3874F6;">{{item.unlogisticsqty||'0'}}</text>
-		</view>
-		<block wx:if="{{item.expanded}}">
 			<view class="row">
-				{{language['退款金额']||'退款金额'}}:
-				<text style="color: #3874F6;">{{item.returnamount||' --'}}</text>
+				{{language['订单金额']||'订单金额'}}:
+				<text style="color: #3874F6;">{{item.amount||' --'}}</text>
 			</view>
 			<view class="row">
-				{{language['材质']||'材质'}}:{{language[item.material]||item.material||' --'}}
+				{{language['未出货数量']||'未出货数量'}}:
+				<text style="color: #3874F6;">{{item.unlogisticsqty||'0'}}</text>
 			</view>
-			<block wx:if="{{siteid=='HY'}}">
-				<view class="row">
-					{{language['产线']||'产线'}}:{{language[item.prodline]||item.prodline||' --'}}
-				</view>
+			<block wx:if="{{item.expanded}}">
 				<view class="row">
-					{{language['装置']||'装置'}}:{{language[item.device]||item.device||' --'}}
+					{{language['退款金额']||'退款金额'}}:
+					<text style="color: #3874F6;">{{item.returnamount||' --'}}</text>
 				</view>
 				<view class="row">
-					{{language['备注']||'备注'}}:{{language[item.specalnote]||item.specalnote||' --'}}
+					{{language['材质']||'材质'}}:{{language[item.material]||item.material||' --'}}
 				</view>
+				<block wx:if="{{siteid=='HY'}}">
+					<view class="row">
+						{{language['产线']||'产线'}}:{{language[item.prodline]||item.prodline||' --'}}
+					</view>
+					<view class="row">
+						{{language['装置']||'装置'}}:{{language[item.device]||item.device||' --'}}
+					</view>
+					<view class="row">
+						{{language['备注']||'备注'}}:{{language[item.specalnote]||item.specalnote||' --'}}
+					</view>
+				</block>
 			</block>
-		</block>
-		<view class="{{item.expanded?'expanded up':'expanded'}}" data-index="{{index}}" bind:tap="changeExpanded">
-			{{item.expanded?'简略信息':'详情信息'}}
-			<text class="iconfont icon-dianjizhankai" />
+			<view class="{{item.expanded?'expanded up':'expanded'}}" data-index="{{index}}" bind:tap="changeExpanded">
+				{{item.expanded?'简略信息':'详情信息'}}
+				<text class="iconfont icon-dianjizhankai" />
+			</view>
 		</view>
-	</view>
+	</block>
 </Yl_ListBox>