当前位置: 首页 > news >正文

版式设计1000例seo搜索优化工具

版式设计1000例,seo搜索优化工具,网络行业有哪些,做网站要哪些架包先上图: 整个角色管理是如何做的吗? 首先你要处理后端,要先把角色存到用户那。 这是用户管理部分的内容: 可以看到一个用户是有多个角色的。 看到没有,存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…

先上图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整个角色管理是如何做的吗?

首先你要处理后端,要先把角色存到用户那。

在这里插入图片描述
这是用户管理部分的内容:

可以看到一个用户是有多个角色的。

在这里插入图片描述
看到没有,存的是数组

数组的是一个 role 对象

role 对象是这样:

在这里插入图片描述
主要是存一个 name 就好。permissions 是权限列表。

import { Request, Response } from 'express';
import Role from '../models/role';
import handleAsync from '../utils/handleAsync';// Build query based on query parameters
const buildQuery = (queryParams: any): any => {const query: any = {};if (queryParams.name) {query.name = { $regex: queryParams.name, $options: 'i' };}return query;
};// 获取所有角色
const getRoles = handleAsync(async (req: Request, res: Response) => {const { current = '1', pageSize = '10' } = req.query;const query = buildQuery(req.query);const roles = await Role.find(query).populate('permissions').sort('-createdAt') // Sort by creation time in descending order.skip((+current - 1) * +pageSize).limit(+pageSize).exec();res.json({success: true,data: roles,});
});// 根据 ID 获取角色
const getRoleById = handleAsync(async (req: Request, res: Response) => {const role = await Role.findById(req.params.id).exec();if (!role) {res.status(404);throw new Error('Role not found');}res.json({success: true,data: role,});
});// 添加新角色
const addRole = handleAsync(async (req: Request, res: Response) => {const newRole = new Role({...req.body,});const savedRole = await newRole.save();res.json({success: true,data: savedRole,});
});// 更新角色
const updateRole = handleAsync(async (req: Request, res: Response) => {const { id } = req.params;const updatedRole = await Role.findByIdAndUpdate(id,{ ...req.body },{ new: true },).exec();if (!updatedRole) {res.status(404);throw new Error('Role not found');}res.json({success: true,data: updatedRole,});
});// 删除角色
const deleteRole = handleAsync(async (req: Request, res: Response) => {const { id } = req.params;const role = await Role.findByIdAndDelete(id).exec();if (!role) {res.status(404);throw new Error('Role not found');}res.json({success: true,data: { message: 'Role deleted successfully' },});
});// 批量删除角色
const deleteMultipleRoles = handleAsync(async (req: Request, res: Response) => {const { ids } = req.body;await Role.deleteMany({_id: { $in: ids },}).exec();res.json({success: true,message: `${ids.length} roles deleted successfully`,});
});export {getRoles,getRoleById,addRole,updateRole,deleteRole,deleteMultipleRoles,
};

这是后端代码,就是增删改查。比较容易理解。

前端:

import { useIntl } from '@umijs/max';
import React, { Key, useState } from 'react';
import { ProForm, ProFormText } from '@ant-design/pro-components';
import { Form, Input, Spin, Tree } from 'antd';
import useQueryList from '@/hooks/useQueryList';
import { FormInstance } from 'antd/es/form';
import { Permission } from '@/apiDataStructures/ApiDataStructure';interface Props {form?: FormInstance<any>;newRecord?: boolean;onFinish: (formData: any) => Promise<void>;values?: any;
}const BasicForm: React.FC<Props> = ({ newRecord, onFinish, values }) => {const intl = useIntl();const { items: permissionGroups, loading } = useQueryList('/permission-groups/list');const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);const [autoExpandParent, setAutoExpandParent] = useState<boolean>(true);const [checkedKeys, setCheckedKeys] = useState<Key[] | { checked: Key[]; halfChecked: Key[] }>(values.permissions?.map((permission: Permission) => `${permission._id}`) ?? [],);const [selectedKeys, setSelectedKeys] = useState<Key[]>([]);const onExpand = (expandedKeysValue: Key[]) => {setExpandedKeys(expandedKeysValue);setAutoExpandParent(false);};const onCheck = (checkedKeysValue: Key[] | { checked: Key[]; halfChecked: Key[] }) => {setCheckedKeys(checkedKeysValue);console.log('checkedKeysValue', checkedKeysValue);};const onSelect = (selectedKeysValue: Key[]) => {setSelectedKeys(selectedKeysValue);};return (<ProForminitialValues={{...values,permissions: values?.permissions?.map((permission: Permission) => permission._id),}}onFinish={async (values) => {await onFinish({...values,permissions: checkedKeys,});}}><ProForm.Group><ProFormTextrules={[{ required: true, message: intl.formatMessage({ id: 'enter_name' }) }]}width="md"label={intl.formatMessage({ id: 'name' })}name="name"/><ProForm.Item name="permissions" label={intl.formatMessage({ id: 'permission_choose' })}><Spin spinning={loading}><TreecheckableonExpand={onExpand}expandedKeys={expandedKeys}autoExpandParent={autoExpandParent}onCheck={onCheck}checkedKeys={checkedKeys}onSelect={onSelect}selectedKeys={selectedKeys}treeData={permissionGroups} // Use filtered top-level groupsfieldNames={{ title: 'name', key: '_id', children: 'children' }}/></Spin></ProForm.Item></ProForm.Group>{!newRecord && (<Form.Item name="_id" label={false}><Input type="hidden" /></Form.Item>)}</ProForm>);
};export default BasicForm;

https://www.qiuzhi99.com/playlists/antdpromakemoney.html

http://www.tj-hxxt.cn/news/5722.html

相关文章:

  • 布吉做棋牌网站建设找哪家效益快想要网站导航推广页
  • 网站流百度网站怎么申请注册
  • 网站做要钱北京疫情又严重了
  • 网站百度地图标记代码国外搜索引擎排行榜
  • git做网站根目录最全磁力搜索引擎
  • 深圳市营销型网站建设seo排名优化技术
  • 公司网站做百度广告如何报税搜索引擎优化论文
  • 贵阳网站建设 网站制作网站seo 工具
  • 网站建设几点关门培训机构网站
  • 开网站做一个交易所怎么做刷外链工具
  • 昆山城乡建设局网站网页自动点击软件
  • 有心学做网站比较正规的代运营
  • asp动态网站开发案...放心网站推广优化咨询
  • 做网站的软件项目进度计划如何进行网络推广和宣传
  • 已有域名怎么做网站乔拓云智能建站系统
  • 天长网站建设网站在线优化工具
  • 网站开发与技术seo推广的常见目的有
  • 一学一做征文网站石家庄seo顾问
  • wordpress建站全教程营销策划36计
  • 帮人做logo网站新媒体seo培训
  • 青岛网站维护新闻软文怎么写
  • wordpress怎么下载临沂seo
  • 营销型网站的整体规划百度站长工具是什么意思
  • 用net做新闻网站网络推广赚钱平台有哪些
  • 网站建设需要哪些费用河源市企业网站seo价格
  • 阿里网 网站备案流程网络营销策划的目的
  • java动态web网站开发360免费建站系统
  • 徐州网架公司十大排名seo服务优化
  • 购物网站优惠券怎么做抚州seo排名
  • wordpress企业能用吗长沙seo优化服务