gdoo/resources/js/components/gdooGridHeader.vue

162 lines
7.7 KiB
Vue

<template>
<div class="panel-heading tabs-box" v-if="header.tabs.items.length">
<ul class="nav nav-tabs">
<template v-for="tab in header.tabs.items">
<li :class="header.tabs.active == tab.value ? 'active' : ''">
<a class="text-sm" @click="tabBtn(tab)">{{tab.name}}</a>
</li>
</template>
</ul>
</div>
<div class="wrapper-xs">
<div class="pull-right">
<template v-for="button in header.right_buttons">
<a v-if="button.display" @click="linkBtn(button)" :class="'btn btn-sm btn-' + button.color"><i :class="'fa ' + button.icon"></i> {{button.name}}</a>
</template>
<a v-if="header.trash_btn" @click="actBtn('trash')" :class="'btn btn-sm btn-default ' + (header.search_form.query.by == 'trash' ? 'active' : '')"><i class="fa fa-trash"></i>回收站 ({{header.trash_count}})</a>
</div>
<a v-if="header.access.create && header.create_btn" @click="actBtn('create')" class="btn btn-sm btn-success hinted" :title="'新建' + header.name"><i class="icon icon-plus"></i> 新建</a>
<div class="btn-group">
<a class="btn btn-info btn-sm" data-toggle="dropdown" aria-expanded="false"><i class="fa fa-bars"></i> 操作 <span class="caret"></span></a>
<ul class="dropdown-menu">
<template v-for="button in header.center_buttons">
<li v-if="button.action == 'divider'" class="divider"></li>
<li v-else-if="button.display == 1"><a @click="linkBtn(button)"><i class="'fa ' + button.icon"></i> {{button.name}}</a></li>
</template>
</ul>
</div>
<span class="visible-xs">
<div class="btn-group">
<a @click="actBtn('filter')" class="btn btn-sm btn-default"><i class="fa fa-search"></i> 搜索</a>
</div>
</span>
<!-- 简单搜索表单 -->
<form v-if="header.search_form.simple_search" :id="header.table + '-search-form'" class="search-inline-form form-inline hidden-xs" name="mysearch" method="get">
<div class="form-group search-group">
<select name="field_0" id="search-field-0" class="form-control input-sm">
<option data-type="empty" value="">筛选条件</option>
<template v-for="column in header.search_form.columns">
<option :data-type="column.form_type" :data-title="column.name" :value="column.field">{{column.name}}</option>
</template>
</select>
</div>
<div class="form-group" style="display:none;">
<select name="condition_0" id="search-condition-0" class="form-control input-sm"></select>
</div>
<div class="form-group" id="search-value-0"></div>
<div class="btn-group">
<button id="search-submit" type="submit" class="btn btn-sm btn-default">
<i class="fa fa-search"></i> 搜索</button>
<button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu text-xs" role="menu">
<li><a @click="actBtn('filter')"><i class="fa fa-search"></i> 高级搜索</a></li>
</ul>
</div>
</form>
<a v-else class="btn btn-sm btn-default" @click="actBtn('filter')"><i class="fa fa-search"></i> 筛选</a>
<div v-if="header.bys.items.length" class="btn-group" role="group">
<button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="fa fa-filter"></span> {{header.by_title}}
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<template v-for="item in header.bys.items">
<li v-if="item.value == 'divider'" class="divider"></li>
<li v-else :class="item.value == header.bys.value ? 'active' : ''"><a @click="byBtn(item)">{{item.name}}</a></li>
</template>
</ul>
</div>
<template v-for="button in header.left_buttons">
<a v-if="button.display == 1" @click="linkBtn(button)" :class="'btn btn-sm btn-' + button.color"><i :class="'fa ' + button.icon"></i> {{button.name}}</a>
</template>
<div style="display:none;">
<form :id="header.table + '-search-form-advanced'" class="search-form" method="get">
<div class="wrapper-xs1 search-form-advanced">
<div class="row">
<template v-for="(column, i) in header.search_form.columns">
<div class="wrapper-xs" v-if="column.form_type != 'text2'">
<div class="form-group">
<label class="control-label col-xs-3">{{column.name}}</label>
<!--
if (is_array($column['form_type'])) {
$_type = $column['form_type'][0];
} else {
$_type = $column['form_type'];
}
-->
<input type="hidden" :name="'field_'+i" :id="'advanced-search-field-'+i" :data-title="column.name" :data-type="column.form_type" :value="column.field">
</div>
<div class="col-xs-2">
<div class="form-group" style="display:none;">
<select :name="'condition_'+i" :id="'advanced-search-condition-'+i" class="form-control input-sm"></select>
</div>
</div>
<div class="col-xs-7">
<div class="form-group" :id="'advanced-search-value-'+i"></div>
</div>
<div class="clearfix"></div>
</div>
</template>
</div>
</div>
</form>
</div>
</div>
</template>
<script>
import {defineComponent} from 'vue'
export default defineComponent({
name: 'gdoo-grid-header',
props: ['header', 'grid', 'action'],
setup(props) {
let tabBtn = (btn) => {
props.header.tabs.active = btn.value;
props.grid.remoteData({page:1, tab:btn.value});
}
let actBtn = (btn) => {
props.action[btn]();
}
let linkBtn = (btn) => {
if (btn.action) {
props.action[btn.action]();
}
}
let byBtn = (btn) => {
props.header.by_title = btn.name;
props.grid.remoteData({page:1, by:btn.value});
}
/*
function url(url, query) {
let params = this.toRaw(me.header.search_form.params);
for (const key in query) {
params[key] = query[key];
}
return app.url(url, params);
}
*/
return {tabBtn, actBtn, linkBtn, byBtn};
},
methods: {
}
});
</script>