element-plus框架+vue3+echart——后台页面

news2024/9/28 1:21:16

一、图表样式

图表组件:echarts

https://echarts.apache.org/examples/zh/index.html

element-plus框架:

https://www.cwgj.xyz/zh-CN/

1、折线图

栅格 一共24。 12代表占一半50%, 当页面缩小到一定程度 占整个屏幕的100%。
id="money_echarts"重要,关系到图表生成放置的位置。
该折线图带有日期筛选。
value-format="YYYY-MM-DD"返回时间的格式
:disabled-date="state.disabledDate"时间限制,比如不能选择今天之后的日期。
日期说明:https://www.cwgj.xyz/zh-CN/component/date-picker.html

在这里插入图片描述

.bigChart {
        width: 100%;
        padding: 15px;
        background-color: #ffffff;
        margin-bottom: 20px;
        border-radius: 15px;

        .titleBox {
            display: flex;
            justify-content: space-between;
            align-items: center;

            .title {
                font-weight: bold;
                font-size: 16px;
                color: #1D2129;
            }

            .timeBox {
                display: flex;
                align-items: center;
                font-size: 14px;
                color: #4E5969;
            }
        }

        .broken_order {
            height: 300px;
            margin-top: 20px;
        }
    }
<el-col :xs="24" :lg="12">
 	 <!-- 折线图-->
    <el-row :gutter="24" style="margin: 0;">
        <div class="bigChart">
            <div class="titleBox">
                <div class="title">签单金额统计</div>
                <div class="timeBox">
                    日期:
                    <el-date-picker v-model="state.moneyTime" type="daterange" range-separator="-"
                                    start-placeholder="开始时间" end-placeholder="结束时间" size="small"
                                    @change="chooseMoneyTime" value-format="YYYY-MM-DD"
                                    :unlink-panels="true" :disabled-date="state.disabledDate">
                    </el-date-picker>
                </div>
            </div>
            <div id="money_echarts" class="broken_order"></div>
        </div>
    </el-row>
</el-col>
define(['jquery', 'bootstrap', 'backend', 'addtabs', 'table', 'echarts', 'echarts-theme', 'template'], function ($, undefined, Backend, Datatable, Table, Echarts, undefined, Template) {
  var Controller = {
	   index: function () {
           const {ref, reactive, onMounted} = Vue
            const {ElMessage} = ElementPlus
            const index = {
             	setup() {
					const state = reactive({
                        money_start_time: '0',//开始时间
                        money_end_time: '0',//结束时间
                        disabledDate(time) {
                            return time.getTime() > Date.now()
                        }
                    })
                    onMounted(() => {
                        getContractMoneyStatistics()//折线图接口
                    })
                    //时间筛选
                    function chooseMoneyTime(val) {
                        if(val){
                            state.money_start_time = val[0]
                            state.money_end_time = val[1]
                        }else{
                            state.money_start_time = ''
                            state.money_end_time = ''
                        }
                        getContractMoneyStatistics()//刷新折线图
                    }
                     // 折线图接口
                    function getContractMoneyStatistics() {
                        $.ajax(`Consoledata/contractMoneyStatistics`, {
                            type: 'POST',
                            data: {
                                'start_time': state.money_start_time,
                                'end_time': state.money_end_time,
                            },
                            success: function (res) {
                                ContractMoneyStatistics(res.data) //签单金额统计折线图
                            }
                        })
                    }
                     // 折线图表
                    function ContractMoneyStatistics(res) {
                        var myChart = Echarts.init(document.getElementById('money_echarts'), 'walden');
                        //自适应兼容
                        window.addEventListener('resize', function () {
                            myChart.resize();
                        })
                        // 指定图表的配置项和数据
                        var option = {
                            tooltip: {
                                trigger: 'axis',
                                backgroundColor: '#6a7985', //背景颜色
                                borderWidth: '0', //边框为0
                                textStyle: {
                                    color: '#fff', //字体颜色
                                },
                                axisPointer: {
                                    type: 'cross',
                                    label: {
                                        backgroundColor: '#6a7985',
                                    },
                                },
                            },
                            legend: {
                                data: ['订单金额', '订单数'],
                                zlevel: 1,
                            },
                            grid: {
                                left: '2%',
                                right: '3%',
                                bottom: '2%',
                                top: '18%',
                                containLabel: true, // 包含刻度文字在内
                            },
                            xAxis: [
                                {
                                    type: 'category',
                                    boundaryGap: true, //坐标轴两端空白策略
                                    splitLine: {
                                        show: false,
                                        lineStyle: {
                                            type: 'dashed'
                                        }
                                    },
                                    axisTick: {
                                        show: false, //隐藏X轴刻度
                                    },
                                    data: res.days,

                                },
                            ],
                            yAxis: [
                                {
                                    name: '',
                                    type: 'value',
                                    axisLabel: {
                                        color: '#666',
                                    },
                                    //name的样式设计
                                    nameTextStyle: {
                                        color: '#333',
                                        // align: 'left',
                                        // left:'2%'
                                    },
                                    splitLine: {
                                        show: true,
                                        lineStyle: {
                                            type: 'dashed'
                                        }
                                    },
                                    axisLine: {
                                        show: false, //隐藏Y轴线
                                    },
                                    axisTick: {
                                        show: false, //隐藏Y轴刻度
                                    },
                                },
                                {
                                    name: '',
                                    type: 'value',
                                    axisLabel: {
                                        color: '#666',
                                    },
                                    //name的样式设计
                                    nameTextStyle: {
                                        color: '#333',
                                        align: 'left',
                                    },
                                    splitLine: {
                                        show: true,
                                        lineStyle: {
                                            type: 'dashed'
                                        }
                                    },
                                    axisLine: {
                                        show: false, //隐藏Y轴线
                                    },
                                    axisTick: {
                                        show: false, //隐藏Y轴刻度
                                    },
                                },
                            ],
                            series: [
                                {
                                    name: '合同总金额',
                                    type: 'line',
                                    areaStyle: {
                                        color: '#3DB2FF',
                                    },
                                    emphasis: {
                                        focus: 'series',
                                    },
                                    data: res.money,
                                    yAxisIndex: 0,
                                    areaStyle: {
                                        color: new Echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                            offset: 0,
                                            color: 'rgba(33,204,255,0.2)' // 渐变起始颜色
                                        }, {
                                            offset: 1,
                                            color: 'rgba(2,193,214,0)' // 渐变结束颜色
                                        }])
                                    }
                                },
                            ],
                        };

                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }
                    //方法暴露出去
					return {
                        state,
                        chooseMoneyTime,
                    }
				}
            }
            createApp('index', index);
	   }
  };
  return Controller;
})

2、饼状图

在这里插入图片描述

 .chartBox {
   margin-bottom: 15px;
   background: #FFFFFF;
   border-radius: 15px;
   padding: 15px;

   .title {
       font-weight: bold;
       font-size: 16px;
       color: #1D2129;
   }

   .card_right {
       height: 350px;
       padding: 20px 0 0;
   }
}
<el-col :xs="24" :lg="12">
	<div class="chartBox">
	   <div class="title">客户等级数量统计</div>
	   <div id="businessNumber_echarts" class="card_right"></div>
	</div>
</el-col>
 //饼状图
function CustomerLevel(res) {
    var myChart = Echarts.init(document.getElementById('businessNumber_echarts'), 'walden');
    window.addEventListener('resize', function () {
        myChart.resize();
    })
    var option = {
        title: {
            text: '总数',
            subtext: res.num + '个',
            left: 'center',
            top: '0',// 调整标题与图表顶部的距离
        },
        tooltip: {
            trigger: 'item'
        },
        legend: {
            orient: 'vertical',//图例竖直排列
            left: 'right',//图例位置在右上角
        },
        grid: {
            top: 150,//图表距离容器上侧的距离
            containLabel: true//是否包含坐标轴的刻度标签
        },
        series: [
            {
                name: '数量',
                type: 'pie',
                radius: '50%',//调整图表的大小
                center: ['50%', '60%'],//调整图表的位置
                data: [],
                emphasis: {
                    itemStyle: {
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
            }
        ]
    };
    // 替换数据
    let numDate = res.level_list.map(item => ({
        value: item.num, // 将num属性重命名为value
        name: item.name // 保留name属性
    }))
    option.series[0].data = numDate
    option && myChart.setOption(option);
}

二、其他

1、修改input框禁用状态的样式

    input:disabled {
        -webkit-text-fill-color: #000000; /* 设置文本填充颜色为黑色 */
        -webkit-opacity: 1; /* 设置透明度为1,‌确保元素完全可见 */
        padding: 0 !important;
    }

    .el-input.is-disabled .el-input__wrapper {
        background-color: #ffffff !important; /* 设置背景颜色为白色 */
    }

    .el-input.is-disabled .el-input__inner {
        -webkit-text-fill-color: #606266 !important;
    }

2、联系电话:只能输入数字

  <el-col :span="6">
     <el-form-item label="联系电话" class="mConentClass">
         <el-input v-model="item.mobile" style="width: 100%" :disabled="item.is_edit" type="tel"
                   oninput="value=value.replace(/[^\d]/g,'')"></el-input>
     </el-form-item>
 </el-col>

3、性别选择

多个参数,自定义参数和回调参数

<el-col :span="6">
	<el-form-item label="性别" class="mConentClass">
	    <el-select v-model="item.sex_text" placeholder="请选择性别"
	               :disabled="item.is_edit" @change="chooseSex(item,$event)">
	        <el-option :label="itemSex.name" :value="itemSex.id"
	                   v-for="(itemSex,indexSex) in  state.sexList"
	                   :key="indexSex"></el-option>
	    </el-select>
	</el-form-item>
</el-col>

不要忘记把方法暴露出去

function chooseSex(item, e) {
    console.log("性别", item, e);
    item.sex = e
}

4、金额的字段限制

只能输入数字,支持小数点输入。

<el-col :span="3">
  <el-form-item label="金额(元)" class="mConentClass">
        <el-input v-model="item.money" :disabled="item.is_edit"
         oninput="value=value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1').replace(/^0+/, '')">
         </el-input>
    </el-form-item>
</el-col>

5、查看下载附件

activity.files是地址

 <el-link type="primary" :href="activity.files" target="_blank"> 查看附件</el-link>

6、暂无记录样式

<el-col v-if="state.list.length==0" style="width: 100%;">
  <div style="width: 100%;display: flex;justify-content: center;">
       <el-empty description="暂无记录" :image-size="100"></el-empty>
   </div>
</el-col>

7、弹框

<el-dialog v-model="state.followPopup" title="添加" width="650" :before-close="closeFollowPopup" :close-on-click-modal="false" :center="true">
<el-form :inline="true" label-position="top" label-width="auto" class="mBaseInfoPar">
     <el-row>
         <el-col>
             <el-form-item label="附件" class="mConentClass">
                 
             </el-form-item>
         </el-col>
     </el-row>
 </el-form>
 <template #footer>
     <div class="dialog-footer">
         <el-button @click="submitFollow">提交</el-button>
     </div>
 </template>
</el-dialog>

8、上传文件

 <el-upload ref="uploadRef" class="upload-demo" :action="state.uploadUrl" :auto-upload="true"
           accept=".xlsx,.xls,.pdf,.doc,.docx,.ppt" @success="uploadSuccess">
    <el-button type="primary">点击上传</el-button>
</el-upload>
setup() {
    const uploadRef = ref()
    const state = reactive({
     	uploadUrl: "/GIY5GPUbtIv0qrQgoLT.php/ajax/upload",
    	url: '',//文件上传地址
	})
	function submitFollow() {
      $.ajax(`facrm/customer/Contacts/addRrecordLog`, {
          type: 'POST',
          data: {
              'customer_id': state.id,
              'content': state.content,
              'record_type': state.record_type,
              'next_time': state.next_time,
              'url': state.url,
          },
          success: function (res) {
              if (res.code == 1) {
                  ElMessage.success(res.msg)
                  state.followPopup = false
                  state.content = ''
                  state.record_type = ''
                  state.next_time = ''
                  state.url = ''
                  uploadRef.value.clearFiles()//清除上传文件列表
                  getGenJinData()//刷新记录
              } else {

              }
          }
      })
  }

  // 追踪记录上传文件
  function uploadSuccess(e) {
      console.log(e)
      state.url = e.data.url
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Axure教程】拖拉拽编辑页面

低代码开发平台通常提供拖拉拽编辑页面的功能&#xff0c;使用户无需编写大量代码即可创建复杂的应用程序和页面。这种平台的特点是通过图形用户界面来进行开发&#xff0c;用户可以拖拽组件到画布上进行布局和配置。 那今天作者就教大家在Axure里怎么制作拖拉拽动态编辑页面的…

01 LVS负载均衡群集

1.1 LVS群集应用基础 群集的称呼来自于英文单词“Cluster"&#xff0c;表示一群、一串的意思&#xff0c;用在服务器领域则表示大量服务器的集合体&#xff0c;以区分于单个服务器。 1.1.1 群集技术概述 LVS&#xff08;Linux Virtual Server&#xff09;是Linux虚拟服…

linux下的线程

概念理解 linux下没有线程的概念&#xff0c;只有轻量级进程的概念&#xff0c; 有接口&#xff1a;clone() 是clone&#xff08;&#xff09;调用&#xff0c;在库中创建栈 源码解析 int clone(int (*fn)(void *), void *child_stack,int flags, void *arg, .../* pid_t *p…

【Spring】详细了解静态代理和动态代理的使用

目录 1.代理模式介绍 2. 静态代理 3.动态代理 3.1 JDK动态代理 3.2 CGLIB动态代理 4. 动态代理和静态代理的区别 1.代理模式介绍 代理模式分为动态代理和静态代理&#xff0c;目的是在不直接暴露真实对象的情况下&#xff0c;通过代理对象来间接访问真实对象&#xff0c;从…

【设计模式】设计模式之观察者模式

文章目录 观察者模式什么是观察者模式引入组成UML图代码实现1. 定义观察者接口2. 定义主题接口3. 实现具体观察者4. 实现具体被观察者5.测试 应用场景优点缺点 观察者模式 什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种设计模式 它定义了一种…

vLLMcuda安装笔记

1. 引言 最近在部署Qwen模型时&#xff0c;文档上有提到强烈建议用vLLM来部署模型&#xff0c;按照公开的性能测试数据&#xff0c;用vLLM部署Qwen模型的文本推理速度要比transformers部署快3~4倍。带着这个好奇就开始安装尝试&#xff0c;但试下来这个安装过程并没有那么顺利…

最新个人免签约支付系统源码|PHP源码 | 码支付系统 | ThinkPHP6框架 | 开源

源码介绍&#xff1a; 这个最新的个人专用免签约支付系统源码&#xff01;是PHP源码写的哦&#xff0c;而且是用ThinkPHP6框架开发的&#xff0c;完全开源的码支付系统。 这个系统适合个人用户使用&#xff0c;作为收款的免签约解决方案。它还加入了监控端&#xff0c;可以拒…

Linux 调试追踪: trace-cmd 和 kernelshark

文章目录 1. 前言2. 概述3. trace-cmd3.1 下载3.2 交叉编译3.3 安装、运行3.3.1 trace-cmd 示范&#xff1a;抓取系统调度信息 4. kernelshark5. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承…

Java多线程-----定时器(Timer)及其实现

目录 一.定时器简介&#xff1a; 二.定时器的构造方法与常见方法&#xff1a; 三.定时器的模拟实现&#xff1a; 思路分析&#xff1a; 代码实现&#xff1a; 在开发中&#xff0c;我们经常需要一些周期性的操作&#xff0c;例如每隔几分钟就进行某一项操作&#xff0c;这…

【QT】常用控件-上

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 目录 &#x1f449;&#x1f3fb;QWidgetenabledgeometryrect制作上下左右按钮 window frame 的影响window titlewindowIcon代码示例: 通过 qrc 管理图片作为图标 windowOpacitycursor使用qrc自…

Python | Leetcode Python题解之第309题买卖股票的最佳时机含冷冻期

题目&#xff1a; 题解&#xff1a; class Solution:def maxProfit(self, prices: List[int]) -> int:if not prices:return 0n len(prices)f0, f1, f2 -prices[0], 0, 0for i in range(1, n):newf0 max(f0, f2 - prices[i])newf1 f0 prices[i]newf2 max(f1, f2)f0, …

【笔记】《冲击弹性波理论与应用》[2-2] 振动信号分析

1.前级硬件滤波 - 降噪 2.软件降噪 2.1 移动平滑滤波 2.1.1 移动平滑滤波的效果 2.2 经验模态分解法 2.1.1 效果 3 信号分析 除了FFT,最大熵和小波变换现在也很流行。 3.1 最大熵 3.1.1 与FFT的比对 3.2 相关性分析 3.2.1 自相关 3.2.2 互相关 3.3. 小波 非等周期信号 3…

《python语言程序设计》2018第6章第28题 掷骰子 两个色子,分别是1到6

2、3、12 玩家输 7、11玩家赢 4、5、6、8、9、10算1点&#xff0c;之后出7玩家输或者和上一次相同。def rolled(num_t):count 0still_win 0second_win 0still_lose 0second_lose 0while count < num_t:a_1 random.randint(1, 6)b_1 random.randint(1, 6)tTen a_1 b…

力扣-41.缺失的第一个正数

刷力扣热题–第二十五天:41.缺失的第一个正数 新手第二十五天 奋战敲代码&#xff0c;持之以恒&#xff0c;见证成长 1.题目简介 2.题目解答 做这道题有点投机取巧的感觉&#xff0c;要求时间复杂度O(N),且空间复杂度O(1)&#xff0c;那么就是尽可能的去找到更多的可能性&…

C语言程序设计之数组1

程序设计之数组1 问题1_1代码1_1结果1_1 问题1_2代码1_2结果1_2 问题1_3代码1_3结果1_3 问题1_4代码1_4结果1_4 问题1_5代码1_5结果1_5 问题1_1 函数 f u n fun fun 的功能是&#xff1a;移动一位数组中的内容&#xff0c;若数组中有 n n n 个整数&#xff0c;要求把下标从 …

软件测试生命周期、BUG描述与处理策略

软件测试的生命周期 需求分析&#xff1a;需求是否完整、是否正确 测试计划&#xff1a;确定由谁测试、测试的起止时间、设计哪些模块 测试设计、测试开发&#xff1a;写测试用例&#xff08;手工、自动化测试用例&#xff09;、编写测试工具 执行测试用例 测试评估&…

衢州骨伤科医院为98岁高龄老人做髋关节置换,患者第三天便下地行走

灵活迈步、周身整洁、双手提着两口袋鸡蛋......在清晨的菜市场里&#xff0c;王阿婆&#xff08;化名&#xff09;在人群里穿梭&#xff0c;买一些自己和女儿想吃的菜。如果没有看到她的脸&#xff0c;大家都以为她只有 60 多岁&#xff1b;再定睛一看&#xff0c;她虽然脸上布…

Token的原理及区别,以及与Cookie,Session之间的区别?

Token&#xff0c;特别是JSON Web Token&#xff08;JWT&#xff09;&#xff0c;也是一种用于管理用户状态和身份的机制&#xff0c;但它与Cookie和Session的工作方式有所不同。下面将详细解释Token如何管理用户状态和身份。 Token的工作原理 Token是一种无状态的认证机制&am…

QQ邮箱 + Kafka + Redis + Thymeleaf 模板引擎实现简单的用户注册认证

1. 前提条件 1.1 Redis 1.1.1 拉取 Redis 镜像 docker pull redis:latest 1.1.2 启动 Redis 容器 docker run --name my-redis -d -p 6379:6379 redis:latest1.2 Kafka 1.2.1 docker-compose.yml version: 3.8 services:zookeeper:image: "zookeeper:latest"h…

【C++入门(上)】—— 我与C++的不解之缘(一)

前言&#xff1a; 学完C语言和初阶数据结构&#xff0c;感觉自己又行了&#xff1f; 接下来进入C的学习&#xff0c;准备好接受头脑风暴吧。 一、第一个C程序 C 的第一个程序&#xff0c;梦回出学C语言&#xff0c;第一次使用C语言写代码&#xff1b;这里使用C写第一个C代码。 …