| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- <?php
- /**
- * The adddrill view file of pivot module of ZenTaoPMS.
- * @copyright Copyright 2009-2024 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
- * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Chenxuan Song <songchenxuan@easycorp.ltd>
- * @package pivot
- * @link https://www.zentao.net
- */
- namespace zin;
- $fnGenTabText = function($tabText)
- {
- return div
- (
- setClass('border-b border-gray-100'),
- span($tabText, setClass('bg-gray-100 text-base font-medium leading-tight bg-text-padding'))
- );
- };
- $fnGenFieldAndObject = function($drill, $fields) use ($lang)
- {
- return div(setClass('flex items-center gap-x-4'), div
- (
- $lang->pivot->drill->selectField
- ), div
- (
- setClass('field-select drill-select-picker'),
- picker
- (
- setID('picker_field'),
- set::name('field'),
- set::items($fields),
- set::value($drill['field']),
- on::change()->do('changeField(event)')
- ),
- div
- (
- setClass('form-tip hidden text-danger'),
- $lang->pivot->stepDrill->fieldEmpty
- )
- ), div
- (
- $lang->pivot->drill->selectObject
- ), div
- (
- setClass('object-select drill-select-picker'),
- picker
- (
- setID('picker_object'),
- set::name('object'),
- set::items($this->bi->getTableList($hasDatavew = false, $withPrefix = false)),
- set::value($drill['object']),
- on::change()->do('changeObject(event)')
- ),
- div
- (
- setClass('form-tip hidden text-danger'),
- $lang->pivot->stepDrill->objectEmpty
- )
- ));
- };
- $fnGenConditionLine = function($index, $conditionCount, $drillFields, $queryFields, $condition) use ($lang)
- {
- $drillFieldValue = null;
- if($condition['drillAlias'])
- {
- $parts = array($condition['drillAlias'], $condition['drillObject'], $condition['drillField']);
- $parts = array_filter($parts);
- $drillFieldValue = implode('.', $parts);
- }
- return div
- (
- setClass("flex condition-line items-center gap-x-2"),
- set('data-index', $index),
- div
- (
- $lang->pivot->drill->inDrillField
- ),
- div
- (
- setClass("drillField-select-{$index} drill-condition-picker"),
- inputGroup
- (
- setID('drillFieldGroup'),
- picker
- (
- setID("picker_drillField$index"),
- set::name('drillField[]'),
- set::items($drillFields),
- set::value($drillFieldValue),
- on::change()->do('changeDrillField(event)')
- ),
- btn
- (
- setClass('refresh-conditions'),
- set::icon('refresh'),
- on::click()->do('refreshConditions(event)')
- )
- ),
- div
- (
- setClass('form-tip hidden text-danger'),
- $lang->pivot->stepDrill->drillEmpty
- )
- ),
- div
- (
- $lang->pivot->drill->equal
- ),
- div
- (
- $lang->pivot->drill->inQueryField
- ),
- div
- (
- setClass("queryField-select-{$index} drill-condition-picker"),
- picker
- (
- setID("picker_queryField$index"),
- set::name('queryField[]'),
- set::items($queryFields),
- set::value($condition['queryField']),
- on::change()->do('changeQueryField(event)')
- ),
- div
- (
- setClass('form-tip hidden text-danger'),
- $lang->pivot->stepDrill->queryEmpty
- )
- ),
- btnGroup
- (
- btn
- (
- setClass('btn btn-link text-gray condition-add'),
- set::icon('plus'),
- on::click()->do('addCondition(event)')
- ),
- $conditionCount > 1 ? btn
- (
- setClass('btn btn-link text-gray condition-delete'),
- set::icon('close'),
- on::click()->do('deleteCondition(event)')
- ) : null
- )
- );
- };
- $fnGenConditionLines = function($pivotState, $drill) use ($lang, $fnGenConditionLine)
- {
- $drillFields = $drill['object'] ? $this->pivot->getDrillFieldList($drill) : array();
- $queryFields = $pivotState->getFieldOptions();
- $conditions = array();
- $index = 1;
- if(!empty($drill['condition']))
- {
- $conditionCount = count($drill['condition']);
- foreach($drill['condition'] as $condition)
- {
- $conditions[] = $fnGenConditionLine($index, $conditionCount, $drillFields, $queryFields, $condition);
- $index ++;
- }
- }
- return div
- (
- setClass('condition-lines flex col gap-y-2'),
- $conditions
- );
- };
- $errorMessage = isset($errorMessage) ? $errorMessage : null;
- $previewCols = isset($previewCols) ? $previewCols : array();
- $previewData = isset($previewData) ? $previewData : array();
- $fnGenerateQueryCondition = function($pivotState, $isDefault, $modalIndex) use ($lang, $fnGenTabText, $fnGenFieldAndObject, $fnGenConditionLines, $previewCols, $previewData, $errorMessage, $users)
- {
- $drill = $isDefault ? $pivotState->defaultDrill : $pivotState->drills[$modalIndex];
- $fields = $this->pivot->getFieldList($pivotState, $isDefault ? null : $modalIndex);
- return div
- (
- setID("queryConditionContent$modalIndex"),
- setClass('flex col gap-y-4 queryConditionContent'),
- $fnGenFieldAndObject($drill, $fields),
- div
- (
- div
- (
- setClass('drill-condition-tab border-b border-gray-100 flex items-center gap-x-2'),
- $fnGenTabText($lang->pivot->drill->setCondition),
- sqlBuilderHelpIcon(),
- span(setClass('text-gray-500'), $lang->pivot->queryConditionTip)
- ),
- div
- (
- setClass('flex'),
- div
- (
- setClass('flex col gap-y-2 border drill-condition py-4'),
- div
- (
- setClass('refer-sql px-4'),
- !empty($drill['object']) ? $this->pivot->autoGenReferSQL($drill['object']) : null
- ),
- div
- (
- formGroup
- (
- setClass('where-sql px-4'),
- setID("textarea_whereSql"),
- set::name('whereSql'),
- !empty($drill['whereSql']) ? set::value($drill['whereSql']) : null,
- set::control(array('type' => 'textarea', 'rows' => 3)),
- set::placeholder($lang->pivot->drillSQLTip),
- on::change()->do('changeWhereSQL(event)')
- )
- ),
- div
- (
- formGroup
- (
- setClass('error-message'),
- set::tipClass('text-danger'),
- set::tip($errorMessage)
- )
- ),
- div
- (
- setClass('flex items-center'),
- div(setClass('flex items-center basis-32'), div
- (
- setClass('text-base font-medium align-self py-1 px-3'),
- $lang->pivot->drill->drillCondition
- ), sqlBuilderHelpIcon(set::text($lang->pivot->drillConditionTip))),
- $fnGenConditionLines($pivotState, $drill)
- )
- ),
- div
- (
- setClass('border p-3 break-all origin-sql'),
- $pivotState->sql
- )
- )
- ),
- div
- (
- div
- (
- setClass('drill-condition-tab border-b border-gray-100 flex items-center gap-x-2'),
- $fnGenTabText($lang->pivot->drill->drillResult),
- sqlBuilderHelpIcon(),
- span(setClass('text-gray-500'), $lang->pivot->previewResultTip)
- ),
- div
- (
- dtable
- (
- set::height(160),
- set::id('drillResult'),
- set::cols((array)$previewCols),
- set::data((array)$previewData),
- set::userMap($users),
- set::onRenderCell(jsRaw('window.renderDrillResult')),
- set::emptyTip($lang->pivot->drillResultEmptyTip)
- )
- )
- )
- );
- };
- $fnGenerateAddDrillModal = function($pivotState, $modalID) use ($lang, $fnGenerateQueryCondition)
- {
- $isDefault = $modalID == 'drillModalDefault';
- $modalIndex = $isDefault ? substr($modalID, 10) : (int)substr($modalID, 10);
- return modal
- (
- setID($modalID),
- setClass('drill-modal'),
- setData('backdrop', 'static'),
- set::size('lg'),
- set::title($lang->pivot->drill->common),
- set::titleClass('flex-none'),
- to::header
- (
- sqlBuilderHelpIcon(set::text($lang->pivot->drillModalTip))
- ),
- $fnGenerateQueryCondition($pivotState, $isDefault, $modalIndex),
- set::footerClass('form-actions gap-4 mt-4'),
- to::footer
- (
- btn
- (
- set::type('ghost'),
- setID('previewDrill'),
- setClass('px-6 drill-preview squre'),
- $lang->pivot->drill->preview,
- on::click()->do('previewDrillResult(event)')
- ),
- btn
- (
- set::type('ghost'),
- setClass('px-6 drill-save squre'),
- $lang->pivot->drill->save,
- on::click()->do('saveDrill(event)')
- )
- )
- );
- };
|