添加分享

This commit is contained in:
jmal 2020-03-17 18:03:10 +08:00
parent 6446b5067f
commit 1a4899f6ca
7 changed files with 1860 additions and 3 deletions

View File

@ -18,6 +18,7 @@
"@ionic/core": "^4.11.10", "@ionic/core": "^4.11.10",
"@ionic/vue": "0.0.4", "@ionic/vue": "0.0.4",
"axios": "0.18.1", "axios": "0.18.1",
"clipboard": "^2.0.6",
"e-vue-contextmenu": "^0.1.3", "e-vue-contextmenu": "^0.1.3",
"element-ui": "2.13.0", "element-ui": "2.13.0",
"highlightjs-line-numbers.js": "^2.7.0", "highlightjs-line-numbers.js": "^2.7.0",

View File

@ -120,4 +120,20 @@ export default {
data: data data: data
}) })
}, },
// 生成分享链接
generate: function(data) {
return request({
url: 'share/generate',
method: 'post',
data: data
})
},
// 访问分享链接
accessShare: function(data) {
return request({
url: 'public/access-share',
method: 'get',
data: data
})
},
} }

View File

@ -8,7 +8,7 @@ import getPageTitle from '@/utils/get-page-title'
NProgress.configure({ showSpinner: false }) // NProgress Configuration NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/login','/public/articles','/public/articles/article','/share'] // no redirect whitelist const whiteList = ['/login','/public/articles','/s','/public/articles/article','/share'] // no redirect whitelist
router.beforeEach(async(to, from, next) => { router.beforeEach(async(to, from, next) => {
// start progress bar // start progress bar

View File

@ -150,6 +150,18 @@ export const constantRoutes = [
] ]
}, },
{
path: '/s',
component: Layout,
children: [
{
path: '',
name: 'share',
component: () => import('@/views/public/share/shareList'),
}
]
},
// { // {
// path: '/example', // path: '/example',
// component: Layout, // component: Layout,

View File

@ -313,4 +313,23 @@
margin: 0; margin: 0;
} }
} }
/deep/ .grid-divider {
display: block;
height: 1px;
width: 500px;
margin: 24px auto;
color: #bcbcbc;
.el-icon-folder-opened {
color: #bcbcbc;
}
.el-divider__text {
font-weight: 100;
font-size: 12px;
}
}
.share-dialog-footer {
text-align: center;
height: 60px;
margin: 20px;
}

View File

@ -117,6 +117,16 @@
</div> </div>
</el-dialog> </el-dialog>
<!--分享-->
<el-dialog :title="'分享:'+shareFileName" :visible.sync="shareDialog" center>
<div v-loading="generateShareLinkLoading">
<el-input v-model="shareLink"></el-input>
<div slot="footer" class="dialog-footer share-dialog-footer">
<el-button type="primary" class="tag-share-link" @click="copyShareLink" :data-clipboard-text="shareLink">复制链接</el-button>
</div>
</div>
</el-dialog>
<!--<div class="dashboard-text">path: {{ path }}</div>--> <!--<div class="dashboard-text">path: {{ path }}</div>-->
<!--list布局--> <!--list布局-->
@ -267,6 +277,7 @@
</van-grid-item> </van-grid-item>
</van-grid> </van-grid>
</van-checkbox-group> </van-checkbox-group>
<el-divider class="grid-divider" content-position="center"><i class="el-icon-folder-opened"></i>&nbsp;{{summaries}}</el-divider>
</div> </div>
<el-pagination <el-pagination
background background
@ -311,6 +322,7 @@ import Bus from '@/assets/js/bus'
import api from '@/api/upload-api' import api from '@/api/upload-api'
import BreadcrumbFilePath from "../../components/Breadcrumb/BreadcrumbFilePath"; import BreadcrumbFilePath from "../../components/Breadcrumb/BreadcrumbFilePath";
import IconFile from "../../components/Icon/IconFile"; import IconFile from "../../components/Icon/IconFile";
import Clipboard from 'clipboard';
export default { export default {
components: { IconFile, BreadcrumbFilePath, components: { IconFile, BreadcrumbFilePath,
@ -369,6 +381,7 @@ export default {
menus: [], menus: [],
singleMenus: [ singleMenus: [
{ iconClass: 'menu-open', label: '打开', operation: 'open' }, { iconClass: 'menu-open', label: '打开', operation: 'open' },
{ iconClass: 'share', label: '分享', operation: 'share' },
{ iconClass: 'menu-favorite', label: '收藏', operation: 'favorite' }, { iconClass: 'menu-favorite', label: '收藏', operation: 'favorite' },
{ iconClass: 'menu-details', label: '详细信息', operation: 'details' }, { iconClass: 'menu-details', label: '详细信息', operation: 'details' },
{ iconClass: 'menu-rename', label: '重命名', operation: 'rename' }, { iconClass: 'menu-rename', label: '重命名', operation: 'rename' },
@ -378,6 +391,7 @@ export default {
], ],
singleMenusEdit: [ singleMenusEdit: [
{ iconClass: 'menu-open', label: '打开', operation: 'open' }, { iconClass: 'menu-open', label: '打开', operation: 'open' },
{ iconClass: 'share', label: '分享', operation: 'share' },
{ iconClass: 'menu-favorite', label: '收藏', operation: 'favorite' }, { iconClass: 'menu-favorite', label: '收藏', operation: 'favorite' },
{ iconClass: 'menu-edit1', label: '编辑', operation: 'edit' }, { iconClass: 'menu-edit1', label: '编辑', operation: 'edit' },
{ iconClass: 'menu-details', label: '详细信息', operation: 'details' }, { iconClass: 'menu-details', label: '详细信息', operation: 'details' },
@ -422,7 +436,12 @@ export default {
gridColumnNum: -1, gridColumnNum: -1,
gridHoverItemIndex: -1, gridHoverItemIndex: -1,
gridHoverIntermediate: -1, gridHoverIntermediate: -1,
allChecked: false allChecked: false,
summaries: '',
shareDialog: false,
shareLink: '',
shareFileName: '',
generateShareLinkLoading: true
} }
}, },
computed: { computed: {
@ -1065,6 +1084,7 @@ export default {
const sumFileAndFolder = this.getShowSumFileAndFolder(this.fileList) const sumFileAndFolder = this.getShowSumFileAndFolder(this.fileList)
const sizeSum = this.getShowSumSize(sums[2]) const sizeSum = this.getShowSumSize(sums[2])
sums[2] = sumFileAndFolder + sizeSum sums[2] = sumFileAndFolder + sizeSum
this.summaries = sums[2]
return sums return sums
}, },
// 统计文件和文件夹 // 统计文件和文件夹
@ -1370,6 +1390,20 @@ export default {
// 菜单操作 // 菜单操作
menusOperations(operation) { menusOperations(operation) {
switch (operation) { switch (operation) {
case 'share':
this.shareDialog = true
this.shareFileName = this.rowContextData.name
api.generate({
userId: this.rowContextData.userId,
fileId: this.rowContextData.id
}).then(res => {
if (res.data) {
this.shareLink = 'http://'+window.location.host+'/s?s='+res.data
this.generateShareLinkLoading = false
console.log(window.location.host, this.$route)
}
})
break
case 'favorite': case 'favorite':
console.log('operation', '收藏') console.log('operation', '收藏')
this.favoriteOperating(true) this.favoriteOperating(true)
@ -1378,7 +1412,7 @@ export default {
console.log('edit', '编辑') console.log('edit', '编辑')
this.$router.push(`/markdown/editor?id=${this.rowContextData.id}`) this.$router.push(`/markdown/editor?id=${this.rowContextData.id}`)
break break
case 'open': case 'open':d
console.log('open', '打开') console.log('open', '打开')
this.fileClick(this.rowContextData) this.fileClick(this.rowContextData)
break break
@ -1556,6 +1590,30 @@ export default {
</span>); </span>);
} }
}, },
// 复制分享链接
copyShareLink() {
var clipboard = new Clipboard('.tag-share-link')
clipboard.on('success', e => {
this.$message({
message: '复制成功',
type: 'success',
duration: 1000
});
this.shareDialog = false
// 释放内存
clipboard.destroy()
})
clipboard.on('error', e => {
// 不支持复制
this.$message({
message: '该浏览器不支持自动复制',
type: 'warning',
duration: 1000
});
// 释放内存
clipboard.destroy()
})
},
downloadFile() { downloadFile() {
let totalSize = 0 let totalSize = 0
this.selectRowData.forEach(item => { this.selectRowData.forEach(item => {

File diff suppressed because it is too large Load Diff