import { useEditor } from "@/modules/editor"; import { CloseOutlined } from "@ant-design/icons-vue"; import { defineComponent, reactive } from "vue"; import { Button, Input, message } from "ant-design-vue"; import { css } from "@linaria/core"; import { queenApi } from "queenjs"; export default defineComponent({ emits: ["visible"], setup(props, { emit }) { const { store, actions } = useEditor(); const state = reactive({ loading: false, inputValue: "", aiValue: "", boxFocus: false, generated: false, }); const generateWord = () => { if (state.loading) { return; } state.loading = true; const reqData = { model: "gpt-3.5-turbo", messages: [ { role: "user", content: state.inputValue, }, ], }; const xhr = new XMLHttpRequest(); xhr.open( "post", "https://186b2d5554134321a0afd4b1be443273.apig.ap-southeast-1.huaweicloudapis.com/chatgpt" ); xhr.setRequestHeader("content-type", "application/json"); xhr.send(JSON.stringify(reqData)); xhr.onload = function (e: any) { let result = e.target?.responseText; try { result = JSON.parse(result); const { choices } = result; const message = choices[0].message.content; state.aiValue = message; state.generated = true; } catch (e) { queenApi.messageError("生成失败!"); console.log(e); } finally { state.loading = false; } }; xhr.onerror = (e: any) => { queenApi.messageError("生成失败!"); console.log(e); state.loading = false; }; }; const addText = async () => { const aitext = `

${state.aiValue}

`; await actions.clickCompToDesign("Text", (comp) => { actions.updateCompData(comp, "value", aitext); }); }; return () => (
AI提示词 { emit("visible", false); }} />
{ if (state.inputValue.length >= 1000) { return; } state.inputValue = e.target.value || ""; }} onFocus={() => { state.boxFocus = true; }} onBlur={() => { state.boxFocus = false; }} autoSize={{ minRows: 3, maxRows: 6 }} placeholder={"请输入关键词,AI将自动帮您生成对应文案"} />
{state.inputValue.length}/1000
结果生成
{state.generated ? ( ) : ( )} {state.generated && ( )}
); }, }); const AIStyle = css` border-radius: 4px; box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2); background-color: rgba(38, 38, 38, 0.95); color: #fff; .input_box, .result_text { position: relative; background-color: rgba(255, 255, 255, 0.2); border-radius: 4px; .ai_input { color: #fff; font-size: 12px; border-color: transparent; &:hover, &:focus { border-color: transparent; box-shadow: none; } &::placeholder { color: #fff; } } } .input_box { border: 1px solid transparent; &.focus, &:hover { border-color: @inf-primary-color; } } .fade_input { color: @inf-primary-color; border-color: @inf-primary-fade-color; background-color: @inf-primary-fade-color; } `;