初始化本地仓库
This commit is contained in:
@@ -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}
|
||||
],
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user