Browse Source

完善AI相关功能

develop
tianya 1 day ago
parent
commit
e4dde5a1e3
21 changed files with 271 additions and 39 deletions
  1. +3
    -3
      src/admin/ai_log_main.php
  2. +2
    -1
      src/admin/ai_model_add.php
  3. +2
    -1
      src/admin/ai_model_edit.php
  4. +1
    -1
      src/admin/ai_model_main.php
  5. +30
    -0
      src/admin/ai_prompt_view.php
  6. +1
    -1
      src/admin/templets/ai_add.htm
  7. +3
    -1
      src/admin/templets/ai_edit.htm
  8. +8
    -7
      src/admin/templets/ai_log_main.htm
  9. +1
    -1
      src/admin/templets/ai_main.htm
  10. +4
    -0
      src/admin/templets/ai_model_add.htm
  11. +4
    -0
      src/admin/templets/ai_model_edit.htm
  12. +2
    -0
      src/admin/templets/ai_model_main.htm
  13. +1
    -1
      src/admin/templets/ai_prompt_add.htm
  14. +1
    -1
      src/admin/templets/ai_prompt_edit.htm
  15. +2
    -0
      src/admin/templets/ai_prompt_main.htm
  16. +131
    -0
      src/admin/templets/ai_prompt_view.htm
  17. +15
    -4
      src/admin/templets/article_add.htm
  18. +15
    -4
      src/admin/templets/article_edit.htm
  19. +15
    -4
      src/admin/templets/catalog_add.htm
  20. +15
    -5
      src/admin/templets/catalog_add_quick.htm
  21. +15
    -4
      src/admin/templets/catalog_edit.htm

+ 3
- 3
src/admin/ai_log_main.php View File

@@ -17,12 +17,12 @@ $sql = $where = '';
if (empty($adminid)) $adminid = 0; if (empty($adminid)) $adminid = 0;
if (empty($cip)) $cip = ''; if (empty($cip)) $cip = '';
if (empty($dtime)) $dtime = 0; if (empty($dtime)) $dtime = 0;
if ($adminid > 0) $where .= " AND `#@__log`.adminid='$adminid' ";
if ($cip != "") $where .= " AND `#@__log`.cip LIKE '%$cip%' ";
if ($adminid > 0) $where .= " AND `#@__ai_log`.adminid='$adminid' ";
if ($cip != "") $where .= " AND `#@__ai_log`.cip LIKE '%$cip%' ";
if ($dtime > 0) { if ($dtime > 0) {
$nowtime = time(); $nowtime = time();
$starttime = $nowtime - ($dtime * 24 * 3600); $starttime = $nowtime - ($dtime * 24 * 3600);
$where .= " AND `#@__log`.dtime>'$starttime' ";
$where .= " AND `#@__ai_log`.dtime>'$starttime' ";
} }
$sql = "SELECT `#@__ai_log`.*,`#@__admin`.userid FROM `#@__ai_log` LEFT JOIN `#@__admin` ON `#@__admin`.id=`#@__ai_log`.adminid WHERE 1=1 $where ORDER BY `#@__ai_log`.lid DESC"; $sql = "SELECT `#@__ai_log`.*,`#@__admin`.userid FROM `#@__ai_log` LEFT JOIN `#@__admin` ON `#@__admin`.id=`#@__ai_log`.adminid WHERE 1=1 $where ORDER BY `#@__ai_log`.lid DESC";
$adminlist = ''; $adminlist = '';


+ 2
- 1
src/admin/ai_model_add.php View File

@@ -15,7 +15,8 @@ if ($dopost == "add") {
$model = isset($model)? HtmlReplace($model, -1) : ''; $model = isset($model)? HtmlReplace($model, -1) : '';
$title = isset($title)? HtmlReplace($title, -1) : ''; $title = isset($title)? HtmlReplace($title, -1) : '';
$description = isset($description)? HtmlReplace($description, -1) : ''; $description = isset($description)? HtmlReplace($description, -1) : '';
$query = "INSERT INTO `#@__ai_model` (aiid,title,model,description) VALUES ('$aiid','$title','$model','$description'); ";
$sortrank = isset($sortrank)? intval($sortrank) : 50;
$query = "INSERT INTO `#@__ai_model` (aiid,title,model,description,sortrank) VALUES ('$aiid','$title','$model','$description','$sortrank'); ";
$rs = $dsql->ExecuteNoneQuery($query); $rs = $dsql->ExecuteNoneQuery($query);
$burl = "ai_edit.php?id=".$aiid; $burl = "ai_edit.php?id=".$aiid;
if ($rs) { if ($rs) {


+ 2
- 1
src/admin/ai_model_edit.php View File

@@ -20,7 +20,8 @@ if ($dopost == "delete") {
$title = isset($title)? HtmlReplace($title, -1) : ''; $title = isset($title)? HtmlReplace($title, -1) : '';
$description = isset($description)? HtmlReplace($description, -1) : ''; $description = isset($description)? HtmlReplace($description, -1) : '';
$model = isset($model)? HtmlReplace($model, -1) : ''; $model = isset($model)? HtmlReplace($model, -1) : '';
$query = "UPDATE `#@__ai_model` SET title='$title',description='$description',model='$model' WHERE id='$id' ";
$sortrank = isset($sortrank)? intval($sortrank) : 50;
$query = "UPDATE `#@__ai_model` SET title='$title',description='$description',model='$model',sortrank='$sortrank' WHERE id='$id' ";
$dsql->ExecuteNoneQuery($query); $dsql->ExecuteNoneQuery($query);
ShowMsg("成功修改一个模型版本", "ai_edit.php?id={$myModel['aiid']}&dopost=getedit"); ShowMsg("成功修改一个模型版本", "ai_edit.php?id={$myModel['aiid']}&dopost=getedit");
exit(); exit();


+ 1
- 1
src/admin/ai_model_main.php View File

@@ -12,7 +12,7 @@ require_once(dirname(__FILE__).'/config.php');
require_once(DEDEINC.'/datalistcp.class.php'); require_once(DEDEINC.'/datalistcp.class.php');
DedeSetCookie('ENV_GOBACK_URL', $dedeNowurl, time() + 3600, '/'); DedeSetCookie('ENV_GOBACK_URL', $dedeNowurl, time() + 3600, '/');


$sql = "SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY AM.id DESC";
$sql = "SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid WHERE 1=1 ORDER BY AM.sortrank ASC,AM.id DESC";
$dlist = new DataListCP(); $dlist = new DataListCP();
$dlist->SetTemplet(DEDEADMIN.'/templets/ai_model_main.htm'); $dlist->SetTemplet(DEDEADMIN.'/templets/ai_model_main.htm');
$dlist->SetSource($sql); $dlist->SetSource($sql);


+ 30
- 0
src/admin/ai_prompt_view.php View File

@@ -0,0 +1,30 @@
<?php
/**
* 预览提示词
*
* @version $id:ai_prompt_view.php 2025 tianya $
* @package DedeBIZ.Administrator
* @copyright Copyright (c) 2025 DedeBIZ.COM
* @license GNU GPL v2 (https://www.dedebiz.com/license)
* @link https://www.dedebiz.com
*/
require_once(dirname(__FILE__)."/config.php");
if (empty($dopost)) $dopost = '';
$id = isset($id)? intval($id) : 0;
$myPrompt = $dsql->GetOne("SELECT * FROM `#@__ai_prompt` WHERE id=$id");
if ($dopost == "delete") {
$dsql->ExecuteNoneQuery("DELETE FROM `#@__ai_prompt` WHERE id='$id'");
ShowMsg("成功删除一个提示词", "ai_prompt_main.php");
exit();
} else if ($dopost == "saveedit") {
$title = isset($title)? HtmlReplace($title, -1) : '';
$description = isset($description)? HtmlReplace($description, -1) : '';
$prompt = isset($prompt)? $prompt : '';
$dfprompt = isset($dfprompt)? $dfprompt : '';
$query = "UPDATE `#@__ai_prompt` SET title='$title',description='$description',prompt='$prompt',dfprompt='$dfprompt' WHERE id='$id' ";
$dsql->ExecuteNoneQuery($query);
ShowMsg("成功修改一个提示词", "ai_prompt_edit.php?id={$myPrompt['id']}");
exit();
}
include DedeInclude('templets/ai_prompt_view.htm');
?>

+ 1
- 1
src/admin/templets/ai_add.htm View File

@@ -48,7 +48,7 @@
</tr> </tr>
<tr> <tr>
<td>接口地址</td> <td>接口地址</td>
<td><input type="text" name="baseurl" id="baseurl" class="admin-input-lg" required></td>
<td><input type="text" name="baseurl" id="baseurl" class="admin-input-lg" required>(需兼容OpenAI接口标准)</td>
</tr> </tr>
<tr> <tr>
<td colspan="2" align="center"> <td colspan="2" align="center">


+ 3
- 1
src/admin/templets/ai_edit.htm View File

@@ -46,7 +46,7 @@
</tr> </tr>
<tr> <tr>
<td>接口地址</td> <td>接口地址</td>
<td><input type="text" name="baseurl" id="baseurl" class="admin-input-lg" value="<?php echo $myAI['baseurl']?>" required></td>
<td><input type="text" name="baseurl" id="baseurl" class="admin-input-lg" value="<?php echo $myAI['baseurl']?>" required>(需兼容OpenAI接口标准)</td>
</tr> </tr>
<tr> <tr>
<td colspan="2"> <td colspan="2">
@@ -61,6 +61,7 @@
<td scope="col">Model</td> <td scope="col">Model</td>
<td scope="col">名称</td> <td scope="col">名称</td>
<td scope="col" width="30%">描述</td> <td scope="col" width="30%">描述</td>
<td scope="col">排序</td>
<td scope="col">操作</td> <td scope="col">操作</td>
</tr> </tr>
</thead> </thead>
@@ -71,6 +72,7 @@
<td>{dede:field.model function='dede_htmlspecialchars(@me)'/}</td> <td>{dede:field.model function='dede_htmlspecialchars(@me)'/}</td>
<td>{dede:field.title function='dede_htmlspecialchars(@me)'/}</td> <td>{dede:field.title function='dede_htmlspecialchars(@me)'/}</td>
<td>{dede:field.description/}</td> <td>{dede:field.description/}</td>
<td>{dede:field.sortrank/}</td>
<td> <td>
<a href="ai_model_edit.php?id={dede:field.id/}" class="btn btn-light btn-sm"><i class="fa fa-pencil-square" title="修改"></i></a> <a href="ai_model_edit.php?id={dede:field.id/}" class="btn btn-light btn-sm"><i class="fa fa-pencil-square" title="修改"></i></a>
<a href="ai_model_edit.php?id={dede:field.id/}&dopost=delete" class="btn btn-danger btn-sm"><i class="fa fa-trash" title="删除"></i></a> <a href="ai_model_edit.php?id={dede:field.id/}&dopost=delete" class="btn btn-danger btn-sm"><i class="fa fa-trash" title="删除"></i></a>


+ 8
- 7
src/admin/templets/ai_log_main.htm View File

@@ -17,7 +17,7 @@
<div class="card shadow-sm mb-3"> <div class="card shadow-sm mb-3">
<div class="card-body"> <div class="card-body">
<form name="formsearch"> <form name="formsearch">
<input type="text" name="cip" id="cip" placeholder="请输入ip地址" class="admin-input-lg mr-2">
<input type="text" name="cip" id="cip" placeholder="请输入ip地址" class="admin-input-lg mr-2" value="<?php echo empty($cip)? '' : $cip?>">
<select name="adminid" id="adminid" class="admin-input-sm mr-2"> <select name="adminid" id="adminid" class="admin-input-sm mr-2">
<option value="0" selected>全部</option> <option value="0" selected>全部</option>
<?php echo $adminlist?> <?php echo $adminlist?>
@@ -29,7 +29,8 @@
<option value="30">30天以内</option> <option value="30">30天以内</option>
<option value="60">60天以内</option> <option value="60">60天以内</option>
</select> </select>
<button type="submit"class="btn btn-success btn-sm">搜索</button>
<button type="submit" class="btn btn-success btn-sm">搜索</button>
<a href="ai_log_main.php" class="btn btn-outline-success btn-sm">重置</a>
</form> </form>
</div> </div>
</div> </div>
@@ -48,6 +49,8 @@
<td scope="col">提示词</td> <td scope="col">提示词</td>
<td scope="col">地址</td> <td scope="col">地址</td>
<td scope="col">时间</td> <td scope="col">时间</td>
<td scope="col">提示</td>
<td scope="col">补全</td>
<td scope="col">消耗</td> <td scope="col">消耗</td>
</tr> </tr>
<thead> <thead>
@@ -61,11 +64,9 @@
<td><input type="text" name="t0" value="{dede:field.prompt/}" class="admin-input-lg"></td> <td><input type="text" name="t0" value="{dede:field.prompt/}" class="admin-input-lg"></td>
<td>{dede:field.cip/}</td> <td>{dede:field.cip/}</td>
<td>{dede:field.dtime function="MyDate('y/m/d H:i:s',@me)"/}</td> <td>{dede:field.dtime function="MyDate('y/m/d H:i:s',@me)"/}</td>
<td>
提示:{dede:field.prompt_tokens/} <br/>
对话:{dede:field.completion_tokens/} <br/>
总计:{dede:field.total_tokens/}
</td>
<td>{dede:field.prompt_tokens/}</td>
<td>{dede:field.completion_tokens/}</td>
<td>{dede:field.total_tokens/}</td>
</tr> </tr>
{/dede:datalist} {/dede:datalist}
<tr> <tr>


+ 1
- 1
src/admin/templets/ai_main.htm View File

@@ -1,4 +1,4 @@
{dede:config.pagesize value='30'/}
{dede:config.pagesize value='15'/}
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>




+ 4
- 0
src/admin/templets/ai_model_add.htm View File

@@ -56,6 +56,10 @@
<td>名称</td> <td>名称</td>
<td><input type="text" name="title" id="title" class="admin-input-lg" required></td> <td><input type="text" name="title" id="title" class="admin-input-lg" required></td>
</tr> </tr>
<tr>
<td>排序</td>
<td><input type="text" name="sortrank" id="sortrank" class="admin-input-lg" required>(由低到高)</td>
</tr>
<tr> <tr>
<td>描述</td> <td>描述</td>
<td><textarea name="description" id="description" class="admin-textarea-sm"></textarea></td> <td><textarea name="description" id="description" class="admin-textarea-sm"></textarea></td>


+ 4
- 0
src/admin/templets/ai_model_edit.htm View File

@@ -41,6 +41,10 @@
<td>名称</td> <td>名称</td>
<td><input type="text" name="title" id="title" value="<?php echo $myModel['title']?>" class="admin-input-lg" required></td> <td><input type="text" name="title" id="title" value="<?php echo $myModel['title']?>" class="admin-input-lg" required></td>
</tr> </tr>
<tr>
<td>排序</td>
<td><input type="text" name="sortrank" id="sortrank" value="<?php echo $myModel['sortrank']?>" class="admin-input-lg" required>(由低到高)</td>
</tr>
<tr> <tr>
<td>描述</td> <td>描述</td>
<td><textarea name="description" id="description" class="admin-textarea-sm"><?php echo $myModel['description']?></textarea></td> <td><textarea name="description" id="description" class="admin-textarea-sm"><?php echo $myModel['description']?></textarea></td>


+ 2
- 0
src/admin/templets/ai_model_main.htm View File

@@ -36,6 +36,7 @@
<td scope="col">名称</td> <td scope="col">名称</td>
<td scope="col">大模型</td> <td scope="col">大模型</td>
<td scope="col" width="30%">描述</td> <td scope="col" width="30%">描述</td>
<td scope="col">排序</td>
<td scope="col">操作</td> <td scope="col">操作</td>
</tr> </tr>
</thead> </thead>
@@ -47,6 +48,7 @@
<td>{dede:field.title function='dede_htmlspecialchars(@me)'/}</td> <td>{dede:field.title function='dede_htmlspecialchars(@me)'/}</td>
<td>{dede:field.aititle/}</td> <td>{dede:field.aititle/}</td>
<td>{dede:field.description/}</td> <td>{dede:field.description/}</td>
<td>{dede:field.sortrank/}</td>
<td> <td>
<a href="ai_model_edit.php?id={dede:field.id/}" class="btn btn-light btn-sm"><i class="fa fa-pencil-square" title="修改"></i></a> <a href="ai_model_edit.php?id={dede:field.id/}" class="btn btn-light btn-sm"><i class="fa fa-pencil-square" title="修改"></i></a>
<a href="ai_model_edit.php?id={dede:field.id/}&dopost=delete" class="btn btn-danger btn-sm"><i class="fa fa-trash" title="删除"></i></a> <a href="ai_model_edit.php?id={dede:field.id/}&dopost=delete" class="btn btn-danger btn-sm"><i class="fa fa-trash" title="删除"></i></a>


+ 1
- 1
src/admin/templets/ai_prompt_add.htm View File

@@ -48,7 +48,7 @@
class="admin-textarea-sm"></textarea></td> class="admin-textarea-sm"></textarea></td>
</tr> </tr>
<tr> <tr>
<td>提示词规则</td>
<td>系统提示词</td>
<td> <td>
<textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height: 200px;"></textarea>(AI系统提示词) <textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height: 200px;"></textarea>(AI系统提示词)
</td> </td>


+ 1
- 1
src/admin/templets/ai_prompt_edit.htm View File

@@ -55,7 +55,7 @@
class="admin-textarea-sm"><?php echo $myPrompt['description']?></textarea></td> class="admin-textarea-sm"><?php echo $myPrompt['description']?></textarea></td>
</tr> </tr>
<tr> <tr>
<td>提示词规则</td>
<td>系统提示词</td>
<td> <td>
<textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height: 200px;"><?php echo $myPrompt['prompt']?></textarea> <textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height: 200px;"><?php echo $myPrompt['prompt']?></textarea>
</td> </td>


+ 2
- 0
src/admin/templets/ai_prompt_main.htm View File

@@ -56,6 +56,8 @@
class="btn btn-light btn-sm"><i class="fa fa-pencil-square" class="btn btn-light btn-sm"><i class="fa fa-pencil-square"
title="修改"></i></a> title="修改"></i></a>
<?php if($fields['issystem']==0) {?> <?php if($fields['issystem']==0) {?>
<a href="ai_prompt_view.php?id={dede:field.id/}"
class="btn btn-success btn-sm"><i class="fa fa-eye" title="预览"></i></a>
<a href="ai_prompt_edit.php?id={dede:field.id/}&dopost=delete" <a href="ai_prompt_edit.php?id={dede:field.id/}&dopost=delete"
class="btn btn-danger btn-sm"><i class="fa fa-trash" title="删除"></i></a> class="btn btn-danger btn-sm"><i class="fa fa-trash" title="删除"></i></a>
<?php }?> <?php }?>


+ 131
- 0
src/admin/templets/ai_prompt_view.htm View File

@@ -0,0 +1,131 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<title>预览提示词</title>
<link rel="stylesheet" href="/static/web/css/font-awesome.min.css">
<link rel="stylesheet" href="/static/web/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/web/css/admin.css">
<script src="/static/web/js/jquery.min.js"></script>
<script src="/static/web/js/bootstrap.min.js"></script>
<script src="/static/web/js/admin.main.js"></script>
</head>
<body>
<div class="container-fluid">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="index_body.php">后台面板</a></li>
<li class="breadcrumb-item"><a href="ai_prompt_main.php">提示词管理</a></li>
<li class="breadcrumb-item active">预览提示词</li>
</ol>
<div class="card shadow-sm">
<div class="card-header">预览提示词</div>
<div class="card-body">
<div class="table-responsive">
<?php
if(!empty($myPrompt['info'])){
?>
<div class="alert alert-warning">
<?php echo $myPrompt['info']?>
</div>
<?php
}
?>
<table class="table table-borderless">
<tbody>
<tr>
<td width="260">名称</td>
<td>
[<?php echo $myPrompt['pname']?>]<?php echo $myPrompt['title']?>
</td>
</tr>
<tr>
<td>提示词</td>
<td>
<textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height: 100px;" placeholder="填写您的要求,默认:<?php echo $myPrompt['dfprompt']?>"></textarea>
</td>
</tr>
<tr>
<td>选择模型</td>
<td>
<select id="modelid" class="admin-input-sm">
<?php
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
$dsql->Execute();
while ($row = $dsql->GetObject()) {
?>
<option value="<?php echo $row->id;?>"<?php echo $row->isdefault==1?' selected' : '';?>><?php echo $row->model;?>(<?php echo $row->aititle;?>)</option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td></td>
<td>
<button type="button" id="btnAIAction" class="btn btn-success btn-sm">AI生成</button>
<a href="ai_prompt_main.php" class="btn btn-outline-success btn-sm">返回</a>
</td>
</tr>
<tr>
<td>结果</td>
<td><textarea name="result" id="result" class="admin-textarea-sm" style="height: 200px;"></textarea></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script>
let eventSource; // 保存 EventSource 实例
let modelid = 0;
$("#btnAIAction").click(async function() {
let prompt = document.getElementById("prompt").value;
let modelid = document.getElementById("modelid").value;
let req = await fetch(`api.php?action=get_ai_server&pname=<?php echo $myPrompt['pname']?>&modelid=${modelid}&prompt=${prompt}`);
let resp = await req.json();
if (resp.code !== 0) {
ShowMsg("获取服务器地址失败");
return
}
let eventSource = new EventSource(resp.data);
// 新增状态跟踪变量
let currentKey = null;
let tagBuffer = "";
let isClosingTag = false;

$("#btnAI").attr("disabled", "disabled");
prompt = "";
let lastChar = "";
const input = document.querySelector(`[name="result"]`);
input.value = "";
eventSource.onmessage = (event) => {
$(input).prop("disabled", true).addClass("disabled");
const msg = event.data;
input.value += msg;
};

eventSource.onerror = (error) => {
if (error.target.readyState === EventSource.CONNECTING) {
ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
} else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
ShowMsg(error.data);
}
$("#btnAI").prop("disabled", false);
eventSource.close();
};

// 监听特定事件 "close"
eventSource.addEventListener('close', (event) => {
console.log('SSE connection closed:', event.data);
$("#btnAI").prop("disabled", false);
$(input).prop("disabled", false);
eventSource.close(); // 关闭连接
});
});
</script>
</body>
</html>

+ 15
- 4
src/admin/templets/article_add.htm View File

@@ -26,7 +26,7 @@
<li class="breadcrumb-item active">发布文档</li> <li class="breadcrumb-item active">发布文档</li>
</ol> </ol>
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">发布文档 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">AI发布文档</button><?php } ;?></div>
<div class="card-header d-flex justify-content-between align-items-center">发布文档 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">智能助手</button><?php } ;?></div>
<div class="card-body"> <div class="card-body">
<form name="form1" action="article_add.php" method="post" enctype="multipart/form-data"> <form name="form1" action="article_add.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="channelid" value="<?php echo $channelid?>"> <input type="hidden" name="channelid" value="<?php echo $channelid?>">
@@ -227,7 +227,7 @@
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">AI发布文档</h5>
<h5 class="modal-title">智能助手-发布文档</h5>
<button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button> <button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
@@ -236,7 +236,7 @@
<textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="我需要写一篇介绍穆云智能科技公司的文章"></textarea><br/> <textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="我需要写一篇介绍穆云智能科技公司的文章"></textarea><br/>
选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;"> 选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;">
<?php <?php
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY AM.sortrank ASC,AM.id DESC");
$dsql->Execute(); $dsql->Execute();
while ($row = $dsql->GetObject()) { while ($row = $dsql->GetObject()) {
?> ?>
@@ -383,10 +383,21 @@
}; };


eventSource.onerror = (error) => { eventSource.onerror = (error) => {
console.log("连接已关闭");
if (error.target.readyState === EventSource.CONNECTING) {
ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
} else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
ShowMsg(error.data);
}
$("#btnAI").prop("disabled", false); $("#btnAI").prop("disabled", false);
eventSource.close(); eventSource.close();
}; };

// 监听特定事件 "close"
eventSource.addEventListener('close', (event) => {
console.log('SSE connection closed:', event.data);
$("#btnAI").prop("disabled", false);
eventSource.close(); // 关闭连接
});
}); });
</script> </script>
</body> </body>

+ 15
- 4
src/admin/templets/article_edit.htm View File

@@ -26,7 +26,7 @@
<li class="breadcrumb-item active">修改文档</li> <li class="breadcrumb-item active">修改文档</li>
</ol> </ol>
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">修改<?php echo $arcRow['title'];?>文档 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">AI修改文档</button><?php } ;?></div>
<div class="card-header d-flex justify-content-between align-items-center">修改<?php echo $arcRow['title'];?>文档 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">智能助手</button><?php } ;?></div>
<div class="card-body"> <div class="card-body">
<form name="form1" action="article_edit.php" method="post" enctype="multipart/form-data"> <form name="form1" action="article_edit.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="dopost" value="save"> <input type="hidden" name="dopost" value="save">
@@ -231,7 +231,7 @@
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">AI修改文档</h5>
<h5 class="modal-title">智能助手-修改文档</h5>
<button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button> <button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
@@ -240,7 +240,7 @@
<textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您需要对当前的内容进行怎样的优化,例如:我需要对当前文章就行润色,内容轻松活泼些,不要出现错别字"></textarea><br/> <textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您需要对当前的内容进行怎样的优化,例如:我需要对当前文章就行润色,内容轻松活泼些,不要出现错别字"></textarea><br/>
选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;"> 选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;">
<?php <?php
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY AM.sortrank ASC,AM.id DESC");
$dsql->Execute(); $dsql->Execute();
while ($row = $dsql->GetObject()) { while ($row = $dsql->GetObject()) {
?> ?>
@@ -386,10 +386,21 @@
}; };


eventSource.onerror = (error) => { eventSource.onerror = (error) => {
console.log("连接已关闭");
if (error.target.readyState === EventSource.CONNECTING) {
ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
} else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
ShowMsg(error.data);
}
$("#btnAI").prop("disabled", false); $("#btnAI").prop("disabled", false);
eventSource.close(); eventSource.close();
}; };

// 监听特定事件 "close"
eventSource.addEventListener('close', (event) => {
console.log('SSE connection closed:', event.data);
$("#btnAI").prop("disabled", false);
eventSource.close(); // 关闭连接
});
}); });
</script> </script>
</body> </body>

+ 15
- 4
src/admin/templets/catalog_add.htm View File

@@ -19,7 +19,7 @@
<li class="breadcrumb-item active">添加栏目</li> <li class="breadcrumb-item active">添加栏目</li>
</ol> </ol>
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">添加栏目 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">AI创建栏目</button><?php } ;?></div>
<div class="card-header d-flex justify-content-between align-items-center">添加栏目 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">智能助手</button><?php } ;?></div>
<div class="card-body"> <div class="card-body">
<form name="form1" action="catalog_add.php" method="post"> <form name="form1" action="catalog_add.php" method="post">
<input type="hidden" name="dopost" value="save"> <input type="hidden" name="dopost" value="save">
@@ -297,7 +297,7 @@
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">AI创建栏目</h5>
<h5 class="modal-title">智能助手-创建栏目</h5>
<button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button> <button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
@@ -306,7 +306,7 @@
<textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您需要创建栏目的要求,例如:我需要创建一个介绍穆云智能科技公司的栏目"></textarea><br/> <textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您需要创建栏目的要求,例如:我需要创建一个介绍穆云智能科技公司的栏目"></textarea><br/>
选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;"> 选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;">
<?php <?php
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY AM.sortrank ASC,AM.id DESC");
$dsql->Execute(); $dsql->Execute();
while ($row = $dsql->GetObject()) { while ($row = $dsql->GetObject()) {
?> ?>
@@ -523,10 +523,21 @@
}; };


eventSource.onerror = (error) => { eventSource.onerror = (error) => {
console.log("连接已关闭");
if (error.target.readyState === EventSource.CONNECTING) {
ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
} else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
ShowMsg(error.data);
}
$("#btnAI").prop("disabled", false); $("#btnAI").prop("disabled", false);
eventSource.close(); eventSource.close();
}; };

// 监听特定事件 "close"
eventSource.addEventListener('close', (event) => {
console.log('SSE connection closed:', event.data);
$("#btnAI").prop("disabled", false);
eventSource.close(); // 关闭连接
});
}); });
</script> </script>
</body> </body>

+ 15
- 5
src/admin/templets/catalog_add_quick.htm View File

@@ -19,7 +19,7 @@
<li class="breadcrumb-item active">批量添加栏目</li> <li class="breadcrumb-item active">批量添加栏目</li>
</ol> </ol>
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">批量添加栏目 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">AI批量创建</button><?php } ;?></div>
<div class="card-header d-flex justify-content-between align-items-center">批量添加栏目 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">智能助手</button><?php } ;?></div>
<div class="card-body"> <div class="card-body">
<form name="form1" action="catalog_add.php" method="post"> <form name="form1" action="catalog_add.php" method="post">
<input type="hidden" name="dopost" value="savequick"> <input type="hidden" name="dopost" value="savequick">
@@ -194,7 +194,7 @@
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">AI批量创建栏目</h5>
<h5 class="modal-title">智能助手-批量创建栏目</h5>
<button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button> <button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
@@ -203,7 +203,7 @@
<textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您站点规划,AI帮您自动规划栏目,例如:我需要创建一个企业信息展示类站点"></textarea><br/> <textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您站点规划,AI帮您自动规划栏目,例如:我需要创建一个企业信息展示类站点"></textarea><br/>
选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;"> 选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;">
<?php <?php
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY AM.sortrank ASC,AM.id DESC");
$dsql->Execute(); $dsql->Execute();
while ($row = $dsql->GetObject()) { while ($row = $dsql->GetObject()) {
?> ?>
@@ -389,11 +389,21 @@
}; };


eventSource.onerror = (error) => { eventSource.onerror = (error) => {
console.log(error);
console.log("连接已关闭");
if (error.target.readyState === EventSource.CONNECTING) {
ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
} else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
ShowMsg(error.data);
}
$("#btnAI").prop("disabled", false); $("#btnAI").prop("disabled", false);
eventSource.close(); eventSource.close();
}; };

// 监听特定事件 "close"
eventSource.addEventListener('close', (event) => {
console.log('SSE connection closed:', event.data);
$("#btnAI").prop("disabled", false);
eventSource.close(); // 关闭连接
});
}); });
</script> </script>
</body> </body>

+ 15
- 4
src/admin/templets/catalog_edit.htm View File

@@ -19,7 +19,7 @@
<li class="breadcrumb-item active">修改栏目</li> <li class="breadcrumb-item active">修改栏目</li>
</ol> </ol>
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">修改栏目 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">AI修改栏目</button><?php } ;?></div>
<div class="card-header d-flex justify-content-between align-items-center">修改栏目 <?php if($cfg_ai_enabled == 'Y'){ ;?><button type="button" id="btnAI" onclick="showAI();" class="btn btn-success btn-sm">智能助手</button><?php } ;?></div>
<div class="card-body"> <div class="card-body">
<form name="form1" action="catalog_edit.php" method="post"> <form name="form1" action="catalog_edit.php" method="post">
<input type="hidden" name="dopost" value="save"> <input type="hidden" name="dopost" value="save">
@@ -327,7 +327,7 @@
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">AI修改栏目</h5>
<h5 class="modal-title">智能助手-修改栏目</h5>
<button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button> <button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
@@ -336,7 +336,7 @@
<textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您需要修改栏目的要求,例如:我需要栏目信息内容更丰富一些"></textarea><br/> <textarea class="admin-input-sm" style="width: 100%;height: 100px;" id="prompt" placeholder="填写您需要修改栏目的要求,例如:我需要栏目信息内容更丰富一些"></textarea><br/>
选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;"> 选择模型:<select id="modelid" class="admin-input-sm" style="width: 100%;">
<?php <?php
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
$dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY AM.sortrank ASC,AM.id DESC");
$dsql->Execute(); $dsql->Execute();
while ($row = $dsql->GetObject()) { while ($row = $dsql->GetObject()) {
?> ?>
@@ -553,10 +553,21 @@
}; };


eventSource.onerror = (error) => { eventSource.onerror = (error) => {
console.log("连接已关闭");
if (error.target.readyState === EventSource.CONNECTING) {
ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
} else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
ShowMsg(error.data);
}
$("#btnAI").prop("disabled", false); $("#btnAI").prop("disabled", false);
eventSource.close(); eventSource.close();
}; };

// 监听特定事件 "close"
eventSource.addEventListener('close', (event) => {
console.log('SSE connection closed:', event.data);
$("#btnAI").prop("disabled", false);
eventSource.close(); // 关闭连接
});
}); });
</script> </script>
</body> </body>

Loading…
Cancel
Save