| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- namespace zin;
- include './promptnav.html.php';
- $defaultCategory = $activeDataSource ?? 'product';
- jsVar('dataSource', $config->ai->dataSource);
- jsVar('dataSourceLang', $lang->ai->dataSource);
- jsVar('activeDataSource', $defaultCategory);
- jsVar('selectedSources', $prompt->source ? explode(',', trim($prompt->source, ',')) : array());
- /* 构建数据源分类列表 */
- function buildCategoryList($lang, $selectedCategory) {
- $categories = array(
- 'product' => $lang->ai->dataSource['product']['common'],
- 'project' => $lang->ai->dataSource['project']['common'],
- 'story' => $lang->ai->dataSource['story']['common'],
- 'productplan' => $lang->ai->dataSource['productplan']['common'],
- 'release' => $lang->ai->dataSource['release']['common'],
- 'execution' => $lang->ai->dataSource['execution']['common'],
- 'task' => $lang->ai->dataSource['task']['common'],
- 'case' => $lang->ai->dataSource['case']['common'],
- 'bug' => $lang->ai->dataSource['bug']['common'],
- 'doc' => $lang->ai->dataSource['doc']['common']
- );
- $categoryKeys = array_keys($categories);
- $categoryValues = array_values($categories);
- return ul(
- setClass('category-list'),
- array_map(function($key, $label, $index) use ($selectedCategory) {
- $isActive = $key === $selectedCategory ? ' active' : '';
- return li(setClass('category-item' . $isActive), setData('category', $key), $label);
- }, $categoryKeys, $categoryValues, array_keys($categoryKeys))
- );
- }
- /* 构建字段列表 */
- function buildFieldList($lang, $config, $selectedCategory, $selectedFields = array()) {
- $categoryDataSources = $config->ai->dataSource[$selectedCategory] ?? array();
- $objViews = array();
- foreach ($categoryDataSources as $sourceKey => $fields) {
- $groupSelected = true;
- $hasSelectedField = false;
- foreach ($fields as $field) {
- $fieldKey = $sourceKey . '.' . $field;
- if (in_array($fieldKey, $selectedFields)) {
- $hasSelectedField = true;
- } else {
- $groupSelected = false;
- }
- }
- if (!$hasSelectedField) {
- $groupSelected = false;
- }
- $objView = div(
- setClass('category-group'),
- div(
- setClass('category-group-header'),
- checkbox(
- set::primary(true),
- set::rootClass('group-item'),
- set::typeClass('checkbox'),
- setData('prop', $sourceKey),
- set::checked($groupSelected),
- set::text($lang->ai->dataSource[$selectedCategory][$sourceKey]['common'])
- )
- ),
- div(
- setClass('category-group-body check-list-inline'),
- array_map(function($field) use ($sourceKey, $selectedCategory, $lang, $selectedFields) {
- $fieldKey = $sourceKey . '.' . $field;
- $isSelected = in_array($fieldKey, $selectedFields);
- return checkbox(
- set::primary(true),
- set::rootClass('group-item'),
- set::typeClass('checkbox'),
- setData('prop', $fieldKey),
- set::checked($isSelected),
- set::text($lang->ai->dataSource[$selectedCategory][$sourceKey][$field])
- );
- }, $fields)
- )
- );
- $objViews[] = $objView;
- }
- return div(
- setClass('category-groups'),
- setData('object-group', $selectedCategory),
- $objViews
- );
- }
- /* 构建已选数据标题 */
- function buildSelectedTitle($lang, $selectedCategory, $count = 0) {
- $categoryName = $lang->ai->dataSource[$selectedCategory]['common'];
- $format = $lang->ai->prompts->selectedFormat;
- $initialText = str_replace(array('{0}', '{1}'), array($categoryName, $count), $format);
- return h4(
- setID('selected-title-text'),
- setClass('text-md selected-title-text'),
- setData('group', $selectedCategory),
- setData('format', $format),
- $initialText
- );
- }
- /* 构建已选择列表 */
- function buildSelectedList($lang, $config, $selectedCategory, $selectedFields = array()) {
- if (empty($selectedFields)) {
- return div(
- setID('selected-data-sorter'),
- setClass('selected-data-sorter'),
- setData('group', $selectedCategory),
- ol(setClass('list-group'))
- );
- }
- $listItems = array();
- foreach ($selectedFields as $index => $field) {
- if(empty($field)) continue;
- list($source, $fieldName) = explode('.', $field);
- $sourceLang = $lang->ai->dataSource[$selectedCategory][$source];
- $fieldLang = $sourceLang[$fieldName];
- $listItems[] = li(
- setClass('list-group-item'),
- setData('prop', $field),
- setData('order', $index),
- icon(
- set::name('move'),
- setClass('text-gray drag-icon')
- ),
- span(
- $sourceLang['common'] . ' / ' . $fieldLang
- ),
- icon(
- set::name('close'),
- setClass('text-gray remove-icon')
- )
- );
- }
- return div(
- setID('selected-data-sorter'),
- setClass('selected-data-sorter'),
- setData('group', $selectedCategory),
- ol(
- setClass('list-group'),
- $listItems
- )
- );
- }
- div(
- setClass('prompt-select-source'),
- formPanel
- (
- set::id('mainForm'),
- set::actions(
- array(
- array('text' => $lang->ai->nextStep, 'class' => 'btn primary', 'id' => 'submit', 'btnType' => 'submit', 'name' => 'jumpToNext', 'value' => '1')
- )
- ),
- div(
- setClass('data-selector-container'),
- div(
- setClass('data-sources-panel'),
- div(
- setClass('data-categories-section'),
- div(setClass('section-header'), h4(setClass('text-md text-center'), $lang->ai->prompts->selectDataSource)),
- div(
- setClass('section-content'),
- buildCategoryList($lang, $defaultCategory)
- )
- ),
- div(
- setClass('data-properties-section'),
- div(setClass('section-header'), h4(setClass('text-md'), $lang->ai->prompts->selectData), small(setClass('text-gray'), $lang->ai->prompts->selectDataTip)),
- div(
- setClass('section-content'),
- buildFieldList($lang, $config, $defaultCategory, $prompt->source ? explode(',', trim($prompt->source, ',')) : array())
- )
- )
- ),
- div(
- setClass('data-selected-panel'),
- div(setClass('section-header'), buildSelectedTitle($lang, $defaultCategory, $prompt->source ? count(explode(',', trim($prompt->source, ','))) : 0)),
- div(setClass('section-content'), buildSelectedList($lang, $config, $defaultCategory, $prompt->source ? explode(',', trim($prompt->source, ',')) : array()))
- )
- ),
- input(
- set::name('datasource'),
- set::type('hidden'),
- set::value($prompt->source ?? '')
- ),
- input(
- set::name('datagroup'),
- set::type('hidden'),
- set::value($activeDataSource ?? '')
- ),
- on::init()->call('initPromptSelectDataSourceForm')
- )
- );
|