|
|
@@ -0,0 +1,243 @@
|
|
|
+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({
|
|
|
+ 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": {
|
|
|
+ enddate: new Date().toISOString().split('T')[0],
|
|
|
+ where: {
|
|
|
+ dateType: "15-30天",
|
|
|
+ projecttype: ""
|
|
|
+ },
|
|
|
+ pageNumber: 1,
|
|
|
+ pageSize: 20,
|
|
|
+ pageTotal: 1
|
|
|
+ },
|
|
|
+ types: [],
|
|
|
+ filterShow: false,
|
|
|
+ filtratelist: [{
|
|
|
+ label: "项目状态",
|
|
|
+ index: null,
|
|
|
+ showName: "value", //显示字段
|
|
|
+ valueKey: "status", //返回Key
|
|
|
+ selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
|
|
|
+ value: "", //选中值
|
|
|
+ type: "checkbox",
|
|
|
+ list: [{
|
|
|
+ value: "跟进中"
|
|
|
+ }, {
|
|
|
+ value: "已成交"
|
|
|
+ }, {
|
|
|
+ value: "已失败"
|
|
|
+ }, {
|
|
|
+ value: "已结案"
|
|
|
+ }]
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ 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": 20231019095904,
|
|
|
+ content
|
|
|
+ }).then(res => {
|
|
|
+ console.log("有效项目未跟进天数分析", res)
|
|
|
+ this.selectComponent('#ListBox').RefreshToComplete();
|
|
|
+ if (res.code != '1') return wx.showToast({
|
|
|
+ title: res.data,
|
|
|
+ icon: "none"
|
|
|
+ })
|
|
|
+ res.data = res.data.map(v => {
|
|
|
+ v.signamount_due = CNY(v.signamount_due)
|
|
|
+ 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,
|
|
|
+ })
|
|
|
+ try {
|
|
|
+ this.selectAllComponents("#Filtrate").forEach(v => v.onCancel())
|
|
|
+ } catch (error) {}
|
|
|
+ if (init) _Http.basic({
|
|
|
+ "id": 20231019095804,
|
|
|
+ content
|
|
|
+ }).then(res1 => {
|
|
|
+ console.log("图标", res1)
|
|
|
+ this.initChart(res1.data)
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ initChart(data) {
|
|
|
+ let projecttype = [...new Set(data.map(v => getApp().globalData.Language.getMapText(v.projecttype)))]
|
|
|
+ let source = [
|
|
|
+ ['product'].concat(projecttype),
|
|
|
+ ];
|
|
|
+ data.forEach(v => {
|
|
|
+ if (!source.find(item => item[0] === getApp().globalData.Language.getMapText(v.datetype))) {
|
|
|
+ source.push([getApp().globalData.Language.getMapText(v.datetype)])
|
|
|
+ }
|
|
|
+ let index = source.findIndex(item => item[0] === getApp().globalData.Language.getMapText(v.datetype));
|
|
|
+ source[index].push(v.value);
|
|
|
+ })
|
|
|
+ if (this.data.types.length == 0) {
|
|
|
+ let types = projecttype.map(v => {
|
|
|
+ return {
|
|
|
+ remarks: v,
|
|
|
+ value: v.split("-")[0],
|
|
|
+ }
|
|
|
+ })
|
|
|
+ types.unshift({
|
|
|
+ remarks: '全部',
|
|
|
+ value: ''
|
|
|
+ })
|
|
|
+ console.log("types", types)
|
|
|
+ this.setData({
|
|
|
+ types
|
|
|
+ })
|
|
|
+ }
|
|
|
+ let that = this,
|
|
|
+ countDown = null,
|
|
|
+ datetypes = [...new Set(data.map(v => v.datetype))];
|
|
|
+
|
|
|
+ function changeDateType(params) {
|
|
|
+ clearTimeout(countDown)
|
|
|
+ countDown = setTimeout(() => {
|
|
|
+ if (datetypes[params.dataIndex] === that.data.content.where.dateType) return;
|
|
|
+ that.setData({
|
|
|
+ "content.where.dateType": datetypes[params.dataIndex],
|
|
|
+ "content.pageNumber": 1,
|
|
|
+ })
|
|
|
+ that.getList();
|
|
|
+ }, 200)
|
|
|
+ }
|
|
|
+ let option = {
|
|
|
+ legend: {
|
|
|
+ type: 'scroll',
|
|
|
+ orient: 'horizontal',
|
|
|
+ top: 10
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis',
|
|
|
+ axisPointer: {
|
|
|
+ type: 'shadow'
|
|
|
+ },
|
|
|
+ formatter: function (params) {
|
|
|
+ changeDateType(params[0]);
|
|
|
+ let filteredParams = params.filter(item => item.value !== 0);
|
|
|
+ if (filteredParams.length === 0) return '';
|
|
|
+ let tooltipText = `${params[0].axisValue}\n`;
|
|
|
+ filteredParams.forEach((item, index) => {
|
|
|
+ if (item.value[index + 1] != 0) {
|
|
|
+ tooltipText += `${item.marker} ${item.dimensionNames[index + 1]}: ${item.value[index + 1]}\n`;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return tooltipText;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ dataset: {
|
|
|
+ source
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: 'category',
|
|
|
+ axisLabel: {
|
|
|
+ interval: 0,
|
|
|
+ rotate: 30
|
|
|
+ }
|
|
|
+ },
|
|
|
+ yAxis: {
|
|
|
+ type: 'value'
|
|
|
+ },
|
|
|
+ series: projecttype.map(() => ({
|
|
|
+ type: 'bar',
|
|
|
+ barMaxWidth: 30
|
|
|
+ }))
|
|
|
+ };
|
|
|
+ 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)
|
|
|
+ },
|
|
|
+ clickOpen() {
|
|
|
+ this.setData({
|
|
|
+ filterShow: true
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /* 处理筛选 */
|
|
|
+ handleFilter({
|
|
|
+ detail
|
|
|
+ }) {
|
|
|
+ if (detail.name == "confirm") {
|
|
|
+ this.setData({
|
|
|
+ "content.where.status": detail.status
|
|
|
+ })
|
|
|
+ this.selectComponent('#Filtrate1').setShowArrText(detail.status)
|
|
|
+ this.getList(true)
|
|
|
+ } else if (detail.name == 'reset') {
|
|
|
+ this.setData({
|
|
|
+ "content.where.status": []
|
|
|
+ })
|
|
|
+ this.selectComponent('#Filtrate1').setShowArrText([])
|
|
|
+ this.getList(true)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeType2({
|
|
|
+ detail
|
|
|
+ }) {
|
|
|
+ this.setData({
|
|
|
+ "content.where.projecttype": detail,
|
|
|
+ })
|
|
|
+ this.getList(true)
|
|
|
+ },
|
|
|
+ }
|
|
|
+})
|