完成了本地存储功能,用户头像存储方式改为本地,其他细节优化
This commit is contained in:
@@ -15,6 +15,14 @@ export function del(id) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function delAll(ids) {
|
||||||
|
return request({
|
||||||
|
url: 'api/localStorage/',
|
||||||
|
method: 'delete',
|
||||||
|
data: ids
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function edit(data) {
|
export function edit(data) {
|
||||||
return request({
|
return request({
|
||||||
url: 'api/localStorage',
|
url: 'api/localStorage',
|
||||||
|
|||||||
BIN
src/assets/avatar/avatar.png
Normal file
BIN
src/assets/avatar/avatar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
@@ -11,7 +11,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<el-dropdown class="avatar-container right-menu-item" trigger="click">
|
<el-dropdown class="avatar-container right-menu-item" trigger="click">
|
||||||
<div class="avatar-wrapper">
|
<div class="avatar-wrapper">
|
||||||
<img :src="user.avatar" class="user-avatar">
|
<img :src="user.avatar ? baseApi + '/avatar/' + user.avatar : Avatar" class="user-avatar">
|
||||||
<i class="el-icon-caret-bottom"/>
|
<i class="el-icon-caret-bottom"/>
|
||||||
</div>
|
</div>
|
||||||
<el-dropdown-menu slot="dropdown">
|
<el-dropdown-menu slot="dropdown">
|
||||||
@@ -46,7 +46,7 @@ import { mapGetters } from 'vuex'
|
|||||||
import Breadcrumb from '@/components/Breadcrumb'
|
import Breadcrumb from '@/components/Breadcrumb'
|
||||||
import Hamburger from '@/components/Hamburger'
|
import Hamburger from '@/components/Hamburger'
|
||||||
import Screenfull from '@/components/Screenfull'
|
import Screenfull from '@/components/Screenfull'
|
||||||
|
import Avatar from '@/assets/avatar/avatar.png'
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Breadcrumb,
|
Breadcrumb,
|
||||||
@@ -55,6 +55,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
Avatar: Avatar,
|
||||||
dialogVisible: false
|
dialogVisible: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -62,7 +63,8 @@ export default {
|
|||||||
...mapGetters([
|
...mapGetters([
|
||||||
'sidebar',
|
'sidebar',
|
||||||
'user',
|
'user',
|
||||||
'device'
|
'device',
|
||||||
|
'baseApi'
|
||||||
]),
|
]),
|
||||||
show: {
|
show: {
|
||||||
get() {
|
get() {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import 'element-ui/lib/theme-chalk/index.css'
|
|||||||
import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
|
import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
|
||||||
import mavonEditor from 'mavon-editor'
|
import mavonEditor from 'mavon-editor'
|
||||||
import 'mavon-editor/dist/css/index.css'
|
import 'mavon-editor/dist/css/index.css'
|
||||||
|
|
||||||
import '@/styles/index.scss' // global css
|
import '@/styles/index.scss' // global css
|
||||||
|
|
||||||
import App from './App'
|
import App from './App'
|
||||||
@@ -16,6 +15,7 @@ import store from './store'
|
|||||||
|
|
||||||
import '@/icons' // icon
|
import '@/icons' // icon
|
||||||
import './router/index' // permission control
|
import './router/index' // permission control
|
||||||
|
import Router from 'vue-router'
|
||||||
|
|
||||||
Vue.use(mavonEditor)
|
Vue.use(mavonEditor)
|
||||||
Vue.use(permission)
|
Vue.use(permission)
|
||||||
@@ -23,6 +23,11 @@ Vue.use(ElementUI, { locale })
|
|||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
require('babel-polyfill')
|
require('babel-polyfill')
|
||||||
|
|
||||||
|
const routerPush = Router.prototype.push
|
||||||
|
Router.prototype.push = function push(location) {
|
||||||
|
return routerPush.call(this, location).catch(error => error)
|
||||||
|
}
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
el: '#app',
|
el: '#app',
|
||||||
router,
|
router,
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import errGif from '@/assets/401_images/401.gif'
|
import errGif from '@/assets/401_images/401.gif'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Page401',
|
name: 'Page401',
|
||||||
data() {
|
data() {
|
||||||
|
|||||||
@@ -15,8 +15,7 @@
|
|||||||
:headers="headers"
|
:headers="headers"
|
||||||
:action="updateAvatarApi"
|
:action="updateAvatarApi"
|
||||||
class="avatar-uploader">
|
class="avatar-uploader">
|
||||||
<img v-if="user.avatar" :src="user.avatar" title="点击上传头像" class="avatar">
|
<img :src="user.avatar ? baseApi + '/avatar/' + user.avatar : Avatar" title="点击上传头像" class="avatar">
|
||||||
<i v-else class="el-icon-plus avatar-uploader-icon"/>
|
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</div>
|
</div>
|
||||||
<ul class="user-info">
|
<ul class="user-info">
|
||||||
@@ -86,12 +85,14 @@ import { getToken } from '@/utils/auth'
|
|||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import { parseTime } from '@/utils/index'
|
import { parseTime } from '@/utils/index'
|
||||||
import initData from '@/mixins/initData'
|
import initData from '@/mixins/initData'
|
||||||
|
import Avatar from '@/assets/avatar/avatar.png'
|
||||||
export default {
|
export default {
|
||||||
name: 'Center',
|
name: 'Center',
|
||||||
components: { updatePass, updateEmail },
|
components: { updatePass, updateEmail },
|
||||||
mixins: [initData],
|
mixins: [initData],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
Avatar: Avatar,
|
||||||
ico: 'el-icon-refresh',
|
ico: 'el-icon-refresh',
|
||||||
headers: {
|
headers: {
|
||||||
'Authorization': 'Bearer ' + getToken()
|
'Authorization': 'Bearer ' + getToken()
|
||||||
@@ -101,7 +102,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
'user',
|
'user',
|
||||||
'updateAvatarApi'
|
'updateAvatarApi',
|
||||||
|
'baseApi'
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-tabs v-model="activeName" style="padding-left: 8px;">
|
<el-tabs v-model="activeName" style="padding-left: 8px;" @tab-click="tabClick">
|
||||||
<el-tab-pane label="本地存储" name="first">
|
<el-tab-pane label="本地存储" name="first">
|
||||||
<Local/>
|
<Local ref="local"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="七牛云存储" name="second">
|
<el-tab-pane label="七牛云存储" name="second">
|
||||||
<QiNiu/>
|
<QiNiu ref="qiNiu"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import QiNiu from './qiniu/list'
|
import QiNiu from './qiniu/index'
|
||||||
import Local from './local/index'
|
import Local from './local/index'
|
||||||
import '@/styles/description.scss'
|
import '@/styles/description.scss'
|
||||||
export default {
|
export default {
|
||||||
@@ -20,6 +20,15 @@ export default {
|
|||||||
return {
|
return {
|
||||||
activeName: 'first'
|
activeName: 'first'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
tabClick(name) {
|
||||||
|
if (this.activeName === 'first') {
|
||||||
|
this.$refs.local.init()
|
||||||
|
} else {
|
||||||
|
this.$refs.qiNiu.init()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
:on-success="handleSuccess"
|
:on-success="handleSuccess"
|
||||||
:on-error="handleError"
|
:on-error="handleError"
|
||||||
:action="fileUploadApi + '?name=' + form.name">
|
:action="fileUploadApi + '?name=' + form.name">
|
||||||
<div class="eladmin-upload"><i class="el-icon-upload"/> 点击上传</div>
|
<div class="eladmin-upload"><i class="el-icon-upload"/> 添加文件</div>
|
||||||
<div slot="tip" class="el-upload__tip">可上传任意格式文件,且不超过100M</div>
|
<div slot="tip" class="el-upload__tip">可上传任意格式文件,且不超过100M</div>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -15,18 +15,30 @@
|
|||||||
icon="el-icon-upload"
|
icon="el-icon-upload"
|
||||||
@click="add">文件上传</el-button>
|
@click="add">文件上传</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 多选删除 -->
|
||||||
|
<div style="display: inline-block;margin: 0px 2px;">
|
||||||
|
<el-button
|
||||||
|
:loading="delAllLoading"
|
||||||
|
:disabled="data.length === 0 || $refs.table.selection.length === 0"
|
||||||
|
class="filter-item"
|
||||||
|
size="mini"
|
||||||
|
type="danger"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="open">删除</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--表单组件-->
|
<!--表单组件-->
|
||||||
<eForm ref="form" :is-add="isAdd"/>
|
<eForm ref="form" :is-add="isAdd"/>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;">
|
<el-table v-loading="loading" ref="table" :data="data" size="small" style="width: 100%;">
|
||||||
|
<el-table-column type="selection" width="55"/>
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="name" label="文件名">
|
<el-table-column :show-overflow-tooltip="true" prop="name" label="文件名">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-link :href="baseApi + '/file/' + scope.row.type + '/' + scope.row.realName" target="_blank" type="primary">{{ scope.row.name }}</el-link>
|
<el-link :underline="false" :href="baseApi + '/file/' + scope.row.type + '/' + scope.row.realName" target="_blank" type="primary">{{ scope.row.name }}</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="suffix" label="后缀"/>
|
<el-table-column prop="suffix" label="文件类型"/>
|
||||||
<el-table-column prop="type" label="类型"/>
|
<el-table-column prop="type" label="类别"/>
|
||||||
<el-table-column prop="size" label="大小"/>
|
<el-table-column prop="size" label="大小"/>
|
||||||
<el-table-column prop="operate" label="操作人"/>
|
<el-table-column prop="operate" label="操作人"/>
|
||||||
<el-table-column prop="createTime" label="创建日期">
|
<el-table-column prop="createTime" label="创建日期">
|
||||||
@@ -72,7 +84,7 @@
|
|||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import checkPermission from '@/utils/permission'
|
import checkPermission from '@/utils/permission'
|
||||||
import initData from '@/mixins/initData'
|
import initData from '@/mixins/initData'
|
||||||
import { del } from '@/api/localStorage'
|
import { del, delAll } from '@/api/localStorage'
|
||||||
import { parseTime } from '@/utils/index'
|
import { parseTime } from '@/utils/index'
|
||||||
import eForm from './form'
|
import eForm from './form'
|
||||||
export default {
|
export default {
|
||||||
@@ -80,7 +92,7 @@ export default {
|
|||||||
mixins: [initData],
|
mixins: [initData],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
delLoading: false,
|
delLoading: false, delAllLoading: false,
|
||||||
queryTypeOptions: [
|
queryTypeOptions: [
|
||||||
{ key: 'name', display_name: '文件名' },
|
{ key: 'name', display_name: '文件名' },
|
||||||
{ key: 'suffix', display_name: '后缀' },
|
{ key: 'suffix', display_name: '后缀' },
|
||||||
@@ -141,6 +153,36 @@ export default {
|
|||||||
name: data.name
|
name: data.name
|
||||||
}
|
}
|
||||||
_this.dialog = true
|
_this.dialog = true
|
||||||
|
},
|
||||||
|
doDelete() {
|
||||||
|
this.delAllLoading = true
|
||||||
|
const data = this.$refs.table.selection
|
||||||
|
const ids = []
|
||||||
|
for (let i = 0; i < data.length; i++) {
|
||||||
|
ids.push(data[i].id)
|
||||||
|
}
|
||||||
|
delAll(ids).then(res => {
|
||||||
|
this.delAllLoading = false
|
||||||
|
this.dleChangePage(ids.length)
|
||||||
|
this.init()
|
||||||
|
this.$notify({
|
||||||
|
title: '删除成功',
|
||||||
|
type: 'success',
|
||||||
|
duration: 2500
|
||||||
|
})
|
||||||
|
}).catch(err => {
|
||||||
|
this.delAllLoading = false
|
||||||
|
console.log(err.response.data.message)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
open() {
|
||||||
|
this.$confirm('你确定删除选中的数据吗?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
this.doDelete()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
class="filter-item"
|
class="filter-item"
|
||||||
size="mini"
|
size="mini"
|
||||||
type="success"
|
type="success"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-s-tools"
|
||||||
@click="doConfig">七牛配置</el-button>
|
@click="doConfig">七牛配置</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- 多选删除 -->
|
<!-- 多选删除 -->
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<el-table-column type="selection" width="55"/>
|
<el-table-column type="selection" width="55"/>
|
||||||
<el-table-column :show-overflow-tooltip="true" label="文件名">
|
<el-table-column :show-overflow-tooltip="true" label="文件名">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ scope.row.key }}</span>
|
<a href="JavaScript:;" class="el-link el-link--primary" target="_blank" type="primary" @click="download(scope.row.id)">{{ scope.row.key }}</a>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :show-overflow-tooltip="true" label="文件类型">
|
<el-table-column :show-overflow-tooltip="true" label="文件类型">
|
||||||
@@ -72,14 +72,8 @@
|
|||||||
<span>{{ parseTime(scope.row.updateTime) }}</span>
|
<span>{{ parseTime(scope.row.updateTime) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="130px" align="center" fixed="right">
|
<el-table-column label="操作" width="100px" align="center" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
|
||||||
:loading="downloadLoading"
|
|
||||||
size="mini"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-download"
|
|
||||||
@click="download(scope.row.id)"/>
|
|
||||||
<el-popover
|
<el-popover
|
||||||
:ref="scope.row.id"
|
:ref="scope.row.id"
|
||||||
placement="top"
|
placement="top"
|
||||||
@@ -140,11 +134,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.init()
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
parseTime,
|
parseTime,
|
||||||
beforeInit() {
|
beforeInit() {
|
||||||
Reference in New Issue
Block a user