# Owl Admin Start
- Laravel 10.x
- slowlyo/owl-admin
- tucker-eric/eloquentfilter
## Helers
### 上传文件
- 上传文件保存的路径为 **相对路径**, 如果需要设置 **全路径**, 添加 `->receiver(admin_url('upload_image') . '?full-url=1')`
- 在模型中, 保存文件的字段需要加上 `StorageFile`, 详见: `app/Models/Keyword.php`
### sql日志
- `app/Providers/QueryLogServiceProvider.php`
- `storage/logs/sql.log`
### 无限级分类
- `app/Traits/TreePath.php`
| column | name | comment |
| - | - | - |
| parent_id | 上级id | 默认: 0 |
| path | 所有上级id | 默认: -, 例如: -1-2-3- |
| sort | 排序 | 正序 |
## 修改前端文件
### resources\admin-views\src\pages\amis\index.tsx
自定义登录页面, 删除高度 `20px` 的 `div`
```tsx
return (
<>
{(settings.footer && !initPage.loading) && }
>
)
```
### resources\admin-views\src\components\AmisRender\CustomComponents\components\WangEditor\index.tsx
WangEditor 编辑器上传图片时, 把登录授权的 `token` 带上
```tsx
// 编辑器配置
const editorConfig: Partial = {
placeholder: props.placeholder,
readOnly: props.disabled || props.static,
autoFocus: props.autoFocus,
maxLength: props.maxLength,
MENU_CONF: {
uploadImage: {
server: props.uploadImageServer,
maxFileSize: props.uploadImageMaxSize || (1024 * 1024 * 2),
maxNumberOfFiles: props.uploadImageMaxNumber || 100,
headers: {
Authorization: `Bearer ${token}`
}
},
uploadVideo: {
server: props.uploadVideoServer,
maxFileSize: props.uploadVideoMaxSize || (1024 * 1024 * 10),
maxNumberOfFiles: props.uploadVideoMaxNumber || 10,
}
}
}
```
### resources\admin-views\src\pages\login\form.tsx
自定义登录页面, 重复请求接口 `admin-api/captcha` 获取图形验证码
```tsx
// 读取 localStorage, 设置初始值
useEffect(() => {
const rememberPassword = !!loginParams
setRememberPassword(rememberPassword)
if (formRef.current && rememberPassword) {
const parseParams = JSON.parse(decodeURIComponent(window.atob(loginParams)))
formRef.current.setFieldsValue(parseParams)
}
// if (appSettings.login_captcha) {
// getCaptcha.run()
// }
}, [loginParams])
```