增加物料分类的功能部分代码

This commit is contained in:
panx
2024-08-17 16:39:10 +08:00
parent 9bd8d44c1d
commit c26870b8c5
9 changed files with 591 additions and 3 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
public/static/json/2/treeTable/demo-1.json
public/test.html

View File

@@ -0,0 +1,186 @@
<?php
declare (strict_types = 1);
namespace app\admin\controller;
use app\AdminController;
use app\admin\service\AdminRuleService;
use Webman\Http\Request;
use app\admin\model\PdmParttype as PdmParttypeModel;
use support\Response;
/**
* pdm_parttype
* 分类目录
* <!---->
* Class PdmParttype
* @package app\admin\controller
*/
class PdmParttype extends AdminController
{
/**
* PdmParttype模型对象
* @var \app\admin\model\PdmParttype
*/
public function __construct()
{
parent::__construct();
$this->model = new PdmParttypeModel;
}
/**
* 默认生成的方法为index/add/edit/del/status 五个方法
* 当创建CURD的时候DIY的函数体和模板为空请自行编写代码
*/
/**
* 获取资源列表
* return Response
*/
public function index(): Response
{
if (request()->isAjax()) {
list($count, $list) = PdmParttype::dataList(request()->all());
$rules = list_to_tree($list,'id','pid','children',0);
return $this->success('获取成功', '/',$rules, $count);
}
return view('/pdm_parttype/index');
}
/**
* 获取资源列表
* @param array $params
* @return array
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public static function dataList(array $params): array
{
$where = array();
if (!empty($params['parttypetitle'])) {
$where[] = ['parttypetitle','like','%'.$params['parttypetitle'].'%'];
}
if (!empty($params['parttypevalue'])) {
$where[] = ['parttypevalue','like','%'.$params['parttypevalue'].'%'];
}
$model = new PdmParttypeModel();
$count = $model->where($where)->count();
$list = $model->where($where)->order('sort asc')->select()->toArray();
foreach ($list as $key => $value) {
$list[$key]['parttypetitle'] = __($value['parttypetitle']);
}
// $users = array();
$users = $model->usernames();
// throw new \Exception(json_encode($users));
foreach ($list as $key => $value) {
foreach ($users as $keyuser => $valueuser) {
// if ($users[$keyuser]['id'] == $list[$key]['id']){
// // $list[$key]['createrid'] = __($users[$keyuser]['nickname']);
// $list[$key]['createrid'] = __($users[$keyuser]['name']);
// break;
// }
if ($value['createrid'] == $valueuser['id']) {
// $list[$key]['createrid'] = __($valueuser['name']);
$list[$key]['createrid'] = __($valueuser['nickname']);
break;
}else{
$list[$key]['createrid'] =$list[$key]['createrid'].'|'. __('未知用户');
}
}
}
return [$count, $list];
}
/**
* 添加节点数据
* @return Response
*/
public function add(): Response
{
if (request()->isPost()) {
$post = \request()->post();
// validate(\app\common\validate\system\AdminRules::class . '.add')->check($post);
$userid = get_admin_id();
$post['createrid'] = $userid ;
// if(empty($userid)){
// $post['createrid'] = 'empty';
// }else{
// $post['createrid'] = 'noneempty' ;
// }
if ($this->model->create($post)) {
return $this->success('添加分类成功!');
}
}
$data = $this->getTableFields();
$data['pid'] = input('pid', 0);
$data['auth'] = 1;
$data['type'] = 1;
list($count, $list) = PdmParttype::dataList(request()->all());
return view('/pdm_parttype/add', [
'data' => $data,
'rules' => json_encode( list_to_tree($list), JSON_UNESCAPED_UNICODE),
]);
}
/**
* 编辑节点数据
* @return Response
* @throws DbException
* @throws DataNotFoundException
* @throws ModelNotFoundException
*/
public function edit(): Response
{
$id = input('id', 0);
$data = $this->model->find($id);
if (request()->isPost()) {
$post = \request()->post();
// validate(\app\common\validate\system\AdminRules::class . '.edit')->check($post);
if ($this->model->update($post)) {
return $this->success('更新分类成功!');
}
}
list($count, $list) = PdmParttype::dataList(request()->all());
return view('/pdm_parttype/add', [
'data' => $data,
'rules' => json_encode( list_to_tree($list), JSON_UNESCAPED_UNICODE),
]);
}
/**
* 删除节点数据
* @return Response
* @throws DbException
*/
public function del(): Response
{
$id = input('id');
if (!empty($id)) {
// 查询子节点
if ($this->model->where('pid',$id)->count()) {
return $this->error('当前菜单存在子菜单!');
}
// 删除单个
if ($this->model::destroy($id)) {
return $this->success('删除菜单成功!');
}
}
return $this->error('删除失败,请检查您的参数!');
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace app\admin\model;
use think\Model;
use think\model\concern\SoftDelete;
/**
* pdm_parttype
* <!---->
* 分类目录
* Class PdmParttype
* @package app\admin\model
*/
class PdmParttype extends Model
{
use SoftDelete;
// 定义时间戳字段名
protected $createTime = 'create_time';
protected $updateTime = 'update_time';
protected $deleteTime = 'delete_time';
/**
* 定义 sa_user 关联模型
* @localKey id
* @bind name,nickname
*/
public function user()
{
return $this->hasOne(\app\common\model\system\User::Class,'createrid','id')->bind(['nickname']);
}
public function usernames()
{
// return \app\common\model\system\User::select()->toArray();
return \app\common\model\system\Admin::select()->toArray();
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace app\admin\validate;
use think\Validate;
/**
* <!---->
* PdmParttype 验证器
* Class PdmParttype
* @package app\admin\validate
*/
class PdmParttype extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@@ -0,0 +1,124 @@
<include file="/public/header" />
<!-- // 重定位style -->
<!---->
<link href="__STATICADMIN__css/content.css" rel="stylesheet" type="text/css" />
<div class="layui-fluid">
<form class="layui-form layui-card" >
<div class="layui-card-body">
<gt name="$data.id" value="0">
<input type="text" name="id" value="{$data.id}" hidden="">
<else/>
<input type="text" name="id" value="" hidden="">
</gt>
<div class="layui-form-item" >
<label class="layui-form-label">上级分类</label>
<div class="layui-input-block">
<div id="treeNode" name="pid" lay-filter="treeNode" data-pid="{$data.pid|default=0}"></div>
</div>
<label class="layui-form-label">{:__('排序号')}</label>
<div class="layui-input-block">
<input name="sort" placeholder="{:__('默认自动生成')}" type="number" value="{$data.sort}" class="layui-input"/>
</div>
</div>
<div class="layui-form-item" >
<label class="layui-form-label"><font color="red">* </font>Title/分类</label>
<div class="layui-input-block"><input class="layui-input" name="parttypetitle" placeholder="请输入" required="1" lay-verify=""value="{$data.parttypetitle}" ></div>
</div>
<div class="layui-form-item" >
<label class="layui-form-label"><font color="red">* </font>分类描述</label>
<div class="layui-input-block"><input class="layui-input" name="parttypevalue" placeholder="请输入" required="1" lay-verify=""value="{$data.parttypevalue}" ></div>
</div>
<div class="layui-form-item" >
<label class="layui-form-label">注释</label>
<div class="layui-input-block"> <textarea id="content" lay-editor class="layui-hide" name="content" type="layui-textarea" >{$data.content}</textarea></div>
</div>
<div class="layui-footer layui-form-footer">
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
<button class="layui-btn" type="button" lay-filter="submitIframe" lay-submit>{:__('提交')}</button>
</div>
</form>
</div>
<include file="/public/static" />
<include file="/public/footer" />
<script>
layui.use(['jquery', 'iconPicker','form'],function() {
let $ = layui.jquery;
let show = layui.show;
let form = layui.form;
let iconPicker = layui.iconPicker;
let data = {$rules|raw};
// 提交参数
form.on("submit(submit)",function(data){
$.post("{:Url('/PdmParttype/')}"+app_Config.action,data.field,function(res){
if(res.code === 200){
show.msg(res.msg);
parent.layui.table.reloadData('lay-tableList');
parent.layer.closeAll();
// 调用接口更新菜单
top.layui.admin.reloadLayout();
}else{
show.error(res.msg);
}
});
return false;
})
xmSelect.render({
el: '#treeNode',
tips: '请选择上级菜单',
name: 'pid',
height: '260px',
data: data,
radio: true,
clickClose: true,
initValue:[$('#treeNode').data('pid')],
prop: {
value: 'id',
name:'parttypetitle'
},
tree: {
show: true,
strict: false,
showLine: false,
clickExpand: false,
},
model: {
icon: 'hidden',
label: {
type: 'text'
}
},
theme: {
color: '#1890FF'
}
})
iconPicker.render({
elem: '#iconPicker',
type: 'fontClass',
search: true,
cellWidth: "19%",
page: true,
limit: 12,
// 点击回调
click: function(data) { // 点击回调
$('#iconPicker').val(data.icon);
},
success: function(d) { // 渲染成功后的回调
}
});
$('.router').bind('input change',function(data){
let router = $('.router').val();
router = router.substring(1);
$('.alias').val(router.replaceAll('/',':'));
})
})
</script>

View File

@@ -0,0 +1,196 @@
<include file="/public/header" />
<!---->
<div class="layui-fluid">
<div class="layui-card">
<!-- // 默认操作按钮 -->
<div class="layui-card-header layadmin-card-header-auto ">
<div class="layui-form">
<!-- // 自定义搜索参数 -->
<div id="laytable-search" class="layui-form-item" >
<div class="layui-inline">
<div class="layui-form-label">{:__('ID')}</div>
<div class="layui-input-inline ">
<input name="id" class="layui-input" type="text" placeholder="{:__('ID')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('父ID')}</div>
<div class="layui-input-inline ">
<input name="pid" class="layui-input" type="text" placeholder="{:__('父ID')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('排序')}</div>
<div class="layui-input-inline ">
<input name="sort" class="layui-input" type="text" placeholder="{:__('排序')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('描述')}</div>
<div class="layui-input-inline ">
<input name="parttypevalue" class="layui-input" type="text" placeholder="{:__('描述')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('用户')}</div>
<div class="layui-input-inline ">
<input name="createrid" class="layui-input" type="text" placeholder="{:__('用户')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('注释')}</div>
<div class="layui-input-inline ">
<input name="content" class="layui-input" type="text" placeholder="{:__('注释')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('更新时间')}</div>
<div class="layui-input-inline ">
<input name="update_time" lay-datetime data-range="true" data-type="date" data-dateformat="yyyy/MM/dd" class="layui-input" type="text" placeholder="{:__('更新时间')}"/>
</div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('创建时间')}</div>
<div class="layui-input-inline ">
<input name="create_time" lay-datetime data-range="true" data-type="date" data-dateformat="yyyy/MM/dd" class="layui-input" type="text" placeholder="{:__('创建时间')}"/>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-form-label">{:__('Parttype')}</div>
<div class="layui-input-inline ">
<input name="parttypetitle" class="layui-input" type="text" placeholder="{:__('Parttype')}"/>
</div>
</div>
<div class="layui-inline" >
<!-- // 默认搜索 -->
<button class="layui-btn icon-btn" lay-filter="formSearch" lay-submit><i class="layui-icon layui-icon-search"></i>{:__('搜索')}</button>
<!--formBegin-->
<button class="layui-btn icon-btn" lay-open="" data-title="{:__('添加')}" data-area="1100px,750px" data-maxmin="true" data-url="{:url('/PdmParttype/add')}" >
<i class="layui-icon layui-icon-add-1"></i>{:__('添加')}
</button>
<button class="layui-btn layui-btn-primary icon-btn" id="expandAll" ><i class="layui-icon layui-icon-templeate-1"></i>{:__('展开全部')}</button>
<button class="layui-btn layui-btn-danger icon-btn" id="foldAll" ><i class="layui-icon layui-icon-add-1"></i>{:__('折叠全部')}</button>
<!--formEnd-->
</div>
</div>
</div>
</div>
<!-- // 创建数据实例 -->
<table id="lay-tableList" lay-filter="lay-tableList"></table>
</div>
</div>
<!-- // 列表状态栏 -->
<script type="text/html" id="columnStatus">
<input type="checkbox" lay-filter="switchStatus" data-url="{:url('/PdmParttype/status')}" value="{{d.id}}" lay-skin="switch" {{d.status==1?'checked':''}} />
</script>
<!-- // 列表工具栏 -->
<script type="text/html" id="tableBar">
<!--formBegin-->
<a class="layui-table-text" lay-open data-title="{:__('添加菜单')}" data-url="{:url('/PdmParttype/add')}?pid={{d.id}}"
data-area="1100px,750px" >{:__('添加')}</a>
<div class="layui-divider layui-divider-vertical"></div>
<a class="layui-table-text" data-title="{:__('编辑')}" data-area="1100px,750px" data-maxmin="true"
data-url="{:url('/PdmParttype/edit')}?id={{d.id}}" lay-event="edit" >{:__('编辑')}</a>
<div class="layui-divider layui-divider-vertical"></div>
<!--formEnd-->
<a class="layui-table-text" data-url="{:url('/PdmParttype/del')}?id={{d.id}}" lay-event="del" >{:__('删除')}</a>
</script>
<script type="text/html" id="tableButton"></script>
<include file="/public/footer" />
<script>
layui.use(['form','treeTable'], function () {
let $ = layui.jquery;
let form = layui.form;
let treeTable = layui.treeTable;
let tableURL = "{:url('/PdmParttype/index')}";
// 渲染初始化表格
let renderTable = function (tableURL) {
treeTable.render({
id: 'lay-tableList',
elem: '#lay-tableList',
url: tableURL,
toolbar: '#tableButton',
defaultToolbar: ['filter', 'exports', 'print','search'],
cellMinWidth: 160,
page: true,
limit: 18,
tree: {
customName: {
pid: 'pid',
icon: 'icon1',
},
view: {
iconClose: '', // 关闭时候的图标
iconOpen: '', // 打开时候的图标
iconLeaf: '', // 叶子节点的图标
}
},
cols: [[
//{type: 'checkbox', width: 50},
{type: 'numbers'},
//{field: 'id', align: 'center',sort: true,width: 80, title: 'ID'},
//{field:'parttypetitle',title:'{:__("Title")}'},
{field: 'name', title: '{:__("Parttype")}',templet: function(d) {
return d.parttypetitle;
},},
{field:'parttypevalue',title:'{:__("描述")}'},
{field:'createrid',title:'{:__("创建者")}',templet: function(d) {
return d.createrid ;
},},
{field:'sort',title:'{:__("排序")}'},
{field:'content',title:'{:__("注释")}'},
{align: 'center', toolbar: '#tableBar', width:220, fixed: 'right', title: '{:__("操作")}'},
]]
});
}
// 监听搜索 serialize
form.on('submit(treeSearch)',function(data) {
let whereURL = '',
field = data.field;
for (let key in field ) {
whereURL += key + '=' + field[key];
whereURL += '&';
}
// 拼接字符串
whereURL = whereURL.replace(/(.*)&/,'$1 ');
whereURL = tableURL + '?' + whereURL;
renderTable(whereURL);
})
// 展开所有
$('#expandAll').click(function(){
treeTable.expandAll('lay-tableList', true);
})
// 折叠所有
$('#foldAll').click(function () {
treeTable.expandAll('lay-tableList',false);
});
// 执行初始化
renderTable(tableURL);
});
</script>

View File

@@ -4,6 +4,6 @@ return [
[plugin\easyflow\Easyflow::class, 'appInit'], [plugin\easyflow\Easyflow::class, 'appInit'],
], ],
'testhook'=> [ 'testhook'=> [
[\plugin\demo\Demo::class, 'testhook'], [plugin\demo\Demo::class, 'testhook'],
], ],
]; ];

View File

@@ -1 +0,0 @@
// 前端JS文件

View File

@@ -1 +0,0 @@
// 后端JS文件