New file |
| | |
| | | <?php |
| | | |
| | | declare (strict_types = 1); |
| | | |
| | | namespace app\user\controller; |
| | | |
| | | use app\base\BaseController; |
| | | // use app\user\validate\PositionCheck; |
| | | use think\exception\ValidateException; |
| | | use think\facade\Db; |
| | | use think\facade\View; |
| | | |
| | | class Attendance extends BaseController |
| | | { |
| | | public function index() |
| | | { |
| | | if (request()->isAjax()) { |
| | | $list = Db::name('Position')->where('status', '>=', 0)->order('create_time asc')->select()->toArray(); |
| | | foreach ($list as &$val) { |
| | | $groupId = Db::name('PositionGroup')->where(['pid' => $val['id']])->column('group_id'); |
| | | $groupName = Db::name('AdminGroup')->where('id', 'in', $groupId)->column('title'); |
| | | $val['groupName'] = implode(',', $groupName); |
| | | } |
| | | $res['data'] = $list; |
| | | return table_assign(0, '', $res); |
| | | } else { |
| | | return view(); |
| | | } |
| | | } |
| | | |
| | | //添加&编辑 |
| | | public function add() |
| | | { |
| | | $param = get_params(); |
| | | if (request()->isAjax()) { |
| | | // if (!empty($param['id']) && $param['id'] > 0) { |
| | | // if($param['id']==1){ |
| | | // return to_assign(1, '超级管理员不能编辑'); |
| | | // } |
| | | // try { |
| | | // validate(PositionCheck::class)->scene('edit')->check($param); |
| | | // } catch (ValidateException $e) { |
| | | // // 验证失败 输出错误信息 |
| | | // return to_assign(1, $e->getError()); |
| | | // } |
| | | // // 启动事务 |
| | | // Db::startTrans(); |
| | | // try { |
| | | // Db::name('Position')->where(['id' => $param['id']])->strict(false)->field(true)->update($param); |
| | | // Db::name('PositionGroup')->where(['pid' => $param['id']])->delete(); |
| | | // foreach ($param['group_id'] as $k => $v) { |
| | | // $data[$k] = [ |
| | | // 'pid' => $param['id'], |
| | | // 'group_id' => $v, |
| | | // 'create_time' => time(), |
| | | // ]; |
| | | // } |
| | | // Db::name('PositionGroup')->strict(false)->field(true)->insertAll($data); |
| | | // add_log('edit', $param['id'], $param); |
| | | // //清除菜单\权限缓存 |
| | | // clear_cache('adminMenu'); |
| | | // clear_cache('adminRules'); |
| | | // // 提交事务 |
| | | // Db::commit(); |
| | | // } catch (\Exception $e) { |
| | | // // 回滚事务 |
| | | // Db::rollback(); |
| | | // return to_assign(1, '提交失败:' . $e->getMessage()); |
| | | // } |
| | | // } else { |
| | | // try { |
| | | // validate(PositionCheck::class)->scene('add')->check($param); |
| | | // } catch (ValidateException $e) { |
| | | // // 验证失败 输出错误信息 |
| | | // return to_assign(1, $e->getError()); |
| | | // } |
| | | // // 启动事务 |
| | | // Db::startTrans(); |
| | | // try { |
| | | // $uid = Db::name('Position')->strict(false)->field(true)->insertGetId($param); |
| | | // foreach ($param['group_id'] as $k => $v) { |
| | | // $data[$k] = [ |
| | | // 'pid' => $uid, |
| | | // 'group_id' => $v, |
| | | // 'create_time' => time(), |
| | | // ]; |
| | | // } |
| | | // Db::name('PositionGroup')->strict(false)->field(true)->insertAll($data); |
| | | // add_log('add', $uid, $param); |
| | | // // 提交事务 |
| | | // Db::commit(); |
| | | // } catch (\Exception $e) { |
| | | // // 回滚事务 |
| | | // Db::rollback(); |
| | | // return to_assign(1, '提交失败:' . $e->getMessage()); |
| | | // } |
| | | // } |
| | | return to_assign(); |
| | | } |
| | | else{ |
| | | // $id = isset($param['id']) ? $param['id'] : 0; |
| | | // $group = Db::name('AdminGroup')->order('create_time asc')->select()->toArray(); |
| | | // if ($id > 0) { |
| | | // $detail = Db::name('Position')->where(['id' => $id])->find(); |
| | | // $detail['group_id'] = Db::name('PositionGroup')->where(['pid' => $id])->column('group_id'); |
| | | // foreach ($group as &$val) { |
| | | // if (in_array($val['id'], $detail['group_id'])) { |
| | | // $val['checked'] = 1; |
| | | // } else { |
| | | // $val['checked'] = 0; |
| | | // } |
| | | // } |
| | | // View::assign('detail', $detail); |
| | | // } |
| | | // View::assign('group', $group); |
| | | // View::assign('id', $id); |
| | | return view(); |
| | | } |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | {extend name="../../base/view/common/base" /} |
| | | <!-- 主体 --> |
| | | {block name="body"} |
| | | <form class="layui-form p-4"> |
| | | <h3 class="pb-3">岗位职称</h3> |
| | | {if condition="$id eq 0"} |
| | | <table class="layui-table"> |
| | | <tr> |
| | | <td class="layui-td-gray">岗位名称<font>*</font></td> |
| | | <td> |
| | | <input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入岗位名称" lay-reqText="请输入岗位名称" class="layui-input"> |
| | | </td> |
| | | <td class="layui-td-gray-3">岗位工时单价(元)<font>*</font></td> |
| | | <td> |
| | | <input type="text" name="work_price" lay-verify="required|number" placeholder="请输入岗位工时单价" lay-reqText="请输入岗位工时单价" autocomplete="off" class="layui-input"> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="layui-td-gray">状态<font>*</font></td> |
| | | <td colspan="3"> |
| | | <input type="radio" name="status" value="1" title="正常" checked> |
| | | <input type="radio" name="status" value="0" title="禁用"> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="layui-td-gray">权限角色<font>*</font></td> |
| | | <td colspan="3"> |
| | | {volist name="$group" id="v"} |
| | | <input type="checkbox" name="group_id[]" title="{$v.title}" value="{$v.id}" lay-skin="primary"> |
| | | {/volist} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="layui-td-gray">岗位备注</td> |
| | | <td colspan="3"> |
| | | <textarea name="remark" placeholder="请输入岗位备注" class="layui-textarea"></textarea> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | {else/} |
| | | <table class="layui-table layui-table-form"> |
| | | <tr> |
| | | <td class="layui-td-gray">岗位名称<font>*</font></td> |
| | | <td> |
| | | <input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入岗位名称" lay-reqText="请输入岗位名称" class="layui-input"> |
| | | </td> |
| | | <td class="layui-td-gray-3">岗位工时单价(元)<font>*</font></td> |
| | | <td> |
| | | <input type="text" name="work_price" value="{$detail.work_price}" lay-verify="required|number" placeholder="请输入岗位工时单价" lay-reqText="请输入岗位工时单价" autocomplete="off" class="layui-input"> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="layui-td-gray">状态<font>*</font></td> |
| | | <td colspan="3"> |
| | | <input type="radio" name="status" value="1" title="正常" {eq name="$detail.status" value="1"}checked{/eq}> |
| | | <input type="radio" name="status" value="0" title="禁止" {eq name="$detail.status" value="0"}checked{/eq}> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="layui-td-gray">权限角色<font>*</font></td> |
| | | <td colspan="3"> |
| | | {volist name="$group" id="v"} |
| | | <input type="checkbox" name="group_id[]" title="{$v.title}" value="{$v.id}" {eq name="$v.checked" value="1" }checked{/eq} lay-skin="primary"> |
| | | {/volist} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="layui-td-gray">岗位备注</td> |
| | | <td colspan="3"> |
| | | <textarea name="remark" placeholder="请输入岗位备注" class="layui-textarea">{$detail.remark}</textarea> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | {/if} |
| | | <div class="pt-4"> |
| | | <input type="hidden" name="id" value="{$id}"> |
| | | <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button> |
| | | <button type="reset" class="layui-btn layui-btn-primary">重置</button> |
| | | </div> |
| | | </form> |
| | | {/block} |
| | | <!-- /主体 --> |
| | | |
| | | <!-- 脚本 --> |
| | | {block name="script"} |
| | | <script> |
| | | const moduleInit = ['tool']; |
| | | function gouguInit() { |
| | | var form = layui.form,tool=layui.tool; |
| | | form.on('submit(webform)', function(data){ |
| | | let callback = function (e) { |
| | | layer.msg(e.msg); |
| | | if (e.code == 0) { |
| | | setTimeout(function () { |
| | | parent.location.reload(); |
| | | }, 1000); |
| | | } |
| | | } |
| | | tool.post("/user/position/add", data.field, callback); |
| | | return false; |
| | | }); |
| | | //监听提交 |
| | | form.on('submit(webform)', function(data){ |
| | | let callback = function (e) { |
| | | layer.msg(e.msg); |
| | | if (e.code == 0) { |
| | | tool.sideClose(1000); |
| | | } |
| | | } |
| | | tool.post("/user/position/add", data.field, callback); |
| | | return false; |
| | | }); |
| | | } |
| | | |
| | | </script> |
| | | {/block} |
| | | <!-- /脚本 --> |
New file |
| | |
| | | {extend name="../../base/view/common/base" /} |
| | | <!-- 主体 --> |
| | | {block name="body"} |
| | | <div class="p-page"> |
| | | <table class="layui-hide" id="test" lay-filter="test"></table> |
| | | </div> |
| | | |
| | | <script type="text/html" id="status"> |
| | | <i |
| | | class="layui-icon {{# if(d.status == 1){ }}green layui-icon-ok{{# } else { }}yellow layui-icon-close{{# } }}" |
| | | ></i> |
| | | </script> |
| | | <script type="text/html" id="toolbarDemo"> |
| | | <div class="layui-btn-container"> |
| | | <button class="layui-btn layui-btn-sm" lay-event="add">+ 添加考勤组</button> |
| | | </div> |
| | | </script> |
| | | <script type="text/html" id="barDemo"> |
| | | <div class="layui-btn-group"> |
| | | <button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button |
| | | ><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"> |
| | | 删除 |
| | | </button> |
| | | </div> |
| | | </script> |
| | | |
| | | {/block} |
| | | <!-- /主体 --> |
| | | |
| | | <!-- 脚本 --> |
| | | {block name="script"} |
| | | <script> |
| | | const moduleInit = ["tool"]; |
| | | function gouguInit() { |
| | | var table = layui.table, |
| | | tool = layui.tool; |
| | | layui.pageTable = table.render({ |
| | | elem: "#test", |
| | | title: "考勤组列表", |
| | | toolbar: "#toolbarDemo", |
| | | defaultToolbar: false, |
| | | url: "/user/attendance/index", //数据接口 |
| | | page: false, //开启分页 |
| | | cols: [ |
| | | [ |
| | | { |
| | | field: "title", |
| | | title: "名称", |
| | | align: "center" |
| | | }, |
| | | { |
| | | field: "peopleNum", |
| | | title: "人数", |
| | | width: 120 |
| | | }, |
| | | { |
| | | field: "type", |
| | | title: "类型", |
| | | width: 120 |
| | | }, |
| | | { |
| | | field: "time", |
| | | title: "考勤时间" |
| | | }, |
| | | { |
| | | field: "right", |
| | | title: "操作", |
| | | toolbar: "#barDemo", |
| | | width: 120, |
| | | align: "center" |
| | | } |
| | | ] |
| | | ] |
| | | }); |
| | | |
| | | //表头工具栏事件 |
| | | table.on("toolbar(test)", function (obj) { |
| | | if (obj.event === "add") { |
| | | tool.side("/user/attendance/add"); |
| | | return; |
| | | } |
| | | }); |
| | | //监听行工具事件 |
| | | table.on("tool(test)", function (obj) { |
| | | var data = obj.data; |
| | | if (obj.event === "edit") { |
| | | tool.side("/user/attendance/add?id=" + data.id); |
| | | return; |
| | | } |
| | | if (obj.event === "del") { |
| | | layer.confirm( |
| | | "您确定要删除该考勤组", |
| | | { |
| | | icon: 3, |
| | | title: "提示" |
| | | }, |
| | | function (index) { |
| | | let callback = function (e) { |
| | | layer.msg(e.msg); |
| | | if (e.code == 0) { |
| | | obj.del(); |
| | | } |
| | | }; |
| | | tool.delete("/user/attendance/delete", { id: obj.data.id }, callback); |
| | | layer.close(index); |
| | | } |
| | | ); |
| | | } |
| | | }); |
| | | } |
| | | </script> |
| | | {/block} |
| | | <!-- /脚本 --> |
| | |
| | | // 数据库类型 |
| | | 'type' => 'mysql', |
| | | // 服务器地址 |
| | | 'hostname' => '127.0.0.1', |
| | | 'hostname' => '192.168.3.145', |
| | | // 数据库名 |
| | | 'database' => 'oa', |
| | | // 用户名 |