From f2a13e01e8843302dfb2e80fe18edec3a4ba137f Mon Sep 17 00:00:00 2001 From: YM <479443481@qq.com> Date: 星期一, 10 三月 2025 00:58:19 +0800 Subject: [PATCH] 考勤组的增加已经表单逻辑 --- app/user/validate/AttendanceCheck.php | 49 + app/user/controller/Api.php | 38 public/static/assets/gougu/module/oaPicker.js | 1226 ++++++++++++++++++++++--------------- app/user/view/work_plan/add.html | 11 public/static/assets/gougu/css/gougu.css | 2 app/user/view/attendance/add.html | 479 +++++++++++--- app/user/controller/Attendance.php | 113 ++ 7 files changed, 1,266 insertions(+), 652 deletions(-) diff --git a/app/user/controller/Api.php b/app/user/controller/Api.php index 61c6bfe..2017dd6 100644 --- a/app/user/controller/Api.php +++ b/app/user/controller/Api.php @@ -10,7 +10,7 @@ * @Author 鍕捐偂宸ヤ綔瀹� <hdm58@qq.com> +----------------------------------------------------------------------------------------------- */ -declare (strict_types = 1); +declare(strict_types=1); namespace app\user\controller; use app\api\BaseController; @@ -22,22 +22,38 @@ public function del_profiles() { $id = get_params("id"); - if (Db::name('AdminProfiles')->where('id', $id)->update(['delete_time'=>time()]) !== false) { - return to_assign(0, "鍒犻櫎鎴愬姛"); - } else { - return to_assign(1, "鍒犻櫎澶辫触"); - } + if (Db::name('AdminProfiles')->where('id', $id)->update(['delete_time' => time()]) !== false) { + return to_assign(0, "鍒犻櫎鎴愬姛"); + } else { + return to_assign(1, "鍒犻櫎澶辫触"); + } } //鍒犻櫎鐝鑰冨嫟鏃堕棿 public function del_work_plan_time() { $id = get_params("id"); - if (Db::name('AttendanceWorkTime')->where('id', $id)->update(['is_del'=>1]) !== false) { - return to_assign(0, "鍒犻櫎鎴愬姛"); - } else { - return to_assign(1, "鍒犻櫎澶辫触"); - } + if (Db::name('AttendanceWorkTime')->where('id', $id)->update(['is_del' => 1]) !== false) { + return to_assign(0, "鍒犻櫎鎴愬姛"); + } else { + return to_assign(1, "鍒犻櫎澶辫触"); + } } + //鑾峰彇鐝鍒楄〃 + public function get_work_plan() + { + $list = Db::name('AttendanceWorkPlan')->where('is_del', '=', 0)->order('create_time asc')->select()->each(function ($item, $key) { + $item['create_time'] = date('Y-m-d H:i:s', $item['create_time']); + $item['update_time'] = $item['update_time'] > 0 ? date('Y-m-d H:i:s', $item['update_time']) : ""; + return $item; + })->toArray(); + foreach ($list as &$val) { + $mappingTimes = Db::name('AttendanceWorkPlanWorkTimeLink')->where(['work_plan_id' => $val['id']])->column('work_time_id'); + $times = Db::name('AttendanceWorkTime')->where('id', 'in', $mappingTimes)->where('is_del', '=', 0)->select()->toArray(); + $val['times'] = $times; + } + $res['data'] = $list; + return table_assign(0, '', $res); + } } diff --git a/app/user/controller/Attendance.php b/app/user/controller/Attendance.php index 811f4f1..0222bab 100644 --- a/app/user/controller/Attendance.php +++ b/app/user/controller/Attendance.php @@ -1,11 +1,11 @@ <?php -declare (strict_types = 1); +declare(strict_types=1); namespace app\user\controller; use app\base\BaseController; -// use app\user\validate\PositionCheck; +use app\user\validate\AttendanceCheck; use think\exception\ValidateException; use think\facade\Db; use think\facade\View; @@ -25,7 +25,7 @@ $res['data'] = $list; return table_assign(0, '', $res); } else { - return view(); + return view(); } } @@ -36,7 +36,7 @@ if (request()->isAjax()) { if (!empty($param['id']) && $param['id'] > 0) { try { - validate(PositionCheck::class)->scene('edit')->check($param); + validate(AttendanceCheck::class)->scene('edit')->check($param); } catch (ValidateException $e) { // 楠岃瘉澶辫触 杈撳嚭閿欒淇℃伅 return to_assign(1, $e->getError()); @@ -67,7 +67,7 @@ } } else { try { - validate(PositionCheck::class)->scene('add')->check($param); + validate(AttendanceCheck::class)->scene('add')->check($param); } catch (ValidateException $e) { // 楠岃瘉澶辫触 杈撳嚭閿欒淇℃伅 return to_assign(1, $e->getError()); @@ -75,7 +75,85 @@ // 鍚姩浜嬪姟 Db::startTrans(); try { - $uid = Db::name('AttendanceGroup')->strict(false)->field(true)->insertGetId($param); + // 鎻掑叆鑰冨嫟缁勮〃 + $setData = [ + 'name' => $param['name'], + 'type' => $param['type'], + 'is_del' => 0, + 'create_time' => time(), + 'mon_work_plan_id' => isset($param['work1']) && $param['work1'] == "on" && isset($param['work_plan_id1']) ? intval($param['work_plan_id1']) : 0, + 'tue_work_plan_id' => isset($param['work2']) && $param['work2'] == "on" && isset($param['work_plan_id2']) ? intval($param['work_plan_id1']) : 0, + 'wed_work_plan_id' => isset($param['work3']) && $param['work3'] == "on" && isset($param['work_plan_id3']) ? intval($param['work_plan_id1']) : 0, + 'thur_work_plan_id' => isset($param['work4']) && $param['work4'] == "on" && isset($param['work_plan_id4']) ? intval($param['work_plan_id1']) : 0, + 'fri_work_plan_id' => isset($param['work5']) && $param['work5'] == "on" && isset($param['work_plan_id5']) ? intval($param['work_plan_id1']) : 0, + 'sat_work_plan_id' => isset($param['work6']) && $param['work6'] == "on" && isset($param['work_plan_id6']) ? intval($param['work_plan_id1']) : 0, + 'sun_work_plan_id' => isset($param['work7']) && $param['work7'] == "on" && isset($param['work_plan_id7']) ? intval($param['work_plan_id1']) : 0, + ]; + $uid = Db::name('AttendanceGroup')->strict(false)->field(true)->insertGetId($setData); + // 鎻掑叆鐢ㄦ埛鍏宠仈琛� + $attendance_participants_ids = explode(",", $param['attendance_participants_id']); + $attendance_not_participants_id = explode(",", $param['attendance_not_participants_id']); + foreach ($attendance_participants_ids as $key => $value) { + if ($value != '') { + $mappingData[$key] = [ + 'group_id' => $uid, + 'user_id' => intval($value), + 'type' => "1", + ]; + Db::name('AttendanceUserLink')->strict(false)->field(true)->insertAll($mappingData); + } + } + foreach ($attendance_not_participants_id as $key => $value) { + if ($value != '') { + $mappingData[$key] = [ + 'group_id' => $uid, + 'user_id' => intval($value), + 'type' => "2", + ]; + Db::name('AttendanceUserLink')->strict(false)->field(true)->insertAll($mappingData); + } + } + + // 鎻掑叆鏃堕棿琛� + for ($i = 0; $i < count($param['necessaryTime']); $i++) { + // 鑾峰彇鏃堕棿鏁版嵁 + $timeData1 = [ + 'begin_data' => $param['necessaryTime'][$i] . " 00:00:00", + 'end_data' => $param['necessaryTime'][$i] . " 23:59:59", + 'type' => "1", + ]; + // 鎻掑叆鏃堕棿鏁版嵁 + $timeIds1[$i] = Db::name('AttendanceSpecialDate')->strict(false)->field(true)->insertGetId($timeData1); + } + + foreach ($timeIds1 as $key => $value) { + $mappingData1[$key] = [ + 'group_id' => $uid, + 'special_date_id' => $value, + ]; + } + Db::name('AttendanceGroupSpecialDateLink')->strict(false)->field(true)->insertAll($mappingData1); + + + for ($i = 0; $i < count($param['unNecessaryTime']); $i++) { + // 鑾峰彇鏃堕棿鏁版嵁 + $timeData2 = [ + 'begin_data' => $param['unNecessaryTime'][$i] . " 00:00:00", + 'end_data' => $param['unNecessaryTime'][$i] . " 23:59:59", + 'type' => "2", + ]; + // 鎻掑叆鏃堕棿鏁版嵁 + $timeIds2[$i] = Db::name('AttendanceSpecialDate')->strict(false)->field(true)->insertGetId($timeData2); + } + + foreach ($timeIds2 as $key => $value) { + $mappingData2[$key] = [ + 'group_id' => $uid, + 'special_date_id' => $value, + ]; + } + Db::name('AttendanceGroupSpecialDateLink')->strict(false)->field(true)->insertAll($mappingData2); + // foreach ($param['group_id'] as $k => $v) { // $data[$k] = [ // 'pid' => $uid, @@ -94,22 +172,21 @@ } } return to_assign(); - } - else{ + } else { $id = isset($param['id']) ? $param['id'] : 0; // $group = Db::name('AdminGroup')->order('create_time asc')->select()->toArray(); - // if ($id > 0) { + if ($id > 0) { $detail = Db::name('AttendanceGroup')->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; - // } - // } + // $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/validate/AttendanceCheck.php b/app/user/validate/AttendanceCheck.php new file mode 100644 index 0000000..62079bb --- /dev/null +++ b/app/user/validate/AttendanceCheck.php @@ -0,0 +1,49 @@ +<?php +/** ++----------------------------------------------------------------------------------------------- +* GouGuOPEN [ 宸︽墜鐮斿彂锛屽彸鎵嬪紑婧愶紝鏈潵鍙湡锛乚 ++----------------------------------------------------------------------------------------------- +* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved. ++----------------------------------------------------------------------------------------------- +* @Licensed 鍕捐偂OA锛屽紑婧愪笖鍙厤璐逛娇鐢紝浣嗗苟涓嶆槸鑷敱杞欢锛屾湭缁忔巿鏉冭鍙笉鑳藉幓闄ゅ嬀鑲A鐨勭浉鍏崇増鏉冧俊鎭� ++----------------------------------------------------------------------------------------------- +* @Author 鍕捐偂宸ヤ綔瀹� <hdm58@qq.com> ++----------------------------------------------------------------------------------------------- +*/ + +namespace app\user\validate; +use think\facade\Db; +use think\Validate; + +class AttendanceCheck extends Validate +{ + // 鑷畾涔夐獙璇佽鍒� + protected function checkUnique($value, $rule, $data) + { + [$table, $field, $id] = explode(',', $rule); + $idField = $id ?: 'id'; + $idValue = $data[$idField] ?? null; + $map = [ + [$field, '=', $value], + ]; + if (!is_null($idValue)) { + $map[] = [$idField, '<>', $idValue]; + } + return !Db::name(name: $table)->where($map)->count(); + } + protected $rule = [ + 'name' => 'require|checkUnique:AttendanceWorkPlan,name,id', + 'id' => 'require' + ]; + + protected $message = [ + 'name.require' => '鑰冨嫟缁勫悕绉颁笉鑳戒负绌�', + 'name.checkUnique' => '鍚屾牱鐨勮�冨嫟缁勫悕绉板凡缁忓瓨鍦�', + 'id.require' => '缂哄皯鏇存柊鏉′欢', + ]; + + protected $scene = [ + 'add' => ['name'], + 'edit' => ['name', 'id'], + ]; +} diff --git a/app/user/view/attendance/add.html b/app/user/view/attendance/add.html index 668246c..e07203a 100644 --- a/app/user/view/attendance/add.html +++ b/app/user/view/attendance/add.html @@ -1,82 +1,272 @@ {extend name="../../base/view/common/base" /} <!-- 涓讳綋 --> {block name="body"} +<style> + #showNecessaryTimeBox, + #showUnNecessaryTimeBox { + display: flex; + } + #showNecessaryTimeBox p, + #showUnNecessaryTimeBox p { + line-height: 26px; + display: none; + } + #showNecessaryTimeList, + #showUnNecessaryTimeList { + display: flex; + gap: 20px; + } + .timeItem { + border: 1px solid #ccc; + padding: 2px 8px; + border-radius: 4px; + position: relative; + } + .closeBtn { + background: #ff5722; + color: #fff; + border-radius: 50%; + font-size: 12px; + display: inline-block; + width: 16px; + height: 16px; + line-height: 18px; + text-align: center; + position: absolute; + right: -6px; + top: -6px; + cursor: pointer; + } +</style> <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> + <h3 class="pb-3">鑰冨嫟缁�</h3> + {if condition="$id eq 0"} + <table class="layui-table"> + <tr> + <td class="layui-td-gray-3">鑰冨嫟缁勫悕绉�<font>*</font></td> + <td> + <input + type="text" + name="name" + lay-verify="required" + autocomplete="off" + placeholder="璇疯緭鍏ヨ�冨嫟缁勫悕绉�" + lay-reqText="璇疯緭鍏ュ矖浣嶅悕绉�" + class="layui-input" + /> + </td> + <td class="layui-td-gray-3">鑰冨嫟绫诲瀷<font>*</font></td> + <td> + <select name="type" lay-verify="required" lay-reqText="璇烽�夋嫨"> + <option value="">璇烽�夋嫨</option> + <option value="1">鍥哄畾鐝埗</option> + <option value="2">鑷敱宸ユ椂</option> + </select> + </td> + </tr> + <tr> + <td class="layui-td-gray-3">鍙備笌鑰冨嫟浜哄憳<font>*</font></td> + <td> + <input + type="text" + name="attendance_participants" + autocomplete="off" + readonly + lay-verify="required" + lay-reqText="璇烽�夋嫨鍙備笌鑰冨嫟浜哄憳" + placeholder="璇烽�夋嫨鍙備笌鑰冨嫟浜哄憳" + class="layui-input picker-diy" + /> + <input type="hidden" name="attendance_participants_id" /> + </td> + <td class="layui-td-gray-3">鏃犻渶鑰冨嫟浜哄憳</td> + <td> + <input + type="text" + name="attendance_not_participants" + autocomplete="off" + readonly + lay-reqText="璇烽�夋嫨鏃犻渶鑰冨嫟浜哄憳" + placeholder="璇烽�夋嫨鏃犻渶鑰冨嫟浜哄憳" + class="layui-input picker-diy" + /> + <input type="hidden" name="attendance_not_participants_id" /> + </td> + </tr> + <tr> + <td class="layui-td-gray">宸ヤ綔鏃ヨ缃�<font>*</font></td> + <td colspan="5"> + <table + id="timeBox" + class="layui-table layui-table-min" + style="margin: 0" + > + <tr> + <th width="50"></th> + <th width="100">宸ヤ綔鏃�</th> + <th>鐝鏃堕棿娈�</th> + <th width="60">鎿嶄綔</th> + </tr> + <tr> + <td> + <input type="checkbox" name="work1" lay-skin="primary" title="" /> + </td> + <td>鍛ㄤ竴</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id1" value="" /> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="work2" lay-skin="primary" title="" /> + </td> + <td>鍛ㄤ簩</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id2" value="" /> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="work3" lay-skin="primary" title="" /> + </td> + <td>鍛ㄤ笁</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id3" value="" /> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="work4" lay-skin="primary" title="" /> + </td> + <td>鍛ㄥ洓</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id4" value="" /> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="work5" lay-skin="primary" title="" /> + </td> + <td>鍛ㄤ簲</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id5" value="" /> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="work6" lay-skin="primary" title="" /> + </td> + <td>鍛ㄥ叚</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id6" value="" /> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="work7" lay-skin="primary" title="" /> + </td> + <td>鍛ㄦ棩</td> + <td style="text-align: left"></td> + <td> + <a class="layui-btn layui-btn-xs picker-oa" data-types="workPlan" + >璁剧疆鐝</a + > + <input type="hidden" name="work_plan_id7" value="" /> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td class="layui-td-gray-3">鐗规畩鏃ユ湡</td> + <td colspan="5"> + <div style="margin-bottom: 10px"> + <div id="showNecessaryTimeBox"> + <p>蹇呴』鎵撳崱鏃ユ湡锛�</p> + <div id="showNecessaryTimeList"></div> + </div> + </div> + <div style="margin-bottom: 10px"> + <button + class="layui-btn layui-btn-sm" + type="button" + id="addNecessaryTimeBtn" + > + + 鏂板蹇呴』鎵撳崱鐨勬棩鏈� + </button> + </div> + <div style="margin-bottom: 10px"> + <div id="showUnNecessaryTimeBox"> + <p>鏃犻渶鎵撳崱鏃ユ湡锛�</p> + <div id="showUnNecessaryTimeList"></div> + </div> + </div> + <div style="margin-bottom: 10px"> + <button + class="layui-btn layui-btn-sm" + type="button" + id="addUnNecessaryTimeBtn" + > + + 鏂板鏃犻渶鎵撳崱鐨勬棩鏈� + </button> + </div> + </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="name" + value="{$detail.name}" + lay-verify="required" + autocomplete="off" + placeholder="璇疯緭鍏ヨ�冨嫟缁勫悕绉�" + lay-reqText="璇疯緭鍏ュ矖浣嶅悕绉�" + class="layui-input" + /> + </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} <!-- /涓讳綋 --> @@ -84,34 +274,117 @@ <!-- 鑴氭湰 --> {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; - }); - } + const moduleInit = ["tool", "oaPicker"]; + function gouguInit() { + var oaPicker = layui.oaPicker, + laydate = layui.laydate, + form = layui.form, + tool = layui.tool; + //閫夋嫨鍛樺伐寮圭獥 + $("body").on("click", ".picker-diy", function () { + let that = $(this); + let ids = that.next().val() + "", + names = that.val() + ""; + oaPicker.employeeInit({ + ids: ids, + names: names, + type: 2, //1鏄崟閫夛紝2鏄閫� + callback: function (data) { + //杩欓噷鏄�夋嫨鍚庣殑鍥炶皟鏂规硶锛屽彲浠ユ牴鎹叿浣撻渶姹傝嚜瀹氫箟鍐欏摝 + let select_id = [], + select_name = []; + for (var a = 0; a < data.length; a++) { + select_id.push(data[a].id); + select_name.push(data[a].name); + } + that.val(select_name.join(",")); + that.next().val(select_id.join(",")); + } + }); + }); + laydate.render({ + elem: "#addNecessaryTimeBtn", + done: function (value, date) { + $("#addNecessaryTimeBtn").html("+ 鏂板蹇呴』鎵撳崱鐨勬棩鏈�"); + var oldValues = $(".timeValue"); + var isE = false; + for (let i = 0; i < oldValues.length; i++) { + const oldValue = oldValues[i]; + if (oldValue.innerHTML == value) { + isE = true; + } + } + if (!isE) { + $("#showNecessaryTimeBox p").show(); + $("#showNecessaryTimeList").append( + "<div class='timeItem'><span class='timeValue'>" + + value + + "</span><input type='hidden' name='necessaryTime[]' value=" + + value + + " /><span class='closeBtn layui-icon'>ဆ</span></div>" + ); + bindCloseBtn(); + } else { + layer.msg("宸叉湁鐩稿悓鏃ユ湡"); + } + } + }); + + laydate.render({ + elem: "#addUnNecessaryTimeBtn", + done: function (value, date) { + $("#addUnNecessaryTimeBtn").html("+ 鏂板鏃犻渶鎵撳崱鐨勬棩鏈�"); + var oldValues = $(".timeValue"); + var isE = false; + for (let i = 0; i < oldValues.length; i++) { + const oldValue = oldValues[i]; + if (oldValue.innerHTML == value) { + isE = true; + } + } + if (!isE) { + $("#showUnNecessaryTimeBox p").show(); + $("#showUnNecessaryTimeList").append( + "<div class='timeItem'><span class='timeValue'>" + + value + + "</span><input type='hidden' name='unNecessaryTime[]' value=" + + value + + " /><span class='closeBtn layui-icon'>ဆ</span></div>" + ); + bindCloseBtn(); + } else { + layer.msg("宸叉湁鐩稿悓鏃ユ湡"); + } + } + }); + + //鐩戝惉鎻愪氦 + form.on("submit(webform)", function (data) { + let callback = function (e) { + layer.msg(e.msg); + if (e.code == 0) { + tool.sideClose(1000); + } + }; + tool.post("/user/attendance/add", data.field, callback); + return false; + }); + } + + function bindCloseBtn() { + $(".closeBtn").off("click"); + $(".closeBtn").on("click", function () { + let that = $(this); + that.parent().remove(); + if ($("#showNecessaryTimeList .timeItem").length == 0) { + $("#showNecessaryTimeBox p").hide(); + } + if ($("#showUnNecessaryTimeList .timeItem").length == 0) { + $("#showUnNecessaryTimeBox p").hide(); + } + }); + } </script> {/block} -<!-- /鑴氭湰 --> \ No newline at end of file +<!-- /鑴氭湰 --> diff --git a/app/user/view/work_plan/add.html b/app/user/view/work_plan/add.html index 6ba0331..8edb72c 100644 --- a/app/user/view/work_plan/add.html +++ b/app/user/view/work_plan/add.html @@ -555,17 +555,6 @@ tool.post("/user/workPlan/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/workPlan/add", data.field, callback); - return false; - }); } </script> {/block} diff --git a/public/static/assets/gougu/css/gougu.css b/public/static/assets/gougu/css/gougu.css index ef5c45d..67965be 100644 --- a/public/static/assets/gougu/css/gougu.css +++ b/public/static/assets/gougu/css/gougu.css @@ -9,7 +9,7 @@ .gougu-picker .layui-layer-btn1{background-color:#f5f5f5} .gougu-picker .layui-layer-btn2{background-color:#EAFAFF} .picker-table{padding:8px 8px 0;} -.picker-table .layui-table-cell {padding:4px; height: 32px;line-height: 24px;} +.picker-table .layui-table-cell {padding:4px; line-height: 24px;} .layui-table-cell{padding:6px;} .layui-table-box{background-color:#fff;} .layui-table-page{background-color:#fff;border-bottom:1px solid #eeeeee;} diff --git a/public/static/assets/gougu/module/oaPicker.js b/public/static/assets/gougu/module/oaPicker.js index fe167d1..4baf9eb 100644 --- a/public/static/assets/gougu/module/oaPicker.js +++ b/public/static/assets/gougu/module/oaPicker.js @@ -1,514 +1,724 @@ -layui.define(['tool'], function (exports) { - const layer = layui.layer, tool = layui.tool,form=layui.form, table=layui.table,tree = layui.tree; - - const dataPicker ={ - 'department':{ - title:'閫夋嫨閮ㄩ棬', - url:'/api/index/get_department', - area: ['400px', '524px'], - searchbar:'', - page:false, - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'閮ㄩ棬鍚嶇О'}] - }, - 'position':{ - title:'閫夋嫨宀椾綅', - url:'/api/index/get_position', - area: ['400px', '524px'], - searchbar:'', - page:false, - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'宀椾綅鍚嶇О'}] - }, - 'services':{ - title:'閫夋嫨鏈嶅姟绫诲瀷', - url:'/api/index/get_services', - area: ['400px', '524px'], - searchbar:'', - page:false, - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'鏈嶅姟鍚嶇О'},{field:'price',title:'鏈嶅姟鍗曚环'}] - }, - 'template':{ - title:'閫夋嫨娑堟伅妯℃澘', - url:'/api/index/get_template', - area: ['600px', '568px'], - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'娑堟伅妯℃澘鍚嶇О'}] - }, - 'workcate':{ - title:'閫夋嫨宸ヤ綔绫诲瀷', - url:'/api/index/get_work_cate', - area: ['400px', '524px'], - searchbar:'', - page:false, - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'宸ヤ綔绫诲瀷鍚嶇О'}] - }, - 'property':{ - title:'閫夋嫨鍥哄畾璧勪骇', - url:'/adm/api/get_property', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'璧勪骇鍚嶇О'}] - }, - 'car':{ - title:'閫夋嫨杞﹁締淇℃伅', - url:'/adm/api/get_car', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'杞﹁締鍚嶇О'},{field:'name',width:100,title:'杞︾墝鍙风爜',align:'center'}] - }, - 'room':{ - title:'閫夋嫨浼氳瀹�', - url:'/adm/api/get_meeting_room', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'浼氳瀹ゅ悕绉�'},{field:'num',width:100,title:'鍙绾充汉鏁�',align:'center'}] - }, - 'customer':{ - title:'閫夋嫨瀹㈡埛', - url:'/customer/api/get_customer', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'name',title:'瀹㈡埛鍚嶇О'}] - }, - 'supplier':{ - title:'閫夋嫨渚涘簲鍟�', - url:'/contract/api/get_supplier', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'渚涘簲鍟嗗悕绉�'}] - }, - 'contract':{ - title:'閫夋嫨閿�鍞悎鍚�', - url:'/contract/api/get_contract', - area: ['800px', '568px'], - cols:[{ field: 'code',width:160,title:'鍚堝悓缂栧彿',align:'center'},{field:'name',title:'鍚堝悓鍚嶇О'},{ field:'customer',title:'鍏宠仈瀹㈡埛',width: 240}] - }, - 'product':{ - title:'閫夋嫨浜у搧', - url:'/contract/api/get_product', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'浜у搧鍚嶇О'},{field:'sale_price',title:'閿�鍞崟浠�',width: 120,align:'center'}] - }, - 'purchase':{ - title:'閫夋嫨閲囪喘鍚堝悓', - url:'/contract/api/get_purchase', - area: ['800px', '568px'], - cols:[{ field: 'code',width:160,title:'鍚堝悓缂栧彿',align:'center'},{field:'name',title:'鍚堝悓鍚嶇О'},{ field:'supplier',title:'鍏宠仈渚涘簲鍟�',width: 240}] - }, - 'purchased':{ - title:'閫夋嫨閲囪喘鐗╁搧', - url:'/contract/api/get_purchased', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'閲囪喘鐗╁搧鍚嶇О'},{field:'purchase_price',title:'閲囪喘鍗曚环',width: 120,align:'center'}] - }, - 'project':{ - title:'閫夋嫨椤圭洰', - url:'/project/api/get_project', - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{field:'title',title:'椤圭洰鍚嶇О'}] - }, - 'task':{ - title:'閫夋嫨浠诲姟', - url:'/project/api/get_task', - area: ['800px', '568px'], - cols:[{field:'id',width:90,title:'搴忓彿',align:'center'},{ field:'title',title:'浠诲姟涓婚'},{field:'project',width:240,title:'鍏宠仈椤圭洰'}] - } - } +layui.define(["tool"], function (exports) { + const layer = layui.layer, + tool = layui.tool, + form = layui.form, + table = layui.table, + tree = layui.tree; - let select_ids=[];select_names=[];select_array=[]; - const obj = { - employeeRender:function(){ - var me=this,letterTem=''; - for(var i=0;i<26;i++){ - letterTem+='<span class="layui-letter-span" data-code="'+String.fromCharCode(97+i)+'">'+String.fromCharCode(65+i)+'</span>'; - } - var tpl='<div style="width:210px; height:388px; border-right:1px solid #eee; overflow-x: hidden; overflow-y: auto; float:left;">\ + const dataPicker = { + department: { + title: "閫夋嫨閮ㄩ棬", + url: "/api/index/get_department", + area: ["400px", "524px"], + searchbar: "", + page: false, + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "閮ㄩ棬鍚嶇О" } + ] + }, + position: { + title: "閫夋嫨宀椾綅", + url: "/api/index/get_position", + area: ["400px", "524px"], + searchbar: "", + page: false, + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "宀椾綅鍚嶇О" } + ] + }, + services: { + title: "閫夋嫨鏈嶅姟绫诲瀷", + url: "/api/index/get_services", + area: ["400px", "524px"], + searchbar: "", + page: false, + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "鏈嶅姟鍚嶇О" }, + { field: "price", title: "鏈嶅姟鍗曚环" } + ] + }, + template: { + title: "閫夋嫨娑堟伅妯℃澘", + url: "/api/index/get_template", + area: ["600px", "568px"], + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "娑堟伅妯℃澘鍚嶇О" } + ] + }, + workcate: { + title: "閫夋嫨宸ヤ綔绫诲瀷", + url: "/api/index/get_work_cate", + area: ["400px", "524px"], + searchbar: "", + page: false, + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "宸ヤ綔绫诲瀷鍚嶇О" } + ] + }, + property: { + title: "閫夋嫨鍥哄畾璧勪骇", + url: "/adm/api/get_property", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "璧勪骇鍚嶇О" } + ] + }, + car: { + title: "閫夋嫨杞﹁締淇℃伅", + url: "/adm/api/get_car", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "杞﹁締鍚嶇О" }, + { field: "name", width: 100, title: "杞︾墝鍙风爜", align: "center" } + ] + }, + room: { + title: "閫夋嫨浼氳瀹�", + url: "/adm/api/get_meeting_room", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "浼氳瀹ゅ悕绉�" }, + { field: "num", width: 100, title: "鍙绾充汉鏁�", align: "center" } + ] + }, + customer: { + title: "閫夋嫨瀹㈡埛", + url: "/customer/api/get_customer", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "name", title: "瀹㈡埛鍚嶇О" } + ] + }, + supplier: { + title: "閫夋嫨渚涘簲鍟�", + url: "/contract/api/get_supplier", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "渚涘簲鍟嗗悕绉�" } + ] + }, + contract: { + title: "閫夋嫨閿�鍞悎鍚�", + url: "/contract/api/get_contract", + area: ["800px", "568px"], + cols: [ + { field: "code", width: 160, title: "鍚堝悓缂栧彿", align: "center" }, + { field: "name", title: "鍚堝悓鍚嶇О" }, + { field: "customer", title: "鍏宠仈瀹㈡埛", width: 240 } + ] + }, + product: { + title: "閫夋嫨浜у搧", + url: "/contract/api/get_product", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "浜у搧鍚嶇О" }, + { field: "sale_price", title: "閿�鍞崟浠�", width: 120, align: "center" } + ] + }, + purchase: { + title: "閫夋嫨閲囪喘鍚堝悓", + url: "/contract/api/get_purchase", + area: ["800px", "568px"], + cols: [ + { field: "code", width: 160, title: "鍚堝悓缂栧彿", align: "center" }, + { field: "name", title: "鍚堝悓鍚嶇О" }, + { field: "supplier", title: "鍏宠仈渚涘簲鍟�", width: 240 } + ] + }, + purchased: { + title: "閫夋嫨閲囪喘鐗╁搧", + url: "/contract/api/get_purchased", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "閲囪喘鐗╁搧鍚嶇О" }, + { + field: "purchase_price", + title: "閲囪喘鍗曚环", + width: 120, + align: "center" + } + ] + }, + project: { + title: "閫夋嫨椤圭洰", + url: "/project/api/get_project", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "椤圭洰鍚嶇О" } + ] + }, + task: { + title: "閫夋嫨浠诲姟", + url: "/project/api/get_task", + area: ["800px", "568px"], + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "title", title: "浠诲姟涓婚" }, + { field: "project", width: 240, title: "鍏宠仈椤圭洰" } + ] + }, + workPlan: { + title: "閫夋嫨鐝", + url: "/user/api/get_work_plan", + cols: [ + { field: "id", width: 90, title: "搴忓彿", align: "center" }, + { field: "name", title: "鐝鍚嶇О" }, + { + field: "time", + width: 240, + title: "鑰冨嫟鏃堕棿" + } + ] + } + }; + + let select_ids = []; + select_names = []; + select_array = []; + const obj = { + employeeRender: function () { + var me = this, + letterTem = ""; + for (var i = 0; i < 26; i++) { + letterTem += + '<span class="layui-letter-span" data-code="' + + String.fromCharCode(97 + i) + + '">' + + String.fromCharCode(65 + i) + + "</span>"; + } + var tpl = + '<div style="width:210px; height:388px; border-right:1px solid #eee; overflow-x: hidden; overflow-y: auto; float:left;">\ <div id="employeeDepament" style="padding:6px 0;"></div>\ </div>\ <div style="width:588px; height:388px; user-select:none; overflow-x: hidden; overflow-y: auto; float:left;">\ - <div style="padding:12px 10px 0;"><div style="color:#999; text-align:center;">鈬� 鐐瑰嚮宸﹁竟閮ㄩ棬绛涢�夊憳宸ワ紝鎴栬�呯偣鍑讳笅闈㈠瓧姣嶇瓫閫�</div><div id="letterBar" style="color:#999; text-align:center;">'+letterTem+'</div></div>\ + <div style="padding:12px 10px 0;"><div style="color:#999; text-align:center;">鈬� 鐐瑰嚮宸﹁竟閮ㄩ棬绛涢�夊憳宸ワ紝鎴栬�呯偣鍑讳笅闈㈠瓧姣嶇瓫閫�</div><div id="letterBar" style="color:#999; text-align:center;">' + + letterTem + + '</div></div>\ <div id="employee" style="padding:6px 12px"></div>\ <div style="padding:10px 15px; border-top:1px solid #eee;;"><strong>宸查�夋嫨</strong><span class="layui-tags-all">鍏ㄩ��</span></div>\ - <div id="selectTags" style="padding:10px 15px;">'+me.employeeSelect(0)+'</div>\ - </div>'; - return tpl; - }, - employeeSelect:function(t){ - var me=this,select_tags=''; - if(me.settings.type == 0){ - select_tags+='<span style="color:#1E9FFF">'+me.settings.names+'</span>'; - } - else{ - select_ids=[]; - select_names=[]; - for(var a=0;a<select_array.length;a++){ - if(me.settings.fixedid==select_array[a].id && me.settings.fixedid!=0){ - select_tags+='<span class="layui-tags-span">'+select_array[a].name+'</span>'; - } - else{ - select_tags+='<span class="layui-tags-span">'+select_array[a].name+'<i data-id="'+select_array[a].id+'" class="layui-icon layui-tags-close">醼�</i></span>'; - } - if(t==1){ - $('#employee').find('[data-id="'+select_array[a].id+'"]').addClass('on'); - } - select_ids.push(parseInt(select_array[a].id)); - select_names.push(select_array[a].name); - } - } - //console.log(select_array); - return select_tags; - }, - employeeInit: function (options) { - const opts={ - "title":"閫夋嫨鍛樺伐", - "department_url": "/api/index/get_department_tree", - "employee_url": "/api/index/get_employee", - "type":1,//1鍗曚汉,2澶氫汉 - "fixedid":0, - "ids":"", - "names":"", - "ajax_data":[], - "callback": function(){} - }; - this.settings = $.extend({}, opts, options); - var me=this; - select_ids=[]; - select_names=[]; - select_array=[]; - if(me.settings.ids!='' && me.settings.names!=''){ - select_ids=me.settings.ids.split(','); - select_names=me.settings.names.split(','); - select_ids.sort((a, b) => a - b); - for(var m=0;m<select_ids.length;m++){ - select_array.push({id:select_ids[m],name:select_names[m]}); - } - } - $(parent.$('.express-close')).addClass('parent-colse'); - layer.open({ - type:1, - title:me.settings.title, - area:['800px','500px'], - resize:false, - content:me.employeeRender(), - end: function(){ - $(parent.$('.express-close')).removeClass('parent-colse'); - }, - success:function(obj,idx){ - var dataList=[],letterBar=$('#letterBar'),employee = $('#employee'),selectTags = $('#selectTags'); - $.ajax({ - url:me.settings.department_url, - type:'get', - success:function(res){ - //浠呰妭鐐瑰乏渚у浘鏍囨帶鍒舵敹缂� - tree.render({ - elem: '#employeeDepament', - data: res.trees, - onlyIconControl: true, //鏄惁浠呭厑璁歌妭鐐瑰乏渚у浘鏍囨帶鍒跺睍寮�鏀剁缉 - click: function(obj){ - var tagsItem='<div style="color:#999; text-align:center;">鏆傛棤鍛樺伐</div>'; - $("#employeeDepament").find('.layui-tree-main').removeClass('on'); - $(obj.elem).find('.layui-tree-main').eq(0).addClass('on'); - letterBar.find('span').removeClass('on'); - $.ajax({ - url:me.settings.employee_url, - type:'get', - data:{did:obj.data.id}, - success:function(res){ - me.ajax_data = res.data; - dataList=me.ajax_data; - if(dataList.length>1 && me.settings.type == 2){ - $('.layui-tags-all').show(); - } - else{ - $('.layui-tags-all').hide(); - } - if(dataList.length>0){ - tagsItem=''; - for(var i=0; i<dataList.length; i++){ - if(select_ids.indexOf(dataList[i].id) == -1){ - tagsItem+='<span class="layui-tags-span" data-idx="'+i+'" data-id="'+dataList[i].id+'">'+dataList[i].name+'</span>'; - } - else{ - tagsItem+='<span class="layui-tags-span on" data-idx="'+i+'" data-id="'+dataList[i].id+'">'+dataList[i].name+'</span>'; - } - } - } - employee.html(tagsItem); - } - }) - } - }); - - letterBar.on("click" ,'span',function(){ - var code=$(this).data('code'); - $(this).addClass('on').siblings().removeClass('on'); - $.ajax({ - url:me.settings.employee_url, - type:'get', - data:{id:1}, - success:function(res){ - me.ajax_data = res.data; - var letterData=[],tagsItem='<div style="color:#999; text-align:center;">鏆傛棤鍛樺伐</div>';; - if(me.ajax_data.length>0){ - var tagsItemCode=''; - for(var i=0; i<me.ajax_data.length; i++){ - if(me.ajax_data[i].username.slice(0,1)==code){ - if(select_ids.indexOf(me.ajax_data[i].id) == -1){ - tagsItemCode+='<span class="layui-tags-span" data-idx="'+i+'" data-id="'+me.ajax_data[i].id+'">'+me.ajax_data[i].name+'</span>'; - } - else{ - tagsItemCode+='<span class="layui-tags-span on" data-idx="'+i+'" data-id="'+me.ajax_data[i].id+'">'+me.ajax_data[i].name+'</span>'; - } - letterData.push(me.ajax_data[i]); - } - } - dataList=letterData; - if(dataList.length>2 && me.settings.type == 2){ - $('.layui-tags-all').show(); - } - else{ - $('.layui-tags-all').hide(); - } - if(tagsItemCode!=''){ - tagsItem = tagsItemCode; - } - } - employee.html(tagsItem); - } - }) - }); - } - }) - - if(me.settings.type == 2){ - $('.layui-tags-all').on('click',function(){ - for(var a=0; a<dataList.length;a++){ - if(select_ids.indexOf(dataList[a]['id']) == -1){ - select_array.push(dataList[a]);; - } - } - selectTags.html(me.employeeSelect(1)); - }); - } - - employee.on('click','.layui-tags-span',function(){ - let item_idx=$(this).data('idx'); - let select_item = me.ajax_data[item_idx]; - if(me.settings.type == 1){ - me.settings.callback([select_item]); - layer.close(idx); - } - else{ - if(select_ids.indexOf(select_item['id']) == -1){ - select_array.push(select_item); - selectTags.html(me.employeeSelect(1)); - } - } - }); - - selectTags.on('click','.layui-tags-close',function(){ - let id=$(this).data('id'); - let new_slected=[]; - $('#employee').find('[data-id="'+id+'"]').removeClass('on'); - for(var i=0;i<select_array.length;i++){ - if(select_array[i].id!=id){ - new_slected.push(select_array[i]); - } - } - select_array=new_slected; - selectTags.html(me.employeeSelect(1)); - }); - if(me.settings.type == 1){ - $('#layui-layer'+idx).find('.layui-layer-btn0').hide(); - } - }, - btn: ['纭畾娣诲姞', '娓呯┖宸查��'], - btnAlign:'c', - btn1: function(idx){ - me.settings.callback(select_array); - layer.close(idx); - }, - btn2: function(idx){ - let canceldata= {department:"",did:0,id:0,mobile:0,name:"",nickname:"",position_id:0,sex:0,status:0,thumb:"",username:""}; - me.settings.callback([canceldata]); - layer.close(idx); - } - }) - }, - picker:function(types,type,callback,map){ - let pickerIndex = new Date().getTime(); - let pickerTable,options; - const opts={ - "title":"閫夋嫨", - "url": "", - "ids":"", - "titles":"", - "where":map, - "area": ['600px', '568px'], - "cols":[{field: 'id',width: 80,title:'搴忓彿',align:'center'},{field:'title',title:'鍚嶇О'}], - "searchbar":'<form class="layui-form pb-2"><div class="layui-input-inline" style="width:420px; margin-right:5px;"><input type="text" name="keywords" placeholder="璇疯緭鍏ュ叧閿瓧" class="layui-input" autocomplete="off" /></div><button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="picker">鎻愪氦鎼滅储</button><button type="reset" class="layui-btn layui-btn-reset" lay-filter="picker-reset">娓呯┖</button></form>', - "page":true, - "type":type,//1鍗曢�夋嫨,2澶氶�� - "btnno":true, - "add": "",//鏂板url - "callback": callback - }; - if(Object.prototype.toString.call(types) === '[object Object]'){ - options = types; - } - else{ - options = dataPicker[types]; - } - let settings = $.extend({},opts,options); - //console.log(settings); - let btn = ['纭畾閫夋嫨']; - if(settings.btnno==true){ - btn = ['纭畾閫夋嫨','娓呯┖宸查��']; - } - if(settings.add!=''){ - btn = ['纭畾閫夋嫨','娓呯┖宸查��','鏂板']; - } - $(parent.$('.express-close')).addClass('parent-colse'); - layer.open({ - title: settings.title, - area: settings.area, - type: 1, - skin: 'gougu-picker', - content: '<div class="picker-table" id="pickerBox'+pickerIndex+'">'+settings.searchbar+'<div id="pickerTable'+pickerIndex+'"></div></div>', - end: function(){ - $(parent.$('.express-close')).removeClass('parent-colse'); - }, - success: function () { - let cols=JSON.parse(JSON.stringify(settings.cols)); - if(settings.type==1){ - cols.splice(0, 0, {type: 'radio', title: '閫夋嫨'}); - } - if(settings.type==2){ - cols.splice(0, 0, {type: 'checkbox', title: '閫夋嫨'}); - } - pickerTable = table.render({ - elem: '#pickerTable'+pickerIndex, - url: settings.url, - where:settings.where, - page: settings.page, //寮�鍚垎椤� - limit: 10, - height: '407', - cols: [cols] - }); - //鎼滅储鎻愪氦 - form.on('submit(picker)', function (data) { - let maps = $.extend({}, settings.where, data.field); - pickerTable.reload({where:maps,page:{curr: 1}}); - return false; - }); - //閲嶇疆鎼滅储鎻愪氦 - $('#pickerBox'+pickerIndex).on('click', '[lay-filter="picker-reset"]', function () { - let prev = $(this).prev(); - if (typeof(prev) != "undefined" ) { - setTimeout(function () { - prev.click(); - }, 10) - } - }); - }, - btn: btn, - btnAlign: 'c', - btn1: function (idx) { - var checkStatus = table.checkStatus(pickerTable.config.id); - var data = checkStatus.data; - if (data.length > 0) { - callback(data); - layer.close(idx); - } - else { - layer.msg('璇峰厛閫夋嫨鍐呭'); - return false; - } - }, - btn2: function (idx) { - callback([{'id':0,'title':'','name':''}]); - layer.close(idx); - }, - btn3: function (idx) { - tool.side(settings.add); - layer.close(idx); - } - }) - } - } - - //閫夋嫨鍛樺伐寮圭獥 - $('body').on('click','.picker-admin',function () { - let that = $(this); - let type = that.data('type'); - if (typeof(type) == "undefined" || type == '') { - type = 1; - } - let ids=that.next().val()+'',names = that.val()+''; - obj.employeeInit({ - ids:ids, - names:names, - type:type, - callback:function(data){ - let select_id=[],select_name=[]; - for(var a=0; a<data.length;a++){ - select_id.push(data[a].id); - select_name.push(data[a].name); - } - console.log(select_name); - that.val(select_name.join(',')); - that.next().val(select_id.join(',')); - } - }); - }); - - //閫夋嫨涓嬪睘鍛樺伐寮圭獥 - $('body').on('click','.picker-sub',function () { - let that = $(this); - let type = that.data('type'); - if (typeof(type) == "undefined" || type == '') { - type = 1; - } - let ids=that.next().val()+'',names = that.val()+''; - obj.employeeInit({ - title:"閫夋嫨涓嬪睘", - department_url: "/api/index/get_department_tree_sub", - employee_url: "/api/index/get_employee_sub", - ids:ids, - names:names, - type:type, - callback:function(data){ - let select_id=[],select_name=[]; - for(var a=0; a<data.length;a++){ - select_id.push(data[a].id); - select_name.push(data[a].name); - } - console.log(select_name); - that.val(select_name.join(',')); - that.next().val(select_id.join(',')); - } - }); - }); - - //閫夋嫨OA鏁版嵁寮瑰眰 - $('body').on('click','.picker-oa',function () { - let that = $(this),ids = [],titles=[],map = {}; - let types = that.data('types'); - let type = that.data('type'); - let where = that.data('where'); - if (typeof(types) == "undefined" || types == '') { - layer.msg('璇疯缃�恜icker銆戠殑绫诲瀷'); - return false; - } - if (typeof(type) == "undefined" || type == '') { - type = 1; - } - if (typeof(where) == "undefined" || where == '') { - map = {}; - } - else{ - map = JSON.parse(where); - } - let callback = function(data){ - for ( var i = 0; i <data.length; i++){ - ids.push(data[i].id); - if(!data[i].title){ - titles.push(data[i].name); - }else{ - titles.push(data[i].title); - } - } - that.val(titles.join(',')); - that.next().val(ids.join(',')); - } - obj.picker(types,type,callback,map); - }); - - //杈撳嚭鎺ュ彛 - exports('oaPicker', obj); -}); \ No newline at end of file + <div id="selectTags" style="padding:10px 15px;">' + + me.employeeSelect(0) + + "</div>\ + </div>"; + return tpl; + }, + employeeSelect: function (t) { + var me = this, + select_tags = ""; + if (me.settings.type == 0) { + select_tags += + '<span style="color:#1E9FFF">' + me.settings.names + "</span>"; + } else { + select_ids = []; + select_names = []; + for (var a = 0; a < select_array.length; a++) { + if ( + me.settings.fixedid == select_array[a].id && + me.settings.fixedid != 0 + ) { + select_tags += + '<span class="layui-tags-span">' + + select_array[a].name + + "</span>"; + } else { + select_tags += + '<span class="layui-tags-span">' + + select_array[a].name + + '<i data-id="' + + select_array[a].id + + '" class="layui-icon layui-tags-close">醼�</i></span>'; + } + if (t == 1) { + $("#employee") + .find('[data-id="' + select_array[a].id + '"]') + .addClass("on"); + } + select_ids.push(parseInt(select_array[a].id)); + select_names.push(select_array[a].name); + } + } + //console.log(select_array); + return select_tags; + }, + employeeInit: function (options) { + const opts = { + title: "閫夋嫨鍛樺伐", + department_url: "/api/index/get_department_tree", + employee_url: "/api/index/get_employee", + type: 1, //1鍗曚汉,2澶氫汉 + fixedid: 0, + ids: "", + names: "", + ajax_data: [], + callback: function () {} + }; + this.settings = $.extend({}, opts, options); + var me = this; + select_ids = []; + select_names = []; + select_array = []; + if (me.settings.ids != "" && me.settings.names != "") { + select_ids = me.settings.ids.split(","); + select_names = me.settings.names.split(","); + select_ids.sort((a, b) => a - b); + for (var m = 0; m < select_ids.length; m++) { + select_array.push({ id: select_ids[m], name: select_names[m] }); + } + } + $(parent.$(".express-close")).addClass("parent-colse"); + layer.open({ + type: 1, + title: me.settings.title, + area: ["800px", "500px"], + resize: false, + content: me.employeeRender(), + end: function () { + $(parent.$(".express-close")).removeClass("parent-colse"); + }, + success: function (obj, idx) { + var dataList = [], + letterBar = $("#letterBar"), + employee = $("#employee"), + selectTags = $("#selectTags"); + $.ajax({ + url: me.settings.department_url, + type: "get", + success: function (res) { + //浠呰妭鐐瑰乏渚у浘鏍囨帶鍒舵敹缂� + tree.render({ + elem: "#employeeDepament", + data: res.trees, + onlyIconControl: true, //鏄惁浠呭厑璁歌妭鐐瑰乏渚у浘鏍囨帶鍒跺睍寮�鏀剁缉 + click: function (obj) { + var tagsItem = + '<div style="color:#999; text-align:center;">鏆傛棤鍛樺伐</div>'; + $("#employeeDepament") + .find(".layui-tree-main") + .removeClass("on"); + $(obj.elem).find(".layui-tree-main").eq(0).addClass("on"); + letterBar.find("span").removeClass("on"); + $.ajax({ + url: me.settings.employee_url, + type: "get", + data: { did: obj.data.id }, + success: function (res) { + me.ajax_data = res.data; + dataList = me.ajax_data; + if (dataList.length > 1 && me.settings.type == 2) { + $(".layui-tags-all").show(); + } else { + $(".layui-tags-all").hide(); + } + if (dataList.length > 0) { + tagsItem = ""; + for (var i = 0; i < dataList.length; i++) { + if (select_ids.indexOf(dataList[i].id) == -1) { + tagsItem += + '<span class="layui-tags-span" data-idx="' + + i + + '" data-id="' + + dataList[i].id + + '">' + + dataList[i].name + + "</span>"; + } else { + tagsItem += + '<span class="layui-tags-span on" data-idx="' + + i + + '" data-id="' + + dataList[i].id + + '">' + + dataList[i].name + + "</span>"; + } + } + } + employee.html(tagsItem); + } + }); + } + }); + + letterBar.on("click", "span", function () { + var code = $(this).data("code"); + $(this).addClass("on").siblings().removeClass("on"); + $.ajax({ + url: me.settings.employee_url, + type: "get", + data: { id: 1 }, + success: function (res) { + me.ajax_data = res.data; + var letterData = [], + tagsItem = + '<div style="color:#999; text-align:center;">鏆傛棤鍛樺伐</div>'; + if (me.ajax_data.length > 0) { + var tagsItemCode = ""; + for (var i = 0; i < me.ajax_data.length; i++) { + if (me.ajax_data[i].username.slice(0, 1) == code) { + if (select_ids.indexOf(me.ajax_data[i].id) == -1) { + tagsItemCode += + '<span class="layui-tags-span" data-idx="' + + i + + '" data-id="' + + me.ajax_data[i].id + + '">' + + me.ajax_data[i].name + + "</span>"; + } else { + tagsItemCode += + '<span class="layui-tags-span on" data-idx="' + + i + + '" data-id="' + + me.ajax_data[i].id + + '">' + + me.ajax_data[i].name + + "</span>"; + } + letterData.push(me.ajax_data[i]); + } + } + dataList = letterData; + if (dataList.length > 2 && me.settings.type == 2) { + $(".layui-tags-all").show(); + } else { + $(".layui-tags-all").hide(); + } + if (tagsItemCode != "") { + tagsItem = tagsItemCode; + } + } + employee.html(tagsItem); + } + }); + }); + } + }); + + if (me.settings.type == 2) { + $(".layui-tags-all").on("click", function () { + for (var a = 0; a < dataList.length; a++) { + if (select_ids.indexOf(dataList[a]["id"]) == -1) { + select_array.push(dataList[a]); + } + } + selectTags.html(me.employeeSelect(1)); + }); + } + + employee.on("click", ".layui-tags-span", function () { + let item_idx = $(this).data("idx"); + let select_item = me.ajax_data[item_idx]; + if (me.settings.type == 1) { + me.settings.callback([select_item]); + layer.close(idx); + } else { + if (select_ids.indexOf(select_item["id"]) == -1) { + select_array.push(select_item); + selectTags.html(me.employeeSelect(1)); + } + } + }); + + selectTags.on("click", ".layui-tags-close", function () { + let id = $(this).data("id"); + let new_slected = []; + $("#employee") + .find('[data-id="' + id + '"]') + .removeClass("on"); + for (var i = 0; i < select_array.length; i++) { + if (select_array[i].id != id) { + new_slected.push(select_array[i]); + } + } + select_array = new_slected; + selectTags.html(me.employeeSelect(1)); + }); + if (me.settings.type == 1) { + $("#layui-layer" + idx) + .find(".layui-layer-btn0") + .hide(); + } + }, + btn: ["纭畾娣诲姞", "娓呯┖宸查��"], + btnAlign: "c", + btn1: function (idx) { + me.settings.callback(select_array); + layer.close(idx); + }, + btn2: function (idx) { + let canceldata = { + department: "", + did: 0, + id: 0, + mobile: 0, + name: "", + nickname: "", + position_id: 0, + sex: 0, + status: 0, + thumb: "", + username: "" + }; + me.settings.callback([canceldata]); + layer.close(idx); + } + }); + }, + picker: function (types, type, callback, map) { + let pickerIndex = new Date().getTime(); + let pickerTable, options; + const opts = { + title: "閫夋嫨", + url: "", + ids: "", + titles: "", + where: map, + area: ["600px", "568px"], + cols: [ + { field: "id", width: 80, title: "搴忓彿", align: "center" }, + { field: "title", title: "鍚嶇О" } + ], + searchbar: + '<form class="layui-form pb-2"><div class="layui-input-inline" style="width:420px; margin-right:5px;"><input type="text" name="keywords" placeholder="璇疯緭鍏ュ叧閿瓧" class="layui-input" autocomplete="off" /></div><button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="picker">鎻愪氦鎼滅储</button><button type="reset" class="layui-btn layui-btn-reset" lay-filter="picker-reset">娓呯┖</button></form>', + page: true, + type: type, //1鍗曢�夋嫨,2澶氶�� + btnno: true, + add: "", //鏂板url + callback: callback + }; + if (Object.prototype.toString.call(types) === "[object Object]") { + options = types; + } else { + options = dataPicker[types]; + } + let settings = $.extend({}, opts, options); + //console.log(settings); + let btn = ["纭畾閫夋嫨"]; + if (settings.btnno == true) { + btn = ["纭畾閫夋嫨", "娓呯┖宸查��"]; + } + if (settings.add != "") { + btn = ["纭畾閫夋嫨", "娓呯┖宸查��", "鏂板"]; + } + $(parent.$(".express-close")).addClass("parent-colse"); + layer.open({ + title: settings.title, + area: settings.area, + type: 1, + skin: "gougu-picker", + content: + '<div class="picker-table" id="pickerBox' + + pickerIndex + + '">' + + settings.searchbar + + '<div id="pickerTable' + + pickerIndex + + '"></div></div>', + end: function () { + $(parent.$(".express-close")).removeClass("parent-colse"); + }, + success: function () { + let cols = JSON.parse(JSON.stringify(settings.cols)); + if (settings.type == 1) { + cols.splice(0, 0, { type: "radio", title: "閫夋嫨" }); + } + if (settings.type == 2) { + cols.splice(0, 0, { type: "checkbox", title: "閫夋嫨" }); + } + // 鍗曠嫭澶勭悊 + // 鐝鐨勫垪鏍煎紡鍖栨樉绀� + if (types == "workPlan") { + cols[cols.length - 1].templet = function (d) { + var html = ""; + if (d.times && d.times.length) { + for (var i = 0; i < d.times.length; i++) { + html += + "<span style='margin-right: 30px'>" + + d.times[i].begin_time + + " - " + + d.times[i].end_time + + "</span>"; + } + } else { + html = "-"; + } + return html; + }; + } + pickerTable = table.render({ + elem: "#pickerTable" + pickerIndex, + url: settings.url, + where: settings.where, + page: settings.page, //寮�鍚垎椤� + limit: 10, + height: "407", + cols: [cols] + }); + //鎼滅储鎻愪氦 + form.on("submit(picker)", function (data) { + let maps = $.extend({}, settings.where, data.field); + pickerTable.reload({ where: maps, page: { curr: 1 } }); + return false; + }); + //閲嶇疆鎼滅储鎻愪氦 + $("#pickerBox" + pickerIndex).on( + "click", + '[lay-filter="picker-reset"]', + function () { + let prev = $(this).prev(); + if (typeof prev != "undefined") { + setTimeout(function () { + prev.click(); + }, 10); + } + } + ); + }, + btn: btn, + btnAlign: "c", + btn1: function (idx) { + var checkStatus = table.checkStatus(pickerTable.config.id); + var data = checkStatus.data; + if (data.length > 0) { + callback(data); + layer.close(idx); + } else { + layer.msg("璇峰厛閫夋嫨鍐呭"); + return false; + } + }, + btn2: function (idx) { + callback([{ id: 0, title: "", name: "" }]); + layer.close(idx); + }, + btn3: function (idx) { + tool.side(settings.add); + layer.close(idx); + } + }); + } + }; + + //閫夋嫨鍛樺伐寮圭獥 + $("body").on("click", ".picker-admin", function () { + let that = $(this); + let type = that.data("type"); + if (typeof type == "undefined" || type == "") { + type = 1; + } + let ids = that.next().val() + "", + names = that.val() + ""; + obj.employeeInit({ + ids: ids, + names: names, + type: type, + callback: function (data) { + let select_id = [], + select_name = []; + for (var a = 0; a < data.length; a++) { + select_id.push(data[a].id); + select_name.push(data[a].name); + } + console.log(select_name); + that.val(select_name.join(",")); + that.next().val(select_id.join(",")); + } + }); + }); + + //閫夋嫨涓嬪睘鍛樺伐寮圭獥 + $("body").on("click", ".picker-sub", function () { + let that = $(this); + let type = that.data("type"); + if (typeof type == "undefined" || type == "") { + type = 1; + } + let ids = that.next().val() + "", + names = that.val() + ""; + obj.employeeInit({ + title: "閫夋嫨涓嬪睘", + department_url: "/api/index/get_department_tree_sub", + employee_url: "/api/index/get_employee_sub", + ids: ids, + names: names, + type: type, + callback: function (data) { + let select_id = [], + select_name = []; + for (var a = 0; a < data.length; a++) { + select_id.push(data[a].id); + select_name.push(data[a].name); + } + console.log(select_name); + that.val(select_name.join(",")); + that.next().val(select_id.join(",")); + } + }); + }); + + //閫夋嫨OA鏁版嵁寮瑰眰 + $("body").on("click", ".picker-oa", function () { + let that = $(this), + ids = [], + titles = [], + map = {}; + let types = that.data("types"); + let type = that.data("type"); + let where = that.data("where"); + if (typeof types == "undefined" || types == "") { + layer.msg("璇疯缃�恜icker銆戠殑绫诲瀷"); + return false; + } + if (typeof type == "undefined" || type == "") { + type = 1; + } + if (typeof where == "undefined" || where == "") { + map = {}; + } else { + map = JSON.parse(where); + } + let callback = function (data) { + for (var i = 0; i < data.length; i++) { + ids.push(data[i].id); + if (!data[i].title) { + titles.push(data[i].name); + } else { + titles.push(data[i].title); + } + } + that.val(titles.join(",")); + that.next().val(ids.join(",")); + // 鍗曠嫭澶勭悊鐝鎸夐挳鐨勫鐞嗙粨鏋� + if (types == "workPlan") { + var selectName = data[0].name; + var html = ""; + if (selectName) { + html += selectName + "锛�"; + } + if (data[0].times && data[0].times.length) { + for (var i = 0; i < data[0].times.length; i++) { + var timeItem = data[0].times[i]; + html += + "<span style='margin-right: 30px'>" + + timeItem.begin_time + + " - " + + timeItem.end_time + + "</span>"; + } + } + that.parent().prev().html(html); + } + }; + obj.picker(types, type, callback, map); + }); + + //杈撳嚭鎺ュ彛 + exports("oaPicker", obj); +}); -- Gitblit v1.9.1