Django-Vue 学习-VUE
主组件中有多个Vue组件
是指在Vue.js框架中,主组件是一个父组件,它包含了多个子组件(Vue组件)。这种组件嵌套的方式可以用于构建复杂的前端应用程序,通过拆分功能和视图,使代码更加模块化、可复用和易于维护。
Vue组件是Vue.js框架的核心概念之一,它是一个自定义的可重用的元素,包含了HTML模板、CSS样式和JavaScript逻辑。每个Vue组件可以有自己的状态(data)、计算属性(computed)、方法(methods)和生命周期钩子(lifecycle hooks),并且可以与其他组件进行通信。
优势:
- 模块化:将复杂的界面拆分成独立的组件,使代码结构更加清晰和可维护。
- 可复用:每个组件都可以被其他组件多次使用,提高了代码的复用性。
- 响应式:通过Vue.js的响应式系统,组件的状态变化可以自动驱动视图更新。
- 开发效率:使用Vue.js开发组件化的应用可以提高开发效率,减少重复代码的编写
一个VUE 组成多个VUE,比如一个VUE ##############sanalysis.vue由多个VUE组成

<template>
<div class="lycontainer">
<el-scrollbar>
<div>
<ly-growcard :loading="showloading" :rows="2" ></ly-growcard>
</div>
<div :style="{ marginBottom: '20px' }">
<lingyutongji :loading="showloading" :rows="5"></lingyutongji>
</div>
<!-- <div class="echarts-inner">-->
<!-- <ly-echartcard :loading="showloading" :rows="3" ></ly-echartcard>-->
<!-- </div>-->
</el-scrollbar>
</div>
</template>
<script>
import lingyutongji from "@/components/analysis/sectorTable.vue";
import LyGrowcard from "@/components/analysis/growCard.vue";
import LyEchartcard from "@/components/analysis/echartCard.vue";
export default {
// eslint-disable-next-line vue/multi-word-component-names
name: "analysis",
components: {LyGrowcard,lingyutongji},
data(){
return{
showloading:true,
echartsData:[
]
}
},
created() {
setTimeout(() => {
this.showloading = false
}, 600)
},
}
</script>
<style lang="scss" scoped>
.lycontainer{
width: 100%;
height: calc(100vh - 130px); //动态计算长度值
}
.echarts-inner{
margin-top: 1px;
}
::v-deep(.el-scrollbar__bar.is-horizontal) {
display: none;
}
</style>
#################sectorTable.vue
<template>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="领域+机型统计" name="areaAndMode">
<sectorTableAreaAndModel></sectorTableAreaAndModel>
</el-tab-pane>
<el-tab-pane label="用途+机型统计" name="UsageAndMode">
<sectorTableUsageAndModel></sectorTableUsageAndModel>
</el-tab-pane>
<el-tab-pane label="领域统计" name="area">
<sectorTableArea></sectorTableArea>
</el-tab-pane>
<el-tab-pane label="用途统计" name="Usage">
<sectorTableUsage ></sectorTableUsage>
</el-tab-pane>
</el-tabs>
</template>
<script>
import sectorTableUsage from "@/components/analysis/sectorTableUsage.vue";
import sectorTableUsageAndModel from "@/components/analysis/sectorTableUsageAndModel.vue";
import sectorTableArea from "@/components/analysis/sectorTableArea.vue";
import sectorTableAreaAndModel from "@/components/analysis/sectorTableAreaAndModel.vue";
export default {
components: {sectorTableArea,sectorTableAreaAndModel,sectorTableUsage,sectorTableUsageAndModel},
data() {
return {
activeName: 'areaAndMode',
};
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
},
}
};
</script>
#####################sectorTableAreaAndModel.vue
<template>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="领域+机型统计" name="areaAndMode">
<sectorTableAreaAndModel></sectorTableAreaAndModel>
</el-tab-pane>
<el-tab-pane label="用途+机型统计" name="UsageAndMode">
<sectorTableUsageAndModel></sectorTableUsageAndModel>
</el-tab-pane>
<el-tab-pane label="领域统计" name="area">
<sectorTableArea></sectorTableArea>
</el-tab-pane>
<el-tab-pane label="用途统计" name="Usage">
<sectorTableUsage ></sectorTableUsage>
</el-tab-pane>
</el-tabs>
</template>
<script>
##################sectorTableUsage.vue
<template>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="领域+机型统计" name="areaAndMode">
<sectorTableAreaAndModel></sectorTableAreaAndModel>
</el-tab-pane>
<el-tab-pane label="用途+机型统计" name="UsageAndMode">
<sectorTableUsageAndModel></sectorTableUsageAndModel>
</el-tab-pane>
<el-tab-pane label="领域统计" name="area">
<sectorTableArea></sectorTableArea>
</el-tab-pane>
<el-tab-pane label="用途统计" name="Usage">
<sectorTableUsage ></sectorTableUsage>
</el-tab-pane>
</el-tabs>
</template>
<script>
import sectorTableUsage from "@/components/analysis/sectorTableUsage.vue";
import sectorTableUsageAndModel from "@/components/analysis/sectorTableUsageAndModel.vue";
import sectorTableArea from "@/components/analysis/sectorTableArea.vue";
import sectorTableAreaAndModel from "@/components/analysis/sectorTableAreaAndModel.vue";
export default {
components: {sectorTableArea,sectorTableAreaAndModel,sectorTableUsage,sectorTableUsageAndModel},
data() {
return {
activeName: 'areaAndMode',
};
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
},
}
};
</script>
import sectorTableUsage from "@/components/analysis/sectorTableUsage.vue";
import sectorTableUsageAndModel from "@/components/analysis/sectorTableUsageAndModel.vue";
import sectorTableArea from "@/components/analysis/sectorTableArea.vue";
import sectorTableAreaAndModel from "@/components/analysis/sectorTableAreaAndModel.vue";
export default {
components: {sectorTableArea,sectorTableAreaAndModel,sectorTableUsage,sectorTableUsageAndModel},
data() {
return {
activeName: 'areaAndMode',
};
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
},
}
};
</script>
#############sectorTableUsageAndModel.vue
<template>
<div>
<el-table
:data="tableData"
border
style="width: 100%;">
<el-table-column
prop="serversModel__name"
label="机型"
width="180">
</el-table-column>
<el-table-column
prop="serversUsage__name"
label="设备数量">
</el-table-column>
<el-table-column
label="设备数量">
<template #default="scope">
<el-link type="primary" @click="navigateToServersManage(scope.row.serversUsage,scope.row.serversModel,'all')">
{{ scope.row.serversCount }}
</el-link>
</template>
</el-table-column>
<el-table-column
label="空闲设备数量">
<template #default="scope">
<el-link type="primary" @click="navigateToServersManage(scope.row.serversUsage,scope.row.serversModel,'nouse')">
{{ scope.row.serversCount_nouse}}
</el-link>
</template>
</el-table-column>
<el-table-column
label="在用设备数量">
<template #default="scope">
<el-link type="primary" @click="navigateToServersManage(scope.row.serversUsage,scope.row.serversModel,'inuse')">
{{ scope.row.serversCount_inuse}}
</el-link>
</template>
</el-table-column>
<el-table-column
prop="serversCount_dis"
label="失联设备数量">
</el-table-column>
<el-table-column
prop="serversCount_dis"
label="备案设备数量">
</el-table-column>
<el-table-column
prop="serversCount_dis"
label="下电失败数量">
</el-table-column>
</el-table>
</div>
</template>
<script>
import { wholeMachineServersCountbyUsageandModel} from '@/api/api'
export default {
data() {
return {
tableData:[],
}
},
methods:{
navigateToServersManage(serversUsage,serversModel,filter) {
const currentDate = new Date().toISOString().split('T')[0];
const query = { };
if (filter === 'nouse') {
query.borrowEndtimeEarlierThan = currentDate;
} else if(filter === 'inuse') {
query.borrowEndtimeLaterThan = currentDate;
query.borrowUserIsNull = 'false';
}
query.serversUsage= serversUsage;
query.serversModel= serversModel;
this.$router.push({
path: '/serversManage',
query,
});
},
async getData(){
this.loadingPage = true
wholeMachineServersCountbyUsageandModel(this.formInline).then(res => {
this.loadingPage = false
if(res.code ===2000) {
this.tableData = res.data.data
console.log(this.tableData )
}
})
},
},
created() {
this.getData()
},
}
</script>
#################growCard.vue
<template>
<el-row :gutter="20">
<el-col :span="6" :xs="{span: 24}" :sm="{span: 24}" :md="{span: 6}" v-for="item in growData">
<div :style="{height:height}" class="space-inner">
<div class="lycard">
<div class="space-header">
<div class="space-header-title">{{item.title}}</div>
<div class="space-header-extend-right">
</div>
</div>
<el-skeleton :rows="rows" :animated="animated" :count="count" :loading="loading" style="padding: 20px;width: auto;overflow: hidden;">
<template #default>
<div class="space-main">
<div class="space-main-up">
<span style="font-size: 24px;">{{ item.nums }}</span>
<div class="space-main-icon">
<el-avatar :size="50" :icon="item.icon.type" :style="{background:item.icon.background?item.icon.background:null}" />
</div>
</div>
<div class="space-main-down">
</div>
</div>
</template>
</el-skeleton>
</div>
</div>
</el-col>
</el-row>
</template>
<script>
import {wholeMachineServersCountAll, } from "@/api/api";
export default {
name: "LyGrowcard",
data(){
return{
growData:[
{id:1,title:"服务器总数",nums:0,icon:{
type:"View",
background:"#67c23a",
}},
{id:2,title:"失联服务器",nums:0,icon:{
type:"GoodsFilled",
background:"#e6a23c",
}},
{id:3,title:"备案服务器",nums:0,icon:{
type:"Download",
background:"#409eff",
}},
{id:4,title:"下电失败服务器",nums:0,icon:{
type:"WalletFilled",
background:"#f56c6c",
}},
],
}
},
methods:{
async getData(){
this.loadingPage = true
wholeMachineServersCountAll(this.formInline).then(res => {
this.loadingPage = false
if(res.code ==2000) {
this.growData[0].nums = res.data.data.total_books;
this.growData[1].nums = res.data.data.serversCount_dis;
this.growData[2].nums = res.data.data.serversCount_dis;
this.growData[3].nums = res.data.data.serversCount_dis;
console.log(this.tableData )
}
})
},
},
created() {
this.getData()
},
props:{
loading: {
type: Boolean,
default: true
},
direction:{
type:String,
default:"horizontal",
},
alignment:{
type:String,
default:"flex-start",
},
count:{
type:Number,
default:1,
},
rows:{
type:Number,
default:4,
},
animated:{
type:Boolean,
default:true,
},
modelValue: {
type: Array,
default: []
},
height:{
type:Number,
default:200,
}
},
watch:{
dataList: function(nval) {
this.$emit('update:modelValue', nval);
}
},
}
</script>
<style scoped>
.space-inner{
}
.lycard{
background: var(--el-bg-color);
box-shadow: var(--el-box-shadow-light);
border: 1px solid var(--el-border-color-light);
}
.space-header{
border-bottom: 1px solid var(--el-color-info-light-7);
font-size: 14px;
padding: 2px;
display: flex;
justify-content: space-between;
align-items: center;
}
.space-header-title{
padding: 8px 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-left: 10px;
}
.space-header-extend-right{
padding: 8px 0;
margin-right: 10px;
}
.space-main{
padding: 20px;
}
.space-main-icon{
}
.space-main-up{
display: flex;
align-items: center;
justify-content: space-between;
}
.space-main-down{
margin-top: 15px;
display: flex;
justify-content: space-between;
}
::v-deep(.el-col) {
margin-bottom: 11px;
}
</style>

<el-form label-position="left" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="0px" class="demo-ruleForm login-container">
<h3 class="title">
<div class="login-logo">
<img style="width: 100%; margin-bottom: 0; " src="../assets/logo.gif" alt="logo">
</div>
<span>{{ $t('login.loginInTitle') }}</span>
</h3>
相关文章:
Django-Vue 学习-VUE
主组件中有多个Vue组件 是指在Vue.js框架中,主组件是一个父组件,它包含了多个子组件(Vue组件)。这种组件嵌套的方式可以用于构建复杂的前端应用程序,通过拆分功能和视图,使代码更加模块化、可复用和易于维…...
Ollama部署本地大模型DeepSeek-R1-Distill-Llama-70B
文章目录 一、下模二、转模1. 下载转换工具2. 安装环境依赖3. llama.cpp1. 转换脚本依赖2. llama.cpp安装依赖包3. llama.cpp编译安装4. 格式转换 三、Ollama部署1. 安装启动Ollama2. 添加模型3. 测试运行 一、下模 #模型下载 from modelscope import snapshot_download model…...
Zabbix问题记录2--踩坑HttpRequest,header添加无效
背景 在试图尝试通过Zabbix接入DeepSeek API的时候,由于使用了HTTP的方式,所以需要使用Zabbix 自带的HttpRequest库进行请求,产生了下面的问题 问题 curl curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completio…...
MTK Android12 预装apk可卸载
文章目录 需求解决方法1、device/mediatek/mt6761/device.mk2、/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt3、路径:4、Android.mk 需求 近期,客户需要预装一个apk,同时该apk要可卸载。解…...
Redis 集群的三种模式:一主一从、一主多从和多主多从
本文记述了博主在学习 Redis 在大型项目下的使用方式,包括如何设置Redis主从节点,应对突发状况如何处理。在了解了Redis的集群搭建和相关的主从复制以及哨兵模式的知识以后,进而想要了解 Redis 集群如何使用,如何正确使用…...
网络工程知识笔记
1. 什么是网络? 网络是由多个节点(如计算机、打印机、路由器等)通过物理或逻辑连接组成的系统,用于数据的传输和共享。这些节点可以通过有线(如以太网)或无线(如 Wi-Fi)方式进行连接…...
FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁
介绍 音视频开发都知道 FFmpeg,因此对 av_register_all 这个 API 都很熟悉,但ffmpeg 4.0 版本开始就已经废弃了,是旧版本中用于全局初始化的重要接口。 基本功能 核心作用:av_register_all() 用于注册所有封装器(muxer)、解封装器(demuxer)和协议处理器(protocol),…...
初识.git文件泄露
.git 文件泄露 当在一个空目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含所有的 Git 存储和操作的对象。 如果想备份或复制一个版本库,只需把这个目录拷贝至另一处就可以了 这是一种常见的安全漏洞,指的是网站的 .git 目录…...
运行测试用例
python odoo-bin -d <database_name> -i my_module --test-tagsmy_module:TestOptimalRouteSelection.test_route_profit_calculation --stop-after-init-d <database_name>:指定 Odoo 使用的数据库名称。 -i my_module:加载和初始化要测试的…...
政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 下载项目 创建虚拟环境 安装项目依赖 安装 Gradio(UI) 运…...
[250224] Yaak 2.0:Git集成、WebSocket支持、OAuth认证等 | Zstandard v1.5.7 发布
目录 Yaak 2.0 发布:Git 集成、WebSocket 支持、OAuth 认证等众多功能!Zstandard v1.5.7 发布:性能提升,稳定性增强 Yaak 2.0 发布:Git 集成、WebSocket 支持、OAuth 认证等众多功能! Yaak,一款…...
(六)趣学设计模式 之 代理模式!
目录 一、啥是代理模式?二、为什么要用代理模式?三、代理模式的实现方式1. 静态代理2. JDK动态代理3. CGLIB动态代理 四、三种代理的对比五、代理模式的优缺点六、代理模式的应用场景七、总结 🌟我的其他文章也讲解的比较有趣😁&a…...
力扣LeetCode:1656 设计有序流
题目: 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Ads Kit(2)
1.问题描述: 应用需要获取一个唯一不变的标识生成deviceID。 当前通过OAID生成,但每次重启PC样机,获取到的OAID都会变化,无法满足唯一不变的需求。 解决方案: 需要获取一个唯一不变的标识,可以尝试使用O…...
鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载)
鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载) 1、效果展示2、ets/models/BasicDataSource.ets3、ets/models/HomeData.ets4、ets/api/home.ets5、ets/pages/Home.ets6、ets/views/Home/SwiperLayout.ets7、后端代码 1、效果展示 2、ets/models/Ba…...
DSP芯片C6678的SRIO及其中断跳转的配置
C6678SRIO读写测试门铃中断跳转测试 SRIO简述代码前言SRIO配置原始代码1.使能电源2.初始化SRIO回环修改 3.SRIO测试 Doorbell门铃中断1.初始化中断函数2.中断向量表建立3.中断向量表的链接 本博客基于创龙“678ZH产品线”的SRIO代码,部分参考于网友们的博客…...
2025asp.net全栈技术开发学习路线图
2025年技术亮点: Blazor已全面支持WebAssembly 2.0标准 .NET 8版本原生集成AI模型部署能力 Azure Kubernetes服务实现智能自动扩缩容 EF Core新增向量数据库支持特性 ASP.NET 全栈开发关键技术说明(2025年视角) 以下技术分类基于现…...
DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s
FlashMLA的核心技术特性包括对BF16精度的全面支持,以及采用块大小为64的页式键值缓存(Paged KV Cache)系统,实现更精确的内存管理。在性能表现方面,基于CUDA12.6平台,FlashMLA在H800SXM5GPU上创下了显著成绩…...
01 冲突域和广播域的划分
目录 1、冲突域和广播域的划分 1.1、冲突域 1.2、广播域 1.3、对比总结 1.4、冲突域与广播域个数计算例题 2、交换机和路由器的结构 2.1、交换机的结构 2.2、路由器的结构 1、冲突域和广播域的划分 1.1、冲突域 冲突域是指网络中可能发生数据帧冲突的物理范围。当多…...
nodejs npm install、npm run dev运行的坎坷之路
1、前面的种种都不说了,好不容易运行起来oap-portal项目,运行idm-ui项目死活运行不起来,各种报错,各种安装,各种卸载nodejs,卸载nvm,重装,都不好使。 2、甚至后来运行npm install会…...
Golang 构建学习
Golang 构建学习 如何搭建Golang开发环境 1. 下载GOlang包 https://golang.google.cn/dl/ 在地址上下载Golang 2. 配置包环境 修改全局环境变量,GOPROXY,GOPATH,GOROOT GOPROXYhttps://goproxy.cn,direct GOROOT“” // go二进制文件的路…...
Android Audio实战——音频相关基础概念(附)
Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…...
大型装备故障诊断解决方案
大型装备故障诊断解决方案 方案背景 在全球航空工业迅猛发展的背景下,我国在军用和民用飞机自主研发制造领域取得了显著成就。尤其是在国家大力支持下,国内飞机制造企业攻克了诸多关键技术难题,实现了从设计研发到生产制造再到售后保障的完整…...
反向代理模块kfj
1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当于…...
【Http和Https区别】
概念: 一、Http协议 HTTP(超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议,客户端通常…...
【llm对话系统】如何快速开发一个支持openai接口的llm server呢
核心思路:使用轻量级 Web 框架,将 OpenAI API 请求转换为你现有推理脚本的输入格式,并将推理脚本的输出转换为 OpenAI API 的响应格式。 快速开发步骤列表: 选择合适的 Web 框架 (快速 & 简单): FastAPI: Python 最佳选择&am…...
数据库的三大范式如何理解?
数据库的三大范式是指数据库设计中用来规范化表结构的规则。其目的是减少数据冗余,提高数据一致性和完整性。三大范式分别是: 第一范式(1NF)—— 原子性 第一范式要求表中的每个字段都必须是原子的,即字段中的值不可…...
Python Seaborn库使用指南:从入门到精通
1. 引言 Seaborn 是基于 Matplotlib 的高级数据可视化库,专为统计图表设计。它提供了更简洁的 API 和更美观的默认样式,能够轻松生成复杂的统计图表。Seaborn 在数据分析、机器学习和科学计算领域中被广泛使用。 本文将详细介绍 Seaborn 的基本概念、常用功能以及高级用法,…...
Android之APP更新(通过接口更新)
文章目录 前言一、效果图二、实现步骤1.AndroidManifest权限申请2.activity实现3.有版本更新弹框UpdateappUtilDialog4.下载弹框DownloadAppUtils5.弹框背景图 总结 前言 对于做Android的朋友来说,APP更新功能再常见不过了,因为平台更新审核时间较长&am…...
JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用
生产问题定位指南:几款必备的可视化工具 引言 在上一篇文章中,详细的介绍了JDK自带的一系列命令行工具,,如jps、jmap、jstat、jstack以及jcmd等,这些工具为排查和诊断Java虚拟机(JVM)问题提供…...
