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'>&#x1006;</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'>&#x1006;</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