VUE+SPRINGBOOT+语音技术实现智能语音歌曲管理系统

news2025/4/8 3:10:42

语音控制歌曲的播放、暂停、增删改查


<template>
  <div class="Music-container">
    <div style="margin: 10px 0">
      <!--检索部分-->
      <el-input style="width: 200px;" placeholder="请输入歌曲名称"
                v-model="send.name"></el-input>
      <el-input style="width: 200px;" placeholder="请输入歌曲拥有者"
                v-model="send.user" class="ml-10"></el-input>
      <el-input style="width: 200px;" placeholder="请输入歌曲分类"
                v-model="send.category"
                class="ml-10"></el-input>
      <el-button class="ml-10" type="primary" @click="selectListPage">
        搜索<i class="el-icon-search"></i>
      </el-button>
      <el-button type="warning" @click="reset">
        重置<i class="el-icon-refresh"></i>
      </el-button>
      <!--检索部分结束-->

      <!--新增与删除-->
      <!--      <el-button type="primary" @click="insertWindow">新增<i class="el-icon-circle-plus-outline"></i>
            </el-button>-->
      <el-popconfirm
          class="ml-10"
          confirm-button-text="确定"
          cancel-button-text="取消"
          icon="el-icon-info"
          icon-color="red"
          title="确认要批量删除吗?"
          @confirm="confirmRemoveIdList">
        <el-button type="danger" slot="reference">批量删除<i
            class="el-icon-remove-outline"></i>
        </el-button>
      </el-popconfirm>
      <el-upload style="display: inline-block"
                 :action="'http://'+WHITE_IP+'/music/list_import'"
                 name="multipartFile"
                 :show-file-list="false"
                 accept="xlsx"
                 :on-success="onImportSuccess">
        <!-- <el-button type="primary" class="ml-10">导入<i class="el-icon-upload2"></i></el-button>-->
      </el-upload>
      <!--      <el-button type="primary" class="ml-10" @click="list_export">导出<i class="el-icon-download"></i></el-button>-->
    </div>

    <!--表格部分-->
    <el-table :data="list" boder stripe
              :header-cell-style="{'text-align':'center'}"
              :cell-style="{'text-align':'center'}"
              border
              width="220"
              @selection-change="onSelectChange"
              :header-cell-class-name="headerBg">
      <el-table-column type="selection" width="60"></el-table-column><!--选择框-->
      <el-table-column type="index" :index="hIndex" label="序号" width="80"/>
      <el-table-column prop="name" label="歌曲名称">
      </el-table-column>
      <el-table-column prop="title" label="歌曲标题">
      </el-table-column>
      <el-table-column prop="url" label="歌曲地址">
      </el-table-column>
      <el-table-column prop="image" label="歌曲背景">
      </el-table-column>
      <el-table-column prop="user" label="所属用户">
      </el-table-column>
      <el-table-column prop="category" label="所属分类">
      </el-table-column>
      <!--      <el-table-column prop="mark" label="可以使用">
            </el-table-column>-->

      <el-table-column label="歌曲正常使用" width="160">
        <template slot-scope="scope">
          <el-switch v-model="scope.row.mark" active-color="#13ce66" inactive-color="#cccccc"
                     @change="changeEnable(scope.row)">
          </el-switch>
        </template>
      </el-table-column>

      <el-table-column label="操作" width="300">
        <template #default="scope">
          <el-button type="success" @click="updateWindow(scope.row)">编辑<i
              class="el-icon-edit"></i></el-button>
          <el-popconfirm
              class="ml-10"
              confirm-button-text="确定"
              cancel-button-text="取消"
              icon="el-icon-info"
              icon-color="red"
              title="确认要删除吗?"
              @confirm="confirmDelete(scope.row.id)">
            <el-button type="danger" slot="reference">删除<i
                class="el-icon-remove-outline"></i></el-button>
          </el-popconfirm>
        </template>
      </el-table-column>
    </el-table>

    <!--分页部分-->
    <div class="pd-10">
      <el-pagination
          @size-change="onSizeChange"
          @current-change="onCurrentChange"
          :page-sizes="[10, 15, 20, 50]"
          :current-page="send.currentPage"
          :page-size="send.pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="send.total">
      </el-pagination>
    </div>

    <!--新增或修改弹窗-->
    <el-dialog title="歌曲详情" :visible.sync="sendFormFlag" :close-on-click-modal="false">
      <el-form label-width="120px" size="small">
        <el-form-item label="歌曲名称">
          <el-input v-model="sendForm.name" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="歌曲标题">
          <el-input v-model="sendForm.title" autocomplete="off"></el-input>
        </el-form-item>
        <!--角色的选择-->
        <el-form-item label="歌曲地址">
          <el-input v-model="sendForm.url" autocomplete="off"></el-input>
        </el-form-item>
        <!---->
        <el-form-item label="歌曲背景">
          <el-input v-model="sendForm.image" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="所属用户">
          <el-input v-model="sendForm.user" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="所属分类">
          <el-input v-model="sendForm.category" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="confirmInsertOrUpdate">确 定</el-button>
        <el-button @click="sendFormFlag = false">取 消</el-button>
      </div>
    </el-dialog>

  </div>
</template>

<script>
import {WHITE_IP} from "../../public/config";
import router from "@/js_router/router";

export default {
  name: "Music",
  data() {
    return {
      WHITE_IP: WHITE_IP, // ip地址
      list: [], // 该页面主列表
      roleList: [], // 角色列表
      headerBg: 'headerBg',
      send: {  // 发送数据
        currentPage: 1,
        pageSize: 10,
        total: 0,
        user: '',
        category: ''
      },
      sendForm: {
        removeIdList: []
      }, // 新增发送数据
      sendFormFlag: false, // 是否展示新增发送数据
    }
  },
  //------------------------
  created() {
    // 请求分页数据
    this.selectListPage()
  },
  methods: {
    changeEnable(row) {
      // @change自动改变了布尔值
      // console.log(row.enable)
      this.$http.post("music/music_enable", {id: row.id, mark: row.mark}).then(res => {
        if (res.data.code === "200") {
          if (row.mark) {
            this.$message.success('歌曲正常使用')
          } else {
            this.$message.info('歌曲无法使用')
          }
        } else {
          this.$message.error('操作失败,' + res.data.message)
        }
      })
    },
    hIndex(index) {
      // 当前页数 - 1 * 每页数据条数 + index + 1 ( index 是索引值,从0开始)
      return (this.send.currentPage - 1) * this.send.pageSize + index + 1
    },
    /*导入成功*/
    onImportSuccess() {
      this.$message.success("文件导入成功")
      this.selectListPage()
    },
    /*导出*/
    list_export() {
      window.open(`http://${WHITE_IP}/music/list_export`)
    },
    /*重置函数*/
    reset() {
      this.send.name = ''
      this.send.user = ''
      this.send.category = ''
      this.selectListPage()
    },
    /*当前页变化时*/
    onCurrentChange(currentPage) {
      this.send.currentPage = currentPage
      this.selectListPage()
    },
    /*每页条数变化时*/
    onSizeChange(pageSize) {
      this.send.pageSize = pageSize
      this.selectListPage()
    },
    /*分页查询*/
    selectListPage() {
      this.$http.post("/music/list_page", this.send).then(res => {
        console.log(res)
        if (res.data.code === "200") {
          this.send.total = res.data.object.total
          this.list = res.data.object.data
        } else {
          this.$message.error('查询失败,' + res.data.code)
          router.push("/login")
        }
      })
    },
    /*复选框变化时*/
    onSelectChange(val) {
      this.sendForm.removeIdList = val
    },
    /*确认批量删除*/
    confirmRemoveIdList() {
      if (this.sendForm.removeIdList === undefined) {
        return
      }
      this.sendForm.removeIdList = this.sendForm.removeIdList.map(v => v.id)  // [{},{},{}] =>[1,2,3]
      this.$http.post("music/list_delete", this.sendForm).then(res => {
        if (res.data.code === "200") {
          this.$message.success('批量删除成功')
        } else {
          this.$message.error('批量删除失败,' + res.data.message)
        }
        this.selectListPage()
      })
      this.selectListPage()
    },
    /*确认删除*/
    confirmDelete(id) {
      this.sendForm.id = id
      this.$http.post("/music/delete_admin", this.sendForm).then(res => {
        if (res.data.code === "200") {
          this.$message.success('删除成功')
        } else {
          this.$message.error('删除失败,' + res.data.message)
        }
        this.selectListPage()
      })
    },
    /*修改窗口*/
    updateWindow(row) {
      this.sendFormFlag = true
      this.sendForm = JSON.parse(JSON.stringify(row))
    },
    /*确认新增或修改*/
    confirmInsertOrUpdate() {
      this.sendFormFlag = false
      this.$http.post("/music/insertOrUpdate", this.sendForm).then(res => {
        console.log(res.data)
        if (res.data.code === "200") {
          this.$message.success('保存成功')
        } else {
          this.$message.error('保存失败,' + res.data.message)
        }
        this.selectListPage()
      })
    },
    /*新增窗口*/
    insertWindow() {
      this.sendFormFlag = true
      this.sendForm = {} // 初始化新增空白表单
    },
  }
}
</script>

<style scoped>
</style>

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

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

相关文章

使用 SignalR 在 .NET Core 8 最小 API 中构建实时通知

示例代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/90448094 介绍 构建实时应用程序已成为现代 Web 开发中必不可少的部分&#xff0c;尤其是对于通知、聊天系统和实时更新等功能。SignalR 是 ASP.NET 的一个强大库&#xff0c;可实现服务器端代码和客户…

复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect

这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴&#xff0c;将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器&#xff0c;能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…

技术驱动革新,强力巨彩LED软模组助力创意显示

随着LED显示技术的不断突破&#xff0c;LED软模组因其独特的柔性特质和个性化显示效果&#xff0c;正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新&#xff0c;为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。    LED…

Spark,HDFS概述

HDFS组成构架&#xff1a; 注&#xff1a; NameNode&#xff08;nn&#xff09;&#xff1a;就是 Master&#xff0c;它是一个主管、管理者。 (1) 管理 HDFS 的名称空间&#xff1b; (2) 配置副本策略。记录某些文件应该保持几个副本&#xff1b; (3) 管理数据块&#xff08;…

【数据结构】图论进阶:生成树、生成森林与权值网络的终极解析

图的基本概念 导读一、图中的树与森林1.1 生成树与生成森林1.1.1 生成树1.1.2 生成森林1.1.3 生成树、生成森林与连通分量结点的关系边的关系 1.2 有向图中的树与森林1.2.1 有向树与有向森林1.2.2 生产有向树与生成有向森林1.2.3 有向树与生成有向树的区别1.2.4 有向森林与生成…

C和C++(list)的链表初步

链表是构建其他复杂数据结构的基础&#xff0c;如栈、队列、图和哈希表等。通过对链表进行适当的扩展和修改&#xff0c;可以实现这些数据结构的功能。想学算法&#xff0c;数据结构&#xff0c;不会链表是万万不行的。这篇笔记是一名小白在学习时整理的。 C语言 链表部分 …

【KWDB创作者计划】_KaiwuDB 2.1.0 单节点裸机部署

大家好&#xff0c;这里是 DBA学习之路&#xff0c;专注于提升数据库运维效率。 目录 前言KWDB 介绍安装准备环境信息配置要求操作系统软件依赖端口要求安装包下载 部署 KWDB简单实用连接数据库创建数据库创建用户创建时序表 前言 今天无意间在墨天轮看到一个征文活动 征文大赛…

前端快速入门学习3——CSS介绍与选择器

1.概述 CSS全名是cascading style sheets,中文名层叠样式表。 用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;从而实现更精确的页面设计。 HTML与CSS的关系&#xff1a;HTML相当…

Redash:一个开源的数据查询与可视化工具

Redash 是一款免费开源的数据可视化与协作工具&#xff0c;可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程&#xff0c;尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…

嵌入式Linux驱动—— 1 GPIO配置

目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能&#xff08;CCM&#xff09; 1.3 IO 复用&#xff08;IOMUXC&#xff09; 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程&#xff1a; 使能某组GPIO模块&#xff08;GPIO1、2、...&#xff09;&#…

[ICLR 2025]Biologically Plausible Brain Graph Transformer

论文网址&#xff1a;Biologically Plausible Brain Graph Transformer 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 …

SpringBoot+MyBatis Plus+PageHelper+vue+mysql 实现用户信息增删改查功能

静态资源展示 &#xff08;1&#xff09;静态资源下载 &#xff08;2&#xff09;下载后文件放到resources/static 目录下 (3) main函数启动项目访问对应文件&#xff0c;http://127.0.0.1:8080/user-list.html 数据库添加表和数据 SET FOREIGN_KEY_CHECKS0;-- --------…

企业常用Linux服务搭建

1.需要两台centos 7服务器&#xff0c;一台部署DNS服务器&#xff0c;另一台部署ftp和Samba服务器。 2. 部署DNS 服务器​ #!/bin/bash# 更新系统 echo "更新系统..." sudo yum update -y# 安装 BIND 和相关工具 echo "安装 BIND 和相关工具..." sudo y…

Qwen-7B-Chat 本地化部署使用

通义千问 简介 通义千问是阿里云推出的超大规模语言模型&#xff0c;以下是其优缺点&#xff1a; 优点 强大的基础能力&#xff1a;具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…

QGIS获取建筑矢量图-Able Software R2V

1.QGIS截图 说明&#xff1a;加载天地图矢量图层&#xff0c;然后进行截图。 2.Able Software R2V 说明&#xff1a;Able Software R2V 是一款​​将光栅图像&#xff08;如扫描图纸、航拍照片&#xff09;自动转换为矢量图形&#xff08;如DXF格式&#xff09;​​的软件&a…

form实现pdf文件转换成jpg文件

说明&#xff1a; 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript&#xff0c;gs10050w64.exe 配置环境变量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路径&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 输出文件目录&#xff1a;C:\Users\wan…

STM32单片机入门学习——第13节: [6-1] TIM定时中断

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.04 STM32开发板学习——第13节: [6-1] TIM定时中断 前言开发板说明引用解答和科普一…

【2】搭建k8s集群系列(二进制)之安装etcd数据库集群

一、etcd服务架构 Etcd 是一个分布式键值存储系统&#xff0c;Kubernetes 使用 Etcd 进行数据存储&#xff0c;所以先 准备一个 Etcd 数据库&#xff0c;为解决 Etcd 单点故障&#xff0c;应采用集群方式部署&#xff0c;这里使用 3 台组建集群&#xff0c;可容忍 1 台机器故障…

Linux常用命令详解:从基础到进阶

目录 一、引言 二、文件处理相关命令 &#xff08;一&#xff09;grep指令 &#xff08;二&#xff09;zip/unzip指令 ​编辑 &#xff08;三&#xff09;tar指令 &#xff08;四&#xff09;find指令 三、系统管理相关命令 &#xff08;一&#xff09;shutdown指…

基于spring boot的外卖系统的设计与实现【如何写论文思路与真正写出论文】

目录 系统开发实现链接&#xff1a; 背景与分析&#xff1a; 背景&#xff08;题目&#xff09;&#xff1a; 用户功能 配送员功能 管理员功能 分析&#xff1a; 过程&#xff08;主体展示为主&#xff0c;部分功能不一一展示&#xff09;&#xff1a; 目录 论文前面…