fix: use python3.8 type error add local runing video url

This commit is contained in:
zy7y 2023-05-31 20:34:10 +08:00
parent 99354c92f9
commit e7cc1e5e18
73 changed files with 39 additions and 602 deletions

View File

@ -1,42 +1,54 @@
# Mini RBAC
`Python(FastAPI)`、`VUE3`实现,仅保留核心权限控制的极简后台管理。
![index](./imgs/index.png)
# 本地非 Docker 运行
[本地运行: https://www.bilibili.com/video/BV1mP411H7PL/](https://www.bilibili.com/video/BV1mP411H7PL/)
[演示地址-前端: http://49.232.203.244:1856](http://49.232.203.244:1856/login)
[演示地址-接口地址: http://49.232.203.244:1855/docs](http://49.232.203.244:1855/docs)
## 功能
### 权限控制
- [x] 前端菜单权限控制
- [x] 前端路由权限控制
- [x] 前端按钮权限控制
- [x] 后端接口权限控制
### 业务功能
- [x] 登录、退出、切换角色
- [x] 用户管理 -> 新增、编辑、删除、查询
- [x] 角色管理 -> 新增、编辑、删除、查询
- [x] 菜单管理 -> 新增、编辑、删除、查询
# 使用框架&工具
## 前端 `node 16.15 LTS`
```json
{
"@kangc/v-md-editor": "^2.3.15",
"ant-design-vue": "^3.2.12",
"axios": "^0.27.2",
"echarts": "^5.3.3",
"moment": "^2.29.4",
"normalize.css": "^8.0.1",
"pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^2.2.0",
"vue": "^3.2.38",
"vue-router": "^4.1.5",
"vite": "^3.0.9"
"@kangc/v-md-editor": "^2.3.15",
"ant-design-vue": "^3.2.12",
"axios": "^0.27.2",
"echarts": "^5.3.3",
"moment": "^2.29.4",
"normalize.css": "^8.0.1",
"pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^2.2.0",
"vue": "^3.2.38",
"vue-router": "^4.1.5",
"vite": "^3.0.9"
}
```
## 后端 `Python 3.9.7`
```
bcrypt==4.0.0
fastapi==0.82.0
@ -49,18 +61,19 @@ tortoise-orm==0.19.2
websockets==10.3
```
<details>
<summary>更多图片</summary>
### 页面
![login](./imgs/login.png)
![change](./imgs//select.png)
![user](./imgs/useradd.png)
![role](./imgs/menuadd.png)
![menu](./imgs/roleadd.png)
### 接口
![user-api](./imgs/user-api.png)
![role-menu](./imgs/role-menu-api.png)

View File

@ -1,6 +1,4 @@
from fastapi import Depends, FastAPI
from fastapi.staticfiles import StaticFiles
from starlette.responses import HTMLResponse
from core.events import close_orm, init_orm
from core.exceptions import exception_handlers
@ -17,16 +15,7 @@ app = FastAPI(
load_routers(app, "router", no_depends="auth", depends=[Depends(check_permissions)])
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/", response_class=HTMLResponse)
async def index():
with open("static/index.html") as f:
html = f.read()
return html
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", reload=True, port=1855)
uvicorn.run("main:app", reload=True)

View File

@ -1,4 +1,5 @@
from fastapi import APIRouter, Depends
from typing import List
from schemas import common as BaseSchema
from schemas import role as RoleSchema
@ -10,7 +11,7 @@ router = APIRouter(prefix="/role", tags=["角色管理"])
Response = BaseSchema.Response
ListAll = BaseSchema.ListAll
role_list_schema = ListAll[list[RoleSchema.RoleRead]]
role_list_schema = ListAll[List[RoleSchema.RoleRead]]
@router.get("", summary="角色列表")

View File

@ -1,4 +1,5 @@
from fastapi import APIRouter, Depends
from typing import List
from core.security import check_permissions
from schemas import common as BaseSchema
@ -11,7 +12,7 @@ router = APIRouter(prefix="/user", tags=["用户管理"])
Response = BaseSchema.Response
ListAll = BaseSchema.ListAll
user_list_schema = ListAll[list[UserSchema.UserRead]]
user_list_schema = ListAll[List[UserSchema.UserRead]]
@router.get("", summary="用户列表")

View File

@ -1,4 +1,5 @@
from pydantic import BaseModel, Field
from typing import List
from schemas.common import QueryData, ReadBase
@ -7,7 +8,7 @@ class RoleMenuIn(BaseModel):
"""角色 -分配菜单id"""
rid: int = Field(description="角色ID")
menus: list[int] = Field(description="菜单ID 列表")
menus: List[int] = Field(description="菜单ID 列表")
class RoleMenuRead(RoleMenuIn, ReadBase):
@ -20,7 +21,7 @@ class RoleBasic(BaseModel):
class RoleIn(RoleBasic):
menus: list[int] = Field(..., description="菜单id列表")
menus: List[int] = Field(..., description="菜单id列表")
class RoleRead(RoleBasic, ReadBase):

View File

@ -1,4 +1,4 @@
from typing import Optional
from typing import Optional, List
from pydantic import BaseModel, Field
@ -40,7 +40,7 @@ class UserHasRole(BaseModel):
class UserInfo(UserRead):
"""用户信息模型"""
roles: list[UserHasRole] = Field(..., description="用户拥有角色")
roles: List[UserHasRole] = Field(..., description="用户拥有角色")
class RoleActive(BaseModel):
@ -51,7 +51,7 @@ class RoleActive(BaseModel):
class UserAdd(UserIn):
"""新增用户模型"""
roles: list[RoleActive] = Field(..., description="选择角色列表")
roles: List[RoleActive] = Field(..., description="选择角色列表")
class UserQuery(QueryData):
@ -66,4 +66,4 @@ class UserPut(BaseModel):
nickname: str = Field(..., description="用户昵称")
password: str = Field(..., description="密码")
roles: list[RoleActive] = Field(..., description="选择角色列表")
roles: List[RoleActive] = Field(..., description="选择角色列表")

View File

@ -1 +0,0 @@
.ant-result{padding:48px 32px}.ant-result-success .ant-result-icon>.anticon{color:#52c41a}.ant-result-error .ant-result-icon>.anticon{color:#ff4d4f}.ant-result-info .ant-result-icon>.anticon{color:#1890ff}.ant-result-warning .ant-result-icon>.anticon{color:#faad14}.ant-result-image{width:250px;height:295px;margin:auto}.ant-result-icon{margin-bottom:24px;text-align:center}.ant-result-icon>.anticon{font-size:72px}.ant-result-title{color:#000000d9;font-size:24px;line-height:1.8;text-align:center}.ant-result-subtitle{color:#00000073;font-size:14px;line-height:1.6;text-align:center}.ant-result-extra{margin:24px 0 0;text-align:center}.ant-result-extra>*{margin-right:8px}.ant-result-extra>*:last-child{margin-right:0}.ant-result-content{margin-top:24px;padding:24px 40px;background-color:#fafafa}.ant-result-rtl{direction:rtl}.ant-result-rtl .ant-result-extra>*{margin-right:0;margin-left:8px}.ant-result-rtl .ant-result-extra>*:last-child{margin-left:0}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{i as l,y as d,c as N,E as S,X as U,aZ as P,H as R,ae as M,Y as v,R as C,e as I,aS as A}from"./index.ab0d47a4.js";var _=!1;try{var f=Object.defineProperty({},"passive",{get:function(){_=!0}});window.addEventListener("testPassive",null,f),window.removeEventListener("testPassive",null,f)}catch{}const O=_;function p(n,t,a,s){if(n&&n.addEventListener){var i=s;i===void 0&&O&&(t==="touchstart"||t==="touchmove"||t==="wheel")&&(i={passive:!1}),n.addEventListener(t,a,i)}return{remove:function(){n&&n.removeEventListener&&n.removeEventListener(t,a)}}}function H(n,t){return n?n.contains(t):!1}var L=Symbol("TriggerContextKey"),h=function(){return l(L,{setPortal:function(){},popPortal:!1})},T=Symbol("PortalContextKey"),K=function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inTriggerContext:!0};d(T,{inTriggerContext:a.inTriggerContext,shouldRender:N(function(){var s=t||{},i=s.sPopupVisible,r=s.popupRef,c=s.forceRender,o=s.autoDestroy,u=!1;return(i||r||c)&&(u=!0),!i&&o&&(u=!1),u})})},g=function(){K({},{inTriggerContext:!1});var t=l(T,{shouldRender:N(function(){return!1}),inTriggerContext:!1});return{shouldRender:N(function(){return t.shouldRender.value||t.inTriggerContext===!1})}};const m=S({name:"Portal",inheritAttrs:!1,props:{getContainer:U.func.isRequired,didUpdate:Function},setup:function(t,a){var s=a.slots,i=!0,r,c=g(),o=c.shouldRender;P(function(){i=!1,o.value&&(r=t.getContainer())});var u=R(o,function(){o.value&&!r&&(r=t.getContainer()),r&&u()});return M(function(){v(function(){var E;o.value&&((E=t.didUpdate)===null||E===void 0||E.call(t,t))})}),C(function(){r&&r.parentNode&&r.parentNode.removeChild(r)}),function(){var E;return o.value?i?(E=s.default)===null||E===void 0?void 0:E.call(s):r?I(A,{to:r},s):null:null}}});var e={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(t){var a=t.keyCode;if(t.altKey&&!t.ctrlKey||t.metaKey||a>=e.F1&&a<=e.F12)return!1;switch(a){case e.ALT:case e.CAPS_LOCK:case e.CONTEXT_MENU:case e.CTRL:case e.DOWN:case e.END:case e.ESC:case e.HOME:case e.INSERT:case e.LEFT:case e.MAC_FF_META:case e.META:case e.NUMLOCK:case e.NUM_CENTER:case e.PAGE_DOWN:case e.PAGE_UP:case e.PAUSE:case e.PRINT_SCREEN:case e.RIGHT:case e.SHIFT:case e.UP:case e.WIN_KEY:case e.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(t){if(t>=e.ZERO&&t<=e.NINE||t>=e.NUM_ZERO&&t<=e.NUM_MULTIPLY||t>=e.A&&t<=e.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&t===0)return!0;switch(t){case e.SPACE:case e.QUESTION_MARK:case e.NUM_PLUS:case e.NUM_MINUS:case e.NUM_PERIOD:case e.NUM_DIVISION:case e.SEMICOLON:case e.DASH:case e.EQUALS:case e.COMMA:case e.PERIOD:case e.SLASH:case e.APOSTROPHE:case e.SINGLE_QUOTE:case e.OPEN_SQUARE_BRACKET:case e.BACKSLASH:case e.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const D=e;export{D as K,m as P,p as a,K as b,H as c,O as s,h as u};

View File

@ -1 +0,0 @@
import{E as S,m as l,r as C,G as k,c as z,B as V,x as s,e as d,D as A,s as D,aj as N,ak as B}from"./index.ab0d47a4.js";import{w as F,x as G}from"./useFlexGapSupport.f5eec5c4.js";import{i as $,I as q}from"./index.0e96b1ad.js";var H=globalThis&&globalThis.__rest||function(r,n){var a={};for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&n.indexOf(o)<0&&(a[o]=r[o]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var t=0,o=Object.getOwnPropertySymbols(r);t<o.length;t++)n.indexOf(o[t])<0&&Object.prototype.propertyIsEnumerable.call(r,o[t])&&(a[o[t]]=r[o[t]]);return a},J={click:"onClick",hover:"onMouseover"},K=function(n){return n?d(N,null,null):d(B,null,null)};const W=S({name:"AInputPassword",inheritAttrs:!1,props:l(l({},$()),{prefixCls:String,inputPrefixCls:String,action:{type:String,default:"click"},visibilityToggle:{type:Boolean,default:!0},iconRender:Function}),setup:function(n,a){var o=a.slots,t=a.attrs,_=a.expose,u=C(!1),I=function(){var e=n.disabled;e||(u.value=!u.value)},p=C(),w=function(){var e;(e=p.value)===null||e===void 0||e.focus()},O=function(){var e;(e=p.value)===null||e===void 0||e.blur()};_({focus:w,blur:O});var R=function(e){var i,b=n.action,f=n.iconRender,x=f===void 0?o.iconRender||K:f,v=J[b]||"",m=x(u.value),E=(i={},s(i,v,I),s(i,"class","".concat(e,"-icon")),s(i,"key","passwordIcon"),s(i,"onMousedown",function(y){y.preventDefault()}),s(i,"onMouseup",function(y){y.preventDefault()}),i);return G(D(m)?m:d("span",null,[m]),E)},P=k("input-password",n),g=P.prefixCls,h=P.getPrefixCls,j=z(function(){return h("input",n.inputPrefixCls)}),T=function(){var e=n.size,i=n.visibilityToggle,b=H(n,["size","visibilityToggle"]),f=i&&R(g.value),x=V(g.value,t.class,s({},"".concat(g.value,"-").concat(e),!!e)),v=l(l(l({},F(b,["suffix","iconRender","action"])),t),{type:u.value?"text":"password",class:x,prefixCls:j.value,suffix:f});return e&&(v.size=e),d(q,A({ref:p},v),o)};return function(){return T()}}});export{W as _};

View File

@ -1 +0,0 @@
const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _};

View File

@ -1 +0,0 @@
import{aC as e,o as r,b as t}from"./index.ab0d47a4.js";const p={__name:"back",setup(a){return e().replace({path:"/main"}),(c,s)=>(r(),t("div"))}};export{p as default};

View File

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>Group 21</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
<g id="Group-21" transform="translate(77.000000, 73.000000)">
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
</g>
</g>
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
</g>
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
</g>
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
</g>
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
</g>
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
</g>
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.7 KiB

View File

@ -1 +0,0 @@
import{cJ as n}from"./index.ab0d47a4.js";const r=[{title:"\u540D\u79F0",dataIndex:"name",key:"name",width:120},{title:"\u56FE\u6807",dataIndex:"icon",key:"icon",width:60},{title:"\u8DEF\u7531",dataIndex:"path",key:"path",width:120},{title:"\u7C7B\u578B",dataIndex:"type",key:"type",width:80},{title:"\u7EC4\u4EF6\u8DEF\u5F84",dataIndex:"component",key:"component",width:120},{title:"\u6743\u9650\u6807\u8BC6",dataIndex:"identifier",key:"identifier",width:120},{title:"\u8BF7\u6C42\u63A5\u53E3",dataIndex:"api",key:"api",width:80},{title:"\u8BF7\u6C42\u65B9\u6CD5",dataIndex:"method",key:"method",width:80},{title:"\u521B\u5EFA\u65F6\u95F4",dataIndex:"created",key:"created",width:80},{title:"\u66F4\u65B0\u65F6\u95F4",dataIndex:"modified",key:"modified",width:80},{title:"\u64CD\u4F5C",key:"action",width:120}],a={0:"\u76EE\u5F55",1:"\u83DC\u5355",2:"\u6309\u94AE",3:"\u6570\u636E"},d={GET:"#61AFFE",POST:"#49CC90",DELETE:"#F93E3E",PUT:"#FCA130"},i={label:null,value:null},s=()=>Object.keys(a).map(e=>({label:a[e],value:parseInt(e)})),o=()=>{let e=Object.keys(d).map(t=>({label:t,value:t}));return e.unshift(i),e},m=()=>{let e=Object.keys(n).filter(t=>t.indexOf("Outlined")!==-1).map(t=>({label:t,value:t}));return e.unshift(i),e},u={name:[{required:!0,message:"\u8BF7\u8F93\u5165\u540D\u79F0",trigger:"blur"},{min:3,max:12,message:"3-12",trigger:"blur"}],path:[{required:!0,message:"\u8BF7\u8F93\u5165\u8DEF\u7531",trigger:"blur"},{min:1,max:20,message:"1~20",trigger:"blur"}]};export{o as a,a as b,r as c,d,m as i,s as m,u as r};

View File

@ -1 +0,0 @@
import{_ as e}from"./_plugin-vue_export-helper.cdc0426e.js";import{o,b as r}from"./index.ab0d47a4.js";const c={};function t(n,s){return o(),r("div",null,"debug123123")}const f=e(c,[["render",t]]);export{f as default};

View File

@ -1 +0,0 @@
var f=function(n){return setTimeout(n,16)},o=function(n){return clearTimeout(n)};typeof window<"u"&&"requestAnimationFrame"in window&&(f=function(n){return window.requestAnimationFrame(n)},o=function(n){return window.cancelAnimationFrame(n)});var u=0,a=new Map;function c(e){a.delete(e)}function m(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;u+=1;var r=u;function t(i){if(i===0)c(r),e();else{var d=f(function(){t(i-1)});a.set(r,d)}}return t(n),r}m.cancel=function(e){var n=a.get(e);return c(n),o(n)};export{m as w};

File diff suppressed because one or more lines are too long

View File

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg8"
version="1.1"
viewBox="0 0 6.3499999 6.3499999"
height="6.3499999mm"
width="6.3499999mm">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-87.539286,-84.426191)"
id="layer1">
<path
id="path815"
d="m 87.539286,84.426191 h 6.35 v 6.35 h -6.35 z"
style="fill:none;stroke-width:0.26458332" />
<path
style="stroke-width:0.26458332;fill:#ffffff"
id="path817"
d="m 90.714286,84.960649 c -1.457854,0 -2.640542,1.182688 -2.640542,2.640542 0,1.457854 1.182688,2.640542 2.640542,2.640542 1.457854,0 2.640542,-1.182688 2.640542,-2.640542 0,-1.457854 -1.182688,-2.640542 -2.640542,-2.640542 z m -0.137583,4.757209 v -1.656292 h -0.92075 l 1.322916,-2.577042 v 1.656292 h 0.886354 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{a8 as C,a9 as g,aa as y,ab as x,E,c as F,r as _,H as b,i as c,R as h,y as r,a5 as w}from"./index.ab0d47a4.js";function R(e){return C(e)||g(e)||y(e)||x()}function A(e){e.target.composing=!0}function v(e){!e.target.composing||(e.target.composing=!1,K(e.target,"input"))}function K(e,o){var t=document.createEvent("HTMLEvents");t.initEvent(o,!0,!0),e.dispatchEvent(t)}function d(e,o,t,n){e.addEventListener(o,t,n)}var M={created:function(o,t){(!t.modifiers||!t.modifiers.lazy)&&(d(o,"compositionstart",A),d(o,"compositionend",v),d(o,"change",v))}};const S=M;var i=Symbol("ContextProps"),m=Symbol("InternalContextProps"),j=function(o){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:F(function(){return!0}),n=_(new Map),a=function(u,p){n.value.set(u,p),n.value=new Map(n.value)},f=function(u){n.value.delete(u),n.value=new Map(n.value)};b([t,n],function(){}),r(i,o),r(m,{addFormItemField:a,removeFormItemField:f})},s={id:F(function(){}),onFieldBlur:function(){},onFieldChange:function(){},clearValidate:function(){}},l={addFormItemField:function(){},removeFormItemField:function(){}},B=function(){var o=c(m,l),t=Symbol("FormItemFieldKey"),n=w();return o.addFormItemField(t,n.type),h(function(){o.removeFormItemField(t)}),r(m,l),r(i,s),c(i,s)};const H=E({name:"AFormItemRest",setup:function(o,t){var n=t.slots;return r(m,l),r(i,s),function(){var a;return(a=n.default)===null||a===void 0?void 0:a.call(n)}}});export{H as F,R as _,j as a,S as b,B as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.ant-modal{box-sizing:border-box;padding:0 0 24px;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";pointer-events:none;position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);margin:0 auto}.ant-modal.ant-zoom-enter,.ant-modal.antzoom-appear{transform:none;opacity:0;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-modal-mask-hidden{display:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-wrap{z-index:1000}.ant-modal-title{margin:0;color:#000000d9;font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:#00000073;font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:#000000bf;text-decoration:none}.ant-modal-header{padding:16px 24px;color:#000000d9;background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #f0f0f0;border-radius:0 0 2px 2px}.ant-modal-footer .ant-btn+.ant-btn:not(.ant-dropdown-trigger){margin-bottom:0;margin-left:8px}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;padding-bottom:0;text-align:left;vertical-align:middle}@media (max-width: 767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{flex:1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{display:table;clear:both;content:""}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:#000000d9;font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:#000000d9;font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#ff4d4f}.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon,.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1890ff}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-modal-wrap-rtl{direction:rtl}.ant-modal-wrap-rtl .ant-modal-close{right:initial;left:0}.ant-modal-wrap-rtl .ant-modal-footer{text-align:left}.ant-modal-wrap-rtl .ant-modal-footer .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon{float:right;margin-right:0;margin-left:16px}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-right:38px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-btns{float:left}.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl.ant-modal-centered .ant-modal{text-align:right}

View File

@ -1 +0,0 @@
import{B as l}from"./index.0857d90f.js";import{E as m,G as d,c as g,x as u,e as h,af as y}from"./index.ab0d47a4.js";function v(e,n){for(var r=0;r<n.length;r++){var a=n[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function C(e,n,r){return n&&v(e.prototype,n),r&&v(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function w(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}var _=C(function e(n){w(this,e),this.error=new Error("unreachable case: ".concat(JSON.stringify(n)))}),x=function(){return{prefixCls:String,size:{type:String}}};const c=m({name:"AButtonGroup",props:x(),setup:function(n,r){var a=r.slots,s=d("btn-group",n),i=s.prefixCls,p=s.direction,b=g(function(){var t,f=n.size,o="";switch(f){case"large":o="lg";break;case"small":o="sm";break;case"middle":case void 0:break;default:console.warn(new _(f).error)}return t={},u(t,"".concat(i.value),!0),u(t,"".concat(i.value,"-").concat(o),o),u(t,"".concat(i.value,"-rtl"),p.value==="rtl"),t});return function(){var t;return h("div",{class:b.value},[y((t=a.default)===null||t===void 0?void 0:t.call(a))])}}});l.Group=c;l.install=function(e){return e.component(l.name,l),e.component(c.name,c),e};export{C as _,w as a};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import"./default.76e08716.js";import{F as s,I as x,_ as w}from"./index.0e96b1ad.js";import"./index.b2c65497.js";import{u as h,F as l}from"./index.5ec54e89.js";import{B as y}from"./index.0857d90f.js";import{u as k,r as F,a as B,c as R,o as C,b as U,d,e as t,w as r,f as m,U as S,L as M,p as N,g as V,h as j}from"./index.ab0d47a4.js";import{_ as q}from"./_plugin-vue_export-helper.cdc0426e.js";import"./index.9923b5dc.js";import{_ as A}from"./Password.ee3cd4fa.js";import"./index.8c51b797.js";import"./useFlexGapSupport.f5eec5c4.js";import"./index.9c196d1a.js";s.useInjectFormItemContext=h;s.ItemRest=l;s.install=function(e){return e.component(s.name,s),e.component(s.Item.name,s.Item),e.component(l.name,l),e};const L={username:[{required:!0,message:"\u8BF7\u8F93\u5165\u7528\u6237\u540D",trigger:"blur"},{min:5,max:20,message:"5~20",trigger:"blur"}],password:[{required:!0,message:"\u8BF7\u8F93\u5165\u5BC6\u7801",trigger:"blur"},{min:6,max:12,message:"6~12",trigger:"blur"}]};const O=e=>(N("data-v-1736884d"),e=e(),V(),e),D={class:"login"},P={class:"continer"},T=O(()=>d("h1",null,"Mini RBAC",-1)),$=j("\u767B\u5F55"),z={__name:"login",setup(e){const p=k(),_=F(),o=B({username:"admin",password:"123456"}),c=R(()=>!(o.username&&o.password)),f=i=>{!i||i.validate().then(()=>p.loginAction(o))};return(i,n)=>{const g=x,u=w,v=A,b=y,I=s;return C(),U("div",D,[d("div",P,[T,t(I,{ref_key:"formRef",ref:_,model:o,rules:m(L)},{default:r(()=>[t(u,{"has-feedback":"",name:"username"},{default:r(()=>[t(g,{value:o.username,"onUpdate:value":n[0]||(n[0]=a=>o.username=a),valueModifiers:{trim:!0},placeholder:"Username"},{prefix:r(()=>[t(m(S),{style:{color:"rgba(0, 0, 0, 0.25)"}})]),_:1},8,["value"])]),_:1}),t(u,{"has-feedback":"",name:"password"},{default:r(()=>[t(v,{value:o.password,"onUpdate:value":n[1]||(n[1]=a=>o.password=a),valueModifiers:{trim:!0},placeholder:"Password",autocomplete:"on"},{prefix:r(()=>[t(m(M),{style:{color:"rgba(0, 0, 0, 0.25)"}})]),_:1},8,["value"])]),_:1}),t(u,null,{default:r(()=>[t(b,{type:"primary","html-type":"submit",disabled:m(c),onClick:n[2]||(n[2]=a=>f(_.value))},{default:r(()=>[$]),_:1},8,["disabled"])]),_:1})]),_:1},8,["model","rules"])])])}}},oe=q(z,[["__scopeId","data-v-1736884d"]]);export{oe as default};

View File

@ -1 +0,0 @@
.login[data-v-1736884d]{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;width:100%;height:100%;background-image:url(/static/assets/background.d7103c44.svg)}.continer[data-v-1736884d]{width:300px;height:300px}.continer h1[data-v-1736884d]{margin-bottom:30px}.continer .ant-btn[data-v-1736884d]{width:100%}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{cK as u}from"./index.ab0d47a4.js";function r(e){return u({url:"/menu",params:e})}function o(e){return u({url:`/menu/${e}`,method:"delete"})}function m(e){return u({url:"/menu",method:"post",data:e})}function d(e,n){return u({url:`/menu/${e}`,method:"put",data:n})}export{m as a,o as d,r as g,d as p};

View File

@ -1 +0,0 @@
import{c as _}from"./conf.a6a301e5.js";import{g as f,d as y}from"./menu.5caae388.js";import{T as k}from"./table.ce855193.js";import v from"./menu-modal.113536a9.js";import{u as C,r as m,a3 as g,a as M,b0 as h,o as b,b as x,e as l,f as r,cI as P}from"./index.ab0d47a4.js";import{_ as R}from"./_plugin-vue_export-helper.cdc0426e.js";import"./default.76e08716.js";import"./index.49a4d642.js";import"./KeyCode.99f746d5.js";import"./index.58d81b67.js";import"./useState.01763bb3.js";import"./useFlexGapSupport.f5eec5c4.js";import"./index.9c196d1a.js";import"./index.b2c65497.js";import"./index.0857d90f.js";import"./index.b49a664b.js";import"./index.5ec54e89.js";import"./index.cef07818.js";import"./index.8c51b797.js";import"./index.9914bffc.js";import"./index.0e96b1ad.js";import"./index.ced49a81.js";import"./iconUtil.60568eec.js";import"./index.9923b5dc.js";import"./Password.ee3cd4fa.js";import"./useModal.67c34fed.js";const T={class:"user"},w={__name:"menu",setup(B){C().$subscribe((t,o)=>{o.isPush&&(a(),o.isPush=!1)});const i=m([]);function a(){f().then(t=>i.value=t.data)}g(()=>{a()});const s=m(),e=M({title:"",type:""}),n=()=>{e.title="\u65B0\u589E\u83DC\u5355",e.type="create",s.value.showModal=!0},p=t=>{e.title="\u7F16\u8F91\u83DC\u5355",e.type="update",s.value.openModal(t)},c=async t=>{const o=await y(t.id);P(o),a()},{title:u,type:d}=h(e);return(t,o)=>(b(),x("div",T,[l(k,{columns:r(_),"data-source":i.value,"page-name":"menu","list-title":"\u83DC\u5355\u5217\u8868",onCreateClick:n,onUpdateClick:p,onDeleteClick:c},null,8,["columns","data-source"]),l(v,{ref_key:"modalRef",ref:s,"modal-title":r(u),"modal-type":r(d)},null,8,["modal-title","modal-type"])]))}},at=R(w,[["__scopeId","data-v-0d3d3491"]]);export{at as default};

View File

@ -1 +0,0 @@
.search[data-v-0d3d3491]{display:flex;align-content:center;margin-bottom:16px;padding:24px;background:#fff}.data[data-v-0d3d3491]{margin-top:20px}

View File

@ -1 +0,0 @@
import"./default.76e08716.js";import{M as F}from"./index.cef07818.js";import"./index.0857d90f.js";import{I as T,_ as S,F as U}from"./index.0e96b1ad.js";import"./index.b2c65497.js";import"./index.5ec54e89.js";import{_ as N}from"./index.ced49a81.js";import{a as O,p as q}from"./role.efebb491.js";import{a as D,r as c,H as $,o as j,b as B,e as l,w as m,f as k,a$ as P,cI as z,u as E,c$ as H}from"./index.ab0d47a4.js";import{g as V}from"./menu.5caae388.js";import{u as A}from"./useModal.67c34fed.js";const oe=[{title:"ID",dataIndex:"id",key:"id"},{title:"\u540D\u79F0",dataIndex:"name",key:"name"},{title:"\u63CF\u8FF0",dataIndex:"remark",key:"remark"},{title:"\u72B6\u6001",dataIndex:"status",key:"status"},{title:"\u521B\u5EFA\u65F6\u95F4",dataIndex:"created",key:"created"},{title:"\u66F4\u65B0\u65F6\u95F4",dataIndex:"modified",key:"modified"},{title:"\u64CD\u4F5C",key:"action"}],G={name:[{required:!0,message:"\u8BF7\u8F93\u5165\u540D\u79F0",trigger:"blur"},{min:3,max:12,message:"3-12",trigger:"blur"}],remark:[{required:!0,message:"\u8BF7\u8F93\u5165\u63CF\u8FF0",trigger:"blur"},{min:1,max:20,message:"1~20",trigger:"blur"}],menus:[{required:!0,message:"\u8BF7\u9009\u62E9\u83DC\u5355",trigger:"blur"}]},J={key:"id",title:"name",children:"children"},L={class:"modal"},Q={__name:"role-modal",props:{modalTitle:{type:String},modalType:{type:String,default:"create"}},setup(v,{expose:b}){const h=v,{showModal:s,updateId:y,formRef:p}=A(),t=D({name:"",remark:"",menus:[]}),g=c(),M=c();$(s,async a=>{if(a){const e=await V();g.value=e.data}});const d=c([]),f=c([]),I=(a,e)=>{t.menus=[...e.halfCheckedKeys,...a]},K=a=>{let e=[],r=[];return H(a.id).then(u=>{function i(_){for(const o of _)e.push(o.id),o.children?i(o.children):r.push(o.id)}i(u.data)}),{allMenus:e,checkMenus:r}},w=a=>{s.value=!0;const{allMenus:e,checkMenus:r}=K(a);y.value=a.id,t.name=a.name,t.remark=a.remark,d.value=r,t.menus=e},x=()=>{p.value.resetFields(),d.value=[],f.value=[]},R=()=>{p.value.validateFields().then(async()=>{let a;h.modalType==="create"?a=await O(t):a=await q(y.value,t),z(a),x(),s.value=!s.value,E().isPush=!0})},C=()=>{x()};return b({showModal:s,openModal:w}),(a,e)=>{const r=T,u=S,i=N,_=U,o=F;return j(),B("div",L,[l(o,{visible:k(s),"onUpdate:visible":e[4]||(e[4]=n=>P(s)?s.value=n:null),title:v.modalTitle,"ok-text":"\u786E\u8BA4","cancel-text":"\u53D6\u6D88",onOk:R,onCancel:C},{default:m(()=>[l(_,{ref_key:"formRef",ref:p,model:t,rules:k(G)},{default:m(()=>[l(u,{name:"name",label:"\u540D\u79F0"},{default:m(()=>[l(r,{value:t.name,"onUpdate:value":e[0]||(e[0]=n=>t.name=n)},null,8,["value"])]),_:1}),l(u,{name:"remark",label:"\u63CF\u8FF0"},{default:m(()=>[l(r,{value:t.remark,"onUpdate:value":e[1]||(e[1]=n=>t.remark=n)},null,8,["value"])]),_:1}),l(u,{name:"menus",label:"\u83DC\u5355"},{default:m(()=>[l(i,{ref_key:"treeRef",ref:M,checkable:"","tree-data":g.value,fieldNames:k(J),onCheck:I,checkedKeys:d.value,"onUpdate:checkedKeys":e[2]||(e[2]=n=>d.value=n),expandedKeys:f.value,"onUpdate:expandedKeys":e[3]||(e[3]=n=>f.value=n)},null,8,["tree-data","fieldNames","checkedKeys","expandedKeys"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["visible","title"])])}}},ue=Object.freeze(Object.defineProperty({__proto__:null,default:Q},Symbol.toStringTag,{value:"Module"}));export{Q as _,oe as c,ue as r};

View File

@ -1 +0,0 @@
import"./default.76e08716.js";import{I as h,_ as y,F as k}from"./index.0e96b1ad.js";import"./index.b2c65497.js";import"./index.5ec54e89.js";import{B as x}from"./index.0857d90f.js";import{u as C}from"./useSearch.2eb8f7a1.js";import{_ as B}from"./_plugin-vue_export-helper.cdc0426e.js";import{a as q,aT as E,o as s,b,e,w as t,a4 as g,aE as w,f as _,h as c}from"./index.ab0d47a4.js";import"./useFlexGapSupport.f5eec5c4.js";const F={class:"search"},I=c("\u67E5\u8BE2"),R=c("\u91CD\u7F6E"),S={__name:"role-search",emits:["queryClick","resetClick"],setup(D,{emit:l}){const o=q({name:""}),{formRef:m,queryEvent:i,resetEvent:p}=C(l,o);return(N,a)=>{const f=h,r=y,n=x,u=k,d=E("per");return s(),b("div",F,[e(u,{ref_key:"formRef",ref:m,layout:"inline",model:o},{default:t(()=>[e(r,{label:"\u540D\u79F0",name:"name"},{default:t(()=>[e(f,{placeholder:"\u89D2\u8272\u540D\u79F0",value:o.name,"onUpdate:value":a[0]||(a[0]=v=>o.name=v)},null,8,["value"])]),_:1}),g((s(),w(r,null,{default:t(()=>[e(n,{type:"primary",onClick:_(i)},{default:t(()=>[I]),_:1},8,["onClick"]),e(n,{style:{"margin-left":"10px"},onClick:_(p)},{default:t(()=>[R]),_:1},8,["onClick"])]),_:1})),[[d,"role:query"]])]),_:1},8,["model"])])}}},K=B(S,[["__scopeId","data-v-ff884f68"]]);export{K as default};

View File

@ -1 +0,0 @@
.search[data-v-ff884f68]{display:flex;align-content:center;margin-bottom:16px;padding:24px;background:#fff}

View File

@ -1 +0,0 @@
import{T as h}from"./table.ce855193.js";import{g as R,q as S,d as b}from"./role.efebb491.js";import{c as x,_ as z}from"./role-modal.b5f7d15c.js";import Q from"./role-search.a10c3ca3.js";import{u as T,r as p,a as d,a3 as w,b0 as M,o as P,b as $,e as c,f as m,cI as q}from"./index.ab0d47a4.js";import{_ as B}from"./_plugin-vue_export-helper.cdc0426e.js";import"./default.76e08716.js";import"./index.49a4d642.js";import"./KeyCode.99f746d5.js";import"./index.58d81b67.js";import"./useState.01763bb3.js";import"./useFlexGapSupport.f5eec5c4.js";import"./index.9c196d1a.js";import"./index.b2c65497.js";import"./index.0857d90f.js";import"./index.b49a664b.js";import"./index.5ec54e89.js";import"./index.cef07818.js";import"./index.8c51b797.js";import"./index.9914bffc.js";import"./index.0e96b1ad.js";import"./index.ced49a81.js";import"./iconUtil.60568eec.js";import"./conf.a6a301e5.js";import"./index.9923b5dc.js";import"./Password.ee3cd4fa.js";import"./menu.5caae388.js";import"./useModal.67c34fed.js";import"./useSearch.2eb8f7a1.js";const D={class:"role"},I={__name:"role",setup(E){T().$subscribe((t,e)=>{e.isPush&&(a(),e.isPush=!1)});const l=p(!1),r=p([]),o=d({current:1,pageSize:5,total:0,pageSizeOptions:["5","10","50"],showTotal:t=>`\u5171 ${t} \u6761\u6570\u636E`,onChange:(t,e)=>{o.current=t,o.pageSize=e,a()}});w(()=>{a()});const a=(t=null)=>{let e=o.current,u=o.pageSize;l.value?S({offset:e,limit:u,name:t==null?void 0:t.name}).then(i=>{r.value=i.data.items,o.total=i.data.total}):R({offset:e,limit:u}).then(i=>{r.value=i.data.items,o.total=i.data.total})},_=t=>{l.value=!0,a(t)},f=()=>{l.value=!1,a()},g=async t=>{const e=await b(t.id);q(e),a()},n=p(),s=d({title:"",type:""}),y=()=>{s.title="\u65B0\u589E\u89D2\u8272",s.type="create",n.value.showModal=!0},v=t=>{s.title="\u7F16\u8F91\u89D2\u8272",s.type="update",n.value.openModal(t)},{title:k,type:C}=M(s);return(t,e)=>(P(),$("div",D,[c(Q,{onQueryClick:_,onResetClick:f}),c(h,{columns:m(x),"data-source":r.value,pagination:o,"page-name":"role","list-title":"\u89D2\u8272\u5217\u8868",onCreateClick:y,onUpdateClick:v,onDeleteClick:g},null,8,["columns","data-source","pagination"]),c(z,{ref_key:"modalRef",ref:n,"modal-title":m(k),"modal-type":m(C)},null,8,["modal-title","modal-type"])]))}},_t=B(I,[["__scopeId","data-v-fa550a68"]]);export{_t as default};

View File

@ -1 +0,0 @@
import{cK as r}from"./index.ab0d47a4.js";function u(e){return r({url:"/role",params:e})}function l(e){return r({url:"/role/query",method:"post",data:e})}function n(e){return r({url:`/role/${e}`,method:"delete"})}function s(e){return r({url:"/role",method:"post",data:e})}function d(e,o){return r({url:`/role/${e}`,method:"put",data:o})}export{s as a,n as d,u as g,d as p,l as q};

View File

@ -1 +0,0 @@
.search[data-v-fa550a68]{display:flex;align-content:center;margin-bottom:16px;padding:24px;background:#fff}.data[data-v-fa550a68]{margin-top:20px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{r as o}from"./index.ab0d47a4.js";const a=()=>{const s=o(!1),r=o(),t=o();return{showModal:s,updateId:r,formRef:t}};export{a as u};

View File

@ -1 +0,0 @@
import{r as s}from"./index.ab0d47a4.js";const u=(e,t)=>{const r=s();return{formRef:r,queryEvent:()=>{e("queryClick",t)},resetEvent:()=>{r.value.resetFields(),e("resetClick")}}};export{u};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import"./default.76e08716.js";import{M as R}from"./index.cef07818.js";import"./index.0857d90f.js";import{I as T,_ as O,F as S}from"./index.0e96b1ad.js";import"./index.b2c65497.js";import"./index.5ec54e89.js";import{_ as B}from"./index.b49a664b.js";import{u as C,a as y,r as j,H as E,o as k,b as P,e as t,w as n,aE as x,f as b,a$ as z,d0 as D,d1 as H,d2 as N,d3 as V,cI as $}from"./index.ab0d47a4.js";import{g as A}from"./role.efebb491.js";import{u as G}from"./useModal.67c34fed.js";import{_ as J}from"./Password.ee3cd4fa.js";const ne=[{title:"ID",dataIndex:"id",key:"id"},{title:"\u7528\u6237\u540D",dataIndex:"username",key:"username"},{title:"\u6635\u79F0",dataIndex:"nickname",key:"nickname"},{title:"\u72B6\u6001",dataIndex:"status",key:"status"},{title:"\u521B\u5EFA\u65F6\u95F4",dataIndex:"created",key:"created"},{title:"\u66F4\u65B0\u65F6\u95F4",dataIndex:"modified",key:"modified"},{title:"\u64CD\u4F5C",key:"action"}],K={username:[{required:!0,message:"\u8BF7\u8F93\u5165\u7528\u6237\u540D",trigger:"blur"},{min:5,max:20,message:"5~20",trigger:"blur"}],password:[{required:!0,message:"\u8BF7\u8F93\u5165\u5BC6\u7801",trigger:"blur"},{min:6,max:12,message:"6~12",trigger:"blur"}],nickname:[{required:!0,message:"\u8BF7\u8F93\u5165\u6635\u79F0",trigger:"blur"},{min:5,max:20,message:"5~20",trigger:"blur"}],roles:[{required:!0,message:"\u8BF7\u914D\u7F6E\u89D2\u8272",trigger:"blur"}]},L={password:[{required:!0,message:"\u8BF7\u8F93\u5165\u5BC6\u7801",trigger:"blur"},{min:6,max:12,message:"6~12",trigger:"blur"}],nickname:[{required:!0,message:"\u8BF7\u8F93\u5165\u6635\u79F0",trigger:"blur"},{min:5,max:20,message:"5~20",trigger:"blur"}],roles:[{required:!0,message:"\u8BF7\u914D\u7F6E\u89D2\u8272",trigger:"blur"}]},Q={class:"modal"},W={__name:"user-modal",props:{modalTitle:{type:String},modalType:{type:String,default:"create"}},setup(g,{expose:U}){const I=g,w=C(),{showModal:o,updateId:f,formRef:m}=G(),s=y({username:"",nickname:"",password:"",roles:[]}),l=y({nickname:"",password:"",roles:[]}),v=j([]);E(o,async()=>{if(o.value){const u=await A({limit:100});v.value=u.data.items.map(e=>({label:e.name,value:e.id}))}});const q=async u=>{o.value=!o.value,f.value=u.id;const e=await D(u.id);l.roles=e.data.roles.map(i=>i.id),l.nickname=e.data.nickname,l.password="\u52A0\u5BC6\u4E4B\u540E\u7684\u5BC6\u7801"},F=()=>{m.value.validateFields().then(async()=>{let u,e=!1;if(I.modalType==="create")s.roles=s.roles.map((i,r)=>({rid:i,status:r===0?5:1})),u=await H(s);else{const{nickname:i,password:r,roles:d}=l;let p=d.map((c,_)=>({rid:c,status:_===0?5:1}));u=await N(f.value,{nickname:i,password:r,roles:p}),f.value===w.userInfo.id&&(V.warning("\u4FEE\u6539\u767B\u5F55\u7528\u6237\u4FE1\u606F\uFF0C\u91CD\u65B0\u767B\u5F55\u751F\u6548."),e=!0)}e||$(u),m.value.resetFields(),o.value=!o.value,w.isPush=!0})},M=()=>{m.value.resetFields()};return U({showModal:o,openModal:q}),(u,e)=>{const i=T,r=O,d=J,p=B,c=S,_=R;return k(),P("div",Q,[t(_,{visible:b(o),"onUpdate:visible":e[7]||(e[7]=a=>z(o)?o.value=a:null),title:g.modalTitle,"ok-text":"\u786E\u8BA4","cancel-text":"\u53D6\u6D88",onOk:F,onCancel:M},{default:n(()=>[g.modalType==="create"?(k(),x(c,{key:0,ref_key:"formRef",ref:m,model:s,rules:b(K)},{default:n(()=>[t(r,{name:"username",label:"\u8D26\u53F7"},{default:n(()=>[t(i,{value:s.username,"onUpdate:value":e[0]||(e[0]=a=>s.username=a),placeholder:"\u7528\u4E8E\u767B\u5F55"},null,8,["value"])]),_:1}),t(r,{name:"nickname",label:"\u6635\u79F0"},{default:n(()=>[t(i,{value:s.nickname,"onUpdate:value":e[1]||(e[1]=a=>s.nickname=a)},null,8,["value"])]),_:1}),t(r,{name:"password",label:"\u5BC6\u7801"},{default:n(()=>[t(d,{value:s.password,"onUpdate:value":e[2]||(e[2]=a=>s.password=a),autocomplete:"on"},null,8,["value"])]),_:1}),t(r,{name:"roles",label:"\u89D2\u8272"},{default:n(()=>[t(p,{value:s.roles,"onUpdate:value":e[3]||(e[3]=a=>s.roles=a),mode:"multiple",style:{width:"100%"},placeholder:"\u9ED8\u8BA4\u6FC0\u6D3B\u7B2C\u4E00\u4E2A\u89D2\u8272",options:v.value},null,8,["value","options"])]),_:1})]),_:1},8,["model","rules"])):(k(),x(c,{key:1,ref_key:"formRef",ref:m,model:l,rules:b(L)},{default:n(()=>[t(r,{name:"nickname",label:"\u6635\u79F0"},{default:n(()=>[t(i,{value:l.nickname,"onUpdate:value":e[4]||(e[4]=a=>l.nickname=a)},null,8,["value"])]),_:1}),t(r,{name:"password",label:"\u5BC6\u7801"},{default:n(()=>[t(d,{value:l.password,"onUpdate:value":e[5]||(e[5]=a=>l.password=a),autocomplete:"on"},null,8,["value"])]),_:1}),t(r,{name:"roles",label:"\u89D2\u8272"},{default:n(()=>[t(p,{value:l.roles,"onUpdate:value":e[6]||(e[6]=a=>l.roles=a),mode:"multiple",style:{width:"100%"},placeholder:"\u9ED8\u8BA4\u6FC0\u6D3B\u7B2C\u4E00\u4E2A\u89D2\u8272",options:v.value},null,8,["value","options"])]),_:1})]),_:1},8,["model","rules"]))]),_:1},8,["visible","title"])])}}},ue=Object.freeze(Object.defineProperty({__proto__:null,default:W},Symbol.toStringTag,{value:"Module"}));export{W as _,ne as c,ue as u};

View File

@ -1 +0,0 @@
.search[data-v-3a5631bb]{display:flex;align-content:center;margin-bottom:16px;padding:24px;background:#fff}

View File

@ -1 +0,0 @@
import"./default.76e08716.js";import{I as k,_ as h,F as y}from"./index.0e96b1ad.js";import"./index.b2c65497.js";import"./index.5ec54e89.js";import{B as b}from"./index.0857d90f.js";import{u as x}from"./useSearch.2eb8f7a1.js";import{_ as C}from"./_plugin-vue_export-helper.cdc0426e.js";import{a as B,aT as q,o as l,b as E,e,w as a,a4 as g,aE as w,f as c,h as m}from"./index.ab0d47a4.js";import"./useFlexGapSupport.f5eec5c4.js";const F={class:"search"},I=m("\u67E5\u8BE2"),S=m("\u91CD\u7F6E"),U={__name:"user-search",emits:["queryClick","resetClick"],setup(D,{emit:i}){const t=B({username:"",nickname:""}),{formRef:u,queryEvent:p,resetEvent:f}=x(i,t);return(N,o)=>{const s=k,n=h,_=b,d=y,v=q("per");return l(),E("div",F,[e(d,{ref_key:"formRef",ref:u,layout:"inline",model:t,name:"search"},{default:a(()=>[e(n,{label:"\u7528\u6237\u540D",name:"username"},{default:a(()=>[e(s,{placeholder:"\u7528\u6237\u540D",value:t.username,"onUpdate:value":o[0]||(o[0]=r=>t.username=r)},null,8,["value"])]),_:1}),e(n,{label:"\u6635\u79F0",name:"nickname"},{default:a(()=>[e(s,{placeholder:"\u6635\u79F0",value:t.nickname,"onUpdate:value":o[1]||(o[1]=r=>t.nickname=r)},null,8,["value"])]),_:1}),g((l(),w(n,null,{default:a(()=>[e(_,{type:"primary",onClick:c(p)},{default:a(()=>[I]),_:1},8,["onClick"]),e(_,{style:{"margin-left":"10px"},onClick:c(f)},{default:a(()=>[S]),_:1},8,["onClick"])]),_:1})),[[v,"user:query"]])]),_:1},8,["model"])])}}},K=C(U,[["__scopeId","data-v-3a5631bb"]]);export{K as default};

View File

@ -1 +0,0 @@
import{T as v}from"./table.ce855193.js";import{u as h,r as c,a as d,a3 as C,d4 as S,d5 as U,o as b,b as w,e as p,f as x,d6 as z,cI as M}from"./index.ab0d47a4.js";import{c as P,_ as Q}from"./user-modal.cfcef721.js";import T from"./user-search.b47c3e66.js";import{_ as R}from"./_plugin-vue_export-helper.cdc0426e.js";import"./default.76e08716.js";import"./index.49a4d642.js";import"./KeyCode.99f746d5.js";import"./index.58d81b67.js";import"./useState.01763bb3.js";import"./useFlexGapSupport.f5eec5c4.js";import"./index.9c196d1a.js";import"./index.b2c65497.js";import"./index.0857d90f.js";import"./index.b49a664b.js";import"./index.5ec54e89.js";import"./index.cef07818.js";import"./index.8c51b797.js";import"./index.9914bffc.js";import"./index.0e96b1ad.js";import"./index.ced49a81.js";import"./iconUtil.60568eec.js";import"./conf.a6a301e5.js";import"./index.9923b5dc.js";import"./Password.ee3cd4fa.js";import"./role.efebb491.js";import"./useModal.67c34fed.js";import"./useSearch.2eb8f7a1.js";const $={class:"user"},B={__name:"user",setup(D){const u=h();u.$subscribe((e,t)=>{t.isPush&&(s(),t.isPush=!1)});const l=c(!1),n=c([]),r=c(),o=d({title:"",type:""}),a=d({current:1,pageSize:5,total:0,pageSizeOptions:["5","10","50"],showTotal:e=>`\u5171 ${e} \u6761\u6570\u636E`,onChange:(e,t)=>{a.current=e,a.pageSize=t,s()}});C(()=>{s()});const s=(e=null)=>{let t=a.current,m=a.pageSize;l.value?U({offset:t,limit:m,username:e==null?void 0:e.username,nickname:e==null?void 0:e.nickname}).then(i=>{n.value=i.data.items,a.total=i.data.total}):S({offset:t,limit:m}).then(i=>{n.value=i.data.items,a.total=i.data.total})},_=e=>{l.value=!0,s(e)},y=()=>{l.value=!1,u.isPush=!0},f=async e=>{const t=await z(e.id);M(t),s()},g=async()=>{o.title="\u65B0\u589E\u7528\u6237",o.type="create",r.value.showModal=!r.value.showModal},k=async e=>{o.title="\u7F16\u8F91\u7528\u6237",o.type="update",r.value.openModal(e)};return(e,t)=>(b(),w("div",$,[p(T,{onQueryClick:_,onResetClick:y}),p(v,{columns:x(P),"data-source":n.value,pagination:a,"page-name":"user","list-title":"\u7528\u6237\u5217\u8868",onCreateClick:g,onUpdateClick:k,onDeleteClick:f},null,8,["columns","data-source","pagination"]),p(Q,{ref_key:"modalRef",ref:r,"modal-title":o.title,"modal-type":o.type},null,8,["modal-title","modal-type"])]))}},pe=R(B,[["__scopeId","data-v-4a6e3181"]]);export{pe as default};

View File

@ -1 +0,0 @@
.search[data-v-4a6e3181]{display:flex;align-content:center;margin-bottom:16px;padding:24px;background:#fff}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,15 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/static/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mini RBAC</title>
<script type="module" crossorigin src="/static/assets/index.ab0d47a4.js"></script>
<link rel="stylesheet" href="/static/assets/index.9af6577f.css">
</head>
<body>
<div id="app"></div>
</body>
</html>