|
@@ -170,17 +170,17 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
<script>
|
|
- // 自定义模块,这里只需要开放soulTable即可
|
|
|
|
|
|
+ // 自定义模块
|
|
layui.config({
|
|
layui.config({
|
|
- base: '/layui/modules/' // 第三方模块所在目录
|
|
|
|
- , layimResPath: '/layui/modules/layim/dist/layim-assets/'
|
|
|
|
|
|
+ base: '/layui/modules/' // LayUI第三方模块所在目录
|
|
|
|
+ , layimResPath: '/layui/modules/layim/dist/layim-assets/' // LayIM模块资源存放路径
|
|
}).extend({
|
|
}).extend({
|
|
soulTable: 'soulTable/soulTable',
|
|
soulTable: 'soulTable/soulTable',
|
|
tableChild: 'soulTable/tableChild',
|
|
tableChild: 'soulTable/tableChild',
|
|
tableMerge: 'soulTable/tableMerge',
|
|
tableMerge: 'soulTable/tableMerge',
|
|
tableFilter: 'soulTable/tableFilter',
|
|
tableFilter: 'soulTable/tableFilter',
|
|
excel: 'soulTable/excel',
|
|
excel: 'soulTable/excel',
|
|
- layim: 'layim/dist/layim'
|
|
|
|
|
|
+ layim: 'layim/dist/layim' // 导入LayIM模块
|
|
});
|
|
});
|
|
|
|
|
|
//JS
|
|
//JS
|
|
@@ -224,13 +224,30 @@
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 页面加载初始化时触发
|
|
$(function () {
|
|
$(function () {
|
|
|
|
+ /* 删除之前的聊天记录 */
|
|
|
|
+ let cache = layui.layim.cache();
|
|
|
|
+ let local = layui.data('layim')[cache.mine.id]; //获取当前用户本地数据
|
|
|
|
+ //删除本地聊天记录
|
|
|
|
+ delete local.chatlog;
|
|
|
|
+ //向localStorage同步数据
|
|
|
|
+ layui.data('layim', {
|
|
|
|
+ key: cache.mine.id
|
|
|
|
+ ,value: local
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // 初始化时最小化聊天窗口
|
|
layim.setChatMin();
|
|
layim.setChatMin();
|
|
- //【增】:向 chatgpt 表插入一个 myprompt 字段,如果该表不存在,则自动建立。
|
|
|
|
|
|
+ // 设置聊天状态,此处作为初始化提示
|
|
|
|
+ layim.setChatStatus('<span style="color:#2678b3;">tips: 国外服务加载较慢,请耐心等待哦~</span>');
|
|
|
|
+
|
|
|
|
+ // 向 chatgpt 表插入一个 myprompt 字段,如果该表不存在,则自动建立,用于存储聊天上下文
|
|
layui.sessionData('chatgpt', {
|
|
layui.sessionData('chatgpt', {
|
|
key: 'myprompt'
|
|
key: 'myprompt'
|
|
, value: ''
|
|
, value: ''
|
|
});
|
|
});
|
|
|
|
+
|
|
flashPages();
|
|
flashPages();
|
|
clipboard = new ClipboardJS('.js-clipboard');
|
|
clipboard = new ClipboardJS('.js-clipboard');
|
|
clipboard.on('success', function (e) {
|
|
clipboard.on('success', function (e) {
|
|
@@ -243,7 +260,7 @@
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
- //提交
|
|
|
|
|
|
+ // 提交同步元素请求
|
|
form.on('submit(formSubmit)', function (data) {
|
|
form.on('submit(formSubmit)', function (data) {
|
|
const loading = layer.load(2);
|
|
const loading = layer.load(2);
|
|
$.ajax({
|
|
$.ajax({
|
|
@@ -281,6 +298,7 @@
|
|
return false;
|
|
return false;
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ // 提交搜索请求
|
|
form.on('submit(search)', function (data) {
|
|
form.on('submit(search)', function (data) {
|
|
data.field["elementType"] = elementType;
|
|
data.field["elementType"] = elementType;
|
|
data.field["pageID"] = pageID;
|
|
data.field["pageID"] = pageID;
|
|
@@ -378,10 +396,10 @@
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ // LayIM模块配置,并创建一个简约的聊天窗口
|
|
layim.config({
|
|
layim.config({
|
|
brief: true //是否简约模式(如果true则不显示主面板)
|
|
brief: true //是否简约模式(如果true则不显示主面板)
|
|
- , minRight: '370px'
|
|
|
|
- , isfriend: true
|
|
|
|
|
|
+ , minRight: '370px' // 用户控制聊天面板最小化时、及新消息提示层的相对right的px坐标。
|
|
}).chat({
|
|
}).chat({
|
|
name: 'ChatGPT'
|
|
name: 'ChatGPT'
|
|
, type: 'friend'
|
|
, type: 'friend'
|
|
@@ -389,22 +407,28 @@
|
|
, id: -2
|
|
, id: -2
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ // 发送消息事件
|
|
layim.on('sendMessage', function (res) {
|
|
layim.on('sendMessage', function (res) {
|
|
|
|
+ /* 获取聊天中对方的信息,并将状态装换为输入中 */
|
|
let To = res.to;
|
|
let To = res.to;
|
|
if(To.type === 'friend'){
|
|
if(To.type === 'friend'){
|
|
layim.setChatStatus('<span style="color:#ffa502;">(๑・`◡´・๑) 正在努力输入…</span>');
|
|
layim.setChatStatus('<span style="color:#ffa502;">(๑・`◡´・๑) 正在努力输入…</span>');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* 获取聊天中自己的信息 */
|
|
let Mine = res.mine;
|
|
let Mine = res.mine;
|
|
|
|
+ /* 读取sessionData中的上下文,并将本次的问题添加到上下文后面 */
|
|
let localChatGPT = layui.sessionData('chatgpt');
|
|
let localChatGPT = layui.sessionData('chatgpt');
|
|
layui.sessionData('chatgpt', {
|
|
layui.sessionData('chatgpt', {
|
|
key: 'myprompt'
|
|
key: 'myprompt'
|
|
, value: localChatGPT.myprompt + " Q1:" + Mine.content
|
|
, value: localChatGPT.myprompt + " Q1:" + Mine.content
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ /* 发送ChatGPT请求,获取回答 */
|
|
$.ajax({
|
|
$.ajax({
|
|
type: 'post',
|
|
type: 'post',
|
|
url: 'https://api.openai.com/v1/completions',
|
|
url: 'https://api.openai.com/v1/completions',
|
|
|
|
+ // sk-xxxxxxxxx为OpenAI的api-key,每个账号有18美元的免费额度
|
|
headers: {
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"Content-Type": "application/json",
|
|
"Authorization": "Bearer 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"
|
|
"Authorization": "Bearer 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"
|
|
@@ -416,19 +440,23 @@
|
|
"model": "text-davinci-003"
|
|
"model": "text-davinci-003"
|
|
}),
|
|
}),
|
|
success: function (res) {
|
|
success: function (res) {
|
|
|
|
+ // 将ChatGPT的回答添加到上下文中
|
|
layui.sessionData('chatgpt', {
|
|
layui.sessionData('chatgpt', {
|
|
key: 'myprompt'
|
|
key: 'myprompt'
|
|
, value: layui.sessionData('chatgpt').myprompt + " A1:" + res.choices[0].text
|
|
, value: layui.sessionData('chatgpt').myprompt + " A1:" + res.choices[0].text
|
|
});
|
|
});
|
|
|
|
+ // 取消输入中状态,变为在线状态
|
|
layim.setChatStatus('<span style="color:#2ed573;">o( ̄▽ ̄)d 在线</span>');
|
|
layim.setChatStatus('<span style="color:#2ed573;">o( ̄▽ ̄)d 在线</span>');
|
|
|
|
+ // 回答可能为空,需要做下判断
|
|
if (res.choices[0].text.trim().length != 0) {
|
|
if (res.choices[0].text.trim().length != 0) {
|
|
|
|
+ // 接受消息
|
|
layim.getMessage({
|
|
layim.getMessage({
|
|
username: To.name //消息来源用户名
|
|
username: To.name //消息来源用户名
|
|
, avatar: To.avatar //消息来源用户头像
|
|
, avatar: To.avatar //消息来源用户头像
|
|
, id: To.id //消息的来源ID(如果是私聊,则是用户id,如果是群聊,则是群组id)
|
|
, id: To.id //消息的来源ID(如果是私聊,则是用户id,如果是群聊,则是群组id)
|
|
, type: To.type //聊天窗口来源类型,从发送消息传递的to里面获取
|
|
, type: To.type //聊天窗口来源类型,从发送消息传递的to里面获取
|
|
- , content: res.choices[0].text.trim().replace(/A1:/g, '').replace(/A1:/g, '') //消息内容
|
|
|
|
- , fromid: To.id //消息的发送者id(比如群组中的某个消息发送者),可用于自动解决浏览器多窗口时的一些问题
|
|
|
|
|
|
+ , content: res.choices[0].text.replace(/A1:/g, '').replace(/A1:/g, '').trim() //消息内容
|
|
|
|
+ , fromid: To.id //消息的发送者id(比如群组中的某个消息发送者),可用于自动解决浏览器多窗口时的一些问题,不加会导致回答出现在聊天窗口的右边
|
|
, mine: false //是否我发送的消息,如果为true,则会显示在右方
|
|
, mine: false //是否我发送的消息,如果为true,则会显示在右方
|
|
});
|
|
});
|
|
} else {
|
|
} else {
|
|
@@ -454,11 +482,6 @@
|
|
}
|
|
}
|
|
})
|
|
})
|
|
});
|
|
});
|
|
-
|
|
|
|
- layim.on('chatChange', function(obj){
|
|
|
|
- console.log("页面变化");
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|
|
</body>
|
|
</body>
|