用户支持分组,wiki空间支持按分组授权,细节优化
This commit is contained in:
@@ -37,6 +37,21 @@ export default {
|
||||
},
|
||||
pageUnlock: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/page/unlock', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
spaceFavoriteUpdate: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/space/favorite/update', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
spaceAuthAssign: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/space/auth/assign', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
spaceAuthList: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/space/auth/list', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
spaceSettingList: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/space/setting/list', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
spaceSettingUpdate: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/space/setting/update', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
spaceList: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/space/list', method: 'post', data: Qs.stringify(data)});
|
||||
|
||||
@@ -17,6 +17,9 @@ export default {
|
||||
getUserBaseInfo: data => {
|
||||
return request({url: '/zyplayer-doc-wiki/common/user/base', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
userGroupList: data => {
|
||||
return request({url: '/user/group/list', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
getUserMessageList: data => {
|
||||
return request({url: '/user/message/list', method: 'post', data: Qs.stringify(data)});
|
||||
},
|
||||
|
||||
@@ -84,72 +84,13 @@
|
||||
<router-view @loadPageList="loadPageList"
|
||||
@changeExpandedKeys="changeWikiPageExpandedKeys"
|
||||
@switchSpace="switchSpacePage"
|
||||
@loadSpace="loadSpaceList"
|
||||
:spaceId="choiceSpace"
|
||||
:spaceInfo="getSpaceInfo(choiceSpace)">
|
||||
</router-view>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
<!--新建空间弹窗-->
|
||||
<el-dialog title="创建空间" :visible.sync="newSpaceDialogVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-form label-width="100px" :model="newSpaceForm" :rules="newSpaceFormRules" ref="newSpaceForm">
|
||||
<el-form-item label="空间名:" prop="name">
|
||||
<el-input v-model="newSpaceForm.name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="空间描述:" prop="spaceExplain">
|
||||
<el-input v-model="newSpaceForm.spaceExplain"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="空间开放:">
|
||||
<el-switch v-model="newSpaceForm.openDoc" inactive-text="需要登录" :inactive-value="0" active-text="开放访问" :active-value="1"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="目录加载:">
|
||||
<el-switch v-model="newSpaceForm.treeLazyLoad" inactive-text="预先加载" :inactive-value="0" active-text="延迟加载" :active-value="1"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="空间类型:">
|
||||
<el-select v-model="newSpaceForm.type" filterable placeholder="选择类型" style="width: 100%;">
|
||||
<el-option :key="1" label="公共空间" :value="1">
|
||||
<span style="float: left">公共空间</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px;">属于公共,登录用户可访问、编辑</span>
|
||||
</el-option>
|
||||
<el-option :key="2" label="个人空间" :value="2">
|
||||
<span style="float: left">个人空间</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px;">属于个人,所有登录用户可访问</span>
|
||||
</el-option>
|
||||
<el-option :key="3" label="隐私空间" :value="3">
|
||||
<span style="float: left">隐私空间</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px;">属于个人,仅创建者可访问</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" v-if="newSpaceForm.id > 0" @click="onNewSpaceSubmit('newSpaceForm')">保存修改</el-button>
|
||||
<el-button type="primary" v-else @click="onNewSpaceSubmit('newSpaceForm')">立即创建</el-button>
|
||||
<el-button @click="onNewSpaceCancel">取消</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
<!--管理空间弹窗-->
|
||||
<el-dialog title="管理空间" :visible.sync="manageSpaceDialogVisible" :close-on-click-modal="false" width="80%">
|
||||
<el-table :data="spaceList" border style="width: 100%; margin-bottom: 5px;" max-height="500">
|
||||
<el-table-column prop="id" label="ID" width="60"></el-table-column>
|
||||
<el-table-column prop="name" label="名字"></el-table-column>
|
||||
<el-table-column prop="spaceExplain" label="说明"></el-table-column>
|
||||
<el-table-column label="开放地址">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" @click="showOpenSpace(scope.row.uuid)" v-if="scope.row.openDoc == 1">{{scope.row.name}}</el-button>
|
||||
<span v-else>暂未开放</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUserName" label="创建人"></el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间"></el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small" type="primary" v-on:click="editSpaceInfo(scope.row)">编辑</el-button>
|
||||
<el-button size="small" type="danger" v-on:click="deleteSpaceInfo(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
<!--关于弹窗-->
|
||||
<el-dialog title="关于zyplayer-doc-wiki" :visible.sync="aboutDialogVisible" width="600px">
|
||||
<el-form>
|
||||
@@ -168,12 +109,14 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
<create-space ref="createSpace" @success="loadSpaceList"></create-space>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import userApi from '../../common/api/user'
|
||||
import pageApi from '../../common/api/page'
|
||||
import CreateSpace from '../space/CreateSpace'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
@@ -191,15 +134,6 @@
|
||||
spaceList:[],
|
||||
choiceSpace: "",
|
||||
nowSpaceShow: {},
|
||||
newSpaceDialogVisible: false,
|
||||
manageSpaceDialogVisible: false,
|
||||
newSpaceForm: {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1},
|
||||
newSpaceFormRules: {
|
||||
name: [
|
||||
{required: true, message: '请输入空间名', trigger: 'blur'},
|
||||
{min: 2, max: 25, message: '长度在 2 到 25 个字符', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
nowPageId: '',
|
||||
// 依据目录树存储的map全局对象
|
||||
treePathDataMap: new Map(),
|
||||
@@ -223,6 +157,9 @@
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"create-space": CreateSpace,
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
mounted: function () {
|
||||
@@ -323,38 +260,14 @@
|
||||
// issues:I2CG72 忽略大小写
|
||||
let name = data.name.toLowerCase();
|
||||
return name.indexOf(value.toLowerCase()) !== -1;
|
||||
},
|
||||
showOpenSpace(space) {
|
||||
let routeUrl = this.$router.resolve({path: '/page/share/home', query: {space: space}});
|
||||
window.open(routeUrl.href, '_blank');
|
||||
},
|
||||
editSpaceInfo(row) {
|
||||
this.newSpaceForm = {
|
||||
id: row.id, name: row.name, spaceExplain: row.spaceExplain,
|
||||
treeLazyLoad: row.treeLazyLoad, openDoc: row.openDoc, type: row.type
|
||||
};
|
||||
this.newSpaceDialogVisible = true;
|
||||
},
|
||||
deleteSpaceInfo(row) {
|
||||
this.$confirm('确定要删除此空间及下面的所有文档吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
let param = {id: row.id, delFlag: 1};
|
||||
pageApi.updateSpace(param).then(() => {
|
||||
this.loadSpaceList();
|
||||
});
|
||||
});
|
||||
},
|
||||
spaceChangeEvents(data) {
|
||||
if (data == 0) {
|
||||
// 新建空间
|
||||
this.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1};
|
||||
this.newSpaceDialogVisible = true;
|
||||
this.$refs.createSpace.show();
|
||||
} else if (data == -1) {
|
||||
// 管理空间
|
||||
this.manageSpaceDialogVisible = true;
|
||||
this.$router.push({path: '/space/manage'});
|
||||
} else {
|
||||
this.choiceSpace = data;
|
||||
for (let i = 0; i < this.spaceList.length; i++) {
|
||||
@@ -368,26 +281,27 @@
|
||||
this.$router.push({path: '/home', query: {spaceId: data}});
|
||||
}
|
||||
},
|
||||
loadSpaceList() {
|
||||
loadSpaceList(spaceId) {
|
||||
pageApi.spaceList({}).then(json => {
|
||||
this.spaceList = json.data || [];
|
||||
let spaceOptions = [];
|
||||
for (let i = 0; i < this.spaceList.length; i++) {
|
||||
spaceOptions.push({
|
||||
label: this.spaceList[i].name, value: this.spaceList[i].id
|
||||
});
|
||||
}
|
||||
this.spaceList.forEach(item => spaceOptions.push({label: item.name, value: item.id}));
|
||||
this.spaceOptions = spaceOptions;
|
||||
if (this.spaceList.length > 0) {
|
||||
let spaceId = this.spaceList[0].id;
|
||||
this.nowSpaceShow = this.spaceList[0];
|
||||
this.choiceSpace = spaceId;
|
||||
if (this.spaceList.length > 0) {
|
||||
let nowSpaceId = spaceId;
|
||||
let nowSpaceShow = this.spaceList.find(item => item.id == spaceId);
|
||||
if (!nowSpaceShow) {
|
||||
nowSpaceShow = this.spaceList[0];
|
||||
nowSpaceId = nowSpaceShow.id;
|
||||
}
|
||||
this.nowSpaceShow = nowSpaceShow;
|
||||
this.choiceSpace = nowSpaceId;
|
||||
this.nowPageId = '';
|
||||
this.doGetPageList(null);
|
||||
// TODO 在首页时跳转
|
||||
try {
|
||||
if (this.$router.app._route.path == "/home") {
|
||||
this.$router.push({path: '/home', query: {spaceId: spaceId}});
|
||||
this.$router.push({path: '/home', query: {spaceId: nowSpaceId}});
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
@@ -452,38 +366,6 @@
|
||||
}
|
||||
return {};
|
||||
},
|
||||
onNewSpaceSubmit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
let param = {
|
||||
id: this.newSpaceForm.id,
|
||||
name: this.newSpaceForm.name,
|
||||
type: this.newSpaceForm.type,
|
||||
openDoc: this.newSpaceForm.openDoc,
|
||||
spaceExplain: this.newSpaceForm.spaceExplain,
|
||||
treeLazyLoad: this.newSpaceForm.treeLazyLoad,
|
||||
};
|
||||
pageApi.updateSpace(param).then(json => {
|
||||
if (param.id > 0) {
|
||||
this.loadSpaceList();
|
||||
} else {
|
||||
this.spaceList.push(json.data);
|
||||
this.spaceOptions.push({
|
||||
label: json.data.name, value: json.data.id
|
||||
});
|
||||
this.nowSpaceShow = json.data;
|
||||
this.choiceSpace = json.data.id;
|
||||
this.doGetPageList(null);
|
||||
}
|
||||
this.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1};
|
||||
this.newSpaceDialogVisible = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
onNewSpaceCancel() {
|
||||
this.newSpaceDialogVisible = false;
|
||||
},
|
||||
checkSystemUpgrade() {
|
||||
userApi.systemUpgradeInfo({}).then(json => {
|
||||
if (!!json.data) {
|
||||
|
||||
121
zyplayer-doc-ui/wiki-ui/src/components/space/CreateSpace.vue
Normal file
121
zyplayer-doc-ui/wiki-ui/src/components/space/CreateSpace.vue
Normal file
@@ -0,0 +1,121 @@
|
||||
<template>
|
||||
<div class="create-space-vue">
|
||||
<!--新建空间弹窗-->
|
||||
<el-dialog title="创建空间" :visible.sync="newSpaceDialogVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-form label-width="100px" :model="newSpaceForm" :rules="newSpaceFormRules" ref="newSpaceForm">
|
||||
<el-form-item label="空间名:" prop="name">
|
||||
<el-input v-model="newSpaceForm.name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="空间描述:" prop="spaceExplain">
|
||||
<el-input v-model="newSpaceForm.spaceExplain"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="空间开放:">
|
||||
<el-switch v-model="newSpaceForm.openDoc" inactive-text="需要登录" :inactive-value="0" active-text="开放访问" :active-value="1"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="目录加载:">
|
||||
<el-switch v-model="newSpaceForm.treeLazyLoad" inactive-text="预先加载" :inactive-value="0" active-text="延迟加载" :active-value="1"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="空间类型:">
|
||||
<el-select v-model="newSpaceForm.type" filterable placeholder="选择类型" style="width: 100%;">
|
||||
<el-option :key="1" label="公共空间" :value="1">
|
||||
<span style="float: left">公共空间</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px;">属于公共,登录用户可访问、编辑</span>
|
||||
</el-option>
|
||||
<el-option :key="2" label="个人空间" :value="2">
|
||||
<span style="float: left">个人空间</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px;">属于个人,所有登录用户可访问</span>
|
||||
</el-option>
|
||||
<el-option :key="3" label="隐私空间" :value="3">
|
||||
<span style="float: left">隐私空间</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px;">属于个人,仅创建者可访问</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" v-if="newSpaceForm.id > 0" @click="onNewSpaceSubmit('newSpaceForm')">保存修改</el-button>
|
||||
<el-button type="primary" v-else @click="onNewSpaceSubmit('newSpaceForm')">立即创建</el-button>
|
||||
<el-button @click="onNewSpaceCancel">取消</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import pageApi from '../../common/api/page'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
newSpaceDialogVisible: false,
|
||||
manageSpaceDialogVisible: false,
|
||||
newSpaceForm: {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1},
|
||||
newSpaceFormRules: {
|
||||
name: [
|
||||
{required: true, message: '请输入空间名', trigger: 'blur'},
|
||||
{min: 2, max: 25, message: '长度在 2 到 25 个字符', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
editSpaceId: ''
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
show(spaceId) {
|
||||
this.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1};
|
||||
this.editSpaceId = spaceId || '';
|
||||
if (!!this.editSpaceId) {
|
||||
pageApi.spaceList({id: this.editSpaceId}).then(json => {
|
||||
let spaceList = json.data || [];
|
||||
if (spaceList.length > 0) {
|
||||
this.newSpaceForm = spaceList[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
this.newSpaceDialogVisible = true;
|
||||
},
|
||||
onNewSpaceSubmit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
let param = {
|
||||
id: this.newSpaceForm.id,
|
||||
name: this.newSpaceForm.name,
|
||||
type: this.newSpaceForm.type,
|
||||
openDoc: this.newSpaceForm.openDoc,
|
||||
spaceExplain: this.newSpaceForm.spaceExplain,
|
||||
treeLazyLoad: this.newSpaceForm.treeLazyLoad,
|
||||
};
|
||||
pageApi.updateSpace(param).then(json => {
|
||||
this.$message.success("创建成功");
|
||||
this.newSpaceDialogVisible = false;
|
||||
this.$emit("success", json.data.id);
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
onNewSpaceCancel() {
|
||||
this.newSpaceDialogVisible = false;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.create-space-vue .empty-news{text-align: center;padding: 100px;}
|
||||
|
||||
.create-space-vue .text-link {
|
||||
color: #444;
|
||||
/*cursor: pointer;*/
|
||||
/*font-weight: bold;*/
|
||||
}
|
||||
.create-space-vue .line-box{color: #666;border-bottom: 1px solid #eee;padding: 20px 0;}
|
||||
.create-space-vue .line-title{font-size: 14px;}
|
||||
.create-space-vue .page-preview-box{}
|
||||
.create-space-vue .page-preview-title{font-size: 18px;margin: 10px 0 5px 0;color: #3a8ee6;cursor: pointer;}
|
||||
.create-space-vue .page-preview-content{font-size: 16px;margin-bottom: 5px;}
|
||||
.create-space-vue .zan-img{vertical-align: middle;margin-top: -3px;}
|
||||
.create-space-vue .view-img{font-size: 16px;color: #666;}
|
||||
|
||||
.create-space-vue .page-info-box{text-align: right;margin: 20px 0 50px 0;}
|
||||
</style>
|
||||
|
||||
@@ -15,6 +15,7 @@ let routes = [
|
||||
{path: '/user/myInfo', name: 'WIKI-我的信息', component: () => import('@/views/user/MyInfo')},
|
||||
{path: '/page/show', name: 'WIKI-内容展示', component: () => import('@/views/page/Show')},
|
||||
{path: '/page/edit', name: 'WIKI-编辑内容', component: () => import('@/views/page/Edit')},
|
||||
{path: '/space/manage', name: 'WIKI-空间管理', component: () => import('@/views/space/Manage')},
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" width="180px"></el-table-column>
|
||||
<el-table-column prop="downloadNum" label="下载次数" width="80px"></el-table-column>
|
||||
<el-table-column label="操作" width="100px" v-if="wikiPageAuth.canUploadFile==1">
|
||||
<el-table-column label="操作" width="100px" v-if="wikiPageAuth.canDeleteFile==1">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small" v-on:click="deletePageFile(scope.row)">删除</el-button>
|
||||
</template>
|
||||
@@ -168,7 +168,7 @@
|
||||
<!--人员权限弹窗-->
|
||||
<el-dialog title="页面权限" :visible.sync="pageAuthDialogVisible" width="900px">
|
||||
<el-row>
|
||||
<el-select v-model="pageAuthNewUser" filterable remote reserve-keyword
|
||||
<el-select v-model="pageAuthNewUser" filterable remote reserve-keyword autoComplete="new-password"
|
||||
placeholder="请输入名字、邮箱、账号搜索用户" :remote-method="getSearchUserList"
|
||||
:loading="pageAuthUserLoading" style="width: 750px;margin-right: 10px;">
|
||||
<el-option v-for="item in searchUserList" :key="item.id" :label="item.userName" :value="item.id"></el-option>
|
||||
@@ -272,12 +272,9 @@
|
||||
});
|
||||
},
|
||||
getSearchUserList(query) {
|
||||
if (query == '') {
|
||||
return;
|
||||
}
|
||||
if (query == '') return;
|
||||
this.pageAuthUserLoading = true;
|
||||
var param = {search: query};
|
||||
userApi.getUserBaseInfo(param).then(json => {
|
||||
userApi.getUserBaseInfo({search: query}).then(json => {
|
||||
this.searchUserList = json.data || [];
|
||||
this.pageAuthUserLoading = false;
|
||||
});
|
||||
@@ -306,6 +303,10 @@
|
||||
this.$message.warning("请先选择用户");
|
||||
return;
|
||||
}
|
||||
if (!!this.searchUserList.find(item => item.userId == this.pageAuthNewUser)) {
|
||||
this.pageAuthNewUser = "";
|
||||
return;
|
||||
}
|
||||
var userName = "";
|
||||
for (var i = 0; i < this.searchUserList.length; i++) {
|
||||
if (this.pageAuthNewUser == this.searchUserList[i].id) {
|
||||
@@ -483,6 +484,7 @@
|
||||
canEdit: result.canEdit,
|
||||
canDelete: result.canDelete,
|
||||
canUploadFile: result.canUploadFile,
|
||||
canDeleteFile: result.canDeleteFile,
|
||||
canConfigAuth: result.canConfigAuth,
|
||||
};
|
||||
if (this.wikiPage.editorType === 2) {
|
||||
|
||||
253
zyplayer-doc-ui/wiki-ui/src/views/space/Manage.vue
Normal file
253
zyplayer-doc-ui/wiki-ui/src/views/space/Manage.vue
Normal file
@@ -0,0 +1,253 @@
|
||||
<template>
|
||||
<div style="min-height: 100%;" class="space-manage-vue">
|
||||
<el-breadcrumb separator-class="el-icon-arrow-right" style="padding: 20px 10px;">
|
||||
<el-breadcrumb-item>WIKI文档</el-breadcrumb-item>
|
||||
<el-breadcrumb-item>空间管理</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
<div style="max-width: 1200px;margin: 0 auto;background: #fff;padding: 20px;min-height: 100%;box-sizing: border-box;">
|
||||
<div style="text-align: right;margin-bottom: 10px;">
|
||||
<span style="float:left;line-height: 40px;">
|
||||
仅展示我收藏的空间:
|
||||
<el-switch v-model="userSetting.wiki_only_show_favorite" inactive-value="0" active-value="1" @change="wikiOnlyShowFavoriteChange"></el-switch>
|
||||
<el-tooltip class="item" effect="dark" content="控制左上角空间下拉列表仅展示我收藏的空间" placement="top-start">
|
||||
<i class="el-icon-warning-outline" style="vertical-align: middle;margin-left: 10px;color: #999;"></i>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-button @click="loadSpaceList" icon="refresh" :loading="spaceListLoading">刷新</el-button>
|
||||
<el-button type="primary" @click="showCreateSpace" icon="el-icon-plus">创建空间</el-button>
|
||||
</div>
|
||||
<el-table :data="spaceList" border style="width: 100%; margin-bottom: 5px;">
|
||||
<el-table-column prop="id" label="ID" width="60"></el-table-column>
|
||||
<el-table-column prop="name" label="名字"></el-table-column>
|
||||
<el-table-column prop="spaceExplain" label="说明"></el-table-column>
|
||||
<el-table-column label="开放地址">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" @click="showOpenSpace(scope.row.uuid)" v-if="scope.row.openDoc == 1">{{scope.row.name}}</el-button>
|
||||
<span v-else>暂未开放</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUserName" label="创建人"></el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间"></el-table-column>
|
||||
<el-table-column prop="favorite" label="收藏" width="60">
|
||||
<template slot-scope="scope">
|
||||
<i class="el-icon-star-on favorite-icon" v-if="scope.row.favorite == 1" @click="updateSpaceFavorite(scope.row)"></i>
|
||||
<i class="el-icon-star-off favorite-icon" v-else @click="updateSpaceFavorite(scope.row)"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="scope" v-if="userSelfInfo.id == scope.row.createUserId">
|
||||
<el-button size="small" type="primary" v-on:click="editSpaceInfo(scope.row)">编辑</el-button>
|
||||
<el-button size="small" type="warning" v-on:click="editSpaceAuth(scope.row)">授权</el-button>
|
||||
<el-button size="small" type="danger" v-on:click="deleteSpaceInfo(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<!--分组权限弹窗-->
|
||||
<el-dialog title="权限管理" :visible.sync="spaceAuthDialogVisible" width="900px">
|
||||
<el-row>
|
||||
<el-select v-model="spaceAuthNewGroupId" filterable placeholder="请选择分组" style="width: 750px;margin-right: 10px;">
|
||||
<el-option v-for="item in searchGroupList" :key="item.id" :label="searchGroupMap[item.id]" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
<el-button v-on:click="addSpaceAuthUserGroup">添加</el-button>
|
||||
</el-row>
|
||||
<el-table :data="spaceAuthGroupList" border style="width: 100%; margin: 10px 0;">
|
||||
<el-table-column prop="groupId" label="分组名" width="150">
|
||||
<template slot-scope="scope">{{searchGroupMap[scope.row.groupId]}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="权限">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.editPage">编辑</el-checkbox>
|
||||
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.deletePage">删除</el-checkbox>
|
||||
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.pageFileUpload">文件上传</el-checkbox>
|
||||
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.pageFileDelete">文件删除</el-checkbox>
|
||||
<el-checkbox :true-label="1" :false-label="0" v-model="scope.row.pageAuthManage">权限管理</el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small" type="danger" plain @click="deleteGroupSpaceAuth(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div style="text-align: right;">
|
||||
<el-button v-on:click="manageUserGroup">分组管理</el-button>
|
||||
<el-button type="primary" v-on:click="saveGroupSpaceAuth">保存配置</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<create-space ref="createSpace" @success="loadSpaceList"></create-space>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import pageApi from '../../common/api/page'
|
||||
import userApi from '../../common/api/user'
|
||||
import CreateSpace from '../../components/space/CreateSpace'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
spaceListLoading: false,
|
||||
spaceOptions: [],
|
||||
spaceList:[],
|
||||
choiceSpace: "",
|
||||
nowSpaceShow: {},
|
||||
newSpaceDialogVisible: false,
|
||||
manageSpaceDialogVisible: false,
|
||||
newSpaceForm: {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1},
|
||||
newSpaceFormRules: {
|
||||
name: [
|
||||
{required: true, message: '请输入空间名', trigger: 'blur'},
|
||||
{min: 2, max: 25, message: '长度在 2 到 25 个字符', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
userSelfInfo: {},
|
||||
// 空间授权
|
||||
editSpaceId: '',
|
||||
spaceAuthDialogVisible: false,
|
||||
spaceAuthNewGroupId: '',
|
||||
spaceAuthGroupLoading: false,
|
||||
searchGroupList: [],
|
||||
searchGroupMap: {},
|
||||
spaceAuthGroupList: [],
|
||||
// 设置
|
||||
userSetting: {
|
||||
wiki_only_show_favorite: 0,
|
||||
},
|
||||
};
|
||||
},
|
||||
components: {
|
||||
"create-space": CreateSpace,
|
||||
},
|
||||
mounted() {
|
||||
this.loadSpaceList();
|
||||
this.getSelfUserInfo();
|
||||
this.getSpaceSettingList();
|
||||
},
|
||||
methods: {
|
||||
showOpenSpace(space) {
|
||||
let routeUrl = this.$router.resolve({path: '/page/share/home', query: {space: space}});
|
||||
window.open(routeUrl.href, '_blank');
|
||||
},
|
||||
showCreateSpace() {
|
||||
this.$refs.createSpace.show();
|
||||
},
|
||||
editSpaceInfo(row) {
|
||||
this.$refs.createSpace.show(row.id);
|
||||
},
|
||||
addSpaceAuthUserGroup() {
|
||||
if (!this.spaceAuthNewGroupId) {
|
||||
this.$message.warning("请先选择分组");
|
||||
return;
|
||||
}
|
||||
if (!!this.spaceAuthGroupList.find(item => item.groupId == this.spaceAuthNewGroupId)) {
|
||||
this.spaceAuthNewGroupId = "";
|
||||
return;
|
||||
}
|
||||
this.spaceAuthGroupList.push({
|
||||
groupId: this.spaceAuthNewGroupId,
|
||||
editPage: 0,
|
||||
commentPage: 0,
|
||||
deletePage: 0,
|
||||
pageFileUpload: 0,
|
||||
pageFileDelete: 0,
|
||||
pageAuthManage: 0,
|
||||
});
|
||||
this.spaceAuthNewGroupId = '';
|
||||
},
|
||||
updateSpaceFavorite(row) {
|
||||
let delFlag = (row.favorite == 1) ? 1 : 0;
|
||||
pageApi.spaceFavoriteUpdate({spaceId: row.id, delFlag: delFlag}).then(json => {
|
||||
row.favorite = (row.favorite == 1) ? 0 : 1;
|
||||
});
|
||||
},
|
||||
saveGroupSpaceAuth() {
|
||||
let param = {spaceId: this.editSpaceId, authList: JSON.stringify(this.spaceAuthGroupList)};
|
||||
pageApi.spaceAuthAssign(param).then(json => {
|
||||
this.$message.success("授权成功!");
|
||||
});
|
||||
},
|
||||
manageUserGroup() {
|
||||
let manageUrl = location.href.substring(0, location.href.indexOf("/doc-wiki")) + '#/console/userGroupList';
|
||||
window.open(manageUrl, '_blank');
|
||||
},
|
||||
deleteGroupSpaceAuth(row) {
|
||||
this.spaceAuthGroupList = this.spaceAuthGroupList.filter(item => item.groupId != row.groupId);
|
||||
},
|
||||
editSpaceAuth(row) {
|
||||
this.editSpaceId = row.id;
|
||||
this.spaceAuthNewGroupId = '';
|
||||
this.spaceAuthGroupList = [];
|
||||
userApi.userGroupList().then(json => {
|
||||
this.searchGroupList = json.data || [];
|
||||
this.searchGroupList.forEach(item => this.searchGroupMap[item.id] = item.name);
|
||||
});
|
||||
pageApi.spaceAuthList({spaceId: row.id}).then(json => {
|
||||
this.spaceAuthGroupList = json.data || [];
|
||||
this.spaceAuthDialogVisible = true;
|
||||
});
|
||||
},
|
||||
deleteSpaceInfo(row) {
|
||||
this.$confirm('确定要删除此空间及下面的所有文档吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
let param = {id: row.id, delFlag: 1};
|
||||
pageApi.updateSpace(param).then(() => {
|
||||
this.$message.success("删除成功");
|
||||
this.loadSpaceList();
|
||||
this.$emit('loadSpace');
|
||||
});
|
||||
});
|
||||
},
|
||||
loadSpaceList() {
|
||||
this.spaceListLoading = true;
|
||||
pageApi.spaceList({ignoreFavorite: 1}).then(json => {
|
||||
this.spaceList = json.data || [];
|
||||
setTimeout(() => this.spaceListLoading = false, 500);
|
||||
});
|
||||
},
|
||||
wikiOnlyShowFavoriteChange() {
|
||||
let param = {name: 'wiki_only_show_favorite', value: this.userSetting.wiki_only_show_favorite};
|
||||
pageApi.spaceSettingUpdate(param).then(json => {
|
||||
this.$emit('loadSpace');
|
||||
});
|
||||
},
|
||||
getSpaceSettingList() {
|
||||
pageApi.spaceSettingList().then(json => {
|
||||
let result = json.data || {};
|
||||
this.userSetting = {
|
||||
wiki_only_show_favorite: result.wiki_only_show_favorite || 0,
|
||||
};
|
||||
});
|
||||
},
|
||||
getSelfUserInfo() {
|
||||
userApi.getSelfUserInfo().then(json=>{
|
||||
this.userSelfInfo = json.data;
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.space-manage-vue .empty-news{text-align: center;padding: 100px;}
|
||||
|
||||
.space-manage-vue .text-link {
|
||||
color: #444;
|
||||
/*cursor: pointer;*/
|
||||
/*font-weight: bold;*/
|
||||
}
|
||||
.space-manage-vue .line-box{color: #666;border-bottom: 1px solid #eee;padding: 20px 0;}
|
||||
.space-manage-vue .line-title{font-size: 14px;}
|
||||
.space-manage-vue .page-preview-box{}
|
||||
.space-manage-vue .page-preview-title{font-size: 18px;margin: 10px 0 5px 0;color: #3a8ee6;cursor: pointer;}
|
||||
.space-manage-vue .page-preview-content{font-size: 16px;margin-bottom: 5px;}
|
||||
.space-manage-vue .zan-img{vertical-align: middle;margin-top: -3px;}
|
||||
.space-manage-vue .view-img{font-size: 16px;color: #666;}
|
||||
|
||||
.space-manage-vue .page-info-box{text-align: right;margin: 20px 0 50px 0;}
|
||||
.space-manage-vue .favorite-icon{cursor: pointer; font-size: 20px;}
|
||||
.space-manage-vue .favorite-icon.el-icon-star-on{color: #E6A23C; font-size: 24px;}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user