* check fields input.

This commit is contained in:
dingyongliang
2024-02-19 14:35:38 +08:00
parent 6e9feafc63
commit 38e2e71eae
8 changed files with 100 additions and 20 deletions
+2
View File
@@ -12,6 +12,7 @@
background: #fff;
display: flex;
flex-direction: column;
height: 100%;
}
.mini-program .detail .header {
@@ -63,6 +64,7 @@
padding-top: 20px;
padding-left: 20px;
padding-right: 20px;
overflow: hidden;
}
.mini-program .detail .body .language-model {
+2 -2
View File
@@ -248,7 +248,7 @@ function showFieldNameErrorIfExist($required, form)
{
$required
.addClass('has-error')
.append(`<div class="text-danger help-text">${emptyWarning}</div>`);
.append(`<div class="text-danger help-text">${emptyWarning.replace('%s', name)}</div>`);
return true;
}
@@ -258,7 +258,7 @@ function showFieldNameErrorIfExist($required, form)
{
$required
.addClass('has-error')
.append(`<div class="text-danger help-text">${duplicatedWarning}</div>`);
.append(`<div class="text-danger help-text">${duplicatedWarning.replace('%s', name)}</div>`);
return true;
}
}
+78 -5
View File
@@ -1,13 +1,16 @@
if(!window.aiMiniProgramChat) window.aiMiniProgramChat = {};
let firstGenerate = true;
function getFormValue()
{
/**
* @type {Map<string, string>}
*/
const fieldValueMap = new Map();
fieldNames.forEach(name =>
fields.forEach(field =>
{
const {name} = field;
const $field = $(`[data-name="${name}"]`);
if(!$field.hasClass('picker-box'))
{
@@ -21,21 +24,78 @@ function getFormValue()
return fieldValueMap;
}
function generatePrompt()
/**
* Get required fields.
*
* @returns {string[]}
*/
function getRequiredFields()
{
return fields
.filter(field => field.required === '1')
.map(field => field.name);
}
/**
* Generate prompt string.
*
* @param {Map<string, string>} fields
* @returns {string}
*/
function generatePrompt(fields)
{
let promptStr = prompt;
const map = getFormValue();
map.forEach((value, key) =>
fields.forEach((value, key) =>
{
promptStr = promptStr.replace(new RegExp(`\\s&lt;${key}&gt;\\s`, 'g'), value);
});
return promptStr;
}
/**
* Check required fields.
*
* @param {string[]} requiredFieldNames
* @param {Map<string, string>} fields
* @returns {true|string}
*/
function checkRequiredFields(requiredFieldNames, fields)
{
for(const name of requiredFieldNames)
{
if(!fields.has(name) || !fields.get(name)) return name;
}
return true;
}
function clearErrorTip()
{
$('.form-container').find('.has-error').removeClass('has-error');
$('.form-container').find('.form-tip').remove();
}
window.aiMiniProgramChat.startAIChat = function()
{
const promptStr = generatePrompt();
clearErrorTip();
const fields = getFormValue();
const requiredFieldNames = getRequiredFields();
const result = checkRequiredFields(requiredFieldNames, fields);
if(typeof result === 'string')
{
const $formGroup = $('.form-container').find(`[data-name="${result}"]`).closest('.form-group');
$formGroup
.addClass('has-error')
.append(`<div class="form-tip">${emptyNameWarning.replace('%s', result)}</div>`);
return;
}
const promptStr = generatePrompt(fields);
console.log(promptStr);
if(firstGenerate)
{
$(this).text(regenerateLang);
firstGenerate = false;
}
};
window.aiMiniProgramChat.handleStarBtnClick = function()
@@ -57,3 +117,16 @@ window.aiMiniProgramChat.handleStarBtnClick = function()
}, 'json');
};
window.aiMiniProgramChat.handleRestBtnClick = function()
{
try
{
$('.form-container .picker-box').each(function()
{
$(this).zui('picker').$.clear();
});
$('.form-container .form-group > input[data-name]').val('');
$('.form-container .form-group > textarea[data-name]').val('');
}
catch (error) {}
}
+3 -2
View File
@@ -476,8 +476,8 @@ $lang->ai->miniPrograms->field->default = array(
'As a <Role>, I hope to <Objective> in <Scene>.'
);
$lang->ai->miniPrograms->field->emptyNameWarning = 'Field name cannot be empty';
$lang->ai->miniPrograms->field->duplicatedNameWarning = 'Duplicate field name';
$lang->ai->miniPrograms->field->emptyNameWarning = '「%s」 cannot be empty';
$lang->ai->miniPrograms->field->duplicatedNameWarning = 'Duplicate 「%s」';
$lang->ai->miniPrograms->field->emptyOptionWarning = 'Please configure at least one option';
$lang->ai->miniPrograms->statuses = array(
@@ -493,6 +493,7 @@ $lang->ai->miniPrograms->promptTemplate = 'Prompt template';
$lang->ai->miniPrograms->fieldConfiguration = 'Field configuration';
$lang->ai->miniPrograms->summary = 'There are %s small programs on this page.';
$lang->ai->miniPrograms->generate = 'Generate';
$lang->ai->miniPrograms->regenerate = 'Regenerate';
$lang->ai->models = new stdclass();
$lang->ai->models->title = 'Language Model Configuration';
+3 -2
View File
@@ -476,8 +476,8 @@ $lang->ai->miniPrograms->field->default = array(
'As a <Role>, I hope to <Objective> in <Scene>.'
);
$lang->ai->miniPrograms->field->emptyNameWarning = 'Field name cannot be empty';
$lang->ai->miniPrograms->field->duplicatedNameWarning = 'Duplicate field name';
$lang->ai->miniPrograms->field->emptyNameWarning = '「%s」 cannot be empty';
$lang->ai->miniPrograms->field->duplicatedNameWarning = 'Duplicate 「%s」';
$lang->ai->miniPrograms->field->emptyOptionWarning = 'Please configure at least one option';
$lang->ai->miniPrograms->statuses = array(
@@ -493,6 +493,7 @@ $lang->ai->miniPrograms->promptTemplate = 'Prompt template';
$lang->ai->miniPrograms->fieldConfiguration = 'Field configuration';
$lang->ai->miniPrograms->summary = 'There are %s small programs on this page.';
$lang->ai->miniPrograms->generate = 'Generate';
$lang->ai->miniPrograms->regenerate = 'Regenerate';
$lang->ai->models = new stdclass();
$lang->ai->models->title = 'Language Model Configuration';
+3 -2
View File
@@ -476,8 +476,8 @@ $lang->ai->miniPrograms->field->default = array(
'As a <Role>, I hope to <Objective> in <Scene>.'
);
$lang->ai->miniPrograms->field->emptyNameWarning = 'Field name cannot be empty';
$lang->ai->miniPrograms->field->duplicatedNameWarning = 'Duplicate field name';
$lang->ai->miniPrograms->field->emptyNameWarning = '「%s」 cannot be empty';
$lang->ai->miniPrograms->field->duplicatedNameWarning = 'Duplicate 「%s」';
$lang->ai->miniPrograms->field->emptyOptionWarning = 'Please configure at least one option';
$lang->ai->miniPrograms->statuses = array(
@@ -493,6 +493,7 @@ $lang->ai->miniPrograms->promptTemplate = 'Prompt template';
$lang->ai->miniPrograms->fieldConfiguration = 'Field configuration';
$lang->ai->miniPrograms->summary = 'There are %s small programs on this page.';
$lang->ai->miniPrograms->generate = 'Generate';
$lang->ai->miniPrograms->regenerate = 'Regenerate';
$lang->ai->models = new stdclass();
$lang->ai->models->title = 'Language Model Configuration';
+3 -2
View File
@@ -476,8 +476,8 @@ $lang->ai->miniPrograms->field->default = array(
'作为一名 <角色> ,我希望在 <场景> 时,能 <目标> 。'
);
$lang->ai->miniPrograms->field->emptyNameWarning = '『字段名称』不能为空';
$lang->ai->miniPrograms->field->duplicatedNameWarning = '『字段名称』重复';
$lang->ai->miniPrograms->field->emptyNameWarning = '「%s」不能为空';
$lang->ai->miniPrograms->field->duplicatedNameWarning = '「%s」重复';
$lang->ai->miniPrograms->field->emptyOptionWarning = '请至少配置一个选项';
$lang->ai->miniPrograms->statuses = array(
@@ -493,6 +493,7 @@ $lang->ai->miniPrograms->promptTemplate = '提词模板';
$lang->ai->miniPrograms->fieldConfiguration = '字段配置';
$lang->ai->miniPrograms->summary = '本页共 %s 个小程序。';
$lang->ai->miniPrograms->generate = '生成';
$lang->ai->miniPrograms->regenerate = '重新生成';
$lang->ai->models = new stdclass();
$lang->ai->models->title = '语言模型配置';
+6 -5
View File
@@ -4,9 +4,10 @@ declare(strict_types=1);
namespace zin;
jsVar('prompt', $miniProgram->prompt);
jsVar('regenerateLang', $lang->ai->miniPrograms->regenerate);
jsVar('emptyNameWarning', $lang->ai->miniPrograms->field->emptyNameWarning);
$formGroups = array();
$fieldNames = array();
foreach($fields as $field)
{
if($field->type === 'textarea')
@@ -51,11 +52,9 @@ foreach($fields as $field)
set::required($field->required === '1'),
$control
);
$fieldNames[] = $field->name;
}
jsVar('fieldNames', $fieldNames);
jsVar('fields', $fields);
list($iconName, $iconTheme) = explode('-', $miniProgram->icon);
$star = in_array($miniProgram->id, $collectedIDs) ? 'star' : 'star-empty';
@@ -106,9 +105,11 @@ div(
span($lang->ai->miniPrograms->modelList[$miniProgram->model]),
),
btn(
set::size('md'),
setClass('ghost'),
set::icon('trash'),
$lang->ai->chatReset
$lang->ai->chatReset,
on::click('window.aiMiniProgramChat.handleRestBtnClick')
),
),
div(