refactor: 自动续token

This commit is contained in:
jmal 2023-03-11 01:07:10 +08:00
parent a80e3f4bd0
commit d09d3222db
18 changed files with 196 additions and 168 deletions

View File

@ -28,7 +28,7 @@
<el-image v-if="grid" :style="{'height':details?'110px':(gridWidth-35) + 'px'}" fit="contain"
:src="item.fileId ? (audioCoverUrl+item.fileId) : (audioCoverUrl+item.id)">
<div slot="error" class="image-slot">
<svg-icon class="avatar-default-image" icon-class="audio"/>
<svg-icon icon-class="audio"/>
</div>
</el-image>
<el-avatar v-if="!grid" shape="square"

View File

@ -99,8 +99,8 @@ export default {
},
data() {
return {
imageUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
audioCoverUrl: process.env.VUE_APP_BASE_API + '/view/cover?jmal-token=' + this.$store.state.user.token + '&id=',
imageUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
audioCoverUrl: `${process.env.VUE_APP_BASE_API}/view/cover?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
shareDialogVisible: false,
generateShareLinkLoading: false,
pickerOptions: {

View File

@ -674,8 +674,8 @@ export default {
},
data() {
return {
imageUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
audioCoverUrl: process.env.VUE_APP_BASE_API + '/view/cover?jmal-token=' + this.$store.state.user.token + '&id=',
imageUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
audioCoverUrl: `${process.env.VUE_APP_BASE_API}/view/cover?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
fileMenuActive: '',
path: this.$route.query.path,
showNewFolder: false,
@ -2949,7 +2949,7 @@ export default {
fileIds.push(this.rowContextData.id)
}
if (fileIds.length > 1 || this.rowContextData.isFolder) {
fileConfig.packageDownload(fileIds, this.$store.state.user.token)
fileConfig.packageDownload(fileIds, this.$store.state.user.token, this.$store.state.user.name)
return
}
fileConfig.download(this.$store.state.user.name, this.rowContextData, this.$store.getters.token)

View File

@ -128,7 +128,8 @@ export default {
.replace(/\sseconds?/, '秒')
},
headers: {
'jmal-token': this.$store.state.user.token
'jmal-token': this.$store.state.user.token,
'name': this.$store.state.user.name
},
query() {
}

View File

@ -108,6 +108,7 @@ export default {
return {
headers: {
'jmal-token': this.$store.state.user.token,
'name': this.$store.state.user.name,
'username': this.$store.state.user.name,
'userId': this.$store.state.user.userId
},

View File

@ -126,7 +126,7 @@ export default {
}
let fileKey = `${new Date(this.file.updateDate).getTime()}-${this.file.id}`
let callbackUrl = fileConfig.officeCallBackUrl(this.$store.getters.token, this.file.id)
let callbackUrl = fileConfig.officeCallBackUrl(this.$store.getters.token, this.$store.getters.name, this.file.id)
const config = {
"document": {

View File

@ -1,117 +1,117 @@
<template>
<div ref="audioPreview" v-if="show">
<div class="audio-player"
v-aplayerDrag="{ x: transformX, y: transformY }"
@mouseenter="closeBarShow = true" @mouseleave="closeBarShow = false" @touchmove="closeBarShow = true" @touchend="touchend">
<a-player
ref="audioPlayer"
autoplay
listFolded
loop.sync="all"
order.sync="list"
:mini.sync="mini"
:audio="list"
:lrc-type="0"
>
</a-player>
<div v-show="closeBarShow" class="close-bar" @click="close">
<svg-icon class="audio-player-close" icon-class="close"/>
<div class="audio-player"
v-aplayerDrag="{ x: transformX, y: transformY }"
@mouseenter="closeBarShow = true" @mouseleave="closeBarShow = false" @touchmove="closeBarShow = true"
@touchend="touchend">
<a-player
ref="audioPlayer"
autoplay
listFolded
loop.sync="all"
order.sync="list"
:mini.sync="mini"
:audio="list"
:lrc-type="0"
>
</a-player>
<div v-show="closeBarShow" class="close-bar" @click="close">
<svg-icon class="audio-player-close" icon-class="close"/>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import '@/utils/directives.js'
import Bus from '@/assets/js/bus'
import fileConfig from '@/utils/file-config'
export default {
name: 'AudioPreview',
components: {
},
props: {
},
computed: {
},
data() {
return {
pc: this.$pc,
transformX: !this.$pc ? document.body.clientWidth - 100: (document.body.clientWidth-500)/2,
transformY: !this.$pc ? document.body.clientHeight/2 - 100 : 0,
show: false,
closeBarShow: false,
// api ==> https://aplayer.netlify.app/docs/guide/options.html#volume
audios: [],
list: [],
mini: !this.$pc,
audioPlayerDoc: undefined
}
},
watch: {
show(val) {
if (val && !this.audioPlayerDoc) {
this.$nextTick(() => {
this.audioPlayerDoc = document.querySelector('.audio-player')
})
}
}
},
mounted() {
Bus.$on('onAddAudio',(newFile, audioCoverUrl) => {
if (!this.show) {
this.show = true
}
let url = fileConfig.previewUrl(this.$store.state.user.name, newFile, this.$store.getters.token)
if(!this.$store.state.user.token){
url = fileConfig.publicPreviewUrl(newFile.id, window.shareId, this.$store.getters.shareToken);
}
let music = newFile.music
let fileName = newFile.name.substring(0,newFile.name.length - newFile.suffix.length-1)
let musicOperation = {
id: newFile.id,
url: url,
name: music.songName ? music.songName : fileName,
artist: music.songName ? music.singer : fileName,
cover: music.songName ? audioCoverUrl+newFile.id :'',
type: newFile.contentType
}
let musicIndex = this.audios.findIndex(item => item.id === newFile.id)
if(musicIndex < 0){
if(this.audios.length === 1){
let loop = document.querySelector('.aplayer-icon.aplayer-icon-loop');
loop.style.display = 'inline'
let order = document.querySelector('.aplayer-icon.aplayer-icon-order');
order.style.display = 'inline'
}
this.audios.push(musicOperation)
setTimeout(() => {
this.list = this.audios
setTimeout(() => {
this.$refs.audioPlayer.switch(this.audios.length - 1)
}, 0)
}, 0)
} else {
this.$refs.audioPlayer.switch(musicIndex)
}
})
},
methods: {
close(){
this.show = false
this.audioPlayerDoc = undefined
this.$refs.audioPlayer.pause()
this.audios.splice(0, this.audios.length)
},
touchend() {
const that = this
setTimeout(function (){
that.closeBarShow = false
}, 2500)
}
},
destroyed() {
Bus.$off('onAddAudio')
name: 'AudioPreview',
components: {},
props: {},
computed: {},
data() {
return {
pc: this.$pc,
transformX: !this.$pc ? document.body.clientWidth - 100 : (document.body.clientWidth - 500) / 2,
transformY: !this.$pc ? document.body.clientHeight / 2 - 100 : 0,
show: false,
closeBarShow: false,
// api ==> https://aplayer.netlify.app/docs/guide/options.html#volume
audios: [],
list: [],
mini: !this.$pc,
audioPlayerDoc: undefined
}
},
watch: {
show(val) {
if (val && !this.audioPlayerDoc) {
this.$nextTick(() => {
this.audioPlayerDoc = document.querySelector('.audio-player')
})
}
}
},
mounted() {
Bus.$on('onAddAudio', (newFile, audioCoverUrl) => {
if (!this.show) {
this.show = true
}
let url = fileConfig.previewUrl(this.$store.state.user.name, newFile, this.$store.getters.token)
if (this.$store.getters.token === undefined) {
url = fileConfig.publicPreviewUrl(newFile.id, window.shareId, this.$store.getters.shareToken);
}
console.log('sfdsf', url)
let music = newFile.music
let fileName = newFile.name.substring(0, newFile.name.length - newFile.suffix.length - 1)
let musicOperation = {
id: newFile.id,
url: url,
name: music.songName ? music.songName : fileName,
artist: music.songName ? music.singer : fileName,
cover: music.songName ? audioCoverUrl + newFile.id : '',
type: newFile.contentType
}
let musicIndex = this.audios.findIndex(item => item.id === newFile.id)
if (musicIndex < 0) {
if (this.audios.length === 1) {
let loop = document.querySelector('.aplayer-icon.aplayer-icon-loop');
loop.style.display = 'inline'
let order = document.querySelector('.aplayer-icon.aplayer-icon-order');
order.style.display = 'inline'
}
this.audios.push(musicOperation)
setTimeout(() => {
this.list = this.audios
setTimeout(() => {
this.$refs.audioPlayer.switch(this.audios.length - 1)
}, 0)
}, 0)
} else {
this.$refs.audioPlayer.switch(musicIndex)
}
})
},
methods: {
close() {
this.show = false
this.audioPlayerDoc = undefined
this.$refs.audioPlayer.pause()
this.audios.splice(0, this.audios.length)
},
touchend() {
const that = this
setTimeout(function () {
that.closeBarShow = false
}, 2500)
}
},
destroyed() {
Bus.$off('onAddAudio')
}
}
</script>
@ -119,31 +119,33 @@ export default {
.aplayer {
/* position: relative; */
width: 460px;
margin: 0!important;
margin: 0 !important;
/* -webkit-filter: blur(15px); */
/* filter: blur(20px); */
-webkit-backdrop-filter: saturate(180%) blur(20px);
backdrop-filter: saturate(180%) blur(20px);
background: #ffffff45!important;
background: #ffffff45 !important;
/* background-color: rgba(255,255,255,0.72); */
}
.aplayer .aplayer-lrc:before {
background: transparent!important;
background: transparent !important;
}
.aplayer .aplayer-lrc:after {
background: transparent!important;
background: transparent !important;
}
.aplayer .aplayer-list li.aplayer-list-light {
background: #d4d4d475!important;
background: #d4d4d475 !important;
}
.aplayer .aplayer-list li {
border-top: .5px solid #d4d4d475!important;
border-top: .5px solid #d4d4d475 !important;
}
.aplayer .aplayer-list li:hover {
background: #d4d4d475!important;
background: #d4d4d475 !important;
}
.audio-player {
@ -152,33 +154,37 @@ export default {
left: 0;
top: 0;
}
.close-bar {
z-index: 2006;
position: absolute;
top: -36px;
right: -36px;
width: 0;
height: 0;
border-radius: 36px;
border-width: 36px;
border-style: solid;
border-color: transparent transparent transparent #d4d4d475;
line-height: 36px;
transform: rotate(-45deg);
z-index: 2006;
position: absolute;
top: -36px;
right: -36px;
width: 0;
height: 0;
border-radius: 36px;
border-width: 36px;
border-style: solid;
border-color: transparent transparent transparent #d4d4d475;
line-height: 36px;
transform: rotate(-45deg);
}
.close-bar:hover {
cursor: pointer;
border-color: transparent transparent transparent #69696975;
cursor: pointer;
border-color: transparent transparent transparent #69696975;
}
.audio-player-close {
transform: rotate(-45deg);
z-index: 2009;
position: absolute;
top: -8px;
right: 13px;
transform: rotate(-45deg);
z-index: 2009;
position: absolute;
top: -8px;
right: 13px;
}
@media screen and (max-width: 768px) {
>>>.aplayer {
> > > .aplayer {
z-index: 2;
}
.close-bar {
@ -189,7 +195,8 @@ export default {
z-index: 1;
transform: rotate(135deg);
border-color: #ff000075;
>>>.audio-player-close {
> > > .audio-player-close {
top: -7px;
right: -7px;
}

View File

@ -48,7 +48,8 @@ export default {
computed: {},
data() {
return {
imageThumbnailUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
imageThumbnailUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
shareImageThumbnailUrl: `${process.env.VUE_APP_BASE_API}/public/s/view/thumbnail?share-token=${this.$store.getters.shareToken}&id=`,
publicImageThumbnailUrl: process.env.VUE_APP_BASE_API + '/public/s/view/thumbnail?id=',
currentSrc: '',
images: [],
@ -124,6 +125,9 @@ export default {
if (this.$store.getters.token){
return this.imageThumbnailUrl + fileId
} else {
if (this.$store.getters.shareToken) {
return this.shareImageThumbnailUrl + fileId
}
return this.publicImageThumbnailUrl + fileId
}
},

View File

@ -60,7 +60,7 @@ export default {
return {
isShow: true,
activeIndex: '1',
imageUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
imageUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
defaultAvatar: require('../../assets/img/default-avatar.png')
}
},

View File

@ -97,9 +97,10 @@ const actions = {
return new Promise((resolve, reject) => {
login({ username: username.trim(), password: password }).then(response => {
const { data } = response
commit('SET_TOKEN', data.token)
setToken(data.token)
commit('SET_TOKEN', data.jmalToken)
setToken(data.jmalToken)
setUsername(username.trim())
commit('SET_NAME', username.trim())
commit('SET_USERID', data.userId)
setConsumerId(data.userId)
if(rememberMe){

View File

@ -15,14 +15,14 @@ export default {
return `${window.location.origin}/office/web-apps/apps/api/documents/api.js`
},
// office回调url
officeCallBackUrl: function(token, fileId) {
return `${window.location.origin}${this.baseUrl}/office/track?jmal-token=${token}&fileId=${fileId}`
officeCallBackUrl: function(token, username, fileId) {
return `${window.location.origin}${this.baseUrl}/office/track?jmal-token=${token}&name=${username}&fileId=${fileId}`
},
// 预览文件的url
previewUrl: function(username, file, token, shareToken) {
let fileUrl = `${this.baseUrl}/file/${username}${encodeURI(file.path)}${encodeURI(file.name)}`
if (token) {
return `${fileUrl}?jmal-token=${token}`
return `${fileUrl}?jmal-token=${token}&name=${username}`
}
if (shareToken) {
return `${fileUrl}?share-token=${shareToken}`
@ -46,9 +46,9 @@ export default {
})
},
// 打包下载文件
packageDownload: function(fileIds, token, shareToken) {
packageDownload: function(fileIds, token, username) {
fileApi.isAllowDownload().then(() => {
window.open(`${this.baseUrl}/packageDownload?fileIds=${fileIds}&jmal-token=${token}`, '_self')
window.open(`${this.baseUrl}/packageDownload?fileIds=${fileIds}&jmal-token=${token}&name=${username}`, '_self')
})
},
// 共享文件下载

View File

@ -307,8 +307,8 @@ export default {
lastTabbarOffsetTop: 0,// 底部tabbar与上边框 上次的距离
diffTabbarTop: 0,// 底部tabbar与上边框的变化距离
isiPhoneX: 0,
imageUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
audioCoverUrl: process.env.VUE_APP_BASE_API + '/view/cover?jmal-token=' + this.$store.state.user.token + '&id=',
imageUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
audioCoverUrl: `${process.env.VUE_APP_BASE_API}/view/cover?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
tabActive: 0,
path: this.$route.query.path,
fileList: [],
@ -618,7 +618,7 @@ export default {
fileIds.push(this.rowContextData.id)
}
if (fileIds.length > 1 || this.rowContextData.isFolder) {
fileConfig.packageDownload(fileIds, this.$store.state.user.token)
fileConfig.packageDownload(fileIds, this.$store.state.user.token, this.$store.state.user.name)
return
}
fileConfig.download(this.$store.state.user.name, this.rowContextData, this.$store.state.user.token)
@ -634,7 +634,6 @@ export default {
this.rowContextData.isFavorite = isFavorite
this.highlightFavorite(isFavorite, true)
api.favoriteUrl({
token: this.$store.state.user.token,
fileIds: this.rowContextData.id,
isFavorite: isFavorite
}).then(res => {

View File

@ -376,6 +376,7 @@ export default {
accept: 'image/*,.mp3, .wav, .rar',
headers: {
'jmal-token': this.$store.state.user.token,
'name': this.$store.state.user.name,
'username': this.$store.state.user.name,
'userId': this.$store.state.user.userId
},

View File

@ -220,16 +220,20 @@
<div v-if="showShareCode" class="share-content">
<div class="share-icon">
<icon-file class="share-icon-font" :item="shareData" :grid="true" :details="true" :image-url="imageUrl"></icon-file>
<icon-file class="share-icon-font" :item="shareData" :grid="true" :details="true"
:image-url="imageUrl"></icon-file>
</div>
<div class="share-filename">
<span>{{ shareData.fileName }}</span>
</div>
<div class="share-code">
<el-input v-model="extractionCode" placeholder="请输入提取码" clearable @keyup.enter.native="validShareCode(extractionCode)"></el-input>
<el-input v-model="extractionCode" placeholder="请输入提取码" clearable
@keyup.enter.native="validShareCode(extractionCode)"></el-input>
</div>
<div class="share-code-valid">
<el-button type="primary" :disabled="extractionCode.length === 0" @click="validShareCode(extractionCode)">查看文件</el-button>
<el-button type="primary" :disabled="extractionCode.length === 0" @click="validShareCode(extractionCode)">
查看文件
</el-button>
</div>
</div>
@ -276,7 +280,6 @@ import fileConfig from "@/utils/file-config";
import Clipboard from "clipboard";
import OfficePreview from "@/components/preview/OfficePreview";
import Logo from "@/components/Logo";
import getPageTitle from "@/utils/get-page-title";
import store from "@/store";
export default {
@ -289,7 +292,7 @@ export default {
return {
prompt: '文件分享已被撤销',// 文件分享已被撤销
isLoading: true,
imageUrl: process.env.VUE_APP_BASE_API + '/public/s/view/thumbnail?id=',
//imageUrl: this.$store.getters.shareToken ? `${process.env.VUE_APP_BASE_API}/public/s/view/thumbnail?id=` : `${process.env.VUE_APP_BASE_API}/public/s/view/thumbnail?share-token=${this.$store.getters.shareToken}&id=`,
fileMenuActive: '',
path: this.$route.query.path,
showNewFolder: false,
@ -417,6 +420,12 @@ export default {
return this.$store.state.user.netdiskLogo
}
return ''
},
imageUrl() {
console.log('this.$store.getters.shareToken', this.$store.getters.shareToken)
return this.$store.getters.shareToken === undefined ?
`${process.env.VUE_APP_BASE_API}/public/s/view/thumbnail?id=` :
`${process.env.VUE_APP_BASE_API}/public/s/view/thumbnail?share-token=${this.$store.getters.shareToken}&id=`
}
},
created() {
@ -949,7 +958,7 @@ export default {
}
if (copy) {
if (this.rowContextData.isShare) {
this.copyDownloadLink(window.location.origin + fileConfig.previewUrl(this.sharer.username, this.rowContextData,undefined, this.$store.getters.shareToken))
this.copyDownloadLink(window.location.origin + fileConfig.previewUrl(this.sharer.username, this.rowContextData, undefined, this.$store.getters.shareToken))
} else {
this.copyDownloadLink(fileConfig.publicPackageDownloadUrl(this.shareId, fileIds, this.$store.getters.shareToken))
}
@ -1035,7 +1044,7 @@ export default {
* @param shareCode 提取码
*/
validShareCode(shareCode) {
this.$store.dispatch('user/validShareCode', {shareId: this.shareId, shareCode: shareCode}).then(()=> {
this.$store.dispatch('user/validShareCode', {shareId: this.shareId, shareCode: shareCode}).then(() => {
this.showShareCode = false
// 验证成功
this.getFileList()
@ -1142,13 +1151,16 @@ export default {
.share-icon {
margin: 20px 0 20px 0;
>>> .icon-favorite {
> > > .icon-favorite {
display: none;
}
>>> .icon-share {
> > > .icon-share {
display: none;
}
.share-icon-font >>> .svg-icon {
.share-icon-font > > > .svg-icon {
font-size: 8rem;
}
}
@ -1158,14 +1170,15 @@ export default {
}
.share-code {
>>> .el-input {
> > > .el-input {
width: 200px;
}
}
.share-code-valid {
margin-top: 20px;
>>> .el-button {
> > > .el-button {
width: 200px;
}
}

View File

@ -65,7 +65,7 @@ export default {
components: {Logo},
data() {
return {
uploadUrl: process.env.VUE_APP_BASE_API + '/user/setting/upload_logo?jmal-token=' + this.$store.state.user.token,
uploadUrl: `${process.env.VUE_APP_BASE_API}/user/setting/upload_logo?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}`,
title: '网盘管理',
syncLoading: false,
resetLoading: false,

View File

@ -87,7 +87,7 @@
}
};
return {
imageUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
imageUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
title: "个人信息",
userUpdateLoading: false,
dialogAvatar: false,

View File

@ -201,8 +201,8 @@
},
data() {
return {
imageUrl: process.env.VUE_APP_BASE_API + '/view/thumbnail?jmal-token=' + this.$store.state.user.token + '&id=',
audioCoverUrl: process.env.VUE_APP_BASE_API + '/view/cover?jmal-token=' + this.$store.state.user.token + '&id=',
imageUrl: `${process.env.VUE_APP_BASE_API}/view/thumbnail?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
audioCoverUrl: `${process.env.VUE_APP_BASE_API}/view/cover?jmal-token=${this.$store.state.user.token}&name=${this.$store.state.user.name}&id=`,
fileMenuActive: '',
path: this.$route.query.path,
showNewFolder: false,

View File

@ -9,6 +9,7 @@ export function toConnection(username,token) {
ws.timer = setInterval(() => {
try {
if(ws.isConnected){
console.log('isConnected', ws.isConnected)
ws.stompClient.send("test");
}else{
connect(username, token);