no message

Mix
鹿和sa0ChunLuyu 3 years ago
parent a3caf2990a
commit ceb19e2c30

@ -0,0 +1,108 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\EditAdminAuthInput;
use App\Models\Admin;
use App\Models\AdminAuth;
use App\Models\Auth;
use Login;
use Yo;
class AdminAuthController extends Controller
{
public function select()
{
Login::admin();
$admin_auth_list = AdminAuth::select('id', 'name', 'del')->where('del', 2)->orderBy('updated_at', 'desc')->get();
$list = [];
foreach ($admin_auth_list as $item) {
$push = true;
if ($item->del == 1) {
$admin_count = Admin::where('admin_auth_id', $item->id)->where('del', 2)->count();
if ($admin_count == 0) $push = false;
}
if ($push) {
$list[] = [
'value' => $item->id,
'label' => $item->name,
'disabled' => $item->del == 1,
];
}
}
return Yo::echo([
'list' => $list
]);
}
public function list()
{
Login::admin();
$admin_auth_list = AdminAuth::where('del', 2)->orderBy('updated_at', 'desc')->get();
$list = [];
foreach ($admin_auth_list as $item) {
$auth_ids_turn = [];
foreach (json_decode($item->auth_ids, true) as $i) {
$auth_ids_turn[] = intval($i);
}
$list[] = [
'id' => $item->id,
'name' => $item->name,
'auth_ids' => $item->auth_ids,
'auth_ids_turn' => $auth_ids_turn,
'remark' => $item->remark,
];
}
return Yo::echo([
'list' => $list
]);
}
public function delete()
{
Login::admin([5]);
$ids = request()->post('ids');
AdminAuth::whereIn('id', $ids)->update([
'del' => 1
]);
return Yo::delete_echo($ids);
}
public function update(EditAdminAuthInput $request)
{
Login::admin([5]);
$id = request()->post('id');
$name = $request->post('name');
$auth_ids = $request->post('auth_ids');
$remark = $request->post('remark');
$auth_ids_arr = [];
foreach ($auth_ids as $auth_id) $auth_ids_arr[] = (string)$auth_id;
$auth_ids_str = json_encode($auth_ids_arr, JSON_UNESCAPED_UNICODE);
if (mb_strlen($auth_ids_str) > 1000) Yo::error_echo(100014);
$admin_auth = AdminAuth::find($id);
if (!$admin_auth || $admin_auth->del !== 2) Yo::error_echo(100000, ['权限']);
$admin_auth->name = $name;
$admin_auth->auth_ids = $auth_ids_str;
$admin_auth->remark = $remark ?? '';
$admin_auth->save();
return Yo::update_echo($admin_auth->id);
}
public function create(EditAdminAuthInput $request)
{
Login::admin([5]);
$name = $request->post('name');
$auth_ids = $request->post('auth_ids');
$remark = $request->post('remark');
$auth_ids_arr = [];
foreach ($auth_ids as $auth_id) $auth_ids_arr[] = (string)$auth_id;
$auth_ids_str = json_encode($auth_ids_arr, JSON_UNESCAPED_UNICODE);
if (mb_strlen($auth_ids_str) > 1000) Yo::error_echo(100014);
$admin_auth = new AdminAuth();
$admin_auth->name = $name;
$admin_auth->auth_ids = $auth_ids_str ?? '[]';
$admin_auth->remark = $remark ?? '';
$admin_auth->save();
return Yo::create_echo($admin_auth->id);
}
}

@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Http\Requests\CreateAdminInput;
use App\Http\Requests\UpdateAdminNickname;
use App\Http\Requests\UpdateAdminPassword;
use App\Models\Admin;
@ -15,6 +16,99 @@ use Login;
class AdminController extends Controller
{
public function delete()
{
Login::admin([6]);
$ids = request()->post('ids');
$super_admin_count = Admin::whereIn('id', $ids)->where('admin_auth_id', -1)->where('del', 2)->count();
if ($super_admin_count > 0) Yo::error_echo(100018);
Admin::whereIn('id', $ids)->update([
'del' => 1
]);
AdminAccount::whereIn('admin_id', $ids)->where('del', 2)->update([
'del' => 1
]);
return Yo::delete_echo($ids);
}
public function update(UpdateAdminNickname $request)
{
Login::admin([6]);
$admin_id = $request->post('admin_id');
$nickname = $request->post('nickname');
$status = $request->post('status');
$admin_auth_id = $request->post('admin_auth_id');
$admin = Admin::find($admin_id);
if (!$admin) Yo::error_echo(100000, ['管理员']);
if ($admin->admin_auth_id != -1 && $admin_auth_id == -1) Yo::error_echo(100018);
if ($admin->admin_auth_id == -1 && $admin_auth_id != -1) Yo::error_echo(100018);
if ($admin->admin_auth_id == -1 && $status == 2) Yo::error_echo(100018);
$admin->nickname = $nickname;
$admin->admin_auth_id = $admin_auth_id;
$admin->status = $status;
$admin->save();
return Yo::update_echo($admin->id);
}
public function create(CreateAdminInput $request)
{
Login::admin([6]);
$nickname = $request->post('nickname');
$account = $request->post('account');
$password = $request->post('password');
$admin_auth_id = request()->post('admin_auth_id');
if ($admin_auth_id == -1) Yo::error_echo(100018);
$admin_account_check = AdminAccount::select('id')
->where('account', $account)
->where('type', 1)
->where('del', 2)
->first();
if ($admin_account_check) Yo::error_echo(100017);
$admin = new Admin();
$admin->nickname = $nickname;
$admin->admin_auth_id = $admin_auth_id;
$admin->save();
$admin_account = new AdminAccount();
$admin_account->admin_id = $admin->id;
$admin_account->account = $account;
$admin_account->secret = bcrypt($password);
$admin_account->type = 1;
$admin_account->save();
return Yo::create_echo($admin->id);
}
public function list()
{
Login::admin([6]);
$status = request()->post('status');
$search = request()->post('search');
$admin_list = Admin::select('*')
->selectRaw("IFNULL((select name from admin_auths where admins.admin_auth_id = admin_auths.id),'') as admin_auth_name")
->selectRaw("IFNULL((select account from admin_accounts where admins.id = admin_accounts.admin_id and del = 2),'') as account")
->selectRaw("IFNULL((select id from admin_accounts where admins.id = admin_accounts.admin_id and del = 2),'') as account_id")
->where(function ($query) use ($status) {
if ($status != 0) $query->where('status', $status);
})
->where(function ($query) use ($search) {
if ($search != '') $query->where('nickname', 'like', "%$search%");
})
->where('del', 2)
->paginate(15);
return Yo::echo($admin_list);
}
public function edit_password(UpdateAdminPassword $request)
{
Login::admin([6]);
$account_id = request()->post('account_id');
$password = $request->post('password');
$admin_account = AdminAccount::where('id', $account_id)->first();
if (!$admin_account) Yo::error_echo(100002);
$admin_account->secret = bcrypt($password);
$admin_account->save();
return Yo::update_echo(Login::$info->id);
}
public function change_password(UpdateAdminPassword $request)
{
Login::admin();

@ -0,0 +1,140 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\EditAuthInput;
use App\Models\Auth;
use Yo;
use Login;
class AuthController extends Controller
{
public function list()
{
Login::admin();
$group = Auth::select('*')
->where('type', 1)->where('del', 2)
->orderBy('order', 'desc')->get();
$list = [];
foreach ($group as $item) {
$auth_list = Auth::select('*')->where('pid', $item->id)
->where('type', 2)->where('del', 2)
->orderBy('order', 'desc')->get();
$item['children'] = $auth_list;
$list[] = $item;
}
return Yo::echo([
'list' => $list,
]);
}
public function delete()
{
Login::admin([9]);
$id = request()->post('id');
$auth = Auth::where('id', $id)->where('del', 2)->first();
if (!$auth) Yo::error_echo(100000, ['路由']);
$auth->del = 1;
$auth->save();
if ($auth->pid == 0) {
Auth::where('pid', $id)->where('del', 2)->update([
'del' => 1
]);
}
return Yo::delete_echo($id);
}
public function update(EditAuthInput $request)
{
Login::admin([9]);
$id = $request->post('id');
$name = $request->post('name');
$title = $request->post('title');
$icon = $request->post('icon');
$pid = $request->post('pid');
$check_type = $request->post('check_type');
$show = $request->post('show');
$status = $request->post('status');
$order = $request->post('order');
$auth = Auth::where('id', $id)->where('del', 2)->first();
if (!$auth) Yo::error_echo(100000, ['路由']);
$type = $auth->type;
if ($auth->pid != $pid) {
if ($auth->pid == 0) {
$s_auth = Auth::where('pid', $id)->where('del', 2)->count();
if ($s_auth > 0) Yo::error_echo(100023);
$type = 2;
} else {
if ($pid != 0) {
$p_auth = Auth::where('id', $pid)->where('pid', 0)->where('del', 2)->first();
if (!$p_auth) Yo::error_echo(100000, ['分组']);
$type = 2;
}
}
}
$auth->name = $name;
$auth->title = $title;
$auth->icon = $icon ?? '';
$auth->pid = $pid;
$auth->type = $type;
$auth->check_type = $check_type;
$auth->show = $show;
$auth->status = $status;
$auth->order = $order;
$auth->save();
return Yo::update_echo($auth->id);
}
public function create(EditAuthInput $request)
{
Login::admin([9]);
$name = $request->post('name');
$title = $request->post('title');
$icon = $request->post('icon');
$pid = $request->post('pid');
$check_type = $request->post('check_type');
$show = $request->post('show');
$status = $request->post('status');
$order = $request->post('order');
$type = 1;
if ($pid != 0) {
$p_auth = Auth::where('id', $pid)->where('pid', 0)->where('del', 2)->first();
if (!$p_auth) Yo::error_echo(100000, ['路由']);
$type = 2;
}
$auth = new Auth();
$auth->name = $name;
$auth->title = $title;
$auth->icon = $icon ?? '';
$auth->pid = $pid;
$auth->type = $type;
$auth->check_type = $check_type;
$auth->show = $show;
$auth->status = $status;
$auth->order = $order;
$auth->save();
return Yo::create_echo($auth->id);
}
public function select()
{
Login::admin();
$group = Auth::select('id', 'title')
->where('type', 1)->where('del', 2)
->orderBy('order', 'desc')->get();
$list = [];
foreach ($group as $item) {
$auth_list = Auth::select('id', 'title')->where('pid', $item->id)
->where('type', 2)->where('check_type', 2)->where('del', 2)
->orderBy('order', 'desc')->get();
if (count($auth_list) !== 0) $list[] = [
"id" => $item->id,
"title" => $item->title,
"children" => $auth_list
];
}
return Yo::echo([
'list' => $list,
]);
}
}

@ -2,13 +2,70 @@
namespace App\Http\Controllers;
use App\Http\Requests\EditConfigInput;
use App\Models\Config;
use Illuminate\Support\Facades\Storage;
use Yo;
use Login;
class ConfigController extends Controller
{
public function create(EditConfigInput $request)
{
Login::admin([8]);
$label = $request->post('label');
$value = $request->post('value');
$type = $request->post('type');
$remark = $request->post('remark');
$config = new Config();
$config->label = $label;
$config->value = $value;
$config->type = $type;
$config->remark = $remark ?? '';
$config->save();
return Yo::create_echo($config->id);
}
public function delete()
{
Login::admin([8]);
$id = request()->post('id');
Config::where('id', $id)->delete();
return Yo::delete_echo($id);
}
public function update(EditConfigInput $request)
{
Login::admin([8]);
$config_id = $request->post('config_id');
$label = $request->post('label');
$value = $request->post('value');
$type = $request->post('type');
$remark = $request->post('remark');
$config = Config::find($config_id);
if (!$config) Yo::error_echo(100000, ['配置']);
$config->label = $label;
$config->value = $value;
$config->type = $type;
$config->remark = $remark ?? '';
$config->save();
return Yo::update_echo($config->id);
}
public function list()
{
$configs = Config::get();
$list = [];
foreach ($configs as $config) {
$value = $config->value;
if (in_array($config->type, [3, 4, 5])) {
$value = json_decode($value, true);
}
$config['value_turn'] = $value;
$list[] = $config;
}
return Yo::echo(['list' => $list]);
}
public function get()
{
$label_arr = request()->post('label_arr');
@ -16,7 +73,7 @@ class ConfigController extends Controller
$list = [];
foreach ($configs as $config) {
$value = $config->value;
if (in_array($config->type, [3, 4, 5, 6])) {
if (in_array($config->type, [3, 4, 5])) {
$value = json_decode($value, true);
}
$list[$config->label] = $value;

@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Str;
use Yo;
use Illuminate\Support\Facades\Storage;
class UploadController extends Controller
{
public function image()
{
$base64 = request()->post('base64');
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result)) {
$type = ['png', 'jpeg', 'jpg', 'gif'];
if (!in_array($result[2], $type)) Yo::error_echo(100027);
$disk = Storage::disk('public');
$name = Str::orderedUuid();
$date = date('Y/m');
$path = "/assets/upload/image/$date/$name.$result[2]";
$put = $disk->put($path, base64_decode(str_replace($result[1], '', $base64)));
if (!$put) Yo::error_echo(100028, ['put']);
$save = "/storage/assets/upload/image/$date/$name.$result[2]";
return Yo::echo([
'url' => $save
]);
} else {
Yo::error_echo(100028, ['base64']);
}
}
}

@ -0,0 +1,51 @@
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Yo;
class CreateAdminInput extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'nickname' => ['required', 'between:1,30'],
'account' => ['required', 'between:1,50'],
'password' => ['required', 'between:6,20'],
];
}
public function messages()
{
return [
'nickname.required' => 100005,
'nickname.between' => 100006,
'account.required' => 100015,
'account.between' => 100016,
'password.required' => 100007,
'password.between' => 100008,
];
}
public function failedValidation(Validator $validator)
{
Yo::error_echo($validator->errors()->first());
}
}

@ -0,0 +1,47 @@
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Yo;
class EditAdminAuthInput extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => ['required', 'between:1,20'],
'remark' => ['between:0,100'],
];
}
public function messages()
{
return [
'name.required' => 100011,
'name.between' => 100012,
'remark.between' => 100013,
];
}
public function failedValidation(Validator $validator)
{
Yo::error_echo($validator->errors()->first());
}
}

@ -0,0 +1,53 @@
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Yo;
class EditAuthInput extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => ['required', 'between:1,20'],
'title' => ['required', 'between:1,20'],
'icon' => ['between:0,100'],
'order' => ['min:0', 'max:999'],
];
}
public function messages()
{
return [
'name.required' => 100019,
'name.between' => 100020,
'title.required' => 100011,
'title.between' => 100012,
'icon.between' => 100021,
'order.min' => 100022,
'order.max' => 100022,
];
}
public function failedValidation(Validator $validator)
{
Yo::error_echo($validator->errors()->first());
}
}

@ -0,0 +1,50 @@
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Yo;
class EditConfigInput extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'label' => ['required', 'between:1,50'],
'value' => ['required', 'between:1,1000'],
'remark' => ['between:0,100'],
];
}
public function messages()
{
return [
'label.required' => 100011,
'label.between' => 100024,
'value.required' => 100025,
'value.between' => 100026,
'remark.between' => 100013,
];
}
public function failedValidation(Validator $validator)
{
Yo::error_echo($validator->errors()->first());
}
}

@ -17,5 +17,23 @@ return [
100008 => '密码长度在6-20位字符之间',
100009 => '新旧密码相同',
100010 => '旧密码输入错误',
100011 => '请输入名称',
100012 => '名称长度在1-20位字符之间',
100013 => '备注长度在100位字符以内',
100014 => 'JSON长度溢出',
100015 => '请输入账号',
100016 => '账号长度在1-50位字符之间',
100017 => '账号已存在',
100018 => '权限不足',
100019 => '请输入路由',
100020 => '路由长度在1-20位字符之间',
100021 => '图标长度在100位字符以内',
100022 => '排序在0-999之间',
100023 => '该分组下游子级路由,不能移动',
100024 => '名称长度在1-50位字符之间',
100025 => '请输入内容',
100026 => '内容长度在1-1000位字符之间',
100027 => '图片类型不允许',
100028 => '图片上传失败,[?]',
];

@ -37,6 +37,62 @@ class PushAuthData extends Migration
'type' => '2',
'check_type' => '1',
'show' => '2',
], [
'name' => 'admin',
'title' => '管理员设置',
'icon' => 'every-user',
'pid' => '0',
'type' => '1',
'check_type' => '1',
'show' => '1',
], [
'name' => 'admin-info',
'title' => '个人设置',
'icon' => 'user',
'pid' => '4',
'type' => '2',
'check_type' => '1',
'show' => '1',
], [
'name' => 'admin-auth',
'title' => '权限管理',
'icon' => 'personal-privacy',
'pid' => '4',
'type' => '2',
'check_type' => '2',
'show' => '1',
], [
'name' => 'admin-list',
'title' => '管理员列表',
'icon' => 'every-user',
'pid' => '4',
'type' => '2',
'check_type' => '2',
'show' => '1',
], [
'name' => 'settings',
'title' => '后台管理',
'icon' => 'setting',
'pid' => '0',
'type' => '1',
'check_type' => '1',
'show' => '1',
], [
'name' => 'settings-config',
'title' => '后台配置',
'icon' => 'setting-config',
'pid' => '8',
'type' => '2',
'check_type' => '1',
'show' => '1',
], [
'name' => 'settings-router',
'title' => '路由配置',
'icon' => 'left-and-right-branch',
'pid' => '8',
'type' => '2',
'check_type' => '2',
'show' => '1',
]];
foreach ($data as $datum) {
$auth = new App\Models\Auth();

@ -16,9 +16,8 @@ class CreateConfigsTable extends Migration
Schema::create('configs', function (Blueprint $table) {
$table->id();
$table->string('label', 50);
$table->string('group', 50);
$table->string('value', 1000);
$table->tinyInteger('type')->comment('1-文字 2-图片 3-文字数组 4-图片数组 5-Key_Value 6-JSON')->index();
$table->tinyInteger('type')->comment('1-文字 2-图片 3-文字数组 4-图片数组 5-Key_Value')->index();
$table->string('remark', 100);
$table->timestamps();
});

@ -15,29 +15,24 @@ class PushConfigData extends Migration
{
$data = [[
'label' => 'Logo',
'group' => '基础设置',
'value' => '/storage/assets/logo.png',
'type' => '2',
], [
'label' => 'Favicon',
'group' => '基础设置',
'value' => '/storage/assets/favicon.png',
'type' => '2',
], [
'label' => 'Login欢迎图片',
'group' => '基础设置',
'value' => '/storage/assets/login_image.jpeg',
'value' => '/storage/assets/login_image.jpg',
'type' => '2',
], [
'label' => '网站名称',
'group' => '基础设置',
'value' => env('APP_NAME'),
'type' => '1',
]];
foreach ($data as $datum) {
$config = new App\Models\Config();
$config->label = $datum['label'];
$config->group = $datum['group'];
$config->value = $datum['value'];
$config->type = $datum['type'];
$config->remark = '';

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

@ -0,0 +1,58 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>鹿和后台</title>
<link rel="shortcut icon" href="favicon.png"/>
<script>
// PUBLIC CONFIG
(function () {
const config_data = {
token_key: 'TOKEN',
api: {
url: 'http://mix.sa0.online',
error_message: '网络请求发生错误',
login: [100001, 100003],
success: 200
},
layout: {
logo: 40,
background: '#f5f7f9',
header: 64,
footer: 30,
sider: {
inverted: false,
open: 240,
close: 64,
background: '#ffffff',
},
},
title: document.title,
app_theme: '#1c8eee',
version: {
version: '13.0.1 [Mix]',
date: '2022年12月25日 14:58:11',
desc: '鹿和后台管理系统 北有神鹿 其名鹿和'
}
}
localStorage.setItem('APP_CONFIG', JSON.stringify(config_data))
})()
// PUBLIC CONFIG END
</script>
<script type="module" crossorigin src="/admin/lib/index.3673901a.js"></script>
<link rel="stylesheet" href="/admin/lib/index.cff216d9.css">
</head>
<body>
<div id="app"></div>
<script>
(function () {
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
const setting = localStorage.getItem('color-schema') || 'auto'
if (setting === 'dark' || (prefersDark && setting !== 'light'))
document.documentElement.classList.toggle('dark', true)
})()
</script>
</body>
</html>

@ -0,0 +1 @@
import{o as t,c as o,a as r,u as a,r as n}from"./index.0f087b09.js";const s={p:"x4 y10",text:"center blue-500 dark:gray-200"},m={__name:"404",setup(c){return a(),(_,u)=>{const e=n("RouterView");return t(),o("main",s,[r(e)])}}};export{m as default};

@ -0,0 +1 @@
import{o as t,c as o,a as r,u as a,r as n}from"./index.31905853.js";const s={p:"x4 y10",text:"center blue-500 dark:gray-200"},m={__name:"404",setup(c){return a(),(_,u)=>{const e=n("RouterView");return t(),o("main",s,[r(e)])}}};export{m as default};

@ -0,0 +1 @@
import{o as t,c as o,a as r,u as a,r as n}from"./index.3673901a.js";const s={p:"x4 y10",text:"center blue-500 dark:gray-200"},m={__name:"404",setup(c){return a(),(_,u)=>{const e=n("RouterView");return t(),o("main",s,[r(e)])}}};export{m as default};

@ -0,0 +1,99 @@
import{q as t,M as j,a4 as N,a9 as E,j as F,L as B,a8 as H,ad as se,U as P,Z as ue,an as l,Q as b,P as r,R as y,a2 as M,S as be,ap as he,aq as fe,J as ke,aa as ve,a5 as V,ar as me,ae as ge,af as K,ah as xe,as as pe,V as Ce,am as ye}from"./index.0f087b09.js";var Re=t("svg",{viewBox:"0 0 64 64",class:"check-icon"},t("path",{d:"M50.42,16.76L22.34,39.45l-8.1-11.46c-1.12-1.58-3.3-1.96-4.88-0.84c-1.58,1.12-1.95,3.3-0.84,4.88l10.26,14.51 c0.56,0.79,1.42,1.31,2.38,1.45c0.16,0.02,0.32,0.03,0.48,0.03c0.8,0,1.57-0.27,2.2-0.78l30.99-25.03c1.5-1.21,1.74-3.42,0.52-4.92 C54.13,15.78,51.93,15.55,50.42,16.76z"})),we=t("svg",{viewBox:"0 0 100 100",class:"line-icon"},t("path",{d:"M80.2,55.5H21.4c-2.8,0-5.1-2.5-5.1-5.5l0,0c0-3,2.3-5.5,5.1-5.5h58.7c2.8,0,5.1,2.5,5.1,5.5l0,0C85.2,53.1,82.9,55.5,80.2,55.5z"}));const L=ue("n-checkbox-group"),ze={min:Number,max:Number,size:String,value:Array,defaultValue:{type:Array,default:null},disabled:{type:Boolean,default:void 0},"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onChange:[Function,Array]};var De=j({name:"CheckboxGroup",props:ze,setup(o){const{mergedClsPrefixRef:g}=N(o),x=E(o),{mergedSizeRef:R,mergedDisabledRef:S}=x,s=F(o.defaultValue),w=B(()=>o.value),u=H(w,s),c=B(()=>{var h;return((h=u.value)===null||h===void 0?void 0:h.length)||0}),a=B(()=>Array.isArray(u.value)?new Set(u.value):new Set);function $(h,n){const{nTriggerFormInput:p,nTriggerFormChange:C}=x,{onChange:f,"onUpdate:value":k,onUpdateValue:v}=o;if(Array.isArray(u.value)){const i=Array.from(u.value),A=i.findIndex(I=>I===n);h?~A||(i.push(n),v&&l(v,i,{actionType:"check",value:n}),k&&l(k,i,{actionType:"check",value:n}),p(),C(),s.value=i,f&&l(f,i)):~A&&(i.splice(A,1),v&&l(v,i,{actionType:"uncheck",value:n}),k&&l(k,i,{actionType:"uncheck",value:n}),f&&l(f,i),s.value=i,p(),C())}else h?(v&&l(v,[n],{actionType:"check",value:n}),k&&l(k,[n],{actionType:"check",value:n}),f&&l(f,[n]),s.value=[n],p(),C()):(v&&l(v,[],{actionType:"uncheck",value:n}),k&&l(k,[],{actionType:"uncheck",value:n}),f&&l(f,[]),s.value=[],p(),C())}return se(L,{checkedCountRef:c,maxRef:P(o,"max"),minRef:P(o,"min"),valueSetRef:a,disabledRef:S,mergedSizeRef:R,toggleCheckbox:$}),{mergedClsPrefix:g}},render(){return t("div",{class:`${this.mergedClsPrefix}-checkbox-group`,role:"group"},this.$slots)}}),Se=b([r("checkbox",`
line-height: var(--n-label-line-height);
font-size: var(--n-font-size);
outline: none;
cursor: pointer;
display: inline-flex;
flex-wrap: nowrap;
align-items: flex-start;
word-break: break-word;
--n-merged-color-table: var(--n-color-table);
`,[b("&:hover",[r("checkbox-box",[y("border",{border:"var(--n-border-checked)"})])]),b("&:focus:not(:active)",[r("checkbox-box",[y("border",`
border: var(--n-border-focus);
box-shadow: var(--n-box-shadow-focus);
`)])]),M("inside-table",[r("checkbox-box",`
background-color: var(--n-merged-color-table);
`)]),M("checked",[r("checkbox-box",`
background-color: var(--n-color-checked);
`,[r("checkbox-icon",[b(".check-icon",`
opacity: 1;
transform: scale(1);
`)])])]),M("indeterminate",[r("checkbox-box",[r("checkbox-icon",[b(".check-icon",`
opacity: 0;
transform: scale(.5);
`),b(".line-icon",`
opacity: 1;
transform: scale(1);
`)])])]),M("checked, indeterminate",[b("&:focus:not(:active)",[r("checkbox-box",[y("border",`
border: var(--n-border-checked);
box-shadow: var(--n-box-shadow-focus);
`)])]),r("checkbox-box",`
background-color: var(--n-color-checked);
border-left: 0;
border-top: 0;
`,[y("border",{border:"var(--n-border-checked)"})])]),M("disabled",{cursor:"not-allowed"},[M("checked",[r("checkbox-box",`
background-color: var(--n-color-disabled-checked);
`,[y("border",{border:"var(--n-border-disabled-checked)"}),r("checkbox-icon",[b(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled-checked)"})])])]),r("checkbox-box",`
background-color: var(--n-color-disabled);
`,[y("border",{border:"var(--n-border-disabled)"}),r("checkbox-icon",[b(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled)"})])]),y("label",{color:"var(--n-text-color-disabled)"})]),r("checkbox-box-wrapper",`
position: relative;
width: var(--n-size);
flex-shrink: 0;
flex-grow: 0;
user-select: none;
-webkit-user-select: none;
`),r("checkbox-box",`
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
height: var(--n-size);
width: var(--n-size);
display: inline-block;
box-sizing: border-box;
border-radius: var(--n-border-radius);
background-color: var(--n-color);
transition: background-color 0.3s var(--n-bezier);
`,[y("border",`
transition:
border-color .3s var(--n-bezier),
box-shadow .3s var(--n-bezier);
border-radius: inherit;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
border: var(--n-border);
`),r("checkbox-icon",`
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 1px;
right: 1px;
top: 1px;
bottom: 1px;
`,[b(".check-icon, .line-icon",`
width: 100%;
fill: var(--n-check-mark-color);
opacity: 0;
transform: scale(0.5);
transform-origin: center;
transition:
fill 0.3s var(--n-bezier),
transform 0.3s var(--n-bezier),
opacity 0.3s var(--n-bezier),
border-color 0.3s var(--n-bezier);
`),be({left:"1px",top:"1px"})])]),y("label",`
color: var(--n-text-color);
transition: color .3s var(--n-bezier);
user-select: none;
-webkit-user-select: none;
padding: var(--n-label-padding);
font-weight: var(--n-label-font-weight);
`,[b("&:empty",{display:"none"})])]),he(r("checkbox",`
--n-merged-color-table: var(--n-color-table-modal);
`)),fe(r("checkbox",`
--n-merged-color-table: var(--n-color-table-popover);
`))]);const Te=Object.assign(Object.assign({},V.props),{size:String,checked:{type:[Boolean,String,Number],default:void 0},defaultChecked:{type:[Boolean,String,Number],default:!1},value:[String,Number],disabled:{type:Boolean,default:void 0},indeterminate:Boolean,label:String,focusable:{type:Boolean,default:!0},checkedValue:{type:[Boolean,String,Number],default:!0},uncheckedValue:{type:[Boolean,String,Number],default:!1},"onUpdate:checked":[Function,Array],onUpdateChecked:[Function,Array],privateInsideTable:Boolean,onChange:[Function,Array]});var Me=j({name:"Checkbox",props:Te,setup(o){const g=F(null),{mergedClsPrefixRef:x,inlineThemeDisabled:R,mergedRtlRef:S}=N(o),s=E(o,{mergedSize(e){const{size:m}=o;if(m!==void 0)return m;if(c){const{value:d}=c.mergedSizeRef;if(d!==void 0)return d}if(e){const{mergedSize:d}=e;if(d!==void 0)return d.value}return"medium"},mergedDisabled(e){const{disabled:m}=o;if(m!==void 0)return m;if(c){if(c.disabledRef.value)return!0;const{maxRef:{value:d},checkedCountRef:z}=c;if(d!==void 0&&z.value>=d&&!n.value)return!0;const{minRef:{value:_}}=c;if(_!==void 0&&z.value<=_&&n.value)return!0}return e?e.disabled.value:!1}}),{mergedDisabledRef:w,mergedSizeRef:u}=s,c=ke(L,null),a=F(o.defaultChecked),$=P(o,"checked"),h=H($,a),n=ve(()=>{if(c){const e=c.valueSetRef.value;return e&&o.value!==void 0?e.has(o.value):!1}else return h.value===o.checkedValue}),p=V("Checkbox","-checkbox",Se,me,o,x);function C(e){if(c&&o.value!==void 0)c.toggleCheckbox(!n.value,o.value);else{const{onChange:m,"onUpdate:checked":d,onUpdateChecked:z}=o,{nTriggerFormInput:_,nTriggerFormChange:U}=s,D=n.value?o.uncheckedValue:o.checkedValue;d&&l(d,D,e),z&&l(z,D,e),m&&l(m,D,e),_(),U(),a.value=D}}function f(e){w.value||C(e)}function k(e){if(!w.value)switch(e.key){case" ":case"Enter":C(e)}}function v(e){switch(e.key){case" ":e.preventDefault()}}const i={focus:()=>{var e;(e=g.value)===null||e===void 0||e.focus()},blur:()=>{var e;(e=g.value)===null||e===void 0||e.blur()}},A=ge("Checkbox",S,x),I=B(()=>{const{value:e}=u,{common:{cubicBezierEaseInOut:m},self:{borderRadius:d,color:z,colorChecked:_,colorDisabled:U,colorTableHeader:D,colorTableHeaderModal:G,colorTableHeaderPopover:O,checkMarkColor:q,checkMarkColorDisabled:J,border:Q,borderFocus:W,borderDisabled:Y,borderChecked:Z,boxShadowFocus:X,textColor:ee,textColorDisabled:oe,checkMarkColorDisabledChecked:ne,colorDisabledChecked:re,borderDisabledChecked:ae,labelPadding:ce,labelLineHeight:le,labelFontWeight:ie,[K("fontSize",e)]:de,[K("size",e)]:te}}=p.value;return{"--n-label-line-height":le,"--n-label-font-weight":ie,"--n-size":te,"--n-bezier":m,"--n-border-radius":d,"--n-border":Q,"--n-border-checked":Z,"--n-border-focus":W,"--n-border-disabled":Y,"--n-border-disabled-checked":ae,"--n-box-shadow-focus":X,"--n-color":z,"--n-color-checked":_,"--n-color-table":D,"--n-color-table-modal":G,"--n-color-table-popover":O,"--n-color-disabled":U,"--n-color-disabled-checked":re,"--n-text-color":ee,"--n-text-color-disabled":oe,"--n-check-mark-color":q,"--n-check-mark-color-disabled":J,"--n-check-mark-color-disabled-checked":ne,"--n-font-size":de,"--n-label-padding":ce}}),T=R?xe("checkbox",B(()=>u.value[0]),I,o):void 0;return Object.assign(s,i,{rtlEnabled:A,selfRef:g,mergedClsPrefix:x,mergedDisabled:w,renderedChecked:n,mergedTheme:p,labelId:pe(),handleClick:f,handleKeyUp:k,handleKeyDown:v,cssVars:R?void 0:I,themeClass:T==null?void 0:T.themeClass,onRender:T==null?void 0:T.onRender})},render(){var o;const{$slots:g,renderedChecked:x,mergedDisabled:R,indeterminate:S,privateInsideTable:s,cssVars:w,labelId:u,label:c,mergedClsPrefix:a,focusable:$,handleKeyUp:h,handleKeyDown:n,handleClick:p}=this;return(o=this.onRender)===null||o===void 0||o.call(this),t("div",{ref:"selfRef",class:[`${a}-checkbox`,this.themeClass,this.rtlEnabled&&`${a}-checkbox--rtl`,x&&`${a}-checkbox--checked`,R&&`${a}-checkbox--disabled`,S&&`${a}-checkbox--indeterminate`,s&&`${a}-checkbox--inside-table`],tabindex:R||!$?void 0:0,role:"checkbox","aria-checked":S?"mixed":x,"aria-labelledby":u,style:w,onKeyup:h,onKeydown:n,onClick:p,onMousedown:()=>{ye("selectstart",window,C=>{C.preventDefault()},{once:!0})}},t("div",{class:`${a}-checkbox-box-wrapper`},"\xA0",t("div",{class:`${a}-checkbox-box`},t(Ce,null,{default:()=>this.indeterminate?t("div",{key:"indeterminate",class:`${a}-checkbox-icon`},we):t("div",{key:"check",class:`${a}-checkbox-icon`},Re)}),t("div",{class:`${a}-checkbox-box__border`}))),c!==null||g.default?t("span",{class:`${a}-checkbox__label`,id:u},g.default?g.default():c):null)}});export{Me as _,De as a};

@ -0,0 +1,99 @@
import{q as t,M as j,a4 as N,a9 as E,j as F,L as B,a8 as H,ad as se,U as P,Z as ue,an as l,Q as b,P as r,R as y,a2 as M,S as be,ap as he,aq as fe,J as ke,aa as ve,a5 as V,ar as me,ae as ge,af as K,ah as xe,as as pe,V as Ce,am as ye}from"./index.3673901a.js";var Re=t("svg",{viewBox:"0 0 64 64",class:"check-icon"},t("path",{d:"M50.42,16.76L22.34,39.45l-8.1-11.46c-1.12-1.58-3.3-1.96-4.88-0.84c-1.58,1.12-1.95,3.3-0.84,4.88l10.26,14.51 c0.56,0.79,1.42,1.31,2.38,1.45c0.16,0.02,0.32,0.03,0.48,0.03c0.8,0,1.57-0.27,2.2-0.78l30.99-25.03c1.5-1.21,1.74-3.42,0.52-4.92 C54.13,15.78,51.93,15.55,50.42,16.76z"})),we=t("svg",{viewBox:"0 0 100 100",class:"line-icon"},t("path",{d:"M80.2,55.5H21.4c-2.8,0-5.1-2.5-5.1-5.5l0,0c0-3,2.3-5.5,5.1-5.5h58.7c2.8,0,5.1,2.5,5.1,5.5l0,0C85.2,53.1,82.9,55.5,80.2,55.5z"}));const L=ue("n-checkbox-group"),ze={min:Number,max:Number,size:String,value:Array,defaultValue:{type:Array,default:null},disabled:{type:Boolean,default:void 0},"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onChange:[Function,Array]};var De=j({name:"CheckboxGroup",props:ze,setup(o){const{mergedClsPrefixRef:g}=N(o),x=E(o),{mergedSizeRef:R,mergedDisabledRef:S}=x,s=F(o.defaultValue),w=B(()=>o.value),u=H(w,s),c=B(()=>{var h;return((h=u.value)===null||h===void 0?void 0:h.length)||0}),a=B(()=>Array.isArray(u.value)?new Set(u.value):new Set);function $(h,n){const{nTriggerFormInput:p,nTriggerFormChange:C}=x,{onChange:f,"onUpdate:value":k,onUpdateValue:v}=o;if(Array.isArray(u.value)){const i=Array.from(u.value),A=i.findIndex(I=>I===n);h?~A||(i.push(n),v&&l(v,i,{actionType:"check",value:n}),k&&l(k,i,{actionType:"check",value:n}),p(),C(),s.value=i,f&&l(f,i)):~A&&(i.splice(A,1),v&&l(v,i,{actionType:"uncheck",value:n}),k&&l(k,i,{actionType:"uncheck",value:n}),f&&l(f,i),s.value=i,p(),C())}else h?(v&&l(v,[n],{actionType:"check",value:n}),k&&l(k,[n],{actionType:"check",value:n}),f&&l(f,[n]),s.value=[n],p(),C()):(v&&l(v,[],{actionType:"uncheck",value:n}),k&&l(k,[],{actionType:"uncheck",value:n}),f&&l(f,[]),s.value=[],p(),C())}return se(L,{checkedCountRef:c,maxRef:P(o,"max"),minRef:P(o,"min"),valueSetRef:a,disabledRef:S,mergedSizeRef:R,toggleCheckbox:$}),{mergedClsPrefix:g}},render(){return t("div",{class:`${this.mergedClsPrefix}-checkbox-group`,role:"group"},this.$slots)}}),Se=b([r("checkbox",`
line-height: var(--n-label-line-height);
font-size: var(--n-font-size);
outline: none;
cursor: pointer;
display: inline-flex;
flex-wrap: nowrap;
align-items: flex-start;
word-break: break-word;
--n-merged-color-table: var(--n-color-table);
`,[b("&:hover",[r("checkbox-box",[y("border",{border:"var(--n-border-checked)"})])]),b("&:focus:not(:active)",[r("checkbox-box",[y("border",`
border: var(--n-border-focus);
box-shadow: var(--n-box-shadow-focus);
`)])]),M("inside-table",[r("checkbox-box",`
background-color: var(--n-merged-color-table);
`)]),M("checked",[r("checkbox-box",`
background-color: var(--n-color-checked);
`,[r("checkbox-icon",[b(".check-icon",`
opacity: 1;
transform: scale(1);
`)])])]),M("indeterminate",[r("checkbox-box",[r("checkbox-icon",[b(".check-icon",`
opacity: 0;
transform: scale(.5);
`),b(".line-icon",`
opacity: 1;
transform: scale(1);
`)])])]),M("checked, indeterminate",[b("&:focus:not(:active)",[r("checkbox-box",[y("border",`
border: var(--n-border-checked);
box-shadow: var(--n-box-shadow-focus);
`)])]),r("checkbox-box",`
background-color: var(--n-color-checked);
border-left: 0;
border-top: 0;
`,[y("border",{border:"var(--n-border-checked)"})])]),M("disabled",{cursor:"not-allowed"},[M("checked",[r("checkbox-box",`
background-color: var(--n-color-disabled-checked);
`,[y("border",{border:"var(--n-border-disabled-checked)"}),r("checkbox-icon",[b(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled-checked)"})])])]),r("checkbox-box",`
background-color: var(--n-color-disabled);
`,[y("border",{border:"var(--n-border-disabled)"}),r("checkbox-icon",[b(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled)"})])]),y("label",{color:"var(--n-text-color-disabled)"})]),r("checkbox-box-wrapper",`
position: relative;
width: var(--n-size);
flex-shrink: 0;
flex-grow: 0;
user-select: none;
-webkit-user-select: none;
`),r("checkbox-box",`
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
height: var(--n-size);
width: var(--n-size);
display: inline-block;
box-sizing: border-box;
border-radius: var(--n-border-radius);
background-color: var(--n-color);
transition: background-color 0.3s var(--n-bezier);
`,[y("border",`
transition:
border-color .3s var(--n-bezier),
box-shadow .3s var(--n-bezier);
border-radius: inherit;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
border: var(--n-border);
`),r("checkbox-icon",`
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 1px;
right: 1px;
top: 1px;
bottom: 1px;
`,[b(".check-icon, .line-icon",`
width: 100%;
fill: var(--n-check-mark-color);
opacity: 0;
transform: scale(0.5);
transform-origin: center;
transition:
fill 0.3s var(--n-bezier),
transform 0.3s var(--n-bezier),
opacity 0.3s var(--n-bezier),
border-color 0.3s var(--n-bezier);
`),be({left:"1px",top:"1px"})])]),y("label",`
color: var(--n-text-color);
transition: color .3s var(--n-bezier);
user-select: none;
-webkit-user-select: none;
padding: var(--n-label-padding);
font-weight: var(--n-label-font-weight);
`,[b("&:empty",{display:"none"})])]),he(r("checkbox",`
--n-merged-color-table: var(--n-color-table-modal);
`)),fe(r("checkbox",`
--n-merged-color-table: var(--n-color-table-popover);
`))]);const Te=Object.assign(Object.assign({},V.props),{size:String,checked:{type:[Boolean,String,Number],default:void 0},defaultChecked:{type:[Boolean,String,Number],default:!1},value:[String,Number],disabled:{type:Boolean,default:void 0},indeterminate:Boolean,label:String,focusable:{type:Boolean,default:!0},checkedValue:{type:[Boolean,String,Number],default:!0},uncheckedValue:{type:[Boolean,String,Number],default:!1},"onUpdate:checked":[Function,Array],onUpdateChecked:[Function,Array],privateInsideTable:Boolean,onChange:[Function,Array]});var Me=j({name:"Checkbox",props:Te,setup(o){const g=F(null),{mergedClsPrefixRef:x,inlineThemeDisabled:R,mergedRtlRef:S}=N(o),s=E(o,{mergedSize(e){const{size:m}=o;if(m!==void 0)return m;if(c){const{value:d}=c.mergedSizeRef;if(d!==void 0)return d}if(e){const{mergedSize:d}=e;if(d!==void 0)return d.value}return"medium"},mergedDisabled(e){const{disabled:m}=o;if(m!==void 0)return m;if(c){if(c.disabledRef.value)return!0;const{maxRef:{value:d},checkedCountRef:z}=c;if(d!==void 0&&z.value>=d&&!n.value)return!0;const{minRef:{value:_}}=c;if(_!==void 0&&z.value<=_&&n.value)return!0}return e?e.disabled.value:!1}}),{mergedDisabledRef:w,mergedSizeRef:u}=s,c=ke(L,null),a=F(o.defaultChecked),$=P(o,"checked"),h=H($,a),n=ve(()=>{if(c){const e=c.valueSetRef.value;return e&&o.value!==void 0?e.has(o.value):!1}else return h.value===o.checkedValue}),p=V("Checkbox","-checkbox",Se,me,o,x);function C(e){if(c&&o.value!==void 0)c.toggleCheckbox(!n.value,o.value);else{const{onChange:m,"onUpdate:checked":d,onUpdateChecked:z}=o,{nTriggerFormInput:_,nTriggerFormChange:U}=s,D=n.value?o.uncheckedValue:o.checkedValue;d&&l(d,D,e),z&&l(z,D,e),m&&l(m,D,e),_(),U(),a.value=D}}function f(e){w.value||C(e)}function k(e){if(!w.value)switch(e.key){case" ":case"Enter":C(e)}}function v(e){switch(e.key){case" ":e.preventDefault()}}const i={focus:()=>{var e;(e=g.value)===null||e===void 0||e.focus()},blur:()=>{var e;(e=g.value)===null||e===void 0||e.blur()}},A=ge("Checkbox",S,x),I=B(()=>{const{value:e}=u,{common:{cubicBezierEaseInOut:m},self:{borderRadius:d,color:z,colorChecked:_,colorDisabled:U,colorTableHeader:D,colorTableHeaderModal:G,colorTableHeaderPopover:O,checkMarkColor:q,checkMarkColorDisabled:J,border:Q,borderFocus:W,borderDisabled:Y,borderChecked:Z,boxShadowFocus:X,textColor:ee,textColorDisabled:oe,checkMarkColorDisabledChecked:ne,colorDisabledChecked:re,borderDisabledChecked:ae,labelPadding:ce,labelLineHeight:le,labelFontWeight:ie,[K("fontSize",e)]:de,[K("size",e)]:te}}=p.value;return{"--n-label-line-height":le,"--n-label-font-weight":ie,"--n-size":te,"--n-bezier":m,"--n-border-radius":d,"--n-border":Q,"--n-border-checked":Z,"--n-border-focus":W,"--n-border-disabled":Y,"--n-border-disabled-checked":ae,"--n-box-shadow-focus":X,"--n-color":z,"--n-color-checked":_,"--n-color-table":D,"--n-color-table-modal":G,"--n-color-table-popover":O,"--n-color-disabled":U,"--n-color-disabled-checked":re,"--n-text-color":ee,"--n-text-color-disabled":oe,"--n-check-mark-color":q,"--n-check-mark-color-disabled":J,"--n-check-mark-color-disabled-checked":ne,"--n-font-size":de,"--n-label-padding":ce}}),T=R?xe("checkbox",B(()=>u.value[0]),I,o):void 0;return Object.assign(s,i,{rtlEnabled:A,selfRef:g,mergedClsPrefix:x,mergedDisabled:w,renderedChecked:n,mergedTheme:p,labelId:pe(),handleClick:f,handleKeyUp:k,handleKeyDown:v,cssVars:R?void 0:I,themeClass:T==null?void 0:T.themeClass,onRender:T==null?void 0:T.onRender})},render(){var o;const{$slots:g,renderedChecked:x,mergedDisabled:R,indeterminate:S,privateInsideTable:s,cssVars:w,labelId:u,label:c,mergedClsPrefix:a,focusable:$,handleKeyUp:h,handleKeyDown:n,handleClick:p}=this;return(o=this.onRender)===null||o===void 0||o.call(this),t("div",{ref:"selfRef",class:[`${a}-checkbox`,this.themeClass,this.rtlEnabled&&`${a}-checkbox--rtl`,x&&`${a}-checkbox--checked`,R&&`${a}-checkbox--disabled`,S&&`${a}-checkbox--indeterminate`,s&&`${a}-checkbox--inside-table`],tabindex:R||!$?void 0:0,role:"checkbox","aria-checked":S?"mixed":x,"aria-labelledby":u,style:w,onKeyup:h,onKeydown:n,onClick:p,onMousedown:()=>{ye("selectstart",window,C=>{C.preventDefault()},{once:!0})}},t("div",{class:`${a}-checkbox-box-wrapper`},"\xA0",t("div",{class:`${a}-checkbox-box`},t(Ce,null,{default:()=>this.indeterminate?t("div",{key:"indeterminate",class:`${a}-checkbox-icon`},we):t("div",{key:"check",class:`${a}-checkbox-icon`},Re)}),t("div",{class:`${a}-checkbox-box__border`}))),c!==null||g.default?t("span",{class:`${a}-checkbox__label`,id:u},g.default?g.default():c):null)}});export{Me as _,De as a};

@ -0,0 +1,99 @@
import{q as t,M as j,a4 as N,a9 as E,j as F,L as B,a8 as H,ad as se,U as P,Z as ue,an as l,Q as b,P as r,R as y,a2 as M,S as be,ap as he,aq as fe,J as ke,aa as ve,a5 as V,ar as me,ae as ge,af as K,ah as xe,as as pe,V as Ce,am as ye}from"./index.31905853.js";var Re=t("svg",{viewBox:"0 0 64 64",class:"check-icon"},t("path",{d:"M50.42,16.76L22.34,39.45l-8.1-11.46c-1.12-1.58-3.3-1.96-4.88-0.84c-1.58,1.12-1.95,3.3-0.84,4.88l10.26,14.51 c0.56,0.79,1.42,1.31,2.38,1.45c0.16,0.02,0.32,0.03,0.48,0.03c0.8,0,1.57-0.27,2.2-0.78l30.99-25.03c1.5-1.21,1.74-3.42,0.52-4.92 C54.13,15.78,51.93,15.55,50.42,16.76z"})),we=t("svg",{viewBox:"0 0 100 100",class:"line-icon"},t("path",{d:"M80.2,55.5H21.4c-2.8,0-5.1-2.5-5.1-5.5l0,0c0-3,2.3-5.5,5.1-5.5h58.7c2.8,0,5.1,2.5,5.1,5.5l0,0C85.2,53.1,82.9,55.5,80.2,55.5z"}));const L=ue("n-checkbox-group"),ze={min:Number,max:Number,size:String,value:Array,defaultValue:{type:Array,default:null},disabled:{type:Boolean,default:void 0},"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onChange:[Function,Array]};var De=j({name:"CheckboxGroup",props:ze,setup(o){const{mergedClsPrefixRef:g}=N(o),x=E(o),{mergedSizeRef:R,mergedDisabledRef:S}=x,s=F(o.defaultValue),w=B(()=>o.value),u=H(w,s),c=B(()=>{var h;return((h=u.value)===null||h===void 0?void 0:h.length)||0}),a=B(()=>Array.isArray(u.value)?new Set(u.value):new Set);function $(h,n){const{nTriggerFormInput:p,nTriggerFormChange:C}=x,{onChange:f,"onUpdate:value":k,onUpdateValue:v}=o;if(Array.isArray(u.value)){const i=Array.from(u.value),A=i.findIndex(I=>I===n);h?~A||(i.push(n),v&&l(v,i,{actionType:"check",value:n}),k&&l(k,i,{actionType:"check",value:n}),p(),C(),s.value=i,f&&l(f,i)):~A&&(i.splice(A,1),v&&l(v,i,{actionType:"uncheck",value:n}),k&&l(k,i,{actionType:"uncheck",value:n}),f&&l(f,i),s.value=i,p(),C())}else h?(v&&l(v,[n],{actionType:"check",value:n}),k&&l(k,[n],{actionType:"check",value:n}),f&&l(f,[n]),s.value=[n],p(),C()):(v&&l(v,[],{actionType:"uncheck",value:n}),k&&l(k,[],{actionType:"uncheck",value:n}),f&&l(f,[]),s.value=[],p(),C())}return se(L,{checkedCountRef:c,maxRef:P(o,"max"),minRef:P(o,"min"),valueSetRef:a,disabledRef:S,mergedSizeRef:R,toggleCheckbox:$}),{mergedClsPrefix:g}},render(){return t("div",{class:`${this.mergedClsPrefix}-checkbox-group`,role:"group"},this.$slots)}}),Se=b([r("checkbox",`
line-height: var(--n-label-line-height);
font-size: var(--n-font-size);
outline: none;
cursor: pointer;
display: inline-flex;
flex-wrap: nowrap;
align-items: flex-start;
word-break: break-word;
--n-merged-color-table: var(--n-color-table);
`,[b("&:hover",[r("checkbox-box",[y("border",{border:"var(--n-border-checked)"})])]),b("&:focus:not(:active)",[r("checkbox-box",[y("border",`
border: var(--n-border-focus);
box-shadow: var(--n-box-shadow-focus);
`)])]),M("inside-table",[r("checkbox-box",`
background-color: var(--n-merged-color-table);
`)]),M("checked",[r("checkbox-box",`
background-color: var(--n-color-checked);
`,[r("checkbox-icon",[b(".check-icon",`
opacity: 1;
transform: scale(1);
`)])])]),M("indeterminate",[r("checkbox-box",[r("checkbox-icon",[b(".check-icon",`
opacity: 0;
transform: scale(.5);
`),b(".line-icon",`
opacity: 1;
transform: scale(1);
`)])])]),M("checked, indeterminate",[b("&:focus:not(:active)",[r("checkbox-box",[y("border",`
border: var(--n-border-checked);
box-shadow: var(--n-box-shadow-focus);
`)])]),r("checkbox-box",`
background-color: var(--n-color-checked);
border-left: 0;
border-top: 0;
`,[y("border",{border:"var(--n-border-checked)"})])]),M("disabled",{cursor:"not-allowed"},[M("checked",[r("checkbox-box",`
background-color: var(--n-color-disabled-checked);
`,[y("border",{border:"var(--n-border-disabled-checked)"}),r("checkbox-icon",[b(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled-checked)"})])])]),r("checkbox-box",`
background-color: var(--n-color-disabled);
`,[y("border",{border:"var(--n-border-disabled)"}),r("checkbox-icon",[b(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled)"})])]),y("label",{color:"var(--n-text-color-disabled)"})]),r("checkbox-box-wrapper",`
position: relative;
width: var(--n-size);
flex-shrink: 0;
flex-grow: 0;
user-select: none;
-webkit-user-select: none;
`),r("checkbox-box",`
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
height: var(--n-size);
width: var(--n-size);
display: inline-block;
box-sizing: border-box;
border-radius: var(--n-border-radius);
background-color: var(--n-color);
transition: background-color 0.3s var(--n-bezier);
`,[y("border",`
transition:
border-color .3s var(--n-bezier),
box-shadow .3s var(--n-bezier);
border-radius: inherit;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
border: var(--n-border);
`),r("checkbox-icon",`
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 1px;
right: 1px;
top: 1px;
bottom: 1px;
`,[b(".check-icon, .line-icon",`
width: 100%;
fill: var(--n-check-mark-color);
opacity: 0;
transform: scale(0.5);
transform-origin: center;
transition:
fill 0.3s var(--n-bezier),
transform 0.3s var(--n-bezier),
opacity 0.3s var(--n-bezier),
border-color 0.3s var(--n-bezier);
`),be({left:"1px",top:"1px"})])]),y("label",`
color: var(--n-text-color);
transition: color .3s var(--n-bezier);
user-select: none;
-webkit-user-select: none;
padding: var(--n-label-padding);
font-weight: var(--n-label-font-weight);
`,[b("&:empty",{display:"none"})])]),he(r("checkbox",`
--n-merged-color-table: var(--n-color-table-modal);
`)),fe(r("checkbox",`
--n-merged-color-table: var(--n-color-table-popover);
`))]);const Te=Object.assign(Object.assign({},V.props),{size:String,checked:{type:[Boolean,String,Number],default:void 0},defaultChecked:{type:[Boolean,String,Number],default:!1},value:[String,Number],disabled:{type:Boolean,default:void 0},indeterminate:Boolean,label:String,focusable:{type:Boolean,default:!0},checkedValue:{type:[Boolean,String,Number],default:!0},uncheckedValue:{type:[Boolean,String,Number],default:!1},"onUpdate:checked":[Function,Array],onUpdateChecked:[Function,Array],privateInsideTable:Boolean,onChange:[Function,Array]});var Me=j({name:"Checkbox",props:Te,setup(o){const g=F(null),{mergedClsPrefixRef:x,inlineThemeDisabled:R,mergedRtlRef:S}=N(o),s=E(o,{mergedSize(e){const{size:m}=o;if(m!==void 0)return m;if(c){const{value:d}=c.mergedSizeRef;if(d!==void 0)return d}if(e){const{mergedSize:d}=e;if(d!==void 0)return d.value}return"medium"},mergedDisabled(e){const{disabled:m}=o;if(m!==void 0)return m;if(c){if(c.disabledRef.value)return!0;const{maxRef:{value:d},checkedCountRef:z}=c;if(d!==void 0&&z.value>=d&&!n.value)return!0;const{minRef:{value:_}}=c;if(_!==void 0&&z.value<=_&&n.value)return!0}return e?e.disabled.value:!1}}),{mergedDisabledRef:w,mergedSizeRef:u}=s,c=ke(L,null),a=F(o.defaultChecked),$=P(o,"checked"),h=H($,a),n=ve(()=>{if(c){const e=c.valueSetRef.value;return e&&o.value!==void 0?e.has(o.value):!1}else return h.value===o.checkedValue}),p=V("Checkbox","-checkbox",Se,me,o,x);function C(e){if(c&&o.value!==void 0)c.toggleCheckbox(!n.value,o.value);else{const{onChange:m,"onUpdate:checked":d,onUpdateChecked:z}=o,{nTriggerFormInput:_,nTriggerFormChange:U}=s,D=n.value?o.uncheckedValue:o.checkedValue;d&&l(d,D,e),z&&l(z,D,e),m&&l(m,D,e),_(),U(),a.value=D}}function f(e){w.value||C(e)}function k(e){if(!w.value)switch(e.key){case" ":case"Enter":C(e)}}function v(e){switch(e.key){case" ":e.preventDefault()}}const i={focus:()=>{var e;(e=g.value)===null||e===void 0||e.focus()},blur:()=>{var e;(e=g.value)===null||e===void 0||e.blur()}},A=ge("Checkbox",S,x),I=B(()=>{const{value:e}=u,{common:{cubicBezierEaseInOut:m},self:{borderRadius:d,color:z,colorChecked:_,colorDisabled:U,colorTableHeader:D,colorTableHeaderModal:G,colorTableHeaderPopover:O,checkMarkColor:q,checkMarkColorDisabled:J,border:Q,borderFocus:W,borderDisabled:Y,borderChecked:Z,boxShadowFocus:X,textColor:ee,textColorDisabled:oe,checkMarkColorDisabledChecked:ne,colorDisabledChecked:re,borderDisabledChecked:ae,labelPadding:ce,labelLineHeight:le,labelFontWeight:ie,[K("fontSize",e)]:de,[K("size",e)]:te}}=p.value;return{"--n-label-line-height":le,"--n-label-font-weight":ie,"--n-size":te,"--n-bezier":m,"--n-border-radius":d,"--n-border":Q,"--n-border-checked":Z,"--n-border-focus":W,"--n-border-disabled":Y,"--n-border-disabled-checked":ae,"--n-box-shadow-focus":X,"--n-color":z,"--n-color-checked":_,"--n-color-table":D,"--n-color-table-modal":G,"--n-color-table-popover":O,"--n-color-disabled":U,"--n-color-disabled-checked":re,"--n-text-color":ee,"--n-text-color-disabled":oe,"--n-check-mark-color":q,"--n-check-mark-color-disabled":J,"--n-check-mark-color-disabled-checked":ne,"--n-font-size":de,"--n-label-padding":ce}}),T=R?xe("checkbox",B(()=>u.value[0]),I,o):void 0;return Object.assign(s,i,{rtlEnabled:A,selfRef:g,mergedClsPrefix:x,mergedDisabled:w,renderedChecked:n,mergedTheme:p,labelId:pe(),handleClick:f,handleKeyUp:k,handleKeyDown:v,cssVars:R?void 0:I,themeClass:T==null?void 0:T.themeClass,onRender:T==null?void 0:T.onRender})},render(){var o;const{$slots:g,renderedChecked:x,mergedDisabled:R,indeterminate:S,privateInsideTable:s,cssVars:w,labelId:u,label:c,mergedClsPrefix:a,focusable:$,handleKeyUp:h,handleKeyDown:n,handleClick:p}=this;return(o=this.onRender)===null||o===void 0||o.call(this),t("div",{ref:"selfRef",class:[`${a}-checkbox`,this.themeClass,this.rtlEnabled&&`${a}-checkbox--rtl`,x&&`${a}-checkbox--checked`,R&&`${a}-checkbox--disabled`,S&&`${a}-checkbox--indeterminate`,s&&`${a}-checkbox--inside-table`],tabindex:R||!$?void 0:0,role:"checkbox","aria-checked":S?"mixed":x,"aria-labelledby":u,style:w,onKeyup:h,onKeydown:n,onClick:p,onMousedown:()=>{ye("selectstart",window,C=>{C.preventDefault()},{once:!0})}},t("div",{class:`${a}-checkbox-box-wrapper`},"\xA0",t("div",{class:`${a}-checkbox-box`},t(Ce,null,{default:()=>this.indeterminate?t("div",{key:"indeterminate",class:`${a}-checkbox-icon`},we):t("div",{key:"check",class:`${a}-checkbox-icon`},Re)}),t("div",{class:`${a}-checkbox-box__border`}))),c!==null||g.default?t("span",{class:`${a}-checkbox__label`,id:u},g.default?g.default():c):null)}});export{Me as _,De 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

@ -0,0 +1 @@
import{a5 as l,M as e,j as n,q as a,aj as t}from"./index.0f087b09.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function}),i=e({name:"Scrollbar",props:c,setup(){const r=n(null);return Object.assign(Object.assign({},{scrollTo:(...s)=>{var o;(o=r.value)===null||o===void 0||o.scrollTo(s[0],s[1])},scrollBy:(...s)=>{var o;(o=r.value)===null||o===void 0||o.scrollBy(s[0],s[1])}}),{scrollbarInstRef:r})},render(){return a(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}});var u=i;export{u as _};

@ -0,0 +1 @@
import{a5 as l,M as e,j as n,q as a,aj as t}from"./index.3673901a.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function}),i=e({name:"Scrollbar",props:c,setup(){const r=n(null);return Object.assign(Object.assign({},{scrollTo:(...s)=>{var o;(o=r.value)===null||o===void 0||o.scrollTo(s[0],s[1])},scrollBy:(...s)=>{var o;(o=r.value)===null||o===void 0||o.scrollBy(s[0],s[1])}}),{scrollbarInstRef:r})},render(){return a(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}});var u=i;export{u as _};

@ -0,0 +1 @@
import{a5 as l,M as e,j as n,q as a,aj as t}from"./index.31905853.js";const c=Object.assign(Object.assign({},l.props),{trigger:String,xScrollable:Boolean,onScroll:Function}),i=e({name:"Scrollbar",props:c,setup(){const r=n(null);return Object.assign(Object.assign({},{scrollTo:(...s)=>{var o;(o=r.value)===null||o===void 0||o.scrollTo(s[0],s[1])},scrollBy:(...s)=>{var o;(o=r.value)===null||o===void 0||o.scrollBy(s[0],s[1])}}),{scrollbarInstRef:r})},render(){return a(t,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}});var u=i;export{u as _};

File diff suppressed because one or more lines are too long

@ -0,0 +1,76 @@
import{Q as r,P as n,a2 as t,a3 as V,ap as j,aq as q,M as H,a4 as D,a5 as b,at as F,ae as I,L as c,af as a,ah as K,q as N}from"./index.31905853.js";var Q=r([n("table",`
font-size: var(--n-font-size);
font-variant-numeric: tabular-nums;
line-height: var(--n-line-height);
width: 100%;
border-radius: var(--n-border-radius) var(--n-border-radius) 0 0;
text-align: left;
border-collapse: separate;
border-spacing: 0;
overflow: hidden;
background-color: var(--n-td-color);
border-color: var(--n-merged-border-color);
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
--n-merged-border-color: var(--n-border-color);
`,[r("th",`
white-space: nowrap;
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
text-align: inherit;
padding: var(--n-th-padding);
vertical-align: inherit;
text-transform: none;
border: 0px solid var(--n-merged-border-color);
font-weight: var(--n-th-font-weight);
color: var(--n-th-text-color);
background-color: var(--n-th-color);
border-bottom: 1px solid var(--n-merged-border-color);
border-right: 1px solid var(--n-merged-border-color);
`,[r("&:last-child",`
border-right: 0px solid var(--n-merged-border-color);
`)]),r("td",`
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
padding: var(--n-td-padding);
color: var(--n-td-text-color);
background-color: var(--n-td-color);
border: 0px solid var(--n-merged-border-color);
border-right: 1px solid var(--n-merged-border-color);
border-bottom: 1px solid var(--n-merged-border-color);
`,[r("&:last-child",`
border-right: 0px solid var(--n-merged-border-color);
`)]),t("bordered",`
border: 1px solid var(--n-merged-border-color);
border-radius: var(--n-border-radius);
`,[r("tr",[r("&:last-child",[r("td",`
border-bottom: 0 solid var(--n-merged-border-color);
`)])])]),t("single-line",[r("th",`
border-right: 0px solid var(--n-merged-border-color);
`),r("td",`
border-right: 0px solid var(--n-merged-border-color);
`)]),t("single-column",[r("tr",[r("&:not(:last-child)",[r("td",`
border-bottom: 0px solid var(--n-merged-border-color);
`)])])]),t("striped",[r("tr:nth-of-type(even)",[r("td","background-color: var(--n-td-color-striped)")])]),V("bottom-bordered",[r("tr",[r("&:last-child",[r("td",`
border-bottom: 0px solid var(--n-merged-border-color);
`)])])])]),j(n("table",`
background-color: var(--n-td-color-modal);
--n-merged-border-color: var(--n-border-color-modal);
`,[r("th",`
background-color: var(--n-th-color-modal);
`),r("td",`
background-color: var(--n-td-color-modal);
`)])),q(n("table",`
background-color: var(--n-td-color-popover);
--n-merged-border-color: var(--n-border-color-popover);
`,[r("th",`
background-color: var(--n-th-color-popover);
`),r("td",`
background-color: var(--n-td-color-popover);
`)]))]);const W=Object.assign(Object.assign({},b.props),{bordered:{type:Boolean,default:!0},bottomBordered:{type:Boolean,default:!0},singleLine:{type:Boolean,default:!0},striped:Boolean,singleColumn:Boolean,size:{type:String,default:"medium"}});var G=H({name:"Table",props:W,setup(e){const{mergedClsPrefixRef:o,inlineThemeDisabled:i,mergedRtlRef:g}=D(e),h=b("Table","-table",Q,F,e,o),v=I("Table",g,o),s=c(()=>{const{size:l}=e,{self:{borderColor:p,tdColor:m,tdColorModal:u,tdColorPopover:f,thColor:x,thColorModal:C,thColorPopover:z,thTextColor:P,tdTextColor:k,borderRadius:R,thFontWeight:B,lineHeight:y,borderColorModal:M,borderColorPopover:T,tdColorStriped:$,tdColorStripedModal:w,tdColorStripedPopover:S,[a("fontSize",l)]:_,[a("tdPadding",l)]:E,[a("thPadding",l)]:L},common:{cubicBezierEaseInOut:O}}=h.value;return{"--n-bezier":O,"--n-td-color":m,"--n-td-color-modal":u,"--n-td-color-popover":f,"--n-td-text-color":k,"--n-border-color":p,"--n-border-color-modal":M,"--n-border-color-popover":T,"--n-border-radius":R,"--n-font-size":_,"--n-th-color":x,"--n-th-color-modal":C,"--n-th-color-popover":z,"--n-th-font-weight":B,"--n-th-text-color":P,"--n-line-height":y,"--n-td-padding":E,"--n-th-padding":L,"--n-td-color-striped":$,"--n-td-color-striped-modal":w,"--n-td-color-striped-popover":S}}),d=i?K("table",c(()=>e.size[0]),s,e):void 0;return{rtlEnabled:v,mergedClsPrefix:o,cssVars:i?void 0:s,themeClass:d==null?void 0:d.themeClass,onRender:d==null?void 0:d.onRender}},render(){var e;const{mergedClsPrefix:o}=this;return(e=this.onRender)===null||e===void 0||e.call(this),N("table",{class:[`${o}-table`,this.themeClass,{[`${o}-table--rtl`]:this.rtlEnabled,[`${o}-table--bottom-bordered`]:this.bottomBordered,[`${o}-table--bordered`]:this.bordered,[`${o}-table--single-line`]:this.singleLine,[`${o}-table--single-column`]:this.singleColumn,[`${o}-table--striped`]:this.striped}],style:this.cssVars},this.$slots)}});export{G as _};

@ -0,0 +1,76 @@
import{Q as r,P as n,a2 as t,a3 as V,ap as j,aq as q,M as H,a4 as D,a5 as b,at as F,ae as I,L as c,af as a,ah as K,q as N}from"./index.0f087b09.js";var Q=r([n("table",`
font-size: var(--n-font-size);
font-variant-numeric: tabular-nums;
line-height: var(--n-line-height);
width: 100%;
border-radius: var(--n-border-radius) var(--n-border-radius) 0 0;
text-align: left;
border-collapse: separate;
border-spacing: 0;
overflow: hidden;
background-color: var(--n-td-color);
border-color: var(--n-merged-border-color);
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
--n-merged-border-color: var(--n-border-color);
`,[r("th",`
white-space: nowrap;
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
text-align: inherit;
padding: var(--n-th-padding);
vertical-align: inherit;
text-transform: none;
border: 0px solid var(--n-merged-border-color);
font-weight: var(--n-th-font-weight);
color: var(--n-th-text-color);
background-color: var(--n-th-color);
border-bottom: 1px solid var(--n-merged-border-color);
border-right: 1px solid var(--n-merged-border-color);
`,[r("&:last-child",`
border-right: 0px solid var(--n-merged-border-color);
`)]),r("td",`
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
padding: var(--n-td-padding);
color: var(--n-td-text-color);
background-color: var(--n-td-color);
border: 0px solid var(--n-merged-border-color);
border-right: 1px solid var(--n-merged-border-color);
border-bottom: 1px solid var(--n-merged-border-color);
`,[r("&:last-child",`
border-right: 0px solid var(--n-merged-border-color);
`)]),t("bordered",`
border: 1px solid var(--n-merged-border-color);
border-radius: var(--n-border-radius);
`,[r("tr",[r("&:last-child",[r("td",`
border-bottom: 0 solid var(--n-merged-border-color);
`)])])]),t("single-line",[r("th",`
border-right: 0px solid var(--n-merged-border-color);
`),r("td",`
border-right: 0px solid var(--n-merged-border-color);
`)]),t("single-column",[r("tr",[r("&:not(:last-child)",[r("td",`
border-bottom: 0px solid var(--n-merged-border-color);
`)])])]),t("striped",[r("tr:nth-of-type(even)",[r("td","background-color: var(--n-td-color-striped)")])]),V("bottom-bordered",[r("tr",[r("&:last-child",[r("td",`
border-bottom: 0px solid var(--n-merged-border-color);
`)])])])]),j(n("table",`
background-color: var(--n-td-color-modal);
--n-merged-border-color: var(--n-border-color-modal);
`,[r("th",`
background-color: var(--n-th-color-modal);
`),r("td",`
background-color: var(--n-td-color-modal);
`)])),q(n("table",`
background-color: var(--n-td-color-popover);
--n-merged-border-color: var(--n-border-color-popover);
`,[r("th",`
background-color: var(--n-th-color-popover);
`),r("td",`
background-color: var(--n-td-color-popover);
`)]))]);const W=Object.assign(Object.assign({},b.props),{bordered:{type:Boolean,default:!0},bottomBordered:{type:Boolean,default:!0},singleLine:{type:Boolean,default:!0},striped:Boolean,singleColumn:Boolean,size:{type:String,default:"medium"}});var G=H({name:"Table",props:W,setup(e){const{mergedClsPrefixRef:o,inlineThemeDisabled:i,mergedRtlRef:g}=D(e),h=b("Table","-table",Q,F,e,o),v=I("Table",g,o),s=c(()=>{const{size:l}=e,{self:{borderColor:p,tdColor:m,tdColorModal:u,tdColorPopover:f,thColor:x,thColorModal:C,thColorPopover:z,thTextColor:P,tdTextColor:k,borderRadius:R,thFontWeight:B,lineHeight:y,borderColorModal:M,borderColorPopover:T,tdColorStriped:$,tdColorStripedModal:w,tdColorStripedPopover:S,[a("fontSize",l)]:_,[a("tdPadding",l)]:E,[a("thPadding",l)]:L},common:{cubicBezierEaseInOut:O}}=h.value;return{"--n-bezier":O,"--n-td-color":m,"--n-td-color-modal":u,"--n-td-color-popover":f,"--n-td-text-color":k,"--n-border-color":p,"--n-border-color-modal":M,"--n-border-color-popover":T,"--n-border-radius":R,"--n-font-size":_,"--n-th-color":x,"--n-th-color-modal":C,"--n-th-color-popover":z,"--n-th-font-weight":B,"--n-th-text-color":P,"--n-line-height":y,"--n-td-padding":E,"--n-th-padding":L,"--n-td-color-striped":$,"--n-td-color-striped-modal":w,"--n-td-color-striped-popover":S}}),d=i?K("table",c(()=>e.size[0]),s,e):void 0;return{rtlEnabled:v,mergedClsPrefix:o,cssVars:i?void 0:s,themeClass:d==null?void 0:d.themeClass,onRender:d==null?void 0:d.onRender}},render(){var e;const{mergedClsPrefix:o}=this;return(e=this.onRender)===null||e===void 0||e.call(this),N("table",{class:[`${o}-table`,this.themeClass,{[`${o}-table--rtl`]:this.rtlEnabled,[`${o}-table--bottom-bordered`]:this.bottomBordered,[`${o}-table--bordered`]:this.bordered,[`${o}-table--single-line`]:this.singleLine,[`${o}-table--single-column`]:this.singleColumn,[`${o}-table--striped`]:this.striped}],style:this.cssVars},this.$slots)}});export{G as _};

@ -0,0 +1,76 @@
import{Q as r,P as n,a2 as t,a3 as V,ap as j,aq as q,M as H,a4 as D,a5 as b,at as F,ae as I,L as c,af as a,ah as K,q as N}from"./index.3673901a.js";var Q=r([n("table",`
font-size: var(--n-font-size);
font-variant-numeric: tabular-nums;
line-height: var(--n-line-height);
width: 100%;
border-radius: var(--n-border-radius) var(--n-border-radius) 0 0;
text-align: left;
border-collapse: separate;
border-spacing: 0;
overflow: hidden;
background-color: var(--n-td-color);
border-color: var(--n-merged-border-color);
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
--n-merged-border-color: var(--n-border-color);
`,[r("th",`
white-space: nowrap;
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
text-align: inherit;
padding: var(--n-th-padding);
vertical-align: inherit;
text-transform: none;
border: 0px solid var(--n-merged-border-color);
font-weight: var(--n-th-font-weight);
color: var(--n-th-text-color);
background-color: var(--n-th-color);
border-bottom: 1px solid var(--n-merged-border-color);
border-right: 1px solid var(--n-merged-border-color);
`,[r("&:last-child",`
border-right: 0px solid var(--n-merged-border-color);
`)]),r("td",`
transition:
background-color .3s var(--n-bezier),
border-color .3s var(--n-bezier),
color .3s var(--n-bezier);
padding: var(--n-td-padding);
color: var(--n-td-text-color);
background-color: var(--n-td-color);
border: 0px solid var(--n-merged-border-color);
border-right: 1px solid var(--n-merged-border-color);
border-bottom: 1px solid var(--n-merged-border-color);
`,[r("&:last-child",`
border-right: 0px solid var(--n-merged-border-color);
`)]),t("bordered",`
border: 1px solid var(--n-merged-border-color);
border-radius: var(--n-border-radius);
`,[r("tr",[r("&:last-child",[r("td",`
border-bottom: 0 solid var(--n-merged-border-color);
`)])])]),t("single-line",[r("th",`
border-right: 0px solid var(--n-merged-border-color);
`),r("td",`
border-right: 0px solid var(--n-merged-border-color);
`)]),t("single-column",[r("tr",[r("&:not(:last-child)",[r("td",`
border-bottom: 0px solid var(--n-merged-border-color);
`)])])]),t("striped",[r("tr:nth-of-type(even)",[r("td","background-color: var(--n-td-color-striped)")])]),V("bottom-bordered",[r("tr",[r("&:last-child",[r("td",`
border-bottom: 0px solid var(--n-merged-border-color);
`)])])])]),j(n("table",`
background-color: var(--n-td-color-modal);
--n-merged-border-color: var(--n-border-color-modal);
`,[r("th",`
background-color: var(--n-th-color-modal);
`),r("td",`
background-color: var(--n-td-color-modal);
`)])),q(n("table",`
background-color: var(--n-td-color-popover);
--n-merged-border-color: var(--n-border-color-popover);
`,[r("th",`
background-color: var(--n-th-color-popover);
`),r("td",`
background-color: var(--n-td-color-popover);
`)]))]);const W=Object.assign(Object.assign({},b.props),{bordered:{type:Boolean,default:!0},bottomBordered:{type:Boolean,default:!0},singleLine:{type:Boolean,default:!0},striped:Boolean,singleColumn:Boolean,size:{type:String,default:"medium"}});var G=H({name:"Table",props:W,setup(e){const{mergedClsPrefixRef:o,inlineThemeDisabled:i,mergedRtlRef:g}=D(e),h=b("Table","-table",Q,F,e,o),v=I("Table",g,o),s=c(()=>{const{size:l}=e,{self:{borderColor:p,tdColor:m,tdColorModal:u,tdColorPopover:f,thColor:x,thColorModal:C,thColorPopover:z,thTextColor:P,tdTextColor:k,borderRadius:R,thFontWeight:B,lineHeight:y,borderColorModal:M,borderColorPopover:T,tdColorStriped:$,tdColorStripedModal:w,tdColorStripedPopover:S,[a("fontSize",l)]:_,[a("tdPadding",l)]:E,[a("thPadding",l)]:L},common:{cubicBezierEaseInOut:O}}=h.value;return{"--n-bezier":O,"--n-td-color":m,"--n-td-color-modal":u,"--n-td-color-popover":f,"--n-td-text-color":k,"--n-border-color":p,"--n-border-color-modal":M,"--n-border-color-popover":T,"--n-border-radius":R,"--n-font-size":_,"--n-th-color":x,"--n-th-color-modal":C,"--n-th-color-popover":z,"--n-th-font-weight":B,"--n-th-text-color":P,"--n-line-height":y,"--n-td-padding":E,"--n-th-padding":L,"--n-td-color-striped":$,"--n-td-color-striped-modal":w,"--n-td-color-striped-popover":S}}),d=i?K("table",c(()=>e.size[0]),s,e):void 0;return{rtlEnabled:v,mergedClsPrefix:o,cssVars:i?void 0:s,themeClass:d==null?void 0:d.themeClass,onRender:d==null?void 0:d.onRender}},render(){var e;const{mergedClsPrefix:o}=this;return(e=this.onRender)===null||e===void 0||e.call(this),N("table",{class:[`${o}-table`,this.themeClass,{[`${o}-table--rtl`]:this.rtlEnabled,[`${o}-table--bottom-bordered`]:this.bottomBordered,[`${o}-table--bordered`]:this.bordered,[`${o}-table--single-line`]:this.singleLine,[`${o}-table--single-column`]:this.singleColumn,[`${o}-table--striped`]:this.striped}],style:this.cssVars},this.$slots)}});export{G as _};

@ -0,0 +1 @@
import{_ as d,o as n,c as r,b as o,d as t,a as p,w as i,e as a,f as l,p as u,g as f}from"./index.31905853.js";const s={},v=e=>(u("data-v-dfc3dd4e"),e=e(),f(),e),m=v(()=>t("div",{class:"i404_wrapper"},[t("img",{src:"https://iph.href.lu/300x300/?text=404",alt:""})],-1)),h={"mt-10":""};function x(e,_){const c=l;return n(),r("div",null,[m,o(" \u672A\u627E\u5230\u9875\u9762 "),t("div",h,[p(c,{type:"primary",onClick:_[0]||(_[0]=k=>e.$router.back())},{default:i(()=>[o("\u8FD4\u56DE")]),_:1})])])}typeof a=="function"&&a(s);var b=d(s,[["render",x],["__scopeId","data-v-dfc3dd4e"]]);export{b as default};

@ -0,0 +1 @@
import{_ as d,o as n,c as r,b as o,d as t,a as p,w as i,e as a,f as l,p as u,g as f}from"./index.0f087b09.js";const s={},v=e=>(u("data-v-dfc3dd4e"),e=e(),f(),e),m=v(()=>t("div",{class:"i404_wrapper"},[t("img",{src:"https://iph.href.lu/300x300/?text=404",alt:""})],-1)),h={"mt-10":""};function x(e,_){const c=l;return n(),r("div",null,[m,o(" \u672A\u627E\u5230\u9875\u9762 "),t("div",h,[p(c,{type:"primary",onClick:_[0]||(_[0]=k=>e.$router.back())},{default:i(()=>[o("\u8FD4\u56DE")]),_:1})])])}typeof a=="function"&&a(s);var b=d(s,[["render",x],["__scopeId","data-v-dfc3dd4e"]]);export{b as default};

@ -0,0 +1 @@
.i404_wrapper[data-v-dfc3dd4e]{width:300px;margin:0 auto}.i404_wrapper img[data-v-dfc3dd4e]{width:300px}

@ -0,0 +1 @@
import{_ as d,o as n,c as r,b as o,d as t,a as p,w as i,e as a,f as l,p as u,g as f}from"./index.3673901a.js";const s={},v=e=>(u("data-v-dfc3dd4e"),e=e(),f(),e),m=v(()=>t("div",{class:"i404_wrapper"},[t("img",{src:"https://iph.href.lu/300x300/?text=404",alt:""})],-1)),h={"mt-10":""};function x(e,_){const c=l;return n(),r("div",null,[m,o(" \u672A\u627E\u5230\u9875\u9762 "),t("div",h,[p(c,{type:"primary",onClick:_[0]||(_[0]=k=>e.$router.back())},{default:i(()=>[o("\u8FD4\u56DE")]),_:1})])])}typeof a=="function"&&a(s);var b=d(s,[["render",x],["__scopeId","data-v-dfc3dd4e"]]);export{b as default};

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

@ -0,0 +1 @@
.opt[data-v-b0ed0c88]{opacity:var(--583b7b96)}

@ -0,0 +1 @@
import{r as t,o as r,h as n,e}from"./index.0f087b09.js";const c={__name:"admin",setup(a){return(s,_)=>{const o=t("router-view");return r(),n(o)}}};typeof e=="function"&&e(c);export{c as default};

@ -0,0 +1 @@
import{r as t,o as r,h as n,e}from"./index.31905853.js";const c={__name:"admin",setup(a){return(s,_)=>{const o=t("router-view");return r(),n(o)}}};typeof e=="function"&&e(c);export{c as default};

@ -0,0 +1 @@
import{r as t,o as r,h as n,e}from"./index.3673901a.js";const c={__name:"admin",setup(a){return(s,_)=>{const o=t("router-view");return r(),n(o)}}};typeof e=="function"&&e(c);export{c as default};

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

@ -0,0 +1 @@
.form_select_wrapper[data-v-c8994106]{width:836px}

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

@ -0,0 +1 @@
import{bo as $,j as g,i as h,o as C,c as S,a as e,w as t,d as r,l as s,b as k,e as y,bp as J,$ as p,bq as O,br as x,N as U,f as B,y as P,D as V}from"./index.0f087b09.js";import{_ as D}from"./Input.e1f7150d.js";const I=r("div",{class:"form_tag_wrapper"},"\u6635\u79F0",-1),T=r("div",{class:"form_tag_wrapper"},"\u65E7\u5BC6\u7801",-1),j=r("div",{class:"form_tag_wrapper"},"\u65B0\u5BC6\u7801",-1),q=r("div",{class:"form_tag_wrapper"},"\u786E\u8BA4\u5BC6\u7801",-1),E={__name:"info",setup(M){const c=$(),i=g({account_id:0,nickname:""}),f=async()=>{const l=await J();p(l,()=>{c.admin_info=l.data.info,i.value=JSON.parse(JSON.stringify(l.data.info))})};h(()=>{f()});const N=async()=>{if(i.value.nickname===c.admin_info.nickname)return;const l=await O(i.value.nickname);p(l,()=>{f(),window.$message().success("\u4FEE\u6539\u6210\u529F")})},m={old:"",new:"",check:""},b=async()=>{if(w())return;const l=await x({account_id:i.value.account_id,password:n.value.new,old_password:n.value.old});p(l,()=>{n.value=JSON.parse(JSON.stringify(m)),window.$message().success("\u4FEE\u6539\u6210\u529F")})},n=g(JSON.parse(JSON.stringify(m))),w=()=>n.value.old.length<6||n.value.old.length>20||n.value.new.length<6||n.value.new.length>20||n.value.new!==n.value.check;return(l,a)=>{const u=U,d=D,v=B,_=P,A=V;return C(),S("div",null,[e(A,{title:"\u4E2A\u4EBA\u8BBE\u7F6E"},{default:t(()=>[r("div",null,[e(_,{align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[I]),_:1}),e(d,{class:"form_input_wrapper",value:s(i).nickname,"onUpdate:value":a[0]||(a[0]=o=>s(i).nickname=o)},null,8,["value"]),e(v,{disabled:s(i).nickname===s(c).admin_info.nickname,onClick:a[1]||(a[1]=o=>N()),type:"info"},{default:t(()=>[k("\u4FEE\u6539\u6635\u79F0 ")]),_:1},8,["disabled"])]),_:1}),e(_,{"mt-5":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[T]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).old,"onUpdate:value":a[2]||(a[2]=o=>s(n).old=o)},null,8,["value"])]),_:1}),e(_,{"mt-2":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[j]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).new,"onUpdate:value":a[3]||(a[3]=o=>s(n).new=o)},null,8,["value"])]),_:1}),e(_,{"mt-2":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[q]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).check,"onUpdate:value":a[4]||(a[4]=o=>s(n).check=o)},null,8,["value"])]),_:1}),e(v,{disabled:w(),onClick:a[5]||(a[5]=o=>b()),"mt-5":"",type:"info"},{default:t(()=>[k("\u4FEE\u6539\u5BC6\u7801 ")]),_:1},8,["disabled"])])]),_:1})])}}};typeof y=="function"&&y(E);export{E as default};

@ -0,0 +1 @@
import{bo as $,j as g,i as h,o as C,c as S,a as e,w as t,d as r,l as s,b as k,e as y,bp as J,$ as p,bq as O,br as x,N as U,f as B,y as P,D as V}from"./index.31905853.js";import{_ as D}from"./Input.325ae8a6.js";const I=r("div",{class:"form_tag_wrapper"},"\u6635\u79F0",-1),T=r("div",{class:"form_tag_wrapper"},"\u65E7\u5BC6\u7801",-1),j=r("div",{class:"form_tag_wrapper"},"\u65B0\u5BC6\u7801",-1),q=r("div",{class:"form_tag_wrapper"},"\u786E\u8BA4\u5BC6\u7801",-1),E={__name:"info",setup(M){const c=$(),i=g({account_id:0,nickname:""}),f=async()=>{const l=await J();p(l,()=>{c.admin_info=l.data.info,i.value=JSON.parse(JSON.stringify(l.data.info))})};h(()=>{f()});const N=async()=>{if(i.value.nickname===c.admin_info.nickname)return;const l=await O(i.value.nickname);p(l,()=>{f(),window.$message().success("\u4FEE\u6539\u6210\u529F")})},m={old:"",new:"",check:""},b=async()=>{if(w())return;const l=await x({account_id:i.value.account_id,password:n.value.new,old_password:n.value.old});p(l,()=>{n.value=JSON.parse(JSON.stringify(m)),window.$message().success("\u4FEE\u6539\u6210\u529F")})},n=g(JSON.parse(JSON.stringify(m))),w=()=>n.value.old.length<6||n.value.old.length>20||n.value.new.length<6||n.value.new.length>20||n.value.new!==n.value.check;return(l,a)=>{const u=U,d=D,v=B,_=P,A=V;return C(),S("div",null,[e(A,{title:"\u4E2A\u4EBA\u8BBE\u7F6E"},{default:t(()=>[r("div",null,[e(_,{align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[I]),_:1}),e(d,{class:"form_input_wrapper",value:s(i).nickname,"onUpdate:value":a[0]||(a[0]=o=>s(i).nickname=o)},null,8,["value"]),e(v,{disabled:s(i).nickname===s(c).admin_info.nickname,onClick:a[1]||(a[1]=o=>N()),type:"info"},{default:t(()=>[k("\u4FEE\u6539\u6635\u79F0 ")]),_:1},8,["disabled"])]),_:1}),e(_,{"mt-5":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[T]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).old,"onUpdate:value":a[2]||(a[2]=o=>s(n).old=o)},null,8,["value"])]),_:1}),e(_,{"mt-2":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[j]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).new,"onUpdate:value":a[3]||(a[3]=o=>s(n).new=o)},null,8,["value"])]),_:1}),e(_,{"mt-2":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[q]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).check,"onUpdate:value":a[4]||(a[4]=o=>s(n).check=o)},null,8,["value"])]),_:1}),e(v,{disabled:w(),onClick:a[5]||(a[5]=o=>b()),"mt-5":"",type:"info"},{default:t(()=>[k("\u4FEE\u6539\u5BC6\u7801 ")]),_:1},8,["disabled"])])]),_:1})])}}};typeof y=="function"&&y(E);export{E as default};

@ -0,0 +1 @@
import{bo as $,j as g,i as h,o as C,c as S,a as e,w as t,d as r,l as s,b as k,e as y,bp as J,$ as p,bq as O,br as x,N as U,f as B,y as P,D as V}from"./index.3673901a.js";import{_ as D}from"./Input.a26d5770.js";const I=r("div",{class:"form_tag_wrapper"},"\u6635\u79F0",-1),T=r("div",{class:"form_tag_wrapper"},"\u65E7\u5BC6\u7801",-1),j=r("div",{class:"form_tag_wrapper"},"\u65B0\u5BC6\u7801",-1),q=r("div",{class:"form_tag_wrapper"},"\u786E\u8BA4\u5BC6\u7801",-1),E={__name:"info",setup(M){const c=$(),i=g({account_id:0,nickname:""}),f=async()=>{const l=await J();p(l,()=>{c.admin_info=l.data.info,i.value=JSON.parse(JSON.stringify(l.data.info))})};h(()=>{f()});const N=async()=>{if(i.value.nickname===c.admin_info.nickname)return;const l=await O(i.value.nickname);p(l,()=>{f(),window.$message().success("\u4FEE\u6539\u6210\u529F")})},m={old:"",new:"",check:""},b=async()=>{if(w())return;const l=await x({account_id:i.value.account_id,password:n.value.new,old_password:n.value.old});p(l,()=>{n.value=JSON.parse(JSON.stringify(m)),window.$message().success("\u4FEE\u6539\u6210\u529F")})},n=g(JSON.parse(JSON.stringify(m))),w=()=>n.value.old.length<6||n.value.old.length>20||n.value.new.length<6||n.value.new.length>20||n.value.new!==n.value.check;return(l,a)=>{const u=U,d=D,v=B,_=P,A=V;return C(),S("div",null,[e(A,{title:"\u4E2A\u4EBA\u8BBE\u7F6E"},{default:t(()=>[r("div",null,[e(_,{align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[I]),_:1}),e(d,{class:"form_input_wrapper",value:s(i).nickname,"onUpdate:value":a[0]||(a[0]=o=>s(i).nickname=o)},null,8,["value"]),e(v,{disabled:s(i).nickname===s(c).admin_info.nickname,onClick:a[1]||(a[1]=o=>N()),type:"info"},{default:t(()=>[k("\u4FEE\u6539\u6635\u79F0 ")]),_:1},8,["disabled"])]),_:1}),e(_,{"mt-5":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[T]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).old,"onUpdate:value":a[2]||(a[2]=o=>s(n).old=o)},null,8,["value"])]),_:1}),e(_,{"mt-2":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[j]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).new,"onUpdate:value":a[3]||(a[3]=o=>s(n).new=o)},null,8,["value"])]),_:1}),e(_,{"mt-2":"",align:"center"},{default:t(()=>[e(u,null,{default:t(()=>[q]),_:1}),e(d,{type:"password",class:"form_input_wrapper",value:s(n).check,"onUpdate:value":a[4]||(a[4]=o=>s(n).check=o)},null,8,["value"])]),_:1}),e(v,{disabled:w(),onClick:a[5]||(a[5]=o=>b()),"mt-5":"",type:"info"},{default:t(()=>[k("\u4FEE\u6539\u5BC6\u7801 ")]),_:1},8,["disabled"])])]),_:1})])}}};typeof y=="function"&&y(E);export{E as default};

@ -0,0 +1,749 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="240"
height="144"
id="svg4136"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="jsoneditor-icons.svg">
<title
id="title6512">JSON Editor Icons</title>
<metadata
id="metadata4148">
<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>JSON Editor Icons</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs4146" />
<sodipodi:namedview
pagecolor="#ff63ff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1026"
id="namedview4144"
showgrid="true"
inkscape:zoom="4"
inkscape:cx="13.229181"
inkscape:cy="119.82429"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg4136"
showguides="false"
borderlayer="false"
inkscape:showpageshadow="true"
showborder="true">
<inkscape:grid
type="xygrid"
id="grid4640"
empspacing="24" />
</sodipodi:namedview>
<!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
id="svg_1"
height="16"
width="16"
y="4"
x="4" />
<rect
id="svg_1-7"
height="16"
width="16"
y="3.999995"
x="28.000006"
style="fill:#ec3f29;fill-opacity:0.94117647;stroke:none;stroke-width:0" />
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
x="52.000004"
y="3.999995"
width="16"
height="16"
id="rect4165" />
<rect
id="rect4175"
height="16"
width="16"
y="3.9999852"
x="172.00002"
style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
<rect
id="rect4175-3"
height="16"
width="16"
y="3.999995"
x="196"
style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
<g
id="g4299"
style="stroke:none">
<rect
x="7.0000048"
y="10.999998"
width="9.9999924"
height="1.9999986"
id="svg_1-1"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
<rect
x="11.000005"
y="7.0000114"
width="1.9999955"
height="9.9999838"
id="svg_1-1-1"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
</g>
<g
id="g4299-3"
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,19.029435,12.000001)"
style="stroke:none">
<rect
x="7.0000048"
y="10.999998"
width="9.9999924"
height="1.9999986"
id="svg_1-1-0"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
<rect
x="11.000005"
y="7.0000114"
width="1.9999955"
height="9.9999838"
id="svg_1-1-1-9"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0" />
</g>
<rect
id="svg_1-7-5"
height="6.9999905"
width="6.9999909"
y="7.0000048"
x="55.000004"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#4c4c4c;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="58"
y="10.00001"
width="6.9999909"
height="6.9999905"
id="rect4354" />
<rect
id="svg_1-7-5-7"
height="6.9999905"
width="6.9999909"
y="10.000005"
x="58.000004"
style="fill:#ffffff;fill-opacity:1;stroke:#3c80df;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647" />
<g
id="g4378">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
x="198"
y="10.999999"
width="7.9999909"
height="1.9999965"
id="svg_1-7-5-3" />
<rect
id="rect4374"
height="1.9999946"
width="11.999995"
y="7.0000005"
x="198"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
<rect
id="rect4376"
height="1.9999995"
width="3.9999928"
y="14.999996"
x="198"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
</g>
<g
transform="matrix(1,0,0,-1,-23.999995,23.999995)"
id="g4383">
<rect
id="rect4385"
height="1.9999965"
width="7.9999909"
y="10.999999"
x="198"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
x="198"
y="7.0000005"
width="11.999995"
height="1.9999946"
id="rect4387" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0"
x="198"
y="14.999996"
width="3.9999928"
height="1.9999995"
id="rect4389" />
</g>
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none"
id="rect3754-4"
width="16"
height="16"
x="76"
y="3.9999199" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 85.10447,6.0157384 -0.0156,1.4063 c 3.02669,-0.2402 0.33008,3.6507996 2.48438,4.5780996 -2.18694,1.0938 0.49191,4.9069 -2.45313,4.5781 l -0.0156,1.4219 c 5.70828,0.559 1.03264,-5.1005 4.70313,-5.2656 l 0,-1.4063 c -3.61303,-0.027 1.11893,-5.7069996 -4.70313,-5.3124996 z"
id="path4351"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 82.78125,5.9984384 0.0156,1.4063 c -3.02668,-0.2402 -0.33007,3.6506996 -2.48437,4.5780996 2.18694,1.0938 -0.49192,4.9069 2.45312,4.5781 l 0.0156,1.4219 c -5.70827,0.559 -1.03263,-5.1004 -4.70312,-5.2656 l 0,-1.4063 c 3.61303,-0.027 -1.11894,-5.7070996 4.70312,-5.3124996 z"
id="path4351-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none"
id="rect3754-25"
width="16"
height="16"
x="100"
y="3.9999199" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 103.719,5.6719384 0,12.7187996 3.03125,0 0,-1.5313 -1.34375,0 0,-9.6249996 1.375,0 0,-1.5625 z"
id="path2987"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 112.2185,5.6721984 0,12.7187996 -3.03125,0 0,-1.5313 1.34375,0 0,-9.6249996 -1.375,0 0,-1.5625 z"
id="path2987-1"
inkscape:connector-curvature="0" />
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none"
id="rect3754-73"
width="16"
height="16"
x="124"
y="3.9999199" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 126.2824,17.602938 1.78957,0 1.14143,-2.8641 5.65364,0 1.14856,2.8641 1.76565,0 -4.78687,-11.1610996 -1.91903,0 z"
id="path3780"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:#4c4c4c;fill-opacity:1;stroke:none"
d="m 129.72704,13.478838 4.60852,0.01 -2.30426,-5.5497996 z"
id="path3782"
inkscape:connector-curvature="0" />
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none"
id="rect3754-35"
width="16"
height="16"
x="148"
y="3.9999199" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 156.47655,5.8917384 0,2.1797 0.46093,2.3983996 1.82813,0 0.39844,-2.3983996 0,-2.1797 z"
id="path5008-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 152.51561,5.8906384 0,2.1797 0.46094,2.3983996 1.82812,0 0.39844,-2.3983996 0,-2.1797 z"
id="path5008-2-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<rect
id="svg_1-7-2"
height="1.9999961"
width="11.999996"
y="64"
x="54"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
<rect
id="svg_1-7-2-2"
height="2.9999905"
width="2.9999907"
y="52"
x="80.000008"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
<rect
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
x="85.000008"
y="52"
width="2.9999907"
height="2.9999905"
id="rect4561" />
<rect
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
x="80.000008"
y="58"
width="2.9999907"
height="2.9999905"
id="rect4563" />
<rect
id="rect4565"
height="2.9999905"
width="2.9999907"
y="58"
x="85.000008"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
<rect
id="rect4567"
height="2.9999905"
width="2.9999907"
y="64"
x="80.000008"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
<rect
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
x="85.000008"
y="64"
width="2.9999907"
height="2.9999905"
id="rect4569" />
<circle
style="opacity:1;fill:none;fill-opacity:1;stroke:#4c4c4c;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="path4571"
cx="110.06081"
cy="57.939209"
r="4.7438836" />
<rect
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
x="116.64566"
y="-31.79752"
width="4.229713"
height="6.4053884"
id="rect4563-2"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
<path
style="fill:#4c4c4c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 125,56 138.77027,56.095 132,64 Z"
id="path4613"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4615"
d="M 149,64 162.77027,63.905 156,56 Z"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
x="54"
y="53"
width="11.999996"
height="1.9999961"
id="rect4638" />
<rect
id="svg_1-7-2-24"
height="1.9999957"
width="12.99999"
y="-56"
x="53"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
transform="matrix(0,1,-1,0,0,0)" />
<rect
transform="matrix(0,1,-1,0,0,0)"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0"
x="53"
y="-66"
width="12.99999"
height="1.9999957"
id="rect4657" />
<rect
id="rect4659"
height="0.99999291"
width="11.999999"
y="57"
x="54"
style="fill:#4c4c4c;fill-opacity:0.98431373;stroke:none;stroke-width:0" />
<rect
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
x="54"
y="88.000122"
width="11.999996"
height="1.9999961"
id="rect4661" />
<rect
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
x="80.000008"
y="76.000122"
width="2.9999907"
height="2.9999905"
id="rect4663" />
<rect
id="rect4665"
height="2.9999905"
width="2.9999907"
y="76.000122"
x="85.000008"
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
<rect
id="rect4667"
height="2.9999905"
width="2.9999907"
y="82.000122"
x="80.000008"
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
<rect
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
x="85.000008"
y="82.000122"
width="2.9999907"
height="2.9999905"
id="rect4669" />
<rect
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
x="80.000008"
y="88.000122"
width="2.9999907"
height="2.9999905"
id="rect4671" />
<rect
id="rect4673"
height="2.9999905"
width="2.9999907"
y="88.000122"
x="85.000008"
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
<circle
r="4.7438836"
cy="81.939331"
cx="110.06081"
id="circle4675"
style="opacity:1;fill:none;fill-opacity:1;stroke:#d3d3d3;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
id="rect4677"
height="6.4053884"
width="4.229713"
y="-14.826816"
x="133.6163"
style="fill:#d3d3d3;fill-opacity:1;stroke:#d3d3d3;stroke-width:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4679"
d="m 125,80.000005 13.77027,0.09499 L 132,87.999992 Z"
style="fill:#d3d3d3;fill-opacity:1;fill-rule:evenodd;stroke:#d3d3d3;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#d3d3d3;fill-opacity:1;fill-rule:evenodd;stroke:#d3d3d3;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 149,88.0002 162.77027,87.9052 156,80.0002 Z"
id="path4681"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<rect
id="rect4683"
height="1.9999961"
width="11.999996"
y="77.000122"
x="54"
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1" />
<rect
transform="matrix(0,1,-1,0,0,0)"
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
x="77.000122"
y="-56"
width="12.99999"
height="1.9999957"
id="rect4685" />
<rect
id="rect4687"
height="1.9999957"
width="12.99999"
y="-66"
x="77.000122"
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
transform="matrix(0,1,-1,0,0,0)" />
<rect
style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1"
x="54"
y="81.000122"
width="11.999999"
height="0.99999291"
id="rect4689" />
<rect
id="rect4761-1"
height="1.9999945"
width="15.99999"
y="101"
x="76.000008"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect
id="rect4761-0"
height="1.9999945"
width="15.99999"
y="105"
x="76.000008"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect
id="rect4761-7"
height="1.9999945"
width="9"
y="109"
x="76.000008"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect
id="rect4761-1-1"
height="1.9999945"
width="12"
y="125"
x="76.000008"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect
id="rect4761-1-1-4"
height="1.9999945"
width="10"
y="137"
x="76.000008"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect
id="rect4761-1-1-4-4"
height="1.9999945"
width="10"
y="129"
x="82"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<rect
id="rect4761-1-1-4-4-3"
height="1.9999945"
width="9"
y="133"
x="82"
style="fill:#ffffff;fill-opacity:0.8;stroke:none;stroke-width:0" />
<path
inkscape:connector-curvature="0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 36.398438,100.0254 c -0.423362,-0.013 -0.846847,0.01 -1.265626,0.062 -1.656562,0.2196 -3.244567,0.9739 -4.507812,2.2266 L 29,100.5991 l -2.324219,7.7129 7.826172,-1.9062 -1.804687,-1.9063 c 1.597702,-1.5308 4.048706,-1.8453 5.984375,-0.7207 1.971162,1.1452 2.881954,3.3975 2.308593,5.5508 -0.573361,2.1533 -2.533865,3.6953 -4.830078,3.6953 l 0,3.0742 c 3.550756,0 6.710442,-2.4113 7.650391,-5.9414 0.939949,-3.5301 -0.618463,-7.2736 -3.710938,-9.0703 -1.159678,-0.6738 -2.431087,-1.0231 -3.701171,-1.0625 z"
id="path4138" />
<path
inkscape:connector-curvature="0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 59.722656,99.9629 c -1.270084,0.039 -2.541493,0.3887 -3.701172,1.0625 -3.092475,1.7967 -4.650886,5.5402 -3.710937,9.0703 0.939949,3.5301 4.09768,5.9414 7.648437,5.9414 l 0,-3.0742 c -2.296214,0 -4.256717,-1.542 -4.830078,-3.6953 -0.573361,-2.1533 0.337432,-4.4056 2.308594,-5.5508 1.935731,-1.1246 4.38863,-0.8102 5.986326,0.7207 l -1.806638,1.9063 7.828128,1.9062 -2.32422,-7.7129 -1.62696,1.7168 c -1.26338,-1.2531 -2.848917,-2.0088 -4.505855,-2.2285 -0.418778,-0.055 -0.842263,-0.076 -1.265625,-0.062 z"
id="path4138-1" />
<path
inkscape:connector-curvature="0"
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
d="m 10.5,100 0,2 -2.4999996,0 L 12,107 l 4,-5 -2.5,0 0,-2 -3,0 z"
id="path3055-0-77" />
<path
style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.96599996;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 4.9850574,108.015 14.0298856,-0.03"
id="path5244-5-0-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.96599996;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 4.9849874,132.015 14.0298866,-0.03"
id="path5244-5-0-5-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.4;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 36.398438,123.9629 c -0.423362,-0.013 -0.846847,0.01 -1.265626,0.062 -1.656562,0.2196 -3.244567,0.9739 -4.507812,2.2266 L 29,124.5366 l -2.324219,7.7129 7.826172,-1.9062 -1.804687,-1.9063 c 1.597702,-1.5308 4.048706,-1.8453 5.984375,-0.7207 1.971162,1.1453 2.881954,3.3975 2.308593,5.5508 -0.573361,2.1533 -2.533864,3.6953 -4.830078,3.6953 l 0,3.0742 c 3.550757,0 6.710442,-2.4093 7.650391,-5.9394 0.939949,-3.5301 -0.618463,-7.2756 -3.710938,-9.0723 -1.159678,-0.6737 -2.431087,-1.0231 -3.701171,-1.0625 z"
id="path4138-12" />
<path
inkscape:connector-curvature="0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.4;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.66157866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 59.722656,123.9629 c -1.270084,0.039 -2.541493,0.3888 -3.701172,1.0625 -3.092475,1.7967 -4.650886,5.5422 -3.710937,9.0723 0.939949,3.5301 4.09768,5.9394 7.648437,5.9394 l 0,-3.0742 c -2.296214,0 -4.256717,-1.542 -4.830078,-3.6953 -0.573361,-2.1533 0.337432,-4.4055 2.308594,-5.5508 1.935731,-1.1246 4.38863,-0.8102 5.986326,0.7207 l -1.806638,1.9063 7.828128,1.9062 -2.32422,-7.7129 -1.62696,1.7168 c -1.26338,-1.2531 -2.848917,-2.0088 -4.505855,-2.2285 -0.418778,-0.055 -0.842263,-0.076 -1.265625,-0.062 z"
id="path4138-1-3" />
<path
id="path6191"
d="m 10.5,116 0,-2 -2.4999996,0 L 12,109 l 4,5 -2.5,0 0,2 -3,0 z"
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
d="m 10.5,129 0,-2 -2.4999996,0 L 12,122 l 4,5 -2.5,0 0,2 -3,0 z"
id="path6193" />
<path
id="path6195"
d="m 10.5,135 0,2 -2.4999996,0 L 12,142 l 4,-5 -2.5,0 0,-2 -3,0 z"
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.96599996;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
sodipodi:type="star"
style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="path4500"
sodipodi:sides="3"
sodipodi:cx="11.55581"
sodipodi:cy="60.073242"
sodipodi:r1="5.1116104"
sodipodi:r2="2.5558052"
sodipodi:arg1="0"
sodipodi:arg2="1.0471976"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 16.66742,60.073242 -3.833708,2.213392 -3.8337072,2.213393 0,-4.426785 0,-4.426784 3.8337082,2.213392 z"
inkscape:transform-center-x="-1.2779026" />
<path
inkscape:transform-center-x="1.277902"
d="m -31.500004,60.073242 -3.833708,2.213392 -3.833707,2.213393 0,-4.426785 0,-4.426784 3.833707,2.213392 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.0471976"
sodipodi:arg1="0"
sodipodi:r2="2.5558052"
sodipodi:r1="5.1116104"
sodipodi:cy="60.073242"
sodipodi:cx="-36.611614"
sodipodi:sides="3"
id="path4502"
style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star"
transform="scale(-1,1)" />
<path
d="m 16.66742,60.073212 -3.833708,2.213392 -3.8337072,2.213392 0,-4.426784 0,-4.426785 3.8337082,2.213392 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.0471976"
sodipodi:arg1="0"
sodipodi:r2="2.5558052"
sodipodi:r1="5.1116104"
sodipodi:cy="60.073212"
sodipodi:cx="11.55581"
sodipodi:sides="3"
id="path4504"
style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star"
transform="matrix(0,1,-1,0,72.0074,71.7877)"
inkscape:transform-center-y="1.2779029" />
<path
inkscape:transform-center-y="-1.2779026"
transform="matrix(0,-1,-1,0,96,96)"
sodipodi:type="star"
style="fill:#4d4d4d;fill-opacity:0.90196078;stroke:#d3d3d3;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="path4506"
sodipodi:sides="3"
sodipodi:cx="11.55581"
sodipodi:cy="60.073212"
sodipodi:r1="5.1116104"
sodipodi:r2="2.5558052"
sodipodi:arg1="0"
sodipodi:arg2="1.0471976"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 16.66742,60.073212 -3.833708,2.213392 -3.8337072,2.213392 0,-4.426784 0,-4.426785 3.8337082,2.213392 z" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4615-5"
d="m 171.82574,65.174193 16.34854,0 -8.17427,-13.348454 z"
style="fill:#fbb917;fill-opacity:1;fill-rule:evenodd;stroke:#fbb917;stroke-width:1.65161395;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 179,55 0,6 2,0 0,-6"
id="path4300"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 179,62 0,2 2,0 0,-2"
id="path4300-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.8"
d="M 99.994369,113.0221 102,114.98353 l 7,-6.9558 3,0.97227 2,-1 1,-2 0,-3 -3,3 -3,-3 3,-3 -3,0 -2,1 -1,2 0.99437,3.0221 z"
id="path4268"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccc" />
<rect
id="rect4175-3-5"
height="16"
width="16"
y="4"
x="220"
style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0" />
<path
style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 234,6 0,2 -5,5 0,5 -2,0 0,-5 -5,-5 0,-2"
id="path3546"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<g
transform="matrix(1.3333328,0,0,-1.5999992,-139.9999,127.19999)"
id="g4383-6">
<rect
id="rect4385-2"
height="1.2499905"
width="5.9999924"
y="12.625005"
x="198.00002"
style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0" />
<rect
style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
x="198.00002"
y="15.125007"
width="7.4999928"
height="1.2499949"
id="rect4387-9" />
<rect
style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
x="198.00002"
y="7.6250024"
width="2.9999909"
height="1.2499905"
id="rect4389-1-0" />
<rect
style="fill:#ffffff;fill-opacity:0.8;stroke:#000000;stroke-width:0"
x="198.00002"
y="10.125004"
width="4.4999919"
height="1.2499905"
id="rect4389-1-9" />
<path
style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:none;stroke-width:0.68465352px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 207.00001,16.375004 0,-5.625005 -2.25,0 3,-3.1250014 3,3.1250014 -2.25,0 0,5.625005 -1.5,0"
id="path4402"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
</g>
<path
style="fill:#ffffff;fill-opacity:0.8;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 164,100 0,3 -6,6 0,7 -4,0 0,-7 -6,-6 0,-3"
id="path3546-2-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<rect
style="fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0"
id="svg_1-3"
height="16"
width="16"
y="28"
x="4" />
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4402-5-7"
d="m 15,41 0,-7 -4,0 0,3 -5,-4 5,-4 0,3 6,0 0,9"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.68465352px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 31 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

@ -0,0 +1 @@
import{_ as o,o as t,c as r,a,r as c}from"./index.0f087b09.js";const n={},s={class:"px-4 py-10 text-gray-700 dark:text-gray-200"};function _(i,p){const e=c("RouterView");return t(),r("main",s,[a(e)])}var m=o(n,[["render",_]]);export{m as default};

@ -0,0 +1,16 @@
import{P as J,Q as T,a2 as P,M as Q,a4 as X,a5 as j,bB as Y,L as V,af as h,ah as Z,q as ee,_ as oe,bC as ne,bo as te,bD as se,bE as ae,bF as re,j as b,bs as ie,i as le,bt as F,o as y,c as ce,d as s,l as t,bG as H,a as l,w as f,b as I,m as K,bH as M,bI as de,bJ as ue,h as B,bK as pe,bL as N,bM as U,e as W,bN as _e,$ as fe,bO as ge,f as me,bP as ve,B as he,y as be,p as ye,g as we}from"./index.3673901a.js";import{_ as ke}from"./Input.a26d5770.js";import{_ as xe}from"./Checkbox.53c57651.js";var $e=J("h",`
font-size: var(--n-font-size);
font-weight: var(--n-font-weight);
margin: var(--n-margin);
transition: color .3s var(--n-bezier);
color: var(--n-text-color);
`,[T("&:first-child",{marginTop:0}),P("prefix-bar",{position:"relative",paddingLeft:"var(--n-prefix-width)"},[P("align-text",{paddingLeft:0},[T("&::before",{left:"calc(-1 * var(--n-prefix-width))"})]),T("&::before",`
content: "";
width: var(--n-bar-width);
border-radius: calc(var(--n-bar-width) / 2);
transition: background-color .3s var(--n-bezier);
left: 0;
top: 0;
bottom: 0;
position: absolute;
`),T("&::before",{backgroundColor:"var(--n-bar-color)"})])]);const Ce=Object.assign(Object.assign({},j.props),{type:{type:String,default:"default"},prefix:String,alignText:Boolean});var g=o=>Q({name:`H${o}`,props:Ce,setup(a){const{mergedClsPrefixRef:u,inlineThemeDisabled:p}=X(a),i=j("Typography","-h",$e,Y,a,u),_=V(()=>{const{type:c}=a,{common:{cubicBezierEaseInOut:m},self:{headerFontWeight:R,headerTextColor:w,[h("headerPrefixWidth",o)]:k,[h("headerFontSize",o)]:x,[h("headerMargin",o)]:v,[h("headerBarWidth",o)]:S,[h("headerBarColor",c)]:$}}=i.value;return{"--n-bezier":m,"--n-font-size":x,"--n-margin":v,"--n-bar-color":$,"--n-bar-width":S,"--n-font-weight":R,"--n-text-color":w,"--n-prefix-width":k}}),n=p?Z(`h${o}`,V(()=>a.type[0]),_,a):void 0;return{mergedClsPrefix:u,cssVars:p?void 0:_,themeClass:n==null?void 0:n.themeClass,onRender:n==null?void 0:n.onRender}},render(){var a;const{prefix:u,alignText:p,mergedClsPrefix:i,cssVars:_,$slots:n}=this;return(a=this.onRender)===null||a===void 0||a.call(this),ee(`h${o}`,{class:[`${i}-h`,`${i}-h${o}`,this.themeClass,{[`${i}-h--prefix-bar`]:u,[`${i}-h--align-text`]:p}],style:_},n)}});const Te=g("1");g("2");g("3");g("4");g("5");g("6");const Be=o=>(ye("data-v-7ba30944"),o=o(),we(),o),Re={class:"login_logo_wrapper"},Se=["src"],ze={class:"login_space_image_wrapper"},Ie=["src"],Le={class:"login_space_form_wrapper"},Pe={"mt-5":""},Ve={"mt-5":""},Fe={"mt-5":""},He={"mt-10":""},Ke={"mt-5":""},Me=Be(()=>s("div",{class:"login_space_form_divider_wrapper"},null,-1)),D={__name:"login",setup(o){const a=ne(),u=te(),p=se(),i=ae(),_=re(),n=b(""),c=b(""),m=b(!1),R=r=>{m.value=r},w={f:"/"},k=b(w);ie(r=>{x(r.query)});const x=r=>{k.value={f:r.f||w.f}};le(()=>{x(F.currentRoute.value.query)});const v=async()=>{const r=n.value.replace(/^\s+|\s+$/g,"");if(r==="")return window.$message().error("\u8BF7\u8F93\u5165\u8D26\u53F7");if(c.value==="")return window.$message().error("\u8BF7\u8F93\u5165\u5BC6\u7801");const e=await _e({account:r,password:c.value});fe(e,()=>{m.value?(p.value="local",i.value="",_.value=e.data.token):(p.value="session",i.value=e.data.token,_.value=""),ge(),F.push(decodeURIComponent(k.value.f))})},S=()=>{c.value===""?$.value.focus():v()},$=b(null),E=r=>{$.value=r};return(r,e)=>{const O=Te,L=ke,z=me,q=xe,A=ve,C=he,G=be;return y(),ce("div",{class:"login_page_wrapper",style:U({background:t(a).app_theme+"20"})},[s("div",Re,[s("img",{src:t(H)(t(u).config.Logo),alt:""},null,8,Se)]),s("div",{class:"login_space_wrapper shadow-lg",style:U({background:t(N)?"#333333":"#ffffff"})},[s("div",ze,[s("img",{src:t(H)(t(u).config.Login\u6B22\u8FCE\u56FE\u7247),alt:""},null,8,Ie)]),s("div",Le,[s("div",Pe,[l(O,null,{default:f(()=>[I("\u767B\u5F55")]),_:1})]),s("div",Ve,[l(L,{value:t(n),"onUpdate:value":e[0]||(e[0]=d=>K(n)?n.value=d:null),onKeydown:e[1]||(e[1]=M(d=>S(),["enter"])),placeholder:"\u8BF7\u8F93\u5165\u8D26\u53F7"},null,8,["value"])]),s("div",Fe,[l(L,{ref:E,type:"password",onKeydown:e[2]||(e[2]=M(d=>v(),["enter"])),value:t(c),"onUpdate:value":e[3]||(e[3]=d=>K(c)?c.value=d:null),placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"},null,8,["value"])]),s("div",He,[l(z,{onClick:e[4]||(e[4]=d=>v()),type:"primary","w-full":""},{default:f(()=>[I("\u767B\u5F55")]),_:1})]),s("div",Ke,[l(q,{"onUpdate:checked":R,"default-checked":t(m)},{default:f(()=>[I("\u81EA\u52A8\u767B\u5F55")]),_:1},8,["default-checked"])]),Me,l(A,{dashed:""}),l(G,{justify:"center"},{default:f(()=>[l(z,{text:"",onClick:e[5]||(e[5]=d=>t(de)()),"mr-5":""},{default:f(()=>[t(ue)?(y(),B(C,{key:0,type:"off-screen"})):(y(),B(C,{key:1,type:"full-screen"}))]),_:1}),l(z,{text:"",onClick:e[6]||(e[6]=d=>t(pe)()),"mr-5":""},{default:f(()=>[t(N)?(y(),B(C,{key:0,type:"sun-one"})):(y(),B(C,{key:1,type:"moon"}))]),_:1})]),_:1})])],4)],4)}}};typeof W=="function"&&W(D);var je=oe(D,[["__scopeId","data-v-7ba30944"]]);export{je as default};

@ -0,0 +1 @@
.login_space_form_divider_wrapper[data-v-7ba30944]{margin-top:210px}.login_space_form_wrapper[data-v-7ba30944]{width:500px;padding:30px}.login_logo_wrapper img[data-v-7ba30944]{width:80px;height:80px;display:block}.login_logo_wrapper[data-v-7ba30944]{position:absolute;top:20px;left:20px;width:80px;height:80px}.login_space_image_wrapper img[data-v-7ba30944]{width:400px;height:600px;display:block}.login_space_image_wrapper[data-v-7ba30944]{width:400px;height:600px}.login_space_wrapper[data-v-7ba30944]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:900px;height:600px;border-radius:6px;display:flex;overflow:hidden}.login_page_wrapper[data-v-7ba30944]{position:fixed;top:0;bottom:0;left:0;right:0}

@ -0,0 +1 @@
import{_ as o,o as t,c as r,a,r as c}from"./index.3673901a.js";const n={},s={class:"px-4 py-10 text-gray-700 dark:text-gray-200"};function _(i,p){const e=c("RouterView");return t(),r("main",s,[a(e)])}var m=o(n,[["render",_]]);export{m as default};

@ -0,0 +1 @@
import{_ as o,o as t,c as r,a,r as c}from"./index.31905853.js";const n={},s={class:"px-4 py-10 text-gray-700 dark:text-gray-200"};function _(i,p){const e=c("RouterView");return t(),r("main",s,[a(e)])}var m=o(n,[["render",_]]);export{m as default};

@ -0,0 +1,16 @@
import{P as J,Q as T,a2 as P,M as Q,a4 as X,a5 as j,bB as Y,L as V,af as h,ah as Z,q as ee,_ as oe,bC as ne,bo as te,bD as se,bE as ae,bF as re,j as b,bs as ie,i as le,bt as F,o as y,c as ce,d as s,l as t,bG as H,a as l,w as f,b as I,m as K,bH as M,bI as de,bJ as ue,h as B,bK as pe,bL as N,bM as U,e as W,bN as _e,$ as fe,bO as ge,f as me,bP as ve,B as he,y as be,p as ye,g as we}from"./index.31905853.js";import{_ as ke}from"./Input.325ae8a6.js";import{_ as xe}from"./Checkbox.5d168b42.js";var $e=J("h",`
font-size: var(--n-font-size);
font-weight: var(--n-font-weight);
margin: var(--n-margin);
transition: color .3s var(--n-bezier);
color: var(--n-text-color);
`,[T("&:first-child",{marginTop:0}),P("prefix-bar",{position:"relative",paddingLeft:"var(--n-prefix-width)"},[P("align-text",{paddingLeft:0},[T("&::before",{left:"calc(-1 * var(--n-prefix-width))"})]),T("&::before",`
content: "";
width: var(--n-bar-width);
border-radius: calc(var(--n-bar-width) / 2);
transition: background-color .3s var(--n-bezier);
left: 0;
top: 0;
bottom: 0;
position: absolute;
`),T("&::before",{backgroundColor:"var(--n-bar-color)"})])]);const Ce=Object.assign(Object.assign({},j.props),{type:{type:String,default:"default"},prefix:String,alignText:Boolean});var g=o=>Q({name:`H${o}`,props:Ce,setup(a){const{mergedClsPrefixRef:u,inlineThemeDisabled:p}=X(a),i=j("Typography","-h",$e,Y,a,u),_=V(()=>{const{type:c}=a,{common:{cubicBezierEaseInOut:m},self:{headerFontWeight:R,headerTextColor:w,[h("headerPrefixWidth",o)]:k,[h("headerFontSize",o)]:x,[h("headerMargin",o)]:v,[h("headerBarWidth",o)]:S,[h("headerBarColor",c)]:$}}=i.value;return{"--n-bezier":m,"--n-font-size":x,"--n-margin":v,"--n-bar-color":$,"--n-bar-width":S,"--n-font-weight":R,"--n-text-color":w,"--n-prefix-width":k}}),n=p?Z(`h${o}`,V(()=>a.type[0]),_,a):void 0;return{mergedClsPrefix:u,cssVars:p?void 0:_,themeClass:n==null?void 0:n.themeClass,onRender:n==null?void 0:n.onRender}},render(){var a;const{prefix:u,alignText:p,mergedClsPrefix:i,cssVars:_,$slots:n}=this;return(a=this.onRender)===null||a===void 0||a.call(this),ee(`h${o}`,{class:[`${i}-h`,`${i}-h${o}`,this.themeClass,{[`${i}-h--prefix-bar`]:u,[`${i}-h--align-text`]:p}],style:_},n)}});const Te=g("1");g("2");g("3");g("4");g("5");g("6");const Be=o=>(ye("data-v-7ba30944"),o=o(),we(),o),Re={class:"login_logo_wrapper"},Se=["src"],ze={class:"login_space_image_wrapper"},Ie=["src"],Le={class:"login_space_form_wrapper"},Pe={"mt-5":""},Ve={"mt-5":""},Fe={"mt-5":""},He={"mt-10":""},Ke={"mt-5":""},Me=Be(()=>s("div",{class:"login_space_form_divider_wrapper"},null,-1)),D={__name:"login",setup(o){const a=ne(),u=te(),p=se(),i=ae(),_=re(),n=b(""),c=b(""),m=b(!1),R=r=>{m.value=r},w={f:"/"},k=b(w);ie(r=>{x(r.query)});const x=r=>{k.value={f:r.f||w.f}};le(()=>{x(F.currentRoute.value.query)});const v=async()=>{const r=n.value.replace(/^\s+|\s+$/g,"");if(r==="")return window.$message().error("\u8BF7\u8F93\u5165\u8D26\u53F7");if(c.value==="")return window.$message().error("\u8BF7\u8F93\u5165\u5BC6\u7801");const e=await _e({account:r,password:c.value});fe(e,()=>{m.value?(p.value="local",i.value="",_.value=e.data.token):(p.value="session",i.value=e.data.token,_.value=""),ge(),F.push(decodeURIComponent(k.value.f))})},S=()=>{c.value===""?$.value.focus():v()},$=b(null),E=r=>{$.value=r};return(r,e)=>{const O=Te,L=ke,z=me,q=xe,A=ve,C=he,G=be;return y(),ce("div",{class:"login_page_wrapper",style:U({background:t(a).app_theme+"20"})},[s("div",Re,[s("img",{src:t(H)(t(u).config.Logo),alt:""},null,8,Se)]),s("div",{class:"login_space_wrapper shadow-lg",style:U({background:t(N)?"#333333":"#ffffff"})},[s("div",ze,[s("img",{src:t(H)(t(u).config.Login\u6B22\u8FCE\u56FE\u7247),alt:""},null,8,Ie)]),s("div",Le,[s("div",Pe,[l(O,null,{default:f(()=>[I("\u767B\u5F55")]),_:1})]),s("div",Ve,[l(L,{value:t(n),"onUpdate:value":e[0]||(e[0]=d=>K(n)?n.value=d:null),onKeydown:e[1]||(e[1]=M(d=>S(),["enter"])),placeholder:"\u8BF7\u8F93\u5165\u8D26\u53F7"},null,8,["value"])]),s("div",Fe,[l(L,{ref:E,type:"password",onKeydown:e[2]||(e[2]=M(d=>v(),["enter"])),value:t(c),"onUpdate:value":e[3]||(e[3]=d=>K(c)?c.value=d:null),placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"},null,8,["value"])]),s("div",He,[l(z,{onClick:e[4]||(e[4]=d=>v()),type:"primary","w-full":""},{default:f(()=>[I("\u767B\u5F55")]),_:1})]),s("div",Ke,[l(q,{"onUpdate:checked":R,"default-checked":t(m)},{default:f(()=>[I("\u81EA\u52A8\u767B\u5F55")]),_:1},8,["default-checked"])]),Me,l(A,{dashed:""}),l(G,{justify:"center"},{default:f(()=>[l(z,{text:"",onClick:e[5]||(e[5]=d=>t(de)()),"mr-5":""},{default:f(()=>[t(ue)?(y(),B(C,{key:0,type:"off-screen"})):(y(),B(C,{key:1,type:"full-screen"}))]),_:1}),l(z,{text:"",onClick:e[6]||(e[6]=d=>t(pe)()),"mr-5":""},{default:f(()=>[t(N)?(y(),B(C,{key:0,type:"sun-one"})):(y(),B(C,{key:1,type:"moon"}))]),_:1})]),_:1})])],4)],4)}}};typeof W=="function"&&W(D);var je=oe(D,[["__scopeId","data-v-7ba30944"]]);export{je as default};

@ -0,0 +1,16 @@
import{P as J,Q as T,a2 as P,M as Q,a4 as X,a5 as j,bB as Y,L as V,af as h,ah as Z,q as ee,_ as oe,bC as ne,bo as te,bD as se,bE as ae,bF as re,j as b,bs as ie,i as le,bt as F,o as y,c as ce,d as s,l as t,bG as H,a as l,w as f,b as I,m as K,bH as M,bI as de,bJ as ue,h as B,bK as pe,bL as N,bM as U,e as W,bN as _e,$ as fe,bO as ge,f as me,bP as ve,B as he,y as be,p as ye,g as we}from"./index.0f087b09.js";import{_ as ke}from"./Input.e1f7150d.js";import{_ as xe}from"./Checkbox.50de1cf6.js";var $e=J("h",`
font-size: var(--n-font-size);
font-weight: var(--n-font-weight);
margin: var(--n-margin);
transition: color .3s var(--n-bezier);
color: var(--n-text-color);
`,[T("&:first-child",{marginTop:0}),P("prefix-bar",{position:"relative",paddingLeft:"var(--n-prefix-width)"},[P("align-text",{paddingLeft:0},[T("&::before",{left:"calc(-1 * var(--n-prefix-width))"})]),T("&::before",`
content: "";
width: var(--n-bar-width);
border-radius: calc(var(--n-bar-width) / 2);
transition: background-color .3s var(--n-bezier);
left: 0;
top: 0;
bottom: 0;
position: absolute;
`),T("&::before",{backgroundColor:"var(--n-bar-color)"})])]);const Ce=Object.assign(Object.assign({},j.props),{type:{type:String,default:"default"},prefix:String,alignText:Boolean});var g=o=>Q({name:`H${o}`,props:Ce,setup(a){const{mergedClsPrefixRef:u,inlineThemeDisabled:p}=X(a),i=j("Typography","-h",$e,Y,a,u),_=V(()=>{const{type:c}=a,{common:{cubicBezierEaseInOut:m},self:{headerFontWeight:R,headerTextColor:w,[h("headerPrefixWidth",o)]:k,[h("headerFontSize",o)]:x,[h("headerMargin",o)]:v,[h("headerBarWidth",o)]:S,[h("headerBarColor",c)]:$}}=i.value;return{"--n-bezier":m,"--n-font-size":x,"--n-margin":v,"--n-bar-color":$,"--n-bar-width":S,"--n-font-weight":R,"--n-text-color":w,"--n-prefix-width":k}}),n=p?Z(`h${o}`,V(()=>a.type[0]),_,a):void 0;return{mergedClsPrefix:u,cssVars:p?void 0:_,themeClass:n==null?void 0:n.themeClass,onRender:n==null?void 0:n.onRender}},render(){var a;const{prefix:u,alignText:p,mergedClsPrefix:i,cssVars:_,$slots:n}=this;return(a=this.onRender)===null||a===void 0||a.call(this),ee(`h${o}`,{class:[`${i}-h`,`${i}-h${o}`,this.themeClass,{[`${i}-h--prefix-bar`]:u,[`${i}-h--align-text`]:p}],style:_},n)}});const Te=g("1");g("2");g("3");g("4");g("5");g("6");const Be=o=>(ye("data-v-7ba30944"),o=o(),we(),o),Re={class:"login_logo_wrapper"},Se=["src"],ze={class:"login_space_image_wrapper"},Ie=["src"],Le={class:"login_space_form_wrapper"},Pe={"mt-5":""},Ve={"mt-5":""},Fe={"mt-5":""},He={"mt-10":""},Ke={"mt-5":""},Me=Be(()=>s("div",{class:"login_space_form_divider_wrapper"},null,-1)),D={__name:"login",setup(o){const a=ne(),u=te(),p=se(),i=ae(),_=re(),n=b(""),c=b(""),m=b(!1),R=r=>{m.value=r},w={f:"/"},k=b(w);ie(r=>{x(r.query)});const x=r=>{k.value={f:r.f||w.f}};le(()=>{x(F.currentRoute.value.query)});const v=async()=>{const r=n.value.replace(/^\s+|\s+$/g,"");if(r==="")return window.$message().error("\u8BF7\u8F93\u5165\u8D26\u53F7");if(c.value==="")return window.$message().error("\u8BF7\u8F93\u5165\u5BC6\u7801");const e=await _e({account:r,password:c.value});fe(e,()=>{m.value?(p.value="local",i.value="",_.value=e.data.token):(p.value="session",i.value=e.data.token,_.value=""),ge(),F.push(decodeURIComponent(k.value.f))})},S=()=>{c.value===""?$.value.focus():v()},$=b(null),E=r=>{$.value=r};return(r,e)=>{const O=Te,L=ke,z=me,q=xe,A=ve,C=he,G=be;return y(),ce("div",{class:"login_page_wrapper",style:U({background:t(a).app_theme+"20"})},[s("div",Re,[s("img",{src:t(H)(t(u).config.Logo),alt:""},null,8,Se)]),s("div",{class:"login_space_wrapper shadow-lg",style:U({background:t(N)?"#333333":"#ffffff"})},[s("div",ze,[s("img",{src:t(H)(t(u).config.Login\u6B22\u8FCE\u56FE\u7247),alt:""},null,8,Ie)]),s("div",Le,[s("div",Pe,[l(O,null,{default:f(()=>[I("\u767B\u5F55")]),_:1})]),s("div",Ve,[l(L,{value:t(n),"onUpdate:value":e[0]||(e[0]=d=>K(n)?n.value=d:null),onKeydown:e[1]||(e[1]=M(d=>S(),["enter"])),placeholder:"\u8BF7\u8F93\u5165\u8D26\u53F7"},null,8,["value"])]),s("div",Fe,[l(L,{ref:E,type:"password",onKeydown:e[2]||(e[2]=M(d=>v(),["enter"])),value:t(c),"onUpdate:value":e[3]||(e[3]=d=>K(c)?c.value=d:null),placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"},null,8,["value"])]),s("div",He,[l(z,{onClick:e[4]||(e[4]=d=>v()),type:"primary","w-full":""},{default:f(()=>[I("\u767B\u5F55")]),_:1})]),s("div",Ke,[l(q,{"onUpdate:checked":R,"default-checked":t(m)},{default:f(()=>[I("\u81EA\u52A8\u767B\u5F55")]),_:1},8,["default-checked"])]),Me,l(A,{dashed:""}),l(G,{justify:"center"},{default:f(()=>[l(z,{text:"",onClick:e[5]||(e[5]=d=>t(de)()),"mr-5":""},{default:f(()=>[t(ue)?(y(),B(C,{key:0,type:"off-screen"})):(y(),B(C,{key:1,type:"full-screen"}))]),_:1}),l(z,{text:"",onClick:e[6]||(e[6]=d=>t(pe)()),"mr-5":""},{default:f(()=>[t(N)?(y(),B(C,{key:0,type:"sun-one"})):(y(),B(C,{key:1,type:"moon"}))]),_:1})]),_:1})])],4)],4)}}};typeof W=="function"&&W(D);var je=oe(D,[["__scopeId","data-v-7ba30944"]]);export{je as default};

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

@ -0,0 +1 @@
import{r as t,o as r,h as n,e}from"./index.3673901a.js";const s={__name:"settings",setup(c){return(_,a)=>{const o=t("router-view");return r(),n(o)}}};typeof e=="function"&&e(s);export{s as default};

@ -0,0 +1 @@
import{r as t,o as r,h as n,e}from"./index.0f087b09.js";const s={__name:"settings",setup(c){return(_,a)=>{const o=t("router-view");return r(),n(o)}}};typeof e=="function"&&e(s);export{s as default};

@ -0,0 +1 @@
import{r as t,o as r,h as n,e}from"./index.31905853.js";const s={__name:"settings",setup(c){return(_,a)=>{const o=t("router-view");return r(),n(o)}}};typeof e=="function"&&e(s);export{s as default};

@ -18,6 +18,26 @@ Route::get('/', function () {
return view('welcome');
});
Route::any('api/yo', \App\Http\Controllers\YoController::class);
Route::post("api/$admin_api/Upload/image", [\App\Http\Controllers\UploadController::class, 'image']);
Route::post("api/$admin_api/Config/delete", [\App\Http\Controllers\ConfigController::class, 'delete']);
Route::post("api/$admin_api/Config/update", [\App\Http\Controllers\ConfigController::class, 'update']);
Route::post("api/$admin_api/Config/create", [\App\Http\Controllers\ConfigController::class, 'create']);
Route::post("api/$admin_api/Config/list", [\App\Http\Controllers\ConfigController::class, 'list']);
Route::post("api/$admin_api/Auth/update", [\App\Http\Controllers\AuthController::class, 'update']);
Route::post("api/$admin_api/Auth/create", [\App\Http\Controllers\AuthController::class, 'create']);
Route::post("api/$admin_api/Auth/delete", [\App\Http\Controllers\AuthController::class, 'delete']);
Route::post("api/$admin_api/Auth/list", [\App\Http\Controllers\AuthController::class, 'list']);
Route::post("api/$admin_api/Admin/delete", [\App\Http\Controllers\AdminController::class, 'delete']);
Route::post("api/$admin_api/Admin/update", [\App\Http\Controllers\AdminController::class, 'update']);
Route::post("api/$admin_api/Admin/Edit/password", [\App\Http\Controllers\AdminController::class, 'edit_password']);
Route::post("api/$admin_api/Admin/create", [\App\Http\Controllers\AdminController::class, 'create']);
Route::post("api/$admin_api/Admin/list", [\App\Http\Controllers\AdminController::class, 'list']);
Route::post("api/$admin_api/Auth/select", [\App\Http\Controllers\AuthController::class, 'select']);
Route::post("api/$admin_api/AdminAuth/select", [\App\Http\Controllers\AdminAuthController::class, 'select']);
Route::post("api/$admin_api/AdminAuth/list", [\App\Http\Controllers\AdminAuthController::class, 'list']);
Route::post("api/$admin_api/AdminAuth/update", [\App\Http\Controllers\AdminAuthController::class, 'update']);
Route::post("api/$admin_api/AdminAuth/delete", [\App\Http\Controllers\AdminAuthController::class, 'delete']);
Route::post("api/$admin_api/AdminAuth/create", [\App\Http\Controllers\AdminAuthController::class, 'create']);
Route::post("api/$admin_api/Admin/Change/password", [\App\Http\Controllers\AdminController::class, 'change_password']);
Route::post("api/$admin_api/Admin/Change/nickname", [\App\Http\Controllers\AdminController::class, 'change_nickname']);
Route::post("api/$admin_api/Admin/login", [\App\Http\Controllers\AdminController::class, 'login']);

@ -1,55 +1,55 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>鹿和后台</title>
<link rel="shortcut icon" href="favicon.png" />
<script>
// PUBLIC CONFIG
(function () {
const config_data = {
token_key: 'TOKEN',
api: {
url: 'http://mix.sa0.online',
error_message: '网络请求发生错误',
login: [100003],
success: 200
},
layout: {
logo: 40,
background: '#f5f7f9',
header: 64,
footer: 30,
sider: {
inverted: false,
open: 240,
close: 64,
background: '#ffffff',
},
},
title: document.title,
app_theme: '#1c8eee',
version: {
version: '13.0.1 [Mix]',
date: '2022年12月25日 14:58:11',
desc: '鹿和后台管理系统 北有神鹿 其名鹿和'
}
}
localStorage.setItem('APP_CONFIG', JSON.stringify(config_data))
})()
// PUBLIC CONFIG END
</script>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>鹿和后台</title>
<link rel="shortcut icon" href="favicon.png"/>
<script>
// PUBLIC CONFIG
(function () {
const config_data = {
token_key: 'TOKEN',
api: {
url: 'http://mix.sa0.online',
error_message: '网络请求发生错误',
login: [100001, 100003],
success: 200
},
layout: {
logo: 40,
background: '#f5f7f9',
header: 64,
footer: 30,
sider: {
inverted: false,
open: 240,
close: 64,
background: '#ffffff',
},
},
title: document.title,
app_theme: '#1c8eee',
version: {
version: '13.0.1 [Mix]',
date: '2022年12月25日 14:58:11',
desc: '鹿和后台管理系统 北有神鹿 其名鹿和'
}
}
localStorage.setItem('APP_CONFIG', JSON.stringify(config_data))
})()
// PUBLIC CONFIG END
</script>
</head>
<body>
<div id="app"></div>
<script>
(function () {
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
const setting = localStorage.getItem('color-schema') || 'auto'
if (setting === 'dark' || (prefersDark && setting !== 'light'))
document.documentElement.classList.toggle('dark', true)
})()
(function () {
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
const setting = localStorage.getItem('color-schema') || 'auto'
if (setting === 'dark' || (prefersDark && setting !== 'light'))
document.documentElement.classList.toggle('dark', true)
})()
</script>
<script type="module" src="/src/main.js"></script>
</body>

@ -12,6 +12,7 @@
"@vueuse/core": "^8.4.2",
"animate.css": "^4.1.1",
"axios": "^0.26.1",
"json-editor-vue3": "^1.0.6",
"naive-ui": "^2.34.3",
"normalize.css": "^8.0.1",
"pinia": "^2.0.14",
@ -19,6 +20,7 @@
"vue-router": "^4.0.15"
},
"devDependencies": {
"@originjs/vite-plugin-commonjs": "^1.0.3",
"@vitejs/plugin-vue": "^2.3.3",
"pnpm": "^7.0.1",
"unocss": "^0.33.2",

@ -2,10 +2,12 @@ lockfileVersion: 5.4
specifiers:
'@icon-park/vue-next': ^1.4.2
'@originjs/vite-plugin-commonjs': ^1.0.3
'@vitejs/plugin-vue': ^2.3.3
'@vueuse/core': ^8.4.2
animate.css: ^4.1.1
axios: ^0.26.1
json-editor-vue3: ^1.0.6
naive-ui: ^2.34.3
normalize.css: ^8.0.1
pinia: ^2.0.14
@ -24,6 +26,7 @@ dependencies:
'@vueuse/core': 8.9.4_vue@3.2.45
animate.css: 4.1.1
axios: 0.26.1
json-editor-vue3: 1.0.6
naive-ui: 2.34.3_vue@3.2.45
normalize.css: 8.0.1
pinia: 2.0.28_vue@3.2.45
@ -31,6 +34,7 @@ dependencies:
vue-router: 4.1.6_vue@3.2.45
devDependencies:
'@originjs/vite-plugin-commonjs': 1.0.3
'@vitejs/plugin-vue': 2.3.4_vite@2.9.15+vue@3.2.45
pnpm: 7.19.0
unocss: 0.33.5_vite@2.9.15
@ -156,6 +160,12 @@ packages:
fastq: 1.14.0
dev: true
/@originjs/vite-plugin-commonjs/1.0.3:
resolution: {integrity: sha512-KuEXeGPptM2lyxdIEJ4R11+5ztipHoE7hy8ClZt3PYaOVQ/pyngd2alaSrPnwyFeOW1UagRBaQ752aA1dTMdOQ==}
dependencies:
esbuild: 0.14.54
dev: true
/@polka/url/1.0.0-next.21:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
dev: true
@ -168,6 +178,10 @@ packages:
picomatch: 2.3.1
dev: true
/@sphinxxxx/color-conversion/2.2.2:
resolution: {integrity: sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==}
dev: false
/@types/debug/4.1.7:
resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
dependencies:
@ -444,12 +458,25 @@ packages:
vue: 3.2.45
vue-demi: 0.13.11_vue@3.2.45
/ace-builds/1.14.0:
resolution: {integrity: sha512-3q8LvawomApRCt4cC0OzxVjDsZ609lDbm8l0Xl9uqG06dKEq4RT0YXLUyk7J2SxmqIp5YXzZNw767Dr8GKUruw==}
dev: false
/acorn/8.8.1:
resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/ajv/6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
dev: false
/animate.css/4.1.1:
resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==}
dev: false
@ -883,6 +910,10 @@ packages:
strip-final-newline: 2.0.0
dev: true
/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: false
/fast-glob/3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
@ -894,6 +925,10 @@ packages:
micromatch: 4.0.5
dev: true
/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
dev: false
/fastq/1.14.0:
resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==}
dependencies:
@ -1155,17 +1190,59 @@ packages:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true
/javascript-natural-sort/0.7.1:
resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
dev: false
/jiti/1.16.0:
resolution: {integrity: sha512-L3BJStEf5NAqNuzrpfbN71dp43mYIcBUlCRea/vdyv5dW/AYa1d4bpelko4SHdY3I6eN9Wzyasxirj1/vv5kmg==}
hasBin: true
dev: true
/jmespath/0.16.0:
resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==}
engines: {node: '>= 0.6.0'}
dev: false
/json-editor-vue3/1.0.6:
resolution: {integrity: sha512-+OJcRVg9ORuZ+TaR13spgnrPao788s3t+6JVLhBLOsyRA0hjN6tFjeZcjJHWkXDpxC64bEEBKiJ3HJIsoFdNtg==}
dependencies:
jsoneditor: 9.9.2
dev: false
/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
dev: false
/json-source-map/0.6.1:
resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==}
dev: false
/json5/2.2.2:
resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==}
engines: {node: '>=6'}
hasBin: true
dev: true
/jsoneditor/9.9.2:
resolution: {integrity: sha512-hdM6bgGh3fqnbAEgO1zXM3bNdYfFH/9nPWWJYdNP/wyRU9H+t3Wvb+VtBBE8XjkBYv0rIYjeaYgrwDRaXC3zig==}
dependencies:
ace-builds: 1.14.0
ajv: 6.12.6
javascript-natural-sort: 0.7.1
jmespath: 0.16.0
json-source-map: 0.6.1
jsonrepair: 2.2.1
mobius1-selectr: 2.4.13
picomodal: 3.0.0
vanilla-picker: 2.12.1
dev: false
/jsonrepair/2.2.1:
resolution: {integrity: sha512-o9Je8TceILo872uQC9fIBJm957j1Io7z8Ca1iWIqY6S5S65HGE9XN7XEEw7+tUviB9Vq4sygV89MVTxl+rhZyg==}
hasBin: true
dev: false
/kolorist/1.6.0:
resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==}
dev: true
@ -1235,6 +1312,10 @@ packages:
brace-expansion: 2.0.1
dev: true
/mobius1-selectr/2.4.13:
resolution: {integrity: sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw==}
dev: false
/mrmime/1.0.1:
resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
engines: {node: '>=10'}
@ -1382,6 +1463,10 @@ packages:
engines: {node: '>=8.6'}
dev: true
/picomodal/3.0.0:
resolution: {integrity: sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==}
dev: false
/pinia/2.0.28_vue@3.2.45:
resolution: {integrity: sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==}
peerDependencies:
@ -1413,6 +1498,11 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/punycode/2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
dev: false
/queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
@ -1689,6 +1779,18 @@ packages:
webpack-virtual-modules: 0.4.6
dev: true
/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
punycode: 2.1.1
dev: false
/vanilla-picker/2.12.1:
resolution: {integrity: sha512-2qrEP9VYylKXbyzXKsbu2dferBTvqnlsr29XjHwFE+/MEp0VNj6oEUESLDtKZ7DWzGdSv1x/+ujqFZF+KsO3cg==}
dependencies:
'@sphinxxxx/color-conversion': 2.2.2
dev: false
/vdirs/0.1.8_vue@3.2.45:
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
peerDependencies:

@ -48,6 +48,6 @@ const get_theme_overrides = $computed(() => {
}
.form_input_wrapper {
width: 200px;
width: 200px !important;
}
</style>

@ -8,60 +8,125 @@ const $token = useToken()
const $config = useConfig()
const admin_api = 'Admin'
export const yo = async (data) => await $post({url: `${$config.value.api.url}/api/yo`, data}, true)
export const UploadImageAction = async (base64) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Upload/image`, data: {base64}
}, true)
export const ConfigDeleteAction = async (id) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Config/delete`, data: {id}
}, true)
export const ConfigCreateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Config/create`, data
}, true)
export const ConfigUpdateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Config/update`, data
}, true)
export const ConfigListAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Config/list`
}, true)
export const AuthUpdateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Auth/update`, data
}, true)
export const AuthCreateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Auth/create`, data
}, true)
export const AuthDeleteAction = async (id) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Auth/delete`, data: {id}
}, true)
export const AuthListAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Auth/list`
}, true)
export const AdminDeleteAction = async (ids) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/delete`, data: {ids}
}, true)
export const AdminUpdateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/update`, data
}, true)
export const AdminEditPasswordAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/Edit/password`, data
}, true)
export const AdminCreateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/create`, data
}, true)
export const AdminListAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/list?page=${data.page}`, data
}, true)
export const AuthSelectAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Auth/select`
}, true)
export const AdminAuthSelectAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/AdminAuth/select`
}, true)
export const AdminAuthListAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/AdminAuth/list`
}, true)
export const AdminAuthUpdateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/AdminAuth/update`, data
}, true)
export const AdminAuthDeleteAction = async (ids) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/AdminAuth/delete`, data: {ids}
}, true)
export const AdminAuthCreateAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/AdminAuth/create`, data
}, true)
export const ConfigGetAction = async (label_arr) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Config/get`, data: {label_arr}
url: `${$config.value.api.url}/api/${admin_api}/Config/get`, data: {label_arr}
}, true)
export const AdminChangeNicknameAction = async (nickname) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/Change/nickname`, data: {nickname}
url: `${$config.value.api.url}/api/${admin_api}/Admin/Change/nickname`, data: {nickname}
}, true)
export const AdminChangePasswordAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/Change/password`, data
url: `${$config.value.api.url}/api/${admin_api}/Admin/Change/password`, data
}, true)
export const AdminLoginAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/login`, data
url: `${$config.value.api.url}/api/${admin_api}/Admin/login`, data
}, true)
export const AdminMenuAction = async (data) => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/menu`, data
url: `${$config.value.api.url}/api/${admin_api}/Admin/menu`, data
}, true)
export const AdminStatusAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/status`
url: `${$config.value.api.url}/api/${admin_api}/Admin/status`
}, false)
export const AdminInfoAction = async () => await $post({
url: `${$config.value.api.url}/api/${admin_api}/Admin/info`
url: `${$config.value.api.url}/api/${admin_api}/Admin/info`
}, false)
export const $headers = () => {
let $token
if ($save_token_type.value === 'local') {
$token = useToken()
} else {
$token = useSessionToken()
}
return {
'Authorization': 'Bearer ' + $token.value
}
let $token
if ($save_token_type.value === 'local') {
$token = useToken()
} else {
$token = useSessionToken()
}
return {
'Authorization': 'Bearer ' + $token.value
}
}
export const $image = (path) => {
const path_ret = ['http://', 'https://', ';base64,']
for (let i = 0; i < path_ret.length; i++) {
if (path.indexOf(path_ret[i]) !== -1) {
return path
}
const path_ret = ['http://', 'https://', ';base64,']
for (let i = 0; i < path_ret.length; i++) {
if (path.indexOf(path_ret[i]) !== -1) {
return path
}
return `${$config.value.api.url}${path}`
}
return `${$config.value.api.url}${path}`
}
export const $base64 = (file) => {
let reader = new FileReader()
reader.readAsDataURL(file)
return new Promise(resolve => (reader.onloadend = () => resolve(reader.result)))
}
export const $response = (res, then, next = false) => {
if (res) {
if ($config.value.api.login.indexOf(res.code) !== -1) {
$session_token.value = null
$token.value = null
if (!!next) {
next('/login')
} else {
$router.push('/login')
}
}
if (res.code !== $config.value.api.success) return window.$message().error(res.message)
then()
if (res) {
if ($config.value.api.login.indexOf(res.code) !== -1) {
$session_token.value = null
$token.value = null
if (!!next) {
next('/login')
} else {
$router.push('/login')
}
}
if (res.code !== $config.value.api.success) return window.$message().error(res.message)
then()
}
}

@ -21,16 +21,10 @@ const breadcrumb_list = computed(() => {
<template>
<n-breadcrumb ml-5>
<n-breadcrumb-item v-if="breadcrumb_list.length !== 0" href="#">
<n-space align="center">
<Icon type="home"></Icon>
<div>{{ $store.config['网站名称'] }}</div>
</n-space>
{{ $store.config['网站名称'] }}
</n-breadcrumb-item>
<n-breadcrumb-item v-for="(bi,bk) in breadcrumb_list" :key="bk" :disabled="bk !== breadcrumb_list.length - 1">
<n-space align="center">
<Icon :type="bi.icon"></Icon>
<div>{{ bi.title }}</div>
</n-space>
{{ bi.title }}
</n-breadcrumb-item>
</n-breadcrumb>
</template>

@ -47,7 +47,7 @@ onMounted(() => {
function renderIcon(icon) {
return () => h(Icon, {
size: 20,
type: icon
type: !!icon ? icon : 'round'
}, {default: () => h(icon)})
}

@ -9,5 +9,5 @@
<router-view></router-view>
</template>
<route>
{redirect: '/admin/info',"meta":{"title":"管理员设置","icon":"every-user"}}
{redirect: '/admin/info',"meta":{"title":"管理员设置"}}
</route>

@ -4,11 +4,244 @@
* usersa0ChunLuyu
* date2022年12月25日 20:50:25
*/
import {
AuthSelectAction,
AdminAuthListAction,
AdminAuthUpdateAction,
AdminAuthDeleteAction,
AdminAuthCreateAction,
$response
} from '~/api'
import {h} from 'vue'
onMounted(() => {
AuthSelect()
AdminAuthList()
})
const auth_select_list = ref([])
const auth_loading = ref(false)
const AuthSelect = async () => {
auth_loading.value = true
const response = await AuthSelectAction()
auth_loading.value = false
$response(response, () => {
auth_select_list.value = response.data.list
})
}
const admin_auth_columns = [{
type: 'selection'
}, {
title: '名称',
key: 'name'
}, {
title: '权限',
key: 'auth_ids',
render(row) {
return h(
'div',
{},
{default: () => row.auth_ids_turn.length + '个'}
)
}
}, {
title: '备注',
key: 'remark'
}]
const admin_auth_active = ref([])
const admin_auth_list = ref([])
const AdminAuthList = async () => {
const response = await AdminAuthListAction()
$response(response, () => {
admin_auth_list.value = response.data.list
})
}
const create_show = ref(false)
const create_data_default = {
name: '',
auth_ids: [],
remark: '',
}
const create_data = ref(JSON.parse(JSON.stringify(create_data_default)))
const AdminAuthCreate = async () => {
const response = await AdminAuthCreateAction(create_data.value)
$response(response, () => {
window.$message().success(response.message)
create_show.value = false
create_data.value = JSON.parse(JSON.stringify(create_data_default))
AdminAuthList()
})
}
const createShowClick = () => {
create_data.value = JSON.parse(JSON.stringify(create_data_default))
create_show.value = true
}
const update_show = ref(false)
const update_data_default = {
id: 0,
name: '',
auth_ids: [],
remark: '',
}
const update_data = ref(JSON.parse(JSON.stringify(update_data_default)))
const AdminAuthUpdate = async () => {
const response = await AdminAuthUpdateAction(update_data.value)
$response(response, () => {
window.$message().success(response.message)
update_show.value = false
update_data.value = JSON.parse(JSON.stringify(update_data_default))
AdminAuthList()
})
}
const updateShowClick = () => {
if (admin_auth_active.value.length !== 1) return window.$message().error('请选择一个权限')
update_data.value = JSON.parse(JSON.stringify(update_data_default))
for (let i = 0; i < admin_auth_list.value.length; i++) {
if (admin_auth_active.value[0] === admin_auth_list.value[i].id) {
update_data.value = {
id: admin_auth_list.value[i].id,
name: admin_auth_list.value[i].name,
auth_ids: admin_auth_list.value[i].auth_ids_turn.map(n => Number(n)),
remark: admin_auth_list.value[i].remark,
}
update_show.value = true
return
}
}
}
const delete_show = ref(false)
const deleteShowClick = () => {
if (admin_auth_active.value.length <= 0) return window.$message().error('请选择一个权限')
delete_show.value = true
}
const AdminAuthDelete = async () => {
const response = await AdminAuthDeleteAction(admin_auth_active.value)
$response(response, () => {
window.$message().success(response.message)
delete_show.value = false
admin_auth_active.value = []
AdminAuthList()
})
}
</script>
<template>
<div>
<n-modal v-model:show="delete_show" preset="card" :style="{width: '400px'}" title="删除确认" :auto-focus="false"
:bordered="false">
<div>
<n-space justify="center">
<n-button @click="AdminAuthDelete()" type="info">确定</n-button>
<n-button @click="delete_show = false">取消</n-button>
</n-space>
</div>
</n-modal>
<n-modal v-model:show="update_show" preset="card" :style="{width: '1000px'}" title="修改" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.name"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">权限配置</div>
</n-tag>
<div>
<n-button @click="AuthSelect()" :loading="auth_loading" size="small" type="info">
<template #icon>
<n-icon>
<Icon type="refresh" :size="16"></Icon>
</n-icon>
</template>
刷新
</n-button>
</div>
</n-space>
<n-scrollbar mt-2 style="max-height: 400px" trigger="none">
<n-table :single-line="false" size="small">
<tbody>
<tr v-for="(i,k) in auth_select_list" :key="k">
<td width="120" text-center>{{ i.title }}</td>
<td>
<n-checkbox-group v-model:value="update_data.auth_ids">
<n-space item-style="display: flex;">
<n-checkbox v-for="(ii,kk) in i.children" :key="kk" :value="ii.id" :label="ii.title"/>
</n-space>
</n-checkbox-group>
</td>
</tr>
</tbody>
</n-table>
</n-scrollbar>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">备注</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.remark"></n-input>
</n-space>
<n-button @click="AdminAuthUpdate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-modal v-model:show="create_show" preset="card" :style="{width: '1000px'}" title="新建" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.name"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">权限配置</div>
</n-tag>
<div>
<n-button @click="AuthSelect()" :loading="auth_loading" size="small" type="info">
<template #icon>
<n-icon>
<Icon type="refresh" :size="16"></Icon>
</n-icon>
</template>
刷新
</n-button>
</div>
</n-space>
<n-scrollbar mt-2 style="max-height: 400px" trigger="none">
<n-table :single-line="false" size="small">
<tbody>
<tr v-for="(i,k) in auth_select_list" :key="k">
<td width="120" text-center>{{ i.title }}</td>
<td>
<n-checkbox-group v-model:value="create_data.auth_ids">
<n-space item-style="display: flex;">
<n-checkbox v-for="(ii,kk) in i.children" :key="kk" :value="ii.id" :label="ii.title"/>
</n-space>
</n-checkbox-group>
</td>
</tr>
</tbody>
</n-table>
</n-scrollbar>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">备注</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.remark"></n-input>
</n-space>
<n-button @click="AdminAuthCreate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-card title="权限管理">
<div></div>
<div>
<n-space>
<n-button @click="createShowClick()" type="success">新建</n-button>
<n-button @click="deleteShowClick()" type="error">删除</n-button>
<n-button @click="updateShowClick()" type="info">修改</n-button>
</n-space>
<n-data-table mt-2 v-model:checked-row-keys="admin_auth_active" :columns="admin_auth_columns"
:row-key="row=>row.id" :data="admin_auth_list"/>
</div>
</n-card>
</div>
</template>
@ -16,6 +249,6 @@
</style>
<route>
{"meta":{"title":"权限管理","icon":"personal-privacy"}}
{"meta":{"title":"权限管理"}}
</route>

@ -5,7 +5,6 @@
*/
import {$response, AdminChangeNicknameAction, AdminInfoAction, AdminChangePasswordAction} from "~/api";
import {useStore} from "~/store";
import {onMounted} from "vue";
const $store = useStore()
const admin_info = ref({
@ -65,7 +64,7 @@ const changePasswordDisabled = () => {
<n-tag>
<div class="form_tag_wrapper">昵称</div>
</n-tag>
<n-input class="form_title_wrapper" v-model:value="admin_info.nickname"></n-input>
<n-input class="form_input_wrapper" v-model:value="admin_info.nickname"></n-input>
<n-button :disabled="admin_info.nickname === $store.admin_info.nickname" @click="AdminChangeNickname()"
type="info">修改昵称
</n-button>
@ -74,19 +73,19 @@ const changePasswordDisabled = () => {
<n-tag>
<div class="form_tag_wrapper">旧密码</div>
</n-tag>
<n-input type="password" class="form_title_wrapper" v-model:value="password_data.old"></n-input>
<n-input type="password" class="form_input_wrapper" v-model:value="password_data.old"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">新密码</div>
</n-tag>
<n-input type="password" class="form_title_wrapper" v-model:value="password_data.new"></n-input>
<n-input type="password" class="form_input_wrapper" v-model:value="password_data.new"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">确认密码</div>
</n-tag>
<n-input type="password" class="form_title_wrapper" v-model:value="password_data.check"></n-input>
<n-input type="password" class="form_input_wrapper" v-model:value="password_data.check"></n-input>
</n-space>
<n-button :disabled="changePasswordDisabled()" @click="AdminChangePassword()" mt-5 type="info">修改密码
</n-button>
@ -98,6 +97,6 @@ const changePasswordDisabled = () => {
</style>
<route>
{"meta":{"title":"个人设置","icon":"user"}}
{"meta":{"title":"个人设置"}}
</route>

@ -4,11 +4,350 @@
* usersa0ChunLuyu
* date2022年12月25日 20:50:25
*/
import {
AdminDeleteAction,
AdminUpdateAction,
AdminEditPasswordAction,
AdminAuthSelectAction,
AdminCreateAction,
AdminListAction,
$response
} from '~/api'
import $router from '~/router'
import {onBeforeRouteUpdate} from "vue-router";
import {h} from "vue";
import {NTag} from 'naive-ui'
const default_page_options = {
page: 1,
status: 0,
search: ''
}
const page_options = ref(JSON.parse(JSON.stringify(default_page_options)))
onBeforeRouteUpdate((to) => {
routerChange(to.query)
})
const routerChange = (query) => {
page_options.value = {
page: Number(query.page) || default_page_options.page,
status: Number(query.status) || default_page_options.status,
search: query.search || default_page_options.search,
}
AdminList()
}
onMounted(() => {
routerChange($router.currentRoute.value.query)
AdminAuthSelect()
})
const admin_auth_select_list = ref([])
const admin_auth_loading = ref(false)
const AdminAuthSelect = async () => {
admin_auth_loading.value = true
const response = await AdminAuthSelectAction()
admin_auth_loading.value = false
$response(response, () => {
admin_auth_select_list.value = response.data.list
})
}
const admin_active = ref([])
const admin_list = ref([])
const admin_list_last_page = ref(0)
const AdminList = async () => {
const response = await AdminListAction(page_options.value)
$response(response, () => {
admin_list.value = response.data.data
admin_list_last_page.value = response.data.last_page
})
}
const admin_columns = [{
type: 'selection'
}, {
title: '昵称',
key: 'nickname'
}, {
title: '权限',
key: 'admin_auth_name',
render(row) {
return h(
'div',
{},
{
default: () => {
if (row.admin_auth_id === -1) return '超级管理员'
if (row.admin_auth_id === 0) return '无权限分组'
return !!row.admin_auth_name ? row.admin_auth_name : '异常权限组'
}
}
)
}
}, {
title: '状态',
key: 'status',
render(row) {
return h(
NTag,
{
type: row.status === 1 ? 'success' : 'error'
},
{
default: () => {
return row.status === 1 ? '可用' : '停用'
}
}
)
}
}]
const create_show = ref(false)
const create_data_default = {
nickname: '',
account: '',
password: '',
admin_auth_id: 0,
}
const create_data = ref(JSON.parse(JSON.stringify(create_data_default)))
const AdminCreate = async () => {
const response = await AdminCreateAction(create_data.value)
$response(response, () => {
window.$message().success(response.message)
create_show.value = false
create_data.value = JSON.parse(JSON.stringify(create_data_default))
AdminList()
})
}
const createShowClick = () => {
create_data.value = JSON.parse(JSON.stringify(create_data_default))
create_show.value = true
}
const searchClick = () => {
updatePage(1)
}
const updatePage = (page) => {
page_options.value.page = page
pagePush()
}
const pagePush = () => {
$router.push({
name: 'admin-list',
query: page_options.value
})
}
const update_show = ref(false)
const update_password_show = ref(false)
const update_data_default = {
id: 0,
nickname: '',
account_id: 0,
account: '',
password: '',
status: '',
admin_auth_id: 0,
}
const update_data = ref(JSON.parse(JSON.stringify(update_data_default)))
const updateShowClick = (type) => {
if (admin_active.value.length !== 1) return window.$message().error('请选择一个管理员')
update_data.value = JSON.parse(JSON.stringify(update_data_default))
for (let i = 0; i < admin_list.value.length; i++) {
if (admin_active.value[0] === admin_list.value[i].id) {
update_data.value = {
id: admin_list.value[i].id,
nickname: admin_list.value[i].nickname,
account_id: admin_list.value[i].account_id,
account: admin_list.value[i].account,
password: '',
status: admin_list.value[i].status,
admin_auth_id: admin_list.value[i].admin_auth_id,
}
type === 'info' ? update_show.value = true : update_password_show.value = true
return
}
}
}
const AdminUpdate = async () => {
const response = await AdminUpdateAction({
admin_id: update_data.value.id,
nickname: update_data.value.nickname,
status: update_data.value.status,
admin_auth_id: update_data.value.admin_auth_id,
})
$response(response, () => {
window.$message().success(response.message)
update_show.value = false
update_data.value = JSON.parse(JSON.stringify(update_data_default))
AdminList()
})
}
const AdminEditPassword = async () => {
const response = await AdminEditPasswordAction({
account_id: update_data.value.account_id,
password: update_data.value.password,
})
$response(response, () => {
window.$message().success(response.message)
update_password_show.value = false
update_data.value = JSON.parse(JSON.stringify(update_data_default))
AdminList()
})
}
const delete_show = ref(false)
const deleteShowClick = () => {
if (admin_active.value.length <= 0) return window.$message().error('请选择一个管理员')
delete_show.value = true
}
const AdminDelete = async () => {
const response = await AdminDeleteAction(admin_active.value)
$response(response, () => {
window.$message().success(response.message)
delete_show.value = false
admin_active.value = []
AdminList()
})
}
</script>
<template>
<div>
<n-modal v-model:show="delete_show" preset="card" :style="{width: '400px'}" title="删除确认" :auto-focus="false"
:bordered="false">
<div>
<n-space justify="center">
<n-button @click="AdminDelete()" type="info">确定</n-button>
<n-button @click="delete_show = false">取消</n-button>
</n-space>
</div>
</n-modal>
<n-modal v-model:show="update_password_show" preset="card" :style="{width: '500px'}" title="修改密码"
:auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">密码</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.password"></n-input>
</n-space>
<n-button @click="AdminEditPassword()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-modal v-model:show="update_show" preset="card" :style="{width: '500px'}" title="修改信息" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">账号</div>
</n-tag>
<n-input disabled class="form_input_wrapper" v-model:value="update_data.account"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">昵称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.nickname"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">权限</div>
</n-tag>
<n-select class="form_input_wrapper" v-model:value="update_data.admin_auth_id" :options="[
update_data.admin_auth_id === -1 ? {value:-1,label:'超级管理员'}: {value:0,label:'暂不分配'},
...admin_auth_select_list
]"/>
<div>
<n-button @click="AdminAuthSelect()" :loading="admin_auth_loading" size="small" type="info">
<template #icon>
<n-icon>
<Icon type="refresh" :size="16"></Icon>
</n-icon>
</template>
刷新
</n-button>
</div>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">状态</div>
</n-tag>
<n-radio-group v-model:value="update_data.status" name="update_status_radio">
<n-space>
<n-radio :value="1">可用</n-radio>
<n-radio :value="2">停用</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-button @click="AdminUpdate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-modal v-model:show="create_show" preset="card" :style="{width: '500px'}" title="新建" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">账号</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.account"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">昵称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.nickname"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">密码</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.password"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">权限</div>
</n-tag>
<n-select class="form_input_wrapper" v-model:value="create_data.admin_auth_id" :options="[
{value:0,label:'暂不分配'},
...admin_auth_select_list
]"/>
<div>
<n-button @click="AdminAuthSelect()" :loading="admin_auth_loading" size="small" type="info">
<template #icon>
<n-icon>
<Icon type="refresh" :size="16"></Icon>
</n-icon>
</template>
刷新
</n-button>
</div>
</n-space>
<n-button @click="AdminCreate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-card title="管理员列表">
<div></div>
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">昵称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="page_options.search"></n-input>
<n-tag>
<div class="form_tag_wrapper">状态</div>
</n-tag>
<n-radio-group v-model:value="page_options.status" name="status_radio">
<n-space>
<n-radio :value="0">全部</n-radio>
<n-radio :value="1">可用</n-radio>
<n-radio :value="2">停用</n-radio>
</n-space>
</n-radio-group>
<n-button @click="searchClick()" type="info">搜索</n-button>
</n-space>
<n-space mt-2>
<n-button @click="createShowClick()" type="success">新建</n-button>
<n-button @click="deleteShowClick()" type="error">删除</n-button>
<n-button @click="updateShowClick('info')" type="info">修改信息</n-button>
<n-button @click="updateShowClick('password')" type="info">修改密码</n-button>
</n-space>
<n-data-table mt-2 v-model:checked-row-keys="admin_active" :columns="admin_columns"
:row-key="row=>row.id" :data="admin_list"/>
<n-pagination v-if="admin_list_last_page > 1" @update:page="updatePage" mt-2 v-model:page="page_options.page"
:page-count="admin_list_last_page"/>
</div>
</n-card>
</div>
</template>
@ -16,6 +355,6 @@
</style>
<route>
{"meta":{"title":"管理员列表","icon":"every-user"}}
{"meta":{"title":"管理员列表"}}
</route>

@ -13,7 +13,7 @@ const $store = useStore()
<n-alert :title="`你好 ${$store.admin_info.nickname?$store.admin_info.nickname:''}!`" type="info">
<template #icon>
<n-icon>
<div i-ic-round-music-note></div>
<Icon type="tips-one"></Icon>
</n-icon>
</template>
</n-alert>

@ -0,0 +1,13 @@
<script setup>
/**
* name
* usersa0ChunLuyu
* date2022年12月25日 20:49:28
*/
</script>
<template>
<router-view></router-view>
</template>
<route>
{redirect: '/settings/config',"meta":{"title":"后台管理"}}
</route>

@ -0,0 +1,675 @@
<script setup>
/**
* name
* usersa0ChunLuyu
* date2022年12月26日 15:06:33
*/
import {
ConfigDeleteAction,
ConfigUpdateAction,
UploadImageAction,
ConfigCreateAction,
ConfigListAction,
$response,
$base64,
$image,
} from '~/api'
import JsonEditorVue from 'json-editor-vue3'
import {h} from "vue";
import {NInput} from 'naive-ui'
onMounted(() => {
ConfigList()
})
const config_active = ref([])
const config_list = ref([])
const ConfigList = async () => {
const response = await ConfigListAction()
$response(response, () => {
config_list.value = response.data.list
})
}
const type_arr = ['', '文字', '图片', '文字数组', '图片数组', 'JSON']
const config_columns = [{
type: 'selection',
multiple: false,
}, {
type: 'expand',
renderExpand: (row) => {
switch (row.type) {
case 1:
return h(
'div',
{
class: ['config_text_wrapper']
},
{
default: () => {
return row.value
}
}
)
case 2:
return h(
'div',
{
class: ['config_image_wrapper']
},
[h(
'div',
{
class: ['config_image_item_wrapper'],
},
[h(
'img',
{
src: $image(row.value_turn)
},
{
default: () => {
}
}
)]
)]
)
case 3:
return h(
'div',
{},
row.value_turn.map((item) => {
return h(
'div',
{
class: ['config_text_wrapper']
},
{
default: () => {
return item
}
}
)
})
)
case 4:
return h(
'div',
{
class: ['config_image_wrapper']
},
row.value_turn.map((item) => {
return h(
'div',
{
class: ['config_image_item_wrapper', 'm-1'],
},
[h(
'img',
{
src: $image(item)
},
{
default: () => {
}
}
)]
)
})
)
case 5:
return h(
NInput,
{
type: "textarea",
disabled: true,
autosize: {minRows: 8},
value: JSON.stringify(row.value_turn, null, 4),
},
{
default: () => {
return row.value
}
}
)
}
}
}, {
title: '名称',
key: 'label'
}, {
title: '类型',
key: 'type',
render(row) {
return type_arr[row.type]
}
}, {
title: '备注',
key: 'remark'
}]
const type_value_arr = ['', '', '', [], [], {}]
const create_show = ref(false)
const create_data_default = {
label: '',
value: '',
value_edit: '',
value_push: '',
type: 1,
remark: '',
}
const create_data = ref(JSON.parse(JSON.stringify(create_data_default)))
const ConfigCreate = async () => {
const response = await ConfigCreateAction({
label: create_data.value.label,
value: [3, 4, 5].indexOf(create_data.value.type) !== -1 ? JSON.stringify(create_data.value.value_edit) : create_data.value.value_edit,
type: create_data.value.type,
remark: create_data.value.remark,
})
$response(response, () => {
window.$message().success(response.message)
create_show.value = false
create_data.value = JSON.parse(JSON.stringify(create_data_default))
ConfigList()
})
}
const createShowClick = () => {
create_data.value = JSON.parse(JSON.stringify(create_data_default))
create_show.value = true
}
const typeChooseUpdate = (e) => {
if (create_show.value) {
create_data.value.value_edit = JSON.parse(JSON.stringify(type_value_arr[e]))
create_data.value.value_push = ''
create_data.value.type = e
} else {
update_data.value.value_edit = JSON.parse(JSON.stringify(type_value_arr[e]))
update_data.value.value_push = ''
update_data.value.type = e
}
}
const addValueClick = () => {
if (create_show.value) {
const push = JSON.parse(JSON.stringify(create_data.value.value_push))
create_data.value.value_push = ''
create_data.value.value_edit.push(push)
} else {
const push = JSON.parse(JSON.stringify(update_data.value.value_push))
update_data.value.value_push = ''
update_data.value.value_edit.push(push)
}
}
const delValueClick = (key) => {
if (create_show.value) {
create_data.value.value_edit.splice(key, 1)
} else {
update_data.value.value_edit.splice(key, 1)
}
}
const update_input_ref = ref(null)
const updateInputRef = (e) => {
update_input_ref.value = e
}
const image_active = ref(-2)
const inputUpdate = async (e) => {
const file = e.target.files[0]
update_input_ref.value.value = null
const base64 = await $base64(file)
const response = await UploadImageAction(base64)
$response(response, () => {
let url = response.data.url
if (create_show.value) {
if (image_active.value === -2) {
create_data.value.value_edit = url
} else if (image_active.value === -1) {
create_data.value.value_edit.push(url)
} else {
create_data.value.value_edit[image_active.value] = url
}
} else {
if (image_active.value === -2) {
update_data.value.value_edit = url
} else if (image_active.value === -1) {
update_data.value.value_edit.push(url)
} else {
update_data.value.value_edit[image_active.value] = url
}
}
})
}
const updateImageClick = (key) => {
image_active.value = key
update_input_ref.value.click()
}
const update_show = ref(false)
const update_data_default = {
id: 0,
label: '',
value: '',
value_edit: '',
value_push: '',
type: 1,
remark: '',
}
const update_data = ref(JSON.parse(JSON.stringify(update_data_default)))
const ConfigUpdate = async () => {
const response = await ConfigUpdateAction({
config_id: update_data.value.id,
label: update_data.value.label,
value: [3, 4, 5].indexOf(update_data.value.type) !== -1 ? JSON.stringify(update_data.value.value_edit) : update_data.value.value_edit,
type: update_data.value.type,
remark: update_data.value.remark,
})
$response(response, () => {
window.$message().success(response.message)
update_show.value = false
update_data.value = JSON.parse(JSON.stringify(update_data_default))
ConfigList()
})
}
const updateShowClick = () => {
if (config_active.value.length !== 1) return window.$message().error('请选择一个配置')
update_data.value = JSON.parse(JSON.stringify(update_data_default))
for (let i = 0; i < config_list.value.length; i++) {
if (config_active.value[0] === config_list.value[i].id) {
update_data.value = {
id: config_list.value[i].id,
label: config_list.value[i].label,
value: config_list.value[i].value,
value_edit: config_list.value[i].value_turn,
value_push: '',
type: config_list.value[i].type,
remark: config_list.value[i].remark,
}
update_show.value = true
return
}
}
}
const deleteImageClick = (key) => {
if (create_show.value) {
if (key === -2) {
create_data.value.value_edit = ''
} else {
create_data.value.value_edit.splice(key, 1)
}
} else {
if (key === -2) {
update_data.value.value_edit = ''
} else {
update_data.value.value_edit.splice(key, 1)
}
}
}
const delete_show = ref(false)
const deleteShowClick = () => {
if (config_active.value.length !== 1) return window.$message().error('请选择一个配置')
delete_show.value = true
}
const ConfigDelete = async () => {
const response = await ConfigDeleteAction(config_active.value[0])
$response(response, () => {
window.$message().success(response.message)
delete_show.value = false
config_active.value = []
ConfigList()
})
}
</script>
<template>
<div>
<n-modal v-model:show="delete_show" preset="card" :style="{width: '400px'}" title="删除确认" :auto-focus="false"
:bordered="false">
<div>
<n-alert title="删除不可恢复且可能会引发严重BUG" type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-alert mt-2 title="删除不可恢复且可能会引发严重BUG" type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-alert mt-2 title="删除不可恢复且可能会引发严重BUG" type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-space mt-2 justify="center">
<n-button @click="ConfigDelete()" type="info">确定</n-button>
<n-button @click="delete_show = false">取消</n-button>
</n-space>
</div>
</n-modal>
<n-modal v-model:show="update_show" preset="card" :style="{width: '1000px'}" title="修改" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.label"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">类型</div>
</n-tag>
<n-radio-group v-model:value="update_data.type" @update:value="typeChooseUpdate" name="type_radio">
<n-space>
<n-radio :value="1">文字</n-radio>
<n-radio :value="2">图片</n-radio>
<n-radio :value="3">文字数组</n-radio>
<n-radio :value="4">图片数组</n-radio>
<n-radio :value="5">JSON</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2>
<n-tag mt-1>
<div class="form_tag_wrapper">内容</div>
</n-tag>
<template v-if="update_data.type === 1">
<n-input class="form_input_wrapper" v-model:value="update_data.value_edit"></n-input>
</template>
<template v-if="update_data.type === 2">
<div class="config_image_wrapper">
<div class="config_image_item_wrapper" m-1>
<span v-if="!update_data.value_edit"></span>
<div class="config_image_cover_wrapper">
<div class="config_image_cover_upload_wrapper" cursor-pointer @click="updateImageClick(-2)">
<Icon type="upload-three"></Icon>
</div>
<div v-if="!!update_data.value_edit" cursor-pointer class="config_image_cover_delete_wrapper"
@click="deleteImageClick(-2)">
<Icon type="delete-one"></Icon>
</div>
</div>
<img v-if="!!update_data.value_edit" :src="$image(update_data.value_edit)" alt="">
</div>
</div>
</template>
<template v-if="update_data.type === 3">
<n-scrollbar style="max-height: 500px">
<n-space mb-2 v-for="(i,k) in update_data.value_edit" :key="k" align="center">
<n-input class="form_input_wrapper" v-model:value="update_data.value_edit[k]"></n-input>
<n-button @click="delValueClick(k)" quaternary circle type="error">
<template #icon>
<n-icon>
<Icon type="minus"></Icon>
</n-icon>
</template>
</n-button>
</n-space>
<n-space align="center">
<n-input class="form_input_wrapper" v-model:value="update_data.value_push"></n-input>
<n-button @click="addValueClick()" quaternary circle type="info">
<template #icon>
<n-icon>
<Icon type="plus"></Icon>
</n-icon>
</template>
</n-button>
</n-space>
</n-scrollbar>
</template>
<template v-if="update_data.type === 4">
<n-scrollbar style="max-height: 500px">
<div class="config_image_wrapper">
<div v-for="(i,k) in update_data.value_edit" :key="k"
class="config_image_item_wrapper" m-1 cursor-pointer>
<div class="config_image_cover_wrapper">
<div class="config_image_cover_upload_wrapper" @click="updateImageClick(k)">
<Icon type="upload-three"></Icon>
</div>
<div class="config_image_cover_delete_wrapper" @click="deleteImageClick(k)">
<Icon type="delete-one"></Icon>
</div>
</div>
<img :src="$image(i)" alt="">
</div>
<div @click="updateImageClick(-1)" class="config_image_item_wrapper" m-1 cursor-pointer>上传图片</div>
</div>
</n-scrollbar>
</template>
<template v-if="update_data.type === 5">
<JsonEditorVue style="width: 840px;height: 500px;" v-model="update_data.value_edit" language="zh-CN"
:modeList="[]"></JsonEditorVue>
</template>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">备注</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.remark"></n-input>
</n-space>
<n-space mt-2>
<n-button @click="ConfigUpdate()" type="info">确定</n-button>
</n-space>
</div>
</n-modal>
<n-modal v-model:show="create_show" preset="card" :style="{width: '1000px'}" title="新建" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.label"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">类型</div>
</n-tag>
<n-radio-group v-model:value="create_data.type" @update:value="typeChooseUpdate" name="type_radio">
<n-space>
<n-radio :value="1">文字</n-radio>
<n-radio :value="2">图片</n-radio>
<n-radio :value="3">文字数组</n-radio>
<n-radio :value="4">图片数组</n-radio>
<n-radio :value="5">JSON</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2>
<n-tag mt-1>
<div class="form_tag_wrapper">内容</div>
</n-tag>
<template v-if="create_data.type === 1">
<n-input class="form_input_wrapper" v-model:value="create_data.value_edit"></n-input>
</template>
<template v-if="create_data.type === 2">
<div class="config_image_wrapper">
<div class="config_image_item_wrapper" m-1>
<span v-if="!create_data.value_edit"></span>
<div class="config_image_cover_wrapper">
<div class="config_image_cover_upload_wrapper" cursor-pointer @click="updateImageClick(-2)">
<Icon type="upload-three"></Icon>
</div>
<div v-if="!!create_data.value_edit" cursor-pointer class="config_image_cover_delete_wrapper"
@click="deleteImageClick(-2)">
<Icon type="delete-one"></Icon>
</div>
</div>
<img v-if="!!create_data.value_edit" :src="$image(create_data.value_edit)" alt="">
</div>
</div>
</template>
<template v-if="create_data.type === 3">
<n-scrollbar style="max-height: 500px">
<n-space mb-2 v-for="(i,k) in create_data.value_edit" :key="k" align="center">
<n-input class="form_input_wrapper" v-model:value="create_data.value_edit[k]"></n-input>
<n-button @click="delValueClick(k)" quaternary circle type="error">
<template #icon>
<n-icon>
<Icon type="minus"></Icon>
</n-icon>
</template>
</n-button>
</n-space>
<n-space align="center">
<n-input class="form_input_wrapper" v-model:value="create_data.value_push"></n-input>
<n-button @click="addValueClick()" quaternary circle type="info">
<template #icon>
<n-icon>
<Icon type="plus"></Icon>
</n-icon>
</template>
</n-button>
</n-space>
</n-scrollbar>
</template>
<template v-if="create_data.type === 4">
<n-scrollbar style="max-height: 500px">
<div class="config_image_wrapper">
<div v-for="(i,k) in create_data.value_edit" :key="k" @click="updateImageClick(k)"
class="config_image_item_wrapper" m-1 cursor-pointer>
<div class="config_image_cover_wrapper">
<div class="config_image_cover_upload_wrapper" @click="updateImageClick(k)">
<Icon type="upload-three"></Icon>
</div>
<div class="config_image_cover_delete_wrapper" @click="deleteImageClick(k)">
<Icon type="delete-one"></Icon>
</div>
</div>
<img :src="$image(i)" alt="">
</div>
<div @click="updateImageClick(-1)" class="config_image_item_wrapper" m-1 cursor-pointer>上传图片</div>
</div>
</n-scrollbar>
</template>
<template v-if="create_data.type === 5">
<JsonEditorVue style="width: 840px;height: 500px;" v-model="create_data.value_edit" language="zh-CN"
:modeList="[]"></JsonEditorVue>
</template>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">备注</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.remark"></n-input>
</n-space>
<n-space mt-2>
<n-button @click="ConfigCreate()" type="info">确定</n-button>
</n-space>
</div>
</n-modal>
<input class="upload_input_wrapper" accept="image/*" @change="inputUpdate" type="file" :ref="updateInputRef">
<n-card title="后台配置">
<div>
<n-space>
<n-button @click="createShowClick()" type="success">新建</n-button>
<n-button @click="deleteShowClick()" type="error">删除</n-button>
<n-button @click="updateShowClick()" type="info">修改</n-button>
</n-space>
<n-alert mt-2 title="在修改和删除前请确保您已经充分理解该配置的含义及用法盲目修改或删除可能会引发严重BUG"
type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-data-table mt-2 v-model:checked-row-keys="config_active"
:columns="config_columns"
:row-key="row=>row.id" :data="config_list"/>
</div>
</n-card>
</div>
</template>
<style>
a.jsoneditor-poweredBy {
font-size: 8pt;
position: absolute;
right: 0;
top: 0;
display: none;
}
.config_text_wrapper {
text-align: center;
}
.config_image_wrapper {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
max-width: 700px;
margin: 0 auto;
}
.config_image_item_wrapper {
width: 200px;
height: 200px;
display: table-cell;
vertical-align: middle;
text-align: center;
line-height: 200px;
background: #00000010;
position: relative;
}
.config_image_item_wrapper img {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
position: absolute;
z-index: 1;
left: 50%;
bottom: 0;
right: 0;
top: 50%;
transform: translate(-50%, -50%);
}
</style>
<style scoped>
.config_image_cover_upload_wrapper {
width: 50%;
background: #5e92ff50;
}
.config_image_cover_upload_wrapper:hover {
background: #5e92ff70;
}
.config_image_cover_delete_wrapper {
width: 50%;
background: #fd606050;
}
.config_image_cover_delete_wrapper:hover {
background: #fd606070;
}
.config_image_cover_wrapper {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: flex;
z-index: 2;
opacity: 0;
justify-content: center;
}
.config_image_cover_wrapper:hover {
opacity: 1;
}
.upload_input_wrapper {
width: 0px;
height: 0px;
opacity: 0;
}
</style>
<route>
{"meta":{"title":"后台配置"}}
</route>

@ -0,0 +1,519 @@
<script setup>
/**
* name
* usersa0ChunLuyu
* date2022年12月26日 15:06:55
*/
import {
AuthUpdateAction,
AuthCreateAction,
AuthDeleteAction,
AuthListAction,
$response
} from '~/api'
import {computed, h} from "vue";
import {NTag} from "naive-ui";
import Icon from '~/components/Icon.vue';
import icons_json from '@icon-park/vue-next/icons.json';
onMounted(() => {
AuthList()
})
const icons_search = ref('')
const icons_list = computed(() => {
let list = []
let search = icons_search.value
if (!!search) {
for (let i = 0; i < icons_json.length; i++) {
let push = false
if (icons_json[i].title.toLowerCase().indexOf(search.toLowerCase()) !== -1) push = true
if (icons_json[i].name.toLowerCase().indexOf(search.toLowerCase()) !== -1) push = true
if (icons_json[i].category.toLowerCase().indexOf(search.toLowerCase()) !== -1) push = true
if (icons_json[i].categoryCN.toLowerCase().indexOf(search.toLowerCase()) !== -1) push = true
for (let ii = 0; ii < icons_json[i].tag.length; ii++) {
if (icons_json[i].tag[ii].toLowerCase().indexOf(search.toLowerCase()) !== -1) push = true
}
if (push) list.push(icons_json[i])
}
} else {
list = icons_json
}
let list_turn = {}
for (let i = 0; i < list.length; i++) {
if (!(list[i]['category'] in list_turn)) {
list_turn[list[i]['category']] = {
name: list[i]['category'],
nameCN: list[i]['categoryCN'],
children: []
}
}
list_turn[list[i]['category']]['children'].push({
title: list[i]['title'],
name: list[i]['name'],
})
}
let ret = []
for (let i in list_turn) {
ret.push(list_turn[i])
}
return ret
})
const auth_active = ref([])
const auth_list = ref([])
const AuthList = async () => {
auth_list.value = []
const response = await AuthListAction()
$response(response, () => {
auth_list.value = response.data.list
})
}
const auth_columns = [{
type: 'selection',
multiple: false,
}, {
title: '名称',
key: 'title',
render(row) {
return h(
'span',
{},
{
default: () => `#${row.id} ${row.title}`
}
)
}
}, {
title: '路由',
key: 'name'
}, {
title: '排序',
key: 'order'
}, {
title: '图标',
key: 'icon',
render(row) {
return row.icon ? h(Icon, {
size: 20,
type: row.icon
}, {default: () => row.icon}) : ''
}
}, {
title: '权限级别',
key: 'status',
render(row) {
return h(
NTag,
{
type: row.check_type === 1 ? 'success' : row.check_type === 2 ? 'warning' : 'error'
},
{
default: () => `${row.check_type}`
}
)
}
}, {
title: '状态',
key: 'status',
render(row) {
return h(
NTag,
{
type: row.status === 1 ? 'success' : 'error'
},
{
default: () => {
return row.status === 1 ? '可用' : '停用'
}
}
)
}
}, {
title: '显示',
key: 'show',
render(row) {
return h(
NTag,
{
type: row.show === 1 ? 'success' : 'error'
},
{
default: () => {
return row.show === 1 ? '显示' : '隐藏'
}
}
)
}
}]
const delete_show = ref(false)
const deleteShowClick = () => {
if (auth_active.value.length <= 0) return window.$message().error('请选择一个路由')
delete_show.value = true
}
const AuthDelete = async () => {
const response = await AuthDeleteAction(auth_active.value[0])
$response(response, () => {
window.$message().success(response.message)
delete_show.value = false
auth_active.value = []
AuthList()
})
}
const create_show = ref(false)
const create_data_default = {
name: '',
title: '',
icon: '',
pid: 0,
check_type: 1,
show: 1,
status: 1,
order: 0,
}
const create_data = ref(JSON.parse(JSON.stringify(create_data_default)))
const AuthCreate = async () => {
const response = await AuthCreateAction(create_data.value)
$response(response, () => {
window.$message().success(response.message)
create_show.value = false
create_data.value = JSON.parse(JSON.stringify(create_data_default))
AuthList()
})
}
const createShowClick = () => {
create_data.value = JSON.parse(JSON.stringify(create_data_default))
create_show.value = true
}
const icons_active = ref(false)
const update_show = ref(false)
const update_data_default = {
id: 0,
name: '',
title: '',
icon: '',
pid: 0,
check_type: 1,
show: 1,
status: 1,
order: 0,
}
const update_data = ref(JSON.parse(JSON.stringify(update_data_default)))
const iconChooseClick = (icon) => {
if (update_show.value) {
update_data.value.icon = ''
setTimeout(() => {
update_data.value.icon = icon
})
} else {
create_data.value.icon = ''
setTimeout(() => {
create_data.value.icon = icon
})
}
icons_active.value = false
}
const AuthUpdate = async () => {
const response = await AuthUpdateAction(update_data.value)
$response(response, () => {
window.$message().success(response.message)
update_show.value = false
update_data.value = JSON.parse(JSON.stringify(update_data_default))
AuthList()
})
}
const updateShowClick = () => {
if (auth_active.value.length !== 1) return window.$message().error('请选择一个路由')
update_data.value = JSON.parse(JSON.stringify(update_data_default))
for (let i = 0; i < auth_list.value.length; i++) {
if (auth_active.value[0] === auth_list.value[i].id) {
update_data.value = {
id: auth_list.value[i].id,
name: auth_list.value[i].name,
title: auth_list.value[i].title,
icon: auth_list.value[i].icon,
pid: auth_list.value[i].pid,
check_type: auth_list.value[i].check_type,
show: auth_list.value[i].show,
status: auth_list.value[i].status,
order: auth_list.value[i].order,
}
update_show.value = true
return
}
for (let ii = 0; ii < auth_list.value[i].children.length; ii++) {
if (auth_active.value[0] === auth_list.value[i].children[ii].id) {
update_data.value = {
id: auth_list.value[i].children[ii].id,
name: auth_list.value[i].children[ii].name,
title: auth_list.value[i].children[ii].title,
icon: auth_list.value[i].children[ii].icon,
pid: auth_list.value[i].children[ii].pid,
check_type: auth_list.value[i].children[ii].check_type,
show: auth_list.value[i].children[ii].show,
status: auth_list.value[i].children[ii].status,
order: auth_list.value[i].children[ii].order,
}
update_show.value = true
return
}
}
}
}
</script>
<template>
<div>
<n-modal v-model:show="delete_show" preset="card" :style="{width: '400px'}" title="删除确认" :auto-focus="false"
:bordered="false">
<div>
<n-alert title="删除可能会引发严重BUG" type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-alert mt-2 title="删除可能会引发严重BUG" type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-alert mt-2 title="删除可能会引发严重BUG" type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-space mt-2 justify="center">
<n-button @click="AuthDelete()" type="info">确定</n-button>
<n-button @click="delete_show = false">取消</n-button>
</n-space>
</div>
</n-modal>
<n-drawer v-model:show="icons_active" :width="500" placement="right">
<n-drawer-content title="选择图标">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">搜索</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="icons_search"></n-input>
<n-button type="info" @click="iconChooseClick('')"></n-button>
</n-space>
</div>
<n-collapse mt-5>
<n-collapse-item v-for="(i,k) in icons_list" :key="k" :title="i.nameCN" :name="i.name">
<n-grid x-gap="12" :cols="10">
<n-gi v-for="(ii,kk) in i.children" :key="kk">
<div text-center mt-2>
<n-tooltip trigger="hover">
<template #trigger>
<n-button @click="iconChooseClick(ii.name)" quaternary circle size="large">
<template #icon>
<n-icon>
<Icon :type="ii.name"></Icon>
</n-icon>
</template>
</n-button>
</template>
{{ ii.title }}
</n-tooltip>
</div>
</n-gi>
</n-grid>
</n-collapse-item>
</n-collapse>
</n-drawer-content>
</n-drawer>
<n-modal v-model:show="create_show" preset="card" :style="{width: '500px'}" title="新建" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.title"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">路由</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.name"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分组</div>
</n-tag>
<n-select class="form_input_wrapper" v-model:value="create_data.pid" :options="[
{value:0,label:'根分组'},
...auth_list.map((item)=>{return {value:item.id,label:item.title}})
]"/>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">排序</div>
</n-tag>
<n-input-number class="form_input_wrapper" v-model:value="create_data.order" :min="0"
:max="999"></n-input-number>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">图标</div>
</n-tag>
<n-button v-if="!!create_data.icon" @click="icons_active = true" quaternary circle size="large">
<template #icon>
<n-icon>
<Icon :type="create_data.icon"></Icon>
</n-icon>
</template>
</n-button>
<n-button @click="icons_active = true" type="info" size="small">选择图标</n-button>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">权限级别</div>
</n-tag>
<n-radio-group v-model:value="create_data.check_type" name="status_radio">
<n-space>
<n-radio :value="1">1</n-radio>
<n-radio :value="2">2</n-radio>
<n-radio :value="3">3</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">显示</div>
</n-tag>
<n-radio-group v-model:value="create_data.show" name="show_radio">
<n-space>
<n-radio :value="1">显示</n-radio>
<n-radio :value="2">隐藏</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">状态</div>
</n-tag>
<n-radio-group v-model:value="create_data.status" name="status_radio">
<n-space>
<n-radio :value="1">可用</n-radio>
<n-radio :value="2">停用</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-button @click="AuthCreate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-modal v-model:show="update_show" preset="card" :style="{width: '500px'}" title="修改" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.title"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">路由</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.name"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分组</div>
</n-tag>
<n-select class="form_input_wrapper" v-model:value="update_data.pid" :options="[
{value:0,label:'根分组'},
...auth_list.map((item)=>{return {value:item.id,label:item.title}})
]"/>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">排序</div>
</n-tag>
<n-input-number class="form_input_wrapper" v-model:value="update_data.order" :min="0"
:max="999"></n-input-number>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">图标</div>
</n-tag>
<n-button v-if="!!update_data.icon" @click="icons_active = true" quaternary circle size="large">
<template #icon>
<n-icon>
<Icon :type="update_data.icon"></Icon>
</n-icon>
</template>
</n-button>
<n-button @click="icons_active = true" type="info" size="small">选择图标</n-button>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">权限级别</div>
</n-tag>
<n-radio-group v-model:value="update_data.check_type" name="status_radio">
<n-space>
<n-radio :value="1">1</n-radio>
<n-radio :value="2">2</n-radio>
<n-radio :value="3">3</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">显示</div>
</n-tag>
<n-radio-group v-model:value="update_data.show" name="show_radio">
<n-space>
<n-radio :value="1">显示</n-radio>
<n-radio :value="2">隐藏</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">状态</div>
</n-tag>
<n-radio-group v-model:value="update_data.status" name="status_radio">
<n-space>
<n-radio :value="1">可用</n-radio>
<n-radio :value="2">停用</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-button @click="AuthUpdate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-card title="路由配置">
<div>
<n-space>
<n-button @click="createShowClick()" type="success">新建</n-button>
<n-button @click="deleteShowClick()" type="error">删除</n-button>
<n-button @click="updateShowClick()" type="info">修改</n-button>
</n-space>
<n-alert mt-2 title="在修改和删除前请确保您已经充分理解该路由的含义及用法盲目修改或删除可能会引发严重BUG"
type="error">
<template #icon>
<n-icon>
<Icon type="alarm"></Icon>
</n-icon>
</template>
</n-alert>
<n-data-table mt-2 v-model:checked-row-keys="auth_active" v-if="auth_list.length > 0" :default-expand-all="true"
:columns="auth_columns"
:row-key="row=>row.id" :data="auth_list"/>
</div>
</n-card>
</div>
</template>
<style scoped>
</style>
<route>
{"meta":{"title":"路由配置"}}
</route>

@ -17,13 +17,11 @@ const router = createRouter({
const updateRouterActive = (matched) => {
matched.shift()
const last = matched[matched.length - 1]
$router_active.value = []
if (no_login_list.indexOf(last.name) !== -1) return
setTimeout(() => {
$router_active.value = matched.map((item) => {
return {
title: 'title' in item.meta ? item.meta.title : item.name,
icon: 'icon' in item.meta ? item.meta.icon : false,
key: item.name
}
})

@ -6,21 +6,22 @@ import Layouts from 'vite-plugin-vue-layouts'
import Components from 'unplugin-vue-components/vite'
import AutoImport from 'unplugin-auto-import/vite'
import {NaiveUiResolver} from 'unplugin-vue-components/resolvers'
import {viteCommonjs} from '@originjs/vite-plugin-commonjs'
import Unocss from 'unocss/vite'
import {presetAttributify, presetUno, presetIcons} from 'unocss'
const admin_path = 'admin'
export default defineConfig({
base: `/${admin_path}/`,
build: {
outDir: `../../public/${admin_path}`, assetsDir: 'lib'
},
resolve: {alias: {'~/': `${path.resolve(__dirname, 'src')}/`}},
plugins: [Vue({reactivityTransform: true}), Pages(), Layouts(), AutoImport({
imports: ['vue', 'vue/macros', 'vue-router', '@vueuse/core',],
}), Components({resolvers: [NaiveUiResolver()]}), Unocss({
presets: [presetAttributify({}), presetUno(), presetIcons({
warn: true,
})],
})]
base: `/${admin_path}/`,
build: {
outDir: `../public/${admin_path}`, assetsDir: 'lib'
},
resolve: {alias: {'~/': `${path.resolve(__dirname, 'src')}/`}},
plugins: [Vue({reactivityTransform: true}), viteCommonjs(), Pages(), Layouts(), AutoImport({
imports: ['vue', 'vue/macros', 'vue-router', '@vueuse/core',],
}), Components({resolvers: [NaiveUiResolver()]}), Unocss({
presets: [presetAttributify({}), presetUno(), presetIcons({
warn: true,
})],
})]
})

Loading…
Cancel
Save