first commit
This commit is contained in:
commit
836bdc9409
584 files changed
+40891
No files matched your search
@@ -0,0 +1 @@
|
||||
*.sqlite*
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
|
||||
*/
|
||||
class UserFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The current password being used by the factory.
|
||||
*/
|
||||
protected static ?string $password;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'name' => fake()->name(),
|
||||
'email' => fake()->unique()->safeEmail(),
|
||||
'email_verified_at' => now(),
|
||||
'password' => static::$password ??= Hash::make('password'),
|
||||
'remember_token' => Str::random(10),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the model's email address should be unverified.
|
||||
*/
|
||||
public function unverified(): static
|
||||
{
|
||||
return $this->state(fn (array $attributes) => [
|
||||
'email_verified_at' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
|
||||
Schema::create('job_batches', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->string('name');
|
||||
$table->integer('total_jobs');
|
||||
$table->integer('pending_jobs');
|
||||
$table->integer('failed_jobs');
|
||||
$table->longText('failed_job_ids');
|
||||
$table->mediumText('options')->nullable();
|
||||
$table->integer('cancelled_at')->nullable();
|
||||
$table->integer('created_at');
|
||||
$table->integer('finished_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('failed_jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('jobs');
|
||||
Schema::dropIfExists('job_batches');
|
||||
Schema::dropIfExists('failed_jobs');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void {
|
||||
Schema::create('auth_admins', function (Blueprint $table) {
|
||||
$table->id('uid')->unique()->comment('用户ID');
|
||||
$table->string('username')->unique()->comment('用户名');
|
||||
$table->string('nickname')->nullable()->comment('昵称');
|
||||
$table->string('email')->nullable()->comment('邮箱');
|
||||
$table->string('mobile')->nullable()->comment('手机号码');
|
||||
$table->string('password')->comment('密码');
|
||||
$table->string('avatar')->nullable()->comment('头像');
|
||||
$table->unsignedBigInteger('department_id')->nullable()->comment('部门id');
|
||||
$table->unsignedTinyInteger('gender')->default(1)->comment('性别 1男 2女');
|
||||
$table->text('remark')->nullable()->comment('备注,个性签名');
|
||||
$table->unsignedTinyInteger('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->string('last_login_ip')->nullable()->comment('最后登录ip');
|
||||
$table->timestamp('last_login_at')->nullable()->comment('最后登录时间');
|
||||
$table->timestamp('email_verified_at')->nullable()->comment('邮箱验证时间');
|
||||
$table->timestamp('mobile_verified_at')->nullable()->comment('手机验证时间');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
$table->timestamp('deleted_at')->nullable()->comment('删除时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('后台管理员表');
|
||||
});
|
||||
Schema::create('auth_admins_roles', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('role_id')->comment('角色id');
|
||||
$table->unsignedBigInteger('uid')->comment('用户id');
|
||||
$table->primary(['role_id', 'uid']);
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('后台管理员角色对应表');
|
||||
});
|
||||
Schema::create('auth_roles', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('title', 50)->comment('角色名称');
|
||||
$table->string('name', 50)->comment('角色标识');
|
||||
$table->string('data_range')->default('all')->comment('数据范围 all全部 department本部门 department_sub本部门及以下 self仅自己');
|
||||
$table->integer('sort')->default(0)->comment('排序');
|
||||
$table->unsignedTinyInteger('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->string('description', 255)->nullable()->comment('角色描述');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
$table->timestamp('deleted_at')->nullable()->comment('删除时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('后台管理员角色表');
|
||||
});
|
||||
Schema::create('auth_roles_permissions', function (Blueprint $table) {
|
||||
$table->bigInteger('role_id')->unsigned()->comment('角色ID');
|
||||
$table->bigInteger('permission_id')->unsigned()->comment('权限ID');
|
||||
$table->primary(['role_id', 'permission_id']);
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('后台管理员角色权限表');
|
||||
});
|
||||
Schema::create('auth_permissions', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->integer('parent_id')->default(0)->comment('父级id');
|
||||
$table->string('title', 50)->comment('权限标题');
|
||||
$table->string('name', 50)->comment('权限名称');
|
||||
$table->string('icon', 50)->nullable()->comment('图标');
|
||||
$table->string('path', 100)->nullable()->comment('权限链接');
|
||||
$table->string('redirect', 100)->nullable()->comment('重定向');
|
||||
$table->string('component', 200)->nullable()->comment('组件');
|
||||
$table->string('type', 20)->default('menu')->comment('类型 menu菜单 button按钮 link外链 iframeIframe');
|
||||
$table->string('color', 20)->nullable()->comment('颜色');
|
||||
$table->tinyInteger('hidden')->default(0)->comment('是否显示 1显示 2不显示');
|
||||
$table->tinyInteger('hiddenBreadcrumb')->default(0)->comment('是否显示面包屑 1显示 2不显示');
|
||||
$table->tinyInteger('affix')->default(0)->comment('是否固定 1固定 2不固定');
|
||||
$table->tinyInteger('fullpage')->default(0)->comment('是否全屏 1全屏 2不全屏');
|
||||
$table->text('apiList')->nullable()->comment('接口列表');
|
||||
$table->integer('sort')->default(0)->comment('排序');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
$table->timestamp('deleted_at')->nullable()->comment('删除时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('权限表');
|
||||
});
|
||||
Schema::create('auth_departments', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('parent_id')->default(0)->comment('父级id');
|
||||
$table->string('title')->comment('部门名称');
|
||||
$table->string('name')->comment('部门标识');
|
||||
$table->string('sort')->default(0)->comment('排序');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->string('description', 255)->nullable()->comment('部门描述');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
$table->timestamp('deleted_at')->nullable()->comment('删除时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('部门表');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {
|
||||
Schema::dropIfExists('auth_admins');
|
||||
Schema::dropIfExists('auth_admins_roles');
|
||||
Schema::dropIfExists('auth_roles');
|
||||
Schema::dropIfExists('auth_roles_permissions');
|
||||
Schema::dropIfExists('auth_permissions');
|
||||
Schema::dropIfExists('auth_departments');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void {
|
||||
Schema::create('system_logs', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->unsignedBigInteger('user_id')->comment('用户ID');
|
||||
$table->string('title')->comment('日志标题');
|
||||
$table->string('name')->comment('日志名称');
|
||||
$table->string('url')->comment('请求地址');
|
||||
$table->string('method')->comment('请求方法');
|
||||
$table->string('client_ip')->nullable()->comment('请求IP');
|
||||
$table->text('data')->nullable()->comment('请求数据');
|
||||
$table->text('remark')->nullable()->comment('备注');
|
||||
$table->text('browser')->nullable()->comment('浏览器');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态码');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统日志表');
|
||||
});
|
||||
Schema::create('system_configs', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('title')->comment('配置标题');
|
||||
$table->string('name')->comment('配置名称');
|
||||
$table->string('values')->nullable()->comment('配置值');
|
||||
$table->string('type')->comment('配置类型');
|
||||
$table->string('group')->comment('配置分组');
|
||||
$table->jsonb('option')->nullable()->comment('配置选项');
|
||||
$table->string('remark')->nullable()->comment('配置备注');
|
||||
$table->string('sort')->default(0)->comment('排序');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统配置表');
|
||||
});
|
||||
Schema::create('system_dicts', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('title')->comment('字典标题');
|
||||
$table->string('values')->comment('字典值');
|
||||
$table->string('group_id')->comment('字典分组');
|
||||
$table->string('group_name')->comment('字典分组标识');
|
||||
$table->string('sort')->default(0)->comment('排序');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统字典表');
|
||||
});
|
||||
Schema::create('system_dict_groups', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('parent_id')->default(0)->comment('父级id');
|
||||
$table->string('title')->comment('字典分组标题');
|
||||
$table->string('name')->comment('字典分组名称');
|
||||
$table->string('sort')->default(0)->comment('排序');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统字典分组表');
|
||||
});
|
||||
Schema::create('system_areas', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('code')->comment('城市编码');
|
||||
$table->string('parent_code')->default(0)->comment('父级id');
|
||||
$table->string('title')->comment('城市名称');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统城市数据表');
|
||||
});
|
||||
|
||||
Schema::create('system_messages', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->unsignedBigInteger('send_uid')->comment('发送人uid');
|
||||
$table->string('receive_uid')->comment('接受人uid');
|
||||
$table->string('receive_group')->nullable()->comment('接受组');
|
||||
$table->string('type')->default(1)->comment('消息类型 1系统消息 2用户消息');
|
||||
$table->string('title')->comment('消息标题');
|
||||
$table->text('content')->comment('消息内容');
|
||||
$table->text('params')->nullable()->comment('消息参数');
|
||||
$table->string('url')->nullable()->comment('消息链接');
|
||||
$table->string('status')->default(1)->comment('状态 1未读 2已读');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
$table->timestamp('read_at')->nullable()->comment('已读时间');
|
||||
$table->timestamp('deleted_at')->nullable()->comment('删除时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统消息表');
|
||||
});
|
||||
|
||||
Schema::create('system_tasks', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->unsignedBigInteger('user_id')->default(0)->comment('用户id');
|
||||
$table->string('title')->comment('任务名称');
|
||||
$table->string('file')->comment('文件路径');
|
||||
$table->string('type')->default('export')->comment('任务类型 import export');
|
||||
$table->string('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统excel任务表');
|
||||
});
|
||||
Schema::create('system_crontabs', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('title')->comment('定时任务标题');
|
||||
$table->string('command')->comment('定时任务命令');
|
||||
$table->string('expression')->comment('定时任务表达式');
|
||||
$table->string('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统定时任务表');
|
||||
});
|
||||
Schema::create('system_client', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('title')->comment('客户端名称');
|
||||
$table->string('app_id')->comment('客户端ID');
|
||||
$table->string('secret')->comment('客户端密钥');
|
||||
$table->string('redirect')->comment('回调地址');
|
||||
$table->string('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统客户端表');
|
||||
});
|
||||
Schema::create('system_client_menu', function (Blueprint $table) {
|
||||
$table->id()->uniqid()->comment('主键id');
|
||||
$table->string('client_id')->comment('客户端ID');
|
||||
$table->unsignedBigInteger('parent_id')->default(0)->comment('父级id');
|
||||
$table->string('position')->comment('菜单位置');
|
||||
$table->string('name')->nullable()->comment('菜单名称标识');
|
||||
$table->string('title')->comment('菜单标题');
|
||||
$table->string('url')->comment('菜单链接');
|
||||
$table->string('cover')->nullable()->comment('菜单图片');
|
||||
$table->string('icon')->nullable()->comment('菜单图标');
|
||||
$table->string('sort')->default(0)->comment('排序');
|
||||
$table->tinyInteger('is_show')->default(1)->comment('是否显示 1显示 2不显示');
|
||||
$table->tinyInteger('is_blank')->default(1)->comment('是否新窗口打开 1是 2否');
|
||||
$table->string('status')->default(1)->comment('状态 1正常 2禁用');
|
||||
$table->timestamp('created_at')->nullable()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->nullable()->comment('更新时间');
|
||||
|
||||
$table->engine = 'InnoDB';
|
||||
$table->charset = 'utf8mb4';
|
||||
$table->collation = 'utf8mb4_unicode_ci';
|
||||
$table->comment('系统客户端菜单表');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {
|
||||
Schema::dropIfExists('system_logs');
|
||||
Schema::dropIfExists('system_configs');
|
||||
Schema::dropIfExists('system_dicts');
|
||||
Schema::dropIfExists('system_dict_groups');
|
||||
Schema::dropIfExists('system_areas');
|
||||
Schema::dropIfExists('system_messages');
|
||||
Schema::dropIfExists('system_tasks');
|
||||
Schema::dropIfExists('system_crontabs');
|
||||
Schema::dropIfExists('system_client');
|
||||
Schema::dropIfExists('system_client_menu');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void {
|
||||
Schema::create('modules', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('title', 50)->nullable()->comment('模块标题');
|
||||
$table->string('name')->unique()->comment('模块标识');
|
||||
$table->text('description')->nullable()->comment('模块描述');
|
||||
$table->boolean('status')->comment('模块状态');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {
|
||||
Schema::dropIfExists('modules');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Services\Auth\MenuService;
|
||||
|
||||
class AdminSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void {
|
||||
DB::table('auth_admins')->insert([
|
||||
'username' => 'admin',
|
||||
'nickname' => '超级管理员',
|
||||
'email' => 'admin@admin.com',
|
||||
'mobile' => '13888888888',
|
||||
'password' => Hash::make('admin888'),
|
||||
'department_id' => 1,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
DB::table('auth_departments')->insert([
|
||||
'title' => '总部',
|
||||
'name' => 'root',
|
||||
'parent_id' => 0,
|
||||
'sort' => 0,
|
||||
'description' => '总部',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
DB::table('auth_roles')->insert([
|
||||
'title' => '超级管理员',
|
||||
'name' => 'admin',
|
||||
'description' => '超级管理员',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
app(MenuService::class)->importMenu($this->getPermissions(), 0);
|
||||
}
|
||||
|
||||
public function getPermissions(){
|
||||
$permissions = [
|
||||
['title' => '首页', 'name' => 'home', 'path' => '/home', 'component' => '', 'type' => 'menu', 'sort' => 0, 'children' => [
|
||||
['title' => '仪表盘', 'name' => 'dashboard', 'path' => '/dashboard', 'component' => 'home', 'type' => 'menu', 'affix' => 1],
|
||||
['title' => '个人中心', 'name' => 'ucenter', 'path' => '/ucenter', 'component' => 'ucenter', 'type' => 'menu'],
|
||||
]],
|
||||
['title' => '权限', 'name' => 'auth', 'path' => '/auth', 'component' => '', 'type' => 'menu', 'sort' => 99, 'children' => [
|
||||
['title' => '用户管理', 'name' => 'auth.user', 'path' => '/auth/user', 'component' => 'auth/user', 'type' => 'menu'],
|
||||
['title' => '角色管理', 'name' => 'auth.role', 'path' => '/auth/role', 'component' => 'auth/role', 'type' => 'menu'],
|
||||
['title' => '权限管理', 'name' => 'auth.permission', 'path' => '/auth/permission', 'component' => 'auth/permission', 'type' => 'menu'],
|
||||
['title' => '部门管理', 'name' => 'auth.department', 'path' => '/auth/department', 'component' => 'auth/department', 'type' => 'menu'],
|
||||
]]
|
||||
];
|
||||
return $permissions;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\System\Area;
|
||||
|
||||
class CitySeeder extends Seeder{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void {
|
||||
$area = json_decode(file_get_contents(database_path('seeders/area.json')), true);
|
||||
$data = [];
|
||||
foreach ($area as $value) {
|
||||
$value['created_at'] = date('Y-m-d H:i:s');
|
||||
$value['updated_at'] = date('Y-m-d H:i:s');
|
||||
$data[] = $value;
|
||||
}
|
||||
Area::insert($data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder {
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void {
|
||||
$this->call([
|
||||
AdminSeeder::class,
|
||||
SystemSeeder::class,
|
||||
CitySeeder::class
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Services\Auth\MenuService;
|
||||
|
||||
class SystemSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void {
|
||||
$this->insertSettingDict();
|
||||
$this->insertDataAuthDict();
|
||||
$this->insertAdsDict();
|
||||
$this->addModelFieldTypeDict();
|
||||
$this->insertClientMenuPosition();
|
||||
$this->insertPermissions();
|
||||
}
|
||||
|
||||
public function insertSettingDict(){
|
||||
$group_id = DB::table('system_dict_groups')->insertGetId([
|
||||
'parent_id' => 0,
|
||||
'title' => '配置分组',
|
||||
'name' => 'setting_group',
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
if($group_id){
|
||||
$dict = DB::table('system_dicts')->insert([
|
||||
['group_id' => $group_id, 'group_name' => 'setting_group', 'title' => '基础配置', 'values' => 'base', 'sort' => 1, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['group_id' => $group_id, 'group_name' => 'setting_group', 'title' => '上传配置', 'values' => 'upload', 'sort' => 1, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
]);
|
||||
DB::table('system_configs')->insert([
|
||||
['name' => 'system_name', 'title' => '系统名称', 'values' => 'SentOS', 'type' => 'string', 'group' => 'base', 'sort' => 1, 'status' => 1, 'remark' => '系统名称', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['name' => 'system_logo', 'title' => '系统Logo', 'values' => '', 'type' => 'image', 'group' => 'base', 'sort' => 2, 'status' => 1, 'remark' => '系统Logo', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['name' => 'system_email', 'title' => '邮箱', 'values' => '', 'type' => 'string', 'group' => 'base', 'sort' => 6, 'status' => 1, 'remark' => '邮箱', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['name' => 'system_copyright', 'title' => '版权信息', 'values' => 'Copyright © 2019-2024 SentCMS All Rights Reserved.', 'type' => 'string', 'group' => 'base', 'sort' => 3, 'status' => 1, 'remark' => '版权信息', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['name' => 'system_icp', 'title' => '备案信息', 'values' => '', 'type' => 'string', 'group' =>'base', 'sort' => 4, 'status' => 1, 'remark' => '备案信息', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['name' => 'upload_way', 'title' => '上传引擎', 'values' => 'public', 'type' => 'radio', 'group' =>'upload', 'sort' => 1, 'status' => 1, 'remark' => '上传引擎', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function insertDataAuthDict(){
|
||||
$group_id = DB::table('system_dict_groups')->insertGetId([
|
||||
'parent_id' => 0,
|
||||
'title' => '数据权限分组',
|
||||
'name' => 'data_auth',
|
||||
'sort' => 1,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
if($group_id){
|
||||
DB::table('system_dicts')->insert([
|
||||
[
|
||||
'group_id' => $group_id,
|
||||
'group_name' => 'data_auth',
|
||||
'title' => '全部数据',
|
||||
'values' => 'all',
|
||||
'sort' => 1,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'group_id' => $group_id,
|
||||
'group_name' => 'data_auth',
|
||||
'title' => '本部门数据',
|
||||
'values' => 'department',
|
||||
'sort' => 2,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'group_id' => $group_id,
|
||||
'group_name' => 'data_auth',
|
||||
'title' => '本部门及以下数据',
|
||||
'values' => 'department_sub',
|
||||
'sort' => 3,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'group_id' => $group_id,
|
||||
'group_name' => 'data_auth',
|
||||
'title' => '仅自己数据',
|
||||
'values' => 'self',
|
||||
'sort' => 4,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function insertAdsDict(){
|
||||
$group_id = DB::table('system_dict_groups')->insertGetId([
|
||||
'parent_id' => 0,
|
||||
'title' => '广告位',
|
||||
'name' => 'ads_places',
|
||||
'sort' => 1,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
if($group_id){
|
||||
DB::table('system_dicts')->insert([
|
||||
[
|
||||
'group_id' => $group_id,
|
||||
'group_name' => 'ads_places',
|
||||
'title' => '首页轮播',
|
||||
'values' => 'index_banner',
|
||||
'sort' => 2,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function insertClientMenuPosition(){
|
||||
$group_id = DB::table('system_dict_groups')->insertGetId([
|
||||
'parent_id' => 0,
|
||||
'title' => '菜单位置',
|
||||
'name' => 'client_menu_position',
|
||||
'sort' => 3,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
if($group_id){
|
||||
DB::table('system_dicts')->insert([
|
||||
[
|
||||
'group_id' => $group_id,
|
||||
'group_name' => 'client_menu_position',
|
||||
'title' => '顶部菜单',
|
||||
'values' => 'top',
|
||||
'sort' => 1,
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @title 添加字典
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addModelFieldTypeDict(){
|
||||
$group_id = DB::table('system_dict_groups')->insertGetId([
|
||||
'parent_id' => 0,
|
||||
'title' => '字段类型',
|
||||
'name' => 'field_type',
|
||||
'status' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
if($group_id){
|
||||
$dict = DB::table('system_dicts')->insert([
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '单行文本', 'values' => 'string', 'sort' =>1, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '多行文本', 'values' => 'text', 'sort' => 2, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '单选按钮', 'values' => 'radio', 'sort' => 3, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '多选按钮', 'values' => 'checkbox', 'sort' => 4, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '下拉列表', 'values' => 'select', 'sort' => 5, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '字典选择', 'values' => 'sSelect', 'sort' => 5, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' =>date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '树形选择', 'values' => 'sSelectTree', 'sort' => 6, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '日期', 'values' => 'date', 'sort' => 6, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '日期时间', 'values' => 'datetime', 'sort' => 7, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '文件', 'values' => 'file', 'sort' => 8, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '图片', 'values' => 'image', 'sort' => 9, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '多图', 'values' => 'images', 'sort' => 10, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '富文本', 'values' => 'editor', 'sort' => 10, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '视频', 'values' => 'video', 'sort' => 10, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '音频', 'values' => 'audio', 'sort' => 10, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')],
|
||||
['group_id' => $group_id, 'group_name' => 'field_type', 'title' => '数字', 'values' => 'number', 'sort' => 3, 'status' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function insertPermissions(){
|
||||
$permissions = [
|
||||
['title' => '系统', 'name' => 'system', 'path' => '/system', 'component' => '', 'type' => 'menu', 'sort' => 100, 'children' => [
|
||||
['title' => '系统设置', 'name' => 'system.setting', 'path' => '/system/setting', 'component' => 'system/setting', 'type' => 'menu'],
|
||||
['title' => '城市数据', 'name' => 'system.area', 'path' => '/system/area', 'component' => 'system/area', 'type' => 'menu'],
|
||||
['title' => '字典管理', 'name' => 'system.dic', 'path' => '/system/dic', 'component' => 'system/dic', 'type' => 'menu'],
|
||||
['title' => '客户端管理', 'name' => 'system.client', 'path' => '/system/client', 'component' => 'system/client', 'type' => 'menu'],
|
||||
['title' => '模块管理', 'name' => 'system.modules', 'path' => '/system/modules', 'component' => 'system/modules', 'type' => 'menu'],
|
||||
['title' => '系统日志', 'name' => 'system.log', 'path' => '/system/log', 'component' => 'system/log', 'type' => 'menu'],
|
||||
['title' => '定时任务', 'name' => 'system.crontab', 'path' => '/system/crontab', 'component' => 'system/crontab', 'type' => 'menu'],
|
||||
]]
|
||||
];
|
||||
app(MenuService::class)->importMenu($permissions, 0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[{"title":"\u5317\u4eac\u5e02","code":"110000","parent_code":0},{"title":"\u5929\u6d25\u5e02","code":"120000","parent_code":0},{"title":"\u6cb3\u5317\u7701","code":"130000","parent_code":0},{"title":"\u5c71\u897f\u7701","code":"140000","parent_code":0},{"title":"\u5185\u8499\u53e4\u81ea\u6cbb\u533a","code":"150000","parent_code":0},{"title":"\u8fbd\u5b81\u7701","code":"210000","parent_code":0},{"title":"\u5409\u6797\u7701","code":"220000","parent_code":0},{"title":"\u9ed1\u9f99\u6c5f\u7701","code":"230000","parent_code":0},{"title":"\u4e0a\u6d77\u5e02","code":"310000","parent_code":0},{"title":"\u6c5f\u82cf\u7701","code":"320000","parent_code":0},{"title":"\u6d59\u6c5f\u7701","code":"330000","parent_code":0},{"title":"\u5b89\u5fbd\u7701","code":"340000","parent_code":0},{"title":"\u798f\u5efa\u7701","code":"350000","parent_code":0},{"title":"\u6c5f\u897f\u7701","code":"360000","parent_code":0},{"title":"\u5c71\u4e1c\u7701","code":"370000","parent_code":0},{"title":"\u6cb3\u5357\u7701","code":"410000","parent_code":0},{"title":"\u6e56\u5317\u7701","code":"420000","parent_code":0},{"title":"\u6e56\u5357\u7701","code":"430000","parent_code":0},{"title":"\u5e7f\u4e1c\u7701","code":"440000","parent_code":0},{"title":"\u5e7f\u897f\u58ee\u65cf\u81ea\u6cbb\u533a","code":"450000","parent_code":0},{"title":"\u6d77\u5357\u7701","code":"460000","parent_code":0},{"title":"\u91cd\u5e86\u5e02","code":"500000","parent_code":0},{"title":"\u56db\u5ddd\u7701","code":"510000","parent_code":0},{"title":"\u8d35\u5dde\u7701","code":"520000","parent_code":0},{"title":"\u4e91\u5357\u7701","code":"530000","parent_code":0},{"title":"\u897f\u85cf\u81ea\u6cbb\u533a","code":"540000","parent_code":0},{"title":"\u9655\u897f\u7701","code":"610000","parent_code":0},{"title":"\u7518\u8083\u7701","code":"620000","parent_code":0},{"title":"\u9752\u6d77\u7701","code":"630000","parent_code":0},{"title":"\u5b81\u590f\u56de\u65cf\u81ea\u6cbb\u533a","code":"640000","parent_code":0},{"title":"\u65b0\u7586\u7ef4\u543e\u5c14\u81ea\u6cbb\u533a","code":"650000","parent_code":0},{"title":"\u53f0\u6e7e\u7701","code":"710000","parent_code":0},{"title":"\u9999\u6e2f\u7279\u522b\u884c\u653f\u533a","code":"810000","parent_code":0},{"title":"\u6fb3\u95e8\u7279\u522b\u884c\u653f\u533a","code":"820000","parent_code":0},{"title":"\u5317\u4eac\u5e02","code":"110100","parent_code":110000},{"title":"\u5929\u6d25\u5e02","code":"120100","parent_code":120000},{"title":"\u77f3\u5bb6\u5e84\u5e02","code":"130100","parent_code":130000},{"title":"\u5510\u5c71\u5e02","code":"130200","parent_code":130000},{"title":"\u79e6\u7687\u5c9b\u5e02","code":"130300","parent_code":130000},{"title":"\u90af\u90f8\u5e02","code":"130400","parent_code":130000},{"title":"\u90a2\u53f0\u5e02","code":"130500","parent_code":130000},{"title":"\u4fdd\u5b9a\u5e02","code":"130600","parent_code":130000},{"title":"\u5f20\u5bb6\u53e3\u5e02","code":"130700","parent_code":130000},{"title":"\u627f\u5fb7\u5e02","code":"130800","parent_code":130000},{"title":"\u6ca7\u5dde\u5e02","code":"130900","parent_code":130000},{"title":"\u5eca\u574a\u5e02","code":"131000","parent_code":130000},{"title":"\u8861\u6c34\u5e02","code":"131100","parent_code":130000},{"title":"\u592a\u539f\u5e02","code":"140100","parent_code":140000},{"title":"\u5927\u540c\u5e02","code":"140200","parent_code":140000},{"title":"\u9633\u6cc9\u5e02","code":"140300","parent_code":140000},{"title":"\u957f\u6cbb\u5e02","code":"140400","parent_code":140000},{"title":"\u664b\u57ce\u5e02","code":"140500","parent_code":140000},{"title":"\u6714\u5dde\u5e02","code":"140600","parent_code":140000},{"title":"\u664b\u4e2d\u5e02","code":"140700","parent_code":140000},{"title":"\u8fd0\u57ce\u5e02","code":"140800","parent_code":140000},{"title":"\u5ffb\u5dde\u5e02","code":"140900","parent_code":140000},{"title":"\u4e34\u6c7e\u5e02","code":"141000","parent_code":140000},{"title":"\u5415\u6881\u5e02","code":"141100","parent_code":140000},{"title":"\u547c\u548c\u6d69\u7279\u5e02","code":"150100","parent_code":150000},{"title":"\u5305\u5934\u5e02","code":"150200","parent_code":150000},{"title":"\u4e4c\u6d77\u5e02","code":"150300","parent_code":150000},{"title":"\u8d64\u5cf0\u5e02","code":"150400","parent_code":150000},{"title":"\u901a\u8fbd\u5e02","code":"150500","parent_code":150000},{"title":"\u9102\u5c14\u591a\u65af\u5e02","code":"150600","parent_code":150000},{"title":"\u547c\u4f26\u8d1d\u5c14\u5e02","code":"150700","parent_code":150000},{"title":"\u5df4\u5f66\u6dd6\u5c14\u5e02","code":"150800","parent_code":150000},{"title":"\u4e4c\u5170\u5bdf\u5e03\u5e02","code":"150900","parent_code":150000},{"title":"\u5174\u5b89\u76df","code":"152200","parent_code":150000},{"title":"\u9521\u6797\u90ed\u52d2\u76df","code":"152500","parent_code":150000},{"title":"\u963f\u62c9\u5584\u76df","code":"152900","parent_code":150000},{"title":"\u6c88\u9633\u5e02","code":"210100","parent_code":210000},{"title":"\u5927\u8fde\u5e02","code":"210200","parent_code":210000},{"title":"\u97Line truncated
|
||||
Reference in new issue
Block a user