瀏覽代碼

更新注册

sandm 2 年之前
父節點
當前提交
890ef38b34

+ 18 - 0
app/admin/controller/Enterprise.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\common\AdminController;
+
+class Enterprise extends AdminController {
+
+    public function gotoEnterprisePage(){
+
+
+
+        return view("", []);
+    }
+    public function findEnterpriseByPage(){
+
+    }
+}

+ 192 - 0
app/admin/view/enterprise/goto_enterprise_page.html

@@ -0,0 +1,192 @@
+{extend name="layout/content"}
+{block name="content"}
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>企业用户</h5>
+            </div>
+            <div class="ibox-content">
+                <input type="hidden" id="type" value="${type}">
+                <div class="row">
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
+                                        type="button">单位名称
+                                </button>
+                            </div>
+                            <input type="text" class="form-control" id="name" placeholder=""/>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
+                                        type="button">社会信用代码
+                                </button>
+                            </div>
+                            <input type="text" class="form-control" id="idCard" placeholder=""/>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
+                                        type="button">法人代表
+                                </button>
+                            </div>
+                            <input type="text" class="form-control" id="legal" placeholder=""/>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
+                                        type="button">单位电话
+                                </button>
+                            </div>
+                            <input type="text" class="form-control" id="ephone" placeholder=""/>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
+                                        type="button">经办人
+                                </button>
+                            </div>
+                            <input type="text" class="form-control" id="agentName" placeholder=""/>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle"
+                                        type="button">经办人电话
+                                </button>
+                            </div>
+                            <input type="text" class="form-control" id="agentPhone" placeholder=""/>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                    所属镇街
+                                </button>
+                            </div>
+                            <select class="form-control" id="street">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                    产业领域
+                                </button>
+                            </div>
+                            <select class="form-control" id="industryFieldNew">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                    单位标签
+                                </button>
+                            </div>
+                            <select class="form-control" id="enterpriseTag">
+
+                            </select>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                    审核状态
+                                </button>
+                            </div>
+                            <select class="form-control" id="checkState">
+                                <option value=""></option>
+                                <option value="1">待审核</option>
+                                <option value="2">审核驳回</option>
+                                <option value="3">审核通过</option>
+                                <option value="4">重新提交</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-btn">
+                                <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                    账号状态
+                                </button>
+                            </div>
+                            <select class="form-control" id="active">
+                                <option value=""></option>
+                                <option value="1">账号有效</option>
+                                <option value="2">拉黑</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="col-sm-4">
+                        <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.search()">
+                            <i class="fa fa-search"></i>&nbsp;搜索
+                        </button>
+                        <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.reset()">
+                            <i class="fa fa-trash"></i>&nbsp;重置
+                        </button>
+                    </div>
+                </div>
+                <div class="hidden-xs" id="tableToolbar" role="group">
+                    {if condition="chkCommission('/admin/enterprise/doExamine','/enterprise/doExamine')"}
+                    <button type="button" class="btn btn-sm btn-primary "
+                            onclick="Enterprise.gotoEnterpriseDetailPage()">
+                        <i class="fa fa-edit"></i>&nbsp;审核
+                    </button>
+                    {/if}
+                    {if condition="chkCommission('/admin/enterprise/setActive','/enterprise/setActive')"}
+                    <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.setActive()">
+                        <i class="fa fa-edit"></i>&nbsp;设置冻结
+                    </button>
+                    {/if}
+                    {if condition="chkCommission('/admin/enterprise/delEnterprise','/enterprise/delEnterprise')"}
+                    <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.delEnterprise()">
+                        <i class="fa fa-remove"></i>&nbsp;删除
+                    </button>
+                    {/if}
+                    {if condition="chkCommission('/admin/enterprise/resetPassword','/enterprise/resetPassword')"}
+                    <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.resetPassword()">
+                        <i class="fa fa-edit"></i>&nbsp;重置密码
+                    </button>
+                    {/if}
+                    {if condition="chkCommission('/admin/enterprise/export','/enterprise/export')"}
+                    <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.doExport()">
+                        <i class="fa fa-download"></i>&nbsp;导出Excel
+                    </button>
+                    {/if}
+                    <button type="button" class="btn btn-sm btn-primary " onclick="Enterprise.getPhones()">
+                        <i class="fa fa-mobile"></i>&nbsp;获取经办人手机号
+                    </button>
+                </div>
+                <table id="table" class="table-condensed" style="font-size: 10px;table-layout: fixed!important;"
+                       data-mobile-responsive="true" data-click-to-select="true">
+                    <thead>
+                    <tr>
+                        <th data-field="selectItem" data-checkbox="true"></th>
+                    </tr>
+                    </thead>
+                </table>
+            </div>
+        </div>
+    </div>
+</div>
+<!--<script src="${ctxPath}/static/modular/enterprise/enterprise_list.js"></script>-->
+<script type="text/javascript">
+    document.write('<script src="/static/modular/enterprise/enterprise_list.js?v=' + (new Date()).getTime() + '"><\/script>');
+</script>
+{/block}

+ 1 - 1
app/common/api/MenuApi.php

@@ -74,7 +74,7 @@ class MenuApi {
 
     public static function getEnterpriseMenuByType($type) {
         $menus = [];
-        $menus[] = ["type" => [1, 2, 3], "code" => "qyzx", "pcode" => "0", "name" => "企业用户中心", "url" => "", "icon" => "fa-user"];
+        $menus[] = ["type" => [1, 2, 3], "code" => "qyzx", "pcode" => "0", "name" => "企业用户中心", "url" => "/enterprise/index/centerPage", "icon" => "fa-user"];
         $menus[] = ["type" => [1, 2], "code" => "yhfk", "pcode" => "0", "name" => "用户反馈", "url" => "", "icon" => "fa-bug"];
         $menus[] = ["type" => [1, 2], "code" => "rcrd", "pcode" => "0", "name" => "人才认定", "url" => "#", "icon" => "fa-thumbs-o-up"];
         $menus[] = ["type" => [1, 2], "code" => "rcrdsb", "pcode" => "rcrd", "name" => "人才认定申报", "url" => "/enterprise/talent", "icon" => "fa-thumbs-up"];

+ 23 - 0
app/common/api/UserApi.php

@@ -74,6 +74,29 @@ class UserApi {
         return $password == $this->info["password"];
     }
 
+    public function checkState(){
+        switch ($this->usertype){
+            case 1:
+                return false;
+                break;
+            case 2:
+                if($this->info['active'] != 1){
+                    return "账号被冻结, 冻结原因为: {$this->info['activeMsg']}";
+                }
+                if($this->info['checkState'] == 1 || $this->info['checkState'] == 4){
+                    return "账号需要后台管理人员审核通过后才能登陆,请耐心等待!";
+                }
+                if($this->info['checkState'] == 2){
+                    return "账号审核不通过,原因是:{$this->info['checkMsg']}";
+                }
+                return false;
+                break;
+            case 3:
+                return false;
+                break;
+        }
+    }
+
     /**
      * 设置冻结与否
      * @param type $freezetype

+ 3 - 2
app/common/controller/Auth.php

@@ -33,7 +33,8 @@ class Auth extends BaseController
                 'street' => \StrUtil::getRequestDecodeParam($this->request,'street'),
                 'address' => \StrUtil::getRequestDecodeParam($this->request,'address'),
                 'type' => intval($this->request['type']),
-                'talentType' => \StrUtil::getRequestDecodeParam($this->request,'talentType'),
+                'enterpriseTag' => \StrUtil::getRequestDecodeParam($this->request,'enterpriseTag'),
+                'enterpriseType' => \StrUtil::getRequestDecodeParam($this->request,'enterpriseType'),
                 'agentEmail' => \StrUtil::getRequestDecodeParam($this->request,'agentEmail'),
                 'ephone' => \StrUtil::getRequestDecodeParam($this->request,'ephone'),
                 'industryFieldNew' => \StrUtil::getRequestDecodeParam($this->request,'industryFieldNew'),
@@ -64,7 +65,7 @@ class Auth extends BaseController
                     return \StrUtil::back($upload_result,"Register.epCallBack");
                 }
                 $data['id'] = getStringId();
-                $data['password'] = simple_hash($data['password']);
+                $data['password'] = hash('md5',$data['password']);
                 $data['source'] = $source;
                 $data['imgurl'] = $upload_result->filepath;
                 $data['createTime'] = date("Y-m-d H:i:s",time());

+ 9 - 3
app/common/validate/Enterprise.php

@@ -4,6 +4,9 @@ namespace app\common\validate;
 use think\Validate;
 
 class Enterprise extends Validate{
+
+
+
     protected $rule =   [
         'username' => 'require|max:50|unique:new_enterprise',
         'password' => 'require|min:6|regex:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$/',
@@ -12,7 +15,8 @@ class Enterprise extends Validate{
         'idCard' => ['require','unique:new_enterprise','regex:/^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/'],
         'type' => 'require',
         'industryFieldNew' => 'require',
-        'talentType' => 'require',
+        'enterpriseTag' => 'require',
+        'enterpriseType' => 'require',
         'agentName' => 'require',
         'agentPhone' => 'require|unique:new_enterprise',
         'verificationCode' => 'require',
@@ -43,7 +47,8 @@ class Enterprise extends Validate{
         'idCard.unique' => '该社会信用代码已存在',
         'type.require' => '申报类型必须选择',
         'industryFieldNew.require' => '产业领域必须选择',
-        'talentType.require' => '单位标签必须选择',
+        'enterpriseTag.require' => '单位标签必须选择',
+        'enterpriseType.require' => '单位类型必须选择',
         'agentName.require' => '请填写经办人',
         'agentPhone.require' => '请填写经办人手机号',
         'agentPhone.unique' => '该经办人手机号已存在',
@@ -61,6 +66,7 @@ class Enterprise extends Validate{
     ];
 
     protected $scene = [
-        'add'  =>  ['username','password','re_password','name','idCard','type','industryFieldNew','talentType','agentName','agentPhone','verificationCode','legal','street','address','ephone','agentEmail','bankCard','bank','bankNetwork'],
+        'add'  =>  ['username','password','re_password','name','idCard','type','industryFieldNew','enterpriseTag','enterpriseType','agentName','agentPhone','verificationCode','legal','street','address','ephone','agentEmail','bankCard','bank','bankNetwork'],
+        'change' => ['name','idCard','industryFieldNew','enterpriseTag','enterpriseType','agentName','agentPhone','legal','street','address','ephone','agentEmail','bankCard','bank','bankNetwork']
     ];
 }

+ 9 - 2
app/common/view/auth/register.html

@@ -81,7 +81,14 @@
                                             <div class="rowGroup"  style="display: none">
                                                 <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>单位标签</label>
                                                 <div class="col-sm-4 spacing">
-                                                    <select class="form-control" id="talentType" name="talentType">
+                                                    <select class="form-control" id="enterpriseTag" name="enterpriseTag">
+                                                    </select>
+                                                </div>
+                                            </div>
+                                            <div class="rowGroup" >
+                                                <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>单位类型</label>
+                                                <div class="col-sm-4 spacing">
+                                                    <select class="form-control" id="enterpriseType" name="enterpriseType">
                                                     </select>
                                                 </div>
                                             </div>
@@ -258,6 +265,6 @@
 </div>
 <iframe id="hiddenIframe" name="hiddenIframe" style="display: none;"></iframe>
 
-<script src="/static/js/register.js?v=4"></script>
+<script src="/static/js/register.js?v=7"></script>
 
 {/block}

+ 161 - 0
app/enterprise/controller/Api.php

@@ -0,0 +1,161 @@
+<?php
+
+namespace app\enterprise\controller;
+
+use app\admin\model\Enterprise;
+use app\common\api\DictApi;
+use app\common\model\TalentChecklog;
+use app\enterprise\model\EnterpriseRecord;
+use app\enterprise\common\EnterpriseController;
+use app\Request;
+use think\exception\ValidateException;
+
+class Api extends EnterpriseController {
+
+    public function findEnterpriseChangeByPage()
+    {
+        $order = trim($this->request->param("order")) ?: "desc";
+        $offset = trim($this->request->param("offset")) ?: 0;
+        $limit = trim($this->request->param("limit")) ?: 10;
+
+        $list = EnterpriseRecord::where('mainId',session("user")["uid"])->limit($offset, $limit)->order('createTime ' . $order)->select()->toArray();
+        $count = count($list);
+
+        return json(["total" => $count, "rows" => $list]);
+    }
+
+    public function findUnfinishedChangeRecord(){
+        return EnterpriseRecord::where('mainId',session("user")["uid"])->where('checkState',4)->select()->toArray();
+    }
+
+    public function toAdd()
+    {
+        $ep = Enterprise::where('id',session("user")["uid"])->find();
+        $ecr = [
+            'enterprise_id' => $ep['id'],
+            'newName' => $ep['name'],
+            'newIdCard' => $ep['idCard'],
+            'newStreet' => $ep['street'],
+            'newAddress' => $ep['address'],
+            'newLegal' => $ep['legal'],
+            'newEphone' => $ep['ephone'],
+            'newAgentName' => $ep['agentName'],
+            'newAgentEmail' => $ep['agentEmail'],
+            'newAgentPhone' => $ep['agentPhone'],
+            'type' => $ep['type'],
+            'newEnterpriseTag' => $ep['enterpriseTag'],
+            'newIndustryFieldNew' => $ep['industryFieldNew'],
+            'newIndustryFieldOld' => $ep['industryFieldOld']
+        ];
+
+
+
+        switch ($ep['checkState']){
+            case 1:
+                $ecr['checkStateName'] = '保存未提交审核';
+                break;
+            case 2:
+                $ecr['checkStateName'] = '待审核';
+                break;
+            case 3:
+                $ecr['checkStateName'] = '审核驳回';
+                break;
+            case 4:
+                $ecr['checkStateName'] = '审核通过';
+                break;
+            case 5:
+                $ecr['checkStateName'] = '重新提交';
+                break;
+            default:
+                $ecr['checkStateName'] = '';
+        }
+
+        return view("", ['ecr' => $ecr]);
+    }
+
+    public function upsert(){
+        $data = [
+            'id' => \StrUtil::getRequestDecodeParam($this->request,'enterprise_id'),
+            'name' => \StrUtil::getRequestDecodeParam($this->request,'newName'),//单位名称
+            'idCard' => \StrUtil::getRequestDecodeParam($this->request,'newIdCard'),//社会信用代码
+            'agentName' => \StrUtil::getRequestDecodeParam($this->request,'newAgentName'),//经办人
+            'agentPhone' => \StrUtil::getRequestDecodeParam($this->request,'newAgentPhone'),//经办人电话
+            'legal' => \StrUtil::getRequestDecodeParam($this->request,'newLegal'),//法人
+            'street' => \StrUtil::getRequestDecodeParam($this->request,'newStreet'),//镇街
+            'address' => \StrUtil::getRequestDecodeParam($this->request,'newAddress'),//地址
+            'type' => intval($this->request['type']),
+            'enterpriseTag' => \StrUtil::getRequestDecodeParam($this->request,'newEnterpriseTag'),//单位标签
+            'agentEmail' => \StrUtil::getRequestDecodeParam($this->request,'newAgentEmail'),//邮箱
+            'ephone' => \StrUtil::getRequestDecodeParam($this->request,'newEphone'),//单位电话
+            'industryFieldNew' => \StrUtil::getRequestDecodeParam($this->request,'newIndustryFieldNew'),//产业领域
+            'industryFieldOld' => \StrUtil::getRequestDecodeParam($this->request,'newIndustryFieldOld'),//行业领域
+            'bankCard' => \StrUtil::getRequestDecodeParam($this->request,'newBankCard'),//银行
+            'bank' => \StrUtil::getRequestDecodeParam($this->request,'newBank'),//开户行
+            'bankNetwork' => \StrUtil::getRequestDecodeParam($this->request,'newBankNetwork')//网点
+        ];
+
+        try {
+            validate(\app\common\validate\Enterprise::class)->batch(true)->scene('change')->check($data);
+            $ep = Enterprise::where('id',session("user")["uid"])->find();
+            $record_id = \StrUtil::getRequestDecodeParam($this->request,'id');
+            if($record_id){
+                $record_data = [
+                    'mainId' => $data['id'],
+                    'type' => $data['type'],
+                    'oldName' => $ep['name'],
+                    'oldIdCard' => $ep['idCard'],
+                    'oldIndustryFieldNew' => $ep['industryFieldNew'],
+                    'oldIndustryFieldOld' => $ep['industryFieldOld'],
+                    'oldStreet' => $ep['street'],
+                    'oldAddress' => $ep['address'],
+                    'oldLegal' => $ep['legal'],
+                    'oldEphone' => $ep['ephone'],
+                    'oldAgentName' => $ep['agentName'],
+                    'oldAgentEmail' => $ep['agentEmail'],
+                    'oldAgentPhone' => $ep['agentPhone'],
+                    'oldEnterpriseTag' => $ep['enterpriseTag'],
+                    'oldBankCard' => $ep['bankCard'],
+                    'oldBank' => $ep['bank'],
+                    'oldBankNetwork' => $ep['bankNetwork'],
+                    'newName' => htmlspecialchars($data['name']),
+                    'newIdCard' => htmlspecialchars($data['idCard']),
+                    'newIndustryFieldNew' => $data['industryFieldNew'],
+                    'newIndustryFieldOld' => $data['industryFieldOld'],
+                    'newStreet' => $data['street'],
+                    'newAddress' => $data['address'],
+                    'newLegal' => $data['legal'],
+                    'newEphone' =>  $data['ephone'],
+                    'newAgentName' => $data['agentName'],
+                    'newAgentEmail' => $data['agentEmail'],
+                    'newAgentPhone' => $data['agentPhone'],
+                    'newEnterpriseTag' => $data['enterpriseTag'],
+                    'newBankCard' => $data['bankCard'],
+                    'newBank' => $data['bank'],
+                    'newBankNetwork' => $data['bankNetwork'],
+                    'checkState' => 1,
+                    'createTime' => date("y-m-d H:i:s",time()),
+                    'createUser' => session("user")["uid"]
+                ];
+                EnterpriseRecord::create($record_data);
+            }
+
+            $log = [
+                'type' => 10,
+                'active' => 1,
+                'state' => 1,
+                'step' => 100,
+                'stateChange' => '保存未提交',
+                'createTime' => date("y-m-d H:i:s",time()),
+                'createUser' => '用户'
+            ];
+
+
+
+        } catch (ValidateException $e){
+            $error = $e->getError();
+            return json(["msg" => array_pop($error)],500);
+        }
+        dd($this->request->post());
+
+    }
+}

+ 48 - 0
app/enterprise/controller/Index.php

@@ -2,7 +2,9 @@
 
 namespace app\enterprise\controller;
 
+use app\admin\model\Enterprise;
 use app\enterprise\common\EnterpriseController;
+use app\common\api\DictApi;
 
 /**
  * Description of Index
@@ -22,4 +24,50 @@ class Index extends EnterpriseController {
         return view("", $vars);
     }
 
+    public function centerPage(){
+        $ep = Enterprise::where('id',$this->user['uid'])->find();
+        $ep['industryFieldNewName'] = DictApi::findDictByCode($ep['industryFieldNew'])->name ?? '';
+        $ep['industryFieldOldName'] = DictApi::findDictByCode($ep['industryFieldOldName'])->name ?? '';
+        $ep['talentTypeName'] = DictApi::findDictByCode($ep['talentType'])->name ?? '';
+        $ep['streetName'] = DictApi::findDictByCode($ep['street'])->name ?? '';
+        switch ($ep['type']){
+            case 1:
+                $ep['typeName'] = '晋江市优秀人才';
+                break;
+            case 2:
+                $ep['typeName'] = '集成电路优秀人才';
+                break;
+            case 3:
+                $ep['typeName'] = '海峡计划团队';
+                break;
+        }
+        switch ($ep['checkState']){
+            case 1:
+                $ep['checkStateName'] = '待审核';
+                break;
+            case 2:
+                $ep['checkStateName'] = '审核驳回';
+                break;
+            case 3:
+                $ep['checkStateName'] = '审核通过';
+                break;
+            case 4:
+                $ep['checkStateName'] = '重新提交';
+                break;
+        }
+        switch ($ep['active']){
+            case 1:
+                $ep['activeName'] = '账号有效';
+                break;
+            case 2:
+                $ep['activeName'] = '冻结/拉黑';
+                break;
+        }
+
+
+        return view("", ['ep' => $ep]);
+    }
+
+
+
 }

+ 16 - 0
app/enterprise/model/EnterpriseRecord.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\enterprise\model;
+
+use think\Model;
+
+/**
+ * Description of Talent
+ *
+ * @author sgq
+ */
+class EnterpriseRecord extends Model {
+
+    protected $table = "new_enterprisechange_record";
+
+}

+ 168 - 0
app/enterprise/view/api/to_add.html

@@ -0,0 +1,168 @@
+{extend name="layout/content"}
+{block name="content"}
+<style>
+  .upload-btn{
+    position: relative;
+    display: inline-block;
+    cursor: pointer;
+    background: #1ab394;
+    padding: 6px 12px;
+    color: #fff;
+    text-align: center;
+    border-radius: 3px;
+    overflow: hidden;
+    font-size: 14px;
+    font-weight: 400;
+  }
+  .spacing {
+    margin-bottom: 10px;
+    padding-right:4px;
+    padding-left: 4px;
+  }
+  .imgs li{
+    list-style: none;
+    float: left;
+    border: 1px solid #d8d1d1;
+    text-align: center;
+    height: 30px;
+  }
+</style>
+<div class="ibox float-e-margins">
+  <div class="ibox-content">
+    <div class="form-horizontal">
+      <div class="row">
+        <div class="col-sm-12" >
+          <div class="tabs-container" >
+            <ul class="nav nav-tabs">
+              <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">1.基本信息</a></li>
+              <li id="fileLi" class=""><a data-toggle="tab" href="#tab-2" onclick="EpChangeEdit.initFileTable()"  aria-expanded="false">2.附件上传</a></li>
+            </ul>
+          </div>
+          <div class="tab-content">
+            <div id="tab-1" class="tab-pane active">
+              <div class="panel-body">
+                <form id="ecr_form" class="form-horizontal" target="hiddenIframe" action="" method="post" enctype="multipart/form-data">
+                  <input type="text" class="form-control" id="enterprise_id" name="enterprise_id" value="{$ecr.enterprise_id}" style="display: none;"/>
+                  <input type="text" class="form-control" id="id" name="id" value="{$ecr.id}" style="display: none;"/>
+                  <input type="text" class="form-control" id="type" name="type" value="{$ecr.type}" style="display: none;"/>
+                  <div class="col-sm-12 ">
+                    <div class="row">
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>单位名称</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newName" name="newName" value="{$ecr.newName}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>社会信用代码</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newIdCard" name="newIdCard" value="{$ecr.newIdCard}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup" style="display: none">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>产业领域</label>
+                        <div class="col-sm-4 spacing">
+                          <select type="text" class="form-control" id="newIndustryFieldNew" name="newIndustryFieldNew" value="{$ecr.newIndustryFieldNew}" onchange="EpChangeEdit.industryChange()"></select>
+                        </div>
+                      </div>
+                      <div class="rowGroup" style="display: none">
+                        <label class="col-sm-2 control-label spacing">行业领域</label>
+                        <div class="col-sm-4 spacing">
+                          <select type="text" class="form-control" id="newIndustryFieldOld" name="newIndustryFieldOld" value="{$ecr.newIndustryFieldOld}"></select>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="display: none">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>单位标签</label>
+                        <div class="col-sm-4 spacing">
+                          <select type="text" class="form-control" id="newEnterpriseTag" name="newEnterpriseTag" value="{$ecr.newEnterpriseTag}"></select>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>法人代表</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newLegal" name="newLegal" value="{$ecr.newLegal}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>所属街道</label>
+                        <div class="col-sm-4 spacing">
+                          <select class="form-control" id="newStreet" name="newStreet" value="{$ecr.newStreet}"></select>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>单位地址</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newAddress" name="newAddress" value="{$ecr.newAddress}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>单位电话</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newEphone" name="newEphone" value="{$ecr.newEphone}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>经办人</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newAgentName" name="newAgentName" value="{$ecr.newAgentName}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>经办人电话</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newAgentPhone" name="newAgentPhone" value="{$ecr.newAgentPhone}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>电子邮箱</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newAgentEmail" name="newAgentEmail" value="{$ecr.newAgentEmail}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>企业银行账号</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newBankCard" name="newBankCard" value="{$ecr.newBankCard}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>企业开户银行</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newBank" name="newBank" value="{$ecr.newBank}"/>
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing"><span class="text-danger">*</span>企业开户银行网点</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" id="newBankNetwork" name="newBankNetwork" value="{$ecr.newBankNetwork}"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </form>
+              </div>
+            </div>
+            <div id="tab-2" class="tab-pane ">
+              <#table id="fileTable" />
+              <label style="padding-top: 15px;color: red">*请根据上传的附件材料,编辑好相应的文件夹名称</label>
+              <form id="uploadForm" action="${ctxPath}/api/talentCommonFile/addTalentCommonFile" method="post" class="form-horizontal" enctype="multipart/form-data" target="hiddenIframe" style="display: none">
+                <input type="hidden" name="backName" value="EpChangeEdit.callBack">
+                <input type='hidden' id="fileId" name="fileId" >
+                <input type='file' id="upload_file" name="fileUrl" style='display: none'>
+                <input type='hidden' id="mainId" name="mainId" >
+                <input type='hidden' id="typeId" name="typeId" >
+                <input type='hidden' id="index" name="index" >
+              </form>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<iframe style="display: none;" id="hiddenIframe" name="hiddenIframe"></iframe>
+<!--<script src="${ctxPath}/static/modular/gate/enterprise/enterprise_change_edit.js"></script>-->
+<script type="text/javascript">
+  document.write('<script src="/static/modular/gate/enterprise/enterprise_change_edit.js?v='+(new Date()).getTime()+'"><\/script>');
+</script>
+{/block}

+ 255 - 0
app/enterprise/view/index/center_page.html

@@ -0,0 +1,255 @@
+{extend name="layout/content"}
+{block name="content"}
+<style type="text/css">
+  .spacing {
+    margin-bottom: 10px;
+    padding-right:4px;
+    padding-left: 4px;
+  }
+  .layui-layer-btn .layui-layer-btn1 {
+    border-color: #009688;
+    background-color: #009688;
+    color: #fff;
+  }
+</style>
+<div class="ibox float-e-margins">
+  <div class="ibox-title">
+    <h5>企业用户中心</h5>
+  </div>
+  <div class="ibox-content">
+    <div class="form-horizontal">
+      <div class="row">
+        <div class="col-sm-12">
+          <div class="tabs-container">
+            <ul class="nav nav-tabs">
+              <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">基本信息</a></li>
+              <li class=""><a data-toggle="tab" href="#tab-2" aria-expanded="false">企业信息变更</a></li>
+              <li class=""><a data-toggle="tab" href="#tab-3" aria-expanded="false">修改密码</a></li>
+<!--              <li class="" ><a data-toggle="tab" href="#tab-4" aria-expanded="false">绑定聚才网账号</a></li>-->
+            </ul>
+            <div class="tab-content">
+              <div id="tab-1" class="tab-pane active">
+                <div class="panel-body" style="width:900px;">
+                  <br/>
+                  <div class="row">
+                    <div class="col-sm-12 ">
+                      <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">账号</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="username" value="{$ep.username}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">单位名称</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="name" value="{$ep.name}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">社会信用代码</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="idCard" value="{$ep.idCard}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="display: none">
+                        <label class="col-sm-2 control-label spacing">产业领域</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" id="industryFieldNewName" name="industryFieldNewName" value="{$ep.industryFieldNewName}">
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="display: none">
+                        <label class="col-sm-2 control-label spacing">行业领域</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" id="industryFieldOldName" name="industryFieldOldName" value="{$ep.industryFieldOldName}">
+                        </div>
+                      </div>
+                      <div class="rowGroup" >
+                        <label class="col-sm-2 control-label spacing">申报类型</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" id="typeName" name="typeName" value="{$ep.typeName}">
+                          <input type="hidden" id="type" name="type" value="{$ep.type}">
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="display: none">
+                        <label class="col-sm-2 control-label spacing">单位标签</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" id="talentType" name="talentType" value="{$ep.talentTypeName}">
+                        </div>
+                      </div>
+                      <div class="rowGroup"  >
+                        <label class="col-sm-2 control-label spacing">所属街道</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="streetName" value="{$ep.streetName}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup" >
+                        <label class="col-sm-2 control-label spacing">单位地址</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="address" value="{$ep.address}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  >
+                        <label class="col-sm-2 control-label spacing">法人代表</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="legal" value="{$ep.legal}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  >
+                        <label class="col-sm-2 control-label spacing">单位电话</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="ephone" value="{$ep.ephone}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup" >
+                        <label class="col-sm-2 control-label spacing">经办人</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="agentName" value="{$ep.agentName}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing">经办人电话</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="agentPhone" value="{$ep.agentPhone}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing">经办人邮箱</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="agentEmail" value="{$ep.agentEmail}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing">审核状态</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="checkState" value="{$ep.checkStateName}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing">账号状态</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="active" value="{$ep.activeName}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing">备注</label>
+                        <div class="col-sm-4 spacing">
+                          <input type="text" class="form-control" readonly="readonly" name="description" value="{$ep.description}" />
+                        </div>
+                      </div>
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label spacing">营业执照</label>
+                        <div class="col-sm-4 spacing">
+                          <img onclick="Feng.showImg(this)" id="photoImg" alt="营业执照" src="{$ep.imgurl}" style="max-width: 100px;" >
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div id="tab-2" class="tab-pane">
+                <br/>
+                <div class="row">
+                  <div class="hidden-xs" id="tableToolbar" role="group">
+                    <button type="button" class="btn btn-sm btn-primary" onclick="EnterpriseCenter.addEnterprisechangeRecord()"><i class="fa fa-plus"></i>申请变更</button>
+                    <button type="button" class="btn btn-sm btn-primary" onclick="EnterpriseCenter.updateEnterprisechangeRecord()"><i class="fa fa-edit"></i>修改</button>
+                    <button type="button" class="btn btn-sm btn-primary" onclick="EnterpriseCenter.showEnterprisechangeRecordDetail()"><i class="fa fa-info"></i>查看详情</button>
+                  </div>
+                  <table id="table">
+                  </table>
+                </div>
+              </div>
+              <div id="tab-3" class="tab-pane">
+                <div class="panel-body" style="width:900px;">
+                  <br/>
+                  <div class="row">
+                    <div class="col-sm-12 b-r">
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label">原密码</label>
+                        <div class="col-sm-10">
+                          <input type="password" class="form-control" autocomplete='new-password' name="password"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="hr-line-dashed"></div>
+                  <div class="row">
+                    <div class="col-sm-12 b-r">
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label">新密码</label>
+                        <div class="col-sm-10">
+                          <input type="password" class="form-control" autocomplete='new-password' name="newPassword"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="hr-line-dashed"></div>
+                  <div class="row">
+                    <div class="col-sm-12 b-r">
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label">重复新密码</label>
+                        <div class="col-sm-10">
+                          <input type="password" class="form-control" autocomplete='new-password' name="newRePassword"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <br/>
+                  <div style="width:100%; text-align: center;">
+                    <button type="button" class="btn btn-w-m btn-primary" style="width:200px;" onclick="EnterpriseCenter.changePwd()">确认修改</button>
+                  </div>
+                </div>
+              </div>
+              <div id="tab-4" class="tab-pane">
+                <div class="panel-body" style="width:900px;">
+                  <br/>
+                  <div class="row" >
+                    <div class="col-sm-12 ">
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label">聚才网账号</label>
+                        <div class="col-sm-10">
+                          <input type="text" class="form-control" id="username" name="username"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <br/>
+                  <div class="row">
+                    <div class="col-sm-12">
+                      <div class="rowGroup"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label">聚才网账号密码</label>
+                        <div class="col-sm-10">
+                          <input type="password" class="form-control" autocomplete='new-password' id="password" name="password"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <br/>
+                  <div class="row">
+                    <div class="col-sm-12 ">
+                      <div class="rowGroup form-inline"  style="margin-bottom: 0px;">
+                        <label class="col-sm-2 control-label">经办人手机验证码</label>
+                        <div class="col-sm-10">
+                          <input autocomplete="off" type="text" style="width: 80%" class="form-control" id="verificationCode" name="verificationCode"  />
+                          <button id="enterprise_sms_btn" style="margin-bottom: 0px;width: 18%" onclick="EnterpriseCenter.getEnterpriseSms()" type="button" class="btn btn-sm btn-info">获取验证码</button>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <br/>
+                  <div style="width:100%; text-align: center;">
+                    <button type="button" class="btn btn-w-m btn-primary" style="width:200px;" onclick="EnterpriseCenter.bindJcAccount()">确认绑定</button>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script type="text/javascript">
+  document.write('<script src="/static/modular/gate/enterprise/enterprise_center.js?v='+(new Date()).getTime()+'"><\/script>');
+</script>
+<!--<script src='{$ctxPath}/static/modular/gate/enterprise/enterprise_center.js?v='></script>-->
+{/block}

+ 75 - 5
app/index/controller/Auth.php

@@ -4,6 +4,7 @@ namespace app\index\controller;
 
 use app\BaseController;
 use app\common\api\UserApi;
+use think\Facade\Db;
 
 /**
  * Description of Login
@@ -17,6 +18,12 @@ class Auth extends BaseController {
      * @return type
      */
     public function login() {
+
+        if ($user = session("user")) {
+            if($user['usertype'] == 2){
+                return redirect("/enterprise");
+            }
+        }
         $msg = "";
         if ($this->request->isPost()) {
             $username = $this->request["username"];
@@ -25,9 +32,20 @@ class Auth extends BaseController {
             $user = new UserApi($username, $pwd, $usertype);
             if (!$userinfo = $user->getUserInfo()) {
                 $msg = "用户不存在";
-            }
-            if (!$user->checkPwd()) {
+            } else if (!$user->checkPwd()) {
+                $login_fail = session('login_fail');
+                if($login_fail){
+                    $login_fail++;
+                    if($login_fail >= 5){
+                        session('captcha',1);
+                    }
+                }else{
+                    $login_fail = 1;
+                }
+                session('login_fail',$login_fail);
                 $msg = "用户名或者密码错误";
+            } else if($res_msg = $user->checkState()){
+                $msg = $res_msg;
             }
             $url = "/admin";
             switch ($usertype) {
@@ -43,11 +61,10 @@ class Auth extends BaseController {
                     $url = "/person";
                     break;
             }
+
             if (!$msg) {
                 $user->setSession();
-                if (session("user")) {
-                    return redirect($url);
-                }
+                return redirect($url);
             }
         }
         return view("", ["msg" => $msg]);
@@ -62,6 +79,7 @@ class Auth extends BaseController {
         return redirect("/index/auth/login");
     }
 
+
     /**
      * 验证密码
      */
@@ -81,4 +99,56 @@ class Auth extends BaseController {
         }
     }
 
+    public function policy(){
+
+
+        return view("", []);
+    }
+
+    public function policy_list(){
+        $level = $this->request->post('level');
+        if($level){
+            $where[] = ['level','=',$level];
+        }else{
+            $where[] = ['level','>',0];
+        }
+        $list = Db::table('new_policy')->where($where)->select()->toArray();
+        $result = [];
+        foreach ($list as $k => $v){
+            $check = [];
+            $condition = [];
+            if(!empty($v['checks'])){
+                $check = explode(',',$v['checks']);
+            }
+            if(!empty($v['condition'])){
+                $condition = explode(',',$v['condition']);
+            }
+            $item = [
+                'id' => $v['id'],
+                'policy' => $v['policy_name'],
+                'checks' => $check,
+                'condition' => $condition
+            ];
+            array_push($result,$item);
+        }
+        return json($result);
+    }
+
+    public function policy_update(){
+        $res = $this->request->post();
+        foreach ($res as $k => $v){
+            $update = [];
+            if(count($v['checks']) > 0){
+                $update['checks'] = implode(',',$v['checks']);
+            }
+            if(count($v['condition']) > 0){
+                $update['condition'] = implode(',',$v['condition']);
+            }
+            if(count($update) > 0){
+                Db::table('new_policy')->where('id',$v['id'])->save($update);
+            }
+        }
+
+    }
+
 }

+ 10 - 0
app/index/view/auth/login.html

@@ -47,6 +47,16 @@
                 <div class="form-group">
                     <input type="password" name="password" class="form-control" placeholder="密码" autocomplete="off"  required="" style="background: url(/static/img/mm.png) 6px 9px no-repeat;padding-left: 25px;">
                 </div>
+                {if condition="session('captcha') == 1"}
+                <div class="form-group" style="float: left;">
+                    <div class="col-sm-8" style="padding-left: 0px; padding-right: 0px;">
+                        <input class="form-control" type="text" name="kaptcha" placeholder="验证码" required="">
+                    </div>
+                    <div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;">
+                        <img src="{:captcha_src()}" id="kaptcha" width="100%" height="100%"/>
+                    </div>
+                </div>
+                {/if}
                 <div class="form-group" style="float: left;">
                     <div class="checkbox" style="text-align: left">
                         <label>

+ 123 - 0
app/index/view/auth/policy.html

@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>晋江市优秀人才政策导入</title>
+    <!-- 引入样式 -->
+    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
+</head>
+<body>
+<div id="app">
+    <div style="width: 100%;max-width: 1440px;margin: 0 auto">
+        <el-form :inline="true" :model="formInline" class="demo-form-inline">
+
+            <el-form-item label="人才层次">
+                <el-select v-model="formInline.level" placeholder="人才层次">
+                    <el-option label="第一层次" value="1"></el-option>
+                    <el-option label="第二层次" value="2"></el-option>
+                    <el-option label="第三层次" value="3"></el-option>
+                    <el-option label="第四层次" value="4"></el-option>
+                    <el-option label="第五层次" value="5"></el-option>
+                    <el-option label="第六层次" value="6"></el-option>
+                    <el-option label="第七层次" value="7"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item>
+                <el-button type="primary" @click="getData">查询</el-button>
+            </el-form-item>
+        </el-form>
+        <el-table :data="list" v-loading="loading">
+            <el-table-column label="政策说明" prop="policy">
+
+            </el-table-column>
+            <el-table-column label="并审部门">
+                <template slot-scope="scope">
+                    <el-select ref="fuck" multiple size="mini"  v-model='scope.row.checks' >
+                        <el-option value="工业和信息化局" label="工业和信息化局"></el-option>
+                        <el-option value="民政局" label="民政局"></el-option>
+                        <el-option value="宣传部" label="宣传部"></el-option>
+                        <el-option value="广电局" label="广电局"></el-option>
+                        <el-option value="博士后工作站" label="博士后工作站"></el-option>
+                        <el-option value="教育局" label="教育局"></el-option>
+                        <el-option value="科学技术局" label="科学技术局"></el-option>
+                        <el-option value="文化和旅游局" label="文化和旅游局"></el-option>
+                        <el-option value="人社局职业能力建设科" label="人社局职业能力建设科"></el-option>
+                        <el-option value="体育局" label="体育局"></el-option>
+                    </el-select>
+                </template>
+            </el-table-column>
+            <el-table-column label="认定条件">
+                <template slot-scope="scope">
+                    <el-select ref="fuck" multiple size="mini"  v-model='scope.row.condition' >
+                        <el-option value="认定条件取得时间" label="认定条件取得时间"></el-option>
+                        <el-option value="认定条件职务任职时间" label="认定条件职务任职时间"></el-option>
+                        <el-option value="认定条件职称评聘时间" label="认定条件职称评聘时间"></el-option>
+                        <el-option value="认定条件论文期刊发表时间" label="认定条件论文期刊发表时间"></el-option>
+                        <el-option value="认定条件上一年度年薪达社平工资2.5倍或4倍以上" label="认定条件上一年度年薪达社平工资2.5倍或4倍以上"></el-option>
+                        <el-option value="认定条件连续2年年薪达到社平工资4倍" label="认定条件连续2年年薪达到社平工资4倍"></el-option>
+                        <el-option value="认定条件博士学位取得时间" label="认定条件博士学位取得时间"></el-option>
+                        <el-option value="认定条件毕业大学排名" label="认定条件毕业大学排名"></el-option>
+                        <el-option value="认定条件学科专业排名" label="认定条件学科专业排名"></el-option>
+                        <el-option value="认定条件劳动(聘用)合同签订时间" label="认定条件劳动(聘用)合同签订时间"></el-option>
+                        <el-option value="认定条件晋江在站博士后进站时间" label="认定条件晋江在站博士后进站时间"></el-option>
+                        <el-option value="认定条件全日制硕士学位(工学、理学)取得时间" label="认定条件全日制硕士学位(工学、理学)取得时间"></el-option>
+                        <el-option value="认定条件全日制硕士学位(工学、理学除外)取得时间" label="认定条件全日制硕士学位(工学、理学除外)取得时间"></el-option>
+                        <el-option value="认定条件全日制学士学位(工学、理学)取得时间" label="认定条件全日制学士学位(工学、理学)取得时间"></el-option>
+                        <el-option value="认定条件全日制学士学位(工学、理学除外)取得时间" label="认定条件全日制学士学位(工学、理学除外)取得时间"></el-option>
+                        <el-option value="认定条件取得国家职业资格或技能等级证书时间<国家一级(二级)职业资格、高级技师(技师)、国家职业资格或工种>" label="认定条件取得国家职业资格或技能等级证书时间<国家一级(二级)职业资格、高级技师(技师)、国家职业资格或工种>"></el-option>
+                        <el-option value="认定条件的其他情况" label="认定条件的其他情况"></el-option>
+                    </el-select>
+                </template>
+            </el-table-column>
+        </el-table>
+        <el-row style="margin-top: 20px;text-align: center">
+            <el-button type="primary" @click="submit">立即创建</el-button>
+            <el-button>取消</el-button>
+        </el-row>
+    </div>
+
+</div>
+<!-- import Vue before Element -->
+<script src="https://unpkg.com/vue@2.7.10/dist/vue.js"></script>
+<!-- import JavaScript -->
+<script src="https://unpkg.com/element-ui/lib/index.js"></script>
+<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
+<script>
+    var app = new Vue({
+        el: '#app',
+        data: function () {
+            return{
+                list: [],
+                loading: true,
+                formInline:{
+                    level: '1'
+                }
+            }
+        },
+        methods: {
+            submit: function(){
+                this.loading = true;
+                axios.post('/index/auth/policy_update',this.list).then(response => {
+                    this.$message({
+                        message: '更新成功',
+                        type: 'success'
+                    });
+                    this.loading = false;
+                });
+
+            },
+            getData: function(){
+                this.loading = true;
+                axios.post('/index/auth/policy_list',this.formInline).then(response => {
+                    this.list = response.data;
+                    this.loading = false;
+                });
+            }
+        },
+        created() {
+            this.getData();
+        }
+    })
+</script>
+</body>
+</html>

+ 2 - 1
composer.json

@@ -25,7 +25,8 @@
         "topthink/think-orm": "^2.0",
         "topthink/think-view": "^1.0",
         "topthink/think-multi-app": "^1.0",
-        "phpoffice/phpexcel": "^1.8"
+        "phpoffice/phpexcel": "^1.8",
+        "topthink/think-captcha": "^3.0"
     },
     "require-dev": {
         "symfony/var-dumper": "^4.2",

+ 15 - 13
public/static/js/register.js

@@ -92,6 +92,7 @@ Register.enterpriseUserRegister = function() {
     var type = $("#type").val();
     var agentEmail = $("#agentEmail").val();
     var talentType = $("#talentType").val();
+    var enterpriseTag = $("#enterpriseTag").val();
     var ephone = $("#ephone").val();
     var industryFieldNew = $("#industryFieldNew").val();
     var bankCard = $("#bankCard").val();
@@ -196,8 +197,8 @@ Register.enterpriseUserRegister = function() {
         return;
     }
     if(type==1 ){
-        if(talentType==null||talentType==''){
-            Feng.info("请选择企业标签!");
+        if(enterpriseTag==null||enterpriseTag==''){
+            Feng.info("请选择单位标签!");
             return;
         }
         if(industryFieldNew == null || industryFieldNew ==''){
@@ -222,12 +223,12 @@ Register.enterpriseUserRegister = function() {
         Feng.info("电子邮箱格式不合法!");
         return;
     }
-    // if(!lock){
-    //     lock = true;
-    // }else{
-    //     Feng.info("不能重复点击");
-    //     return;
-    // }
+    if(!lock){
+        lock = true;
+    }else{
+        Feng.info("不能重复点击");
+        return;
+    }
     $("#ep_form")[0].submit();
 };
 
@@ -396,10 +397,10 @@ Register.typeChange = function(){
     $("#type").removeAttr("disabled");
     var type = $("#type").val();
     if(type==1){
-        $("#talentType,#industryFieldNew,#industryFieldOld").parent().parent().attr("style","display:block");
+        $("#enterpriseTag,#industryFieldNew,#industryFieldOld").parent().parent().attr("style","display:block");
     }else{
-        $("#talentType,#industryFieldNew,#industryFieldOld").val("");
-        $("#talentType,#industryFieldNew,#industryFieldOld").parent().parent().attr("style","display:none");
+        $("#enterpriseTag,#industryFieldNew,#industryFieldOld").val("");
+        $("#enterpriseTag,#industryFieldNew,#industryFieldOld").parent().parent().attr("style","display:none");
     }
 }
 Register.industryChange = function(){
@@ -449,8 +450,9 @@ $(function(){
     }
     var arr = [
         {"name":"street","code":"street"},
-        {"name":"talentType","code":"enterprise_tag"},
-        {"name":"industryFieldNew","code":"industry_field"}];
+        {"name":"enterpriseTag","code":"enterprise_tag"},
+        {"name":"industryFieldNew","code":"industry_field"},
+        {"name":"enterpriseType","code":"enterprise_type"}];
     Feng.findChildDictBatch(JSON.stringify(arr));
     $("#imgurl").change(function (e) {
         var tag = e.target;

+ 14 - 8
public/static/modular/enterprise/enterprise_list.js

@@ -307,14 +307,20 @@ Enterprise.showLog = function(id){
 
 $(function () {
     var defaultColunms = Enterprise.initColumn();
-    var table = new BSTable(Enterprise.id, "/enterprise/findEnterpriseByPage", defaultColunms);
+    var table = new BSTable(Enterprise.id, "/admin/enterprise/findEnterpriseByPage", defaultColunms);
     table.setPaginationType("server");
     Enterprise.table = table.init();
-    Feng.addAjaxSelect({
-        "id": "street",
-        "displayCode": "code",
-        "displayName": "name",
-        "type": "GET",
-        "url": Feng.ctxPath + "/dict/findChildDictByCode?code=un_street"
-    });
+    var arr = [
+        {"name":"street","code":"street"},
+        {"name":"enterpriseTag","code":"enterprise_tag"},
+        {"name":"industryFieldNew","code":"industry_field"},
+        {"name":"enterpriseType","code":"enterprise_type"}];
+    Feng.findChildDictBatch(JSON.stringify(arr));
+    // Feng.addAjaxSelect({
+    //     "id": "street",
+    //     "displayCode": "code",
+    //     "displayName": "name",
+    //     "type": "GET",
+    //     "url": Feng.ctxPath + "/dict/findChildDictByCode?code=un_street"
+    // });
 });

+ 4 - 4
public/static/modular/gate/enterprise/enterprise_center.js

@@ -98,7 +98,7 @@ EnterpriseCenter.initColumn = function(){
 
 EnterpriseCenter.addEnterprisechangeRecord = function() {
 	//查询是否存在  未处理完的 变更申请
-	var ajax = new $ax(Feng.ctxPath + "/api/enterpriseUser/findUnfinishedChangeRecord", function(data){
+	var ajax = new $ax(Feng.ctxPath + "/enterprise/api/findUnfinishedChangeRecord", function(data){
 		if (data==null || data.length==0) {
 		    var index = layer.open({
 		        type: 2,
@@ -106,7 +106,7 @@ EnterpriseCenter.addEnterprisechangeRecord = function() {
 		        area: ['930px', '600px'], //宽高
 		        fix: false, //不固定
 		        maxmin: true,
-		        content: Feng.ctxPath + '/api/enterpriseChangeRecord/toAdd',
+		        content: Feng.ctxPath + '/enterprise/api/toAdd',
 		        btn: ['<i class="fa fa-save"></i>&nbsp;&nbsp;保存未提交', '<i class="fa fa-check"></i>&nbsp;&nbsp;提交审核', '<i class="fa fa-eraser"></i>&nbsp;&nbsp;取消'],
 				btnAlign: 'c',
 		        btn1: function (index, layero) {
@@ -283,12 +283,12 @@ EnterpriseCenter.bindJcAccount = function(){
 
 $(function () {	
     var defaultColunms = EnterpriseCenter.initColumn();
-    var table = new BSTable(EnterpriseCenter.id, "/api/enterpriseChangeRecord/findEnterpriseChangeByPage", defaultColunms);
+    var table = new BSTable(EnterpriseCenter.id, "/enterprise/api/findEnterpriseChangeByPage", defaultColunms);
     table.setPaginationType("server");
     EnterpriseCenter.table = table.init();
     var type = $("#type").val();
     if(type==1){
-    	$("#talentType,#industryFieldName").parent().parent().attr("style","display:block");
+    	$("#talentType,#industryFieldNewName,#industryFieldOldName").parent().parent().attr("style","display:block");
 	}
 	var photoImg = $("#photoImg").attr("src");
 	var oldSn = photoImg.lastIndexOf(".");

+ 27 - 14
public/static/modular/gate/enterprise/enterprise_change_edit.js

@@ -4,7 +4,7 @@ var EpChangeEdit = {
 	validateFields: {
 		newName: {validators: {notEmpty: {message: '单位名称不能为空' }}},
 		newIdCard : {validators: {notEmpty: {message: '社会信用代码不能为空' }}},
-		newTalentType : {validators: {notEmpty: {message: '企业标签不能为空' }}},
+		newEnterpriseTag : {validators: {notEmpty: {message: '企业标签不能为空' }}},
 		newLegal: {validators: {notEmpty: {message: '法人代表不能为空'}}},
 		newAddress: {validators: {notEmpty: {message: '单位地址不能为空'}}},
 		newStreet: {validators: {notEmpty: {message: '所属街道不能为空'}}},
@@ -88,7 +88,7 @@ EpChangeEdit.collectData = function() {
 		.set('type')
 		.set('newName')
 		.set('newIdCard')
-		.set('newTalentType')
+		.set('newEnterpriseTag')
 		.set('newLegal')
 		.set('newStreet')
 		.set('newAddress')
@@ -96,7 +96,12 @@ EpChangeEdit.collectData = function() {
 		.set('newAgentName')
 		.set('newAgentPhone')
 		.set('newAgentEmail')
-		.set('newIndustryField');
+		.set('newIndustryFieldNew')
+		.set('newIndustryFieldOld')
+		.set('newBankCard')
+		.set('newBank')
+		.set('newBankNetwork')
+		.set('enterprise_id');
 }
 
 /**
@@ -293,7 +298,7 @@ EpChangeEdit.addSubmit = function() {
 	// $(".layui-layer-btn0",parent.document).css("pointer-events","none");
 	if(locked)return;
 	locked = true;
-	var ajax = new $ax(Feng.ctxPath + "/api/enterpriseChangeRecord/upsert", function(data){
+	var ajax = new $ax(Feng.ctxPath + "/enterprise/api/upsert", function(data){
 		if(data.code=="200"){
 			Feng.success(data.msg);
 			$("#fileLi").removeAttr("style");
@@ -306,7 +311,7 @@ EpChangeEdit.addSubmit = function() {
 		// $(".layui-layer-btn0",parent.document).css("pointer-events","block");
 		locked = false;
 	},function(data){
-		Feng.error("添加失败!" + data.responseJSON.message + "!");
+		Feng.error("添加失败!" + data.responseJSON.msg + "!");
 		locked = false;
 	});
 	ajax.set(this.epChangeEditData);
@@ -367,24 +372,32 @@ EpChangeEdit.downloadFile = function(id) {
 	window.location.href = Feng.ctxPath + '/enterprisechangeRecord/downloadFile?id='+id;
 };
 
+EpChangeEdit.industryChange = function(){
+	var industryNew = $("#industryFieldNew").val();
+	var arr = [{"name":"industryFieldOld","code":industryNew}];
+	Feng.findChildDictBatch(JSON.stringify(arr));
+}
+
 $(function() {
 	Feng.initValidator("ecr_form", EpChangeEdit.validateFields);
 	var arr = [
-		{"name":"newStreet","code":"un_street"},
-		{"name":"newTalentType","code":"un_enterprise_talentType"},
-		{"name":"newIndustryField","code":"un_industryField"}];
+		{"name":"newStreet","code":"street"},
+		{"name":"newEnterpriseTag","code":"enterprise_tag"},
+		{"name":"newIndustryFieldNew","code":"industry_field"}];
 	Feng.findChildDictBatch(JSON.stringify(arr));
 	$("select").each(function () {
 		$(this).val($(this).attr("value"));
 	})
 	if($("#type").val()==1){
-		$("#newTalentType,#newIndustryField").parent().parent().attr("style","display:block");
-		$("#newTalentType").val($("#newTalentType").attr("value"));
-		$("#newIndustryField").val($("#newIndustryField").attr("value"));
+		$("#newEnterpriseTag,#newIndustryFieldNew,#newIndustryFieldOld").parent().parent().attr("style","display:block");
+		$("#newEnterpriseTag").val($("#newEnterpriseTag").attr("value"));
+		console.log($("#newIndustryFieldNew").attr("value"))
+		$("#newIndustryFieldNew").val($("#newIndustryFieldNew").attr("value"));
+		$("#newIndustryFieldOld").val($("#newIndustryFieldOld").attr("value"));
 	}else{
-		$("#newTalentType,#newIndustryField").parent().parent().attr("style","display:none");
-		$("#newTalentType").val("");
-		$("#newIndustryField").val("");
+		$("#newEnterpriseTag,#newIndustryFieldNew,#newIndustryFieldOld").parent().parent().attr("style","display:none");
+		$("#newEnterpriseTag").val("");
+		$("#newIndustryFieldNew").val("");
 	}
 	var id = $("#id").val();
 	if(id!=null && id!=''){

+ 6 - 6
public/static/modular/gate/register.js

@@ -91,7 +91,7 @@ Register.enterpriseUserRegister = function() {
 	}
 	var type = $("#type").val();
 	var agentEmail = $("#agentEmail").val();
-	var talentType = $("#talentType").val();
+	var enterpriseTag = $("#enterpriseTag").val();
 	var ephone = $("#ephone").val();
 	var industryField = $("#industryField").val();
 	if (username==null || username=='') {
@@ -181,7 +181,7 @@ Register.enterpriseUserRegister = function() {
 		return;
 	}
 	if(type==1 ){
-		if(talentType==null||talentType==''){
+		if(enterpriseTag==null||enterpriseTag==''){
 			Feng.info("请选择企业标签!");
 			return;
 		}
@@ -381,10 +381,10 @@ Register.typeChange = function(){
 	$("#type").removeAttr("disabled");
 	var type = $("#type").val();
 	if(type==1){
-		$("#talentType,#industryField").parent().parent().attr("style","display:block");
+		$("#enterpriseTag,#industryField").parent().parent().attr("style","display:block");
 	}else{
-		$("#talentType,#industryField").val("");
-		$("#talentType,#industryField").parent().parent().attr("style","display:none");
+		$("#enterpriseTag,#industryField").val("");
+		$("#enterpriseTag,#industryField").parent().parent().attr("style","display:none");
 	}
 }
 
@@ -430,7 +430,7 @@ $(function(){
 	}
 	var arr = [
 		{"name":"street","code":"un_street"},
-		{"name":"talentType","code":"un_enterprise_talentType"},
+		{"name":"enterpriseTag","code":"un_enterprise_enterpriseTag"},
 		{"name":"industryField","code":"un_industryField"}];
 	Feng.findChildDictBatch(JSON.stringify(arr));
 	$("#imgurl").change(function (e) {

+ 7 - 7
vendor/composer/InstalledVersions.php

@@ -28,7 +28,7 @@ class InstalledVersions
 {
     /**
      * @var mixed[]|null
-     * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
+     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
      */
     private static $installed;
 
@@ -39,7 +39,7 @@ class InstalledVersions
 
     /**
      * @var array[]
-     * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
+     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
      */
     private static $installedByVendor = array();
 
@@ -243,7 +243,7 @@ class InstalledVersions
 
     /**
      * @return array
-     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
+     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
      */
     public static function getRootPackage()
     {
@@ -257,7 +257,7 @@ class InstalledVersions
      *
      * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
      * @return array[]
-     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
+     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
      */
     public static function getRawData()
     {
@@ -280,7 +280,7 @@ class InstalledVersions
      * Returns the raw data of all installed.php which are currently loaded for custom implementations
      *
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
+     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
      */
     public static function getAllRawData()
     {
@@ -303,7 +303,7 @@ class InstalledVersions
      * @param  array[] $data A vendor/composer/installed.php data set
      * @return void
      *
-     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
+     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
      */
     public static function reload($data)
     {
@@ -313,7 +313,7 @@ class InstalledVersions
 
     /**
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
+     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
      */
     private static function getInstalled()
     {

+ 1 - 0
vendor/composer/autoload_files.php

@@ -12,4 +12,5 @@ return array(
     '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
     'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
     '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
+    '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php',
 );

+ 2 - 1
vendor/composer/autoload_psr4.php

@@ -8,8 +8,9 @@ $baseDir = dirname($vendorDir);
 return array(
     'think\\view\\driver\\' => array($vendorDir . '/topthink/think-view/src'),
     'think\\trace\\' => array($vendorDir . '/topthink/think-trace/src'),
+    'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
     'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'),
-    'think\\' => array($vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-template/src'),
+    'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src'),
     'app\\' => array($baseDir . '/app'),
     'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
     'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),

+ 9 - 3
vendor/composer/autoload_static.php

@@ -13,6 +13,7 @@ class ComposerStaticInit0767332e67f37ff78a6c5ac32275d5ac
         '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
         'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
         '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
+        '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php',
     );
 
     public static $prefixLengthsPsr4 = array (
@@ -20,6 +21,7 @@ class ComposerStaticInit0767332e67f37ff78a6c5ac32275d5ac
         array (
             'think\\view\\driver\\' => 18,
             'think\\trace\\' => 12,
+            'think\\captcha\\' => 14,
             'think\\app\\' => 10,
             'think\\' => 6,
         ),
@@ -59,15 +61,19 @@ class ComposerStaticInit0767332e67f37ff78a6c5ac32275d5ac
         array (
             0 => __DIR__ . '/..' . '/topthink/think-trace/src',
         ),
+        'think\\captcha\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/topthink/think-captcha/src',
+        ),
         'think\\app\\' => 
         array (
             0 => __DIR__ . '/..' . '/topthink/think-multi-app/src',
         ),
         'think\\' => 
         array (
-            0 => __DIR__ . '/..' . '/topthink/think-helper/src',
-            1 => __DIR__ . '/..' . '/topthink/think-orm/src',
-            2 => __DIR__ . '/..' . '/topthink/framework/src/think',
+            0 => __DIR__ . '/..' . '/topthink/framework/src/think',
+            1 => __DIR__ . '/..' . '/topthink/think-helper/src',
+            2 => __DIR__ . '/..' . '/topthink/think-orm/src',
             3 => __DIR__ . '/..' . '/topthink/think-template/src',
         ),
         'app\\' => 

+ 73 - 2
vendor/composer/installed.json

@@ -270,6 +270,11 @@
             "name": "psr/container",
             "version": "1.1.1",
             "version_normalized": "1.1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+            },
             "dist": {
                 "type": "zip",
                 "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/container/1.1.1/psr-container-1.1.1.zip",
@@ -277,9 +282,9 @@
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.0"
+                "php": ">=7.4.0"
             },
-            "time": "2021-03-05T17:36:06+00:00",
+            "time": "2021-11-05T16:50:12+00:00",
             "type": "library",
             "installation-source": "dist",
             "autoload": {
@@ -305,6 +310,10 @@
                 "container-interop",
                 "psr"
             ],
+            "support": {
+                "issues": "https://github.com/php-fig/container/issues",
+                "source": "https://github.com/php-fig/container/tree/1.1.2"
+            },
             "install-path": "../psr/container"
         },
         {
@@ -754,6 +763,68 @@
             ],
             "install-path": "../topthink/framework"
         },
+        {
+            "name": "topthink/think-captcha",
+            "version": "v3.0.7",
+            "version_normalized": "3.0.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/top-think/think-captcha.git",
+                "reference": "a450602932a5d9ba183e288b79921ba3b9a92331"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/top-think/think-captcha/zipball/a450602932a5d9ba183e288b79921ba3b9a92331",
+                "reference": "a450602932a5d9ba183e288b79921ba3b9a92331",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "topthink/framework": "^6.0.0"
+            },
+            "time": "2022-04-23T02:38:14+00:00",
+            "type": "library",
+            "extra": {
+                "think": {
+                    "services": [
+                        "think\\captcha\\CaptchaService"
+                    ],
+                    "config": {
+                        "captcha": "src/config.php"
+                    }
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "src/helper.php"
+                ],
+                "psr-4": {
+                    "think\\captcha\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "yunwuxin",
+                    "email": "448901948@qq.com"
+                }
+            ],
+            "description": "captcha package for thinkphp",
+            "support": {
+                "issues": "https://github.com/top-think/think-captcha/issues",
+                "source": "https://github.com/top-think/think-captcha/tree/v3.0.7"
+            },
+            "install-path": "../topthink/think-captcha"
+        },
         {
             "name": "topthink/think-helper",
             "version": "v3.1.6",

+ 36 - 27
vendor/composer/installed.php

@@ -1,202 +1,211 @@
 <?php return array(
     'root' => array(
-        'pretty_version' => 'dev-master',
-        'version' => 'dev-master',
+        'name' => 'topthink/think',
+        'pretty_version' => '1.0.0+no-version-set',
+        'version' => '1.0.0.0',
+        'reference' => NULL,
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
-        'reference' => 'e9c0e9e209e6afbe48071401bde74757dc8e17c4',
-        'name' => 'topthink/think',
         'dev' => true,
     ),
     'versions' => array(
         'league/flysystem' => array(
             'pretty_version' => '1.1.9',
             'version' => '1.1.9.0',
+            'reference' => '094defdb4a7001845300334e7c1ee2335925ef99',
             'type' => 'library',
             'install_path' => __DIR__ . '/../league/flysystem',
             'aliases' => array(),
-            'reference' => '094defdb4a7001845300334e7c1ee2335925ef99',
             'dev_requirement' => false,
         ),
         'league/flysystem-cached-adapter' => array(
             'pretty_version' => '1.1.0',
             'version' => '1.1.0.0',
+            'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff',
             'type' => 'library',
             'install_path' => __DIR__ . '/../league/flysystem-cached-adapter',
             'aliases' => array(),
-            'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff',
             'dev_requirement' => false,
         ),
         'league/mime-type-detection' => array(
             'pretty_version' => '1.11.0',
             'version' => '1.11.0.0',
+            'reference' => 'ff6248ea87a9f116e78edd6002e39e5128a0d4dd',
             'type' => 'library',
             'install_path' => __DIR__ . '/../league/mime-type-detection',
             'aliases' => array(),
-            'reference' => 'ff6248ea87a9f116e78edd6002e39e5128a0d4dd',
             'dev_requirement' => false,
         ),
         'phpoffice/phpexcel' => array(
             'pretty_version' => '1.8.2',
             'version' => '1.8.2.0',
+            'reference' => '1441011fb7ecdd8cc689878f54f8b58a6805f870',
             'type' => 'library',
             'install_path' => __DIR__ . '/../phpoffice/phpexcel',
             'aliases' => array(),
-            'reference' => '1441011fb7ecdd8cc689878f54f8b58a6805f870',
             'dev_requirement' => false,
         ),
         'psr/cache' => array(
             'pretty_version' => '1.0.1',
             'version' => '1.0.1.0',
+            'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/cache',
             'aliases' => array(),
-            'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
             'dev_requirement' => false,
         ),
         'psr/container' => array(
             'pretty_version' => '1.1.1',
             'version' => '1.1.1.0',
+            'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/container',
             'aliases' => array(),
-            'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf',
             'dev_requirement' => false,
         ),
         'psr/http-message' => array(
             'pretty_version' => '1.0.1',
             'version' => '1.0.1.0',
+            'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-message',
             'aliases' => array(),
-            'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
             'dev_requirement' => false,
         ),
         'psr/log' => array(
             'pretty_version' => '1.1.4',
             'version' => '1.1.4.0',
+            'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/log',
             'aliases' => array(),
-            'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
             'dev_requirement' => false,
         ),
         'psr/simple-cache' => array(
             'pretty_version' => '1.0.1',
             'version' => '1.0.1.0',
+            'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/simple-cache',
             'aliases' => array(),
-            'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
             'dev_requirement' => false,
         ),
         'symfony/polyfill-mbstring' => array(
             'pretty_version' => 'v1.26.0',
             'version' => '1.26.0.0',
+            'reference' => '9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
             'aliases' => array(),
-            'reference' => '9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e',
             'dev_requirement' => true,
         ),
         'symfony/polyfill-php72' => array(
             'pretty_version' => 'v1.26.0',
             'version' => '1.26.0.0',
+            'reference' => 'bf44a9fd41feaac72b074de600314a93e2ae78e2',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/polyfill-php72',
             'aliases' => array(),
-            'reference' => 'bf44a9fd41feaac72b074de600314a93e2ae78e2',
             'dev_requirement' => true,
         ),
         'symfony/polyfill-php80' => array(
             'pretty_version' => 'v1.26.0',
             'version' => '1.26.0.0',
+            'reference' => 'cfa0ae98841b9e461207c13ab093d76b0fa7bace',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/polyfill-php80',
             'aliases' => array(),
-            'reference' => 'cfa0ae98841b9e461207c13ab093d76b0fa7bace',
             'dev_requirement' => true,
         ),
         'symfony/var-dumper' => array(
             'pretty_version' => 'v4.4.44',
             'version' => '4.4.44.0',
+            'reference' => 'f19951007dae942cc79b979c1fe26bfdfbeb54ed',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/var-dumper',
             'aliases' => array(),
-            'reference' => 'f19951007dae942cc79b979c1fe26bfdfbeb54ed',
             'dev_requirement' => true,
         ),
         'topthink/framework' => array(
             'pretty_version' => 'v6.0.13',
             'version' => '6.0.13.0',
+            'reference' => '126d5b2cbacb73d6e2a85cbc7a2c6ee59d0b3fa6',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/framework',
             'aliases' => array(),
-            'reference' => '126d5b2cbacb73d6e2a85cbc7a2c6ee59d0b3fa6',
             'dev_requirement' => false,
         ),
         'topthink/think' => array(
-            'pretty_version' => 'dev-master',
-            'version' => 'dev-master',
+            'pretty_version' => '1.0.0+no-version-set',
+            'version' => '1.0.0.0',
+            'reference' => NULL,
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
-            'reference' => 'e9c0e9e209e6afbe48071401bde74757dc8e17c4',
+            'dev_requirement' => false,
+        ),
+        'topthink/think-captcha' => array(
+            'pretty_version' => 'v3.0.7',
+            'version' => '3.0.7.0',
+            'reference' => 'a450602932a5d9ba183e288b79921ba3b9a92331',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../topthink/think-captcha',
+            'aliases' => array(),
             'dev_requirement' => false,
         ),
         'topthink/think-helper' => array(
             'pretty_version' => 'v3.1.6',
             'version' => '3.1.6.0',
+            'reference' => '769acbe50a4274327162f9c68ec2e89a38eb2aff',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/think-helper',
             'aliases' => array(),
-            'reference' => '769acbe50a4274327162f9c68ec2e89a38eb2aff',
             'dev_requirement' => false,
         ),
         'topthink/think-multi-app' => array(
             'pretty_version' => 'v1.0.14',
             'version' => '1.0.14.0',
+            'reference' => 'ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/think-multi-app',
             'aliases' => array(),
-            'reference' => 'ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3',
             'dev_requirement' => false,
         ),
         'topthink/think-orm' => array(
             'pretty_version' => 'v2.0.54',
             'version' => '2.0.54.0',
+            'reference' => '97b061b47616301ff29fbd4c35ed9184e1162e4e',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/think-orm',
             'aliases' => array(),
-            'reference' => '97b061b47616301ff29fbd4c35ed9184e1162e4e',
             'dev_requirement' => false,
         ),
         'topthink/think-template' => array(
             'pretty_version' => 'v2.0.8',
             'version' => '2.0.8.0',
+            'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/think-template',
             'aliases' => array(),
-            'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
             'dev_requirement' => false,
         ),
         'topthink/think-trace' => array(
             'pretty_version' => 'v1.4',
             'version' => '1.4.0.0',
+            'reference' => '9a9fa8f767b6c66c5a133ad21ca1bc96ad329444',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/think-trace',
             'aliases' => array(),
-            'reference' => '9a9fa8f767b6c66c5a133ad21ca1bc96ad329444',
             'dev_requirement' => true,
         ),
         'topthink/think-view' => array(
             'pretty_version' => 'v1.0.14',
             'version' => '1.0.14.0',
+            'reference' => 'edce0ae2c9551ab65f9e94a222604b0dead3576d',
             'type' => 'library',
             'install_path' => __DIR__ . '/../topthink/think-view',
             'aliases' => array(),
-            'reference' => 'edce0ae2c9551ab65f9e94a222604b0dead3576d',
             'dev_requirement' => false,
         ),
     ),

+ 2 - 2
vendor/composer/platform_check.php

@@ -4,8 +4,8 @@
 
 $issues = array();
 
-if (!(PHP_VERSION_ID >= 70205)) {
-    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 70400)) {
+    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
 }
 
 if ($issues) {

+ 4 - 3
vendor/services.php

@@ -1,7 +1,8 @@
 <?php 
-// This file is automatically generated at:2022-08-24 15:12:50
+// This file is automatically generated at:2022-08-29 22:53:38
 declare (strict_types = 1);
 return array (
-  0 => 'think\\app\\Service',
-  1 => 'think\\trace\\Service',
+  0 => 'think\\captcha\\CaptchaService',
+  1 => 'think\\app\\Service',
+  2 => 'think\\trace\\Service',
 );