linwu il y a 2 mois
Parent
commit
876253c8e9

+ 9 - 9
app/admin/controller/Admin.php

@@ -21,8 +21,8 @@ class Admin extends AdminBaseController
 
     public function adminForm()
     {
-        $id          = input('id/d, 0');
-        $info       = AdminModel::findOrEmpty($id);
+        $id          = input('id/d', 0);
+        $info        = AdminModel::findOrEmpty($id);
         $menulist    = MenuModel::where(['mtype' => 'admin', 'status' => 1])->order(['pid' => 'asc', 'priority' => 'asc', 'id' => 'asc'])->select()->toArray();
         $powerarr    = [];
         $poweridsarr = ($info->powerids == null || empty($info->powerids)) ? [] : explode(",", $info->powerids);
@@ -40,7 +40,7 @@ class Admin extends AdminBaseController
             }
         }
         return view('', [
-            'info'    => $info,
+            'info'     => $info,
             'powerarr' => json_encode(array_values($powerarr)),
         ]);
     }
@@ -68,13 +68,13 @@ class Admin extends AdminBaseController
             $powerids = implode(",", $idsarr);
         }
         $data = [
-            'role'      => $role,
+            'role'       => $role,
             'admin_name' => input('admin_name/s', ""),
-            'realname'  => input('realname/s', ""),
-            'mobile'    => input('mobile/s', ""),
-            'status'    => input('status/d') == 1 ? 1 : 2,
-            'powerids'  => $powerids,
-            'remark'    => input('remark', ""),
+            'realname'   => input('realname/s', ""),
+            'mobile'     => input('mobile/s', ""),
+            'status'     => input('status/d') == 1 ? 1 : 2,
+            'powerids'   => $powerids,
+            'remark'     => input('remark', ""),
         ];
         if (empty($id)) {
             $data['password']  = empty($password) ? md5("123456789") : md5($password);

+ 3 - 3
app/admin/controller/Article.php

@@ -28,7 +28,7 @@ class Article extends AdminBaseController
     public function articleForm()
     {
         $cate_list = ArticleCateModel::order(['priority' => 'desc', 'id' => 'desc'])->select();
-        $id        = input('id/d, 0');
+        $id        = input('id/d', 0);
         $info      = ArticleModel::find($id);
 
         return view('', [
@@ -117,7 +117,7 @@ class Article extends AdminBaseController
 
     public function cateForm()
     {
-        $id   = input('id/d, 0');
+        $id   = input('id/d', 0);;
         $info = ArticleCateModel::find($id);
         return view('', [
             'info'        => $info,
@@ -221,7 +221,7 @@ class Article extends AdminBaseController
 
     public function exportCate()
     {
-        $map  = $this->dealInInput(['id'],$this->dealEqualInput(['status']));
+        $map  = $this->dealInInput(['id'], $this->dealEqualInput(['status']));
         $list = ArticleCateModel::where($map)
             ->order(['priority' => 'desc', 'id' => 'desc'])
             ->select();

+ 1 - 1
app/admin/controller/Navigation.php

@@ -49,7 +49,7 @@ class Navigation extends AdminBaseController
      */
     public function navigationForm()
     {
-        $id   = input('id/d, 0');
+        $id   = input('id/d', 0);;
         $info = NavigationModel::find($id);
 
         return view('', [

+ 1 - 1
app/admin/controller/Notice.php

@@ -48,7 +48,7 @@ class Notice extends AdminBaseController
      */
     public function noticeForm()
     {
-        $id      = input('id/d, 0');
+        $id      = input('id/d', 0);;
         $info = NoticeModel::find($id);
 
         return view('', [

+ 103 - 53
app/admin/controller/Recruit.php

@@ -51,7 +51,7 @@ class Recruit extends AdminBaseController
      */
     public function recruitForm()
     {
-        $id   = input('id/d, 0');
+        $id   = input('id/d', 0);
         $info = RecruitModel::find($id);
 
         return view('', [
@@ -92,76 +92,126 @@ class Recruit extends AdminBaseController
         ajax_return();
     }
 
-    /**
-     * 编辑
-     */
-    public function postForm()
+    public function postList()
     {
-        $id   = input('id/d, 0');
+        $id = input('id/d', 0);;
         $info = RecruitModel::find($id);
         if (empty($info)) {
             return '该招考不存在';
         }
 
-        $list = RecruitPostModel::field(['id', 'code', 'name', 'number', 'limit', 'special'])
-            ->where('recruit_id', $id)
-            ->select();
-        if ($list->isEmpty()) {
-            $list = json_encode([['id' => 0, 'code' => '', 'name' => '', 'number' => 1, 'limit' => '{}', 'special' => '{}']]);
-        }
-
         return view('', [
-            'info' => $info,
-            'list' => $list,
+            'id' => $id,
         ]);
     }
 
-    public function editPost()
+    public function listPost()
     {
-        $data       = input('post.');
-        $recruit_id = $data['recruit_id'];
-        $list       = $data['list'];
-        if (empty($recruit_id)) {
-            ajax_return(1, '请选择招考场次');
-        }
-        if (empty($list)) {
-            ajax_return(1, '请添加岗位');
+        $id = input('id/d', 0);;
+        $map   = [
+            ['recruit_id', '=', $id],
+        ];
+        $list  = RecruitPostModel::where($map)
+            ->limit(input('limit'))
+            ->page(input('page'))
+            ->select();
+        $count = RecruitPostModel::where($map)->count();
+        if ($count == 0) {
+            ajax_return(1, '未查询到数据');
         }
+        list_return($list, $count);
+    }
 
-        //数据分离
-        $insert     = [];
-        $update     = [];
-        $ids        = RecruitPostModel::where('recruit_id', $recruit_id)->column('id');
-        $data_ids   = array_column($list, 'id');
-        $delete_ids = array_diff($ids, $data_ids);
-        $check      = RecruitAppointInfoModel::whereIn('post_id', $delete_ids)->find();
-        if (!empty($check)) {
-            ajax_return(1, "删除的岗位已有人报名,无法删除,请刷新页面重新录入");
+    /**
+     * 编辑
+     */
+    public function postForm()
+    {
+        $limit_condition = [
+            ['text' => '不限', 'value' => ''],
+            ['text' => '专科及以上', 'value' => '专科'],
+            ['text' => '本科及以上', 'value' => '本科'],
+            ['text' => '硕士及以上', 'value' => '硕士'],
+            ['text' => '博士及以上', 'value' => '博士'],
+        ];
+        $limit_degree    = [
+            ['text' => '不限', 'value' => ''],
+            ['text' => '学士学位及以上', 'value' => '学士学位'],
+            ['text' => '硕士学位及以上', 'value' => '硕士学位'],
+            ['text' => '博士学位及以上', 'value' => '博士学位'],
+        ];
+        $data            = [
+            'limit_condition' => $limit_condition,
+            'limit_degree'    => $limit_degree,
+        ];
+
+        $recruit_id = input('recruit_id/d', 0);
+        if (!empty($recruit_id)) {
+            $data['info'] = [
+                'recruit_id' => $recruit_id,
+                'limit'      => [],
+                'special'    => [],
+            ];
+            return view('', $data);
         }
-        foreach ($list as $v) {
-            if (empty($v['id'])) {
-                $insert[] = $v;
-            } else {
-                if (!in_array($v['id'], $delete_ids))
-                    $update[] = $v;
+
+        $id              = input('id/d', 0);
+        $info            = RecruitPostModel::where('id', $id)
+            ->find();
+        $info['limit']   = empty($info['limit']) ? [] : json_decode($info['limit'], true);
+        $info['special'] = empty($info['special']) ? [] : json_decode($info['special'], true);
+        $data['info']    = $info;
+
+        return view('', $data);
+    }
+
+    public function editPost()
+    {
+        //基础数据
+        $post = input('post.');
+        $data = [
+            'recruit_id' => $post['recruit_id'],
+            'code'       => $post['code'],
+            'name'       => $post['name'],
+            'number'     => $post['number'],
+        ];
+
+        //限制条件
+        $limit = [];
+        foreach ($post['limit'] as $k => $v) {
+            if (!empty($v)) {
+                $limit[$k] = $v;
             }
         }
+        $data['limit'] = json_encode($limit);
 
-        if (!empty($insert)) {
-            foreach ($insert as $v) {
-                $v['recruit_id'] = $recruit_id;
-                RecruitPostModel::create($v);
-            }
+        //加分项目
+        $data['special'] = '[]';
+        if (!empty($post['special_list'])) {
+            $data['special'] = json_encode(['multi' => $post['special']['multi'], 'list' => $post['special_list']]);
         }
-        if (!empty($update)) {
-            foreach ($update as $v) {
-                RecruitPostModel::update($v);
-            }
+
+        //数据库操作
+        if (empty($post['id'])) {
+            RecruitPostModel::create($data);
+        } else {
+            RecruitPostModel::update($data, ['id' => $post['id']]);
         }
-        if (!empty($delete_ids)) {
-            RecruitPostModel::destroy(array_values($delete_ids));
+
+        ajax_return();
+    }
+
+    public function delPost()
+    {
+        $id = input('id/d', 0);
+
+        $check = RecruitAppointInfoModel::whereIn('post_id', $id)->find();
+        if (!empty($check)) {
+            ajax_return(1, "删除的岗位已有人报名,无法删除");
         }
 
+        RecruitPostModel::destroy($id);
+
         ajax_return();
     }
 
@@ -177,8 +227,8 @@ class Recruit extends AdminBaseController
 
     public function newsForm()
     {
-        $id        = input('id/d, 0');
-        $info      = RecruitNewsModel::with('recruit')->find($id)->toArray();
+        $id   = input('id/d', 0);
+        $info = RecruitNewsModel::with('recruit')->find($id);
 
         return view('', [
             'info'        => $info,
@@ -188,7 +238,7 @@ class Recruit extends AdminBaseController
 
     public function listNews()
     {
-        $map = $this->dealEqualInput(['status','recruit_id'], $this->dealLikeInput(['title']));
+        $map = $this->dealEqualInput(['status', 'recruit_id'], $this->dealLikeInput(['title']));
 
         $list  = RecruitNewsModel::with('recruit')
             ->where($map)

+ 3 - 3
app/admin/controller/Slide.php

@@ -23,11 +23,11 @@ class Slide extends AdminBaseController
 
     public function listSlide()
     {
-        $map   = $this->dealLikeInput(['title'],$this->dealEqualInput(['tab', 'status']));
+        $map   = $this->dealLikeInput(['title'], $this->dealEqualInput(['tab', 'status']));
         $list  = SlideModel::where($map)
             ->limit(input('limit'))
             ->page(input('page'))
-            ->order('priority','desc')
+            ->order('priority', 'desc')
             ->append(['tab_text', 'status_text'])
             ->select();
         $count = SlideModel::where($map)->count();
@@ -49,7 +49,7 @@ class Slide extends AdminBaseController
      */
     public function slideForm()
     {
-        $id   = input('id/d, 0');
+        $id   = input('id/d', 0);
         $info = SlideModel::find($id);
 
         return view('', [

+ 1 - 1
app/admin/controller/SmsTemplate.php

@@ -23,7 +23,7 @@ class SmsTemplate extends AdminBaseController
 
     public function templateForm()
     {
-        $id   = input('id/d, 0');
+        $id   = input('id/d', 0);;
         $info = SmsTemplateModel::find($id);
         return view('', [
             'info' => $info,

+ 2 - 2
app/admin/view/recruit/index.html

@@ -33,10 +33,10 @@
         <div class="layui-card-body">
             <table id="{$lay_table}" lay-filter="{$lay_table}"></table>
             <script type="text/html" id="setTpl">
-                <a class="layui-btn layui-btn-xs" lay-event="post">
+                <a class="layui-btn layui-btn-xs" lay-href="{:url('recruit/postList')}?id={{d.id}}" lay-text="{{d.name}}">
                     <i class="layui-icon layui-icon-list"></i>岗位管理
                 </a>
-                <a class="layui-btn layui-btn-xs" lay-href="{:url('recruitApply/index')}?id={{d.id}}" lay-text="{{d.company}}">
+                <a class="layui-btn layui-btn-xs" lay-href="{:url('recruitApply/index')}?id={{d.id}}" lay-text="{{d.name}}">
                     <i class="layui-icon layui-icon-form"></i>报名管理
                 </a>
                 <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">

+ 127 - 76
app/admin/view/recruit/post_form.html

@@ -1,31 +1,96 @@
 <div class="layui-fluid">
     <div class="layui-row layui-col-space15">
         <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-header">{$info.name}</div>
-                <div class="layui-card-body" pad15>
-                    <div class="layui-form layui-form-pane" lay-filter="{$lay_table}">
-                        <input type="hidden" name="recruit_id" value="{:array_get($info,'id')}">
+            <div class="layui-form layui-form-pane" lay-filter="{$lay_table}">
+                <div class="layui-card">
+                    <div class="layui-card-header">岗位信息</div>
+                    <div class="layui-card-body" pad15>
+                        <input type="hidden" name="id" value="{:array_get($info,'id')}">
+                        <input type="hidden" name="recruit_id" value="{:array_get($info,'recruit_id')}">
+                        <div class="layui-form-item">
+                            <label class="layui-form-label"><span style="color:#f90c05;">*</span>岗位编号</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="code" value="{:array_get($info,'code')}" lay-verify="required"
+                                       placeholder="请输入岗位编号" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label"><span style="color:#f90c05;">*</span>岗位名称</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="name" value="{:array_get($info,'name')}" lay-verify="required"
+                                       placeholder="请输入岗位名称" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label"><span style="color:#f90c05;">*</span>招聘人数</label>
+                            <div class="layui-input-block">
+                                <input type="number" name="number" value="{:array_get($info,'number')}"
+                                       lay-verify="required"
+                                       placeholder="请输入招聘人数" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="layui-card-header">岗位限制条件</div>
+                    <div class="layui-card-body" pad15>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">学历</label>
+                            <div class="layui-input-block">
+                                <select name="limit[education]">
+                                    {volist name="limit_condition" id="condition"}
+                                        <option value="{$condition.value}" {:array_get($info['limit'],'education')===$condition['value'] ?'selected' : '' }>{$condition.text}</option>
+                                    {/volist}
+                                </select>
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">学位</label>
+                            <div class="layui-input-block">
+                                <select name="limit[degree]">
+                                    {volist name="limit_degree" id="degree"}
+                                        <option value="{$degree.value}" {:array_get($info['limit'],'degree')===$degree['value'] ?'selected' : '' }>{$degree.text}</option>
+                                    {/volist}
+                                </select>
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">出生大于</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="limit[birthday]"
+                                       value="{:array_get($info['limit'],'birthday')}"
+                                       id="birthday"
+                                       placeholder="请输入出生日期大于" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="layui-card-header">岗位加分项</div>
+                    <div class="layui-card-body" pad15>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label"><span style="color:#f90c05;">*</span>是否多选</label>
+                            <div class="layui-input-block">
+                                <input type="radio" name="special[multi]" value="1"
+                                       title="是" {:array_get($info['special'],'multi')==1 ?'checked' : '' }>
+                                <input type="radio" name="special[multi]" value="2"
+                                       title="否" {:array_get($info['special'],'multi',2)==2 ?'checked' : '' }>
+                            </div>
+                        </div>
                         <div>
                             <button class="layui-btn layuiadmin-btn" id="add-table" type="button">添加</button>
                         </div>
                         <form id="form">
                             <table class="layui-table">
                                 <colgroup>
+                                    <col width="400">
                                     <col width="100">
-                                    <col width="200">
-                                    <col width="100">
-                                    <col width="300">
-                                    <col width="300">
                                     <col width="100">
                                 </colgroup>
                                 <thead>
                                 <tr>
-                                    <th>岗位编号</th>
-                                    <th>岗位名称</th>
-                                    <th>招聘人数</th>
-                                    <th>岗位限制条件(JSON格式)</th>
-                                    <th>岗位加分项(JSON格式)</th>
+                                    <th>加分条件(示例:中级职称总分+1)</th>
+                                    <th>分数(示例:1)</th>
                                     <th>操作</th>
                                 </tr>
                                 </thead>
@@ -34,12 +99,12 @@
                                 </tbody>
                             </table>
                         </form>
-                        <div class="layui-form-item">
-                            <div class="layui-input-block">
-                                <input type="button" lay-submit lay-filter="{$lay_btn}" value="确认提交"
-                                       class="layui-btn">
-                            </div>
-                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-input-block">
+                        <input type="button" lay-submit lay-filter="{$lay_btn}" value="确认提交"
+                               class="layui-btn">
                     </div>
                 </div>
             </div>
@@ -48,10 +113,16 @@
 </div>
 
 <script>
-    layui.use(['index', 'form', 'upload'], function () {
+    layui.use(['index', 'form', 'laydate'], function () {
         const admin = layui.admin;
         const form = layui.form;
+        const laydate = layui.laydate;
         const $ = layui.$;
+
+        laydate.render({
+            elem: '#birthday'
+        });
+
         form.render();
 
         form.on('submit({$lay_btn})', function (obj) {
@@ -64,53 +135,49 @@
                     layer.msg("提交成功", {
                         icon: 1
                     });
-                    parent.layui.table.reload('lay-notice-index-table'); //重载表格
+                    parent.layui.table.reload('lay-recruit-postList-table'); //重载表格
                     parent.layer.close(index);
                 }
             });
         });
 
-        let data = {$list};
+
+        //岗位加分条件
+        let data = {:empty($info['special']['list']) ? '[]' : json_encode($info['special']['list'])};
+        createTable();
+
+        $('#add-table').click(function () {
+            data = getFormData();
+            data.push({condition: "", value: ""});
+            createTable();
+        });
+
+        $("#tb").on('click', '.delete-table', function () {
+            let index = $(this).data('index');
+            if (data.length <= 0) {
+                return false;
+            }
+
+            data = getFormData();
+            data.splice(index, 1);
+            createTable();
+        });
 
         function createTable() {
             let html = "";
             data.forEach((v, k) => {
                 html += `<tr>
-                        <input type="hidden" name="list[${k}][id]" value="${v.id}">
-                        <td>
-                            <input placeholder="岗位编号"
-                                   name="list[${k}][code]"
-                                   lay-verify="required"
-                                   value="${v.code}"
-                                   class="layui-input"/>
-                        </td>
                         <td>
-                            <input placeholder="岗位名称"
-                                   name="list[${k}][name]"
+                            <input name="special_list[${k}][condition]"
                                    lay-verify="required"
-                                   value="${v.name}"
+                                   value="${v.condition}"
                                    class="layui-input"/>
                         </td>
                         <td>
-                            <input placeholder="招聘人数"
-                                   type="number"
-                                   name="list[${k}][number]"
+                            <input type="number"
+                                   name="special_list[${k}][value]"
                                    lay-verify="required"
-                                   value="${v.number}"
-                                   class="layui-input"/>
-                        </td>
-                        <td>
-                            <input placeholder="限制条件"
-                                   name="list[${k}][limit]"
-                                   lay-verify="required"
-                                   value="${v.limit}"
-                                   class="layui-input"/>
-                        </td>
-                        <td>
-                            <input placeholder="岗位加分项"
-                                   name="list[${k}][special]"
-                                   lay-verify="required"
-                                   value="${v.special}"
+                                   value="${v.value}"
                                    class="layui-input"/>
                         </td>
                         <td>
@@ -122,27 +189,12 @@
             $('#tb').html(html);
         }
 
-        createTable();
-
-        $('#add-table').click(function () {
-            data = getFormData();
-            data.push({id: "0", code: "", name: "", number: 1, limit: "{}", special: "{}"});
-            createTable();
-        });
-
-        $("#tb").on('click', '.delete-table', function () {
-            let index = $(this).data('index');
-            if (data.length <= 1) {
-                return false;
-            }
-
-            data = getFormData();
-            data.splice(index,1);
-            createTable();
-        });
-
         function getFormData() {
             let arr = $('#form').serializeArray();
+            if (arr.length === 0) {
+                return arr;
+            }
+
             let obj = {};
             arr.forEach(v => {
                 obj[v.name] = v.value;
@@ -150,15 +202,15 @@
 
             // 提取键名中的索引和属性名
             let keys = Object.keys(obj).map(key => {
-                let parts = key.match(/list\[(\d+)\]\[(\w+)\]/);
-                return { index: parseInt(parts[1], 10), prop: parts[2] };
+                let parts = key.match(/special_list\[(\d+)\]\[(\w+)\]/);
+                return {index: parseInt(parts[1], 10), prop: parts[2]};
             });
 
             // 根据索引分组属性
             let grouped = {};
-            keys.forEach(({ index, prop }, i) => {
+            keys.forEach(({index, prop}, i) => {
                 if (!grouped[index]) grouped[index] = {};
-                grouped[index][prop] = obj[`list[${index}][${prop}]`];
+                grouped[index][prop] = obj[`special_list[${index}][${prop}]`];
             });
 
             // 将分组后的对象转换为数组
@@ -166,6 +218,5 @@
 
             return res;
         }
-
     });
 </script>

+ 175 - 0
app/admin/view/recruit/post_form_old.html

@@ -0,0 +1,175 @@
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">{$info.name}</div>
+                <div class="layui-card-body" pad15>
+                    <div class="layui-form layui-form-pane" lay-filter="{$lay_table}">
+                        <input type="hidden" name="recruit_id" value="{:array_get($info,'id')}">
+                        <div>
+                            <button class="layui-btn layuiadmin-btn" id="add-table" type="button">添加</button>
+                        </div>
+                        <form id="form">
+                            <table class="layui-table">
+                                <colgroup>
+                                    <col width="100">
+                                    <col width="200">
+                                    <col width="100">
+                                    <col width="300">
+                                    <col width="300">
+                                    <col width="100">
+                                </colgroup>
+                                <thead>
+                                <tr>
+                                    <th>岗位编号</th>
+                                    <th>岗位名称</th>
+                                    <th>招聘人数</th>
+                                    <th>岗位限制条件(JSON格式)</th>
+                                    <th>岗位加分项(JSON格式)</th>
+                                    <th>操作</th>
+                                </tr>
+                                </thead>
+                                <tbody id="tb">
+
+                                </tbody>
+                            </table>
+                        </form>
+                        <div class="layui-form-item">
+                            <div class="layui-input-block">
+                                <input type="button" lay-submit lay-filter="{$lay_btn}" value="确认提交"
+                                       class="layui-btn">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['index', 'form', 'upload'], function () {
+        const admin = layui.admin;
+        const form = layui.form;
+        const $ = layui.$;
+        form.render();
+
+        form.on('submit({$lay_btn})', function (obj) {
+            const index = parent.layer.getFrameIndex(window.name);
+            admin.req({
+                url: "{:url('recruit/editPost')}",
+                type: 'post',
+                data: obj.field,
+                done: function (res) {
+                    layer.msg("提交成功", {
+                        icon: 1
+                    });
+                    parent.layui.table.reload('lay-notice-index-table'); //重载表格
+                    parent.layer.close(index);
+                }
+            });
+        });
+
+        let data = {$list};
+
+        function createTable() {
+            let html = "";
+            data.forEach((v, k) => {
+                html += `<tr>
+                        <input type="hidden" name="list[${k}][id]" value="${v.id}">
+                        <td>
+                            <input placeholder="岗位编号"
+                                   name="list[${k}][code]"
+                                   lay-verify="required"
+                                   value="${v.code}"
+                                   class="layui-input"/>
+                        </td>
+                        <td>
+                            <input placeholder="岗位名称"
+                                   name="list[${k}][name]"
+                                   lay-verify="required"
+                                   value="${v.name}"
+                                   class="layui-input"/>
+                        </td>
+                        <td>
+                            <input placeholder="招聘人数"
+                                   type="number"
+                                   name="list[${k}][number]"
+                                   lay-verify="required"
+                                   value="${v.number}"
+                                   class="layui-input"/>
+                        </td>
+                        <td>
+                            <input placeholder="限制条件"
+                                   name="list[${k}][limit]"
+                                   lay-verify="required"
+                                   value="${v.limit}"
+                                   class="layui-input"/>
+                        </td>
+                        <td>
+                            <input placeholder="岗位加分项"
+                                   name="list[${k}][special]"
+                                   lay-verify="required"
+                                   value="${v.special}"
+                                   class="layui-input"/>
+                        </td>
+                        <td>
+                            <button class="layui-btn layui-btn-danger layuiadmin-btn delete-table" type="button" data-index="${k}">删除</button>
+                        </td>
+                </tr>`;
+            });
+
+            $('#tb').html(html);
+        }
+
+        createTable();
+
+        $('#add-table').click(function () {
+            data = getFormData();
+            data.push({id: "0", code: "", name: "", number: 1, limit: "{}", special: "{}"});
+            createTable();
+        });
+
+        $("#tb").on('click', '.delete-table', function () {
+            let index = $(this).data('index');
+            if (data.length <= 1) {
+                return false;
+            }
+
+            data = getFormData();
+            data.splice(index,1);
+            createTable();
+        });
+
+        function getFormData() {
+            let arr = $('#form').serializeArray();
+            if (arr.length === 0) {
+                return arr;
+            }
+
+            let obj = {};
+            arr.forEach(v => {
+                obj[v.name] = v.value;
+            });
+
+            // 提取键名中的索引和属性名
+            let keys = Object.keys(obj).map(key => {
+                let parts = key.match(/list\[(\d+)\]\[(\w+)\]/);
+                return { index: parseInt(parts[1], 10), prop: parts[2] };
+            });
+
+            // 根据索引分组属性
+            let grouped = {};
+            keys.forEach(({ index, prop }, i) => {
+                if (!grouped[index]) grouped[index] = {};
+                grouped[index][prop] = obj[`list[${index}][${prop}]`];
+            });
+
+            // 将分组后的对象转换为数组
+            let res = Object.keys(grouped).map(index => grouped[index]);
+
+            return res;
+        }
+
+    });
+</script>

+ 103 - 0
app/admin/view/recruit/post_list.html

@@ -0,0 +1,103 @@
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+            <button class="layui-btn layuiadmin-btn" data-type="add">添加</button>
+        </div>
+
+        <div class="layui-card-body">
+            <table id="{$lay_table}" lay-filter="{$lay_table}"></table>
+            <script type="text/html" id="setTpl">
+                <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">
+                    <i class="layui-icon layui-icon-edit"></i>编辑
+                </a>
+                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">
+                    <i class="layui-icon layui-icon-delete"></i>删除
+                </a>
+            </script>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['index', 'admin', 'form', 'table'], function () {
+        const $ = layui.$;
+        const admin = layui.admin;
+        const form = layui.form;
+        const table = layui.table;
+        form.render();
+
+        table.render({
+            elem: '#{$lay_table}',
+            url: "{:url('recruit/listPost')}?id={$id}",
+            cols: [
+                [
+                    {field: 'code', title: '编号', width: 300},
+                    {field: 'name', title: '岗位名称'},
+                    {field: 'number', title: '招聘人数', width: 160},
+                    {field: 'update_time', title: '修改时间', width: 160, align: 'center'},
+                    {title: '操作', width: 350, align: 'center', fixed: 'right', toolbar: '#setTpl'}
+                ]
+            ],
+            page: true,
+            limit: 50,
+            cellMinWidth: 150,
+            text: '对不起,加载出现异常!'
+        });
+
+        form.on('submit({$lay_btn})', function (data) {
+            table.reload('{$lay_table}', {
+                where: data.field,
+                page: {
+                    curr: 1
+                }
+            });
+        });
+
+        //事件
+        const active = {
+            add: function () {
+                const index = layer.open({
+                    type: 2,
+                    title: '添加岗位',
+                    content: "{:url('recruit/postForm')}?recruit_id={$id}",
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        };
+
+        //监听工具条
+        table.on('tool({$lay_table})', function (obj) {
+            const data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除吗?', function (index) {
+                    admin.req({
+                        url: "{:url('recruit/delPost')}",
+                        data: {
+                            id: data.id
+                        },
+                        done: function (res) {
+                            layui.table.reload('{$lay_table}');
+                        }
+                    });
+                    layer.close(index);
+                });
+            } else if (obj.event === 'edit') {
+                const index = layer.open({
+                    type: 2,
+                    title: '编辑岗位',
+                    content: "{:url('recruit/postForm')}?id=" + data.id,
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        });
+
+        $('.layui-btn.layuiadmin-btn').on('click', function () {
+            const type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+    });
+</script>

+ 10 - 2
app/admin/view/recruit/recruit_form.html

@@ -4,7 +4,7 @@
 </style>
 <div class="layui-fluid">
     <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
+        <div class="layui-col-md12" style="background: white;">
             <div class="layui-form layui-form-pane">
                 <input type="hidden" name="id" value="{:array_get($info,'id')}">
                 <div class="layui-card layui-tab  layui-tab-brief" lay-filter="linktab">
@@ -108,12 +108,18 @@
                                             <div class="layui-form-mid layui-word-aux">倒序,值越大越靠前</div>
                                         </div>
                                     </div>
-                                    <div class="layui-form-item" id="form-content">
+                                    <div class="layui-form-item">
                                         <label class="layui-form-label"><span style="color:#f90c05;">*</span>招考正文</label>
                                         <div class="layui-input-block">
                                             <script id="editor" type="text/plain">{:array_get($info,'introduction')}</script>
                                         </div>
                                     </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label"><span style="color:#f90c05;">*</span>报考承诺书</label>
+                                        <div class="layui-input-block">
+                                            <script id="commitment" type="text/plain">{:array_get($info,'commitment')}</script>
+                                        </div>
+                                    </div>
                                 </div>
                                 <div class="layui-card-header">流程与时间</div>
                                 <div class="layui-card-body" pad15>
@@ -538,6 +544,7 @@
 <script>
     layui.use(['index', 'form', 'layedit', 'upload', 'laydate', 'transfer'], function () {
         UE.getEditor('editor');
+        UE.getEditor('commitment');
         const $ = layui.$;
         const admin = layui.admin;
         const form = layui.form;
@@ -713,6 +720,7 @@
         form.on('submit({$lay_btn})', function (obj) {
             const index = parent.layer.getFrameIndex(window.name);
             obj.field.introduction = UE.getEditor('editor').getContent();
+            obj.field.commitment = UE.getEditor('commitment').getContent();
             obj.field.pen_ticket_field = getField('pen_field');
             obj.field.computer_ticket_field = getField('computer_field');
             obj.field.face_ticket_field = getField('face_field');

+ 16 - 10
app/common/model/UserModel.php

@@ -16,24 +16,25 @@ class UserModel extends BaseModel
 
     // 软删除
     use SoftDelete;
+
     protected $deleteTime = 'delete_time';
     protected $defaultSoftDelete = 0;
 
     // 常量
     const STATUS = [1 => '待审核', 2 => '已通过', 3 => '未通过', 4 => '禁用'];
     const GENDER = ['保密', '男', '女'];
-    const AUTH   = [1 => '待认证', 2 => '待审核', 3 => '审核拒绝', 4 => '审核通过'];
+    const AUTH = [1 => '待认证', 2 => '待审核', 3 => '审核拒绝', 4 => '审核通过'];
 
-    const STATUS_WAIT    = 1;
-    const STATUS_PASS    = 2;
-    const STATUS_FAIL    = 3;
+    const STATUS_WAIT = 1;
+    const STATUS_PASS = 2;
+    const STATUS_FAIL = 3;
     const STATUS_DISABLE = 4;
-    const GENDER_MAN     = 1;
-    const GENDER_WOMAN   = 2;
-    const AUTH_UN        = 1;
-    const AUTH_WAIT      = 2;
-    const AUTH_REJECT    = 3;
-    const AUTH_PASS      = 4;
+    const GENDER_MAN = 1;
+    const GENDER_WOMAN = 2;
+    const AUTH_UN = 1;
+    const AUTH_WAIT = 2;
+    const AUTH_REJECT = 3;
+    const AUTH_PASS = 4;
 
     //允许修改
     const MOBILE_EDIT_ALLOW = ['realname', 'idcard', 'idcard_front_pic', 'idcard_back_pic', 'is_auth']; //手机端实名认证
@@ -52,4 +53,9 @@ class UserModel extends BaseModel
     {
         return self::AUTH[$data['is_auth']];
     }
+
+    public function recruitAppointBasic()
+    {
+        return $this->hasOne(RecruitAppointBasicModel::class, 'user_id', 'id');
+    }
 }