linwu 9 hodín pred
rodič
commit
3f198b8281
96 zmenil súbory, kde vykonal 3476 pridanie a 23 odobranie
  1. 0 0
      .htaccess
  2. 45 0
      api/common/Sms.php
  3. 141 0
      api/talent/controller/AdminController.php
  4. 113 0
      api/talent/controller/AppointmentController.php
  5. 1 1
      api/user/controller/ProfileController.php
  6. 83 0
      app/talent/controller/AdminAppointmentController.php
  7. 80 0
      app/talent/controller/AdminTalentAdminController.php
  8. 113 0
      app/talent/controller/AdminTalentController.php
  9. 18 0
      app/talent/model/TalentAdminModel.php
  10. 18 0
      app/talent/model/TalentAppointmentLogModel.php
  11. 27 0
      app/talent/model/TalentAppointmentModel.php
  12. 18 0
      app/talent/model/TalentModel.php
  13. 40 4
      applet/app.js
  14. 18 9
      applet/app.json
  15. BIN
      applet/common/images/tabbar/ai.png
  16. BIN
      applet/common/images/tabbar/ai_cur.png
  17. BIN
      applet/common/images/tabbar/calc.png
  18. BIN
      applet/common/images/tabbar/calc_cur.png
  19. BIN
      applet/common/images/tabbar/train.png
  20. BIN
      applet/common/images/tabbar/train_cur.png
  21. 19 0
      applet/common/js/common.js
  22. 1 1
      applet/pages/home/home/home.js
  23. 20 0
      applet/pages/home/test/test.js
  24. 3 0
      applet/pages/home/test/test.json
  25. 1 0
      applet/pages/home/test/test.wxml
  26. 1 0
      applet/pages/home/test/test.wxss
  27. 66 0
      applet/pages/my/agreement/privacy.js
  28. 3 0
      applet/pages/my/agreement/privacy.json
  29. 74 0
      applet/pages/my/agreement/privacy.wxml
  30. 1 0
      applet/pages/my/agreement/privacy.wxss
  31. 66 0
      applet/pages/my/agreement/service.js
  32. 3 0
      applet/pages/my/agreement/service.json
  33. 220 0
      applet/pages/my/agreement/service.wxml
  34. 1 0
      applet/pages/my/agreement/service.wxss
  35. 12 2
      applet/pages/my/home/home.js
  36. 8 2
      applet/pages/my/home/home.wxml
  37. 249 0
      applet/pages/talent/admin/index.js
  38. 4 0
      applet/pages/talent/admin/index.json
  39. 71 0
      applet/pages/talent/admin/index.wxml
  40. 34 0
      applet/pages/talent/admin/index.wxss
  41. 54 0
      applet/pages/talent/admin/login.js
  42. 3 0
      applet/pages/talent/admin/login.json
  43. 23 0
      applet/pages/talent/admin/login.wxml
  44. 1 0
      applet/pages/talent/admin/login.wxss
  45. 39 0
      applet/pages/talent/appointment/evaluate.js
  46. 3 0
      applet/pages/talent/appointment/evaluate.json
  47. 23 0
      applet/pages/talent/appointment/evaluate.wxml
  48. 1 0
      applet/pages/talent/appointment/evaluate.wxss
  49. 86 0
      applet/pages/talent/appointment/index.js
  50. 3 0
      applet/pages/talent/appointment/index.json
  51. 73 0
      applet/pages/talent/appointment/index.wxml
  52. 6 0
      applet/pages/talent/appointment/index.wxss
  53. 110 0
      applet/pages/talent/appointment/list.js
  54. 4 0
      applet/pages/talent/appointment/list.json
  55. 46 0
      applet/pages/talent/appointment/list.wxml
  56. 7 0
      applet/pages/talent/appointment/list.wxss
  57. 60 0
      applet/pages/talent/home/home.js
  58. 3 0
      applet/pages/talent/home/home.json
  59. 25 0
      applet/pages/talent/home/home.wxml
  60. 6 0
      applet/pages/talent/home/home.wxss
  61. 142 0
      applet/pages/teahouse/detail/detail.js
  62. 3 0
      applet/pages/teahouse/detail/detail.json
  63. 18 0
      applet/pages/teahouse/detail/detail.wxml
  64. 10 0
      applet/pages/teahouse/detail/detail.wxss
  65. 81 0
      applet/pages/teahouse/home/home.js
  66. 4 0
      applet/pages/teahouse/home/home.json
  67. 30 0
      applet/pages/teahouse/home/home.wxml
  68. 10 0
      applet/pages/teahouse/home/home.wxss
  69. 96 0
      applet/pages/teahouse/log/log.js
  70. 4 0
      applet/pages/teahouse/log/log.json
  71. 65 0
      applet/pages/teahouse/log/log.wxml
  72. 10 0
      applet/pages/teahouse/log/log.wxss
  73. 110 0
      applet/pages/teahouse/register/register.js
  74. 3 0
      applet/pages/teahouse/register/register.json
  75. 45 0
      applet/pages/teahouse/register/register.wxml
  76. 3 0
      applet/pages/teahouse/register/register.wxss
  77. 25 0
      applet/pages/webview/ai/ai.js
  78. 4 0
      applet/pages/webview/ai/ai.json
  79. 1 0
      applet/pages/webview/ai/ai.wxml
  80. 1 0
      applet/pages/webview/ai/ai.wxss
  81. 20 0
      applet/pages/webview/rcmap/rcmap.js
  82. 3 0
      applet/pages/webview/rcmap/rcmap.json
  83. 1 0
      applet/pages/webview/rcmap/rcmap.wxml
  84. 1 0
      applet/pages/webview/rcmap/rcmap.wxss
  85. 12 4
      applet/project.private.config.json
  86. 5 0
      nginx.htaccess
  87. 27 0
      public/nginx.htaccess
  88. 85 0
      public/themes/admin_simpleboot3/talent/admin_appointment/index.html
  89. 32 0
      public/themes/admin_simpleboot3/talent/admin_appointment/log.html
  90. 109 0
      public/themes/admin_simpleboot3/talent/admin_talent/add.html
  91. 111 0
      public/themes/admin_simpleboot3/talent/admin_talent/edit.html
  92. 71 0
      public/themes/admin_simpleboot3/talent/admin_talent/index.html
  93. 30 0
      public/themes/admin_simpleboot3/talent/admin_talent/setting.html
  94. 52 0
      public/themes/admin_simpleboot3/talent/admin_talent_admin/add.html
  95. 54 0
      public/themes/admin_simpleboot3/talent/admin_talent_admin/edit.html
  96. 50 0
      public/themes/admin_simpleboot3/talent/admin_talent_admin/index.html

+ 0 - 0
.htaccess


+ 45 - 0
api/common/Sms.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace api\common;
+
+
+use think\facade\Log;
+
+class Sms
+{
+    public function send($mobile, $code, $content_param = [])
+    {
+        $url   = "https://lw_test.jinjianghc.com/api/sms/send";
+        $token = "L1mq09OB68be4b4526092";
+//        $url        = "http://bd.lwtest.com/api/sms/send";
+//        $token      = "oYtEwqzL68be506f50a52";
+        $postArr    = ['mobile' => $mobile, 'template_code' => $code, 'template_param' => $content_param];
+        $postFields = json_encode($postArr);
+
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, [
+                'Content-Type: application/json; charset=utf-8',   //json版本需要填写  Content-Type: application/json;
+                'token:' . $token,
+            ]
+        );
+        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //若果报错 name lookup timed out 报错时添加这一行代码
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($ch, CURLOPT_POST, 1);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
+        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+        $ret = curl_exec($ch);
+        curl_close($ch);
+        $rsp = json_decode($ret, true);
+
+        if ($rsp['code'] != 0) {
+            Log::record('短信发送失败:' . json_encode($rsp) . "。原始参数:" . json_encode($postArr));
+            return ['code' => 1, 'msg' => empty($rsp['errorMsg']) ? $rsp['msg'] : $rsp['errorMsg']];
+        } else {
+            return ['code' => 0];
+        }
+    }
+
+}

+ 141 - 0
api/talent/controller/AdminController.php

@@ -0,0 +1,141 @@
+<?php
+
+namespace api\talent\controller;
+
+
+use api\common\Sms;
+use app\talent\model\TalentAdminModel;
+use app\talent\model\TalentAppointmentLogModel;
+use app\talent\model\TalentAppointmentModel;
+use app\talent\model\TalentModel;
+use cmf\controller\RestUserBaseController;
+
+class AdminController extends RestUserBaseController
+{
+    public function login()
+    {
+        $data  = $this->request->param();
+        $admin = TalentAdminModel::where('account', $data['account'])->where('password', $data['password'])->find();
+        if (empty($admin)) {
+            $this->error('账号或密码错误');
+        }
+
+        $this->success('成功', $admin['id']);
+    }
+
+    public function scan()
+    {
+        $code     = $this->request->param('code', '');
+        $admin_id = $this->request->param('admin_id', 0);
+        if (empty($admin_id)) {
+            $this->error('暂无权限');
+        }
+        if (empty($code)) {
+            $this->error('二维码错误');
+        }
+
+        $appointment = TalentAppointmentModel::where('apply_code', $code)->find();
+        if (empty($appointment)) {
+            $this->error('二维码错误');
+        }
+        if ($appointment['status'] != 2) {
+            $this->error('该预约已接站,请勿重复扫码');
+        }
+
+        $appointment->status = 3;
+        $appointment->save();
+
+        //日志
+        $admin = TalentAdminModel::get($admin_id);
+        TalentAppointmentLogModel::create([
+            'appointment_id' => $appointment['id'],
+            'name'           => '工作人员(' . $admin['name'] . ')',
+            'content'        => '通过扫码接站,接到了人才',
+            'create_time'    => date('Y-m-d H:i:s'),
+        ]);
+
+        $talent = TalentModel::get($appointment['talent_id']);
+
+        $this->success('成功', ['talent' => $talent, 'appointment' => $appointment]);
+    }
+
+    public function lists()
+    {
+        $data = $this->request->param();
+        $page = empty($param['page']) ? 1 : $param['page'];
+        $size = empty($param['size']) ? 10 : $param['size'];
+        $where = [['status', '=', $data['status']]];
+        if (!empty($data['keyword'])) {
+            $where[] = ['shift','like',"%{$data['keyword']}%"];
+        }
+
+        //搜索条件
+        $list  = TalentAppointmentModel::with(['talent'])
+            ->where($where)
+            ->order('start_time desc')
+            ->page($page, $size)
+            ->append(['status_text'])
+            ->select();
+
+        $this->success('成功', $list);
+    }
+
+    public function confirm()
+    {
+        $data = $this->request->param();
+        TalentAppointmentModel::update(['status'=>2,'apply_code'=>uniqid()],['id'=>$data['id']]);
+
+        //日志
+        $admin = TalentAdminModel::get($data['admin_id']);
+        TalentAppointmentLogModel::create([
+            'appointment_id' => $data['id'],
+            'name'           => '工作人员(' . $admin['name'] . ')',
+            'content'        => '确认了人才的预约',
+            'create_time'    => date('Y-m-d H:i:s'),
+        ]);
+
+        //短信
+//        $sms = new Sms();
+//        $sms->send('13313826760','verification_code',['code'=>'123456']);
+
+        $this->success();
+    }
+
+    public function applyByMobile()
+    {
+        $mobile     = $this->request->param('mobile', '');
+        $admin_id = $this->request->param('admin_id', 0);
+        $id = $this->request->param('id',0);
+        if (empty($admin_id)) {
+            $this->error('暂无权限');
+        }
+        if (empty($mobile)) {
+            $this->error('手机号错误');
+        }
+
+        $appointment = TalentAppointmentModel::with(['talent'])->where('id', $id)->find();
+        if (empty($appointment)) {
+            $this->error('系统异常,请联系管理员');
+        }
+        if ($appointment['status'] != 2) {
+            $this->error('该预约已接站,请勿重复接站');
+        }
+        if ($appointment['talent']['mobile'] != $mobile) {
+            $this->error('手机号输入错误');
+        }
+
+        $appointment->status = 3;
+        $appointment->save();
+
+        //日志
+        $admin = TalentAdminModel::get($admin_id);
+        TalentAppointmentLogModel::create([
+            'appointment_id' => $appointment['id'],
+            'name'           => '工作人员(' . $admin['name'] . ')',
+            'content'        => '通过手机号接站,接到了人才',
+            'create_time'    => date('Y-m-d H:i:s'),
+        ]);
+
+        $this->success('成功');
+    }
+}

+ 113 - 0
api/talent/controller/AppointmentController.php

@@ -0,0 +1,113 @@
+<?php
+
+namespace api\talent\controller;
+
+
+use api\applet\model\UserModel;
+use app\talent\model\TalentAppointmentLogModel;
+use app\talent\model\TalentAppointmentModel;
+use app\talent\model\TalentModel;
+use cmf\controller\RestUserBaseController;
+
+class AppointmentController extends RestUserBaseController
+{
+    public function bind()
+    {
+        $data   = $this->request->param();
+        $talent = TalentModel::where('name', $data['name'])->where('card_no', $data['card_no'])->find();
+        if (empty($talent)) {
+            $this->error('未找到人才信息,请重新信息是否输入有误');
+        }
+
+        $user = UserModel::where('talent_id', $talent['id'])->find();
+        if (!empty($user)) {
+            $this->error('该人才信息已被绑定,请联系管理员确认');
+        }
+
+        $userId = $this->getUserId();
+        UserModel::update(['talent_id' => $talent['id']], ['id' => $userId]);
+        $this->success();
+    }
+
+    public function upload()
+    {
+        $file   = $this->request->file('file');
+        $result = $file->validate([
+            'ext'  => 'jpg,jpeg,png',
+            'size' => 1024 * 1024,
+        ])->move(WEB_ROOT . 'upload' . DIRECTORY_SEPARATOR . 'watermark' . DIRECTORY_SEPARATOR);
+        if ($result) {
+            $avatarSaveName = str_replace('//', '/', str_replace('\\', '/', $result->getSaveName()));
+            $url            = cmf_get_image_url('watermark/' . $avatarSaveName);
+
+            $this->success('上传成功', $url);
+        } else {
+            $this->error($file->getError());
+        }
+    }
+
+    public function book()
+    {
+        $data       = $this->request->param();
+        $date       = $data['date'] . ' ' . $data['time'] . ':00';
+        $start_time = strtotime($date);
+        $time       = time();
+        if ($start_time - $time < 3600) {
+            $this->error('只能预约一小时后的班次');
+        }
+
+        $appointment = TalentAppointmentModel::create([
+            'talent_id'   => $this->user['talent_id'],
+            'shift'       => $data['shift'],
+            'start_time'  => $date,
+            'image'       => $data['image'],
+            'create_time' => date('Y-m-d H:i:s'),
+        ]);
+
+        TalentAppointmentLogModel::create([
+            'appointment_id' => $appointment['id'],
+            'name'           => '人才',
+            'content'        => '提交了预约',
+            'create_time'    => date('Y-m-d H:i:s'),
+        ]);
+
+        $this->success();
+    }
+
+    public function lists()
+    {
+        $page = empty($param['page']) ? 1 : $param['page'];
+        $size = empty($param['size']) ? 10 : $param['size'];
+
+        //搜索条件
+        $where = [['talent_id', '=', $this->user['talent_id']]];
+        $list  = TalentAppointmentModel::where($where)
+            ->order('start_time desc')
+            ->page($page, $size)
+            ->append(['status_text'])
+            ->select();
+
+        $this->success('成功', $list);
+    }
+
+    public function getAdminMobile()
+    {
+        $setting = cmf_get_option('talent_setting');
+        $this->success('成功', $setting);
+    }
+
+    public function rate()
+    {
+        $data           = $this->request->param();
+        $data['status'] = 4;
+        TalentAppointmentModel::update($data);
+        TalentAppointmentLogModel::create([
+            'appointment_id' => $data['id'],
+            'name'           => '人才',
+            'content'        => '评价了服务',
+            'create_time'    => date('Y-m-d H:i:s'),
+        ]);
+
+        $this->success('成功');
+    }
+}

+ 1 - 1
api/user/controller/ProfileController.php

@@ -161,7 +161,7 @@ class ProfileController extends RestUserBaseController
         //判断请求为GET,获取信息
         if ($this->request->isGet()) {
             $userId   = $this->getUserId();
-            $fieldStr = 'id,user_name,user_idcard,user_type,user_login,mobile,user_email,user_nickname,avatar,signature,user_url,sex,birthday,score,coin,user_status,user_activation_key,create_time,last_login_time,last_login_ip,company_name,job,is_talent,talent_level,talent_card,jucai_id';
+            $fieldStr = 'id,user_name,user_idcard,user_type,user_login,mobile,user_email,user_nickname,avatar,signature,user_url,sex,birthday,score,coin,user_status,user_activation_key,create_time,last_login_time,last_login_ip,company_name,job,is_talent,talent_level,talent_card,jucai_id,talent_id';
             if (empty($field)) {
                 $userData = Db::name("user")->field($fieldStr)->find($userId);
             } else {

+ 83 - 0
app/talent/controller/AdminAppointmentController.php

@@ -0,0 +1,83 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: 小夏 < 449134904@qq.com>
+// +----------------------------------------------------------------------
+namespace app\talent\controller;
+
+use app\admin\model\UserModel;
+use app\talent\model\TalentAppointmentLogModel;
+use app\talent\model\TalentAppointmentModel;
+use app\talent\model\TalentModel;
+use cmf\controller\AdminBaseController;
+
+class AdminAppointmentController extends AdminBaseController
+{
+    public function index()
+    {
+        $param = $this->request->param();
+
+        //搜索条件
+        $where = [];
+        if (!empty($param['name'])) {
+            $where[] = ['cmf_talent_appointment.name', 'like', "%{$param['name']}%"];
+        }
+        if (!empty($param['mobile'])) {
+            $where[] = ['cmf_talent_appointment.mobile', '=', $param['mobile']];
+        }
+        if (!empty($param['shift'])) {
+            $where[] = ['shift', 'like', "%{$param['shift']}%"];
+        }
+
+        $list = TalentAppointmentModel::alias('ta')
+            ->join('cmf_talent t', 'ta.talent_id = t.id')
+            ->field(['ta.*','t.name','t.mobile'])
+            ->where($where)
+            ->append(['status_text'])
+            ->paginate(10, false, ['query' => $param]);
+
+        $this->assign('name', isset($param['name']) ? $param['name'] : '');
+        $this->assign('mobile', isset($param['mobile']) ? $param['mobile'] : '');
+        $this->assign('shift', isset($param['shift']) ? $param['shift'] : '');
+        $this->assign('list', $list->items());
+        $this->assign('page', $list->render());
+
+        return $this->fetch();
+    }
+
+    public function edit()
+    {
+        $id   = $this->request->param('id', 0, 'intval');
+        $info = TalentModel::get($id);
+        $this->assign('info', $info);
+
+        return $this->fetch();
+    }
+
+    public function editPost()
+    {
+        if ($this->request->isPost()) {
+            $data = $this->request->post();
+            TalentModel::update($data, ['id' => $data['id']]);
+            $this->success('编辑成功!', url('index'));
+        }
+    }
+
+    public function log()
+    {
+        $param = $this->request->param();
+
+        $list = TalentAppointmentLogModel::order('create_time desc')->paginate(10, false, ['query' => $param]);
+
+        $this->assign('list', $list->items());
+        $this->assign('page', $list->render());
+
+        return $this->fetch();
+    }
+}
+

+ 80 - 0
app/talent/controller/AdminTalentAdminController.php

@@ -0,0 +1,80 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: 小夏 < 449134904@qq.com>
+// +----------------------------------------------------------------------
+namespace app\talent\controller;
+
+use app\talent\model\TalentAdminModel;
+use cmf\controller\AdminBaseController;
+
+class AdminTalentAdminController extends AdminBaseController
+{
+    public function index()
+    {
+        $param = $this->request->param();
+
+        //搜索条件
+        $where = [];
+        if (!empty($param['name'])) {
+            $where[] = ['name', 'like', "%{$param['name']}%"];
+        }
+        if (!empty($param['account'])) {
+            $where[] = ['account', 'like', "%{$param['account']}%"];
+        }
+
+        $list = TalentAdminModel::where($where)->paginate(10, false, ['query' => $param]);
+
+        $this->assign('name', isset($param['name']) ? $param['name'] : '');
+        $this->assign('account', isset($param['account']) ? $param['account'] : '');
+        $this->assign('list', $list->items());
+        $this->assign('page', $list->render());
+
+        return $this->fetch();
+    }
+
+    public function add()
+    {
+        return $this->fetch();
+    }
+
+    public function addPost()
+    {
+        if ($this->request->isPost()) {
+            $data = $this->request->post();
+            TalentAdminModel::create($data);
+            $this->success('添加成功!', url('index'));
+        }
+    }
+
+    public function edit()
+    {
+        $id   = $this->request->param('id', 0, 'intval');
+        $info = TalentAdminModel::get($id);
+        $this->assign('info', $info);
+
+        return $this->fetch();
+    }
+
+    public function editPost()
+    {
+        if ($this->request->isPost()) {
+            $data = $this->request->post();
+            TalentAdminModel::update($data, ['id' => $data['id']]);
+            $this->success('编辑成功!', url('index'));
+        }
+    }
+
+    public function delete()
+    {
+        $id = $this->request->param('id', 0, 'intval');
+        TalentAdminModel::destroy($id);
+        $this->success('删除成功');
+    }
+}
+

+ 113 - 0
app/talent/controller/AdminTalentController.php

@@ -0,0 +1,113 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: 小夏 < 449134904@qq.com>
+// +----------------------------------------------------------------------
+namespace app\talent\controller;
+
+use app\admin\model\UserModel;
+use app\talent\model\TalentModel;
+use cmf\controller\AdminBaseController;
+
+class AdminTalentController extends AdminBaseController
+{
+    public function index()
+    {
+        $param = $this->request->param();
+
+        //搜索条件
+        $where = [];
+        if (!empty($param['name'])) {
+            $where[] = ['name', 'like', "%{$param['name']}%"];
+        }
+        if (!empty($param['card_no'])) {
+            $where[] = ['card_no', 'like', "%{$param['card_no']}%"];
+        }
+        if (!empty($param['mobile'])) {
+            $where[] = ['mobile', '=', $param['mobile']];
+        }
+
+        $list = TalentModel::where($where)->paginate(10, false, ['query' => $param]);
+
+        $this->assign('name', isset($param['name']) ? $param['name'] : '');
+        $this->assign('card_no', isset($param['card_no']) ? $param['card_no'] : '');
+        $this->assign('mobile', isset($param['mobile']) ? $param['mobile'] : '');
+        $this->assign('list', $list->items());
+        $this->assign('page', $list->render());
+
+        return $this->fetch();
+    }
+
+    public function add()
+    {
+        return $this->fetch();
+    }
+
+    public function addPost()
+    {
+        if ($this->request->isPost()) {
+            $data = $this->request->post();
+            TalentModel::create($data);
+            $this->success('添加成功!', url('index'));
+        }
+    }
+
+    public function edit()
+    {
+        $id   = $this->request->param('id', 0, 'intval');
+        $info = TalentModel::get($id);
+        $this->assign('info', $info);
+
+        return $this->fetch();
+    }
+
+    public function editPost()
+    {
+        if ($this->request->isPost()) {
+            $data = $this->request->post();
+            TalentModel::update($data, ['id' => $data['id']]);
+            $this->success('编辑成功!', url('index'));
+        }
+    }
+
+    public function delete()
+    {
+        $id = $this->request->param('id', 0, 'intval');
+        TalentModel::destroy($id);
+        UserModel::update(['talent_id' => 0], ['talent_id' => $id]);
+        $this->success('删除成功');
+    }
+
+    public function clearBind()
+    {
+        $id = $this->request->param('id', 0, 'intval');
+        UserModel::update(['talent_id' => 0], ['talent_id' => $id]);
+        $this->success('操作成功');
+    }
+
+    public function setting()
+    {
+        $setting = cmf_get_option('talent_setting');
+        $this->assign($setting);
+        return $this->fetch();
+    }
+
+    public function settingPost()
+    {
+        $post = array_map('trim', $this->request->param());
+
+        if (strlen($post['mobile']) != 11) {
+            $this->error('手机号格式错误。');
+        }
+
+        cmf_set_option('talent_setting', $post);
+
+        $this->success("保存成功!");
+    }
+}
+

+ 18 - 0
app/talent/model/TalentAdminModel.php

@@ -0,0 +1,18 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author:kane < chengjin005@163.com>
+// +----------------------------------------------------------------------
+namespace app\talent\model;
+
+use think\Model;
+
+class TalentAdminModel extends Model
+{
+
+}

+ 18 - 0
app/talent/model/TalentAppointmentLogModel.php

@@ -0,0 +1,18 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author:kane < chengjin005@163.com>
+// +----------------------------------------------------------------------
+namespace app\talent\model;
+
+use think\Model;
+
+class TalentAppointmentLogModel extends Model
+{
+
+}

+ 27 - 0
app/talent/model/TalentAppointmentModel.php

@@ -0,0 +1,27 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author:kane < chengjin005@163.com>
+// +----------------------------------------------------------------------
+namespace app\talent\model;
+
+use think\Model;
+
+class TalentAppointmentModel extends Model
+{
+    public function getStatusTextAttr($value, $data)
+    {
+        $status = [1=>'待确认',2=>'待接站',3=>'待评价',4=>'已完成'];
+        return $status[$data['status']];
+    }
+
+    public function talent()
+    {
+        return $this->hasOne(TalentModel::class,'id','talent_id');
+    }
+}

+ 18 - 0
app/talent/model/TalentModel.php

@@ -0,0 +1,18 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author:kane < chengjin005@163.com>
+// +----------------------------------------------------------------------
+namespace app\talent\model;
+
+use think\Model;
+
+class TalentModel extends Model
+{
+
+}

+ 40 - 4
applet/app.js

@@ -2,10 +2,10 @@
 App({
   globalData: {
     title: '晋爱人才',
-    // http_host: 'http://bd.jarc.com/',
-    http_host: 'https://jarc.jucai.gov.cn/',
-    // api_host: 'http://bd.jarc.com/api/',
-    api_host: 'https://jarc.jucai.gov.cn/api/',
+    http_host: 'http://bd.jarc.com/',
+    // http_host: 'https://jarc.jucai.gov.cn/',
+    api_host: 'http://bd.jarc.com/api/',
+    // api_host: 'https://jarc.jucai.gov.cn/api/',
   },
   onLaunch: function() {
     var self = this;
@@ -173,6 +173,42 @@ App({
         })
       }
     })
+  },
+   //服务器请求
+   upload: function (filePath, success, is_load=true) {
+    if (is_load) {
+      wx.showLoading({
+        title: '加载中',
+        mask: true,
+      });
+    }
+    var that = this;
+    var token = wx.getStorageSync('token');
+    wx.uploadFile({
+      url: that.globalData.api_host + 'talent/appointment/upload',
+      filePath: filePath,
+      name: 'file',
+      header: { 'X-Requested-With': 'XMLHttpRequest' , 'XX-Device-Type': 'wxapp' , 'XX-Token': token},
+      success(res) {
+        var json = JSON.parse(res.data)
+        if (json.code == 1) {
+          wx.hideLoading();
+          success.call(this, json.data);
+        } else {
+          wx.showToast({
+            title: '上传失败,请重试',
+            icon: 'none'
+          });
+        }
+      },
+      fail() {
+        console.log(11);
+        wx.showToast({
+          title: '上传失败,请重试',
+          icon: 'none'
+        });
+      }
+    });
   },
   /**
    * 登录验证

+ 18 - 9
applet/app.json

@@ -1,6 +1,7 @@
 {
   "pages": [
     "pages/home/home/home",
+    "pages/home/test/test",
     "pages/rob/home/home",
     "pages/my/rob/rob",
     "pages/rob/detail/detail",
@@ -26,13 +27,21 @@
     "pages/business/feedback/feedback",
     "pages/business/ad/ad",
     "pages/webview/recuperate/recuperate",
+    "pages/webview/ai/ai",
     "pages/my/score/score",
     "pages/my/agreement/service",
     "pages/my/agreement/privacy",
     "pages/teahouse/register/register",
     "pages/teahouse/home/home",
     "pages/teahouse/detail/detail",
-    "pages/teahouse/log/log"
+    "pages/teahouse/log/log",
+    "pages/talent/home/home",
+    "pages/talent/appointment/index",
+    "pages/my/feedback/feedback",
+    "pages/talent/appointment/list",
+    "pages/talent/appointment/evaluate",
+    "pages/talent/admin/index",
+    "pages/talent/admin/login"
   ],
   "window": {
     "navigationStyle": "custom",
@@ -55,16 +64,16 @@
         "text": "服务地图"
       },
       {
-        "pagePath": "pages/webview/rcmap/rcmap",
-        "iconPath": "common/images/tabbar/calc.png",
-        "selectedIconPath": "common/images/tabbar/calc_cur.png",
-        "text": "政策计算器"
+        "pagePath": "pages/webview/ai/ai",
+        "iconPath": "common/images/tabbar/ai.png",
+        "selectedIconPath": "common/images/tabbar/ai_cur.png",
+        "text": "AI计算器"
       },
       {
-        "pagePath": "pages/rob/home/home",
-        "iconPath": "common/images/tabbar/rob.png",
-        "selectedIconPath": "common/images/tabbar/rob_cur.png",
-        "text": "抢票"
+        "pagePath": "pages/talent/home/home",
+        "iconPath": "common/images/tabbar/train.png",
+        "selectedIconPath": "common/images/tabbar/train_cur.png",
+        "text": "人才便捷出行"
       },
       {
         "pagePath": "pages/my/home/home",

BIN
applet/common/images/tabbar/ai.png


BIN
applet/common/images/tabbar/ai_cur.png


BIN
applet/common/images/tabbar/calc.png


BIN
applet/common/images/tabbar/calc_cur.png


BIN
applet/common/images/tabbar/train.png


BIN
applet/common/images/tabbar/train_cur.png


+ 19 - 0
applet/common/js/common.js

@@ -0,0 +1,19 @@
+//数组通过值找键
+module.exports.arrayFindKey = function (arr,value) {
+  let index = 0;
+  for (let i in arr) {
+    if (arr[i] == value) {
+      index = i;
+    }
+  }
+  return index;
+}
+
+module.exports.inArray = function (value,arr) {
+  for (let i in arr) {
+    if (arr[i] == value) {
+      return true;
+    }
+  }
+  return false;
+}

+ 1 - 1
applet/pages/home/home/home.js

@@ -77,7 +77,7 @@ Page({
     })
   },
   toRob() {
-    wx.switchTab({
+    wx.navigateTo({
       url: '/pages/rob/home/home',
     })
   },

+ 20 - 0
applet/pages/home/test/test.js

@@ -0,0 +1,20 @@
+// pages/home/webview/webview.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    url:'https://webview.jinjianghc.com'
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 3 - 0
applet/pages/home/test/test.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 0
applet/pages/home/test/test.wxml

@@ -0,0 +1 @@
+<web-view src="{{url}}"></web-view>

+ 1 - 0
applet/pages/home/test/test.wxss

@@ -0,0 +1 @@
+/* pages/webview/rcs/rcs.wxss */

+ 66 - 0
applet/pages/my/agreement/privacy.js

@@ -0,0 +1,66 @@
+// pages/my/agreement/privacy.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+
+  }
+})

+ 3 - 0
applet/pages/my/agreement/privacy.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 74 - 0
applet/pages/my/agreement/privacy.wxml


+ 1 - 0
applet/pages/my/agreement/privacy.wxss

@@ -0,0 +1 @@
+/* pages/my/agreement/privacy.wxss */

+ 66 - 0
applet/pages/my/agreement/service.js

@@ -0,0 +1,66 @@
+// pages/my/agreement/service.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+
+  }
+})

+ 3 - 0
applet/pages/my/agreement/service.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 220 - 0
applet/pages/my/agreement/service.wxml

@@ -0,0 +1,220 @@
+<cu-custom bgColor="bg-lw-header" is-back="{{true}}"><view slot="content">用户服务协议</view></cu-custom>
+<view>
+    您注册成为晋江人力用户!晋江人力用户服务协议(以下简称“本协议”)是由福建省晋江人力资本有限公司信息技术有限公司(以下简称“福建省晋江人力资本有限公司”或者“我们”)和您签订。
+</view>
+<view>
+    第一条 福建省晋江人力资本有限公司用户协议的确认
+</view>
+<view>
+    1、您在注册、登陆使用福建省晋江人力资本有限公司提供的各项服务之前,请您仔细阅读并理解本协议全部内容,做出您认为适当的选择。我们努力用通俗易懂、简单明了的文字表达,同时对于在本协议中与您的权益存在重大关系的条款,采用粗体字进行标注以提示您注意。当您点击“注册”或者“登录”或其他方式确认即表示您已经仔细阅读并完全理解、同意本协议项下的全部条款。
+</view>
+<view>
+    2、如果我们对本协议进行修改,我们将在上海福建省晋江人力资本有限公司资源有限公司提前予以公布,更变公示期(7日)届满时生效。若您不同意修改后的协议,您有权停止使用福建省晋江人力资本有限公司服务或者注销您的福建省晋江人力资本有限公司账户;双方协商一致的,也可另行变更协议内容。您如果继续“登录”或其他方式确认,使用福建省晋江人力资本有限公司提供的服务,即表示已经仔细阅读并完全理解、同意修改后的协议。
+</view>
+<view>
+    第二条 账户的注册、使用、注销
+</view>
+<view>
+    1、 在您开始注册使用福建省晋江人力资本有限公司服务前,您应当具备中华人民共和国法律规定的与您的行为相适应的民事行为能力。
+</view>
+<view>
+    2、 您同意本协议的全部条款并按照登陆页面上的提示提供您本人真实、准确、有效信息并完成全部注册程序后,才能成为福建省晋江人力资本有限公司用户。我们通过福建省晋江人力资本有限公司平台为福建省晋江人力资本有限公司用户提供网络服务。
+</view>
+<view>
+    (1)如果您是求职用户,建议您尽量完善和公开您的简历信息以更好进行求职。如您同意在您选择公开简历时,在您选择公开简历范围的福建省晋江人力资本有限公司用户可以付费查看您的简历以获取您填写或上传的简历信息。
+</view>
+<view>
+    (2)如果您是招聘用户,您需要完成实名认证、实人认证并关联用人单位,保证该为职务行为后,才能使用福建省晋江人力资本有限公司提供的招聘服务。为了平台的安全运行,招聘信息的真实、有效,我们视情况定期或不定期核查已经通过认证的招聘用户,以验证认证信息的真实有效性。如在核查过程中发现招聘用户提供的信息不符合规定或虚假或无效的,我们有权对该用户及关联单位采取包括但不限于扣除资源、限制登录、暂停使用、终止合作永久封禁账户等平台管制措施。
+</view>
+<view>
+    3、 您应妥善保证自己的帐号和密码,您应当对以其账户进行的所有活动和事件负法律责任。如您是企业用户,您对其认证后关联的个人用户的所有行为承担连带责任。
+</view>
+<view>
+    4、 您在使用福建省晋江人力资本有限公司网络存储平台和/或享受福建省晋江人力资本有限公司提供的服务过程中,应当遵守国家法律法规以及所有与福建省晋江人力资本有限公司服务有关的网络协议、规定、产品规则或程序,不得有下列任何行为,否则福建省晋江人力资本有限公司有权不通知您自行采取措施,包括但不限于删除用户发布的内容,限制、暂停用户使用,或终止合作永久封禁账户等措施:
+</view>
+<view>
+    (1)提供虚假信息注册的(包括但不限于冒充其他人、单位)或者仿冒、混淆他人账号对外展示名称、头像或者发布让人容易产生混淆、误解的内容的行为;
+</view>
+<view>
+    (2)在福建省晋江人力资本有限公司平台上骚扰、辱骂、歧视、威胁他人或存在其他不正当行为;
+</view>
+<view>
+    (3)通过任何技术手段侵入我们的软件、网站、数据库等系统或者干扰福建省晋江人力资本有限公司产品和/或服务正常运行的;
+</view>
+<view>
+    (4)任何利用自有或第三方的插件、程序抓取、读取、收集福建省晋江人力资本有限公司平台展示的任何信息的;
+</view>
+<view>
+    (5)侵犯福建省晋江人力资本有限公司或第三方的专利权、著作权、商标权、名誉权或其他任何合法权益的行为;
+</view>
+<view>
+    (6)未经福建省晋江人力资本有限公司许可,在福建省晋江人力资本有限公司平台发布广告或营销行为;
+</view>
+<view>
+    (7)利用福建省晋江人力资本有限公司平台发布、传输任何新闻信息,包括但不限于有关政治、经济、军事、外交等社会公共事务的报道、评论,以及有关社会突发事件的报道、评论;
+</view>
+<view>
+    (8)其他违反国家法律法规以及所有与福建省晋江人力资本有限公司服务有关的网络协议、规定、产品规则或程序的行为。
+</view>
+<view>
+    5、 招聘用户还需遵守福建省晋江人力资本有限公司公布《信用分规则》、《职位发布规则》。
+</view>
+<view>
+    6、 您在与福建省晋江人力资本有限公司上公布信息的个人或公司沟通时,保证在福建省晋江人力资本有限公司平台上进行。
+</view>
+<view>
+    7、 您知晓并同意在拨打福建省晋江人力资本有限公司电话时均可能会被录音,福建省晋江人力资本有限公司电话包括但不限于客服电话、销售电话等。
+</view>
+<view>
+    8、 您在福建省晋江人力资本有限公司发布的职位信息有有效期,福建省晋江人力资本有限公司有权下线有效期届满的职位信息。
+</view>
+<view>
+    9、 您购买或者福建省晋江人力资本有限公司赠送的线上服务和/或资源均有有效期,有效期结束后线上服务和/或资源自动清零、服务权限降低,资源有效期不可中断或延期,福建省晋江人力资本有限公司其他服务条款或优惠活动另有规定的除外。
+</view>
+<view>
+    10、 福建省晋江人力资本有限公司有权拒绝为与本单位经营同类业务、有业务竞争关系或者其他利害关系的单位及个人提供服务。
+</view>
+<view>
+    11、 用户同意以其注册的手机号码、电子邮箱接收福建省晋江人力资本有限公司发送的验证码、安全信息、商业广告。若希望“退订”商业广告,您按照短信、邮件中提示的方式正确操作后退订商业广告。
+</view>
+<view>
+    12、 如需要注销的福建省晋江人力资本有限公司账户,您可以在福建省晋江人力资本有限公司上申请注销您的福建省晋江人力资本有限公司账户。在注销账户之后,我们将停止为您提供所有的产品和服务,并依据您的要求,删除您的个人信息,但法律法规另有规定的除外。
+</view>
+<view>
+    13、 您可以拨打我们的客户服务热线13643812183。
+</view>
+<view>
+    第三条 用户承诺
+</view>
+<view>
+    1、您应遵守中华人民共和国相关法律法规、所居住或者开展经营活动或者业务国家或者地区的法律法规,不得将我们的网络存储平台和/或服务用于非法目的,不也得以非法方式使用我们的网络存储平台和/或服务。
+</view>
+<view>
+    2、您承诺在注册或者认证过程中,提供的资料合法、真实、有效。如提交的资料有任何变动,应该及时、准确更新。如因提交的资料不真实或者更新不及时而引发的问题,您应承担相应责任。
+</view>
+<view>
+    3、您应按照平台相关规则及您与平台的相关约定合理、合法使用在福建省晋江人力资本有限公司获取、下载的信息及文件(包括但不限于简历信息、职位介绍视频、招聘方介绍文字/视频/图片、候选人面试过程录制的音/视频/图片等)。未经平台及文件相关权利人授权,您不得将平台服务过程中获取的任何信息或文件用于服务目的以外的其他目的,亦不得改编相关文件,不得在面试服务过程中截屏/私自录屏,不得将在平台服务过程中获取的简历信息/文件/肖像上传、提供或分享至与服务无关的任何第三方/平台/应用或商业使用。
+</view>
+<view>
+    4、如您为招聘方,您不得将所获取的简历用于己方招聘以外的其他目的,不得利用第三方软件、通过其他网站登录、侵入福建省晋江人力资本有限公司系统刷取福建省晋江人力资本有限公司用户简历,亦不得利用福建省晋江人力资本有限公司平台提供的信息从事任何违法违规活动。
+</view>
+<view>
+    5、福建省晋江人力资本有限公司将会尽其商业上的合理努力保障您在福建省晋江人力资本有限公司及服务中的数据存储安全,并在法律要求的期限内保留您的个人信息。福建省晋江人力资本有限公司不对您在福建省晋江人力资本有限公司服务中相关数据的删除或储存失败、超出法律规定及平台承诺的储存期限以外的数据负责,您应当根据自身需求自行备份福建省晋江人力资本有限公司及服务中的相关数据。
+</view>
+<view>
+    6、您承诺在福建省晋江人力资本有限公司上传、发表、转载或者传输的内容合法、真实、有效,不得夸张描述或编造虚假信息,并对内容承担全部责任。您不得在福建省晋江人力资本有限公司的任何页面发布、转载、传送含有下列任何内容的信息,否则福建省晋江人力资本有限公司有权不通知您自行采取措施,包括但不限于删除用户发布的内容,限制、暂停使用,或终止合作永久封禁账户等措施:
+</view>
+<view>
+    (1)违反宪法确定的基本原则的;
+</view>
+<view>
+    (2)危害国家安全,泄漏国家机密,颠覆国家政权,破坏国家统一的;
+</view>
+<view>
+    (3)损害国家荣誉和利益的;
+</view>
+<view>
+    (4)煽动民族仇恨、民族歧视,破坏民族团结的;
+</view>
+<view>
+    (5)破坏国家宗教政策,宣扬邪教和封建迷信的;
+</view>
+<view>
+    (6)散布谣言,扰乱社会秩序,破坏社会稳定的;
+</view>
+<view>
+    (7)散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的;
+</view>
+<view>
+    (8)侮辱或者诽谤他人,侵害他人合法权益的;
+</view>
+<view>
+    (9)煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的;
+</view>
+<view>
+    (10)含有歧视内容的,如民族歧视、地域歧视、性别歧视、宗教歧视等;
+</view>
+<view>
+    (11)虚假、胁迫、猥亵、骚扰、中伤、粗俗、侵害他人隐私或其他有悖道德、令人反感的内容;
+</view>
+<view>
+    (12)侵犯福建省晋江人力资本有限公司或任何第三方的合法权利的,包括但不限于知识产权等权利;
+</view>
+<view>
+    (13)含有其他违法违规、违反《信用分规则》、《职位发布规则》等福建省晋江人力资本有限公司线上规则、违背善良风俗内容的内容。
+</view>
+<view>
+    第四条 用户违规行为的处理
+</view>
+<view>
+    1、您如违反法律法规或本协议中的第二条、第三条任一条款的,福建省晋江人力资本有限公司有权要求改正或直接采取一切必要的措施。必要的措施包括但不限于删除用户张贴的内容、暂停或终止用户使用福建省晋江人力资本有限公司服务,由此产生的纠纷、赔偿处罚等相应法律责任您应承担。被终止使用福建省晋江人力资本有限公司服务的用户已缴纳的费用不予以退还,若其账户中存在金币、等资源和用户等级的,则同步清零,资源、人选信息等不予退还。
+</view>
+<view>
+    2、招聘用户违反福建省晋江人力资本有限公司公布《信用分规则》、《职位发布规则》,根据对应规则进行处理。
+</view>
+<view>
+    3、除因福建省晋江人力资本有限公司存在过错外,您自行承担使用福建省晋江人力资本有限公司服务产生的风险。您如因本人过错或行为而遭受人身损害、财产损害,造成第三方人身损害、财产损害或由第三人造成您人身、财产损害的,应当依法向责任主体追究法律责任,福建省晋江人力资本有限公司不承担任何责任。
+</view>
+<view>
+    4、用户如违反法律法规或本协议约定,导致福建省晋江人力资本有限公司或其关联公司遭受损失(损失包括但不限于直接经济损失、行政罚款、维权成本),用户应赔偿福建省晋江人力资本有限公司或其关联公司的全部损失。
+</view>
+<view>
+    5、福建省晋江人力资本有限公司未行使或延迟行使其在本协议权利并不构成对这些权利的放弃,单独或部分行使其在本协议项下的任何权利不妨碍任何其它权利的行使。福建省晋江人力资本有限公司随时有权要求用户继续履行义务并承担相应的违约责任。
+</view>
+<view>
+    第五条 用户的个人信息保护
+</view>
+<view>
+    我们重视对您的信息保护,具体详情请参阅《个人信息保护政策》。
+</view>
+<view>
+    第六条 版权声明
+</view>
+<view>
+    我们平台特有的标识、版面设计、编排方式等知识产权均属福建省晋江人力资本有限公司享有,未经福建省晋江人力资本有限公司许可,不得任意复制、转载或使用。
+</view>
+<view>
+    第七条 不可抗力以及免责
+</view>
+<view>
+    1、因遇不可抗力造成的福建省晋江人力资本有限公司无法为用户提供服务的,福建省晋江人力资本有限公司不承担任何法律责任,不可抗力包括但不限于:政府行为、自然灾害、战争、罢工、电脑病毒、黑客攻击、电信管理部门因技术调整导致网络中断等。
+</view>
+<view>
+    2、用户理解福建省晋江人力资本有限公司无法保证网络服务任何条件下均不会中断,故福建省晋江人力资本有限公司对网络服务的及时性、安全性、准确性不作担保。同时,福建省晋江人力资本有限公司对服务器受病毒侵袭及其他故障侵扰免责。用户应做好数据备份,若发生使用本平台时的数据丢失的情况,福建省晋江人力资本有限公司免责。
+</view>
+<view>
+    3、福建省晋江人力资本有限公司不能保证某一招聘信息会有一定数量的用户来浏览,也不能保证会有一位特定的用户来浏览。福建省晋江人力资本有限公司并不保证所有信息、文本、图形、链接及其它项目的绝对准确性和完整性,故仅供用户参考使用。
+</view>
+<view>
+    4、用户承担通过福建省晋江人力资本有限公司登录到其他站点而形成的全部风险。同时了解通过福建省晋江人力资本有限公司之外与其他个人及用户的沟通不在福建省晋江人力资本有限公司控制范围内,其独立承担相应的后果。福建省晋江人力资本有限公司提供平台服务,故不担保用户发送给另一方用户的资料的真实性、精确性与可靠性。
+</view>
+<view>
+    5、福建省晋江人力资本有限公司提供平台服务,任何透过福建省晋江人力资本有限公司发布的招聘信息及其他产品或者服务均系用户自行发布,因其发布行为产生的法律后果由发布人承担;用户在通过福建省晋江人力资本有限公司得到资讯和信息后,与信息发布方所进行的任何交易均系其双方自主交易,双方若发生纠纷,皆与福建省晋江人力资本有限公司无关,福建省晋江人力资本有限公司不承担任何法律责任。
+</view>
+<view>
+    第八条 通知、送达
+</view>
+<view>
+    1、福建省晋江人力资本有限公司对于用户所有的通知均可通过【推送通知、电子邮件、短信、公告】,该等通知于发送之日视为已送达收件人。
+</view>
+<view>
+    2、用户对于福建省晋江人力资本有限公司的通知应当通过福建省晋江人力资本有限公司如下正式公布的通信地址、电子邮件地址等联系信息进行送达。
+</view>
+<view>
+    3、福建省晋江人力资本有限公司的联系信息
+</view>
+<view>
+    电话:13643812183
+</view>
+<view>
+    第九条 法律适用、管辖与其他
+</view>
+<view>
+    1、本协议之订立、生效、解释、修订、补充、终止、执行与争议解决均适用中华人民共和国大陆地区法律;如法律无相关规定的,参照商业惯例及/或行业惯例。
+</view>
+<view>
+    2、如双方就本协议内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向南京市人民法院提起诉讼。
+</view>
+<view>
+    3、本协议任一条款被视为废止、无效或不可执行,该条应视为可分的且并不影响本协议其余条款的有效性及可执行性。
+</view>

+ 1 - 0
applet/pages/my/agreement/service.wxss

@@ -0,0 +1 @@
+/* pages/my/agreement/service.wxss */

+ 12 - 2
applet/pages/my/home/home.js

@@ -177,7 +177,6 @@ Page({
     wx.scanCode({
       success ({result}) {
         let arr = result.split(':');
-        console.log(arr);
         if (arr[0] == 'signin') {
           self.signin(arr[1]);
         } else if (arr[0] == 'business') {
@@ -208,6 +207,17 @@ Page({
     wx.navigateTo({
       url: '/pages/business/detail/detail?is_scan=1&id='+id,
     })
+  },
+  toTalentAdmin() {
+    const admin_id = wx.getStorageSync('admin_id');
+    if (admin_id) {
+      wx.navigateTo({
+        url: '/pages/talent/admin/index',
+      })
+    } else {
+      wx.navigateTo({
+        url: '/pages/talent/admin/login',
+      })
+    }
   }
-
 })

+ 8 - 2
applet/pages/my/home/home.wxml

@@ -16,9 +16,9 @@
         <button class="cu-btn" wx:if="{{getUserInfo}}" bindtap="getUserProfile">点击登录</button>
       </block>
       <block wx:else>
-        <view class="userinfo-content" bindtap="getUserProfile">
+        <view class="userinfo-content">
           {{userInfo.user_nickname}}
-          <text class="cuIcon-refresh lg text-white"></text>
+          <!-- <text class="cuIcon-refresh lg text-white"></text> -->
         </view>
         <view class="userinfo-id">id:{{userInfo.id}}</view>
         <view class="userinfo-id" bindtap="toScore">积分:{{userInfo.score}}</view>
@@ -71,4 +71,10 @@
       <text class="text-black">联系客服</text>
     </view>
   </button>
+  <view class="cu-item arrow" bindtap="toTalentAdmin">
+    <view class="content">
+      <image src="/common/images/service.png" class="png" mode="aspectFit"></image>
+      <text class="text-black">人才便捷出行工作人员</text>
+    </view>
+  </view>
 </view>

+ 249 - 0
applet/pages/talent/admin/index.js

@@ -0,0 +1,249 @@
+const app = getApp();
+const verify = require("../../../common/js/verify.js");
+
+Page({
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    admin_id: 0,
+
+    keyword: ['', '', '', ''],
+    tab: 0,
+
+    is_first: [true, true, true, true],
+    list: [
+      [],
+      [],
+      [],
+      []
+    ],
+    no_more: [false, false, false, false],
+    page: [1, 1, 1, 1],
+
+    custombar: app.globalData.CustomBar,
+    nav_top: 0,
+    nav_fixed: false,
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    const admin_id = wx.getStorageSync('admin_id');
+    if (verify.isEmpty(admin_id)) {
+      wx.redirectTo({
+        url: '/pages/talent/admin/login',
+      })
+    }
+    this.setData({
+      admin_id: admin_id
+    });
+    this.getList();
+  },
+  //tab切换
+  tabSelect(e) {
+    let tab = e.currentTarget.dataset.tab;
+    this.setData({
+      tab: tab
+    });
+
+    let is_first = this.data.is_first;
+    if (is_first[tab]) {
+      is_first[tab] = false;
+      this.setData({
+        is_first: is_first
+      });
+      this.getList();
+    }
+  },
+  //搜索
+  bindInput(e) {
+    let keyword = this.data.keyword;
+    keyword[this.data.tab] = e.detail.value;
+    this.setData({
+      keyword: keyword
+    });
+  },
+  bindSearch() {
+    this.resetParam();
+    this.getList();
+  },
+
+  //获取数据
+  getList() {
+    let self = this;
+    let tab = this.data.tab;
+    let no_more = this.data.no_more;
+
+    //没有下一页
+    if (no_more[tab]) {
+      return false;
+    }
+
+    //获取数据
+    app.post('talent/admin/lists', {
+      status: +tab + 1,
+      page: self.data.page[tab],
+      keyword: self.data.keyword[tab],
+    }, function (res) {
+      if (res.length < 10) {
+        no_more[tab] = true;
+        self.setData({
+          no_more: no_more
+        });
+      }
+      let list = self.data.list;
+      list[tab] = list[tab].concat(res);
+      let page = self.data.page;
+      page[tab]++;
+      self.setData({
+        list: list,
+        page: page
+      });
+    })
+  },
+
+  //重置参数
+  resetParam() {
+    let tab = this.data.tab;
+
+    let list = this.data.list;
+    list[tab] = [];
+
+    let no_more = this.data.no_more;
+    no_more[tab] = false;
+
+    let page = this.data.page;
+    page[tab] = 1;
+
+    this.setData({
+      list: list,
+      no_more: no_more,
+      page: page
+    });
+  },
+  resetKeyword() {
+    let keyword = this.data.keyword;
+    keyword[this.data.tab] = '';
+
+    this.setData({
+      keyword: keyword
+    });
+  },
+
+  //滚动事件
+  onPageScroll(e) {
+    if (e.scrollTop >= this.data.nav_top) {
+      if (!this.data.nav_fixed) {
+        this.setData({
+          nav_fixed: true
+        });
+      }
+    } else {
+      if (this.data.nav_fixed) {
+        this.setData({
+          nav_fixed: false
+        });
+      }
+    }
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+    this.resetParam();
+    this.resetKeyword();
+    this.getList();
+    wx.stopPullDownRefresh();
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+    this.getList();
+  },
+
+  logout() {
+    wx.removeStorageSync('admin_id');
+    wx.redirectTo({
+      url: '/pages/talent/admin/login',
+    })
+  },
+  scan() {
+    const admin_id = this.data.admin_id;
+    const self = this;
+    wx.scanCode({
+      success({
+        result
+      }) {
+        app.post('talent/admin/scan', {
+          code: result,
+          admin_id: admin_id
+        }, function (res) {
+          app.confirm(`接站成功,姓名:${res.talent.name},班次:${res.appointment.shift},出行时间:${res.appointment.start_time}`, function () {
+            self.resetParam();
+            self.getList();
+          });
+        });
+      },
+      fail(res) {
+        if (res.errMsg != "scanCode:fail cancel") {
+          app.msg('扫码错误,请重新扫码!');
+        }
+      }
+    });
+  },
+  confirmInfo(e) {
+    const id = e.currentTarget.dataset.id;
+    const self = this;
+    app.confirm('是否确认信息', function () {
+      app.post('talent/admin/confirm', {
+        id: id,
+        admin_id: self.data.admin_id
+      }, function () {
+        app.msg('操作成功');
+        self.resetParam();
+        self.getList();
+      });
+    })
+  },
+  applyByMobile(e) {
+    const self = this;
+    const id = e.currentTarget.dataset.id;
+    wx.showModal({
+      title: '请输入手机号',
+      editable: true,
+      placeholderText: '请输入手机号',
+      success: (res) => {
+        app.post('talent/admin/applyByMobile', {
+          id: id,
+          admin_id: self.data.admin_id,
+          mobile: res.content
+        }, function () {
+          app.msg('操作成功');
+          self.resetParam();
+          self.getList();
+        });
+      }
+    })
+  },
+  //拔打电话
+  callMobile(e){
+    let mobile = e.currentTarget.dataset.mobile;
+    if (mobile == '') {
+      app.msg('暂无联系方式!');
+      return false;
+    }
+    wx.makePhoneCall({
+      phoneNumber: mobile
+    })
+  },
+  ViewImage(e) {
+    wx.previewImage({
+      urls: [e.currentTarget.dataset.url],
+    });
+  },
+})

+ 4 - 0
applet/pages/talent/admin/index.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "enablePullDownRefresh": true
+}

+ 71 - 0
applet/pages/talent/admin/index.wxml

@@ -0,0 +1,71 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">预约记录</view>
+</cu-custom>
+
+<!-- 头部 -->
+<view class="cu-bar bg-red search">
+	<view class="search-form radius">
+		<text class="cuIcon-search"></text>
+		<input type="text" value="{{keyword[tab]}}" placeholder="请输入车次" confirm-type="search" bindconfirm="bindSearch" bindinput="bindInput"></input>
+	</view>
+	<view class="action" bindtap="bindSearch">
+		<text>搜索</text>
+	</view>
+</view>
+
+<!-- tab导航 -->
+<scroll-view scroll-x class="bg-white nav" style="top:{{custombar}}px;position:{{nav_fixed ? 'fixed' : 'static'}}" id="nav">
+  <view class="flex text-center">
+    <view class="cu-item flex-sub {{0==tab?'text-red cur':''}}" bindtap="tabSelect" data-tab="0">
+      待确认
+    </view>
+    <view class="cu-item flex-sub {{1==tab?'text-red cur':''}}" bindtap="tabSelect" data-tab="1">
+      待接站
+    </view>
+    <view class="cu-item flex-sub {{2==tab?'text-red cur':''}}" bindtap="tabSelect" data-tab="2">
+      待评价
+    </view>
+    <view class="cu-item flex-sub {{3==tab?'text-red cur':''}}" bindtap="tabSelect" data-tab="3">
+      已完成
+    </view>
+  </view>
+</scroll-view>
+
+<view>
+  <view class="cu-card">
+    <view class="cu-item shadow" wx:for="{{list[tab]}}" wx:key="key">
+      <view class="padding">
+        <view class="flex align-center justify-between">
+          <view>
+            <text class="text-bold text-black">{{item.shift}}</text>
+          </view>
+          <view class="cu-tag line-blue radius">{{item.status_text}}</view>
+        </view>
+        <view class="text-sm margin-top-xs">出发时间:{{item.start_time}}</view>
+        <view class="text-sm margin-top-xs" bind:tap="callMobile" data-mobile="{{item.talent.mobile}}">拨打电话<text class="margin-left-sm text-lg text-blue cuIcon-dianhua"></text></view>
+        <view class="text-sm margin-top-xs" wx:if="{{item.status == 4}}">满意度:{{item.rate}}</view>
+        <view class="text-sm margin-top-xs" wx:if="{{item.status == 4}}">评价内容:{{item.rate_comment}}</view>
+        <view class="grid col-4 grid-square flex-sub margin-top">
+          <view class="bg-img" bindtap="ViewImage" data-url="{{item.image}}" wx:if="{{item.image}}">
+            <image src="{{item.image}}" mode="aspectFill"></image>
+          </view>
+        </view>
+      </view>
+      <view class="text-right solid-form-top padding-lr padding-bottom option-box">
+        <view class="cu-btn radius bg-blue margin-left" bindtap="confirmInfo" data-id="{{item.id}}" wx:if="{{item.status == 1}}">确认信息</view>
+        <view class="cu-btn radius bg-blue margin-left" bindtap="applyByMobile" data-id="{{item.id}}" wx:if="{{item.status == 2}}">手机号接站</view>
+      </view>
+    </view>
+  </view>
+  <view wx:if="{{no_more[tab]}}" class="no_more">没有更多数据</view>
+</view>
+
+<view class="logout" bind:tap="logout">
+  <view class="text">退出</view>
+  <view class="text">登录</view>
+</view>
+
+<view class="scan" bind:tap="scan">
+  <view class="text">扫码</view>
+  <view class="text">接待</view>
+</view>

+ 34 - 0
applet/pages/talent/admin/index.wxss

@@ -0,0 +1,34 @@
+.option-box:empty {
+  display: none;
+}
+.logout {
+  width: 100rpx;
+  height: 100rpx;
+  text-align: center;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  justify-content: center;
+  background-color: var(--red);
+  color: white;
+  position: fixed;
+  bottom: 100rpx;
+  right: 50rpx;
+}
+
+.scan {
+  width: 100rpx;
+  height: 100rpx;
+  text-align: center;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  justify-content: center;
+  background-color: var(--blue);
+  color: white;
+  position: fixed;
+  bottom: 250rpx;
+  right: 50rpx;
+}

+ 54 - 0
applet/pages/talent/admin/login.js

@@ -0,0 +1,54 @@
+const app = getApp();
+const verify = require("../../../common/js/verify.js");
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    form: {
+      account: '',
+      password: '',
+    },
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    const admin_id = wx.getStorageSync('admin_id');
+    if (admin_id) {
+      wx.redirectTo({
+        url: '/pages/talent/admin/index',
+      })
+    }
+  },
+
+  vmodel(e) {
+    this.setData({
+      ['form.'+e.currentTarget.dataset.value]:e.detail.value
+    })
+  },
+
+  submit() {
+    let self = this;
+    let form = this.data.form;
+    if (verify.isEmpty(form.account)) {
+      app.msg('请输入账号');
+      return false;
+    }
+
+    if (verify.isEmpty(form.password)) {
+      app.msg('请输入密码');
+      return false;
+    }
+
+    app.post('talent/admin/login',form,function(res){
+      wx.setStorageSync('admin_id', res)
+      wx.redirectTo({
+        url: '/pages/talent/admin/index',
+      });
+    });
+  }
+})

+ 3 - 0
applet/pages/talent/admin/login.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 23 - 0
applet/pages/talent/admin/login.wxml

@@ -0,0 +1,23 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">人才便捷出行</view>
+</cu-custom>
+<view class="solids-bottom padding-xs flex align-center">
+  <view class="flex-sub text-center">
+    <view class="solid-bottom text-xl padding">
+      <text class="text-black text-bold">工作人员登录</text>
+    </view>
+  </view>
+</view>
+<form>
+  <view class="cu-form-group margin-top">
+    <view class="title"><text class="text-red">*</text> 账号</view>
+    <input placeholder="请输入账号" value="" bindinput="vmodel" data-value="account"></input>
+  </view>
+  <view class="cu-form-group">
+    <view class="title"><text class="text-red">*</text> 密码</view>
+    <input password placeholder="请输入密码" value="" bindinput="vmodel" data-value="password"></input>
+  </view>
+  <view class="padding flex flex-direction">
+    <button class="cu-btn lw-red margin-tb-sm lg" style="width:600rpx;" bindtap="submit">提交</button>
+  </view>
+</form>

+ 1 - 0
applet/pages/talent/admin/login.wxss

@@ -0,0 +1 @@
+/* pages/talent/admin/login.wxss */

+ 39 - 0
applet/pages/talent/appointment/evaluate.js

@@ -0,0 +1,39 @@
+const app = getApp();
+const verify = require("../../../common/js/verify.js");
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    form: {
+      id: 0,
+      rate: '',
+      rate_comment: '',
+    }
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    this.setData({["form.id"]:options.id});
+  },
+  RadioChange(e) {
+    this.setData({["form.rate"]:e.detail.value});
+  },
+  textareaAInput(e) {
+    this.setData({["form.rate_comment"]:e.detail.value});
+  },
+  submit() {
+    let form = this.data.form;
+    if (verify.isEmpty(form.rate)) {
+      app.msg('请选择满意度');
+      return false;
+    }
+    app.post('talent/appointment/rate', form, function (res) {
+      wx.navigateBack()
+    });
+  }
+})

+ 3 - 0
applet/pages/talent/appointment/evaluate.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 23 - 0
applet/pages/talent/appointment/evaluate.wxml

@@ -0,0 +1,23 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">评价</view>
+</cu-custom>
+
+<form>
+  <radio-group class="block" bind:change="RadioChange">
+    <view class="cu-form-group">
+      <view class="title">满意度</view>
+      <view>
+        <radio class='blue' value="非常满意"></radio>
+        <text class="margin-left-sm">非常满意</text>
+        <radio class='blue margin-left-xl' value="不满意"></radio>
+        <text class="margin-left-sm">不满意</text>
+      </view>
+    </view>
+  </radio-group>
+  <view class="cu-form-group solid-top">
+    <textarea maxlength="-1" bind:input="textareaAInput" placeholder="请输入评价内容"></textarea>
+  </view>
+  <view class="padding flex flex-direction">
+    <button class="cu-btn lw-red margin-tb-sm lg" style="width:600rpx;" bindtap="submit">提交</button>
+  </view>
+</form>

+ 1 - 0
applet/pages/talent/appointment/evaluate.wxss

@@ -0,0 +1 @@
+/* pages/talent/appointment/eval.wxss */

+ 86 - 0
applet/pages/talent/appointment/index.js

@@ -0,0 +1,86 @@
+const app = getApp();
+const verify = require("../../../common/js/verify.js");
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    shift: '',
+    time: '09:00',
+    date: '',
+    startDate: '',
+    image: '',
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    const now = new Date();
+    const date = `${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}-${String(now.getDate()).padStart(2,'0')}`;
+    this.setData({
+      date: date,
+      startDate: date
+    });
+  },
+
+  TimeChange(e) {
+    this.setData({
+      time: e.detail.value
+    });
+  },
+  DateChange(e) {
+    this.setData({
+      date: e.detail.value
+    });
+  },
+  vmodel(e) {
+    this.setData({
+      [e.currentTarget.dataset.value]: e.detail.value
+    })
+  },
+  ChooseImage() {
+    let that = this;
+    wx.chooseMedia({
+      count: 1,
+      success: (res) => {
+        app.upload(res.tempFiles[0].tempFilePath, function (res) {
+          that.setData({image: res});
+        });
+      },
+      fail: () => {
+        app.msg('请检查相册权限是否开启');
+      }
+    });
+  },
+  DelImg(e) {
+    this.setData({image:''});
+  },
+  ViewImage(e) {
+    wx.previewImage({
+      urls: [this.data.image],
+    });
+  },
+  submit() {
+    let self = this;
+    if (verify.isEmpty(this.data.shift) && verify.isEmpty(this.data.image)) {
+      app.msg('班次/出发时间和车票图片至少要填一样');
+      return false;
+    }
+    app.post('talent/appointment/book', {
+      shift: this.data.shift,
+      date: this.data.date,
+      time: this.data.time,
+      image: this.data.image
+    }, function (res) {
+      self.toList();
+    });
+  },
+  toList() {
+    wx.redirectTo({
+      url: '/pages/talent/appointment/list',
+    })
+  }
+})

+ 3 - 0
applet/pages/talent/appointment/index.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 73 - 0
applet/pages/talent/appointment/index.wxml

@@ -0,0 +1,73 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">预约</view>
+</cu-custom>
+<view class="solids-bottom padding-xs flex align-center">
+  <view class="flex-sub text-center">
+    <view class="solid-bottom text-lg padding-lr">
+      <text class="text-black text-bold">至少要提前一小时预约</text>
+    </view>
+    <view class="solid-bottom text-lg padding-lr">
+      <text class="text-black text-bold">只能预约早上9点到晚上21点</text>
+    </view>
+    <view class="solid-bottom text-lg padding-lr">
+      <text class="text-black text-bold">班次/出发时间和车票图片至少要填一样</text>
+    </view>
+  </view>
+</view>
+<form>
+  <view class="cu-form-group">
+    <view class="title">班次</view>
+    <input placeholder="请输入班次" value="" bindinput="vmodel" data-value="shift"></input>
+  </view>
+  <view class="cu-form-group">
+    <view class="title">出发日期</view>
+    <picker mode="date" :value="date" start="{{startDate}}" bind:change="DateChange">
+      <view class="picker">
+        {{date}}
+      </view>
+    </picker>
+  </view>
+  <view class="cu-form-group">
+    <view class="title">出发时间</view>
+    <picker mode="time" :value="time" start="09:00" end="21:00" bind:change="TimeChange">
+      <view class="picker">
+        {{time}}
+      </view>
+    </picker>
+  </view>
+  <view class="cu-bar bg-white solids-top">
+    <view class="action text-black">
+      车票图片
+    </view>
+  </view>
+  <view class="cu-form-group">
+    <view class="grid col-4 grid-square flex-sub">
+      <view class="bg-img" bindtap="ViewImage" wx:if="{{image}}">
+        <image src="{{image}}" mode="aspectFill"></image>
+        <view class="cu-tag bg-red" catchtap="DelImg">
+          <text class='cuIcon-close'></text>
+        </view>
+      </view>
+      <view class="solids" bindtap="ChooseImage" wx:else>
+        <text class='cuIcon-cameraadd'></text>
+      </view>
+    </view>
+  </view>
+  <view class="padding flex flex-direction">
+    <button class="cu-btn lw-red margin-tb-sm lg" style="width:600rpx;" bindtap="submit">提交</button>
+  </view>
+  <view class="cu-bar tabbar bg-white foot">
+    <view class="action">
+      <view class="cuIcon-cu-image">
+        <image src="/common/images/tabbar/index_cur.png"></image>
+      </view>
+      <view class="text-gray">预约</view>
+    </view>
+    <view class="action" bind:tap="toList">
+      <view class="cuIcon-cu-image">
+        <image src="/common/images/tabbar/my.png"></image>
+      </view>
+      <view class="text-gray">预约记录</view>
+    </view>
+  </view>
+</form>

+ 6 - 0
applet/pages/talent/appointment/index.wxss

@@ -0,0 +1,6 @@
+.cu-form-group .title {
+  min-width: calc(4em + 30rpx);
+}
+.placeholder-input{
+	color:#999;
+}

+ 110 - 0
applet/pages/talent/appointment/list.js

@@ -0,0 +1,110 @@
+const app = getApp();
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    list: [],
+    no_more: false,
+    page: 1,
+    mobile: '',
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    this.getMobile();
+  },
+  onShow() {
+    this.resetParam();
+    this.getList();
+  },
+  getMobile() {
+    let self = this;
+    //获取数据
+    app.get('talent/appointment/getAdminMobile',function(res){
+      
+      self.setData({mobile:res.mobile});
+    })
+  },
+  //获取数据
+  getList() {
+    let self = this;
+
+    //没有下一页
+    if (this.data.no_more) {
+      return false;
+    }
+
+    //获取数据
+    app.post('talent/appointment/lists',{
+      page:self.data.page,
+      keyword:self.data.keyword,
+    },function(res){
+      if (res.length < 10) {
+        self.setData({no_more:true});
+      }
+      let list = self.data.list;
+      list = list.concat(res);
+      let page = self.data.page;
+      page++;
+      self.setData({list:list,page:page});
+    })
+  },
+  //重置参数
+  resetParam() {
+    this.setData({list:[],no_more:false,page:1});
+  },
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+    this.resetParam();
+    this.getList();
+    wx.stopPullDownRefresh();
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+    this.getList();
+  },
+  toIndex() {
+    wx.redirectTo({
+      url: '/pages/talent/appointment/index',
+    })
+  },
+  ViewImage(e) {
+    wx.previewImage({
+      urls: [e.currentTarget.dataset.url],
+    });
+  },
+  showQrcode:function(e){
+    let code = e.target.dataset.code;
+    wx.previewImage({
+      current: 0, // 当前显示图片的http链接
+      urls: [app.globalData.http_host + 'qrcode.php?code=' + code] // 需要预览的图片http链接列表
+    })
+  },
+  //拔打电话
+  callMobile(e){
+    let mobile = this.data.mobile;
+    if (mobile == '') {
+      app.msg('暂无联系方式!');
+      return false;
+    }
+    wx.makePhoneCall({
+      phoneNumber: mobile
+    })
+  },
+  toEva(e) {
+    let id = e.currentTarget.dataset.id;
+    wx.navigateTo({
+      url: '/pages/talent/appointment/evaluate?id=' + id,
+    })
+  }
+})

+ 4 - 0
applet/pages/talent/appointment/list.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "enablePullDownRefresh": true
+}

+ 46 - 0
applet/pages/talent/appointment/list.wxml

@@ -0,0 +1,46 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">预约记录</view>
+</cu-custom>
+
+<view>
+  <view class="cu-card">
+    <view class="cu-item shadow" wx:for="{{list}}" wx:key="key">
+      <view class="padding">
+        <view class="flex align-center justify-between">
+          <view>
+            <text class="text-bold text-black">{{item.shift}}</text>
+          </view>
+          <view class="cu-tag line-blue radius">{{item.status_text}}</view>
+        </view>
+        <view class="text-sm margin-top-xs">出发时间:{{item.start_time}}</view>
+        <view class="text-sm margin-top-xs" bind:tap="callMobile">工作人员:{{mobile ? mobile : "暂无"}}<text class="margin-left-sm text-lg text-blue cuIcon-dianhua"></text></view>
+        <view class="grid col-4 grid-square flex-sub margin-top">
+          <view class="bg-img" bindtap="ViewImage" data-url="{{item.image}}" wx:if="{{item.image}}">
+            <image src="{{item.image}}" mode="aspectFill"></image>
+          </view>
+        </view>
+      </view>
+      <view class="text-right solid-form-top padding-lr padding-bottom option-box">
+        <view class="cu-btn radius bg-blue margin-left" bindtap="showQrcode" data-code="{{item.apply_code}}" wx:if="{{item.status == 2}}">预约码</view>
+        <view class="cu-btn radius bg-blue margin-left" bindtap="toEva" data-id="{{item.id}}" wx:if="{{item.status == 3}}">评价</view>
+      </view>
+    </view>
+  </view>
+  <view wx:if="{{no_more}}" class="no_more">没有更多数据</view>
+</view>
+
+<view class="foot-view"></view>
+<view class="cu-bar tabbar bg-white foot">
+  <view class="action" bind:tap="toIndex">
+    <view class="cuIcon-cu-image">
+      <image src="/common/images/tabbar/index.png"></image>
+    </view>
+    <view class="text-gray">预约</view>
+  </view>
+  <view class="action">
+    <view class="cuIcon-cu-image">
+      <image src="/common/images/tabbar/my_cur.png"></image>
+    </view>
+    <view class="text-gray">预约记录</view>
+  </view>
+</view>

+ 7 - 0
applet/pages/talent/appointment/list.wxss

@@ -0,0 +1,7 @@
+.foot-view {
+  width: 750rpx;
+  height: 100rpx;
+}
+.option-box:empty {
+  display: none;
+}

+ 60 - 0
applet/pages/talent/home/home.js

@@ -0,0 +1,60 @@
+const app = getApp();
+const verify = require("../../../common/js/verify.js");
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    userInfo:{},
+    form: {},
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    
+  },
+
+  onShow() {
+    let self = this;
+    app.get('user/profile/userInfo',function(res){
+      app.globalData.userInfo = res;
+      if (res.talent_id > 0) {
+        wx.navigateTo({
+          url: '/pages/talent/appointment/index',
+        })
+      }
+      self.setData({userInfo:res});
+    },false)
+  },
+
+  vmodel(e) {
+    this.setData({
+      ['form.'+e.currentTarget.dataset.value]:e.detail.value
+    })
+  },
+
+  submit() {
+    let self = this;
+    let form = this.data.form;
+    if (verify.isEmpty(form.name)) {
+      app.msg('请输入姓名');
+      return false;
+    }
+
+    if (verify.isEmpty(form.card_no)) {
+      app.msg('请输入证件照');
+      return false;
+    }
+
+    app.post('talent/Appointment/bind',form,function(res){
+      self.setData({userInfo:res});
+      wx.navigateTo({
+        url: '/pages/talent/appointment/index',
+      });
+    });
+  }
+})

+ 3 - 0
applet/pages/talent/home/home.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 25 - 0
applet/pages/talent/home/home.wxml

@@ -0,0 +1,25 @@
+<cu-custom bgColor="bg-lw-header">
+	<view slot="content">人才便捷出行</view>
+</cu-custom>
+<view wx:if="{{userInfo.talent_id == 0}}">
+  <view class="solids-bottom padding-xs flex align-center">
+    <view class="flex-sub text-center">
+      <view class="solid-bottom text-xl padding">
+        <text class="text-black text-bold">请验证人才身份</text>
+      </view>
+    </view>
+  </view>
+  <form>
+    <view class="cu-form-group margin-top">
+      <view class="title"><text class="text-red">*</text> 姓名</view>
+      <input placeholder="请输入姓名" value="" bindinput="vmodel" data-value="name"></input>
+    </view>
+    <view class="cu-form-group">
+      <view class="title"><text class="text-red">*</text> 证件号</view>
+      <input placeholder="请输入身份证/护照/通行证" value="" bindinput="vmodel" data-value="card_no"></input>
+    </view>
+    <view class="padding flex flex-direction">
+      <button class="cu-btn lw-red margin-tb-sm lg" style="width:600rpx;" bindtap="submit">提交</button>
+    </view>
+  </form>
+</view>

+ 6 - 0
applet/pages/talent/home/home.wxss

@@ -0,0 +1,6 @@
+.cu-form-group .title {
+  min-width: calc(4em + 30rpx);
+}
+.placeholder-input{
+	color:#999;
+}

+ 142 - 0
applet/pages/teahouse/detail/detail.js

@@ -0,0 +1,142 @@
+const app = getApp();
+const {
+  inArray
+} = require("../../../common/js/common.js");
+let self;
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    id: 0,
+    TabCur: 0,
+    scrollLeft: 0,
+    dateList: [],
+    timeList: [],
+    today: '',
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    self = this;
+    self.data.today = self.getToday();
+    self.setData({
+      id: options.id
+    });
+    self.calcData();
+    app.post('teahouse/teahouse/getTimeByDate',{date:self.data.dateList[self.data.TabCur].fullname,lock_id:self.data.id},function(res) {
+      self.calcTime(res);
+      wx.hideLoading();
+    });
+  },
+
+  getToday() {
+    const today = new Date();
+    const year = today.getFullYear();;
+    const month = String(today.getMonth() + 1).padStart(2, '0');
+    const day = String(today.getDate()).padStart(2, '0');
+    return `${year}年${month}月${day}日`;
+  },
+
+  calcData() {
+    const dates = [];
+    const today = new Date();
+    for (let i = 0; i <= 9; i++) {
+      const futureDate = new Date(today);
+      futureDate.setDate(today.getDate() + i);
+      const year = futureDate.getFullYear();
+      const month = String(futureDate.getMonth() + 1).padStart(2, '0');
+      const day = String(futureDate.getDate()).padStart(2, '0');
+      dates.push({fullname:`${year}年${month}月${day}日`,name:`${month}月${day}日`});
+    }
+    self.setData({
+      dateList: dates
+    });
+  },
+
+  calcTime(selected = []) {
+    const now = new Date();
+    const currentHour = now.getHours();
+    let times = [];
+    for (let i = 0; i < 24; i++) {
+      let item = {name:self.formatNumber(i) + ':00 - ' + self.formatNumber(i + 1) + ':00',select:false,disabled:false};
+      if (self.data.dateList[self.data.TabCur].fullname == self.data.today && i < currentHour) {
+        item.disabled = true;
+      } else if (inArray(item.name,selected)) {
+        item.disabled = true;
+      }
+      
+      times.push(item);
+    }
+    self.setData({
+      timeList: times
+    });
+  },
+
+  formatNumber(n) {
+    n = n.toString()
+    return n[1] ? n : '0' + n
+  },
+
+  selectTime(e) {
+    let disabled = e.currentTarget.dataset.disabled;
+    if (!disabled) {
+      let index = e.currentTarget.dataset.index;
+      let timeList = self.data.timeList;
+      timeList[index].select = !timeList[index].select;
+      self.setData({timeList:timeList});
+    }
+  },
+
+  tabSelect(e) {
+    wx.showLoading()
+    self.setData({
+      TabCur: e.currentTarget.dataset.id,
+      scrollLeft: (e.currentTarget.dataset.id - 1) * 60
+    })
+    app.post('teahouse/teahouse/getTimeByDate',{date:self.data.dateList[self.data.TabCur].fullname,lock_id:self.data.id},function(res) {
+      self.calcTime(res);
+      wx.hideLoading();
+    });
+  },
+
+  onSubmit() {
+    let date = self.data.dateList[self.data.TabCur].fullname;
+    let time = [];
+    for (let item of self.data.timeList) {
+      if (item.select) {
+        time.push(item.name);
+      }
+    }
+    if (time.length == 0) {
+      wx.showToast({
+        title: '请选择预约时间',
+        icon: 'none',
+      })
+      return false;
+    }
+
+    app.post('teahouse/teahouse/reservation',{lock_id:self.data.id,date:date,time:time},function(){
+      wx.showToast({
+        title: '预约成功',
+        success: function() {
+          wx.navigateBack();
+        },
+      })
+    });
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 3 - 0
applet/pages/teahouse/detail/detail.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 18 - 0
applet/pages/teahouse/detail/detail.wxml

@@ -0,0 +1,18 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">时间预约</view>
+</cu-custom>
+<scroll-view scroll-x class="bg-white nav" scroll-with-animation scroll-left="{{scrollLeft}}">
+  <view class="cu-item {{index==TabCur?'text-red cur':''}}" wx:for="{{dateList}}" wx:key="index" bindtap="tabSelect" data-id="{{index}}">
+    {{item.name}}
+  </view>
+</scroll-view>
+<view class="padding bg-white">
+  <view class="grid col-3 text-center">
+    <view class="padding-xs margin-top" wx:for="{{timeList}}" wx:key="index">
+      <view class="time solid padding-xs {{item.disabled ? 'disabled' : ''}} {{item.select ? 'select' : ''}}" data-disabled="{{item.disabled}}" data-index="{{index}}" bind:tap="selectTime">{{item.name}}</view>
+    </view>
+  </view>
+</view>
+<view class="padding flex flex-direction">
+		<button class="cu-btn lw-red margin-tb-sm lg" style="width:600rpx;" bindtap="onSubmit">预 约</button>
+	</view>

+ 10 - 0
applet/pages/teahouse/detail/detail.wxss

@@ -0,0 +1,10 @@
+.time {
+  border-radius: 10rpx;
+}
+.time.disabled {
+  background: #ccc;
+}
+.time.select {
+  background: var(--red);
+  color:white;
+}

+ 81 - 0
applet/pages/teahouse/home/home.js

@@ -0,0 +1,81 @@
+const app = getApp();
+let self;
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    list: [],
+    page: 1,
+    no_more: false,
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    self = this;
+    this.getList();
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+    this.setData({list:[],page:1,no_more:false});
+    this.getList();
+    wx.stopPullDownRefresh();
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+    this.getList();
+  },
+
+  //列表
+  getList() {
+    var self = this;
+    if (self.data.no_more) {
+      return false;
+    }
+
+    app.post('teahouse/teahouse/getTeahouseList',{
+      page:self.data.page,
+    },function(res){
+      if (res.length < 10) {
+        self.setData({no_more:true});
+      }
+      let list = self.data.list;
+      list = list.concat(res);
+      let page = self.data.page;
+      page++;
+      self.setData({list:list,page:page});
+    });
+  },
+
+  toDetail(e) {
+    wx.navigateTo({
+      url: '/pages/teahouse/detail/detail?id=' + e.currentTarget.dataset.id,
+    })
+  },
+
+  toLog() {
+    wx.navigateTo({
+      url: "/pages/teahouse/log/log"
+    });
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 4 - 0
applet/pages/teahouse/home/home.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "enablePullDownRefresh": true
+}

+ 30 - 0
applet/pages/teahouse/home/home.wxml

@@ -0,0 +1,30 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">共享茶室</view>
+</cu-custom>
+<view class="lw-list">
+  <view class="lw-item" wx:for="{{list}}" wx:key="key" bindtap="toDetail" data-id="{{item.id}}">
+    <view class="content">
+      <image src="{{item.image}}" mode="aspectFill"></image>
+      <view class="desc">
+        <view class="text-lg">{{item.name}}</view>
+        <view class="margin-top-sm text-gray text-sm">{{item.address}}</view>
+      </view>
+    </view>
+  </view>
+</view>
+<view wx:if="no_more" class="no_more">没有更多数据</view>
+<view class="footer-view"></view>
+<view class="cu-bar tabbar bg-white footer">
+  <view class="action">
+    <view class="cuIcon-cu-image">
+      <image src="/common/images/tabbar/index_cur.png"></image>
+    </view>
+    <view class="text-red">茶室</view>
+  </view>
+  <view class="action" bind:tap="toLog">
+    <view class="cuIcon-cu-image">
+      <image src="/common/images/tabbar/my.png"></image>
+    </view>
+    <view class="text-gray">预约记录</view>
+  </view>
+</view>

+ 10 - 0
applet/pages/teahouse/home/home.wxss

@@ -0,0 +1,10 @@
+.footer {
+  position:fixed;
+  left: 0;
+  bottom: 0;
+  width:750rpx;
+}
+.footer-view {
+  width: 750rpx;
+  height: 100rpx;
+}

+ 96 - 0
applet/pages/teahouse/log/log.js

@@ -0,0 +1,96 @@
+const app = getApp();
+let self;
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    list: [],
+    page: 1,
+    no_more: false,
+    password: '',
+    modalName: '',
+    nowId: 0,
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    self = this;
+    self.getList();
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+    self.setData({list:[],page:1,no_more:false});
+    self.getList();
+    wx.stopPullDownRefresh();
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+    self.getList();
+  },
+
+  toIndex() {
+    wx.navigateTo({
+      url: "/pages/teahouse/home/home"
+    });
+  },
+
+  //列表
+  getList() {
+    var self = this;
+    if (self.data.no_more) {
+      return false;
+    }
+    app.post('teahouse/user/getBookList',{
+      page:self.data.page,
+    },function(res){
+      if (res.length < 10) {
+        self.setData({no_more:true});
+      }
+      let list = self.data.list;
+      list = list.concat(res);
+      let page = self.data.page;
+      page++;
+      self.setData({list:list,page:page});
+    });
+  },
+
+  //密码
+  showPassword(e) {
+    wx.showLoading();
+    app.post('teahouse/user/showPassword',{id:e.currentTarget.dataset.id},function(res){
+      wx.hideLoading();
+      self.setData({modalName:'DialogModal',password:res.password,nowId:e.currentTarget.dataset.id});
+    });
+  },
+  hideModal() {
+    self.setData({modalName:''});
+  },
+  refreshPassword(e) {
+    wx.showLoading();
+    app.post('teahouse/user/refreshPassword',{id:self.data.nowId},function(res){
+      wx.hideLoading();
+      self.setData({password:res.password});
+    });
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 4 - 0
applet/pages/teahouse/log/log.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "enablePullDownRefresh": true
+}

+ 65 - 0
applet/pages/teahouse/log/log.wxml

@@ -0,0 +1,65 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}">
+  <view slot="content">预约记录</view>
+</cu-custom>
+
+<view class='cu-list menu-avatar bg-white margin-top-xs shadow' wx:for="{{list}}" wx:key="key">
+  <view class="cu-bar bg-white solid-bottom padding-top padding-bottom">
+    <view class='action'>
+      <text class='text-df text-gray'></text> {{item.lock_name}}
+    </view>
+    <view class='action'>
+      <text class='text-df {{item.status == 4 ? "text-red" : "text-blue"}}'>{{item.status_name}}</text>
+    </view>
+  </view>
+  <view class="cu-bar bg-white">
+    <view class='action'>
+      <text class='text-black text-df'>日期:{{item.date}}</text>
+    </view>
+  </view>
+  <view class="cu-bar bg-white">
+    <view class='action'>
+      <text class='text-black text-df'>时间:{{item.time}}</text>
+    </view>
+  </view>
+  <view class='bg-white text-right solid-top padding-left padding-right padding-top-xs padding-bottom-xs' wx:if="{{item.status == 2}}">
+    <view class='cu-tag radius line-black xl' bindtap='showPassword' data-id='{{item.id}}'>查看密码</view>
+  </view>
+</view>
+<view wx:if="no_more" class="no_more">没有更多数据</view>
+
+
+<view class="cu-modal {{modalName=='DialogModal'?'show':''}}">
+  <view class="cu-dialog">
+    <view class="cu-bar bg-white justify-end">
+      <view class="content">门锁密码</view>
+      <view class="action" bindtap="hideModal">
+        <text class="cuIcon-close text-red"></text>
+      </view>
+    </view>
+    <view class="padding-xl text-xl">
+      {{password}}
+    </view>
+    <view class="cu-bar bg-white justify-end">
+      <view class="action" style="display: flex;justify-content: flex-end;">
+        <button class="cu-btn line-green text-green" bindtap="hideModal" style="width:150rpx;">关闭</button>
+        <button class="cu-btn bg-green margin-left" bindtap="refreshPassword" style="width:200rpx;margin-left:20rpx;">刷新密码</button>
+      </view>
+    </view>
+  </view>
+</view>
+
+<view class="footer-view"></view>
+<view class="cu-bar tabbar bg-white footer">
+  <view class="action" bind:tap="toIndex">
+    <view class="cuIcon-cu-image">
+      <image src="/common/images/tabbar/index.png"></image>
+    </view>
+    <view class="text-gray">茶室</view>
+  </view>
+  <view class="action">
+    <view class="cuIcon-cu-image">
+      <image src="/common/images/tabbar/my_cur.png"></image>
+    </view>
+    <view class="text-red">预约记录</view>
+  </view>
+</view>

+ 10 - 0
applet/pages/teahouse/log/log.wxss

@@ -0,0 +1,10 @@
+.footer {
+  position:fixed;
+  left: 0;
+  bottom: 0;
+  width:750rpx;
+}
+.footer-view {
+  width: 750rpx;
+  height: 100rpx;
+}

+ 110 - 0
applet/pages/teahouse/register/register.js

@@ -0,0 +1,110 @@
+const app = getApp();
+const verify = require("../../../common/js/verify.js");
+const {
+  arrayFindKey
+} = require("../../../common/js/common.js");
+let self;
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    info: {},
+    sex: ['保密', '男', '女'],
+    sex_index: 1,
+    type: ['请选择用户类型', '高层次人才', '职业经理人协会会员', '政府人员', '晋江人力资本公司vip会员', '其他'],
+    type_index: 0,
+    status: 0,
+    comment: '',
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    self = this;
+    app.get('teahouse/user/getUserInfo', function (res) {
+      if (res) {
+        self.setData({
+          info: {
+            name: res.name,
+            mobile: res.mobile,
+            idcard: res.idcard,
+            company: res.company,
+            job: res.job,
+          }
+        });
+        self.setData({
+          sex_index: res.sex
+        });
+        self.setData({
+          type_index: arrayFindKey(self.data.type, res.type)
+        });
+        self.setData({
+          comment: res.comment
+        });
+        self.setData({
+          status: res.status
+        });
+      }
+    });
+  },
+
+  changeSex(e) {
+    let index = e.detail.value;
+    this.setData({
+      sex_index: index
+    });
+  },
+
+  changeType(e) {
+    let index = e.detail.value;
+    this.setData({
+      type_index: index
+    });
+  },
+
+  vmodel(e) {
+    this.setData({
+      ['info.' + e.currentTarget.dataset.value]: e.detail.value
+    })
+  },
+
+  onSubmit() {
+    let info = self.data.info;
+    if (verify.isEmpty(info.name)) {
+      app.msg('姓名不能为空');
+      return false;
+    }
+    if (verify.isEmpty(info.mobile) && !verify.isMobile(info.mobile)) {
+      app.msg('电话格式不正确');
+      return false;
+    }
+    if (info.type_index == 0) {
+      app.msg('请选择用户类型');
+      return false;
+    }
+
+    info.sex = self.data.sex_index;
+    info.type = self.data.type[self.data.type_index];
+    app.post('teahouse/user/editUserInfo', info, function (res) {
+      app.msg('提交成功,等待审核', () => {
+        wx.switchTab({
+          url: '/pages/home/home/home',
+        });
+      });
+    });
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 3 - 0
applet/pages/teahouse/register/register.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 45 - 0
applet/pages/teahouse/register/register.wxml

@@ -0,0 +1,45 @@
+<cu-custom bgColor="bg-lw-header" isCustom="{{true}}"><view slot="content">资格申请</view></cu-custom>
+<view class="padding bg-white">共享茶室仅限高层次人才和福建省晋江人力资本有限公司VIP会员使用</view>
+<view class="padding bg-white text-green" wx:if="{{status == 1}}">等待审核</view>
+<view class="padding bg-white text-red" wx:if="{{status == 3}}">审核不通过:{{comment}}</view>
+<form>
+  <view class="cu-form-group">
+    <view class="title"><text class="text-red">*</text> 姓名</view>
+    <input placeholder="请输入姓名" disabled="{{status == 1}}" value="{{info.name}}" bindinput="vmodel" data-value="name"></input>
+  </view>
+  <view class="cu-form-group">
+		<view class="title"><text class="text-red">*</text> 手机号</view>
+		<input placeholder="请输入手机号" disabled="{{status == 1}}" value="{{info.mobile}}" bindinput="vmodel" data-value="mobile"></input>
+	</view>
+  <view class="cu-form-group">
+		<view class="title"><text class="text-red">*</text> 性别</view>
+		<picker bindchange="changeSex" value="{{sex_index}}}" range="{{sex}}" disabled="{{status == 1}}">
+			<view class="picker">
+				{{sex[sex_index]}}
+			</view>
+		</picker>
+	</view>
+  <view class="cu-form-group">
+		<view class="title">身份证</view>
+		<input placeholder="请输入身份证号" disabled="{{status == 1}}" value="{{info.idcard}}" bindinput="vmodel" data-value="idcard"></input>
+	</view>
+  <view class="cu-form-group margin-top">
+		<view class="title">单位名称</view>
+		<input placeholder="请输入单位名称" disabled="{{status == 1}}" value="{{info.company}}" bindinput="vmodel" data-value="company"></input>
+	</view>
+  <view class="cu-form-group">
+		<view class="title">职务</view>
+		<input placeholder="请输入职务" disabled="{{status == 1}}" value="{{info.job}}" bindinput="vmodel" data-value="job"></input>
+	</view>
+  <view class="cu-form-group">
+		<view class="title"><text class="text-red">*</text> 用户类型</view>
+		<picker bindchange="changeType" value="{{type_index}}}" range="{{type}}" disabled="{{status == 1}}">
+			<view class="picker">
+				{{type[type_index]}}
+			</view>
+		</picker>
+	</view>
+  <view class="padding flex flex-direction" wx:if="{{status != 1}}">
+		<button class="cu-btn lw-red margin-tb-sm lg" style="width:600rpx;" bindtap="onSubmit">提 交</button>
+	</view>
+</form>

+ 3 - 0
applet/pages/teahouse/register/register.wxss

@@ -0,0 +1,3 @@
+.cu-form-group .title {
+  min-width: calc(4em + 30rpx);
+}

+ 25 - 0
applet/pages/webview/ai/ai.js

@@ -0,0 +1,25 @@
+// pages/home/webview/webview.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    url: ''
+  },
+
+  onLoad() {
+    let token = wx.getStorageSync('token');
+    this.setData({url:`https://chat.jucai.gov.cn/?token=${token}`});
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 4 - 0
applet/pages/webview/ai/ai.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "navigationBarBackgroundColor": "#e60012"
+}

+ 1 - 0
applet/pages/webview/ai/ai.wxml

@@ -0,0 +1 @@
+<web-view src="{{url}}"></web-view>

+ 1 - 0
applet/pages/webview/ai/ai.wxss

@@ -0,0 +1 @@
+/* pages/webview/ai/ai.wxss */

+ 20 - 0
applet/pages/webview/rcmap/rcmap.js

@@ -0,0 +1,20 @@
+// pages/home/webview/webview.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    url:'https://rcmap.jucai.gov.cn/mobile/pages/policy/index'
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+    return {
+      title: "晋爱人才",
+      path: "/pages/home/home/home",
+    };
+  }
+})

+ 3 - 0
applet/pages/webview/rcmap/rcmap.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 0
applet/pages/webview/rcmap/rcmap.wxml

@@ -0,0 +1 @@
+<web-view src="{{url}}"></web-view>

+ 1 - 0
applet/pages/webview/rcmap/rcmap.wxss

@@ -0,0 +1 @@
+/* pages/webview/rcs/rcs.wxss */

+ 12 - 4
applet/project.private.config.json

@@ -1,13 +1,20 @@
 {
-  "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+  "description": "",
   "setting": {
-    "urlCheck": true,
+    "urlCheck": false,
     "compileHotReLoad": true
   },
-  "projectname": "%E6%99%8B%E7%88%B1%E4%BA%BA%E6%89%8D",
+  "projectname": "applet",
   "condition": {
     "miniprogram": {
       "list": [
+        {
+          "name": "pages/home/test/test",
+          "pathName": "pages/home/test/test",
+          "query": "",
+          "scene": null,
+          "launchMode": "default"
+        },
         {
           "name": "",
           "pathName": "pages/my/agreement/privacy",
@@ -17,5 +24,6 @@
         }
       ]
     }
-  }
+  },
+  "libVersion": "3.11.2"
 }

+ 5 - 0
nginx.htaccess

@@ -0,0 +1,5 @@
+location / {
+   if (!-f $request_filename) {
+   		rewrite  ^(.*)$  /index.php?s=/$1  last;
+    }
+}

+ 27 - 0
public/nginx.htaccess

@@ -0,0 +1,27 @@
+location / {
+	index  index.php index.html index.htm;
+	 if (!-e $request_filename)
+	 {
+		rewrite ^/(.*)$ /index.php?s=$1;
+	 }
+}
+
+location /api/ {
+	index  index.php index.html index.htm;
+	 if (!-e $request_filename)
+	 {
+		rewrite ^/api/(.*)$ /api.php?s=$1;
+	 }
+}
+
+location ~* ^\/upload\/.+\.(html|php)$ {
+	return 404;
+}
+
+location ~* ^\/plugins\/.+\.(html|php)$ {
+	return 404;
+}
+
+location ~* ^\/themes\/.+\.(html|php)$ {
+	return 404;
+}

+ 85 - 0
public/themes/admin_simpleboot3/talent/admin_appointment/index.html

@@ -0,0 +1,85 @@
+<include file="public@header"/>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+            <li class="active"><a href="javascript:;">人才列表</a></li>
+            <li><a href="{:url('add')}">添加人才</a></li>
+    </ul>
+    <form class="well form-inline margin-top-20" method="post" action="{:url('AdminTalent/index')}">
+        姓名:
+        <input type="text" class="form-control" name="name" style="width: 200px;"
+               value="{$name|default=''}" placeholder="请输入姓名...">
+        手机号:
+        <input type="text" class="form-control" name="mobile" style="width: 200px;"
+               value="{$mobile|default=''}" placeholder="请输入手机号...">
+        班次:
+        <input type="text" class="form-control" name="shift" style="width: 200px;"
+               value="{$shift|default=''}" placeholder="请输入班次...">
+        <input type="submit" class="btn btn-primary" value="搜索"/>
+        <a class="btn btn-danger" href="{:url('AdminTalent/index')}">清空</a>
+    </form>
+    <form class="js-ajax-form" action="" method="post">
+        <table class="table table-hover table-bordered table-list">
+            <thead>
+            <tr>
+                <th width="100">姓名</th>
+                <th width="120">手机号码</th>
+                <th width="120">班次</th>
+                <th width="120">出发时间</th>
+                <th width="120">车票图片</th>
+                <th width="120">预约提交时间</th>
+                <th width="120">状态</th>
+                <th width="120">满意度</th>
+                <th>评价内容</th>
+                <th width="150">操作</th>
+            </tr>
+            </thead>
+            <foreach name="list" item="vo">
+                <tr>
+                    <td>{$vo.name}</td>
+                    <td>{$vo.mobile}</td>
+                    <td>{$vo.shift}</td>
+                    <td>{$vo.start_time}</td>
+                    <td>
+                        <notempty name="vo.image">
+                        <div>
+                            <img src="{:cmf_get_image_preview_url($vo.image)}" style="width: 40px; height: 40px;">
+                        </div>
+                        </notempty>
+                    </td>
+                    <td>{$vo.create_time}</td>
+                    <td>{$vo.status_text}</td>
+                    <td>{$vo.rate}</td>
+                    <td>{$vo.rate_comment}</td>
+                    <td>
+                        <a class="btn btn-xs btn-primary" href="{:url('AdminAppointment/edit',array('id'=>$vo['id']))}">编辑</a>
+                        <a class="btn btn-xs btn-primary" href="javascript:log({$vo.id})">操作日志</a>
+                    </td>
+                </tr>
+            </foreach>
+        </table>
+        <ul class="pagination">{$page|default=''}</ul>
+    </form>
+</div>
+<script src="__STATIC__/js/admin.js"></script>
+<script>
+    function reloadPage(win) {
+        win.location.reload();
+    }
+
+    function log(id) {
+        Wind.css('layer');
+        Wind.use("layer", function () {
+            layer.open({
+                type: 2,
+                title: '操作日志',
+                content: "{:url('AdminAppointment/log')}?id="+id,
+                maxmin: true,
+                area: ['1200px', '700px']
+            });
+        })
+    }
+</script>
+</body>
+</html>

+ 32 - 0
public/themes/admin_simpleboot3/talent/admin_appointment/log.html

@@ -0,0 +1,32 @@
+<include file="public@header"/>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <form class="js-ajax-form" action="" method="post">
+        <table class="table table-hover table-bordered table-list">
+            <thead>
+            <tr>
+                <th width="100">操作人</th>
+                <th width="120">内容</th>
+                <th width="120">操作时间</th>
+            </tr>
+            </thead>
+            <foreach name="list" item="vo">
+                <tr>
+                    <td>{$vo.name}</td>
+                    <td>{$vo.content}</td>
+                    <td>{$vo.create_time}</td>
+                </tr>
+            </foreach>
+        </table>
+        <ul class="pagination">{$page|default=''}</ul>
+    </form>
+</div>
+<script src="__STATIC__/js/admin.js"></script>
+<script>
+    function reloadPage(win) {
+        win.location.reload();
+    }
+</script>
+</body>
+</html>

+ 109 - 0
public/themes/admin_simpleboot3/talent/admin_talent/add.html

@@ -0,0 +1,109 @@
+<include file="public@header"/>
+<style type="text/css">
+    .pic-list li {
+        margin-bottom: 5px;
+    }
+</style>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+        <li><a href="{:url('index')}">人才列表</a></li>
+        <li class="active"><a href="javascript:;">添加人才</a></li>
+    </ul>
+    <form action="{:url('AdminTalent/addPost')}" method="post" class="form-horizontal js-ajax-form margin-top-20">
+        <div class="row">
+            <div class="col-md-9">
+                <table class="table table-bordered">
+                    <tr>
+                        <th style="width: 150px;">姓名<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="name"
+                                   required value="" placeholder="请输入姓名"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>性别<span class="form-required">*</span></th>
+                        <td>
+                            <select name="sex" class="form-control">
+                                <option value="男">男</option>
+                                <option value="女">女</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>证件类型<span class="form-required">*</span></th>
+                        <td>
+                            <select name="card_type" class="form-control">
+                                <option value="身份证">身份证</option>
+                                <option value="护照">护照</option>
+                                <option value="通行证">通行证</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>证件号<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="card_no"
+                                   required value="" placeholder="请输入证件号"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>企业名称<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="company"
+                                   required value="" placeholder="请输入企业名称"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>岗位<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="post"
+                                   required value="" placeholder="请输入岗位"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>人才生效时间<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control js-bootstrap-datetime" type="text" name="start_time"
+                                   value="">
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>人才结束时间<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control js-bootstrap-datetime" type="text" name="end_time"
+                                   value="">
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>人才层次<span class="form-required">*</span></th>
+                        <td>
+                            <select name="level" class="form-control">
+                                <option value="护照">第一层次</option>
+                                <option value="身份证">第二层次</option>
+                                <option value="通行证">第三层次</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>手机号<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="mobile"
+                                   required value="" placeholder="请输入手机号"/>
+                        </td>
+                    </tr>
+                </table>
+                <div class="form-group">
+                    <div class="col-sm-offset-2 col-sm-10">
+                        <button type="submit" class="btn btn-primary js-ajax-submit">{:lang('ADD')}</button>
+                        <a class="btn btn-default" href="{:url('AdminTalent/index')}">{:lang('BACK')}</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="__STATIC__/js/admin.js"></script>
+</body>
+</html>

+ 111 - 0
public/themes/admin_simpleboot3/talent/admin_talent/edit.html

@@ -0,0 +1,111 @@
+<include file="public@header"/>
+<style type="text/css">
+    .pic-list li {
+        margin-bottom: 5px;
+    }
+</style>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+        <li><a href="{:url('index')}">人才列表</a></li>
+        <li><a href="{:url('add')}">添加人才</a></li>
+        <li class="active"><a href="javascript:;">编辑人才</a></li>
+    </ul>
+    <form action="{:url('AdminTalent/editPost')}" method="post" class="form-horizontal js-ajax-form margin-top-20">
+        <div class="row">
+            <div class="col-md-9">
+                <input type="hidden" name="id" value="{$info.id}">
+                <table class="table table-bordered">
+                    <tr>
+                        <th style="width: 150px;">姓名<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="name"
+                                   required value="{$info.name}" placeholder="请输入姓名"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>性别<span class="form-required">*</span></th>
+                        <td>
+                            <select name="sex" class="form-control">
+                                <option value="男" {$info.sex==='男'?'selected':''}>男</option>
+                                <option value="女" {$info.sex==='女'?'selected':''}>女</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>证件类型<span class="form-required">*</span></th>
+                        <td>
+                            <select name="card_type" class="form-control">
+                                <option value="身份证" {$info.card_type==='身份证'?'selected':''}>身份证</option>
+                                <option value="护照" {$info.card_type==='护照'?'selected':''}>护照</option>
+                                <option value="通行证" {$info.card_type==='通行证'?'selected':''}>通行证</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>证件号<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="card_no"
+                                   required value="{$info.card_no}" placeholder="请输入证件号"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>企业名称<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="company"
+                                   required value="{$info.company}" placeholder="请输入企业名称"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>岗位<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="post"
+                                   required value="{$info.post}" placeholder="请输入岗位"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>人才生效时间<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control js-bootstrap-datetime" type="text" name="start_time"
+                                   value="{$info.start_time}">
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>人才结束时间<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control js-bootstrap-datetime" type="text" name="end_time"
+                                   value="{$info.end_time}">
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>人才层次<span class="form-required">*</span></th>
+                        <td>
+                            <select name="level" class="form-control">
+                                <option value="护照" {$info.level==='护照'?'selected':''}>第一层次</option>
+                                <option value="身份证" {$info.level==='身份证'?'selected':''}>第二层次</option>
+                                <option value="通行证" {$info.level==='通行证'?'selected':''}>第三层次</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>手机号<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="mobile"
+                                   required value="{$info.mobile}" placeholder="请输入手机号"/>
+                        </td>
+                    </tr>
+                </table>
+                <div class="form-group">
+                    <div class="col-sm-offset-2 col-sm-10">
+                        <button type="submit" class="btn btn-primary js-ajax-submit">{:lang('EDIT')}</button>
+                        <a class="btn btn-default" href="{:url('AdminTalent/index')}">{:lang('BACK')}</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="__STATIC__/js/admin.js"></script>
+</body>
+</html>

+ 71 - 0
public/themes/admin_simpleboot3/talent/admin_talent/index.html

@@ -0,0 +1,71 @@
+<include file="public@header"/>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+            <li class="active"><a href="javascript:;">人才列表</a></li>
+            <li><a href="{:url('add')}">添加人才</a></li>
+    </ul>
+    <form class="well form-inline margin-top-20" method="post" action="{:url('AdminTalent/index')}">
+        姓名:
+        <input type="text" class="form-control" name="name" style="width: 200px;"
+               value="{$name|default=''}" placeholder="请输入姓名...">
+        证件号:
+        <input type="text" class="form-control" name="card_no" style="width: 200px;"
+               value="{$card_no|default=''}" placeholder="请输入证件号...">
+        手机号:
+        <input type="text" class="form-control" name="mobile" style="width: 200px;"
+               value="{$mobile|default=''}" placeholder="请输入手机号...">
+        <input type="submit" class="btn btn-primary" value="搜索"/>
+        <a class="btn btn-danger" href="{:url('AdminTalent/index')}">清空</a>
+    </form>
+    <form class="js-ajax-form" action="" method="post">
+        <table class="table table-hover table-bordered table-list">
+            <thead>
+            <tr>
+                <th width="100">姓名</th>
+                <th width="50">性别</th>
+                <th width="80">证件类型</th>
+                <th width="200">证件号</th>
+                <th width="120">企业名称</th>
+                <th width="120">职务</th>
+                <th width="120">人才生效时间</th>
+                <th width="120">人才结束时间</th>
+                <th width="120">人才层次</th>
+                <th width="120">手机号码</th>
+                <th width="150">操作</th>
+            </tr>
+            </thead>
+            <foreach name="list" item="vo">
+                <tr>
+                    <td>{$vo.name}</td>
+                    <td>{$vo.sex}</td>
+                    <td>{$vo.card_type}</td>
+                    <td>{$vo.card_no}</td>
+                    <td>{$vo.company}</td>
+                    <td>{$vo.post}</td>
+                    <td>{$vo.start_time}</td>
+                    <td>{$vo.end_time}</td>
+                    <td>{$vo.level}</td>
+                    <td>{$vo.mobile}</td>
+                    <td>
+                        <a class="btn btn-xs btn-primary" href="{:url('AdminTalent/edit',array('id'=>$vo['id']))}">编辑</a>
+                        <a class="btn btn-xs btn-danger js-ajax-delete"
+                           href="{:url('AdminTalent/delete',array('id'=>$vo['id']))}">删除</a>
+                        <a class="btn btn-xs btn-danger js-ajax-dialog-btn"
+                           href="{:url('AdminTalent/clearBind',array('id'=>$vo['id']))}">清空人才绑定</a>
+                    </td>
+                </tr>
+            </foreach>
+        </table>
+        <ul class="pagination">{$page|default=''}</ul>
+    </form>
+</div>
+<script src="__STATIC__/js/admin.js"></script>
+<script>
+    function reloadPage(win) {
+        win.location.reload();
+    }
+</script>
+</body>
+</html>

+ 30 - 0
public/themes/admin_simpleboot3/talent/admin_talent/setting.html

@@ -0,0 +1,30 @@
+<include file="public@header"/>
+</head>
+<body>
+<div class="wrap">
+    <ul class="nav nav-tabs">
+        <li class="active"><a href="javascript:;">工作人员电话</a></li>
+    </ul>
+    <form method="post" class="form-horizontal js-ajax-form margin-top-20" action="{:url('talent/admin_talent/settingPost')}">
+        <div class="form-group">
+            <label for="mobile" class="col-sm-2 control-label">
+                <span class="form-required">*</span>手机号
+            </label>
+            <div class="col-md-6 col-sm-10">
+                <input type="text" class="form-control" id="mobile" name="mobile" value="{$mobile|default=''}">
+<!--                <p class="help-block" style="color: red;">若工作人员的电话为多个,请用英文的逗号隔开</p>-->
+            </div>
+        </div>
+        <div class="form-group">
+            <div class="col-sm-offset-2 col-sm-10">
+                <button type="submit" class="btn btn-primary js-ajax-submit">{:lang('SAVE')}</button>
+            </div>
+        </div>
+    </form>
+</div>
+<script src="__STATIC__/js/admin.js"></script>
+<script>
+
+</script>
+</body>
+</html>

+ 52 - 0
public/themes/admin_simpleboot3/talent/admin_talent_admin/add.html

@@ -0,0 +1,52 @@
+<include file="public@header"/>
+<style type="text/css">
+    .pic-list li {
+        margin-bottom: 5px;
+    }
+</style>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+        <li><a href="{:url('index')}">工作人员</a></li>
+        <li class="active"><a href="javascript:;">添加人员</a></li>
+    </ul>
+    <form action="{:url('AdminTalentAdmin/addPost')}" method="post" class="form-horizontal js-ajax-form margin-top-20">
+        <div class="row">
+            <div class="col-md-9">
+                <table class="table table-bordered">
+                    <tr>
+                        <th style="width: 150px;">姓名<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="name"
+                                   required value="" placeholder="请输入姓名"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>账号<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="account"
+                                   required value="" placeholder="请输入账号"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>密码<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="password"
+                                   required value="" placeholder="请输入密码"/>
+                        </td>
+                    </tr>
+                </table>
+                <div class="form-group">
+                    <div class="col-sm-offset-2 col-sm-10">
+                        <button type="submit" class="btn btn-primary js-ajax-submit">{:lang('ADD')}</button>
+                        <a class="btn btn-default" href="{:url('AdminTalentAdmin/index')}">{:lang('BACK')}</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="__STATIC__/js/admin.js"></script>
+</body>
+</html>

+ 54 - 0
public/themes/admin_simpleboot3/talent/admin_talent_admin/edit.html

@@ -0,0 +1,54 @@
+<include file="public@header"/>
+<style type="text/css">
+    .pic-list li {
+        margin-bottom: 5px;
+    }
+</style>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+        <li><a href="{:url('index')}">工作人员</a></li>
+        <li><a href="{:url('add')}">添加人员</a></li>
+        <li class="active"><a href="javascript:;">编辑人员</a></li>
+    </ul>
+    <form action="{:url('AdminTalentAdmin/editPost')}" method="post" class="form-horizontal js-ajax-form margin-top-20">
+        <div class="row">
+            <div class="col-md-9">
+                <input type="hidden" name="id" value="{$info.id}">
+                <table class="table table-bordered">
+                    <tr>
+                        <th style="width: 150px;">姓名<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="name"
+                                   required value="{$info.name}" placeholder="请输入姓名"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>账号<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="account"
+                                   required value="{$info.account}" placeholder="请输入账号"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>密码<span class="form-required">*</span></th>
+                        <td>
+                            <input class="form-control" type="text" name="password"
+                                   required value="{$info.password}" placeholder="请输入密码"/>
+                        </td>
+                    </tr>
+                </table>
+                <div class="form-group">
+                    <div class="col-sm-offset-2 col-sm-10">
+                        <button type="submit" class="btn btn-primary js-ajax-submit">{:lang('EDIT')}</button>
+                        <a class="btn btn-default" href="{:url('AdminTalentAdmin/index')}">{:lang('BACK')}</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="__STATIC__/js/admin.js"></script>
+</body>
+</html>

+ 50 - 0
public/themes/admin_simpleboot3/talent/admin_talent_admin/index.html

@@ -0,0 +1,50 @@
+<include file="public@header"/>
+</head>
+<body>
+<div class="wrap js-check-wrap">
+    <ul class="nav nav-tabs">
+            <li class="active"><a href="javascript:;">工作人员</a></li>
+            <li><a href="{:url('add')}">添加人员</a></li>
+    </ul>
+    <form class="well form-inline margin-top-20" method="post" action="{:url('AdminTalentAdmin/index')}">
+        姓名:
+        <input type="text" class="form-control" name="name" style="width: 200px;"
+               value="{$name|default=''}" placeholder="请输入姓名...">
+        账号:
+        <input type="text" class="form-control" name="account" style="width: 200px;"
+               value="{$account|default=''}" placeholder="请输入账号...">
+        <input type="submit" class="btn btn-primary" value="搜索"/>
+        <a class="btn btn-danger" href="{:url('AdminTalentAdmin/index')}">清空</a>
+    </form>
+    <form class="js-ajax-form" action="" method="post">
+        <table class="table table-hover table-bordered table-list">
+            <thead>
+            <tr>
+                <th width="150">姓名</th>
+                <th>账号</th>
+                <th width="120">操作</th>
+            </tr>
+            </thead>
+            <foreach name="list" item="vo">
+                <tr>
+                    <td>{$vo.name}</td>
+                    <td>{$vo.account}</td>
+                    <td>
+                        <a class="btn btn-xs btn-primary" href="{:url('AdminTalentAdmin/edit',array('id'=>$vo['id']))}">编辑</a>
+                        <a class="btn btn-xs btn-danger js-ajax-delete"
+                           href="{:url('AdminTalentAdmin/delete',array('id'=>$vo['id']))}">删除</a>
+                    </td>
+                </tr>
+            </foreach>
+        </table>
+        <ul class="pagination">{$page|default=''}</ul>
+    </form>
+</div>
+<script src="__STATIC__/js/admin.js"></script>
+<script>
+    function reloadPage(win) {
+        win.location.reload();
+    }
+</script>
+</body>
+</html>

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov