更新 'LuCodeAdminMix 框架使用说明文档'

master
鹿和sa0ChunLuyu 3 years ago
parent f078c1140f
commit 37527bdab5

@ -0,0 +1,296 @@
# 准备开发
## 开发环境
* 推荐本地安装 `composer``php 7.3+``pnpm`
* 本地必须安装 `node`
* 需要学会使用 `Laravel 8``Vue 3`
## 相关文档
* [Laravel 8 中文文档](https://learnku.com/docs/laravel/8.5)
* [IconPark](https://iconpark.oceanengine.com/official)
* 后台图标库
* [Naive UI](https://www.naiveui.com/zh-CN/os-theme/components/avatar)
* 后台 ui 组件库
* [Tailwind CSS](https://www.tailwindcss.cn/docs)
* 后台 css 框架
* [Vitesse Lite](https://github.com/antfu/vitesse-lite/blob/main/README.zh-CN.md)
* 后台是在这个模板基础上魔改的 js 版本
* 意味着它使用的黑魔法在后台都支持
* 基于文件的路由
* 组件自动化加载
* UnoCSS - 高性能且极具灵活性的即时原子化 CSS 引擎
## Nginx
* 目录请指向 `/public`
* 追加伪静态配置
```
location / {
try_files $uri $uri/ /index.php$is_args$query_string;
}
```
## 后台
* 代码仓库 [sa0ChunLuyu/LuCodeVueAdmin](https://gitee.com/sa0ChunLuyu/lu-code-vue-admin)
* `pnpm i`
* `pnpm dev`
* `pnpm build`
* `npm install -g pnpm`
# Mix后台
## 仓库
* Gitea代码仓库 [sa0ChunLuyu/LuCodeAdminMix](http://gitea.pi.sa0.online:3000/sa0ChunLuyu/LuCodeAdminMix)
* Gitee代码仓库 暂不对外开放
## 部署流程
* 通过模板创建仓库
* 创建本地测试环境
* 本地clone项目
* `mysql.server start`
* 创建数据库 `utf8mb4_general_ci`
* 创建`.env`文件,修改内容
* `composer install`
* `php artisan key:generate`
* `php artisan storage:link`
* `php artisan migrate`
* `php artisan serve`
* 部署服务器
* 服务器clone项目
* 部署宝塔,创建数据库
* 创建`.env`文件,修改内容
* `composer install`
* `chown www.www storage/ -R`
* `php artisan storage:link`
* `php artisan migrate`
* 部署后台
* 本地修改后台域名
* `pnpm build`
* `git push`
* 配置Git
* `vim .git/config`
```angular2html
[credential]
helper = store
```
# 常用命令行
* `php artisan make:model User -mc` 创建 控制器 + 数据库
* 生成数据库
* `php artisan migrate` 追加
* `php artisan migrate:fresh` 初始化
* `php artisan make:controller YoController` 创建控制器
# 常用代码段
## 接口
### Yo
#### return
```php
Yo::echo($data = []);
Yo::create_echo($id);
Yo::update_echo($id);
Yo::delete_echo($id);
// 输出
{
"code": 200,
"message": "增加成功",
"data": {
"id": 12
}
}
```
#### exit
```php
Yo::exit($data); // 会以 JSON 的形式输出 $data 的内容。
Yo::error_echo($code, $replace = []);
// code 在 /config/code.php 中配置
// $replace 为 ? 替换字符
// Yo::error_echo(100001, ['替换内容']);
// 在 code.php 中 100001 => '?固定内容',
// 输出
{
"code": 100001,
"message": "替换内容固定内容"
}
// Yo::error_echo(100002);
// 输出
{
"code": 100002,
"message": "错误信息"
}
```
### Lu
* `Lu::ssl()` 返回是不是 HTTPS
* `Lu::ip()` 返回用户 IP
* `Lu::ge($str)` 去掉字符串空格
* `Lu::fp($path)` 返回当前域名完整路径
* `Lu::date($time = false, $format = "Y-m-d H:i:s")` 返回格式化时间
* `Lu::time()` 返回毫秒时间戳
* `Lu::post($url, $data, $type = 'json')` 发送 POST 请求
### Login
* `Login::admin($auth_id = 0)` 检查权限,在数据库 `db.auths` 中配置,没有权限会直接退出
* `Login::admin_check($auth_id = 0)` 检查权限,没有权限会 `return`
### 增删改查
```php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\EditUserInput;
use App\Models\User;
use Login;
use Yo;
class WordBankController extends Controller
{
public function create(EditUserInput $request)
{
Login::admin(1);
$name = $request->post('name');
$order = $request->post('order');
$user = new User();
$user->name = $name;
$user->order = $order;
$user->save();
return Yo::create_echo($user->id);
}
public function delete()
{
Login::admin(11);
$id = request()->post('id');
User::where('id', $id)->delete();
return Yo::delete_echo($id);
}
public function update(EditWordBankInput $request)
{
Login::admin(11);
$id = request()->post('id');
$name = $request->post('name');
$order = $request->post('order');
$user = User::find($id);
if (!$user) Yo::error_echo(100021, ['用户']);
$user->name = $name;
$user->order = $order;
$user->save();
return Yo::update_echo($user->id);
}
public function list()
{
$user_list = User::orderBy('order', 'desc')->get();
return Yo::echo(['list' => $list]);
}
}
```
### Requests
```php
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Yo;
class EditUserInput 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,30'],
];
}
public function messages()
{
return [
'name.required' => 100001,
'name.between' => 100002,
];
}
public function failedValidation(Validator $validator)
{
Yo::error_echo($validator->errors()->first());
}
}
```
## 后台
* 新建页面 `b` 时需要创建 `a.vue``a/b.vue` 两个文件
### a.vue
```vue
<script setup></script>
<template>
<router-view></router-view>
</template>
<route>
{redirect: '/a/b',"meta":{"title":"多级菜单"}}
</route>
```
### a/b.vue
```vue
<script setup>
/**
* name
* usersa0ChunLuyu
* date2022年10月8日 16:56:44
*/
</script>
<template>
<div>
<n-card title="多级菜单">
<div></div>
</n-card>
</div>
</template>
<style scoped>
</style>
<route>
{"meta":{"title":"多级菜单"}}
</route>
```

@ -1 +0,0 @@
使用说明文档
Loading…
Cancel
Save