parent
1a9f311b5c
commit
aa6b705810
After Width: | Height: | Size: 603 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.6 KiB |
@ -1,28 +1,45 @@
|
||||
<!--
|
||||
* @Author: zhangjiabao
|
||||
* @Date: 2024-01-02 15:41:16
|
||||
* @LastEditors: zhangjiabao
|
||||
* @LastEditTime: 2024-01-25 17:49:21
|
||||
* @FilePath: /luoo_manage_fe/src/views/layout/components/Sidebar/index.vue
|
||||
-->
|
||||
<template>
|
||||
<scroll-bar>
|
||||
<el-menu mode="vertical" unique-opened :default-active="$route.path" :collapse="isCollapse" background-color="#304156" text-color="#fff" active-text-color="#409EFF">
|
||||
<span
|
||||
style="font-size: 20px;color: white; text-align: center; display: inline-block; width: 100%; margin-top: 10px;"
|
||||
>QueYue</span
|
||||
>
|
||||
<el-menu
|
||||
mode="vertical"
|
||||
unique-opened
|
||||
:default-active="$route.path"
|
||||
:collapse="isCollapse"
|
||||
background-color="#304156"
|
||||
text-color="#fff"
|
||||
active-text-color="#409EFF"
|
||||
>
|
||||
<sidebar-item :routes="routes"></sidebar-item>
|
||||
</el-menu>
|
||||
</scroll-bar>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import SidebarItem from './SidebarItem'
|
||||
import ScrollBar from '@/components/ScrollBar'
|
||||
import { mapGetters } from "vuex";
|
||||
import SidebarItem from "./SidebarItem";
|
||||
import ScrollBar from "@/components/ScrollBar";
|
||||
|
||||
export default {
|
||||
components: { SidebarItem, ScrollBar },
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'sidebar'
|
||||
]),
|
||||
...mapGetters(["sidebar"]),
|
||||
routes() {
|
||||
return this.$router.options.routes
|
||||
return this.$router.options.routes;
|
||||
},
|
||||
isCollapse() {
|
||||
return !this.sidebar.opened
|
||||
return !this.sidebar.opened;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
@ -0,0 +1,640 @@
|
||||
<!--
|
||||
* @Description: 曲库
|
||||
* @version: v1
|
||||
* @Author: zhangjiabao
|
||||
* @Date: 2024-01-14 00:12:59
|
||||
-->
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- card -->
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="card-header clearfix">
|
||||
<span class="card-header-text">曲库管理</span>
|
||||
</div>
|
||||
<!-- 查询条件 -->
|
||||
<el-form :inline="true" class="in-card-form">
|
||||
<el-form-item>
|
||||
<el-input
|
||||
placeholder="请输入关键词"
|
||||
size="medium"
|
||||
v-model="queryForm.data.keyword"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select
|
||||
placeholder="选择发布人"
|
||||
size="medium"
|
||||
v-model="queryForm.data.creatorId"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in queryForm.remoteData.publisher"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:key="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-date-picker
|
||||
placeholder="选择时间范围"
|
||||
v-model="queryForm.data.timeRange"
|
||||
type="daterange"
|
||||
:range-separator="
|
||||
queryForm.data.timeRange.length === 0 ? null : '~'
|
||||
"
|
||||
:editable="false"
|
||||
:clearable="false"
|
||||
value-format="yyyy-MM-dd"
|
||||
start-placeholder="选择时间范围"
|
||||
size="medium"
|
||||
style="width: 280px;"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button
|
||||
icon="el-icon-search"
|
||||
type="primary"
|
||||
size="medium"
|
||||
@click="handleQueryClick"
|
||||
>查询</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button
|
||||
icon="el-icon-refresh-left"
|
||||
size="medium"
|
||||
@click="handleResetClick"
|
||||
>重置</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-form :inline="true" class="in-card-form">
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-upload" type="primary" size="small"
|
||||
>上传</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-upload2" size="small">批量上传</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-download" size="small">下载</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-delete" size="small">删除</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 表格 -->
|
||||
<el-table
|
||||
stripe
|
||||
:data="table.data"
|
||||
ref="songTable"
|
||||
height="calc(100vh - 375px)"
|
||||
v-loading="table.loading"
|
||||
v-if="table.show"
|
||||
element-loading-text="加载中"
|
||||
@selection-change="handleTableSelectionChange"
|
||||
:header-cell-style="{ background: '#f5f7fa', color: '#606266' }"
|
||||
border
|
||||
fit
|
||||
>
|
||||
<el-table-column type="selection" width="55"> </el-table-column>
|
||||
<el-table-column sortable label="歌曲名">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.name }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="">
|
||||
<template slot-scope="scope">
|
||||
<el-button style="padding: 0px;" type="text" icon="el-icon-download"
|
||||
>下载</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="artist" label="歌手/乐队"></el-table-column>
|
||||
<el-table-column prop="album" label="所属专辑"></el-table-column>
|
||||
<el-table-column label="歌曲风格">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ getTagNameById(scope.row.tags) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="picture" label="专辑封面" width="100px">
|
||||
<template slot-scope="slot">
|
||||
<img
|
||||
style="width: 50;height: 50px;"
|
||||
v-if="slot.row.picture"
|
||||
:src="slot.row.picture"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="duration" label="时长"></el-table-column>
|
||||
<el-table-column label="关联期刊">
|
||||
<template slot-scope="scope">
|
||||
<span v-for="j in scope.row.journal" :key="j + ''">{{ j }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="updateTime"
|
||||
sortable
|
||||
label="修改时间"
|
||||
></el-table-column>
|
||||
<el-table-column fixed="right" label="启停用" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
style="margin-bottom: 4px;"
|
||||
v-model="scope.row.state"
|
||||
active-color="#13ce66"
|
||||
@change="handleTableRowStatusChange($event, scope.row)"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
size="mini"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="上传人员">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ getAuthorNameById(scope.row.userId) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
@click="handleModifyClick(scope.row)"
|
||||
type="primary"
|
||||
size="mini"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button plain icon="el-icon-success" type="success" size="mini"
|
||||
>歌词</el-button
|
||||
>
|
||||
<el-popconfirm
|
||||
confirm-button-text="确定"
|
||||
cancel-button-text="取消"
|
||||
icon="el-icon-info"
|
||||
icon-color="red"
|
||||
title="是否确认删除歌曲?"
|
||||
style="margin-left: 10px;"
|
||||
@confirm="handleDeleteClick(scope.row)"
|
||||
>
|
||||
<el-button
|
||||
slot="reference"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
type="danger"
|
||||
size="mini"
|
||||
>删除</el-button
|
||||
>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<el-row :inline="true">
|
||||
<el-col :span="12">
|
||||
<div class="foot-operator-right">
|
||||
<el-button size="small" @click="handleTableSelectionAllClick"
|
||||
>选择全部</el-button
|
||||
>
|
||||
<el-button size="small" @click="handleTableSelectionInverseClick"
|
||||
>反向选择</el-button
|
||||
>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12" style="text-align: right;">
|
||||
<div class="foot-operator-right">
|
||||
<el-pagination
|
||||
class="pagination-right"
|
||||
background
|
||||
v-if="table.show"
|
||||
layout="total, prev, pager, next, sizes"
|
||||
:current-page.sync="table.page.current"
|
||||
:page-size="table.page.size"
|
||||
:total="table.page.total"
|
||||
@size-change="handlePageSizeChange"
|
||||
@current-change="handlePageCurrentChange"
|
||||
>
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-dialog
|
||||
title="信息编辑"
|
||||
:visible="true"
|
||||
v-if="musicModifyDialog.visible"
|
||||
width="40%"
|
||||
top="60px"
|
||||
append-to-body
|
||||
:before-close="handleMusicModifyDialogBeforeClose"
|
||||
><MusicModify
|
||||
:remoteTagList="queryForm.remoteData.tags"
|
||||
:data="musicModifyDialog.data"
|
||||
></MusicModify>
|
||||
<span slot="footer">
|
||||
<el-button size="small" type="primary">保存</el-button>
|
||||
<el-button size="small">取消</el-button>
|
||||
</span></el-dialog
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import tagApi from "@/api/tag";
|
||||
import musicApi from "@/api/musicV2";
|
||||
import MusicModify from "./musicModify.vue";
|
||||
|
||||
export default {
|
||||
name: "Song",
|
||||
data() {
|
||||
return {
|
||||
// 查询表单
|
||||
queryForm: {
|
||||
remoteData: {
|
||||
publisher: [],
|
||||
tags: []
|
||||
},
|
||||
lastQuery: {},
|
||||
data: {
|
||||
keyword: null,
|
||||
creatorId: null,
|
||||
timeRange: []
|
||||
}
|
||||
},
|
||||
musicModifyDialog: {
|
||||
visible: false,
|
||||
data: {}
|
||||
},
|
||||
// 表格
|
||||
table: {
|
||||
show: true,
|
||||
loading: true,
|
||||
selection: [],
|
||||
data: [],
|
||||
page: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
total: 0
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
filters: {},
|
||||
components: {
|
||||
MusicModify
|
||||
},
|
||||
created() {
|
||||
this.fetchCreaterList();
|
||||
this.fetchTags();
|
||||
this.fetchData(this.queryForm.data);
|
||||
},
|
||||
methods: {
|
||||
log(e) {
|
||||
this.$message.success(e);
|
||||
},
|
||||
// ************************* 数据查询 *************************
|
||||
/**
|
||||
* 查询表格数据
|
||||
*/
|
||||
fetchData(param) {
|
||||
// 记录上一次查询条件
|
||||
this.queryForm.lastQuery = param;
|
||||
|
||||
let queryParam = {
|
||||
keyword: param.keyword,
|
||||
userId: param.creatorId
|
||||
};
|
||||
if (param.timeRange) {
|
||||
if (param.timeRange[0]) {
|
||||
queryParam.start = param.timeRange[0] + " 00:00:00";
|
||||
}
|
||||
|
||||
if (param.timeRange[1]) {
|
||||
queryParam.end = param.timeRange[1] + " 23:59:59";
|
||||
}
|
||||
}
|
||||
this.table.loading = true;
|
||||
|
||||
setTimeout(() => {
|
||||
let musicList = [
|
||||
{
|
||||
album: "范特西",
|
||||
artist: "周杰伦",
|
||||
duration: "1h30min",
|
||||
id: "1",
|
||||
journal: [1, 2, 3],
|
||||
lyric: "lllll llll lll",
|
||||
name: "双节棍",
|
||||
picture: "https://luoow.wxwenku.com/999/cover_min.jpg",
|
||||
size: "1.3m",
|
||||
state: "1",
|
||||
tags: [3, 5, 11],
|
||||
updateTime: "2023-01-01",
|
||||
url:
|
||||
"https://luoow.wxwenku.com/999/01._Belmondo_(Große_Liebe)_Annett_Louisan.mp3",
|
||||
userId: "1627863701048659968"
|
||||
},
|
||||
{
|
||||
album: "范特西1",
|
||||
artist: "周杰伦1",
|
||||
duration: "1h30min",
|
||||
id: "2",
|
||||
journal: [1, 2, 3],
|
||||
lyric: "lllll llll lll",
|
||||
name: "双节棍1",
|
||||
picture: "https://luoow.wxwenku.com/999/cover_min.jpg",
|
||||
size: "1.3m",
|
||||
state: "1",
|
||||
tags: [3, 5, 11],
|
||||
updateTime: "2023-01-01",
|
||||
url:
|
||||
"https://luoow.wxwenku.com/999/01._Belmondo_(Große_Liebe)_Annett_Louisan.mp3",
|
||||
userId: "1627863701048659968"
|
||||
}
|
||||
];
|
||||
this.table.data = musicList;
|
||||
this.table.page.total = 10;
|
||||
this.table.loading = false;
|
||||
}, 1000);
|
||||
},
|
||||
/**
|
||||
* 创建人下拉框
|
||||
*/
|
||||
fetchCreaterList() {
|
||||
tagApi.createrList().then(res => {
|
||||
if (res.code === 200) {
|
||||
this.queryForm.remoteData.publisher = res.data;
|
||||
} else {
|
||||
this.queryForm.remoteData.publisher = [];
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 高级筛选tag
|
||||
*/
|
||||
fetchTags() {
|
||||
// tagApi.queryHierarchical().then(res => {
|
||||
// console.log(res)
|
||||
// })
|
||||
let res = [
|
||||
{
|
||||
id: 1,
|
||||
nameCh: "语言类型",
|
||||
children: [
|
||||
{ id: 3, nameCh: "中文" },
|
||||
{ id: 4, nameCh: "日文" },
|
||||
{ id: 5, nameCh: "英文" }
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
nameCh: "期刊标签",
|
||||
children: [
|
||||
{ id: 11, nameCh: "民谣" },
|
||||
{ id: 12, nameCh: "摇滚" }
|
||||
]
|
||||
}
|
||||
];
|
||||
let newList = [];
|
||||
for (let index in res) {
|
||||
let item = res[index];
|
||||
let newItem = { value: item.id, label: item.nameCh, children: [] };
|
||||
for (let childrenIndex in item.children) {
|
||||
let childrenItem = item.children[childrenIndex];
|
||||
newItem.children.push({
|
||||
value: childrenItem.id,
|
||||
label: childrenItem.nameCh
|
||||
});
|
||||
}
|
||||
newList.push(newItem);
|
||||
}
|
||||
this.queryForm.remoteData.tags = newList;
|
||||
},
|
||||
// ************************* 数据处理 *************************
|
||||
getAuthorNameById(userId) {
|
||||
for (let index in this.queryForm.remoteData.publisher) {
|
||||
let item = this.queryForm.remoteData.publisher[index];
|
||||
if (item.id === userId) {
|
||||
return item.name;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
},
|
||||
getTagNameById(tagIdList) {
|
||||
let tagList = [];
|
||||
for (let tagIdIndex in tagIdList) {
|
||||
let tagId = tagIdList[tagIdIndex];
|
||||
for (let index in this.queryForm.remoteData.tags) {
|
||||
let item = this.queryForm.remoteData.tags[index];
|
||||
if (item.value === tagId) {
|
||||
tagList.push(item.label);
|
||||
}
|
||||
if (!item.children) {
|
||||
continue;
|
||||
}
|
||||
for (let subIndex in item.children) {
|
||||
let subItem = item.children[subIndex];
|
||||
if (subItem.value === tagId) {
|
||||
tagList.push(subItem.label);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let name = "";
|
||||
for (let index in tagList) {
|
||||
name = name + "#" + tagList[index] + " ";
|
||||
}
|
||||
return name;
|
||||
},
|
||||
// ************************* 按扭事件 *************************
|
||||
/**
|
||||
* 查询按扭点击事件
|
||||
*/
|
||||
handleQueryClick() {
|
||||
this.table.page.current = 1;
|
||||
this.table.page.total = 0;
|
||||
this.fetchData(this.queryForm.data);
|
||||
},
|
||||
/**
|
||||
* 重置点击事件
|
||||
*/
|
||||
handleResetClick() {
|
||||
this.queryForm.data = {
|
||||
keyword: null,
|
||||
creatorId: null,
|
||||
timeRange: []
|
||||
};
|
||||
},
|
||||
/**
|
||||
* 编辑标签点击事件
|
||||
*/
|
||||
handleModifyClick(row) {
|
||||
this.musicModifyDialog.data = row;
|
||||
this.musicModifyDialog.visible = true;
|
||||
},
|
||||
/**
|
||||
* 删除按钮点击事件
|
||||
*/
|
||||
handleDeleteClick(row) {
|
||||
musicApi.delete(row.id).then(res => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.message);
|
||||
this.fetchData(this.queryForm.lastQuery);
|
||||
return;
|
||||
} else {
|
||||
this.$message.error(res.message);
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 表格内状态滑块切换事件
|
||||
*/
|
||||
handleTableRowStatusChange($event, row) {
|
||||
this.$message("状态切换" + $event);
|
||||
musicApi.updateStatus(row.id, $event).then(res => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success(res.message);
|
||||
} else {
|
||||
this.$message.error(res.message);
|
||||
}
|
||||
this.fetchData(this.queryForm.lastQuery);
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 表格多选框
|
||||
*/
|
||||
handleTableSelectionChange(val) {
|
||||
this.table.selection = val;
|
||||
console.log(val);
|
||||
},
|
||||
/**
|
||||
* 表格全选
|
||||
*/
|
||||
handleTableSelectionAllClick() {
|
||||
this.handleTableSelectRows(this.table.data);
|
||||
},
|
||||
/**
|
||||
* 表格反选
|
||||
*/
|
||||
handleTableSelectionInverseClick() {
|
||||
let newSelection = [];
|
||||
for (let rowIndex in this.table.data) {
|
||||
let isIn = false;
|
||||
for (let seletIndex in this.table.selection) {
|
||||
if (
|
||||
this.table.selection[seletIndex]["id"] ===
|
||||
this.table.data[rowIndex]["id"]
|
||||
) {
|
||||
isIn = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!isIn) {
|
||||
newSelection.push(this.table.data[rowIndex]);
|
||||
}
|
||||
}
|
||||
this.$refs.songTable.clearSelection();
|
||||
this.handleTableSelectRows(newSelection);
|
||||
},
|
||||
handleTableSelectRows(rows) {
|
||||
this.$refs.songTable.clearSelection();
|
||||
for (let rowIndex in rows) {
|
||||
this.$refs.songTable.toggleRowSelection(rows[rowIndex]);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 分页组件页数变化事件
|
||||
*/
|
||||
handlePageCurrentChange(val) {
|
||||
this.table.page.current = val;
|
||||
this.fetchData(this.queryForm.lastQuery);
|
||||
},
|
||||
/**
|
||||
* 分页组件大小变化事件
|
||||
*/
|
||||
handlePageSizeChange(val) {
|
||||
this.table.page.size = val;
|
||||
this.fetchData(this.queryForm.lastQuery);
|
||||
},
|
||||
/**
|
||||
* 弹窗关闭按扭点击事件
|
||||
*/
|
||||
handleMusicModifyDialogBeforeClose(done) {
|
||||
this.musicModifyDialog.visible = false;
|
||||
done();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.pagination-right {
|
||||
text-align: right;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.foot-operator-right {
|
||||
text-align: left;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.box-card {
|
||||
min-height: 300px;
|
||||
height: calc(100vh - 140px);
|
||||
border-radius: 10px;
|
||||
.el-card__header {
|
||||
background-color: rgba(249, 249, 249, 1);
|
||||
}
|
||||
}
|
||||
/deep/ .el-dialog {
|
||||
border-radius: 5px;
|
||||
}
|
||||
.popup-dialog {
|
||||
.el-dialog__header {
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
height: 50px;
|
||||
background-color: #f5f5f5f5;
|
||||
}
|
||||
.el-dialog__title {
|
||||
font-size: 15px;
|
||||
font-weight: bolder;
|
||||
}
|
||||
.el-dialog__footer {
|
||||
border-top: solid;
|
||||
border-top-width: thin;
|
||||
border-top-color: rgb(233, 233, 233);
|
||||
padding: 10px 20px 10px;
|
||||
}
|
||||
}
|
||||
.in-card-form {
|
||||
height: 50px;
|
||||
display: flex;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
.card-header {
|
||||
height: 23px;
|
||||
}
|
||||
.app-container {
|
||||
font-family: "Microsoft YaHei Bold", "Microsoft YaHei Regular",
|
||||
"Microsoft YaHei", sans-serif;
|
||||
}
|
||||
.card-header-text {
|
||||
font-family: "Microsoft YaHei Bold", "Microsoft YaHei Regular",
|
||||
"Microsoft YaHei", sans-serif;
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-size: 16px;
|
||||
text-align: left;
|
||||
line-height: 20px;
|
||||
letter-spacing: normal;
|
||||
color: #333333;
|
||||
}
|
||||
</style>
|
Loading…
Reference in new issue