From 4d415fadc7a5b17f88646cffc343f98370f3b026 Mon Sep 17 00:00:00 2001
From: YM <479443481@qq.com>
Date: 星期二, 04 三月 2025 21:26:14 +0800
Subject: [PATCH] 添加考勤组

---
 app/user/view/attendance/index.html |  113 ++++++++++++++++++
 app/user/view/attendance/add.html   |  117 +++++++++++++++++++
 app/user/controller/Attendance.php  |  121 ++++++++++++++++++++
 config/database.php                 |    2 
 4 files changed, 352 insertions(+), 1 deletions(-)

diff --git a/app/user/controller/Attendance.php b/app/user/controller/Attendance.php
new file mode 100644
index 0000000..7bf1907
--- /dev/null
+++ b/app/user/controller/Attendance.php
@@ -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();
+        }
+    }
+
+}
diff --git a/app/user/view/attendance/add.html b/app/user/view/attendance/add.html
new file mode 100644
index 0000000..668246c
--- /dev/null
+++ b/app/user/view/attendance/add.html
@@ -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="姝e父" 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="姝e父" {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}
+<!-- /鑴氭湰 -->
\ No newline at end of file
diff --git a/app/user/view/attendance/index.html b/app/user/view/attendance/index.html
new file mode 100644
index 0000000..5bdd46c
--- /dev/null
+++ b/app/user/view/attendance/index.html
@@ -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}
+<!-- /鑴氭湰 -->
diff --git a/config/database.php b/config/database.php
index 1b9ac73..bd37f40 100644
--- a/config/database.php
+++ b/config/database.php
@@ -16,7 +16,7 @@
             // 鏁版嵁搴撶被鍨�
             'type'               =>  'mysql',
             // 鏈嶅姟鍣ㄥ湴鍧�
-            'hostname'           =>  '127.0.0.1',
+            'hostname'           =>  '192.168.3.145',
             // 鏁版嵁搴撳悕
             'database'           =>  'oa',
             // 鐢ㄦ埛鍚�

--
Gitblit v1.9.1