feat:完成权限相关、全局配置、优化细节
This commit is contained in:
@@ -7,10 +7,21 @@
|
|||||||
</el-config-provider>
|
</el-config-provider>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ElConfigProvider } from 'element-plus'
|
import useConfigStore from "@/stores/config";
|
||||||
|
import { ElConfigProvider } from 'element-plus'
|
||||||
|
import {onMounted } from "vue";
|
||||||
|
|
||||||
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
||||||
const locale= zhCn;
|
const locale= zhCn;
|
||||||
|
|
||||||
|
const configStore = useConfigStore();
|
||||||
|
|
||||||
|
//加载全局信息
|
||||||
|
onMounted(async()=>{
|
||||||
|
|
||||||
|
await configStore.getConfig();
|
||||||
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
|
|||||||
9
Yi.BBS.Vue3/src/apis/configApi.js
Normal file
9
Yi.BBS.Vue3/src/apis/configApi.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import myaxios from '@/utils/request'
|
||||||
|
|
||||||
|
//获取配置
|
||||||
|
export function getAll(){
|
||||||
|
return myaxios({
|
||||||
|
url: '/config',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
};
|
||||||
55
Yi.BBS.Vue3/src/components/AgreeInfo.vue
Normal file
55
Yi.BBS.Vue3/src/components/AgreeInfo.vue
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<template>
|
||||||
|
<el-button text @click="agree">
|
||||||
|
<el-icon v-if="data.isAgree" color="#409EFF">
|
||||||
|
<CircleCheckFilled />
|
||||||
|
</el-icon>
|
||||||
|
<el-icon v-else color="#1E1E1E">
|
||||||
|
<Pointer />
|
||||||
|
</el-icon> 点赞:{{ data.agreeNum ?? 0 }}</el-button>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import {onMounted,reactive,watch} from 'vue'
|
||||||
|
import { operate } from '@/apis/agreeApi'
|
||||||
|
|
||||||
|
|
||||||
|
//'isAgree','agreeNum','id'
|
||||||
|
const props = defineProps([ 'data'])
|
||||||
|
|
||||||
|
watch(()=>props,(n)=>{
|
||||||
|
data.id=n.data.id;
|
||||||
|
data.isAgree=n.data.isAgree;
|
||||||
|
data.agreeNum=n.data.agreeNum;
|
||||||
|
},{deep:true})
|
||||||
|
|
||||||
|
|
||||||
|
const data=reactive({
|
||||||
|
id:'',
|
||||||
|
isAgree:false,
|
||||||
|
agreeNum:0
|
||||||
|
})
|
||||||
|
// onMounted(()=>{
|
||||||
|
|
||||||
|
// })
|
||||||
|
//点赞操作
|
||||||
|
const agree = async () => {
|
||||||
|
const response = await operate(data.id)
|
||||||
|
const res = response.data;
|
||||||
|
//提示框,颜色区分
|
||||||
|
if (res.isAgree) {
|
||||||
|
data.isAgree = true;
|
||||||
|
data.agreeNum += 1;
|
||||||
|
ElMessage({
|
||||||
|
message: res.message,
|
||||||
|
type: 'success',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data.isAgree = false;
|
||||||
|
data.agreeNum-= 1;
|
||||||
|
ElMessage({
|
||||||
|
message: res.message,
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -1,14 +1,16 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="botton-div">
|
<div class="botton-div">
|
||||||
<a><el-icon><UserFilled /></el-icon>站长:橙子</a>
|
<a><el-icon><UserFilled /></el-icon>站长:{{configStore.author}}</a>
|
||||||
<a><el-icon><Search /></el-icon>YiFramework意框架</a>
|
<a><el-icon><Search /></el-icon>{{configStore.bottom}}</a>
|
||||||
<a><el-icon><View /></el-icon>关于本站</a>
|
<a><el-icon><View /></el-icon>关于本站</a>
|
||||||
<a><el-icon><Message /></el-icon>建议反馈</a>
|
<a><el-icon><Message /></el-icon>建议反馈</a>
|
||||||
<p></p>
|
<p></p>
|
||||||
<a><el-icon><Position /></el-icon>2023 <span style="color: #40a9ff ;">意社区</span> | 赣ICP备xxxxxx号-4</a>
|
<a ><el-icon><Position /></el-icon>{{configStore.icp}}</a>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import useConfigStore from "@/stores/config";
|
||||||
|
const configStore= useConfigStore();
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.el-icon
|
.el-icon
|
||||||
@@ -31,6 +33,6 @@ a:hover {
|
|||||||
height: auto;
|
height: auto;
|
||||||
width: auto;
|
width: auto;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin: 1rem auto;
|
margin: 0.5rem auto;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
<div class="item-description">
|
<div class="item-description">
|
||||||
{{ discuss.creationTime }}
|
{{ discuss.creationTime }}
|
||||||
</div>
|
</div>
|
||||||
|
<AgreeInfo :data="discuss"/>
|
||||||
|
<!--
|
||||||
<el-button text @click="agree">
|
<el-button text @click="agree">
|
||||||
<el-icon v-if="discuss.isAgree" color="#409EFF">
|
<el-icon v-if="discuss.isAgree" color="#409EFF">
|
||||||
<CircleCheckFilled />
|
<CircleCheckFilled />
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<Pointer />
|
<Pointer />
|
||||||
</el-icon> 点赞:{{ discuss.agreeNum ?? 0 }}</el-button>
|
</el-icon> 点赞:{{ discuss.agreeNum ?? 0 }}</el-button>
|
||||||
<el-button icon="Star" text>
|
<el-button icon="Star" text>
|
||||||
收藏</el-button>
|
收藏</el-button> -->
|
||||||
|
|
||||||
<el-button icon="View" text>
|
<el-button icon="View" text>
|
||||||
浏览数:{{ discuss.seeNum ?? 0 }}</el-button>
|
浏览数:{{ discuss.seeNum ?? 0 }}</el-button>
|
||||||
@@ -69,6 +69,7 @@
|
|||||||
import { h, ref, toRef, onMounted ,reactive} from 'vue'
|
import { h, ref, toRef, onMounted ,reactive} from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import AvatarInfo from './AvatarInfo.vue';
|
import AvatarInfo from './AvatarInfo.vue';
|
||||||
|
import AgreeInfo from './AgreeInfo.vue'
|
||||||
import { operate } from '@/apis/agreeApi'
|
import { operate } from '@/apis/agreeApi'
|
||||||
|
|
||||||
const props = defineProps(['discuss','badge'])
|
const props = defineProps(['discuss','badge'])
|
||||||
|
|||||||
129
Yi.BBS.Vue3/src/components/UserSelectInfo.vue
Normal file
129
Yi.BBS.Vue3/src/components/UserSelectInfo.vue
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<template>
|
||||||
|
<el-select
|
||||||
|
style="width: 600px;"
|
||||||
|
v-model="value"
|
||||||
|
multiple
|
||||||
|
filterable
|
||||||
|
remote
|
||||||
|
reserve-keyword
|
||||||
|
placeholder="请输入用户账号(可多选)"
|
||||||
|
remote-show-suffix
|
||||||
|
:remote-method="remoteMethod"
|
||||||
|
:loading="loading"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in options"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { onMounted, ref,computed } from 'vue'
|
||||||
|
import {listUser} from '@/apis/userApi'
|
||||||
|
const props = defineProps(['modelValue'])
|
||||||
|
const emit = defineEmits(['update:modelValue'])
|
||||||
|
|
||||||
|
|
||||||
|
//这个为可选择的列表,{value,label},value为用户id,label为账号名称(不可重复)
|
||||||
|
const options = ref([])
|
||||||
|
|
||||||
|
const value = computed({
|
||||||
|
get() {
|
||||||
|
return props.modelValue
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
emit('update:modelValue', value)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
|
||||||
|
onMounted( async()=>{
|
||||||
|
|
||||||
|
const response= await listUser({ids:value.value.join()});
|
||||||
|
const res=response.data.items;
|
||||||
|
//下拉列表
|
||||||
|
options.value = res
|
||||||
|
.map((item) => {
|
||||||
|
return { value: `${item.id}`, label: `用户:${item.userName}` }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const loadUser=async(query)=>{
|
||||||
|
const response= await listUser({userName:query});
|
||||||
|
const res=response.data.items;
|
||||||
|
//下拉列表
|
||||||
|
options.value = res
|
||||||
|
.map((item) => {
|
||||||
|
return { value: `${item.id}`, label: `用户:${item.userName}` }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const remoteMethod =async (query) => {
|
||||||
|
if (query) {
|
||||||
|
loading.value = true
|
||||||
|
await loadUser(query);
|
||||||
|
loading.value = false
|
||||||
|
} else {
|
||||||
|
options.value = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const states = [
|
||||||
|
'Alabama',
|
||||||
|
'Alaska',
|
||||||
|
'Arizona',
|
||||||
|
'Arkansas',
|
||||||
|
'California',
|
||||||
|
'Colorado',
|
||||||
|
'Connecticut',
|
||||||
|
'Delaware',
|
||||||
|
'Florida',
|
||||||
|
'Georgia',
|
||||||
|
'Hawaii',
|
||||||
|
'Idaho',
|
||||||
|
'Illinois',
|
||||||
|
'Indiana',
|
||||||
|
'Iowa',
|
||||||
|
'Kansas',
|
||||||
|
'Kentucky',
|
||||||
|
'Louisiana',
|
||||||
|
'Maine',
|
||||||
|
'Maryland',
|
||||||
|
'Massachusetts',
|
||||||
|
'Michigan',
|
||||||
|
'Minnesota',
|
||||||
|
'Mississippi',
|
||||||
|
'Missouri',
|
||||||
|
'Montana',
|
||||||
|
'Nebraska',
|
||||||
|
'Nevada',
|
||||||
|
'New Hampshire',
|
||||||
|
'New Jersey',
|
||||||
|
'New Mexico',
|
||||||
|
'New York',
|
||||||
|
'North Carolina',
|
||||||
|
'North Dakota',
|
||||||
|
'Ohio',
|
||||||
|
'Oklahoma',
|
||||||
|
'Oregon',
|
||||||
|
'Pennsylvania',
|
||||||
|
'Rhode Island',
|
||||||
|
'South Carolina',
|
||||||
|
'South Dakota',
|
||||||
|
'Tennessee',
|
||||||
|
'Texas',
|
||||||
|
'Utah',
|
||||||
|
'Vermont',
|
||||||
|
'Virginia',
|
||||||
|
'Washington',
|
||||||
|
'West Virginia',
|
||||||
|
'Wisconsin',
|
||||||
|
'Wyoming',
|
||||||
|
]
|
||||||
|
</script>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
>
|
>
|
||||||
<el-menu-item class="logo" index="" @click="enterIndex" >
|
<el-menu-item class="logo" index="" @click="enterIndex" >
|
||||||
<img class="img-icon" style="width: 35px; height: 35px" src="@/assets/logo.ico" />Yi意社区</el-menu-item>
|
<img class="img-icon" style="width: 35px; height: 35px" src="@/assets/logo.ico" />{{configStore.name}}</el-menu-item>
|
||||||
<el-menu-item index="1" @click="enterIndex">主页</el-menu-item>
|
<el-menu-item index="1" @click="enterIndex">主页</el-menu-item>
|
||||||
<el-sub-menu index="2">
|
<el-sub-menu index="2">
|
||||||
<template #title>学习</template>
|
<template #title>学习</template>
|
||||||
@@ -56,6 +56,8 @@ import AvatarInfo from '@/components/AvatarInfo.vue'
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import useUserStore from '@/stores/user.js'
|
import useUserStore from '@/stores/user.js'
|
||||||
|
import useConfigStore from "@/stores/config";
|
||||||
|
const configStore= useConfigStore();
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const userStore =useUserStore();
|
const userStore =useUserStore();
|
||||||
const activeIndex = ref('1')
|
const activeIndex = ref('1')
|
||||||
|
|||||||
22
Yi.BBS.Vue3/src/stores/config.js
Normal file
22
Yi.BBS.Vue3/src/stores/config.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import {getAll} from '@/apis/configApi'
|
||||||
|
import { defineStore } from 'pinia'
|
||||||
|
const useConfigStore = defineStore('config',
|
||||||
|
{
|
||||||
|
state: () => ({
|
||||||
|
data: []
|
||||||
|
}),
|
||||||
|
getters: {
|
||||||
|
name:(state)=>state.data.filter(s=> s.configKey=='bbs.site.name').map(x=>x.configValue)[0],
|
||||||
|
author:(state)=>state.data.filter(s=> s.configKey=='bbs.site.author').map(x=>x.configValue)[0],
|
||||||
|
icp:(state)=>state.data.filter(s=> s.configKey=='bbs.site.icp').map(x=>x.configValue)[0],
|
||||||
|
bottom:(state)=>state.data.filter(s=>s.configKey=='bbs.site.bottom').map(x=>x.configValue)[0]
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
// 登录
|
||||||
|
async getConfig() {
|
||||||
|
const response = await getAll();
|
||||||
|
this.data = response.data.items;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
export default useConfigStore;
|
||||||
@@ -20,11 +20,15 @@ const myaxios = axios.create({
|
|||||||
// }
|
// }
|
||||||
// }],
|
// }],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 请求拦截器
|
// 请求拦截器
|
||||||
myaxios.interceptors.request.use(function (config) {
|
myaxios.interceptors.request.use(function (config) {
|
||||||
if (getToken()) {
|
if (getToken()) {
|
||||||
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
<el-divider class="tab-divider" />
|
<el-divider class="tab-divider" />
|
||||||
|
|
||||||
<el-space :size="10" :spacer="spacer">
|
<el-space :size="10" :spacer="spacer">
|
||||||
<el-button icon="Pointer" text> 4</el-button>
|
<AgreeInfo :data="discuss"/>
|
||||||
<el-button icon="Star" text> 0</el-button>
|
<el-button icon="Star" text> 0</el-button>
|
||||||
<el-button icon="Share" text> 分享</el-button>
|
<el-button icon="Share" text> 分享</el-button>
|
||||||
<el-button icon="Operation" text> 操作</el-button>
|
<el-button icon="Operation" text> 操作</el-button>
|
||||||
@@ -134,7 +134,7 @@ import CommentInfo from "@/components/CommentInfo.vue";
|
|||||||
import BottomInfo from '@/components/BottomInfo.vue'
|
import BottomInfo from '@/components/BottomInfo.vue'
|
||||||
import TreeArticleInfo from "@/components/TreeArticleInfo.vue";
|
import TreeArticleInfo from "@/components/TreeArticleInfo.vue";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import AgreeInfo from '@/components/AgreeInfo.vue'
|
||||||
import { get as discussGet, del as discussDel } from "@/apis/discussApi.js";
|
import { get as discussGet, del as discussDel } from "@/apis/discussApi.js";
|
||||||
import { all as articleall, del as articleDel, get as articleGet } from "@/apis/articleApi.js";
|
import { all as articleall, del as articleDel, get as articleGet } from "@/apis/articleApi.js";
|
||||||
//数据定义
|
//数据定义
|
||||||
|
|||||||
@@ -213,4 +213,9 @@ display: flex;
|
|||||||
.collapse-list >>> .el-collapse-item__header {
|
.collapse-list >>> .el-collapse-item__header {
|
||||||
border-bottom-color: #F0F2F5 !important;
|
border-bottom-color: #F0F2F5 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.el-divider
|
||||||
|
{
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -18,6 +18,10 @@
|
|||||||
<el-radio-button label="User">部分用户可见</el-radio-button>
|
<el-radio-button label="User">部分用户可见</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="可见用户:" v-if="route.query.artType == 'discuss' && perRadio=='User'">
|
||||||
|
<UserSelectInfo v-model="editForm.permissionUserIds"/>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<el-form-item v-if="route.query.artType == 'article'" label="子文章名称:" prop="name">
|
<el-form-item v-if="route.query.artType == 'article'" label="子文章名称:" prop="name">
|
||||||
@@ -59,6 +63,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import MavonEdit from "@/components/MavonEdit.vue";
|
import MavonEdit from "@/components/MavonEdit.vue";
|
||||||
|
import UserSelectInfo from '@/components/UserSelectInfo.vue'
|
||||||
import { ref, reactive, onMounted } from "vue";
|
import { ref, reactive, onMounted } from "vue";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
|
||||||
@@ -103,6 +108,7 @@ const editForm = reactive({
|
|||||||
introduction: "",
|
introduction: "",
|
||||||
content: "",
|
content: "",
|
||||||
name: "",
|
name: "",
|
||||||
|
permissionUserIds:[]
|
||||||
});
|
});
|
||||||
|
|
||||||
//组装主题内容: 需要更新主题信息
|
//组装主题内容: 需要更新主题信息
|
||||||
@@ -145,6 +151,8 @@ const submit = async (formEl) => {
|
|||||||
discuss.plateId = discuss.plateId ?? route.query.plateId
|
discuss.plateId = discuss.plateId ?? route.query.plateId
|
||||||
discuss.cover=dialogImageUrl.value;
|
discuss.cover=dialogImageUrl.value;
|
||||||
discuss.permissionType=perRadio.value;
|
discuss.permissionType=perRadio.value;
|
||||||
|
|
||||||
|
discuss.permissionUserIds=editForm.permissionUserIds;
|
||||||
//主题创建
|
//主题创建
|
||||||
if (route.query.operType == "create") {
|
if (route.query.operType == "create") {
|
||||||
const response = await discussAdd(discuss);
|
const response = await discussAdd(discuss);
|
||||||
@@ -231,6 +239,7 @@ const loadDiscuss = async () => {
|
|||||||
discuss.plateId = res.plateId;
|
discuss.plateId = res.plateId;
|
||||||
dialogImageUrl.value= res.cover;
|
dialogImageUrl.value= res.cover;
|
||||||
perRadio.value=res.permissionType;
|
perRadio.value=res.permissionType;
|
||||||
|
editForm.permissionUserIds=res.permissionUserIds;
|
||||||
};
|
};
|
||||||
//加载文章
|
//加载文章
|
||||||
const loadArticle = async () => {
|
const loadArticle = async () => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="login-wrapper">
|
<div class="login-wrapper">
|
||||||
<h1>意社区-登录</h1>
|
<h1>{{configStore.name}}-登录</h1>
|
||||||
<div class="login-form">
|
<div class="login-form">
|
||||||
<div class="username form-item">
|
<div class="username form-item">
|
||||||
<span>使用邮箱或者手机号</span>
|
<span>使用邮箱或者手机号</span>
|
||||||
@@ -38,6 +38,8 @@
|
|||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { useRouter, useRoute } from 'vue-router';
|
import { useRouter, useRoute } from 'vue-router';
|
||||||
import useUserStore from '@/stores/user.js'
|
import useUserStore from '@/stores/user.js'
|
||||||
|
import useConfigStore from "@/stores/config";
|
||||||
|
const configStore= useConfigStore();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="性别">
|
<el-form-item label="性别">
|
||||||
<el-radio-group v-model="user.sex">
|
<el-radio-group v-model="user.sex">
|
||||||
<el-radio :label="0">男</el-radio>
|
<el-radio :label="'Male'">男</el-radio>
|
||||||
<el-radio :label="1">女</el-radio>
|
<el-radio :label="'Woman'">女</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Yi.Framework.Ddd.Dtos;
|
|||||||
using Yi.Framework.DictionaryManager.Entities;
|
using Yi.Framework.DictionaryManager.Entities;
|
||||||
using Yi.Framework.DictionaryManager.Dtos.Dictionary;
|
using Yi.Framework.DictionaryManager.Dtos.Dictionary;
|
||||||
using Yi.Framework.Core.Attributes;
|
using Yi.Framework.Core.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
namespace Yi.Framework.DictionaryManager
|
namespace Yi.Framework.DictionaryManager
|
||||||
{
|
{
|
||||||
@@ -21,7 +22,7 @@ namespace Yi.Framework.DictionaryManager
|
|||||||
|
|
||||||
public override async Task<PagedResultDto<DictionaryGetListOutputDto>> GetListAsync(DictionaryGetListInputVo input)
|
public override async Task<PagedResultDto<DictionaryGetListOutputDto>> GetListAsync(DictionaryGetListInputVo input)
|
||||||
{
|
{
|
||||||
int total = 0;
|
RefAsync<int> total = 0;
|
||||||
var entities = await _DbQueryable.WhereIF(input.DictType is not null, x => x.DictType == input.DictType)
|
var entities = await _DbQueryable.WhereIF(input.DictType is not null, x => x.DictType == input.DictType)
|
||||||
.WhereIF(input.DictLabel is not null, x => x.DictLabel!.Contains(input.DictLabel!))
|
.WhereIF(input.DictLabel is not null, x => x.DictLabel!.Contains(input.DictLabel!))
|
||||||
.WhereIF(input.State is not null, x => x.State == input.State)
|
.WhereIF(input.State is not null, x => x.State == input.State)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace Yi.Framework.DictionaryManager
|
|||||||
public async override Task<PagedResultDto<DictionaryTypeGetListOutputDto>> GetListAsync(DictionaryTypeGetListInputVo input)
|
public async override Task<PagedResultDto<DictionaryTypeGetListOutputDto>> GetListAsync(DictionaryTypeGetListInputVo input)
|
||||||
{
|
{
|
||||||
|
|
||||||
int total = 0;
|
RefAsync<int> total = 0;
|
||||||
var entities = await _DbQueryable.WhereIF(input.DictName is not null, x => x.DictName.Contains(input.DictName!))
|
var entities = await _DbQueryable.WhereIF(input.DictName is not null, x => x.DictName.Contains(input.DictName!))
|
||||||
.WhereIF(input.DictType is not null, x => x.DictType!.Contains(input.DictType!))
|
.WhereIF(input.DictType is not null, x => x.DictType!.Contains(input.DictType!))
|
||||||
.WhereIF(input.State is not null, x => x.State == input.State)
|
.WhereIF(input.State is not null, x => x.State == input.State)
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Yi.Framework.Data.DataSeeds;
|
||||||
|
using Yi.Framework.Ddd.Repositories;
|
||||||
|
using Yi.RBAC.Domain.Identity.Entities;
|
||||||
|
using Yi.RBAC.Domain.Setting.Entities;
|
||||||
|
using Yi.RBAC.Domain.Shared.Identity.EnumClasses;
|
||||||
|
|
||||||
|
namespace Yi.BBS.Domain.DataSeed
|
||||||
|
{
|
||||||
|
[AppService(typeof(IDataSeed))]
|
||||||
|
public class BbsConfigDataSeed : AbstractDataSeed<ConfigEntity>
|
||||||
|
{
|
||||||
|
public BbsConfigDataSeed(IRepository<ConfigEntity> repository) : base(repository)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<bool> IsInvoker()
|
||||||
|
{
|
||||||
|
return !await _repository.IsAnyAsync(x => x.ConfigKey == "ConfigEntity");
|
||||||
|
}
|
||||||
|
public override List<ConfigEntity> GetSeedData()
|
||||||
|
{
|
||||||
|
List<ConfigEntity> entities = new List<ConfigEntity>()
|
||||||
|
{
|
||||||
|
new ConfigEntity { Id = SnowflakeHelper.NextId, ConfigKey = "bbs.site.name", ConfigValue = "Yi意社区", ConfigName = "bbs站点名称" },
|
||||||
|
new ConfigEntity { Id = SnowflakeHelper.NextId, ConfigKey = "bbs.site.author", ConfigValue = "橙子", ConfigName = "bbs站点作者" },
|
||||||
|
new ConfigEntity { Id = SnowflakeHelper.NextId, ConfigKey = "bbs.site.icp", ConfigValue = "2023 意社区 | 赣ICP备xxxxxx号-4", ConfigName = "bbs备案号" },
|
||||||
|
new ConfigEntity { Id = SnowflakeHelper.NextId, ConfigKey = "bbs.site.bottom", ConfigValue = "YiFramework意框架", ConfigName = "bbs底部信息" },
|
||||||
|
};
|
||||||
|
return entities;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -51,6 +51,11 @@
|
|||||||
封面
|
封面
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:Yi.BBS.Domain.Forum.Entities.DiscussEntity.PermissionUserIds">
|
||||||
|
<summary>
|
||||||
|
当PermissionType为部分用户时候,以下列表中的用户+创建者 代表拥有权限
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:Yi.BBS.Domain.Forum.ForumManager">
|
<member name="T:Yi.BBS.Domain.Forum.ForumManager">
|
||||||
<summary>
|
<summary>
|
||||||
论坛模块的领域服务
|
论坛模块的领域服务
|
||||||
|
|||||||
Binary file not shown.
@@ -48,9 +48,18 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos.Discuss
|
|||||||
public string? PrivateCode { get; set; }
|
public string? PrivateCode { get; set; }
|
||||||
public DateTime CreationTime { get; set; }
|
public DateTime CreationTime { get; set; }
|
||||||
|
|
||||||
|
public List<long> PermissionUserIds { get; set; }
|
||||||
|
|
||||||
public UserGetListOutputDto User { get; set; }
|
public UserGetListOutputDto User { get; set; }
|
||||||
|
|
||||||
|
public void SetBan()
|
||||||
|
{
|
||||||
|
this.Title = DiscussConst.˽<EFBFBD><EFBFBD>;
|
||||||
|
this.Introduction = "";
|
||||||
|
this.Cover = null;
|
||||||
|
//<2F><><EFBFBD><EFBFBD>ֹ
|
||||||
|
this.IsBan = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -69,20 +78,19 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos.Discuss
|
|||||||
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD>Լ<EFBFBD><D4BC>ɼ<EFBFBD><C9BC><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0>¼<EFBFBD>û<EFBFBD>
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD>Լ<EFBFBD><D4BC>ɼ<EFBFBD><C9BC><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0>¼<EFBFBD>û<EFBFBD>
|
||||||
if (dto.User.Id != userId)
|
if (dto.User.Id != userId)
|
||||||
{
|
{
|
||||||
dto.Title = DiscussConst.˽<EFBFBD><EFBFBD>;
|
dto.SetBan();
|
||||||
dto.Introduction= "";
|
|
||||||
dto.Cover = null;
|
|
||||||
//<2F><><EFBFBD><EFBFBD>ֹ
|
|
||||||
dto.IsBan = true;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DiscussPermissionTypeEnum.User:
|
case DiscussPermissionTypeEnum.User:
|
||||||
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ֿɼ<D6BF><C9BC><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0>¼<EFBFBD>û<EFBFBD> Ҳ <20><><EFBFBD>ڿɼ<DABF><C9BC>û<EFBFBD><C3BB>б<EFBFBD><D0B1><EFBFBD>
|
||||||
|
if (dto.User.Id != userId && !dto.PermissionUserIds.Contains(userId))
|
||||||
|
{
|
||||||
|
dto.SetBan();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos
|
|||||||
public string? PrivateCode { get; set; }
|
public string? PrivateCode { get; set; }
|
||||||
public DateTime CreationTime { get; set; }
|
public DateTime CreationTime { get; set; }
|
||||||
public DiscussPermissionTypeEnum PermissionType { get; set; }
|
public DiscussPermissionTypeEnum PermissionType { get; set; }
|
||||||
|
|
||||||
|
public List<long> PermissionUserIds { get; set; }
|
||||||
public UserGetListOutputDto User { get; set; }
|
public UserGetListOutputDto User { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos.Discuss
|
|||||||
public string Content { get; set; }
|
public string Content { get; set; }
|
||||||
public string? Color { get; set; }
|
public string? Color { get; set; }
|
||||||
|
|
||||||
|
public List<long> PermissionUserIds { get; set; }
|
||||||
|
|
||||||
public DiscussPermissionTypeEnum PermissionType { get; set; }
|
public DiscussPermissionTypeEnum PermissionType { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,13 @@ namespace Yi.BBS.Application.Forum
|
|||||||
throw new UserFriendlyException(DiscussConst.私密);
|
throw new UserFriendlyException(DiscussConst.私密);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (discuss.PermissionType == DiscussPermissionTypeEnum.User)
|
||||||
|
{
|
||||||
|
if (discuss.CreatorId != _currentUser.Id && !discuss.PermissionUserIds.Contains(_currentUser.Id))
|
||||||
|
{
|
||||||
|
throw new UserFriendlyException(DiscussConst.私密);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,6 @@ namespace Yi.BBS.Domain.Shared.Forum.ConstClasses
|
|||||||
{
|
{
|
||||||
public const string 主题不存在 = "传入的主题id不存在";
|
public const string 主题不存在 = "传入的主题id不存在";
|
||||||
|
|
||||||
public const string 私密 = "【私密】您无该主题权限";
|
public const string 私密 = "【私密】您无该主题权限,可联系作者申请开放";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,11 @@
|
|||||||
封面
|
封面
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:Yi.BBS.Domain.Forum.Entities.DiscussEntity.PermissionUserIds">
|
||||||
|
<summary>
|
||||||
|
当PermissionType为部分用户时候,以下列表中的用户+创建者 代表拥有权限
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:Yi.BBS.Domain.Forum.ForumManager">
|
<member name="T:Yi.BBS.Domain.Forum.ForumManager">
|
||||||
<summary>
|
<summary>
|
||||||
论坛模块的领域服务
|
论坛模块的领域服务
|
||||||
|
|||||||
@@ -54,5 +54,12 @@ namespace Yi.BBS.Domain.Forum.Entities
|
|||||||
public long? LastModifierId { get; set; }
|
public long? LastModifierId { get; set; }
|
||||||
|
|
||||||
public DateTime? LastModificationTime { get; set; }
|
public DateTime? LastModificationTime { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当PermissionType为部分用户时候,以下列表中的用户+创建者 代表拥有权限
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsJson = true)]//使用json处理
|
||||||
|
public List<long> PermissionUserIds { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -18,5 +18,7 @@ namespace Yi.RBAC.Application.Contracts.Identity.Dtos
|
|||||||
|
|
||||||
public long? DeptId { get; set; }
|
public long? DeptId { get; set; }
|
||||||
|
|
||||||
|
public string? Ids { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ namespace Yi.RBAC.Application.Identity
|
|||||||
|
|
||||||
RefAsync<int> total = 0;
|
RefAsync<int> total = 0;
|
||||||
|
|
||||||
|
|
||||||
|
List<long>? ids = input.Ids?.Split(",").Select(x=>long.Parse(x)).ToList();
|
||||||
var outPut = await _DbQueryable.WhereIF(!string.IsNullOrEmpty(input.UserName), x => x.UserName.Contains(input.UserName!))
|
var outPut = await _DbQueryable.WhereIF(!string.IsNullOrEmpty(input.UserName), x => x.UserName.Contains(input.UserName!))
|
||||||
.WhereIF(input.Phone is not null, x => x.Phone.ToString()!.Contains(input.Phone.ToString()!))
|
.WhereIF(input.Phone is not null, x => x.Phone.ToString()!.Contains(input.Phone.ToString()!))
|
||||||
.WhereIF(!string.IsNullOrEmpty(input.Name), x => x.Name!.Contains(input.Name!))
|
.WhereIF(!string.IsNullOrEmpty(input.Name), x => x.Name!.Contains(input.Name!))
|
||||||
@@ -56,6 +58,9 @@ namespace Yi.RBAC.Application.Identity
|
|||||||
|
|
||||||
//这个为过滤当前部门,加入数据权限后,将由数据权限控制
|
//这个为过滤当前部门,加入数据权限后,将由数据权限控制
|
||||||
.WhereIF(input.DeptId is not null, x => x.DeptId == input.DeptId)
|
.WhereIF(input.DeptId is not null, x => x.DeptId == input.DeptId)
|
||||||
|
|
||||||
|
.WhereIF(ids is not null,x=> ids.Contains(x.Id))
|
||||||
|
|
||||||
|
|
||||||
.LeftJoin<DeptEntity>((user, dept) => user.DeptId == dept.Id)
|
.LeftJoin<DeptEntity>((user, dept) => user.DeptId == dept.Id)
|
||||||
.Select((user, dept) => new UserGetListOutputDto(), true)
|
.Select((user, dept) => new UserGetListOutputDto(), true)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
:layout="layout"
|
:layout="layout"
|
||||||
:page-sizes="pageSizes"
|
:page-sizes="pageSizes"
|
||||||
:pager-count="pagerCount"
|
:pager-count="pagerCount"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
@size-change="handleSizeChange"
|
@size-change="handleSizeChange"
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ const service = axios.create({
|
|||||||
}],
|
}],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// request拦截器
|
// request拦截器
|
||||||
service.interceptors.request.use(config => {
|
service.interceptors.request.use(config => {
|
||||||
// 是否需要设置 token
|
// 是否需要设置 token
|
||||||
|
|||||||
@@ -180,7 +180,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -250,7 +250,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
@@ -424,7 +424,7 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
v-show="materialTotal > 0"
|
v-show="materialTotal > 0"
|
||||||
:total="materialTotal"
|
:total="Number(materialTotal) "
|
||||||
v-model:page="queryMaterialParams.pageNum"
|
v-model:page="queryMaterialParams.pageNum"
|
||||||
v-model:limit="queryMaterialParams.pageSize"
|
v-model:limit="queryMaterialParams.pageSize"
|
||||||
@pagination="getMaterialList"
|
@pagination="getMaterialList"
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -182,7 +182,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -188,7 +188,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -115,7 +115,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" />
|
<pagination v-show="total > 0" :total="Number(total)" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -141,9 +141,10 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
<pagination v-show="total > 0" :total="Number(total)" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList" />
|
@pagination="getList" />
|
||||||
|
|
||||||
<!-- 添加或修改角色配置对话框 -->
|
<!-- 添加或修改角色配置对话框 -->
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="pageNum" v-model:limit="pageSize" />
|
<pagination v-show="total > 0" :total="Number(total)" v-model:page="pageNum" v-model:limit="pageSize" />
|
||||||
|
|
||||||
<el-form label-width="100px">
|
<el-form label-width="100px">
|
||||||
<div style="text-align: center;margin-left:-120px;margin-top:30px;">
|
<div style="text-align: center;margin-left:-120px;margin-top:30px;">
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
<pagination v-show="total > 0" :total="Number(total)" v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total>0"
|
v-show="total>0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
@@ -149,7 +149,7 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total>0"
|
v-show="total>0"
|
||||||
:total="total"
|
:total="Number(total)"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
|
|||||||
Reference in New Issue
Block a user