You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
shipin/crmeb/services/crud/ViewApi.php

181 lines
4.5 KiB

<?php
/**
* +----------------------------------------------------------------------
* | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
* +----------------------------------------------------------------------
* | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
* +----------------------------------------------------------------------
* | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
* +----------------------------------------------------------------------
* | Author: CRMEB Team <admin@crmeb.com>
* +----------------------------------------------------------------------
*/
namespace crmeb\services\crud;
use crmeb\exceptions\CrudException;
use crmeb\services\crud\enum\ActionEnum;
use think\App;
use think\helper\Str;
/**
* Class ViewApi
* @author 等风来
* @email 136327134@qq.com
* @date 2023/4/1
* @package crmeb\services\crud
*/
class ViewApi extends Make
{
/**
* @var string
*/
protected $name = 'api';
/**
* @var string
*/
protected $fileMime = 'js';
/**
* ViewApi constructor.
* @param App $app
*/
public function __construct(App $app)
{
parent::__construct($app);
$this->basePath = $this->adminTemplatePath;
}
/**
* @return string
* @author 等风来
* @email 136327134@qq.com
* @date 2023/4/4
*/
protected function setBaseDir(): string
{
return 'api' . DS . 'crud';
}
/**
* @param string $name
* @param array $options
* @return ViewApi
* @author 等风来
* @email 136327134@qq.com
* @date 2023/4/4
*/
public function handle(string $name, array $options = [])
{
$path = $options['path'] ?? '';
$route = $options['route'] ?? '';
if (!$route) {
throw new CrudException(500045);
}
return $this->setJsContent($name, $route)
->setApi($name, $path);
}
/**
* 设置页面JS内容
* @param string $name
* @param string $route
* @return $this
* @author 等风来
* @email 136327134@qq.com
* @date 2023/8/12
*/
protected function setJsContent(string $name, string $route)
{
$contentJs = '';
foreach (ActionEnum::ACTION_ALL as $item) {
$contentJs .= file_get_contents($this->getStub($item)) . "\n";
}
$var = [
'{%ROUTE%}',
'{%NAME_CAMEL%}',
'{%NAME_STUDLY%}',
];
$value = [
$route,
Str::camel($name),
Str::studly($name),
];
$contentJs = str_replace($var, $value, $contentJs);
$this->value['CONTENT_JS'] = $contentJs;
return $this;
}
/**
* 设置页面api内容
* @param string $name
* @param string $path
* @return $this
* @author 等风来
* @email 136327134@qq.com
* @date 2023/8/12
*/
protected function setApi(string $name, string $path)
{
//生成api
[, $content] = $this->getStubContent($name, $this->name);
$contentStr = str_replace($this->var, $this->value, $content);
$filePath = $this->getFilePathName($path, Str::camel($name));
$this->setPathname($filePath);
$this->setContent($contentStr);
return $this;
}
/**
* @param string $path
* @param string $name
* @return string
* @author 等风来
* @email 136327134@qq.com
* @date 2023/4/4
*/
protected function getFilePathName(string $path, string $name): string
{
$path = ltrim(str_replace('\\', '/', $path), '/');
return $this->getBasePath($path) . $name . '.' . $this->fileMime;
}
/**
* 模板文件配置
* @param string $type
* @return mixed
*/
protected function getStub(string $type = 'api')
{
$servicePath = __DIR__ . DS . 'stubs' . DS . 'view' . DS . 'api' . DS;
$stubs = [
'index' => $servicePath . 'getCrudListApi.stub',
'create' => $servicePath . 'getCrudCreateApi.stub',
'save' => $servicePath . 'crudSaveApi.stub',
'status' => $servicePath . 'crudStatusApi.stub',
'edit' => $servicePath . 'getCrudEditApi.stub',
'read' => $servicePath . 'getCrudReadApi.stub',
'delete' => $servicePath . 'crudDeleteApi.stub',
'update' => $servicePath . 'crudUpdateApi.stub',
'api' => $servicePath . 'crud.stub',
];
return $type ? $stubs[$type] : $stubs;
}
}