diff --git a/module/ai/lang/en.php b/module/ai/lang/en.php index 923d650196..8bb4d017c8 100644 --- a/module/ai/lang/en.php +++ b/module/ai/lang/en.php @@ -111,6 +111,10 @@ $lang->ai->prompts->addRoleTemplate = 'Add Role Template'; $lang->ai->prompts->editRoleTemplate = 'Edit Role Template'; $lang->ai->prompts->roleAddedSuccess = 'Role added successfully.'; $lang->ai->prompts->roleDelConfirm = 'Deleting the role does not affect the role that is already in the prompt. Do you want to delete it?'; +$lang->ai->prompts->roleTemplateSave = 'Save Role Template'; +$lang->ai->prompts->roleTemplateSaveList = array(); +$lang->ai->prompts->roleTemplateSaveList['save'] = 'Save'; +$lang->ai->prompts->roleTemplateSaveList['discard'] = 'Discard'; /* Data source selecting. */ $lang->ai->prompts->selectData = 'Select fields'; diff --git a/module/ai/lang/zh-cn.php b/module/ai/lang/zh-cn.php index a2247a689a..e684f05785 100644 --- a/module/ai/lang/zh-cn.php +++ b/module/ai/lang/zh-cn.php @@ -111,6 +111,10 @@ $lang->ai->prompts->addRoleTemplate = '添加角色模板'; $lang->ai->prompts->editRoleTemplate = '编辑角色模板'; $lang->ai->prompts->roleAddedSuccess = '角色模版保存成功'; $lang->ai->prompts->roleDelConfirm = '删除不会影响已用角色模版的提词,是否删除?'; +$lang->ai->prompts->roleTemplateSave = '存为角色模板'; +$lang->ai->prompts->roleTemplateSaveList = array(); +$lang->ai->prompts->roleTemplateSaveList['save'] = '保存'; +$lang->ai->prompts->roleTemplateSaveList['discard'] = '不保存'; /* Data source selecting. */ $lang->ai->prompts->selectData = '选择字段'; diff --git a/module/ai/view/promptassignrole.html.php b/module/ai/view/promptassignrole.html.php index e65d76f6f0..93f8e4a62a 100644 --- a/module/ai/view/promptassignrole.html.php +++ b/module/ai/view/promptassignrole.html.php @@ -44,6 +44,10 @@
ai->prompts->characterization;?>
characterization, "class='form-control' rows='4' placeholder='{$lang->ai->prompts->charPlaceholder}'");?>
+
+
ai->prompts->roleTemplateSave;?>
+
ai->prompts->roleTemplateSaveList, 'discard');?>
+
ai->nextStep, 'disabled name="jumpToNext" value="1"');?>
@@ -131,116 +135,141 @@ function validateForm() return pass; } -$(function () { - $('[data-toggle="tooltip"]').tooltip(); - - $('select[name="model"]').change(function () { - var model = $(this).val(); - if (model) $('button[type="submit"]').removeAttr('disabled'); - if (!model) $('button[type="submit"]').attr('disabled', 'disabled'); - }); - $('select[name="model"]').trigger('change'); -}); - -$('#createRoleButton').on('click', function(e) +(function () { - e.preventDefault(); - const formData = new FormData(document.getElementById('createRoleForm')); - $.ajax({ - url: createLink('ai', 'roleTemplates'), - type: 'POST', - data: {method: 'create', role: formData.get('role'), characterization: formData.get('characterization')}, - dataType: 'html', - success: function(response) + let roleId = null; + + $(function () { + $('[data-toggle="tooltip"]').tooltip(); + + $('select[name="model"]').change(function () { - new $.zui.Messager('ai->prompts->roleAddedSuccess; ?>', {type: 'success'}).show(); - $('#roleList').html($($.parseHTML(response)).filter('#roleList').html()); - } + var model = $(this).val(); + if (model) $('button[type="submit"]').removeAttr('disabled'); + if (!model) $('button[type="submit"]').attr('disabled', 'disabled'); + }); + $('select[name="model"]').trigger('change'); }); -}); -$('#editRoleButton').on('click', function(e) -{ - e.preventDefault(); - const formData = new FormData(document.getElementById('editRoleForm')); - $.ajax({ - url: createLink('ai', 'roleTemplates'), - type: 'POST', - data: {method: 'edit', id: formData.get('id'), role: formData.get('role'), characterization: formData.get('characterization')}, - dataType: 'html', - success: function(response) - { - new $.zui.Messager('ai->prompts->roleAddedSuccess; ?>', {type: 'success'}).show(); - $('#roleList').html($($.parseHTML(response)).filter('#roleList').html()); - } - }); -}); - -$('#roleListContainer').on('click', function (e) -{ - const button = e.target.closest('#roleListContainer button'); - if(!button) return; - const card = button.closest('.role-template-card'); - if(!card) return; - if(!'id' in card.dataset || !'action' in button.dataset) return; - e.preventDefault(); - - const id = card.dataset.id; - - switch (button.dataset.action) + $('#createRoleButton').on('click', function (e) { - case 'apply': - { - $('#mainForm input[name="role"]').val(card.querySelector('#role').innerText).toggleClass('focus', true); - $('#mainForm textarea[name="characterization"]').val(card.querySelector('#characterization').innerText).toggleClass('focus', true); - setTimeout(() => - { - $('#mainForm input[name="role"]').toggleClass('focus', false); - $('#mainForm textarea[name="characterization"]').toggleClass('focus', false); - }, 1000); - break; - } - case 'edit': - { - const model = $('#editRoleTemplateModal'); - model.find('input[name="id"]').val(id); - model.find('#role').val(card.querySelector('#role').innerText); - model.find('#characterization').val(card.querySelector('#characterization').innerText); - model.modal('toggle'); - break; - } - case 'del': - { - if (window.confirm('ai->prompts->roleDelConfirm; ?>')) { - $.ajax({ - url: createLink('ai', 'roleTemplates'), - type: 'POST', - data: {method: 'delete', id: id}, - dataType: 'html', - success: function(response) - { - new $.zui.Messager('ai->prompts->roleAddedSuccess; ?>', {type: 'success'}).show(); - $('#roleList').html($($.parseHTML(response)).filter('#roleList').html()); - } - }); + e.preventDefault(); + const formData = new FormData(document.getElementById('createRoleForm')); + $.ajax({ + url: createLink('ai', 'roleTemplates'), + type: 'POST', + data: {method: 'create', role: formData.get('role'), characterization: formData.get('characterization')}, + dataType: 'html', + success: function (response) { + new $.zui.Messager('ai->prompts->roleAddedSuccess; ?>', {type: 'success'}).show(); + $('#roleList').html($($.parseHTML(response)).filter('#roleList').html()); } - break; + }); + }); + + $('#editRoleButton').on('click', function (e) + { + e.preventDefault(); + const formData = new FormData(document.getElementById('editRoleForm')); + $.ajax({ + url: createLink('ai', 'roleTemplates'), + type: 'POST', + data: { + method: 'edit', + id: formData.get('id'), + role: formData.get('role'), + characterization: formData.get('characterization') + }, + dataType: 'html', + success: function (response) { + new $.zui.Messager('ai->prompts->roleAddedSuccess; ?>', {type: 'success'}).show(); + $('#roleList').html($($.parseHTML(response)).filter('#roleList').html()); + } + }); + }); + + $('#roleListContainer').on('click', function (e) + { + const button = e.target.closest('#roleListContainer button'); + if (!button) return; + const card = button.closest('.role-template-card'); + if (!card) return; + if (!'id' in card.dataset || !'action' in button.dataset) return; + e.preventDefault(); + + const id = card.dataset.id; + + switch (button.dataset.action) + { + case 'apply': + { + $('#mainForm input[name="role"]').val(card.querySelector('#role').innerText).toggleClass('focus', true); + $('#mainForm textarea[name="characterization"]').val(card.querySelector('#characterization').innerText).toggleClass('focus', true); + setTimeout(() => { + $('#mainForm input[name="role"]').toggleClass('focus', false); + $('#mainForm textarea[name="characterization"]').toggleClass('focus', false); + }, 1000); + roleId = id; + break; + } + case 'edit': + { + const model = $('#editRoleTemplateModal'); + model.find('input[name="id"]').val(id); + model.find('#role').val(card.querySelector('#role').innerText); + model.find('#characterization').val(card.querySelector('#characterization').innerText); + model.modal('toggle'); + break; + } + case 'del': + { + if (window.confirm('ai->prompts->roleDelConfirm; ?>')) { + $.ajax({ + url: createLink('ai', 'roleTemplates'), + type: 'POST', + data: {method: 'delete', id: id}, + dataType: 'html', + success: function (response) { + new $.zui.Messager('ai->prompts->roleAddedSuccess; ?>', {type: 'success'}).show(); + $('#roleList').html($($.parseHTML(response)).filter('#roleList').html()); + } + }); + } + break; + } } - } -}); + }); + + $('#mainForm').on('submit', function() + { + if($('#mainForm input[name="saveTemplate"]:checked').val() === 'discard') return true; + const card = $('#roleListContainer .role-template-card[data-id="' + roleId + '"]'); + if (!card) + { + $('#mainForm input[name="saveTemplate"]#saveTemplatediscard').prop('checked', true); + return true; + } + const role = card.find('#role').text(); + const characterization = card.find('#characterization').text(); + if ( + $('#mainForm input[name="role"]').val() === role + && $('#mainForm textarea[name="characterization"]').val() === characterization + ) + { + $('#mainForm input[name="saveTemplate"]#saveTemplatediscard').prop('checked', true); + return true; + } + return true; + }); -(function() -{ const expandRoleTemplatePanel = document.getElementById('expandRoleTemplatePanel'); if(expandRoleTemplatePanel) { - expandRoleTemplatePanel.addEventListener('click', function(e) - { + expandRoleTemplatePanel.addEventListener('click', function (e) { const roleTemplate = document.getElementById('roleTemplate'); const isPanelExpanded = roleTemplate.style.display === 'block'; expandRoleTemplatePanel.querySelector('icon').className = isPanelExpanded ? 'icon icon-first-page' : 'icon icon-last-page'; - if(roleTemplate) - { + if (roleTemplate) { roleTemplate.style.display = isPanelExpanded ? 'none' : 'block'; } });