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

+ 170 - 0
salesPanel/dataOverview/Clue/YXXSWGJTSFX.js

@@ -0,0 +1,170 @@
+const _Http = getApp().globalData.http;
+import * as echarts from '../../ec-canvas/echarts';
+Component({
+    options: {
+        addGlobalClass: true
+    },
+    lifetimes: {
+        attached: function () {
+            getApp().globalData.Language.getLanguagePackage(this)
+            this.setData({
+                "content.dataid": wx.getStorageSync('userMsg').userid,
+                "content.username": wx.getStorageSync('userMsg').name,
+            })
+        }
+    },
+    data: {
+        year: new Date().getFullYear().toString(),
+        "content": {
+            dateType: "15-30天",
+            enddate: new Date().toISOString().split('T')[0],
+            where: {},
+            pageNumber: 1,
+            pageSize: 20,
+            pageTotal: 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;
+            if (init) {
+                content.pageNumber = 1;
+                content.pageSize = 20;
+            }
+            if (content.pageNumber > content.pageTotal) return;
+            _Http.basic({
+                "id": 20231015130604,
+                content
+            }).then(res => {
+                console.log("有效线索未跟进天数分析", res)
+                this.selectComponent('#ListBox').RefreshToComplete();
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                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,
+                })
+                if (init) this.initChart(res.data[0].trend)
+            })
+        },
+        initChart(data) {
+            const colors = ['#6395FA'],
+                getMapText = getApp().globalData.Language.getMapText;
+            let that = this,
+                countDown = null;
+
+            function changeDateType(params) {
+                clearTimeout(countDown)
+                countDown = setTimeout(() => {
+                    let data = that.data.list[0].trend.find(v => getMapText(v.key) === getMapText(params.name));
+                    console.log("data", data)
+                    if (data.key === that.data.content.dateType) return;
+                    that.setData({
+                        "content.dateType": data.key,
+                        "content.pageNumber": 1,
+                    })
+                    that.getList();
+                }, 200)
+            }
+            let legend = [getMapText('线索数')],
+                series = [{
+                    name: getMapText('线索数'),
+                    type: 'bar',
+                    data: data.map(v => v.value),
+                    smooth: true
+                }]
+            const option = {
+                color: colors,
+                tooltip: {
+                    trigger: 'axis',
+                    confine: true, // Ensure tooltip stays within the chart area
+                    formatter: function (params) {
+                        changeDateType(params[0])
+                        return params.map((item, index) =>
+                            `${index === 0 ? item.axisValue + '\n' : ''}${item.marker}${item.seriesName}: ${item.value}`
+                        ).join('\n');
+                    },
+                    textStyle: {
+                        fontSize: 10, // Reduced font size
+                        lineHeight: 14 // Adjusted line height for smaller tooltip height
+                    }
+                },
+                legend: {
+                    data: legend,
+                    left: 'left' // Display legend on the left
+                },
+                xAxis: [{
+                    type: 'category',
+                    axisTick: {
+                        alignWithLabel: true
+                    },
+                    data: data.map(v => getMapText(v.key)),
+                    axisLabel: {
+                        interval: 0,
+                        rotate: 45
+                    }
+                }],
+                yAxis: [{
+                    type: 'value',
+                    position: 'left',
+                    axisLine: {
+                        show: true,
+                    },
+                    axisLabel: {
+                        formatter: '{value}'
+                    },
+                    splitLine: {
+                        lineStyle: {
+                            type: 'dashed' // Dashed grid lines for better readability
+                        }
+                    }
+                }],
+                series: series.map(item => ({
+                    ...item,
+                    label: {
+                        show: true,
+                        position: 'inside', // Display the label inside the bar
+                        formatter: '{c}', // Show the value of the bar
+                        fontSize: 10, // Adjust font size for better readability
+                        color: '#FFFFFF' // Set font color to white
+                    }
+                }))
+            };
+            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;
+            });
+        },
+        changeDate({
+            detail
+        }) {
+            this.setData({
+                "content.enddate": detail
+            })
+            this.getList(true)
+        },
+    }
+})

+ 6 - 0
salesPanel/dataOverview/Clue/YXXSWGJTSFX.json

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

+ 2 - 0
salesPanel/dataOverview/Clue/YXXSWGJTSFX.scss

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

+ 34 - 0
salesPanel/dataOverview/Clue/YXXSWGJTSFX.wxml

@@ -0,0 +1,34 @@
+<viewDate title='分析日期' bind:onChange='changeDate' />
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<view class="global-card">
+		<view class="chart"></view>
+	</view>
+	<view class="chart2">
+		<ec-canvas id="mychart" canvas-id="chart" ec="{{ ec }}"></ec-canvas>
+	</view>
+	<navigator url="/packageA/saleClue/detail?sat_orderclueid={{item.sat_orderclueid}}" class="global-card item" wx:for="{{list}}" wx:key="sat_orderclueid">
+		<view class="title">
+			<text class="line-1">{{item.enterprisename_customer || " --"}}</text>
+			<view class="status" style="background-color: {{sColors[item.status]}};">
+				{{language[item.status]||item.status}}</view>
+		</view>
+		<view class="tag-box">
+			<van-tag custom-class='tag' wx:for="{{item.tags}}" wx:key="index" wx:for-item='tag' color='#3874f6'
+				text-color='#fff' round>{{language[tag]||tag}}</van-tag>
+		</view>
+		<view class="row">
+			<view class="col">{{language['负责人']||'负责人'}}:{{item.leader.length?item.leader[0].name :' --'}}</view>
+			<view class="col">{{language['部门']||'部门'}}:{{item.leader.length?item.leader[0].depname :' --'}}</view>
+		</view>
+		<view class="row">{{language['客户名称']||'客户名称'}}:{{item.enterprisename ||' --'}}</view>
+		<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
+		<view class="row">{{language['联系人']||'联系人'}}:{{item.name ||' --'}}</view>
+		<view class="row">{{language['联系方式']||'联系方式'}}:{{item.phonenumber ||' --'}}</view>
+		<view class="row">{{language['详细地址']||'详细地址'}}:{{item.address ||' --'}}</view>
+		<view class="row">{{language['创建时间']||'创建时间'}}:{{item.createdate ||' --'}}</view>
+	</navigator>
+	<My_empty wx:if="{{list.length==0}}" />
+	<view style="height: 100rpx;">
+		
+	</view>
+</Yl_ListBox>

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

@@ -27,6 +27,9 @@ Component({
         }, {
             label: "近12月线索转化分析",
             model: "#AnalysisOfLeadConversion"
+        }, {
+            label: "有效线索未跟进天数分析",
+            model: "#YXXSWGJTSFX"
         }],
         tabsActive: 0,
         init: false

+ 1 - 0
salesPanel/dataOverview/list/Clue.json

@@ -3,6 +3,7 @@
     "usingComponents": {
         "DataOverview": "../Clue/dataOverview",
         "AnalysisOfLeadConversion": "../Clue/AnalysisOfLeadConversion",
+        "YXXSWGJTSFX": "../Clue/YXXSWGJTSFX",
         "NewAnalysisAdded": "../Clue/NewAnalysisAdded",
         "followUpAnalysis": "../Clue/followUpAnalysis"
     }

+ 1 - 1
salesPanel/dataOverview/list/Clue.wxml

@@ -3,5 +3,5 @@
     <NewAnalysisAdded slot='近12月线索新增分析' idname='20231015123304' id='NewAnalysisAdded' />
     <AnalysisOfLeadConversion slot='近12月线索转化分析' id='AnalysisOfLeadConversion' />
     <followUpAnalysis slot='近12月线索跟进分析' idname='20231015124504' id='followUpAnalysis' />
-
+    <YXXSWGJTSFX slot='有效线索未跟进天数分析' id='YXXSWGJTSFX' />
 </Yl_FunTabs>