Vue语法--完成购物车案例

news2024/11/27 17:39:43

一、模版语法

1.1 插值

  Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom,结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。


html模板语法: 这是一种基于字符串的模板技术,以字符串和数据为输入,通过用正则表达式将占位符替换为所需数据的方式,构建出完整的 HTML 字符串。

1.1.1 文本

        直接使用{{xxx}}的形式,标签将会被替换成为数据对象(data)上xxx属性值,当绑定的数据对象上的xxx属性值发生变化时,插值处的值也会发生变化(双向绑定

<div id="app">
       {{msg}}
</div>

1.1.2 html解析

如果要输出html格式的数据,需要使用v-html指令。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>html解析</title>
		<!-- 1.导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
	</head>
	<body>
		<!-- 2.定义边界 -->
		<div id="app">
			<div v-html="htmlstr"></div>
		</div>
		<!-- 3.构建vue实例并绑定边界 -->
		<script>
			new Vue({
				el: "#app",
				data() {
					return {
						htmlstr: '<h3 style="color:red;">这是一个html片段</h3>'
					}
				}
			})
		</script>
	</body>
</html>

 

1.1.3 属性

HTML属性中的值应使用v-bind指令。类型与jQuery中的$("#xxx").attr(Name,Val)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>html解析</title>
		<!-- 1.导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
		<style>
			.red{
				font-size: 30px;
				color: red;
			}
		</style>
	</head>
	<body>
		<!-- 2.定义边界 -->
		<div id="app">
			<p v-bind:class="hontColor">哈哈</p>
		</div>
		<!-- 3.构建vue实例并绑定边界 -->
		<script>
			new Vue({
				el: "#app",
				data() {
					return {
						hontColor:"red"
					}
				}
			})
		</script>
	</body>
</html>

 

1.1.4 表达式

 Vue提供了完全的JavaScript表达式支持:

  • {{str.substr(0,3)}}
  • {{ number + 1 }}
  • {{ ok ? 'YES' : 'NO' }}
  • <li v-bind:id="'list-' + id">我的Id是js动态生成的</li>

这些就不一一演示了,大家自己去玩

1.2.3 动态参数

注意:在动态参数中,作为参数的变量名(如:attrname)要全部小写,否则无效 !!

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>动态参数</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>动态参数</p>
			<input v-model="evname" />
			<button v-on:[evname]="handle">动态参数</button>
		</div>
	</body>
	<script type="text/javascript">
		new Vue({
			el: '#app',
			data() {
				return {
					evname:'dblclick'
			    }
            },
			    methods: {
				    handle() {
				    	alert("触发事件");
				    }
			    }
		    })
	</script>
</html>

Vue为v-bind和v-on这两个最常用的指令,提供了特定简写 

指令简写示例
v-bind:xxx:xxxv-bind:href 简写为 :href
v-on:xxx@xxx

v-on:click 简写为 @click

二、过滤器

        vue允许自定义过滤器,一般用于常见的文本格式化,过滤器可用的两个地方:双花括号插值v-bind表达式,过滤器应该被添加在js表达式的尾部,使用管道运算符 " | "

2.1 局部过滤器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>过滤器</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
            {{msg}}<br />
			{{msg|single}}<br />
			{{msg|param(9,10)}}
		</div>
		<script type="text/javascript">
			// 绑定边界	ES6具体体现
			new Vue({
				el: '#app',
				data() {
					return {
						msg: "bui快离开~bu坤快离开~"
					};
				},
				filters: {
					'single': function(val) {
						return val.substring(2, 3);
					},
					'param': function(val, start, end) {
						return val.substring(start, end);
					}
				}
			})
		</script>
	</body>
</html>

2.2 全局过滤器

时间转换案例: 

//给Date类添加了一个新的实例方法format
Date.prototype.format = function (fmt) {
	//debugger;
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};
 
function fmtDate(date, pattern) {
	var ts = date.getTime();
    var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");
    if (pattern) {
        d = new Date(ts).format(pattern);
    }
    return d.toLocaleString();
};

拷入date.js(日期格式化)放入项目js目录中,在页面中引入。
定义全局过滤器 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>过滤器</title>
		<script src="data.js"></script>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>{{date | fmtDate}}</p>
			无过滤器:<br />
			{{date}}
		</div>
		<script type="text/javascript">
			// 全局过滤器
			Vue.filter('fmtDate', function(value) {
				return fmtDate(value, 'yyyy年MM月dd日')
			});
			// 绑定边界	ES6具体体现
			new Vue({
				el: '#app',
				data() {
					return {
						date: new Date()
					};
				}
			})
		</script>
	</body>
</html>

三、监听器

监听属性 watch,我们可以通过 watch 来响应数据的变化
   

语法:watch:{}

示例: 米和厘米的单位换算

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>计算属性</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>监听属性</p>
			米:<input v-model="m" />
			厘米:<input v-model="cm" />
		</div>
	</body>
	<script type="text/javascript">
		// 绑定边界	ES6具体体现
		new Vue({
			el: '#app',
			data() {
				return {
					m: 2,
					cm: 200
				};
			},
			watch: {
				
				m: function(v) {
					this.cm = parseInt(v) * 100;
				},
			
				cm: function(v) {
					this.m = parseInt(v) / 100;
				}
			}
		})
	</script>
</html>

四、完整购物车案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ShopCar</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-/mhDoLbDldZc3qpsJHpLogda//BVZbgYuw6kof4u2FrCedxOtgRZDTHgHUhOCVim"
        crossorigin="anonymous"></script>
</head>

<body>

    <h1 style="text-align: center;">东天帝商城</h1>
    <hr>
    <br>
    <br>

    <table id="ShopCarTable" class="table table-light" style="border-radius: 50%; width: 80%; margin: auto;">
        <tr class="table-info">
            <td>
                <!-- 全选框 -->
                <input type="checkbox" v-model="checkAllStatus" @change="toggleCheckAll">
            </td>
            <td>商品名称</td>
            <td>商品价格</td>
            <td>商品数量</td>
            <td>商品总价</td>
        </tr>

        <!-- 循环渲染商品列表 -->
        <tr v-for="(good, index) in goods" :key="index">
            <td>
                <!-- 商品选择框 -->
                <input type="checkbox" v-model="good.isChecked" @change="update">
            </td>
            <td>{{ good.name }}</td>
            <td>{{ good.price }}</td>
            <td>
                <!-- 商品数量输入框 -->
                <input type="number" v-model="good.number" @input="sum">
            </td>
            <td>{{ good.number * good.price }}</td>
        </tr>
        <tr>
            <td colspan="5" style="text-align: right;">
                <!-- 总价 -->
                总价:{{ totalPrice }}
            </td>
        </tr>
    </table>

    <script>
        new Vue({
            el: "#ShopCarTable",
            data() {
                return {
                    goods: [
                        { name: '皮带', price: 10, isChecked: false, number: 1 }, // 商品对象,包含名称、价格、选中状态和数量
                        { name: '皮鞭', price: 20, isChecked: false, number: 1 },
                        { name: '皮椅', price: 30, isChecked: false, number: 1 }
                    ],
                    checkAllStatus: false, // 全选状态,默认为未选中
                    totalPrice: 0 // 总价,默认为0
                }
            },
            methods: {
                toggleCheckAll() {
                    // 切换全选状态以及更新商品列表中每个商品的选中状态
                    this.goods.forEach(item => {
                        item.isChecked = this.checkAllStatus;
                    });
                    this.sum(); // 更新总价
                },
                update() {
                    // 更新全选状态
                    //  every方法会遍历goods数组中的每个元素,对于每个元素,会执行回调函数。回调函数中的item表示当前遍历到的元素。如果所有元素都满足回调函数中的条件,即item.isChecked为true,则every方法的返回值为true,否则返回值为false。
                    // 这里的目的是检查是否所有的商品都被选中(isChecked为true),如果是,则将checkAllStatus设置为true,表示全选选中;否则,将其设置为false,表示全选未选中。

                    this.checkAllStatus = this.goods.every(item => item.isChecked);
                    // 接下来,调用sum方法来更新总价:
                    this.sum(); // 更新总价
                },
                sum() {
                    // 计算总价
                    //reduce方法接受两个参数,一个是回调函数,另一个是初始值。回调函数中的第一个参数 total 是累加器,表示当前的累加结果,初始值为0。第二个参数 item 是遍历时的当前元素。
                    // 在每次遍历时,如果当前商品 item 被选中(isChecked 为 true),则将当前商品的价格 price 乘以数量 number,然后加到累加器 total 中。如果当前商品未被选中,则直接返回累加器 total,继续下一次遍历。
                    // 最后,reduce方法返回最终的累加结果,即所有选中商品的总价,并将其赋值给 this.totalPrice 属性。
                    this.totalPrice = this.goods.reduce((total, item) => {
                        if (item.isChecked) {
                            return total + item.price * item.number; // 若商品被选中,则计算该商品的总价并加入总价中
                        } else {
                            return total;
                        }
                    }, 0);
                }
            }
        });
    </script>

</body>

</html>

 

五、计算属性--简易购物车(无复选框)

   计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新。

使用场景:当一个属性需要复杂的逻辑运算之后才能获取其值,可以使用计算属性,在一个计算属性中可以完成各种复杂的逻辑,包括运算,方法调用等,只要最终返回一个结果就可以了


语法:computed:{}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ShopCar</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/mhDoLbDldZc3qpsJHpLogda//BVZbgYuw6kof4u2FrCedxOtgRZDTHgHUhOCVim" crossorigin="anonymous"></script>
   
    

</head>
<body>
    
<h1 style="text-align: center;">东天帝商城</h1>
    <hr>
<br>
<br>


<table id="ShopCar" class="table table-light" style="border-radius: 50%; width: 80%;  margin: auto;"   >

    <tr class="table-info">
        
        <td>商品名称</td>
        <td>商品价格</td>
        <td>商品数量</td>
        <td>商品总价</td>

    </tr>

<tr>
    <td>男人得装</td>
    <td>{{man}}</td>
    <td> &nbsp;<input type="number" v-model="man2">&nbsp;</td>
    <td>{{man1}}</td>
</tr>
<tr>
    <td>和天下</td>
    <td>{{smoke}}</td>
    <td> &nbsp;<input type="number" v-model="smoke2">&nbsp;</td>
    <td>{{smoke1}}</td>
</tr>
<tr>
    <td>奥特曼变身手环</td>
    <td>{{Ultraman}}</td>
    <td> &nbsp;<input type="number" v-model="Ultraman2">&nbsp;</td>
    <td>{{Ultraman1}}</td>
</tr>
<tr>
   <td colspan="3" style="text-align: right;">总价:</td>
    <td>{{sum}}</td>
</tr>
    
</table>


<script>
new Vue({
    // 挂载组件
    el:"#ShopCar",
    // 回显数据
    data(){
        return {
            man:79,
            smoke:100,
            Ultraman:10000,
            man2:1,
            smoke2:1,
            Ultraman2:1
        }
    },
    // 计算函数
    computed:{
        man1(){
            return this.man * this.man2
        },
        smoke1(){
            return this.smoke * this.smoke2
        },
        Ultraman1(){
            return this.Ultraman * this.Ultraman2
        },
        sum(){
            return this.man1+this.smoke1+this.Ultraman1
        }
    }

})



</script>



</body>
</html>

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

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

相关文章

9.19数电——触发器状态机第四周作业题解计数器(部分)

触发器 RS 1.输出置0 2.置1 3.输出保持不变 S&#xff1a;是置位信号&#xff0c;为1时说要置为1&#xff1b;为0时要置为0&#xff1b; R&#xff1a;是复位信号&#xff0c;为1时就要无条件置为0&#xff0c;为0时保持寄存器原状态 如果要置为0&#xff0c;必要条件…

Putty连接服务器

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

027-从零搭建微服务-搜索服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

华清远见第六课程day10作业

保纯 //保存按钮对应的槽函数 void Widget::on_saveBtn_clicked() {QString fileName QFileDialog::getSaveFileName(this, "保存文件", "./", "All(*.*);;Images (*.png *.xpm *.jpg);;Text files(*.txt);;XML …

PyG-GCN-Cora(在Cora数据集上应用GCN做节点分类)

文章目录 model.pymain.py参数设置注意事项运行图 model.py import torch.nn as nn from torch_geometric.nn import GCNConv import torch.nn.functional as F class gcn_cls(nn.Module):def __init__(self,in_dim,hid_dim,out_dim,dropout_size0.5):super(gcn_cls,self).__i…

【PyTorch 攻略】(6-7/7)

一、说明 本篇介绍模型模型的参数&#xff0c;模型推理和使用&#xff0c;保存加载。 二、训练参数和模型 在本单元中&#xff0c;我们将了解如何加载模型及其持久参数状态和推理模型预测。为了加载模型&#xff0c;我们将定义模型类&#xff0c;其中包含用于训练模型的神经网…

CockroachDB集群部署

CockroachDB集群部署 1、CockroachDB简介 CockroachDB(有时简称为CRDB)是一个免费的、开源的分布式 SQL 数据库&#xff0c;它建立在一个事务性和强一致性的键 值存储之上。它由 PebbleDB(一个受 RocksDB/leveldb 启发的 K/B 存储库)支持&#xff0c;并使用 Raft 分布式共识…

利用Java EE相关技术实现一个简单的Web聊天室系统

利用Java EE相关技术实现一个简单的Web聊天室系统 &#xff08;1&#xff09;编写一个登录页面&#xff0c;登录信息中有用户名和密码&#xff0c;分别用两个按钮来提交和重置登录信息。 &#xff08;2&#xff09;通过请求指派来处理用户提交的登录信息&#xff0c;如果用户名…

基于YOLOv8模型的烟火目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的烟火目标检测系统可用于日常生活中检测与定位烟火目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

linux中的开发工具

在刚开始使用linux的时候&#xff0c;我们需要在系统上写一些简单的代码&#xff0c;来熟悉环境以及各种指令 并且熟悉属于linux的一套开发的环境&#xff0c;而这对于c来说需要三个软件就可以进行简单的编码 和使用&#xff0c;让我们来认识一下下列工具&#xff0c;以及工具的…

【Java 基础篇】Java字符打印流详解:文本数据的输出利器

在Java编程中&#xff0c;我们经常需要将数据输出到文件或其他输出源中。Java提供了多种输出流来帮助我们完成这项任务&#xff0c;其中字符打印流是一个非常有用的工具。本文将详细介绍Java字符打印流的用法&#xff0c;以及如何在实际编程中充分利用它。 什么是字符打印流&a…

电脑丢失d3dcompiler47.dll怎么办,这个四个修复方法都可以解决

d3dcompiler_47.dll 是一个与 DirectX 相关的动态链接库文件&#xff0c;它包含了 DirectX 编译器的一些函数和类&#xff0c;对于许多应用程序和游戏来说都是必需的。如果您的系统中缺失了这个文件&#xff0c;可能会导致程序无法正常运行。下面我们将介绍四个修复 d3dcompile…

(图论) 1020. 飞地的数量 ——【Leetcode每日一题】

❓ 1020. 飞地的数量 难度&#xff1a;中等 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个 海洋单元格、1 表示一个 陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 grid 的边…

vant 组件库的基本使用

文章目录 vant组件库1、什么是组件库2、vant组件 全部导入 和 按需导入的区别3、全部导入的使用步骤&#xff1a;4、按需导入的使用步骤&#xff1a;5、封装vant文件包 vant组件库 该项目将使用到vant-ui组件库&#xff0c;这里的目标就是认识他&#xff0c;铺垫知识 1、什么…

PyG-GAT-Cora(在Cora数据集上应用GAT做节点分类)

文章目录 model.pymain.py参数设置运行图 model.py import torch.nn as nn from torch_geometric.nn import GATConv import torch.nn.functional as F class gat_cls(nn.Module):def __init__(self,in_dim,hid_dim,out_dim,dropout_size0.5):super(gat_cls,self).__init__()s…

安达发APS|国货品牌崛起,制造业迎来智能排产新机遇

随着国货品牌的不断崛起&#xff0c;制造业的生产也面临着巨大的挑战。为应对这一挑战&#xff0c;越来越多的企业开始引入APS智能排产技术&#xff0c;以优化生产线布局、提升设备利用率、缩短生产周期、减少生产成本&#xff0c;从而增强市场竞争力。本文将为您详细解读APS智…

数据结构-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)

目录 前言 栈 1.定义 2.栈的特点 3.栈的储存方式 3.1数组栈 3.2链栈 4.栈的基本操作&#xff08;C语言&#xff09; 4.1初始化 4.2判断是否满栈 4.3判断空栈 4.4 入栈 4.5 出栈 4.6获取栈顶元素 4.7遍历栈 4.8清空栈 完整代码示例 前言 大家好呀&#xff01;今天我…

登录业务实现

登录业务实现&#xff1a; 登录成功/失败实现 -> pinia管理用户数据及数据持久化 -> 不同登录状态的模板适配 -> 请求拦截器携带token -> 退出登录实现 -> token失效&#xff08;401响应拦截&#xff09; 1. 登录成功/失败实现 当表单校验通过时&a…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署odoo开源ERP平台

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署odoo开源ERP平台 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例使用场景1.3 云耀云服务器L实例特点 二、odoo介绍2.1 odoo简介2.2 odoo特点 三、本次实践介绍3.1 本次实践简介3.2 本…

解决Java应用程序中的SQLException:服务器时区值未识别问题;MySQL连接问题:服务器时区值 ‘Öйú±ê׼ʱ¼ä‘ 未被识别的解决方法

目录 ​编辑 问题背景 解决方案 问题背景 今天遇见一个这个问题&#xff0c;解决后发出来分享一下&#xff1a; java.sql.SQLException: The server time zone value is unrecognized or represents more than one time zone. You must configure either the server or J…