Bladeren bron

财务回款分析

xiaohaizhao 5 maanden geleden
bovenliggende
commit
94a2f9dd37

+ 77 - 17
salesPanel/FinancialCollectionAnalysis/detail.js

@@ -1,23 +1,83 @@
+const _Http = getApp().globalData.http,
+    currency = require("../../utils/currency"),
+    CNY = (value, symbol = "¥", precision = 2) => currency(value, {
+        symbol,
+        precision
+    }).format();
 Page({
     data: {
-
+        id: "20231017110204",
+        searchShow: false,
+        searchValue: "",
     },
     onLoad(options) {
-        getApp().globalData.Language.getLanguagePackage(this, '订单未回款明细');
-
-        let obj = {
-            "id": 20231017110204,
-            "content": {
-                "type": 1,
-                "dataid": 58,
-                "unwriteoffamounttype": "订单",
-                "sys_enterpriseid": 3027,
-                "pageSize": 100,
-                "pageNumber": 1,
-                "where": {
-                    "condition": ""
-                }
-            },
-        }
+        getApp().globalData.Language.getLanguagePackage('订单未回款明细')
+        this.setData({
+            content: JSON.parse(options.content),
+            siteid: wx.getStorageSync('userMsg').siteid
+        })
+        this.getList()
     },
+    changeSearchShow() {
+        this.setData({
+            searchShow: !this.data.searchShow
+        })
+        this.selectComponent('#ListBox').automaticSetHei();
+    },
+    getList(init = false) {
+        _Http.init(this.data.content, init).then(content => {
+            _Http.basic({
+                "id": this.data.id,
+                content
+            }).then(res => {
+                console.log( "明细列表", res)
+                this.selectComponent('#ListBox').automaticSetHei();
+                this.selectComponent('#ListBox').RefreshToComplete();
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                res.data = res.data.map(v => {
+                    v.price = CNY(v.price)
+                    v.amount = CNY(v.amount)
+                    v.outOrderamount = CNY(v.outOrderamount)
+                    v.invoiceamount = CNY(v.invoiceamount)
+                    v.unwriteoffamount = CNY(v.unwriteoffamount)
+                    v.expanded = false;
+                    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,
+                    "content.pageTotal": res.pageTotal,
+                    "total": res.total,
+                })
+            })
+        })
+    },
+    changeExpanded(e) {
+        const {
+            index
+        } = e.currentTarget.dataset;
+        this.setData({
+            [`list[${index}].expanded`]: !this.data.list[index].expanded
+        })
+    },
+    onSearch() {
+        this.data.content.where.condition = this.data.searchValue;
+        this.getList(true);
+    },
+    onChange(event) {
+        this.setData({
+            searchValue: event.detail
+        })
+    },
+    onClear() {
+        this.setData({
+            searchValue: "",
+            "content.where.condition": ""
+        })
+        this.getList(true);
+    }
 })

+ 1 - 0
salesPanel/FinancialCollectionAnalysis/detail.scss

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

+ 76 - 0
salesPanel/FinancialCollectionAnalysis/detail.wxml

@@ -0,0 +1,76 @@
+<view class='tab-box'>
+	<view class="left">
+		<view class="user line-1">{{language[content.enterprisename]||content.enterprisename}}</view>
+	</view>
+	<view class="right">
+		<view class="search-box" hover-class="navigator-hover" bindtap="changeSearchShow">
+			<text class="iconfont icon-a-sousuolansousuo" />
+		</view>
+	</view>
+</view>
+<view wx-if="{{searchShow}}">
+	<van-transition show="{{ searchShow }}" name='fade' duration='300'>
+		<view>
+			<van-search focus="{{focus}}" value="{{searchValue}}" placeholder="{{language['请输入关键字']||'请输入关键字'}}" bind:search="onSearch" bind:clear="onClear" bind:change="onChange" />
+		</view>
+	</van-transition>
+</view>
+<view class="global-total">
+	<text wx:if="{{language['总共']}}">{{language['总共']}}:{{content.total}}</text>
+	<text wx:else>总共{{total}}个</text>
+</view>
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<view class="global-card" wx:for="{{list}}" wx:key="sa_orderitemsid">
+		<view class="title">
+			{{item.sonum}}
+		</view>
+		<view class="row" wx:if="{{item.expanded}}">erp{{language['订单号']||'订单号'}}:{{item.erpbillno ||' --'}}</view>
+		<view class="row">{{language['业务员']||'业务员'}}:{{item.name ||' --'}}</view>
+		<view class="row" wx:if="{{item.expanded}}">{{language['部门']||'部门'}}:{{item.depname ||' --'}}</view>
+		<view class="row">{{language['客户名称']||'客户名称'}}:{{item.enterprisename ||' --'}}</view>
+		<view class="row" wx:if="{{item.expanded}}">{{language['客户']||'客户'}}erp{{language['编号']||'编号'}}:{{item.agentnum ||' --'}}</view>
+		<view class="row">{{language['订单行号']||'订单行号'}}:{{item.rowno ||' --'}}</view>
+		<view class="row">{{language['产品名称']||'产品名称'}}:{{item.itemname ||' --'}}</view>
+		<view class="row">{{language['品号']||'品号'}}:{{item.itemno ||' --'}}</view>
+		<block wx:if="{{item.expanded}}">
+			<view class="row">
+				{{language['型号']||'型号'}}:{{language[item.model]||item.model||' --'}}
+			</view>
+			<view class="row" wx:if="{{siteid!='HY'}}">
+				{{language['规格']||'规格'}}:{{language[item.spec]||item.spec||' --'}}
+			</view>
+			<view class="row" wx:if="{{siteid=='HY'}}">
+				{{language['公称通径']||'公称通径'}}:{{item.caliber||' --'}}
+			</view>
+			<view class="row" wx:if="{{siteid=='HY'}}">
+				{{language['公称压力']||'公称压力'}}:{{item.nominalpressureStr||' --'}}
+			</view>
+			<view class="row">
+				{{language['订单数量']||'订单数量'}}:{{item.qty||0}}
+			</view>
+			<view class="row">
+				{{language['计量单位']||'计量单位'}}:{{language[item.unit]||item.unit||' --'}}
+			</view>
+			<view class="row">
+				{{language['折后价格']||'折后价格'}}:{{item.price}}
+			</view>
+		</block>
+		<view class="row">
+			{{language['折后金额']||'折后金额'}}:{{item.amount}}
+		</view>
+		<view class="row">
+			{{language['出货金额']||'出货金额'}}:{{item.outOrderamount}}
+		</view>
+		<view class="row" wx:if="{{item.expanded}}">
+			{{language['出货日期']||'出货日期'}}:{{item.outOrderdate}}
+		</view>
+		<view class="row">
+			{{language['开票未核销金额']||'开票未核销金额'}}:{{item.unwriteoffamount}}
+		</view>
+		<view class="{{item.expanded?'expanded up':'expanded'}}" data-index="{{index}}" bind:tap="changeExpanded">
+			{{item.expanded?'简略信息':'详情信息'}}
+			<text class="iconfont icon-dianjizhankai" />
+		</view>
+	</view>
+	<My_empty wx:if="{{list.length==0}}" />
+</Yl_ListBox>

+ 33 - 12
salesPanel/FinancialCollectionAnalysis/index.js

@@ -30,7 +30,8 @@ Component({
             pageNumber: 1,
             pageTotal: 1,
             pageSize: 20
-        }
+        },
+        list: []
     },
     methods: {
         async getList(init = false) {
@@ -49,8 +50,6 @@ Component({
             content.type = type;
             content.username = username;
             content.where.isleave = isleave;
-            let dividend = wx.getStorageSync('languagecode') == 'ZH' ? 10000 : 1000,
-                getMapText = getApp().globalData.Language.getMapText;
             if (init) {
                 pages.pageNumber = 1;
                 pages.pageTotal = 1;
@@ -92,9 +91,16 @@ Component({
                 this.initChart(res.data)
             })
         },
+        toDetail(e) {
+            let content = this.data.content;
+            content.sys_enterpriseid = e.currentTarget.dataset.item.sys_enterpriseid;
+            content.enterprisename = e.currentTarget.dataset.item.enterprisename;
+            wx.navigateTo({
+                url: '/salesPanel/FinancialCollectionAnalysis/detail?content=' + JSON.stringify(content)
+            })
+        },
         initChart(data) {
             let dividend = wx.getStorageSync('languagecode') == 'ZH' ? 10000 : 1000,
-                getMapText = getApp().globalData.Language.getMapText,
                 list = [{
                     name: "0-3月未回款金额(万元)",
                     color: "#5B8FF9"
@@ -110,14 +116,11 @@ Component({
                 }];
 
             let series = list.map(item => ({
-                name: getMapText(item.name),
+                name: getApp().globalData.Language.getMapText(item.name),
                 type: 'bar',
                 stack: 'total',
                 label: {
-                    show: true,
-                    formatter: function (params) {
-                        return params.value === 0 ? '' : params.value;
-                    }
+                    show: true
                 },
                 emphasis: {
                     focus: 'series'
@@ -137,8 +140,9 @@ Component({
                     confine: true, // Ensure tooltip stays within the chart area
                     formatter: function (params) {
                         let tooltipText = '';
+                        changeUnwriteoffamounttype(['订单', '出货', '开票'][params[0].dataIndex])
                         params.forEach((item, index) => {
-                            tooltipText += `${index==0?item.axisValue+'\n':''}${item.marker}${item.seriesName}: ${item.value}${item.seriesName == getMapText('同比增长率') ? '%' : ''}\n`;
+                            tooltipText += `${index==0?item.axisValue+'\n':''}${item.marker}${item.seriesName}: ${item.value}\n`;
                         });
                         return tooltipText;
                     },
@@ -147,7 +151,7 @@ Component({
                     }
                 },
                 legend: {
-                    data: list.map(item => getMapText(item.name))
+                    data: list.map(item => getApp().globalData.Language.getMapText(item.name))
                 },
                 grid: {
                     left: '3%',
@@ -160,10 +164,27 @@ Component({
                 },
                 yAxis: {
                     type: 'category',
-                    data: ['订单', '出货', '开票'].map(v => getMapText(v))
+                    data: ['订单', '出货', '开票'].map(v => getApp().globalData.Language.getMapText(v))
                 },
                 series
             };
+            let countDown = null,
+                that = this;
+
+            function changeUnwriteoffamounttype(type) {
+                if (countDown) return;
+                countDown = setTimeout(() => {
+                    clearTimeout(countDown)
+                    countDown = null;
+                    if (type != that.data.content.unwriteoffamounttype) {
+                        that.setData({
+                            "content.unwriteoffamounttype": type,
+                            "pages.pageNumber": 1
+                        })
+                    }
+                    that.getList()
+                }, 200)
+            };
             this.chartComponent = this.selectComponent('#mychart');
             this.chartComponent.init((canvas, width, height, dpr) => {
                 const chart = echarts.init(canvas, null, {

+ 3 - 3
salesPanel/FinancialCollectionAnalysis/index.wxml

@@ -7,9 +7,9 @@
 	<view class="chart2">
 		<ec-canvas id="mychart" canvas-id="chart" ec="{{ ec }}"></ec-canvas>
 	</view>
-	<My_empty wx:if='{{list[0].isEmpty}}' />
+	<My_empty wx:if='{{!list.length}}' />
 	<block wx:else>
-		<navigator url="#" class="global-card item" wx:for="{{list}}" wx:key="sonum">
+		<view hover-class="navigator-hover" url="#" class="global-card item" wx:for="{{list}}" wx:key="sys_enterpriseid" data-item="{{item}}" bind:tap="toDetail">
 			<view class="title">
 				{{item.enterprisename}}
 			</view>
@@ -25,6 +25,6 @@
 				{{language['明细']||'明细'}}
 				<text class='iconfont icon-webfanhui' />
 			</view>
-		</navigator>
+		</view>
 	</block>
 </Yl_ListBox>