YM
2025-03-04 4d415fadc7a5b17f88646cffc343f98370f3b026
添加考勤组
1个文件已修改
3个文件已添加
353 ■■■■■ 已修改文件
app/user/controller/Attendance.php 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/user/view/attendance/add.html 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/user/view/attendance/index.html 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/database.php 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/user/controller/Attendance.php
New file
@@ -0,0 +1,121 @@
<?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();
        }
    }
}
app/user/view/attendance/add.html
New file
@@ -0,0 +1,117 @@
{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}
<!-- /脚本 -->
app/user/view/attendance/index.html
New file
@@ -0,0 +1,113 @@
{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}
<!-- /脚本 -->
config/database.php
@@ -16,7 +16,7 @@
            // 数据库类型
            'type'               =>  'mysql',
            // 服务器地址
            'hostname'           =>  '127.0.0.1',
            'hostname'           =>  '192.168.3.145',
            // 数据库名
            'database'           =>  'oa',
            // 用户名