国内流行的内容管理系统(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.

114 line
4.4KB

  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 if(!empty($myPrompt['info'])){?>
  26. <div class="alert alert-warning">
  27. <?php echo $myPrompt['info']?>
  28. </div>
  29. <?php }?>
  30. <table class="table table-borderless">
  31. <tbody>
  32. <tr>
  33. <td width="260">名称</td>
  34. <td><?php echo $myPrompt['pname']?><?php echo $myPrompt['title']?></td>
  35. </tr>
  36. <tr>
  37. <td>提示词</td>
  38. <td><textarea name="prompt" id="prompt" class="admin-textarea-sm" style="height:160px" placeholder="填写您的要求,默认:<?php echo $myPrompt['dfprompt']?>"></textarea></td>
  39. </tr>
  40. <tr>
  41. <td>选择模型</td>
  42. <td>
  43. <select id="modelid" class="admin-input-sm">
  44. <?php
  45. $dsql->SetQuery("SELECT AM.*,A.title as aititle FROM `#@__ai_model` AM LEFT JOIN `#@__ai` A ON A.id = AM.aiid ORDER BY id");
  46. $dsql->Execute();
  47. while ($row = $dsql->GetObject()) {
  48. ?>
  49. <option value="<?php echo $row->id;?>" <?php echo $row->isdefault==1?' selected' : '';?>><?php echo $row->model;?> <?php echo $row->aititle;?></option>
  50. <?php }?>
  51. </select>
  52. <button type="button" id="btnAIAction" class="btn btn-success btn-sm">AI生成</button>
  53. </td>
  54. </tr>
  55. <tr>
  56. <td>结果</td>
  57. <td><textarea name="result" id="result" class="admin-textarea-sm" style="height:160px"></textarea></td>
  58. </tr>
  59. <tr>
  60. <td colspan="2" align="center"><a href="ai_prompt_main.php" class="btn btn-outline-success btn-sm">返回</a></td>
  61. </tr>
  62. </tbody>
  63. </table>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <script>
  69. let eventSource; //保存EventSource实例
  70. let modelid = 0;
  71. $("#btnAIAction").click(async function() {
  72. let prompt = document.getElementById("prompt").value;
  73. let modelid = document.getElementById("modelid").value;
  74. let req = await fetch(`api.php?action=get_ai_server&pname=<?php echo $myPrompt['pname']?>&modelid=${modelid}&prompt=${prompt}`);
  75. let resp = await req.json();
  76. if (resp.code !== 0) {
  77. ShowMsg("获取服务器地址失败");
  78. return
  79. }
  80. let eventSource = new EventSource(resp.data);
  81. //新增状态跟踪变量
  82. let currentKey = null;
  83. let tagBuffer = "";
  84. let isClosingTag = false;
  85. $("#btnAI").attr("disabled", "disabled");
  86. prompt = "";
  87. let lastChar = "";
  88. const input = document.querySelector(`[name="result"]`);
  89. input.value = "";
  90. eventSource.onmessage = (event) => {
  91. $(input).prop("disabled", true).addClass("disabled");
  92. const msg = event.data;
  93. input.value += msg;
  94. };
  95. eventSource.onerror = (error) => {
  96. if (error.target.readyState === EventSource.CONNECTING) {
  97. ShowMsg("连接失败,请确保您已开启并正确配置了DedeBIZ小德AI助手。 <a class='text-success' href='https://www.dedebiz.com/ai?from=dedebiz' target='_blank'>如何配置?</a>");
  98. } else if (typeof error.data!=="undefined" && error.data !== "" && error.target.readyState !== EventSource.CLOSED) {
  99. ShowMsg(error.data);
  100. }
  101. $("#btnAI").prop("disabled", false);
  102. eventSource.close();
  103. };
  104. //监听特定事件close
  105. eventSource.addEventListener('close', (event) => {
  106. console.log('SSE connection closed:', event.data);
  107. $("#btnAI").prop("disabled", false);
  108. $(input).prop("disabled", false);
  109. eventSource.close(); //关闭连接
  110. });
  111. });
  112. </script>
  113. </body>
  114. </html>