国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
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.

131 line
4.6KB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
  6. <title>预览提示词</title>
  7. <link rel="stylesheet" href="/static/web/css/font-awesome.min.css">
  8. <link rel="stylesheet" href="/static/web/css/bootstrap.min.css">
  9. <link rel="stylesheet" href="/static/web/css/admin.css">
  10. <script src="/static/web/js/jquery.min.js"></script>
  11. <script src="/static/web/js/bootstrap.min.js"></script>
  12. <script src="/static/web/js/admin.main.js"></script>
  13. </head>
  14. <body>
  15. <div class="container-fluid">
  16. <ol class="breadcrumb">
  17. <li class="breadcrumb-item"><a href="index_body.php">后台面板</a></li>
  18. <li class="breadcrumb-item"><a href="ai_prompt_main.php">提示词管理</a></li>
  19. <li class="breadcrumb-item active">预览提示词</li>
  20. </ol>
  21. <div class="card shadow-sm">
  22. <div class="card-header">预览提示词</div>
  23. <div class="card-body">
  24. <div class="table-responsive">
  25. <?php
  26. if(!empty($myPrompt['info'])){
  27. ?>
  28. <div class="alert alert-warning">
  29. <?php echo $myPrompt['info']?>
  30. </div>
  31. <?php
  32. }
  33. ?>
  34. <table class="table table-borderless">
  35. <tbody>
  36. <tr>
  37. <td width="260">名称</td>
  38. <td>
  39. [<?php echo $myPrompt['pname']?>]<?php echo $myPrompt['title']?>
  40. </td>
  41. </tr>
  42. <tr>
  43. <td>提示词</td>
  44. <td>
  45. <textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height: 100px;" placeholder="填写您的要求,默认:<?php echo $myPrompt['dfprompt']?>"></textarea>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td>选择模型</td>
  50. <td>
  51. <select id="modelid" class="admin-input-sm">
  52. <?php
  53. $dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
  54. $dsql->Execute();
  55. while ($row = $dsql->GetObject()) {
  56. ?>
  57. <option value="<?php echo $row->id;?>"<?php echo $row->isdefault==1?' selected' : '';?>><?php echo $row->model;?>(<?php echo $row->aititle;?>)</option>
  58. <?php
  59. }
  60. ?>
  61. </select>
  62. </td>
  63. </tr>
  64. <tr>
  65. <td></td>
  66. <td>
  67. <button type="button" id="btnAIAction" class="btn btn-success btn-sm">AI生成</button>
  68. <a href="ai_prompt_main.php" class="btn btn-outline-success btn-sm">返回</a>
  69. </td>
  70. </tr>
  71. <tr>
  72. <td>结果</td>
  73. <td><textarea name="result" id="result" class="admin-textarea-sm" style="height: 200px;"></textarea></td>
  74. </tr>
  75. </tbody>
  76. </table>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. <script>
  82. let eventSource; // 保存 EventSource 实例
  83. let modelid = 0;
  84. $("#btnAIAction").click(async function() {
  85. let prompt = document.getElementById("prompt").value;
  86. let modelid = document.getElementById("modelid").value;
  87. let req = await fetch(`api.php?action=get_ai_server&pname=<?php echo $myPrompt['pname']?>&modelid=${modelid}&prompt=${prompt}`);
  88. let resp = await req.json();
  89. if (resp.code !== 0) {
  90. ShowMsg("获取服务器地址失败");
  91. return
  92. }
  93. let eventSource = new EventSource(resp.data);
  94. // 新增状态跟踪变量
  95. let currentKey = null;
  96. let tagBuffer = "";
  97. let isClosingTag = false;
  98. $("#btnAI").attr("disabled", "disabled");
  99. prompt = "";
  100. let lastChar = "";
  101. const input = document.querySelector(`[name="result"]`);
  102. input.value = "";
  103. eventSource.onmessage = (event) => {
  104. $(input).prop("disabled", true).addClass("disabled");
  105. const msg = event.data;
  106. input.value += msg;
  107. };
  108. eventSource.onerror = (error) => {
  109. if (error.target.readyState === EventSource.CONNECTING) {
  110. ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ智能助手服务器。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
  111. } else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
  112. ShowMsg(error.data);
  113. }
  114. $("#btnAI").prop("disabled", false);
  115. eventSource.close();
  116. };
  117. // 监听特定事件 "close"
  118. eventSource.addEventListener('close', (event) => {
  119. console.log('SSE connection closed:', event.data);
  120. $("#btnAI").prop("disabled", false);
  121. $(input).prop("disabled", false);
  122. eventSource.close(); // 关闭连接
  123. });
  124. });
  125. </script>
  126. </body>
  127. </html>