edit.html 25.1 KB
<style type="text/css">
    .field_title{
        display: inline-block;
        width: 19%;
    }
    .field_prompt{
        display: inline-block;
        text-align: center;
        width: 14%;
    }
    .field_discerns{
        display: inline-block;
        width: 12%;
    }
    .field_scheme{
        display: inline-block;
        width: 37%;
    }
    .where_field_op{
        display: inline-block;
        text-align: center;
        width: 32%;
    }
    .where_field_condition{
        display: inline-block;
        width: 52%;
    }
    .order_field{
        display: inline-block;
        width: 70%;
    }
    .order_field_condition{
        display: inline-block;
        width: 28%;
    }
    .tabbar_title{
        padding: 15px;
        background: #e8edf0;
        border-color: #e8edf0;
        margin-bottom: 15px;
    }
    .reduction_field{
        color: #335B64;
        margin-right: 6px;
    }
    .panel-body{
        padding-top: 0;
    }
    .middle_inline{
        display: inline-block;
        vertical-align: middle;
        margin-bottom: 0;
    }
    .kefu_form_control .sp_container {
        width: 100% !important;
    }
    .panel{
        box-shadow: none;
    }
    .xls_max_number .msg-wrap.n-error{
        margin-left: 66px;
    }
    .clear_margin_bottom {
        margin-bottom: 0px;
    }
    .clear_margin_top {
        margin-top: 0px;
    }
    .memory_limit .msg-wrap.n-error{
        margin-left: 50px;
    }
</style>
<div class="row animated fadeInRight">
    <div class="col-md-8 col-md-offset-2">

        <div class="panel panel-default panel-intro">

            <div class="panel-heading tabbable">
                <ul class="nav nav-tabs" role="tablist">
                    <li role="presentation" class="active">
                        <a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab">基础配置</a>
                    </li>
                    <li role="presentation">
                        <a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab">关联表配置</a>
                    </li>
                    <li role="presentation">
                        <a href="#tab3" aria-controls="tab3" role="tab" data-toggle="tab">数据筛选</a>
                    </li>
                    <li role="presentation">
                        <a href="#tab4" aria-controls="tab4" role="tab" data-toggle="tab">其他配置</a>
                    </li>
                </ul>
            </div>
        
            <div class="panel-body">
                <form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
                    {:token()}
                    <div class="box-body tab-content">
                        <div role="tabpanel" class="tab-pane fade in active" id="tab1">

                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    <input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('Main Table')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    <select id="c-main_table" data-rule="required;checkTable" data-rule-checkTable="
                                            function (e) {
                                                if(e.value == 'none') {
                                                    return '请选择数据表';
                                                }
                                            }
                                        " class="form-control" name="row[main_table]">
                                        <option data-comment="" value="none">请选择</option>
                                        {volist name="tableList" id="main_table"}
                                            <option data-comment="{$main_table.comment}" value="{$main_table.name}" {eq name="row.main_table" value="$main_table.name"}selected{/eq}>{$main_table.name}{if $main_table.comment} - {$main_table.comment}{/if}</option>
                                        {/volist}
                                    </select>
                                    <span class="help-block">请先选择要导出的数据表,随后在生成的列表中配置要导出的字段</span>
                                </div>
                            </div>

                            <div id="field_config">

                                {foreach name="row.fields" item="field" key="field_name"}
                                <div class="form-group" data-field="{$field_name}">
                                    <label class="control-label col-xs-12 col-sm-2"><a class="reduction_field" href="javascript:;">[-]</a>{$field_name}:</label>
                                    <div class="col-xs-12 col-sm-9">
                                        <input placeholder="字段标题" class="form-control field_title" name="row[field_config][title][{$field_name}]" value="{$field.title}">
                                        <span class="field_prompt">数据识别:</span>
                                        <select name="row[field_config][discerns][{$field_name}]" class="form-control field_discerns">
                                            <option value="0" {eq name="field.discerns" value="0"}selected{/eq}>文本</option>
                                            <option value="1" {eq name="field.discerns" value="1"}selected{/eq}>数字</option>
                                            <option value="2" {eq name="field.discerns" value="2"}selected{/eq}>日期</option>
                                            <!-- <option value="3" {eq name="field.discerns" value="3"}selected{/eq}>图片</option> -->
                                            <option value="4" {eq name="field.discerns" value="4"}selected{/eq}>文件</option>
                                            <option value="5" {eq name="field.discerns" value="5"}selected{/eq}>赋值</option>
                                        </select>
                                        <span class="field_prompt">赋值方案:</span>
                                        <input placeholder="数据识别为“赋值”时,才需填写" class="form-control field_scheme" name="row[field_config][scheme][{$field_name}]" value="{$field.scheme}">
                                    </div>
                                </div>
                                {/foreach}

                            </div>
                        </div>

                        <div role="tabpanel" class="tab-pane fade" id="tab2">
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">关联表数量:</label>
                                <div class="col-xs-12 col-sm-8">
                                    <input id="c-join_table_number" data-rule="integer(+0)" class="form-control" type="number" value="{$row.join_table_number}">
                                </div>
                            </div>

                            <div id="join_table">
                                {volist name="row.join_table" id="jtable"}
                                    <hr class="divider {$key}">
                                    <div class="form-group {$key}">
                                        <label class="control-label col-xs-12 col-sm-2">选择关联表:</label>
                                        <div class="col-xs-12 col-sm-8">
                                            <select data-id="{$i}" id="s-{$key}" class="form-control s-join_table" name="row[join_table][{$key}][table]">
                                                <option data-comment="" value="none">请选择</option>
                                                {foreach name="tableList" item="table" key="table_key"}
                                                    <option data-comment="{$table.comment}" value="{$table.name}" {eq name="jtable.table" value="$table.name"}selected{/eq}>{$table.name}{if $table.comment} - {$table.comment}{/if}</option>
                                                {/foreach}
                                            </select>
                                        </div>
                                    </div>
                                    <div class="form-group {$key}">
                                        <label class="control-label col-xs-12 col-sm-2">关联表别名:</label>
                                        <div class="col-xs-12 col-sm-8">
                                            <input placeholder="非必填,取好别名则关联表可与源表相同" class="form-control table_name_as" id="s-join_table_as_{$i}" name="row[join_table][{$key}][join_as]" type="text" value="{$jtable.join_as}">
                                        </div>
                                    </div>
                                    <div class="form-group {$key}">
                                        <label class="control-label col-xs-12 col-sm-2">关联外键:</label>
                                        <div class="col-xs-12 col-sm-8">
                                            <select class="form-control foreign_key foreign_key_table_{$i}" name="row[join_table][{$key}][foreign_key]">
                                                {foreach name="table_field" item="table_field_item" key="table_field_key"}
                                                <option value="{$table_field_key}" {eq name="jtable.foreign_key" value="$table_field_key"}selected{/eq}>{$table_field_key} - {$table_field_item.name}</option>
                                                {/foreach}
                                            </select>
                                            <span class="help-block">若无字段可选,请先选择数据源表</span>
                                        </div>
                                    </div>
                                    <div class="form-group {$key}">
                                        <label class="control-label col-xs-12 col-sm-2">关联主键:</label>
                                        <div class="col-xs-12 col-sm-8">
                                            <select class="form-control local_key local_key_table_{$i}" name="row[join_table][{$key}][local_key]">
                                                {foreach name="jtable.field_list" item="jtable_field" key="jtable_field_key"}
                                                    <option value="{$jtable_field_key}" {eq name="jtable.local_key" value="$jtable_field_key"}selected{/eq}>{$jtable_field_key} - {$jtable_field.name}</option>
                                                {/foreach}
                                            </select>
                                        </div>
                                    </div>
                                    <div class="form-group {$key}">
                                        <label class="control-label col-xs-12 col-sm-2">JOIN类型:</label>
                                        <div class="col-xs-12 col-sm-8">
                                            <select class="form-control" name="row[join_table][{$key}][join_type]">
                                                <option value="INNER" {eq name="jtable.join_type" value="INNER"}selected{/eq}>INNER - 至少一个匹配</option>
                                                <option value="LEFT" {eq name="jtable.join_type" value="LEFT"}selected{/eq}>LEFT - 左表有匹配</option>
                                                <option value="RIGHT" {eq name="jtable.join_type" value="RIGHT"}selected{/eq}>RIGHT - 右表有匹配</option>
                                                <option value="FULL" {eq name="jtable.join_type" value="FULL"}selected{/eq}>FULL - 任意表有匹配</option>
                                            </select>
                                        </div>
                                    </div>
                                    <div class="form-group {$key}">
                                        <label class="control-label col-xs-12 col-sm-2">取值字段:</label>
                                        <div class="col-xs-12 col-sm-8">
                                            <select multiple="true" data-id="{$i}" class="form-control selectpicker s-join_table_field" id="fields_table_{$i}">
                                                {foreach name="jtable.field_list" item="jtable_field_item" key="jtable_field_key"}
                                                    <option value="{$jtable_field_key}" {in name="jtable_field_key" value="$jtable.field_name_arr_select"}selected="selected"{/in}>{$jtable_field_key} - {$jtable_field_item.name}</option>
                                                {/foreach}
                                            </select>
                                        </div>
                                    </div>
                                    <div class="join_table_{$i}" id="field_list_table_{$i}">
                                        
                                    {foreach name="jtable.field_name_arr" item="field" key="field_name"}
                                    <div class="form-group" data-field="{$field_name}">
                                        <label class="control-label col-xs-12 col-sm-2">{$field_name}:</label>
                                        <div class="col-xs-12 col-sm-9">
                                            <input placeholder="字段标题" class="form-control field_title" name="row[join_table][join_table_{$i}][fields][title][{$field_name}]" value="{$field.title}">
                                            <span class="field_prompt">数据识别:</span>
                                            <select name="row[join_table][join_table_{$i}][fields][discerns][{$field_name}]" class="form-control field_discerns">
                                                <option value="0" {eq name="field.discerns" value="0"}selected{/eq}>文本</option>
                                                <option value="1" {eq name="field.discerns" value="1"}selected{/eq}>数字</option>
                                                <option value="2" {eq name="field.discerns" value="2"}selected{/eq}>日期</option>
                                                <!-- <option value="3" {eq name="field.discerns" value="3"}selected{/eq}>图片</option> -->
                                                <option value="4" {eq name="field.discerns" value="4"}selected{/eq}>文件</option>
                                                <option value="5" {eq name="field.discerns" value="5"}selected{/eq}>赋值</option>
                                            </select>
                                            <span class="field_prompt">赋值方案:</span>
                                            <input placeholder="数据识别为“赋值”时,才需填写" class="form-control field_scheme" name="row[join_table][join_table_{$i}][fields][scheme][{$field_name}]" value="{$field.scheme}">
                                        </div>
                                    </div>
                                    {/foreach}

                                    </div>
                                {/volist}
                            </div>
                        </div>

                        <div role="tabpanel" class="tab-pane fade" id="tab3">
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">筛选字段:</label>
                                <div class="col-xs-12 col-sm-8">
                                    <select multiple="true" class="form-control selectpicker" id="where_field">
                                        {foreach name="allField" item="all_field" key="all_field_name"}
                                        <option value="{$all_field_name}" {in name="all_field_name" value="$row.where_field_arr_select"}selected="selected"{/in}>{$all_field.field_name}</option>
                                        {/foreach}
                                    </select>
                                    <span class="help-block">请先配置源表和关联表,随后可在此处选择一些字段设置筛选条件</span>
                                </div>
                            </div>

                            <div id="where_field_input">

                                {foreach name="row.where_field_arr" item="where_field" key="where_field_name"}
                                <div class="form-group" data-field="{$where_field_name}">
                                    <label class="control-label col-xs-12 col-sm-3">{$where_field_name}:</label>
                                    <div class="col-xs-12 col-sm-7">
                                        <select name="row[where_field][op][{$where_field_name}]" class="form-control where_field_op">
                                            <option value="=" {eq name="where_field.op" value="="}selected{/eq}>等于</option>
                                            <option value="<>" {eq name="where_field.op" value="<>"}selected{/eq}>不等于</option>
                                            <option value=">" {eq name="where_field.op" value=">"}selected{/eq}>大于</option>
                                            <option value=">=" {eq name="where_field.op" value=">="}selected{/eq}>大于等于</option>
                                            <option value="<" {eq name="where_field.op" value="<"}selected{/eq}>小于</option>
                                            <option value="<=" {eq name="where_field.op" value="<="}selected{/eq}>小于等于</option>
                                            <option value="LIKE" {eq name="where_field.op" value="LIKE"}selected{/eq}>LIKE - 模糊查询</option>
                                            <!-- <option value="EXP" {eq name="where_field.op" value="EXP"}selected{/eq}>表达式 - 支持SQL语法</option> -->
                                        </select>
                                        <span class="field_prompt">查询条件:</span>
                                        <input placeholder="" class="form-control where_field_condition" name="row[where_field][condition][{$where_field_name}]" value="{$where_field.condition}">
                                    </div>
                                </div>
                                {/foreach}

                            </div>
                        </div>

                        <div role="tabpanel" class="tab-pane fade" id="tab4">
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-3">排序字段:</label>
                                <div class="col-xs-12 col-sm-7">
                                    <select class="form-control order_field" name="row[order_field]" id="order_field">
                                        {foreach name="allField" item="all_field" key="all_field_name"}
                                        <option value="{$all_field_name}" {eq name="row.order_field" value="$all_field_name" }selected{/eq}>{$all_field.field_name}</option>
                                        {/foreach}
                                    </select>
                                    <select class="form-control order_field_condition" name="row[order_type]">
                                        <option value="DESC" {eq name="row.order_type" value="DESC" }selected{/eq}>倒序(从大到小)</option>
                                        <option value="ASC" {eq name="row.order_type" value="ASC" }selected{/eq}>正序(从小到大)</option>
                                    </select>
                                    <span class="help-block">请先配置源表和关联表,随后可在此处设置以某字段进行排序</span>
                                </div>
                            </div>
                            <div class="form-group xls_max_number">
                                <label for="c-xls_max_number" class="control-label col-xs-12 col-sm-3">单个xls文件保存:</label>
                                <div class="col-xs-12 col-sm-7">
                                    <div class="input-group input-groupp-md">
                                        <input id="c-xls_max_number" data-rule="required;range(1~30000)" class="form-control" name="row[xls_max_number]" type="number" value="{$row.xls_max_number}">
                                        <span class="input-group-addon">条记录</span>
                                    </div>
                                    <span class="help-block">若导出记录数超出以上设置,则自动分为多个xls文件保存</span>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-3">xls文件创建并发:</label>
                                <div class="col-xs-12 col-sm-7">
                                    <input data-rule="required;range(1~100)" class="form-control" name="row[xls_create_concurrent]" type="number" value="{$row.xls_create_concurrent}">
                                    <span class="help-block clear_margin_bottom">若有多个xls文件需要准备,此处设置<strong>同一时间</strong>准备的xls文件数</span>
                                    <span class="help-block clear_margin_top">若单个xls文件需保存2万以上数据,普通服务器请设置为`1`(受磁盘IO限制)</span>
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="c-memory_limit" class="control-label col-xs-12 col-sm-3">脚本内存限制:</label>
                                <div class="col-xs-12 col-sm-7">
                                    <div class="input-group memory_limit input-groupp-md">
                                        <input id="c-memory_limit" data-rule="required;checkMemory" data-rule-checkMemory="
                                            function (e) {
                                                var fieldCount = Number(Config.fieldCount);
                                                if (fieldCount <= 0){
                                                    return '请选择要导出的字段';
                                                }
                                                var memory = (fieldCount * Number($('#c-xls_max_number').val())) / 1024;
                                                var memory_limit = Number(e.value);
                                                if (memory >= Number(memory_limit)){
                                                    return '需要更多内存 >' + (memory + 50).toFixed(0) + 'Mb';
                                                }
                                            }
                                        " class="form-control" name="row[memory_limit]" type="number" value="{$row.memory_limit}">
                                        <span class="input-group-addon">Mb</span>
                                    </div>
                                    <span class="help-block clear_margin_bottom">创建单个xls文件时,允许使用的最大内存量</span>
                                    <span class="help-block clear_margin_top">若提示需要更多的内存,请在硬件条件允许的情况下,设置更高的值;或降低单个xls文件保存的记录数</span>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-3">导出:</label>
                                <div class="col-xs-12 col-sm-7">
                                    <div class="input-group input-groupp-md">
                                        <input class="form-control" name="row[export_number]" type="number" value="{$row.export_number}">
                                        <span class="input-group-addon">条记录</span>
                                    </div>
                                    <span class="help-block">需要导出的数据量,不填写为导出全部</span>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="form-group layer-footer">
                        <label class="control-label col-xs-12 col-sm-2"></label>
                        <div class="col-xs-12 col-sm-8">
                            <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
                            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
                        </div>
                    </div>
                </form>
            </div>

        </div>
    </div>
</div>