|
|
@ -114,13 +114,38 @@ var exportDataHook = Cherry.createMenuHook('导出', { |
|
|
|
|
|
|
|
class AiDialogClass { |
|
|
|
actionArr = { |
|
|
|
creation_leader: "生成大纲", |
|
|
|
creation_builder: "根据主题和提纲进行撰写", |
|
|
|
creation_continuation: "续写", |
|
|
|
creation_optimization: "优化", |
|
|
|
creation_proofreading: "纠错", |
|
|
|
creation_summarize: "总结", |
|
|
|
creation_translation: "翻译" |
|
|
|
creation_leader: { |
|
|
|
title: '文章选择', |
|
|
|
btn: ['aiCancle', 'aiOutline'] |
|
|
|
}, |
|
|
|
creation_builder: { |
|
|
|
title: '大纲', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle', 'aiArticle'] |
|
|
|
}, |
|
|
|
article: { |
|
|
|
title: '文章', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle', 'checkOutline'] |
|
|
|
}, |
|
|
|
creation_continuation: { |
|
|
|
title: '续写', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle'] |
|
|
|
}, |
|
|
|
creation_optimization: { |
|
|
|
title: '优化', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle'] |
|
|
|
}, |
|
|
|
creation_proofreading: { |
|
|
|
title: '纠错', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle'] |
|
|
|
}, |
|
|
|
creation_summarize: { |
|
|
|
title: '总结', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle'] |
|
|
|
}, |
|
|
|
creation_translation: { |
|
|
|
title: '翻译', |
|
|
|
btn: ['aiAdd', 'aiReplace', 'aiCancle'] |
|
|
|
} |
|
|
|
} |
|
|
|
buttons = [ |
|
|
|
{ |
|
|
@ -148,7 +173,17 @@ class AiDialogClass { |
|
|
|
action: 'aiArticle', |
|
|
|
method: this.createAiArticle |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '查看大纲', |
|
|
|
action: 'checkOutline', |
|
|
|
method: this.cheakAiContent |
|
|
|
} |
|
|
|
] |
|
|
|
outline = { |
|
|
|
title: '', |
|
|
|
content: '', |
|
|
|
category: '' |
|
|
|
} |
|
|
|
constructor() { |
|
|
|
this.container = document.querySelector('#aiDialog') |
|
|
|
this.createDialog() |
|
|
@ -159,18 +194,37 @@ class AiDialogClass { |
|
|
|
dialog.innerHTML = ` |
|
|
|
<div class="ai-markdown-dialog" style="padding: 0px 15px;"> |
|
|
|
<div class="ai-dialog-title">${this.action}</div> |
|
|
|
<textarea class="ai-dialog-content" readonly></textarea> |
|
|
|
<div class="button-box"> |
|
|
|
<button class="ai-dialog-button" data-type="aiAdd">追加</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiReplace">替换</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiCancle">取消</button> |
|
|
|
<div class="ai-content-box"> |
|
|
|
<div class="ai-mask"><i id="aiLoader"></i></div> |
|
|
|
<textarea class="ai-dialog-content" ></textarea> |
|
|
|
</div> |
|
|
|
<div class="button-box hide"> |
|
|
|
<button class="ai-dialog-button" data-type="aiReplace">生成大纲</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiCancle">取消</button> |
|
|
|
<div class="ai-outline-choose hide"> |
|
|
|
<div> |
|
|
|
<label for="">标题:</label> |
|
|
|
<input id="aiTitle" type="text" placeholder="请输入标题"> |
|
|
|
</div> |
|
|
|
<div> |
|
|
|
<label for="">分类:</label> |
|
|
|
<select name="articleClassification" id="aiSelect"> |
|
|
|
<option value="论文">论文</option> |
|
|
|
<option value="合同">合同</option> |
|
|
|
<option value="项目">项目</option> |
|
|
|
<option value="投标">投标</option> |
|
|
|
<option value="招标">招标</option> |
|
|
|
<option value="散文">散文</option> |
|
|
|
<option value="产品说明">产品说明</option> |
|
|
|
<option value="销售计划">销售计划</option> |
|
|
|
<option value="年度计划">年度计划</option> |
|
|
|
<option value="战略规划">战略规划</option> |
|
|
|
</select> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="button-box hide"> |
|
|
|
<div class="button-box"> |
|
|
|
<button class="ai-dialog-button" data-type="aiOutline">生成大纲</button> |
|
|
|
<button class="ai-dialog-button" id="checkOutline" data-type="checkOutline">修改大纲</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiArticle">生成文章</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiAdd">追加</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiReplace">替换</button> |
|
|
|
<button class="ai-dialog-button" data-type="aiCancle">取消</button> |
|
|
|
</div> |
|
|
|
</div>` |
|
|
@ -182,70 +236,114 @@ class AiDialogClass { |
|
|
|
const actionType = item.getAttribute('data-type') |
|
|
|
const btn = this.buttons.find(item => item.action == actionType) |
|
|
|
if (btn && btn.method) { |
|
|
|
btn.method(this.container) |
|
|
|
btn.method(this.container, this) |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
// 打开弹窗
|
|
|
|
openDialog(action) { |
|
|
|
this.container.classList.remove('hide') |
|
|
|
const title = 'AI - ' + this.actionArr[action].title |
|
|
|
this.container.querySelector('.ai-dialog-title').innerText = title |
|
|
|
this.addButton(action) |
|
|
|
} |
|
|
|
// 添加不同按钮
|
|
|
|
// 根据不同选择,展示不同弹窗
|
|
|
|
addButton(action) { |
|
|
|
let pos = 0 |
|
|
|
action == '大纲' ? pos = 1 : pos = 0 |
|
|
|
const btnArr = Array.from(this.container.querySelectorAll('.button-box')) |
|
|
|
for (let i = 0; i < btnArr.length; i++) { |
|
|
|
if (i == pos) { |
|
|
|
btnArr[i].classList.remove('hide') |
|
|
|
}else { |
|
|
|
btnArr[i].classList.add('hide') |
|
|
|
if (action == 'creation_leader') { |
|
|
|
this.container.querySelector('.ai-outline-choose').classList.remove('hide') |
|
|
|
this.container.querySelector('.ai-content-box').classList.add('hide') |
|
|
|
} else { |
|
|
|
this.container.querySelector('.ai-outline-choose').classList.add('hide') |
|
|
|
this.container.querySelector('.ai-content-box').classList.remove('hide') |
|
|
|
this.container.querySelector('.ai-mask').classList.remove('hide') |
|
|
|
} |
|
|
|
const buttonArr = Array.from(this.container.querySelectorAll('.ai-dialog-button')) |
|
|
|
buttonArr.forEach(item => { |
|
|
|
const actionType = item.getAttribute('data-type') |
|
|
|
if (this.actionArr[action].btn.indexOf(actionType) !== -1) { |
|
|
|
item.classList.remove('hide') |
|
|
|
} else { |
|
|
|
item.classList.add('hide') |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
// 点击不同按钮生成不同弹窗
|
|
|
|
showDialog(action, content) { |
|
|
|
// 将内容放入textarea中
|
|
|
|
putInTextarea(action, content) { |
|
|
|
// this.sendRequest(action,content)
|
|
|
|
this.container.querySelector('textarea').value = content |
|
|
|
this.addButton(action) |
|
|
|
this.container.querySelector('.ai-mask').classList.add('hide') |
|
|
|
} |
|
|
|
// 发送请求
|
|
|
|
sendRequest(action, data) { |
|
|
|
let title = 'ai助手' |
|
|
|
Object.keys(this.actionArr).forEach(item => { |
|
|
|
if (item == action) { |
|
|
|
title = 'AI' + this.actionArr[item] |
|
|
|
} |
|
|
|
}) |
|
|
|
this.container.querySelector('.ai-dialog-title').innerText = title |
|
|
|
window.parent.postMessage({ |
|
|
|
type: 'aiCreater', |
|
|
|
data, |
|
|
|
action |
|
|
|
}, '*') |
|
|
|
this.container.classList.remove('hide') |
|
|
|
if (action !== 'creation_leader') { |
|
|
|
window.parent.postMessage({ |
|
|
|
type: 'aiCreater', |
|
|
|
data, |
|
|
|
action |
|
|
|
}, '*') |
|
|
|
} |
|
|
|
this.openDialog(action) |
|
|
|
} |
|
|
|
// 关闭弹窗
|
|
|
|
closeDialog(dialog) { |
|
|
|
dialog.querySelector('textarea').value = '' |
|
|
|
this.outline = { |
|
|
|
title: '', |
|
|
|
content: '', |
|
|
|
category: '' |
|
|
|
} |
|
|
|
dialog?.classList.add('hide') |
|
|
|
} |
|
|
|
// 追加
|
|
|
|
addAiContent(dialog) { |
|
|
|
addAiContent(dialog, that) { |
|
|
|
const content = dialog.querySelector('textarea').value |
|
|
|
// cherry.insert(content,false)
|
|
|
|
cherry.setMarkdown(content) |
|
|
|
// this.closeDialog(dialog)
|
|
|
|
cherry.insert(content,false) |
|
|
|
that.closeDialog(dialog) |
|
|
|
} |
|
|
|
// 替换
|
|
|
|
replaceAiContent() { |
|
|
|
console.log('替换'); |
|
|
|
|
|
|
|
replaceAiContent(dialog, that) { |
|
|
|
const content = dialog.querySelector('textarea').value |
|
|
|
cherry.setMarkdown(content) |
|
|
|
that.closeDialog(dialog) |
|
|
|
} |
|
|
|
// 生成大纲
|
|
|
|
createAiOutline() { |
|
|
|
console.log('生成大纲'); |
|
|
|
|
|
|
|
createAiOutline(dialog, that) { |
|
|
|
that.addButton('creation_leader') |
|
|
|
const content = { |
|
|
|
title: dialog.querySelector('#aiTitle').value, |
|
|
|
category: dialog.querySelector('#aiSelect').value |
|
|
|
} |
|
|
|
that.outline.title = content.title |
|
|
|
that.outline.category = content.category |
|
|
|
if (content.title !== '' ) { |
|
|
|
window.parent.postMessage({ |
|
|
|
type: 'aiCreater', |
|
|
|
data: content, |
|
|
|
action: 'creation_leader' |
|
|
|
}, '*') |
|
|
|
that.openDialog('creation_builder') |
|
|
|
} |
|
|
|
} |
|
|
|
// 生成文章
|
|
|
|
createAiArticle() { |
|
|
|
console.log('生成文章'); |
|
|
|
createAiArticle(dialog, that) { |
|
|
|
const data = { |
|
|
|
outline: dialog.querySelector('textarea').value, |
|
|
|
title: that.outline.title || 'AI - 文章' |
|
|
|
} |
|
|
|
that.outline.content = data.outline |
|
|
|
window.parent.postMessage({ |
|
|
|
type: 'aiCreater', |
|
|
|
data, |
|
|
|
action: 'creation_builder' |
|
|
|
}, '*') |
|
|
|
that.openDialog('article') |
|
|
|
} |
|
|
|
//查看大纲
|
|
|
|
cheakAiContent(dialog, that) { |
|
|
|
that.openDialog('creation_builder') |
|
|
|
dialog.querySelector('textarea').value = that.outline.content |
|
|
|
dialog.querySelector('.ai-mask').classList.add('hide') |
|
|
|
} |
|
|
|
} |
|
|
|
const aiDialog = new AiDialogClass() |
|
|
@ -255,7 +353,6 @@ var aiEditMenu = Cherry.createMenuHook('AI', { |
|
|
|
noIcon: true, |
|
|
|
name: '优化', |
|
|
|
onclick: () => { |
|
|
|
console.log(' AI优化', cherry.getMarkdown()); |
|
|
|
aiDialog.sendRequest('creation_optimization', cherry.getMarkdown()) |
|
|
|
} |
|
|
|
}, |
|
|
@ -291,6 +388,7 @@ var aiEditMenu = Cherry.createMenuHook('AI', { |
|
|
|
noIcon: true, |
|
|
|
name: '大纲', |
|
|
|
onclick: () => { |
|
|
|
// aiDialog.showDialog()
|
|
|
|
aiDialog.sendRequest('creation_leader', cherry.getMarkdown()) |
|
|
|
} |
|
|
|
} |
|
|
@ -581,7 +679,7 @@ const eventHandler = (e) => { |
|
|
|
cherry.setMarkdown(content); |
|
|
|
} |
|
|
|
if (eventData.type == 'aiReciver') { |
|
|
|
aiDialog.showDialog(eventData.action, eventData.data) |
|
|
|
aiDialog.putInTextarea(eventData.action, eventData.data) |
|
|
|
} |
|
|
|
} |
|
|
|
window.addEventListener('load', () => { |
|
|
|