feat:完成权限相关、全局配置、优化细节

This commit is contained in:
橙子
2023-03-26 16:22:49 +08:00
parent b6f4cbfb4f
commit e5460ae3cc
55 changed files with 386 additions and 51 deletions

View File

@@ -7,10 +7,21 @@
</el-config-provider>
</template>
<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'
const locale= zhCn;
const configStore = useConfigStore();
//加载全局信息
onMounted(async()=>{
await configStore.getConfig();
})
</script>
<style scoped>

View File

@@ -0,0 +1,9 @@
import myaxios from '@/utils/request'
//获取配置
export function getAll(){
return myaxios({
url: '/config',
method: 'get'
})
};

View 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>

View File

@@ -1,14 +1,16 @@
<template>
<div class="botton-div">
<a><el-icon><UserFilled /></el-icon>站长橙子</a>
<a><el-icon><Search /></el-icon>YiFramework意框架</a>
<a><el-icon><UserFilled /></el-icon>站长{{configStore.author}}</a>
<a><el-icon><Search /></el-icon>{{configStore.bottom}}</a>
<a><el-icon><View /></el-icon>关于本站</a>
<a><el-icon><Message /></el-icon>建议反馈</a>
<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>
</template>
<script setup>
import useConfigStore from "@/stores/config";
const configStore= useConfigStore();
</script>
<style scoped>
.el-icon
@@ -31,6 +33,6 @@ a:hover {
height: auto;
width: auto;
justify-content: center;
margin: 1rem auto;
margin: 0.5rem auto;
}
</style>

View File

@@ -41,8 +41,8 @@
<div class="item-description">
{{ discuss.creationTime }}
</div>
<AgreeInfo :data="discuss"/>
<!--
<el-button text @click="agree">
<el-icon v-if="discuss.isAgree" color="#409EFF">
<CircleCheckFilled />
@@ -51,7 +51,7 @@
<Pointer />
</el-icon> 点赞:{{ discuss.agreeNum ?? 0 }}</el-button>
<el-button icon="Star" text>
收藏</el-button>
收藏</el-button> -->
<el-button icon="View" text>
浏览数:{{ discuss.seeNum ?? 0 }}</el-button>
@@ -69,6 +69,7 @@
import { h, ref, toRef, onMounted ,reactive} from 'vue'
import { useRouter } from 'vue-router'
import AvatarInfo from './AvatarInfo.vue';
import AgreeInfo from './AgreeInfo.vue'
import { operate } from '@/apis/agreeApi'
const props = defineProps(['discuss','badge'])

View 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为用户idlabel为账号名称不可重复
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>

View File

@@ -8,7 +8,7 @@
>
<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-sub-menu index="2">
<template #title>学习</template>
@@ -56,6 +56,8 @@ import AvatarInfo from '@/components/AvatarInfo.vue'
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import useUserStore from '@/stores/user.js'
import useConfigStore from "@/stores/config";
const configStore= useConfigStore();
const router = useRouter()
const userStore =useUserStore();
const activeIndex = ref('1')

View 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;

View File

@@ -20,11 +20,15 @@ const myaxios = axios.create({
// }
// }],
})
// 请求拦截器
myaxios.interceptors.request.use(function (config) {
if (getToken()) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config;
}, function (error) {
return Promise.reject(error);

View File

@@ -49,7 +49,7 @@
<el-divider class="tab-divider" />
<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="Share" 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 TreeArticleInfo from "@/components/TreeArticleInfo.vue";
import { useRoute, useRouter } from "vue-router";
import AgreeInfo from '@/components/AgreeInfo.vue'
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";
//数据定义

View File

@@ -213,4 +213,9 @@ display: flex;
.collapse-list >>> .el-collapse-item__header {
border-bottom-color: #F0F2F5 !important;
}
.el-divider
{
margin: 0.5rem 0;
}
</style>

View File

@@ -18,6 +18,10 @@
<el-radio-button label="User">部分用户可见</el-radio-button>
</el-radio-group>
</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">
@@ -59,6 +63,7 @@
</template>
<script setup>
import MavonEdit from "@/components/MavonEdit.vue";
import UserSelectInfo from '@/components/UserSelectInfo.vue'
import { ref, reactive, onMounted } from "vue";
import { useRoute, useRouter } from "vue-router";
@@ -103,6 +108,7 @@ const editForm = reactive({
introduction: "",
content: "",
name: "",
permissionUserIds:[]
});
//组装主题内容: 需要更新主题信息
@@ -145,6 +151,8 @@ const submit = async (formEl) => {
discuss.plateId = discuss.plateId ?? route.query.plateId
discuss.cover=dialogImageUrl.value;
discuss.permissionType=perRadio.value;
discuss.permissionUserIds=editForm.permissionUserIds;
//主题创建
if (route.query.operType == "create") {
const response = await discussAdd(discuss);
@@ -231,6 +239,7 @@ const loadDiscuss = async () => {
discuss.plateId = res.plateId;
dialogImageUrl.value= res.cover;
perRadio.value=res.permissionType;
editForm.permissionUserIds=res.permissionUserIds;
};
//加载文章
const loadArticle = async () => {

View File

@@ -1,6 +1,6 @@
<template>
<div class="login-wrapper">
<h1>意社区-登录</h1>
<h1>{{configStore.name}}-登录</h1>
<div class="login-form">
<div class="username form-item">
<span>使用邮箱或者手机号</span>
@@ -38,6 +38,8 @@
import { reactive } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import useUserStore from '@/stores/user.js'
import useConfigStore from "@/stores/config";
const configStore= useConfigStore();
const userStore = useUserStore();
const router = useRouter();
const route = useRoute();

View File

@@ -14,8 +14,8 @@
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="user.sex">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
<el-radio :label="'Male'"></el-radio>
<el-radio :label="'Woman'"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>

View File

@@ -5,6 +5,7 @@ using Yi.Framework.Ddd.Dtos;
using Yi.Framework.DictionaryManager.Entities;
using Yi.Framework.DictionaryManager.Dtos.Dictionary;
using Yi.Framework.Core.Attributes;
using SqlSugar;
namespace Yi.Framework.DictionaryManager
{
@@ -21,7 +22,7 @@ namespace Yi.Framework.DictionaryManager
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)
.WhereIF(input.DictLabel is not null, x => x.DictLabel!.Contains(input.DictLabel!))
.WhereIF(input.State is not null, x => x.State == input.State)

View File

@@ -20,7 +20,7 @@ namespace Yi.Framework.DictionaryManager
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!))
.WhereIF(input.DictType is not null, x => x.DictType!.Contains(input.DictType!))
.WhereIF(input.State is not null, x => x.State == input.State)

View File

@@ -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;
}
}
}

View File

@@ -51,6 +51,11 @@
封面
</summary>
</member>
<member name="P:Yi.BBS.Domain.Forum.Entities.DiscussEntity.PermissionUserIds">
<summary>
当PermissionType为部分用户时候以下列表中的用户+创建者 代表拥有权限
</summary>
</member>
<member name="T:Yi.BBS.Domain.Forum.ForumManager">
<summary>
论坛模块的领域服务

View File

@@ -48,9 +48,18 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos.Discuss
public string? PrivateCode { get; set; }
public DateTime CreationTime { get; set; }
public List<long> PermissionUserIds { 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>
if (dto.User.Id != userId)
{
dto.Title = DiscussConst.˽<EFBFBD><EFBFBD>;
dto.Introduction= "";
dto.Cover = null;
//<2F><><EFBFBD><EFBFBD>ֹ
dto.IsBan = true;
dto.SetBan();
}
break;
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;
default:
break;
}
});
}

View File

@@ -37,6 +37,8 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos
public string? PrivateCode { get; set; }
public DateTime CreationTime { get; set; }
public DiscussPermissionTypeEnum PermissionType { get; set; }
public List<long> PermissionUserIds { get; set; }
public UserGetListOutputDto User { get; set; }
}
}

View File

@@ -17,6 +17,7 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos.Discuss
public string Content { get; set; }
public string? Color { get; set; }
public List<long> PermissionUserIds { get; set; }
public DiscussPermissionTypeEnum PermissionType { get; set; }

View File

@@ -141,6 +141,13 @@ namespace Yi.BBS.Application.Forum
throw new UserFriendlyException(DiscussConst.);
}
}
if (discuss.PermissionType == DiscussPermissionTypeEnum.User)
{
if (discuss.CreatorId != _currentUser.Id && !discuss.PermissionUserIds.Contains(_currentUser.Id))
{
throw new UserFriendlyException(DiscussConst.);
}
}
}
}
}

View File

@@ -14,6 +14,6 @@ namespace Yi.BBS.Domain.Shared.Forum.ConstClasses
{
public const string = "传入的主题id不存在";
public const string = "【私密】您无该主题权限";
public const string = "【私密】您无该主题权限,可联系作者申请开放";
}
}

View File

@@ -51,6 +51,11 @@
封面
</summary>
</member>
<member name="P:Yi.BBS.Domain.Forum.Entities.DiscussEntity.PermissionUserIds">
<summary>
当PermissionType为部分用户时候以下列表中的用户+创建者 代表拥有权限
</summary>
</member>
<member name="T:Yi.BBS.Domain.Forum.ForumManager">
<summary>
论坛模块的领域服务

View File

@@ -54,5 +54,12 @@ namespace Yi.BBS.Domain.Forum.Entities
public long? LastModifierId { get; set; }
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 当PermissionType为部分用户时候以下列表中的用户+创建者 代表拥有权限
/// </summary>
[SugarColumn(IsJson = true)]//使用json处理
public List<long> PermissionUserIds { get; set; }
}
}

View File

@@ -18,5 +18,7 @@ namespace Yi.RBAC.Application.Contracts.Identity.Dtos
public long? DeptId { get; set; }
public string? Ids { get; set; }
}
}

View File

@@ -48,6 +48,8 @@ namespace Yi.RBAC.Application.Identity
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!))
.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!))
@@ -56,6 +58,9 @@ namespace Yi.RBAC.Application.Identity
//这个为过滤当前部门,加入数据权限后,将由数据权限控制
.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)
.Select((user, dept) => new UserGetListOutputDto(), true)

View File

@@ -7,7 +7,7 @@
:layout="layout"
:page-sizes="pageSizes"
:pager-count="pagerCount"
:total="total"
:total="Number(total)"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>

View File

@@ -28,6 +28,9 @@ const service = axios.create({
}],
})
// request拦截器
service.interceptors.request.use(config => {
// 是否需要设置 token

View File

@@ -180,7 +180,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -250,7 +250,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
@@ -424,7 +424,7 @@
</el-table>
<pagination
v-show="materialTotal > 0"
:total="materialTotal"
:total="Number(materialTotal) "
v-model:page="queryMaterialParams.pageNum"
v-model:limit="queryMaterialParams.pageSize"
@pagination="getMaterialList"

View File

@@ -174,7 +174,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -182,7 +182,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -174,7 +174,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -174,7 +174,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -188,7 +188,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -155,7 +155,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -131,7 +131,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -115,7 +115,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -55,7 +55,7 @@
</el-table-column>
</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>
</template>

View File

@@ -124,7 +124,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -133,7 +133,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -127,7 +127,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -141,9 +141,10 @@
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -111,7 +111,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -111,7 +111,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -87,7 +87,7 @@
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -82,7 +82,7 @@
</el-table-column>
</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" />
<!-- 添加或修改角色配置对话框 -->

View File

@@ -43,7 +43,7 @@
</el-table>
<pagination
v-show="total > 0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -34,7 +34,7 @@
</el-table-column>
</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">
<div style="text-align: center;margin-left:-120px;margin-top:30px;">

View File

@@ -107,7 +107,7 @@
</template>
</el-table-column>
</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" />
</el-col>
</el-row>

View File

@@ -33,7 +33,7 @@
</el-table>
<pagination
v-show="total>0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"

View File

@@ -149,7 +149,7 @@
</el-table>
<pagination
v-show="total>0"
:total="total"
:total="Number(total)"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"