Browse Source

用户接口上传

master
wanghongjun 1 month ago
parent
commit
f085ce737b
  1. 37
      app/Http/Controllers/Admin/BaseController.php
  2. 3
      app/Http/Controllers/Admin/IndexController.php
  3. 74
      app/Http/Controllers/Admin/RolesController.php
  4. 70
      app/Http/Controllers/Admin/UserController.php
  5. 7
      app/Models/AdminRoleUsers.php
  6. 9
      app/Models/AdminRoles.php
  7. 4
      app/Models/AdminUsers.php
  8. 113
      app/Services/AdminUsersService.php
  9. 5
      app/Services/ApiResponseService.php
  10. 22
      app/Services/OperationLogService.php
  11. 3
      database/migrations/2026_01_27_084640_create_admin_table.php
  12. 3
      resources/lang/en/admin.php
  13. 5
      resources/lang/zh-CN/admin.php
  14. 3
      resources/lang/zh-TW/admin.php

37
app/Http/Controllers/Admin/BaseController.php

@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Exception;
class BaseController extends Controller
{
/**
* 验证ID
* @param int $id
* @param $model
* @return void
* @throws ValidationException|Exception
*/
protected function validateId(int $id, $model): void
{
$data = ['id' => $id];
$validator = Validator::make($data, [
'id' => 'required|numeric'
], [
'id.required' => __('validation.admin_role.id_empty'),
'id.numeric' => __('validation.admin_role.id_numeric')
]);
if ($validator->fails()) {
throw new ValidationException($validator);
}
if (!$model::query()->where('id', $id)->exists()) {
throw new Exception(__('exception.exception_handler.resource'));
};
}
}

3
app/Http/Controllers/Admin/IndexController.php

@ -2,7 +2,6 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Services\AdminMenuService; use App\Services\AdminMenuService;
use App\Services\ApiResponseService; use App\Services\ApiResponseService;
use Exception; use Exception;
@ -10,7 +9,7 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class IndexController extends Controller class IndexController extends BaseController
{ {
/** /**
* @var ApiResponseService * @var ApiResponseService

74
app/Http/Controllers/Admin/RolesController.php

@ -3,7 +3,6 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Exceptions\CustomException; use App\Exceptions\CustomException;
use App\Http\Controllers\Controller;
use App\Models\AdminRoleMenu; use App\Models\AdminRoleMenu;
use App\Models\AdminRoles; use App\Models\AdminRoles;
use App\Services\AdminMenuService; use App\Services\AdminMenuService;
@ -15,7 +14,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class RolesController extends Controller class RolesController extends BaseController
{ {
/** /**
* @var ApiResponseService * @var ApiResponseService
@ -134,10 +133,7 @@ class RolesController extends Controller
'remark.max' => __('validation.admin_role.r_max'), 'remark.max' => __('validation.admin_role.r_max'),
]; ];
if ($id) { if ($id) {
$data['id'] = $id; $this->validateId($id, AdminRoles::class);
$rules['id'] = 'required|numeric';
$messages['id.required'] = __('validation.admin_role.id_empty');
$messages['id.numeric'] = __('validation.admin_role.id_numeric');
} }
$validator = Validator::make($data, $rules, $messages); $validator = Validator::make($data, $rules, $messages);
@ -152,45 +148,16 @@ class RolesController extends Controller
*/ */
public function show(string $id): JsonResponse public function show(string $id): JsonResponse
{ {
try { return $this->extracted($id);
$data = [
'menu_list' => (new AdminMenuService())->getMenuTreeCacheList(
AdminRoleMenu::getMenuIdArr($id)
),
'item' => AdminRoles::query()
->where('id', $id)
->get()
->toArray()
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
);
}
} }
/** /**
* Show the form for editing the specified resource. * @param string $id
* @return JsonResponse
*/ */
public function edit(string $id): JsonResponse public function edit(string $id): JsonResponse
{ {
try { return $this->extracted($id);
$data = [
'menu_list' => (new AdminMenuService())->getMenuTreeCacheList(
AdminRoleMenu::getMenuIdArr($id)
),
'item' => AdminRoles::query()
->where('id', $id)
->get()
->toArray()
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
);
}
} }
/** /**
@ -204,9 +171,7 @@ class RolesController extends Controller
{ {
try { try {
$this->saveValidator($request->all(), $id); $this->saveValidator($request->all(), $id);
$this->AdminRolesService->updateModel($request->all(), $id); $this->AdminRolesService->updateModel($request->all(), $id);
return $this->responseService->success( return $this->responseService->success(
null, null,
__('admin.update_succeeded') __('admin.update_succeeded')
@ -229,8 +194,8 @@ class RolesController extends Controller
public function destroy(string $id): JsonResponse public function destroy(string $id): JsonResponse
{ {
try { try {
$this->validateId($id, AdminRoles::class);
$this->AdminRolesService->deleteModel($id); $this->AdminRolesService->deleteModel($id);
return $this->responseService->success( return $this->responseService->success(
null, null,
__('admin.delete_succeeded') __('admin.delete_succeeded')
@ -243,4 +208,29 @@ class RolesController extends Controller
); );
} }
} }
/**
* @param string $id
* @return JsonResponse
*/
protected function extracted(string $id): JsonResponse
{
try {
$this->validateId($id, AdminRoles::class);
$data = [
'menu_list' => (new AdminMenuService())->getMenuTreeCacheList(
AdminRoleMenu::getMenuIdArr($id)
),
'item' => AdminRoles::query()
->where('id', $id)
->get()
->toArray()
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
);
}
}
} }

70
app/Http/Controllers/Admin/UserController.php

@ -3,7 +3,6 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Exceptions\CustomException; use App\Exceptions\CustomException;
use App\Http\Controllers\Controller;
use App\Models\AdminRoles; use App\Models\AdminRoles;
use App\Models\AdminUsers; use App\Models\AdminUsers;
use App\Services\ApiResponseService; use App\Services\ApiResponseService;
@ -14,7 +13,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class UserController extends Controller class UserController extends BaseController
{ {
/** /**
* @var ApiResponseService * @var ApiResponseService
@ -59,11 +58,7 @@ class UserController extends Controller
$total = $query->count(); $total = $query->count();
$items = $query->latest()->forPage($page, $perPage)->get()->each( $items = $query->latest()->forPage($page, $perPage)->get()->each(
function ($item) { function ($item) {
$item['status_str'] = $item['status'] ? __('admin.normal') return $this->AdminUserModelService->optionItem($item);
: __('admin.freeze');
$item['role_name'] = $item->roles->value('name');
unset($item['roles']);
return $item;
} }
); );
@ -89,9 +84,8 @@ class UserController extends Controller
{ {
try { try {
$data = [ $data = [
'roles_list' => [], 'roles_list' => AdminRoles::getRolesList(),
'permissions_list' => [], 'packing_list' => $this->getPackingList()
'packing_list' => []
]; ];
return $this->responseService->success($data); return $this->responseService->success($data);
} catch (Exception $e) { } catch (Exception $e) {
@ -101,6 +95,21 @@ class UserController extends Controller
} }
} }
protected function getPackingList(): array
{
return [
[
'id' => 1,
'name' => '停车场1'
],
[
'id' => 2,
'name' => '停车场1'
]
];
}
/** /**
* @param Request $request * @param Request $request
* @return JsonResponse * @return JsonResponse
@ -111,10 +120,11 @@ class UserController extends Controller
{ {
try { try {
$this->saveValidator($request->all()); $this->saveValidator($request->all());
$this->AdminUserModelService->createModel($request->all());
$model = $this->AdminUserModelService->createModel($request->all()); return $this->responseService->success(
null,
return $this->responseService->success($model, '创建用户成功'); __('admin.save_succeeded')
);
} catch (ValidationException|CustomException $e) { } catch (ValidationException|CustomException $e) {
throw $e; throw $e;
} catch (Exception $e) { } catch (Exception $e) {
@ -138,6 +148,7 @@ class UserController extends Controller
'role_id' => 'required|numeric', 'role_id' => 'required|numeric',
'packing_id' => 'required|numeric', 'packing_id' => 'required|numeric',
'password' => 'required|between:12,30', 'password' => 'required|between:12,30',
'email' => 'email'
]; ];
$messages = [ $messages = [
'username.required' => __('validation.admin_user.l_a_empty'), 'username.required' => __('validation.admin_user.l_a_empty'),
@ -147,12 +158,13 @@ class UserController extends Controller
'packing_id.required' => __('validation.admin_user.s_p_empty'), 'packing_id.required' => __('validation.admin_user.s_p_empty'),
'password.required' => __('validation.admin_user.p_empty'), 'password.required' => __('validation.admin_user.p_empty'),
'password.between' => __('validation.admin_user.p_between'), 'password.between' => __('validation.admin_user.p_between'),
'email.email' => __('validation.admin_user.email'),
]; ];
if ($id) { if ($id) {
$data['id'] = $id; $this->validateId($id, AdminUsers::class);
$rules['id'] = 'required|numeric'; $rules['status'] = 'required|in:0,1';
$messages['id.required'] = __('validation.admin_user.id_empty'); $messages['status.required'] = __('validation.admin_user.s_empty');
$messages['id.numeric'] = __('validation.admin_user.id_numeric'); $messages['status.in'] = __('validation.admin_user.s_in');
} }
$validator = Validator::make($data, $rules, $messages); $validator = Validator::make($data, $rules, $messages);
@ -167,8 +179,10 @@ class UserController extends Controller
public function show(string $id): JsonResponse public function show(string $id): JsonResponse
{ {
try { try {
$this->validateId($id, AdminUsers::class);
$model = AdminUsers::findOrFail($id); $model = AdminUsers::findOrFail($id);
return $this->responseService->success($model); $item = $this->AdminUserModelService->optionItem($model);
return $this->responseService->success($item);
} catch (Exception $e) { } catch (Exception $e) {
return $this->responseService->systemError( return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage() __('exception.get_data_failed') . ':' . $e->getMessage()
@ -182,12 +196,12 @@ class UserController extends Controller
public function edit(string $id): JsonResponse public function edit(string $id): JsonResponse
{ {
try { try {
$item = AdminUsers::findOrFail($id);
$item = $this->AdminUserModelService->optionItem($item, 1);
$data = [ $data = [
'item' => AdminUsers::query() 'item' => $item,
->where('id', $id) 'role_list' => AdminRoles::getRolesList(),
->get() 'packing_list' => $this->getPackingList()
->toArray(),
'roles' => AdminRoles::getRolesList()
]; ];
return $this->responseService->success($data); return $this->responseService->success($data);
} catch (Exception $e) { } catch (Exception $e) {
@ -213,7 +227,7 @@ class UserController extends Controller
return $this->responseService->success( return $this->responseService->success(
null, null,
__('controller.rule.update_success') __('admin.update_succeeded')
); );
} catch (ValidationException|CustomException $e) { } catch (ValidationException|CustomException $e) {
throw $e; throw $e;
@ -234,8 +248,10 @@ class UserController extends Controller
{ {
try { try {
$this->AdminUserModelService->deleteModel($id); $this->AdminUserModelService->deleteModel($id);
return $this->responseService->success(
return $this->responseService->success(null, '删除数据模型成功'); null,
__('admin.delete_succeeded')
);
} catch (CustomException $e) { } catch (CustomException $e) {
throw $e; throw $e;
} catch (Exception $e) { } catch (Exception $e) {

7
app/Models/AdminRoleUsers.php

@ -9,4 +9,11 @@ use Illuminate\Database\Eloquent\Model;
class AdminRoleUsers extends Model class AdminRoleUsers extends Model
{ {
use HasFactory; use HasFactory;
protected $table = 'admin_role_users';
protected $fillable = [
'role_id',
'user_id'
];
} }

9
app/Models/AdminRoles.php

@ -20,8 +20,7 @@ class AdminRoles extends Model
*/ */
protected $fillable protected $fillable
= [ = [
'name', 'name'
'slug'
]; ];
/** /**
@ -31,13 +30,15 @@ class AdminRoles extends Model
protected $hidden protected $hidden
= [ = [
'updated_at', 'updated_at',
'deleted_at' 'deleted_at',
]; ];
public static function getRolesList(): array public static function getRolesList(): array
{ {
$where = ['status' => 1]; $where = ['status' => 1];
return self::query()->where($where)->select()->get()->toArray(); $columns = ['id', 'name'];
return self::query()->where($where)->select($columns)->get()
->toArray();
} }
public function adminUsers(): BelongsToMany public function adminUsers(): BelongsToMany

4
app/Models/AdminUsers.php

@ -22,6 +22,9 @@ class AdminUsers extends Model
'username', 'username',
'name', 'name',
'password', 'password',
'position',
'status',
'avatar'
]; ];
/** /**
@ -32,6 +35,7 @@ class AdminUsers extends Model
= [ = [
'password', 'password',
'remember_token', 'remember_token',
'locale',
'deleted_at', 'deleted_at',
'updated_at' 'updated_at'
]; ];

113
app/Services/AdminUsersService.php

@ -5,6 +5,8 @@ namespace App\Services;
use App\Models\AdminRoleUsers; use App\Models\AdminRoleUsers;
use App\Models\AdminUsers; use App\Models\AdminUsers;
use Exception; use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
@ -26,38 +28,46 @@ final class AdminUsersService
} }
/** /**
* @param array $data
* @return Builder|Model
* @throws Exception * @throws Exception
*/ */
public function createModel(array $data): AdminUsers public function createModel(array $data): Builder|Model
{ {
try { try {
DB::beginTransaction(); DB::beginTransaction();
$model = AdminUsers::create([ if (AdminUsers::query()->where('username', $data['username'])
->exists()
) {
throw new Exception(__('service.admin_user.name_exists'));
}
$model = AdminUsers::query()->create([
'username' => $data['username'], 'username' => $data['username'],
'password' => Hash::make($data['password']), 'password' => Hash::make($data['password']),
'name' => $data['name'], 'name' => $data['name'],
'avatar' => '', 'avatar' => '',
'email' => $data['email'], 'email' => $data['email'] ?? '',
'position' => $data['position'] ?? '',
'status' => 1, 'status' => 1,
'created_at' => get_datetime() 'created_at' => get_datetime()
]); ]);
$user_id = $model->id; $user_id = $model->id;
$this->logService->logCreated($model, '创建用户');
// 角色id // 角色id
$role_id = $data['role_id']; $AdminRoleUsers = AdminRoleUsers::query()->create([
$AdminRoleUsers = AdminRoleUsers::create([ 'role_id' => $data['role_id'],
'user_id' => $user_id, 'user_id' => $user_id,
'role_id' => $role_id 'created_at' => get_datetime()
]); ]);
// 职位id
$permission_id = $data['permission_id'];
//
$packing_id = $data['packing'];
$this->logService->logCreated($model, '创建用户');
$this->logService->logCreated($AdminRoleUsers, '创建用户关联角色'); $this->logService->logCreated($AdminRoleUsers, '创建用户关联角色');
// 停车场id
$packing_id = $data['packing_id'];
DB::commit();
return $model; return $model;
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
@ -76,37 +86,50 @@ final class AdminUsersService
try { try {
DB::beginTransaction(); DB::beginTransaction();
if (AdminUsers::query()->where('username', $data['username'])->exists()) { $existsWhere = [
throw new Exception(__('service.admin_role.role_exists')); ['username', '=', $data['username']],
['id', '<>', $id]
];
if (AdminUsers::query()->where($existsWhere)->exists()) {
throw new Exception(__('service.admin_user.name_exists'));
} }
$model = AdminUsers::findOrFail($id); $model = AdminUsers::findOrFail($id);
$oldValue = $model->toArray();
$model->update([ $model->update([
'username' => $data['username'], 'username' => $data['username'],
'password' => Hash::make($data['password']), 'password' => Hash::make($data['password']),
'name' => $data['name'], 'name' => $data['name'],
'avatar' => '', 'avatar' => '',
'email' => $data['email'], 'email' => $data['email'] ?? '',
'position' => $data['position'] ?? '',
'status' => $data['status'], 'status' => $data['status'],
'created_at' => get_datetime() 'created_at' => get_datetime()
]); ]);
// 角色id // 角色id
$role_id = $data['role_id']; $role_id = $data['role_id'];
$DelAdminRoleUsers = AdminRoleUsers::where('user_id', $id)->select(); $oldAdminRoleUsers = AdminRoleUsers::query()->where('user_id', $id)
$DelAdminRoleUsers->delete(); ->get()->toArray();
$AddAdminRoleUsers = AdminRoleUsers::create([ $updateData = [
'user_id' => $id, 'role_id' => $role_id,
'role_id' => $role_id 'updated_at' => get_datetime()
]); ];
// 职位id AdminRoleUsers::query()->where('user_id', $id)->update($updateData);
$permission_id = $data['permission_id']; $newAdminRoleUsers = $oldAdminRoleUsers;
$newAdminRoleUsers['role_id'] = $role_id;
$newAdminRoleUsers['updated_at'] = $updateData['updated_at'];
$this->logService->logUpdatedData(
new AdminRoleUsers(),
$oldAdminRoleUsers,
'更新用户关联角色',
$newAdminRoleUsers
);
// //
$packing_id = $data['packing']; $packing_id = $data['packing_id'];
$this->logService->logUpdated($model, $oldValue, '更新用户');
$this->logService->logCreated($model, '创建用户'); DB::commit();
$this->logService->logDeleted($DelAdminRoleUsers, '删除用户关联角色');
$this->logService->logCreated($AddAdminRoleUsers, '创建用户关联角色');
return $model; return $model;
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
@ -130,11 +153,16 @@ final class AdminUsersService
$model->delete(); $model->delete();
$oldAdminRoleUser = AdminRoleUsers::where(['user_id' => $id])->select(); // 删除用户关联角色
$oldAdminRoleUser = AdminRoleUsers::query()->where(
$this->logService->logDeleted($oldAdminRoleUser, '删除用户关联角色'); ['user_id' => $id]
)->select()->get()->toArray();
$oldAdminRoleUser->delete(); AdminRoleUsers::query()->where(['user_id' => $id])->delete();
$this->logService->logDeletedData(
new AdminRoleUsers(),
'删除用户关联角色',
$oldAdminRoleUser
);
DB::commit(); DB::commit();
return true; return true;
@ -143,4 +171,23 @@ final class AdminUsersService
throw $e; throw $e;
} }
} }
/**
* @param $item
* @param int $is_edit
* @return mixed
*/
public function optionItem($item, int $is_edit = 0): mixed
{
$item['status_str'] = $item['status'] ? __('admin.normal')
: __('admin.freeze');
$item['role_name'] = $item->roles->value('name');
$item['packing_name'] = '';
if ($is_edit) {
$item['role_id'] = $item['roles'][0]['id'];
$item['packing_id'] = '';
}
unset($item['roles']);
return $item;
}
} }

5
app/Services/ApiResponseService.php

@ -8,13 +8,12 @@ final class ApiResponseService
{ {
/** /**
* 成功响应 * 成功响应
* * @param mixed|null $data
* @param mixed $data
* @param string $message * @param string $message
* @param int $statusCode * @param int $statusCode
* @return JsonResponse * @return JsonResponse
*/ */
public function success($data = null, string $message = '', int $statusCode = 200): JsonResponse public function success(mixed $data = null, string $message = '', int $statusCode = 200): JsonResponse
{ {
return response()->json([ return response()->json([
'error' => 0, 'error' => 0,

22
app/Services/OperationLogService.php

@ -105,6 +105,26 @@ final class OperationLogService
); );
} }
/**
* 记录数据更新操作
*
* @param Model $model 关联模型
* @param array $oldValues 旧值
* @param string $description 操作描述
* @param array $data 数据
* @return AdminOperationLog
*/
public function logUpdatedData(Model $model, array $oldValues, string $description = '更新记录', array $data = []): AdminOperationLog
{
return $this->log(
'update',
$description,
$model,
$oldValues,
$data
);
}
/** /**
* 记录删除操作 * 记录删除操作
* *
@ -124,7 +144,7 @@ final class OperationLogService
} }
/** /**
* 记录删除操作 * 记录数据删除操作
* *
* @param Model $model 关联模型 * @param Model $model 关联模型
* @param string $description 操作描述 * @param string $description 操作描述

3
database/migrations/2026_01_27_084640_create_admin_table.php

@ -17,10 +17,11 @@ return new class extends Migration
$table->string('password', 60)->comment('密码'); $table->string('password', 60)->comment('密码');
$table->string('name')->comment('姓名'); $table->string('name')->comment('姓名');
$table->string('avatar')->nullable()->comment('头像'); $table->string('avatar')->nullable()->comment('头像');
$table->string('email')->comment('电子邮箱'); $table->string('email')->nullable()->comment('电子邮箱');
$table->string('remember_token', 100)->nullable()->comment('记住令牌'); $table->string('remember_token', 100)->nullable()->comment('记住令牌');
$table->tinyInteger('status')->default(1)->comment('状态 0冻结 1正常'); $table->tinyInteger('status')->default(1)->comment('状态 0冻结 1正常');
$table->string('locale', 10)->nullable()->comment('语言'); $table->string('locale', 10)->nullable()->comment('语言');
$table->string('position')->nullable()->comment('职位');
$table->softDeletes(); $table->softDeletes();
$table->timestamps(); $table->timestamps();
$table->innoDb(); $table->innoDb();

3
resources/lang/en/admin.php

@ -54,6 +54,7 @@ return [
'save_succeeded' => 'Save succeeded !', 'save_succeeded' => 'Save succeeded !',
'refresh_succeeded' => 'Refresh succeeded !', 'refresh_succeeded' => 'Refresh succeeded !',
'login_successful' => 'Login successful', 'login_successful' => 'Login successful',
'logout_successful' => 'Logout successful',
'choose' => 'Choose', 'choose' => 'Choose',
'choose_file' => 'Select file', 'choose_file' => 'Select file',
'choose_image' => 'Select image', 'choose_image' => 'Select image',
@ -104,4 +105,6 @@ return [
'prev' => 'Prev', 'prev' => 'Prev',
'next' => 'Next', 'next' => 'Next',
'quick_create' => 'Quick create', 'quick_create' => 'Quick create',
'freeze' => 'freeze',
'normal' => 'normal'
]; ];

5
resources/lang/zh-CN/admin.php

@ -54,6 +54,7 @@ return [
'save_succeeded' => '保存成功 !', 'save_succeeded' => '保存成功 !',
'refresh_succeeded' => '刷新成功 !', 'refresh_succeeded' => '刷新成功 !',
'login_successful' => '登录成功 !', 'login_successful' => '登录成功 !',
'logout_successful' => '登出成功 !',
'choose' => '选择', 'choose' => '选择',
'choose_file' => '选择文件', 'choose_file' => '选择文件',
'choose_image' => '选择图片', 'choose_image' => '选择图片',
@ -102,5 +103,7 @@ return [
'menu_titles' => [], 'menu_titles' => [],
'prev' => '上一步', 'prev' => '上一步',
'next' => '下一步', 'next' => '下一步',
'quick_create' => '快速创建' 'quick_create' => '快速创建',
'freeze' => '冻结',
'normal' => '正常'
]; ];

3
resources/lang/zh-TW/admin.php

@ -54,6 +54,7 @@ return [
'save_succeeded' => '儲存成功!', 'save_succeeded' => '儲存成功!',
'refresh_succeeded' => '成功重新整理!', 'refresh_succeeded' => '成功重新整理!',
'login_successful' => '成功登入!', 'login_successful' => '成功登入!',
'logout_successful' => '成功登出!',
'choose' => '選擇', 'choose' => '選擇',
'choose_file' => '選擇檔案', 'choose_file' => '選擇檔案',
'choose_image' => '選擇圖片', 'choose_image' => '選擇圖片',
@ -102,4 +103,6 @@ return [
'prev' => '上一步', 'prev' => '上一步',
'next' => '下一步', 'next' => '下一步',
'quick_create' => '快速創建', 'quick_create' => '快速創建',
'freeze' => '凍結',
'normal' => '正常'
]; ];

Loading…
Cancel
Save