Files
gdoo/app/Gdoo/Workflow/views/template/create.blade.php
T

1128 lines
44 KiB
PHP

<div class="panel">
<div class="wrapper-sm">
<a class="btn btn-default btn-sm" href="{{url('index',['bill_id'=>$bill_id])}}"><i class="fa fa-reply"></i> 返回</a>
<!--
<a onclick="preview()" class="btn btn-default">预览</a>
-->
<a onclick="submit()" class="btn btn-sm btn-success">
<i class="fa fa-check"></i> 提交
</a>
</div>
<div class="wrapper-sm b-t gdoo-form-designer">
@verbatim
<div id="vueApp">
<div class="col-sm-2 col-left m-b-sm">
<div class="panel b-a panel-default tabs-box">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1" data-toggle="tab">组件列表</a></li>
<li class=""><a href="#tab2" data-toggle="tab">字段列表</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
<div class="af-left-group-controller af-over-y">
<gdooDraggable :list="items" class="af-left-group"
:sort="false"
item-key="name"
:group="{name:'gdooComponent', pull:'clone', put:false}"
:clone="onClone"
:move="onMove"
ghost-class="ghostClass">
<template #item="{element}">
<div class="af-left-group-item">
<div class="title">{{element.name}}</div>
</div>
</template>
</gdooDraggable>
<div class="clearfix"></div>
</div>
</div>
<div class="tab-pane" id="tab2">
<div class="af-left-group-controller af-over-y">
<ul class="af-left-group">
<div class="list-group-item fld field" data-col="12" data-hidden="0" data-readonly="0" data-role_name="" data-role_id="" data-id="0" data-type="0" data-custom="1" data-field="{flowlog}">
<div class="title">流程记录</div>
<i class="move fa fa-w fa-arrows"></i>
<i class="remove fa fa-w fa-remove" title="删除"></i>
<div class="desc"></div>
</div>
<div class="list-group-item fld field" data-col="12" data-title="单行文本" data-hidden="0" data-readonly="0" data-role_name="" data-role_id="" data-id="0" data-type="0" data-custom="1" data-field="{text}">
<div class="title">单行文本</div>
<i class="move fa fa-w fa-arrows"></i>
<i class="remove fa fa-w fa-remove" title="删除"></i>
<div class="desc"></div>
</div>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-8 col-center m-b-sm">
<div class="droppedFieldsBox" id="droppedFieldsBox">
<gdoo-form-designer :parent_id="0" :items="state.views" class="af-items af-over-y" />
<div class="clearfix"></div>
</div>
</div>
<div class="col-sm-2 col-right">
<div class="panel b-a panel-default tabs-box">
<ul class="nav nav-tabs">
<li class="active"><a href="#model-attr" data-toggle="tab">字段属性</a></li>
<li class=""><a href="#model-template" data-toggle="tab">模板属性</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="model-attr">
<div class="field-attr af-over-y" id="field_attr">
<div class="form-group" v-show="state.activeItem.name != undefined">
<label>标签名称</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.name">
</div>
</div>
<div class="form-group" v-show="state.activeItem.field != undefined">
<label>字段名</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.field">
</div>
</div>
<div class="form-group" v-show="state.activeItem.field_type != undefined">
<label>字段类型</label>
<div class="form-text">
<select @change="changeFieldType" class="form-control input-sm" v-model="state.activeItem.field_type">
<option value=""></option>
<option :value="item.name" v-for="item in state.fieldTypes">{{item.name}}</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.field_type != '' && state.activeItem.field_length != undefined">
<label>字段长度</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.field_length">
</div>
</div>
<div class="form-group" v-show="state.activeItem.field_type != '' && state.activeItem.field_not_null != undefined">
<label>字段not null</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.field_not_null">
<option value="0"></option>
<option value="1"></option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.field_not_null == 1 && state.activeItem.field_type != '' && state.activeItem.field_value != undefined">
<label>字段默认值</label>
<div class="form-text">
<div class="input-group input-group-sm">
<div class="input-group-btn">
<button class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu" id="default-menu" @click="fieldValueClick">
<li><a href="javascript:;">&nbsp;</a></li>
<li><a href="javascript:;">NULL</a></li>
<li><a href="javascript:;">Empty String</a></li>
</ul>
</div>
<input type="text" class="form-control input-sm" v-model="state.activeItem.field_value" :readonly="(state.activeItem.field_value == 'NULL' || state.activeItem.field_value == 'Empty String') ? 'readonly' : false" />
</div>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_url == '' && state.activeItem.data_enum != undefined">
<label>数据枚举</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.data_enum">
<option value=""></option>
<option :value="item.value" v-for="item in state.dataEnums">{{item.name}}</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_enum == '' && state.activeItem.data_url == '' && state.activeItem.data_option != undefined">
<label>
数据选项
<a class="hinted" href="javascript:;" title="格式:名称1|值1(回车换行)"><i class="fa fa-question-circle"></i></a>
</label>
<div class="form-text">
<textarea class="form-control input-sm" v-model="state.activeItem.data_option"></textarea>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_url != undefined">
<label>数据源</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.data_url">
<option value=""></option>
<option :value="item.table" v-for="item in state.dataUrls">{{item.name}}</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_url != '' && state.activeItem.data_query != undefined">
<label>
查询参数
<a class="hinted" href="javascript:;" title="格式:name={name}"><i class="fa fa-question-circle"></i></a>
</label>
<div class="form-text">
<textarea class="form-control input-sm" v-model="state.activeItem.data_query"></textarea>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_multiple != undefined">
<label>数据多选</label>
<div class="form-text">
<label style="text-align:left;float:none;"><input type="checkbox" value="1" v-model="state.activeItem.data_multiple" style="vertical-align:middle;margin-top:0 !important;"> </label>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_type != undefined">
<label>映射数据</label>
<div class="form-text">
<select @change="changeDataType" class="form-control input-sm" v-model="state.activeItem.data_type">
<option value=""></option>
<option :value="item.table" v-for="item in state.dataTypes">{{item.name}}</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_type != '' && state.activeItem.data_field != undefined">
<label>映射字段</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.data_field">
<option :value="item.field" v-for="item in state.dataFields">{{item.name}}({{item.field}})</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_type != '' && state.activeItem.data_link != undefined">
<label>关联字段</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.data_link">
</div>
</div>
<div class="form-group" v-show="state.activeItem.data_type != '' && state.activeItem.data_relation != undefined">
<label>关联关系</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.data_relation">
<option value=""></option>
<option value="one2one">一对一</option>
<option value="one2many">一对多</option>
<option value="many2many">多对多</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.value != undefined">
<label>默认值</label>
<div class="form-text">
<textarea class="form-control input-sm" v-model="state.activeItem.value"></textarea>
</div>
</div>
<div class="form-group" v-show="state.activeItem.grid != undefined">
<label>布局栅格</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.grid">
<option :value="item" v-for="item in [12,11,10,9,8,7,6,5,4,3,2,1]">{{item}}</option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.width != undefined">
<label>布局宽度</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.width">
</div>
</div>
<div class="form-group" v-show="state.activeItem.label_width != undefined">
<label>标签宽度</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.label_width">
</div>
</div>
<div class="form-group" v-show="state.activeItem.field_width != undefined">
<label>组件宽度</label>
<div class="form-text">
<input class="form-control input-sm" v-model="state.activeItem.field_width">
</div>
</div>
<div class="form-group" v-show="state.activeItem.hide_name != undefined">
<label>隐藏标签</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.hide_name">
<option value="0"></option>
<option value="1"></option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.hide_field != undefined">
<label>隐藏组件</label>
<div class="form-text">
<select class="form-control input-sm" v-model="state.activeItem.hide_field">
<option value="1"></option>
<option value="0"></option>
</select>
</div>
</div>
<div class="form-group" v-show="state.activeItem.exclude_auth_id != undefined">
<label>排除权限</label>
<div class="form-text">
<div class="select-group input-group" style="width:100%;">
<input class="form-control input-inline input-sm" style="cursor:pointer;" readonly="readonly" data-multi="1" data-name="exclude_auth_name" data-title="角色" data-url="user/role/dialog" data-id="exclude_auth_id" data-toggle="dialog-view" id="exclude_auth_id_text" v-model="state.activeItem.exclude_auth_name" />
<div class="input-group-btn">
<a data-toggle="dialog-clear" data-id="exclude_auth_id" class="btn btn-sm btn-default"><i class="fa fa-times"></i></a>
</div>
<input type="hidden" id="exclude_auth_id" v-model="state.activeItem.exclude_auth_id">
</div>
</div>
</div>
<input type="hidden" v-model="state.activeItem.item_id">
</div>
</div>
<div class="tab-pane" id="model-template">
<div class="field-attr af-over-y">
<form method="post" id="myform" name="myform">
<div class="form-group">
<label for="set_col">视图名称 <span class="red">*</span></label>
<div class="form-text">
<input type="text" id="name" name="name" v-model="state.template.name" class="form-control input-sm">
</div>
</div>
<div class="form-group">
<label for="set_col">视图类型 <span class="red">*</span></label>
<div class="form-text">
<select multiple="multiple" class="input-select2 form-control input-sm" id="type" v-model="state.template.type" name="type[]" data-width="100%">
<option value="create">新增</option>
<option value="edit">编辑</option>
<option value="show">显示</option>
<option value="print">打印</option>
</select>
</div>
</div>
<div class="form-group">
<label for="set_col">权限范围 <span class="red">*</span></label>
<div class="form-text">
<div class="select-group input-group">
<input class="form-control input-sm" style="width:100%;cursor:pointer;" readonly="readonly" data-toggle="dialog-view" data-prefix="1" data-multi="1" data-readonly="0" data-width="100%" data-title="" data-url="index/api/dialog" data-id="receive_id" data-name="receive_name" name="receive_name" value="全体人员" id="receive_id_text">
<div class="input-group-btn">
<a data-toggle="dialog-clear" data-id="receive_id" class="btn btn-sm btn-default"><i class="fa fa-times"></i></a>
</div>
<input type="hidden" id="receive_id" name="receive_id" value="all">
</div>
</div>
</div>
<div class="form-group">
<label for="set_col">客户端 <span class="red">*</span></label>
<div class="form-text">
<select multiple="multiple" class="input-select2 form-control input-sm" v-model="state.template.client" id="client" name="client[]" data-width="100%">
<option value="web">web</option>
<option value="app">app</option>
</select>
</div>
</div>
<div class="form-group">
<label for="set_col">宽度</label>
<div class="form-text">
<input type="text" id="width" name="width" v-model="state.template.width" class="form-control input-sm">
</div>
</div>
<input type="hidden" name="bill_id" id="bill_id" v-model="state.template.bill_id">
<input type="hidden" name="id" id="template_id" v-model="state.template.id">
</form>
</div>
</div>
</div>
</div>
</div>
@endverbatim
</div>
<div class="clearfix"></div>
</div>
</div>
<script>
let template = JSON.parse('{{json_encode($template, JSON_UNESCAPED_UNICODE)}}');
let views = JSON.parse('{{json_encode($views, JSON_UNESCAPED_UNICODE)}}');
let dataTypes = JSON.parse('{{json_encode($types, JSON_UNESCAPED_UNICODE)}}');
let itemMaxId = 0;
let fieldMaxId = 0;
function getItemMaxId() {
return ++itemMaxId;
}
function getFieldMaxId() {
return 'item' + strLeftPad(++fieldMaxId, 3);
}
function strLeftPad(num, n) {
var len = num.toString().length;
while(len < n) {
num = "0" + num;
len ++;
}
return num;
}
const vueApp = Vue.createApp({
components: {
gdooDraggable,
gdooFormDesigner,
},
setup() {
let fieldTypes = [
{name:'BIGINT', langth:'20'},
{name:'INT', langth:'11'},
{name:'SMALLINT', langth:'5'},
{name:'TINYINT', langth:'3'},
{name:'DECIMAL', langth:'10,2'},
{name:'DATE', langth:''},
{name:'DATETIME', langth:''},
{name:'TIME', langth:''},
{name:'CHAR', langth:'30'},
{name:'VARCHAR', langth:'100'},
{name:'TEXT', langth:''},
];
let views = [{
name: '子表',
grid: 12,
table: 1,
type: 'component',
children: []
},{
name: '布局',
grid: 12,
type: 'component',
children: [{
name: '文本1',
grid: 12,
type: 'text',
value: '',
field: '',
field_type: 'VARCHAR',
field_length: '255',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '文本2',
grid: 12,
type: 'text',
value: '',
field: '',
field_type: 'VARCHAR',
field_length: '255',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
}],
}];
// 初始化视图itemId
function setupViews(views, item_id) {
views.forEach(view => {
view.item_id = getItemMaxId();
view.parent_id = item_id;
if (view.children && view.children.length > 0) {
setupViews(view.children, view.item_id);
}
});
}
setupViews(views, 0);
let state = Vue.reactive({
activeItem: {},
fieldTypes: fieldTypes,
dataTypes: dataTypes,
dataFields: [],
dataEnums: [],
template: template,
views: views,
fields: {},
});
Vue.provide('activeItem', state.activeItem);
function changeFieldType() {
fieldTypes.forEach(fieldType => {
if (state.activeItem.field_type == fieldType.name) {
state.activeItem.field_length = fieldType.langth;
}
});
}
// 获取映射字段列表
function changeDataType() {
$.getJSON(url('model/field/getColumns'), {table: state.activeItem.data_type}, function(res) {
state.dataFields = res.data;
});
}
// 获取枚举列表
function getEnumList() {
$.getJSON(url('model/field/getEnums'), function(data) {
state.dataEnums = data;
});
}
getEnumList();
// 监听模板改变事件
function watchViews(views) {
views.forEach(view => {
view = Vue.toRaw(view);
if (view.type == "component") {
if (view.table == 1) {
state.fields.tables.push(view);
} else {
if (view.children && view.children.length > 0) {
watchViews(view.children);
}
}
} else {
let master = {};
for (var key in view) {
if (key == 'children') {
continue;
}
master[key] = view[key];
}
state.fields.master.push(master);
}
});
}
Vue.watch(state.views, (oldViews, newViews) => {
state.fields.master = [];
state.fields.tables = [];
watchViews(newViews);
});
return {state, changeFieldType, changeDataType};
},
data() {
return {
items: [{
name: '布局',
type: 'component',
grid: 12,
children: []
},{
name: '子表',
type: 'component',
table: 1,
grid: 12,
children: []
},{
name: '单行文本',
grid: 12,
type: 'text',
value: '',
field: '',
field_type: 'VARCHAR',
field_length: '100',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
}, {
name: '多行文本',
grid: 12,
type: 'textarea',
value: '',
field: '',
field_type: 'VARCHAR',
field_length: '255',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
}, {
name: '密码',
field: '',
field_type: 'VARCHAR',
field_length: '60',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
value: '',
type: 'password',
grid: 12,
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
}, {
name: '编辑器',
field: '',
field_type: 'TEXT',
field_length: '',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'editor',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '下拉菜单',
field: '',
field_type: 'VARCHAR',
field_length: '100',
field_not_null: 0,
field_index: '',
field_value: '',
data_enum: '',
data_url: '',
data_query: '',
data_option: '',
data_multiple: false,
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'select',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '对话框',
field: '',
field_type: 'VARCHAR',
field_length: '100',
field_not_null: 0,
field_index: '',
field_value: '',
data_url: '',
data_query: '',
data_option: '',
data_multiple: false,
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'dialog',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '单选框组',
field: '',
field_type: 'VARCHAR',
field_length: '100',
field_not_null: 0,
field_index: '',
field_value: '',
data_enum: '',
data_url: '',
data_query: '',
data_option: '',
data_multiple: false,
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'select',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '多选框组',
field: '',
field_type: 'VARCHAR',
field_length: '100',
field_not_null: 0,
field_index: '',
field_value: '',
data_enum: '',
data_url: '',
data_query: '',
data_option: '',
data_multiple: false,
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'select',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '日期选择',
field: '',
field_type: 'DATE',
field_length: '',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'date',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '日期时间选择',
field: '',
field_type: 'DATATIME',
field_length: '',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'date',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '时间选择',
field: '',
field_type: 'VARCHAR',
field_length: '30',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'date',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '上传',
field: '',
field_type: 'VARCHAR',
field_length: '255',
field_not_null: 0,
field_index: '',
field_value: '',
data_type: '',
data_field: '',
data_link: '',
data_relation: '',
type: 'upload',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '审核意见',
field: '',
type: 'audit',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '会签意见',
field: '',
type: 'feedback',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
},{
name: '流程记录',
field: '',
type: 'flowlog',
grid: 12,
value: '',
label_width: '',
field_width: '100%',
hide_field: 0,
hide_name: 0,
exclude_auth_id:'',
exclude_auth_name:'',
}]
}
},
methods: {
fieldValueClick(e) {
vm.state.activeItem.field_value = e.target.innerText;
},
onMove(item) {
let me = this;
let oldItem = item.draggedContext.element;
let newItem = item.relatedContext.element;
// 获取容器dom
let node = item.to.offsetParent;
if (oldItem.type == 'component') {
var item_table = node.getAttribute('item-table');
// 不能把容器拖入子表容器
if (item_table == 1) {
return false;
}
} else {
return true;
}
},
onClone(item) {
var me = this;
var data = $.extend(true, {}, Vue.toRaw(item));
return data;
}
}
});
var vm = vueApp.mount('#vueApp');
$(function() {
// 子表对话框
gdoo.event.set('exclude_auth_id', {
clear(row) {
vm.state.activeItem.exclude_auth_id = '';
vm.state.activeItem.exclude_auth_name = '';
},
onSelect(row) {
var auth_id = $('#exclude_auth_id').val();
var auth_name = $('#exclude_auth_id_text').val();
vm.state.activeItem.exclude_auth_id = auth_id;
vm.state.activeItem.exclude_auth_name = auth_name;
return true;
}
});
function submit() {
var columns = getColumns();
var data = $('#myform').serialize() + '&' + $.param({columns: columns});
$.post('{{url()}}', data, function (res) {
if (res.status) {
toastrSuccess(res.data);
location.href = res.url;
} else {
toastrError(res.data);
}
}, 'json');
}
})
</script>
<style>
.gdoo-form-designer {
padding: 10px 5px;
padding-bottom: 0;
}
.col-left {
padding-left: 5px;
padding-right: 5px;
}
.col-center {
padding-left: 5px;
padding-right: 5px;
}
.col-right {
padding-left: 5px;
padding-right: 5px;
}
@media (min-width: 768px) {
.af-left-group-controller,
.field-attr {
height:calc(100vh - 135px);
}
}
.af-over-y {
overflow-x: hidden;
overflow-y: auto;
}
.af-over-y::-webkit-scrollbar {
width: 7px;
height: 4px;
background-color: #F5F5F5;
}
.af-over-y::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
background: #fff;
}
.af-over-y::-webkit-scrollbar-thumb {
border-radius: 3px;
box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color:rgba(158, 158, 158, 0.7);
}
.af-over-y::-webkit-scrollbar-thumb:hover {
border-radius: 3px;
box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color:rgba(158, 158, 158, 1);
}
.af-over-x {
overflow-y: hidden;
overflow-x: auto;
}
.af-over-x::-webkit-scrollbar {
width: 4px;
height: 7px;
background-color: #F5F5F5;
}
.af-over-x::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
background: #fff;
}
.af-over-x::-webkit-scrollbar-thumb {
border-radius: 3px;
box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color:rgba(158, 158, 158, 0.7);
}
.af-over-x::-webkit-scrollbar-thumb:hover {
border-radius: 3px;
box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color:rgba(158, 158, 158, 1);
}
.panel-heading .panel-title {
font-size: 12px;
}
.panel-heading .fa {
vertical-align: middle;
color: #999;
cursor: pointer;
}
.panel-heading .fa:hover {
color: #666;
}
.af-left-group {
padding: 10px 5px 5px 10px;
}
.af-left-group-item {
background: #f6f7ff;
border: 1px solid transparent;
width:calc(50% - 5px);
float: left;
margin-right: 5px;
margin-bottom: 5px;
cursor: move;
padding: 6px;
}
.af-left-group-item:hover {
color: #409eff;
border: 1px dashed #409eff;
}
.af-items {
padding: 10px;
padding-right: 5px;
padding-bottom: 5px;
border: 1px solid #dee5e7;
height:calc(100vh - 91px);
box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
width: 100%;
}
.field-attr {
padding: 10px;
padding-bottom: 0;
}
.field-attr .form-group {
margin-bottom: 10px;
}
.field-attr .form-group label {
width: 70px;
float: left;
vertical-align: middle;
text-align: right;
font-weight: normal;
line-height: 28px;
}
.field-attr .form-group .form-text {
margin-left: 80px;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
margin-right: -2px;
}
</style>