创建版本

This commit is contained in:
2021-02-22 12:17:00 +08:00
commit af555f49c3
2332 changed files with 369202 additions and 0 deletions
@@ -0,0 +1,138 @@
<?php namespace Gdoo\Product\Controllers;
use DB;
use Request;
use Validator;
use Gdoo\Model\Grid;
use Gdoo\Model\Form;
use Gdoo\Product\Models\ProductCategory;
use Gdoo\Index\Controllers\DefaultController;
class CategoryController extends DefaultController
{
public $permission = ['dialog'];
public function indexAction()
{
$header = Grid::header([
'code' => 'product_category',
'referer' => 1,
'search' => ['by' => ''],
]);
$cols = $header['cols'];
$cols['actions']['options'] = [[
'name' => '编辑',
'action' => 'edit',
'display' => $this->access['edit'],
]];
unset($cols['checkbox']);
$search = $header['search_form'];
$query = $search['query'];
if (Request::method() == 'POST') {
$model = DB::table($header['table'])->setBy($header);
foreach ($header['join'] as $join) {
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
}
$model->orderBy('product_category.lft', 'asc');
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$model->select($header['select']);
$rows = $model->get()->toNested();
$items = Grid::dataFilters($rows, $header);
return $this->json($items, true);
}
$header['buttons'] = [
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
];
$header['cols'] = $cols;
$header['tabs'] = ProductCategory::$tabs;
$header['bys'] = ProductCategory::$bys;
$header['js'] = Grid::js($header);
return $this->display([
'header' => $header,
]);
}
// 新建客户联系人
public function createAction()
{
$id = (int)Request::get('id');
$form = Form::make(['code' => 'product_category', 'id' => $id]);
return $this->render([
'form' => $form,
], 'create');
}
// 创建客户联系人
public function editAction()
{
return $this->createAction();
}
// 显示客户联系人
public function showAction()
{
$id = (int)Request::get('id');
$group = ProductCategory::find($id);
$options = [
'table' => 'product_category',
'row' => $group,
];
$tpl = Form::show($options);
return $this->display([
'tpl' => $tpl,
]);
}
// 删除
public function deleteAction()
{
if (Request::method() == 'POST') {
$ids = Request::get('id');
return Form::remove(['code' => 'product_category', 'ids' => $ids]);
}
}
public function dialogAction()
{
$search = search_form([], [
['text','product_category.name','名称'],
['text','product_category.id','ID'],
]);
$query = $search['query'];
$type = Request::get('type', 1);
if (Request::method() == 'POST') {
$model = ProductCategory::orderBy('lft', 'asc');
$rows = $model->where('type', $type)->get()->toNested();
$data = [];
foreach ($rows as $row) {
$row['sid'] = 'r'.$row['id'];
$data[] = $row;
}
$json = ['data' => $data];
return response()->json($json);
}
return $this->render(array(
'search' => $search,
));
}
}
@@ -0,0 +1,305 @@
<?php namespace Gdoo\Product\Controllers;
use DB;
use Request;
use Validator;
use Gdoo\Product\Models\Product;
use Gdoo\Product\Models\ProductCategory;
use Gdoo\Model\Grid;
use Gdoo\Model\Models\Model;
use Gdoo\Model\Models\Field;
use Gdoo\Model\Form;
use Gdoo\Index\Services\NotificationService;
use Gdoo\Index\Controllers\DefaultController;
class ProductController extends DefaultController
{
public $permission = ['dialog', 'show', 'category', 'serviceCustomer'];
public function indexAction()
{
$header = Grid::header([
'code' => 'product',
'sort' => 'product.code',
'order' => 'asc',
'referer' => 1,
'search' => ['by' => ''],
]);
$cols = $header['cols'];
$cols['actions']['options'] = [[
'name' => '显示',
'action' => 'show',
'display' => $this->access['show'],
],[
'name' => '编辑',
'action' => 'edit',
'display' => $this->access['edit'],
]];
$search = $header['search_form'];
$query = $search['query'];
if (Request::method() == 'POST') {
$model = DB::table($header['table'])->setBy($header);
foreach ($header['join'] as $join) {
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
}
$model->leftJoin('product_category', 'product_category.id', '=', 'product.category_id');
$model->orderBy($header['sort'], $header['order']);
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
if ($query['category_id'] > 0) {
$categoryIds = DB::table('product_category')
->treeById($query['category_id'])->pluck('id');
$model->whereIn('product.category_id', $categoryIds);
}
$model->select($header['select']);
$rows = $model->paginate($query['limit'])->appends($query);
$items = Grid::dataFilters($rows, $header);
return $items->toJson();
}
$header['buttons'] = [
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
];
$header['right_buttons'] = [
['name' => '导入', 'color' => 'default', 'icon' => 'fa-mail-reply', 'action' => 'import', 'display' => $this->access['import']],
];
$header['cols'] = $cols;
$header['tabs'] = Product::$tabs;
$header['bys'] = Product::$bys;
$header['js'] = Grid::js($header);
return $this->display([
'header' => $header,
]);
}
// 新建客户联系人
public function createAction()
{
$id = (int)Request::get('id');
$form = Form::make(['code' => 'product', 'id' => $id]);
return $this->display([
'form' => $form,
], 'create');
}
// 创建客户联系人
public function editAction()
{
return $this->createAction();
}
// 显示客户联系人
public function showAction()
{
$id = (int)Request::get('id');
$form = Form::make(['code' => 'product', 'id' => $id, 'action' => 'show']);
return $this->display([
'form' => $form,
], 'create');
}
// 数据导入
public function importAction()
{
if (Request::method() == 'POST') {
return Form::import(['table' => 'product', 'keys' => ['code', 'category_id', 'unit_id']]);
}
$tips = '注意:表格里必须包含[存货编码]列。';
return $this->render(['tips' => $tips], 'layouts.import');
}
/**
* 弹出层信息
*/
public function dialogAction()
{
$header = Grid::header([
'code' => 'product',
]);
$search = $header['search_form'];
$query = $search['query'];
if (Request::method() == 'POST') {
$model = Product::query();
foreach ($header['join'] as $join) {
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
}
$model->leftJoin('product_category', 'product_category.id', '=', 'product.category_id');
$model->where('product_category.type', 1);
$model->where('product.status', 1)
->orderBy('product.code', 'asc');
if ($query['category_id'] > 0) {
$categoryIds = DB::table('product_category')
->treeById($query['category_id'])->pluck('id');
$model->whereIn('product.category_id', $categoryIds);
}
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$header['select'][] = 'product.weight';
$model->select($header['select']);
if ($query['suggest']) {
if ($query['q']) {
$q = $query['q'];
$model->whereRaw("(product.code like '%$q%' or product.name like '%$q%' or product.spec like '%$q%' or product.barcode like '%$q%')");
}
$rows = $model->limit(15)->get();
$data = Grid::dataFilters($rows, $header, function($item) {
return $item;
});
$items['data'] = $data;
} else {
$rows = $model->paginate($query['limit']);
$items = Grid::dataFilters($rows, $header, function($item) {
return $item;
});
}
return response()->json($items);
}
return $this->render([
'search' => $search,
]);
}
/**
* 以客户产品列表
*/
public function serviceCustomerAction()
{
$search = search_form(
['advanced' => ''], [
['form_type' => 'text', 'name' => '产品名称', 'field' => 'product.name', 'options' => []],
['form_type' => 'text', 'name' => '产品条码', 'field' => 'product.barcode', 'options' => []],
['form_type' => 'text', 'name' => '产品编码', 'field' => 'product.code', 'options' => []]
], 'model');
$header = Grid::header([
'code' => 'product',
]);
$_search = $header['search_form'];
$query = $search['query'];
if (Request::method() == 'POST') {
$model = Product::query();
foreach ($header['join'] as $join) {
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
}
$model->leftJoin('product_category', 'product_category.id', '=', 'product.category_id');
$model->where('product_category.type', 1);
$model->where('product.status', 1)
->orderBy('product.code', 'asc');
if ($query['category_id'] > 0) {
$categoryIds = DB::table('product_category')->treeById($query['category_id'])->pluck('id');
$model->whereIn('product.category_id', $categoryIds);
}
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$customer_id = (int)$query['customer_id'];
$customer = DB::table('customer')->find($customer_id);
if ($customer['type_id'] > 0) {
$price = 'product.price'.$customer['type_id'];
$model->leftJoin(DB::raw('
(select a.product_id, a.price
from customer_price a
where a.customer_id = '.$customer_id.'
group by a.product_id, a.price) as cp'), 'cp.product_id', '=', 'product.id');
// 获取客户对应的价格
$header['select'][] = DB::raw("CASE WHEN ISNULL(cp.price, 0) > 0 THEN cp.price WHEN ISNULL(cp.price, 0) = 0 THEN $price ELSE 0 END AS price");
$model->whereRaw('(product.product_type = 1 and cp.product_id is not null or (product.id = 20226 or '.(auth()->user()->role_id == 2 ? 'ISNULL(product.material_type, 0) = 1' : 'ISNULL(product.material_type, 0) > 0').'))');
}
$header['select'][] = 'product_category.name as category_name';
$header['select'][] = 'product.weight';
$model->select($header['select']);
if ($query['suggest']) {
if ($query['q']) {
$q = $query['q'];
$model->whereRaw("(product.code like '%$q%' or product.name like '%$q%' or product.spec like '%$q%' or product.barcode like '%$q%')");
}
$rows = $model->limit(15)->get();
$data = Grid::dataFilters($rows, $header, function($item) {
return $item;
});
$items['data'] = $data;
} else {
$rows = $model->paginate($query['limit']);
$items = Grid::dataFilters($rows, $header, function($item) {
return $item;
});
}
return response()->json($items);
}
return $this->render([
'search' => $search,
]);
}
public function categoryAction()
{
if (Request::method() == 'POST') {
$model = ProductCategory::orderBy('lft', 'asc');
$rows = $model->get(['*', 'name as text'])->toArray();
$rows = array_nest($rows);
$rows = array_merge($rows);
return response()->json(['data' => $rows]);
}
}
// 删除产品
public function deleteAction()
{
if (Request::method() == 'POST') {
$ids = Request::get('id');
return Form::remove(['code' => 'product', 'ids' => $ids]);
}
/*
$id = Request::get('id');
if (empty($id)) {
return $this->error('最少选择一行记录。');
}
$products = DB::table('product')->whereIn('id', $id)->get();
foreach ($products as $product) {
// 删除图片
image_delete($product['image']);
}
// 删除数据
DB::table('product')->whereIn('id', $id)->delete();
*/
return $this->json('恭喜你,产品删除成功。', url_referer('index'));
}
}
@@ -0,0 +1,132 @@
<?php namespace Gdoo\Product\Controllers;
use DB;
use Request;
use Validator;
use Gdoo\Model\Grid;
use Gdoo\Model\Form;
use Gdoo\Product\Models\ProductUnit;
use Gdoo\Index\Controllers\DefaultController;
class UnitController extends DefaultController
{
public $permission = ['dialog'];
public function indexAction()
{
$header = Grid::header([
'code' => 'product_unit',
'referer' => 1,
'search' => ['by' => ''],
]);
$cols = $header['cols'];
$cols['actions']['options'] = [[
'name' => '编辑',
'action' => 'edit',
'display' => $this->access['edit'],
]];
$search = $header['search_form'];
$query = $search['query'];
if (Request::method() == 'POST') {
$model = DB::table($header['table'])->setBy($header);
foreach ($header['join'] as $join) {
$model->leftJoin($join[0], $join[1], $join[2], $join[3]);
}
$model
//->orderBy($header['sort'], $header['order'])
->orderBy('code', 'asc');
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$model->select($header['select']);
$rows = $model->paginate($query['limit'])->appends($query);
$items = Grid::dataFilters($rows, $header);
return $items->toJson();
}
$header['buttons'] = [
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
];
$header['cols'] = $cols;
$header['tabs'] = ProductUnit::$tabs;
$header['bys'] = ProductUnit::$bys;
$header['js'] = Grid::js($header);
return $this->display([
'header' => $header,
]);
}
// 新建客户联系人
public function createAction()
{
$id = (int)Request::get('id');
$form = Form::make(['code' => 'product_unit', 'id' => $id]);
return $this->render([
'form' => $form,
], 'create');
}
// 创建客户联系人
public function editAction()
{
return $this->createAction();
}
// 显示客户联系人
public function showAction()
{
$id = (int)Request::get('id');
$group = ProductUnit::find($id);
$options = [
'table' => 'warehouse',
'row' => $group,
];
$tpl = Form::show($options);
return $this->display([
'tpl' => $tpl,
]);
}
public function dialogAction()
{
$search = search_form([], [
['text','product_unit.name','名称'],
['text','product_unit.id','ID'],
]);
if (Request::method() == 'POST') {
$model = ProductUnit::orderBy('sort', 'asc');
foreach ($search['where'] as $where) {
if ($where['active']) {
$model->search($where);
}
}
$rows = $model->get(['*', 'name as text']);
return response()->json(['data' => $rows]);
}
return $this->render([
'search' => $search,
]);
}
// 删除
public function deleteAction()
{
if (Request::method() == 'POST') {
$ids = Request::get('id');
return Form::remove(['code' => 'product_unit', 'ids' => $ids]);
}
}
}
+34
View File
@@ -0,0 +1,34 @@
<?php namespace Gdoo\Product\Hooks;
use DB;
use Gdoo\Product\Models\ProductCategory;
class CategoryHook
{
public function onBeforeForm($params)
{
return $params;
}
public function onAfterForm($params) {
return $params;
}
public function onBeforeStore($params)
{
$master = $params['master'];
$master['type'] = 1;
$params['master'] = $master;
return $params;
}
public function onAfterStore($params) {
ProductCategory::treeRebuild();
return $params;
}
public function onBeforeDelete($params) {
return $params;
}
}
+42
View File
@@ -0,0 +1,42 @@
<?php namespace Gdoo\Product\Models;
use DB;
use Gdoo\Index\Models\BaseModel;
class Product extends BaseModel
{
protected $table = 'product';
public static $tabs = [
'name' => 'tab',
'items' => [
['value' => 'product.index', 'url' => 'product/product/index', 'name' => '产品档案'],
]
];
public static $bys = [
'name' => 'by',
'items' => [
['value' => '', 'name' => '全部'],
['value' => 'enabled', 'name' => '启用'],
['value' => 'disabled', 'name' => '禁用'],
['value' => 'divider'],
['value' => 'day', 'name' => '今日创建'],
['value' => 'week', 'name' => '本周创建'],
['value' => 'month', 'name' => '本月创建'],
]
];
public function scopeType($query, $type = 1)
{
$types['sale'] = 1;
$types['supplier'] = 2;
return $query->LeftJoin('product_category', 'product_category.id', '=', 'product.category_id')
->where('product_category.type', $types[$type]);
}
public function warehouse($query)
{
return $this->belongsTo('Gdoo\Product\Models\Warehouse');
}
}
@@ -0,0 +1,43 @@
<?php namespace Gdoo\Product\Models;
use Gdoo\Index\Models\BaseModel;
class ProductCategory extends BaseModel
{
protected $table = 'product_category';
public static $tabs = [
'name' => 'tab',
'items' => [
['value' => 'category.index', 'url' => 'product/category/index', 'name' => '产品类别'],
]
];
public static $bys = [
'name' => 'by',
'items' => [
['value' => '', 'name' => '全部'],
['value' => 'divider'],
['value' => 'day', 'name' => '今日创建'],
['value' => 'week', 'name' => '本周创建'],
['value' => 'month', 'name' => '本月创建'],
]
];
public function scopeType($query, $type = 1)
{
$types['sale'] = 1;
$types['supplier'] = 2;
return $query->where('type', $types[$type]);
}
public function products()
{
return $this->hasMany('Gdoo\Product\Models\Product', 'category_id');
}
public function scopeDialog($q, $value)
{
return $q->whereIn('id', $value)->get()->toNested()->pluck('text', 'id');
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php namespace Gdoo\Product\Models;
use Gdoo\Index\Models\BaseModel;
class ProductUnit extends BaseModel
{
protected $table = 'product_unit';
public static $tabs = [
'name' => 'tab',
'items' => [
['value' => 'unit.index', 'url' => 'product/unit/index', 'name' => '计量单位'],
]
];
public static $bys = [
'name' => 'by',
'items' => [
['value' => '', 'name' => '全部'],
['value' => 'enabled', 'name' => '启用'],
['value' => 'disabled', 'name' => '禁用'],
['value' => 'divider'],
['value' => 'day', 'name' => '今日创建'],
['value' => 'week', 'name' => '本周创建'],
['value' => 'month', 'name' => '本月创建'],
]
];
}
+99
View File
@@ -0,0 +1,99 @@
<?php
return [
"name" => "产品管理",
"version" => "1.0",
"description" => "产品列表,产品类别,库存类型,仓库类别,库存管理,仓库列表。",
"listens" => [
'product_category' => 'Gdoo\Product\Hooks\CategoryHook',
],
'dialogs' => [
'product' => [
'name' => '产品',
'model' => 'Gdoo\Product\Models\Product::Dialog',
'url' => 'product/product/dialog',
],
'product_category' => [
'name' => '产品类别',
'model' => 'Gdoo\Product\Models\ProductCategory::Dialog',
'url' => 'product/category/dialog',
],
'product_unit' => [
'name' => '计量单位',
'model' => 'Gdoo\Product\Models\ProductUnit::Dialog',
'url' => 'product/unit/dialog',
],
],
"controllers" => [
"product" => [
"name" => "产品列表",
"actions" => [
"index" => [
"name" => "列表"
],
"create" => [
"name" => "新建"
],
"edit" => [
"name" => "编辑"
],
"import" => [
"name" => "导入"
],
"delete" => [
"name" => "删除"
]
]
],
"unit" => [
"name" => "计量单位",
"actions" => [
"index" => [
"name" => "列表"
],
"create" => [
"name" => "新建"
],
"edit" => [
"name" => "编辑"
],
"delete" => [
"name" => "删除"
],
]
],
"material" => [
"name" => "原材料清单",
"actions" => [
"index" => [
"name" => "列表"
],
"create" => [
"name" => "新建"
],
"edit" => [
"name" => "编辑"
],
"delete" => [
"name" => "删除"
],
]
],
"category" => [
"name" => "产品类别",
"actions" => [
"index" => [
"name" => "列表"
],
"create" => [
"name" => "新建"
],
"edit" => [
"name" => "编辑"
],
"delete" => [
"name" => "删除"
],
]
],
]
];
@@ -0,0 +1,3 @@
<form class="form-horizontal form-controller" method="post" id="product_category" name="product_category">
{{$form['tpl']}}
</form>
@@ -0,0 +1,135 @@
<div class="wrapper-xs">
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline search-inline-form" method="get">
@include('searchForm6')
</form>
</div>
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
<script>
(function ($) {
var search = JSON.parse('{{json_encode($search)}}');
var params = search.query;
var option = gdoo.formKey(params);
var event = gdoo.event.get(option.key);
event.trigger('query', params);
var sid = params.prefix == 1 ? 'sid' : 'id';
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
var grid = new agGridOptions();
var selectedData = {};
var multiple = params.multi == 0 ? false : true;
grid.remoteDataUrl = '{{url()}}';
grid.remoteParams = params;
grid.rowSelection = multiple ? 'multiple' : 'single';
grid.suppressRowClickSelection = true;
grid.autoGroupColumnDef = {
headerName: '名称',
width: 250,
cellRendererParams: {
checkbox: true,
suppressCount: false,
}
};
grid.treeData = true;
grid.groupDefaultExpanded = -1;
grid.getDataPath = function(data) {
return data.tree_path;
};
grid.columnDefs = [];
grid.columnDefs.push(
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
);
grid.onRowClicked = function(row) {
var selected = row.node.isSelected();
if (selected === false) {
row.node.setSelected(true, true);
}
};
grid.onRowDoubleClicked = function (row) {
var ret = writeSelected();
if (ret == true) {
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
}
};
/**
* 初始化选择
*/
function initSelected() {
if (params.is_grid) {
} else {
var rows = {};
var id = $('#'+option.id).val();
if (id) {
var ids = id.split(',');
for (var i = 0; i < ids.length; i++) {
rows[ids[i]] = ids[i];
}
}
grid.api.forEachNode(function(node) {
var key = node.data[sid];
if (rows[key] != undefined) {
node.setSelected(true);
}
});
}
}
/**
* 写入选中
*/
function writeSelected() {
var rows = grid.api.getSelectedRows();
if (params.is_grid) {
var list = gdoo.forms[params.form_id];
list.api.dialogSelected(params);
} else {
var id = [];
var text = [];
$.each(rows, function(k, row) {
id.push(row[sid]);
text.push(row.name);
});
$('#'+option.id).val(id.join(','));
$('#'+option.id+'_text').val(text.join(','));
if (event.exist('onSelect')) {
return event.trigger('onSelect', multiple ? rows : rows[0]);
}
}
return true;
}
grid.writeSelected = writeSelected;
gdoo.dialogs[option.id] = grid;
new agGrid.Grid(gridDiv, grid);
// 读取数据
grid.remoteData();
// 数据载入成功
grid.remoteSuccessed = function() {
initSelected();
}
var data = search.forms;
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
data: data
});
search.find('#search-submit').on('click', function() {
var params = search.serializeArray();
$.map(params, function(row) {
data[row.name] = row.value;
});
grid.remoteData(data);
return false;
});
})(jQuery);
</script>
@@ -0,0 +1,78 @@
{{$header["js"]}}
<div class="panel no-border" id="{{$header['table']}}-controller">
@include('headers')
<div class="list-jqgrid">
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
<div class="ag-theme-balham" id="ag-pagination"></div>
<div class="clearfix"></div>
</div>
</div>
<script>
(function ($) {
var table = '{{$header["table"]}}';
var config = gdoo.grids[table];
var action = config.action;
var search = config.search;
// 自定义搜索方法
search.searchInit = function (e) {
var self = this;
}
var grid = new agGridOptions;
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
gridDiv.style.height = getPanelHeight(11);
config.cols[0]['hide'] = true;
config.cols[1]['hide'] = true;
grid.autoGroupColumnDef = {
headerName: '名称',
width: 250,
cellRendererParams: {
checkbox: true,
suppressCount: false,
}
};
grid.treeData = true;
grid.groupDefaultExpanded = -1;
grid.getDataPath = function(data) {
return data.tree_path;
};
grid.remoteDataUrl = '{{url()}}';
grid.remoteParams = search.advanced.query;
grid.columnDefs = config.cols;
grid.onRowDoubleClicked = function (params) {
if (params.node.rowPinned) {
return;
}
if (params.data == undefined) {
return;
}
if (params.data.id > 0) {
params.data.master_id = params.data.id;
action.edit(params.data);
}
};
new agGrid.Grid(gridDiv, grid);
// 读取数据
grid.remoteData({page: 1});
// 绑定自定义事件
var $gridDiv = $(gridDiv);
$gridDiv.on('click', '[data-toggle="event"]', function () {
var data = $(this).data();
if (data.master_id > 0) {
action[data.action](data);
}
});
config.grid = grid;
})(jQuery);
</script>
@include('footers')
@@ -0,0 +1,12 @@
<div class="form-panel">
<div class="form-panel-header">
<div class="pull-right">
</div>
{{$form['btn']}}
</div>
<div class="form-panel-body panel-form-{{$form['action']}}">
<form class="form-horizontal form-controller" method="post" id="{{$form['table']}}" name="{{$form['table']}}">
{{$form['tpl']}}
</form>
</div>
</div>
@@ -0,0 +1,191 @@
<div class="wrapper-xs">
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline search-inline-form" method="get">
@include('searchForm3')
</form>
</div>
<div class="col-xs-3">
<div class="list-jqgrid">
<div id="dialog-{{$search['query']['id']}}-tree" style="width:100%;height:380px;" class="ag-theme-balham abc"></div>
</div>
</div>
<div class="col-xs-9">
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
</div>
<div class="clearfix"></div>
<style>
.ag-theme-balham {
border-left: 1px solid #BDC3C7;
border-right: 1px solid #BDC3C7;
}
.abc {
border-right: 1px solid #BDC3C7;
}
.tree-box {
border: 1px solid #dee5e7;
overflow-y: auto;
}
.tree-box .ul {
margin-bottom: 0;
}
.col-xs-3 {
padding-left: 5px;
padding-right: 0;
}
.col-xs-9 {
padding-left: 5px;
padding-right: 5px;
}
</style>
<script>
(function ($) {
var treeOptions = new agGridOptions();
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}-tree");
treeOptions.autoGroupColumnDef = {
headerName: '产品类别',
width: 250,
sortable: false,
suppressMenu: true,
cellRendererParams: {
suppressCount: false,
}
};
treeOptions.rowSelection = 'single';
treeOptions.enableCellTextSelection = false;
treeOptions.treeData = true;
treeOptions.groupDefaultExpanded = 1;
treeOptions.getDataPath = function(data) {
return data.tree_path;
};
treeOptions.columnDefs = [];
treeOptions.onRowClicked = function (params) {
var query = {};
query['category_id'] = params.data.id;
query['page'] = 1;
grid.remoteData(query);
};
treeOptions.remoteDataUrl = "{{url('category')}}?type=1";
new agGrid.Grid(gridDiv, treeOptions);
// 读取数据
treeOptions.remoteData();
var search = JSON.parse('{{json_encode($search)}}');
var params = search.query;
var option = gdoo.formKey(params);
var event = gdoo.event.get(option.key);
event.trigger('query', params);
var sid = params.prefix == 1 ? 'sid' : 'id';
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
var grid = new agGridOptions();
var multiple = params.multi == 0 ? false : true;
grid.remoteDataUrl = '{{url()}}';
grid.remoteParams = params;
grid.rowSelection = multiple ? 'multiple' : 'single';
grid.suppressRowClickSelection = true;
grid.columnDefs = [
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'code', headerName: '存货编码', width: 100},
{suppressMenu: true, cellClass:'text-left', sortable: false, field: 'name', headerName: '产品名称', minWidth: 160},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'spec', headerName: '规格型号', width: 100},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'unit_id_name', headerName: '计量单位', width: 60},
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
];
grid.onRowClicked = function(row) {
var selected = row.node.isSelected();
if (selected === false) {
row.node.setSelected(true, true);
}
};
grid.onRowDoubleClicked = function (row) {
var ret = writeSelected();
if (ret == true) {
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
}
};
/**
* 初始化选择
*/
function initSelected() {
if (params.is_grid) {
} else {
var rows = {};
var id = $('#'+option.id).val();
if (id) {
var ids = id.split(',');
for (var i = 0; i < ids.length; i++) {
rows[ids[i]] = ids[i];
}
}
grid.api.forEachNode(function(node) {
var key = node.data[sid];
if (rows[key] != undefined) {
node.setSelected(true);
}
});
}
}
/**
* 写入选中
*/
function writeSelected() {
var rows = grid.getSelectedRows();
if (params.is_grid) {
var list = gdoo.forms[params.form_id];
list.api.dialogSelected(params);
} else {
var id = [];
var text = [];
$.each(rows, function(k, row) {
id.push(row[sid]);
text.push(row.name);
});
$('#'+option.id).val(id.join(','));
$('#'+option.id+'_text').val(text.join(','));
if (event.exist('onSelect')) {
return event.trigger('onSelect', multiple ? rows : rows[0]);
}
}
return true;
}
grid.writeSelected = writeSelected;
gdoo.dialogs[option.id] = grid;
new agGrid.Grid(gridDiv, grid);
// 读取数据
grid.remoteData({page: 1});
// 数据载入成功
grid.remoteSuccessed = function() {
initSelected();
}
var data = search.forms;
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
data: data
});
search.find('#search-submit').on('click', function() {
var values = search.serializeArray();
$.map(values, function(row) {
params[row.name] = row.value;
});
grid.remoteData(params);
return false;
});
})(jQuery);
</script>
@@ -0,0 +1,164 @@
{{$header["js"]}}
<div class="panel no-border m-b-sm" id="{{$header['table']}}-controller">
@include('headers')
<div class="col-xs-4 col-sm-2">
<div id="{{$header['master_table']}}-tree" style="width:100%;" class="tree-grid ag-theme-balham"></div>
</div>
<div class="col-xs-8 col-sm-10">
<div class="list-jqgrid">
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="list-grid ag-theme-balham"></div>
</div>
</div>
<div class="clearfix"></div>
</div>
<style>
/*
.list-grid.ag-theme-balham .ag-ltr .ag-cell {
vertical-align: middle;
line-height: 42px;
}
.thumb-sm {
vertical-align: middle;
margin-top: 3px;
}
*/
.tree-grid.ag-theme-balham {
border-right: 1px solid #BDC3C7;
}
.tree-grid.ag-theme-balham .ag-ltr .ag-cell {
border-width: 0 0 0 0;
border-right-color: #d9dcde;
}
.tree-grid.ag-theme-balham .ag-header-cell,
.tree-grid.ag-theme-balham .ag-header-group-cell {
border-right-width: 0;
}
.ag-theme-balham {
border-left: 1px solid #BDC3C7;
border-right: 1px solid #BDC3C7;
}
.tree-box {
border: 1px solid #dee5e7;
overflow-y: auto;
}
.tree-box .ul {
margin-bottom: 0;
}
.col-xs-4 {
padding-right: 0;
padding-left: 5px;
}
.col-xs-8 {
padding-left: 5px;
padding-right: 5px;
}
@media screen and (min-width: 768px) {
.col-sm-2 {
padding-right: 0;
padding-left: 5px;
}
.col-sm-10 {
padding-left: 5px;
padding-right: 5px;
}
}
</style>
<script>
(function ($) {
var table = '{{$header["table"]}}';
var config = gdoo.grids[table];
var action = config.action;
var search = config.search;
action.dialogType = 'layer';
// 自定义搜索方法
search.searchInit = function (e) {
var self = this;
}
var height = getPanelHeight(140);
var treeOptions = new agGridOptions();
treeOptions.rowSelection = 'single';
var treeDiv = document.querySelector("#{{$header['master_table']}}-tree");
treeDiv.style.height = height;
treeOptions.autoGroupColumnDef = {
headerName: '类别名称',
width: 250,
sortable: false,
suppressMenu: true,
cellRendererParams: {
suppressCount: true,
}
};
treeOptions.treeData = true;
treeOptions.groupDefaultExpanded = -1;
treeOptions.getDataPath = function(data) {
return data.tree_path;
};
treeOptions.columnDefs = [];
treeOptions.rowSelection = 'single';
treeOptions.enableCellTextSelection = false;
treeOptions.onRowClicked = function (params) {
var query = {};
query['category_id'] = params.data.id;
query['page'] = 1;
config.grid.remoteData(query);
};
treeOptions.remoteDataUrl = "{{url('category')}}";
new agGrid.Grid(treeDiv, treeOptions);
// 读取数据
treeOptions.remoteData();
var options = new agGridOptions();
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
gridDiv.style.height = height;
options.remoteDataUrl = '{{url()}}';
options.remoteParams = search.advanced.query;
options.columnDefs = config.cols;
//options.rowHeight = 47;
options.autoColumnsToFit = false;
options.onRowDoubleClicked = function (params) {
if (params.node.rowPinned) {
return;
}
if (params.data == undefined) {
return;
}
if (params.data.master_id > 0) {
action.show(params.data);
}
};
new agGrid.Grid(gridDiv, options);
// 读取数据
options.remoteData({page: 1});
// 绑定自定义事件
var $gridDiv = $(gridDiv);
$gridDiv.on('click', '[data-toggle="event"]', function () {
var data = $(this).data();
if (data.master_id > 0) {
action[data.action](data);
}
});
config.grid = options;
})(jQuery);
</script>
@include('footers')
@@ -0,0 +1,195 @@
<div class="wrapper-xs">
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline search-inline-form" method="get">
@include('searchForm3')
</form>
</div>
<div class="col-xs-3">
<div class="list-jqgrid">
<div id="dialog-{{$search['query']['id']}}-tree" style="width:100%;height:380px;" class="ag-theme-balham abc"></div>
</div>
</div>
<div class="col-xs-9">
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
</div>
<div class="clearfix"></div>
<style>
.ag-theme-balham {
border-left: 1px solid #BDC3C7;
border-right: 1px solid #BDC3C7;
}
.abc {
border-right: 1px solid #BDC3C7;
}
.tree-box {
border: 1px solid #dee5e7;
overflow-y: auto;
}
.tree-box .ul {
margin-bottom: 0;
}
.col-xs-3 {
padding-left: 5px;
padding-right: 0;
}
.col-xs-9 {
padding-left: 5px;
padding-right: 5px;
}
</style>
<script>
(function ($) {
var treeOptions = new agGridOptions();
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}-tree");
treeOptions.autoGroupColumnDef = {
headerName: '产品类别',
width: 250,
sortable: false,
suppressMenu: true,
cellRendererParams: {
suppressCount: false,
}
};
treeOptions.treeData = true;
treeOptions.groupDefaultExpanded = 1;
treeOptions.getDataPath = function(data) {
return data.tree_path;
};
treeOptions.columnDefs = [];
treeOptions.rowSelection = 'single';
treeOptions.enableCellTextSelection = false;
treeOptions.onRowClicked = function (params) {
var query = {};
query['category_id'] = params.data.id;
query['page'] = 1;
grid.remoteData(query);
};
treeOptions.remoteDataUrl = "{{url('category')}}";
new agGrid.Grid(gridDiv, treeOptions);
// 读取数据
treeOptions.remoteData();
var search = JSON.parse('{{json_encode($search)}}');
var params = search.query;
var option = gdoo.formKey(params);
var event = gdoo.event.get(option.key);
event.trigger('query', params);
var sid = params.prefix == 1 ? 'sid' : 'id';
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
var grid = new agGridOptions();
var multiple = params.multi == 0 ? false : true;
grid.remoteDataUrl = '{{url()}}';
grid.remoteParams = params;
grid.rowSelection = multiple ? 'multiple' : 'single';
grid.suppressRowClickSelection = true;
grid.columnDefs = [
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
{suppressMenu: true, cellClass:'text-center', sortable: false, suppressSizeToFit: true, cellRenderer: 'htmlCellRenderer', field: 'images', headerName: '图片', width: 40},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'code', headerName: '存货编码', width: 100},
{suppressMenu: true, cellClass:'text-left', sortable: false, field: 'name', headerName: '产品名称', minWidth: 140},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'spec', headerName: '规格型号', width: 100},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'barcode', headerName: '产品条码', width: 120},
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'unit_id_name', headerName: '计量单位', width: 80},
{suppressMenu: true, cellClass:'text-right', field: 'price', headerName: '价格', width: 80},
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
];
grid.onRowClicked = function(row) {
var selected = row.node.isSelected();
if (selected === false) {
row.node.setSelected(true, true);
}
};
grid.onRowDoubleClicked = function (row) {
var ret = writeSelected();
if (ret == true) {
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
}
};
/**
* 初始化选择
*/
function initSelected() {
if (params.is_grid) {
} else {
var rows = {};
var id = $('#'+option.id).val();
if (id) {
var ids = id.split(',');
for (var i = 0; i < ids.length; i++) {
rows[ids[i]] = ids[i];
}
}
grid.api.forEachNode(function(node) {
var key = node.data[sid];
if (rows[key] != undefined) {
node.setSelected(true);
}
});
}
}
/**
* 写入选中
*/
function writeSelected() {
var rows = grid.getSelectedRows();
if (params.is_grid) {
var list = gdoo.forms[params.form_id];
list.api.dialogSelected(params);
} else {
var id = [];
var text = [];
$.each(rows, function(k, row) {
id.push(row[sid]);
text.push(row.name);
});
$('#'+option.id).val(id.join(','));
$('#'+option.id+'_text').val(text.join(','));
if (event.exist('onSelect')) {
return event.trigger('onSelect', multiple ? rows : rows[0]);
}
}
return true;
}
grid.writeSelected = writeSelected;
gdoo.dialogs[option.id] = grid;
new agGrid.Grid(gridDiv, grid);
// 读取数据
grid.remoteData({page: 1});
// 数据载入成功
grid.remoteSuccessed = function() {
initSelected();
}
var data = search.forms;
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
data: data
});
search.find('#search-submit').on('click', function() {
var values = search.serializeArray();
$.map(values, function(row) {
params[row.name] = row.value;
});
grid.remoteData(params);
return false;
});
})(jQuery);
</script>
@@ -0,0 +1,3 @@
<form class="form-horizontal form-controller" method="post" id="{{$form['table']}}" name="{{$form['table']}}">
{{$form['tpl']}}
</form>
@@ -0,0 +1,121 @@
<div class="padder">
<div class="m-t-sm m-b-sm">
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
@include('searchForm')
</form>
</div>
</div>
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
<script>
(function ($) {
var search = JSON.parse('{{json_encode($search)}}');
var params = search.query;
var option = gdoo.formKey(params);
var event = gdoo.event.get(option.key);
event.trigger('query', params);
var sid = params.prefix == 1 ? 'sid' : 'id';
var gridDiv = document.querySelector("dialog-{{$search['query']['id']}}");
var grid = new agGridOptions();
var multiple = params.multi == 0 ? false : true;
grid.remoteDataUrl = '{{url()}}';
grid.remoteParams = params;
grid.rowSelection = multiple ? 'multiple' : 'single';
grid.columnDefs = [
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
{suppressMenu: true, cellClass:'text-center', field: 'name', headerName: '名称', width: 200},
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
];
grid.onRowClicked = function(row) {
var selected = row.node.isSelected();
if (selected === false) {
row.node.setSelected(true, true);
}
};
grid.onRowDoubleClicked = function (row) {
var ret = writeSelected();
if (ret == true) {
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
}
};
/**
* 初始化选择
*/
function initSelected() {
if (params.is_grid) {
} else {
var rows = {};
var id = $('#'+option.id).val();
if (id) {
var ids = id.split(',');
for (var i = 0; i < ids.length; i++) {
rows[ids[i]] = ids[i];
}
}
grid.api.forEachNode(function(node) {
var key = node.data[sid];
if (rows[key] != undefined) {
node.setSelected(true);
}
});
}
}
/**
* 写入选中
*/
function writeSelected() {
var rows = grid.api.getSelectedRows();
if (params.is_grid) {
var list = gdoo.forms[params.form_id];
list.api.dialogSelected(params);
} else {
var id = [];
var text = [];
$.each(rows, function(k, row) {
id.push(row[sid]);
text.push(row.name);
});
$('#'+option.id).val(id.join(','));
$('#'+option.id+'_text').val(text.join(','));
if (event.exist('onSelect')) {
return event.trigger('onSelect', multiple ? rows : rows[0]);
}
}
return true;
}
grid.writeSelected = writeSelected;
gdoo.dialogs[option.id] = grid;
new agGrid.Grid(gridDiv, grid);
// 读取数据
grid.remoteData();
// 数据载入成功
grid.remoteSuccessed = function() {
initSelected();
}
var data = search.forms;
var search = $("dialog-{{$search['query']['id']}}-search-form").searchForm({
data: data
});
search.find('#search-submit').on('click', function() {
var params = search.serializeArray();
$.map(params, function(row) {
data[row.name] = row.value;
});
grid.remoteData(data);
return false;
});
})(jQuery);
</script>
@@ -0,0 +1,57 @@
{{$header["js"]}}
<div class="panel no-border" id="{{$header['table']}}-controller">
@include('headers')
<div class='list-jqgrid'>
<div id="{{$header['table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
</div>
</div>
<script>
(function ($) {
var table = '{{$header["table"]}}';
var config = gdoo.grids[table];
var action = config.action;
var search = config.search;
// 自定义搜索方法
search.searchInit = function (e) {
var self = this;
}
var options = new agGridOptions();
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
gridDiv.style.height = getPanelHeight(48);
options.remoteDataUrl = '{{url()}}';
options.remoteParams = search.advanced.query;
options.columnDefs = config.cols;
options.onRowDoubleClicked = function (params) {
if (params.node.rowPinned) {
return;
}
if (params.data == undefined) {
return;
}
if (params.data.id > 0) {
action.edit(params.data);
}
};
new agGrid.Grid(gridDiv, options);
// 读取数据
options.remoteData({page: 1});
// 绑定自定义事件
var $gridDiv = $(gridDiv);
$gridDiv.on('click', '[data-toggle="event"]', function () {
var data = $(this).data();
if (data.master_id > 0) {
action[data.action](data);
}
});
config.grid = options;
})(jQuery);
</script>
@include('footers')