diff --git a/dist.rar b/dist.rar
index 54fa7da..c6759bc 100644
Binary files a/dist.rar and b/dist.rar differ
diff --git a/src/App.vue b/src/App.vue
index d0d328d..11fd669 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -4,6 +4,7 @@ import { nextTick, onMounted, ref } from "vue"
import { getQrcode, getList, monitorState, Generate, monitorMusic, getDetails, lyricsGenerateHttp, lyricsMonitorHttp, quitLoginHttp, likeDetailsHttp } from "./utils/api"
import { ElMessage } from "element-plus"
+import triangleIcon from "@/components/triangle-icon.vue"
onMounted(() => {
// getLoginQrcode()
@@ -22,14 +23,18 @@ const getListData = () => {
if (res.code != 200) return
const data = res.data || []
-
+ let isNeedMonitor = false
data.forEach(element => {
- // console.log("element", element.metadataid)
+ if (element.status != "complete") {
+ isNeedMonitor = true
+ }
})
- // console.log(data[0])
+ if (isNeedMonitor) {
+ monitorMusicState()
+ }
- // data[0].audio_url = "./b91dc2e6-120b-4979-9007-347d74a01561.mp3"
+ // data[0].audio_url = "./21be5d73-221f-4e7b-82f0-26c7c71b797e.mp3"
islogin.value = true
list.value = data || []
@@ -189,7 +194,7 @@ const handleMusicList = index => {
listIndex.value = index
// console.log(target.metadataid)
- if (target.status !== "complete" && target.metadataid) {
+ if (target.status !== "complete") {
monitorMusicState(target.metadataid || "没有metadataid")
}
getMusicDetails(target.id)
@@ -268,10 +273,12 @@ const getMusicDetails = id => {
const audio = ref(null)
const isPlaying = ref(false)
+let audioSrc = ref("")
let previewState = ref(false)
const closeInfo = () => {
- previewState.value = false
+ // previewState.value = false
+ songInfo.value = {}
}
const playAudio = index => {
@@ -280,10 +287,13 @@ const playAudio = index => {
}
let targetlist = list.value || []
let target = targetlist[index] || {}
- audio.value.src = target.audio_url || ""
+ const url = target.audio_url || ""
+ if (audioSrc.value != url) {
+ audio.value.src = url
+ currentTime.value = 0
+ }
audio.value.play()
listIndex.value = index
- currentTime.value = 0
}
const togglePlayPause = () => {
@@ -296,6 +306,7 @@ const togglePlayPause = () => {
const updatePlayStatus = () => {
isPlaying.value = !audio.value.paused
+ audioSrc.value = audio.value.src || ""
}
const pauseAudio = () => {
@@ -310,6 +321,7 @@ const nextAudio = () => {
let target = targetlist[index]
audio.value.src = target.audio_url
audio.value.play()
+
listIndex.value = index
}
@@ -352,6 +364,7 @@ const seekAudio = value => {
}
const formatTime = time => {
+ if (isNaN(time)) return "0:00"
if (time == Infinity) {
return "-- : --"
}
@@ -490,6 +503,9 @@ const handlelike = index => {
+

+

+

@@ -536,7 +552,7 @@ const handlelike = index => {
-
+
@@ -619,7 +635,7 @@ const handlelike = index => {
-
+
@@ -633,13 +649,13 @@ const handlelike = index => {
-
+
创作
-
+

@@ -661,14 +677,14 @@ const handlelike = index => {
-
-
+
生成中...
-
+
@@ -677,8 +693,8 @@ const handlelike = index => {
@@ -728,30 +744,28 @@ const handlelike = index => {
-
-
-
+
+
-
+
-
+
{{ formatTime(currentTime) }}
-
{{ formatTime(duration) }}
+
{{ formatTime(duration) }}
-
@@ -767,26 +781,8 @@ const handlelike = index => {
扫码关注【SunoAI音乐创作工具】即可登录
-
-
-
@@ -807,16 +803,38 @@ body {
overflow: auto;
padding: 10px;
background-color: #000;
- background-image: url("./assets/img/left-bj.svg");
+ // background-image: url("./assets/img/left-bj.svg");
background: -webkit-linear-gradient(289.179008025811deg, rgba(107, 77, 229, 1) 0%, rgba(144, 91, 212, 1) 38%, rgba(83, 37, 142, 1) 70%, rgba(47, 51, 145, 1) 100%);
background: -moz-linear-gradient(160.820991974189deg, rgba(107, 77, 229, 1) 0%, rgba(144, 91, 212, 1) 38%, rgba(83, 37, 142, 1) 70%, rgba(47, 51, 145, 1) 100%);
background: linear-gradient(160.820991974189deg, rgba(107, 77, 229, 1) 0%, rgba(144, 91, 212, 1) 38%, rgba(83, 37, 142, 1) 70%, rgba(47, 51, 145, 1) 100%);
- border-right: 1px solid #252323;
+ // border-right: 1px solid #252323;
+ border-right: 1px solid rgba(255, 255, 255, 0.2);
// height: calc(100vh - 69px);
position: relative;
z-index: 1;
- display: flex;
- flex-direction: column;
+ // display: flex;
+ // flex-direction: column;
+
+ .left-bj {
+ &.left-bj1 {
+ top: 0;
+ height: 341px;
+ }
+ &.left-bj2 {
+ top: 341px;
+ height: 551px;
+ transform: rotate(180deg);
+ }
+ &.left-bj3 {
+ top: 892px;
+ }
+ position: fixed;
+ left: 0;
+ width: 319px;
+ // height: 440px;
+ z-index: -1;
+ }
+
.hemisphere-icon {
position: absolute;
top: 0;
@@ -825,9 +843,10 @@ body {
height: 83px;
}
.logo {
- width: 138px;
+ width: 131px;
height: 32px;
margin: 20px auto 44px;
+ display: block;
}
.star {
z-index: -1;
@@ -874,7 +893,7 @@ body {
display: flex;
align-items: center;
padding: 0 5px;
- height: 50px;
+ height: 46px;
border: 1px solid rgba(255, 255, 255, 0.196078);
background: rgba(255, 255, 255, 0.0980392);
border-radius: 10px;
@@ -885,9 +904,9 @@ body {
flex: 1;
cursor: pointer;
text-align: center;
- font-size: 20px;
- height: 40px;
- line-height: 40px;
+ font-size: 18px;
+ height: 36px;
+ line-height: 36px;
color: rgba(255, 255, 255, 0.8);
&:first-of-type {
margin-right: 5px;
@@ -1053,13 +1072,14 @@ body {
color: #fff;
min-height: 107px !important;
max-height: 300px;
+ padding: 16px 13px;
}
.el-input__count {
background: transparent;
}
}
- padding-bottom: 5px;
+ padding-bottom: 7px;
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.196078) inset !important;
// border: 1px solid rgba(255, 255, 255, 0.196078);
background: rgba(255, 255, 255, 0.0980392);
@@ -1088,6 +1108,7 @@ body {
min-height: 100px !important;
color: #fff;
max-height: 300px;
+ padding: 16px 13px;
}
}
padding-bottom: 5px;
@@ -1108,7 +1129,6 @@ body {
.style-item {
padding: 0 8px;
- margin-right: 6px;
font-size: 14px;
color: #000000;
cursor: pointer;
@@ -1116,8 +1136,11 @@ body {
height: 26px;
line-height: 26px;
background-color: rgba(255, 255, 255, 0.6);
- border-radius: 10px;
margin-bottom: 8px;
+
+ &:not(:last-of-type) {
+ margin-right: 6px;
+ }
}
&::-webkit-scrollbar {
@@ -1138,7 +1161,7 @@ body {
.random-btn {
// background: rgba(255, 255, 255, 0.16);
// width: 120px;
- margin-left: 5px;
+ margin-left: 7px;
cursor: pointer;
// padding: 0 12px;
// min-width: 32px;
@@ -1169,7 +1192,7 @@ body {
}
.name {
- margin-bottom: 10px;
+ margin-bottom: 24px;
.name-input {
/deep/ .el-input__wrapper {
@@ -1275,6 +1298,7 @@ body {
align-items: center;
height: 40px;
padding: 0 15px;
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
background-color: rgba(51, 51, 51, 1);
.register-text {
@@ -1292,10 +1316,12 @@ body {
}
.middle-box {
- border-right: 1px solid #252323;
+ border-right: 1px solid rgba(255, 255, 255, 0.2);
// height: calc(100vh - 69px);
height: 100vh;
overflow: auto;
+ padding-top: 10px;
+ padding-bottom: 120px;
.nodata {
color: #a0aec0;
font-size: 14px;
@@ -1305,10 +1331,9 @@ body {
.list {
.item {
- padding-top: 8px;
- padding-bottom: 8px;
- padding-left: 20px;
- padding-right: 20px;
+ padding-left: 30px;
+ padding-right: 30px;
+ margin-bottom: 10px;
cursor: pointer;
align-items: center;
&.sel,
@@ -1316,16 +1341,29 @@ body {
background: radial-gradient(3010.06% 152.11% at 27.33% 38.98%, rgba(61, 58, 58, 0.43) 0%, rgba(25, 24, 24, 0.57) 100%) !important;
}
+ &.playing {
+ .img-box {
+ .play {
+ display: flex;
+ }
+ }
+ .content {
+ .name {
+ color: #e7c25b;
+ }
+ }
+ }
+
.img-box {
position: relative;
- width: 60px;
- height: 60px;
- margin-right: 10px;
+ width: 80px;
+ height: 80px;
+ margin-right: 20px;
border-radius: 6px;
.img {
- width: 60px;
- height: 60px;
+ width: 80px;
+ height: 80px;
border-radius: 6px;
}
&:hover {
@@ -1333,8 +1371,8 @@ body {
display: flex;
}
}
+ .suspend-box,
.play {
- display: none;
position: absolute;
top: 0;
left: 0;
@@ -1342,8 +1380,16 @@ body {
height: 100%;
background: rgba(0, 0, 0, 0.6);
.play-btn {
- width: 22px;
+ width: 36px;
}
+
+ .suspend-btn {
+ width: 46px;
+ }
+ }
+
+ .play {
+ display: none;
}
}
@@ -1388,6 +1434,9 @@ body {
font-weight: 700;
color: #fff;
word-break: break-word;
+ font-size: 18px;
+ color: rgba(255, 255, 255, 0.8);
+ margin-bottom: 6px;
}
.desc {
overflow: hidden;
@@ -1398,7 +1447,8 @@ body {
word-break: break-all;
word-wrap: break-word;
white-space: normal;
- color: rgb(203 213 224);
+ color: rgba(255, 255, 255, 0.8);
+ font-size: 14px;
}
}
@@ -1459,12 +1509,15 @@ body {
.base-bottom {
background-color: rgb(22 22 22);
- border-top: 1px solid #222222;
+ border: 1px solid rgba(255, 255, 255, 0.19);
+ // border-top: 1px solid #222222;
padding-left: 24px;
padding-right: 24px;
+ // padding-top: 24px;
height: 68px;
display: flex;
justify-content: center;
+ // align-items: center;
position: fixed;
bottom: 10px;
width: 540px;
@@ -1473,58 +1526,87 @@ body {
z-index: 10;
left: 50%;
transform: translateX(-50%);
- .base-side {
- width: 450px;
- }
.base-middle {
+ flex-direction: column;
+ align-items: center;
+ padding-top: 18px;
+ margin-bottom: 6px;
.btn {
- margin-right: 24px;
+ // margin-right: 24px;
+
.btn-item {
- width: 32px;
- height: 32px;
- border-radius: 50% !important;
- background: rgba(255, 255, 255, 0.08);
+ width: 36px;
+ height: 36px;
+ background: inherit;
+ background-color: rgba(255, 255, 255, 0.8);
+ border: none;
+ border-radius: 18px;
cursor: pointer;
transition: all 0.3s;
- &:hover {
- .el-icon {
- font-size: 30px;
+ // &:hover {
+ // .el-icon {
+ // font-size: 30px;
+ // }
+ // }
+
+ .btn-icon {
+ width: 15px;
+ height: 16px;
+ }
+
+ &.btn-left {
+ .btn-icon {
+ transform: rotate(180deg);
}
}
&.btn-centre {
- margin-left: 6px;
- margin-right: 6px;
- background-color: #fbd38d;
+ margin-left: 20px;
+ margin-right: 20px;
+ // background-color: #fbd38d;
+ background: transparent;
img {
- width: 20px;
+ width: 36px;
+ height: 36px;
+ // width: 20px;
}
}
}
}
.audio-box {
+ position: relative;
+ margin-left: 16px;
+ margin-right: 16px;
.time {
- color: rgb(160 174 192);
- font-size: 12px;
+ top: -17px;
+ left: 0;
+ position: absolute;
+ color: rgba(255, 255, 255, 0.8);
+ font-size: 14px;
+ &.time-right {
+ right: 0;
+ left: auto;
+ }
}
.progress-box {
- width: 390px;
- margin-left: 16px;
- margin-right: 16px;
+ width: 500px;
+
/deep/ .el-slider__runway {
- height: 4px;
+ height: 6px;
+ background-color: rgba(255, 255, 255, 0.803921568627451);
.el-slider__bar {
- background: #fbd38d;
- height: 4px;
+ background: rgba(128, 128, 255, 1);
+ height: 6px;
}
}
/deep/ .el-slider__button {
border: none;
- height: 14px;
- width: 14px;
+ height: 16px;
+ width: 16px;
+ background: rgba(128, 128, 255, 1);
}
}
}
@@ -1610,16 +1692,6 @@ body {
}
}
}
- &.style-dialog {
- .el-dialog__body {
- .style-box {
- .title {
- font-size: 18px;
- color: #fff;
- }
- }
- }
- }
}
@@ -1662,4 +1734,26 @@ body {
color: #fff;
}
}
+
+.el-switch {
+ .el-switch__core {
+ height: 24px;
+ min-width: 48px;
+ border-radius: 48px;
+ .el-switch__action {
+ width: 18px;
+ height: 18px;
+ }
+ }
+
+ &.is-checked .el-switch__core {
+ background: -webkit-linear-gradient(350.53767779deg, #fee97d 0%, #e7c25b 49%, #fe8c7d 100%);
+ background: -moz-linear-gradient(99.46232221deg, #fee97d 0%, #e7c25b 49%, #fe8c7d 100%);
+ background: linear-gradient(99.46232221deg, #fee97d 0%, #e7c25b 49%, #fe8c7d 100%);
+ border: none;
+ .el-switch__action {
+ left: calc(100% - 21px);
+ }
+ }
+}
diff --git a/src/assets/img/arrows-icon.svg b/src/assets/img/arrows-icon.svg
new file mode 100644
index 0000000..bfeeaf3
--- /dev/null
+++ b/src/assets/img/arrows-icon.svg
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/src/assets/img/left-bj1.png b/src/assets/img/left-bj1.png
new file mode 100644
index 0000000..d1199b4
Binary files /dev/null and b/src/assets/img/left-bj1.png differ
diff --git a/src/assets/img/left-bj2.png b/src/assets/img/left-bj2.png
new file mode 100644
index 0000000..e95966c
Binary files /dev/null and b/src/assets/img/left-bj2.png differ
diff --git a/src/assets/img/left-box-bj.png b/src/assets/img/left-box-bj.png
deleted file mode 100644
index 22c0382..0000000
Binary files a/src/assets/img/left-box-bj.png and /dev/null differ
diff --git a/src/assets/img/logo-icon.png b/src/assets/img/logo-icon.png
index 7145423..ad30c32 100644
Binary files a/src/assets/img/logo-icon.png and b/src/assets/img/logo-icon.png differ
diff --git a/src/assets/img/loop-c.png b/src/assets/img/loop-c.png
deleted file mode 100644
index 1da24f2..0000000
Binary files a/src/assets/img/loop-c.png and /dev/null differ
diff --git a/src/assets/img/loop.png b/src/assets/img/loop.png
deleted file mode 100644
index 64a347d..0000000
Binary files a/src/assets/img/loop.png and /dev/null differ
diff --git a/src/assets/img/play-icon.svg b/src/assets/img/play-icon.svg
new file mode 100644
index 0000000..6c25280
--- /dev/null
+++ b/src/assets/img/play-icon.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/src/assets/img/single-c.png b/src/assets/img/single-c.png
deleted file mode 100644
index 6fa0fec..0000000
Binary files a/src/assets/img/single-c.png and /dev/null differ
diff --git a/src/assets/img/single.png b/src/assets/img/single.png
deleted file mode 100644
index 1c8207e..0000000
Binary files a/src/assets/img/single.png and /dev/null differ
diff --git a/src/assets/img/suspend-icon.svg b/src/assets/img/suspend-icon.svg
new file mode 100644
index 0000000..4465b0c
--- /dev/null
+++ b/src/assets/img/suspend-icon.svg
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/src/assets/img/triangle-icon.svg b/src/assets/img/triangle-icon.svg
new file mode 100644
index 0000000..686da83
--- /dev/null
+++ b/src/assets/img/triangle-icon.svg
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/src/assets/main.css b/src/assets/main.css
index fed1b63..0f06735 100644
--- a/src/assets/main.css
+++ b/src/assets/main.css
@@ -5,6 +5,13 @@
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
}
+/* 修改placeholder的颜色,兼容性更好的写法 */
+textarea::placeholder,
+.el-input .el-input__inner::placeholder {
+ color: rgba(255, 255, 255, 0.498039215686275) !important;
+ /* 设置placeholder的颜色为灰色 */
+}
+
*::-webkit-scrollbar-track-piece {
background-color: transparent;
}
diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue
deleted file mode 100644
index 5fb372c..0000000
--- a/src/components/HelloWorld.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
{{ msg }}
-
- You’ve successfully created a project with
- Vite +
- Vue 3.
-
-
-
-
-
diff --git a/src/components/TheWelcome.vue b/src/components/TheWelcome.vue
deleted file mode 100644
index dab9536..0000000
--- a/src/components/TheWelcome.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
- Documentation
-
- Vue’s
- official documentation
- provides you with all information you need to get started.
-
-
-
-
-
-
- Tooling
-
- This project is served and bundled with
- Vite. The
- recommended IDE setup is
- VSCode +
- Volar. If
- you need to test your components and web pages, check out
- Cypress and
- Cypress Component Testing.
-
-
-
- More instructions are available in README.md
.
-
-
-
-
-
-
- Ecosystem
-
- Get official tools and libraries for your project:
- Pinia,
- Vue Router,
- Vue Test Utils, and
- Vue Dev Tools. If
- you need more resources, we suggest paying
- Awesome Vue
- a visit.
-
-
-
-
-
-
- Community
-
- Got stuck? Ask your question on
- Vue Land, our official
- Discord server, or
- StackOverflow. You should also subscribe to
- our mailing list and follow
- the official
- @vuejs
- twitter account for latest news in the Vue world.
-
-
-
-
-
-
- Support Vue
-
- As an independent project, Vue relies on community backing for its sustainability. You can help
- us by
- becoming a sponsor.
-
-
diff --git a/src/components/WelcomeItem.vue b/src/components/WelcomeItem.vue
deleted file mode 100644
index ac366d0..0000000
--- a/src/components/WelcomeItem.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue
deleted file mode 100644
index 2dc8b05..0000000
--- a/src/components/icons/IconCommunity.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue
deleted file mode 100644
index 6d4791c..0000000
--- a/src/components/icons/IconDocumentation.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue
deleted file mode 100644
index c3a4f07..0000000
--- a/src/components/icons/IconEcosystem.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue
deleted file mode 100644
index 7452834..0000000
--- a/src/components/icons/IconSupport.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue
deleted file mode 100644
index 660598d..0000000
--- a/src/components/icons/IconTooling.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
diff --git a/src/components/triangle-icon.vue b/src/components/triangle-icon.vue
new file mode 100644
index 0000000..a897ad6
--- /dev/null
+++ b/src/components/triangle-icon.vue
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/src/main.js b/src/main.js
index 65521f6..2cd7092 100644
--- a/src/main.js
+++ b/src/main.js
@@ -3,7 +3,6 @@ import "./assets/main.css"
import { createApp } from "vue"
import ElementPlus from "element-plus"
import "element-plus/dist/index.css"
-// 如果您正在使用CDN引入,请删除下面一行。
import * as ElementPlusIconsVue from "@element-plus/icons-vue"
import App from "./App.vue"
diff --git a/src/router/index.js b/src/router/index.js
index a49ae50..e55886b 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -9,14 +9,6 @@ const router = createRouter({
name: 'home',
component: HomeView
},
- {
- path: '/about',
- name: 'about',
- // route level code-splitting
- // this generates a separate chunk (About.[hash].js) for this route
- // which is lazy-loaded when the route is visited.
- component: () => import('../views/AboutView.vue')
- }
]
})
diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue
deleted file mode 100644
index 756ad2a..0000000
--- a/src/views/AboutView.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
This is an about page
-
-
-
-
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index 6bb706f..27e0f69 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -1,9 +1,3 @@
-
-
-
-
-
-
+
+
\ No newline at end of file