| @@ -19,7 +19,7 @@ if (empty($action)) { | |||
| if (!empty($tag)) $where = " WHERE tag like '%$tag%'"; | |||
| else $where = ''; | |||
| $neworderway = ($orderway == 'desc' ? 'asc' : 'desc'); | |||
| $query = "SELECT * FROM `#@__tagindex` $where ORDER BY $orderby $orderway"; | |||
| $query = "SELECT T.*,TI.* FROM `#@__tagindex` T LEFT JOIN `#@__tagindex_infos` TI ON TI.tagid=T.id $where ORDER BY $orderby $orderway"; | |||
| $dlist = new DataListCP(); | |||
| $tag = stripslashes($tag); | |||
| $dlist->SetParameter("tag", $tag); | |||
| @@ -40,8 +40,15 @@ if (empty($action)) { | |||
| if (empty($tid)) { | |||
| die('请选择需要更新的标签'); | |||
| } | |||
| $query = "UPDATE `#@__tagindex` SET `count`='$count',`litpic`='$litpic',`title`='$title',`keywords`='$keywords',`description`='$description' WHERE id='$tid' "; | |||
| $query = "UPDATE `#@__tagindex` SET `count`='$count',`title`='$title',`keywords`='$keywords',`description`='$description' WHERE id='$tid' "; | |||
| $dsql->ExecuteNoneQuery($query); | |||
| $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__tagindex_infos` WHERE tagid = $tid"); | |||
| if ($row['dd'] > 0) { | |||
| $dsql->ExecuteNoneQuery("UPDATE `#@__tagindex_infos` SET `litpic`=='$litpic'"); | |||
| } else { | |||
| $dsql->ExecuteNoneQuery("INSERT INTO `#@__tagindex_infos` (`tagid`,`litpic`) VALUES ('$tid','$litpic')"); | |||
| } | |||
| echo "success"; | |||
| exit(); | |||
| } else if ($action == 'delete') { | |||
| @@ -57,24 +64,12 @@ if (empty($action)) { | |||
| if ($dsql->ExecuteNoneQuery($query)) { | |||
| $query = "DELETE FROM `#@__taglist` WHERE tid IN ($stringids)"; | |||
| $dsql->ExecuteNoneQuery($query); | |||
| $dsql->ExecuteNoneQuery("DELETE FROM `#@__tagindex_infos` WHERE tagid IN ($stringids)"); | |||
| ShowMsg("删除[$stringids]标签成功", 'tags_main.php'); | |||
| } else { | |||
| ShowMsg("删除[$stringids]标签失败", 'tags_main.php'); | |||
| } | |||
| exit(); | |||
| } else if ($action == 'get_one') { | |||
| $tid = (empty($tid) ? 0 : intval($tid)); | |||
| $row = $dsql->GetOne("SELECT * FROM `#@__tagindex` WHERE id = $tid"); | |||
| echo json_encode($row); | |||
| exit; | |||
| } else if ($action == 'set_one') { | |||
| $tid = (empty($tid) ? 0 : intval($tid)); | |||
| $title = empty($title) ? "" : HtmlReplace($title, 0); | |||
| $kw = empty($kw) ? "" : HtmlReplace($kw, 0); | |||
| $des = empty($des) ? "" : HtmlReplace($des, 0); | |||
| $now = time(); | |||
| $dsql->ExecuteNoneQuery("UPDATE `#@__tagindex` SET title='{$title}',keywords='{$kw}',`description`='{$des}',`uptime`='{$now}' WHERE id = {$tid}"); | |||
| echo json_encode(array('code' => 200, 'result' => true)); | |||
| } else if ($action == 'fetch') { | |||
| $wheresql = ''; | |||
| $start = isset($start) && is_numeric($start) ? $start : 0; | |||
| @@ -28,11 +28,11 @@ | |||
| <tbody> | |||
| <tr> | |||
| <td width="260">名称</td> | |||
| <td><input type="text" name="title" id="title" value="" class="admin-input-lg" required></td> | |||
| <td><input type="text" name="title" id="title" value="" class="admin-input-lg" placeholder="模型名称,例如:deepseek" required></td> | |||
| </tr> | |||
| <tr> | |||
| <td>描述</td> | |||
| <td><textarea name="description" id="description" class="admin-textarea-sm"></textarea></td> | |||
| <td><textarea name="description" id="description" class="admin-textarea-sm" placeholder="模型介绍信息"></textarea></td> | |||
| </tr> | |||
| <tr> | |||
| <td>公司名称</td> | |||
| @@ -44,7 +44,7 @@ | |||
| </tr> | |||
| <tr> | |||
| <td>API Key</td> | |||
| <td><input type="text" name="apikey" id="apikey" class="admin-input-lg" required></td> | |||
| <td><input type="text" name="apikey" id="apikey" class="admin-input-lg" placeholder="模型通信密钥" required><a href="https://www.dedebiz.com/ai?from=dedebiz#models" target="_blank" class="text-success">(获取密钥)</a></td> | |||
| </tr> | |||
| <tr> | |||
| <td>接口地址</td> | |||
| @@ -54,6 +54,7 @@ | |||
| <td colspan="2" align="center"> | |||
| <button type="submit" class="btn btn-success btn-sm">保存</button> | |||
| <button type="reset" class="btn btn-outline-success btn-sm">重置</button> | |||
| <a href="ai_main.php" class="btn btn-outline-success btn-sm">返回</a> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| @@ -45,7 +45,7 @@ | |||
| </tr> | |||
| <tr> | |||
| <td>API Key</td> | |||
| <td><input type="text" name="apikey" id="apikey" class="admin-input-lg" value="<?php echo $myAI['apikey']?>" required></td> | |||
| <td><input type="text" name="apikey" id="apikey" class="admin-input-lg" value="<?php echo $myAI['apikey']?>" required><a href="https://www.dedebiz.com/ai?from=dedebiz#models" target="_blank" class="text-success">(获取密钥)</a></td> | |||
| </tr> | |||
| <tr> | |||
| <td>接口地址</td> | |||
| @@ -88,6 +88,7 @@ | |||
| <td colspan="2" align="center"> | |||
| <button type="submit" class="btn btn-success btn-sm">保存</button> | |||
| <button type="reset" class="btn btn-outline-success btn-sm">重置</button> | |||
| <a href="ai_main.php" class="btn btn-outline-success btn-sm">返回</a> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| @@ -22,6 +22,7 @@ | |||
| <div class="card-body"> | |||
| <a href="ai_add.php" class="btn btn-success btn-sm">添加AI模型</a> | |||
| <a href="ai_model_main.php" class="btn btn-success btn-sm">模型版本</a> | |||
| <a href="https://www.dedebiz.com/help/ai.md" target="_blank" class="btn btn-primary btn-sm">操作说明</a> | |||
| <a href="https://www.dedebiz.com/ai?from=dedebiz#models" target="_blank" class="btn btn-primary btn-sm">模型优选</a> | |||
| </div> | |||
| </div> | |||
| @@ -48,11 +48,11 @@ | |||
| </tr> | |||
| <tr> | |||
| <td width="260">Model</td> | |||
| <td><input type="text" name="model" id="model" value="" class="admin-input-lg" required></td> | |||
| <td><input type="text" name="model" id="model" value="" class="admin-input-lg" placeholder="模型版本名称,例如:deepseek-chat" required><a href="https://www.dedebiz.com/ai?from=dedebiz#models" target="_blank" class="text-success">(获取Model)</a></td> | |||
| </tr> | |||
| <tr> | |||
| <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" placeholder="名称,方便显示查看" required></td> | |||
| </tr> | |||
| <tr> | |||
| <td>排序</td> | |||
| @@ -35,7 +35,7 @@ | |||
| </tr> | |||
| <tr> | |||
| <td width="260">Model</td> | |||
| <td><input type="text" name="model" id="model" value="<?php echo $myModel['model']?>" class="admin-input-lg" required></td> | |||
| <td><input type="text" name="model" id="model" value="<?php echo $myModel['model']?>" class="admin-input-lg" required><a href="https://www.dedebiz.com/ai?from=dedebiz#models" target="_blank" class="text-success">(获取Model)</a></td> | |||
| </tr> | |||
| <tr> | |||
| <td>名称</td> | |||
| @@ -120,7 +120,7 @@ | |||
| <div class="card-header">自由列表管理</div> | |||
| <div class="card-body"> | |||
| <div id="rslist"><?php GetTagList($dsql,$pageno,$pagesize,$orderby);?></div> | |||
| <div id="pagelist"></div> | |||
| <div id="pagelist" class="d-flex justify-content-end"></div> | |||
| <script>ReloadPageNum(1);</script> | |||
| </div> | |||
| </div> | |||
| @@ -154,7 +154,7 @@ | |||
| $addstr='<a href="javascript:resetCookieEncode();" class="btn btn-success btn-sm">更新</a>'; | |||
| } | |||
| if ($row['varname']=='cfg_ai_server') { | |||
| $addstr='<a href="javascript:pingAIServer();" class="btn btn-success btn-sm">检测</a>'; | |||
| $addstr='<a href="javascript:pingAIServer();" class="btn btn-success btn-sm">检测</a><a href="https://www.dedebiz.com/help/ai.md" target="_blank" class="btn btn-outline-success btn-sm"><i class="fa fa-question-circle"></i></a>'; | |||
| } | |||
| if ($row['varname']=='cfg_ai_apikey') { | |||
| $addstr='<a href="javascript:resetAPIKey();" class="btn btn-success btn-sm">更新</a>'; | |||
| @@ -56,7 +56,7 @@ if (empty($typeid)) { | |||
| $typeid = intval($typeid); | |||
| $keyword = addslashes(cn_substr($keyword, 30)); | |||
| $typeid = intval($typeid); | |||
| if ($cfg_notallowstr != '' && preg_match("#".$cfg_notallowstr."#i", $keyword)) { | |||
| if ($keyword != '' && ($cfg_notallowstr != '' && preg_match("#".$cfg_notallowstr."#i", $keyword))) { | |||
| ShowMsg("关键词中存在非法文档,被系统禁止", "-1"); | |||
| exit(); | |||
| } | |||
| @@ -64,10 +64,6 @@ if (($keyword != '' && strlen($keyword) < 2) && empty($typeid)) { | |||
| ShowMsg('您输入关键词太少了,请重新填写', '-1'); | |||
| exit(); | |||
| } | |||
| if (!preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $keyword)) { | |||
| showMsg('您输入关键词不符合,仅支持全中文字符,请重新填写', '-1'); | |||
| exit(); | |||
| } | |||
| //检查搜索间隔时间 | |||
| $ip = GetIP(); | |||
| $now = time(); | |||
| @@ -968,7 +968,6 @@ CREATE TABLE `#@__tagindex` ( | |||
| `id` int(10) NOT NULL AUTO_INCREMENT, | |||
| `tag` varchar(255) NOT NULL DEFAULT '', | |||
| `title` varchar(255) DEFAULT NULL, | |||
| `litpic` varchar(255) DEFAULT NULL, | |||
| `keywords` varchar(255) DEFAULT NULL, | |||
| `description` varchar(255) DEFAULT NULL, | |||
| `typeid` smallint(5) UNSIGNED NOT NULL DEFAULT '0', | |||
| @@ -984,6 +983,14 @@ CREATE TABLE `#@__tagindex` ( | |||
| PRIMARY KEY (`id`) | |||
| ) TYPE=MyISAM; | |||
| DROP TABLE IF EXISTS `#@__tagindex_infos`; | |||
| CREATE TABLE `#@__tagindex_infos` ( | |||
| `tagid` int NOT NULL, | |||
| `litpic` varchar(255) DEFAULT NULL, | |||
| `body` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci, | |||
| PRIMARY KEY (`tagid`) | |||
| ) TYPE=MyISAM; | |||
| DROP TABLE IF EXISTS `#@__taglist`; | |||
| CREATE TABLE `#@__taglist` ( | |||
| `tid` int(10) unsigned NOT NULL default '0', | |||
| @@ -637,6 +637,10 @@ body.menu-show .admin-content { | |||
| max-width:80px; | |||
| max-height:80px | |||
| } | |||
| .thumbnail-mini { | |||
| max-width:32px; | |||
| max-height:32px | |||
| } | |||
| .admin-win { | |||
| background:var(--bg); | |||
| border:1px solid var(--gray-300)!important | |||
| @@ -655,6 +659,10 @@ body.menu-show .admin-content { | |||
| width:100%; | |||
| height:90px!important | |||
| } | |||
| .admin-textarea-mini { | |||
| width:190px; | |||
| height:40px | |||
| } | |||
| .admin-textarea-sm { | |||
| width:350px; | |||
| height:60px | |||
| @@ -65,9 +65,10 @@ class TagList | |||
| exit(); | |||
| } | |||
| $this->Fields['title'] = empty($this->TagInfos['title']) ? $this->TagInfos['tag'] : $this->TagInfos['title']; | |||
| $this->Fields['litpic'] = empty($this->TagInfos['litpic']) ? $this->TagInfos['litpic'] : $this->TagInfos['litpic']; | |||
| $this->Fields['keywords'] = empty($this->TagInfos['keywords']) ? $this->Fields['keywords'] : $this->TagInfos['keywords']; | |||
| $this->Fields['description'] = empty($this->TagInfos['description']) ? $this->Fields['description'] : $this->TagInfos['description']; | |||
| $addInfos = $this->dsql->GetOne("SELECT * FROM `#@__tagindex_infos` WHERE tagid='{$this->Tag}' "); | |||
| $this->Fields['litpic'] = empty($addInfos['litpic']) ? $addInfos['litpic'] : $addInfos['litpic']; | |||
| } | |||
| //初始化模板 | |||
| $tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style'].'/'.$this->Templet; | |||
| @@ -105,6 +105,10 @@ class DataListCP | |||
| } | |||
| $this->pageNO = $pageno; | |||
| $this->totalResult = $totalresult; | |||
| if (isset($GLOBALS['pagesize'])) { | |||
| $this->pagesize = $GLOBALS['pagesize']; | |||
| $this->SetParameter('pagesize', $this->pagesize); | |||
| } | |||
| if (isset($this->tpl->tpCfgs['pagesize'])) { | |||
| $this->pagesize = $this->tpl->tpCfgs['pagesize']; | |||
| } | |||
| @@ -178,19 +182,19 @@ class DataListCP | |||
| $prepagenum = $this->pageNO - 1; | |||
| $nextpagenum = $this->pageNO + 1; | |||
| if (!isset($atts['listsize']) || preg_match("#[^0-9]#", $atts['listsize'])) { | |||
| $atts['listsize'] = 5; | |||
| $atts['listsize'] = 6; | |||
| } | |||
| if (!isset($atts['listitem'])) { | |||
| $atts['listitem'] = "info,index,end,pre,next,pageno"; | |||
| $atts['listitem'] = "pagesize,info,index,end,pre,next,pageno,form"; | |||
| } | |||
| $totalpage = ceil($this->totalResult / $this->pagesize); | |||
| //echo " {$totalpage}=={$this->totalResult}=={$this->pagesize}"; | |||
| //无结果或只有一页的情况 | |||
| if ($totalpage <= 1 && $this->totalResult > 0) { | |||
| return "<ul class='pagination justify-content-center'><li class='page-item disabled'><span class='page-link'>1{$lang_page}".$this->totalResult.$lang_record_number."</span></li></ul>"; | |||
| return "<ul class='pagination justify-content-end'><li class='page-item disabled'><span class='page-link'>1{$lang_page}".$this->totalResult.$lang_record_number."</span></li></ul>"; | |||
| } | |||
| if ($this->totalResult == 0) { | |||
| return "<ul class='pagination justify-content-center'><li class='page-item disabled'><span class='page-link'>0{$lang_page}".$this->totalResult.$lang_record_number."</span></li></ul>"; | |||
| return "<ul class='pagination justify-content-end'><li class='page-item disabled'><span class='page-link'>0{$lang_page}".$this->totalResult.$lang_record_number."</span></li></ul>"; | |||
| } | |||
| $infos = "<li class='page-item disabled'><span class='page-link'>{$totalpage}{$lang_page}/{$this->totalResult}{$lang_record_number}</span></li>"; | |||
| if ($this->totalResult != 0) { | |||
| @@ -200,22 +204,22 @@ class DataListCP | |||
| foreach ($this->getValues as $key => $value) { | |||
| $value = urlencode($value); | |||
| $geturl .= "$key=$value"."&"; | |||
| $hidenform .= "<input type='hidden' name='$key' value='$value' />\n"; | |||
| $hidenform .= "<input type='hidden' name='$key' value='$value'>\r\n"; | |||
| } | |||
| } | |||
| $purl .= "?".$geturl; | |||
| //获得上页和下页的链接 | |||
| if ($this->pageNO != 1) { | |||
| $prepage .= "<li class='page-item'><a class='page-link' href='".$purl."pageno=$prepagenum'>$lang_pre_page</a></li> \n"; | |||
| $indexpage = "<li class='page-item'><a class='page-link' href='".$purl."pageno=1'>$lang_index_page</a></li> \n"; | |||
| $prepage .= "<li class='page-item'><a class='page-link' href='".$purl."pageno=$prepagenum'>$lang_pre_page</a></li>\r\n"; | |||
| $indexpage = "<li class='page-item'><a class='page-link' href='".$purl."pageno=1'>$lang_index_page</a></li>\r\n"; | |||
| } else { | |||
| $indexpage = "<li class='page-item disabled'><span class='page-link'>"."$lang_index_page \n"."</span></li>"; | |||
| } | |||
| if ($this->pageNO != $totalpage && $totalpage > 1) { | |||
| $nextpage .= "<li class='page-item'><a class='page-link' href='".$purl."pageno=$nextpagenum'>$lang_next_page</a></li> \n"; | |||
| $endpage = "<li class='page-item'><a class='page-link' href='".$purl."pageno=$totalpage'>$lang_end_page</a></li> \n"; | |||
| $nextpage .= "<li class='page-item'><a class='page-link' href='".$purl."pageno=$nextpagenum'>$lang_next_page</a></li>\r\n"; | |||
| $endpage = "<li class='page-item'><a class='page-link' href='".$purl."pageno=$totalpage'>$lang_end_page</a></li>\r\n"; | |||
| } else { | |||
| $endpage = " <li class='page-item disabled'><span class='page-link'>$lang_end_page</span></li> \n"; | |||
| $endpage = " <li class='page-item disabled'><span class='page-link'>$lang_end_page</span></li>\r\n"; | |||
| } | |||
| //获得数字链接 | |||
| $listdd = ''; | |||
| @@ -233,10 +237,19 @@ class DataListCP | |||
| } | |||
| } | |||
| for ($j; $j <= $total_list; $j++) { | |||
| $listdd .= $j == $this->pageNO ? "<li class='page-item'><span class='page-link'>$j</span></li>\r\n" : "<li class='page-item'><a class='page-link' href='".$purl."pageno=$j'>".$j."</a></li>\n"; | |||
| $listdd .= $j == $this->pageNO ? "<li class='page-item'><span class='page-link'>$j</span></li>\r\n" : "<li class='page-item'><a class='page-link' href='".$purl."pageno=$j'>".$j."</a></li>\r\n"; | |||
| } | |||
| $plist = "<div class='d-flex justify-content-end'>\r\n"; | |||
| $sizesel = "<select name='pagesize' id='dedepagesize' class='form-control mr-2' style='width:100px'>\r\n"; | |||
| $sizesel .= "<option value='30' ".($this->pagesize == 30 ? "selected='selected'" : "").">30条/页</option>\r\n"; | |||
| $sizesel .= "<option value='50' ".($this->pagesize == 50 ? "selected='selected'" : "").">50条/页</option>\r\n"; | |||
| $sizesel .= "<option value='100' ".($this->pagesize == 100 ? "selected='selected'" : "").">100条/页</option>\r\n"; | |||
| $sizesel .= "<option value='500' ".($this->pagesize == 500 ? "selected='selected'" : "").">500条/页</option>\r\n"; | |||
| $sizesel .= "<option value='1000' ".($this->pagesize == 1000 ? "selected='selected'" : "").">1000条/页</option>\r\n"; | |||
| $sizesel .= "</select><script>document.addEventListener('DOMContentLoaded', function() {var selectElement = document.getElementById('dedepagesize');selectElement.addEventListener('change', function() {var selectedSize = this.value;var url = new URL(window.location.href);url.searchParams.set('pagesize', selectedSize);window.location.href = url.toString();});});</script><ul class='pagination'>\r\n"; | |||
| if (preg_match("#pagesize#i", $atts['listitem'])) { | |||
| $plist .= $sizesel; | |||
| } | |||
| $plist = "<ul class='pagination justify-content-center'>\n"; | |||
| //info,index,end,pre,next,pageno,form | |||
| if (preg_match("#info#i", $atts['listitem'])) { | |||
| $plist .= $infos; | |||
| } | |||
| @@ -256,14 +269,14 @@ class DataListCP | |||
| $plist .= $endpage; | |||
| } | |||
| if (preg_match("#form#i", $atts['listitem'])) { | |||
| $plist .= " <form name='pagelist' action='".$this->GetCurUrl()."'>$hidenform"; | |||
| $plist .= "</ul><form name='pagelist' action='".$this->GetCurUrl()."'>$hidenform"; | |||
| if ($totalpage > $total_list) { | |||
| $plist .= "<input type='text' name='pageno'>\r\n"; | |||
| $plist .= "<input type='submit' name='plistgo' value='GO'>\r\n"; | |||
| $plist .= "<input type='text' name='pageno' class='form-control admin-input-xs ml-2' placeholder='页数'>\r\n"; | |||
| $plist .= "<button type='submit' name='plistgo' class='btn btn-success btn-sm'>跳转</button>\r\n"; | |||
| } | |||
| $plist .= "</form>\n"; | |||
| $plist .= "</form>\r\n"; | |||
| } | |||
| $plist .= "</ul>\n"; | |||
| $plist .= "</div>\r\n"; | |||
| return $plist; | |||
| } | |||
| //获得当前网址 | |||