Skip to content

Commit aa8eb30

Browse files
committed
升级:富文本编辑器升级
1 parent 6619007 commit aa8eb30

File tree

224 files changed

+16274
-286
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

224 files changed

+16274
-286
lines changed

app/Constant/AppConstant.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ class AppConstant
66
{
77
const APP = 'blog';
88
const APP_NAME = 'ModStartBlog';
9-
const VERSION = '10.1.0';
9+
const VERSION = '10.2.0';
1010
}
1111

config/module.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
'VisitStatistic' => [
3535
'enable' => true,
3636
],
37+
'AigcBase' => [
38+
'enable' => true,
39+
],
3740
// 'BlogAdminApi' => [
3841
// 'enable' => true,
3942
// ],
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace Module\AigcBase\Admin\Controller;
4+
5+
use Illuminate\Routing\Controller;
6+
use ModStart\Core\Exception\BizException;
7+
use ModStart\Core\Input\InputPackage;
8+
use ModStart\Core\Input\Response;
9+
use ModStart\Core\Util\LogUtil;
10+
use ModStart\Core\Util\SessionUtil;
11+
use Module\Aicc\Model\BizUser;
12+
use Module\AigcBase\Provider\AigcChatProvider;
13+
14+
class AigcChatController extends Controller
15+
{
16+
public static $PermitMethodMap = [
17+
'*' => '*',
18+
];
19+
20+
public function index($type)
21+
{
22+
Response::textEventStreamed(function ($sendCallback, $param = []) use ($type) {
23+
$input = InputPackage::buildFromInput();
24+
$prompt = $input->getTrimString('prompt');
25+
$driver = null;
26+
switch ($type) {
27+
case 'ueditor':
28+
$driver = modstart_config('AigcBase_AdminRichEditorDriver');
29+
break;
30+
}
31+
try {
32+
if (!$driver) {
33+
BizException::throws('机器人没有配置,请在 后台→系统设置→AI平台对接→功能设置 中配置');
34+
}
35+
$provider = AigcChatProvider::getByFullName($driver);
36+
if (empty($provider)) {
37+
BizException::throws('机器人没有配置');
38+
} else {
39+
$option = [];
40+
$ret = $provider->chatStream(function ($payload, $param) use (&$sendCallback, &$send) {
41+
call_user_func($sendCallback, $payload['type'], isset($payload['data']) ? $payload['data'] : null);
42+
}, 'Admin_' . SessionUtil::id(), [
43+
'type' => 'text',
44+
'content' => $prompt,
45+
], $option);
46+
if (Response::isError($ret)) {
47+
BizException::throws($ret['msg']);
48+
}
49+
}
50+
LogUtil::info('xxxx', $ret);
51+
} catch (BizException $e) {
52+
call_user_func($sendCallback, 'error', $e->getMessage());
53+
}
54+
});
55+
}
56+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<?php
2+
3+
4+
namespace Module\AigcBase\Admin\Controller;
5+
6+
7+
use Illuminate\Routing\Controller;
8+
use ModStart\Admin\Concern\HasAdminQuickCRUD;
9+
use ModStart\Admin\Layout\AdminConfigBuilder;
10+
use ModStart\Admin\Layout\AdminCRUDBuilder;
11+
use ModStart\Core\Exception\BizException;
12+
use ModStart\Core\Input\Request;
13+
use ModStart\Core\Type\TypeUtil;
14+
use ModStart\Field\AbstractField;
15+
use ModStart\Field\AutoRenderedFieldValue;
16+
use ModStart\Form\Form;
17+
use ModStart\Grid\GridFilter;
18+
use ModStart\Support\Concern\HasFields;
19+
use ModStart\Widget\ButtonDialogRequest;
20+
use Module\AigcBase\Model\AigcKeyPool;
21+
use Module\AigcBase\Provider\AigcChatProvider;
22+
use Module\AigcBase\Provider\AigcProvider;
23+
use Module\AigcBase\Type\AigcKeyPoolStatus;
24+
use Module\AigcBase\Type\AigcProviderType;
25+
use Module\AigcBase\Util\AigcKeyPoolUtil;
26+
27+
class AigcKeyPoolController extends Controller
28+
{
29+
use HasAdminQuickCRUD;
30+
31+
protected function crud(AdminCRUDBuilder $builder)
32+
{
33+
$builder
34+
->init(AigcKeyPool::class)
35+
->field(function ($builder) {
36+
/** @var HasFields $builder */
37+
$builder->id('id', 'ID');
38+
$typeOptions = AigcProvider::allMap();
39+
foreach ($typeOptions as $k => $v) {
40+
$provider = AigcProvider::getByName($k);
41+
$typeOptions[$k] = join('-', [
42+
TypeUtil::name(AigcProviderType::class, $provider->type()),
43+
$provider->title()
44+
]);
45+
}
46+
$typeField = $builder->radio('type', '类型')
47+
->required()
48+
->options($typeOptions);
49+
if (empty($typeOptions)) {
50+
$typeField->help('<div class="ub-alert warning">暂未安装模型驱动,请在 系统管理→模块管理→模块市场 安装模型驱动</div>');
51+
}
52+
$whenHelps = [];
53+
foreach (AigcProvider::listAll() as $provider) {
54+
$typeField->when('=', $provider->name(), function ($builder) use (&$provider) {
55+
$provider->paramForm($builder);
56+
});
57+
$whenHelps[$provider->name()] = $provider->help();
58+
}
59+
$typeField->whenHelps($whenHelps);
60+
if (Request::isPost()) {
61+
if (empty($typeOptions)) {
62+
BizException::throws('暂未安装模型驱动,请在 系统管理→模块管理→模块市场 安装模型驱动');
63+
}
64+
}
65+
$builder->radio('status', '状态')->options(AigcKeyPoolStatus::editList())->defaultValue(AigcKeyPoolStatus::ONLINE);
66+
$builder->number('priority', '权重')->defaultValue(10)->help('数字越大被实用的概率越大');
67+
$builder->display('_param', '参数')
68+
->hookRendering(function (AbstractField $field, $item, $index) {
69+
$html = [];
70+
$provider = AigcProvider::getByName($item->type);
71+
if ($provider) {
72+
$html[] = "<table class='ub-table mini border'>";
73+
foreach ($provider->paramDisplay($item->toArray()) as $v) {
74+
$html[] = "<tr><td>$v[name]</td><td>$v[value]</td></tr>";
75+
}
76+
$html[] = "</table>";
77+
}
78+
return AutoRenderedFieldValue::make(join('', $html));
79+
})
80+
->listable(true)->showable(true)->addable(false)->editable(false);
81+
$builder->text('remark', '备注');
82+
$builder->display('callCount', '调用次数')->listable(true);
83+
$builder->display('successCount', '成功次数')->listable(true);
84+
$builder->display('failCount', '失败次数')->listable(true);
85+
$builder->display('lastCallTime', '上次调用时间')->listable(true);
86+
87+
$builder->display('created_at', L('Created At'))->listable(false);
88+
$builder->display('updated_at', L('Updated At'))->listable(false);
89+
})
90+
->gridFilter(function (GridFilter $filter) {
91+
// $filter->eq('userId', '用户ID');
92+
// $filter->eq('appId', '技能')->selectModel('aigc_app', 'id', 'title');
93+
})
94+
->gridOperateAppend(
95+
ButtonDialogRequest::make('primary', '<i class="iconfont icon-cog"></i> 功能设置', modstart_admin_url('aigc/key_pool/config'))->size('big')
96+
)
97+
->hookChanged(function (Form $form) {
98+
AigcKeyPoolUtil::clearCache();
99+
})
100+
->title('AI平台对接');
101+
}
102+
103+
public function config(AdminConfigBuilder $builder)
104+
{
105+
$builder->useDialog();
106+
$builder->pageTitle('功能设置');
107+
$builder->switch('AigcBase_AdminRichEditorEnable', '后台富文本编辑器AI功能')->defaultValue(false);
108+
$builder->select('AigcBase_AdminRichEditorDriver', '后台富文本编辑器AI驱动')->options(AigcChatProvider::modelMap());
109+
$builder->formClass('wide-lg');
110+
$builder->disableBoxWrap(true);
111+
return $builder->perform();
112+
}
113+
}

module/AigcBase/Admin/routes.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
/* @var \Illuminate\Routing\Router $router */
4+
5+
$router->match(['get', 'post'], 'aigc/key_pool', 'AigcKeyPoolController@index');
6+
$router->match(['get', 'post'], 'aigc/key_pool/add', 'AigcKeyPoolController@add');
7+
$router->match(['get', 'post'], 'aigc/key_pool/edit', 'AigcKeyPoolController@edit');
8+
$router->match(['post'], 'aigc/key_pool/delete', 'AigcKeyPoolController@delete');
9+
$router->match(['get'], 'aigc/key_pool/show', 'AigcKeyPoolController@show');
10+
11+
$router->match(['get', 'post'], 'aigc/key_pool/config', 'AigcKeyPoolController@config');
12+
13+
$router->match(['post'], 'aigc/chat/{type}', 'AigcChatController@index');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Module\AigcBase\Api\Controller;
4+
5+
use Illuminate\Routing\Controller;
6+
use Module\Member\Support\MemberLoginCheck;
7+
8+
class TaskController extends Controller implements MemberLoginCheck
9+
{
10+
11+
}

module/AigcBase/Api/routes.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
/* @var \Illuminate\Routing\Router $router */
3+
$router->group([
4+
'middleware' => [
5+
\Module\Member\Middleware\ApiAuthMiddleware::class,
6+
],
7+
], function () use ($router) {
8+
9+
$router->match(['post'], 'aigc_base/file', 'FileController@index');
10+
11+
});
12+
13+
14+
15+
Lines changed: 51 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)