* check fields input.
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<${key}>\\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) {}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '语言模型配置';
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user