<template> <div style="padding: 40px"> <div class="mt-4"> <div class="title_style">任务数据</div> <div class="flex" style="margin-top: 8px"> <div class="task_style"> <div style="margin-left: 16px"> <div>实验总计</div> <div style="font-size: 30px">1</div> </div> </div> <div class="task_style" style="margin-left: 16px"> <div style="margin-left: 16px"> <div>实验最长耗时</div> <div><span style="font-size: 30px">0</span><span>小时</span></div> </div> </div> </div> </div> <div class="mt-4"> <div class="title_style">提交实验</div> <!-- <Bar :chartData="barData" :option="{ title: { text: '', textStyle: { fontWeight: 'lighter' } } }" height="40vh" /> --> <div class="box" ref="chartDom"></div> </div> </div> </template> <script lang="ts" setup> import { ref, onMounted } from 'vue'; import * as echarts from 'echarts'; onMounted(() => {
时间: 2025-05-20 15:45:09 浏览: 30
### Vue 3 中使用 TypeScript 集成 ECharts 并渲染图表
以下是实现 Vue 3 和 TypeScript 集成 ECharts 的完整示例:
#### 安装依赖
首先需要安装 `echarts` 包:
```bash
npm install echarts
```
#### 示例代码
以下是一个完整的 Vue 3 + TypeScript 使用 ECharts 渲染折线图的示例[^1]。
```vue
<template>
<div class="container">
<!-- 图表容器 -->
<div ref="chartRef" style="width: 100%; height: 400px;"></div>
</div>
</template>
<script setup lang="ts">
import * as echarts from 'echarts';
import { onMounted, ref } from 'vue';
// 创建一个响应式的 DOM 引用
const chartRef = ref<HTMLDivElement | null>(null);
onMounted(() => {
if (chartRef.value) {
// 初始化 ECharts 实例
const chartInstance = echarts.init(chartRef.value);
// 设置图表配置项
const option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'line',
smooth: true,
label: {
show: true,
position: 'top'
}
}
]
};
// 将配置项应用到实例中
chartInstance.setOption(option);
}
});
</script>
<style scoped>
.container {
display: flex;
justify-content: center;
}
</style>
```
---
#### 关键点解析
1. **模板部分**
- 使用 `<div>` 元素作为图表容器,并通过 `ref` 属性绑定其引用以便后续操作。
2. **脚本部分**
- 导入 `echarts` 库以及 Vue 提供的生命周期钩子函数 `onMounted`。
- 利用 `ref` 获取 DOM 节点,确保在组件挂载完成后初始化 ECharts 实例。
- 构建图表所需的 `option` 数据结构,并调用 `setOption` 方法完成图表绘制[^1]。
3. **样式部分**
- 确保图表容器具有固定的宽高,否则无法正常显示图表。
---
#### 注意事项
- 如果项目中有多个图表,则需为每个图表单独创建对应的 DOM 容器并初始化独立的 ECharts 实例。
- 对于动态更新的数据场景,可以通过监听数据变化重新调用 `setOption` 或者利用 `merge` 参数优化性能[^3]。
---
###
阅读全文
相关推荐




<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.bg-f4f6f7 {
background-color: #f4f6f7;
}
</style>
</head>
<body>
Æon
管理员
首页
用户管理
封禁/解除用户
用户列表
用户行为记录
歌手管理
封禁/解封歌手
歌手歌曲
歌曲内容管理
歌曲收藏
评论管理
歌曲信息
歌单管理
社区管理
帖子审核
帖子发布
举报处理
数据分析
播放量分析
用户分析
管理员管理
系统管理
<template id="homeTpl" class="">
首页
用户数量
新增用户数{{usernum}}
总用户数{{totalusernum}}
歌手数量
总歌手数{{singernum}}
代办事项
无
快捷入口
用户
用户
用户
用户
用户
用户
用户
用户
访问统计
</template>
<template id="usersTpl">
首页->用户
用户名:
<input placeholder="查询内容" class="pt-2 pb-2 rounded" />
查询
新增
删除
选择
索引
用户名
头像
性别
账号
操作
</template>
<template id="singerTpl">
首页->歌手
歌手/歌曲:
<input placeholder="查询内容" class="pt-2 pb-2 rounded" />
查询
新增
删除
<input type="checkbox" id="selectAll" class="checkbox">
索引
歌手
照片
性别
歌曲
操作
加载中...
</template>
<template id="gedanTpl">
首页->歌单
歌单:
<input placeholder="查询内容" class="pt-2 pb-2 rounded" />
查询
新增
删除
索引
歌曲名称
海报
歌曲分类
歌手
视频
操作
加载中...
</template>
<template id="shequTpl">
首页->社区
歌单:
<input placeholder="查询内容" class="pt-2 pb-2 rounded" />
查询
新增
删除
<input type="checkbox" id="selectAll">
编号
帖子标题
发布人
发布时间
更新时间
审核时间
状态
操作
加载中...
</template>
<template id="shujuTpl">
播放量
平台总播放量分析
歌手播放量
当前趋势分析
</template>
<template id="guanliTpl">
管理员管理
管理员
</template>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script src="js/cebianlan.js"></script>
</body>
</html>在js中新增20条用户数据,能够进行增删设置,搜索设置

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>入库模块</title> <style> body { background-color: #f8f9fa; font-family: Arial, sans-serif; } .container { max-width: 1000px; min-height: 600px; /* 可根据需求调整这个值来改变整体框的最小高度 */ } .header { margin: 20px 0; color: #343a40; font-weight: bold; } .form-group { margin-bottom: 1.5rem; /* 增加表单组之间的间距 */ } .list-group-item { display: grid; grid-template-columns: repeat(3, 1fr); justify-content: space-between; align-items: center; width: 100%; padding: 5px 10px; border: 1px solid #dee2e6; border-radius: 5px; box-sizing: border-box; } .list-group-item span { text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card { border: none; border-radius: 10px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); padding: 20px; background-color: #ffffff; } .btn-primary { background-color: #007bff; border: none; width: 200px; /* 设置按钮宽度为 50 像素 */ } .btn-primary:hover { background-color: #0056b3; } footer { margin-top: 20px; padding: 10px 0; background-color: #343a40; color: white; border-radius: 0 0 15px 15px; } /* 为查询按钮添加左外边距 */ .btn-query { margin-left: 100px; } /* 新增的按钮容器样式 */ .button-container { text-align: center; } /* 新增的样式,设置入库编号文本框的尺寸 */ .small-input { width: 150px; /* 你可以根据需要调整宽度 */ } /* 新增样式,使入库编号输入框在同一行显示 */ .id-inputs { display: flex; flex-wrap: wrap; align-items: center; } .id-inputs label { margin-right: 5px; } .id-row { display: flex; flex-wrap: wrap; align-items: center; width: 100%; } </style> </head> <body> 金铜线入库模块 <form method="POST"> <label for="item">整半卷类型</label> <select class="form-control" id="category" name="category" required> <option value="" disabled selected>请选择入库类型</option> <option value="整卷">整卷</option> <option value="半卷">半卷</option> {% if category %} <option value="{{ category }}" selected>{{ category }}</option> {% endif %} </select> <label for="item">入库型号</label> <select class="form-control" id="type" name="item" required> <option value="" disabled selected>请选择物品编号</option> <option value="70694">70694 - AU</option> <option value="70704">70704 - AU</option> <option value="70774">70774 - AU</option> <option value="70794">70794 - CU</option> <option value="70804">70708 - CU</option> <option value="70784">7058779 - CU</option> </select> <label for="batchNumber">入库批号</label> <input type="text" class="form-control" id="batchNumber" name="batchNumber" required> <label for="ID1">编号#1</label> <input type="text" class="form-control small-input" id="ID1" name="ID1"> <label for="ID2">编号#2</label> <input type="text" class="form-control small-input" id="ID2" name="ID2"> <label for="ID3">编号#3</label> <input type="text" class="form-control small-input" id="ID3" name="ID3"> <label for="ID4">编号#4</label> <input type="text" class="form-control small-input" id="ID4" name="ID4"> <label for="ID5">编号#5</label> <input type="text" class="form-control small-input" id="ID5" name="ID5"> <label for="ID6">编号#6</label> <input type="text" class="form-control small-input" id="ID6" name="ID6"> <label for="ID7">编号#7</label> <input type="text" class="form-control small-input" id="ID7" name="ID7"> <label for="ID8">编号#8</label> <input type="text" class="form-control small-input" id="ID8" name="ID8"> <label for="ID9">编号#9</label> <input type="text" class="form-control small-input" id="ID9" name="ID9"> <label for="ID10">编号#10</label> <input type="text" class="form-control small-input" id="ID10" name="ID10"> <label for="ID11">编号#11</label> <input type="text" class="form-control small-input" id="ID11" name="ID11"> <label for="ID12">编号#12</label> <input type="text" class="form-control small-input" id="ID12" name="ID12"> <label for="quantity">入库数量</label> <input type="number" class="form-control" id="quantity" name="quantity" value="1" required> <label for="date">入库日期</label> <input type="datetime-local" class="form-control" id="date" name="date" required value="{{ date }}"> <label for="shift">入库班次</label> <select class="form-control" id="shift" name="shift" required> <option value="" disabled selected>请选择班次</option> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> {% if shift %} <option value="{{ shift }}" selected>{{ shift }}</option> {% endif %} </select> <label for="barge">员工工号</label> <input type="text" class="form-control small-input" id="barge" name="barge" required value="{{ username }}"> <button type="submit" class="btn btn-primary">入库</button> <button type="button" class="btn btn-primary btn-query" id="queryButton">查询</button> </form> 当前库存 入库类型 在库型号 在库数量 {% for data in inventory_data %} {{ data.category }} {{ data.item }} {{ data.quantity }} {% endfor %} 返回首页 <script> function submitForm(event) { event.preventDefault(); // 阻止表单默认提交行为 // 获取表单数据 const data = { category: document.getElementById('category').value, type: document.getElementById('type').value, batchNumber: document.getElementById('batchNumber').value, ID1: document.getElementById('ID1').value, ID2: document.getElementById('ID2').value, ID3: document.getElementById('ID3').value, ID4: document.getElementById('ID4').value, ID5: document.getElementById('ID5').value, ID6: document.getElementById('ID6').value, ID7: document.getElementById('ID7').value, ID8: document.getElementById('ID8').value, ID9: document.getElementById('ID9').value, ID10: document.getElementById('ID10').value, ID11: document.getElementById('ID11').value, ID12: document.getElementById('ID12').value, quantity: document.getElementById('quantity').value, date: document.getElementById('date').value, shift: document.getElementById('shift').value, barge: document.getElementById('barge').value }; console.log(data) fetch('/into_storage', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => response.json()) .then(result => { alert(result.message); // 简单提示结果 if (result.status === 'success') { // 重置表单(可选) document.getElementById('batchNumber').value = ''; for(let i=1; i<=12; i++) { document.getElementById(ID${i}).value = ''; } } }) .catch(error => alert('网络错误: ' + error)); } // 绑定表单提交事件 document.querySelector('form').addEventListener('submit', submitForm); </script> </body> </html> 帮忙优化一下修改,要求绑定入库按钮id来触发传输数据到后端flask框架,使用fetch交互,其它按钮先不用管













