初始化本地仓库

This commit is contained in:
2026-08-31 11:33:59 +08:00
commit 663f74b633
2390 changed files with 402918 additions and 0 deletions
@@ -0,0 +1,10 @@
import BaseService from '@/api/core/base';
import type {{row_type_name}} from './types';
const baseUrl = '{base_url}';
export const {class_name}Service = {
...BaseService<{row_type_name}>({ baseUrl }),
};
export default {class_name}Service;
@@ -0,0 +1,3 @@
export interface {row_type_name} {
{fields}
}
@@ -0,0 +1,34 @@
{
"{module_name}": {
"common": {
"columns": {
"index": "序号"
}
},
"modules": {
"{dummy_class_name}": {
"title": "{class_name_comment}",
"search": {
"keywords": "关键字",
"keywords_placeholder": "请输入{class_name_comment}关键字"
},
"form": {
"create": "新增{class_name_comment}",
"edit": "编辑{class_name_comment}",
"view": "查看{class_name_comment}"
},
"messages": {
"create_success": "{class_name_comment}创建成功",
"create_fail": "{class_name_comment}创建失败",
"update_success": "{class_name_comment}更新成功",
"update_fail": "{class_name_comment}更新失败",
"delete_success": "{class_name_comment}删除成功",
"delete_fail": "{class_name_comment}删除失败"
},
"columns": {
{fields}
}
}
}
}
}
@@ -0,0 +1,26 @@
<template>
<div class="{kebab_module_name}-{kebab_class_name}-page art-full-height">
<BasicCrud />
</div>
</template>
<script setup lang="tsx">
import { useCrud } from '@/components/crud'
import { crudSchema } from './schemas'
defineOptions({ name: '{class_name}List' })
const [BasicCrud] = useCrud({
...crudSchema(),
toolbarActions: [],
dropDownToolbarActions: [],
tableActions: [],
dropDownActions: [],
})
</script>
<style scoped>
.{kebab_module_name}-{kebab_class_name}-page {
height: 100%;
}
</style>
@@ -0,0 +1,56 @@
import { CrudSchema } from '@/components/crud'
import { {service_name} } from '{api_import_path}'
import { $t } from '@/locales'
// crud配置
export const crudSchema = (): CrudSchema => {
return {
api: {service_name}.list,
dialogTitle: $t('{lang_key}.title'),
exportFileName: $t('{lang_key}.title'),
crudApi: {
add: {service_name}.create,
edit: {service_name}.update,
remove: {service_name}.remove,
view: {service_name}.get
},
useCrud: {use_crud},
hasAdd: {has_add},
hasRemove: {has_remove},
hasEdit: {has_edit},
hasView: {has_view},
addAuth: '{module_name}:{dummy_class_name}:create',
removeAuth: '{module_name}:{dummy_class_name}:delete',
editAuth: '{module_name}:{dummy_class_name}:update',
viewAuth: '{module_name}:{dummy_class_name}:read',
rowKey: 'id',
useSearchForm: true,
columns: [
{
type: 'selection'
},
{table_columns}
],
searchFormSchema: {
schema: [
{search_form_schema}
]
},
dialogProps: {
width: '{dialog_width}',
{dialog_type}
},
formSchema: {
showDefaultActions: false,
labelWidth: '100px',
schema: [
{form_schema}
]
}
}
}
@@ -0,0 +1,228 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use app\adminapi\controller\Crud;
use app\schema\request\BatchDeleteRequest;
use {schema_request_namespace}\{class_name}FormRequest as {class_name}FormRequest;
use {schema_request_namespace}\{class_name}QueryRequest as {class_name}QueryRequest;
use app\adminapi\middleware\AccessTokenMiddleware;
use app\adminapi\middleware\OperationMiddleware;
use app\adminapi\middleware\PermissionMiddleware;
use {validate_namespace}\{class_name}Validate as {class_name}Validate;
use {schema_response_namespace}\{class_name}Response as {class_name}Response;
use app\schema\request\IdRequest;
use {service_namespace}\{class_name}Service as {class_name}Service;
use core\exception\handler\AdminException;
use core\tool\Json;
use madong\swagger\annotation\response\DataResponse;
use madong\swagger\annotation\response\PageResponse;
use madong\swagger\annotation\response\SimpleResponse;
use madong\swagger\attribute\Permission;
use OpenApi\Attributes as OA;
use support\Request;
use support\annotation\Middleware;
use WebmanTech\Swagger\DTO\SchemaConstants;
#[OA\Info(version: '1.0.0', title: 'My App')]
#[OA\Server(url: '/adminapi', description: 'localhost')]
#[Middleware(AccessTokenMiddleware::class, PermissionMiddleware::class, OperationMiddleware::class)]
final class {class_name}Controller extends Crud
{
public function __construct({class_name}Service $service, {class_name}Validate $validate)
{
$this->service = $service;
$this->validate = $validate;
}
#[OA\Get(
path: '/{package_name_dash}/{class_name_dash}',
summary: '列表',
tags: ['{class_name}'],
x: [
SchemaConstants::X_SCHEMA_REQUEST => {class_name}QueryRequest::class,
]
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:list')]
#[PageResponse(schema:{class_name}Response::class,example:[])]
public function index(Request $request): \support\Response
{
return parent::index($request);
}
#[OA\Get(
path: '/{package_name_dash}/{class_name_dash}/{id}',
summary: '详情',
tags: ['{class_name}'],
x: [
SchemaConstants::X_PROPERTY_IN => 'id',
SchemaConstants::X_SCHEMA_REQUEST => IdRequest::class,
]
)]
#[OA\Parameter(
name: 'id',
description: '{class_name}ID',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string', example: 1)
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:read')]
#[DataResponse(schema: {class_name}Response::class,example:[])]
public function show(Request $request): \support\Response
{
try {
$id = $request->route->param('id');
$data = $this->service->get($id);
if (empty($data)) {
throw new AdminException('数据未找到', 400);
}
$dataArray = $data->toArray();
return Json::success('ok', $dataArray);
} catch (\Throwable $e) {
return Json::fail($e->getMessage(), [], $e->getCode());
}
}
#[OA\Post(
path: '/{package_name_dash}/{class_name_dash}',
summary: '添加',
tags: ['{class_name}'],
x: [
SchemaConstants::X_SCHEMA_REQUEST => {class_name}FormRequest::class,
]
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:create')]
#[SimpleResponse(schema: [], example: [])]
public function store(Request $request): \support\Response
{
try {
$data = $request->all();
if (isset($this->validate) && $this->validate) {
if (!$this->validate->scene('store')->check($data)) {
throw new \Exception($this->validate->getError());
}
}
$model = $this->service->save($data);
if (empty($model)) {
throw new AdminException('插入失败');
}
$pk = $model->getPk();
return Json::success('ok', [$pk => $model->getData($pk)]);
} catch (\Throwable $e) {
return Json::fail($e->getMessage());
}
}
#[OA\Put(
path: '/{package_name_dash}/{class_name_dash}/{id}',
summary: '更新',
tags: ['{class_name}'],
x: [
SchemaConstants::X_SCHEMA_REQUEST => {class_name}FormRequest::class,
]
)]
#[OA\Parameter(
name: 'id',
description: '{class_name}ID',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string', example: 1)
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:update')]
#[SimpleResponse(schema: [], example: [])]
public function update(Request $request): \support\Response
{
try {
$id = $request->route->param('id');
$data = $request->all();
if (isset($this->validate) && $this->validate) {
if (!$this->validate->scene('update')->check($data)) {
throw new \Exception($this->validate->getError());
}
}
$this->service->update($id, $data);
return Json::success('ok', []);
} catch (\Throwable $e) {
return Json::fail($e->getMessage());
}
}
#[OA\Post(
path: '/{package_name_dash}/{class_name_dash}/export',
summary: '导出',
tags: ['{class_name}']
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:list')]
#[SimpleResponse(schema: [], example: [])]
public function export(Request $request): \support\Response
{
return parent::export($request);
}
#[OA\Delete(
path: '/{package_name_dash}/{class_name_dash}/{id}',
summary: '删除',
tags: ['{class_name}'],
)]
#[OA\Parameter(
name: 'id',
description: '{class_name}ID',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string', example: 1)
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:delete')]
#[SimpleResponse(schema: [], example: [])]
public function destroy(Request $request): \support\Response
{
try {
$id = $request->route->param('id');
$data = $request->input('data', []);
$data = !empty($id) && $id !== '0' ? $id : $data;
if (empty($data)) {
throw new AdminException('参数错误');
}
$this->service->destroy($data);
return Json::success('操作成功');
} catch (\Exception $e) {
return Json::fail($e->getMessage(), [], $e->getCode());
}
}
#[OA\Delete(
path: '/{package_name_dash}/{class_name_dash}',
summary: '批量删除',
tags: ['{class_name}'],
x: [
SchemaConstants::X_SCHEMA_REQUEST => BatchDeleteRequest::class,
]
)]
#[Permission(code: '{package_name_lower}:{class_name_lower}:delete')]
#[SimpleResponse(schema: [], example: [])]
public function batchDelete(Request $request): \support\Response
{
try {
$data = $request->input('ids', []);
if (empty($data)) {
throw new AdminException('参数错误');
}
$this->service->destroy($data);
return Json::success('操作成功');
} catch (\Exception $e) {
return Json::fail($e->getMessage(), [], $e->getCode());
}
}
}
@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use {model_namespace}\{class_name};
use core\base\BaseDao;
/**
* {class_name}数据访问层
*
* @author Mr.April
* @since 1.0
*/
class {class_name}Dao extends BaseDao
{
protected function setModel(): string
{
return {class_name}::class;
}
protected function getKeywordFields(): array
{
return [];
}
}
@@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use core\base\BaseModel;
{soft_delete_use}
/**
* {class_name}模型
*
* @author Mr.April
* @since 1.0
*/
class {class_name} extends BaseModel
{
{soft_delete_trait}
protected $table = '{table_name}';
/**
* 指示是否自动维护时间戳
*
* @var bool
*/
public $timestamps = true;
{soft_delete}
protected $appends = ['created_date', 'updated_date'];
protected $fillable = [
{fillable_fields}
];
{searchers}
{relations}
}
@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use OpenApi\Attributes as OA;
use app\schema\request\BaseFormRequest;
use WebmanTech\DTO\Attributes\ValidationRules;
#[OA\Schema(
title: '{class_name}表单',
description: '{class_name}创建和编辑接口共用的表单请求参数'
)]
class {class_name}FormRequest extends BaseFormRequest
{
{fields}
}
@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use OpenApi\Attributes as OA;
use app\schema\request\BaseQueryRequest;
use WebmanTech\DTO\Attributes\ValidationRules;
#[OA\Schema(
title: '{class_name}查询',
description: '{class_name}列表查询接口的请求参数'
)]
class {class_name}QueryRequest extends BaseQueryRequest
{
{fields}
}
@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use OpenApi\Attributes as OA;
use madong\swagger\schema\BaseResponseDTO;
#[OA\Schema(
title: '{class_name}详情响应模型',
description: '{class_name}详情接口的返回数据结构'
)]
class {class_name}Response extends BaseResponseDTO
{
{fields}
}
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use {dao_namespace}\{class_name}Dao;
use core\base\BaseService;
/**
* {class_name}服务层
*
* @author Mr.April
* @since 1.0
*/
class {class_name}Service extends BaseService
{
public function __construct({class_name}Dao $dao)
{
$this->dao = $dao;
}
}
@@ -0,0 +1,60 @@
<?php
declare(strict_types=1);
/**
*+------------------
* madong
*+------------------
* Copyright (c) https://gitee.com/motion-code All rights reserved.
*+------------------
* Author: Mr. April (405784684@qq.com)
*+------------------
* Official Website: https://madong.tech
*/
namespace {namespace};
use core\base\BaseValidate;
/**
* {class_name}验证器
*
* @author Mr.April
* @since 1.0
*/
class {class_name}Validate extends BaseValidate
{
/**
* 验证规则
*
* @return array
*/
public function rules(): array
{
return [
{rules}
];
}
/**
* 错误信息
*
* @var array
*/
protected array $message = [
{messages}
];
/**
* 场景
*
* @var array
*/
protected array $scene = [
'store' => [
{store_fields}
],
'update' => [
{update_fields}
],
];
}