diff --git a/addons/summernote/.addonrc b/addons/summernote/.addonrc deleted file mode 100644 index cbeb2c0..0000000 --- a/addons/summernote/.addonrc +++ /dev/null @@ -1 +0,0 @@ -{"license":"regular","licenseto":"30453","licensekey":"MvLUpyxGr0cbewSd isolvNTM71vSlABVPUrVepKNIrz+w6D2adnw5fWgV5Q=","files":["public\\assets\\addons\\summernote\\css\\summernote.css","public\\assets\\addons\\summernote\\font\\summernote.eot","public\\assets\\addons\\summernote\\font\\summernote.ttf","public\\assets\\addons\\summernote\\font\\summernote.woff","public\\assets\\addons\\summernote\\js\\summernote.js","public\\assets\\addons\\summernote\\js\\summernote.min.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-CN.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-CN.min.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-TW.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-TW.min.js"]} \ No newline at end of file diff --git a/addons/summernote/Summernote.php b/addons/summernote/Summernote.php deleted file mode 100644 index 478c338..0000000 --- a/addons/summernote/Summernote.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -namespace addons\summernote; - -use think\Addons; - -/** - * Summernote富文本编辑器 - */ -class Summernote extends Addons -{ - - /** - * 插件安装方法 - * @return bool - */ - public function install() - { - return true; - } - - /** - * 插件卸载方法 - * @return bool - */ - public function uninstall() - { - return true; - } - -} diff --git a/addons/summernote/bootstrap.js b/addons/summernote/bootstrap.js deleted file mode 100644 index 85c632c..0000000 --- a/addons/summernote/bootstrap.js +++ /dev/null @@ -1,114 +0,0 @@ -require.config({ - paths: { - 'summernote': '../addons/summernote/lang/summernote-zh-CN.min' - }, - shim: { - 'summernote': ['../addons/summernote/js/summernote.min', 'css!../addons/summernote/css/summernote.css'], - } -}); -require(['form', 'upload'], function (Form, Upload) { - var _bindevent = Form.events.bindevent; - Form.events.bindevent = function (form) { - _bindevent.apply(this, [form]); - try { - //绑定summernote事件 - if ($(".summernote,.editor", form).size() > 0) { - require(['summernote'], function () { - var imageButton = function (context) { - var ui = $.summernote.ui; - var button = ui.button({ - contents: '<i class="fa fa-file-image-o"/>', - tooltip: __('Choose'), - click: function () { - parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=image/*", __('Choose'), { - callback: function (data) { - var urlArr = data.url.split(/\,/); - $.each(urlArr, function () { - var url = Fast.api.cdnurl(this); - context.invoke('editor.insertImage', url); - }); - } - }); - return false; - } - }); - return button.render(); - }; - var attachmentButton = function (context) { - var ui = $.summernote.ui; - var button = ui.button({ - contents: '<i class="fa fa-file"/>', - tooltip: __('Choose'), - click: function () { - parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=*", __('Choose'), { - callback: function (data) { - var urlArr = data.url.split(/\,/); - $.each(urlArr, function () { - var url = Fast.api.cdnurl(this); - var node = $("<a href='" + url + "'>" + url + "</a>"); - context.invoke('insertNode', node[0]); - }); - } - }); - return false; - } - }); - return button.render(); - }; - - $(".summernote,.editor", form).summernote({ - height: 250, - lang: 'zh-CN', - fontNames: [ - 'Arial', 'Arial Black', 'Serif', 'Sans', 'Courier', - 'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande', - "Open Sans", "Hiragino Sans GB", "Microsoft YaHei", - '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆', - ], - fontNamesIgnoreCheck: [ - "Open Sans", "Microsoft YaHei", - '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆' - ], - toolbar: [ - ['style', ['style', 'undo', 'redo']], - ['font', ['bold', 'underline', 'strikethrough', 'clear']], - ['fontname', ['color', 'fontname', 'fontsize']], - ['para', ['ul', 'ol', 'paragraph', 'height']], - ['table', ['table', 'hr']], - ['insert', ['link', 'picture', 'video']], - ['select', ['image', 'attachment']], - ['view', ['fullscreen', 'codeview', 'help']], - ], - buttons: { - image: imageButton, - attachment: attachmentButton, - }, - dialogsInBody: true, - followingToolbar: false, - callbacks: { - onChange: function (contents) { - $(this).val(contents); - $(this).trigger('change'); - }, - onInit: function () { - }, - onImageUpload: function (files) { - var that = this; - //依次上传图片 - for (var i = 0; i < files.length; i++) { - Upload.api.send(files[i], function (data) { - var url = Fast.api.cdnurl(data.url); - $(that).summernote("insertImage", url, 'filename'); - }); - } - } - } - }); - }); - } - } catch (e) { - - } - - }; -}); diff --git a/addons/summernote/config.php b/addons/summernote/config.php deleted file mode 100644 index 28a3b2c..0000000 --- a/addons/summernote/config.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php - -return [ - -]; diff --git a/addons/summernote/controller/Index.php b/addons/summernote/controller/Index.php deleted file mode 100644 index 2a75aad..0000000 --- a/addons/summernote/controller/Index.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php - -namespace addons\summernote\controller; - -use think\addons\Controller; - -class Index extends Controller -{ - - public function index() - { - $this->error("当前插件暂无前台页面"); - } - -} - diff --git a/addons/summernote/info.ini b/addons/summernote/info.ini deleted file mode 100644 index 4d8482e..0000000 --- a/addons/summernote/info.ini +++ /dev/null @@ -1,10 +0,0 @@ -name = summernote -title = Summernote富文本编辑器 -intro = 修改后台默认编辑器为Summernote -author = Karson -website = http://www.fastadmin.net -version = 1.0.4 -state = 1 -url = /addons/summernote -license = regular -licenseto = 30453 diff --git a/application/admin/controller/Factory.php b/application/admin/controller/Factory.php index 2af2e5a..0597349 100644 --- a/application/admin/controller/Factory.php +++ b/application/admin/controller/Factory.php @@ -22,6 +22,7 @@ class Factory extends Backend { parent::_initialize(); $this->model = new \app\admin\model\Factory; + $this->view->assign("hotdataList", $this->model->getHotdataList()); } diff --git a/application/admin/controller/Job.php b/application/admin/controller/Job.php index e72610c..b3af5e7 100644 --- a/application/admin/controller/Job.php +++ b/application/admin/controller/Job.php @@ -24,6 +24,9 @@ class Job extends Backend parent::_initialize(); $this->model = new \app\admin\model\Job; $this->view->assign("typeList", $this->model->getTypeList()); + $this->view->assign("lookdataList", $this->model->getLookdataList()); + $this->view->assign("putdataList", $this->model->getPutdataList()); + } public function import() diff --git a/application/admin/controller/user/User.php b/application/admin/controller/user/User.php index c20c461..aab62f9 100644 --- a/application/admin/controller/user/User.php +++ b/application/admin/controller/user/User.php @@ -37,6 +37,8 @@ class User extends Backend } unset($v); $this->view->assign("userdata", $userdata); + $this->view->assign("roledataList", $this->model->getRoledataList()); + } /** diff --git a/application/admin/lang/zh-cn/factory.php b/application/admin/lang/zh-cn/factory.php index 63b8fff..9515f6e 100644 --- a/application/admin/lang/zh-cn/factory.php +++ b/application/admin/lang/zh-cn/factory.php @@ -9,5 +9,8 @@ return [ 'Work_subsidy' => '工时补贴价格(元/时)', 'Createtime' => '创建时间', 'Updatetime' => '更新时间', + 'Hotdata' => '是否热门', + 'Hotdata 0' => '否', + 'Hotdata 1' => '是', 'Weigh' => '权重' ]; diff --git a/application/admin/lang/zh-cn/job.php b/application/admin/lang/zh-cn/job.php index 69ac9db..83f774d 100644 --- a/application/admin/lang/zh-cn/job.php +++ b/application/admin/lang/zh-cn/job.php @@ -11,6 +11,13 @@ return [ 'Type 1' => '长期工', 'Type 2' => '兼职', 'Type 3' => '短期工', + 'Lookdata' => '状态', + 'Lookdata 0' => '全部可看', + 'Lookdata 1' => '部分可看', + 'Lookdata 2' => '部分不可看', + 'Putdata' => '上下架', + 'Putdata 0' => '上架', + 'Putdata 1' => '下架', 'Factory_price' => '工厂工价(元/时)', 'Subsidy_price' => '平台补贴(元/时)', 'Factory_price_total' => '补贴后工价(元/时)', @@ -23,4 +30,5 @@ return [ 'Createtime' => '创建时间', 'Updatetime' => '更新时间', 'Weigh' => '权重', + 'Label_ids' => '标签', ]; diff --git a/application/admin/lang/zh-cn/user/realname.php b/application/admin/lang/zh-cn/user/realname.php index b8c5a1d..a0e41cd 100644 --- a/application/admin/lang/zh-cn/user/realname.php +++ b/application/admin/lang/zh-cn/user/realname.php @@ -6,7 +6,8 @@ return [ 'Realname' => '姓名', 'Mobile' => '手机号', 'Idcard' => '身份证号', - 'Idcard_front' => '身份证正面', +// 'Idcard_front' => '身份证正面', + 'Idcard_front' => '收款码', 'Idcard_back' => '身份证背面', 'Status' => '状态', 'Status 0' => '待审核', diff --git a/application/admin/lang/zh-cn/user/user.php b/application/admin/lang/zh-cn/user/user.php index 5c189b1..28b10c8 100644 --- a/application/admin/lang/zh-cn/user/user.php +++ b/application/admin/lang/zh-cn/user/user.php @@ -34,9 +34,13 @@ return [ 'Is_work' => '是否在职', 'Is_complete' => '补贴是否完成', 'Work_subsidy' => '工时补贴价格(元/时)', - 'Recruit_subsidy'=> '招聘补贴上级价格(元/时)', + 'Recruit_subsidy'=> '招聘补贴上一级价格(元/时)', + 'Recruit_subsidy2'=> '招聘补贴上二级价格(元/时)', 'Work_subsidy_month' => '工时月工资(元/月)', 'Recruit_subsidy_month' => '招聘月工资(元/月)', 'Lower_num' => '可以看到几级下级', 'Factory_id' => '入职工厂', + 'Roledata' =>'角色', + 'Roledata 0' =>'用户', + 'Roledata 1' =>'合伙人', ]; diff --git a/application/admin/model/Factory.php b/application/admin/model/Factory.php index 7c3e4ca..be95a84 100644 --- a/application/admin/model/Factory.php +++ b/application/admin/model/Factory.php @@ -25,7 +25,7 @@ class Factory extends Model // 追加属性 protected $append = [ - + 'hotdata_text' ]; @@ -37,7 +37,17 @@ class Factory extends Model }); } - + public function getHotdataList() + { + return ['0' => __('Hotdata 0'), '1' => __('Hotdata 1')]; + } + + public function getHotdataTextAttr($value, $data) + { + $value = $value ? $value : (isset($data['hotdata']) ? $data['hotdata'] : ''); + $list = $this->getHotdataList(); + return isset($list[$value]) ? $list[$value] : ''; + } diff --git a/application/admin/model/Job.php b/application/admin/model/Job.php index 7459d01..625f55d 100644 --- a/application/admin/model/Job.php +++ b/application/admin/model/Job.php @@ -25,7 +25,9 @@ class Job extends Model // 追加属性 protected $append = [ - 'type_text' + 'type_text', + 'lookdata_text', + 'putdata_text' ]; protected static function init() @@ -49,6 +51,30 @@ class Job extends Model return implode(',', array_intersect_key($list, array_flip($valueArr))); } + public function getLookdataList() + { + return ['0' => __('Lookdata 0'), '1' => __('Lookdata 1'),'2'=>__('Lookdata 2')]; + } + + public function getLookdataTextAttr($value, $data) + { + $value = $value ? $value : (isset($data['lookdata']) ? $data['lookdata'] : ''); + $list = $this->getLookdataList(); + return isset($list[$value]) ? $list[$value] : ''; + } + + + public function getPutdataList() + { + return ['0' => __('Putdata 0'), '1' => __('Putdata 1')]; + } + + public function getPutdataTextAttr($value, $data) + { + $value = $value ? $value : (isset($data['putdata']) ? $data['putdata'] : ''); + $list = $this->getPutdataList(); + return isset($list[$value]) ? $list[$value] : ''; + } protected function setTypeAttr($value) { return is_array($value) ? implode(',', $value) : $value; diff --git a/application/admin/model/User.php b/application/admin/model/User.php index 8ffed22..54b3489 100644 --- a/application/admin/model/User.php +++ b/application/admin/model/User.php @@ -20,7 +20,8 @@ class User extends Model protected $append = [ 'prevtime_text', 'logintime_text', - 'jointime_text' + 'jointime_text', + 'roledata_text' ]; public function getOriginData() @@ -68,6 +69,17 @@ class User extends Model return ['normal' => __('Normal'), 'hidden' => __('Hidden')]; } + public function getRoledataList() + { + return ['0' => __('Roledata 0'), '1' => __('Roledata 1')]; + } + + public function getRoledataTextAttr($value, $data) + { + $value = $value ? $value : (isset($data['roledata']) ? $data['roledata'] : ''); + $list = $this->getRoledataList(); + return isset($list[$value]) ? $list[$value] : ''; + } public function getPrevtimeTextAttr($value, $data) { $value = $value ? $value : $data['prevtime']; diff --git a/application/admin/view/factory/add.html b/application/admin/view/factory/add.html index b430c79..fbe95f9 100644 --- a/application/admin/view/factory/add.html +++ b/application/admin/view/factory/add.html @@ -30,6 +30,19 @@ <input id="c-work_subsidy" data-rule="requird" class="form-control" name="row[work_subsidy]" type="number" value="0.00"> </div> </div> + + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Hotdata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="hotdataList" item="vo"} + <label for="row[hotdata]-{$key}"><input id="row[hotdata]-{$key}" name="row[hotdata]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + + </div> + </div> <div class="form-group"> <label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label> <div class="col-xs-12 col-sm-8"> diff --git a/application/admin/view/factory/edit.html b/application/admin/view/factory/edit.html index c767e8a..a091c48 100644 --- a/application/admin/view/factory/edit.html +++ b/application/admin/view/factory/edit.html @@ -30,6 +30,19 @@ <input id="c-work_subsidy" data-rule="requird" class="form-control" name="row[work_subsidy]" type="number" value="{$row.work_subsidy|htmlentities}"> </div> </div> + + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Hotdata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="hotdataList" item="vo"} + <label for="row[hotdata]-{$key}"><input id="row[hotdata]-{$key}" name="row[hotdata]" type="radio" value="{$key}" {in name="key" value="$row.hotdata"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + + </div> + </div> <div class="form-group"> <label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label> <div class="col-xs-12 col-sm-8"> diff --git a/application/admin/view/job/add.html b/application/admin/view/job/add.html index 297194c..fa0d45f 100644 --- a/application/admin/view/job/add.html +++ b/application/admin/view/job/add.html @@ -121,9 +121,40 @@ </div> </div> <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Lookdata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="lookdataList" item="vo"} + <label for="row[lookdata]-{$key}"><input id="row[lookdata]-{$key}" name="row[lookdata]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + + </div> + </div> + <div class="form-group job hide"> <label class="control-label col-xs-12 col-sm-2">{:__('User_ids')}:</label> <div class="col-xs-12 col-sm-8"> - <input id="c-user_ids" data-source="user/user/index" data-multiple="true" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value=""> + <input id="c-user_ids" data-source="user/user/index" data-params='{"custom[roledata]":"1"}' data-multiple="true" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value=""> + </div> + </div> + + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Putdata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="putdataList" item="vo"} + <label for="row[putdata]-{$key}"><input id="row[putdata]-{$key}" name="row[putdata]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + + </div> + </div> + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Label_ids')}:</label> + <div class="col-xs-12 col-sm-8"> + <input id="c-label_ids" data-source="label/index" data-field="title" data-multiple="true" class="form-control selectpage" name="row[label_ids]" type="text" value=""> </div> </div> <div class="form-group"> diff --git a/application/admin/view/job/edit.html b/application/admin/view/job/edit.html index bc94c59..17e163d 100644 --- a/application/admin/view/job/edit.html +++ b/application/admin/view/job/edit.html @@ -121,9 +121,41 @@ </div> </div> <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Lookdata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="lookdataList" item="vo"} + <label for="row[lookdata]-{$key}"><input id="row[lookdata]-{$key}" name="row[lookdata]" type="radio" value="{$key}" {in name="key" value="$row.lookdata"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + + </div> + </div> + + <div class="form-group job hide"> <label class="control-label col-xs-12 col-sm-2">{:__('User_ids')}:</label> <div class="col-xs-12 col-sm-8"> - <input id="c-user_ids" data-source="user/user/index" data-multiple="true" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value="{$row.user_ids|htmlentities}"> + <input id="c-user_ids" data-source="user/user/index" data-params='{"custom[roledata]":"1"}' data-multiple="true" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value="{$row.user_ids|htmlentities}"> + </div> + </div> + + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Label_ids')}:</label> + <div class="col-xs-12 col-sm-8"> + <input id="c-label_ids" data-source="label/index" data-field="title" data-multiple="true" class="form-control selectpage" name="row[label_ids]" type="text" value="{$row.label_ids|htmlentities}"> + </div> + </div> + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Putdata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="putdataList" item="vo"} + <label for="row[putdata]-{$key}"><input id="row[putdata]-{$key}" name="row[putdata]" type="radio" value="{$key}" {in name="key" value="$row.putdata"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + </div> </div> <div class="form-group"> diff --git a/application/admin/view/user/user/edit.html b/application/admin/view/user/user/edit.html index b294e9c..9b2ee13 100644 --- a/application/admin/view/user/user/edit.html +++ b/application/admin/view/user/user/edit.html @@ -58,6 +58,19 @@ {:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('拉黑')], $row['status'])} </div> </div> + <div class="form-group"> + <label class="control-label col-xs-12 col-sm-2">{:__('Roledata')}:</label> + <div class="col-xs-12 col-sm-8"> + + <div class="radio"> + {foreach name="roledataList" item="vo"} + <label for="row[Roledata]-{$key}"><input id="row[roledata]-{$key}" name="row[roledata]" type="radio" value="{$key}" {in name="key" value="$row.roledata"}checked{/in} /> {$vo}</label> + {/foreach} + </div> + + </div> + </div> + <!--<div class="form-group"> <label for="c-work_subsidy" class="control-label col-xs-12 col-sm-2">{:__('Work_subsidy')}:</label> <div class="col-xs-12 col-sm-8"> diff --git a/application/api/controller/Common.php b/application/api/controller/Common.php index 974571d..b37e8a0 100644 --- a/application/api/controller/Common.php +++ b/application/api/controller/Common.php @@ -13,6 +13,7 @@ use think\Hook; /** * 公共接口 + * @ApiWeigh(2) */ class Common extends Api { diff --git a/application/api/controller/Demo.php b/application/api/controller/Demo.php index 3a992e4..c370aad 100644 --- a/application/api/controller/Demo.php +++ b/application/api/controller/Demo.php @@ -6,6 +6,7 @@ use app\common\controller\Api; /** * 示例接口 + * @ApiWeigh(2) */ class Demo extends Api { diff --git a/application/api/controller/Ems.php b/application/api/controller/Ems.php index 0046cdb..a422ee9 100644 --- a/application/api/controller/Ems.php +++ b/application/api/controller/Ems.php @@ -8,6 +8,7 @@ use app\common\model\User; /** * 邮箱验证码接口 + * @ApiWeigh(2) */ class Ems extends Api { diff --git a/application/api/controller/Index.php b/application/api/controller/Index.php index 5183ae8..05e62c2 100644 --- a/application/api/controller/Index.php +++ b/application/api/controller/Index.php @@ -7,6 +7,7 @@ use app\api\model\Factory; use app\api\model\Job; use app\api\model\JobCollect; use app\api\model\JobKeyword; +use app\common\model\Inform; use app\common\model\User; use fast\Tree; use app\common\controller\Wechat; @@ -14,6 +15,7 @@ use app\common\controller\Api; /** * 首页接口 + * @ApiWeigh(2) */ class Index extends Api { @@ -144,7 +146,11 @@ class Index extends Api "subsidy_price": "40.00", //平台补贴(元/时) "factory_price_total": "40.00", //工价 "salary": "6000~7000", //月收入 - "people_num": 23 //报名人数 + "people_num": 23, //报名人数 + "label_name": [ //标签 + "包吃", + "包住" + ] }] } }) @@ -182,19 +188,28 @@ class Index extends Api } $where .= "job_name like '%{$keyword}%'"; } + $where .= $where ? ' and ' : ''; + $where .= "putdata = '0'"; // 哪些人及其下级可查看 if($this->auth->id){ $parentsIds = Tree::instance()->init(collection(User::select())->toArray())->getParentsIds($this->auth->id, true); + // 部分可看 + $findinset = []; foreach ($parentsIds as $pid){ $findinset[] = "find_in_set({$pid},user_ids)"; } + // 部分不可看 + $findinsetn = []; + foreach ($parentsIds as $pid){ + $findinsetn[] = "find_in_set({$pid},user_ids) = 0"; + } $where .= $where ? ' and ' : ''; - $where .= "(".implode(' or ',$findinset)." or user_ids = '')"; + $where .= "((".implode(' or ',$findinset)." and lookdata = '1') or (lookdata = '0') or (".implode(' or ',$findinsetn)." and lookdata = '2'))"; } // 附近 - $distance = '1'; + $juli = 0; if($lng && $lat){ - $distance = "ROUND( + $juli = "ROUND( 6378.138 * 2 * ASIN( SQRT( POW( @@ -213,7 +228,7 @@ class Index extends Api 2 ) ) - ) , 2 + ) * 1000 )"; } // 职位类型 @@ -222,11 +237,11 @@ class Index extends Api $where .= "find_in_set({$type},type)"; } $data = Job::where($where) - ->field("*,{$distance} distance") - ->order(['distance'=>'asc','weigh'=>'desc']) + ->field("*,$juli juli,if($juli > 1000,CONCAT(ROUND($juli/1000,1),'km'),CONCAT($juli,'m')) distance") + ->order(['juli'=>'asc','weigh'=>'desc']) ->paginate($page_num,false,['page'=>$page]) ->each(function($v){ - $v->visible(['id','cover','job_name','salary','people_num','factory_price_total','factory_price','subsidy_price']); + $v->visible(['id','cover','job_name','salary','people_num','factory_price_total','factory_price','subsidy_price','label_ids'])->append(['distance']); })->toArray(); $this->success('成功',$data); } @@ -303,7 +318,7 @@ class Index extends Api $where .= $where ? ' and ' : ''; $where .= "(".implode(' or ',$findinset)." or user_ids = '')"; } - + $data = Job::alias('j') ->join('job_collect jc','jc.job_id = j.id and user_id = '.$this->auth->id) ->where($where) @@ -340,19 +355,32 @@ class Index extends Api "subsidy_price": "10.00", //平台补贴价格 "factory_price_total": "70.00", //补贴后工价 "salary": "5000~6000", // 月收入 - "is_collect": 0 //是否收藏:0=否,1=是 + "label_name": [ //标签 + "包吃", + "包住" + ], + "is_collect": 0 ,//是否收藏:0=否,1=是 + "inform": {//通知 + "id": 5, //通知id + "content": "hi哈佛地方", //通知内容 + "status": "1", + "job_id": 7 + } } }) */ public function jobInfo() { + $user_id = $this->auth->id; //用户id $job_id = $this->request->param('job_id'); empty($job_id) && $this->error('缺少必需参数'); $info = Job::get($job_id); empty($info) && $this->error('职位信息不存在'); $collect = JobCollect::where('user_id',$this->auth->id)->where('job_id',$job_id)->find(); $info->is_collect = !empty($collect) ? 1 : 0; - $info->visible(['id','images','job_name','factory_price_total','factory_price','subsidy_price','salary','content'])->append(['is_collect']); + $deposit = new Inform; + $info['inform'] = $deposit->where(['status'=>'1','job_id'=>$job_id,'deletetime'=>null])->order('id desc')->field('id,content,status,job_id')->find(); + $info->visible(['id','images','job_name','factory_price_total','factory_price','subsidy_price','salary','content','lng','lat','label_ids'])->append(['is_collect','inform']); $this->success('成功',$info); } @@ -421,50 +449,82 @@ class Index extends Api $user_id = $this->auth->id > 0 ? $this->auth->id : 0; $qrcode_id = "{$job_id}_{$user_id}"; $qrcode = $dir.'/qrcode_'.$qrcode_id.'.png'; - if(!file_exists($qrcode)){ - $user_id = $this->auth->id > 0 ? $this->auth->id : 0; +// $qrcode_width = 192; + $qrcode_width = 1100; + if(!file_exists($qrcode) || imagesx(imagecreatefromjpeg(ROOT_PATH.'public/'.$qrcode)) != $qrcode_width){ $response = Wechat::miniProgram()->app_code->getUnlimit($qrcode_id, [ 'page' => 'pages/zhiwei_xq/zhiwei_xq', - 'width' => 280, //最小宽度280 + 'width' => $qrcode_width, //最小宽度280 ]); if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) { $response->saveAs($dir, str_replace($dir.'/','',$qrcode)); } // 280不满足,再缩小 - \think\Image::open($qrcode)->thumb(120,120,\think\Image::THUMB_CENTER)->save($qrcode); + \think\Image::open($qrcode)->thumb($qrcode_width,$qrcode_width,\think\Image::THUMB_CENTER)->save($qrcode); } - //将职位封面图保存到本地 - $job_cover = $dir.'/cover_'.$job_id.'.png'; - file_put_contents($job_cover,file_get_contents($job['cover'])); - \think\Image::open($job_cover)->thumb(84,84,\think\Image::THUMB_CENTER)->save($job_cover); - - $path_ttf = ROOT_PATH.'public/assets/fonts/PingFang.ttf'; - $filename = $dir.'/'.$job_id.'.png'; - - $image = \think\Image::open(ROOT_PATH.'public/assets/img/miniProgram/job_back.png'); - // 职位名称居中 - $size = 12; - $box1 = imagettfbbox($size, 0, $path_ttf, $job['job_name']); - $box1_minx = min($box1[0], $box1[2], $box1[4], $box1[6]); - $box1_maxx = max($box1[0], $box1[2], $box1[4], $box1[6]); - /* 计算文字初始坐标和尺寸 */ - $w = $box1_maxx - $box1_minx; - $box1_minx += ($image->width() - $w) / 2; - // 备注居中 - $last_text = '长安此图识别二维码,进入小程序'; - $box2 = imagettfbbox($size, 0, $path_ttf, $last_text); - $box2_minx = min($box2[0], $box2[2], $box2[4], $box2[6]); - $box2_maxx = max($box2[0], $box2[2], $box2[4], $box2[6]); - /* 计算文字初始坐标和尺寸 */ - $w = $box2_maxx - $box2_minx; - $box2_minx += ($image->width() - $w) / 2; - $image->water($job_cover,[129,120]) - ->text($job['job_name'],$path_ttf,$size,'#020202',[$box1_minx,215]) - ->water($qrcode,[111,262]) - ->text($last_text,$path_ttf,$size,'#969799',[$box2_minx,410]) - ->save($filename); - $url = request()->domain().'/'.$filename.'?v='.time(); +// //将职位图片首图保存到本地 +// $images = db('job')->where('id',$job_id)->value('images'); +// $image = cdnurl(explode(',',$images)[0],true); +// // $image = 'https://recruit.brofirst.cn'.explode(',',$images)[0]; +// $job_image = $dir.'/image_'.$job_id.'.png'; +// file_put_contents($job_image,file_get_contents($image)); +// \think\Image::open($job_image)->thumb(637,352,\think\Image::THUMB_CENTER)->save($job_image); +// +// $path_ttf = ROOT_PATH.'public/assets/fonts/PingFang.ttf'; +// $filename = $dir.'/'.$job_id.'.png'; +// +// $image = \think\Image::open(ROOT_PATH.'public/assets/img/miniProgram/job_back_v2.png'); +// // 职位名称居中 +// $size = 30; +// $box1 = imagettfbbox($size, 0, $path_ttf, $job['job_name']); +// $box1_minx = min($box1[0], $box1[2], $box1[4], $box1[6]); +// $box1_maxx = max($box1[0], $box1[2], $box1[4], $box1[6]); +// /* 计算文字初始坐标和尺寸 */ +// $w = $box1_maxx - $box1_minx; +// $box1_minx += ($image->width() - $w) / 2; +// +// // 工价 +// $size_11 = 25; +// $factory_price_total = '工价:'.$job['factory_price_total'].'元/小时'; +// $box2 = imagettfbbox($size_11, 0, $path_ttf, $factory_price_total); +// $box2_minx = min($box2[0], $box2[2], $box2[4], $box2[6]); +// $box2_maxx = max($box2[0], $box2[2], $box2[4], $box2[6]); +// /* 计算文字初始坐标和尺寸 */ +// $w = $box2_maxx - $box2_minx; +// $box2_minx += $image->width() - $w - 106; +// +// // 工资 +// $salary = '工资:'.$job['salary']; +// $box3 = imagettfbbox($size_11, 0, $path_ttf, $salary); +// $box3_minx = min($box3[0], $box3[2], $box3[4], $box3[6]); +// $box3_maxx = max($box3[0], $box3[2], $box3[4], $box3[6]); +// /* 计算文字初始坐标和尺寸 */ +// $w = $box3_maxx - $box3_minx; +// $box3_minx += $image->width() - $w - 106; +// +// // 备注居中 +// $last_text = '码上报名'; +// $box4 = imagettfbbox($size, 0, $path_ttf, $last_text); +// $box4_minx = min($box4[0], $box4[2], $box4[4], $box4[6]); +// $box4_maxx = max($box4[0], $box4[2], $box4[4], $box4[6]); +// /* 计算文字初始坐标和尺寸 */ +// $w = $box4_maxx - $box4_minx; +// $box4_minx += ($image->width() - $w) / 2; +// +// $image->water($job_image,[25,25]) +// ->text($job['job_name'],$path_ttf,$size,'#323233',[$box1_minx,411]) +// ->text($job['job_name'],$path_ttf,$size,'#323233',[$box1_minx+1,411]) //画两遍,加粗 +// ->text($factory_price_total,$path_ttf,$size_11,'#323233',[$box2_minx,477]) +// ->text($factory_price_total,$path_ttf,$size_11,'#323233',[$box2_minx+1,477]) +// ->text($salary,$path_ttf,$size_11,'#323233',[$box3_minx,532]) +// ->text($salary,$path_ttf,$size_11,'#323233',[$box3_minx+1,532]) +// ->text($last_text,$path_ttf,$size,'#FE9515',[$box4_minx,641]) +// ->text($last_text,$path_ttf,$size,'#FE9515',[$box4_minx+1,641]) +// ->water($qrcode,[249,698]) +// ->save($filename); +// $url = request()->domain().'/'.$filename.'?v='.time(); + $url = request()->domain().'/'.$qrcode.'?v='.time(); $this->success('成功',compact('url')); } diff --git a/application/api/controller/Sms.php b/application/api/controller/Sms.php index b1c1410..f3fdd30 100644 --- a/application/api/controller/Sms.php +++ b/application/api/controller/Sms.php @@ -9,6 +9,7 @@ use think\Hook; /** * 手机短信接口 + * @ApiWeigh(2) */ class Sms extends Api { diff --git a/application/api/controller/Token.php b/application/api/controller/Token.php index 75b280a..f25d030 100644 --- a/application/api/controller/Token.php +++ b/application/api/controller/Token.php @@ -7,6 +7,7 @@ use fast\Random; /** * Token接口 + * @ApiWeigh(2) */ class Token extends Api { @@ -14,8 +15,20 @@ class Token extends Api protected $noNeedRight = '*'; /** - * 检测Token是否过期 - * + * @ApiWeigh (99) + * @ApiTitle (检测Token是否过期) + * @ApiSummary (检测Token是否过期) + * @ApiMethod (GET) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiReturn({ + "code": 1, + "msg": "", + "time": "1621402970", + "data": { + "token": "545eed64-39c4-437e-8285-ac94c03e4921", //token + "expires_in": 2591951 //剩余有效时间 + } + }) */ public function check() { @@ -25,8 +38,20 @@ class Token extends Api } /** - * 刷新Token - * + * @ApiWeigh (97) + * @ApiTitle (刷新Token) + * @ApiSummary (刷新Token) + * @ApiMethod (GET) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiReturn({ + "code": 1, + "msg": "", + "time": "1621403556", + "data": { + "token": "175c6d84-42af-4c59-bce0-ad8a66eb5f3f", //token + "expires_in": 2592000 //剩余有效时间 + } + }) */ public function refresh() { diff --git a/application/api/controller/User.php b/application/api/controller/User.php index 0e6b010..796c861 100644 --- a/application/api/controller/User.php +++ b/application/api/controller/User.php @@ -5,27 +5,40 @@ namespace app\api\controller; use app\common\controller\Api; use app\common\library\Ems; use app\common\library\Sms; +use app\common\model\Inform; use fast\Random; use fast\Tree; +use think\Exception; +use think\exception\PDOException; use think\Validate; use think\Db; use addons\third\model\Third; use app\api\model\Realname; use app\api\model\UserKeyword; +use app\api\model\UserWorkLog; +use app\api\model\UserWorkSubsidyLog; +use app\api\model\UserRecruitSubsidyLog; +use app\api\model\UserSalary; +use app\api\model\Factory; +use app\api\model\FactoryUser; +use app\api\model\UserBorrow; use app\common\controller\Wechat; /** * 会员接口 + * @ApiWeigh(2) */ class User extends Api { - protected $noNeedLogin = ['login', 'mobilelogin', 'register', 'resetpwd', 'changeemail', 'changemobile', 'third','get_session_key','authority','getPhoneNumber','workSubsidyContent','recruitSubsidyContent']; + protected $noNeedLogin = ['login', 'mobilelogin', 'register', 'resetpwd', 'changeemail', 'changemobile', 'third','get_session_key','authority','getPhoneNumber','workSubsidyContent','recruitSubsidyContent','factoryList']; protected $noNeedRight = '*'; // 用户列表 public $user_list = []; // 可查看几级下级 public $lower_num = 0; + // 我的下级用户ID + public $my_children_ids = []; public function _initialize() { @@ -51,38 +64,125 @@ class User extends Api "nickname": "admin", //昵称 "mobile": "13888888888", //手机号 "avatar": "/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //原始头像地址 - "is_work": "0", //是否在职:0=否,1=是 - "work_subsidy": "2.00", //工时补贴价格(元/时) - "work_subsidy_month": "600.00", //工时月工资(元/月) - "recruit_subsidy_month": "300.00", //招聘月工资(元/月) - "url": "/u/1", - "realname_status": "0", // 实名认证状态:-1=未申请,0=申请中,1=通过,2=未通过 - "full_avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //完整头像地址 - }, - "recruit_subsidy": { - "hour": "1.00", //招聘补贴价格(元/时) - "day": "10.00", //招聘补贴价格(元/天) - "month": "300.00" //招聘补贴价格(元/月) + "is_work": "1", //是否在职:0=否,1=是 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } } } }) */ public function index() { - $user = $this->auth->getUser(); - // 格式化头像 - $user->full_avatar = cdnurl($user->avatar,true); - // 实名认证状态 - $realname = Realname::get(['user_id'=>$this->auth->id]); - $user->realname_status = empty($realname) ? '-1' : $realname['status']; - $user->visible(['id','avatar','nickname','mobile','is_work','work_subsidy','work_subsidy_month','recruit_subsidy_month'])->append(['realname_status','full_avatar']); - // 招聘补贴 - $recruit_subsidy = [ - 'hour' => sprintf("%.2f",config('site.recruit_subsidy')), - 'day' => sprintf("%.2f",config('site.recruit_subsidy') * 10), - 'month' => sprintf("%.2f",config('site.recruit_subsidy') * 10 * 30), + $user = $this->model->get($this->auth->id,['factory']); + // 未入职工厂 + if(!$user->getRelation('factory')){ + $user['is_work'] = '0'; + $user['factory'] = ''; + } + $user->visible(['id','avatar','nickname','mobile','is_work','factory']); + $this->success('成功', compact('user')); + } + + /** + * @ApiWeigh (97) + * @ApiTitle (劳务管理-工资) + * @ApiSummary (劳务管理-工资) + * @ApiMethod (POST) + * + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") + * + * @ApiReturn({ + "code": 1, + "msg": "成功", + "time": "1612234313", + "data": { + "work_hours_month": "0.0", //本月打卡总工时 + "work_salary_month": "0.00", //本月打卡工资 + "work_subsidy": "2.00", //工时补贴(元/小时) + "work_subsidy_month": 0, //本月工时补贴 + "lower_work_hours_month": 0, //下级打卡总工时 + "recruit_subsidy_month": 0, //下级招聘补贴工资 + "salary": 0 //本月共收入 + "notice" : "通知内容" // 通知 + } + }) + */ + public function salary() + { + $user = $this->model->get($this->auth->id); + // 我的下级本月总工时和本月返我的总招聘补贴 + $lower_work_hours_month = $this->model + ->where('pid',$user['id']) + ->where('is_work','1') + ->sum('work_hours_month'); + // 我的本月共收入 + $salary = UserSalary::where('user_id',$user['id']) + ->where('year_month',date('Y-m')) + ->value('salary'); + if(!$salary){ + $salary = $user['work_salary_month'] + $user['work_subsidy_month'] + $user['recruit_subsidy_month']; + } + $data = [ + 'work_hours_month' => $user['work_hours_month'], + 'work_salary_month' => $user['work_salary_month'], + 'work_subsidy' => ($user['is_work'] == '1' && $user['factory']) ? $user['factory']['work_subsidy'] : 0, + 'work_subsidy_month' => $user['work_subsidy_month'], + 'lower_work_hours_month' => $lower_work_hours_month, + 'recruit_subsidy_month' => $user['recruit_subsidy_month'], + 'salary' => $salary, + 'notice' => config('site.notice'), ]; - $this->success('成功', compact('user','recruit_subsidy')); + $this->success('成功', $data); + } + + /** + * @ApiWeigh (97) + * @ApiTitle (劳务管理-工资-历史收入) + * @ApiSummary (劳务管理-工资-历史收入) + * @ApiMethod (POST) + * + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") + * @ApiParams (name="page", type="inter", required=false, description="当前页(默认1)") + * @ApiParams (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)") + * + * @ApiReturn({ + "code": 1, + "msg": "成功", + "time": "1620612745", + "data": { + "total": 1, + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 32, + "user_id": 711, + "salary": "600.00", //总工资 + "year_month": "2021年04月", //月份 + "createtime": 1615769765, + "updatetime": 1615769765, + "work_hours": "0.0", //总工时 + "work_subsidy": "0.00", //在职奖励 + "recruit_subsidy": "0.00", //推荐奖励 + "status": "0" //状态:0=待审核,1=已结算 + }] + } + }) + */ + public function salaryList() + { + $page = $this->request->param('page', 1, 'intval'); + $page_num = $this->request->param('page_num', 10, 'intval'); + $data = UserSalary::where('user_id',$this->auth->id) + ->order('createtime desc') + ->paginate($page_num,false,['page'=>$page]) + ->each(function($v){ + // 格式化年月 + $v->year_month = date('Y年m月',strtotime($v['year_month'])); + }); + $this->success('成功', $data); } /** @@ -193,7 +293,7 @@ class User extends Api } /** - * @ApiWeigh (97) + * @ApiWeigh (95) * @ApiTitle (编辑资料) * @ApiSummary (编辑资料) * @ApiMethod (POST) @@ -381,7 +481,190 @@ class User extends Api } /** - * @ApiWeigh (95) + * @ApiWeigh (94) + * @ApiTitle (工厂列表) + * @ApiSummary (工厂列表) + * @ApiMethod (POST) + * @ApiReturn ({ + "code": 1, + "msg": "入职成功后,驻厂将会为您服务", + "time": "1612233294", + "data": [{ + "id": 1, //工厂ID + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "" //工厂简称 + }] + }) + */ + public function factoryList() + { + $list = Factory::field('id,factory_name,factory_shortname')->select(); + $this->success('入职成功后,驻厂将会为您服务',$list); + } + + /** + * @ApiTitle 热门工厂 + * @ApiMethod (POST) + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1620371474", + "data": [{ + "id": 20, //工厂id + "factory_name": "中天世纪实业有限公司", //工厂名称 + "factory_shortname": "中天世纪实业有限公司" //工厂简称 + }] + }) + */ + public function hot(){ + $list = Factory::where(['hotdata'=>'1'])->field('id,factory_name,factory_shortname')->select(); + $this->success('成功',$list); + } + + + /** + * @ApiWeigh (94) + * @ApiTitle (工厂搜索列表) + * @ApiSummary (工厂搜索列表) + * @ApiMethod (POST) + * @ApiParams (name="factory_name", type="string", required=true, description="工厂名称") + * @ApiParams (name="page", type="string", required=true, description="分页") + * @ApiReturn ({ + "code": 1, + "msg": "入职成功后,驻厂将会为您服务", + "time": "1620372317", + "data": { + "total": 2, + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 1, //工厂id + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "新美亚" //工厂简称 + }] + } + }) + */ + public function factory() + { + $factory_name = $this->request->param('factory_name'); + $where= []; + if (!empty($factory_name)){ + $where['factory_name'] = ['like', '%' . $factory_name . '%']; + } + $list = Factory::where($where)->field('id,factory_name,factory_shortname')->paginate(); + $this->success('入职成功后,驻厂将会为您服务',$list); + } + + /** + * @ApiWeigh (93) + * @ApiTitle (确认入职) + * @ApiSummary (确认入职) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiParams (name="factory_id", type="inter", required=true, description="工厂ID") + * @ApiParams (name="join_time", type="inter", required=true, description="入职时间") + * @ApiReturn ({ + 'code':'1', + 'msg':'返回成功', + "data": null + }) + */ + public function joinFactory() + { + $user = $this->model->get($this->auth->id); + $factory_id = $this->request->param('factory_id'); + $join_time= $this->request->param('join_time'); + empty($factory_id) && $this->error('缺少必需参数'); + $factory = Factory::get($factory_id); + empty($factory) && $this->error('工厂不存在'); + if($user['is_work'] == '1' && $user['factory']){ + $this->error('已入职,确认入职无效'); + } + $has = FactoryUser::where('user_id',$user['id'])->order('createtime desc')->find(); + if(!empty($has)){ + $has['status'] == '0' && $this->error('正在审核中,请勿重复操作'); + } + FactoryUser::create([ + 'user_id' => $user['id'], + 'factory_id' => $factory_id, + 'join_time' =>$join_time, + ]); + $this->success('入职成功后,驻厂将会为您服务'); + } + + /** + * @ApiTitle 入职页面文本 + * @ApiMethod (POST) + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1620373282", + "data": "1.输入入职工厂\r\n2.选择工厂,提交入职" //文本内容 + }) + */ + public function con(){ + $content = config('site.content'); + $this->success('成功',$content); + } + + + /** + * @ApiWeigh (91) + * @ApiTitle (办理离职) + * @ApiSummary (办理离职) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiParams (name="factory_id", type="inter", required=true, description="工厂ID") + * @ApiReturn ({ + 'code':'1', + 'msg':'返回成功', + "data": null + }) + */ + public function quitFactory() + { + $factory_id = $this->request->param('factory_id'); + empty($factory_id) && $this->error('缺少必需参数'); + $factory = Factory::get($factory_id); + empty($factory) && $this->error('入职企业不存在'); + $user = $this->auth->getUser(); + if(empty($user['factory_id']) || $user['is_work'] == '0'){ + $this->error('未入职'); + } + $user['factory_id'] != $factory_id && $this->error('未入职该工厂'); + $factory_user = FactoryUser::where('user_id',$this->auth->id) + ->where('factory_id',$factory_id) + ->where('status','1') + ->find(); + if(!$factory_user){ + $factory_user = new FactoryUser; + } + Db::startTrans(); + try { + // 记录离职状态 + $factory_user->save([ + 'factory_id' => $factory_id, + 'user_id' => $this->auth->id, + 'status' => '3', + 'quit_time' => time(), + ]); + // 修改用户为未入职 + $user->save(['is_work'=>'0','factory_id'=>0,'join_time'=>0]); + Db::commit(); + } catch (PDOException $e) { + Db::rollback(); + $this->error($e->getMessage()); + } catch (Exception $e) { + Db::rollback(); + $this->error($e->getMessage()); + } + $this->success('离职后之前数据将会暂停'); + } + + /** + * @ApiWeigh (89) * @ApiTitle (实名认证) * @ApiSummary (实名认证) * @ApiMethod (POST) @@ -389,8 +672,7 @@ class User extends Api * @ApiParams (name="realname", type="string", required=true, description="姓名") * @ApiParams (name="idcard", type="string", required=true, description="身份证号") * @ApiParams (name="mobile", type="string", required=true, description="手机号") - * @ApiParams (name="idcard_front", type="string", required=true, description="上传身份证正面") - * @ApiParams (name="idcard_back", type="string", required=true, description="上传身份证反面") + * @ApiParams (name="idcard_front", type="string", required=true, description="上传收款码") * @ApiReturn ({ 'code':'1', 'msg':'返回成功', @@ -402,11 +684,12 @@ class User extends Api $post = $this->request->param(); empty($post['realname']) && $this->error('请填写姓名'); empty($post['idcard']) && $this->error('请填写身份证号'); - empty($post['realname']) && $this->error('请填写姓名'); empty($post['mobile']) && $this->error('请填写手机号'); - empty($post['idcard_front']) && $this->error('请上传身份证正面'); - empty($post['idcard_back']) && $this->error('请上传身份证反面'); + empty($post['idcard_front']) && $this->error('请上传收款码'); +// empty($post['idcard_back']) && $this->error('请上传身份证反面'); $realname = Realname::get(['user_id'=>$this->auth->id]); + $realname['status'] == '0' && $this->error('认证正在审核中,请勿重复操作'); + $realname['status'] == '1' && $this->error('实名认证已通过审核,请勿重复操作'); if(empty($realname)){ $realname = new Realname; } @@ -418,7 +701,52 @@ class User extends Api } /** - * @ApiWeigh (93) + * @ApiTitle 认证页面通知 + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1620439310", + "data": { + "id": 3, //通知id + "content": "认证通知" //通知内容 + } + }) + */ + public function give(){ + $inform= new Inform; + $reclist = $inform + ->where(['status'=>'2']) + ->order('id desc') + ->field('id,content') + ->find(); + $this->success('成功',$reclist); + } + + + /** + * @ApiWeigh (87) + * @ApiTitle (实名认证状态) + * @ApiSummary (实名认证状态) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiReturn ({ + 'code':'1', + 'msg':'返回成功', + "data": { + 'status': '1', // 实名认证状态:0=申请中,1=通过,2=未申请 + } + }) + */ + public function realnameStatus() + { + // 实名认证状态 + $info = Realname::get(['user_id'=>$this->auth->id]); + $status = empty($info) ? '2' : $info['status']; + $this->success('成功',compact('status')); + } + + /** + * @ApiWeigh (85) * @ApiTitle (code获取session_key和openid) * @ApiSummary (code获取session_key和openid) * @ApiMethod (POST) @@ -431,6 +759,7 @@ class User extends Api "data": { "session_key": "1qyMwZRVdlBmQLwRYtYSgA==", "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", + "openid": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", } }) */ @@ -466,13 +795,14 @@ class User extends Api } /** - * @ApiWeigh (91) + * @ApiWeigh (83) * @ApiTitle (用户授权登录) * @ApiSummary (用户授权登录) * @ApiMethod (POST) * @ApiParams (name="sessionKey", type="string", required=true, description="小程序sessionKey") * @ApiParams (name="iv", type="string", required=true, description="小程序iv") * @ApiParams (name="encryptData", type="string", required=true, description="小程序encryptData") + * @ApiParams (name="openid", type="string", required=true, description="openid") * @ApiParams (name="user_id", type="inter", required=false, description="扫码获取的用户ID") * @ApiReturnParams (name="code", type="integer", required=true, sample="0") * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功") @@ -488,6 +818,7 @@ class User extends Api { $param = $this->request->param(); $pid = isset($param['user_id']) ? $param['user_id'] : 0; //上级ID + \think\Log::write('授权登录user_id:'.$pid); $validate = new \think\Validate([ 'sessionKey' => 'require', 'iv' => 'require', @@ -504,8 +835,14 @@ class User extends Api // 获取小程序配置 $app = Wechat::miniProgram(); $user_info = $app->encryptor->decryptData($param['sessionKey'], $param['iv'], $param['encryptData']); + + // 2021年4月13之后的获取不到openid + if(empty($user_info['openId'])){ + empty($param['openid']) && $this->error('传参缺少openid'); + $user_info['openId'] = $param['openid']; + } + // 判断用户是否授权 - $user_model = new \app\common\model\User(); $where = [ 'openid' => $user_info['openId'] ]; @@ -516,10 +853,10 @@ class User extends Api $ip = request()->ip(); $time = time(); // 更新用户信息 - $user = $user_model->get($third['user_id']); + $user = $this->model->get($third['user_id']); // 账号被删除重新添加 if(!$user){ - $user = $user_model; + $user = $this->model; $user->id = $third['user_id']; $user->nickname = $user_info['nickName']; $user->avatar = $user_info['avatarUrl']; @@ -553,11 +890,11 @@ class User extends Api 'prevtime' => $time, 'pid' => $this->model->get($pid) ? $pid : 0 //上级ID ]; - $result = $user_model->save($user_insert); - $user_id = $user_model->getLastInsID(); + $result = $this->model->save($user_insert); + $user_id = $this->model->getLastInsID(); // 生成小程序二维码 // $minicode = makeQrcode($user_id,'user_qrcode'.$user_id.'.png','pages/clock/clock'); -// $user_model->isUpdate(true)->save(['qrcode'=>$minicode],['id'=>$user_id]); +// $this->model->isUpdate(true)->save(['qrcode'=>$minicode],['id'=>$user_id]); $third_insert = [ 'user_id' => $user_id, 'platform' => 'wechat', @@ -591,7 +928,7 @@ class User extends Api } /** - * @ApiWeigh (89) + * @ApiWeigh (81) * @ApiTitle (用户授权获取手机号) * @ApiSummary (用户授权获取手机号) * @ApiMethod (POST) @@ -639,13 +976,13 @@ class User extends Api // 新用户绑定手机号 $third = Third::where('openid',$param['openid'])->find(); if(!empty($data['phoneNumber']) && $third){ - Db::name('user')->where('id',$third['user_id'])->update(['mobile'=>$data['phoneNumber']]); + $this->model->where('id',$third['user_id'])->update(['mobile'=>$data['phoneNumber']]); } $this->success('授权成功',$data); } /** - * @ApiWeigh (87) + * @ApiWeigh (79) * @ApiTitle (工时补贴介绍) * @ApiSummary (工时补贴介绍) * @ApiMethod (POST) @@ -662,7 +999,7 @@ class User extends Api } /** - * @ApiWeigh (85) + * @ApiWeigh (77) * @ApiTitle (招聘补贴介绍) * @ApiSummary (招聘补贴介绍) * @ApiMethod (POST) @@ -679,7 +1016,370 @@ class User extends Api } /** - * @ApiWeigh (85) + * @ApiWeigh (75) + * @ApiTitle (记一笔工时) + * @ApiSummary (记一笔工时) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiParams (name="work_date", type="string", required=true, description="工作日期") + * @ApiParams (name="work_hours", type="string", required=true, description="工作时长") + * @ApiParams (name="work_price", type="string", required=true, description="工价") + * @ApiParams (name="work_type", type="string", required=true, description="班次:1=白班,2=夜班,3=休班") + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1606124276", + "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 + }) + */ + public function logWork(){ + $user = $this->model->get($this->auth->id); + $post = $this->request->param(); + empty($post['work_date']) && $this->error('请选择工作日期'); + $post['work_date'] = strtotime($post['work_date']) + 1; //日期转时间戳,加1为了用whereTime + $post['work_date'] >= strtotime('+1days',strtotime(date('Y-m-d'))) && $this->error('打卡日期不能大于今天'); + empty($post['work_type']) && $this->error('请选择班次'); + $work_salary = 0; + if($post['work_type'] != '3'){ + empty($post['work_hours']) && $this->error('请选择工作时长'); + empty($post['work_price']) && $this->error('请填写工价'); + $work_salary = round($post['work_hours'] * $post['work_price'],2); + } + $log = UserWorkLog::where('user_id',$user['id'])->where('work_date',$post['work_date'])->find(); + if(!$log){ + $log = new UserWorkLog; + } + // 记录连续打卡天数 + $yesterday = UserWorkLog::where('user_id',$user['id']) + ->where('work_type','in','1,2') + ->whereTime('work_date','yesterday') + ->find(); + $today = UserWorkLog::where('user_id',$user['id']) + ->where('work_type','in','1,2') + ->whereTime('work_date','today') + ->find(); + $log_days = $user['log_days'] == 0 ? 1 : ($yesterday && !$today ? ($user['log_days'] + 1) : $user['log_days']); + Db::startTrans(); + try { + /*记录打卡*/ + $log->save(array_merge([ + 'user_id' => $user['id'], + 'work_salary' => $work_salary + ],$post)); + /*更新用户数据*/ + $update_data = []; + // 更新本月工时、本月打卡工资和本月打卡次数 + if(date('Y-m',$post['work_date']) == date('Y-m')){ + // 本月工时 + $update_data['work_hours_month'] = UserWorkLog::where('user_id',$user['id']) + ->where('work_type','in','1,2') + ->whereTime('work_date','month') + ->sum('work_hours'); + // 本月打卡工资 + $update_data['work_salary_month'] = UserWorkLog::where('user_id',$user['id']) + ->where('work_type','in','1,2') + ->whereTime('work_date','month') + ->sum('work_salary'); + // 记录入职打卡工厂 + if($user['is_work'] == '1' && !empty($user['factory'])){ + $log->isUpdate(true)->save(['factory_id'=>$user['factory']['id']]); + } + // 本月打卡次数 + $update_data['log_days_month'] = UserWorkLog::where('user_id',$user['id']) + ->whereTime('work_date','month') + ->count(); + } + $update_data['log_days'] = $log_days; + if($update_data){ + $user->save($update_data); + } + // 计算该月工资 + $this->salaryCalculate($log,$user); + Db::commit(); + } catch (PDOException $e) { + Db::rollback(); + $this->error($e->getMessage()); + } catch (Exception $e) { + Db::rollback(); + $this->error($e->getMessage()); + } + $this->success('打卡成功'); + } + + /** + * @ApiInternal + * @ApiTitle (计算该月工资) + * @ApiSummary (计算该月工资) + */ + private function salaryCalculate($log,$user){ + /*记录该月工时补贴和招聘补贴*/ + if(!empty($log['factory_id'])){ + // 工时补贴 + $find1 = UserWorkSubsidyLog::get(['user_work_log_id'=>$log['id']]); + if(!$find1){ + $find1 = new UserWorkSubsidyLog; + } + $work_subsidy = $log['factory'] ? $log['factory']['work_subsidy'] : 1; + $find1->save([ + 'user_id' => $user['id'], + 'work_subsidy' => round($work_subsidy * $log['work_hours'],2), + 'work_date' => $log['work_date'], + 'user_work_log_id' => $log['id'], + ]); + // 招聘补贴上一级 + $parent = $this->model->get($user['pid']); + if($parent){ + $find2 = UserRecruitSubsidyLog::get(['user_work_log_id'=>$log['id'],'leave'=>0]); + if(!$find2){ + $find2 = new UserRecruitSubsidyLog; + } + $find2->save([ + 'user_id' => $user['pid'], + 'recruit_subsidy' => round($user['recruit_subsidy'] * $log['work_hours'],2), + 'work_date' => $log['work_date'], + 'children_id' => $user['id'], + 'user_work_log_id' => $log['id'], + 'leave' => 0, + ]); + // 招聘补贴上二级 + $pid2 =$this->mobel->where(['id'=>$parent['pid']])->find(); + if($pid2){ + $find2 = UserRecruitSubsidyLog::get(['user_work_log_id'=>$log['id'],'leave'=>1]); + if(!$find2){ + $find2 = new UserRecruitSubsidyLog; + } + $find2->save([ + 'user_id' => $pid2['pid'], + 'recruit_subsidy' => round($user['recruit_subsidy2'] * $log['work_hours'],2), + 'work_date' => $log['work_date'], + 'children_id' => $user['id'], + 'user_work_log_id' => $log['id'], + 'leave' => 1, + ]); + } + } + } + /*记录该月总工资*/ + $year_month = date('Y-m',$log['work_date']); + $user_salary = UserSalary::where('user_id',$user['id']) + ->where('year_month',$year_month) + ->find(); + if(!$user_salary){ + $user_salary = new UserSalary; + } + $month_start = strtotime($year_month); + $month_end = strtotime('+1 month',$month_start); + $work_salary_total = UserWorkLog::where('user_id',$user['id']) + ->where('work_type','in','1,2') + ->where("work_date >= {$month_start} and work_date < {$month_end}") + ->sum('work_salary'); //月打卡总工资 + $work_hours = UserWorkLog::where('user_id',$user['id']) + ->where('work_type','in','1,2') + ->where("work_date >= {$month_start} and work_date < {$month_end}") + ->sum('work_hours'); //总工时 + $work_subsidy_total = UserWorkSubsidyLog::where('user_id',$user['id']) + ->where("work_date >= {$month_start} and work_date < {$month_end}") + ->sum('work_subsidy'); //月工时总补贴 + $recruit_subsidy_total = UserRecruitSubsidyLog::where('user_id',$user['id']) + ->where("work_date >= {$month_start} and work_date < {$month_end}") + ->sum('recruit_subsidy'); //月招聘总补贴 + $user_salary->save([ + 'user_id' => $user['id'], + 'salary' => round($work_salary_total + $work_subsidy_total + $recruit_subsidy_total,2), + 'year_month' => $year_month, + 'work_hours' => $work_hours, + 'work_subsidy' => $work_subsidy_total, + 'recruit_subsidy' => $recruit_subsidy_total, + 'status' => '0', + ]); + + // 本月的工时补贴和招聘补贴 + if($user['is_work'] == '1' && !empty($user['factory']) && $year_month == date('Y-m')){ + // 本月工时补贴统计 + $user->isUpdate(true)->save(['work_subsidy_month'=>$work_subsidy_total]); + // 给上级返招聘补贴 + $parent = $this->model->get($user['pid']); + if($parent){ + $parent->save(['recruit_subsidy_month'=>UserRecruitSubsidyLog::where('user_id',$user['pid']) + ->where("work_date >= {$month_start} and work_date < {$month_end}") + ->sum('recruit_subsidy')]); + } + } + return true; + } + + /** + * @ApiWeigh (73) + * @ApiTitle (工时详情) + * @ApiSummary (工时详情) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiParams (name="work_date", type="string", required=true, description="工作日期") + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1612340182", + "data": { + "id": 18, //ID + "user_id": 72, + "work_date": "2021-02-02", //工作日期 + "work_hours": "4.5", //工时时长 + "work_price": "20.00", //工价 + "work_salary": "90.00", //今日收入 + "work_type": "1", //班次:1=白班,2=夜班,3=休班 + "createtime": 1612279627, + "updatetime": 1612279627 + } + }) + */ + public function workLogInfo(){ + $work_date = $this->request->param('work_date'); + $work_date = strtotime($work_date) + 1; + $info = UserWorkLog::where('user_id',$this->auth->id)->where('work_date',$work_date)->find(); + $info['work_date'] = empty($info) ? date('Y-m-d') : date('Y-m-d',$info['work_date']); + $this->success('成功',$info); + } + + /** + * @ApiWeigh (71) + * @ApiTitle (工时统计图) + * @ApiSummary (工时统计图) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiParams (name="month", type="string", required=true, description="年月") + * @ApiReturn ({ + "code": 1, + "msg": "打卡成功", + "time": "1612279947", + "data": { + "work_hours_month": 9, //工时时长 + "work_salary_month": 180, //收入 + "list": [{ //本月数据 + "id": 14, + "work_date": "01", //打卡日期 + "work_hours": "4.5", //工时 + "work_type": "1", //班次:1=白班,2=夜班,3=休班 + }] + } + }) + */ + public function workLogList(){ + $month = $this->request->param('month'); + empty($month) && $this->error('缺少必需参数'); + $starttime = strtotime($month); + $endtime = strtotime('+1 month',$starttime) - 1; + $list = UserWorkLog::where('user_id',$this->auth->id) + ->where('work_date','between',[$starttime,$endtime]) + ->field('id,work_date,work_hours,work_type,work_salary') + ->select(); + // 打卡日期只显示当月日 + $arr = ['1'=>'白班','2'=>'夜班','3'=>'休班']; + foreach ($list as $v){ + $v['work_date'] = date('d',$v['work_date']); + if($v['work_type'] == '3'){ + $v['work_hours'] = 0; + } + $v['work_type'] = !empty($arr[$v['work_type']]) ? $arr[$v['work_type']] : '错误'; + } + $work_hours_month = array_sum(array_column($list,'work_hours')); + $work_salary_month = array_sum(array_column($list,'work_salary')); + $this->success('打卡成功',compact('work_hours_month','work_salary_month','list')); + } + + /** + * @ApiWeigh (69) + * @ApiTitle (借支-打卡天数) + * @ApiSummary (借支-打卡天数) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1612319531", + "data": { + "log_days": 1, //连续打卡天数 + "limit_days": 7, //打卡满7天 + "borrow_money": "300.00" //借支金额 + } + }) + */ + public function logDays(){ + $user = $this->auth->getUser(); + if($user['is_work'] == '0' || !$user['factory_id']){ + $this->error('抱歉,未入职不可申请'); + } + $factory = Factory::get($user['factory_id']); + empty($factory) && $this->error('您入职的工厂已被删除,请选择其他工厂入职'); + $this->success('成功',[ + 'log_days' => $user['log_days'], + 'limit_days' => 7, + 'borrow_money' => $factory['borrow_money'] + ]); + } + + /** + * @ApiWeigh (67) + * @ApiTitle (借支) + * @ApiSummary (借支) + * @ApiMethod (POST) + * @ApiHeaders (name="token", type="string", required=true, description="请求的token") + * @ApiParams (name="is_confirm", type="inter", required=true, description="是否确认:0=否,1=是") + * @ApiReturn ({ + "code": 1, //1=完成,2=未满打卡,3=确认借支 + "msg": "成功", + "time": "1606124276", + "data": { + "log_days": 1, //连续打卡天数 + "limit_days": 7, //打卡满7天 + "borrow_money": "300.00" //借支金额 + } + }) + */ + public function borrow(){ + $user = $this->auth->getUser(); + $is_confirm = $this->request->param('is_confirm','0'); + if($user['is_work'] == '0' || !$user['factory_id']){ + $this->error('抱歉,未入职不可申请'); + } + $factory = Factory::get($user['factory_id']); + empty($factory) && $this->error('您入职的工厂已被删除,请选择其他工厂入职'); + $user_borrow = UserBorrow::where('user_id',$user['id']) + ->where('factory_id',$user['factory_id']) + ->where('status','0') + ->order('createtime desc') + ->find(); + !empty($user_borrow) && $this->error('借支正在审核中,无法再次申请'); + $limit_days = 7; + $data = [ + 'log_days' => $user['log_days'], + 'limit_days' => $limit_days, + 'borrow_money' => $factory['borrow_money'] + ]; + $user['log_days'] < $limit_days && $this->error('您已打卡'.$user['log_days'].'天,不满'.$limit_days.'天,条件不足无法申请借支',$data,2); + if(!$is_confirm){ + $this->error('您已打卡满'.$user['log_days'].'天,可借'.$factory['borrow_money'].'元,是否申请借支?',$data,3); + } + Db::startTrans(); + try { + $user->save(['log_days'=>0]); + UserBorrow::create([ + 'user_id' => $user['id'], + 'factory_id' => $user['factory_id'], + 'borrow_money' => $factory['borrow_money'] + ]); + Db::commit(); + } catch (PDOException $e) { + Db::rollback(); + $this->error($e->getMessage()); + } catch (Exception $e) { + Db::rollback(); + $this->error($e->getMessage()); + } + $this->success('本次借支已完成,请重新打卡满'.$limit_days.'天可申请借支',$data); + } + + /** + * @ApiWeigh (65) * @ApiTitle (分享) * @ApiSummary (分享) * @ApiMethod (POST) @@ -694,7 +1394,7 @@ class User extends Api */ public function userPoster() { - $user = \app\api\model\User::get($this->auth->id); + $user = $this->model->get($this->auth->id); empty($user['avatar']) && $this->error('请先上传头像'); !url_exists($user['avatar']) && $this->error('头像失效,请更新头像'); // 本地路径 @@ -702,50 +1402,153 @@ class User extends Api if (!file_exists($dir)){ mkdir($dir,0777,true); } - + // 用户小程序码 $qrcode = $dir.'/qrcode_'.$user['id'].'.png'; - if(!file_exists($qrcode)){ +// $qrcode_width = 338; + $qrcode_width = 1100; + if(!file_exists($qrcode) || imagesx(imagecreatefromjpeg(ROOT_PATH.'public/'.$qrcode)) != $qrcode_width){ $response = Wechat::miniProgram()->app_code->getUnlimit($user['id'], [ 'page' => 'pages/indexone/indexone', - 'width' => 280, //最小宽度280 + 'width' => $qrcode_width, //最小宽度280 ]); if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) { $response->saveAs($dir, str_replace($dir.'/','',$qrcode)); } // 280不满足,再缩小 - \think\Image::open($qrcode)->thumb(169,169,\think\Image::THUMB_CENTER)->save($qrcode); - } - - //将用户头像保存到本地 - $avatar = $dir.'/avatar_'.$user['id'].'.png'; - file_put_contents($avatar,file_get_contents($user['avatar'])); - \think\Image::open($avatar)->thumb(64,64,\think\Image::THUMB_CENTER)->save($avatar); - createRoundImg($avatar); - - $path_ttf = ROOT_PATH.'public/assets/fonts/PingFang.ttf'; - $filename = $dir.'/'.$user['id'].'.png'; - - $image = \think\Image::open(ROOT_PATH.'public/assets/img/miniProgram/user_back.png'); - // 昵称居中 - $nickname = $user['nickname']; - $size = 12; - $box1 = imagettfbbox($size, 0, $path_ttf, $nickname); - $box1_minx = min($box1[0], $box1[2], $box1[4], $box1[6]); - $box1_maxx = max($box1[0], $box1[2], $box1[4], $box1[6]); - /* 计算文字初始坐标和尺寸 */ - $w = $box1_maxx - $box1_minx; - $box1_minx += ($image->width() - $w) / 2; - $image->water($avatar,[156,52]) - ->text($nickname,$path_ttf,$size,'#020202',[$box1_minx,131]) - ->water($qrcode,[103,181]) - ->save($filename); - $url = request()->domain().'/'.$filename.'?v='.time(); + \think\Image::open($qrcode)->thumb($qrcode_width,$qrcode_width,\think\Image::THUMB_CENTER)->save($qrcode); //压缩kb + } + +// //将用户头像保存到本地 +// $avatar = $dir.'/avatar_'.$user['id'].'.png'; +// file_put_contents($avatar,file_get_contents($user['avatar'])); +// \think\Image::open($avatar)->thumb(128,128,\think\Image::THUMB_CENTER)->save($avatar); +// createRoundImg($avatar); +// +// $path_ttf = ROOT_PATH.'public/assets/fonts/PingFang.ttf'; +// $filename = $dir.'/'.$user['id'].'.png'; +// +// $image = \think\Image::open(ROOT_PATH.'public/assets/img/miniProgram/user_back_v2.png'); +// // 昵称居中 +// $nickname = $user['nickname']; +// $size = 30; +// $box1 = imagettfbbox($size, 0, $path_ttf, $nickname); +// $box1_minx = min($box1[0], $box1[2], $box1[4], $box1[6]); +// $box1_maxx = max($box1[0], $box1[2], $box1[4], $box1[6]); +// /* 计算文字初始坐标和尺寸 */ +// $w = $box1_maxx - $box1_minx; +// $box1_minx += ($image->width() - $w) / 2; +// $image->water($avatar,[312,104]) +// ->text($nickname,$path_ttf,$size,'#000000',[$box1_minx,262]) +// ->water($qrcode,[206,362]) +// ->save($filename); +// $url = request()->domain().'/'.$filename.'?v='.time(); + $url = request()->domain().'/'.$qrcode.'?v='.time(); $this->success('成功',compact('url')); } +// /** +// * @ApiWeigh (63) +// * @ApiTitle (下级) +// * @ApiSummary (下级) +// * @ApiMethod (POST) +// * @ApiHeaders (name="token", type="string", required=true, description="请求的token") +// * @ApiParams (name="page", type="inter", required=false, description="当前页(默认1)") +// * @ApiParams (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)") +// * @ApiParams (name="is_work", type="string", required=false, description="是否在职:0=否,1=是") +// * @ApiParams (name="keyword", type="string", required=false, description="关键字搜索") +// * @ApiReturn ({ +// "code": 1, +// "msg": "成功", +// "time": "1606359935", +// "data": { +// "total": 2, //总人数 +// "per_page": 15, +// "current_page": 1, +// "last_page": 1, +// "data": [{ +// "id": 3, //用户ID +// "nickname": "admin2", //昵称 +// "mobile": "13888888888", //手机号 +// "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 +// "is_work": "0", //是否在职 +// "is_complete": "0", //补贴是否完成:0=否,1=是 +// "give_recruit_subsidy": 2, //工资 +// "work_hours_month": "0.0", //本月总工时 +// "factory": { //工厂 +// "id": 1, //工厂ID +// "factory_shortname": "" //工厂简称 +// } +// }] +// } +// }) +// */ +// public function aaa() +// { +// $user = $this->auth->getUser(); +// $page = $this->request->param('page', 1, 'intval'); +// $page_num = $this->request->param('page_num', 10, 'intval'); +// $is_work = $this->request->param('is_work'); //是否在职:0=否,1=是 +// $keyword = $this->request->param('keyword'); +// // 可查看下级 +// if(!$this->my_children_ids){ +// $this->user_list = $this->model->where('status','normal')->field('id,pid')->select(); +//// $this->lower_num = $this->auth->lower_num; +// $this->lower_num = 2; +// $this->my_children_ids = $this->getChildrenIds($this->auth->id); +// } +// $where['id'] = ['in',$this->my_children_ids]; +//// $where['pid'] = $user['id']; //下一级 +// if($is_work != ''){ +// $where['is_work'] = $is_work; +// } +// // 关键字 +// if(!empty($keyword)){ +// // 记录搜索关键词 +// if($this->auth->id){ +// $has = UserKeyword::where('user_id',$this->auth->id) +// ->where('keyword',$keyword) +// ->find(); +// if(!$has){ +// $keyword_list = UserKeyword::order('createtime asc')->select(); +// // 超过10条的删除 +// if(count($keyword_list) > 10){ +// UserKeyword::where('id',$keyword_list[0]['id'])->delete(); +// } +// UserKeyword::create([ +// 'user_id' => $this->auth->id, +// 'keyword' => $keyword +// ]); +// }else{ +// $has->updatetime = time(); +// $has->save(); +// } +// } +// $where['nickname'] = ['like','%'.$keyword.'%']; +// } +// $data = $this->model +// ->with(['factory']) +// ->where($where) +// ->order('createtime desc') +// ->paginate($page_num,false,['page'=>$page]) +// ->each(function($v){ +// if(Validate::regex($v['mobile'], "^1\d{10}$")){ +// $v['mobile'] = substr_replace($v['mobile'],'*****',3,5); +// } +// $v->give_recruit_subsidy = round($v['recruit_subsidy']*$v['work_hours_month'],2); +// // 未入职工厂 +// if(!$v->getRelation('factory')){ +// $v['is_work'] = '0'; +// $v['factory'] = ''; +// } +// $v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','factory'])->append(['give_recruit_subsidy']); +// }); +// $this->success('成功',$data); +// } + + /** - * @ApiWeigh (83) + * @ApiWeigh (63) * @ApiTitle (下级) * @ApiSummary (下级) * @ApiMethod (POST) @@ -770,6 +1573,13 @@ class User extends Api "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 "is_work": "0", //是否在职 "is_complete": "0", //补贴是否完成:0=否,1=是 + "give_recruit_subsidy": 2, //工资 + "work_hours_month": "0.0", //本月总工时 + "num":'a', //标识:a为一级,b为二级 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } }] } }) @@ -777,14 +1587,23 @@ class User extends Api public function lowerList() { $user = $this->auth->getUser(); +// var_dump($user['id']); $page = $this->request->param('page', 1, 'intval'); $page_num = $this->request->param('page_num', 10, 'intval'); $is_work = $this->request->param('is_work'); //是否在职:0=否,1=是 $keyword = $this->request->param('keyword'); - $this->user_list = $this->model->where('status','normal')->field('id,pid')->select(); - $this->lower_num = $user['lower_num']; - $childrenIds = $this->getChildrenIds($user['id']); - $where['id'] = ['in',$childrenIds]; +// $where['pid'] = $user['id']; //下一级 + // 下二级 + $xia_ids = $this->model + ->where('pid',$user['id']) + ->column('id'); + if(!empty($xia_ids)){ + $xia_xia_ids = $this->model + ->where('pid','in',$xia_ids) + ->column('id'); + $xia_ids = $xia_xia_ids ? array_merge($xia_ids,$xia_xia_ids) : $xia_ids; + } + $where['id'] = $xia_ids ? ['in',$xia_ids] : 0; if($is_work != ''){ $where['is_work'] = $is_work; } @@ -813,6 +1632,7 @@ class User extends Api $where['nickname'] = ['like','%'.$keyword.'%']; } $data = $this->model + ->with(['factory']) ->where($where) ->order('createtime desc') ->paginate($page_num,false,['page'=>$page]) @@ -820,13 +1640,24 @@ class User extends Api if(Validate::regex($v['mobile'], "^1\d{10}$")){ $v['mobile'] = substr_replace($v['mobile'],'*****',3,5); } - $v->visible(['id','avatar','nickname','is_work','mobile','is_complete']); - })->toArray(); + $v->give_recruit_subsidy = round($v['recruit_subsidy']*$v['work_hours_month'],2); + // 未入职工厂 + if(!$v->getRelation('factory')){ + $v['is_work'] = '0'; + $v['factory'] = ''; + } + if ($v['pid'] == $this->auth->id){ + $v['num'] ='a'; + }else{ + $v['num'] ='b'; + } + $v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','factory'])->append(['give_recruit_subsidy','num']); + }); $this->success('成功',$data); } /** - * @ApiWeigh (81) + * @ApiWeigh (61) * @ApiTitle (搜索历史) * @ApiSummary (搜索历史) * @ApiMethod (POST) @@ -852,7 +1683,7 @@ class User extends Api } /** - * @ApiWeigh (79) + * @ApiWeigh (59) * @ApiTitle (搜索历史-清空) * @ApiSummary (搜索历史-清空) * @ApiMethod (POST) @@ -873,7 +1704,7 @@ class User extends Api } /** - * @ApiWeigh (77) + * @ApiWeigh (57) * @ApiTitle (下级的下级) * @ApiSummary (下级的下级) * @ApiMethod (POST) @@ -893,6 +1724,10 @@ class User extends Api "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 "is_work": "0", //是否在职:0=否,1=是 "is_complete": "0", //补贴是否完成:0=否,1=是 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } }, "list": { //下级的下级 "total": 3, //总数据 @@ -906,6 +1741,12 @@ class User extends Api "avatar": "", //头像 "is_work": "1", //是否在职:0=否,1=是 "is_complete": "0", //补贴是否完成:0=否,1=是 + "give_recruit_subsidy": 2, //工资 + "work_hours_month": "0.0", //本月总工时 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } }] } } @@ -917,17 +1758,24 @@ class User extends Api $page = $this->request->param('page', 1, 'intval'); $page_num = $this->request->param('page_num', 10, 'intval'); $is_work = $this->request->param('is_work'); //是否在职:0=否,1=是 - $this->user_list = $this->model->where('status','normal')->field('id,pid')->select(); empty($user_id) && $this->error('缺少必需参数'); - $user = $this->model->get($user_id); + $user = $this->model->get($user_id,['factory']); empty($user) && $this->error('下级用户信息不存在'); - $this->lower_num = $user['lower_num']; - $childrenIds = $this->getChildrenIds($user['id']); - $where['id'] = ['in',$childrenIds]; + + // 可查看下级 + if(!$this->my_children_ids){ + $this->user_list = $this->model->where('status','normal')->field('id,pid')->select(); + $this->lower_num = $this->auth->lower_num; + $this->my_children_ids = $this->getChildrenIds($this->auth->id); + } + $where['id'] = ['in',$this->my_children_ids]; + + $where['pid'] = $user_id; if($is_work != ''){ $where['is_work'] = $is_work; } $list = $this->model + ->with(['factory']) ->where($where) ->order('createtime desc') ->paginate($page_num,false,['page'=>$page]) @@ -935,12 +1783,18 @@ class User extends Api if(Validate::regex($v['mobile'], "^1\d{10}$")){ $v['mobile'] = substr_replace($v['mobile'],'*****',3,5); } - $v->visible(['id','avatar','nickname','is_work','mobile','is_complete']); - })->toArray(); + $v->give_recruit_subsidy = round($v['recruit_subsidy']*$v['work_hours_month'],2); + // 未入职工厂 + if(!$v->getRelation('factory')){ + $v['is_work'] = '0'; + $v['factory'] = ''; + } + $v->visible(['id','avatar','nickname','is_work','mobile','is_complete','work_hours_month','factory'])->append(['give_recruit_subsidy']); + }); if(Validate::regex($user['mobile'], "^1\d{10}$")){ $user['mobile'] = substr_replace($user['mobile'],'*****',3,5); } - $user->visible(['id','avatar','nickname','is_work','mobile','is_complete']); + $user->visible(['id','avatar','nickname','is_work','mobile','is_complete','factory']); $this->success('成功',compact('user','list')); } @@ -967,4 +1821,42 @@ class User extends Api } return $newarr; } + + /** + * @ApiTitle 劳务管理通知 + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1620294367", + "data": { + "id": 680, //通知id + "content": "恭喜您入驻搜房帝平台!" //通知内容 + } + }) + */ + public function record(){ + $is_work = $this->auth->is_work; //是否在职:0=否,1=是 + if ($is_work == 0){ //未入职 + $where['status'] = '0'; + $where['deletetime']=null; + $inform= new Inform; + $reclist = $inform + ->where($where) + ->order('id desc') + ->field('id,content') + ->find(); + } + if ($is_work == 1){ + $factory_id = $this->auth->factory_id; //工厂id//已入职 + $where['factory_id']=$factory_id; + $inform= new Inform; + $reclist = $inform + ->where($where) + ->order('id desc') + ->field('id,content') + ->find(); + } + $this->success('成功',$reclist); + } + } diff --git a/application/api/controller/Validate.php b/application/api/controller/Validate.php index f2d6b5c..b51cd24 100644 --- a/application/api/controller/Validate.php +++ b/application/api/controller/Validate.php @@ -7,6 +7,7 @@ use app\common\model\User; /** * 验证接口 + * @ApiWeigh(2) */ class Validate extends Api { diff --git a/application/api/controller/v2/Token.php b/application/api/controller/v2/Token.php index a16aa84..613caad 100644 --- a/application/api/controller/v2/Token.php +++ b/application/api/controller/v2/Token.php @@ -15,8 +15,20 @@ class Token extends Api protected $noNeedRight = '*'; /** - * 检测Token是否过期 - * + * @ApiWeigh (99) + * @ApiTitle (检测Token是否过期) + * @ApiSummary (检测Token是否过期) + * @ApiMethod (GET) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiReturn({ + "code": 1, + "msg": "", + "time": "1621402970", + "data": { + "token": "545eed64-39c4-437e-8285-ac94c03e4921", //token + "expires_in": 2591951 //剩余有效时间 + } + }) */ public function check() { @@ -26,8 +38,20 @@ class Token extends Api } /** - * 刷新Token - * + * @ApiWeigh (97) + * @ApiTitle (刷新Token) + * @ApiSummary (刷新Token) + * @ApiMethod (GET) + * @ApiHeaders (name="token", type="string", required=true, description="请求的Token") + * @ApiReturn({ + "code": 1, + "msg": "", + "time": "1621403556", + "data": { + "token": "175c6d84-42af-4c59-bce0-ad8a66eb5f3f", //token + "expires_in": 2592000 //剩余有效时间 + } + }) */ public function refresh() { diff --git a/application/api/model/Job.php b/application/api/model/Job.php index b7c707d..d8aa9e0 100644 --- a/application/api/model/Job.php +++ b/application/api/model/Job.php @@ -12,12 +12,28 @@ class Job extends Model // 定义时间戳字段名 protected $createTime = 'createtime'; protected $updateTime = 'updatetime'; + protected $append = [ + 'label_name', + ]; // 格式化封面图 public function getCoverAttr($value){ return empty($value) ? '' : cdnurl($value,true); } + //标签 + public function getLabelNameAttr($value,$data){ + if (empty($data['label_ids'])){ + return []; + } + $project_ids = explode(",", $data['label_ids']); + $project = []; + foreach ($project_ids as $j){ + $project[]= model('\app\common\model\Label')->where(['id'=>$j])->value('title'); + } + return $project; + } + // 格式化图片 public function getImagesAttr($value,$data){ $arr = []; diff --git a/application/common.php b/application/common.php index 3e6bbe5..fed0db9 100755 --- a/application/common.php +++ b/application/common.php @@ -82,7 +82,7 @@ if (!function_exists('cdnurl')) { * @param boolean $domain 是否显示域名 或者直接传入域名 * @return string */ - function cdnurl($url, $domain = false) + function cdnurl($url, $domain = true) { $regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i"; $url = preg_match($regex, $url) ? $url : \think\Config::get('upload.cdnurl') . $url; diff --git a/application/common/library/Auth.php b/application/common/library/Auth.php index 7d6f2d4..6c6b745 100644 --- a/application/common/library/Auth.php +++ b/application/common/library/Auth.php @@ -26,7 +26,7 @@ class Auth //默认配置 protected $config = []; protected $options = []; - protected $allowFields = ['id', 'username', 'nickname', 'mobile', 'avatar', 'score']; + protected $allowFields = ['id', 'username', 'nickname', 'mobile', 'avatar', 'score','is_work','factory_id']; public function __construct($options = []) { diff --git a/application/extra/site.php b/application/extra/site.php index aadaba1..f7ba661 100644 --- a/application/extra/site.php +++ b/application/extra/site.php @@ -28,9 +28,12 @@ return [ 'mail_smtp_pass' => 'password', 'mail_verify_type' => '2', 'mail_from' => '10000@qq.com', - 'recruit_subsidy_content' => '<p>由于网络招聘由工厂直招直接对接求职者省去中间环节,取代中间劳务费用,把利润补贴给求职者,达到双赢效果。</p><p><img src="http://recruit.t.brotop.cn//uploads/20201218/a17a7a8cb9aa711d05c8b6c185240d08.jpg" data-filename="filename" style="width: 665px;"><br></p><p><br></p>', + 'recruit_subsidy_content' => '<p>由于网络招聘由工厂直招直接对接求职者省去中间环节,取代中间劳务费用,把利润补贴给求职者,达到双赢效果。</p><p><img src="http://recruit.t.brotop.cn//uploads/20201218/a17a7a8cb9aa711d05c8b6c185240d08.jpg" style="width: 665px;"/><br/></p><p><br/></p>', 'recruit_subsidy' => '1', - 'work_subsidy_content' => '<div>由本平台小程序入职员工,可获得平台工时补贴,</div><div>补贴给求职者本人1-3元/时,</div><div>工资比其他人多300-1000元/月。</div><div><img src="http://recruit.t.brotop.cn//uploads/20201218/2b24ef40e14b31003e8f6a8fca6bdc49.jpg" data-filename="filename" style="width: 665px;"><br></div>', - 'agent_content' => '<p><img src="http://recruit.t.brotop.cn//uploads/20201218/12936b5ad8e4a2b8861d154f8899338c.jpg" data-filename="filename" style="width: 665px;"><br></p>', - 'notice' => '巴山楚水凄凉地,responsibility', + 'work_subsidy_content' => '<div>由本平台小程序入职员工,可获得平台工时补贴,</div><div>补贴给求职者本人1-3元/时,</div><div>工资比其他人多300-1000元/月。</div><div><img src="http://recruit.t.brotop.cn//uploads/20201218/2b24ef40e14b31003e8f6a8fca6bdc49.jpg" style="width: 665px;"/><br/></div>', + 'agent_content' => '', + 'notice' => '工时每满300个小时,平台补贴300元', + 'link' => 'https://mp.weixin.qq.com/s?__biz=MzkwNTIzOTMyMA==&mid=100000003&idx=1&sn=2c2f7a3d14016a5cab1bc926f9827789&chksm=40fb8f74778c06625363df68550c8a6e3b7b77c3a37a9acb0d45ca67473d1b3bfbe019946fe7&mpshare=1&scene=1&srcid=0517B23dia4DeM9arotlNkYL&sharer_sharetime=1621246415044&sharer_shareid=0222b3ff489427a506473cee3e8233b9#rd', + 'guanzhu' => '关注公众号', + 'guan' => '关注公众号', ]; diff --git a/public/.htaccess b/public/.htaccess index e69de29..9b9d349 100755 --- a/public/.htaccess +++ b/public/.htaccess @@ -0,0 +1,8 @@ +<IfModule mod_rewrite.c> + Options +FollowSymlinks -Multiviews + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] +</IfModule> \ No newline at end of file diff --git a/public/api.html b/public/api.html index b9937a7..eedc89a 100755 --- a/public/api.html +++ b/public/api.html @@ -138,103 +138,109 @@ <!-- menu --> <div id="sidebar"> <div class="list-group panel"> - <a href="#示例接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">示例接口v2 <i class="fa fa-caret-down"></i></a> - <div class="child collapse" id="示例接口v2"> - <a href="javascript:;" data-id="45" class="list-group-item">测试名称</a> - <a href="javascript:;" data-id="46" class="list-group-item">无需登录的接口</a> - <a href="javascript:;" data-id="47" class="list-group-item">需要登录的接口</a> - <a href="javascript:;" data-id="48" class="list-group-item">需要登录且需要验证有相应组的权限</a> + <a href="#公共接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">公共接口 <i class="fa fa-caret-down"></i></a> + <div class="child collapse" id="公共接口"> + <a href="javascript:;" data-id="0" class="list-group-item">加载初始化</a> + <a href="javascript:;" data-id="1" class="list-group-item">上传文件</a> </div> <a href="#邮箱验证码接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">邮箱验证码接口v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="邮箱验证码接口v2"> - <a href="javascript:;" data-id="49" class="list-group-item">发送验证码</a> - <a href="javascript:;" data-id="50" class="list-group-item">检测验证码</a> + <a href="javascript:;" data-id="69" class="list-group-item">发送验证码</a> + <a href="javascript:;" data-id="70" class="list-group-item">检测验证码</a> + </div> + <a href="#验证接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">验证接口 <i class="fa fa-caret-down"></i></a> + <div class="child collapse" id="验证接口"> + <a href="javascript:;" data-id="129" class="list-group-item">检测邮箱</a> + <a href="javascript:;" data-id="130" class="list-group-item">检测用户名</a> + <a href="javascript:;" data-id="131" class="list-group-item">检测昵称</a> + <a href="javascript:;" data-id="132" class="list-group-item">检测手机</a> + <a href="javascript:;" data-id="133" class="list-group-item">检测手机</a> + <a href="javascript:;" data-id="134" class="list-group-item">检测邮箱</a> + <a href="javascript:;" data-id="135" class="list-group-item">检测手机验证码</a> + <a href="javascript:;" data-id="136" class="list-group-item">检测邮箱验证码</a> </div> <a href="#验证接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">验证接口v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="验证接口v2"> - <a href="javascript:;" data-id="101" class="list-group-item">检测邮箱</a> - <a href="javascript:;" data-id="102" class="list-group-item">检测用户名</a> - <a href="javascript:;" data-id="103" class="list-group-item">检测昵称</a> - <a href="javascript:;" data-id="104" class="list-group-item">检测手机</a> - <a href="javascript:;" data-id="105" class="list-group-item">检测手机</a> - <a href="javascript:;" data-id="106" class="list-group-item">检测邮箱</a> - <a href="javascript:;" data-id="107" class="list-group-item">检测手机验证码</a> - <a href="javascript:;" data-id="108" class="list-group-item">检测邮箱验证码</a> + <a href="javascript:;" data-id="121" class="list-group-item">检测邮箱</a> + <a href="javascript:;" data-id="122" class="list-group-item">检测用户名</a> + <a href="javascript:;" data-id="123" class="list-group-item">检测昵称</a> + <a href="javascript:;" data-id="124" class="list-group-item">检测手机</a> + <a href="javascript:;" data-id="125" class="list-group-item">检测手机</a> + <a href="javascript:;" data-id="126" class="list-group-item">检测邮箱</a> + <a href="javascript:;" data-id="127" class="list-group-item">检测手机验证码</a> + <a href="javascript:;" data-id="128" class="list-group-item">检测邮箱验证码</a> </div> <a href="#会员接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">会员接口v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="会员接口v2"> - <a href="javascript:;" data-id="69" class="list-group-item">劳务管理-个人信息</a> - <a href="javascript:;" data-id="71" class="list-group-item">劳务管理-工资-历史收入</a> - <a href="javascript:;" data-id="70" class="list-group-item">劳务管理-工资</a> - <a href="javascript:;" data-id="76" class="list-group-item">编辑资料</a> - <a href="javascript:;" data-id="81" class="list-group-item">工厂列表</a> - <a href="javascript:;" data-id="82" class="list-group-item">确认入职</a> - <a href="javascript:;" data-id="83" class="list-group-item">办理离职</a> - <a href="javascript:;" data-id="84" class="list-group-item">实名认证</a> - <a href="javascript:;" data-id="85" class="list-group-item">实名认证状态</a> - <a href="javascript:;" data-id="86" class="list-group-item">code获取session_key和openid</a> - <a href="javascript:;" data-id="87" class="list-group-item">用户授权登录</a> - <a href="javascript:;" data-id="88" class="list-group-item">用户授权获取手机号</a> - <a href="javascript:;" data-id="89" class="list-group-item">工时补贴介绍</a> - <a href="javascript:;" data-id="90" class="list-group-item">招聘补贴介绍</a> - <a href="javascript:;" data-id="91" class="list-group-item">记一笔工时</a> - <a href="javascript:;" data-id="92" class="list-group-item">工时详情</a> - <a href="javascript:;" data-id="93" class="list-group-item">工时统计图</a> - <a href="javascript:;" data-id="94" class="list-group-item">借支-打卡天数</a> - <a href="javascript:;" data-id="95" class="list-group-item">借支</a> - <a href="javascript:;" data-id="96" class="list-group-item">分享</a> - <a href="javascript:;" data-id="97" class="list-group-item">下级</a> - <a href="javascript:;" data-id="98" class="list-group-item">搜索历史</a> - <a href="javascript:;" data-id="99" class="list-group-item">搜索历史-清空</a> - <a href="javascript:;" data-id="100" class="list-group-item">下级的下级</a> - <a href="javascript:;" data-id="79" class="list-group-item">第三方登录</a> - <a href="javascript:;" data-id="72" class="list-group-item">会员登录</a> - <a href="javascript:;" data-id="73" class="list-group-item">手机验证码登录</a> - <a href="javascript:;" data-id="74" class="list-group-item">注册会员</a> - <a href="javascript:;" data-id="75" class="list-group-item">退出登录</a> - <a href="javascript:;" data-id="77" class="list-group-item">修改邮箱</a> - <a href="javascript:;" data-id="80" class="list-group-item">重置密码</a> - <a href="javascript:;" data-id="78" class="list-group-item">修改手机号</a> + <a href="javascript:;" data-id="89" class="list-group-item">劳务管理-个人信息</a> + <a href="javascript:;" data-id="91" class="list-group-item">劳务管理-工资-历史收入</a> + <a href="javascript:;" data-id="90" class="list-group-item">劳务管理-工资</a> + <a href="javascript:;" data-id="96" class="list-group-item">编辑资料</a> + <a href="javascript:;" data-id="101" class="list-group-item">工厂列表</a> + <a href="javascript:;" data-id="102" class="list-group-item">确认入职</a> + <a href="javascript:;" data-id="103" class="list-group-item">办理离职</a> + <a href="javascript:;" data-id="104" class="list-group-item">实名认证</a> + <a href="javascript:;" data-id="105" class="list-group-item">实名认证状态</a> + <a href="javascript:;" data-id="106" class="list-group-item">code获取session_key和openid</a> + <a href="javascript:;" data-id="107" class="list-group-item">用户授权登录</a> + <a href="javascript:;" data-id="108" class="list-group-item">用户授权获取手机号</a> + <a href="javascript:;" data-id="109" class="list-group-item">工时补贴介绍</a> + <a href="javascript:;" data-id="110" class="list-group-item">招聘补贴介绍</a> + <a href="javascript:;" data-id="111" class="list-group-item">记一笔工时</a> + <a href="javascript:;" data-id="112" class="list-group-item">工时详情</a> + <a href="javascript:;" data-id="113" class="list-group-item">工时统计图</a> + <a href="javascript:;" data-id="114" class="list-group-item">借支-打卡天数</a> + <a href="javascript:;" data-id="115" class="list-group-item">借支</a> + <a href="javascript:;" data-id="116" class="list-group-item">分享</a> + <a href="javascript:;" data-id="117" class="list-group-item">下级</a> + <a href="javascript:;" data-id="118" class="list-group-item">搜索历史</a> + <a href="javascript:;" data-id="119" class="list-group-item">搜索历史-清空</a> + <a href="javascript:;" data-id="120" class="list-group-item">下级的下级</a> + <a href="javascript:;" data-id="99" class="list-group-item">第三方登录</a> + <a href="javascript:;" data-id="92" class="list-group-item">会员登录</a> + <a href="javascript:;" data-id="93" class="list-group-item">手机验证码登录</a> + <a href="javascript:;" data-id="94" class="list-group-item">注册会员</a> + <a href="javascript:;" data-id="95" class="list-group-item">退出登录</a> + <a href="javascript:;" data-id="97" class="list-group-item">修改邮箱</a> + <a href="javascript:;" data-id="100" class="list-group-item">重置密码</a> + <a href="javascript:;" data-id="98" class="list-group-item">修改手机号</a> </div> <a href="#Token接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">Token接口v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="Token接口v2"> - <a href="javascript:;" data-id="67" class="list-group-item">检测Token是否过期</a> - <a href="javascript:;" data-id="68" class="list-group-item">刷新Token</a> + <a href="javascript:;" data-id="87" class="list-group-item">检测Token是否过期</a> + <a href="javascript:;" data-id="88" class="list-group-item">刷新Token</a> </div> <a href="#手机短信接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">手机短信接口v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="手机短信接口v2"> - <a href="javascript:;" data-id="65" class="list-group-item">发送验证码</a> - <a href="javascript:;" data-id="66" class="list-group-item">检测验证码</a> + <a href="javascript:;" data-id="85" class="list-group-item">发送验证码</a> + <a href="javascript:;" data-id="86" class="list-group-item">检测验证码</a> </div> <a href="#首页接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">首页接口v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="首页接口v2"> - <a href="javascript:;" data-id="55" class="list-group-item">首页分类</a> - <a href="javascript:;" data-id="56" class="list-group-item">工厂列表</a> - <a href="javascript:;" data-id="57" class="list-group-item">搜索历史</a> - <a href="javascript:;" data-id="58" class="list-group-item">搜索历史-清空</a> - <a href="javascript:;" data-id="59" class="list-group-item">附近工作 | 长期工 | 短期工 | 兼职</a> - <a href="javascript:;" data-id="60" class="list-group-item">职位收藏</a> - <a href="javascript:;" data-id="61" class="list-group-item">职位详情</a> - <a href="javascript:;" data-id="62" class="list-group-item">收藏职位</a> - <a href="javascript:;" data-id="63" class="list-group-item">职位海报</a> - <a href="javascript:;" data-id="64" class="list-group-item">入驻代理</a> - </div> - <a href="#公共接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">公共接口v2 <i class="fa fa-caret-down"></i></a> - <div class="child collapse" id="公共接口v2"> - <a href="javascript:;" data-id="43" class="list-group-item">加载初始化</a> - <a href="javascript:;" data-id="44" class="list-group-item">上传文件</a> + <a href="javascript:;" data-id="75" class="list-group-item">首页分类</a> + <a href="javascript:;" data-id="76" class="list-group-item">工厂列表</a> + <a href="javascript:;" data-id="77" class="list-group-item">搜索历史</a> + <a href="javascript:;" data-id="78" class="list-group-item">搜索历史-清空</a> + <a href="javascript:;" data-id="79" class="list-group-item">附近工作 | 长期工 | 短期工 | 兼职</a> + <a href="javascript:;" data-id="80" class="list-group-item">职位收藏</a> + <a href="javascript:;" data-id="81" class="list-group-item">职位详情</a> + <a href="javascript:;" data-id="82" class="list-group-item">收藏职位</a> + <a href="javascript:;" data-id="83" class="list-group-item">职位海报</a> + <a href="javascript:;" data-id="84" class="list-group-item">入驻代理</a> </div> <a href="#驻厂v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">驻厂v2 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="驻厂v2"> - <a href="javascript:;" data-id="51" class="list-group-item">驻场管理</a> - <a href="javascript:;" data-id="52" class="list-group-item">借支列表</a> - <a href="javascript:;" data-id="53" class="list-group-item">同意借支</a> - <a href="javascript:;" data-id="54" class="list-group-item">离职详情</a> + <a href="javascript:;" data-id="71" class="list-group-item">驻场管理</a> + <a href="javascript:;" data-id="72" class="list-group-item">借支列表</a> + <a href="javascript:;" data-id="73" class="list-group-item">同意借支</a> + <a href="javascript:;" data-id="74" class="list-group-item">离职详情</a> </div> - <a href="#公共接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">公共接口 <i class="fa fa-caret-down"></i></a> - <div class="child collapse" id="公共接口"> - <a href="javascript:;" data-id="0" class="list-group-item">加载初始化</a> - <a href="javascript:;" data-id="1" class="list-group-item">上传文件</a> + <a href="#示例接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">示例接口v2 <i class="fa fa-caret-down"></i></a> + <div class="child collapse" id="示例接口v2"> + <a href="javascript:;" data-id="65" class="list-group-item">测试名称</a> + <a href="javascript:;" data-id="66" class="list-group-item">无需登录的接口</a> + <a href="javascript:;" data-id="67" class="list-group-item">需要登录的接口</a> + <a href="javascript:;" data-id="68" class="list-group-item">需要登录且需要验证有相应组的权限</a> </div> <a href="#示例接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">示例接口 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="示例接口"> @@ -243,118 +249,129 @@ <a href="javascript:;" data-id="4" class="list-group-item">需要登录的接口</a> <a href="javascript:;" data-id="5" class="list-group-item">需要登录且需要验证有相应组的权限</a> </div> + <a href="#公共接口v2" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">公共接口v2 <i class="fa fa-caret-down"></i></a> + <div class="child collapse" id="公共接口v2"> + <a href="javascript:;" data-id="63" class="list-group-item">加载初始化</a> + <a href="javascript:;" data-id="64" class="list-group-item">上传文件</a> + </div> <a href="#会员接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">会员接口 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="会员接口"> - <a href="javascript:;" data-id="22" class="list-group-item">劳务管理-个人信息</a> - <a href="javascript:;" data-id="27" class="list-group-item">编辑资料</a> - <a href="javascript:;" data-id="32" class="list-group-item">实名认证</a> - <a href="javascript:;" data-id="33" class="list-group-item">code获取session_key和openid</a> - <a href="javascript:;" data-id="34" class="list-group-item">用户授权登录</a> - <a href="javascript:;" data-id="35" class="list-group-item">用户授权获取手机号</a> - <a href="javascript:;" data-id="36" class="list-group-item">工时补贴介绍</a> - <a href="javascript:;" data-id="38" class="list-group-item">分享</a> - <a href="javascript:;" data-id="37" class="list-group-item">招聘补贴介绍</a> - <a href="javascript:;" data-id="39" class="list-group-item">下级</a> - <a href="javascript:;" data-id="40" class="list-group-item">搜索历史</a> - <a href="javascript:;" data-id="41" class="list-group-item">搜索历史-清空</a> - <a href="javascript:;" data-id="42" class="list-group-item">下级的下级</a> - <a href="javascript:;" data-id="26" class="list-group-item">退出登录</a> - <a href="javascript:;" data-id="23" class="list-group-item">会员登录</a> - <a href="javascript:;" data-id="31" class="list-group-item">重置密码</a> - <a href="javascript:;" data-id="30" class="list-group-item">第三方登录</a> - <a href="javascript:;" data-id="29" class="list-group-item">修改手机号</a> - <a href="javascript:;" data-id="28" class="list-group-item">修改邮箱</a> - <a href="javascript:;" data-id="24" class="list-group-item">手机验证码登录</a> - <a href="javascript:;" data-id="25" class="list-group-item">注册会员</a> + <a href="javascript:;" data-id="26" class="list-group-item">劳务管理-个人信息</a> + <a href="javascript:;" data-id="28" class="list-group-item">劳务管理-工资-历史收入</a> + <a href="javascript:;" data-id="27" class="list-group-item">劳务管理-工资</a> + <a href="javascript:;" data-id="33" class="list-group-item">编辑资料</a> + <a href="javascript:;" data-id="38" class="list-group-item">工厂列表</a> + <a href="javascript:;" data-id="40" class="list-group-item">工厂搜索列表</a> + <a href="javascript:;" data-id="41" class="list-group-item">确认入职</a> + <a href="javascript:;" data-id="43" class="list-group-item">办理离职</a> + <a href="javascript:;" data-id="44" class="list-group-item">实名认证</a> + <a href="javascript:;" data-id="46" class="list-group-item">实名认证状态</a> + <a href="javascript:;" data-id="47" class="list-group-item">code获取session_key和openid</a> + <a href="javascript:;" data-id="48" class="list-group-item">用户授权登录</a> + <a href="javascript:;" data-id="49" class="list-group-item">用户授权获取手机号</a> + <a href="javascript:;" data-id="50" class="list-group-item">工时补贴介绍</a> + <a href="javascript:;" data-id="51" class="list-group-item">招聘补贴介绍</a> + <a href="javascript:;" data-id="52" class="list-group-item">记一笔工时</a> + <a href="javascript:;" data-id="53" class="list-group-item">工时详情</a> + <a href="javascript:;" data-id="54" class="list-group-item">工时统计图</a> + <a href="javascript:;" data-id="55" class="list-group-item">借支-打卡天数</a> + <a href="javascript:;" data-id="56" class="list-group-item">借支</a> + <a href="javascript:;" data-id="57" class="list-group-item">分享</a> + <a href="javascript:;" data-id="58" class="list-group-item">下级</a> + <a href="javascript:;" data-id="59" class="list-group-item">搜索历史</a> + <a href="javascript:;" data-id="60" class="list-group-item">搜索历史-清空</a> + <a href="javascript:;" data-id="61" class="list-group-item">下级的下级</a> + <a href="javascript:;" data-id="35" class="list-group-item">修改手机号</a> + <a href="javascript:;" data-id="36" class="list-group-item">第三方登录</a> + <a href="javascript:;" data-id="45" class="list-group-item">@ApiTitle 认证页面通知</a> + <a href="javascript:;" data-id="29" class="list-group-item">会员登录</a> + <a href="javascript:;" data-id="30" class="list-group-item">手机验证码登录</a> + <a href="javascript:;" data-id="42" class="list-group-item">@ApiTitle 入职页面文本</a> + <a href="javascript:;" data-id="31" class="list-group-item">注册会员</a> + <a href="javascript:;" data-id="32" class="list-group-item">退出登录</a> + <a href="javascript:;" data-id="39" class="list-group-item">@ApiTitle 热门工厂</a> + <a href="javascript:;" data-id="34" class="list-group-item">修改邮箱</a> + <a href="javascript:;" data-id="37" class="list-group-item">重置密码</a> + <a href="javascript:;" data-id="62" class="list-group-item">@ApiTitle 劳务管理通知</a> </div> <a href="#Token接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">Token接口 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="Token接口"> - <a href="javascript:;" data-id="20" class="list-group-item">检测Token是否过期</a> - <a href="javascript:;" data-id="21" class="list-group-item">刷新Token</a> + <a href="javascript:;" data-id="24" class="list-group-item">检测Token是否过期</a> + <a href="javascript:;" data-id="25" class="list-group-item">刷新Token</a> </div> <a href="#手机短信接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">手机短信接口 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="手机短信接口"> - <a href="javascript:;" data-id="18" class="list-group-item">发送验证码</a> - <a href="javascript:;" data-id="19" class="list-group-item">检测验证码</a> + <a href="javascript:;" data-id="22" class="list-group-item">发送验证码</a> + <a href="javascript:;" data-id="23" class="list-group-item">检测验证码</a> </div> <a href="#首页接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">首页接口 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="首页接口"> - <a href="javascript:;" data-id="8" class="list-group-item">首页分类</a> - <a href="javascript:;" data-id="9" class="list-group-item">工厂列表</a> - <a href="javascript:;" data-id="10" class="list-group-item">搜索历史</a> - <a href="javascript:;" data-id="11" class="list-group-item">搜索历史-清空</a> - <a href="javascript:;" data-id="12" class="list-group-item">附近工作 | 长期工 | 短期工 | 兼职</a> - <a href="javascript:;" data-id="13" class="list-group-item">职位收藏</a> - <a href="javascript:;" data-id="14" class="list-group-item">职位详情</a> - <a href="javascript:;" data-id="15" class="list-group-item">收藏职位</a> - <a href="javascript:;" data-id="16" class="list-group-item">职位海报</a> - <a href="javascript:;" data-id="17" class="list-group-item">入驻代理</a> + <a href="javascript:;" data-id="12" class="list-group-item">首页分类</a> + <a href="javascript:;" data-id="13" class="list-group-item">工厂列表</a> + <a href="javascript:;" data-id="14" class="list-group-item">搜索历史</a> + <a href="javascript:;" data-id="15" class="list-group-item">搜索历史-清空</a> + <a href="javascript:;" data-id="16" class="list-group-item">附近工作 | 长期工 | 短期工 | 兼职</a> + <a href="javascript:;" data-id="17" class="list-group-item">职位收藏</a> + <a href="javascript:;" data-id="18" class="list-group-item">职位详情</a> + <a href="javascript:;" data-id="19" class="list-group-item">收藏职位</a> + <a href="javascript:;" data-id="20" class="list-group-item">职位海报</a> + <a href="javascript:;" data-id="21" class="list-group-item">入驻代理</a> + </div> + <a href="#驻厂" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">驻厂 <i class="fa fa-caret-down"></i></a> + <div class="child collapse" id="驻厂"> + <a href="javascript:;" data-id="8" class="list-group-item">驻场管理</a> + <a href="javascript:;" data-id="9" class="list-group-item">借支列表</a> + <a href="javascript:;" data-id="10" class="list-group-item">同意借支</a> + <a href="javascript:;" data-id="11" class="list-group-item">离职详情</a> </div> <a href="#邮箱验证码接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">邮箱验证码接口 <i class="fa fa-caret-down"></i></a> <div class="child collapse" id="邮箱验证码接口"> <a href="javascript:;" data-id="6" class="list-group-item">发送验证码</a> <a href="javascript:;" data-id="7" class="list-group-item">检测验证码</a> </div> - <a href="#验证接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">验证接口 <i class="fa fa-caret-down"></i></a> - <div class="child collapse" id="验证接口"> - <a href="javascript:;" data-id="109" class="list-group-item">检测邮箱</a> - <a href="javascript:;" data-id="110" class="list-group-item">检测用户名</a> - <a href="javascript:;" data-id="111" class="list-group-item">检测昵称</a> - <a href="javascript:;" data-id="112" class="list-group-item">检测手机</a> - <a href="javascript:;" data-id="113" class="list-group-item">检测手机</a> - <a href="javascript:;" data-id="114" class="list-group-item">检测邮箱</a> - <a href="javascript:;" data-id="115" class="list-group-item">检测手机验证码</a> - <a href="javascript:;" data-id="116" class="list-group-item">检测邮箱验证码</a> + <a href="#三开接口" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">三开接口 <i class="fa fa-caret-down"></i></a> + <div class="child collapse" id="三开接口"> + <a href="javascript:;" data-id="137" class="list-group-item">@ApiTitle 视频教程</a> + <a href="javascript:;" data-id="138" class="list-group-item">@ApiTitle 联系客服文本</a> + <a href="javascript:;" data-id="139" class="list-group-item">@ApiTitle 法律援助</a> + <a href="javascript:;" data-id="140" class="list-group-item">@ApiTitle 合作</a> + <a href="javascript:;" data-id="141" class="list-group-item">@ApiTitle 通知记录</a> + <a href="javascript:;" data-id="142" class="list-group-item">@ApiTitle 申请提现</a> + <a href="javascript:;" data-id="143" class="list-group-item">@ApiTitle 报名</a> + <a href="javascript:;" data-id="144" class="list-group-item">@ApiTitle 公众号链接</a> </div> </div> </div> <div class="panel-group" id="accordion"> - <h2>示例接口v2</h2> + <h2>公共接口</h2> <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-45"> + <div class="panel-heading" id="heading-0"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion45" href="#collapseOne45"> 测试名称 <span class="text-muted">/api/demo/test/id/{id}/name/{name}</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion0" href="#collapseOne0"> 加载初始化 <span class="text-muted">/api/common/init</span></a> </h4> </div> - <div id="collapseOne45" class="panel-collapse collapse"> + <div id="collapseOne0" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab45"> - <li class="active"><a href="#info45" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox45" data-toggle="tab">在线测试</a></li> - <li><a href="#sample45" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab0"> + <li class="active"><a href="#info0" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox0" data-toggle="tab">在线测试</a></li> + <li><a href="#sample0" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info45"> + <div class="tab-pane active" id="info0"> <div class="well"> - 测试描述信息 </div> + 加载初始化 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -371,22 +388,22 @@ </thead> <tbody> <tr> - <td>id</td> - <td>integer</td> + <td>version</td> + <td>string</td> <td>是</td> - <td>会员ID</td> + <td>版本号</td> </tr> <tr> - <td>name</td> + <td>lng</td> <td>string</td> <td>是</td> - <td>用户名</td> + <td>经度</td> </tr> <tr> - <td>data</td> - <td>object</td> + <td>lat</td> + <td>string</td> <td>是</td> - <td>扩展数据</td> + <td>纬度</td> </tr> </tbody> </table> @@ -399,39 +416,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox45"> + <div class="tab-pane" id="sandbox0"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test/id/{id}/name/{name}" method="POST" name="form45" id="form45"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/common/init" method="get" name="form0" id="form0"> <div class="form-group"> - <label class="control-label" for="id">id</label> - <input type="integer" class="form-control input-sm" id="id" required placeholder="会员ID" name="id"> + <label class="control-label" for="version">version</label> + <input type="string" class="form-control input-sm" id="version" required placeholder="版本号" name="version"> </div> <div class="form-group"> - <label class="control-label" for="name">name</label> - <input type="string" class="form-control input-sm" id="name" required placeholder="用户名" name="name"> + <label class="control-label" for="lng">lng</label> + <input type="string" class="form-control input-sm" id="lng" required placeholder="经度" name="lng"> </div> <div class="form-group"> - <label class="control-label" for="data">data</label> - <input type="object" class="form-control input-sm" id="data" required placeholder="扩展数据 - 例: {'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}" name="data"> + <label class="control-label" for="lat">lat</label> + <input type="string" class="form-control input-sm" id="lat" required placeholder="纬度" name="lat"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="45">提交</button> - <button type="reset" class="btn btn-info" rel="45">重置</button> + <button type="submit" class="btn btn-success send" rel="0">提交</button> + <button type="reset" class="btn btn-info" rel="0">重置</button> </div> </form> </div> @@ -441,8 +447,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers45"></pre> - <pre id="response45"></pre> + <pre id="response_headers0"></pre> + <pre id="response0"></pre> </div> </div> </div> @@ -450,45 +456,17 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - <tr> - <td>data</td> - <td>object</td> - <td>扩展数据返回</td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample45"> + <div class="tab-pane" id="sample0"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response45">{ - 'code':'1', - 'msg':'返回成功' - }</pre> + <pre id="sample_response0">无</pre> </div> </div> </div><!-- #sample --> @@ -498,28 +476,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-46"> + <div class="panel-heading" id="heading-1"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion46" href="#collapseOne46"> 无需登录的接口 <span class="text-muted">/api/v2.demo/test1</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion1" href="#collapseOne1"> 上传文件 <span class="text-muted">/api/common/upload</span></a> </h4> </div> - <div id="collapseOne46" class="panel-collapse collapse"> + <div id="collapseOne1" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab46"> - <li class="active"><a href="#info46" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox46" data-toggle="tab">在线测试</a></li> - <li><a href="#sample46" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab1"> + <li class="active"><a href="#info1" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox1" data-toggle="tab">在线测试</a></li> + <li><a href="#sample1" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info46"> + <div class="tab-pane active" id="info1"> <div class="well"> - 无需登录的接口 </div> + 上传文件 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -529,7 +507,24 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>file</td> + <td>File</td> + <td>是</td> + <td>文件流</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -539,19 +534,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox46"> + <div class="tab-pane" id="sandbox1"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.demo/test1" method="get" name="form46" id="form46"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/common/upload" method="POST" name="form1" id="form1"> <div class="form-group"> - 无 + <label class="control-label" for="file">file</label> + <input type="File" class="form-control input-sm" id="file" required placeholder="文件流" name="file"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="46">提交</button> - <button type="reset" class="btn btn-info" rel="46">重置</button> + <button type="submit" class="btn btn-success send" rel="1">提交</button> + <button type="reset" class="btn btn-info" rel="1">重置</button> </div> </form> </div> @@ -561,8 +557,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers46"></pre> - <pre id="response46"></pre> + <pre id="response_headers1"></pre> + <pre id="response1"></pre> </div> </div> </div> @@ -577,10 +573,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample46"> + <div class="tab-pane" id="sample1"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response46">无</pre> + <pre id="sample_response1">无</pre> </div> </div> </div><!-- #sample --> @@ -589,29 +585,31 @@ </div> </div> </div> + <h2>邮箱验证码接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-47"> + <div class="panel-heading" id="heading-69"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion47" href="#collapseOne47"> 需要登录的接口 <span class="text-muted">/api/v2.demo/test2</span></a> + <a data-toggle="collapse" data-parent="#accordion69" href="#collapseOne69"> 发送验证码 <span class="text-muted">/api/v2.ems/send</span></a> </h4> </div> - <div id="collapseOne47" class="panel-collapse collapse"> + <div id="collapseOne69" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab47"> - <li class="active"><a href="#info47" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox47" data-toggle="tab">在线测试</a></li> - <li><a href="#sample47" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab69"> + <li class="active"><a href="#info69" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox69" data-toggle="tab">在线测试</a></li> + <li><a href="#sample69" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info47"> + <div class="tab-pane active" id="info69"> <div class="well"> - 需要登录的接口 </div> + 发送验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -621,7 +619,30 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>email</td> + <td>string</td> + <td>是</td> + <td>邮箱</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件名称</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -631,30 +652,35 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox47"> + <div class="tab-pane" id="sandbox69"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.demo/test2" method="get" name="form47" id="form47"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.ems/send" method="get" name="form69" id="form69"> <div class="form-group"> - 无 + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="47">提交</button> - <button type="reset" class="btn btn-info" rel="47">重置</button> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> </div> - </form> - </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="69">提交</button> + <button type="reset" class="btn btn-info" rel="69">重置</button> + </div> + </form> + </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>响应输出</strong></div> <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers47"></pre> - <pre id="response47"></pre> + <pre id="response_headers69"></pre> + <pre id="response69"></pre> </div> </div> </div> @@ -669,10 +695,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample47"> + <div class="tab-pane" id="sample69"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response47">无</pre> + <pre id="sample_response69">无</pre> </div> </div> </div><!-- #sample --> @@ -682,28 +708,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-48"> + <div class="panel-heading" id="heading-70"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion48" href="#collapseOne48"> 需要登录且需要验证有相应组的权限 <span class="text-muted">/api/v2.demo/test3</span></a> + <a data-toggle="collapse" data-parent="#accordion70" href="#collapseOne70"> 检测验证码 <span class="text-muted">/api/v2.ems/check</span></a> </h4> </div> - <div id="collapseOne48" class="panel-collapse collapse"> + <div id="collapseOne70" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab48"> - <li class="active"><a href="#info48" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox48" data-toggle="tab">在线测试</a></li> - <li><a href="#sample48" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab70"> + <li class="active"><a href="#info70" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox70" data-toggle="tab">在线测试</a></li> + <li><a href="#sample70" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info48"> + <div class="tab-pane active" id="info70"> <div class="well"> - 需要登录且需要验证有相应组的权限 </div> + 检测验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -713,7 +739,36 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>email</td> + <td>string</td> + <td>是</td> + <td>邮箱</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件名称</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -723,19 +778,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox48"> + <div class="tab-pane" id="sandbox70"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.demo/test3" method="get" name="form48" id="form48"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.ems/check" method="get" name="form70" id="form70"> <div class="form-group"> - 无 + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="48">提交</button> - <button type="reset" class="btn btn-info" rel="48">重置</button> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="70">提交</button> + <button type="reset" class="btn btn-info" rel="70">重置</button> </div> </form> </div> @@ -745,8 +809,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers48"></pre> - <pre id="response48"></pre> + <pre id="response_headers70"></pre> + <pre id="response70"></pre> </div> </div> </div> @@ -761,10 +825,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample48"> + <div class="tab-pane" id="sample70"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response48">无</pre> + <pre id="sample_response70">无</pre> </div> </div> </div><!-- #sample --> @@ -773,31 +837,31 @@ </div> </div> </div> - <h2>邮箱验证码接口v2</h2> + <h2>验证接口</h2> <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-49"> + <div class="panel-heading" id="heading-129"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion49" href="#collapseOne49"> 发送验证码 <span class="text-muted">/api/v2.ems/send</span></a> + <a data-toggle="collapse" data-parent="#accordion129" href="#collapseOne129"> 检测邮箱 <span class="text-muted">/api/validate/check_email_available</span></a> </h4> </div> - <div id="collapseOne49" class="panel-collapse collapse"> + <div id="collapseOne129" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab49"> - <li class="active"><a href="#info49" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox49" data-toggle="tab">在线测试</a></li> - <li><a href="#sample49" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab129"> + <li class="active"><a href="#info129" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox129" data-toggle="tab">在线测试</a></li> + <li><a href="#sample129" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info49"> + <div class="tab-pane active" id="info129"> <div class="well"> - 发送验证码 </div> + 检测邮箱 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -824,10 +888,10 @@ <td>邮箱</td> </tr> <tr> - <td>event</td> + <td>id</td> <td>string</td> <td>是</td> - <td>事件名称</td> + <td>排除会员ID</td> </tr> </tbody> </table> @@ -840,24 +904,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox49"> + <div class="tab-pane" id="sandbox129"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.ems/send" method="get" name="form49" id="form49"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_email_available" method="get" name="form129" id="form129"> <div class="form-group"> <label class="control-label" for="email">email</label> <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + <label class="control-label" for="id">id</label> + <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="49">提交</button> - <button type="reset" class="btn btn-info" rel="49">重置</button> + <button type="submit" class="btn btn-success send" rel="129">提交</button> + <button type="reset" class="btn btn-info" rel="129">重置</button> </div> </form> </div> @@ -867,8 +931,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers49"></pre> - <pre id="response49"></pre> + <pre id="response_headers129"></pre> + <pre id="response129"></pre> </div> </div> </div> @@ -883,10 +947,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample49"> + <div class="tab-pane" id="sample129"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response49">无</pre> + <pre id="sample_response129">无</pre> </div> </div> </div><!-- #sample --> @@ -896,28 +960,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-50"> + <div class="panel-heading" id="heading-130"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion50" href="#collapseOne50"> 检测验证码 <span class="text-muted">/api/v2.ems/check</span></a> + <a data-toggle="collapse" data-parent="#accordion130" href="#collapseOne130"> 检测用户名 <span class="text-muted">/api/validate/check_username_available</span></a> </h4> </div> - <div id="collapseOne50" class="panel-collapse collapse"> + <div id="collapseOne130" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab50"> - <li class="active"><a href="#info50" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox50" data-toggle="tab">在线测试</a></li> - <li><a href="#sample50" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab130"> + <li class="active"><a href="#info130" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox130" data-toggle="tab">在线测试</a></li> + <li><a href="#sample130" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info50"> + <div class="tab-pane active" id="info130"> <div class="well"> - 检测验证码 </div> + 检测用户名 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -938,22 +1002,16 @@ </thead> <tbody> <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> - </tr> - <tr> - <td>event</td> + <td>username</td> <td>string</td> <td>是</td> - <td>事件名称</td> + <td>用户名</td> </tr> <tr> - <td>captcha</td> + <td>id</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>排除会员ID</td> </tr> </tbody> </table> @@ -966,28 +1024,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox50"> + <div class="tab-pane" id="sandbox130"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.ems/check" method="get" name="form50" id="form50"> - <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_username_available" method="get" name="form130" id="form130"> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + <label class="control-label" for="username">username</label> + <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> </div> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="id">id</label> + <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="50">提交</button> - <button type="reset" class="btn btn-info" rel="50">重置</button> + <button type="submit" class="btn btn-success send" rel="130">提交</button> + <button type="reset" class="btn btn-info" rel="130">重置</button> </div> </form> </div> @@ -997,8 +1051,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers50"></pre> - <pre id="response50"></pre> + <pre id="response_headers130"></pre> + <pre id="response130"></pre> </div> </div> </div> @@ -1013,10 +1067,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample50"> + <div class="tab-pane" id="sample130"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response50">无</pre> + <pre id="sample_response130">无</pre> </div> </div> </div><!-- #sample --> @@ -1025,31 +1079,29 @@ </div> </div> </div> - <h2>验证接口v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-101"> + <div class="panel-heading" id="heading-131"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion101" href="#collapseOne101"> 检测邮箱 <span class="text-muted">/api/v2.validate/check_email_available</span></a> + <a data-toggle="collapse" data-parent="#accordion131" href="#collapseOne131"> 检测昵称 <span class="text-muted">/api/validate/check_nickname_available</span></a> </h4> </div> - <div id="collapseOne101" class="panel-collapse collapse"> + <div id="collapseOne131" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab101"> - <li class="active"><a href="#info101" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox101" data-toggle="tab">在线测试</a></li> - <li><a href="#sample101" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab131"> + <li class="active"><a href="#info131" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox131" data-toggle="tab">在线测试</a></li> + <li><a href="#sample131" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info101"> + <div class="tab-pane active" id="info131"> <div class="well"> - 检测邮箱 </div> + 检测昵称 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1070,10 +1122,10 @@ </thead> <tbody> <tr> - <td>email</td> + <td>nickname</td> <td>string</td> <td>是</td> - <td>邮箱</td> + <td>昵称</td> </tr> <tr> <td>id</td> @@ -1092,24 +1144,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox101"> + <div class="tab-pane" id="sandbox131"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_email_available" method="get" name="form101" id="form101"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_nickname_available" method="get" name="form131" id="form131"> <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + <label class="control-label" for="nickname">nickname</label> + <input type="string" class="form-control input-sm" id="nickname" required placeholder="昵称" name="nickname"> </div> <div class="form-group"> <label class="control-label" for="id">id</label> <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="101">提交</button> - <button type="reset" class="btn btn-info" rel="101">重置</button> + <button type="submit" class="btn btn-success send" rel="131">提交</button> + <button type="reset" class="btn btn-info" rel="131">重置</button> </div> </form> </div> @@ -1119,8 +1171,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers101"></pre> - <pre id="response101"></pre> + <pre id="response_headers131"></pre> + <pre id="response131"></pre> </div> </div> </div> @@ -1135,10 +1187,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample101"> + <div class="tab-pane" id="sample131"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response101">无</pre> + <pre id="sample_response131">无</pre> </div> </div> </div><!-- #sample --> @@ -1148,28 +1200,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-102"> + <div class="panel-heading" id="heading-132"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion102" href="#collapseOne102"> 检测用户名 <span class="text-muted">/api/v2.validate/check_username_available</span></a> + <a data-toggle="collapse" data-parent="#accordion132" href="#collapseOne132"> 检测手机 <span class="text-muted">/api/validate/check_mobile_available</span></a> </h4> </div> - <div id="collapseOne102" class="panel-collapse collapse"> + <div id="collapseOne132" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab102"> - <li class="active"><a href="#info102" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox102" data-toggle="tab">在线测试</a></li> - <li><a href="#sample102" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab132"> + <li class="active"><a href="#info132" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox132" data-toggle="tab">在线测试</a></li> + <li><a href="#sample132" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info102"> + <div class="tab-pane active" id="info132"> <div class="well"> - 检测用户名 </div> + 检测手机 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1190,10 +1242,10 @@ </thead> <tbody> <tr> - <td>username</td> + <td>mobile</td> <td>string</td> <td>是</td> - <td>用户名</td> + <td>手机号</td> </tr> <tr> <td>id</td> @@ -1212,24 +1264,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox102"> + <div class="tab-pane" id="sandbox132"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_username_available" method="get" name="form102" id="form102"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_mobile_available" method="get" name="form132" id="form132"> <div class="form-group"> - <label class="control-label" for="username">username</label> - <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> <label class="control-label" for="id">id</label> <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="102">提交</button> - <button type="reset" class="btn btn-info" rel="102">重置</button> + <button type="submit" class="btn btn-success send" rel="132">提交</button> + <button type="reset" class="btn btn-info" rel="132">重置</button> </div> </form> </div> @@ -1239,8 +1291,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers102"></pre> - <pre id="response102"></pre> + <pre id="response_headers132"></pre> + <pre id="response132"></pre> </div> </div> </div> @@ -1255,10 +1307,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample102"> + <div class="tab-pane" id="sample132"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response102">无</pre> + <pre id="sample_response132">无</pre> </div> </div> </div><!-- #sample --> @@ -1268,28 +1320,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-103"> + <div class="panel-heading" id="heading-133"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion103" href="#collapseOne103"> 检测昵称 <span class="text-muted">/api/v2.validate/check_nickname_available</span></a> + <a data-toggle="collapse" data-parent="#accordion133" href="#collapseOne133"> 检测手机 <span class="text-muted">/api/validate/check_mobile_exist</span></a> </h4> </div> - <div id="collapseOne103" class="panel-collapse collapse"> + <div id="collapseOne133" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab103"> - <li class="active"><a href="#info103" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox103" data-toggle="tab">在线测试</a></li> - <li><a href="#sample103" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab133"> + <li class="active"><a href="#info133" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox133" data-toggle="tab">在线测试</a></li> + <li><a href="#sample133" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info103"> + <div class="tab-pane active" id="info133"> <div class="well"> - 检测昵称 </div> + 检测手机 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1310,16 +1362,10 @@ </thead> <tbody> <tr> - <td>nickname</td> - <td>string</td> - <td>是</td> - <td>昵称</td> - </tr> - <tr> - <td>id</td> + <td>mobile</td> <td>string</td> <td>是</td> - <td>排除会员ID</td> + <td>手机号</td> </tr> </tbody> </table> @@ -1332,24 +1378,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox103"> + <div class="tab-pane" id="sandbox133"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_nickname_available" method="get" name="form103" id="form103"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_mobile_exist" method="get" name="form133" id="form133"> <div class="form-group"> - <label class="control-label" for="nickname">nickname</label> - <input type="string" class="form-control input-sm" id="nickname" required placeholder="昵称" name="nickname"> - </div> - <div class="form-group"> - <label class="control-label" for="id">id</label> - <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="103">提交</button> - <button type="reset" class="btn btn-info" rel="103">重置</button> + <button type="submit" class="btn btn-success send" rel="133">提交</button> + <button type="reset" class="btn btn-info" rel="133">重置</button> </div> </form> </div> @@ -1359,8 +1401,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers103"></pre> - <pre id="response103"></pre> + <pre id="response_headers133"></pre> + <pre id="response133"></pre> </div> </div> </div> @@ -1375,10 +1417,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample103"> + <div class="tab-pane" id="sample133"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response103">无</pre> + <pre id="sample_response133">无</pre> </div> </div> </div><!-- #sample --> @@ -1388,28 +1430,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-104"> + <div class="panel-heading" id="heading-134"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion104" href="#collapseOne104"> 检测手机 <span class="text-muted">/api/v2.validate/check_mobile_available</span></a> + <a data-toggle="collapse" data-parent="#accordion134" href="#collapseOne134"> 检测邮箱 <span class="text-muted">/api/validate/check_email_exist</span></a> </h4> </div> - <div id="collapseOne104" class="panel-collapse collapse"> + <div id="collapseOne134" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab104"> - <li class="active"><a href="#info104" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox104" data-toggle="tab">在线测试</a></li> - <li><a href="#sample104" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab134"> + <li class="active"><a href="#info134" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox134" data-toggle="tab">在线测试</a></li> + <li><a href="#sample134" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info104"> + <div class="tab-pane active" id="info134"> <div class="well"> - 检测手机 </div> + 检测邮箱 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1433,13 +1475,7 @@ <td>mobile</td> <td>string</td> <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>id</td> - <td>string</td> - <td>是</td> - <td>排除会员ID</td> + <td>邮箱</td> </tr> </tbody> </table> @@ -1452,24 +1488,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox104"> + <div class="tab-pane" id="sandbox134"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_mobile_available" method="get" name="form104" id="form104"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_email_exist" method="get" name="form134" id="form134"> <div class="form-group"> <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> - <div class="form-group"> - <label class="control-label" for="id">id</label> - <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="邮箱" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="104">提交</button> - <button type="reset" class="btn btn-info" rel="104">重置</button> + <button type="submit" class="btn btn-success send" rel="134">提交</button> + <button type="reset" class="btn btn-info" rel="134">重置</button> </div> </form> </div> @@ -1479,8 +1511,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers104"></pre> - <pre id="response104"></pre> + <pre id="response_headers134"></pre> + <pre id="response134"></pre> </div> </div> </div> @@ -1495,10 +1527,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample104"> + <div class="tab-pane" id="sample134"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response104">无</pre> + <pre id="sample_response134">无</pre> </div> </div> </div><!-- #sample --> @@ -1508,28 +1540,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-105"> + <div class="panel-heading" id="heading-135"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion105" href="#collapseOne105"> 检测手机 <span class="text-muted">/api/v2.validate/check_mobile_exist</span></a> + <a data-toggle="collapse" data-parent="#accordion135" href="#collapseOne135"> 检测手机验证码 <span class="text-muted">/api/validate/check_sms_correct</span></a> </h4> </div> - <div id="collapseOne105" class="panel-collapse collapse"> + <div id="collapseOne135" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab105"> - <li class="active"><a href="#info105" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox105" data-toggle="tab">在线测试</a></li> - <li><a href="#sample105" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab135"> + <li class="active"><a href="#info135" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox135" data-toggle="tab">在线测试</a></li> + <li><a href="#sample135" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info105"> + <div class="tab-pane active" id="info135"> <div class="well"> - 检测手机 </div> + 检测手机验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1555,6 +1587,18 @@ <td>是</td> <td>手机号</td> </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件</td> + </tr> </tbody> </table> </div> @@ -1566,20 +1610,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox105"> + <div class="tab-pane" id="sandbox135"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_mobile_exist" method="get" name="form105" id="form105"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_sms_correct" method="get" name="form135" id="form135"> <div class="form-group"> <label class="control-label" for="mobile">mobile</label> <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="105">提交</button> - <button type="reset" class="btn btn-info" rel="105">重置</button> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="135">提交</button> + <button type="reset" class="btn btn-info" rel="135">重置</button> </div> </form> </div> @@ -1589,8 +1641,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers105"></pre> - <pre id="response105"></pre> + <pre id="response_headers135"></pre> + <pre id="response135"></pre> </div> </div> </div> @@ -1605,10 +1657,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample105"> + <div class="tab-pane" id="sample135"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response105">无</pre> + <pre id="sample_response135">无</pre> </div> </div> </div><!-- #sample --> @@ -1618,28 +1670,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-106"> + <div class="panel-heading" id="heading-136"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion106" href="#collapseOne106"> 检测邮箱 <span class="text-muted">/api/v2.validate/check_email_exist</span></a> + <a data-toggle="collapse" data-parent="#accordion136" href="#collapseOne136"> 检测邮箱验证码 <span class="text-muted">/api/validate/check_ems_correct</span></a> </h4> </div> - <div id="collapseOne106" class="panel-collapse collapse"> + <div id="collapseOne136" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab106"> - <li class="active"><a href="#info106" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox106" data-toggle="tab">在线测试</a></li> - <li><a href="#sample106" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab136"> + <li class="active"><a href="#info136" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox136" data-toggle="tab">在线测试</a></li> + <li><a href="#sample136" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info106"> + <div class="tab-pane active" id="info136"> <div class="well"> - 检测邮箱 </div> + 检测邮箱验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1660,11 +1712,23 @@ </thead> <tbody> <tr> - <td>mobile</td> + <td>email</td> <td>string</td> <td>是</td> <td>邮箱</td> </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件</td> + </tr> </tbody> </table> </div> @@ -1676,20 +1740,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox106"> + <div class="tab-pane" id="sandbox136"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_email_exist" method="get" name="form106" id="form106"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_ems_correct" method="get" name="form136" id="form136"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="邮箱" name="mobile"> + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="106">提交</button> - <button type="reset" class="btn btn-info" rel="106">重置</button> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="136">提交</button> + <button type="reset" class="btn btn-info" rel="136">重置</button> </div> </form> </div> @@ -1699,8 +1771,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers106"></pre> - <pre id="response106"></pre> + <pre id="response_headers136"></pre> + <pre id="response136"></pre> </div> </div> </div> @@ -1715,10 +1787,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample106"> + <div class="tab-pane" id="sample136"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response106">无</pre> + <pre id="sample_response136">无</pre> </div> </div> </div><!-- #sample --> @@ -1727,29 +1799,31 @@ </div> </div> </div> + <h2>验证接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-107"> + <div class="panel-heading" id="heading-121"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion107" href="#collapseOne107"> 检测手机验证码 <span class="text-muted">/api/v2.validate/check_sms_correct</span></a> + <a data-toggle="collapse" data-parent="#accordion121" href="#collapseOne121"> 检测邮箱 <span class="text-muted">/api/v2.validate/check_email_available</span></a> </h4> </div> - <div id="collapseOne107" class="panel-collapse collapse"> + <div id="collapseOne121" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab107"> - <li class="active"><a href="#info107" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox107" data-toggle="tab">在线测试</a></li> - <li><a href="#sample107" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab121"> + <li class="active"><a href="#info121" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox121" data-toggle="tab">在线测试</a></li> + <li><a href="#sample121" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info107"> + <div class="tab-pane active" id="info121"> <div class="well"> - 检测手机验证码 </div> + 检测邮箱 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1770,22 +1844,16 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>captcha</td> + <td>email</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>邮箱</td> </tr> <tr> - <td>event</td> + <td>id</td> <td>string</td> <td>是</td> - <td>事件</td> + <td>排除会员ID</td> </tr> </tbody> </table> @@ -1798,28 +1866,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox107"> + <div class="tab-pane" id="sandbox121"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_sms_correct" method="get" name="form107" id="form107"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_email_available" method="get" name="form121" id="form121"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> - <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + <label class="control-label" for="id">id</label> + <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="107">提交</button> - <button type="reset" class="btn btn-info" rel="107">重置</button> + <button type="submit" class="btn btn-success send" rel="121">提交</button> + <button type="reset" class="btn btn-info" rel="121">重置</button> </div> </form> </div> @@ -1829,8 +1893,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers107"></pre> - <pre id="response107"></pre> + <pre id="response_headers121"></pre> + <pre id="response121"></pre> </div> </div> </div> @@ -1845,10 +1909,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample107"> + <div class="tab-pane" id="sample121"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response107">无</pre> + <pre id="sample_response121">无</pre> </div> </div> </div><!-- #sample --> @@ -1858,28 +1922,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-108"> + <div class="panel-heading" id="heading-122"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion108" href="#collapseOne108"> 检测邮箱验证码 <span class="text-muted">/api/v2.validate/check_ems_correct</span></a> + <a data-toggle="collapse" data-parent="#accordion122" href="#collapseOne122"> 检测用户名 <span class="text-muted">/api/v2.validate/check_username_available</span></a> </h4> </div> - <div id="collapseOne108" class="panel-collapse collapse"> + <div id="collapseOne122" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab108"> - <li class="active"><a href="#info108" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox108" data-toggle="tab">在线测试</a></li> - <li><a href="#sample108" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab122"> + <li class="active"><a href="#info122" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox122" data-toggle="tab">在线测试</a></li> + <li><a href="#sample122" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info108"> + <div class="tab-pane active" id="info122"> <div class="well"> - 检测邮箱验证码 </div> + 检测用户名 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -1900,22 +1964,16 @@ </thead> <tbody> <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> - </tr> - <tr> - <td>captcha</td> + <td>username</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>用户名</td> </tr> <tr> - <td>event</td> + <td>id</td> <td>string</td> <td>是</td> - <td>事件</td> + <td>排除会员ID</td> </tr> </tbody> </table> @@ -1928,28 +1986,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox108"> + <div class="tab-pane" id="sandbox122"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_ems_correct" method="get" name="form108" id="form108"> - <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_username_available" method="get" name="form122" id="form122"> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="username">username</label> + <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> </div> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + <label class="control-label" for="id">id</label> + <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="108">提交</button> - <button type="reset" class="btn btn-info" rel="108">重置</button> + <button type="submit" class="btn btn-success send" rel="122">提交</button> + <button type="reset" class="btn btn-info" rel="122">重置</button> </div> </form> </div> @@ -1959,8 +2013,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers108"></pre> - <pre id="response108"></pre> + <pre id="response_headers122"></pre> + <pre id="response122"></pre> </div> </div> </div> @@ -1975,10 +2029,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample108"> + <div class="tab-pane" id="sample122"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response108">无</pre> + <pre id="sample_response122">无</pre> </div> </div> </div><!-- #sample --> @@ -1987,34 +2041,38 @@ </div> </div> </div> - <h2>会员接口v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-69"> + <div class="panel-heading" id="heading-123"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion69" href="#collapseOne69"> 劳务管理-个人信息 <span class="text-muted">/api/v2.user/index</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion123" href="#collapseOne123"> 检测昵称 <span class="text-muted">/api/v2.validate/check_nickname_available</span></a> </h4> </div> - <div id="collapseOne69" class="panel-collapse collapse"> + <div id="collapseOne123" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab69"> - <li class="active"><a href="#info69" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox69" data-toggle="tab">在线测试</a></li> - <li><a href="#sample69" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab123"> + <li class="active"><a href="#info123" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox123" data-toggle="tab">在线测试</a></li> + <li><a href="#sample123" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info69"> + <div class="tab-pane active" id="info123"> <div class="well"> - 劳务管理-个人信息 </div> + 检测昵称 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -2026,52 +2084,46 @@ </thead> <tbody> <tr> - <td>token</td> + <td>nickname</td> <td>string</td> <td>是</td> - <td>请求的Token</td> + <td>昵称</td> + </tr> + <tr> + <td>id</td> + <td>string</td> + <td>是</td> + <td>排除会员ID</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox69"> + <div class="tab-pane" id="sandbox123"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <div class="headers"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_nickname_available" method="get" name="form123" id="form123"> <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + <label class="control-label" for="nickname">nickname</label> + <input type="string" class="form-control input-sm" id="nickname" required placeholder="昵称" name="nickname"> </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/index" method="POST" name="form69" id="form69"> <div class="form-group"> - 无 + <label class="control-label" for="id">id</label> + <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="69">提交</button> - <button type="reset" class="btn btn-info" rel="69">重置</button> + <button type="submit" class="btn btn-success send" rel="123">提交</button> + <button type="reset" class="btn btn-info" rel="123">重置</button> </div> </form> </div> @@ -2081,8 +2133,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers69"></pre> - <pre id="response69"></pre> + <pre id="response_headers123"></pre> + <pre id="response123"></pre> </div> </div> </div> @@ -2097,27 +2149,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample69"> + <div class="tab-pane" id="sample123"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response69">{ - "code": 1, - "msg": "成功", - "time": "1606137472", - "data": { - "user": { //用户信息 - "id": 1, //用户ID - "nickname": "admin", //昵称 - "mobile": "13888888888", //手机号 - "avatar": "/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //原始头像地址 - "is_work": "1", //是否在职:0=否,1=是 - "factory": { //工厂 - "id": 1, //工厂ID - "factory_shortname": "" //工厂简称 - } - } - } - }</pre> + <pre id="sample_response123">无</pre> </div> </div> </div><!-- #sample --> @@ -2127,31 +2162,37 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-71"> + <div class="panel-heading" id="heading-124"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion71" href="#collapseOne71"> 劳务管理-工资-历史收入 <span class="text-muted">/api/v2.user/salaryList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion124" href="#collapseOne124"> 检测手机 <span class="text-muted">/api/v2.validate/check_mobile_available</span></a> </h4> </div> - <div id="collapseOne71" class="panel-collapse collapse"> + <div id="collapseOne124" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab71"> - <li class="active"><a href="#info71" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox71" data-toggle="tab">在线测试</a></li> - <li><a href="#sample71" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab124"> + <li class="active"><a href="#info124" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox124" data-toggle="tab">在线测试</a></li> + <li><a href="#sample124" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info71"> + <div class="tab-pane active" id="info124"> <div class="well"> - 劳务管理-工资-历史收入 </div> + 检测手机 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -2163,39 +2204,16 @@ </thead> <tbody> <tr> - <td>token</td> + <td>mobile</td> <td>string</td> <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> + <td>手机号</td> </tr> <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> + <td>id</td> + <td>string</td> + <td>是</td> + <td>排除会员ID</td> </tr> </tbody> </table> @@ -2208,35 +2226,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox71"> + <div class="tab-pane" id="sandbox124"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/salaryList" method="POST" name="form71" id="form71"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_mobile_available" method="get" name="form124" id="form124"> <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + <label class="control-label" for="id">id</label> + <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="71">提交</button> - <button type="reset" class="btn btn-info" rel="71">重置</button> + <button type="submit" class="btn btn-success send" rel="124">提交</button> + <button type="reset" class="btn btn-info" rel="124">重置</button> </div> </form> </div> @@ -2246,8 +2253,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers71"></pre> - <pre id="response71"></pre> + <pre id="response_headers124"></pre> + <pre id="response124"></pre> </div> </div> </div> @@ -2262,23 +2269,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample71"> + <div class="tab-pane" id="sample124"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response71">{ - "code": 1, - "msg": "成功", - "time": "1612234313", - "data": { - "work_hours_month": "0.0", //本月打卡总工时 - "work_salary_month": "0.00", //本月打卡工资 - "work_subsidy": "2.00", //工时补贴(元/小时) - "work_subsidy_month": 0, //本月工时补贴 - "lower_work_hours_month": 0, //下级打卡总工时 - "lower_recruit_subsidy_month": 0, //下级招聘补贴工资 - "salary": 0 //本月共收入 - } - }</pre> + <pre id="sample_response124">无</pre> </div> </div> </div><!-- #sample --> @@ -2288,31 +2282,37 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-70"> + <div class="panel-heading" id="heading-125"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion70" href="#collapseOne70"> 劳务管理-工资 <span class="text-muted">/api/v2.user/salary</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion125" href="#collapseOne125"> 检测手机 <span class="text-muted">/api/v2.validate/check_mobile_exist</span></a> </h4> </div> - <div id="collapseOne70" class="panel-collapse collapse"> + <div id="collapseOne125" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab70"> - <li class="active"><a href="#info70" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox70" data-toggle="tab">在线测试</a></li> - <li><a href="#sample70" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab125"> + <li class="active"><a href="#info125" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox125" data-toggle="tab">在线测试</a></li> + <li><a href="#sample125" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info70"> + <div class="tab-pane active" id="info125"> <div class="well"> - 劳务管理-工资 </div> + 检测手机 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -2324,52 +2324,36 @@ </thead> <tbody> <tr> - <td>token</td> + <td>mobile</td> <td>string</td> <td>是</td> - <td>请求的Token</td> + <td>手机号</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox70"> + <div class="tab-pane" id="sandbox125"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/salary" method="POST" name="form70" id="form70"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_mobile_exist" method="get" name="form125" id="form125"> <div class="form-group"> - 无 + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="70">提交</button> - <button type="reset" class="btn btn-info" rel="70">重置</button> + <button type="submit" class="btn btn-success send" rel="125">提交</button> + <button type="reset" class="btn btn-info" rel="125">重置</button> </div> </form> </div> @@ -2379,8 +2363,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers70"></pre> - <pre id="response70"></pre> + <pre id="response_headers125"></pre> + <pre id="response125"></pre> </div> </div> </div> @@ -2395,24 +2379,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample70"> + <div class="tab-pane" id="sample125"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response70">{ - "code": 1, - "msg": "成功", - "time": "1612234313", - "data": { - "work_hours_month": "0.0", //本月打卡总工时 - "work_salary_month": "0.00", //本月打卡工资 - "work_subsidy": "2.00", //工时补贴(元/小时) - "work_subsidy_month": 0, //本月工时补贴 - "lower_work_hours_month": 0, //下级打卡总工时 - "recruit_subsidy_month": 0, //下级招聘补贴工资 - "salary": 0 //本月共收入 - "notice" : "通知内容" // 通知 - } - }</pre> + <pre id="sample_response125">无</pre> </div> </div> </div><!-- #sample --> @@ -2422,49 +2392,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-76"> + <div class="panel-heading" id="heading-126"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion76" href="#collapseOne76"> 编辑资料 <span class="text-muted">/api/v2.user/profile</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion126" href="#collapseOne126"> 检测邮箱 <span class="text-muted">/api/v2.validate/check_email_exist</span></a> </h4> </div> - <div id="collapseOne76" class="panel-collapse collapse"> + <div id="collapseOne126" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab76"> - <li class="active"><a href="#info76" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox76" data-toggle="tab">在线测试</a></li> - <li><a href="#sample76" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab126"> + <li class="active"><a href="#info126" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox126" data-toggle="tab">在线测试</a></li> + <li><a href="#sample126" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info76"> + <div class="tab-pane active" id="info126"> <div class="well"> - 编辑资料 </div> + 检测邮箱 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -2481,16 +2434,10 @@ </thead> <tbody> <tr> - <td>avatar</td> - <td>string</td> - <td>否</td> - <td>头像</td> - </tr> - <tr> - <td>nickname</td> + <td>mobile</td> <td>string</td> - <td>否</td> - <td>昵称</td> + <td>是</td> + <td>邮箱</td> </tr> </tbody> </table> @@ -2503,35 +2450,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox76"> + <div class="tab-pane" id="sandbox126"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/profile" method="POST" name="form76" id="form76"> - <div class="form-group"> - <label class="control-label" for="avatar">avatar</label> - <input type="string" class="form-control input-sm" id="avatar" placeholder="头像" name="avatar"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_email_exist" method="get" name="form126" id="form126"> <div class="form-group"> - <label class="control-label" for="nickname">nickname</label> - <input type="string" class="form-control input-sm" id="nickname" placeholder="昵称" name="nickname"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="邮箱" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="76">提交</button> - <button type="reset" class="btn btn-info" rel="76">重置</button> + <button type="submit" class="btn btn-success send" rel="126">提交</button> + <button type="reset" class="btn btn-info" rel="126">重置</button> </div> </form> </div> @@ -2541,8 +2473,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers76"></pre> - <pre id="response76"></pre> + <pre id="response_headers126"></pre> + <pre id="response126"></pre> </div> </div> </div> @@ -2557,15 +2489,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample76"> + <div class="tab-pane" id="sample126"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response76">{ - "code": 1, - "msg": "成功", - "time": "1604282876", - "data": null - }</pre> + <pre id="sample_response126">无</pre> </div> </div> </div><!-- #sample --> @@ -2575,28 +2502,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-81"> + <div class="panel-heading" id="heading-127"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion81" href="#collapseOne81"> 工厂列表 <span class="text-muted">/api/v2.user/factoryList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion127" href="#collapseOne127"> 检测手机验证码 <span class="text-muted">/api/v2.validate/check_sms_correct</span></a> </h4> </div> - <div id="collapseOne81" class="panel-collapse collapse"> + <div id="collapseOne127" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab81"> - <li class="active"><a href="#info81" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox81" data-toggle="tab">在线测试</a></li> - <li><a href="#sample81" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab127"> + <li class="active"><a href="#info127" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox127" data-toggle="tab">在线测试</a></li> + <li><a href="#sample127" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info81"> + <div class="tab-pane active" id="info127"> <div class="well"> - 工厂列表 </div> + 检测手机验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -2606,7 +2533,36 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -2616,21 +2572,30 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox81"> + <div class="tab-pane" id="sandbox127"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/factoryList" method="POST" name="form81" id="form81"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_sms_correct" method="get" name="form127" id="form127"> <div class="form-group"> - 无 + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="81">提交</button> - <button type="reset" class="btn btn-info" rel="81">重置</button> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> </div> - </form> + <div class="form-group"> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="127">提交</button> + <button type="reset" class="btn btn-info" rel="127">重置</button> + </div> + </form> </div> </div> <div class="panel panel-default"> @@ -2638,8 +2603,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers81"></pre> - <pre id="response81"></pre> + <pre id="response_headers127"></pre> + <pre id="response127"></pre> </div> </div> </div> @@ -2654,19 +2619,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample81"> + <div class="tab-pane" id="sample127"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response81">{ - "code": 1, - "msg": "入职成功后,驻厂将会为您服务", - "time": "1612233294", - "data": [{ - "id": 1, //工厂ID - "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 - "factory_shortname": "" //工厂简称 - }] - }</pre> + <pre id="sample_response127">无</pre> </div> </div> </div><!-- #sample --> @@ -2676,49 +2632,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-82"> + <div class="panel-heading" id="heading-128"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion82" href="#collapseOne82"> 确认入职 <span class="text-muted">/api/v2.user/joinFactory</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion128" href="#collapseOne128"> 检测邮箱验证码 <span class="text-muted">/api/v2.validate/check_ems_correct</span></a> </h4> </div> - <div id="collapseOne82" class="panel-collapse collapse"> + <div id="collapseOne128" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab82"> - <li class="active"><a href="#info82" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox82" data-toggle="tab">在线测试</a></li> - <li><a href="#sample82" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab128"> + <li class="active"><a href="#info128" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox128" data-toggle="tab">在线测试</a></li> + <li><a href="#sample128" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info82"> + <div class="tab-pane active" id="info128"> <div class="well"> - 确认入职 </div> + 检测邮箱验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -2735,10 +2674,22 @@ </thead> <tbody> <tr> - <td>factory_id</td> - <td>inter</td> + <td>email</td> + <td>string</td> <td>是</td> - <td>工厂ID</td> + <td>邮箱</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件</td> </tr> </tbody> </table> @@ -2751,31 +2702,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox82"> + <div class="tab-pane" id="sandbox128"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <div class="headers"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.validate/check_ems_correct" method="get" name="form128" id="form128"> <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/joinFactory" method="POST" name="form82" id="form82"> <div class="form-group"> - <label class="control-label" for="factory_id">factory_id</label> - <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="82">提交</button> - <button type="reset" class="btn btn-info" rel="82">重置</button> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="128">提交</button> + <button type="reset" class="btn btn-info" rel="128">重置</button> </div> </form> </div> @@ -2785,8 +2733,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers82"></pre> - <pre id="response82"></pre> + <pre id="response_headers128"></pre> + <pre id="response128"></pre> </div> </div> </div> @@ -2801,14 +2749,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample82"> + <div class="tab-pane" id="sample128"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response82">{ - 'code':'1', - 'msg':'返回成功', - "data": null - }</pre> + <pre id="sample_response128">无</pre> </div> </div> </div><!-- #sample --> @@ -2817,29 +2761,31 @@ </div> </div> </div> + <h2>会员接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-83"> + <div class="panel-heading" id="heading-89"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion83" href="#collapseOne83"> 办理离职 <span class="text-muted">/api/v2.user/quitFactory</span></a> + <a data-toggle="collapse" data-parent="#accordion89" href="#collapseOne89"> 劳务管理-个人信息 <span class="text-muted">/api/v2.user/index</span></a> </h4> </div> - <div id="collapseOne83" class="panel-collapse collapse"> + <div id="collapseOne89" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab83"> - <li class="active"><a href="#info83" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox83" data-toggle="tab">在线测试</a></li> - <li><a href="#sample83" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab89"> + <li class="active"><a href="#info89" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox89" data-toggle="tab">在线测试</a></li> + <li><a href="#sample89" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info83"> + <div class="tab-pane active" id="info89"> <div class="well"> - 办理离职 </div> + 劳务管理-个人信息 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -2866,24 +2812,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>factory_id</td> - <td>inter</td> - <td>是</td> - <td>工厂ID</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -2893,7 +2822,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox83"> + <div class="tab-pane" id="sandbox89"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -2910,14 +2839,13 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/quitFactory" method="POST" name="form83" id="form83"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/index" method="POST" name="form89" id="form89"> <div class="form-group"> - <label class="control-label" for="factory_id">factory_id</label> - <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="83">提交</button> - <button type="reset" class="btn btn-info" rel="83">重置</button> + <button type="submit" class="btn btn-success send" rel="89">提交</button> + <button type="reset" class="btn btn-info" rel="89">重置</button> </div> </form> </div> @@ -2927,8 +2855,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers83"></pre> - <pre id="response83"></pre> + <pre id="response_headers89"></pre> + <pre id="response89"></pre> </div> </div> </div> @@ -2943,13 +2871,26 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample83"> + <div class="tab-pane" id="sample89"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response83">{ - 'code':'1', - 'msg':'返回成功', - "data": null + <pre id="sample_response89">{ + "code": 1, + "msg": "成功", + "time": "1606137472", + "data": { + "user": { //用户信息 + "id": 1, //用户ID + "nickname": "admin", //昵称 + "mobile": "13888888888", //手机号 + "avatar": "/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //原始头像地址 + "is_work": "1", //是否在职:0=否,1=是 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + } + } }</pre> </div> </div> @@ -2960,28 +2901,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-84"> + <div class="panel-heading" id="heading-91"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion84" href="#collapseOne84"> 实名认证 <span class="text-muted">/api/v2.user/realname</span></a> + <a data-toggle="collapse" data-parent="#accordion91" href="#collapseOne91"> 劳务管理-工资-历史收入 <span class="text-muted">/api/v2.user/salaryList</span></a> </h4> </div> - <div id="collapseOne84" class="panel-collapse collapse"> + <div id="collapseOne91" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab84"> - <li class="active"><a href="#info84" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox84" data-toggle="tab">在线测试</a></li> - <li><a href="#sample84" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab91"> + <li class="active"><a href="#info91" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox91" data-toggle="tab">在线测试</a></li> + <li><a href="#sample91" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info84"> + <div class="tab-pane active" id="info91"> <div class="well"> - 实名认证 </div> + 劳务管理-工资-历史收入 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -3019,34 +2960,16 @@ </thead> <tbody> <tr> - <td>realname</td> - <td>string</td> - <td>是</td> - <td>姓名</td> - </tr> - <tr> - <td>idcard</td> - <td>string</td> - <td>是</td> - <td>身份证号</td> - </tr> - <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>idcard_front</td> - <td>string</td> - <td>是</td> - <td>上传身份证正面</td> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> </tr> <tr> - <td>idcard_back</td> - <td>string</td> - <td>是</td> - <td>上传身份证反面</td> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> </tr> </tbody> </table> @@ -3059,7 +2982,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox84"> + <div class="tab-pane" id="sandbox91"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -3076,30 +2999,18 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/realname" method="POST" name="form84" id="form84"> - <div class="form-group"> - <label class="control-label" for="realname">realname</label> - <input type="string" class="form-control input-sm" id="realname" required placeholder="姓名" name="realname"> - </div> - <div class="form-group"> - <label class="control-label" for="idcard">idcard</label> - <input type="string" class="form-control input-sm" id="idcard" required placeholder="身份证号" name="idcard"> - </div> - <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/salaryList" method="POST" name="form91" id="form91"> <div class="form-group"> - <label class="control-label" for="idcard_front">idcard_front</label> - <input type="string" class="form-control input-sm" id="idcard_front" required placeholder="上传身份证正面" name="idcard_front"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <label class="control-label" for="idcard_back">idcard_back</label> - <input type="string" class="form-control input-sm" id="idcard_back" required placeholder="上传身份证反面" name="idcard_back"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="84">提交</button> - <button type="reset" class="btn btn-info" rel="84">重置</button> + <button type="submit" class="btn btn-success send" rel="91">提交</button> + <button type="reset" class="btn btn-info" rel="91">重置</button> </div> </form> </div> @@ -3109,8 +3020,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers84"></pre> - <pre id="response84"></pre> + <pre id="response_headers91"></pre> + <pre id="response91"></pre> </div> </div> </div> @@ -3125,13 +3036,22 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample84"> + <div class="tab-pane" id="sample91"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response84">{ - 'code':'1', - 'msg':'返回成功', - "data": null + <pre id="sample_response91">{ + "code": 1, + "msg": "成功", + "time": "1612234313", + "data": { + "work_hours_month": "0.0", //本月打卡总工时 + "work_salary_month": "0.00", //本月打卡工资 + "work_subsidy": "2.00", //工时补贴(元/小时) + "work_subsidy_month": 0, //本月工时补贴 + "lower_work_hours_month": 0, //下级打卡总工时 + "lower_recruit_subsidy_month": 0, //下级招聘补贴工资 + "salary": 0 //本月共收入 + } }</pre> </div> </div> @@ -3142,28 +3062,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-85"> + <div class="panel-heading" id="heading-90"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion85" href="#collapseOne85"> 实名认证状态 <span class="text-muted">/api/v2.user/realnameStatus</span></a> + <a data-toggle="collapse" data-parent="#accordion90" href="#collapseOne90"> 劳务管理-工资 <span class="text-muted">/api/v2.user/salary</span></a> </h4> </div> - <div id="collapseOne85" class="panel-collapse collapse"> + <div id="collapseOne90" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab85"> - <li class="active"><a href="#info85" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox85" data-toggle="tab">在线测试</a></li> - <li><a href="#sample85" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab90"> + <li class="active"><a href="#info90" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox90" data-toggle="tab">在线测试</a></li> + <li><a href="#sample90" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info85"> + <div class="tab-pane active" id="info90"> <div class="well"> - 实名认证状态 </div> + 劳务管理-工资 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -3200,7 +3120,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox85"> + <div class="tab-pane" id="sandbox90"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -3217,13 +3137,13 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/realnameStatus" method="POST" name="form85" id="form85"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/salary" method="POST" name="form90" id="form90"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="85">提交</button> - <button type="reset" class="btn btn-info" rel="85">重置</button> + <button type="submit" class="btn btn-success send" rel="90">提交</button> + <button type="reset" class="btn btn-info" rel="90">重置</button> </div> </form> </div> @@ -3233,8 +3153,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers85"></pre> - <pre id="response85"></pre> + <pre id="response_headers90"></pre> + <pre id="response90"></pre> </div> </div> </div> @@ -3249,14 +3169,22 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample85"> + <div class="tab-pane" id="sample90"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response85">{ - 'code':'1', - 'msg':'返回成功', + <pre id="sample_response90">{ + "code": 1, + "msg": "成功", + "time": "1612234313", "data": { - 'status': '1', // 实名认证状态:0=申请中,1=通过,2=未申请 + "work_hours_month": "0.0", //本月打卡总工时 + "work_salary_month": "0.00", //本月打卡工资 + "work_subsidy": "2.00", //工时补贴(元/小时) + "work_subsidy_month": 0, //本月工时补贴 + "lower_work_hours_month": 0, //下级打卡总工时 + "recruit_subsidy_month": 0, //下级招聘补贴工资 + "salary": 0 //本月共收入 + "notice" : "通知内容" // 通知 } }</pre> </div> @@ -3268,32 +3196,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-86"> + <div class="panel-heading" id="heading-96"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion86" href="#collapseOne86"> code获取session_key和openid <span class="text-muted">/api/v2.user/get_session_key</span></a> + <a data-toggle="collapse" data-parent="#accordion96" href="#collapseOne96"> 编辑资料 <span class="text-muted">/api/v2.user/profile</span></a> </h4> </div> - <div id="collapseOne86" class="panel-collapse collapse"> + <div id="collapseOne96" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab86"> - <li class="active"><a href="#info86" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox86" data-toggle="tab">在线测试</a></li> - <li><a href="#sample86" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab96"> + <li class="active"><a href="#info96" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox96" data-toggle="tab">在线测试</a></li> + <li><a href="#sample96" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info86"> + <div class="tab-pane active" id="info96"> <div class="well"> - code获取session_key和openid </div> + 编辑资料 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -3310,10 +3255,16 @@ </thead> <tbody> <tr> - <td>code</td> + <td>avatar</td> <td>string</td> - <td>是</td> - <td>小程序code</td> + <td>否</td> + <td>头像</td> + </tr> + <tr> + <td>nickname</td> + <td>string</td> + <td>否</td> + <td>昵称</td> </tr> </tbody> </table> @@ -3326,20 +3277,35 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox86"> + <div class="tab-pane" id="sandbox96"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/get_session_key" method="POST" name="form86" id="form86"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/profile" method="POST" name="form96" id="form96"> <div class="form-group"> - <label class="control-label" for="code">code</label> - <input type="string" class="form-control input-sm" id="code" required placeholder="小程序code" name="code"> + <label class="control-label" for="avatar">avatar</label> + <input type="string" class="form-control input-sm" id="avatar" placeholder="头像" name="avatar"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="86">提交</button> - <button type="reset" class="btn btn-info" rel="86">重置</button> + <label class="control-label" for="nickname">nickname</label> + <input type="string" class="form-control input-sm" id="nickname" placeholder="昵称" name="nickname"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="96">提交</button> + <button type="reset" class="btn btn-info" rel="96">重置</button> </div> </form> </div> @@ -3349,8 +3315,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers86"></pre> - <pre id="response86"></pre> + <pre id="response_headers96"></pre> + <pre id="response96"></pre> </div> </div> </div> @@ -3358,44 +3324,21 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample86"> + <div class="tab-pane" id="sample96"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response86">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "session_key": "1qyMwZRVdlBmQLwRYtYSgA==", - "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", - "openid": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", - } + <pre id="sample_response96">{ + "code": 1, + "msg": "成功", + "time": "1604282876", + "data": null }</pre> </div> </div> @@ -3406,28 +3349,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-87"> + <div class="panel-heading" id="heading-101"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion87" href="#collapseOne87"> 用户授权登录 <span class="text-muted">/api/v2.user/authority</span></a> + <a data-toggle="collapse" data-parent="#accordion101" href="#collapseOne101"> 工厂列表 <span class="text-muted">/api/v2.user/factoryList</span></a> </h4> </div> - <div id="collapseOne87" class="panel-collapse collapse"> + <div id="collapseOne101" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab87"> - <li class="active"><a href="#info87" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox87" data-toggle="tab">在线测试</a></li> - <li><a href="#sample87" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab101"> + <li class="active"><a href="#info101" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox101" data-toggle="tab">在线测试</a></li> + <li><a href="#sample101" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info87"> + <div class="tab-pane active" id="info101"> <div class="well"> - 用户授权登录 </div> + 工厂列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -3437,48 +3380,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>sessionKey</td> - <td>string</td> - <td>是</td> - <td>小程序sessionKey</td> - </tr> - <tr> - <td>iv</td> - <td>string</td> - <td>是</td> - <td>小程序iv</td> - </tr> - <tr> - <td>encryptData</td> - <td>string</td> - <td>是</td> - <td>小程序encryptData</td> - </tr> - <tr> - <td>openid</td> - <td>string</td> - <td>是</td> - <td>openid</td> - </tr> - <tr> - <td>user_id</td> - <td>inter</td> - <td>否</td> - <td>扫码获取的用户ID</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -3488,36 +3390,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox87"> + <div class="tab-pane" id="sandbox101"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/authority" method="POST" name="form87" id="form87"> - <div class="form-group"> - <label class="control-label" for="sessionKey">sessionKey</label> - <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> - </div> - <div class="form-group"> - <label class="control-label" for="iv">iv</label> - <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/factoryList" method="POST" name="form101" id="form101"> <div class="form-group"> - <label class="control-label" for="encryptData">encryptData</label> - <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> - </div> - <div class="form-group"> - <label class="control-label" for="openid">openid</label> - <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> - </div> - <div class="form-group"> - <label class="control-label" for="user_id">user_id</label> - <input type="inter" class="form-control input-sm" id="user_id" placeholder="扫码获取的用户ID" name="user_id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="87">提交</button> - <button type="reset" class="btn btn-info" rel="87">重置</button> + <button type="submit" class="btn btn-success send" rel="101">提交</button> + <button type="reset" class="btn btn-info" rel="101">重置</button> </div> </form> </div> @@ -3527,8 +3412,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers87"></pre> - <pre id="response87"></pre> + <pre id="response_headers101"></pre> + <pre id="response101"></pre> </div> </div> </div> @@ -3536,42 +3421,25 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample87"> + <div class="tab-pane" id="sample101"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response87">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", - } + <pre id="sample_response101">{ + "code": 1, + "msg": "入职成功后,驻厂将会为您服务", + "time": "1612233294", + "data": [{ + "id": 1, //工厂ID + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "" //工厂简称 + }] }</pre> </div> </div> @@ -3582,37 +3450,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-88"> + <div class="panel-heading" id="heading-102"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion88" href="#collapseOne88"> 用户授权获取手机号 <span class="text-muted">/api/v2.user/getPhoneNumber</span></a> + <a data-toggle="collapse" data-parent="#accordion102" href="#collapseOne102"> 确认入职 <span class="text-muted">/api/v2.user/joinFactory</span></a> </h4> </div> - <div id="collapseOne88" class="panel-collapse collapse"> + <div id="collapseOne102" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab88"> - <li class="active"><a href="#info88" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox88" data-toggle="tab">在线测试</a></li> - <li><a href="#sample88" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab102"> + <li class="active"><a href="#info102" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox102" data-toggle="tab">在线测试</a></li> + <li><a href="#sample102" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info88"> + <div class="tab-pane active" id="info102"> <div class="well"> - 用户授权获取手机号 </div> + 确认入职 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -3624,28 +3486,33 @@ </thead> <tbody> <tr> - <td>sessionKey</td> - <td>string</td> - <td>是</td> - <td>小程序sessionKey</td> - </tr> - <tr> - <td>iv</td> + <td>token</td> <td>string</td> <td>是</td> - <td>小程序iv</td> + <td>请求的Token</td> </tr> - <tr> - <td>encryptData</td> - <td>string</td> - <td>是</td> - <td>小程序encryptData</td> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> </tr> + </thead> + <tbody> <tr> - <td>openid</td> - <td>string</td> + <td>factory_id</td> + <td>inter</td> <td>是</td> - <td>openid</td> + <td>工厂ID</td> </tr> </tbody> </table> @@ -3658,32 +3525,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox88"> + <div class="tab-pane" id="sandbox102"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/getPhoneNumber" method="POST" name="form88" id="form88"> - <div class="form-group"> - <label class="control-label" for="sessionKey">sessionKey</label> - <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> - </div> - <div class="form-group"> - <label class="control-label" for="iv">iv</label> - <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> - </div> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="encryptData">encryptData</label> - <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/joinFactory" method="POST" name="form102" id="form102"> <div class="form-group"> - <label class="control-label" for="openid">openid</label> - <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="88">提交</button> - <button type="reset" class="btn btn-info" rel="88">重置</button> + <button type="submit" class="btn btn-success send" rel="102">提交</button> + <button type="reset" class="btn btn-info" rel="102">重置</button> </div> </form> </div> @@ -3693,8 +3559,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers88"></pre> - <pre id="response88"></pre> + <pre id="response_headers102"></pre> + <pre id="response102"></pre> </div> </div> </div> @@ -3702,48 +3568,20 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample88"> + <div class="tab-pane" id="sample102"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response88">{ + <pre id="sample_response102">{ 'code':'1', 'msg':'返回成功', - "data": { - "phoneNumber": "13580006666", //用户绑定的手机号(国外手机号会有区号) - "purePhoneNumber": "13580006666", //没有区号的手机号 - "countryCode": "86", //区号 - "watermark": { - "appid": "APPID", - "timestamp": TIMESTAMP - } - } + "data": null }</pre> </div> </div> @@ -3754,38 +3592,72 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-89"> + <div class="panel-heading" id="heading-103"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion89" href="#collapseOne89"> 工时补贴介绍 <span class="text-muted">/api/v2.user/workSubsidyContent</span></a> + <a data-toggle="collapse" data-parent="#accordion103" href="#collapseOne103"> 办理离职 <span class="text-muted">/api/v2.user/quitFactory</span></a> </h4> </div> - <div id="collapseOne89" class="panel-collapse collapse"> + <div id="collapseOne103" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab89"> - <li class="active"><a href="#info89" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox89" data-toggle="tab">在线测试</a></li> - <li><a href="#sample89" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab103"> + <li class="active"><a href="#info103" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox103" data-toggle="tab">在线测试</a></li> + <li><a href="#sample103" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info89"> + <div class="tab-pane active" id="info103"> <div class="well"> - 工时补贴介绍 </div> + 办理离职 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>factory_id</td> + <td>inter</td> + <td>是</td> + <td>工厂ID</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -3795,19 +3667,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox89"> + <div class="tab-pane" id="sandbox103"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/workSubsidyContent" method="POST" name="form89" id="form89"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/quitFactory" method="POST" name="form103" id="form103"> <div class="form-group"> - 无 + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="89">提交</button> - <button type="reset" class="btn btn-info" rel="89">重置</button> + <button type="submit" class="btn btn-success send" rel="103">提交</button> + <button type="reset" class="btn btn-info" rel="103">重置</button> </div> </form> </div> @@ -3817,8 +3701,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers89"></pre> - <pre id="response89"></pre> + <pre id="response_headers103"></pre> + <pre id="response103"></pre> </div> </div> </div> @@ -3833,111 +3717,13 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample89"> + <div class="tab-pane" id="sample103"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response89">{ - "code": 1, - "msg": "成功", - "time": "1606124276", - "data": "<p>工时补贴富文本详情介绍</p>" //工时补贴介绍 - }</pre> - </div> - </div> - </div><!-- #sample --> - - </div><!-- .tab-content --> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading" id="heading-90"> - <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion90" href="#collapseOne90"> 招聘补贴介绍 <span class="text-muted">/api/v2.user/recruitSubsidyContent</span></a> - </h4> - </div> - <div id="collapseOne90" class="panel-collapse collapse"> - <div class="panel-body"> - - <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab90"> - <li class="active"><a href="#info90" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox90" data-toggle="tab">在线测试</a></li> - <li><a href="#sample90" data-toggle="tab">返回示例</a></li> - </ul> - - <!-- Tab panes --> - <div class="tab-content"> - - <div class="tab-pane active" id="info90"> - <div class="well"> - 招聘补贴介绍 </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>正文</strong></div> - <div class="panel-body"> - 无 </div> - </div> - </div><!-- #info --> - - <div class="tab-pane" id="sandbox90"> - <div class="row"> - <div class="col-md-12"> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/recruitSubsidyContent" method="POST" name="form90" id="form90"> - <div class="form-group"> - 无 - </div> - <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="90">提交</button> - <button type="reset" class="btn btn-info" rel="90">重置</button> - </div> - </form> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>响应输出</strong></div> - <div class="panel-body"> - <div class="row"> - <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers90"></pre> - <pre id="response90"></pre> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>返回参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - </div> - </div> - </div><!-- #sandbox --> - - <div class="tab-pane" id="sample90"> - <div class="row"> - <div class="col-md-12"> - <pre id="sample_response90">{ - "code": 1, - "msg": "成功", - "time": "1606124276", - "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 + <pre id="sample_response103">{ + 'code':'1', + 'msg':'返回成功', + "data": null }</pre> </div> </div> @@ -3948,28 +3734,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-91"> + <div class="panel-heading" id="heading-104"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion91" href="#collapseOne91"> 记一笔工时 <span class="text-muted">/api/v2.user/logWork</span></a> + <a data-toggle="collapse" data-parent="#accordion104" href="#collapseOne104"> 实名认证 <span class="text-muted">/api/v2.user/realname</span></a> </h4> </div> - <div id="collapseOne91" class="panel-collapse collapse"> + <div id="collapseOne104" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab91"> - <li class="active"><a href="#info91" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox91" data-toggle="tab">在线测试</a></li> - <li><a href="#sample91" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab104"> + <li class="active"><a href="#info104" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox104" data-toggle="tab">在线测试</a></li> + <li><a href="#sample104" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info91"> + <div class="tab-pane active" id="info104"> <div class="well"> - 记一笔工时 </div> + 实名认证 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -4007,28 +3793,34 @@ </thead> <tbody> <tr> - <td>work_date</td> + <td>realname</td> <td>string</td> <td>是</td> - <td>工作日期</td> + <td>姓名</td> </tr> <tr> - <td>work_hours</td> + <td>idcard</td> <td>string</td> <td>是</td> - <td>工作时长</td> + <td>身份证号</td> </tr> <tr> - <td>work_price</td> + <td>mobile</td> <td>string</td> <td>是</td> - <td>工价</td> + <td>手机号</td> </tr> <tr> - <td>work_type</td> + <td>idcard_front</td> <td>string</td> <td>是</td> - <td>班次:1=白班,2=夜班,3=休班</td> + <td>上传身份证正面</td> + </tr> + <tr> + <td>idcard_back</td> + <td>string</td> + <td>是</td> + <td>上传身份证反面</td> </tr> </tbody> </table> @@ -4041,7 +3833,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox91"> + <div class="tab-pane" id="sandbox104"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -4058,26 +3850,30 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/logWork" method="POST" name="form91" id="form91"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/realname" method="POST" name="form104" id="form104"> <div class="form-group"> - <label class="control-label" for="work_date">work_date</label> - <input type="string" class="form-control input-sm" id="work_date" required placeholder="工作日期" name="work_date"> + <label class="control-label" for="realname">realname</label> + <input type="string" class="form-control input-sm" id="realname" required placeholder="姓名" name="realname"> </div> <div class="form-group"> - <label class="control-label" for="work_hours">work_hours</label> - <input type="string" class="form-control input-sm" id="work_hours" required placeholder="工作时长" name="work_hours"> + <label class="control-label" for="idcard">idcard</label> + <input type="string" class="form-control input-sm" id="idcard" required placeholder="身份证号" name="idcard"> </div> <div class="form-group"> - <label class="control-label" for="work_price">work_price</label> - <input type="string" class="form-control input-sm" id="work_price" required placeholder="工价" name="work_price"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <label class="control-label" for="work_type">work_type</label> - <input type="string" class="form-control input-sm" id="work_type" required placeholder="班次:1=白班,2=夜班,3=休班" name="work_type"> + <label class="control-label" for="idcard_front">idcard_front</label> + <input type="string" class="form-control input-sm" id="idcard_front" required placeholder="上传身份证正面" name="idcard_front"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="91">提交</button> - <button type="reset" class="btn btn-info" rel="91">重置</button> + <label class="control-label" for="idcard_back">idcard_back</label> + <input type="string" class="form-control input-sm" id="idcard_back" required placeholder="上传身份证反面" name="idcard_back"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="104">提交</button> + <button type="reset" class="btn btn-info" rel="104">重置</button> </div> </form> </div> @@ -4087,8 +3883,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers91"></pre> - <pre id="response91"></pre> + <pre id="response_headers104"></pre> + <pre id="response104"></pre> </div> </div> </div> @@ -4103,14 +3899,13 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample91"> + <div class="tab-pane" id="sample104"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response91">{ - "code": 1, - "msg": "成功", - "time": "1606124276", - "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 + <pre id="sample_response104">{ + 'code':'1', + 'msg':'返回成功', + "data": null }</pre> </div> </div> @@ -4121,28 +3916,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-92"> + <div class="panel-heading" id="heading-105"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion92" href="#collapseOne92"> 工时详情 <span class="text-muted">/api/v2.user/workLogInfo</span></a> + <a data-toggle="collapse" data-parent="#accordion105" href="#collapseOne105"> 实名认证状态 <span class="text-muted">/api/v2.user/realnameStatus</span></a> </h4> </div> - <div id="collapseOne92" class="panel-collapse collapse"> + <div id="collapseOne105" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab92"> - <li class="active"><a href="#info92" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox92" data-toggle="tab">在线测试</a></li> - <li><a href="#sample92" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab105"> + <li class="active"><a href="#info105" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox105" data-toggle="tab">在线测试</a></li> + <li><a href="#sample105" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info92"> + <div class="tab-pane active" id="info105"> <div class="well"> - 工时详情 </div> + 实名认证状态 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -4169,24 +3964,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>work_date</td> - <td>string</td> - <td>是</td> - <td>工作日期</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -4196,7 +3974,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox92"> + <div class="tab-pane" id="sandbox105"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -4213,14 +3991,13 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/workLogInfo" method="POST" name="form92" id="form92"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/realnameStatus" method="POST" name="form105" id="form105"> <div class="form-group"> - <label class="control-label" for="work_date">work_date</label> - <input type="string" class="form-control input-sm" id="work_date" required placeholder="工作日期" name="work_date"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="92">提交</button> - <button type="reset" class="btn btn-info" rel="92">重置</button> + <button type="submit" class="btn btn-success send" rel="105">提交</button> + <button type="reset" class="btn btn-info" rel="105">重置</button> </div> </form> </div> @@ -4230,8 +4007,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers92"></pre> - <pre id="response92"></pre> + <pre id="response_headers105"></pre> + <pre id="response105"></pre> </div> </div> </div> @@ -4246,23 +4023,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample92"> + <div class="tab-pane" id="sample105"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response92">{ - "code": 1, - "msg": "成功", - "time": "1612340182", + <pre id="sample_response105">{ + 'code':'1', + 'msg':'返回成功', "data": { - "id": 18, //ID - "user_id": 72, - "work_date": "2021-02-02", //工作日期 - "work_hours": "4.5", //工时时长 - "work_price": "20.00", //工价 - "work_salary": "90.00", //今日收入 - "work_type": "1", //班次:1=白班,2=夜班,3=休班 - "createtime": 1612279627, - "updatetime": 1612279627 + 'status': '1', // 实名认证状态:0=申请中,1=通过,2=未申请 } }</pre> </div> @@ -4274,49 +4042,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-93"> + <div class="panel-heading" id="heading-106"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion93" href="#collapseOne93"> 工时统计图 <span class="text-muted">/api/v2.user/workLogList</span></a> + <a data-toggle="collapse" data-parent="#accordion106" href="#collapseOne106"> code获取session_key和openid <span class="text-muted">/api/v2.user/get_session_key</span></a> </h4> </div> - <div id="collapseOne93" class="panel-collapse collapse"> + <div id="collapseOne106" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab93"> - <li class="active"><a href="#info93" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox93" data-toggle="tab">在线测试</a></li> - <li><a href="#sample93" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab106"> + <li class="active"><a href="#info106" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox106" data-toggle="tab">在线测试</a></li> + <li><a href="#sample106" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info93"> + <div class="tab-pane active" id="info106"> <div class="well"> - 工时统计图 </div> + code获取session_key和openid </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -4333,10 +4084,10 @@ </thead> <tbody> <tr> - <td>month</td> + <td>code</td> <td>string</td> <td>是</td> - <td>年月</td> + <td>小程序code</td> </tr> </tbody> </table> @@ -4349,31 +4100,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox93"> + <div class="tab-pane" id="sandbox106"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/workLogList" method="POST" name="form93" id="form93"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/get_session_key" method="POST" name="form106" id="form106"> <div class="form-group"> - <label class="control-label" for="month">month</label> - <input type="string" class="form-control input-sm" id="month" required placeholder="年月" name="month"> + <label class="control-label" for="code">code</label> + <input type="string" class="form-control input-sm" id="code" required placeholder="小程序code" name="code"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="93">提交</button> - <button type="reset" class="btn btn-info" rel="93">重置</button> + <button type="submit" class="btn btn-success send" rel="106">提交</button> + <button type="reset" class="btn btn-info" rel="106">重置</button> </div> </form> </div> @@ -4383,8 +4123,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers93"></pre> - <pre id="response93"></pre> + <pre id="response_headers106"></pre> + <pre id="response106"></pre> </div> </div> </div> @@ -4392,29 +4132,43 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + </tbody> + </table> </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample93"> + <div class="tab-pane" id="sample106"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response93">{ - "code": 1, - "msg": "打卡成功", - "time": "1612279947", + <pre id="sample_response106">{ + 'code':'1', + 'msg':'返回成功', "data": { - "work_hours_month": 9, //工时时长 - "work_salary_month": 180, //收入 - "list": [{ //本月数据 - "id": 14, - "work_date": "01", //打卡日期 - "work_hours": "4.5", //工时 - "work_type": "1", //班次:1=白班,2=夜班,3=休班 - }] + "session_key": "1qyMwZRVdlBmQLwRYtYSgA==", + "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", + "openid": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", } }</pre> </div> @@ -4426,31 +4180,37 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-94"> + <div class="panel-heading" id="heading-107"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion94" href="#collapseOne94"> 借支-打卡天数 <span class="text-muted">/api/v2.user/logDays</span></a> + <a data-toggle="collapse" data-parent="#accordion107" href="#collapseOne107"> 用户授权登录 <span class="text-muted">/api/v2.user/authority</span></a> </h4> </div> - <div id="collapseOne94" class="panel-collapse collapse"> + <div id="collapseOne107" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab94"> - <li class="active"><a href="#info94" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox94" data-toggle="tab">在线测试</a></li> - <li><a href="#sample94" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab107"> + <li class="active"><a href="#info107" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox107" data-toggle="tab">在线测试</a></li> + <li><a href="#sample107" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info94"> + <div class="tab-pane active" id="info107"> <div class="well"> - 借支-打卡天数 </div> + 用户授权登录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -4462,52 +4222,76 @@ </thead> <tbody> <tr> - <td>token</td> + <td>sessionKey</td> <td>string</td> <td>是</td> - <td>请求的Token</td> + <td>小程序sessionKey</td> + </tr> + <tr> + <td>iv</td> + <td>string</td> + <td>是</td> + <td>小程序iv</td> + </tr> + <tr> + <td>encryptData</td> + <td>string</td> + <td>是</td> + <td>小程序encryptData</td> + </tr> + <tr> + <td>openid</td> + <td>string</td> + <td>是</td> + <td>openid</td> + </tr> + <tr> + <td>user_id</td> + <td>inter</td> + <td>否</td> + <td>扫码获取的用户ID</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox94"> + <div class="tab-pane" id="sandbox107"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <div class="headers"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/authority" method="POST" name="form107" id="form107"> <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + <label class="control-label" for="sessionKey">sessionKey</label> + <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/logDays" method="POST" name="form94" id="form94"> <div class="form-group"> - 无 + <label class="control-label" for="iv">iv</label> + <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="94">提交</button> - <button type="reset" class="btn btn-info" rel="94">重置</button> + <label class="control-label" for="encryptData">encryptData</label> + <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> + </div> + <div class="form-group"> + <label class="control-label" for="openid">openid</label> + <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> + </div> + <div class="form-group"> + <label class="control-label" for="user_id">user_id</label> + <input type="inter" class="form-control input-sm" id="user_id" placeholder="扫码获取的用户ID" name="user_id"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="107">提交</button> + <button type="reset" class="btn btn-info" rel="107">重置</button> </div> </form> </div> @@ -4517,8 +4301,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers94"></pre> - <pre id="response94"></pre> + <pre id="response_headers107"></pre> + <pre id="response107"></pre> </div> </div> </div> @@ -4526,24 +4310,41 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + </tbody> + </table> </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample94"> + <div class="tab-pane" id="sample107"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response94">{ - "code": 1, - "msg": "成功", - "time": "1612319531", + <pre id="sample_response107">{ + 'code':'1', + 'msg':'返回成功', "data": { - "log_days": 1, //连续打卡天数 - "limit_days": 7, //打卡满7天 - "borrow_money": "300.00" //借支金额 + "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", } }</pre> </div> @@ -4555,49 +4356,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-95"> + <div class="panel-heading" id="heading-108"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion95" href="#collapseOne95"> 借支 <span class="text-muted">/api/v2.user/borrow</span></a> + <a data-toggle="collapse" data-parent="#accordion108" href="#collapseOne108"> 用户授权获取手机号 <span class="text-muted">/api/v2.user/getPhoneNumber</span></a> </h4> </div> - <div id="collapseOne95" class="panel-collapse collapse"> + <div id="collapseOne108" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab95"> - <li class="active"><a href="#info95" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox95" data-toggle="tab">在线测试</a></li> - <li><a href="#sample95" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab108"> + <li class="active"><a href="#info108" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox108" data-toggle="tab">在线测试</a></li> + <li><a href="#sample108" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info95"> + <div class="tab-pane active" id="info108"> <div class="well"> - 借支 </div> + 用户授权获取手机号 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -4614,10 +4398,28 @@ </thead> <tbody> <tr> - <td>is_confirm</td> - <td>inter</td> + <td>sessionKey</td> + <td>string</td> <td>是</td> - <td>是否确认:0=否,1=是</td> + <td>小程序sessionKey</td> + </tr> + <tr> + <td>iv</td> + <td>string</td> + <td>是</td> + <td>小程序iv</td> + </tr> + <tr> + <td>encryptData</td> + <td>string</td> + <td>是</td> + <td>小程序encryptData</td> + </tr> + <tr> + <td>openid</td> + <td>string</td> + <td>是</td> + <td>openid</td> </tr> </tbody> </table> @@ -4630,31 +4432,32 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox95"> + <div class="tab-pane" id="sandbox108"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <div class="headers"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/getPhoneNumber" method="POST" name="form108" id="form108"> <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> + <label class="control-label" for="sessionKey">sessionKey</label> + <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/borrow" method="POST" name="form95" id="form95"> <div class="form-group"> - <label class="control-label" for="is_confirm">is_confirm</label> - <input type="inter" class="form-control input-sm" id="is_confirm" required placeholder="是否确认:0=否,1=是" name="is_confirm"> + <label class="control-label" for="iv">iv</label> + <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="95">提交</button> - <button type="reset" class="btn btn-info" rel="95">重置</button> + <label class="control-label" for="encryptData">encryptData</label> + <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> + </div> + <div class="form-group"> + <label class="control-label" for="openid">openid</label> + <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="108">提交</button> + <button type="reset" class="btn btn-info" rel="108">重置</button> </div> </form> </div> @@ -4664,8 +4467,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers95"></pre> - <pre id="response95"></pre> + <pre id="response_headers108"></pre> + <pre id="response108"></pre> </div> </div> </div> @@ -4673,24 +4476,47 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + </tbody> + </table> </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample95"> + <div class="tab-pane" id="sample108"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response95">{ - "code": 1, //1=完成,2=未满打卡,3=确认借支 - "msg": "成功", - "time": "1606124276", + <pre id="sample_response108">{ + 'code':'1', + 'msg':'返回成功', "data": { - "log_days": 1, //连续打卡天数 - "limit_days": 7, //打卡满7天 - "borrow_money": "300.00" //借支金额 + "phoneNumber": "13580006666", //用户绑定的手机号(国外手机号会有区号) + "purePhoneNumber": "13580006666", //没有区号的手机号 + "countryCode": "86", //区号 + "watermark": { + "appid": "APPID", + "timestamp": TIMESTAMP + } } }</pre> </div> @@ -4702,49 +4528,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-96"> + <div class="panel-heading" id="heading-109"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion96" href="#collapseOne96"> 分享 <span class="text-muted">/api/v2.user/userPoster</span></a> + <a data-toggle="collapse" data-parent="#accordion109" href="#collapseOne109"> 工时补贴介绍 <span class="text-muted">/api/v2.user/workSubsidyContent</span></a> </h4> </div> - <div id="collapseOne96" class="panel-collapse collapse"> + <div id="collapseOne109" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab96"> - <li class="active"><a href="#info96" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox96" data-toggle="tab">在线测试</a></li> - <li><a href="#sample96" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab109"> + <li class="active"><a href="#info109" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox109" data-toggle="tab">在线测试</a></li> + <li><a href="#sample109" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info96"> + <div class="tab-pane active" id="info109"> <div class="well"> - 分享 </div> + 工时补贴介绍 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -4760,30 +4569,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox96"> + <div class="tab-pane" id="sandbox109"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/userPoster" method="POST" name="form96" id="form96"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/workSubsidyContent" method="POST" name="form109" id="form109"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="96">提交</button> - <button type="reset" class="btn btn-info" rel="96">重置</button> + <button type="submit" class="btn btn-success send" rel="109">提交</button> + <button type="reset" class="btn btn-info" rel="109">重置</button> </div> </form> </div> @@ -4793,8 +4591,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers96"></pre> - <pre id="response96"></pre> + <pre id="response_headers109"></pre> + <pre id="response109"></pre> </div> </div> </div> @@ -4809,15 +4607,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample96"> + <div class="tab-pane" id="sample109"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response96">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 - } + <pre id="sample_response109">{ + "code": 1, + "msg": "成功", + "time": "1606124276", + "data": "<p>工时补贴富文本详情介绍</p>" //工时补贴介绍 }</pre> </div> </div> @@ -4828,90 +4625,38 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-97"> + <div class="panel-heading" id="heading-110"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion97" href="#collapseOne97"> 下级 <span class="text-muted">/api/v2.user/lowerList</span></a> + <a data-toggle="collapse" data-parent="#accordion110" href="#collapseOne110"> 招聘补贴介绍 <span class="text-muted">/api/v2.user/recruitSubsidyContent</span></a> </h4> </div> - <div id="collapseOne97" class="panel-collapse collapse"> + <div id="collapseOne110" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab97"> - <li class="active"><a href="#info97" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox97" data-toggle="tab">在线测试</a></li> - <li><a href="#sample97" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab110"> + <li class="active"><a href="#info110" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox110" data-toggle="tab">在线测试</a></li> + <li><a href="#sample110" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info97"> + <div class="tab-pane active" id="info110"> <div class="well"> - 下级 </div> + 招聘补贴介绍 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>is_work</td> - <td>string</td> - <td>否</td> - <td>是否在职:0=否,1=是</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>关键字搜索</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -4921,43 +4666,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox97"> + <div class="tab-pane" id="sandbox110"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/lowerList" method="POST" name="form97" id="form97"> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/recruitSubsidyContent" method="POST" name="form110" id="form110"> <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + 无 </div> <div class="form-group"> - <label class="control-label" for="is_work">is_work</label> - <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> - </div> - <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="关键字搜索" name="keyword"> - </div> - <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="97">提交</button> - <button type="reset" class="btn btn-info" rel="97">重置</button> + <button type="submit" class="btn btn-success send" rel="110">提交</button> + <button type="reset" class="btn btn-info" rel="110">重置</button> </div> </form> </div> @@ -4967,8 +4688,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers97"></pre> - <pre id="response97"></pre> + <pre id="response_headers110"></pre> + <pre id="response110"></pre> </div> </div> </div> @@ -4983,33 +4704,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample97"> + <div class="tab-pane" id="sample110"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response97">{ + <pre id="sample_response110">{ "code": 1, "msg": "成功", - "time": "1606359935", - "data": { - "total": 2, //总人数 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ - "id": 3, //用户ID - "nickname": "admin2", //昵称 - "mobile": "13888888888", //手机号 - "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 - "is_work": "0", //是否在职 - "is_complete": "0", //补贴是否完成:0=否,1=是 - "give_recruit_subsidy": 2, //工资 - "work_hours_month": "0.0", //本月总工时 - "factory": { //工厂 - "id": 1, //工厂ID - "factory_shortname": "" //工厂简称 - } - }] - } + "time": "1606124276", + "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 }</pre> </div> </div> @@ -5020,28 +4722,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-98"> + <div class="panel-heading" id="heading-111"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion98" href="#collapseOne98"> 搜索历史 <span class="text-muted">/api/v2.user/keywordList</span></a> + <a data-toggle="collapse" data-parent="#accordion111" href="#collapseOne111"> 记一笔工时 <span class="text-muted">/api/v2.user/logWork</span></a> </h4> </div> - <div id="collapseOne98" class="panel-collapse collapse"> + <div id="collapseOne111" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab98"> - <li class="active"><a href="#info98" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox98" data-toggle="tab">在线测试</a></li> - <li><a href="#sample98" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab111"> + <li class="active"><a href="#info111" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox111" data-toggle="tab">在线测试</a></li> + <li><a href="#sample111" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info98"> + <div class="tab-pane active" id="info111"> <div class="well"> - 搜索历史 </div> + 记一笔工时 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -5058,7 +4760,7 @@ <tr> <td>token</td> <td>string</td> - <td>否</td> + <td>是</td> <td>请求的Token</td> </tr> </tbody> @@ -5068,7 +4770,42 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>work_date</td> + <td>string</td> + <td>是</td> + <td>工作日期</td> + </tr> + <tr> + <td>work_hours</td> + <td>string</td> + <td>是</td> + <td>工作时长</td> + </tr> + <tr> + <td>work_price</td> + <td>string</td> + <td>是</td> + <td>工价</td> + </tr> + <tr> + <td>work_type</td> + <td>string</td> + <td>是</td> + <td>班次:1=白班,2=夜班,3=休班</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -5078,7 +4815,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox98"> + <div class="tab-pane" id="sandbox111"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -5087,7 +4824,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -5095,13 +4832,26 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/keywordList" method="POST" name="form98" id="form98"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/logWork" method="POST" name="form111" id="form111"> <div class="form-group"> - 无 + <label class="control-label" for="work_date">work_date</label> + <input type="string" class="form-control input-sm" id="work_date" required placeholder="工作日期" name="work_date"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="98">提交</button> - <button type="reset" class="btn btn-info" rel="98">重置</button> + <label class="control-label" for="work_hours">work_hours</label> + <input type="string" class="form-control input-sm" id="work_hours" required placeholder="工作时长" name="work_hours"> + </div> + <div class="form-group"> + <label class="control-label" for="work_price">work_price</label> + <input type="string" class="form-control input-sm" id="work_price" required placeholder="工价" name="work_price"> + </div> + <div class="form-group"> + <label class="control-label" for="work_type">work_type</label> + <input type="string" class="form-control input-sm" id="work_type" required placeholder="班次:1=白班,2=夜班,3=休班" name="work_type"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="111">提交</button> + <button type="reset" class="btn btn-info" rel="111">重置</button> </div> </form> </div> @@ -5111,8 +4861,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers98"></pre> - <pre id="response98"></pre> + <pre id="response_headers111"></pre> + <pre id="response111"></pre> </div> </div> </div> @@ -5127,16 +4877,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample98"> + <div class="tab-pane" id="sample111"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response98">{ + <pre id="sample_response111">{ "code": 1, "msg": "成功", - "time": "1606218663", - "data": [ //关键词 - "nihao" - ] + "time": "1606124276", + "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 }</pre> </div> </div> @@ -5147,28 +4895,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-99"> + <div class="panel-heading" id="heading-112"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion99" href="#collapseOne99"> 搜索历史-清空 <span class="text-muted">/api/v2.user/keywordClear</span></a> + <a data-toggle="collapse" data-parent="#accordion112" href="#collapseOne112"> 工时详情 <span class="text-muted">/api/v2.user/workLogInfo</span></a> </h4> </div> - <div id="collapseOne99" class="panel-collapse collapse"> + <div id="collapseOne112" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab99"> - <li class="active"><a href="#info99" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox99" data-toggle="tab">在线测试</a></li> - <li><a href="#sample99" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab112"> + <li class="active"><a href="#info112" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox112" data-toggle="tab">在线测试</a></li> + <li><a href="#sample112" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info99"> + <div class="tab-pane active" id="info112"> <div class="well"> - 搜索历史-清空 </div> + 工时详情 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -5185,7 +4933,7 @@ <tr> <td>token</td> <td>string</td> - <td>否</td> + <td>是</td> <td>请求的Token</td> </tr> </tbody> @@ -5195,7 +4943,24 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>work_date</td> + <td>string</td> + <td>是</td> + <td>工作日期</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -5205,7 +4970,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox99"> + <div class="tab-pane" id="sandbox112"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -5214,7 +4979,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -5222,13 +4987,14 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/keywordClear" method="POST" name="form99" id="form99"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/workLogInfo" method="POST" name="form112" id="form112"> <div class="form-group"> - 无 + <label class="control-label" for="work_date">work_date</label> + <input type="string" class="form-control input-sm" id="work_date" required placeholder="工作日期" name="work_date"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="99">提交</button> - <button type="reset" class="btn btn-info" rel="99">重置</button> + <button type="submit" class="btn btn-success send" rel="112">提交</button> + <button type="reset" class="btn btn-info" rel="112">重置</button> </div> </form> </div> @@ -5238,8 +5004,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers99"></pre> - <pre id="response99"></pre> + <pre id="response_headers112"></pre> + <pre id="response112"></pre> </div> </div> </div> @@ -5254,14 +5020,24 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample99"> + <div class="tab-pane" id="sample112"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response99">{ + <pre id="sample_response112">{ "code": 1, "msg": "成功", - "time": "1601351666", - "data": null + "time": "1612340182", + "data": { + "id": 18, //ID + "user_id": 72, + "work_date": "2021-02-02", //工作日期 + "work_hours": "4.5", //工时时长 + "work_price": "20.00", //工价 + "work_salary": "90.00", //今日收入 + "work_type": "1", //班次:1=白班,2=夜班,3=休班 + "createtime": 1612279627, + "updatetime": 1612279627 + } }</pre> </div> </div> @@ -5272,32 +5048,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-100"> + <div class="panel-heading" id="heading-113"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion100" href="#collapseOne100"> 下级的下级 <span class="text-muted">/api/v2.user/lowersList</span></a> + <a data-toggle="collapse" data-parent="#accordion113" href="#collapseOne113"> 工时统计图 <span class="text-muted">/api/v2.user/workLogList</span></a> </h4> </div> - <div id="collapseOne100" class="panel-collapse collapse"> + <div id="collapseOne113" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab100"> - <li class="active"><a href="#info100" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox100" data-toggle="tab">在线测试</a></li> - <li><a href="#sample100" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab113"> + <li class="active"><a href="#info113" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox113" data-toggle="tab">在线测试</a></li> + <li><a href="#sample113" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info100"> + <div class="tab-pane active" id="info113"> <div class="well"> - 下级的下级 </div> + 工时统计图 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -5314,28 +5107,10 @@ </thead> <tbody> <tr> - <td>user_id</td> - <td>inter</td> - <td>是</td> - <td>下级ID</td> - </tr> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>is_work</td> + <td>month</td> <td>string</td> - <td>否</td> - <td>是否在职:0=否,1=是</td> + <td>是</td> + <td>年月</td> </tr> </tbody> </table> @@ -5348,32 +5123,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox100"> + <div class="tab-pane" id="sandbox113"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/lowersList" method="POST" name="form100" id="form100"> - <div class="form-group"> - <label class="control-label" for="user_id">user_id</label> - <input type="inter" class="form-control input-sm" id="user_id" required placeholder="下级ID" name="user_id"> - </div> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/workLogList" method="POST" name="form113" id="form113"> <div class="form-group"> - <label class="control-label" for="is_work">is_work</label> - <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> + <label class="control-label" for="month">month</label> + <input type="string" class="form-control input-sm" id="month" required placeholder="年月" name="month"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="100">提交</button> - <button type="reset" class="btn btn-info" rel="100">重置</button> + <button type="submit" class="btn btn-success send" rel="113">提交</button> + <button type="reset" class="btn btn-info" rel="113">重置</button> </div> </form> </div> @@ -5383,8 +5157,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers100"></pre> - <pre id="response100"></pre> + <pre id="response_headers113"></pre> + <pre id="response113"></pre> </div> </div> </div> @@ -5399,46 +5173,22 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample100"> + <div class="tab-pane" id="sample113"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response100">{ + <pre id="sample_response113">{ "code": 1, - "msg": "成功", - "time": "1606216278", + "msg": "打卡成功", + "time": "1612279947", "data": { - "user": { //下级用户信息 - "id": 1, //ID - "nickname": "admin", //昵称 - "mobile": "13888888888", //手机号 - "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 - "is_work": "0", //是否在职:0=否,1=是 - "is_complete": "0", //补贴是否完成:0=否,1=是 - "factory": { //工厂 - "id": 1, //工厂ID - "factory_shortname": "" //工厂简称 - } - }, - "list": { //下级的下级 - "total": 3, //总数据 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ //下级的下级用户信息 - "id": 2, //用户ID - "nickname": "admin1", //昵称 - "mobile": "300.00", //手机号 - "avatar": "", //头像 - "is_work": "1", //是否在职:0=否,1=是 - "is_complete": "0", //补贴是否完成:0=否,1=是 - "give_recruit_subsidy": 2, //工资 - "work_hours_month": "0.0", //本月总工时 - "factory": { //工厂 - "id": 1, //工厂ID - "factory_shortname": "" //工厂简称 - } - }] - } + "work_hours_month": 9, //工时时长 + "work_salary_month": 180, //收入 + "list": [{ //本月数据 + "id": 14, + "work_date": "01", //打卡日期 + "work_hours": "4.5", //工时 + "work_type": "1", //班次:1=白班,2=夜班,3=休班 + }] } }</pre> </div> @@ -5450,37 +5200,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-79"> + <div class="panel-heading" id="heading-114"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion79" href="#collapseOne79"> 第三方登录 <span class="text-muted">/api/v2.user/third</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion114" href="#collapseOne114"> 借支-打卡天数 <span class="text-muted">/api/v2.user/logDays</span></a> </h4> </div> - <div id="collapseOne79" class="panel-collapse collapse"> + <div id="collapseOne114" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab79"> - <li class="active"><a href="#info79" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox79" data-toggle="tab">在线测试</a></li> - <li><a href="#sample79" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab114"> + <li class="active"><a href="#info114" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox114" data-toggle="tab">在线测试</a></li> + <li><a href="#sample114" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info79"> + <div class="tab-pane active" id="info114"> <div class="well"> - 第三方登录 </div> + 借支-打卡天数 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -5492,46 +5236,52 @@ </thead> <tbody> <tr> - <td>platform</td> - <td>string</td> - <td>是</td> - <td>平台名称</td> - </tr> - <tr> - <td>code</td> + <td>token</td> <td>string</td> <td>是</td> - <td>Code码</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox79"> + <div class="tab-pane" id="sandbox114"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/third" method="get" name="form79" id="form79"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="platform">platform</label> - <input type="string" class="form-control input-sm" id="platform" required placeholder="平台名称" name="platform"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/logDays" method="POST" name="form114" id="form114"> <div class="form-group"> - <label class="control-label" for="code">code</label> - <input type="string" class="form-control input-sm" id="code" required placeholder="Code码" name="code"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="79">提交</button> - <button type="reset" class="btn btn-info" rel="79">重置</button> + <button type="submit" class="btn btn-success send" rel="114">提交</button> + <button type="reset" class="btn btn-info" rel="114">重置</button> </div> </form> </div> @@ -5541,8 +5291,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers79"></pre> - <pre id="response79"></pre> + <pre id="response_headers114"></pre> + <pre id="response114"></pre> </div> </div> </div> @@ -5557,10 +5307,19 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample79"> + <div class="tab-pane" id="sample114"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response79">无</pre> + <pre id="sample_response114">{ + "code": 1, + "msg": "成功", + "time": "1612319531", + "data": { + "log_days": 1, //连续打卡天数 + "limit_days": 7, //打卡满7天 + "borrow_money": "300.00" //借支金额 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -5570,32 +5329,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-72"> + <div class="panel-heading" id="heading-115"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion72" href="#collapseOne72"> 会员登录 <span class="text-muted">/api/v2.user/login</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion115" href="#collapseOne115"> 借支 <span class="text-muted">/api/v2.user/borrow</span></a> </h4> </div> - <div id="collapseOne72" class="panel-collapse collapse"> + <div id="collapseOne115" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab72"> - <li class="active"><a href="#info72" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox72" data-toggle="tab">在线测试</a></li> - <li><a href="#sample72" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab115"> + <li class="active"><a href="#info115" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox115" data-toggle="tab">在线测试</a></li> + <li><a href="#sample115" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info72"> + <div class="tab-pane active" id="info115"> <div class="well"> - 会员登录 </div> + 借支 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -5612,16 +5388,10 @@ </thead> <tbody> <tr> - <td>account</td> - <td>string</td> - <td>是</td> - <td>账号</td> - </tr> - <tr> - <td>password</td> - <td>string</td> + <td>is_confirm</td> + <td>inter</td> <td>是</td> - <td>密码</td> + <td>是否确认:0=否,1=是</td> </tr> </tbody> </table> @@ -5634,24 +5404,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox72"> + <div class="tab-pane" id="sandbox115"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/login" method="get" name="form72" id="form72"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="account">account</label> - <input type="string" class="form-control input-sm" id="account" required placeholder="账号" name="account"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/borrow" method="POST" name="form115" id="form115"> <div class="form-group"> - <label class="control-label" for="password">password</label> - <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + <label class="control-label" for="is_confirm">is_confirm</label> + <input type="inter" class="form-control input-sm" id="is_confirm" required placeholder="是否确认:0=否,1=是" name="is_confirm"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="72">提交</button> - <button type="reset" class="btn btn-info" rel="72">重置</button> + <button type="submit" class="btn btn-success send" rel="115">提交</button> + <button type="reset" class="btn btn-info" rel="115">重置</button> </div> </form> </div> @@ -5661,8 +5438,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers72"></pre> - <pre id="response72"></pre> + <pre id="response_headers115"></pre> + <pre id="response115"></pre> </div> </div> </div> @@ -5677,10 +5454,19 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample72"> + <div class="tab-pane" id="sample115"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response72">无</pre> + <pre id="sample_response115">{ + "code": 1, //1=完成,2=未满打卡,3=确认借支 + "msg": "成功", + "time": "1606124276", + "data": { + "log_days": 1, //连续打卡天数 + "limit_days": 7, //打卡满7天 + "borrow_money": "300.00" //借支金额 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -5690,37 +5476,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-73"> + <div class="panel-heading" id="heading-116"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion73" href="#collapseOne73"> 手机验证码登录 <span class="text-muted">/api/v2.user/mobilelogin</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion116" href="#collapseOne116"> 分享 <span class="text-muted">/api/v2.user/userPoster</span></a> </h4> </div> - <div id="collapseOne73" class="panel-collapse collapse"> + <div id="collapseOne116" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab73"> - <li class="active"><a href="#info73" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox73" data-toggle="tab">在线测试</a></li> - <li><a href="#sample73" data-toggle="tab">返回示例</a></li> - </ul> - - <!-- Tab panes --> + <ul class="nav nav-tabs" id="doctab116"> + <li class="active"><a href="#info116" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox116" data-toggle="tab">在线测试</a></li> + <li><a href="#sample116" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info73"> + <div class="tab-pane active" id="info116"> <div class="well"> - 手机验证码登录 </div> + 分享 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -5732,46 +5512,52 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>captcha</td> + <td>token</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>请求的token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox73"> + <div class="tab-pane" id="sandbox116"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/mobilelogin" method="get" name="form73" id="form73"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/userPoster" method="POST" name="form116" id="form116"> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="73">提交</button> - <button type="reset" class="btn btn-info" rel="73">重置</button> + <button type="submit" class="btn btn-success send" rel="116">提交</button> + <button type="reset" class="btn btn-info" rel="116">重置</button> </div> </form> </div> @@ -5781,8 +5567,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers73"></pre> - <pre id="response73"></pre> + <pre id="response_headers116"></pre> + <pre id="response116"></pre> </div> </div> </div> @@ -5797,10 +5583,16 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample73"> + <div class="tab-pane" id="sample116"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response73">无</pre> + <pre id="sample_response116">{ + 'code':'1', + 'msg':'返回成功', + "data": { + "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -5810,32 +5602,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-74"> + <div class="panel-heading" id="heading-117"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion74" href="#collapseOne74"> 注册会员 <span class="text-muted">/api/v2.user/register</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion117" href="#collapseOne117"> 下级 <span class="text-muted">/api/v2.user/lowerList</span></a> </h4> </div> - <div id="collapseOne74" class="panel-collapse collapse"> + <div id="collapseOne117" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab74"> - <li class="active"><a href="#info74" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox74" data-toggle="tab">在线测试</a></li> - <li><a href="#sample74" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab117"> + <li class="active"><a href="#info117" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox117" data-toggle="tab">在线测试</a></li> + <li><a href="#sample117" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info74"> + <div class="tab-pane active" id="info117"> <div class="well"> - 注册会员 </div> + 下级 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -5852,34 +5661,28 @@ </thead> <tbody> <tr> - <td>username</td> - <td>string</td> - <td>是</td> - <td>用户名</td> - </tr> - <tr> - <td>password</td> - <td>string</td> - <td>是</td> - <td>密码</td> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> </tr> <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> </tr> <tr> - <td>mobile</td> + <td>is_work</td> <td>string</td> - <td>是</td> - <td>手机号</td> + <td>否</td> + <td>是否在职:0=否,1=是</td> </tr> <tr> - <td>code</td> + <td>keyword</td> <td>string</td> - <td>是</td> - <td>验证码</td> + <td>否</td> + <td>关键字搜索</td> </tr> </tbody> </table> @@ -5892,36 +5695,43 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox74"> + <div class="tab-pane" id="sandbox117"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/register" method="get" name="form74" id="form74"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="username">username</label> - <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/lowerList" method="POST" name="form117" id="form117"> <div class="form-group"> - <label class="control-label" for="password">password</label> - <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> </div> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="is_work">is_work</label> + <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> </div> <div class="form-group"> - <label class="control-label" for="code">code</label> - <input type="string" class="form-control input-sm" id="code" required placeholder="验证码" name="code"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="关键字搜索" name="keyword"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="74">提交</button> - <button type="reset" class="btn btn-info" rel="74">重置</button> + <button type="submit" class="btn btn-success send" rel="117">提交</button> + <button type="reset" class="btn btn-info" rel="117">重置</button> </div> </form> </div> @@ -5931,8 +5741,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers74"></pre> - <pre id="response74"></pre> + <pre id="response_headers117"></pre> + <pre id="response117"></pre> </div> </div> </div> @@ -5947,10 +5757,34 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample74"> + <div class="tab-pane" id="sample117"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response74">无</pre> + <pre id="sample_response117">{ + "code": 1, + "msg": "成功", + "time": "1606359935", + "data": { + "total": 2, //总人数 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 3, //用户ID + "nickname": "admin2", //昵称 + "mobile": "13888888888", //手机号 + "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 + "is_work": "0", //是否在职 + "is_complete": "0", //补贴是否完成:0=否,1=是 + "give_recruit_subsidy": 2, //工资 + "work_hours_month": "0.0", //本月总工时 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + }] + } + }</pre> </div> </div> </div><!-- #sample --> @@ -5960,32 +5794,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-75"> + <div class="panel-heading" id="heading-118"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion75" href="#collapseOne75"> 退出登录 <span class="text-muted">/api/v2.user/logout</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion118" href="#collapseOne118"> 搜索历史 <span class="text-muted">/api/v2.user/keywordList</span></a> </h4> </div> - <div id="collapseOne75" class="panel-collapse collapse"> + <div id="collapseOne118" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab75"> - <li class="active"><a href="#info75" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox75" data-toggle="tab">在线测试</a></li> - <li><a href="#sample75" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab118"> + <li class="active"><a href="#info118" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox118" data-toggle="tab">在线测试</a></li> + <li><a href="#sample118" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info75"> + <div class="tab-pane active" id="info118"> <div class="well"> - 退出登录 </div> + 搜索历史 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -6001,19 +5852,30 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox75"> + <div class="tab-pane" id="sandbox118"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/logout" method="get" name="form75" id="form75"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/keywordList" method="POST" name="form118" id="form118"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="75">提交</button> - <button type="reset" class="btn btn-info" rel="75">重置</button> + <button type="submit" class="btn btn-success send" rel="118">提交</button> + <button type="reset" class="btn btn-info" rel="118">重置</button> </div> </form> </div> @@ -6023,8 +5885,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers75"></pre> - <pre id="response75"></pre> + <pre id="response_headers118"></pre> + <pre id="response118"></pre> </div> </div> </div> @@ -6039,10 +5901,17 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample75"> + <div class="tab-pane" id="sample118"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response75">无</pre> + <pre id="sample_response118">{ + "code": 1, + "msg": "成功", + "time": "1606218663", + "data": [ //关键词 + "nihao" + ] + }</pre> </div> </div> </div><!-- #sample --> @@ -6052,37 +5921,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-77"> + <div class="panel-heading" id="heading-119"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion77" href="#collapseOne77"> 修改邮箱 <span class="text-muted">/api/v2.user/changeemail</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion119" href="#collapseOne119"> 搜索历史-清空 <span class="text-muted">/api/v2.user/keywordClear</span></a> </h4> </div> - <div id="collapseOne77" class="panel-collapse collapse"> + <div id="collapseOne119" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab77"> - <li class="active"><a href="#info77" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox77" data-toggle="tab">在线测试</a></li> - <li><a href="#sample77" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab119"> + <li class="active"><a href="#info119" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox119" data-toggle="tab">在线测试</a></li> + <li><a href="#sample119" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info77"> + <div class="tab-pane active" id="info119"> <div class="well"> - 修改邮箱 </div> + 搜索历史-清空 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -6094,46 +5957,52 @@ </thead> <tbody> <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> - </tr> - <tr> - <td>captcha</td> + <td>token</td> <td>string</td> - <td>是</td> - <td>验证码</td> + <td>否</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox77"> + <div class="tab-pane" id="sandbox119"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/changeemail" method="get" name="form77" id="form77"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/keywordClear" method="POST" name="form119" id="form119"> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="77">提交</button> - <button type="reset" class="btn btn-info" rel="77">重置</button> + <button type="submit" class="btn btn-success send" rel="119">提交</button> + <button type="reset" class="btn btn-info" rel="119">重置</button> </div> </form> </div> @@ -6143,8 +6012,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers77"></pre> - <pre id="response77"></pre> + <pre id="response_headers119"></pre> + <pre id="response119"></pre> </div> </div> </div> @@ -6159,10 +6028,15 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample77"> + <div class="tab-pane" id="sample119"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response77">无</pre> + <pre id="sample_response119">{ + "code": 1, + "msg": "成功", + "time": "1601351666", + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -6172,28 +6046,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-80"> + <div class="panel-heading" id="heading-120"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion80" href="#collapseOne80"> 重置密码 <span class="text-muted">/api/v2.user/resetpwd</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion120" href="#collapseOne120"> 下级的下级 <span class="text-muted">/api/v2.user/lowersList</span></a> </h4> </div> - <div id="collapseOne80" class="panel-collapse collapse"> + <div id="collapseOne120" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab80"> - <li class="active"><a href="#info80" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox80" data-toggle="tab">在线测试</a></li> - <li><a href="#sample80" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab120"> + <li class="active"><a href="#info120" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox120" data-toggle="tab">在线测试</a></li> + <li><a href="#sample120" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info80"> + <div class="tab-pane active" id="info120"> <div class="well"> - 重置密码 </div> + 下级的下级 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6214,22 +6088,28 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> + <td>user_id</td> + <td>inter</td> <td>是</td> - <td>手机号</td> + <td>下级ID</td> </tr> <tr> - <td>newpassword</td> - <td>string</td> - <td>是</td> - <td>新密码</td> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> </tr> <tr> - <td>captcha</td> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>is_work</td> <td>string</td> - <td>是</td> - <td>验证码</td> + <td>否</td> + <td>是否在职:0=否,1=是</td> </tr> </tbody> </table> @@ -6242,28 +6122,32 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox80"> + <div class="tab-pane" id="sandbox120"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/resetpwd" method="get" name="form80" id="form80"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/lowersList" method="POST" name="form120" id="form120"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="user_id">user_id</label> + <input type="inter" class="form-control input-sm" id="user_id" required placeholder="下级ID" name="user_id"> </div> <div class="form-group"> - <label class="control-label" for="newpassword">newpassword</label> - <input type="string" class="form-control input-sm" id="newpassword" required placeholder="新密码" name="newpassword"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="80">提交</button> - <button type="reset" class="btn btn-info" rel="80">重置</button> + <label class="control-label" for="is_work">is_work</label> + <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="120">提交</button> + <button type="reset" class="btn btn-info" rel="120">重置</button> </div> </form> </div> @@ -6273,8 +6157,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers80"></pre> - <pre id="response80"></pre> + <pre id="response_headers120"></pre> + <pre id="response120"></pre> </div> </div> </div> @@ -6289,10 +6173,48 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample80"> + <div class="tab-pane" id="sample120"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response80">无</pre> + <pre id="sample_response120">{ + "code": 1, + "msg": "成功", + "time": "1606216278", + "data": { + "user": { //下级用户信息 + "id": 1, //ID + "nickname": "admin", //昵称 + "mobile": "13888888888", //手机号 + "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 + "is_work": "0", //是否在职:0=否,1=是 + "is_complete": "0", //补贴是否完成:0=否,1=是 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + }, + "list": { //下级的下级 + "total": 3, //总数据 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ //下级的下级用户信息 + "id": 2, //用户ID + "nickname": "admin1", //昵称 + "mobile": "300.00", //手机号 + "avatar": "", //头像 + "is_work": "1", //是否在职:0=否,1=是 + "is_complete": "0", //补贴是否完成:0=否,1=是 + "give_recruit_subsidy": 2, //工资 + "work_hours_month": "0.0", //本月总工时 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + }] + } + } + }</pre> </div> </div> </div><!-- #sample --> @@ -6302,28 +6224,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-78"> + <div class="panel-heading" id="heading-99"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion78" href="#collapseOne78"> 修改手机号 <span class="text-muted">/api/v2.user/changemobile</span></a> + <a data-toggle="collapse" data-parent="#accordion99" href="#collapseOne99"> 第三方登录 <span class="text-muted">/api/v2.user/third</span></a> </h4> </div> - <div id="collapseOne78" class="panel-collapse collapse"> + <div id="collapseOne99" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab78"> - <li class="active"><a href="#info78" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox78" data-toggle="tab">在线测试</a></li> - <li><a href="#sample78" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab99"> + <li class="active"><a href="#info99" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox99" data-toggle="tab">在线测试</a></li> + <li><a href="#sample99" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info78"> + <div class="tab-pane active" id="info99"> <div class="well"> - 修改手机号 </div> + 第三方登录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6344,16 +6266,16 @@ </thead> <tbody> <tr> - <td>mobile</td> + <td>platform</td> <td>string</td> <td>是</td> - <td>手机号</td> + <td>平台名称</td> </tr> <tr> - <td>captcha</td> + <td>code</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>Code码</td> </tr> </tbody> </table> @@ -6366,24 +6288,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox78"> + <div class="tab-pane" id="sandbox99"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/changemobile" method="get" name="form78" id="form78"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/third" method="get" name="form99" id="form99"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="platform">platform</label> + <input type="string" class="form-control input-sm" id="platform" required placeholder="平台名称" name="platform"> </div> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="code">code</label> + <input type="string" class="form-control input-sm" id="code" required placeholder="Code码" name="code"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="78">提交</button> - <button type="reset" class="btn btn-info" rel="78">重置</button> + <button type="submit" class="btn btn-success send" rel="99">提交</button> + <button type="reset" class="btn btn-info" rel="99">重置</button> </div> </form> </div> @@ -6393,8 +6315,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers78"></pre> - <pre id="response78"></pre> + <pre id="response_headers99"></pre> + <pre id="response99"></pre> </div> </div> </div> @@ -6409,10 +6331,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample78"> + <div class="tab-pane" id="sample99"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response78">无</pre> + <pre id="sample_response99">无</pre> </div> </div> </div><!-- #sample --> @@ -6421,31 +6343,29 @@ </div> </div> </div> - <h2>Token接口v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-67"> + <div class="panel-heading" id="heading-92"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion67" href="#collapseOne67"> 检测Token是否过期 <span class="text-muted">/api/v2.token/check</span></a> + <a data-toggle="collapse" data-parent="#accordion92" href="#collapseOne92"> 会员登录 <span class="text-muted">/api/v2.user/login</span></a> </h4> </div> - <div id="collapseOne67" class="panel-collapse collapse"> + <div id="collapseOne92" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab67"> - <li class="active"><a href="#info67" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox67" data-toggle="tab">在线测试</a></li> - <li><a href="#sample67" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab92"> + <li class="active"><a href="#info92" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox92" data-toggle="tab">在线测试</a></li> + <li><a href="#sample92" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info67"> + <div class="tab-pane active" id="info92"> <div class="well"> - 检测Token是否过期 </div> + 会员登录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6455,7 +6375,30 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>account</td> + <td>string</td> + <td>是</td> + <td>账号</td> + </tr> + <tr> + <td>password</td> + <td>string</td> + <td>是</td> + <td>密码</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -6465,19 +6408,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox67"> + <div class="tab-pane" id="sandbox92"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.token/check" method="get" name="form67" id="form67"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/login" method="get" name="form92" id="form92"> <div class="form-group"> - 无 + <label class="control-label" for="account">account</label> + <input type="string" class="form-control input-sm" id="account" required placeholder="账号" name="account"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="67">提交</button> - <button type="reset" class="btn btn-info" rel="67">重置</button> + <label class="control-label" for="password">password</label> + <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="92">提交</button> + <button type="reset" class="btn btn-info" rel="92">重置</button> </div> </form> </div> @@ -6487,8 +6435,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers67"></pre> - <pre id="response67"></pre> + <pre id="response_headers92"></pre> + <pre id="response92"></pre> </div> </div> </div> @@ -6503,10 +6451,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample67"> + <div class="tab-pane" id="sample92"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response67">无</pre> + <pre id="sample_response92">无</pre> </div> </div> </div><!-- #sample --> @@ -6516,28 +6464,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-68"> + <div class="panel-heading" id="heading-93"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion68" href="#collapseOne68"> 刷新Token <span class="text-muted">/api/v2.token/refresh</span></a> + <a data-toggle="collapse" data-parent="#accordion93" href="#collapseOne93"> 手机验证码登录 <span class="text-muted">/api/v2.user/mobilelogin</span></a> </h4> </div> - <div id="collapseOne68" class="panel-collapse collapse"> + <div id="collapseOne93" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab68"> - <li class="active"><a href="#info68" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox68" data-toggle="tab">在线测试</a></li> - <li><a href="#sample68" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab93"> + <li class="active"><a href="#info93" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox93" data-toggle="tab">在线测试</a></li> + <li><a href="#sample93" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info68"> + <div class="tab-pane active" id="info93"> <div class="well"> - 刷新Token </div> + 手机验证码登录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6547,7 +6495,30 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -6557,19 +6528,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox68"> + <div class="tab-pane" id="sandbox93"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.token/refresh" method="get" name="form68" id="form68"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/mobilelogin" method="get" name="form93" id="form93"> <div class="form-group"> - 无 + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="68">提交</button> - <button type="reset" class="btn btn-info" rel="68">重置</button> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="93">提交</button> + <button type="reset" class="btn btn-info" rel="93">重置</button> </div> </form> </div> @@ -6579,8 +6555,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers68"></pre> - <pre id="response68"></pre> + <pre id="response_headers93"></pre> + <pre id="response93"></pre> </div> </div> </div> @@ -6595,10 +6571,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample68"> + <div class="tab-pane" id="sample93"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response68">无</pre> + <pre id="sample_response93">无</pre> </div> </div> </div><!-- #sample --> @@ -6607,31 +6583,29 @@ </div> </div> </div> - <h2>手机短信接口v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-65"> + <div class="panel-heading" id="heading-94"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion65" href="#collapseOne65"> 发送验证码 <span class="text-muted">/api/v2.sms/send</span></a> + <a data-toggle="collapse" data-parent="#accordion94" href="#collapseOne94"> 注册会员 <span class="text-muted">/api/v2.user/register</span></a> </h4> </div> - <div id="collapseOne65" class="panel-collapse collapse"> + <div id="collapseOne94" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab65"> - <li class="active"><a href="#info65" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox65" data-toggle="tab">在线测试</a></li> - <li><a href="#sample65" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab94"> + <li class="active"><a href="#info94" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox94" data-toggle="tab">在线测试</a></li> + <li><a href="#sample94" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info65"> + <div class="tab-pane active" id="info94"> <div class="well"> - 发送验证码 </div> + 注册会员 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6652,16 +6626,34 @@ </thead> <tbody> <tr> + <td>username</td> + <td>string</td> + <td>是</td> + <td>用户名</td> + </tr> + <tr> + <td>password</td> + <td>string</td> + <td>是</td> + <td>密码</td> + </tr> + <tr> + <td>email</td> + <td>string</td> + <td>是</td> + <td>邮箱</td> + </tr> + <tr> <td>mobile</td> <td>string</td> <td>是</td> <td>手机号</td> </tr> <tr> - <td>event</td> + <td>code</td> <td>string</td> <td>是</td> - <td>事件名称</td> + <td>验证码</td> </tr> </tbody> </table> @@ -6674,24 +6666,36 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox65"> + <div class="tab-pane" id="sandbox94"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.sms/send" method="get" name="form65" id="form65"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/register" method="get" name="form94" id="form94"> + <div class="form-group"> + <label class="control-label" for="username">username</label> + <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> + </div> + <div class="form-group"> + <label class="control-label" for="password">password</label> + <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + </div> + <div class="form-group"> + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + </div> <div class="form-group"> <label class="control-label" for="mobile">mobile</label> <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + <label class="control-label" for="code">code</label> + <input type="string" class="form-control input-sm" id="code" required placeholder="验证码" name="code"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="65">提交</button> - <button type="reset" class="btn btn-info" rel="65">重置</button> + <button type="submit" class="btn btn-success send" rel="94">提交</button> + <button type="reset" class="btn btn-info" rel="94">重置</button> </div> </form> </div> @@ -6701,8 +6705,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers65"></pre> - <pre id="response65"></pre> + <pre id="response_headers94"></pre> + <pre id="response94"></pre> </div> </div> </div> @@ -6717,10 +6721,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample65"> + <div class="tab-pane" id="sample94"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response65">无</pre> + <pre id="sample_response94">无</pre> </div> </div> </div><!-- #sample --> @@ -6730,28 +6734,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-66"> + <div class="panel-heading" id="heading-95"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion66" href="#collapseOne66"> 检测验证码 <span class="text-muted">/api/v2.sms/check</span></a> + <a data-toggle="collapse" data-parent="#accordion95" href="#collapseOne95"> 退出登录 <span class="text-muted">/api/v2.user/logout</span></a> </h4> </div> - <div id="collapseOne66" class="panel-collapse collapse"> + <div id="collapseOne95" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab66"> - <li class="active"><a href="#info66" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox66" data-toggle="tab">在线测试</a></li> - <li><a href="#sample66" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab95"> + <li class="active"><a href="#info95" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox95" data-toggle="tab">在线测试</a></li> + <li><a href="#sample95" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info66"> + <div class="tab-pane active" id="info95"> <div class="well"> - 检测验证码 </div> + 退出登录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6761,36 +6765,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>event</td> - <td>string</td> - <td>是</td> - <td>事件名称</td> - </tr> - <tr> - <td>captcha</td> - <td>string</td> - <td>是</td> - <td>验证码</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -6800,28 +6775,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox66"> + <div class="tab-pane" id="sandbox95"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.sms/check" method="get" name="form66" id="form66"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/logout" method="get" name="form95" id="form95"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> - <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> - </div> - <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="66">提交</button> - <button type="reset" class="btn btn-info" rel="66">重置</button> + <button type="submit" class="btn btn-success send" rel="95">提交</button> + <button type="reset" class="btn btn-info" rel="95">重置</button> </div> </form> </div> @@ -6831,8 +6797,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers66"></pre> - <pre id="response66"></pre> + <pre id="response_headers95"></pre> + <pre id="response95"></pre> </div> </div> </div> @@ -6847,10 +6813,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample66"> + <div class="tab-pane" id="sample95"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response66">无</pre> + <pre id="sample_response95">无</pre> </div> </div> </div><!-- #sample --> @@ -6859,31 +6825,29 @@ </div> </div> </div> - <h2>首页接口v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-55"> + <div class="panel-heading" id="heading-97"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion55" href="#collapseOne55"> 首页分类 <span class="text-muted">/api/v2.index/categoryList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion97" href="#collapseOne97"> 修改邮箱 <span class="text-muted">/api/v2.user/changeemail</span></a> </h4> </div> - <div id="collapseOne55" class="panel-collapse collapse"> + <div id="collapseOne97" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab55"> - <li class="active"><a href="#info55" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox55" data-toggle="tab">在线测试</a></li> - <li><a href="#sample55" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab97"> + <li class="active"><a href="#info97" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox97" data-toggle="tab">在线测试</a></li> + <li><a href="#sample97" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info55"> + <div class="tab-pane active" id="info97"> <div class="well"> - 首页分类 </div> + 修改邮箱 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6893,7 +6857,30 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>email</td> + <td>string</td> + <td>是</td> + <td>邮箱</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -6903,19 +6890,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox55"> + <div class="tab-pane" id="sandbox97"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/categoryList" method="POST" name="form55" id="form55"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/changeemail" method="get" name="form97" id="form97"> <div class="form-group"> - 无 + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="55">提交</button> - <button type="reset" class="btn btn-info" rel="55">重置</button> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="97">提交</button> + <button type="reset" class="btn btn-info" rel="97">重置</button> </div> </form> </div> @@ -6925,8 +6917,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers55"></pre> - <pre id="response55"></pre> + <pre id="response_headers97"></pre> + <pre id="response97"></pre> </div> </div> </div> @@ -6941,19 +6933,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample55"> + <div class="tab-pane" id="sample97"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response55">{ - "code": 1, - "msg": "请求成功", - "time": "1605707229", - "data": [{ - "id": 1, //分类ID - "name": "附近工作", //分类名称 - "image": "https://app.mockplus.cn/api/v1/file/thumb?&img=https://img02.mockplus.cn/idoc/sketch/2020-11-02/4077abe2-8f9e-4cf0-b95f-7a402ba0394e.F42C51D8-3246-425F-B6D9-436A3BD0FF3B.png&p=25" - }] - }</pre> + <pre id="sample_response97">无</pre> </div> </div> </div><!-- #sample --> @@ -6963,28 +6946,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-56"> + <div class="panel-heading" id="heading-100"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion56" href="#collapseOne56"> 工厂列表 <span class="text-muted">/api/v2.index/factoryList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion100" href="#collapseOne100"> 重置密码 <span class="text-muted">/api/v2.user/resetpwd</span></a> </h4> </div> - <div id="collapseOne56" class="panel-collapse collapse"> + <div id="collapseOne100" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab56"> - <li class="active"><a href="#info56" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox56" data-toggle="tab">在线测试</a></li> - <li><a href="#sample56" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab100"> + <li class="active"><a href="#info100" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox100" data-toggle="tab">在线测试</a></li> + <li><a href="#sample100" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info56"> + <div class="tab-pane active" id="info100"> <div class="well"> - 工厂列表 </div> + 重置密码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -6994,7 +6977,36 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>newpassword</td> + <td>string</td> + <td>是</td> + <td>新密码</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -7004,19 +7016,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox56"> + <div class="tab-pane" id="sandbox100"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/factoryList" method="POST" name="form56" id="form56"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/resetpwd" method="get" name="form100" id="form100"> <div class="form-group"> - 无 + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="56">提交</button> - <button type="reset" class="btn btn-info" rel="56">重置</button> + <label class="control-label" for="newpassword">newpassword</label> + <input type="string" class="form-control input-sm" id="newpassword" required placeholder="新密码" name="newpassword"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="100">提交</button> + <button type="reset" class="btn btn-info" rel="100">重置</button> </div> </form> </div> @@ -7026,8 +7047,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers56"></pre> - <pre id="response56"></pre> + <pre id="response_headers100"></pre> + <pre id="response100"></pre> </div> </div> </div> @@ -7042,19 +7063,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample56"> + <div class="tab-pane" id="sample100"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response56">{ - "code": 1, - "msg": "请求成功", - "time": "1605944895", - "data": [{ - "id": 2, //工厂ID - "factory_name": "你好", //工厂名称 - "factory_price": "1.00" //工厂工价 - }] - }</pre> + <pre id="sample_response100">无</pre> </div> </div> </div><!-- #sample --> @@ -7064,31 +7076,37 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-57"> + <div class="panel-heading" id="heading-98"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion57" href="#collapseOne57"> 搜索历史 <span class="text-muted">/api/v2.index/keywordList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion98" href="#collapseOne98"> 修改手机号 <span class="text-muted">/api/v2.user/changemobile</span></a> </h4> </div> - <div id="collapseOne57" class="panel-collapse collapse"> + <div id="collapseOne98" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab57"> - <li class="active"><a href="#info57" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox57" data-toggle="tab">在线测试</a></li> - <li><a href="#sample57" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab98"> + <li class="active"><a href="#info98" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox98" data-toggle="tab">在线测试</a></li> + <li><a href="#sample98" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info57"> + <div class="tab-pane active" id="info98"> <div class="well"> - 搜索历史 </div> + 修改手机号 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -7100,52 +7118,46 @@ </thead> <tbody> <tr> - <td>token</td> + <td>mobile</td> <td>string</td> - <td>否</td> - <td>请求的Token</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox57"> + <div class="tab-pane" id="sandbox98"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <div class="headers"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.user/changemobile" method="get" name="form98" id="form98"> <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/keywordList" method="POST" name="form57" id="form57"> <div class="form-group"> - 无 + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="57">提交</button> - <button type="reset" class="btn btn-info" rel="57">重置</button> + <button type="submit" class="btn btn-success send" rel="98">提交</button> + <button type="reset" class="btn btn-info" rel="98">重置</button> </div> </form> </div> @@ -7155,8 +7167,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers57"></pre> - <pre id="response57"></pre> + <pre id="response_headers98"></pre> + <pre id="response98"></pre> </div> </div> </div> @@ -7171,17 +7183,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample57"> + <div class="tab-pane" id="sample98"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response57">{ - "code": 1, - "msg": "成功", - "time": "1606218663", - "data": [ //关键词 - "nihao" - ] - }</pre> + <pre id="sample_response98">无</pre> </div> </div> </div><!-- #sample --> @@ -7190,29 +7195,31 @@ </div> </div> </div> + <h2>Token接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-58"> + <div class="panel-heading" id="heading-87"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion58" href="#collapseOne58"> 搜索历史-清空 <span class="text-muted">/api/v2.index/keywordClear</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion87" href="#collapseOne87"> 检测Token是否过期 <span class="text-muted">/api/v2.token/check</span></a> </h4> </div> - <div id="collapseOne58" class="panel-collapse collapse"> + <div id="collapseOne87" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab58"> - <li class="active"><a href="#info58" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox58" data-toggle="tab">在线测试</a></li> - <li><a href="#sample58" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab87"> + <li class="active"><a href="#info87" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox87" data-toggle="tab">在线测试</a></li> + <li><a href="#sample87" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info58"> + <div class="tab-pane active" id="info87"> <div class="well"> - 搜索历史-清空 </div> + 检测Token是否过期 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -7229,7 +7236,7 @@ <tr> <td>token</td> <td>string</td> - <td>否</td> + <td>是</td> <td>请求的Token</td> </tr> </tbody> @@ -7249,7 +7256,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox58"> + <div class="tab-pane" id="sandbox87"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -7258,7 +7265,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -7266,13 +7273,13 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/keywordClear" method="POST" name="form58" id="form58"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.token/check" method="GET" name="form87" id="form87"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="58">提交</button> - <button type="reset" class="btn btn-info" rel="58">重置</button> + <button type="submit" class="btn btn-success send" rel="87">提交</button> + <button type="reset" class="btn btn-info" rel="87">重置</button> </div> </form> </div> @@ -7282,8 +7289,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers58"></pre> - <pre id="response58"></pre> + <pre id="response_headers87"></pre> + <pre id="response87"></pre> </div> </div> </div> @@ -7298,14 +7305,17 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample58"> + <div class="tab-pane" id="sample87"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response58">{ + <pre id="sample_response87">{ "code": 1, - "msg": "成功", - "time": "1601351666", - "data": null + "msg": "", + "time": "1621402970", + "data": { + "token": "545eed64-39c4-437e-8285-ac94c03e4921", //token + "expires_in": 2591951 //剩余有效时间 + } }</pre> </div> </div> @@ -7316,28 +7326,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-59"> + <div class="panel-heading" id="heading-88"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion59" href="#collapseOne59"> 附近工作 | 长期工 | 短期工 | 兼职 <span class="text-muted">/api/v2.index/jobList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion88" href="#collapseOne88"> 刷新Token <span class="text-muted">/api/v2.token/refresh</span></a> </h4> </div> - <div id="collapseOne59" class="panel-collapse collapse"> + <div id="collapseOne88" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab59"> - <li class="active"><a href="#info59" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox59" data-toggle="tab">在线测试</a></li> - <li><a href="#sample59" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab88"> + <li class="active"><a href="#info88" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox88" data-toggle="tab">在线测试</a></li> + <li><a href="#sample88" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info59"> + <div class="tab-pane active" id="info88"> <div class="well"> - 职位列表 </div> + 刷新Token </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -7354,7 +7364,7 @@ <tr> <td>token</td> <td>string</td> - <td>否</td> + <td>是</td> <td>请求的Token</td> </tr> </tbody> @@ -7364,54 +7374,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>lng</td> - <td>string</td> - <td>否</td> - <td>经度,(附近工作必填)</td> - </tr> - <tr> - <td>lat</td> - <td>string</td> - <td>否</td> - <td>纬度,(附近工作必填)</td> - </tr> - <tr> - <td>type</td> - <td>string</td> - <td>否</td> - <td>分类:1=长期工,2=兼职,3=短期工</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>搜索关键词</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -7421,7 +7384,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox59"> + <div class="tab-pane" id="sandbox88"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -7430,7 +7393,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -7438,34 +7401,13 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobList" method="POST" name="form59" id="form59"> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> - <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> - </div> - <div class="form-group"> - <label class="control-label" for="lng">lng</label> - <input type="string" class="form-control input-sm" id="lng" placeholder="经度,(附近工作必填)" name="lng"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.token/refresh" method="GET" name="form88" id="form88"> <div class="form-group"> - <label class="control-label" for="lat">lat</label> - <input type="string" class="form-control input-sm" id="lat" placeholder="纬度,(附近工作必填)" name="lat"> - </div> - <div class="form-group"> - <label class="control-label" for="type">type</label> - <input type="string" class="form-control input-sm" id="type" placeholder="分类:1=长期工,2=兼职,3=短期工" name="type"> - </div> - <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="59">提交</button> - <button type="reset" class="btn btn-info" rel="59">重置</button> + <button type="submit" class="btn btn-success send" rel="88">提交</button> + <button type="reset" class="btn btn-info" rel="88">重置</button> </div> </form> </div> @@ -7475,8 +7417,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers59"></pre> - <pre id="response59"></pre> + <pre id="response_headers88"></pre> + <pre id="response88"></pre> </div> </div> </div> @@ -7491,28 +7433,16 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample59"> + <div class="tab-pane" id="sample88"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response59">{ + <pre id="sample_response88">{ "code": 1, - "msg": "成功", - "time": "1605954640", + "msg": "", + "time": "1621403556", "data": { - "total": 2, //数据总数 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ - "id": 2, //职位ID - "job_name": "测试职位2", //职位名称 - "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 - "factory_price": "40.00", //工厂工价(元/时) - "subsidy_price": "40.00", //平台补贴(元/时) - "factory_price_total": "40.00", //工价 - "salary": "6000~7000", //月收入 - "people_num": 23 //报名人数 - }] + "token": "175c6d84-42af-4c59-bce0-ad8a66eb5f3f", //token + "expires_in": 2592000 //剩余有效时间 } }</pre> </div> @@ -7523,50 +7453,35 @@ </div> </div> </div> + <h2>手机短信接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-60"> + <div class="panel-heading" id="heading-85"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion60" href="#collapseOne60"> 职位收藏 <span class="text-muted">/api/v2.index/collectList</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion85" href="#collapseOne85"> 发送验证码 <span class="text-muted">/api/v2.sms/send</span></a> </h4> </div> - <div id="collapseOne60" class="panel-collapse collapse"> + <div id="collapseOne85" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab60"> - <li class="active"><a href="#info60" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox60" data-toggle="tab">在线测试</a></li> - <li><a href="#sample60" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab85"> + <li class="active"><a href="#info85" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox85" data-toggle="tab">在线测试</a></li> + <li><a href="#sample85" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info60"> + <div class="tab-pane active" id="info85"> <div class="well"> - 职位收藏 </div> + 发送验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>否</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -7583,22 +7498,16 @@ </thead> <tbody> <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> </tr> <tr> - <td>keyword</td> + <td>event</td> <td>string</td> - <td>否</td> - <td>搜索关键词</td> + <td>是</td> + <td>事件名称</td> </tr> </tbody> </table> @@ -7611,39 +7520,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox60"> + <div class="tab-pane" id="sandbox85"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/collectList" method="POST" name="form60" id="form60"> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.sms/send" method="get" name="form85" id="form85"> <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="60">提交</button> - <button type="reset" class="btn btn-info" rel="60">重置</button> + <button type="submit" class="btn btn-success send" rel="85">提交</button> + <button type="reset" class="btn btn-info" rel="85">重置</button> </div> </form> </div> @@ -7653,8 +7547,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers60"></pre> - <pre id="response60"></pre> + <pre id="response_headers85"></pre> + <pre id="response85"></pre> </div> </div> </div> @@ -7669,30 +7563,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample60"> + <div class="tab-pane" id="sample85"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response60">{ - "code": 1, - "msg": "成功", - "time": "1605954640", - "data": { - "total": 2, //数据总数 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ - "id": 2, //职位ID - "job_name": "测试职位2", //职位名称 - "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 - "factory_price": "40.00", //工厂工价(元/时) - "subsidy_price": "40.00", //平台补贴(元/时) - "factory_price_total": "40.00", //工价 - "salary": "6000~7000", //月收入 - "people_num": 23 //报名人数 - }] - } - }</pre> + <pre id="sample_response85">无</pre> </div> </div> </div><!-- #sample --> @@ -7702,28 +7576,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-61"> + <div class="panel-heading" id="heading-86"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion61" href="#collapseOne61"> 职位详情 <span class="text-muted">/api/v2.index/jobInfo</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion86" href="#collapseOne86"> 检测验证码 <span class="text-muted">/api/v2.sms/check</span></a> </h4> </div> - <div id="collapseOne61" class="panel-collapse collapse"> + <div id="collapseOne86" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab61"> - <li class="active"><a href="#info61" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox61" data-toggle="tab">在线测试</a></li> - <li><a href="#sample61" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab86"> + <li class="active"><a href="#info86" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox86" data-toggle="tab">在线测试</a></li> + <li><a href="#sample86" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info61"> + <div class="tab-pane active" id="info86"> <div class="well"> - 职位详情 </div> + 检测验证码 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -7744,10 +7618,22 @@ </thead> <tbody> <tr> - <td>job_id</td> - <td>inter</td> + <td>mobile</td> + <td>string</td> <td>是</td> - <td>职位ID</td> + <td>手机号</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件名称</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> </tr> </tbody> </table> @@ -7760,20 +7646,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox61"> + <div class="tab-pane" id="sandbox86"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobInfo" method="POST" name="form61" id="form61"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.sms/check" method="get" name="form86" id="form86"> <div class="form-group"> - <label class="control-label" for="job_id">job_id</label> - <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="61">提交</button> - <button type="reset" class="btn btn-info" rel="61">重置</button> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="86">提交</button> + <button type="reset" class="btn btn-info" rel="86">重置</button> </div> </form> </div> @@ -7783,8 +7677,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers61"></pre> - <pre id="response61"></pre> + <pre id="response_headers86"></pre> + <pre id="response86"></pre> </div> </div> </div> @@ -7799,28 +7693,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample61"> + <div class="tab-pane" id="sample86"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response61">{ - "code": 1, - "msg": "成功", - "time": "1606033046", - "data": { - "id": 1, //职位ID - "job_name": "测试职位", //职位名称 - "images": [{ //图片 - "type": "image", //文件类型:image=图片,video=视频 - "url": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png" //文件地址 - }], - "content": "<p>456</p>", //职位详情 - "factory_price": "60.00", //正常工价 - "subsidy_price": "10.00", //平台补贴价格 - "factory_price_total": "70.00", //补贴后工价 - "salary": "5000~6000", // 月收入 - "is_collect": 0 //是否收藏:0=否,1=是 - } - }</pre> + <pre id="sample_response86">无</pre> </div> </div> </div><!-- #sample --> @@ -7829,29 +7705,31 @@ </div> </div> </div> + <h2>首页接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-62"> + <div class="panel-heading" id="heading-75"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion62" href="#collapseOne62"> 收藏职位 <span class="text-muted">/api/v2.index/jobCollect</span></a> + <a data-toggle="collapse" data-parent="#accordion75" href="#collapseOne75"> 首页分类 <span class="text-muted">/api/v2.index/categoryList</span></a> </h4> </div> - <div id="collapseOne62" class="panel-collapse collapse"> + <div id="collapseOne75" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab62"> - <li class="active"><a href="#info62" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox62" data-toggle="tab">在线测试</a></li> - <li><a href="#sample62" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab75"> + <li class="active"><a href="#info75" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox75" data-toggle="tab">在线测试</a></li> + <li><a href="#sample75" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info62"> + <div class="tab-pane active" id="info75"> <div class="well"> - 收藏职位 </div> + 首页分类 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -7861,24 +7739,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>job_id</td> - <td>inter</td> - <td>是</td> - <td>职位ID</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -7888,20 +7749,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox62"> + <div class="tab-pane" id="sandbox75"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobCollect" method="POST" name="form62" id="form62"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/categoryList" method="POST" name="form75" id="form75"> <div class="form-group"> - <label class="control-label" for="job_id">job_id</label> - <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="62">提交</button> - <button type="reset" class="btn btn-info" rel="62">重置</button> + <button type="submit" class="btn btn-success send" rel="75">提交</button> + <button type="reset" class="btn btn-info" rel="75">重置</button> </div> </form> </div> @@ -7911,8 +7771,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers62"></pre> - <pre id="response62"></pre> + <pre id="response_headers75"></pre> + <pre id="response75"></pre> </div> </div> </div> @@ -7927,14 +7787,18 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample62"> + <div class="tab-pane" id="sample75"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response62">{ + <pre id="sample_response75">{ "code": 1, - "msg": "收藏成功/取消收藏成功", - "time": "1606033046", - "data": null + "msg": "请求成功", + "time": "1605707229", + "data": [{ + "id": 1, //分类ID + "name": "附近工作", //分类名称 + "image": "https://app.mockplus.cn/api/v1/file/thumb?&img=https://img02.mockplus.cn/idoc/sketch/2020-11-02/4077abe2-8f9e-4cf0-b95f-7a402ba0394e.F42C51D8-3246-425F-B6D9-436A3BD0FF3B.png&p=25" + }] }</pre> </div> </div> @@ -7945,28 +7809,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-63"> + <div class="panel-heading" id="heading-76"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion63" href="#collapseOne63"> 职位海报 <span class="text-muted">/api/v2.index/jobPoster</span></a> + <a data-toggle="collapse" data-parent="#accordion76" href="#collapseOne76"> 工厂列表 <span class="text-muted">/api/v2.index/factoryList</span></a> </h4> </div> - <div id="collapseOne63" class="panel-collapse collapse"> + <div id="collapseOne76" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab63"> - <li class="active"><a href="#info63" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox63" data-toggle="tab">在线测试</a></li> - <li><a href="#sample63" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab76"> + <li class="active"><a href="#info76" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox76" data-toggle="tab">在线测试</a></li> + <li><a href="#sample76" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info63"> + <div class="tab-pane active" id="info76"> <div class="well"> - 职位海报 </div> + 工厂列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -7976,24 +7840,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>job_id</td> - <td>inter</td> - <td>是</td> - <td>职位ID</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -8003,20 +7850,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox63"> + <div class="tab-pane" id="sandbox76"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobPoster" method="POST" name="form63" id="form63"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/factoryList" method="POST" name="form76" id="form76"> <div class="form-group"> - <label class="control-label" for="job_id">job_id</label> - <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="63">提交</button> - <button type="reset" class="btn btn-info" rel="63">重置</button> + <button type="submit" class="btn btn-success send" rel="76">提交</button> + <button type="reset" class="btn btn-info" rel="76">重置</button> </div> </form> </div> @@ -8026,8 +7872,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers63"></pre> - <pre id="response63"></pre> + <pre id="response_headers76"></pre> + <pre id="response76"></pre> </div> </div> </div> @@ -8042,15 +7888,18 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample63"> + <div class="tab-pane" id="sample76"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response63">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 - } + <pre id="sample_response76">{ + "code": 1, + "msg": "请求成功", + "time": "1605944895", + "data": [{ + "id": 2, //工厂ID + "factory_name": "你好", //工厂名称 + "factory_price": "1.00" //工厂工价 + }] }</pre> </div> </div> @@ -8061,32 +7910,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-64"> + <div class="panel-heading" id="heading-77"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion64" href="#collapseOne64"> 入驻代理 <span class="text-muted">/api/v2.index/agentContent</span></a> + <a data-toggle="collapse" data-parent="#accordion77" href="#collapseOne77"> 搜索历史 <span class="text-muted">/api/v2.index/keywordList</span></a> </h4> </div> - <div id="collapseOne64" class="panel-collapse collapse"> + <div id="collapseOne77" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab64"> - <li class="active"><a href="#info64" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox64" data-toggle="tab">在线测试</a></li> - <li><a href="#sample64" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab77"> + <li class="active"><a href="#info77" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox77" data-toggle="tab">在线测试</a></li> + <li><a href="#sample77" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info64"> + <div class="tab-pane active" id="info77"> <div class="well"> - 入驻代理 </div> + 搜索历史 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -8102,19 +7968,30 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox64"> + <div class="tab-pane" id="sandbox77"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/agentContent" method="POST" name="form64" id="form64"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/keywordList" method="POST" name="form77" id="form77"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="64">提交</button> - <button type="reset" class="btn btn-info" rel="64">重置</button> + <button type="submit" class="btn btn-success send" rel="77">提交</button> + <button type="reset" class="btn btn-info" rel="77">重置</button> </div> </form> </div> @@ -8124,8 +8001,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers64"></pre> - <pre id="response64"></pre> + <pre id="response_headers77"></pre> + <pre id="response77"></pre> </div> </div> </div> @@ -8140,13 +8017,16 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample64"> + <div class="tab-pane" id="sample77"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response64">{ - 'code':'1', - 'msg':'返回成功', - "data": "<p>入驻代理介绍</p>" //入驻代理介绍 + <pre id="sample_response77">{ + "code": 1, + "msg": "成功", + "time": "1606218663", + "data": [ //关键词 + "nihao" + ] }</pre> </div> </div> @@ -8156,40 +8036,32 @@ </div> </div> </div> - <h2>公共接口v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-43"> + <div class="panel-heading" id="heading-78"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion43" href="#collapseOne43"> 加载初始化 <span class="text-muted">/api/v2.common/init</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion78" href="#collapseOne78"> 搜索历史-清空 <span class="text-muted">/api/v2.index/keywordClear</span></a> </h4> </div> - <div id="collapseOne43" class="panel-collapse collapse"> + <div id="collapseOne78" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab43"> - <li class="active"><a href="#info43" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox43" data-toggle="tab">在线测试</a></li> - <li><a href="#sample43" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab78"> + <li class="active"><a href="#info78" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox78" data-toggle="tab">在线测试</a></li> + <li><a href="#sample78" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info43"> + <div class="tab-pane active" id="info78"> <div class="well"> - 加载初始化 </div> + 搜索历史-清空 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -8201,56 +8073,52 @@ </thead> <tbody> <tr> - <td>version</td> + <td>token</td> <td>string</td> - <td>是</td> - <td>版本号</td> - </tr> - <tr> - <td>lng</td> - <td>string</td> - <td>是</td> - <td>经度</td> - </tr> - <tr> - <td>lat</td> - <td>string</td> - <td>是</td> - <td>纬度</td> + <td>否</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox43"> + <div class="tab-pane" id="sandbox78"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.common/init" method="get" name="form43" id="form43"> - <div class="form-group"> - <label class="control-label" for="version">version</label> - <input type="string" class="form-control input-sm" id="version" required placeholder="版本号" name="version"> - </div> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="lng">lng</label> - <input type="string" class="form-control input-sm" id="lng" required placeholder="经度" name="lng"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/keywordClear" method="POST" name="form78" id="form78"> <div class="form-group"> - <label class="control-label" for="lat">lat</label> - <input type="string" class="form-control input-sm" id="lat" required placeholder="纬度" name="lat"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="43">提交</button> - <button type="reset" class="btn btn-info" rel="43">重置</button> + <button type="submit" class="btn btn-success send" rel="78">提交</button> + <button type="reset" class="btn btn-info" rel="78">重置</button> </div> </form> </div> @@ -8260,8 +8128,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers43"></pre> - <pre id="response43"></pre> + <pre id="response_headers78"></pre> + <pre id="response78"></pre> </div> </div> </div> @@ -8276,10 +8144,15 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample43"> + <div class="tab-pane" id="sample78"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response43">无</pre> + <pre id="sample_response78">{ + "code": 1, + "msg": "成功", + "time": "1601351666", + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -8289,32 +8162,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-44"> + <div class="panel-heading" id="heading-79"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion44" href="#collapseOne44"> 上传文件 <span class="text-muted">/api/v2.common/upload</span></a> + <a data-toggle="collapse" data-parent="#accordion79" href="#collapseOne79"> 附近工作 | 长期工 | 短期工 | 兼职 <span class="text-muted">/api/v2.index/jobList</span></a> </h4> </div> - <div id="collapseOne44" class="panel-collapse collapse"> + <div id="collapseOne79" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab44"> - <li class="active"><a href="#info44" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox44" data-toggle="tab">在线测试</a></li> - <li><a href="#sample44" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab79"> + <li class="active"><a href="#info79" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox79" data-toggle="tab">在线测试</a></li> + <li><a href="#sample79" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info44"> + <div class="tab-pane active" id="info79"> <div class="well"> - 上传文件 </div> + 职位列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -8331,10 +8221,40 @@ </thead> <tbody> <tr> - <td>file</td> - <td>File</td> - <td>是</td> - <td>文件流</td> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>lng</td> + <td>string</td> + <td>否</td> + <td>经度,(附近工作必填)</td> + </tr> + <tr> + <td>lat</td> + <td>string</td> + <td>否</td> + <td>纬度,(附近工作必填)</td> + </tr> + <tr> + <td>type</td> + <td>string</td> + <td>否</td> + <td>分类:1=长期工,2=兼职,3=短期工</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键词</td> </tr> </tbody> </table> @@ -8347,20 +8267,51 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox44"> + <div class="tab-pane" id="sandbox79"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.common/upload" method="POST" name="form44" id="form44"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobList" method="POST" name="form79" id="form79"> <div class="form-group"> - <label class="control-label" for="file">file</label> - <input type="File" class="form-control input-sm" id="file" required placeholder="文件流" name="file"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="44">提交</button> - <button type="reset" class="btn btn-info" rel="44">重置</button> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="lng">lng</label> + <input type="string" class="form-control input-sm" id="lng" placeholder="经度,(附近工作必填)" name="lng"> + </div> + <div class="form-group"> + <label class="control-label" for="lat">lat</label> + <input type="string" class="form-control input-sm" id="lat" placeholder="纬度,(附近工作必填)" name="lat"> + </div> + <div class="form-group"> + <label class="control-label" for="type">type</label> + <input type="string" class="form-control input-sm" id="type" placeholder="分类:1=长期工,2=兼职,3=短期工" name="type"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="79">提交</button> + <button type="reset" class="btn btn-info" rel="79">重置</button> </div> </form> </div> @@ -8370,8 +8321,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers44"></pre> - <pre id="response44"></pre> + <pre id="response_headers79"></pre> + <pre id="response79"></pre> </div> </div> </div> @@ -8386,10 +8337,30 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample44"> + <div class="tab-pane" id="sample79"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response44">无</pre> + <pre id="sample_response79">{ + "code": 1, + "msg": "成功", + "time": "1605954640", + "data": { + "total": 2, //数据总数 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 2, //职位ID + "job_name": "测试职位2", //职位名称 + "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 + "factory_price": "40.00", //工厂工价(元/时) + "subsidy_price": "40.00", //平台补贴(元/时) + "factory_price_total": "40.00", //工价 + "salary": "6000~7000", //月收入 + "people_num": 23 //报名人数 + }] + } + }</pre> </div> </div> </div><!-- #sample --> @@ -8398,31 +8369,29 @@ </div> </div> </div> - <h2>驻厂v2</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-51"> + <div class="panel-heading" id="heading-80"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion51" href="#collapseOne51"> 驻场管理 <span class="text-muted">/api/v2.factory_admin/index</span></a> + <a data-toggle="collapse" data-parent="#accordion80" href="#collapseOne80"> 职位收藏 <span class="text-muted">/api/v2.index/collectList</span></a> </h4> </div> - <div id="collapseOne51" class="panel-collapse collapse"> + <div id="collapseOne80" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab51"> - <li class="active"><a href="#info51" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox51" data-toggle="tab">在线测试</a></li> - <li><a href="#sample51" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab80"> + <li class="active"><a href="#info80" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox80" data-toggle="tab">在线测试</a></li> + <li><a href="#sample80" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info51"> + <div class="tab-pane active" id="info80"> <div class="well"> - 驻场管理 </div> + 职位收藏 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -8439,7 +8408,7 @@ <tr> <td>token</td> <td>string</td> - <td>是</td> + <td>否</td> <td>请求的Token</td> </tr> </tbody> @@ -8449,7 +8418,36 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键词</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -8459,7 +8457,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox51"> + <div class="tab-pane" id="sandbox80"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -8468,7 +8466,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -8476,24 +8474,33 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/index" method="POST" name="form51" id="form51"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/collectList" method="POST" name="form80" id="form80"> <div class="form-group"> - 无 + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="51">提交</button> - <button type="reset" class="btn btn-info" rel="51">重置</button> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> </div> - </form> - </div> - </div> - <div class="panel panel-default"> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="80">提交</button> + <button type="reset" class="btn btn-info" rel="80">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>响应输出</strong></div> <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers51"></pre> - <pre id="response51"></pre> + <pre id="response_headers80"></pre> + <pre id="response80"></pre> </div> </div> </div> @@ -8508,23 +8515,27 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample51"> + <div class="tab-pane" id="sample80"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response51">{ + <pre id="sample_response80">{ "code": 1, "msg": "成功", - "time": "1612272667", + "time": "1605954640", "data": { - "user": { //用户信息 - "id": 72, //ID - "nickname": "何先生", //姓名 - "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 - }, - "factory_list": [{ //可管理工程 - "id": 1, //工厂ID - "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 - "factory_shortname": "新美亚电子" //工厂简称 + "total": 2, //数据总数 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 2, //职位ID + "job_name": "测试职位2", //职位名称 + "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 + "factory_price": "40.00", //工厂工价(元/时) + "subsidy_price": "40.00", //平台补贴(元/时) + "factory_price_total": "40.00", //工价 + "salary": "6000~7000", //月收入 + "people_num": 23 //报名人数 }] } }</pre> @@ -8537,49 +8548,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-52"> + <div class="panel-heading" id="heading-81"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion52" href="#collapseOne52"> 借支列表 <span class="text-muted">/api/v2.factory_admin/borrowList</span></a> + <a data-toggle="collapse" data-parent="#accordion81" href="#collapseOne81"> 职位详情 <span class="text-muted">/api/v2.index/jobInfo</span></a> </h4> </div> - <div id="collapseOne52" class="panel-collapse collapse"> + <div id="collapseOne81" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab52"> - <li class="active"><a href="#info52" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox52" data-toggle="tab">在线测试</a></li> - <li><a href="#sample52" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab81"> + <li class="active"><a href="#info81" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox81" data-toggle="tab">在线测试</a></li> + <li><a href="#sample81" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info52"> + <div class="tab-pane active" id="info81"> <div class="well"> - 借支列表 </div> + 职位详情 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -8596,28 +8590,10 @@ </thead> <tbody> <tr> - <td>factory_id</td> + <td>job_id</td> <td>inter</td> <td>是</td> - <td>工厂ID</td> - </tr> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>搜索关键字</td> + <td>职位ID</td> </tr> </tbody> </table> @@ -8630,43 +8606,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox52"> + <div class="tab-pane" id="sandbox81"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/borrowList" method="POST" name="form52" id="form52"> - <div class="form-group"> - <label class="control-label" for="factory_id">factory_id</label> - <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> - </div> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> - <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobInfo" method="POST" name="form81" id="form81"> <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键字" name="keyword"> + <label class="control-label" for="job_id">job_id</label> + <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="52">提交</button> - <button type="reset" class="btn btn-info" rel="52">重置</button> + <button type="submit" class="btn btn-success send" rel="81">提交</button> + <button type="reset" class="btn btn-info" rel="81">重置</button> </div> </form> </div> @@ -8676,8 +8629,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers52"></pre> - <pre id="response52"></pre> + <pre id="response_headers81"></pre> + <pre id="response81"></pre> </div> </div> </div> @@ -8692,32 +8645,26 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample52"> + <div class="tab-pane" id="sample81"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response52">{ + <pre id="sample_response81">{ "code": 1, "msg": "成功", - "time": "1612274425", + "time": "1606033046", "data": { - "user_list": { //用户列表 - "total": 1, //数据总数 - "per_page": 15, - "current_page": 1, //当前页 - "last_page": 1, - "data": [{ //数据列表 - "id": 72, //ID - "nickname": "何先生", //姓名 - "mobile": "151*****361", //电话 - "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 - "is_work": "1", //是否在职:0=否,1=是 - "join_time": "2021-02-02", //入职时间 - "work_hours_month": "0.0", //本月总工时 - "user_borrow_id": 1, //借支ID - "user_borrow_status": "0" //借支状态:-1=未申请,0=申请中,1=已通过 - }] - }, - "quit_count": 0 + "id": 1, //职位ID + "job_name": "测试职位", //职位名称 + "images": [{ //图片 + "type": "image", //文件类型:image=图片,video=视频 + "url": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png" //文件地址 + }], + "content": "<p>456</p>", //职位详情 + "factory_price": "60.00", //正常工价 + "subsidy_price": "10.00", //平台补贴价格 + "factory_price_total": "70.00", //补贴后工价 + "salary": "5000~6000", // 月收入 + "is_collect": 0 //是否收藏:0=否,1=是 } }</pre> </div> @@ -8729,49 +8676,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-53"> + <div class="panel-heading" id="heading-82"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion53" href="#collapseOne53"> 同意借支 <span class="text-muted">/api/v2.factory_admin/agreeBorrow</span></a> + <a data-toggle="collapse" data-parent="#accordion82" href="#collapseOne82"> 收藏职位 <span class="text-muted">/api/v2.index/jobCollect</span></a> </h4> </div> - <div id="collapseOne53" class="panel-collapse collapse"> + <div id="collapseOne82" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab53"> - <li class="active"><a href="#info53" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox53" data-toggle="tab">在线测试</a></li> - <li><a href="#sample53" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab82"> + <li class="active"><a href="#info82" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox82" data-toggle="tab">在线测试</a></li> + <li><a href="#sample82" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info53"> + <div class="tab-pane active" id="info82"> <div class="well"> - 同意借支 </div> + 收藏职位 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -8788,10 +8718,10 @@ </thead> <tbody> <tr> - <td>user_borrow_id</td> + <td>job_id</td> <td>inter</td> <td>是</td> - <td>借支ID</td> + <td>职位ID</td> </tr> </tbody> </table> @@ -8804,31 +8734,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox53"> + <div class="tab-pane" id="sandbox82"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/agreeBorrow" method="POST" name="form53" id="form53"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobCollect" method="POST" name="form82" id="form82"> <div class="form-group"> - <label class="control-label" for="user_borrow_id">user_borrow_id</label> - <input type="inter" class="form-control input-sm" id="user_borrow_id" required placeholder="借支ID" name="user_borrow_id"> + <label class="control-label" for="job_id">job_id</label> + <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="53">提交</button> - <button type="reset" class="btn btn-info" rel="53">重置</button> + <button type="submit" class="btn btn-success send" rel="82">提交</button> + <button type="reset" class="btn btn-info" rel="82">重置</button> </div> </form> </div> @@ -8838,8 +8757,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers53"></pre> - <pre id="response53"></pre> + <pre id="response_headers82"></pre> + <pre id="response82"></pre> </div> </div> </div> @@ -8854,13 +8773,13 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample53"> + <div class="tab-pane" id="sample82"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response53">{ + <pre id="sample_response82">{ "code": 1, - "msg": "成功", - "time": "1606137472", + "msg": "收藏成功/取消收藏成功", + "time": "1606033046", "data": null }</pre> </div> @@ -8872,49 +8791,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-54"> + <div class="panel-heading" id="heading-83"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion54" href="#collapseOne54"> 离职详情 <span class="text-muted">/api/v2.factory_admin/quitList</span></a> + <a data-toggle="collapse" data-parent="#accordion83" href="#collapseOne83"> 职位海报 <span class="text-muted">/api/v2.index/jobPoster</span></a> </h4> </div> - <div id="collapseOne54" class="panel-collapse collapse"> + <div id="collapseOne83" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab54"> - <li class="active"><a href="#info54" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox54" data-toggle="tab">在线测试</a></li> - <li><a href="#sample54" data-toggle="tab">返回示例</a></li> - </ul> - - <!-- Tab panes --> + <ul class="nav nav-tabs" id="doctab83"> + <li class="active"><a href="#info83" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox83" data-toggle="tab">在线测试</a></li> + <li><a href="#sample83" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info54"> + <div class="tab-pane active" id="info83"> <div class="well"> - 离职详情 </div> + 职位海报 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -8931,28 +8833,10 @@ </thead> <tbody> <tr> - <td>factory_id</td> + <td>job_id</td> <td>inter</td> <td>是</td> - <td>工厂ID</td> - </tr> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>搜索关键字</td> + <td>职位ID</td> </tr> </tbody> </table> @@ -8965,43 +8849,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox54"> + <div class="tab-pane" id="sandbox83"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/quitList" method="POST" name="form54" id="form54"> - <div class="form-group"> - <label class="control-label" for="factory_id">factory_id</label> - <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> - </div> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> - <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/jobPoster" method="POST" name="form83" id="form83"> <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键字" name="keyword"> + <label class="control-label" for="job_id">job_id</label> + <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="54">提交</button> - <button type="reset" class="btn btn-info" rel="54">重置</button> + <button type="submit" class="btn btn-success send" rel="83">提交</button> + <button type="reset" class="btn btn-info" rel="83">重置</button> </div> </form> </div> @@ -9011,8 +8872,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers54"></pre> - <pre id="response54"></pre> + <pre id="response_headers83"></pre> + <pre id="response83"></pre> </div> </div> </div> @@ -9027,27 +8888,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample54"> + <div class="tab-pane" id="sample83"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response54">{ - "code": 1, - "msg": "成功", - "time": "1612273417", + <pre id="sample_response83">{ + 'code':'1', + 'msg':'返回成功', "data": { - "total": 1, //数据总数 - "per_page": 15, - "current_page": 1, //当前页 - "last_page": 1, - "data": [{ //数据 - "id": 72, //用户ID - "nickname": "何先生", //名称 - "mobile": "151*****361", //电话 - "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 - "is_work": "0", //是否入职:0=否,1=是 - "join_time": "2021-02-02", //入职时间 - "quit_time": "2021-02-02" //离职时间 - }] + "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 } }</pre> </div> @@ -9058,31 +8906,29 @@ </div> </div> </div> - <h2>公共接口</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-0"> + <div class="panel-heading" id="heading-84"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion0" href="#collapseOne0"> 加载初始化 <span class="text-muted">/api/common/init</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion84" href="#collapseOne84"> 入驻代理 <span class="text-muted">/api/v2.index/agentContent</span></a> </h4> </div> - <div id="collapseOne0" class="panel-collapse collapse"> + <div id="collapseOne84" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab0"> - <li class="active"><a href="#info0" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox0" data-toggle="tab">在线测试</a></li> - <li><a href="#sample0" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab84"> + <li class="active"><a href="#info84" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox84" data-toggle="tab">在线测试</a></li> + <li><a href="#sample84" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info0"> + <div class="tab-pane active" id="info84"> <div class="well"> - 加载初始化 </div> + 入驻代理 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -9092,36 +8938,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>version</td> - <td>string</td> - <td>是</td> - <td>版本号</td> - </tr> - <tr> - <td>lng</td> - <td>string</td> - <td>是</td> - <td>经度</td> - </tr> - <tr> - <td>lat</td> - <td>string</td> - <td>是</td> - <td>纬度</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -9131,28 +8948,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox0"> + <div class="tab-pane" id="sandbox84"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/common/init" method="get" name="form0" id="form0"> - <div class="form-group"> - <label class="control-label" for="version">version</label> - <input type="string" class="form-control input-sm" id="version" required placeholder="版本号" name="version"> - </div> - <div class="form-group"> - <label class="control-label" for="lng">lng</label> - <input type="string" class="form-control input-sm" id="lng" required placeholder="经度" name="lng"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.index/agentContent" method="POST" name="form84" id="form84"> <div class="form-group"> - <label class="control-label" for="lat">lat</label> - <input type="string" class="form-control input-sm" id="lat" required placeholder="纬度" name="lat"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="0">提交</button> - <button type="reset" class="btn btn-info" rel="0">重置</button> + <button type="submit" class="btn btn-success send" rel="84">提交</button> + <button type="reset" class="btn btn-info" rel="84">重置</button> </div> </form> </div> @@ -9162,8 +8970,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers0"></pre> - <pre id="response0"></pre> + <pre id="response_headers84"></pre> + <pre id="response84"></pre> </div> </div> </div> @@ -9178,10 +8986,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample0"> + <div class="tab-pane" id="sample84"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response0">无</pre> + <pre id="sample_response84">{ + 'code':'1', + 'msg':'返回成功', + "data": "<p>入驻代理介绍</p>" //入驻代理介绍 + }</pre> </div> </div> </div><!-- #sample --> @@ -9190,38 +9002,34 @@ </div> </div> </div> + <h2>驻厂v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-1"> + <div class="panel-heading" id="heading-71"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion1" href="#collapseOne1"> 上传文件 <span class="text-muted">/api/common/upload</span></a> + <a data-toggle="collapse" data-parent="#accordion71" href="#collapseOne71"> 驻场管理 <span class="text-muted">/api/v2.factory_admin/index</span></a> </h4> </div> - <div id="collapseOne1" class="panel-collapse collapse"> + <div id="collapseOne71" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab1"> - <li class="active"><a href="#info1" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox1" data-toggle="tab">在线测试</a></li> - <li><a href="#sample1" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab71"> + <li class="active"><a href="#info71" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox71" data-toggle="tab">在线测试</a></li> + <li><a href="#sample71" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info1"> + <div class="tab-pane active" id="info71"> <div class="well"> - 上传文件 </div> + 驻场管理 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -9233,36 +9041,52 @@ </thead> <tbody> <tr> - <td>file</td> - <td>File</td> + <td>token</td> + <td>string</td> <td>是</td> - <td>文件流</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox1"> + <div class="tab-pane" id="sandbox71"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/common/upload" method="POST" name="form1" id="form1"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/index" method="POST" name="form71" id="form71"> <div class="form-group"> - <label class="control-label" for="file">file</label> - <input type="File" class="form-control input-sm" id="file" required placeholder="文件流" name="file"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="1">提交</button> - <button type="reset" class="btn btn-info" rel="1">重置</button> + <button type="submit" class="btn btn-success send" rel="71">提交</button> + <button type="reset" class="btn btn-info" rel="71">重置</button> </div> </form> </div> @@ -9272,8 +9096,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers1"></pre> - <pre id="response1"></pre> + <pre id="response_headers71"></pre> + <pre id="response71"></pre> </div> </div> </div> @@ -9288,10 +9112,26 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample1"> + <div class="tab-pane" id="sample71"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response1">无</pre> + <pre id="sample_response71">{ + "code": 1, + "msg": "成功", + "time": "1612272667", + "data": { + "user": { //用户信息 + "id": 72, //ID + "nickname": "何先生", //姓名 + "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 + }, + "factory_list": [{ //可管理工程 + "id": 1, //工厂ID + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "新美亚电子" //工厂简称 + }] + } + }</pre> </div> </div> </div><!-- #sample --> @@ -9300,31 +9140,29 @@ </div> </div> </div> - <h2>示例接口</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-2"> + <div class="panel-heading" id="heading-72"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion2" href="#collapseOne2"> 测试名称 <span class="text-muted">/api/demo/test/id/{id}/name/{name}</span></a> + <a data-toggle="collapse" data-parent="#accordion72" href="#collapseOne72"> 借支列表 <span class="text-muted">/api/v2.factory_admin/borrowList</span></a> </h4> </div> - <div id="collapseOne2" class="panel-collapse collapse"> + <div id="collapseOne72" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab2"> - <li class="active"><a href="#info2" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox2" data-toggle="tab">在线测试</a></li> - <li><a href="#sample2" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab72"> + <li class="active"><a href="#info72" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox72" data-toggle="tab">在线测试</a></li> + <li><a href="#sample72" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info2"> + <div class="tab-pane active" id="info72"> <div class="well"> - 测试描述信息 </div> + 借支列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -9362,22 +9200,28 @@ </thead> <tbody> <tr> - <td>id</td> - <td>integer</td> + <td>factory_id</td> + <td>inter</td> <td>是</td> - <td>会员ID</td> + <td>工厂ID</td> </tr> <tr> - <td>name</td> - <td>string</td> - <td>是</td> - <td>用户名</td> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> </tr> <tr> - <td>data</td> - <td>object</td> - <td>是</td> - <td>扩展数据</td> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键字</td> </tr> </tbody> </table> @@ -9390,7 +9234,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox2"> + <div class="tab-pane" id="sandbox72"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -9407,22 +9251,26 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test/id/{id}/name/{name}" method="POST" name="form2" id="form2"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/borrowList" method="POST" name="form72" id="form72"> <div class="form-group"> - <label class="control-label" for="id">id</label> - <input type="integer" class="form-control input-sm" id="id" required placeholder="会员ID" name="id"> + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <label class="control-label" for="name">name</label> - <input type="string" class="form-control input-sm" id="name" required placeholder="用户名" name="name"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <label class="control-label" for="data">data</label> - <input type="object" class="form-control input-sm" id="data" required placeholder="扩展数据 - 例: {'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}" name="data"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="2">提交</button> - <button type="reset" class="btn btn-info" rel="2">重置</button> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键字" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="72">提交</button> + <button type="reset" class="btn btn-info" rel="72">重置</button> </div> </form> </div> @@ -9432,8 +9280,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers2"></pre> - <pre id="response2"></pre> + <pre id="response_headers72"></pre> + <pre id="response72"></pre> </div> </div> </div> @@ -9441,45 +9289,41 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - <tr> - <td>data</td> - <td>object</td> - <td>扩展数据返回</td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample2"> + <div class="tab-pane" id="sample72"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response2">{ - 'code':'1', - 'msg':'返回成功' - }</pre> + <pre id="sample_response72">{ + "code": 1, + "msg": "成功", + "time": "1612274425", + "data": { + "user_list": { //用户列表 + "total": 1, //数据总数 + "per_page": 15, + "current_page": 1, //当前页 + "last_page": 1, + "data": [{ //数据列表 + "id": 72, //ID + "nickname": "何先生", //姓名 + "mobile": "151*****361", //电话 + "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 + "is_work": "1", //是否在职:0=否,1=是 + "join_time": "2021-02-02", //入职时间 + "work_hours_month": "0.0", //本月总工时 + "user_borrow_id": 1, //借支ID + "user_borrow_status": "0" //借支状态:-1=未申请,0=申请中,1=已通过 + }] + }, + "quit_count": 0 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -9489,38 +9333,72 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-3"> + <div class="panel-heading" id="heading-73"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion3" href="#collapseOne3"> 无需登录的接口 <span class="text-muted">/api/demo/test1</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion73" href="#collapseOne73"> 同意借支 <span class="text-muted">/api/v2.factory_admin/agreeBorrow</span></a> </h4> </div> - <div id="collapseOne3" class="panel-collapse collapse"> + <div id="collapseOne73" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab3"> - <li class="active"><a href="#info3" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox3" data-toggle="tab">在线测试</a></li> - <li><a href="#sample3" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab73"> + <li class="active"><a href="#info73" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox73" data-toggle="tab">在线测试</a></li> + <li><a href="#sample73" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info3"> + <div class="tab-pane active" id="info73"> <div class="well"> - 无需登录的接口 </div> + 同意借支 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>user_borrow_id</td> + <td>inter</td> + <td>是</td> + <td>借支ID</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -9530,19 +9408,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox3"> + <div class="tab-pane" id="sandbox73"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test1" method="get" name="form3" id="form3"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/agreeBorrow" method="POST" name="form73" id="form73"> <div class="form-group"> - 无 + <label class="control-label" for="user_borrow_id">user_borrow_id</label> + <input type="inter" class="form-control input-sm" id="user_borrow_id" required placeholder="借支ID" name="user_borrow_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="3">提交</button> - <button type="reset" class="btn btn-info" rel="3">重置</button> + <button type="submit" class="btn btn-success send" rel="73">提交</button> + <button type="reset" class="btn btn-info" rel="73">重置</button> </div> </form> </div> @@ -9552,8 +9442,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers3"></pre> - <pre id="response3"></pre> + <pre id="response_headers73"></pre> + <pre id="response73"></pre> </div> </div> </div> @@ -9568,10 +9458,15 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample3"> + <div class="tab-pane" id="sample73"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response3">无</pre> + <pre id="sample_response73">{ + "code": 1, + "msg": "成功", + "time": "1606137472", + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -9581,38 +9476,90 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-4"> + <div class="panel-heading" id="heading-74"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion4" href="#collapseOne4"> 需要登录的接口 <span class="text-muted">/api/demo/test2</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion74" href="#collapseOne74"> 离职详情 <span class="text-muted">/api/v2.factory_admin/quitList</span></a> </h4> </div> - <div id="collapseOne4" class="panel-collapse collapse"> + <div id="collapseOne74" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab4"> - <li class="active"><a href="#info4" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox4" data-toggle="tab">在线测试</a></li> - <li><a href="#sample4" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab74"> + <li class="active"><a href="#info74" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox74" data-toggle="tab">在线测试</a></li> + <li><a href="#sample74" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info4"> + <div class="tab-pane active" id="info74"> <div class="well"> - 需要登录的接口 </div> + 离职详情 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>factory_id</td> + <td>inter</td> + <td>是</td> + <td>工厂ID</td> + </tr> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键字</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -9622,111 +9569,43 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox4"> + <div class="tab-pane" id="sandbox74"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test2" method="get" name="form4" id="form4"> - <div class="form-group"> - 无 - </div> + <div class="headers"> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="4">提交</button> - <button type="reset" class="btn btn-info" rel="4">重置</button> - </div> - </form> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>响应输出</strong></div> - <div class="panel-body"> - <div class="row"> - <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers4"></pre> - <pre id="response4"></pre> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> - </div> + </div> </div> </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>返回参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - </div> - </div> - </div><!-- #sandbox --> - - <div class="tab-pane" id="sample4"> - <div class="row"> - <div class="col-md-12"> - <pre id="sample_response4">无</pre> - </div> - </div> - </div><!-- #sample --> - - </div><!-- .tab-content --> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading" id="heading-5"> - <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion5" href="#collapseOne5"> 需要登录且需要验证有相应组的权限 <span class="text-muted">/api/demo/test3</span></a> - </h4> - </div> - <div id="collapseOne5" class="panel-collapse collapse"> - <div class="panel-body"> - - <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab5"> - <li class="active"><a href="#info5" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox5" data-toggle="tab">在线测试</a></li> - <li><a href="#sample5" data-toggle="tab">返回示例</a></li> - </ul> - - <!-- Tab panes --> - <div class="tab-content"> - - <div class="tab-pane active" id="info5"> - <div class="well"> - 需要登录且需要验证有相应组的权限 </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>正文</strong></div> - <div class="panel-body"> - 无 </div> - </div> - </div><!-- #info --> - - <div class="tab-pane" id="sandbox5"> - <div class="row"> - <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test3" method="get" name="form5" id="form5"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.factory_admin/quitList" method="POST" name="form74" id="form74"> <div class="form-group"> - 无 + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="5">提交</button> - <button type="reset" class="btn btn-info" rel="5">重置</button> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + </div> + <div class="form-group"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键字" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="74">提交</button> + <button type="reset" class="btn btn-info" rel="74">重置</button> </div> </form> </div> @@ -9736,8 +9615,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers5"></pre> - <pre id="response5"></pre> + <pre id="response_headers74"></pre> + <pre id="response74"></pre> </div> </div> </div> @@ -9752,10 +9631,29 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample5"> + <div class="tab-pane" id="sample74"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response5">无</pre> + <pre id="sample_response74">{ + "code": 1, + "msg": "成功", + "time": "1612273417", + "data": { + "total": 1, //数据总数 + "per_page": 15, + "current_page": 1, //当前页 + "last_page": 1, + "data": [{ //数据 + "id": 72, //用户ID + "nickname": "何先生", //名称 + "mobile": "151*****361", //电话 + "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 + "is_work": "0", //是否入职:0=否,1=是 + "join_time": "2021-02-02", //入职时间 + "quit_time": "2021-02-02" //离职时间 + }] + } + }</pre> </div> </div> </div><!-- #sample --> @@ -9764,31 +9662,31 @@ </div> </div> </div> - <h2>会员接口</h2> + <h2>示例接口v2</h2> <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-22"> + <div class="panel-heading" id="heading-65"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion22" href="#collapseOne22"> 劳务管理-个人信息 <span class="text-muted">/api/user/index</span></a> + <a data-toggle="collapse" data-parent="#accordion65" href="#collapseOne65"> 测试名称 <span class="text-muted">/api/demo/test/id/{id}/name/{name}</span></a> </h4> </div> - <div id="collapseOne22" class="panel-collapse collapse"> + <div id="collapseOne65" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab22"> - <li class="active"><a href="#info22" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox22" data-toggle="tab">在线测试</a></li> - <li><a href="#sample22" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab65"> + <li class="active"><a href="#info65" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox65" data-toggle="tab">在线测试</a></li> + <li><a href="#sample65" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info22"> + <div class="tab-pane active" id="info65"> <div class="well"> - 劳务管理-个人信息 </div> + 测试描述信息 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -9815,7 +9713,36 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>id</td> + <td>integer</td> + <td>是</td> + <td>会员ID</td> + </tr> + <tr> + <td>name</td> + <td>string</td> + <td>是</td> + <td>用户名</td> + </tr> + <tr> + <td>data</td> + <td>object</td> + <td>是</td> + <td>扩展数据</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -9825,7 +9752,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox22"> + <div class="tab-pane" id="sandbox65"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -9842,14 +9769,23 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/index" method="POST" name="form22" id="form22"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test/id/{id}/name/{name}" method="POST" name="form65" id="form65"> <div class="form-group"> - 无 + <label class="control-label" for="id">id</label> + <input type="integer" class="form-control input-sm" id="id" required placeholder="会员ID" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="22">提交</button> - <button type="reset" class="btn btn-info" rel="22">重置</button> - </div> + <label class="control-label" for="name">name</label> + <input type="string" class="form-control input-sm" id="name" required placeholder="用户名" name="name"> + </div> + <div class="form-group"> + <label class="control-label" for="data">data</label> + <input type="object" class="form-control input-sm" id="data" required placeholder="扩展数据 - 例: {'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}" name="data"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="65">提交</button> + <button type="reset" class="btn btn-info" rel="65">重置</button> + </div> </form> </div> </div> @@ -9858,8 +9794,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers22"></pre> - <pre id="response22"></pre> + <pre id="response_headers65"></pre> + <pre id="response65"></pre> </div> </div> </div> @@ -9867,41 +9803,45 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + <tr> + <td>data</td> + <td>object</td> + <td>扩展数据返回</td> + </tr> + </tbody> + </table> </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample22"> + <div class="tab-pane" id="sample65"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response22">{ - "code": 1, - "msg": "成功", - "time": "1606137472", - "data": { - "user": { //用户信息 - "id": 1, //用户ID - "nickname": "admin", //昵称 - "mobile": "13888888888", //手机号 - "avatar": "/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //原始头像地址 - "is_work": "0", //是否在职:0=否,1=是 - "work_subsidy": "2.00", //工时补贴价格(元/时) - "work_subsidy_month": "600.00", //工时月工资(元/月) - "recruit_subsidy_month": "300.00", //招聘月工资(元/月) - "url": "/u/1", - "realname_status": "0", // 实名认证状态:-1=未申请,0=申请中,1=通过,2=未通过 - "full_avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //完整头像地址 - }, - "recruit_subsidy": { - "hour": "1.00", //招聘补贴价格(元/时) - "day": "10.00", //招聘补贴价格(元/天) - "month": "300.00" //招聘补贴价格(元/月) - } - } - }</pre> + <pre id="sample_response65">{ + 'code':'1', + 'msg':'返回成功' + }</pre> </div> </div> </div><!-- #sample --> @@ -9911,78 +9851,38 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-27"> + <div class="panel-heading" id="heading-66"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion27" href="#collapseOne27"> 编辑资料 <span class="text-muted">/api/user/profile</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion66" href="#collapseOne66"> 无需登录的接口 <span class="text-muted">/api/v2.demo/test1</span></a> </h4> </div> - <div id="collapseOne27" class="panel-collapse collapse"> + <div id="collapseOne66" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab27"> - <li class="active"><a href="#info27" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox27" data-toggle="tab">在线测试</a></li> - <li><a href="#sample27" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab66"> + <li class="active"><a href="#info66" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox66" data-toggle="tab">在线测试</a></li> + <li><a href="#sample66" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info27"> + <div class="tab-pane active" id="info66"> <div class="well"> - 编辑资料 </div> + 无需登录的接口 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>avatar</td> - <td>string</td> - <td>否</td> - <td>头像</td> - </tr> - <tr> - <td>nickname</td> - <td>string</td> - <td>否</td> - <td>昵称</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -9992,35 +9892,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox27"> + <div class="tab-pane" id="sandbox66"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/profile" method="POST" name="form27" id="form27"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.demo/test1" method="get" name="form66" id="form66"> <div class="form-group"> - <label class="control-label" for="avatar">avatar</label> - <input type="string" class="form-control input-sm" id="avatar" placeholder="头像" name="avatar"> - </div> - <div class="form-group"> - <label class="control-label" for="nickname">nickname</label> - <input type="string" class="form-control input-sm" id="nickname" placeholder="昵称" name="nickname"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="27">提交</button> - <button type="reset" class="btn btn-info" rel="27">重置</button> + <button type="submit" class="btn btn-success send" rel="66">提交</button> + <button type="reset" class="btn btn-info" rel="66">重置</button> </div> </form> </div> @@ -10030,8 +9914,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers27"></pre> - <pre id="response27"></pre> + <pre id="response_headers66"></pre> + <pre id="response66"></pre> </div> </div> </div> @@ -10046,15 +9930,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample27"> + <div class="tab-pane" id="sample66"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response27">{ - "code": 1, - "msg": "成功", - "time": "1604282876", - "data": null - }</pre> + <pre id="sample_response66">无</pre> </div> </div> </div><!-- #sample --> @@ -10064,96 +9943,38 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-32"> + <div class="panel-heading" id="heading-67"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion32" href="#collapseOne32"> 实名认证 <span class="text-muted">/api/user/realname</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion67" href="#collapseOne67"> 需要登录的接口 <span class="text-muted">/api/v2.demo/test2</span></a> </h4> </div> - <div id="collapseOne32" class="panel-collapse collapse"> + <div id="collapseOne67" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab32"> - <li class="active"><a href="#info32" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox32" data-toggle="tab">在线测试</a></li> - <li><a href="#sample32" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab67"> + <li class="active"><a href="#info67" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox67" data-toggle="tab">在线测试</a></li> + <li><a href="#sample67" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info32"> + <div class="tab-pane active" id="info67"> <div class="well"> - 实名认证 </div> + 需要登录的接口 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>realname</td> - <td>string</td> - <td>是</td> - <td>姓名</td> - </tr> - <tr> - <td>idcard</td> - <td>string</td> - <td>是</td> - <td>身份证号</td> - </tr> - <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>idcard_front</td> - <td>string</td> - <td>是</td> - <td>上传身份证正面</td> - </tr> - <tr> - <td>idcard_back</td> - <td>string</td> - <td>是</td> - <td>上传身份证反面</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -10163,47 +9984,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox32"> + <div class="tab-pane" id="sandbox67"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/realname" method="POST" name="form32" id="form32"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.demo/test2" method="get" name="form67" id="form67"> <div class="form-group"> - <label class="control-label" for="realname">realname</label> - <input type="string" class="form-control input-sm" id="realname" required placeholder="姓名" name="realname"> + 无 </div> <div class="form-group"> - <label class="control-label" for="idcard">idcard</label> - <input type="string" class="form-control input-sm" id="idcard" required placeholder="身份证号" name="idcard"> - </div> - <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> - <div class="form-group"> - <label class="control-label" for="idcard_front">idcard_front</label> - <input type="string" class="form-control input-sm" id="idcard_front" required placeholder="上传身份证正面" name="idcard_front"> - </div> - <div class="form-group"> - <label class="control-label" for="idcard_back">idcard_back</label> - <input type="string" class="form-control input-sm" id="idcard_back" required placeholder="上传身份证反面" name="idcard_back"> - </div> - <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="32">提交</button> - <button type="reset" class="btn btn-info" rel="32">重置</button> + <button type="submit" class="btn btn-success send" rel="67">提交</button> + <button type="reset" class="btn btn-info" rel="67">重置</button> </div> </form> </div> @@ -10213,8 +10006,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers32"></pre> - <pre id="response32"></pre> + <pre id="response_headers67"></pre> + <pre id="response67"></pre> </div> </div> </div> @@ -10229,14 +10022,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample32"> + <div class="tab-pane" id="sample67"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response32">{ - 'code':'1', - 'msg':'返回成功', - "data": null - }</pre> + <pre id="sample_response67">无</pre> </div> </div> </div><!-- #sample --> @@ -10246,28 +10035,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-33"> + <div class="panel-heading" id="heading-68"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion33" href="#collapseOne33"> code获取session_key和openid <span class="text-muted">/api/user/get_session_key</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion68" href="#collapseOne68"> 需要登录且需要验证有相应组的权限 <span class="text-muted">/api/v2.demo/test3</span></a> </h4> </div> - <div id="collapseOne33" class="panel-collapse collapse"> + <div id="collapseOne68" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab33"> - <li class="active"><a href="#info33" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox33" data-toggle="tab">在线测试</a></li> - <li><a href="#sample33" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab68"> + <li class="active"><a href="#info68" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox68" data-toggle="tab">在线测试</a></li> + <li><a href="#sample68" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info33"> + <div class="tab-pane active" id="info68"> <div class="well"> - code获取session_key和openid </div> + 需要登录且需要验证有相应组的权限 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -10277,24 +10066,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>string</td> - <td>是</td> - <td>小程序code</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -10304,20 +10076,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox33"> + <div class="tab-pane" id="sandbox68"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/get_session_key" method="POST" name="form33" id="form33"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.demo/test3" method="get" name="form68" id="form68"> <div class="form-group"> - <label class="control-label" for="code">code</label> - <input type="string" class="form-control input-sm" id="code" required placeholder="小程序code" name="code"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="33">提交</button> - <button type="reset" class="btn btn-info" rel="33">重置</button> + <button type="submit" class="btn btn-success send" rel="68">提交</button> + <button type="reset" class="btn btn-info" rel="68">重置</button> </div> </form> </div> @@ -10327,8 +10098,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers33"></pre> - <pre id="response33"></pre> + <pre id="response_headers68"></pre> + <pre id="response68"></pre> </div> </div> </div> @@ -10336,44 +10107,17 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample33"> + <div class="tab-pane" id="sample68"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response33">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "session_key": "1qyMwZRVdlBmQLwRYtYSgA==", - "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", - } - }</pre> + <pre id="sample_response68">无</pre> </div> </div> </div><!-- #sample --> @@ -10382,33 +10126,52 @@ </div> </div> </div> + <h2>示例接口</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-34"> + <div class="panel-heading" id="heading-2"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion34" href="#collapseOne34"> 用户授权登录 <span class="text-muted">/api/user/authority</span></a> + <a data-toggle="collapse" data-parent="#accordion2" href="#collapseOne2"> 测试名称 <span class="text-muted">/api/demo/test/id/{id}/name/{name}</span></a> </h4> </div> - <div id="collapseOne34" class="panel-collapse collapse"> + <div id="collapseOne2" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab34"> - <li class="active"><a href="#info34" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox34" data-toggle="tab">在线测试</a></li> - <li><a href="#sample34" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab2"> + <li class="active"><a href="#info2" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox2" data-toggle="tab">在线测试</a></li> + <li><a href="#sample2" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info34"> + <div class="tab-pane active" id="info2"> <div class="well"> - 用户授权登录 </div> + 测试描述信息 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -10425,28 +10188,22 @@ </thead> <tbody> <tr> - <td>sessionKey</td> - <td>string</td> + <td>id</td> + <td>integer</td> <td>是</td> - <td>小程序sessionKey</td> + <td>会员ID</td> </tr> <tr> - <td>iv</td> + <td>name</td> <td>string</td> <td>是</td> - <td>小程序iv</td> + <td>用户名</td> </tr> <tr> - <td>encryptData</td> - <td>string</td> + <td>data</td> + <td>object</td> <td>是</td> - <td>小程序encryptData</td> - </tr> - <tr> - <td>user_id</td> - <td>inter</td> - <td>否</td> - <td>扫码获取的用户ID</td> + <td>扩展数据</td> </tr> </tbody> </table> @@ -10459,32 +10216,39 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox34"> + <div class="tab-pane" id="sandbox2"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/authority" method="POST" name="form34" id="form34"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="sessionKey">sessionKey</label> - <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test/id/{id}/name/{name}" method="POST" name="form2" id="form2"> <div class="form-group"> - <label class="control-label" for="iv">iv</label> - <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> + <label class="control-label" for="id">id</label> + <input type="integer" class="form-control input-sm" id="id" required placeholder="会员ID" name="id"> </div> <div class="form-group"> - <label class="control-label" for="encryptData">encryptData</label> - <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> + <label class="control-label" for="name">name</label> + <input type="string" class="form-control input-sm" id="name" required placeholder="用户名" name="name"> </div> <div class="form-group"> - <label class="control-label" for="user_id">user_id</label> - <input type="inter" class="form-control input-sm" id="user_id" placeholder="扫码获取的用户ID" name="user_id"> + <label class="control-label" for="data">data</label> + <input type="object" class="form-control input-sm" id="data" required placeholder="扩展数据 - 例: {'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}" name="data"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="34">提交</button> - <button type="reset" class="btn btn-info" rel="34">重置</button> + <button type="submit" class="btn btn-success send" rel="2">提交</button> + <button type="reset" class="btn btn-info" rel="2">重置</button> </div> </form> </div> @@ -10494,8 +10258,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers34"></pre> - <pre id="response34"></pre> + <pre id="response_headers2"></pre> + <pre id="response2"></pre> </div> </div> </div> @@ -10522,6 +10286,11 @@ <td>string</td> <td></td> </tr> + <tr> + <td>data</td> + <td>object</td> + <td>扩展数据返回</td> + </tr> </tbody> </table> </div> @@ -10530,16 +10299,13 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample34"> + <div class="tab-pane" id="sample2"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response34">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", - } - }</pre> + <pre id="sample_response2">{ + 'code':'1', + 'msg':'返回成功' + }</pre> </div> </div> </div><!-- #sample --> @@ -10549,28 +10315,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-35"> + <div class="panel-heading" id="heading-3"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion35" href="#collapseOne35"> 用户授权获取手机号 <span class="text-muted">/api/user/getPhoneNumber</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion3" href="#collapseOne3"> 无需登录的接口 <span class="text-muted">/api/demo/test1</span></a> </h4> </div> - <div id="collapseOne35" class="panel-collapse collapse"> + <div id="collapseOne3" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab35"> - <li class="active"><a href="#info35" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox35" data-toggle="tab">在线测试</a></li> - <li><a href="#sample35" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab3"> + <li class="active"><a href="#info3" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox3" data-toggle="tab">在线测试</a></li> + <li><a href="#sample3" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info35"> + <div class="tab-pane active" id="info3"> <div class="well"> - 用户授权获取手机号 </div> + 无需登录的接口 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -10580,42 +10346,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>sessionKey</td> - <td>string</td> - <td>是</td> - <td>小程序sessionKey</td> - </tr> - <tr> - <td>iv</td> - <td>string</td> - <td>是</td> - <td>小程序iv</td> - </tr> - <tr> - <td>encryptData</td> - <td>string</td> - <td>是</td> - <td>小程序encryptData</td> - </tr> - <tr> - <td>openid</td> - <td>string</td> - <td>是</td> - <td>openid</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -10625,32 +10356,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox35"> + <div class="tab-pane" id="sandbox3"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/getPhoneNumber" method="POST" name="form35" id="form35"> - <div class="form-group"> - <label class="control-label" for="sessionKey">sessionKey</label> - <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> - </div> - <div class="form-group"> - <label class="control-label" for="iv">iv</label> - <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> - </div> - <div class="form-group"> - <label class="control-label" for="encryptData">encryptData</label> - <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test1" method="get" name="form3" id="form3"> <div class="form-group"> - <label class="control-label" for="openid">openid</label> - <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="35">提交</button> - <button type="reset" class="btn btn-info" rel="35">重置</button> + <button type="submit" class="btn btn-success send" rel="3">提交</button> + <button type="reset" class="btn btn-info" rel="3">重置</button> </div> </form> </div> @@ -10660,8 +10378,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers35"></pre> - <pre id="response35"></pre> + <pre id="response_headers3"></pre> + <pre id="response3"></pre> </div> </div> </div> @@ -10669,49 +10387,17 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>code</td> - <td>integer</td> - <td></td> - </tr> - <tr> - <td>msg</td> - <td>string</td> - <td></td> - </tr> - </tbody> - </table> + 无 </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample35"> + <div class="tab-pane" id="sample3"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response35">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "phoneNumber": "13580006666", //用户绑定的手机号(国外手机号会有区号) - "purePhoneNumber": "13580006666", //没有区号的手机号 - "countryCode": "86", //区号 - "watermark": { - "appid": "APPID", - "timestamp": TIMESTAMP - } - } - }</pre> + <pre id="sample_response3">无</pre> </div> </div> </div><!-- #sample --> @@ -10721,28 +10407,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-36"> + <div class="panel-heading" id="heading-4"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion36" href="#collapseOne36"> 工时补贴介绍 <span class="text-muted">/api/user/workSubsidyContent</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion4" href="#collapseOne4"> 需要登录的接口 <span class="text-muted">/api/demo/test2</span></a> </h4> </div> - <div id="collapseOne36" class="panel-collapse collapse"> + <div id="collapseOne4" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab36"> - <li class="active"><a href="#info36" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox36" data-toggle="tab">在线测试</a></li> - <li><a href="#sample36" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab4"> + <li class="active"><a href="#info4" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox4" data-toggle="tab">在线测试</a></li> + <li><a href="#sample4" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info36"> + <div class="tab-pane active" id="info4"> <div class="well"> - 工时补贴介绍 </div> + 需要登录的接口 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -10762,19 +10448,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox36"> + <div class="tab-pane" id="sandbox4"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/workSubsidyContent" method="POST" name="form36" id="form36"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test2" method="get" name="form4" id="form4"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="36">提交</button> - <button type="reset" class="btn btn-info" rel="36">重置</button> + <button type="submit" class="btn btn-success send" rel="4">提交</button> + <button type="reset" class="btn btn-info" rel="4">重置</button> </div> </form> </div> @@ -10784,8 +10470,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers36"></pre> - <pre id="response36"></pre> + <pre id="response_headers4"></pre> + <pre id="response4"></pre> </div> </div> </div> @@ -10800,15 +10486,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample36"> + <div class="tab-pane" id="sample4"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response36">{ - "code": 1, - "msg": "成功", - "time": "1606124276", - "data": "<p>工时补贴富文本详情介绍</p>" //工时补贴介绍 - }</pre> + <pre id="sample_response4">无</pre> </div> </div> </div><!-- #sample --> @@ -10818,49 +10499,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-38"> + <div class="panel-heading" id="heading-5"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion38" href="#collapseOne38"> 分享 <span class="text-muted">/api/user/userPoster</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion5" href="#collapseOne5"> 需要登录且需要验证有相应组的权限 <span class="text-muted">/api/demo/test3</span></a> </h4> </div> - <div id="collapseOne38" class="panel-collapse collapse"> + <div id="collapseOne5" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab38"> - <li class="active"><a href="#info38" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox38" data-toggle="tab">在线测试</a></li> - <li><a href="#sample38" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab5"> + <li class="active"><a href="#info5" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox5" data-toggle="tab">在线测试</a></li> + <li><a href="#sample5" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info38"> + <div class="tab-pane active" id="info5"> <div class="well"> - 分享 </div> + 需要登录且需要验证有相应组的权限 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -10876,30 +10540,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox38"> + <div class="tab-pane" id="sandbox5"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/userPoster" method="POST" name="form38" id="form38"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/demo/test3" method="get" name="form5" id="form5"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="38">提交</button> - <button type="reset" class="btn btn-info" rel="38">重置</button> + <button type="submit" class="btn btn-success send" rel="5">提交</button> + <button type="reset" class="btn btn-info" rel="5">重置</button> </div> </form> </div> @@ -10909,8 +10562,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers38"></pre> - <pre id="response38"></pre> + <pre id="response_headers5"></pre> + <pre id="response5"></pre> </div> </div> </div> @@ -10925,16 +10578,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample38"> + <div class="tab-pane" id="sample5"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response38">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 - } - }</pre> + <pre id="sample_response5">无</pre> </div> </div> </div><!-- #sample --> @@ -10943,29 +10590,31 @@ </div> </div> </div> + <h2>公共接口v2</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-37"> + <div class="panel-heading" id="heading-63"> <h4 class="panel-title"> - <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion37" href="#collapseOne37"> 招聘补贴介绍 <span class="text-muted">/api/user/recruitSubsidyContent</span></a> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion63" href="#collapseOne63"> 加载初始化 <span class="text-muted">/api/v2.common/init</span></a> </h4> </div> - <div id="collapseOne37" class="panel-collapse collapse"> + <div id="collapseOne63" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab37"> - <li class="active"><a href="#info37" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox37" data-toggle="tab">在线测试</a></li> - <li><a href="#sample37" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab63"> + <li class="active"><a href="#info63" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox63" data-toggle="tab">在线测试</a></li> + <li><a href="#sample63" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info37"> + <div class="tab-pane active" id="info63"> <div class="well"> - 招聘补贴介绍 </div> + 加载初始化 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -10975,7 +10624,36 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>version</td> + <td>string</td> + <td>是</td> + <td>版本号</td> + </tr> + <tr> + <td>lng</td> + <td>string</td> + <td>是</td> + <td>经度</td> + </tr> + <tr> + <td>lat</td> + <td>string</td> + <td>是</td> + <td>纬度</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -10985,19 +10663,28 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox37"> + <div class="tab-pane" id="sandbox63"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/recruitSubsidyContent" method="POST" name="form37" id="form37"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.common/init" method="get" name="form63" id="form63"> <div class="form-group"> - 无 + <label class="control-label" for="version">version</label> + <input type="string" class="form-control input-sm" id="version" required placeholder="版本号" name="version"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="37">提交</button> - <button type="reset" class="btn btn-info" rel="37">重置</button> + <label class="control-label" for="lng">lng</label> + <input type="string" class="form-control input-sm" id="lng" required placeholder="经度" name="lng"> + </div> + <div class="form-group"> + <label class="control-label" for="lat">lat</label> + <input type="string" class="form-control input-sm" id="lat" required placeholder="纬度" name="lat"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="63">提交</button> + <button type="reset" class="btn btn-info" rel="63">重置</button> </div> </form> </div> @@ -11007,8 +10694,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers37"></pre> - <pre id="response37"></pre> + <pre id="response_headers63"></pre> + <pre id="response63"></pre> </div> </div> </div> @@ -11023,15 +10710,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample37"> + <div class="tab-pane" id="sample63"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response37">{ - "code": 1, - "msg": "成功", - "time": "1606124276", - "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 - }</pre> + <pre id="sample_response63">无</pre> </div> </div> </div><!-- #sample --> @@ -11041,49 +10723,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-39"> + <div class="panel-heading" id="heading-64"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion39" href="#collapseOne39"> 下级 <span class="text-muted">/api/user/lowerList</span></a> + <a data-toggle="collapse" data-parent="#accordion64" href="#collapseOne64"> 上传文件 <span class="text-muted">/api/v2.common/upload</span></a> </h4> </div> - <div id="collapseOne39" class="panel-collapse collapse"> + <div id="collapseOne64" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab39"> - <li class="active"><a href="#info39" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox39" data-toggle="tab">在线测试</a></li> - <li><a href="#sample39" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab64"> + <li class="active"><a href="#info64" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox64" data-toggle="tab">在线测试</a></li> + <li><a href="#sample64" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info39"> + <div class="tab-pane active" id="info64"> <div class="well"> - 下级 </div> + 上传文件 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>是</td> - <td>请求的token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -11100,28 +10765,10 @@ </thead> <tbody> <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>is_work</td> - <td>string</td> - <td>否</td> - <td>是否在职:0=否,1=是</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>关键字搜索</td> + <td>file</td> + <td>File</td> + <td>是</td> + <td>文件流</td> </tr> </tbody> </table> @@ -11134,43 +10781,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox39"> + <div class="tab-pane" id="sandbox64"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/lowerList" method="POST" name="form39" id="form39"> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> - <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> - </div> - <div class="form-group"> - <label class="control-label" for="is_work">is_work</label> - <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/v2.common/upload" method="POST" name="form64" id="form64"> <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="关键字搜索" name="keyword"> + <label class="control-label" for="file">file</label> + <input type="File" class="form-control input-sm" id="file" required placeholder="文件流" name="file"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="39">提交</button> - <button type="reset" class="btn btn-info" rel="39">重置</button> + <button type="submit" class="btn btn-success send" rel="64">提交</button> + <button type="reset" class="btn btn-info" rel="64">重置</button> </div> </form> </div> @@ -11180,8 +10804,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers39"></pre> - <pre id="response39"></pre> + <pre id="response_headers64"></pre> + <pre id="response64"></pre> </div> </div> </div> @@ -11196,28 +10820,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample39"> + <div class="tab-pane" id="sample64"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response39">{ - "code": 1, - "msg": "成功", - "time": "1606359935", - "data": { - "total": 2, //总人数 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ - "id": 3, //用户ID - "nickname": "admin2", //昵称 - "mobile": "13888888888", //手机号 - "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 - "is_work": "0", //是否在职 - "is_complete": "0", //补贴是否完成:0=否,1=是 - }] - } - }</pre> + <pre id="sample_response64">无</pre> </div> </div> </div><!-- #sample --> @@ -11226,29 +10832,31 @@ </div> </div> </div> + <h2>会员接口</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-40"> + <div class="panel-heading" id="heading-26"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion40" href="#collapseOne40"> 搜索历史 <span class="text-muted">/api/user/keywordList</span></a> + <a data-toggle="collapse" data-parent="#accordion26" href="#collapseOne26"> 劳务管理-个人信息 <span class="text-muted">/api/user/index</span></a> </h4> </div> - <div id="collapseOne40" class="panel-collapse collapse"> + <div id="collapseOne26" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab40"> - <li class="active"><a href="#info40" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox40" data-toggle="tab">在线测试</a></li> - <li><a href="#sample40" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab26"> + <li class="active"><a href="#info26" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox26" data-toggle="tab">在线测试</a></li> + <li><a href="#sample26" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info40"> + <div class="tab-pane active" id="info26"> <div class="well"> - 搜索历史 </div> + 劳务管理-个人信息 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -11265,7 +10873,7 @@ <tr> <td>token</td> <td>string</td> - <td>否</td> + <td>是</td> <td>请求的Token</td> </tr> </tbody> @@ -11285,7 +10893,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox40"> + <div class="tab-pane" id="sandbox26"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -11294,7 +10902,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -11302,13 +10910,13 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/keywordList" method="POST" name="form40" id="form40"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/index" method="POST" name="form26" id="form26"> <div class="form-group"> 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="40">提交</button> - <button type="reset" class="btn btn-info" rel="40">重置</button> + <button type="submit" class="btn btn-success send" rel="26">提交</button> + <button type="reset" class="btn btn-info" rel="26">重置</button> </div> </form> </div> @@ -11318,8 +10926,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers40"></pre> - <pre id="response40"></pre> + <pre id="response_headers26"></pre> + <pre id="response26"></pre> </div> </div> </div> @@ -11334,16 +10942,26 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample40"> + <div class="tab-pane" id="sample26"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response40">{ + <pre id="sample_response26">{ "code": 1, "msg": "成功", - "time": "1606218663", - "data": [ //关键词 - "nihao" - ] + "time": "1606137472", + "data": { + "user": { //用户信息 + "id": 1, //用户ID + "nickname": "admin", //昵称 + "mobile": "13888888888", //手机号 + "avatar": "/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //原始头像地址 + "is_work": "1", //是否在职:0=否,1=是 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + } + } }</pre> </div> </div> @@ -11354,28 +10972,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-41"> + <div class="panel-heading" id="heading-28"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion41" href="#collapseOne41"> 搜索历史-清空 <span class="text-muted">/api/user/keywordClear</span></a> + <a data-toggle="collapse" data-parent="#accordion28" href="#collapseOne28"> 劳务管理-工资-历史收入 <span class="text-muted">/api/user/salaryList</span></a> </h4> </div> - <div id="collapseOne41" class="panel-collapse collapse"> + <div id="collapseOne28" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab41"> - <li class="active"><a href="#info41" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox41" data-toggle="tab">在线测试</a></li> - <li><a href="#sample41" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab28"> + <li class="active"><a href="#info28" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox28" data-toggle="tab">在线测试</a></li> + <li><a href="#sample28" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info41"> + <div class="tab-pane active" id="info28"> <div class="well"> - 搜索历史-清空 </div> + 劳务管理-工资-历史收入 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -11392,7 +11010,7 @@ <tr> <td>token</td> <td>string</td> - <td>否</td> + <td>是</td> <td>请求的Token</td> </tr> </tbody> @@ -11402,7 +11020,30 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -11412,7 +11053,7 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox41"> + <div class="tab-pane" id="sandbox28"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> @@ -11421,7 +11062,7 @@ <div class="headers"> <div class="form-group"> <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> </div> </div> @@ -11429,13 +11070,18 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/keywordClear" method="POST" name="form41" id="form41"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/salaryList" method="POST" name="form28" id="form28"> <div class="form-group"> - 无 + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="41">提交</button> - <button type="reset" class="btn btn-info" rel="41">重置</button> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="28">提交</button> + <button type="reset" class="btn btn-info" rel="28">重置</button> </div> </form> </div> @@ -11445,8 +11091,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers41"></pre> - <pre id="response41"></pre> + <pre id="response_headers28"></pre> + <pre id="response28"></pre> </div> </div> </div> @@ -11461,14 +11107,31 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample41"> + <div class="tab-pane" id="sample28"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response41">{ + <pre id="sample_response28">{ "code": 1, "msg": "成功", - "time": "1601351666", - "data": null + "time": "1620612745", + "data": { + "total": 1, + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 32, + "user_id": 711, + "salary": "600.00", //总工资 + "year_month": "2021年04月", //月份 + "createtime": 1615769765, + "updatetime": 1615769765, + "work_hours": "0.0", //总工时 + "work_subsidy": "0.00", //在职奖励 + "recruit_subsidy": "0.00", //推荐奖励 + "status": "0" //状态:0=待审核,1=已结算 + }] + } }</pre> </div> </div> @@ -11479,37 +11142,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-42"> + <div class="panel-heading" id="heading-27"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion42" href="#collapseOne42"> 下级的下级 <span class="text-muted">/api/user/lowersList</span></a> + <a data-toggle="collapse" data-parent="#accordion27" href="#collapseOne27"> 劳务管理-工资 <span class="text-muted">/api/user/salary</span></a> </h4> </div> - <div id="collapseOne42" class="panel-collapse collapse"> + <div id="collapseOne27" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab42"> - <li class="active"><a href="#info42" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox42" data-toggle="tab">在线测试</a></li> - <li><a href="#sample42" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab27"> + <li class="active"><a href="#info27" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox27" data-toggle="tab">在线测试</a></li> + <li><a href="#sample27" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info42"> + <div class="tab-pane active" id="info27"> <div class="well"> - 下级的下级 </div> + 劳务管理-工资 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -11521,66 +11178,52 @@ </thead> <tbody> <tr> - <td>user_id</td> - <td>inter</td> - <td>是</td> - <td>下级ID</td> - </tr> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>is_work</td> + <td>token</td> <td>string</td> - <td>否</td> - <td>是否在职:0=否,1=是</td> + <td>是</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox42"> + <div class="tab-pane" id="sandbox27"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/lowersList" method="POST" name="form42" id="form42"> - <div class="form-group"> - <label class="control-label" for="user_id">user_id</label> - <input type="inter" class="form-control input-sm" id="user_id" required placeholder="下级ID" name="user_id"> - </div> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/salary" method="POST" name="form27" id="form27"> <div class="form-group"> - <label class="control-label" for="is_work">is_work</label> - <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="42">提交</button> - <button type="reset" class="btn btn-info" rel="42">重置</button> + <button type="submit" class="btn btn-success send" rel="27">提交</button> + <button type="reset" class="btn btn-info" rel="27">重置</button> </div> </form> </div> @@ -11590,8 +11233,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers42"></pre> - <pre id="response42"></pre> + <pre id="response_headers27"></pre> + <pre id="response27"></pre> </div> </div> </div> @@ -11606,36 +11249,22 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample42"> + <div class="tab-pane" id="sample27"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response42">{ + <pre id="sample_response27">{ "code": 1, "msg": "成功", - "time": "1606216278", + "time": "1612234313", "data": { - "user": { //下级用户信息 - "id": 1, //ID - "nickname": "admin", //昵称 - "mobile": "13888888888", //手机号 - "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 - "is_work": "0", //是否在职:0=否,1=是 - "is_complete": "0", //补贴是否完成:0=否,1=是 - }, - "list": { //下级的下级 - "total": 3, //总数据 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ //下级的下级用户信息 - "id": 2, //用户ID - "nickname": "admin1", //昵称 - "mobile": "300.00", //手机号 - "avatar": "", //头像 - "is_work": "1", //是否在职:0=否,1=是 - "is_complete": "0", //补贴是否完成:0=否,1=是 - }] - } + "work_hours_month": "0.0", //本月打卡总工时 + "work_salary_month": "0.00", //本月打卡工资 + "work_subsidy": "2.00", //工时补贴(元/小时) + "work_subsidy_month": 0, //本月工时补贴 + "lower_work_hours_month": 0, //下级打卡总工时 + "recruit_subsidy_month": 0, //下级招聘补贴工资 + "salary": 0 //本月共收入 + "notice" : "通知内容" // 通知 } }</pre> </div> @@ -11647,38 +11276,78 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-26"> + <div class="panel-heading" id="heading-33"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion26" href="#collapseOne26"> 退出登录 <span class="text-muted">/api/user/logout</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion33" href="#collapseOne33"> 编辑资料 <span class="text-muted">/api/user/profile</span></a> </h4> </div> - <div id="collapseOne26" class="panel-collapse collapse"> + <div id="collapseOne33" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab26"> - <li class="active"><a href="#info26" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox26" data-toggle="tab">在线测试</a></li> - <li><a href="#sample26" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab33"> + <li class="active"><a href="#info33" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox33" data-toggle="tab">在线测试</a></li> + <li><a href="#sample33" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info26"> + <div class="tab-pane active" id="info33"> <div class="well"> - 退出登录 </div> + 编辑资料 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>avatar</td> + <td>string</td> + <td>否</td> + <td>头像</td> + </tr> + <tr> + <td>nickname</td> + <td>string</td> + <td>否</td> + <td>昵称</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -11688,19 +11357,35 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox26"> + <div class="tab-pane" id="sandbox33"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/logout" method="get" name="form26" id="form26"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/profile" method="POST" name="form33" id="form33"> <div class="form-group"> - 无 + <label class="control-label" for="avatar">avatar</label> + <input type="string" class="form-control input-sm" id="avatar" placeholder="头像" name="avatar"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="26">提交</button> - <button type="reset" class="btn btn-info" rel="26">重置</button> + <label class="control-label" for="nickname">nickname</label> + <input type="string" class="form-control input-sm" id="nickname" placeholder="昵称" name="nickname"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="33">提交</button> + <button type="reset" class="btn btn-info" rel="33">重置</button> </div> </form> </div> @@ -11710,8 +11395,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers26"></pre> - <pre id="response26"></pre> + <pre id="response_headers33"></pre> + <pre id="response33"></pre> </div> </div> </div> @@ -11726,10 +11411,15 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample26"> + <div class="tab-pane" id="sample33"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response26">无</pre> + <pre id="sample_response33">{ + "code": 1, + "msg": "成功", + "time": "1604282876", + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -11739,28 +11429,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-23"> + <div class="panel-heading" id="heading-38"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion23" href="#collapseOne23"> 会员登录 <span class="text-muted">/api/user/login</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion38" href="#collapseOne38"> 工厂列表 <span class="text-muted">/api/user/factoryList</span></a> </h4> </div> - <div id="collapseOne23" class="panel-collapse collapse"> + <div id="collapseOne38" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab23"> - <li class="active"><a href="#info23" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox23" data-toggle="tab">在线测试</a></li> - <li><a href="#sample23" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab38"> + <li class="active"><a href="#info38" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox38" data-toggle="tab">在线测试</a></li> + <li><a href="#sample38" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info23"> + <div class="tab-pane active" id="info38"> <div class="well"> - 会员登录 </div> + 工厂列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -11770,30 +11460,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>account</td> - <td>string</td> - <td>是</td> - <td>账号</td> - </tr> - <tr> - <td>password</td> - <td>string</td> - <td>是</td> - <td>密码</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -11803,24 +11470,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox23"> + <div class="tab-pane" id="sandbox38"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/login" method="get" name="form23" id="form23"> - <div class="form-group"> - <label class="control-label" for="account">account</label> - <input type="string" class="form-control input-sm" id="account" required placeholder="账号" name="account"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/factoryList" method="POST" name="form38" id="form38"> <div class="form-group"> - <label class="control-label" for="password">password</label> - <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="23">提交</button> - <button type="reset" class="btn btn-info" rel="23">重置</button> + <button type="submit" class="btn btn-success send" rel="38">提交</button> + <button type="reset" class="btn btn-info" rel="38">重置</button> </div> </form> </div> @@ -11830,8 +11492,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers23"></pre> - <pre id="response23"></pre> + <pre id="response_headers38"></pre> + <pre id="response38"></pre> </div> </div> </div> @@ -11846,10 +11508,19 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample23"> + <div class="tab-pane" id="sample38"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response23">无</pre> + <pre id="sample_response38">{ + "code": 1, + "msg": "入职成功后,驻厂将会为您服务", + "time": "1612233294", + "data": [{ + "id": 1, //工厂ID + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "" //工厂简称 + }] + }</pre> </div> </div> </div><!-- #sample --> @@ -11859,28 +11530,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-31"> + <div class="panel-heading" id="heading-40"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion31" href="#collapseOne31"> 重置密码 <span class="text-muted">/api/user/resetpwd</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion40" href="#collapseOne40"> 工厂搜索列表 <span class="text-muted">/api/user/factory</span></a> </h4> </div> - <div id="collapseOne31" class="panel-collapse collapse"> + <div id="collapseOne40" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab31"> - <li class="active"><a href="#info31" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox31" data-toggle="tab">在线测试</a></li> - <li><a href="#sample31" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab40"> + <li class="active"><a href="#info40" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox40" data-toggle="tab">在线测试</a></li> + <li><a href="#sample40" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info31"> + <div class="tab-pane active" id="info40"> <div class="well"> - 重置密码 </div> + 工厂搜索列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -11901,22 +11572,16 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>newpassword</td> + <td>factory_name</td> <td>string</td> <td>是</td> - <td>新密码</td> + <td>工厂名称</td> </tr> <tr> - <td>captcha</td> + <td>page</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>分页</td> </tr> </tbody> </table> @@ -11929,28 +11594,24 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox31"> + <div class="tab-pane" id="sandbox40"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/resetpwd" method="get" name="form31" id="form31"> - <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/factory" method="POST" name="form40" id="form40"> <div class="form-group"> - <label class="control-label" for="newpassword">newpassword</label> - <input type="string" class="form-control input-sm" id="newpassword" required placeholder="新密码" name="newpassword"> + <label class="control-label" for="factory_name">factory_name</label> + <input type="string" class="form-control input-sm" id="factory_name" required placeholder="工厂名称" name="factory_name"> </div> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="page">page</label> + <input type="string" class="form-control input-sm" id="page" required placeholder="分页" name="page"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="31">提交</button> - <button type="reset" class="btn btn-info" rel="31">重置</button> + <button type="submit" class="btn btn-success send" rel="40">提交</button> + <button type="reset" class="btn btn-info" rel="40">重置</button> </div> </form> </div> @@ -11960,8 +11621,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers31"></pre> - <pre id="response31"></pre> + <pre id="response_headers40"></pre> + <pre id="response40"></pre> </div> </div> </div> @@ -11976,10 +11637,25 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample31"> + <div class="tab-pane" id="sample40"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response31">无</pre> + <pre id="sample_response40">{ + "code": 1, + "msg": "入职成功后,驻厂将会为您服务", + "time": "1620372317", + "data": { + "total": 2, + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 1, //工厂id + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "新美亚" //工厂简称 + }] + } + }</pre> </div> </div> </div><!-- #sample --> @@ -11989,32 +11665,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-30"> + <div class="panel-heading" id="heading-41"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion30" href="#collapseOne30"> 第三方登录 <span class="text-muted">/api/user/third</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion41" href="#collapseOne41"> 确认入职 <span class="text-muted">/api/user/joinFactory</span></a> </h4> </div> - <div id="collapseOne30" class="panel-collapse collapse"> + <div id="collapseOne41" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab30"> - <li class="active"><a href="#info30" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox30" data-toggle="tab">在线测试</a></li> - <li><a href="#sample30" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab41"> + <li class="active"><a href="#info41" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox41" data-toggle="tab">在线测试</a></li> + <li><a href="#sample41" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info30"> + <div class="tab-pane active" id="info41"> <div class="well"> - 第三方登录 </div> + 确认入职 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -12031,16 +11724,16 @@ </thead> <tbody> <tr> - <td>platform</td> - <td>string</td> + <td>factory_id</td> + <td>inter</td> <td>是</td> - <td>平台名称</td> + <td>工厂ID</td> </tr> <tr> - <td>code</td> - <td>string</td> + <td>join_time</td> + <td>inter</td> <td>是</td> - <td>Code码</td> + <td>入职时间</td> </tr> </tbody> </table> @@ -12053,24 +11746,35 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox30"> + <div class="tab-pane" id="sandbox41"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/third" method="get" name="form30" id="form30"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/joinFactory" method="POST" name="form41" id="form41"> <div class="form-group"> - <label class="control-label" for="platform">platform</label> - <input type="string" class="form-control input-sm" id="platform" required placeholder="平台名称" name="platform"> + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <label class="control-label" for="code">code</label> - <input type="string" class="form-control input-sm" id="code" required placeholder="Code码" name="code"> + <label class="control-label" for="join_time">join_time</label> + <input type="inter" class="form-control input-sm" id="join_time" required placeholder="入职时间" name="join_time"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="30">提交</button> - <button type="reset" class="btn btn-info" rel="30">重置</button> + <button type="submit" class="btn btn-success send" rel="41">提交</button> + <button type="reset" class="btn btn-info" rel="41">重置</button> </div> </form> </div> @@ -12080,8 +11784,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers30"></pre> - <pre id="response30"></pre> + <pre id="response_headers41"></pre> + <pre id="response41"></pre> </div> </div> </div> @@ -12096,10 +11800,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample30"> + <div class="tab-pane" id="sample41"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response30">无</pre> + <pre id="sample_response41">{ + 'code':'1', + 'msg':'返回成功', + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -12109,32 +11817,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-29"> + <div class="panel-heading" id="heading-43"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion29" href="#collapseOne29"> 修改手机号 <span class="text-muted">/api/user/changemobile</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion43" href="#collapseOne43"> 办理离职 <span class="text-muted">/api/user/quitFactory</span></a> </h4> </div> - <div id="collapseOne29" class="panel-collapse collapse"> + <div id="collapseOne43" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab29"> - <li class="active"><a href="#info29" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox29" data-toggle="tab">在线测试</a></li> - <li><a href="#sample29" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab43"> + <li class="active"><a href="#info43" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox43" data-toggle="tab">在线测试</a></li> + <li><a href="#sample43" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info29"> + <div class="tab-pane active" id="info43"> <div class="well"> - 修改手机号 </div> + 办理离职 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -12151,16 +11876,10 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>captcha</td> - <td>string</td> + <td>factory_id</td> + <td>inter</td> <td>是</td> - <td>验证码</td> + <td>工厂ID</td> </tr> </tbody> </table> @@ -12173,24 +11892,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox29"> + <div class="tab-pane" id="sandbox43"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/changemobile" method="get" name="form29" id="form29"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/quitFactory" method="POST" name="form43" id="form43"> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="29">提交</button> - <button type="reset" class="btn btn-info" rel="29">重置</button> + <button type="submit" class="btn btn-success send" rel="43">提交</button> + <button type="reset" class="btn btn-info" rel="43">重置</button> </div> </form> </div> @@ -12200,8 +11926,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers29"></pre> - <pre id="response29"></pre> + <pre id="response_headers43"></pre> + <pre id="response43"></pre> </div> </div> </div> @@ -12216,10 +11942,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample29"> + <div class="tab-pane" id="sample43"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response29">无</pre> + <pre id="sample_response43">{ + 'code':'1', + 'msg':'返回成功', + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -12229,32 +11959,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-28"> + <div class="panel-heading" id="heading-44"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion28" href="#collapseOne28"> 修改邮箱 <span class="text-muted">/api/user/changeemail</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion44" href="#collapseOne44"> 实名认证 <span class="text-muted">/api/user/realname</span></a> </h4> </div> - <div id="collapseOne28" class="panel-collapse collapse"> + <div id="collapseOne44" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab28"> - <li class="active"><a href="#info28" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox28" data-toggle="tab">在线测试</a></li> - <li><a href="#sample28" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab44"> + <li class="active"><a href="#info44" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox44" data-toggle="tab">在线测试</a></li> + <li><a href="#sample44" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info28"> + <div class="tab-pane active" id="info44"> <div class="well"> - 修改邮箱 </div> + 实名认证 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -12271,16 +12018,28 @@ </thead> <tbody> <tr> - <td>email</td> + <td>realname</td> <td>string</td> <td>是</td> - <td>邮箱</td> + <td>姓名</td> </tr> <tr> - <td>captcha</td> + <td>idcard</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>身份证号</td> + </tr> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>idcard_front</td> + <td>string</td> + <td>是</td> + <td>上传收款码</td> </tr> </tbody> </table> @@ -12293,24 +12052,43 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox28"> + <div class="tab-pane" id="sandbox44"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/changeemail" method="get" name="form28" id="form28"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/realname" method="POST" name="form44" id="form44"> <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + <label class="control-label" for="realname">realname</label> + <input type="string" class="form-control input-sm" id="realname" required placeholder="姓名" name="realname"> </div> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="idcard">idcard</label> + <input type="string" class="form-control input-sm" id="idcard" required placeholder="身份证号" name="idcard"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="28">提交</button> - <button type="reset" class="btn btn-info" rel="28">重置</button> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="idcard_front">idcard_front</label> + <input type="string" class="form-control input-sm" id="idcard_front" required placeholder="上传收款码" name="idcard_front"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="44">提交</button> + <button type="reset" class="btn btn-info" rel="44">重置</button> </div> </form> </div> @@ -12320,8 +12098,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers28"></pre> - <pre id="response28"></pre> + <pre id="response_headers44"></pre> + <pre id="response44"></pre> </div> </div> </div> @@ -12336,10 +12114,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample28"> + <div class="tab-pane" id="sample44"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response28">无</pre> + <pre id="sample_response44">{ + 'code':'1', + 'msg':'返回成功', + "data": null + }</pre> </div> </div> </div><!-- #sample --> @@ -12349,37 +12131,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-24"> + <div class="panel-heading" id="heading-46"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion24" href="#collapseOne24"> 手机验证码登录 <span class="text-muted">/api/user/mobilelogin</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion46" href="#collapseOne46"> 实名认证状态 <span class="text-muted">/api/user/realnameStatus</span></a> </h4> </div> - <div id="collapseOne24" class="panel-collapse collapse"> + <div id="collapseOne46" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab24"> - <li class="active"><a href="#info24" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox24" data-toggle="tab">在线测试</a></li> - <li><a href="#sample24" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab46"> + <li class="active"><a href="#info46" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox46" data-toggle="tab">在线测试</a></li> + <li><a href="#sample46" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info24"> + <div class="tab-pane active" id="info46"> <div class="well"> - 手机验证码登录 </div> + 实名认证状态 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -12391,46 +12167,52 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>captcha</td> + <td>token</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox24"> + <div class="tab-pane" id="sandbox46"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/mobilelogin" method="get" name="form24" id="form24"> + <div class="headers"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/realnameStatus" method="POST" name="form46" id="form46"> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="24">提交</button> - <button type="reset" class="btn btn-info" rel="24">重置</button> + <button type="submit" class="btn btn-success send" rel="46">提交</button> + <button type="reset" class="btn btn-info" rel="46">重置</button> </div> </form> </div> @@ -12440,8 +12222,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers24"></pre> - <pre id="response24"></pre> + <pre id="response_headers46"></pre> + <pre id="response46"></pre> </div> </div> </div> @@ -12456,10 +12238,16 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample24"> + <div class="tab-pane" id="sample46"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response24">无</pre> + <pre id="sample_response46">{ + 'code':'1', + 'msg':'返回成功', + "data": { + 'status': '1', // 实名认证状态:0=申请中,1=通过,2=未申请 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -12469,28 +12257,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-25"> + <div class="panel-heading" id="heading-47"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion25" href="#collapseOne25"> 注册会员 <span class="text-muted">/api/user/register</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion47" href="#collapseOne47"> code获取session_key和openid <span class="text-muted">/api/user/get_session_key</span></a> </h4> </div> - <div id="collapseOne25" class="panel-collapse collapse"> + <div id="collapseOne47" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab25"> - <li class="active"><a href="#info25" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox25" data-toggle="tab">在线测试</a></li> - <li><a href="#sample25" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab47"> + <li class="active"><a href="#info47" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox47" data-toggle="tab">在线测试</a></li> + <li><a href="#sample47" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info25"> + <div class="tab-pane active" id="info47"> <div class="well"> - 注册会员 </div> + code获取session_key和openid </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -12511,34 +12299,10 @@ </thead> <tbody> <tr> - <td>username</td> - <td>string</td> - <td>是</td> - <td>用户名</td> - </tr> - <tr> - <td>password</td> - <td>string</td> - <td>是</td> - <td>密码</td> - </tr> - <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> - </tr> - <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> <td>code</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>小程序code</td> </tr> </tbody> </table> @@ -12551,36 +12315,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox25"> + <div class="tab-pane" id="sandbox47"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/register" method="get" name="form25" id="form25"> - <div class="form-group"> - <label class="control-label" for="username">username</label> - <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> - </div> - <div class="form-group"> - <label class="control-label" for="password">password</label> - <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> - </div> - <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> - </div> - <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/get_session_key" method="POST" name="form47" id="form47"> <div class="form-group"> <label class="control-label" for="code">code</label> - <input type="string" class="form-control input-sm" id="code" required placeholder="验证码" name="code"> + <input type="string" class="form-control input-sm" id="code" required placeholder="小程序code" name="code"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="25">提交</button> - <button type="reset" class="btn btn-info" rel="25">重置</button> + <button type="submit" class="btn btn-success send" rel="47">提交</button> + <button type="reset" class="btn btn-info" rel="47">重置</button> </div> </form> </div> @@ -12590,8 +12338,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers25"></pre> - <pre id="response25"></pre> + <pre id="response_headers47"></pre> + <pre id="response47"></pre> </div> </div> </div> @@ -12599,17 +12347,45 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + </tbody> + </table> </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample25"> + <div class="tab-pane" id="sample47"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response25">无</pre> + <pre id="sample_response47">{ + 'code':'1', + 'msg':'返回成功', + "data": { + "session_key": "1qyMwZRVdlBmQLwRYtYSgA==", + "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", + "openid": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", + } + }</pre> </div> </div> </div><!-- #sample --> @@ -12618,31 +12394,29 @@ </div> </div> </div> - <h2>Token接口</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-20"> + <div class="panel-heading" id="heading-48"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion20" href="#collapseOne20"> 检测Token是否过期 <span class="text-muted">/api/token/check</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion48" href="#collapseOne48"> 用户授权登录 <span class="text-muted">/api/user/authority</span></a> </h4> </div> - <div id="collapseOne20" class="panel-collapse collapse"> + <div id="collapseOne48" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab20"> - <li class="active"><a href="#info20" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox20" data-toggle="tab">在线测试</a></li> - <li><a href="#sample20" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab48"> + <li class="active"><a href="#info48" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox48" data-toggle="tab">在线测试</a></li> + <li><a href="#sample48" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info20"> + <div class="tab-pane active" id="info48"> <div class="well"> - 检测Token是否过期 </div> + 用户授权登录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -12652,7 +12426,48 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>sessionKey</td> + <td>string</td> + <td>是</td> + <td>小程序sessionKey</td> + </tr> + <tr> + <td>iv</td> + <td>string</td> + <td>是</td> + <td>小程序iv</td> + </tr> + <tr> + <td>encryptData</td> + <td>string</td> + <td>是</td> + <td>小程序encryptData</td> + </tr> + <tr> + <td>openid</td> + <td>string</td> + <td>是</td> + <td>openid</td> + </tr> + <tr> + <td>user_id</td> + <td>inter</td> + <td>否</td> + <td>扫码获取的用户ID</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -12662,19 +12477,36 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox20"> + <div class="tab-pane" id="sandbox48"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/token/check" method="get" name="form20" id="form20"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/authority" method="POST" name="form48" id="form48"> <div class="form-group"> - 无 + <label class="control-label" for="sessionKey">sessionKey</label> + <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="20">提交</button> - <button type="reset" class="btn btn-info" rel="20">重置</button> + <label class="control-label" for="iv">iv</label> + <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> + </div> + <div class="form-group"> + <label class="control-label" for="encryptData">encryptData</label> + <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> + </div> + <div class="form-group"> + <label class="control-label" for="openid">openid</label> + <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> + </div> + <div class="form-group"> + <label class="control-label" for="user_id">user_id</label> + <input type="inter" class="form-control input-sm" id="user_id" placeholder="扫码获取的用户ID" name="user_id"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="48">提交</button> + <button type="reset" class="btn btn-info" rel="48">重置</button> </div> </form> </div> @@ -12684,8 +12516,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers20"></pre> - <pre id="response20"></pre> + <pre id="response_headers48"></pre> + <pre id="response48"></pre> </div> </div> </div> @@ -12693,17 +12525,43 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + </tbody> + </table> </div> </div> </div> </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample20"> + <div class="tab-pane" id="sample48"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response20">无</pre> + <pre id="sample_response48">{ + 'code':'1', + 'msg':'返回成功', + "data": { + "token": "9e4648c7-c640-4e41-b758-dd1a8ef7a7ae", + } + }</pre> </div> </div> </div><!-- #sample --> @@ -12713,28 +12571,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-21"> + <div class="panel-heading" id="heading-49"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion21" href="#collapseOne21"> 刷新Token <span class="text-muted">/api/token/refresh</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion49" href="#collapseOne49"> 用户授权获取手机号 <span class="text-muted">/api/user/getPhoneNumber</span></a> </h4> </div> - <div id="collapseOne21" class="panel-collapse collapse"> + <div id="collapseOne49" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab21"> - <li class="active"><a href="#info21" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox21" data-toggle="tab">在线测试</a></li> - <li><a href="#sample21" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab49"> + <li class="active"><a href="#info49" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox49" data-toggle="tab">在线测试</a></li> + <li><a href="#sample49" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info21"> + <div class="tab-pane active" id="info49"> <div class="well"> - 刷新Token </div> + 用户授权获取手机号 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -12744,7 +12602,42 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>sessionKey</td> + <td>string</td> + <td>是</td> + <td>小程序sessionKey</td> + </tr> + <tr> + <td>iv</td> + <td>string</td> + <td>是</td> + <td>小程序iv</td> + </tr> + <tr> + <td>encryptData</td> + <td>string</td> + <td>是</td> + <td>小程序encryptData</td> + </tr> + <tr> + <td>openid</td> + <td>string</td> + <td>是</td> + <td>openid</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -12754,19 +12647,32 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox21"> + <div class="tab-pane" id="sandbox49"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/token/refresh" method="get" name="form21" id="form21"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/getPhoneNumber" method="POST" name="form49" id="form49"> <div class="form-group"> - 无 + <label class="control-label" for="sessionKey">sessionKey</label> + <input type="string" class="form-control input-sm" id="sessionKey" required placeholder="小程序sessionKey" name="sessionKey"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="21">提交</button> - <button type="reset" class="btn btn-info" rel="21">重置</button> + <label class="control-label" for="iv">iv</label> + <input type="string" class="form-control input-sm" id="iv" required placeholder="小程序iv" name="iv"> + </div> + <div class="form-group"> + <label class="control-label" for="encryptData">encryptData</label> + <input type="string" class="form-control input-sm" id="encryptData" required placeholder="小程序encryptData" name="encryptData"> + </div> + <div class="form-group"> + <label class="control-label" for="openid">openid</label> + <input type="string" class="form-control input-sm" id="openid" required placeholder="openid" name="openid"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="49">提交</button> + <button type="reset" class="btn btn-info" rel="49">重置</button> </div> </form> </div> @@ -12776,8 +12682,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers21"></pre> - <pre id="response21"></pre> + <pre id="response_headers49"></pre> + <pre id="response49"></pre> </div> </div> </div> @@ -12785,50 +12691,80 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>返回参数</strong></div> <div class="panel-body"> - 无 - </div> - </div> - </div> - </div> - </div><!-- #sandbox --> - - <div class="tab-pane" id="sample21"> - <div class="row"> - <div class="col-md-12"> - <pre id="sample_response21">无</pre> - </div> - </div> - </div><!-- #sample --> - - </div><!-- .tab-content --> - </div> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>code</td> + <td>integer</td> + <td></td> + </tr> + <tr> + <td>msg</td> + <td>string</td> + <td></td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample49"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response49">{ + 'code':'1', + 'msg':'返回成功', + "data": { + "phoneNumber": "13580006666", //用户绑定的手机号(国外手机号会有区号) + "purePhoneNumber": "13580006666", //没有区号的手机号 + "countryCode": "86", //区号 + "watermark": { + "appid": "APPID", + "timestamp": TIMESTAMP + } + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> </div> </div> - <h2>手机短信接口</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-18"> + <div class="panel-heading" id="heading-50"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion18" href="#collapseOne18"> 发送验证码 <span class="text-muted">/api/sms/send</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion50" href="#collapseOne50"> 工时补贴介绍 <span class="text-muted">/api/user/workSubsidyContent</span></a> </h4> </div> - <div id="collapseOne18" class="panel-collapse collapse"> + <div id="collapseOne50" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab18"> - <li class="active"><a href="#info18" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox18" data-toggle="tab">在线测试</a></li> - <li><a href="#sample18" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab50"> + <li class="active"><a href="#info50" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox50" data-toggle="tab">在线测试</a></li> + <li><a href="#sample50" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info18"> + <div class="tab-pane active" id="info50"> <div class="well"> - 发送验证码 </div> + 工时补贴介绍 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -12838,30 +12774,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>event</td> - <td>string</td> - <td>是</td> - <td>事件名称</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -12871,24 +12784,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox18"> + <div class="tab-pane" id="sandbox50"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/sms/send" method="get" name="form18" id="form18"> - <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/workSubsidyContent" method="POST" name="form50" id="form50"> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="18">提交</button> - <button type="reset" class="btn btn-info" rel="18">重置</button> + <button type="submit" class="btn btn-success send" rel="50">提交</button> + <button type="reset" class="btn btn-info" rel="50">重置</button> </div> </form> </div> @@ -12898,8 +12806,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers18"></pre> - <pre id="response18"></pre> + <pre id="response_headers50"></pre> + <pre id="response50"></pre> </div> </div> </div> @@ -12914,10 +12822,15 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample18"> + <div class="tab-pane" id="sample50"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response18">无</pre> + <pre id="sample_response50">{ + "code": 1, + "msg": "成功", + "time": "1606124276", + "data": "<p>工时补贴富文本详情介绍</p>" //工时补贴介绍 + }</pre> </div> </div> </div><!-- #sample --> @@ -12927,28 +12840,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-19"> + <div class="panel-heading" id="heading-51"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion19" href="#collapseOne19"> 检测验证码 <span class="text-muted">/api/sms/check</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion51" href="#collapseOne51"> 招聘补贴介绍 <span class="text-muted">/api/user/recruitSubsidyContent</span></a> </h4> </div> - <div id="collapseOne19" class="panel-collapse collapse"> + <div id="collapseOne51" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab19"> - <li class="active"><a href="#info19" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox19" data-toggle="tab">在线测试</a></li> - <li><a href="#sample19" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab51"> + <li class="active"><a href="#info51" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox51" data-toggle="tab">在线测试</a></li> + <li><a href="#sample51" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info19"> + <div class="tab-pane active" id="info51"> <div class="well"> - 检测验证码 </div> + 招聘补贴介绍 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -12958,36 +12871,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>mobile</td> - <td>string</td> - <td>是</td> - <td>手机号</td> - </tr> - <tr> - <td>event</td> - <td>string</td> - <td>是</td> - <td>事件名称</td> - </tr> - <tr> - <td>captcha</td> - <td>string</td> - <td>是</td> - <td>验证码</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -12997,28 +12881,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox19"> + <div class="tab-pane" id="sandbox51"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/sms/check" method="get" name="form19" id="form19"> - <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> - </div> - <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/recruitSubsidyContent" method="POST" name="form51" id="form51"> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="19">提交</button> - <button type="reset" class="btn btn-info" rel="19">重置</button> + <button type="submit" class="btn btn-success send" rel="51">提交</button> + <button type="reset" class="btn btn-info" rel="51">重置</button> </div> </form> </div> @@ -13028,8 +12903,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers19"></pre> - <pre id="response19"></pre> + <pre id="response_headers51"></pre> + <pre id="response51"></pre> </div> </div> </div> @@ -13044,10 +12919,15 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample19"> + <div class="tab-pane" id="sample51"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response19">无</pre> + <pre id="sample_response51">{ + "code": 1, + "msg": "成功", + "time": "1606124276", + "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 + }</pre> </div> </div> </div><!-- #sample --> @@ -13056,65 +12936,3998 @@ </div> </div> </div> - <h2>首页接口</h2> - <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-8"> + <div class="panel-heading" id="heading-52"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion8" href="#collapseOne8"> 首页分类 <span class="text-muted">/api/index/categoryList</span></a> + <a data-toggle="collapse" data-parent="#accordion52" href="#collapseOne52"> 记一笔工时 <span class="text-muted">/api/user/logWork</span></a> </h4> </div> - <div id="collapseOne8" class="panel-collapse collapse"> + <div id="collapseOne52" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab8"> - <li class="active"><a href="#info8" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox8" data-toggle="tab">在线测试</a></li> - <li><a href="#sample8" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab52"> + <li class="active"><a href="#info52" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox52" data-toggle="tab">在线测试</a></li> + <li><a href="#sample52" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info8"> + <div class="tab-pane active" id="info52"> <div class="well"> - 首页分类 </div> + 记一笔工时 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>正文</strong></div> - <div class="panel-body"> - 无 </div> - </div> - </div><!-- #info --> - - <div class="tab-pane" id="sandbox8"> - <div class="row"> - <div class="col-md-12"> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/categoryList" method="POST" name="form8" id="form8"> - <div class="form-group"> - 无 - </div> - <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="8">提交</button> - <button type="reset" class="btn btn-info" rel="8">重置</button> - </div> - </form> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>work_date</td> + <td>string</td> + <td>是</td> + <td>工作日期</td> + </tr> + <tr> + <td>work_hours</td> + <td>string</td> + <td>是</td> + <td>工作时长</td> + </tr> + <tr> + <td>work_price</td> + <td>string</td> + <td>是</td> + <td>工价</td> + </tr> + <tr> + <td>work_type</td> + <td>string</td> + <td>是</td> + <td>班次:1=白班,2=夜班,3=休班</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox52"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/logWork" method="POST" name="form52" id="form52"> + <div class="form-group"> + <label class="control-label" for="work_date">work_date</label> + <input type="string" class="form-control input-sm" id="work_date" required placeholder="工作日期" name="work_date"> + </div> + <div class="form-group"> + <label class="control-label" for="work_hours">work_hours</label> + <input type="string" class="form-control input-sm" id="work_hours" required placeholder="工作时长" name="work_hours"> + </div> + <div class="form-group"> + <label class="control-label" for="work_price">work_price</label> + <input type="string" class="form-control input-sm" id="work_price" required placeholder="工价" name="work_price"> + </div> + <div class="form-group"> + <label class="control-label" for="work_type">work_type</label> + <input type="string" class="form-control input-sm" id="work_type" required placeholder="班次:1=白班,2=夜班,3=休班" name="work_type"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="52">提交</button> + <button type="reset" class="btn btn-info" rel="52">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers52"></pre> + <pre id="response52"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample52"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response52">{ + "code": 1, + "msg": "成功", + "time": "1606124276", + "data": "<p>招聘补贴富文本详情介绍</p>" //招聘补贴介绍 + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-53"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion53" href="#collapseOne53"> 工时详情 <span class="text-muted">/api/user/workLogInfo</span></a> + </h4> + </div> + <div id="collapseOne53" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab53"> + <li class="active"><a href="#info53" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox53" data-toggle="tab">在线测试</a></li> + <li><a href="#sample53" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info53"> + <div class="well"> + 工时详情 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>work_date</td> + <td>string</td> + <td>是</td> + <td>工作日期</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox53"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/workLogInfo" method="POST" name="form53" id="form53"> + <div class="form-group"> + <label class="control-label" for="work_date">work_date</label> + <input type="string" class="form-control input-sm" id="work_date" required placeholder="工作日期" name="work_date"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="53">提交</button> + <button type="reset" class="btn btn-info" rel="53">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers53"></pre> + <pre id="response53"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample53"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response53">{ + "code": 1, + "msg": "成功", + "time": "1612340182", + "data": { + "id": 18, //ID + "user_id": 72, + "work_date": "2021-02-02", //工作日期 + "work_hours": "4.5", //工时时长 + "work_price": "20.00", //工价 + "work_salary": "90.00", //今日收入 + "work_type": "1", //班次:1=白班,2=夜班,3=休班 + "createtime": 1612279627, + "updatetime": 1612279627 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-54"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion54" href="#collapseOne54"> 工时统计图 <span class="text-muted">/api/user/workLogList</span></a> + </h4> + </div> + <div id="collapseOne54" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab54"> + <li class="active"><a href="#info54" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox54" data-toggle="tab">在线测试</a></li> + <li><a href="#sample54" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info54"> + <div class="well"> + 工时统计图 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>month</td> + <td>string</td> + <td>是</td> + <td>年月</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox54"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/workLogList" method="POST" name="form54" id="form54"> + <div class="form-group"> + <label class="control-label" for="month">month</label> + <input type="string" class="form-control input-sm" id="month" required placeholder="年月" name="month"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="54">提交</button> + <button type="reset" class="btn btn-info" rel="54">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers54"></pre> + <pre id="response54"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample54"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response54">{ + "code": 1, + "msg": "打卡成功", + "time": "1612279947", + "data": { + "work_hours_month": 9, //工时时长 + "work_salary_month": 180, //收入 + "list": [{ //本月数据 + "id": 14, + "work_date": "01", //打卡日期 + "work_hours": "4.5", //工时 + "work_type": "1", //班次:1=白班,2=夜班,3=休班 + }] + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-55"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion55" href="#collapseOne55"> 借支-打卡天数 <span class="text-muted">/api/user/logDays</span></a> + </h4> + </div> + <div id="collapseOne55" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab55"> + <li class="active"><a href="#info55" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox55" data-toggle="tab">在线测试</a></li> + <li><a href="#sample55" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info55"> + <div class="well"> + 借支-打卡天数 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox55"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/logDays" method="POST" name="form55" id="form55"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="55">提交</button> + <button type="reset" class="btn btn-info" rel="55">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers55"></pre> + <pre id="response55"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample55"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response55">{ + "code": 1, + "msg": "成功", + "time": "1612319531", + "data": { + "log_days": 1, //连续打卡天数 + "limit_days": 7, //打卡满7天 + "borrow_money": "300.00" //借支金额 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-56"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion56" href="#collapseOne56"> 借支 <span class="text-muted">/api/user/borrow</span></a> + </h4> + </div> + <div id="collapseOne56" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab56"> + <li class="active"><a href="#info56" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox56" data-toggle="tab">在线测试</a></li> + <li><a href="#sample56" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info56"> + <div class="well"> + 借支 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>is_confirm</td> + <td>inter</td> + <td>是</td> + <td>是否确认:0=否,1=是</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox56"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/borrow" method="POST" name="form56" id="form56"> + <div class="form-group"> + <label class="control-label" for="is_confirm">is_confirm</label> + <input type="inter" class="form-control input-sm" id="is_confirm" required placeholder="是否确认:0=否,1=是" name="is_confirm"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="56">提交</button> + <button type="reset" class="btn btn-info" rel="56">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers56"></pre> + <pre id="response56"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample56"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response56">{ + "code": 1, //1=完成,2=未满打卡,3=确认借支 + "msg": "成功", + "time": "1606124276", + "data": { + "log_days": 1, //连续打卡天数 + "limit_days": 7, //打卡满7天 + "borrow_money": "300.00" //借支金额 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-57"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion57" href="#collapseOne57"> 分享 <span class="text-muted">/api/user/userPoster</span></a> + </h4> + </div> + <div id="collapseOne57" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab57"> + <li class="active"><a href="#info57" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox57" data-toggle="tab">在线测试</a></li> + <li><a href="#sample57" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info57"> + <div class="well"> + 分享 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox57"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/userPoster" method="POST" name="form57" id="form57"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="57">提交</button> + <button type="reset" class="btn btn-info" rel="57">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers57"></pre> + <pre id="response57"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample57"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response57">{ + 'code':'1', + 'msg':'返回成功', + "data": { + "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-58"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion58" href="#collapseOne58"> 下级 <span class="text-muted">/api/user/lowerList</span></a> + </h4> + </div> + <div id="collapseOne58" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab58"> + <li class="active"><a href="#info58" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox58" data-toggle="tab">在线测试</a></li> + <li><a href="#sample58" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info58"> + <div class="well"> + 下级 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>is_work</td> + <td>string</td> + <td>否</td> + <td>是否在职:0=否,1=是</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>关键字搜索</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox58"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/lowerList" method="POST" name="form58" id="form58"> + <div class="form-group"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + </div> + <div class="form-group"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="is_work">is_work</label> + <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="关键字搜索" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="58">提交</button> + <button type="reset" class="btn btn-info" rel="58">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers58"></pre> + <pre id="response58"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample58"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response58">{ + "code": 1, + "msg": "成功", + "time": "1606359935", + "data": { + "total": 2, //总人数 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 3, //用户ID + "nickname": "admin2", //昵称 + "mobile": "13888888888", //手机号 + "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 + "is_work": "0", //是否在职 + "is_complete": "0", //补贴是否完成:0=否,1=是 + "give_recruit_subsidy": 2, //工资 + "work_hours_month": "0.0", //本月总工时 + "num":'a', //标识:a为一级,b为二级 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + }] + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-59"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion59" href="#collapseOne59"> 搜索历史 <span class="text-muted">/api/user/keywordList</span></a> + </h4> + </div> + <div id="collapseOne59" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab59"> + <li class="active"><a href="#info59" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox59" data-toggle="tab">在线测试</a></li> + <li><a href="#sample59" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info59"> + <div class="well"> + 搜索历史 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox59"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/keywordList" method="POST" name="form59" id="form59"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="59">提交</button> + <button type="reset" class="btn btn-info" rel="59">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers59"></pre> + <pre id="response59"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample59"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response59">{ + "code": 1, + "msg": "成功", + "time": "1606218663", + "data": [ //关键词 + "nihao" + ] + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-60"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion60" href="#collapseOne60"> 搜索历史-清空 <span class="text-muted">/api/user/keywordClear</span></a> + </h4> + </div> + <div id="collapseOne60" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab60"> + <li class="active"><a href="#info60" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox60" data-toggle="tab">在线测试</a></li> + <li><a href="#sample60" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info60"> + <div class="well"> + 搜索历史-清空 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox60"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/keywordClear" method="POST" name="form60" id="form60"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="60">提交</button> + <button type="reset" class="btn btn-info" rel="60">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers60"></pre> + <pre id="response60"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample60"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response60">{ + "code": 1, + "msg": "成功", + "time": "1601351666", + "data": null + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-61"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion61" href="#collapseOne61"> 下级的下级 <span class="text-muted">/api/user/lowersList</span></a> + </h4> + </div> + <div id="collapseOne61" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab61"> + <li class="active"><a href="#info61" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox61" data-toggle="tab">在线测试</a></li> + <li><a href="#sample61" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info61"> + <div class="well"> + 下级的下级 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>user_id</td> + <td>inter</td> + <td>是</td> + <td>下级ID</td> + </tr> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>is_work</td> + <td>string</td> + <td>否</td> + <td>是否在职:0=否,1=是</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox61"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/lowersList" method="POST" name="form61" id="form61"> + <div class="form-group"> + <label class="control-label" for="user_id">user_id</label> + <input type="inter" class="form-control input-sm" id="user_id" required placeholder="下级ID" name="user_id"> + </div> + <div class="form-group"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + </div> + <div class="form-group"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="is_work">is_work</label> + <input type="string" class="form-control input-sm" id="is_work" placeholder="是否在职:0=否,1=是" name="is_work"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="61">提交</button> + <button type="reset" class="btn btn-info" rel="61">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers61"></pre> + <pre id="response61"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample61"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response61">{ + "code": 1, + "msg": "成功", + "time": "1606216278", + "data": { + "user": { //下级用户信息 + "id": 1, //ID + "nickname": "admin", //昵称 + "mobile": "13888888888", //手机号 + "avatar": "http://www.recruit.top/uploads/20201123/8894d62100f2f920ffb2f38063b63f2d.jpg", //头像 + "is_work": "0", //是否在职:0=否,1=是 + "is_complete": "0", //补贴是否完成:0=否,1=是 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + }, + "list": { //下级的下级 + "total": 3, //总数据 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ //下级的下级用户信息 + "id": 2, //用户ID + "nickname": "admin1", //昵称 + "mobile": "300.00", //手机号 + "avatar": "", //头像 + "is_work": "1", //是否在职:0=否,1=是 + "is_complete": "0", //补贴是否完成:0=否,1=是 + "give_recruit_subsidy": 2, //工资 + "work_hours_month": "0.0", //本月总工时 + "factory": { //工厂 + "id": 1, //工厂ID + "factory_shortname": "" //工厂简称 + } + }] + } + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-35"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion35" href="#collapseOne35"> 修改手机号 <span class="text-muted">/api/user/changemobile</span></a> + </h4> + </div> + <div id="collapseOne35" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab35"> + <li class="active"><a href="#info35" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox35" data-toggle="tab">在线测试</a></li> + <li><a href="#sample35" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info35"> + <div class="well"> + 修改手机号 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox35"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/changemobile" method="get" name="form35" id="form35"> + <div class="form-group"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="35">提交</button> + <button type="reset" class="btn btn-info" rel="35">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers35"></pre> + <pre id="response35"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample35"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response35">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-36"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion36" href="#collapseOne36"> 第三方登录 <span class="text-muted">/api/user/third</span></a> + </h4> + </div> + <div id="collapseOne36" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab36"> + <li class="active"><a href="#info36" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox36" data-toggle="tab">在线测试</a></li> + <li><a href="#sample36" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info36"> + <div class="well"> + 第三方登录 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>platform</td> + <td>string</td> + <td>是</td> + <td>平台名称</td> + </tr> + <tr> + <td>code</td> + <td>string</td> + <td>是</td> + <td>Code码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox36"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/third" method="get" name="form36" id="form36"> + <div class="form-group"> + <label class="control-label" for="platform">platform</label> + <input type="string" class="form-control input-sm" id="platform" required placeholder="平台名称" name="platform"> + </div> + <div class="form-group"> + <label class="control-label" for="code">code</label> + <input type="string" class="form-control input-sm" id="code" required placeholder="Code码" name="code"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="36">提交</button> + <button type="reset" class="btn btn-info" rel="36">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers36"></pre> + <pre id="response36"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample36"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response36">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-45"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion45" href="#collapseOne45"> @ApiTitle 认证页面通知 <span class="text-muted">/api/user/give</span></a> + </h4> + </div> + <div id="collapseOne45" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab45"> + <li class="active"><a href="#info45" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox45" data-toggle="tab">在线测试</a></li> + <li><a href="#sample45" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info45"> + <div class="well"> + @ApiTitle 认证页面通知 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox45"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/give" method="get" name="form45" id="form45"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="45">提交</button> + <button type="reset" class="btn btn-info" rel="45">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers45"></pre> + <pre id="response45"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample45"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response45">{ + "code": 1, + "msg": "成功", + "time": "1620439310", + "data": { + "id": 3, //通知id + "content": "认证通知" //通知内容 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-29"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion29" href="#collapseOne29"> 会员登录 <span class="text-muted">/api/user/login</span></a> + </h4> + </div> + <div id="collapseOne29" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab29"> + <li class="active"><a href="#info29" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox29" data-toggle="tab">在线测试</a></li> + <li><a href="#sample29" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info29"> + <div class="well"> + 会员登录 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>account</td> + <td>string</td> + <td>是</td> + <td>账号</td> + </tr> + <tr> + <td>password</td> + <td>string</td> + <td>是</td> + <td>密码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox29"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/login" method="get" name="form29" id="form29"> + <div class="form-group"> + <label class="control-label" for="account">account</label> + <input type="string" class="form-control input-sm" id="account" required placeholder="账号" name="account"> + </div> + <div class="form-group"> + <label class="control-label" for="password">password</label> + <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="29">提交</button> + <button type="reset" class="btn btn-info" rel="29">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers29"></pre> + <pre id="response29"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample29"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response29">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-30"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion30" href="#collapseOne30"> 手机验证码登录 <span class="text-muted">/api/user/mobilelogin</span></a> + </h4> + </div> + <div id="collapseOne30" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab30"> + <li class="active"><a href="#info30" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox30" data-toggle="tab">在线测试</a></li> + <li><a href="#sample30" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info30"> + <div class="well"> + 手机验证码登录 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox30"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/mobilelogin" method="get" name="form30" id="form30"> + <div class="form-group"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="30">提交</button> + <button type="reset" class="btn btn-info" rel="30">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers30"></pre> + <pre id="response30"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample30"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response30">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-42"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion42" href="#collapseOne42"> @ApiTitle 入职页面文本 <span class="text-muted">/api/user/con</span></a> + </h4> + </div> + <div id="collapseOne42" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab42"> + <li class="active"><a href="#info42" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox42" data-toggle="tab">在线测试</a></li> + <li><a href="#sample42" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info42"> + <div class="well"> + @ApiTitle 入职页面文本 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox42"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/con" method="POST" name="form42" id="form42"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="42">提交</button> + <button type="reset" class="btn btn-info" rel="42">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers42"></pre> + <pre id="response42"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample42"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response42">{ + "code": 1, + "msg": "成功", + "time": "1620373282", + "data": "1.输入入职工厂\r\n2.选择工厂,提交入职" //文本内容 + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-31"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion31" href="#collapseOne31"> 注册会员 <span class="text-muted">/api/user/register</span></a> + </h4> + </div> + <div id="collapseOne31" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab31"> + <li class="active"><a href="#info31" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox31" data-toggle="tab">在线测试</a></li> + <li><a href="#sample31" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info31"> + <div class="well"> + 注册会员 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>username</td> + <td>string</td> + <td>是</td> + <td>用户名</td> + </tr> + <tr> + <td>password</td> + <td>string</td> + <td>是</td> + <td>密码</td> + </tr> + <tr> + <td>email</td> + <td>string</td> + <td>是</td> + <td>邮箱</td> + </tr> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>code</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox31"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/register" method="get" name="form31" id="form31"> + <div class="form-group"> + <label class="control-label" for="username">username</label> + <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> + </div> + <div class="form-group"> + <label class="control-label" for="password">password</label> + <input type="string" class="form-control input-sm" id="password" required placeholder="密码" name="password"> + </div> + <div class="form-group"> + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + </div> + <div class="form-group"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="code">code</label> + <input type="string" class="form-control input-sm" id="code" required placeholder="验证码" name="code"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="31">提交</button> + <button type="reset" class="btn btn-info" rel="31">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers31"></pre> + <pre id="response31"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample31"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response31">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-32"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion32" href="#collapseOne32"> 退出登录 <span class="text-muted">/api/user/logout</span></a> + </h4> + </div> + <div id="collapseOne32" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab32"> + <li class="active"><a href="#info32" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox32" data-toggle="tab">在线测试</a></li> + <li><a href="#sample32" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info32"> + <div class="well"> + 退出登录 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox32"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/logout" method="get" name="form32" id="form32"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="32">提交</button> + <button type="reset" class="btn btn-info" rel="32">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers32"></pre> + <pre id="response32"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample32"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response32">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-39"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion39" href="#collapseOne39"> @ApiTitle 热门工厂 <span class="text-muted">/api/user/hot</span></a> + </h4> + </div> + <div id="collapseOne39" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab39"> + <li class="active"><a href="#info39" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox39" data-toggle="tab">在线测试</a></li> + <li><a href="#sample39" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info39"> + <div class="well"> + @ApiTitle 热门工厂 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox39"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/hot" method="POST" name="form39" id="form39"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="39">提交</button> + <button type="reset" class="btn btn-info" rel="39">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers39"></pre> + <pre id="response39"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample39"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response39">{ + "code": 1, + "msg": "成功", + "time": "1620371474", + "data": [{ + "id": 20, //工厂id + "factory_name": "中天世纪实业有限公司", //工厂名称 + "factory_shortname": "中天世纪实业有限公司" //工厂简称 + }] + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-34"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion34" href="#collapseOne34"> 修改邮箱 <span class="text-muted">/api/user/changeemail</span></a> + </h4> + </div> + <div id="collapseOne34" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab34"> + <li class="active"><a href="#info34" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox34" data-toggle="tab">在线测试</a></li> + <li><a href="#sample34" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info34"> + <div class="well"> + 修改邮箱 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>email</td> + <td>string</td> + <td>是</td> + <td>邮箱</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox34"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/changeemail" method="get" name="form34" id="form34"> + <div class="form-group"> + <label class="control-label" for="email">email</label> + <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="34">提交</button> + <button type="reset" class="btn btn-info" rel="34">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers34"></pre> + <pre id="response34"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample34"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response34">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-37"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion37" href="#collapseOne37"> 重置密码 <span class="text-muted">/api/user/resetpwd</span></a> + </h4> + </div> + <div id="collapseOne37" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab37"> + <li class="active"><a href="#info37" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox37" data-toggle="tab">在线测试</a></li> + <li><a href="#sample37" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info37"> + <div class="well"> + 重置密码 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>newpassword</td> + <td>string</td> + <td>是</td> + <td>新密码</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox37"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/resetpwd" method="get" name="form37" id="form37"> + <div class="form-group"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="newpassword">newpassword</label> + <input type="string" class="form-control input-sm" id="newpassword" required placeholder="新密码" name="newpassword"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="37">提交</button> + <button type="reset" class="btn btn-info" rel="37">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers37"></pre> + <pre id="response37"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample37"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response37">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-62"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion62" href="#collapseOne62"> @ApiTitle 劳务管理通知 <span class="text-muted">/api/user/record</span></a> + </h4> + </div> + <div id="collapseOne62" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab62"> + <li class="active"><a href="#info62" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox62" data-toggle="tab">在线测试</a></li> + <li><a href="#sample62" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info62"> + <div class="well"> + @ApiTitle 劳务管理通知 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox62"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/record" method="get" name="form62" id="form62"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="62">提交</button> + <button type="reset" class="btn btn-info" rel="62">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers62"></pre> + <pre id="response62"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample62"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response62">{ + "code": 1, + "msg": "成功", + "time": "1620294367", + "data": { + "id": 680, //通知id + "content": "恭喜您入驻搜房帝平台!" //通知内容 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <h2>Token接口</h2> + <hr> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-24"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion24" href="#collapseOne24"> 检测Token是否过期 <span class="text-muted">/api/token/check</span></a> + </h4> + </div> + <div id="collapseOne24" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab24"> + <li class="active"><a href="#info24" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox24" data-toggle="tab">在线测试</a></li> + <li><a href="#sample24" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info24"> + <div class="well"> + 检测Token是否过期 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox24"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/token/check" method="GET" name="form24" id="form24"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="24">提交</button> + <button type="reset" class="btn btn-info" rel="24">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers24"></pre> + <pre id="response24"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample24"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response24">{ + "code": 1, + "msg": "", + "time": "1621402970", + "data": { + "token": "545eed64-39c4-437e-8285-ac94c03e4921", //token + "expires_in": 2591951 //剩余有效时间 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-25"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion25" href="#collapseOne25"> 刷新Token <span class="text-muted">/api/token/refresh</span></a> + </h4> + </div> + <div id="collapseOne25" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab25"> + <li class="active"><a href="#info25" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox25" data-toggle="tab">在线测试</a></li> + <li><a href="#sample25" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info25"> + <div class="well"> + 刷新Token </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox25"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/token/refresh" method="GET" name="form25" id="form25"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="25">提交</button> + <button type="reset" class="btn btn-info" rel="25">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers25"></pre> + <pre id="response25"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample25"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response25">{ + "code": 1, + "msg": "", + "time": "1621403556", + "data": { + "token": "175c6d84-42af-4c59-bce0-ad8a66eb5f3f", //token + "expires_in": 2592000 //剩余有效时间 + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <h2>手机短信接口</h2> + <hr> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-22"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion22" href="#collapseOne22"> 发送验证码 <span class="text-muted">/api/sms/send</span></a> + </h4> + </div> + <div id="collapseOne22" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab22"> + <li class="active"><a href="#info22" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox22" data-toggle="tab">在线测试</a></li> + <li><a href="#sample22" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info22"> + <div class="well"> + 发送验证码 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件名称</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox22"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/sms/send" method="get" name="form22" id="form22"> + <div class="form-group"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="22">提交</button> + <button type="reset" class="btn btn-info" rel="22">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers22"></pre> + <pre id="response22"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample22"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response22">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-23"> + <h4 class="panel-title"> + <span class="label label-success">GET</span> + <a data-toggle="collapse" data-parent="#accordion23" href="#collapseOne23"> 检测验证码 <span class="text-muted">/api/sms/check</span></a> + </h4> + </div> + <div id="collapseOne23" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab23"> + <li class="active"><a href="#info23" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox23" data-toggle="tab">在线测试</a></li> + <li><a href="#sample23" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info23"> + <div class="well"> + 检测验证码 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>mobile</td> + <td>string</td> + <td>是</td> + <td>手机号</td> + </tr> + <tr> + <td>event</td> + <td>string</td> + <td>是</td> + <td>事件名称</td> + </tr> + <tr> + <td>captcha</td> + <td>string</td> + <td>是</td> + <td>验证码</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox23"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/sms/check" method="get" name="form23" id="form23"> + <div class="form-group"> + <label class="control-label" for="mobile">mobile</label> + <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + </div> + <div class="form-group"> + <label class="control-label" for="event">event</label> + <input type="string" class="form-control input-sm" id="event" required placeholder="事件名称" name="event"> + </div> + <div class="form-group"> + <label class="control-label" for="captcha">captcha</label> + <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="23">提交</button> + <button type="reset" class="btn btn-info" rel="23">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers23"></pre> + <pre id="response23"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample23"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response23">无</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <h2>首页接口</h2> + <hr> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-12"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion12" href="#collapseOne12"> 首页分类 <span class="text-muted">/api/index/categoryList</span></a> + </h4> + </div> + <div id="collapseOne12" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab12"> + <li class="active"><a href="#info12" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox12" data-toggle="tab">在线测试</a></li> + <li><a href="#sample12" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info12"> + <div class="well"> + 首页分类 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox12"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/categoryList" method="POST" name="form12" id="form12"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="12">提交</button> + <button type="reset" class="btn btn-info" rel="12">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers12"></pre> + <pre id="response12"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample12"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response12">{ + "code": 1, + "msg": "请求成功", + "time": "1605707229", + "data": [{ + "id": 1, //分类ID + "name": "附近工作", //分类名称 + "image": "https://app.mockplus.cn/api/v1/file/thumb?&img=https://img02.mockplus.cn/idoc/sketch/2020-11-02/4077abe2-8f9e-4cf0-b95f-7a402ba0394e.F42C51D8-3246-425F-B6D9-436A3BD0FF3B.png&p=25" + }] + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-13"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion13" href="#collapseOne13"> 工厂列表 <span class="text-muted">/api/index/factoryList</span></a> + </h4> + </div> + <div id="collapseOne13" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab13"> + <li class="active"><a href="#info13" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox13" data-toggle="tab">在线测试</a></li> + <li><a href="#sample13" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info13"> + <div class="well"> + 工厂列表 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox13"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/factoryList" method="POST" name="form13" id="form13"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="13">提交</button> + <button type="reset" class="btn btn-info" rel="13">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers13"></pre> + <pre id="response13"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample13"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response13">{ + "code": 1, + "msg": "请求成功", + "time": "1605944895", + "data": [{ + "id": 2, //工厂ID + "factory_name": "你好", //工厂名称 + "factory_price": "1.00" //工厂工价 + }] + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-14"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion14" href="#collapseOne14"> 搜索历史 <span class="text-muted">/api/index/keywordList</span></a> + </h4> + </div> + <div id="collapseOne14" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab14"> + <li class="active"><a href="#info14" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox14" data-toggle="tab">在线测试</a></li> + <li><a href="#sample14" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info14"> + <div class="well"> + 搜索历史 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox14"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/keywordList" method="POST" name="form14" id="form14"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="14">提交</button> + <button type="reset" class="btn btn-info" rel="14">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers14"></pre> + <pre id="response14"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample14"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response14">{ + "code": 1, + "msg": "成功", + "time": "1606218663", + "data": [ //关键词 + "nihao" + ] + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-15"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion15" href="#collapseOne15"> 搜索历史-清空 <span class="text-muted">/api/index/keywordClear</span></a> + </h4> + </div> + <div id="collapseOne15" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab15"> + <li class="active"><a href="#info15" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox15" data-toggle="tab">在线测试</a></li> + <li><a href="#sample15" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info15"> + <div class="well"> + 搜索历史-清空 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox15"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/keywordClear" method="POST" name="form15" id="form15"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="15">提交</button> + <button type="reset" class="btn btn-info" rel="15">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers15"></pre> + <pre id="response15"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample15"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response15">{ + "code": 1, + "msg": "成功", + "time": "1601351666", + "data": null + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-16"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion16" href="#collapseOne16"> 附近工作 | 长期工 | 短期工 | 兼职 <span class="text-muted">/api/index/jobList</span></a> + </h4> + </div> + <div id="collapseOne16" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab16"> + <li class="active"><a href="#info16" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox16" data-toggle="tab">在线测试</a></li> + <li><a href="#sample16" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info16"> + <div class="well"> + 职位列表 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>lng</td> + <td>string</td> + <td>否</td> + <td>经度,(附近工作必填)</td> + </tr> + <tr> + <td>lat</td> + <td>string</td> + <td>否</td> + <td>纬度,(附近工作必填)</td> + </tr> + <tr> + <td>type</td> + <td>string</td> + <td>否</td> + <td>分类:1=长期工,2=兼职,3=短期工</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键词</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox16"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobList" method="POST" name="form16" id="form16"> + <div class="form-group"> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + </div> + <div class="form-group"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="lng">lng</label> + <input type="string" class="form-control input-sm" id="lng" placeholder="经度,(附近工作必填)" name="lng"> + </div> + <div class="form-group"> + <label class="control-label" for="lat">lat</label> + <input type="string" class="form-control input-sm" id="lat" placeholder="纬度,(附近工作必填)" name="lat"> + </div> + <div class="form-group"> + <label class="control-label" for="type">type</label> + <input type="string" class="form-control input-sm" id="type" placeholder="分类:1=长期工,2=兼职,3=短期工" name="type"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="16">提交</button> + <button type="reset" class="btn btn-info" rel="16">重置</button> + </div> + </form> </div> </div> <div class="panel panel-default"> @@ -13122,8 +16935,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers8"></pre> - <pre id="response8"></pre> + <pre id="response_headers16"></pre> + <pre id="response16"></pre> </div> </div> </div> @@ -13138,18 +16951,33 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample8"> + <div class="tab-pane" id="sample16"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response8">{ + <pre id="sample_response16">{ "code": 1, - "msg": "请求成功", - "time": "1605707229", - "data": [{ - "id": 1, //分类ID - "name": "附近工作", //分类名称 - "image": "https://app.mockplus.cn/api/v1/file/thumb?&img=https://img02.mockplus.cn/idoc/sketch/2020-11-02/4077abe2-8f9e-4cf0-b95f-7a402ba0394e.F42C51D8-3246-425F-B6D9-436A3BD0FF3B.png&p=25" - }] + "msg": "成功", + "time": "1605954640", + "data": { + "total": 2, //数据总数 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 2, //职位ID + "job_name": "测试职位2", //职位名称 + "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 + "factory_price": "40.00", //工厂工价(元/时) + "subsidy_price": "40.00", //平台补贴(元/时) + "factory_price_total": "40.00", //工价 + "salary": "6000~7000", //月收入 + "people_num": 23, //报名人数 + "label_name": [ //标签 + "包吃", + "包住" + ] + }] + } }</pre> </div> </div> @@ -13160,38 +16988,84 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-9"> + <div class="panel-heading" id="heading-17"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion9" href="#collapseOne9"> 工厂列表 <span class="text-muted">/api/index/factoryList</span></a> + <a data-toggle="collapse" data-parent="#accordion17" href="#collapseOne17"> 职位收藏 <span class="text-muted">/api/index/collectList</span></a> </h4> </div> - <div id="collapseOne9" class="panel-collapse collapse"> + <div id="collapseOne17" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab9"> - <li class="active"><a href="#info9" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox9" data-toggle="tab">在线测试</a></li> - <li><a href="#sample9" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab17"> + <li class="active"><a href="#info17" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox17" data-toggle="tab">在线测试</a></li> + <li><a href="#sample17" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info9"> + <div class="tab-pane active" id="info17"> <div class="well"> - 工厂列表 </div> + 职位收藏 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>否</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键词</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -13201,19 +17075,39 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox9"> + <div class="tab-pane" id="sandbox17"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/factoryList" method="POST" name="form9" id="form9"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/collectList" method="POST" name="form17" id="form17"> <div class="form-group"> - 无 + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="9">提交</button> - <button type="reset" class="btn btn-info" rel="9">重置</button> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="17">提交</button> + <button type="reset" class="btn btn-info" rel="17">重置</button> </div> </form> </div> @@ -13223,8 +17117,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers9"></pre> - <pre id="response9"></pre> + <pre id="response_headers17"></pre> + <pre id="response17"></pre> </div> </div> </div> @@ -13239,18 +17133,29 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample9"> + <div class="tab-pane" id="sample17"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response9">{ + <pre id="sample_response17">{ "code": 1, - "msg": "请求成功", - "time": "1605944895", - "data": [{ - "id": 2, //工厂ID - "factory_name": "你好", //工厂名称 - "factory_price": "1.00" //工厂工价 - }] + "msg": "成功", + "time": "1605954640", + "data": { + "total": 2, //数据总数 + "per_page": 15, + "current_page": 1, + "last_page": 1, + "data": [{ + "id": 2, //职位ID + "job_name": "测试职位2", //职位名称 + "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 + "factory_price": "40.00", //工厂工价(元/时) + "subsidy_price": "40.00", //平台补贴(元/时) + "factory_price_total": "40.00", //工价 + "salary": "6000~7000", //月收入 + "people_num": 23 //报名人数 + }] + } }</pre> </div> </div> @@ -13261,31 +17166,37 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-10"> + <div class="panel-heading" id="heading-18"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion10" href="#collapseOne10"> 搜索历史 <span class="text-muted">/api/index/keywordList</span></a> + <a data-toggle="collapse" data-parent="#accordion18" href="#collapseOne18"> 职位详情 <span class="text-muted">/api/index/jobInfo</span></a> </h4> </div> - <div id="collapseOne10" class="panel-collapse collapse"> + <div id="collapseOne18" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab10"> - <li class="active"><a href="#info10" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox10" data-toggle="tab">在线测试</a></li> - <li><a href="#sample10" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab18"> + <li class="active"><a href="#info18" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox18" data-toggle="tab">在线测试</a></li> + <li><a href="#sample18" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info10"> + <div class="tab-pane active" id="info18"> <div class="well"> - 搜索历史 </div> + 职位详情 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -13297,52 +17208,36 @@ </thead> <tbody> <tr> - <td>token</td> - <td>string</td> - <td>否</td> - <td>请求的Token</td> + <td>job_id</td> + <td>inter</td> + <td>是</td> + <td>职位ID</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox10"> + <div class="tab-pane" id="sandbox18"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/keywordList" method="POST" name="form10" id="form10"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobInfo" method="POST" name="form18" id="form18"> <div class="form-group"> - 无 + <label class="control-label" for="job_id">job_id</label> + <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="10">提交</button> - <button type="reset" class="btn btn-info" rel="10">重置</button> + <button type="submit" class="btn btn-success send" rel="18">提交</button> + <button type="reset" class="btn btn-info" rel="18">重置</button> </div> </form> </div> @@ -13352,8 +17247,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers10"></pre> - <pre id="response10"></pre> + <pre id="response_headers18"></pre> + <pre id="response18"></pre> </div> </div> </div> @@ -13368,16 +17263,37 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample10"> + <div class="tab-pane" id="sample18"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response10">{ + <pre id="sample_response18">{ "code": 1, "msg": "成功", - "time": "1606218663", - "data": [ //关键词 - "nihao" - ] + "time": "1606033046", + "data": { + "id": 1, //职位ID + "job_name": "测试职位", //职位名称 + "images": [{ //图片 + "type": "image", //文件类型:image=图片,video=视频 + "url": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png" //文件地址 + }], + "content": "<p>456</p>", //职位详情 + "factory_price": "60.00", //正常工价 + "subsidy_price": "10.00", //平台补贴价格 + "factory_price_total": "70.00", //补贴后工价 + "salary": "5000~6000", // 月收入 + "label_name": [ //标签 + "包吃", + "包住" + ], + "is_collect": 0 ,//是否收藏:0=否,1=是 + "inform": {//通知 + "id": 5, //通知id + "content": "hi哈佛地方", //通知内容 + "status": "1", + "job_id": 7 + } + } }</pre> </div> </div> @@ -13388,31 +17304,37 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-11"> + <div class="panel-heading" id="heading-19"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion11" href="#collapseOne11"> 搜索历史-清空 <span class="text-muted">/api/index/keywordClear</span></a> + <a data-toggle="collapse" data-parent="#accordion19" href="#collapseOne19"> 收藏职位 <span class="text-muted">/api/index/jobCollect</span></a> </h4> </div> - <div id="collapseOne11" class="panel-collapse collapse"> + <div id="collapseOne19" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab11"> - <li class="active"><a href="#info11" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox11" data-toggle="tab">在线测试</a></li> - <li><a href="#sample11" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab19"> + <li class="active"><a href="#info19" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox19" data-toggle="tab">在线测试</a></li> + <li><a href="#sample19" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info11"> + <div class="tab-pane active" id="info19"> <div class="well"> - 搜索历史-清空 </div> + 收藏职位 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -13424,52 +17346,36 @@ </thead> <tbody> <tr> - <td>token</td> - <td>string</td> - <td>否</td> - <td>请求的Token</td> + <td>job_id</td> + <td>inter</td> + <td>是</td> + <td>职位ID</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox11"> + <div class="tab-pane" id="sandbox19"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/keywordClear" method="POST" name="form11" id="form11"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobCollect" method="POST" name="form19" id="form19"> <div class="form-group"> - 无 + <label class="control-label" for="job_id">job_id</label> + <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="11">提交</button> - <button type="reset" class="btn btn-info" rel="11">重置</button> + <button type="submit" class="btn btn-success send" rel="19">提交</button> + <button type="reset" class="btn btn-info" rel="19">重置</button> </div> </form> </div> @@ -13479,8 +17385,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers11"></pre> - <pre id="response11"></pre> + <pre id="response_headers19"></pre> + <pre id="response19"></pre> </div> </div> </div> @@ -13495,13 +17401,13 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample11"> + <div class="tab-pane" id="sample19"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response11">{ + <pre id="sample_response19">{ "code": 1, - "msg": "成功", - "time": "1601351666", + "msg": "收藏成功/取消收藏成功", + "time": "1606033046", "data": null }</pre> </div> @@ -13513,49 +17419,32 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-12"> + <div class="panel-heading" id="heading-20"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion12" href="#collapseOne12"> 附近工作 | 长期工 | 短期工 | 兼职 <span class="text-muted">/api/index/jobList</span></a> + <a data-toggle="collapse" data-parent="#accordion20" href="#collapseOne20"> 职位海报 <span class="text-muted">/api/index/jobPoster</span></a> </h4> </div> - <div id="collapseOne12" class="panel-collapse collapse"> + <div id="collapseOne20" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab12"> - <li class="active"><a href="#info12" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox12" data-toggle="tab">在线测试</a></li> - <li><a href="#sample12" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab20"> + <li class="active"><a href="#info20" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox20" data-toggle="tab">在线测试</a></li> + <li><a href="#sample20" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info12"> + <div class="tab-pane active" id="info20"> <div class="well"> - 职位列表 </div> + 职位海报 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>否</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -13572,40 +17461,10 @@ </thead> <tbody> <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> + <td>job_id</td> <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>lng</td> - <td>string</td> - <td>否</td> - <td>经度,(附近工作必填)</td> - </tr> - <tr> - <td>lat</td> - <td>string</td> - <td>否</td> - <td>纬度,(附近工作必填)</td> - </tr> - <tr> - <td>type</td> - <td>string</td> - <td>否</td> - <td>分类:1=长期工,2=兼职,3=短期工</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>搜索关键词</td> + <td>是</td> + <td>职位ID</td> </tr> </tbody> </table> @@ -13618,51 +17477,20 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox12"> + <div class="tab-pane" id="sandbox20"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobList" method="POST" name="form12" id="form12"> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> - <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobPoster" method="POST" name="form20" id="form20"> <div class="form-group"> - <label class="control-label" for="lng">lng</label> - <input type="string" class="form-control input-sm" id="lng" placeholder="经度,(附近工作必填)" name="lng"> - </div> - <div class="form-group"> - <label class="control-label" for="lat">lat</label> - <input type="string" class="form-control input-sm" id="lat" placeholder="纬度,(附近工作必填)" name="lat"> - </div> - <div class="form-group"> - <label class="control-label" for="type">type</label> - <input type="string" class="form-control input-sm" id="type" placeholder="分类:1=长期工,2=兼职,3=短期工" name="type"> - </div> - <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + <label class="control-label" for="job_id">job_id</label> + <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="12">提交</button> - <button type="reset" class="btn btn-info" rel="12">重置</button> + <button type="submit" class="btn btn-success send" rel="20">提交</button> + <button type="reset" class="btn btn-info" rel="20">重置</button> </div> </form> </div> @@ -13672,8 +17500,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers12"></pre> - <pre id="response12"></pre> + <pre id="response_headers20"></pre> + <pre id="response20"></pre> </div> </div> </div> @@ -13688,28 +17516,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample12"> + <div class="tab-pane" id="sample20"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response12">{ - "code": 1, - "msg": "成功", - "time": "1605954640", + <pre id="sample_response20">{ + 'code':'1', + 'msg':'返回成功', "data": { - "total": 2, //数据总数 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ - "id": 2, //职位ID - "job_name": "测试职位2", //职位名称 - "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 - "factory_price": "40.00", //工厂工价(元/时) - "subsidy_price": "40.00", //平台补贴(元/时) - "factory_price_total": "40.00", //工价 - "salary": "6000~7000", //月收入 - "people_num": 23 //报名人数 - }] + "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 } }</pre> </div> @@ -13721,84 +17535,38 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-13"> + <div class="panel-heading" id="heading-21"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion13" href="#collapseOne13"> 职位收藏 <span class="text-muted">/api/index/collectList</span></a> + <a data-toggle="collapse" data-parent="#accordion21" href="#collapseOne21"> 入驻代理 <span class="text-muted">/api/index/agentContent</span></a> </h4> </div> - <div id="collapseOne13" class="panel-collapse collapse"> + <div id="collapseOne21" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab13"> - <li class="active"><a href="#info13" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox13" data-toggle="tab">在线测试</a></li> - <li><a href="#sample13" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab21"> + <li class="active"><a href="#info21" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox21" data-toggle="tab">在线测试</a></li> + <li><a href="#sample21" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info13"> + <div class="tab-pane active" id="info21"> <div class="well"> - 职位收藏 </div> + 入驻代理 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>token</td> - <td>string</td> - <td>否</td> - <td>请求的Token</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>page</td> - <td>inter</td> - <td>否</td> - <td>当前页(默认1</td> - </tr> - <tr> - <td>page_num</td> - <td>inter</td> - <td>否</td> - <td>每页显示数据个数(默认10)</td> - </tr> - <tr> - <td>keyword</td> - <td>string</td> - <td>否</td> - <td>搜索关键词</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -13808,39 +17576,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox13"> + <div class="tab-pane" id="sandbox21"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> - <div class="panel-heading"><strong>Headers</strong></div> - <div class="panel-body"> - <div class="headers"> - <div class="form-group"> - <label class="control-label" for="token">token</label> - <input type="string" class="form-control input-sm" id="token" placeholder="请求的Token - Ex: " name="token"> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/collectList" method="POST" name="form13" id="form13"> - <div class="form-group"> - <label class="control-label" for="page">page</label> - <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> - </div> - <div class="form-group"> - <label class="control-label" for="page_num">page_num</label> - <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/agentContent" method="POST" name="form21" id="form21"> <div class="form-group"> - <label class="control-label" for="keyword">keyword</label> - <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键词" name="keyword"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="13">提交</button> - <button type="reset" class="btn btn-info" rel="13">重置</button> + <button type="submit" class="btn btn-success send" rel="21">提交</button> + <button type="reset" class="btn btn-info" rel="21">重置</button> </div> </form> </div> @@ -13850,8 +17598,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers13"></pre> - <pre id="response13"></pre> + <pre id="response_headers21"></pre> + <pre id="response21"></pre> </div> </div> </div> @@ -13866,29 +17614,13 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample13"> + <div class="tab-pane" id="sample21"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response13">{ - "code": 1, - "msg": "成功", - "time": "1605954640", - "data": { - "total": 2, //数据总数 - "per_page": 15, - "current_page": 1, - "last_page": 1, - "data": [{ - "id": 2, //职位ID - "job_name": "测试职位2", //职位名称 - "cover": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png", //职位封面图 - "factory_price": "40.00", //工厂工价(元/时) - "subsidy_price": "40.00", //平台补贴(元/时) - "factory_price_total": "40.00", //工价 - "salary": "6000~7000", //月收入 - "people_num": 23 //报名人数 - }] - } + <pre id="sample_response21">{ + 'code':'1', + 'msg':'返回成功', + "data": "<p>入驻代理介绍</p>" //入驻代理介绍 }</pre> </div> </div> @@ -13898,38 +17630,34 @@ </div> </div> </div> + <h2>驻厂</h2> + <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-14"> + <div class="panel-heading" id="heading-8"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion14" href="#collapseOne14"> 职位详情 <span class="text-muted">/api/index/jobInfo</span></a> + <a data-toggle="collapse" data-parent="#accordion8" href="#collapseOne8"> 驻场管理 <span class="text-muted">/api/factory_admin/index</span></a> </h4> </div> - <div id="collapseOne14" class="panel-collapse collapse"> + <div id="collapseOne8" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab14"> - <li class="active"><a href="#info14" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox14" data-toggle="tab">在线测试</a></li> - <li><a href="#sample14" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab8"> + <li class="active"><a href="#info8" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox8" data-toggle="tab">在线测试</a></li> + <li><a href="#sample8" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info14"> + <div class="tab-pane active" id="info8"> <div class="well"> - 职位详情 </div> + 驻场管理 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -13941,36 +17669,52 @@ </thead> <tbody> <tr> - <td>job_id</td> - <td>inter</td> + <td>token</td> + <td>string</td> <td>是</td> - <td>职位ID</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox14"> + <div class="tab-pane" id="sandbox8"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobInfo" method="POST" name="form14" id="form14"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/factory_admin/index" method="POST" name="form8" id="form8"> <div class="form-group"> - <label class="control-label" for="job_id">job_id</label> - <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="14">提交</button> - <button type="reset" class="btn btn-info" rel="14">重置</button> + <button type="submit" class="btn btn-success send" rel="8">提交</button> + <button type="reset" class="btn btn-info" rel="8">重置</button> </div> </form> </div> @@ -13980,8 +17724,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers14"></pre> - <pre id="response14"></pre> + <pre id="response_headers8"></pre> + <pre id="response8"></pre> </div> </div> </div> @@ -13996,26 +17740,24 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample14"> + <div class="tab-pane" id="sample8"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response14">{ + <pre id="sample_response8">{ "code": 1, "msg": "成功", - "time": "1606033046", + "time": "1612272667", "data": { - "id": 1, //职位ID - "job_name": "测试职位", //职位名称 - "images": [{ //图片 - "type": "image", //文件类型:image=图片,video=视频 - "url": "http://www.recruit.top/uploads/20201121/3451459c2469a191a84de24d2e6852b5.png" //文件地址 - }], - "content": "<p>456</p>", //职位详情 - "factory_price": "60.00", //正常工价 - "subsidy_price": "10.00", //平台补贴价格 - "factory_price_total": "70.00", //补贴后工价 - "salary": "5000~6000", // 月收入 - "is_collect": 0 //是否收藏:0=否,1=是 + "user": { //用户信息 + "id": 72, //ID + "nickname": "何先生", //姓名 + "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 + }, + "factory_list": [{ //可管理工程 + "id": 1, //工厂ID + "factory_name": "新美亚电子(深圳)有限公司", //工厂名称 + "factory_shortname": "新美亚电子" //工厂简称 + }] } }</pre> </div> @@ -14027,32 +17769,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-15"> + <div class="panel-heading" id="heading-9"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion15" href="#collapseOne15"> 收藏职位 <span class="text-muted">/api/index/jobCollect</span></a> + <a data-toggle="collapse" data-parent="#accordion9" href="#collapseOne9"> 借支列表 <span class="text-muted">/api/factory_admin/borrowList</span></a> </h4> </div> - <div id="collapseOne15" class="panel-collapse collapse"> + <div id="collapseOne9" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab15"> - <li class="active"><a href="#info15" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox15" data-toggle="tab">在线测试</a></li> - <li><a href="#sample15" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab9"> + <li class="active"><a href="#info9" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox9" data-toggle="tab">在线测试</a></li> + <li><a href="#sample9" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info15"> + <div class="tab-pane active" id="info9"> <div class="well"> - 收藏职位 </div> + 借支列表 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -14069,10 +17828,28 @@ </thead> <tbody> <tr> - <td>job_id</td> + <td>factory_id</td> <td>inter</td> <td>是</td> - <td>职位ID</td> + <td>工厂ID</td> + </tr> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键字</td> </tr> </tbody> </table> @@ -14085,20 +17862,43 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox15"> + <div class="tab-pane" id="sandbox9"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobCollect" method="POST" name="form15" id="form15"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/factory_admin/borrowList" method="POST" name="form9" id="form9"> <div class="form-group"> - <label class="control-label" for="job_id">job_id</label> - <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="15">提交</button> - <button type="reset" class="btn btn-info" rel="15">重置</button> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + </div> + <div class="form-group"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键字" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="9">提交</button> + <button type="reset" class="btn btn-info" rel="9">重置</button> </div> </form> </div> @@ -14108,8 +17908,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers15"></pre> - <pre id="response15"></pre> + <pre id="response_headers9"></pre> + <pre id="response9"></pre> </div> </div> </div> @@ -14124,14 +17924,33 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample15"> + <div class="tab-pane" id="sample9"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response15">{ + <pre id="sample_response9">{ "code": 1, - "msg": "收藏成功/取消收藏成功", - "time": "1606033046", - "data": null + "msg": "成功", + "time": "1612274425", + "data": { + "user_list": { //用户列表 + "total": 1, //数据总数 + "per_page": 15, + "current_page": 1, //当前页 + "last_page": 1, + "data": [{ //数据列表 + "id": 72, //ID + "nickname": "何先生", //姓名 + "mobile": "151*****361", //电话 + "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 + "is_work": "1", //是否在职:0=否,1=是 + "join_time": "2021-02-02", //入职时间 + "work_hours_month": "0.0", //本月总工时 + "user_borrow_id": 1, //借支ID + "user_borrow_status": "0" //借支状态:-1=未申请,0=申请中,1=已通过 + }] + }, + "quit_count": 0 + } }</pre> </div> </div> @@ -14142,32 +17961,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-16"> + <div class="panel-heading" id="heading-10"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion16" href="#collapseOne16"> 职位海报 <span class="text-muted">/api/index/jobPoster</span></a> + <a data-toggle="collapse" data-parent="#accordion10" href="#collapseOne10"> 同意借支 <span class="text-muted">/api/factory_admin/agreeBorrow</span></a> </h4> </div> - <div id="collapseOne16" class="panel-collapse collapse"> + <div id="collapseOne10" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab16"> - <li class="active"><a href="#info16" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox16" data-toggle="tab">在线测试</a></li> - <li><a href="#sample16" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab10"> + <li class="active"><a href="#info10" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox10" data-toggle="tab">在线测试</a></li> + <li><a href="#sample10" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info16"> + <div class="tab-pane active" id="info10"> <div class="well"> - 职位海报 </div> + 同意借支 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -14184,10 +18020,10 @@ </thead> <tbody> <tr> - <td>job_id</td> + <td>user_borrow_id</td> <td>inter</td> <td>是</td> - <td>职位ID</td> + <td>借支ID</td> </tr> </tbody> </table> @@ -14200,20 +18036,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox16"> + <div class="tab-pane" id="sandbox10"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/jobPoster" method="POST" name="form16" id="form16"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/factory_admin/agreeBorrow" method="POST" name="form10" id="form10"> <div class="form-group"> - <label class="control-label" for="job_id">job_id</label> - <input type="inter" class="form-control input-sm" id="job_id" required placeholder="职位ID" name="job_id"> + <label class="control-label" for="user_borrow_id">user_borrow_id</label> + <input type="inter" class="form-control input-sm" id="user_borrow_id" required placeholder="借支ID" name="user_borrow_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="16">提交</button> - <button type="reset" class="btn btn-info" rel="16">重置</button> + <button type="submit" class="btn btn-success send" rel="10">提交</button> + <button type="reset" class="btn btn-info" rel="10">重置</button> </div> </form> </div> @@ -14223,8 +18070,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers16"></pre> - <pre id="response16"></pre> + <pre id="response_headers10"></pre> + <pre id="response10"></pre> </div> </div> </div> @@ -14239,15 +18086,14 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample16"> + <div class="tab-pane" id="sample10"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response16">{ - 'code':'1', - 'msg':'返回成功', - "data": { - "url": "http://www.recruit.top/uploads/job/1.png", //职位海报地址 - } + <pre id="sample_response10">{ + "code": 1, + "msg": "成功", + "time": "1606137472", + "data": null }</pre> </div> </div> @@ -14258,38 +18104,90 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-17"> + <div class="panel-heading" id="heading-11"> <h4 class="panel-title"> <span class="label label-primary">POST</span> - <a data-toggle="collapse" data-parent="#accordion17" href="#collapseOne17"> 入驻代理 <span class="text-muted">/api/index/agentContent</span></a> + <a data-toggle="collapse" data-parent="#accordion11" href="#collapseOne11"> 离职详情 <span class="text-muted">/api/factory_admin/quitList</span></a> </h4> </div> - <div id="collapseOne17" class="panel-collapse collapse"> + <div id="collapseOne11" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab17"> - <li class="active"><a href="#info17" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox17" data-toggle="tab">在线测试</a></li> - <li><a href="#sample17" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab11"> + <li class="active"><a href="#info11" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox11" data-toggle="tab">在线测试</a></li> + <li><a href="#sample11" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info17"> + <div class="tab-pane active" id="info11"> <div class="well"> - 入驻代理 </div> + 离职详情 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>factory_id</td> + <td>inter</td> + <td>是</td> + <td>工厂ID</td> + </tr> + <tr> + <td>page</td> + <td>inter</td> + <td>否</td> + <td>当前页(默认1</td> + </tr> + <tr> + <td>page_num</td> + <td>inter</td> + <td>否</td> + <td>每页显示数据个数(默认10)</td> + </tr> + <tr> + <td>keyword</td> + <td>string</td> + <td>否</td> + <td>搜索关键字</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -14299,19 +18197,43 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox17"> + <div class="tab-pane" id="sandbox11"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/index/agentContent" method="POST" name="form17" id="form17"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/factory_admin/quitList" method="POST" name="form11" id="form11"> <div class="form-group"> - 无 + <label class="control-label" for="factory_id">factory_id</label> + <input type="inter" class="form-control input-sm" id="factory_id" required placeholder="工厂ID" name="factory_id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="17">提交</button> - <button type="reset" class="btn btn-info" rel="17">重置</button> + <label class="control-label" for="page">page</label> + <input type="inter" class="form-control input-sm" id="page" placeholder="当前页(默认1" name="page"> + </div> + <div class="form-group"> + <label class="control-label" for="page_num">page_num</label> + <input type="inter" class="form-control input-sm" id="page_num" placeholder="每页显示数据个数(默认10)" name="page_num"> + </div> + <div class="form-group"> + <label class="control-label" for="keyword">keyword</label> + <input type="string" class="form-control input-sm" id="keyword" placeholder="搜索关键字" name="keyword"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="11">提交</button> + <button type="reset" class="btn btn-info" rel="11">重置</button> </div> </form> </div> @@ -14321,8 +18243,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers17"></pre> - <pre id="response17"></pre> + <pre id="response_headers11"></pre> + <pre id="response11"></pre> </div> </div> </div> @@ -14337,13 +18259,28 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample17"> + <div class="tab-pane" id="sample11"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response17">{ - 'code':'1', - 'msg':'返回成功', - "data": "<p>入驻代理介绍</p>" //入驻代理介绍 + <pre id="sample_response11">{ + "code": 1, + "msg": "成功", + "time": "1612273417", + "data": { + "total": 1, //数据总数 + "per_page": 15, + "current_page": 1, //当前页 + "last_page": 1, + "data": [{ //数据 + "id": 72, //用户ID + "nickname": "何先生", //名称 + "mobile": "151*****361", //电话 + "avatar": "http://recruit.t.brotop.cn//uploads/20210131/9f0c3cad5f738a37406887aad524babd.jpg", //头像 + "is_work": "0", //是否入职:0=否,1=是 + "join_time": "2021-02-02", //入职时间 + "quit_time": "2021-02-02" //离职时间 + }] + } }</pre> </div> </div> @@ -14605,31 +18542,31 @@ </div> </div> </div> - <h2>验证接口</h2> + <h2>三开接口</h2> <hr> <div class="panel panel-default"> - <div class="panel-heading" id="heading-109"> + <div class="panel-heading" id="heading-137"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion109" href="#collapseOne109"> 检测邮箱 <span class="text-muted">/api/validate/check_email_available</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion137" href="#collapseOne137"> @ApiTitle 视频教程 <span class="text-muted">/api/video/video</span></a> </h4> </div> - <div id="collapseOne109" class="panel-collapse collapse"> + <div id="collapseOne137" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab109"> - <li class="active"><a href="#info109" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox109" data-toggle="tab">在线测试</a></li> - <li><a href="#sample109" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab137"> + <li class="active"><a href="#info137" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox137" data-toggle="tab">在线测试</a></li> + <li><a href="#sample137" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info109"> + <div class="tab-pane active" id="info137"> <div class="well"> - 检测邮箱 </div> + @ApiTitle 视频教程 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -14639,30 +18576,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> - </tr> - <tr> - <td>id</td> - <td>string</td> - <td>是</td> - <td>排除会员ID</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -14672,24 +18586,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox109"> + <div class="tab-pane" id="sandbox137"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_email_available" method="get" name="form109" id="form109"> - <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/video" method="POST" name="form137" id="form137"> <div class="form-group"> - <label class="control-label" for="id">id</label> - <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="109">提交</button> - <button type="reset" class="btn btn-info" rel="109">重置</button> + <button type="submit" class="btn btn-success send" rel="137">提交</button> + <button type="reset" class="btn btn-info" rel="137">重置</button> </div> </form> </div> @@ -14699,8 +18608,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers109"></pre> - <pre id="response109"></pre> + <pre id="response_headers137"></pre> + <pre id="response137"></pre> </div> </div> </div> @@ -14715,10 +18624,20 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample109"> + <div class="tab-pane" id="sample137"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response109">无</pre> + <pre id="sample_response137">{ + "code": 1, + "msg": "成功", + "time": "1619747595", + "data": { + "id": 1, //视频id + "title": "教程", //标题 + "video": "http://www.recruit3.net/uploads/20210429/ea261362d353244651a710d8775f2511.mp4", //视频路径 + "content": "<p>教程教程<br/></p>" //文本内容 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -14728,28 +18647,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-110"> + <div class="panel-heading" id="heading-138"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion110" href="#collapseOne110"> 检测用户名 <span class="text-muted">/api/validate/check_username_available</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion138" href="#collapseOne138"> @ApiTitle 联系客服文本 <span class="text-muted">/api/video/service</span></a> </h4> </div> - <div id="collapseOne110" class="panel-collapse collapse"> + <div id="collapseOne138" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab110"> - <li class="active"><a href="#info110" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox110" data-toggle="tab">在线测试</a></li> - <li><a href="#sample110" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab138"> + <li class="active"><a href="#info138" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox138" data-toggle="tab">在线测试</a></li> + <li><a href="#sample138" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info110"> + <div class="tab-pane active" id="info138"> <div class="well"> - 检测用户名 </div> + @ApiTitle 联系客服文本 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -14759,30 +18678,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>username</td> - <td>string</td> - <td>是</td> - <td>用户名</td> - </tr> - <tr> - <td>id</td> - <td>string</td> - <td>是</td> - <td>排除会员ID</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -14792,24 +18688,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox110"> + <div class="tab-pane" id="sandbox138"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_username_available" method="get" name="form110" id="form110"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/service" method="POST" name="form138" id="form138"> <div class="form-group"> - <label class="control-label" for="username">username</label> - <input type="string" class="form-control input-sm" id="username" required placeholder="用户名" name="username"> - </div> - <div class="form-group"> - <label class="control-label" for="id">id</label> - <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="110">提交</button> - <button type="reset" class="btn btn-info" rel="110">重置</button> + <button type="submit" class="btn btn-success send" rel="138">提交</button> + <button type="reset" class="btn btn-info" rel="138">重置</button> </div> </form> </div> @@ -14819,8 +18710,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers110"></pre> - <pre id="response110"></pre> + <pre id="response_headers138"></pre> + <pre id="response138"></pre> </div> </div> </div> @@ -14835,10 +18726,18 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample110"> + <div class="tab-pane" id="sample138"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response110">无</pre> + <pre id="sample_response138">{ + "code": 1, + "msg": "成功", + "time": "1619748418", + "data": { + "id": 1, + "content": "请联系客服" //文本 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -14848,32 +18747,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-111"> + <div class="panel-heading" id="heading-139"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion111" href="#collapseOne111"> 检测昵称 <span class="text-muted">/api/validate/check_nickname_available</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion139" href="#collapseOne139"> @ApiTitle 法律援助 <span class="text-muted">/api/video/question</span></a> </h4> </div> - <div id="collapseOne111" class="panel-collapse collapse"> + <div id="collapseOne139" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab111"> - <li class="active"><a href="#info111" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox111" data-toggle="tab">在线测试</a></li> - <li><a href="#sample111" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab139"> + <li class="active"><a href="#info139" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox139" data-toggle="tab">在线测试</a></li> + <li><a href="#sample139" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info111"> + <div class="tab-pane active" id="info139"> <div class="well"> - 检测昵称 </div> + @ApiTitle 法律援助 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -14890,16 +18806,16 @@ </thead> <tbody> <tr> - <td>nickname</td> - <td>string</td> + <td>type</td> + <td>int</td> <td>是</td> - <td>昵称</td> + <td>类型:1=问题列表,2=进入详情</td> </tr> <tr> <td>id</td> - <td>string</td> + <td>int</td> <td>是</td> - <td>排除会员ID</td> + <td>问题id</td> </tr> </tbody> </table> @@ -14912,24 +18828,35 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox111"> + <div class="tab-pane" id="sandbox139"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_nickname_available" method="get" name="form111" id="form111"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/question" method="POST" name="form139" id="form139"> <div class="form-group"> - <label class="control-label" for="nickname">nickname</label> - <input type="string" class="form-control input-sm" id="nickname" required placeholder="昵称" name="nickname"> + <label class="control-label" for="type">type</label> + <input type="int" class="form-control input-sm" id="type" required placeholder="类型:1=问题列表,2=进入详情" name="type"> </div> <div class="form-group"> <label class="control-label" for="id">id</label> - <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> + <input type="int" class="form-control input-sm" id="id" required placeholder="问题id" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="111">提交</button> - <button type="reset" class="btn btn-info" rel="111">重置</button> + <button type="submit" class="btn btn-success send" rel="139">提交</button> + <button type="reset" class="btn btn-info" rel="139">重置</button> </div> </form> </div> @@ -14939,8 +18866,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers111"></pre> - <pre id="response111"></pre> + <pre id="response_headers139"></pre> + <pre id="response139"></pre> </div> </div> </div> @@ -14955,10 +18882,32 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample111"> + <div class="tab-pane" id="sample139"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response111">无</pre> + <pre id="sample_response139">{ + "code": 1, + "msg": "成功", + "time": "1619749791", + //问题列表 + "data": [ + { + "id": 1, //问题id + "title": "想入职如何入职?" //问题 + } + ] + } + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1619749877", + //问题详情 + "data": { + "id": 1, + "title": "想入职如何入职?", //问题 + "content": "详细情况请问客服" //详情 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -14968,32 +18917,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-112"> + <div class="panel-heading" id="heading-140"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion112" href="#collapseOne112"> 检测手机 <span class="text-muted">/api/validate/check_mobile_available</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion140" href="#collapseOne140"> @ApiTitle 合作 <span class="text-muted">/api/video/partner</span></a> </h4> </div> - <div id="collapseOne112" class="panel-collapse collapse"> + <div id="collapseOne140" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab112"> - <li class="active"><a href="#info112" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox112" data-toggle="tab">在线测试</a></li> - <li><a href="#sample112" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab140"> + <li class="active"><a href="#info140" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox140" data-toggle="tab">在线测试</a></li> + <li><a href="#sample140" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info112"> + <div class="tab-pane active" id="info140"> <div class="well"> - 检测手机 </div> + @ApiTitle 合作 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -15010,16 +18976,16 @@ </thead> <tbody> <tr> - <td>mobile</td> - <td>string</td> + <td>type</td> + <td>int</td> <td>是</td> - <td>手机号</td> + <td>类型:1=合作列表,2=进入详情</td> </tr> <tr> <td>id</td> - <td>string</td> + <td>int</td> <td>是</td> - <td>排除会员ID</td> + <td>合作id</td> </tr> </tbody> </table> @@ -15032,24 +18998,35 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox112"> + <div class="tab-pane" id="sandbox140"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_mobile_available" method="get" name="form112" id="form112"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/partner" method="POST" name="form140" id="form140"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="type">type</label> + <input type="int" class="form-control input-sm" id="type" required placeholder="类型:1=合作列表,2=进入详情" name="type"> </div> <div class="form-group"> <label class="control-label" for="id">id</label> - <input type="string" class="form-control input-sm" id="id" required placeholder="排除会员ID" name="id"> + <input type="int" class="form-control input-sm" id="id" required placeholder="合作id" name="id"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="112">提交</button> - <button type="reset" class="btn btn-info" rel="112">重置</button> + <button type="submit" class="btn btn-success send" rel="140">提交</button> + <button type="reset" class="btn btn-info" rel="140">重置</button> </div> </form> </div> @@ -15059,8 +19036,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers112"></pre> - <pre id="response112"></pre> + <pre id="response_headers140"></pre> + <pre id="response140"></pre> </div> </div> </div> @@ -15075,10 +19052,33 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample112"> + <div class="tab-pane" id="sample140"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response112">无</pre> + <pre id="sample_response140">{ + "code": 1, + "msg": "成功", + "time": "1619750787", + //合作列表 + "data": [ + { + "id": 1, //合作id + "title": "合作者", //标题 + "image": "合作者" //图片 + } + ] + } + * @ApiReturn ({ + "code": 1, + "msg": "成功", + "time": "1619750879", + //详情 + "data": { + "id": 1, + "title": "合作者", //标题 + "content": "<p>合作合作合作合作合作合作合作合作合作合作合作合作合作</p>" //内容 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -15088,32 +19088,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-113"> + <div class="panel-heading" id="heading-141"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion113" href="#collapseOne113"> 检测手机 <span class="text-muted">/api/validate/check_mobile_exist</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion141" href="#collapseOne141"> @ApiTitle 通知记录 <span class="text-muted">/api/video/record</span></a> </h4> </div> - <div id="collapseOne113" class="panel-collapse collapse"> + <div id="collapseOne141" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab113"> - <li class="active"><a href="#info113" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox113" data-toggle="tab">在线测试</a></li> - <li><a href="#sample113" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab141"> + <li class="active"><a href="#info141" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox141" data-toggle="tab">在线测试</a></li> + <li><a href="#sample141" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info113"> + <div class="tab-pane active" id="info141"> <div class="well"> - 检测手机 </div> + @ApiTitle 通知记录 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -15130,10 +19147,10 @@ </thead> <tbody> <tr> - <td>mobile</td> + <td>status</td> <td>string</td> <td>是</td> - <td>手机号</td> + <td>类型:0未入职,1已入职</td> </tr> </tbody> </table> @@ -15146,20 +19163,31 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox113"> + <div class="tab-pane" id="sandbox141"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_mobile_exist" method="get" name="form113" id="form113"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/record" method="POST" name="form141" id="form141"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="status">status</label> + <input type="string" class="form-control input-sm" id="status" required placeholder="类型:0未入职,1已入职" name="status"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="113">提交</button> - <button type="reset" class="btn btn-info" rel="113">重置</button> + <button type="submit" class="btn btn-success send" rel="141">提交</button> + <button type="reset" class="btn btn-info" rel="141">重置</button> </div> </form> </div> @@ -15169,8 +19197,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers113"></pre> - <pre id="response113"></pre> + <pre id="response_headers141"></pre> + <pre id="response141"></pre> </div> </div> </div> @@ -15185,10 +19213,22 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample113"> + <div class="tab-pane" id="sample141"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response113">无</pre> + <pre id="sample_response141">{ + "code": 1, + "msg": "成功", + "time": "1619761387", + "data": [ + { + "id": 2, //id + "content": "光和热刚放假呢", //通知内容 + "createtime": "2021-04-29 16:47:35", //时间 + "data": "0" //状态:0=未读,1=已读 + } + ] + }</pre> </div> </div> </div><!-- #sample --> @@ -15198,37 +19238,31 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-114"> + <div class="panel-heading" id="heading-142"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion114" href="#collapseOne114"> 检测邮箱 <span class="text-muted">/api/validate/check_email_exist</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion142" href="#collapseOne142"> @ApiTitle 申请提现 <span class="text-muted">/api/video/deposit</span></a> </h4> </div> - <div id="collapseOne114" class="panel-collapse collapse"> + <div id="collapseOne142" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab114"> - <li class="active"><a href="#info114" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox114" data-toggle="tab">在线测试</a></li> - <li><a href="#sample114" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab142"> + <li class="active"><a href="#info142" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox142" data-toggle="tab">在线测试</a></li> + <li><a href="#sample142" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info114"> + <div class="tab-pane active" id="info142"> <div class="well"> - 检测邮箱 </div> + @ApiTitle 申请提现 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"><strong>参数</strong></div> - <div class="panel-body"> <table class="table table-hover"> <thead> <tr> @@ -15240,36 +19274,52 @@ </thead> <tbody> <tr> - <td>mobile</td> + <td>token</td> <td>string</td> <td>是</td> - <td>邮箱</td> + <td>请求的Token</td> </tr> </tbody> </table> </div> </div> <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>正文</strong></div> <div class="panel-body"> 无 </div> </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox114"> + <div class="tab-pane" id="sandbox142"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_email_exist" method="get" name="form114" id="form114"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/deposit" method="POST" name="form142" id="form142"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="邮箱" name="mobile"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="114">提交</button> - <button type="reset" class="btn btn-info" rel="114">重置</button> + <button type="submit" class="btn btn-success send" rel="142">提交</button> + <button type="reset" class="btn btn-info" rel="142">重置</button> </div> </form> </div> @@ -15279,8 +19329,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers114"></pre> - <pre id="response114"></pre> + <pre id="response_headers142"></pre> + <pre id="response142"></pre> </div> </div> </div> @@ -15295,10 +19345,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample114"> + <div class="tab-pane" id="sample142"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response114">无</pre> + <pre id="sample_response142">无</pre> </div> </div> </div><!-- #sample --> @@ -15308,32 +19358,49 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-115"> + <div class="panel-heading" id="heading-143"> <h4 class="panel-title"> - <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion115" href="#collapseOne115"> 检测手机验证码 <span class="text-muted">/api/validate/check_sms_correct</span></a> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion143" href="#collapseOne143"> @ApiTitle 报名 <span class="text-muted">/api/video/apply</span></a> </h4> </div> - <div id="collapseOne115" class="panel-collapse collapse"> + <div id="collapseOne143" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab115"> - <li class="active"><a href="#info115" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox115" data-toggle="tab">在线测试</a></li> - <li><a href="#sample115" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab143"> + <li class="active"><a href="#info143" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox143" data-toggle="tab">在线测试</a></li> + <li><a href="#sample143" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info115"> + <div class="tab-pane active" id="info143"> <div class="well"> - 检测手机验证码 </div> + @ApiTitle 报名 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> - 无 + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> </div> </div> <div class="panel panel-default"> @@ -15350,22 +19417,22 @@ </thead> <tbody> <tr> - <td>mobile</td> + <td>job_id</td> <td>string</td> <td>是</td> - <td>手机号</td> + <td>职位id</td> </tr> <tr> - <td>captcha</td> + <td>name</td> <td>string</td> <td>是</td> - <td>验证码</td> + <td>姓名</td> </tr> <tr> - <td>event</td> + <td>phone</td> <td>string</td> <td>是</td> - <td>事件</td> + <td>手机号</td> </tr> </tbody> </table> @@ -15378,28 +19445,39 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox115"> + <div class="tab-pane" id="sandbox143"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_sms_correct" method="get" name="form115" id="form115"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/apply" method="POST" name="form143" id="form143"> <div class="form-group"> - <label class="control-label" for="mobile">mobile</label> - <input type="string" class="form-control input-sm" id="mobile" required placeholder="手机号" name="mobile"> + <label class="control-label" for="job_id">job_id</label> + <input type="string" class="form-control input-sm" id="job_id" required placeholder="职位id" name="job_id"> </div> <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> + <label class="control-label" for="name">name</label> + <input type="string" class="form-control input-sm" id="name" required placeholder="姓名" name="name"> </div> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + <label class="control-label" for="phone">phone</label> + <input type="string" class="form-control input-sm" id="phone" required placeholder="手机号" name="phone"> </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="115">提交</button> - <button type="reset" class="btn btn-info" rel="115">重置</button> + <button type="submit" class="btn btn-success send" rel="143">提交</button> + <button type="reset" class="btn btn-info" rel="143">重置</button> </div> </form> </div> @@ -15409,8 +19487,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers115"></pre> - <pre id="response115"></pre> + <pre id="response_headers143"></pre> + <pre id="response143"></pre> </div> </div> </div> @@ -15425,10 +19503,10 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample115"> + <div class="tab-pane" id="sample143"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response115">无</pre> + <pre id="sample_response143">无</pre> </div> </div> </div><!-- #sample --> @@ -15438,28 +19516,28 @@ </div> </div> <div class="panel panel-default"> - <div class="panel-heading" id="heading-116"> + <div class="panel-heading" id="heading-144"> <h4 class="panel-title"> <span class="label label-success">GET</span> - <a data-toggle="collapse" data-parent="#accordion116" href="#collapseOne116"> 检测邮箱验证码 <span class="text-muted">/api/validate/check_ems_correct</span></a> + <a data-toggle="collapse" data-parent="#accordion144" href="#collapseOne144"> @ApiTitle 公众号链接 <span class="text-muted">/api/video/link</span></a> </h4> </div> - <div id="collapseOne116" class="panel-collapse collapse"> + <div id="collapseOne144" class="panel-collapse collapse"> <div class="panel-body"> <!-- Nav tabs --> - <ul class="nav nav-tabs" id="doctab116"> - <li class="active"><a href="#info116" data-toggle="tab">基础信息</a></li> - <li><a href="#sandbox116" data-toggle="tab">在线测试</a></li> - <li><a href="#sample116" data-toggle="tab">返回示例</a></li> + <ul class="nav nav-tabs" id="doctab144"> + <li class="active"><a href="#info144" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox144" data-toggle="tab">在线测试</a></li> + <li><a href="#sample144" data-toggle="tab">返回示例</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div class="tab-pane active" id="info116"> + <div class="tab-pane active" id="info144"> <div class="well"> - 检测邮箱验证码 </div> + @ApiTitle 公众号链接 </div> <div class="panel panel-default"> <div class="panel-heading"><strong>Headers</strong></div> <div class="panel-body"> @@ -15469,36 +19547,7 @@ <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <table class="table table-hover"> - <thead> - <tr> - <th>名称</th> - <th>类型</th> - <th>必选</th> - <th>描述</th> - </tr> - </thead> - <tbody> - <tr> - <td>email</td> - <td>string</td> - <td>是</td> - <td>邮箱</td> - </tr> - <tr> - <td>captcha</td> - <td>string</td> - <td>是</td> - <td>验证码</td> - </tr> - <tr> - <td>event</td> - <td>string</td> - <td>是</td> - <td>事件</td> - </tr> - </tbody> - </table> + 无 </div> </div> <div class="panel panel-default"> @@ -15508,28 +19557,19 @@ </div> </div><!-- #info --> - <div class="tab-pane" id="sandbox116"> + <div class="tab-pane" id="sandbox144"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"><strong>参数</strong></div> <div class="panel-body"> - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/validate/check_ems_correct" method="get" name="form116" id="form116"> - <div class="form-group"> - <label class="control-label" for="email">email</label> - <input type="string" class="form-control input-sm" id="email" required placeholder="邮箱" name="email"> - </div> - <div class="form-group"> - <label class="control-label" for="captcha">captcha</label> - <input type="string" class="form-control input-sm" id="captcha" required placeholder="验证码" name="captcha"> - </div> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/video/link" method="get" name="form144" id="form144"> <div class="form-group"> - <label class="control-label" for="event">event</label> - <input type="string" class="form-control input-sm" id="event" required placeholder="事件" name="event"> + 无 </div> <div class="form-group"> - <button type="submit" class="btn btn-success send" rel="116">提交</button> - <button type="reset" class="btn btn-info" rel="116">重置</button> + <button type="submit" class="btn btn-success send" rel="144">提交</button> + <button type="reset" class="btn btn-info" rel="144">重置</button> </div> </form> </div> @@ -15539,8 +19579,8 @@ <div class="panel-body"> <div class="row"> <div class="col-md-12" style="overflow-x:auto"> - <pre id="response_headers116"></pre> - <pre id="response116"></pre> + <pre id="response_headers144"></pre> + <pre id="response144"></pre> </div> </div> </div> @@ -15555,10 +19595,18 @@ </div> </div><!-- #sandbox --> - <div class="tab-pane" id="sample116"> + <div class="tab-pane" id="sample144"> <div class="row"> <div class="col-md-12"> - <pre id="sample_response116">无</pre> + <pre id="sample_response144">{ + "code": 1, + "msg": "成功", + "time": "1621308817", + "data": { + "link": "https://mp.weixin.qq.com/s?__biz=MzkwNTIzOTMyMA==&mid=100000003&idx=1&sn=2c2f7a3d14016a5cab1bc926f9827789&chksm=40fb8f74778c06625363df68550c8a6e3b7b77c3a37a9acb0d45ca67473d1b3bfbe019946fe7&mpshare=1&scene=1&srcid=0517B23dia4DeM9arotlNkYL&sharer_sharetime=1621246415044&sharer_shareid=0222b3ff489427a506473cee3e8233b9#rd", //链接 + "guan": "关注公众号" //关注公众号 + } + }</pre> </div> </div> </div><!-- #sample --> @@ -15573,7 +19621,7 @@ <div class="row mt0 footer"> <div class="col-md-6" align="left"> - Generated on 2021-04-15 19:45:55 </div> + Generated on 2021-05-19 13:58:47 </div> <div class="col-md-6" align="right"> <a href="./" target="_blank">My Website</a> </div> diff --git a/public/assets/addons/summernote/css/summernote.css b/public/assets/addons/summernote/css/summernote.css deleted file mode 100644 index d09b45a..0000000 --- a/public/assets/addons/summernote/css/summernote.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("../font/summernote.eot?dbafe969167589eda84514394d126413");src:url("../font/summernote.eot?#iefix") format("embedded-opentype"),url("../font/summernote.woff?dbafe969167589eda84514394d126413") format("woff"),url("../font/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:"\f101"}.note-icon-align-indent:before{content:"\f102"}.note-icon-align-justify:before{content:"\f103"}.note-icon-align-left:before{content:"\f104"}.note-icon-align-outdent:before{content:"\f105"}.note-icon-align-right:before{content:"\f106"}.note-icon-align:before{content:"\f107"}.note-icon-arrow-circle-down:before{content:"\f108"}.note-icon-arrow-circle-left:before{content:"\f109"}.note-icon-arrow-circle-right:before{content:"\f10a"}.note-icon-arrow-circle-up:before{content:"\f10b"}.note-icon-arrows-alt:before{content:"\f10c"}.note-icon-arrows-h:before{content:"\f10d"}.note-icon-arrows-v:before{content:"\f10e"}.note-icon-bold:before{content:"\f10f"}.note-icon-caret:before{content:"\f110"}.note-icon-chain-broken:before{content:"\f111"}.note-icon-circle:before{content:"\f112"}.note-icon-close:before{content:"\f113"}.note-icon-code:before{content:"\f114"}.note-icon-col-after:before{content:"\f115"}.note-icon-col-before:before{content:"\f116"}.note-icon-col-remove:before{content:"\f117"}.note-icon-eraser:before{content:"\f118"}.note-icon-font:before{content:"\f119"}.note-icon-frame:before{content:"\f11a"}.note-icon-italic:before{content:"\f11b"}.note-icon-link:before{content:"\f11c"}.note-icon-magic:before{content:"\f11d"}.note-icon-menu-check:before{content:"\f11e"}.note-icon-minus:before{content:"\f11f"}.note-icon-orderedlist:before{content:"\f120"}.note-icon-pencil:before{content:"\f121"}.note-icon-picture:before{content:"\f122"}.note-icon-question:before{content:"\f123"}.note-icon-redo:before{content:"\f124"}.note-icon-row-above:before{content:"\f125"}.note-icon-row-below:before{content:"\f126"}.note-icon-row-remove:before{content:"\f127"}.note-icon-special-character:before{content:"\f128"}.note-icon-square:before{content:"\f129"}.note-icon-strikethrough:before{content:"\f12a"}.note-icon-subscript:before{content:"\f12b"}.note-icon-summernote:before{content:"\f12c"}.note-icon-superscript:before{content:"\f12d"}.note-icon-table:before{content:"\f12e"}.note-icon-text-height:before{content:"\f12f"}.note-icon-trash:before{content:"\f130"}.note-icon-underline:before{content:"\f131"}.note-icon-undo:before{content:"\f132"}.note-icon-unorderedlist:before{content:"\f133"}.note-icon-video:before{content:"\f134"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area img.note-float-left{margin-right:10px}.note-editor .note-editing-area img.note-float-right{margin-left:10px}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right{float:right!important}.note-editor.note-frame .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert{padding:7px 10px 2px 10px;margin:-7px 0 0 0;color:#000;background-color:#f5f5f5;border-radius:0}.note-editor.note-frame .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success{color:#3c763d!important;background-color:#dff0d8!important}.note-editor.note-frame .note-status-output .alert-info{color:#31708f!important;background-color:#d9edf7!important}.note-editor.note-frame .note-status-output .alert-warning{color:#8a6d3b!important;background-color:#fcf8e3!important}.note-editor.note-frame .note-status-output .alert-danger{color:#a94442!important;background-color:#f2dede!important}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-toolbar{position:relative;z-index:99}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.panel-heading.note-toolbar .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.panel-heading.note-toolbar .note-style .dropdown-style pre{padding:5px 10px;margin:0}.note-popover .popover-content .note-style .dropdown-style h1,.panel-heading.note-toolbar .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.panel-heading.note-toolbar .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.panel-heading.note-toolbar .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.panel-heading.note-toolbar .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.panel-heading.note-toolbar .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.panel-heading.note-toolbar .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.panel-heading.note-toolbar .note-style .dropdown-style p{padding:0;margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-menu .note-palette,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .popover-content .note-color .dropdown-menu .note-palette:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:#fff;border:1px solid #000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0} \ No newline at end of file diff --git a/public/assets/addons/summernote/font/summernote.eot b/public/assets/addons/summernote/font/summernote.eot deleted file mode 100644 index 4f5d02c..0000000 Binary files a/public/assets/addons/summernote/font/summernote.eot and /dev/null differ diff --git a/public/assets/addons/summernote/font/summernote.ttf b/public/assets/addons/summernote/font/summernote.ttf deleted file mode 100644 index a5976db..0000000 Binary files a/public/assets/addons/summernote/font/summernote.ttf and /dev/null differ diff --git a/public/assets/addons/summernote/font/summernote.woff b/public/assets/addons/summernote/font/summernote.woff deleted file mode 100644 index 6c6dfaa..0000000 Binary files a/public/assets/addons/summernote/font/summernote.woff and /dev/null differ diff --git a/public/assets/addons/summernote/js/summernote.js b/public/assets/addons/summernote/js/summernote.js deleted file mode 100644 index 6c198d7..0000000 --- a/public/assets/addons/summernote/js/summernote.js +++ /dev/null @@ -1,7315 +0,0 @@ -/** - * Super simple wysiwyg editor v0.8.10 - * https://summernote.org - * - * Copyright 2013- Alan Hong. and other contributors - * summernote may be freely distributed under the MIT license. - * - * Date: 2018-02-20T00:34Z - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : - typeof define === 'function' && define.amd ? define(['jquery'], factory) : - (factory(global.jQuery)); -}(this, (function ($$1) { 'use strict'; - -$$1 = $$1 && $$1.hasOwnProperty('default') ? $$1['default'] : $$1; - -var Renderer = /** @class */ (function () { - function Renderer(markup, children, options, callback) { - this.markup = markup; - this.children = children; - this.options = options; - this.callback = callback; - } - Renderer.prototype.render = function ($parent) { - var $node = $$1(this.markup); - if (this.options && this.options.contents) { - $node.html(this.options.contents); - } - if (this.options && this.options.className) { - $node.addClass(this.options.className); - } - if (this.options && this.options.data) { - $$1.each(this.options.data, function (k, v) { - $node.attr('data-' + k, v); - }); - } - if (this.options && this.options.click) { - $node.on('click', this.options.click); - } - if (this.children) { - var $container_1 = $node.find('.note-children-container'); - this.children.forEach(function (child) { - child.render($container_1.length ? $container_1 : $node); - }); - } - if (this.callback) { - this.callback($node, this.options); - } - if (this.options && this.options.callback) { - this.options.callback($node); - } - if ($parent) { - $parent.append($node); - } - return $node; - }; - return Renderer; -}()); -var renderer = { - create: function (markup, callback) { - return function () { - var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; - var children = $$1.isArray(arguments[0]) ? arguments[0] : []; - if (options && options.children) { - children = options.children; - } - return new Renderer(markup, children, options, callback); - }; - } -}; - -var editor = renderer.create('<div class="note-editor note-frame panel"/>'); -var toolbar = renderer.create('<div class="note-toolbar-wrapper panel-default"><div class="note-toolbar panel-heading" role="toolbar"></div></div>'); -var editingArea = renderer.create('<div class="note-editing-area"/>'); -var codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); -var editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'); -var statusbar = renderer.create([ - '<output class="note-status-output" aria-live="polite"/>', - '<div class="note-statusbar" role="status">', - ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', - ' <div class="note-icon-bar"/>', - ' <div class="note-icon-bar"/>', - ' <div class="note-icon-bar"/>', - ' </div>', - '</div>' -].join('')); -var airEditor = renderer.create('<div class="note-editor"/>'); -var airEditable = renderer.create([ - ' <output class="note-status-output" aria-live="polite"/>', - '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' -].join('')); -var buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); -var dropdown = renderer.create('<ul class="dropdown-menu" role="list">', function ($node, options) { - var markup = $$1.isArray(options.items) ? options.items.map(function (item) { - var value = (typeof item === 'string') ? item : (item.value || ''); - var content = options.template ? options.template(item) : item; - var option = (typeof item === 'object') ? item.option : undefined; - var dataValue = 'data-value="' + value + '"'; - var dataOption = (option !== undefined) ? ' data-option="' + option + '"' : ''; - return '<li role="listitem" aria-label="' + item + '"><a href="#" ' + (dataValue + dataOption) + '>' + content + '</a></li>'; - }).join('') : options.items; - $node.html(markup).attr({ 'aria-label': options.title }); -}); -var dropdownButtonContents = function (contents, options) { - return contents + ' ' + icon(options.icons.caret, 'span'); -}; -var dropdownCheck = renderer.create('<ul class="dropdown-menu note-check" role="list">', function ($node, options) { - var markup = $$1.isArray(options.items) ? options.items.map(function (item) { - var value = (typeof item === 'string') ? item : (item.value || ''); - var content = options.template ? options.template(item) : item; - return '<li role="listitem" aria-label="' + item + '"><a href="#" data-value="' + value + '">' + icon(options.checkClassName) + ' ' + content + '</a></li>'; - }).join('') : options.items; - $node.html(markup).attr({ 'aria-label': options.title }); -}); -var palette = renderer.create('<div class="note-color-palette"/>', function ($node, options) { - var contents = []; - for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) { - var eventName = options.eventName; - var colors = options.colors[row]; - var colorsName = options.colorsName[row]; - var buttons = []; - for (var col = 0, colSize = colors.length; col < colSize; col++) { - var color = colors[col]; - var colorName = colorsName[col]; - buttons.push([ - '<button type="button" class="note-color-btn"', - 'style="background-color:', color, '" ', - 'data-event="', eventName, '" ', - 'data-value="', color, '" ', - 'title="', colorName, '" ', - 'aria-label="', colorName, '" ', - 'data-toggle="button" tabindex="-1"></button>' - ].join('')); - } - contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); - } - $node.html(contents.join('')); - if (options.tooltip) { - $node.find('.note-color-btn').tooltip({ - container: options.container, - trigger: 'hover', - placement: 'bottom' - }); - } -}); -var dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function ($node, options) { - if (options.fade) { - $node.addClass('fade'); - } - $node.attr({ - 'aria-label': options.title - }); - $node.html([ - '<div class="modal-dialog">', - ' <div class="modal-content">', - (options.title - ? ' <div class="modal-header">' + - ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>' + - ' <h4 class="modal-title">' + options.title + '</h4>' + - ' </div>' : ''), - ' <div class="modal-body">' + options.body + '</div>', - (options.footer - ? ' <div class="modal-footer">' + options.footer + '</div>' : ''), - ' </div>', - '</div>' - ].join('')); -}); -var popover = renderer.create([ - '<div class="note-popover popover in">', - ' <div class="arrow"/>', - ' <div class="popover-content note-children-container"/>', - '</div>' -].join(''), function ($node, options) { - var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; - $node.addClass(direction); - if (options.hideArrow) { - $node.find('.arrow').hide(); - } -}); -var checkbox = renderer.create('<div class="checkbox"></div>', function ($node, options) { - $node.html([ - ' <label' + (options.id ? ' for="' + options.id + '"' : '') + '>', - ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''), - (options.checked ? ' checked' : ''), - ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', - (options.text ? options.text : ''), - '</label>' - ].join('')); -}); -var icon = function (iconClassName, tagName) { - tagName = tagName || 'i'; - return '<' + tagName + ' class="' + iconClassName + '"/>'; -}; -var ui = { - editor: editor, - toolbar: toolbar, - editingArea: editingArea, - codable: codable, - editable: editable, - statusbar: statusbar, - airEditor: airEditor, - airEditable: airEditable, - buttonGroup: buttonGroup, - dropdown: dropdown, - dropdownButtonContents: dropdownButtonContents, - dropdownCheck: dropdownCheck, - palette: palette, - dialog: dialog, - popover: popover, - checkbox: checkbox, - icon: icon, - options: {}, - button: function ($node, options) { - return renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">', function ($node, options) { - if (options && options.tooltip) { - $node.attr({ - title: options.tooltip, - 'aria-label': options.tooltip - }).tooltip({ - container: options.container, - trigger: 'hover', - placement: 'bottom' - }); - } - })($node, options); - }, - toggleBtn: function ($btn, isEnable) { - $btn.toggleClass('disabled', !isEnable); - $btn.attr('disabled', !isEnable); - }, - toggleBtnActive: function ($btn, isActive) { - $btn.toggleClass('active', isActive); - }, - onDialogShown: function ($dialog, handler) { - $dialog.one('shown.bs.modal', handler); - }, - onDialogHidden: function ($dialog, handler) { - $dialog.one('hidden.bs.modal', handler); - }, - showDialog: function ($dialog) { - $dialog.modal('show'); - }, - hideDialog: function ($dialog) { - $dialog.modal('hide'); - }, - createLayout: function ($note, options) { - var $editor = (options.airMode ? ui.airEditor([ - ui.editingArea([ - ui.airEditable() - ]) - ]) : ui.editor([ - ui.toolbar(), - ui.editingArea([ - ui.codable(), - ui.editable() - ]), - ui.statusbar() - ])).render(); - $editor.insertAfter($note); - return { - note: $note, - editor: $editor, - toolbar: $editor.find('.note-toolbar'), - editingArea: $editor.find('.note-editing-area'), - editable: $editor.find('.note-editable'), - codable: $editor.find('.note-codable'), - statusbar: $editor.find('.note-statusbar') - }; - }, - removeLayout: function ($note, layoutInfo) { - $note.html(layoutInfo.editable.html()); - layoutInfo.editor.remove(); - $note.show(); - } -}; - -/** - * @class core.func - * - * func utils (for high-order func's arg) - * - * @singleton - * @alternateClassName func - */ -function eq(itemA) { - return function (itemB) { - return itemA === itemB; - }; -} -function eq2(itemA, itemB) { - return itemA === itemB; -} -function peq2(propName) { - return function (itemA, itemB) { - return itemA[propName] === itemB[propName]; - }; -} -function ok() { - return true; -} -function fail() { - return false; -} -function not(f) { - return function () { - return !f.apply(f, arguments); - }; -} -function and(fA, fB) { - return function (item) { - return fA(item) && fB(item); - }; -} -function self(a) { - return a; -} -function invoke(obj, method) { - return function () { - return obj[method].apply(obj, arguments); - }; -} -var idCounter = 0; -/** - * generate a globally-unique id - * - * @param {String} [prefix] - */ -function uniqueId(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; -} -/** - * returns bnd (bounds) from rect - * - * - IE Compatibility Issue: http://goo.gl/sRLOAo - * - Scroll Issue: http://goo.gl/sNjUc - * - * @param {Rect} rect - * @return {Object} bounds - * @return {Number} bounds.top - * @return {Number} bounds.left - * @return {Number} bounds.width - * @return {Number} bounds.height - */ -function rect2bnd(rect) { - var $document = $(document); - return { - top: rect.top + $document.scrollTop(), - left: rect.left + $document.scrollLeft(), - width: rect.right - rect.left, - height: rect.bottom - rect.top - }; -} -/** - * returns a copy of the object where the keys have become the values and the values the keys. - * @param {Object} obj - * @return {Object} - */ -function invertObject(obj) { - var inverted = {}; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - inverted[obj[key]] = key; - } - } - return inverted; -} -/** - * @param {String} namespace - * @param {String} [prefix] - * @return {String} - */ -function namespaceToCamel(namespace, prefix) { - prefix = prefix || ''; - return prefix + namespace.split('.').map(function (name) { - return name.substring(0, 1).toUpperCase() + name.substring(1); - }).join(''); -} -/** - * Returns a function, that, as long as it continues to be invoked, will not - * be triggered. The function will be called after it stops being called for - * N milliseconds. If `immediate` is passed, trigger the function on the - * leading edge, instead of the trailing. - * @param {Function} func - * @param {Number} wait - * @param {Boolean} immediate - * @return {Function} - */ -function debounce(func, wait, immediate) { - var _this = this; - var timeout; - return function () { - var context = _this; - var args = arguments; - var later = function () { - timeout = null; - if (!immediate) { - func.apply(context, args); - } - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) { - func.apply(context, args); - } - }; -} -var func = { - eq: eq, - eq2: eq2, - peq2: peq2, - ok: ok, - fail: fail, - self: self, - not: not, - and: and, - invoke: invoke, - uniqueId: uniqueId, - rect2bnd: rect2bnd, - invertObject: invertObject, - namespaceToCamel: namespaceToCamel, - debounce: debounce -}; - -/** - * returns the first item of an array. - * - * @param {Array} array - */ -function head(array) { - return array[0]; -} -/** - * returns the last item of an array. - * - * @param {Array} array - */ -function last(array) { - return array[array.length - 1]; -} -/** - * returns everything but the last entry of the array. - * - * @param {Array} array - */ -function initial(array) { - return array.slice(0, array.length - 1); -} -/** - * returns the rest of the items in an array. - * - * @param {Array} array - */ -function tail(array) { - return array.slice(1); -} -/** - * returns item of array - */ -function find(array, pred) { - for (var idx = 0, len = array.length; idx < len; idx++) { - var item = array[idx]; - if (pred(item)) { - return item; - } - } -} -/** - * returns true if all of the values in the array pass the predicate truth test. - */ -function all(array, pred) { - for (var idx = 0, len = array.length; idx < len; idx++) { - if (!pred(array[idx])) { - return false; - } - } - return true; -} -/** - * returns index of item - */ -function indexOf(array, item) { - return $$1.inArray(item, array); -} -/** - * returns true if the value is present in the list. - */ -function contains(array, item) { - return indexOf(array, item) !== -1; -} -/** - * get sum from a list - * - * @param {Array} array - array - * @param {Function} fn - iterator - */ -function sum(array, fn) { - fn = fn || func.self; - return array.reduce(function (memo, v) { - return memo + fn(v); - }, 0); -} -/** - * returns a copy of the collection with array type. - * @param {Collection} collection - collection eg) node.childNodes, ... - */ -function from(collection) { - var result = []; - var length = collection.length; - var idx = -1; - while (++idx < length) { - result[idx] = collection[idx]; - } - return result; -} -/** - * returns whether list is empty or not - */ -function isEmpty$1(array) { - return !array || !array.length; -} -/** - * cluster elements by predicate function. - * - * @param {Array} array - array - * @param {Function} fn - predicate function for cluster rule - * @param {Array[]} - */ -function clusterBy(array, fn) { - if (!array.length) { - return []; - } - var aTail = tail(array); - return aTail.reduce(function (memo, v) { - var aLast = last(memo); - if (fn(last(aLast), v)) { - aLast[aLast.length] = v; - } - else { - memo[memo.length] = [v]; - } - return memo; - }, [[head(array)]]); -} -/** - * returns a copy of the array with all false values removed - * - * @param {Array} array - array - * @param {Function} fn - predicate function for cluster rule - */ -function compact(array) { - var aResult = []; - for (var idx = 0, len = array.length; idx < len; idx++) { - if (array[idx]) { - aResult.push(array[idx]); - } - } - return aResult; -} -/** - * produces a duplicate-free version of the array - * - * @param {Array} array - */ -function unique(array) { - var results = []; - for (var idx = 0, len = array.length; idx < len; idx++) { - if (!contains(results, array[idx])) { - results.push(array[idx]); - } - } - return results; -} -/** - * returns next item. - * @param {Array} array - */ -function next(array, item) { - var idx = indexOf(array, item); - if (idx === -1) { - return null; - } - return array[idx + 1]; -} -/** - * returns prev item. - * @param {Array} array - */ -function prev(array, item) { - var idx = indexOf(array, item); - if (idx === -1) { - return null; - } - return array[idx - 1]; -} -/** - * @class core.list - * - * list utils - * - * @singleton - * @alternateClassName list - */ -var lists = { - head: head, - last: last, - initial: initial, - tail: tail, - prev: prev, - next: next, - find: find, - contains: contains, - all: all, - sum: sum, - from: from, - isEmpty: isEmpty$1, - clusterBy: clusterBy, - compact: compact, - unique: unique -}; - -var isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line -/** - * returns whether font is installed or not. - * - * @param {String} fontName - * @return {Boolean} - */ -function isFontInstalled(fontName) { - var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; - var $tester = $$1('<div>').css({ - position: 'absolute', - left: '-9999px', - top: '-9999px', - fontSize: '200px' - }).text('mmmmmmmmmwwwwwww').appendTo(document.body); - var originalWidth = $tester.css('fontFamily', testFontName).width(); - var width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); - $tester.remove(); - return originalWidth !== width; -} -var userAgent = navigator.userAgent; -var isMSIE = /MSIE|Trident/i.test(userAgent); -var browserVersion; -if (isMSIE) { - var matches = /MSIE (\d+[.]\d+)/.exec(userAgent); - if (matches) { - browserVersion = parseFloat(matches[1]); - } - matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent); - if (matches) { - browserVersion = parseFloat(matches[1]); - } -} -var isEdge = /Edge\/\d+/.test(userAgent); -var hasCodeMirror = !!window.CodeMirror; -if (!hasCodeMirror && isSupportAmd) { - // Webpack - if (typeof __webpack_require__ === 'function') { - try { - // If CodeMirror can't be resolved, `require.resolve` will throw an - // exception and `hasCodeMirror` won't be set to `true`. - require.resolve('codemirror'); - hasCodeMirror = true; - } - catch (e) { - // do nothing - } - } - else if (typeof require !== 'undefined') { - // Browserify - if (typeof require.resolve !== 'undefined') { - try { - // If CodeMirror can't be resolved, `require.resolve` will throw an - // exception and `hasCodeMirror` won't be set to `true`. - require.resolve('codemirror'); - hasCodeMirror = true; - } - catch (e) { - // do nothing - } - // Almond/Require - } - else if (typeof require.specified !== 'undefined') { - hasCodeMirror = require.specified('codemirror'); - } - } -} -var isSupportTouch = (('ontouchstart' in window) || - (navigator.MaxTouchPoints > 0) || - (navigator.msMaxTouchPoints > 0)); -// [workaround] IE doesn't have input events for contentEditable -// - see: https://goo.gl/4bfIvA -var inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input'; -/** - * @class core.env - * - * Object which check platform and agent - * - * @singleton - * @alternateClassName env - */ -var env = { - isMac: navigator.appVersion.indexOf('Mac') > -1, - isMSIE: isMSIE, - isEdge: isEdge, - isFF: !isEdge && /firefox/i.test(userAgent), - isPhantom: /PhantomJS/i.test(userAgent), - isWebkit: !isEdge && /webkit/i.test(userAgent), - isChrome: !isEdge && /chrome/i.test(userAgent), - isSafari: !isEdge && /safari/i.test(userAgent), - browserVersion: browserVersion, - jqueryVersion: parseFloat($$1.fn.jquery), - isSupportAmd: isSupportAmd, - isSupportTouch: isSupportTouch, - hasCodeMirror: hasCodeMirror, - isFontInstalled: isFontInstalled, - isW3CRangeSupport: !!document.createRange, - inputEventName: inputEventName -}; - -var NBSP_CHAR = String.fromCharCode(160); -var ZERO_WIDTH_NBSP_CHAR = '\ufeff'; -/** - * @method isEditable - * - * returns whether node is `note-editable` or not. - * - * @param {Node} node - * @return {Boolean} - */ -function isEditable(node) { - return node && $$1(node).hasClass('note-editable'); -} -/** - * @method isControlSizing - * - * returns whether node is `note-control-sizing` or not. - * - * @param {Node} node - * @return {Boolean} - */ -function isControlSizing(node) { - return node && $$1(node).hasClass('note-control-sizing'); -} -/** - * @method makePredByNodeName - * - * returns predicate which judge whether nodeName is same - * - * @param {String} nodeName - * @return {Function} - */ -function makePredByNodeName(nodeName) { - nodeName = nodeName.toUpperCase(); - return function (node) { - return node && node.nodeName.toUpperCase() === nodeName; - }; -} -/** - * @method isText - * - * - * - * @param {Node} node - * @return {Boolean} true if node's type is text(3) - */ -function isText(node) { - return node && node.nodeType === 3; -} -/** - * @method isElement - * - * - * - * @param {Node} node - * @return {Boolean} true if node's type is element(1) - */ -function isElement(node) { - return node && node.nodeType === 1; -} -/** - * ex) br, col, embed, hr, img, input, ... - * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements - */ -function isVoid(node) { - return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase()); -} -function isPara(node) { - if (isEditable(node)) { - return false; - } - // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph - return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); -} -function isHeading(node) { - return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); -} -var isPre = makePredByNodeName('PRE'); -var isLi = makePredByNodeName('LI'); -function isPurePara(node) { - return isPara(node) && !isLi(node); -} -var isTable = makePredByNodeName('TABLE'); -var isData = makePredByNodeName('DATA'); -function isInline(node) { - return !isBodyContainer(node) && - !isList(node) && - !isHr(node) && - !isPara(node) && - !isTable(node) && - !isBlockquote(node) && - !isData(node); -} -function isList(node) { - return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); -} -var isHr = makePredByNodeName('HR'); -function isCell(node) { - return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); -} -var isBlockquote = makePredByNodeName('BLOCKQUOTE'); -function isBodyContainer(node) { - return isCell(node) || isBlockquote(node) || isEditable(node); -} -var isAnchor = makePredByNodeName('A'); -function isParaInline(node) { - return isInline(node) && !!ancestor(node, isPara); -} -function isBodyInline(node) { - return isInline(node) && !ancestor(node, isPara); -} -var isBody = makePredByNodeName('BODY'); -/** - * returns whether nodeB is closest sibling of nodeA - * - * @param {Node} nodeA - * @param {Node} nodeB - * @return {Boolean} - */ -function isClosestSibling(nodeA, nodeB) { - return nodeA.nextSibling === nodeB || - nodeA.previousSibling === nodeB; -} -/** - * returns array of closest siblings with node - * - * @param {Node} node - * @param {function} [pred] - predicate function - * @return {Node[]} - */ -function withClosestSiblings(node, pred) { - pred = pred || func.ok; - var siblings = []; - if (node.previousSibling && pred(node.previousSibling)) { - siblings.push(node.previousSibling); - } - siblings.push(node); - if (node.nextSibling && pred(node.nextSibling)) { - siblings.push(node.nextSibling); - } - return siblings; -} -/** - * blank HTML for cursor position - * - [workaround] old IE only works with - * - [workaround] IE11 and other browser works with bogus br - */ -var blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>'; -/** - * @method nodeLength - * - * returns #text's text size or element's childNodes size - * - * @param {Node} node - */ -function nodeLength(node) { - if (isText(node)) { - return node.nodeValue.length; - } - if (node) { - return node.childNodes.length; - } - return 0; -} -/** - * returns whether node is empty or not. - * - * @param {Node} node - * @return {Boolean} - */ -function isEmpty(node) { - var len = nodeLength(node); - if (len === 0) { - return true; - } - else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { - // ex) <p><br></p>, <span><br></span> - return true; - } - else if (lists.all(node.childNodes, isText) && node.innerHTML === '') { - // ex) <p></p>, <span></span> - return true; - } - return false; -} -/** - * padding blankHTML if node is empty (for cursor position) - */ -function paddingBlankHTML(node) { - if (!isVoid(node) && !nodeLength(node)) { - node.innerHTML = blankHTML; - } -} -/** - * find nearest ancestor predicate hit - * - * @param {Node} node - * @param {Function} pred - predicate function - */ -function ancestor(node, pred) { - while (node) { - if (pred(node)) { - return node; - } - if (isEditable(node)) { - break; - } - node = node.parentNode; - } - return null; -} -/** - * find nearest ancestor only single child blood line and predicate hit - * - * @param {Node} node - * @param {Function} pred - predicate function - */ -function singleChildAncestor(node, pred) { - node = node.parentNode; - while (node) { - if (nodeLength(node) !== 1) { - break; - } - if (pred(node)) { - return node; - } - if (isEditable(node)) { - break; - } - node = node.parentNode; - } - return null; -} -/** - * returns new array of ancestor nodes (until predicate hit). - * - * @param {Node} node - * @param {Function} [optional] pred - predicate function - */ -function listAncestor(node, pred) { - pred = pred || func.fail; - var ancestors = []; - ancestor(node, function (el) { - if (!isEditable(el)) { - ancestors.push(el); - } - return pred(el); - }); - return ancestors; -} -/** - * find farthest ancestor predicate hit - */ -function lastAncestor(node, pred) { - var ancestors = listAncestor(node); - return lists.last(ancestors.filter(pred)); -} -/** - * returns common ancestor node between two nodes. - * - * @param {Node} nodeA - * @param {Node} nodeB - */ -function commonAncestor(nodeA, nodeB) { - var ancestors = listAncestor(nodeA); - for (var n = nodeB; n; n = n.parentNode) { - if ($$1.inArray(n, ancestors) > -1) { - return n; - } - } - return null; // difference document area -} -/** - * listing all previous siblings (until predicate hit). - * - * @param {Node} node - * @param {Function} [optional] pred - predicate function - */ -function listPrev(node, pred) { - pred = pred || func.fail; - var nodes = []; - while (node) { - if (pred(node)) { - break; - } - nodes.push(node); - node = node.previousSibling; - } - return nodes; -} -/** - * listing next siblings (until predicate hit). - * - * @param {Node} node - * @param {Function} [pred] - predicate function - */ -function listNext(node, pred) { - pred = pred || func.fail; - var nodes = []; - while (node) { - if (pred(node)) { - break; - } - nodes.push(node); - node = node.nextSibling; - } - return nodes; -} -/** - * listing descendant nodes - * - * @param {Node} node - * @param {Function} [pred] - predicate function - */ -function listDescendant(node, pred) { - var descendants = []; - pred = pred || func.ok; - // start DFS(depth first search) with node - (function fnWalk(current) { - if (node !== current && pred(current)) { - descendants.push(current); - } - for (var idx = 0, len = current.childNodes.length; idx < len; idx++) { - fnWalk(current.childNodes[idx]); - } - })(node); - return descendants; -} -/** - * wrap node with new tag. - * - * @param {Node} node - * @param {Node} tagName of wrapper - * @return {Node} - wrapper - */ -function wrap(node, wrapperName) { - var parent = node.parentNode; - var wrapper = $$1('<' + wrapperName + '>')[0]; - parent.insertBefore(wrapper, node); - wrapper.appendChild(node); - return wrapper; -} -/** - * insert node after preceding - * - * @param {Node} node - * @param {Node} preceding - predicate function - */ -function insertAfter(node, preceding) { - var next = preceding.nextSibling; - var parent = preceding.parentNode; - if (next) { - parent.insertBefore(node, next); - } - else { - parent.appendChild(node); - } - return node; -} -/** - * append elements. - * - * @param {Node} node - * @param {Collection} aChild - */ -function appendChildNodes(node, aChild) { - $$1.each(aChild, function (idx, child) { - node.appendChild(child); - }); - return node; -} -/** - * returns whether boundaryPoint is left edge or not. - * - * @param {BoundaryPoint} point - * @return {Boolean} - */ -function isLeftEdgePoint(point) { - return point.offset === 0; -} -/** - * returns whether boundaryPoint is right edge or not. - * - * @param {BoundaryPoint} point - * @return {Boolean} - */ -function isRightEdgePoint(point) { - return point.offset === nodeLength(point.node); -} -/** - * returns whether boundaryPoint is edge or not. - * - * @param {BoundaryPoint} point - * @return {Boolean} - */ -function isEdgePoint(point) { - return isLeftEdgePoint(point) || isRightEdgePoint(point); -} -/** - * returns whether node is left edge of ancestor or not. - * - * @param {Node} node - * @param {Node} ancestor - * @return {Boolean} - */ -function isLeftEdgeOf(node, ancestor) { - while (node && node !== ancestor) { - if (position(node) !== 0) { - return false; - } - node = node.parentNode; - } - return true; -} -/** - * returns whether node is right edge of ancestor or not. - * - * @param {Node} node - * @param {Node} ancestor - * @return {Boolean} - */ -function isRightEdgeOf(node, ancestor) { - if (!ancestor) { - return false; - } - while (node && node !== ancestor) { - if (position(node) !== nodeLength(node.parentNode) - 1) { - return false; - } - node = node.parentNode; - } - return true; -} -/** - * returns whether point is left edge of ancestor or not. - * @param {BoundaryPoint} point - * @param {Node} ancestor - * @return {Boolean} - */ -function isLeftEdgePointOf(point, ancestor) { - return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); -} -/** - * returns whether point is right edge of ancestor or not. - * @param {BoundaryPoint} point - * @param {Node} ancestor - * @return {Boolean} - */ -function isRightEdgePointOf(point, ancestor) { - return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); -} -/** - * returns offset from parent. - * - * @param {Node} node - */ -function position(node) { - var offset = 0; - while ((node = node.previousSibling)) { - offset += 1; - } - return offset; -} -function hasChildren(node) { - return !!(node && node.childNodes && node.childNodes.length); -} -/** - * returns previous boundaryPoint - * - * @param {BoundaryPoint} point - * @param {Boolean} isSkipInnerOffset - * @return {BoundaryPoint} - */ -function prevPoint(point, isSkipInnerOffset) { - var node; - var offset; - if (point.offset === 0) { - if (isEditable(point.node)) { - return null; - } - node = point.node.parentNode; - offset = position(point.node); - } - else if (hasChildren(point.node)) { - node = point.node.childNodes[point.offset - 1]; - offset = nodeLength(node); - } - else { - node = point.node; - offset = isSkipInnerOffset ? 0 : point.offset - 1; - } - return { - node: node, - offset: offset - }; -} -/** - * returns next boundaryPoint - * - * @param {BoundaryPoint} point - * @param {Boolean} isSkipInnerOffset - * @return {BoundaryPoint} - */ -function nextPoint(point, isSkipInnerOffset) { - var node, offset; - if (nodeLength(point.node) === point.offset) { - if (isEditable(point.node)) { - return null; - } - node = point.node.parentNode; - offset = position(point.node) + 1; - } - else if (hasChildren(point.node)) { - node = point.node.childNodes[point.offset]; - offset = 0; - } - else { - node = point.node; - offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; - } - return { - node: node, - offset: offset - }; -} -/** - * returns whether pointA and pointB is same or not. - * - * @param {BoundaryPoint} pointA - * @param {BoundaryPoint} pointB - * @return {Boolean} - */ -function isSamePoint(pointA, pointB) { - return pointA.node === pointB.node && pointA.offset === pointB.offset; -} -/** - * returns whether point is visible (can set cursor) or not. - * - * @param {BoundaryPoint} point - * @return {Boolean} - */ -function isVisiblePoint(point) { - if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) { - return true; - } - var leftNode = point.node.childNodes[point.offset - 1]; - var rightNode = point.node.childNodes[point.offset]; - if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { - return true; - } - return false; -} -/** - * @method prevPointUtil - * - * @param {BoundaryPoint} point - * @param {Function} pred - * @return {BoundaryPoint} - */ -function prevPointUntil(point, pred) { - while (point) { - if (pred(point)) { - return point; - } - point = prevPoint(point); - } - return null; -} -/** - * @method nextPointUntil - * - * @param {BoundaryPoint} point - * @param {Function} pred - * @return {BoundaryPoint} - */ -function nextPointUntil(point, pred) { - while (point) { - if (pred(point)) { - return point; - } - point = nextPoint(point); - } - return null; -} -/** - * returns whether point has character or not. - * - * @param {Point} point - * @return {Boolean} - */ -function isCharPoint(point) { - if (!isText(point.node)) { - return false; - } - var ch = point.node.nodeValue.charAt(point.offset - 1); - return ch && (ch !== ' ' && ch !== NBSP_CHAR); -} -/** - * @method walkPoint - * - * @param {BoundaryPoint} startPoint - * @param {BoundaryPoint} endPoint - * @param {Function} handler - * @param {Boolean} isSkipInnerOffset - */ -function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) { - var point = startPoint; - while (point) { - handler(point); - if (isSamePoint(point, endPoint)) { - break; - } - var isSkipOffset = isSkipInnerOffset && - startPoint.node !== point.node && - endPoint.node !== point.node; - point = nextPoint(point, isSkipOffset); - } -} -/** - * @method makeOffsetPath - * - * return offsetPath(array of offset) from ancestor - * - * @param {Node} ancestor - ancestor node - * @param {Node} node - */ -function makeOffsetPath(ancestor, node) { - var ancestors = listAncestor(node, func.eq(ancestor)); - return ancestors.map(position).reverse(); -} -/** - * @method fromOffsetPath - * - * return element from offsetPath(array of offset) - * - * @param {Node} ancestor - ancestor node - * @param {array} offsets - offsetPath - */ -function fromOffsetPath(ancestor, offsets) { - var current = ancestor; - for (var i = 0, len = offsets.length; i < len; i++) { - if (current.childNodes.length <= offsets[i]) { - current = current.childNodes[current.childNodes.length - 1]; - } - else { - current = current.childNodes[offsets[i]]; - } - } - return current; -} -/** - * @method splitNode - * - * split element or #text - * - * @param {BoundaryPoint} point - * @param {Object} [options] - * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false - * @param {Boolean} [options.isNotSplitEdgePoint] - default: false - * @return {Node} right node of boundaryPoint - */ -function splitNode(point, options) { - var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; - var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; - // edge case - if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { - if (isLeftEdgePoint(point)) { - return point.node; - } - else if (isRightEdgePoint(point)) { - return point.node.nextSibling; - } - } - // split #text - if (isText(point.node)) { - return point.node.splitText(point.offset); - } - else { - var childNode = point.node.childNodes[point.offset]; - var clone = insertAfter(point.node.cloneNode(false), point.node); - appendChildNodes(clone, listNext(childNode)); - if (!isSkipPaddingBlankHTML) { - paddingBlankHTML(point.node); - paddingBlankHTML(clone); - } - return clone; - } -} -/** - * @method splitTree - * - * split tree by point - * - * @param {Node} root - split root - * @param {BoundaryPoint} point - * @param {Object} [options] - * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false - * @param {Boolean} [options.isNotSplitEdgePoint] - default: false - * @return {Node} right node of boundaryPoint - */ -function splitTree(root, point, options) { - // ex) [#text, <span>, <p>] - var ancestors = listAncestor(point.node, func.eq(root)); - if (!ancestors.length) { - return null; - } - else if (ancestors.length === 1) { - return splitNode(point, options); - } - return ancestors.reduce(function (node, parent) { - if (node === point.node) { - node = splitNode(point, options); - } - return splitNode({ - node: parent, - offset: node ? position(node) : nodeLength(parent) - }, options); - }); -} -/** - * split point - * - * @param {Point} point - * @param {Boolean} isInline - * @return {Object} - */ -function splitPoint(point, isInline) { - // find splitRoot, container - // - inline: splitRoot is a child of paragraph - // - block: splitRoot is a child of bodyContainer - var pred = isInline ? isPara : isBodyContainer; - var ancestors = listAncestor(point.node, pred); - var topAncestor = lists.last(ancestors) || point.node; - var splitRoot, container; - if (pred(topAncestor)) { - splitRoot = ancestors[ancestors.length - 2]; - container = topAncestor; - } - else { - splitRoot = topAncestor; - container = splitRoot.parentNode; - } - // if splitRoot is exists, split with splitTree - var pivot = splitRoot && splitTree(splitRoot, point, { - isSkipPaddingBlankHTML: isInline, - isNotSplitEdgePoint: isInline - }); - // if container is point.node, find pivot with point.offset - if (!pivot && container === point.node) { - pivot = point.node.childNodes[point.offset]; - } - return { - rightNode: pivot, - container: container - }; -} -function create(nodeName) { - return document.createElement(nodeName); -} -function createText(text) { - return document.createTextNode(text); -} -/** - * @method remove - * - * remove node, (isRemoveChild: remove child or not) - * - * @param {Node} node - * @param {Boolean} isRemoveChild - */ -function remove(node, isRemoveChild) { - if (!node || !node.parentNode) { - return; - } - if (node.removeNode) { - return node.removeNode(isRemoveChild); - } - var parent = node.parentNode; - if (!isRemoveChild) { - var nodes = []; - for (var i = 0, len = node.childNodes.length; i < len; i++) { - nodes.push(node.childNodes[i]); - } - for (var i = 0, len = nodes.length; i < len; i++) { - parent.insertBefore(nodes[i], node); - } - } - parent.removeChild(node); -} -/** - * @method removeWhile - * - * @param {Node} node - * @param {Function} pred - */ -function removeWhile(node, pred) { - while (node) { - if (isEditable(node) || !pred(node)) { - break; - } - var parent = node.parentNode; - remove(node); - node = parent; - } -} -/** - * @method replace - * - * replace node with provided nodeName - * - * @param {Node} node - * @param {String} nodeName - * @return {Node} - new node - */ -function replace(node, nodeName) { - if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { - return node; - } - var newNode = create(nodeName); - if (node.style.cssText) { - newNode.style.cssText = node.style.cssText; - } - appendChildNodes(newNode, lists.from(node.childNodes)); - insertAfter(newNode, node); - remove(node); - return newNode; -} -var isTextarea = makePredByNodeName('TEXTAREA'); -/** - * @param {jQuery} $node - * @param {Boolean} [stripLinebreaks] - default: false - */ -function value($node, stripLinebreaks) { - var val = isTextarea($node[0]) ? $node.val() : $node.html(); - if (stripLinebreaks) { - return val.replace(/[\n\r]/g, ''); - } - return val; -} -/** - * @method html - * - * get the HTML contents of node - * - * @param {jQuery} $node - * @param {Boolean} [isNewlineOnBlock] - */ -function html($node, isNewlineOnBlock) { - var markup = value($node); - if (isNewlineOnBlock) { - var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g; - markup = markup.replace(regexTag, function (match, endSlash, name) { - name = name.toUpperCase(); - var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && - !!endSlash; - var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name); - return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : ''); - }); - markup = $$1.trim(markup); - } - return markup; -} -function posFromPlaceholder(placeholder) { - var $placeholder = $$1(placeholder); - var pos = $placeholder.offset(); - var height = $placeholder.outerHeight(true); // include margin - return { - left: pos.left, - top: pos.top + height - }; -} -function attachEvents($node, events) { - Object.keys(events).forEach(function (key) { - $node.on(key, events[key]); - }); -} -function detachEvents($node, events) { - Object.keys(events).forEach(function (key) { - $node.off(key, events[key]); - }); -} -/** - * @method isCustomStyleTag - * - * assert if a node contains a "note-styletag" class, - * which implies that's a custom-made style tag node - * - * @param {Node} an HTML DOM node - */ -function isCustomStyleTag(node) { - return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); -} -var dom = { - /** @property {String} NBSP_CHAR */ - NBSP_CHAR: NBSP_CHAR, - /** @property {String} ZERO_WIDTH_NBSP_CHAR */ - ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR, - /** @property {String} blank */ - blank: blankHTML, - /** @property {String} emptyPara */ - emptyPara: "<p>" + blankHTML + "</p>", - makePredByNodeName: makePredByNodeName, - isEditable: isEditable, - isControlSizing: isControlSizing, - isText: isText, - isElement: isElement, - isVoid: isVoid, - isPara: isPara, - isPurePara: isPurePara, - isHeading: isHeading, - isInline: isInline, - isBlock: func.not(isInline), - isBodyInline: isBodyInline, - isBody: isBody, - isParaInline: isParaInline, - isPre: isPre, - isList: isList, - isTable: isTable, - isData: isData, - isCell: isCell, - isBlockquote: isBlockquote, - isBodyContainer: isBodyContainer, - isAnchor: isAnchor, - isDiv: makePredByNodeName('DIV'), - isLi: isLi, - isBR: makePredByNodeName('BR'), - isSpan: makePredByNodeName('SPAN'), - isB: makePredByNodeName('B'), - isU: makePredByNodeName('U'), - isS: makePredByNodeName('S'), - isI: makePredByNodeName('I'), - isImg: makePredByNodeName('IMG'), - isTextarea: isTextarea, - isEmpty: isEmpty, - isEmptyAnchor: func.and(isAnchor, isEmpty), - isClosestSibling: isClosestSibling, - withClosestSiblings: withClosestSiblings, - nodeLength: nodeLength, - isLeftEdgePoint: isLeftEdgePoint, - isRightEdgePoint: isRightEdgePoint, - isEdgePoint: isEdgePoint, - isLeftEdgeOf: isLeftEdgeOf, - isRightEdgeOf: isRightEdgeOf, - isLeftEdgePointOf: isLeftEdgePointOf, - isRightEdgePointOf: isRightEdgePointOf, - prevPoint: prevPoint, - nextPoint: nextPoint, - isSamePoint: isSamePoint, - isVisiblePoint: isVisiblePoint, - prevPointUntil: prevPointUntil, - nextPointUntil: nextPointUntil, - isCharPoint: isCharPoint, - walkPoint: walkPoint, - ancestor: ancestor, - singleChildAncestor: singleChildAncestor, - listAncestor: listAncestor, - lastAncestor: lastAncestor, - listNext: listNext, - listPrev: listPrev, - listDescendant: listDescendant, - commonAncestor: commonAncestor, - wrap: wrap, - insertAfter: insertAfter, - appendChildNodes: appendChildNodes, - position: position, - hasChildren: hasChildren, - makeOffsetPath: makeOffsetPath, - fromOffsetPath: fromOffsetPath, - splitTree: splitTree, - splitPoint: splitPoint, - create: create, - createText: createText, - remove: remove, - removeWhile: removeWhile, - replace: replace, - html: html, - value: value, - posFromPlaceholder: posFromPlaceholder, - attachEvents: attachEvents, - detachEvents: detachEvents, - isCustomStyleTag: isCustomStyleTag -}; - -$$1.summernote = $$1.summernote || { - lang: {} -}; -$$1.extend($$1.summernote.lang, { - 'en-US': { - font: { - bold: 'Bold', - italic: 'Italic', - underline: 'Underline', - clear: 'Remove Font Style', - height: 'Line Height', - name: 'Font Family', - strikethrough: 'Strikethrough', - subscript: 'Subscript', - superscript: 'Superscript', - size: 'Font Size' - }, - image: { - image: 'Picture', - insert: 'Insert Image', - resizeFull: 'Resize Full', - resizeHalf: 'Resize Half', - resizeQuarter: 'Resize Quarter', - floatLeft: 'Float Left', - floatRight: 'Float Right', - floatNone: 'Float None', - shapeRounded: 'Shape: Rounded', - shapeCircle: 'Shape: Circle', - shapeThumbnail: 'Shape: Thumbnail', - shapeNone: 'Shape: None', - dragImageHere: 'Drag image or text here', - dropImage: 'Drop image or Text', - selectFromFiles: 'Select from files', - maximumFileSize: 'Maximum file size', - maximumFileSizeError: 'Maximum file size exceeded.', - url: 'Image URL', - remove: 'Remove Image', - original: 'Original' - }, - video: { - video: 'Video', - videoLink: 'Video Link', - insert: 'Insert Video', - url: 'Video URL', - providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' - }, - link: { - link: 'Link', - insert: 'Insert Link', - unlink: 'Unlink', - edit: 'Edit', - textToDisplay: 'Text to display', - url: 'To what URL should this link go?', - openInNewWindow: 'Open in new window' - }, - table: { - table: 'Table', - addRowAbove: 'Add row above', - addRowBelow: 'Add row below', - addColLeft: 'Add column left', - addColRight: 'Add column right', - delRow: 'Delete row', - delCol: 'Delete column', - delTable: 'Delete table' - }, - hr: { - insert: 'Insert Horizontal Rule' - }, - style: { - style: 'Style', - p: 'Normal', - blockquote: 'Quote', - pre: 'Code', - h1: 'Header 1', - h2: 'Header 2', - h3: 'Header 3', - h4: 'Header 4', - h5: 'Header 5', - h6: 'Header 6' - }, - lists: { - unordered: 'Unordered list', - ordered: 'Ordered list' - }, - options: { - help: 'Help', - fullscreen: 'Full Screen', - codeview: 'Code View' - }, - paragraph: { - paragraph: 'Paragraph', - outdent: 'Outdent', - indent: 'Indent', - left: 'Align left', - center: 'Align center', - right: 'Align right', - justify: 'Justify full' - }, - color: { - recent: 'Recent Color', - more: 'More Color', - background: 'Background Color', - foreground: 'Foreground Color', - transparent: 'Transparent', - setTransparent: 'Set transparent', - reset: 'Reset', - resetToDefault: 'Reset to default' - }, - shortcut: { - shortcuts: 'Keyboard shortcuts', - close: 'Close', - textFormatting: 'Text formatting', - action: 'Action', - paragraphFormatting: 'Paragraph formatting', - documentStyle: 'Document Style', - extraKeys: 'Extra keys' - }, - help: { - 'insertParagraph': 'Insert Paragraph', - 'undo': 'Undoes the last command', - 'redo': 'Redoes the last command', - 'tab': 'Tab', - 'untab': 'Untab', - 'bold': 'Set a bold style', - 'italic': 'Set a italic style', - 'underline': 'Set a underline style', - 'strikethrough': 'Set a strikethrough style', - 'removeFormat': 'Clean a style', - 'justifyLeft': 'Set left align', - 'justifyCenter': 'Set center align', - 'justifyRight': 'Set right align', - 'justifyFull': 'Set full align', - 'insertUnorderedList': 'Toggle unordered list', - 'insertOrderedList': 'Toggle ordered list', - 'outdent': 'Outdent on current paragraph', - 'indent': 'Indent on current paragraph', - 'formatPara': 'Change current block\'s format as a paragraph(P tag)', - 'formatH1': 'Change current block\'s format as H1', - 'formatH2': 'Change current block\'s format as H2', - 'formatH3': 'Change current block\'s format as H3', - 'formatH4': 'Change current block\'s format as H4', - 'formatH5': 'Change current block\'s format as H5', - 'formatH6': 'Change current block\'s format as H6', - 'insertHorizontalRule': 'Insert horizontal rule', - 'linkDialog.show': 'Show Link Dialog' - }, - history: { - undo: 'Undo', - redo: 'Redo' - }, - specialChar: { - specialChar: 'SPECIAL CHARACTERS', - select: 'Select Special characters' - } - } -}); - -var KEY_MAP = { - 'BACKSPACE': 8, - 'TAB': 9, - 'ENTER': 13, - 'SPACE': 32, - 'DELETE': 46, - // Arrow - 'LEFT': 37, - 'UP': 38, - 'RIGHT': 39, - 'DOWN': 40, - // Number: 0-9 - 'NUM0': 48, - 'NUM1': 49, - 'NUM2': 50, - 'NUM3': 51, - 'NUM4': 52, - 'NUM5': 53, - 'NUM6': 54, - 'NUM7': 55, - 'NUM8': 56, - // Alphabet: a-z - 'B': 66, - 'E': 69, - 'I': 73, - 'J': 74, - 'K': 75, - 'L': 76, - 'R': 82, - 'S': 83, - 'U': 85, - 'V': 86, - 'Y': 89, - 'Z': 90, - 'SLASH': 191, - 'LEFTBRACKET': 219, - 'BACKSLASH': 220, - 'RIGHTBRACKET': 221 -}; -/** - * @class core.key - * - * Object for keycodes. - * - * @singleton - * @alternateClassName key - */ -var key = { - /** - * @method isEdit - * - * @param {Number} keyCode - * @return {Boolean} - */ - isEdit: function (keyCode) { - return lists.contains([ - KEY_MAP.BACKSPACE, - KEY_MAP.TAB, - KEY_MAP.ENTER, - KEY_MAP.SPACE, - KEY_MAP.DELETE - ], keyCode); - }, - /** - * @method isMove - * - * @param {Number} keyCode - * @return {Boolean} - */ - isMove: function (keyCode) { - return lists.contains([ - KEY_MAP.LEFT, - KEY_MAP.UP, - KEY_MAP.RIGHT, - KEY_MAP.DOWN - ], keyCode); - }, - /** - * @property {Object} nameFromCode - * @property {String} nameFromCode.8 "BACKSPACE" - */ - nameFromCode: func.invertObject(KEY_MAP), - code: KEY_MAP -}; - -/** - * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js - * - * @param {TextRange} textRange - * @param {Boolean} isStart - * @return {BoundaryPoint} - * - * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx - */ -function textRangeToPoint(textRange, isStart) { - var container = textRange.parentElement(); - var offset; - var tester = document.body.createTextRange(); - var prevContainer; - var childNodes = lists.from(container.childNodes); - for (offset = 0; offset < childNodes.length; offset++) { - if (dom.isText(childNodes[offset])) { - continue; - } - tester.moveToElementText(childNodes[offset]); - if (tester.compareEndPoints('StartToStart', textRange) >= 0) { - break; - } - prevContainer = childNodes[offset]; - } - if (offset !== 0 && dom.isText(childNodes[offset - 1])) { - var textRangeStart = document.body.createTextRange(); - var curTextNode = null; - textRangeStart.moveToElementText(prevContainer || container); - textRangeStart.collapse(!prevContainer); - curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild; - var pointTester = textRange.duplicate(); - pointTester.setEndPoint('StartToStart', textRangeStart); - var textCount = pointTester.text.replace(/[\r\n]/g, '').length; - while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) { - textCount -= curTextNode.nodeValue.length; - curTextNode = curTextNode.nextSibling; - } - // [workaround] enforce IE to re-reference curTextNode, hack - var dummy = curTextNode.nodeValue; // eslint-disable-line - if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && - textCount === curTextNode.nodeValue.length) { - textCount -= curTextNode.nodeValue.length; - curTextNode = curTextNode.nextSibling; - } - container = curTextNode; - offset = textCount; - } - return { - cont: container, - offset: offset - }; -} -/** - * return TextRange from boundary point (inspired by google closure-library) - * @param {BoundaryPoint} point - * @return {TextRange} - */ -function pointToTextRange(point) { - var textRangeInfo = function (container, offset) { - var node, isCollapseToStart; - if (dom.isText(container)) { - var prevTextNodes = dom.listPrev(container, func.not(dom.isText)); - var prevContainer = lists.last(prevTextNodes).previousSibling; - node = prevContainer || container.parentNode; - offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength); - isCollapseToStart = !prevContainer; - } - else { - node = container.childNodes[offset] || container; - if (dom.isText(node)) { - return textRangeInfo(node, 0); - } - offset = 0; - isCollapseToStart = false; - } - return { - node: node, - collapseToStart: isCollapseToStart, - offset: offset - }; - }; - var textRange = document.body.createTextRange(); - var info = textRangeInfo(point.node, point.offset); - textRange.moveToElementText(info.node); - textRange.collapse(info.collapseToStart); - textRange.moveStart('character', info.offset); - return textRange; -} -/** - * Wrapped Range - * - * @constructor - * @param {Node} sc - start container - * @param {Number} so - start offset - * @param {Node} ec - end container - * @param {Number} eo - end offset - */ -var WrappedRange = /** @class */ (function () { - function WrappedRange(sc, so, ec, eo) { - this.sc = sc; - this.so = so; - this.ec = ec; - this.eo = eo; - // isOnEditable: judge whether range is on editable or not - this.isOnEditable = this.makeIsOn(dom.isEditable); - // isOnList: judge whether range is on list node or not - this.isOnList = this.makeIsOn(dom.isList); - // isOnAnchor: judge whether range is on anchor node or not - this.isOnAnchor = this.makeIsOn(dom.isAnchor); - // isOnCell: judge whether range is on cell node or not - this.isOnCell = this.makeIsOn(dom.isCell); - // isOnData: judge whether range is on data node or not - this.isOnData = this.makeIsOn(dom.isData); - } - // nativeRange: get nativeRange from sc, so, ec, eo - WrappedRange.prototype.nativeRange = function () { - if (env.isW3CRangeSupport) { - var w3cRange = document.createRange(); - w3cRange.setStart(this.sc, this.so); - w3cRange.setEnd(this.ec, this.eo); - return w3cRange; - } - else { - var textRange = pointToTextRange({ - node: this.sc, - offset: this.so - }); - textRange.setEndPoint('EndToEnd', pointToTextRange({ - node: this.ec, - offset: this.eo - })); - return textRange; - } - }; - WrappedRange.prototype.getPoints = function () { - return { - sc: this.sc, - so: this.so, - ec: this.ec, - eo: this.eo - }; - }; - WrappedRange.prototype.getStartPoint = function () { - return { - node: this.sc, - offset: this.so - }; - }; - WrappedRange.prototype.getEndPoint = function () { - return { - node: this.ec, - offset: this.eo - }; - }; - /** - * select update visible range - */ - WrappedRange.prototype.select = function () { - var nativeRng = this.nativeRange(); - if (env.isW3CRangeSupport) { - var selection = document.getSelection(); - if (selection.rangeCount > 0) { - selection.removeAllRanges(); - } - selection.addRange(nativeRng); - } - else { - nativeRng.select(); - } - return this; - }; - /** - * Moves the scrollbar to start container(sc) of current range - * - * @return {WrappedRange} - */ - WrappedRange.prototype.scrollIntoView = function (container) { - var height = $$1(container).height(); - if (container.scrollTop + height < this.sc.offsetTop) { - container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop); - } - return this; - }; - /** - * @return {WrappedRange} - */ - WrappedRange.prototype.normalize = function () { - /** - * @param {BoundaryPoint} point - * @param {Boolean} isLeftToRight - * @return {BoundaryPoint} - */ - var getVisiblePoint = function (point, isLeftToRight) { - if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || - (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || - (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || - (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { - return point; - } - // point on block's edge - var block = dom.ancestor(point.node, dom.isBlock); - if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || - ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { - // returns point already on visible point - if (dom.isVisiblePoint(point)) { - return point; - } - // reverse direction - isLeftToRight = !isLeftToRight; - } - var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) - : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); - return nextPoint || point; - }; - var endPoint = getVisiblePoint(this.getEndPoint(), false); - var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); - return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); - }; - /** - * returns matched nodes on range - * - * @param {Function} [pred] - predicate function - * @param {Object} [options] - * @param {Boolean} [options.includeAncestor] - * @param {Boolean} [options.fullyContains] - * @return {Node[]} - */ - WrappedRange.prototype.nodes = function (pred, options) { - pred = pred || func.ok; - var includeAncestor = options && options.includeAncestor; - var fullyContains = options && options.fullyContains; - // TODO compare points and sort - var startPoint = this.getStartPoint(); - var endPoint = this.getEndPoint(); - var nodes = []; - var leftEdgeNodes = []; - dom.walkPoint(startPoint, endPoint, function (point) { - if (dom.isEditable(point.node)) { - return; - } - var node; - if (fullyContains) { - if (dom.isLeftEdgePoint(point)) { - leftEdgeNodes.push(point.node); - } - if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) { - node = point.node; - } - } - else if (includeAncestor) { - node = dom.ancestor(point.node, pred); - } - else { - node = point.node; - } - if (node && pred(node)) { - nodes.push(node); - } - }, true); - return lists.unique(nodes); - }; - /** - * returns commonAncestor of range - * @return {Element} - commonAncestor - */ - WrappedRange.prototype.commonAncestor = function () { - return dom.commonAncestor(this.sc, this.ec); - }; - /** - * returns expanded range by pred - * - * @param {Function} pred - predicate function - * @return {WrappedRange} - */ - WrappedRange.prototype.expand = function (pred) { - var startAncestor = dom.ancestor(this.sc, pred); - var endAncestor = dom.ancestor(this.ec, pred); - if (!startAncestor && !endAncestor) { - return new WrappedRange(this.sc, this.so, this.ec, this.eo); - } - var boundaryPoints = this.getPoints(); - if (startAncestor) { - boundaryPoints.sc = startAncestor; - boundaryPoints.so = 0; - } - if (endAncestor) { - boundaryPoints.ec = endAncestor; - boundaryPoints.eo = dom.nodeLength(endAncestor); - } - return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); - }; - /** - * @param {Boolean} isCollapseToStart - * @return {WrappedRange} - */ - WrappedRange.prototype.collapse = function (isCollapseToStart) { - if (isCollapseToStart) { - return new WrappedRange(this.sc, this.so, this.sc, this.so); - } - else { - return new WrappedRange(this.ec, this.eo, this.ec, this.eo); - } - }; - /** - * splitText on range - */ - WrappedRange.prototype.splitText = function () { - var isSameContainer = this.sc === this.ec; - var boundaryPoints = this.getPoints(); - if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) { - this.ec.splitText(this.eo); - } - if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) { - boundaryPoints.sc = this.sc.splitText(this.so); - boundaryPoints.so = 0; - if (isSameContainer) { - boundaryPoints.ec = boundaryPoints.sc; - boundaryPoints.eo = this.eo - this.so; - } - } - return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); - }; - /** - * delete contents on range - * @return {WrappedRange} - */ - WrappedRange.prototype.deleteContents = function () { - if (this.isCollapsed()) { - return this; - } - var rng = this.splitText(); - var nodes = rng.nodes(null, { - fullyContains: true - }); - // find new cursor point - var point = dom.prevPointUntil(rng.getStartPoint(), function (point) { - return !lists.contains(nodes, point.node); - }); - var emptyParents = []; - $$1.each(nodes, function (idx, node) { - // find empty parents - var parent = node.parentNode; - if (point.node !== parent && dom.nodeLength(parent) === 1) { - emptyParents.push(parent); - } - dom.remove(node, false); - }); - // remove empty parents - $$1.each(emptyParents, function (idx, node) { - dom.remove(node, false); - }); - return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize(); - }; - /** - * makeIsOn: return isOn(pred) function - */ - WrappedRange.prototype.makeIsOn = function (pred) { - return function () { - var ancestor = dom.ancestor(this.sc, pred); - return !!ancestor && (ancestor === dom.ancestor(this.ec, pred)); - }; - }; - /** - * @param {Function} pred - * @return {Boolean} - */ - WrappedRange.prototype.isLeftEdgeOf = function (pred) { - if (!dom.isLeftEdgePoint(this.getStartPoint())) { - return false; - } - var node = dom.ancestor(this.sc, pred); - return node && dom.isLeftEdgeOf(this.sc, node); - }; - /** - * returns whether range was collapsed or not - */ - WrappedRange.prototype.isCollapsed = function () { - return this.sc === this.ec && this.so === this.eo; - }; - /** - * wrap inline nodes which children of body with paragraph - * - * @return {WrappedRange} - */ - WrappedRange.prototype.wrapBodyInlineWithPara = function () { - if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) { - this.sc.innerHTML = dom.emptyPara; - return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0); - } - /** - * [workaround] firefox often create range on not visible point. so normalize here. - * - firefox: |<p>text</p>| - * - chrome: <p>|text|</p> - */ - var rng = this.normalize(); - if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) { - return rng; - } - // find inline top ancestor - var topAncestor; - if (dom.isInline(rng.sc)) { - var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); - topAncestor = lists.last(ancestors); - if (!dom.isInline(topAncestor)) { - topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so]; - } - } - else { - topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0]; - } - // siblings not in paragraph - var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); - inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); - // wrap with paragraph - if (inlineSiblings.length) { - var para = dom.wrap(lists.head(inlineSiblings), 'p'); - dom.appendChildNodes(para, lists.tail(inlineSiblings)); - } - return this.normalize(); - }; - /** - * insert node at current cursor - * - * @param {Node} node - * @return {Node} - */ - WrappedRange.prototype.insertNode = function (node) { - var rng = this.wrapBodyInlineWithPara().deleteContents(); - var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); - if (info.rightNode) { - info.rightNode.parentNode.insertBefore(node, info.rightNode); - } - else { - info.container.appendChild(node); - } - return node; - }; - /** - * insert html at current cursor - */ - WrappedRange.prototype.pasteHTML = function (markup) { - var contentsContainer = $$1('<div></div>').html(markup)[0]; - var childNodes = lists.from(contentsContainer.childNodes); - var rng = this.wrapBodyInlineWithPara().deleteContents(); - return childNodes.reverse().map(function (childNode) { - return rng.insertNode(childNode); - }).reverse(); - }; - /** - * returns text in range - * - * @return {String} - */ - WrappedRange.prototype.toString = function () { - var nativeRng = this.nativeRange(); - return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text; - }; - /** - * returns range for word before cursor - * - * @param {Boolean} [findAfter] - find after cursor, default: false - * @return {WrappedRange} - */ - WrappedRange.prototype.getWordRange = function (findAfter) { - var endPoint = this.getEndPoint(); - if (!dom.isCharPoint(endPoint)) { - return this; - } - var startPoint = dom.prevPointUntil(endPoint, function (point) { - return !dom.isCharPoint(point); - }); - if (findAfter) { - endPoint = dom.nextPointUntil(endPoint, function (point) { - return !dom.isCharPoint(point); - }); - } - return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); - }; - /** - * create offsetPath bookmark - * - * @param {Node} editable - */ - WrappedRange.prototype.bookmark = function (editable) { - return { - s: { - path: dom.makeOffsetPath(editable, this.sc), - offset: this.so - }, - e: { - path: dom.makeOffsetPath(editable, this.ec), - offset: this.eo - } - }; - }; - /** - * create offsetPath bookmark base on paragraph - * - * @param {Node[]} paras - */ - WrappedRange.prototype.paraBookmark = function (paras) { - return { - s: { - path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)), - offset: this.so - }, - e: { - path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)), - offset: this.eo - } - }; - }; - /** - * getClientRects - * @return {Rect[]} - */ - WrappedRange.prototype.getClientRects = function () { - var nativeRng = this.nativeRange(); - return nativeRng.getClientRects(); - }; - return WrappedRange; -}()); -/** - * Data structure - * * BoundaryPoint: a point of dom tree - * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range - * - * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position - */ -var range = { - /** - * create Range Object From arguments or Browser Selection - * - * @param {Node} sc - start container - * @param {Number} so - start offset - * @param {Node} ec - end container - * @param {Number} eo - end offset - * @return {WrappedRange} - */ - create: function (sc, so, ec, eo) { - if (arguments.length === 4) { - return new WrappedRange(sc, so, ec, eo); - } - else if (arguments.length === 2) { - ec = sc; - eo = so; - return new WrappedRange(sc, so, ec, eo); - } - else { - var wrappedRange = this.createFromSelection(); - if (!wrappedRange && arguments.length === 1) { - wrappedRange = this.createFromNode(arguments[0]); - return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); - } - return wrappedRange; - } - }, - createFromSelection: function () { - var sc, so, ec, eo; - if (env.isW3CRangeSupport) { - var selection = document.getSelection(); - if (!selection || selection.rangeCount === 0) { - return null; - } - else if (dom.isBody(selection.anchorNode)) { - // Firefox: returns entire body as range on initialization. - // We won't never need it. - return null; - } - var nativeRng = selection.getRangeAt(0); - sc = nativeRng.startContainer; - so = nativeRng.startOffset; - ec = nativeRng.endContainer; - eo = nativeRng.endOffset; - } - else { - var textRange = document.selection.createRange(); - var textRangeEnd = textRange.duplicate(); - textRangeEnd.collapse(false); - var textRangeStart = textRange; - textRangeStart.collapse(true); - var startPoint = textRangeToPoint(textRangeStart, true); - var endPoint = textRangeToPoint(textRangeEnd, false); - // same visible point case: range was collapsed. - if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && - dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && - endPoint.node.nextSibling === startPoint.node) { - startPoint = endPoint; - } - sc = startPoint.cont; - so = startPoint.offset; - ec = endPoint.cont; - eo = endPoint.offset; - } - return new WrappedRange(sc, so, ec, eo); - }, - /** - * @method - * - * create WrappedRange from node - * - * @param {Node} node - * @return {WrappedRange} - */ - createFromNode: function (node) { - var sc = node; - var so = 0; - var ec = node; - var eo = dom.nodeLength(ec); - // browsers can't target a picture or void node - if (dom.isVoid(sc)) { - so = dom.listPrev(sc).length - 1; - sc = sc.parentNode; - } - if (dom.isBR(ec)) { - eo = dom.listPrev(ec).length - 1; - ec = ec.parentNode; - } - else if (dom.isVoid(ec)) { - eo = dom.listPrev(ec).length; - ec = ec.parentNode; - } - return this.create(sc, so, ec, eo); - }, - /** - * create WrappedRange from node after position - * - * @param {Node} node - * @return {WrappedRange} - */ - createFromNodeBefore: function (node) { - return this.createFromNode(node).collapse(true); - }, - /** - * create WrappedRange from node after position - * - * @param {Node} node - * @return {WrappedRange} - */ - createFromNodeAfter: function (node) { - return this.createFromNode(node).collapse(); - }, - /** - * @method - * - * create WrappedRange from bookmark - * - * @param {Node} editable - * @param {Object} bookmark - * @return {WrappedRange} - */ - createFromBookmark: function (editable, bookmark) { - var sc = dom.fromOffsetPath(editable, bookmark.s.path); - var so = bookmark.s.offset; - var ec = dom.fromOffsetPath(editable, bookmark.e.path); - var eo = bookmark.e.offset; - return new WrappedRange(sc, so, ec, eo); - }, - /** - * @method - * - * create WrappedRange from paraBookmark - * - * @param {Object} bookmark - * @param {Node[]} paras - * @return {WrappedRange} - */ - createFromParaBookmark: function (bookmark, paras) { - var so = bookmark.s.offset; - var eo = bookmark.e.offset; - var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path); - var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path); - return new WrappedRange(sc, so, ec, eo); - } -}; - -/** - * @method readFileAsDataURL - * - * read contents of file as representing URL - * - * @param {File} file - * @return {Promise} - then: dataUrl - */ -function readFileAsDataURL(file) { - return $$1.Deferred(function (deferred) { - $$1.extend(new FileReader(), { - onload: function (e) { - var dataURL = e.target.result; - deferred.resolve(dataURL); - }, - onerror: function (err) { - deferred.reject(err); - } - }).readAsDataURL(file); - }).promise(); -} -/** - * @method createImage - * - * create `<image>` from url string - * - * @param {String} url - * @return {Promise} - then: $image - */ -function createImage(url) { - return $$1.Deferred(function (deferred) { - var $img = $$1('<img>'); - $img.one('load', function () { - $img.off('error abort'); - deferred.resolve($img); - }).one('error abort', function () { - $img.off('load').detach(); - deferred.reject($img); - }).css({ - display: 'none' - }).appendTo(document.body).attr('src', url); - }).promise(); -} - -var History = /** @class */ (function () { - function History($editable) { - this.stack = []; - this.stackOffset = -1; - this.$editable = $editable; - this.editable = $editable[0]; - } - History.prototype.makeSnapshot = function () { - var rng = range.create(this.editable); - var emptyBookmark = { s: { path: [], offset: 0 }, e: { path: [], offset: 0 } }; - return { - contents: this.$editable.html(), - bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark) - }; - }; - History.prototype.applySnapshot = function (snapshot) { - if (snapshot.contents !== null) { - this.$editable.html(snapshot.contents); - } - if (snapshot.bookmark !== null) { - range.createFromBookmark(this.editable, snapshot.bookmark).select(); - } - }; - /** - * @method rewind - * Rewinds the history stack back to the first snapshot taken. - * Leaves the stack intact, so that "Redo" can still be used. - */ - History.prototype.rewind = function () { - // Create snap shot if not yet recorded - if (this.$editable.html() !== this.stack[this.stackOffset].contents) { - this.recordUndo(); - } - // Return to the first available snapshot. - this.stackOffset = 0; - // Apply that snapshot. - this.applySnapshot(this.stack[this.stackOffset]); - }; - /** - * @method reset - * Resets the history stack completely; reverting to an empty editor. - */ - History.prototype.reset = function () { - // Clear the stack. - this.stack = []; - // Restore stackOffset to its original value. - this.stackOffset = -1; - // Clear the editable area. - this.$editable.html(''); - // Record our first snapshot (of nothing). - this.recordUndo(); - }; - /** - * undo - */ - History.prototype.undo = function () { - // Create snap shot if not yet recorded - if (this.$editable.html() !== this.stack[this.stackOffset].contents) { - this.recordUndo(); - } - if (this.stackOffset > 0) { - this.stackOffset--; - this.applySnapshot(this.stack[this.stackOffset]); - } - }; - /** - * redo - */ - History.prototype.redo = function () { - if (this.stack.length - 1 > this.stackOffset) { - this.stackOffset++; - this.applySnapshot(this.stack[this.stackOffset]); - } - }; - /** - * recorded undo - */ - History.prototype.recordUndo = function () { - this.stackOffset++; - // Wash out stack after stackOffset - if (this.stack.length > this.stackOffset) { - this.stack = this.stack.slice(0, this.stackOffset); - } - // Create new snapshot and push it to the end - this.stack.push(this.makeSnapshot()); - }; - return History; -}()); - -var Style = /** @class */ (function () { - function Style() { - } - /** - * @method jQueryCSS - * - * [workaround] for old jQuery - * passing an array of style properties to .css() - * will result in an object of property-value pairs. - * (compability with version < 1.9) - * - * @private - * @param {jQuery} $obj - * @param {Array} propertyNames - An array of one or more CSS properties. - * @return {Object} - */ - Style.prototype.jQueryCSS = function ($obj, propertyNames) { - if (env.jqueryVersion < 1.9) { - var result_1 = {}; - $$1.each(propertyNames, function (idx, propertyName) { - result_1[propertyName] = $obj.css(propertyName); - }); - return result_1; - } - return $obj.css(propertyNames); - }; - /** - * returns style object from node - * - * @param {jQuery} $node - * @return {Object} - */ - Style.prototype.fromNode = function ($node) { - var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; - var styleInfo = this.jQueryCSS($node, properties) || {}; - styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); - return styleInfo; - }; - /** - * paragraph level style - * - * @param {WrappedRange} rng - * @param {Object} styleInfo - */ - Style.prototype.stylePara = function (rng, styleInfo) { - $$1.each(rng.nodes(dom.isPara, { - includeAncestor: true - }), function (idx, para) { - $$1(para).css(styleInfo); - }); - }; - /** - * insert and returns styleNodes on range. - * - * @param {WrappedRange} rng - * @param {Object} [options] - options for styleNodes - * @param {String} [options.nodeName] - default: `SPAN` - * @param {Boolean} [options.expandClosestSibling] - default: `false` - * @param {Boolean} [options.onlyPartialContains] - default: `false` - * @return {Node[]} - */ - Style.prototype.styleNodes = function (rng, options) { - rng = rng.splitText(); - var nodeName = (options && options.nodeName) || 'SPAN'; - var expandClosestSibling = !!(options && options.expandClosestSibling); - var onlyPartialContains = !!(options && options.onlyPartialContains); - if (rng.isCollapsed()) { - return [rng.insertNode(dom.create(nodeName))]; - } - var pred = dom.makePredByNodeName(nodeName); - var nodes = rng.nodes(dom.isText, { - fullyContains: true - }).map(function (text) { - return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); - }); - if (expandClosestSibling) { - if (onlyPartialContains) { - var nodesInRange_1 = rng.nodes(); - // compose with partial contains predication - pred = func.and(pred, function (node) { - return lists.contains(nodesInRange_1, node); - }); - } - return nodes.map(function (node) { - var siblings = dom.withClosestSiblings(node, pred); - var head = lists.head(siblings); - var tails = lists.tail(siblings); - $$1.each(tails, function (idx, elem) { - dom.appendChildNodes(head, elem.childNodes); - dom.remove(elem); - }); - return lists.head(siblings); - }); - } - else { - return nodes; - } - }; - /** - * get current style on cursor - * - * @param {WrappedRange} rng - * @return {Object} - object contains style properties. - */ - Style.prototype.current = function (rng) { - var $cont = $$1(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc); - var styleInfo = this.fromNode($cont); - // document.queryCommandState for toggle state - // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" - try { - styleInfo = $$1.extend(styleInfo, { - 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', - 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', - 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', - 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', - 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', - 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal', - 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'] - }); - } - catch (e) { } - // list-style-type to list-style(unordered, ordered) - if (!rng.isOnList()) { - styleInfo['list-style'] = 'none'; - } - else { - var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square']; - var isUnordered = $$1.inArray(styleInfo['list-style-type'], orderedTypes) > -1; - styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered'; - } - var para = dom.ancestor(rng.sc, dom.isPara); - if (para && para.style['line-height']) { - styleInfo['line-height'] = para.style.lineHeight; - } - else { - var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); - styleInfo['line-height'] = lineHeight.toFixed(1); - } - styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); - styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); - styleInfo.range = rng; - return styleInfo; - }; - return Style; -}()); - -var Bullet = /** @class */ (function () { - function Bullet() { - } - /** - * toggle ordered list - */ - Bullet.prototype.insertOrderedList = function (editable) { - this.toggleList('OL', editable); - }; - /** - * toggle unordered list - */ - Bullet.prototype.insertUnorderedList = function (editable) { - this.toggleList('UL', editable); - }; - /** - * indent - */ - Bullet.prototype.indent = function (editable) { - var _this = this; - var rng = range.create(editable).wrapBodyInlineWithPara(); - var paras = rng.nodes(dom.isPara, { includeAncestor: true }); - var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); - $$1.each(clustereds, function (idx, paras) { - var head = lists.head(paras); - if (dom.isLi(head)) { - _this.wrapList(paras, head.parentNode.nodeName); - } - else { - $$1.each(paras, function (idx, para) { - $$1(para).css('marginLeft', function (idx, val) { - return (parseInt(val, 10) || 0) + 25; - }); - }); - } - }); - rng.select(); - }; - /** - * outdent - */ - Bullet.prototype.outdent = function (editable) { - var _this = this; - var rng = range.create(editable).wrapBodyInlineWithPara(); - var paras = rng.nodes(dom.isPara, { includeAncestor: true }); - var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); - $$1.each(clustereds, function (idx, paras) { - var head = lists.head(paras); - if (dom.isLi(head)) { - _this.releaseList([paras]); - } - else { - $$1.each(paras, function (idx, para) { - $$1(para).css('marginLeft', function (idx, val) { - val = (parseInt(val, 10) || 0); - return val > 25 ? val - 25 : ''; - }); - }); - } - }); - rng.select(); - }; - /** - * toggle list - * - * @param {String} listName - OL or UL - */ - Bullet.prototype.toggleList = function (listName, editable) { - var _this = this; - var rng = range.create(editable).wrapBodyInlineWithPara(); - var paras = rng.nodes(dom.isPara, { includeAncestor: true }); - var bookmark = rng.paraBookmark(paras); - var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); - // paragraph to list - if (lists.find(paras, dom.isPurePara)) { - var wrappedParas_1 = []; - $$1.each(clustereds, function (idx, paras) { - wrappedParas_1 = wrappedParas_1.concat(_this.wrapList(paras, listName)); - }); - paras = wrappedParas_1; - // list to paragraph or change list style - } - else { - var diffLists = rng.nodes(dom.isList, { - includeAncestor: true - }).filter(function (listNode) { - return !$$1.nodeName(listNode, listName); - }); - if (diffLists.length) { - $$1.each(diffLists, function (idx, listNode) { - dom.replace(listNode, listName); - }); - } - else { - paras = this.releaseList(clustereds, true); - } - } - range.createFromParaBookmark(bookmark, paras).select(); - }; - /** - * @param {Node[]} paras - * @param {String} listName - * @return {Node[]} - */ - Bullet.prototype.wrapList = function (paras, listName) { - var head = lists.head(paras); - var last = lists.last(paras); - var prevList = dom.isList(head.previousSibling) && head.previousSibling; - var nextList = dom.isList(last.nextSibling) && last.nextSibling; - var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); - // P to LI - paras = paras.map(function (para) { - return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; - }); - // append to list(<ul>, <ol>) - dom.appendChildNodes(listNode, paras); - if (nextList) { - dom.appendChildNodes(listNode, lists.from(nextList.childNodes)); - dom.remove(nextList); - } - return paras; - }; - /** - * @method releaseList - * - * @param {Array[]} clustereds - * @param {Boolean} isEscapseToBody - * @return {Node[]} - */ - Bullet.prototype.releaseList = function (clustereds, isEscapseToBody) { - var releasedParas = []; - $$1.each(clustereds, function (idx, paras) { - var head = lists.head(paras); - var last = lists.last(paras); - var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode; - var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, { - node: last.parentNode, - offset: dom.position(last) + 1 - }, { - isSkipPaddingBlankHTML: true - }) : null; - var middleList = dom.splitTree(headList, { - node: head.parentNode, - offset: dom.position(head) - }, { - isSkipPaddingBlankHTML: true - }); - paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) - : lists.from(middleList.childNodes).filter(dom.isLi); - // LI to P - if (isEscapseToBody || !dom.isList(headList.parentNode)) { - paras = paras.map(function (para) { - return dom.replace(para, 'P'); - }); - } - $$1.each(lists.from(paras).reverse(), function (idx, para) { - dom.insertAfter(para, headList); - }); - // remove empty lists - var rootLists = lists.compact([headList, middleList, lastList]); - $$1.each(rootLists, function (idx, rootList) { - var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); - $$1.each(listNodes.reverse(), function (idx, listNode) { - if (!dom.nodeLength(listNode)) { - dom.remove(listNode, true); - } - }); - }); - releasedParas = releasedParas.concat(paras); - }); - return releasedParas; - }; - return Bullet; -}()); - -/** - * @class editing.Typing - * - * Typing - * - */ -var Typing = /** @class */ (function () { - function Typing() { - // a Bullet instance to toggle lists off - this.bullet = new Bullet(); - } - /** - * insert tab - * - * @param {WrappedRange} rng - * @param {Number} tabsize - */ - Typing.prototype.insertTab = function (rng, tabsize) { - var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); - rng = rng.deleteContents(); - rng.insertNode(tab, true); - rng = range.create(tab, tabsize); - rng.select(); - }; - /** - * insert paragraph - */ - Typing.prototype.insertParagraph = function (editable) { - var rng = range.create(editable); - // deleteContents on range. - rng = rng.deleteContents(); - // Wrap range if it needs to be wrapped by paragraph - rng = rng.wrapBodyInlineWithPara(); - // finding paragraph - var splitRoot = dom.ancestor(rng.sc, dom.isPara); - var nextPara; - // on paragraph: split paragraph - if (splitRoot) { - // if it is an empty line with li - if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { - // toogle UL/OL and escape - this.bullet.toggleList(splitRoot.parentNode.nodeName); - return; - // if it is an empty line with para on blockquote - } - else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { - // escape blockquote - dom.insertAfter(splitRoot, splitRoot.parentNode); - nextPara = splitRoot; - // if new line has content (not a line break) - } - else { - nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); - var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); - emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); - $$1.each(emptyAnchors, function (idx, anchor) { - dom.remove(anchor); - }); - // replace empty heading, pre or custom-made styleTag with P tag - if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) { - nextPara = dom.replace(nextPara, 'p'); - } - } - // no paragraph: insert empty paragraph - } - else { - var next = rng.sc.childNodes[rng.so]; - nextPara = $$1(dom.emptyPara)[0]; - if (next) { - rng.sc.insertBefore(nextPara, next); - } - else { - rng.sc.appendChild(nextPara); - } - } - range.create(nextPara, 0).normalize().select().scrollIntoView(editable); - }; - return Typing; -}()); - -/** - * @class Create a virtual table to create what actions to do in change. - * @param {object} startPoint Cell selected to apply change. - * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where - * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction - * @param {object} domTable Dom element of table to make changes. - */ -var TableResultAction = function (startPoint, where, action, domTable) { - var _startPoint = { 'colPos': 0, 'rowPos': 0 }; - var _virtualTable = []; - var _actionCellList = []; - /// /////////////////////////////////////////// - // Private functions - /// /////////////////////////////////////////// - /** - * Set the startPoint of action. - */ - function setStartPoint() { - if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) { - console.error('Impossible to identify start Cell point.', startPoint); - return; - } - _startPoint.colPos = startPoint.cellIndex; - if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') { - console.error('Impossible to identify start Row point.', startPoint); - return; - } - _startPoint.rowPos = startPoint.parentElement.rowIndex; - } - /** - * Define virtual table position info object. - * - * @param {int} rowIndex Index position in line of virtual table. - * @param {int} cellIndex Index position in column of virtual table. - * @param {object} baseRow Row affected by this position. - * @param {object} baseCell Cell affected by this position. - * @param {bool} isSpan Inform if it is an span cell/row. - */ - function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) { - var objPosition = { - 'baseRow': baseRow, - 'baseCell': baseCell, - 'isRowSpan': isRowSpan, - 'isColSpan': isColSpan, - 'isVirtual': isVirtualCell - }; - if (!_virtualTable[rowIndex]) { - _virtualTable[rowIndex] = []; - } - _virtualTable[rowIndex][cellIndex] = objPosition; - } - /** - * Create action cell object. - * - * @param {object} virtualTableCellObj Object of specific position on virtual table. - * @param {enum} resultAction Action to be applied in that item. - */ - function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) { - return { - 'baseCell': virtualTableCellObj.baseCell, - 'action': resultAction, - 'virtualTable': { - 'rowIndex': virtualRowPosition, - 'cellIndex': virtualColPosition - } - }; - } - /** - * Recover free index of row to append Cell. - * - * @param {int} rowIndex Index of row to find free space. - * @param {int} cellIndex Index of cell to find free space in table. - */ - function recoverCellIndex(rowIndex, cellIndex) { - if (!_virtualTable[rowIndex]) { - return cellIndex; - } - if (!_virtualTable[rowIndex][cellIndex]) { - return cellIndex; - } - var newCellIndex = cellIndex; - while (_virtualTable[rowIndex][newCellIndex]) { - newCellIndex++; - if (!_virtualTable[rowIndex][newCellIndex]) { - return newCellIndex; - } - } - } - /** - * Recover info about row and cell and add information to virtual table. - * - * @param {object} row Row to recover information. - * @param {object} cell Cell to recover information. - */ - function addCellInfoToVirtual(row, cell) { - var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex); - var cellHasColspan = (cell.colSpan > 1); - var cellHasRowspan = (cell.rowSpan > 1); - var isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos); - setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); - // Add span rows to virtual Table. - var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0; - if (rowspanNumber > 1) { - for (var rp = 1; rp < rowspanNumber; rp++) { - var rowspanIndex = row.rowIndex + rp; - adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell); - setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true); - } - } - // Add span cols to virtual table. - var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0; - if (colspanNumber > 1) { - for (var cp = 1; cp < colspanNumber; cp++) { - var cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp)); - adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell); - setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true); - } - } - } - /** - * Process validation and adjust of start point if needed - * - * @param {int} rowIndex - * @param {int} cellIndex - * @param {object} cell - * @param {bool} isSelectedCell - */ - function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) { - if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) { - _startPoint.colPos++; - } - } - /** - * Create virtual table of cells with all cells, including span cells. - */ - function createVirtualTable() { - var rows = domTable.rows; - for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) { - var cells = rows[rowIndex].cells; - for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) { - addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]); - } - } - } - /** - * Get action to be applied on the cell. - * - * @param {object} cell virtual table cell to apply action - */ - function getDeleteResultActionToCell(cell) { - switch (where) { - case TableResultAction.where.Column: - if (cell.isColSpan) { - return TableResultAction.resultAction.SubtractSpanCount; - } - break; - case TableResultAction.where.Row: - if (!cell.isVirtual && cell.isRowSpan) { - return TableResultAction.resultAction.AddCell; - } - else if (cell.isRowSpan) { - return TableResultAction.resultAction.SubtractSpanCount; - } - break; - } - return TableResultAction.resultAction.RemoveCell; - } - /** - * Get action to be applied on the cell. - * - * @param {object} cell virtual table cell to apply action - */ - function getAddResultActionToCell(cell) { - switch (where) { - case TableResultAction.where.Column: - if (cell.isColSpan) { - return TableResultAction.resultAction.SumSpanCount; - } - else if (cell.isRowSpan && cell.isVirtual) { - return TableResultAction.resultAction.Ignore; - } - break; - case TableResultAction.where.Row: - if (cell.isRowSpan) { - return TableResultAction.resultAction.SumSpanCount; - } - else if (cell.isColSpan && cell.isVirtual) { - return TableResultAction.resultAction.Ignore; - } - break; - } - return TableResultAction.resultAction.AddCell; - } - function init() { - setStartPoint(); - createVirtualTable(); - } - /// /////////////////////////////////////////// - // Public functions - /// /////////////////////////////////////////// - /** - * Recover array os what to do in table. - */ - this.getActionList = function () { - var fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1; - var fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1; - var actualPosition = 0; - var canContinue = true; - while (canContinue) { - var rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition; - var colPosition = (fixedCol >= 0) ? fixedCol : actualPosition; - var row = _virtualTable[rowPosition]; - if (!row) { - canContinue = false; - return _actionCellList; - } - var cell = row[colPosition]; - if (!cell) { - canContinue = false; - return _actionCellList; - } - // Define action to be applied in this cell - var resultAction = TableResultAction.resultAction.Ignore; - switch (action) { - case TableResultAction.requestAction.Add: - resultAction = getAddResultActionToCell(cell); - break; - case TableResultAction.requestAction.Delete: - resultAction = getDeleteResultActionToCell(cell); - break; - } - _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition)); - actualPosition++; - } - return _actionCellList; - }; - init(); -}; -/** -* -* Where action occours enum. -*/ -TableResultAction.where = { 'Row': 0, 'Column': 1 }; -/** -* -* Requested action to apply enum. -*/ -TableResultAction.requestAction = { 'Add': 0, 'Delete': 1 }; -/** -* -* Result action to be executed enum. -*/ -TableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 }; -/** - * - * @class editing.Table - * - * Table - * - */ -var Table = /** @class */ (function () { - function Table() { - } - /** - * handle tab key - * - * @param {WrappedRange} rng - * @param {Boolean} isShift - */ - Table.prototype.tab = function (rng, isShift) { - var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); - var table = dom.ancestor(cell, dom.isTable); - var cells = dom.listDescendant(table, dom.isCell); - var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell); - if (nextCell) { - range.create(nextCell, 0).select(); - } - }; - /** - * Add a new row - * - * @param {WrappedRange} rng - * @param {String} position (top/bottom) - * @return {Node} - */ - Table.prototype.addRow = function (rng, position) { - var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); - var currentTr = $$1(cell).closest('tr'); - var trAttributes = this.recoverAttributes(currentTr); - var html = $$1('<tr' + trAttributes + '></tr>'); - var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, $$1(currentTr).closest('table')[0]); - var actions = vTable.getActionList(); - for (var idCell = 0; idCell < actions.length; idCell++) { - var currentCell = actions[idCell]; - var tdAttributes = this.recoverAttributes(currentCell.baseCell); - switch (currentCell.action) { - case TableResultAction.resultAction.AddCell: - html.append('<td' + tdAttributes + '>' + dom.blank + '</td>'); - break; - case TableResultAction.resultAction.SumSpanCount: - if (position === 'top') { - var baseCellTr = currentCell.baseCell.parent; - var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex; - if (isTopFromRowSpan) { - var newTd = $$1('<div></div>').append($$1('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html(); - html.append(newTd); - break; - } - } - var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10); - rowspanNumber++; - currentCell.baseCell.setAttribute('rowSpan', rowspanNumber); - break; - } - } - if (position === 'top') { - currentTr.before(html); - } - else { - var cellHasRowspan = (cell.rowSpan > 1); - if (cellHasRowspan) { - var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2); - $$1($$1(currentTr).parent().find('tr')[lastTrIndex]).after($$1(html)); - return; - } - currentTr.after(html); - } - }; - /** - * Add a new col - * - * @param {WrappedRange} rng - * @param {String} position (left/right) - * @return {Node} - */ - Table.prototype.addCol = function (rng, position) { - var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); - var row = $$1(cell).closest('tr'); - var rowsGroup = $$1(row).siblings(); - rowsGroup.push(row); - var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, $$1(row).closest('table')[0]); - var actions = vTable.getActionList(); - for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { - var currentCell = actions[actionIndex]; - var tdAttributes = this.recoverAttributes(currentCell.baseCell); - switch (currentCell.action) { - case TableResultAction.resultAction.AddCell: - if (position === 'right') { - $$1(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>'); - } - else { - $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); - } - break; - case TableResultAction.resultAction.SumSpanCount: - if (position === 'right') { - var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10); - colspanNumber++; - currentCell.baseCell.setAttribute('colSpan', colspanNumber); - } - else { - $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); - } - break; - } - } - }; - /* - * Copy attributes from element. - * - * @param {object} Element to recover attributes. - * @return {string} Copied string elements. - */ - Table.prototype.recoverAttributes = function (el) { - var resultStr = ''; - if (!el) { - return resultStr; - } - var attrList = el.attributes || []; - for (var i = 0; i < attrList.length; i++) { - if (attrList[i].name.toLowerCase() === 'id') { - continue; - } - if (attrList[i].specified) { - resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\''; - } - } - return resultStr; - }; - /** - * Delete current row - * - * @param {WrappedRange} rng - * @return {Node} - */ - Table.prototype.deleteRow = function (rng) { - var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); - var row = $$1(cell).closest('tr'); - var cellPos = row.children('td, th').index($$1(cell)); - var rowPos = row[0].rowIndex; - var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); - var actions = vTable.getActionList(); - for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { - if (!actions[actionIndex]) { - continue; - } - var baseCell = actions[actionIndex].baseCell; - var virtualPosition = actions[actionIndex].virtualTable; - var hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1); - var rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0; - switch (actions[actionIndex].action) { - case TableResultAction.resultAction.Ignore: - continue; - case TableResultAction.resultAction.AddCell: - var nextRow = row.next('tr')[0]; - if (!nextRow) { - continue; - } - var cloneRow = row[0].cells[cellPos]; - if (hasRowspan) { - if (rowspanNumber > 2) { - rowspanNumber--; - nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); - nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber); - nextRow.cells[cellPos].innerHTML = ''; - } - else if (rowspanNumber === 2) { - nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); - nextRow.cells[cellPos].removeAttribute('rowSpan'); - nextRow.cells[cellPos].innerHTML = ''; - } - } - continue; - case TableResultAction.resultAction.SubtractSpanCount: - if (hasRowspan) { - if (rowspanNumber > 2) { - rowspanNumber--; - baseCell.setAttribute('rowSpan', rowspanNumber); - if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { - baseCell.innerHTML = ''; - } - } - else if (rowspanNumber === 2) { - baseCell.removeAttribute('rowSpan'); - if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { - baseCell.innerHTML = ''; - } - } - } - continue; - case TableResultAction.resultAction.RemoveCell: - // Do not need remove cell because row will be deleted. - continue; - } - } - row.remove(); - }; - /** - * Delete current col - * - * @param {WrappedRange} rng - * @return {Node} - */ - Table.prototype.deleteCol = function (rng) { - var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); - var row = $$1(cell).closest('tr'); - var cellPos = row.children('td, th').index($$1(cell)); - var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); - var actions = vTable.getActionList(); - for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { - if (!actions[actionIndex]) { - continue; - } - switch (actions[actionIndex].action) { - case TableResultAction.resultAction.Ignore: - continue; - case TableResultAction.resultAction.SubtractSpanCount: - var baseCell = actions[actionIndex].baseCell; - var hasColspan = (baseCell.colSpan && baseCell.colSpan > 1); - if (hasColspan) { - var colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0; - if (colspanNumber > 2) { - colspanNumber--; - baseCell.setAttribute('colSpan', colspanNumber); - if (baseCell.cellIndex === cellPos) { - baseCell.innerHTML = ''; - } - } - else if (colspanNumber === 2) { - baseCell.removeAttribute('colSpan'); - if (baseCell.cellIndex === cellPos) { - baseCell.innerHTML = ''; - } - } - } - continue; - case TableResultAction.resultAction.RemoveCell: - dom.remove(actions[actionIndex].baseCell, true); - continue; - } - } - }; - /** - * create empty table element - * - * @param {Number} rowCount - * @param {Number} colCount - * @return {Node} - */ - Table.prototype.createTable = function (colCount, rowCount, options) { - var tds = []; - var tdHTML; - for (var idxCol = 0; idxCol < colCount; idxCol++) { - tds.push('<td>' + dom.blank + '</td>'); - } - tdHTML = tds.join(''); - var trs = []; - var trHTML; - for (var idxRow = 0; idxRow < rowCount; idxRow++) { - trs.push('<tr>' + tdHTML + '</tr>'); - } - trHTML = trs.join(''); - var $table = $$1('<table>' + trHTML + '</table>'); - if (options && options.tableClassName) { - $table.addClass(options.tableClassName); - } - return $table[0]; - }; - /** - * Delete current table - * - * @param {WrappedRange} rng - * @return {Node} - */ - Table.prototype.deleteTable = function (rng) { - var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); - $$1(cell).closest('table').remove(); - }; - return Table; -}()); - -var KEY_BOGUS = 'bogus'; -/** - * @class Editor - */ -var Editor = /** @class */ (function () { - function Editor(context) { - var _this = this; - this.context = context; - this.$note = context.layoutInfo.note; - this.$editor = context.layoutInfo.editor; - this.$editable = context.layoutInfo.editable; - this.options = context.options; - this.lang = this.options.langInfo; - this.editable = this.$editable[0]; - this.lastRange = null; - this.style = new Style(); - this.table = new Table(); - this.typing = new Typing(); - this.bullet = new Bullet(); - this.history = new History(this.$editable); - this.context.memo('help.undo', this.lang.help.undo); - this.context.memo('help.redo', this.lang.help.redo); - this.context.memo('help.tab', this.lang.help.tab); - this.context.memo('help.untab', this.lang.help.untab); - this.context.memo('help.insertParagraph', this.lang.help.insertParagraph); - this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList); - this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList); - this.context.memo('help.indent', this.lang.help.indent); - this.context.memo('help.outdent', this.lang.help.outdent); - this.context.memo('help.formatPara', this.lang.help.formatPara); - this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule); - this.context.memo('help.fontName', this.lang.help.fontName); - // native commands(with execCommand), generate function for execCommand - var commands = [ - 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', - 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', - 'formatBlock', 'removeFormat', 'backColor' - ]; - for (var idx = 0, len = commands.length; idx < len; idx++) { - this[commands[idx]] = (function (sCmd) { - return function (value) { - _this.beforeCommand(); - document.execCommand(sCmd, false, value); - _this.afterCommand(true); - }; - })(commands[idx]); - this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]); - } - this.fontName = this.wrapCommand(function (value) { - return _this.fontStyling('font-family', "\'" + value + "\'"); - }); - this.fontSize = this.wrapCommand(function (value) { - return _this.fontStyling('font-size', value + 'px'); - }); - for (var idx = 1; idx <= 6; idx++) { - this['formatH' + idx] = (function (idx) { - return function () { - _this.formatBlock('H' + idx); - }; - })(idx); - this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]); - } - - this.insertParagraph = this.wrapCommand(function () { - _this.typing.insertParagraph(_this.editable); - }); - this.insertOrderedList = this.wrapCommand(function () { - _this.bullet.insertOrderedList(_this.editable); - }); - this.insertUnorderedList = this.wrapCommand(function () { - _this.bullet.insertUnorderedList(_this.editable); - }); - this.indent = this.wrapCommand(function () { - _this.bullet.indent(_this.editable); - }); - this.outdent = this.wrapCommand(function () { - _this.bullet.outdent(_this.editable); - }); - /** - * insertNode - * insert node - * @param {Node} node - */ - this.insertNode = this.wrapCommand(function (node) { - if (_this.isLimited($$1(node).text().length)) { - return; - } - var rng = _this.createRange(); - rng.insertNode(node); - range.createFromNodeAfter(node).select(); - }); - /** - * insert text - * @param {String} text - */ - this.insertText = this.wrapCommand(function (text) { - if (_this.isLimited(text.length)) { - return; - } - var rng = _this.createRange(); - var textNode = rng.insertNode(dom.createText(text)); - range.create(textNode, dom.nodeLength(textNode)).select(); - }); - /** - * paste HTML - * @param {String} markup - */ - this.pasteHTML = this.wrapCommand(function (markup) { - if (_this.isLimited(markup.length)) { - return; - } - var contents = _this.createRange().pasteHTML(markup); - range.createFromNodeAfter(lists.last(contents)).select(); - }); - /** - * formatBlock - * - * @param {String} tagName - */ - this.formatBlock = this.wrapCommand(function (tagName, $target) { - var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle; - if (onApplyCustomStyle) { - onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock); - } - else { - _this.onFormatBlock(tagName, $target); - } - }); - /** - * insert horizontal rule - */ - this.insertHorizontalRule = this.wrapCommand(function () { - var hrNode = _this.createRange().insertNode(dom.create('HR')); - if (hrNode.nextSibling) { - range.create(hrNode.nextSibling, 0).normalize().select(); - } - }); - /** - * lineHeight - * @param {String} value - */ - this.lineHeight = this.wrapCommand(function (value) { - _this.style.stylePara(_this.createRange(), { - lineHeight: value - }); - }); - /** - * create link (command) - * - * @param {Object} linkInfo - */ - this.createLink = this.wrapCommand(function (linkInfo) { - var linkUrl = linkInfo.url; - var linkText = linkInfo.text; - var isNewWindow = linkInfo.isNewWindow; - var rng = linkInfo.range || _this.createRange(); - var isTextChanged = rng.toString() !== linkText; - // handle spaced urls from input - if (typeof linkUrl === 'string') { - linkUrl = linkUrl.trim(); - } - if (_this.options.onCreateLink) { - linkUrl = _this.options.onCreateLink(linkUrl); - } - else { - // if url doesn't match an URL schema, set http:// as default - linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) - ? linkUrl : 'http://' + linkUrl; - } - var anchors = []; - if (isTextChanged) { - rng = rng.deleteContents(); - var anchor = rng.insertNode($$1('<A>' + linkText + '</A>')[0]); - anchors.push(anchor); - } - else { - anchors = _this.style.styleNodes(rng, { - nodeName: 'A', - expandClosestSibling: true, - onlyPartialContains: true - }); - } - $$1.each(anchors, function (idx, anchor) { - $$1(anchor).attr('href', linkUrl); - if (isNewWindow) { - $$1(anchor).attr('target', '_blank'); - } - else { - $$1(anchor).removeAttr('target'); - } - }); - var startRange = range.createFromNodeBefore(lists.head(anchors)); - var startPoint = startRange.getStartPoint(); - var endRange = range.createFromNodeAfter(lists.last(anchors)); - var endPoint = endRange.getEndPoint(); - range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset).select(); - }); - /** - * setting color - * - * @param {Object} sObjColor color code - * @param {String} sObjColor.foreColor foreground color - * @param {String} sObjColor.backColor background color - */ - this.color = this.wrapCommand(function (colorInfo) { - var foreColor = colorInfo.foreColor; - var backColor = colorInfo.backColor; - if (foreColor) { - document.execCommand('foreColor', false, foreColor); - } - if (backColor) { - document.execCommand('backColor', false, backColor); - } - }); - /** - * Set foreground color - * - * @param {String} colorCode foreground color code - */ - this.foreColor = this.wrapCommand(function (colorInfo) { - document.execCommand('styleWithCSS', false, true); - document.execCommand('foreColor', false, colorInfo); - }); - /** - * insert Table - * - * @param {String} dimension of table (ex : "5x5") - */ - this.insertTable = this.wrapCommand(function (dim) { - var dimension = dim.split('x'); - var rng = _this.createRange().deleteContents(); - rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options)); - }); - /** - * remove media object and Figure Elements if media object is img with Figure. - */ - this.removeMedia = this.wrapCommand(function () { - var $target = $$1(_this.restoreTarget()).parent(); - if ($target.parent('figure').length) { - $target.parent('figure').remove(); - } - else { - $target = $$1(_this.restoreTarget()).detach(); - } - _this.context.triggerEvent('media.delete', $target, _this.$editable); - }); - /** - * float me - * - * @param {String} value - */ - this.floatMe = this.wrapCommand(function (value) { - var $target = $$1(_this.restoreTarget()); - $target.toggleClass('note-float-left', value === 'left'); - $target.toggleClass('note-float-right', value === 'right'); - $target.css('float', value); - }); - /** - * resize overlay element - * @param {String} value - */ - this.resize = this.wrapCommand(function (value) { - var $target = $$1(_this.restoreTarget()); - $target.css({ - width: value * 100 + '%', - height: '' - }); - }); - } - Editor.prototype.initialize = function () { - var _this = this; - // bind custom events - this.$editable.on('keydown', function (event) { - if (event.keyCode === key.code.ENTER) { - _this.context.triggerEvent('enter', event); - } - _this.context.triggerEvent('keydown', event); - if (!event.isDefaultPrevented()) { - if (_this.options.shortcuts) { - _this.handleKeyMap(event); - } - else { - _this.preventDefaultEditableShortCuts(event); - } - } - if (_this.isLimited(1, event)) { - return false; - } - }).on('keyup', function (event) { - _this.context.triggerEvent('keyup', event); - }).on('focus', function (event) { - _this.context.triggerEvent('focus', event); - }).on('blur', function (event) { - _this.context.triggerEvent('blur', event); - }).on('mousedown', function (event) { - _this.context.triggerEvent('mousedown', event); - }).on('mouseup', function (event) { - _this.context.triggerEvent('mouseup', event); - }).on('scroll', function (event) { - _this.context.triggerEvent('scroll', event); - }).on('paste', function (event) { - _this.context.triggerEvent('paste', event); - }); - // init content before set event - this.$editable.html(dom.html(this.$note) || dom.emptyPara); - this.$editable.on(env.inputEventName, func.debounce(function () { - _this.context.triggerEvent('change', _this.$editable.html()); - }, 100)); - this.$editor.on('focusin', function (event) { - _this.context.triggerEvent('focusin', event); - }).on('focusout', function (event) { - _this.context.triggerEvent('focusout', event); - }); - if (!this.options.airMode) { - if (this.options.width) { - this.$editor.outerWidth(this.options.width); - } - if (this.options.height) { - this.$editable.outerHeight(this.options.height); - } - if (this.options.maxHeight) { - this.$editable.css('max-height', this.options.maxHeight); - } - if (this.options.minHeight) { - this.$editable.css('min-height', this.options.minHeight); - } - } - this.history.recordUndo(); - }; - Editor.prototype.destroy = function () { - this.$editable.off(); - }; - Editor.prototype.handleKeyMap = function (event) { - var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; - var keys = []; - if (event.metaKey) { - keys.push('CMD'); - } - if (event.ctrlKey && !event.altKey) { - keys.push('CTRL'); - } - if (event.shiftKey) { - keys.push('SHIFT'); - } - var keyName = key.nameFromCode[event.keyCode]; - if (keyName) { - keys.push(keyName); - } - var eventName = keyMap[keys.join('+')]; - if (eventName) { - if (this.context.invoke(eventName) !== false) { - event.preventDefault(); - } - } - else if (key.isEdit(event.keyCode)) { - this.afterCommand(); - } - }; - Editor.prototype.preventDefaultEditableShortCuts = function (event) { - // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) - if ((event.ctrlKey || event.metaKey) && - lists.contains([66, 73, 85], event.keyCode)) { - event.preventDefault(); - } - }; - Editor.prototype.isLimited = function (pad, event) { - pad = pad || 0; - if (typeof event !== 'undefined') { - if (key.isMove(event.keyCode) || - (event.ctrlKey || event.metaKey) || - lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) { - return false; - } - } - if (this.options.maxTextLength > 0) { - if ((this.$editable.text().length + pad) >= this.options.maxTextLength) { - return true; - } - } - return false; - }; - /** - * create range - * @return {WrappedRange} - */ - Editor.prototype.createRange = function () { - this.focus(); - return range.create(this.editable); - }; - /** - * saveRange - * - * save current range - * - * @param {Boolean} [thenCollapse=false] - */ - Editor.prototype.saveRange = function (thenCollapse) { - this.lastRange = this.createRange(); - if (thenCollapse) { - this.lastRange.collapse().select(); - } - }; - /** - * restoreRange - * - * restore lately range - */ - Editor.prototype.restoreRange = function () { - if (this.lastRange) { - this.lastRange.select(); - this.focus(); - } - }; - Editor.prototype.saveTarget = function (node) { - this.$editable.data('target', node); - }; - Editor.prototype.clearTarget = function () { - this.$editable.removeData('target'); - }; - Editor.prototype.restoreTarget = function () { - return this.$editable.data('target'); - }; - /** - * currentStyle - * - * current style - * @return {Object|Boolean} unfocus - */ - Editor.prototype.currentStyle = function () { - var rng = range.create(); - if (rng) { - rng = rng.normalize(); - } - return rng ? this.style.current(rng) : this.style.fromNode(this.$editable); - }; - /** - * style from node - * - * @param {jQuery} $node - * @return {Object} - */ - Editor.prototype.styleFromNode = function ($node) { - return this.style.fromNode($node); - }; - /** - * undo - */ - Editor.prototype.undo = function () { - this.context.triggerEvent('before.command', this.$editable.html()); - this.history.undo(); - this.context.triggerEvent('change', this.$editable.html()); - }; - /** - * redo - */ - Editor.prototype.redo = function () { - this.context.triggerEvent('before.command', this.$editable.html()); - this.history.redo(); - this.context.triggerEvent('change', this.$editable.html()); - }; - /** - * before command - */ - Editor.prototype.beforeCommand = function () { - this.context.triggerEvent('before.command', this.$editable.html()); - // keep focus on editable before command execution - this.focus(); - }; - /** - * after command - * @param {Boolean} isPreventTrigger - */ - Editor.prototype.afterCommand = function (isPreventTrigger) { - this.normalizeContent(); - this.history.recordUndo(); - if (!isPreventTrigger) { - this.context.triggerEvent('change', this.$editable.html()); - } - }; - /** - * handle tab key - */ - Editor.prototype.tab = function () { - var rng = this.createRange(); - if (rng.isCollapsed() && rng.isOnCell()) { - this.table.tab(rng); - } - else { - if (this.options.tabSize === 0) { - return false; - } - if (!this.isLimited(this.options.tabSize)) { - this.beforeCommand(); - this.typing.insertTab(rng, this.options.tabSize); - this.afterCommand(); - } - } - }; - /** - * handle shift+tab key - */ - Editor.prototype.untab = function () { - var rng = this.createRange(); - if (rng.isCollapsed() && rng.isOnCell()) { - this.table.tab(rng, true); - } - else { - if (this.options.tabSize === 0) { - return false; - } - } - }; - /** - * run given function between beforeCommand and afterCommand - */ - Editor.prototype.wrapCommand = function (fn) { - var _this = this; - return function () { - _this.beforeCommand(); - fn.apply(_this, arguments); - _this.afterCommand(); - }; - }; - /** - * insert image - * - * @param {String} src - * @param {String|Function} param - * @return {Promise} - */ - Editor.prototype.insertImage = function (src, param) { - var _this = this; - return createImage(src, param).then(function ($image) { - _this.beforeCommand(); - if (typeof param === 'function') { - param($image); - } - else { - if (typeof param === 'string') { - $image.attr('data-filename', param); - } - $image.css('width', Math.min(_this.$editable.width(), $image.width())); - } - $image.show(); - range.create(_this.editable).insertNode($image[0]); - range.createFromNodeAfter($image[0]).select(); - _this.afterCommand(); - }).fail(function (e) { - _this.context.triggerEvent('image.upload.error', e); - }); - }; - /** - * insertImages - * @param {File[]} files - */ - Editor.prototype.insertImages = function (files) { - var _this = this; - $$1.each(files, function (idx, file) { - var filename = file.name; - if (_this.options.maximumImageFileSize && _this.options.maximumImageFileSize < file.size) { - _this.context.triggerEvent('image.upload.error', _this.lang.image.maximumFileSizeError); - } - else { - readFileAsDataURL(file).then(function (dataURL) { - return _this.insertImage(dataURL, filename); - }).fail(function () { - _this.context.triggerEvent('image.upload.error'); - }); - } - }); - }; - /** - * insertImagesOrCallback - * @param {File[]} files - */ - Editor.prototype.insertImagesOrCallback = function (files) { - var callbacks = this.options.callbacks; - // If onImageUpload this.options setted - if (callbacks.onImageUpload) { - this.context.triggerEvent('image.upload', files); - // else insert Image as dataURL - } - else { - this.insertImages(files); - } - }; - /** - * return selected plain text - * @return {String} text - */ - Editor.prototype.getSelectedText = function () { - var rng = this.createRange(); - // if range on anchor, expand range with anchor - if (rng.isOnAnchor()) { - rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor)); - } - return rng.toString(); - }; - Editor.prototype.onFormatBlock = function (tagName, $target) { - // [workaround] for MSIE, IE need `<` - tagName = env.isMSIE ? '<' + tagName + '>' : tagName; - document.execCommand('FormatBlock', false, tagName); - // support custom class - if ($target && $target.length) { - var className = $target[0].className || ''; - if (className) { - var currentRange = this.createRange(); - var $parent = $$1([currentRange.sc, currentRange.ec]).closest(tagName); - $parent.addClass(className); - } - } - }; - Editor.prototype.formatPara = function () { - this.formatBlock('P'); - }; - Editor.prototype.fontStyling = function (target, value) { - var rng = this.createRange(); - if (rng) { - var spans = this.style.styleNodes(rng); - $$1(spans).css(target, value); - // [workaround] added styled bogus span for style - // - also bogus character needed for cursor position - if (rng.isCollapsed()) { - var firstSpan = lists.head(spans); - if (firstSpan && !dom.nodeLength(firstSpan)) { - firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; - range.createFromNodeAfter(firstSpan.firstChild).select(); - this.$editable.data(KEY_BOGUS, firstSpan); - } - } - } - }; - /** - * unlink - * - * @type command - */ - Editor.prototype.unlink = function () { - var rng = this.createRange(); - if (rng.isOnAnchor()) { - var anchor = dom.ancestor(rng.sc, dom.isAnchor); - rng = range.createFromNode(anchor); - rng.select(); - this.beforeCommand(); - document.execCommand('unlink'); - this.afterCommand(); - } - }; - /** - * returns link info - * - * @return {Object} - * @return {WrappedRange} return.range - * @return {String} return.text - * @return {Boolean} [return.isNewWindow=true] - * @return {String} [return.url=""] - */ - Editor.prototype.getLinkInfo = function () { - var rng = this.createRange().expand(dom.isAnchor); - // Get the first anchor on range(for edit). - var $anchor = $$1(lists.head(rng.nodes(dom.isAnchor))); - var linkInfo = { - range: rng, - text: rng.toString(), - url: $anchor.length ? $anchor.attr('href') : '' - }; - // Define isNewWindow when anchor exists. - if ($anchor.length) { - linkInfo.isNewWindow = $anchor.attr('target') === '_blank'; - } - return linkInfo; - }; - Editor.prototype.addRow = function (position) { - var rng = this.createRange(this.$editable); - if (rng.isCollapsed() && rng.isOnCell()) { - this.beforeCommand(); - this.table.addRow(rng, position); - this.afterCommand(); - } - }; - Editor.prototype.addCol = function (position) { - var rng = this.createRange(this.$editable); - if (rng.isCollapsed() && rng.isOnCell()) { - this.beforeCommand(); - this.table.addCol(rng, position); - this.afterCommand(); - } - }; - Editor.prototype.deleteRow = function () { - var rng = this.createRange(this.$editable); - if (rng.isCollapsed() && rng.isOnCell()) { - this.beforeCommand(); - this.table.deleteRow(rng); - this.afterCommand(); - } - }; - Editor.prototype.deleteCol = function () { - var rng = this.createRange(this.$editable); - if (rng.isCollapsed() && rng.isOnCell()) { - this.beforeCommand(); - this.table.deleteCol(rng); - this.afterCommand(); - } - }; - Editor.prototype.deleteTable = function () { - var rng = this.createRange(this.$editable); - if (rng.isCollapsed() && rng.isOnCell()) { - this.beforeCommand(); - this.table.deleteTable(rng); - this.afterCommand(); - } - }; - /** - * @param {Position} pos - * @param {jQuery} $target - target element - * @param {Boolean} [bKeepRatio] - keep ratio - */ - Editor.prototype.resizeTo = function (pos, $target, bKeepRatio) { - var imageSize; - if (bKeepRatio) { - var newRatio = pos.y / pos.x; - var ratio = $target.data('ratio'); - imageSize = { - width: ratio > newRatio ? pos.x : pos.y / ratio, - height: ratio > newRatio ? pos.x * ratio : pos.y - }; - } - else { - imageSize = { - width: pos.x, - height: pos.y - }; - } - $target.css(imageSize); - }; - /** - * returns whether editable area has focus or not. - */ - Editor.prototype.hasFocus = function () { - return this.$editable.is(':focus'); - }; - /** - * set focus - */ - Editor.prototype.focus = function () { - // [workaround] Screen will move when page is scolled in IE. - // - do focus when not focused - if (!this.hasFocus()) { - this.$editable.focus(); - } - }; - /** - * returns whether contents is empty or not. - * @return {Boolean} - */ - Editor.prototype.isEmpty = function () { - return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html(); - }; - /** - * Removes all contents and restores the editable instance to an _emptyPara_. - */ - Editor.prototype.empty = function () { - this.context.invoke('code', dom.emptyPara); - }; - /** - * normalize content - */ - Editor.prototype.normalizeContent = function () { - this.$editable[0].normalize(); - }; - return Editor; -}()); - -var Clipboard = /** @class */ (function () { - function Clipboard(context) { - this.context = context; - this.$editable = context.layoutInfo.editable; - } - Clipboard.prototype.initialize = function () { - this.$editable.on('paste', this.pasteByEvent.bind(this)); - }; - /** - * paste by clipboard event - * - * @param {Event} event - */ - Clipboard.prototype.pasteByEvent = function (event) { - var clipboardData = event.originalEvent.clipboardData; - if (clipboardData && clipboardData.items && clipboardData.items.length) { - var item = lists.head(clipboardData.items); - if (item.kind === 'file' && item.type.indexOf('image/') !== -1) { - this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]); - } - this.context.invoke('editor.afterCommand'); - } - }; - return Clipboard; -}()); - -var Dropzone = /** @class */ (function () { - function Dropzone(context) { - this.context = context; - this.$eventListener = $$1(document); - this.$editor = context.layoutInfo.editor; - this.$editable = context.layoutInfo.editable; - this.options = context.options; - this.lang = this.options.langInfo; - this.documentEventHandlers = {}; - this.$dropzone = $$1([ - '<div class="note-dropzone">', - ' <div class="note-dropzone-message"/>', - '</div>' - ].join('')).prependTo(this.$editor); - } - /** - * attach Drag and Drop Events - */ - Dropzone.prototype.initialize = function () { - if (this.options.disableDragAndDrop) { - // prevent default drop event - this.documentEventHandlers.onDrop = function (e) { - e.preventDefault(); - }; - // do not consider outside of dropzone - this.$eventListener = this.$dropzone; - this.$eventListener.on('drop', this.documentEventHandlers.onDrop); - } - else { - this.attachDragAndDropEvent(); - } - }; - /** - * attach Drag and Drop Events - */ - Dropzone.prototype.attachDragAndDropEvent = function () { - var _this = this; - var collection = $$1(); - var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message'); - this.documentEventHandlers.onDragenter = function (e) { - var isCodeview = _this.context.invoke('codeview.isActivated'); - var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0; - if (!isCodeview && !collection.length && hasEditorSize) { - _this.$editor.addClass('dragover'); - _this.$dropzone.width(_this.$editor.width()); - _this.$dropzone.height(_this.$editor.height()); - $dropzoneMessage.text(_this.lang.image.dragImageHere); - } - collection = collection.add(e.target); - }; - this.documentEventHandlers.onDragleave = function (e) { - collection = collection.not(e.target); - if (!collection.length) { - _this.$editor.removeClass('dragover'); - } - }; - this.documentEventHandlers.onDrop = function () { - collection = $$1(); - _this.$editor.removeClass('dragover'); - }; - // show dropzone on dragenter when dragging a object to document - // -but only if the editor is visible, i.e. has a positive width and height - this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter) - .on('dragleave', this.documentEventHandlers.onDragleave) - .on('drop', this.documentEventHandlers.onDrop); - // change dropzone's message on hover. - this.$dropzone.on('dragenter', function () { - _this.$dropzone.addClass('hover'); - $dropzoneMessage.text(_this.lang.image.dropImage); - }).on('dragleave', function () { - _this.$dropzone.removeClass('hover'); - $dropzoneMessage.text(_this.lang.image.dragImageHere); - }); - // attach dropImage - this.$dropzone.on('drop', function (event) { - var dataTransfer = event.originalEvent.dataTransfer; - // stop the browser from opening the dropped content - event.preventDefault(); - if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { - _this.$editable.focus(); - _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files); - } - else { - $$1.each(dataTransfer.types, function (idx, type) { - var content = dataTransfer.getData(type); - if (type.toLowerCase().indexOf('text') > -1) { - _this.context.invoke('editor.pasteHTML', content); - } - else { - $$1(content).each(function (idx, item) { - _this.context.invoke('editor.insertNode', item); - }); - } - }); - } - }).on('dragover', false); // prevent default dragover event - }; - Dropzone.prototype.destroy = function () { - var _this = this; - Object.keys(this.documentEventHandlers).forEach(function (key) { - _this.$eventListener.off(key.substr(2).toLowerCase(), _this.documentEventHandlers[key]); - }); - this.documentEventHandlers = {}; - }; - return Dropzone; -}()); - -var CodeMirror; -if (env.hasCodeMirror) { - if (env.isSupportAmd) { - require(['codemirror'], function (cm) { - CodeMirror = cm; - }); - } - else { - CodeMirror = window.CodeMirror; - } -} -/** - * @class Codeview - */ -var CodeView = /** @class */ (function () { - function CodeView(context) { - this.context = context; - this.$editor = context.layoutInfo.editor; - this.$editable = context.layoutInfo.editable; - this.$codable = context.layoutInfo.codable; - this.options = context.options; - } - CodeView.prototype.sync = function () { - var isCodeview = this.isActivated(); - if (isCodeview && env.hasCodeMirror) { - this.$codable.data('cmEditor').save(); - } - }; - /** - * @return {Boolean} - */ - CodeView.prototype.isActivated = function () { - return this.$editor.hasClass('codeview'); - }; - /** - * toggle codeview - */ - CodeView.prototype.toggle = function () { - if (this.isActivated()) { - this.deactivate(); - } - else { - this.activate(); - } - this.context.triggerEvent('codeview.toggled'); - }; - /** - * activate code view - */ - CodeView.prototype.activate = function () { - var _this = this; - this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml)); - this.$codable.height(this.$editable.height()); - this.context.invoke('toolbar.updateCodeview', true); - this.$editor.addClass('codeview'); - this.$codable.focus(); - // activate CodeMirror as codable - if (env.hasCodeMirror) { - var cmEditor_1 = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); - // CodeMirror TernServer - if (this.options.codemirror.tern) { - var server_1 = new CodeMirror.TernServer(this.options.codemirror.tern); - cmEditor_1.ternServer = server_1; - cmEditor_1.on('cursorActivity', function (cm) { - server_1.updateArgHints(cm); - }); - } - cmEditor_1.on('blur', function (event) { - _this.context.triggerEvent('blur.codeview', cmEditor_1.getValue(), event); - }); - // CodeMirror hasn't Padding. - cmEditor_1.setSize(null, this.$editable.outerHeight()); - this.$codable.data('cmEditor', cmEditor_1); - } - else { - this.$codable.on('blur', function (event) { - _this.context.triggerEvent('blur.codeview', _this.$codable.val(), event); - }); - } - }; - /** - * deactivate code view - */ - CodeView.prototype.deactivate = function () { - // deactivate CodeMirror as codable - if (env.hasCodeMirror) { - var cmEditor = this.$codable.data('cmEditor'); - this.$codable.val(cmEditor.getValue()); - cmEditor.toTextArea(); - } - var value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara; - var isChange = this.$editable.html() !== value; - this.$editable.html(value); - this.$editable.height(this.options.height ? this.$codable.height() : 'auto'); - this.$editor.removeClass('codeview'); - if (isChange) { - this.context.triggerEvent('change', this.$editable.html(), this.$editable); - } - this.$editable.focus(); - this.context.invoke('toolbar.updateCodeview', false); - }; - CodeView.prototype.destroy = function () { - if (this.isActivated()) { - this.deactivate(); - } - }; - return CodeView; -}()); - -var EDITABLE_PADDING = 24; -var Statusbar = /** @class */ (function () { - function Statusbar(context) { - this.$document = $$1(document); - this.$statusbar = context.layoutInfo.statusbar; - this.$editable = context.layoutInfo.editable; - this.options = context.options; - } - Statusbar.prototype.initialize = function () { - var _this = this; - if (this.options.airMode || this.options.disableResizeEditor) { - this.destroy(); - return; - } - this.$statusbar.on('mousedown', function (event) { - event.preventDefault(); - event.stopPropagation(); - var editableTop = _this.$editable.offset().top - _this.$document.scrollTop(); - var onMouseMove = function (event) { - var height = event.clientY - (editableTop + EDITABLE_PADDING); - height = (_this.options.minheight > 0) ? Math.max(height, _this.options.minheight) : height; - height = (_this.options.maxHeight > 0) ? Math.min(height, _this.options.maxHeight) : height; - _this.$editable.height(height); - }; - _this.$document.on('mousemove', onMouseMove).one('mouseup', function () { - _this.$document.off('mousemove', onMouseMove); - }); - }); - }; - Statusbar.prototype.destroy = function () { - this.$statusbar.off(); - this.$statusbar.addClass('locked'); - }; - return Statusbar; -}()); - -var Fullscreen = /** @class */ (function () { - function Fullscreen(context) { - var _this = this; - this.context = context; - this.$editor = context.layoutInfo.editor; - this.$toolbar = context.layoutInfo.toolbar; - this.$editable = context.layoutInfo.editable; - this.$codable = context.layoutInfo.codable; - this.$window = $$1(window); - this.$scrollbar = $$1('html, body'); - this.onResize = function () { - _this.resizeTo({ - h: _this.$window.height() - _this.$toolbar.outerHeight() - }); - }; - } - Fullscreen.prototype.resizeTo = function (size) { - this.$editable.css('height', size.h); - this.$codable.css('height', size.h); - if (this.$codable.data('cmeditor')) { - this.$codable.data('cmeditor').setsize(null, size.h); - } - }; - /** - * toggle fullscreen - */ - Fullscreen.prototype.toggle = function () { - this.$editor.toggleClass('fullscreen'); - if (this.isFullscreen()) { - this.$editable.data('orgHeight', this.$editable.css('height')); - this.$window.on('resize', this.onResize).trigger('resize'); - this.$scrollbar.css('overflow', 'hidden'); - } - else { - this.$window.off('resize', this.onResize); - this.resizeTo({ h: this.$editable.data('orgHeight') }); - this.$scrollbar.css('overflow', 'visible'); - } - this.context.invoke('toolbar.updateFullscreen', this.isFullscreen()); - }; - Fullscreen.prototype.isFullscreen = function () { - return this.$editor.hasClass('fullscreen'); - }; - return Fullscreen; -}()); - -var Handle = /** @class */ (function () { - function Handle(context) { - var _this = this; - this.context = context; - this.$document = $$1(document); - this.$editingArea = context.layoutInfo.editingArea; - this.options = context.options; - this.lang = this.options.langInfo; - this.events = { - 'summernote.mousedown': function (we, e) { - if (_this.update(e.target)) { - e.preventDefault(); - } - }, - 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () { - _this.update(); - }, - 'summernote.disable': function () { - _this.hide(); - }, - 'summernote.codeview.toggled': function () { - _this.update(); - } - }; - } - Handle.prototype.initialize = function () { - var _this = this; - this.$handle = $$1([ - '<div class="note-handle">', - '<div class="note-control-selection">', - '<div class="note-control-selection-bg"></div>', - '<div class="note-control-holder note-control-nw"></div>', - '<div class="note-control-holder note-control-ne"></div>', - '<div class="note-control-holder note-control-sw"></div>', - '<div class="', - (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'), - ' note-control-se"></div>', - (this.options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>'), - '</div>', - '</div>' - ].join('')).prependTo(this.$editingArea); - this.$handle.on('mousedown', function (event) { - if (dom.isControlSizing(event.target)) { - event.preventDefault(); - event.stopPropagation(); - var $target_1 = _this.$handle.find('.note-control-selection').data('target'); - var posStart_1 = $target_1.offset(); - var scrollTop_1 = _this.$document.scrollTop(); - var onMouseMove_1 = function (event) { - _this.context.invoke('editor.resizeTo', { - x: event.clientX - posStart_1.left, - y: event.clientY - (posStart_1.top - scrollTop_1) - }, $target_1, !event.shiftKey); - _this.update($target_1[0]); - }; - _this.$document - .on('mousemove', onMouseMove_1) - .one('mouseup', function (e) { - e.preventDefault(); - _this.$document.off('mousemove', onMouseMove_1); - _this.context.invoke('editor.afterCommand'); - }); - if (!$target_1.data('ratio')) { - $target_1.data('ratio', $target_1.height() / $target_1.width()); - } - } - }); - // Listen for scrolling on the handle overlay. - this.$handle.on('wheel', function (e) { - e.preventDefault(); - _this.update(); - }); - }; - Handle.prototype.destroy = function () { - this.$handle.remove(); - }; - Handle.prototype.update = function (target) { - if (this.context.isDisabled()) { - return false; - } - var isImage = dom.isImg(target); - var $selection = this.$handle.find('.note-control-selection'); - this.context.invoke('imagePopover.update', target); - if (isImage) { - var $image = $$1(target); - var position = $image.position(); - var pos = { - left: position.left + parseInt($image.css('marginLeft'), 10), - top: position.top + parseInt($image.css('marginTop'), 10) - }; - // exclude margin - var imageSize = { - w: $image.outerWidth(false), - h: $image.outerHeight(false) - }; - $selection.css({ - display: 'block', - left: pos.left, - top: pos.top, - width: imageSize.w, - height: imageSize.h - }).data('target', $image); // save current image element. - var origImageObj = new Image(); - origImageObj.src = $image.attr('src'); - var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')'; - $selection.find('.note-control-selection-info').text(sizingText); - this.context.invoke('editor.saveTarget', target); - } - else { - this.hide(); - } - return isImage; - }; - /** - * hide - * - * @param {jQuery} $handle - */ - Handle.prototype.hide = function () { - this.context.invoke('editor.clearTarget'); - this.$handle.children().hide(); - }; - return Handle; -}()); - -var defaultScheme = 'http://'; -var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; -var AutoLink = /** @class */ (function () { - function AutoLink(context) { - var _this = this; - this.context = context; - this.events = { - 'summernote.keyup': function (we, e) { - if (!e.isDefaultPrevented()) { - _this.handleKeyup(e); - } - }, - 'summernote.keydown': function (we, e) { - _this.handleKeydown(e); - } - }; - } - AutoLink.prototype.initialize = function () { - this.lastWordRange = null; - }; - AutoLink.prototype.destroy = function () { - this.lastWordRange = null; - }; - AutoLink.prototype.replace = function () { - if (!this.lastWordRange) { - return; - } - var keyword = this.lastWordRange.toString(); - var match = keyword.match(linkPattern); - if (match && (match[1] || match[2])) { - var link = match[1] ? keyword : defaultScheme + keyword; - var node = $$1('<a />').html(keyword).attr('href', link)[0]; - this.lastWordRange.insertNode(node); - this.lastWordRange = null; - this.context.invoke('editor.focus'); - } - }; - AutoLink.prototype.handleKeydown = function (e) { - if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { - var wordRange = this.context.invoke('editor.createRange').getWordRange(); - this.lastWordRange = wordRange; - } - }; - AutoLink.prototype.handleKeyup = function (e) { - if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { - this.replace(); - } - }; - return AutoLink; -}()); - -/** - * textarea auto sync. - */ -var AutoSync = /** @class */ (function () { - function AutoSync(context) { - var _this = this; - this.$note = context.layoutInfo.note; - this.events = { - 'summernote.change': function () { - _this.$note.val(context.invoke('code')); - } - }; - } - AutoSync.prototype.shouldInitialize = function () { - return dom.isTextarea(this.$note[0]); - }; - return AutoSync; -}()); - -var Placeholder = /** @class */ (function () { - function Placeholder(context) { - var _this = this; - this.context = context; - this.$editingArea = context.layoutInfo.editingArea; - this.options = context.options; - this.events = { - 'summernote.init summernote.change': function () { - _this.update(); - }, - 'summernote.codeview.toggled': function () { - _this.update(); - } - }; - } - Placeholder.prototype.shouldInitialize = function () { - return !!this.options.placeholder; - }; - Placeholder.prototype.initialize = function () { - var _this = this; - this.$placeholder = $$1('<div class="note-placeholder">'); - this.$placeholder.on('click', function () { - _this.context.invoke('focus'); - }).text(this.options.placeholder).prependTo(this.$editingArea); - this.update(); - }; - Placeholder.prototype.destroy = function () { - this.$placeholder.remove(); - }; - Placeholder.prototype.update = function () { - var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty'); - this.$placeholder.toggle(isShow); - }; - return Placeholder; -}()); - -var Buttons = /** @class */ (function () { - function Buttons(context) { - this.ui = $$1.summernote.ui; - this.context = context; - this.$toolbar = context.layoutInfo.toolbar; - this.options = context.options; - this.lang = this.options.langInfo; - this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']); - } - Buttons.prototype.representShortcut = function (editorMethod) { - var shortcut = this.invertedKeyMap[editorMethod]; - if (!this.options.shortcuts || !shortcut) { - return ''; - } - if (env.isMac) { - shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); - } - shortcut = shortcut.replace('BACKSLASH', '\\') - .replace('SLASH', '/') - .replace('LEFTBRACKET', '[') - .replace('RIGHTBRACKET', ']'); - return ' (' + shortcut + ')'; - }; - Buttons.prototype.button = function (o) { - if (!this.options.tooltip && o.tooltip) { - delete o.tooltip; - } - o.container = this.options.container; - return this.ui.button(o); - }; - Buttons.prototype.initialize = function () { - this.addToolbarButtons(); - this.addImagePopoverButtons(); - this.addLinkPopoverButtons(); - this.addTablePopoverButtons(); - this.fontInstalledMap = {}; - }; - Buttons.prototype.destroy = function () { - delete this.fontInstalledMap; - }; - Buttons.prototype.isFontInstalled = function (name) { - if (!this.fontInstalledMap.hasOwnProperty(name)) { - this.fontInstalledMap[name] = env.isFontInstalled(name) || - lists.contains(this.options.fontNamesIgnoreCheck, name); - } - return this.fontInstalledMap[name]; - }; - Buttons.prototype.isFontDeservedToAdd = function (name) { - var genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy']; - name = name.toLowerCase(); - return ((name !== '') && this.isFontInstalled(name) && ($$1.inArray(name, genericFamilies) === -1)); - }; - Buttons.prototype.addToolbarButtons = function () { - var _this = this; - this.context.memo('button.style', function () { - return _this.ui.buttonGroup([ - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.magic), _this.options), - tooltip: _this.lang.style.style, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdown({ - className: 'dropdown-style', - items: _this.options.styleTags, - title: _this.lang.style.style, - template: function (item) { - if (typeof item === 'string') { - item = { tag: item, title: (_this.lang.style.hasOwnProperty(item) ? _this.lang.style[item] : item) }; - } - var tag = item.tag; - var title = item.title; - var style = item.style ? ' style="' + item.style + '" ' : ''; - var className = item.className ? ' class="' + item.className + '"' : ''; - return '<' + tag + style + className + '>' + title + '</' + tag + '>'; - }, - click: _this.context.createInvokeHandler('editor.formatBlock') - }) - ]).render(); - }); - var _loop_1 = function (styleIdx, styleLen) { - var item = this_1.options.styleTags[styleIdx]; - this_1.context.memo('button.style.' + item, function () { - return _this.button({ - className: 'note-btn-style-' + item, - contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>', - tooltip: _this.lang.style[item], - click: _this.context.createInvokeHandler('editor.formatBlock') - }).render(); - }); - }; - var this_1 = this; - for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) { - _loop_1(styleIdx, styleLen); - } - this.context.memo('button.bold', function () { - return _this.button({ - className: 'note-btn-bold', - contents: _this.ui.icon(_this.options.icons.bold), - tooltip: _this.lang.font.bold + _this.representShortcut('bold'), - click: _this.context.createInvokeHandlerAndUpdateState('editor.bold') - }).render(); - }); - this.context.memo('button.italic', function () { - return _this.button({ - className: 'note-btn-italic', - contents: _this.ui.icon(_this.options.icons.italic), - tooltip: _this.lang.font.italic + _this.representShortcut('italic'), - click: _this.context.createInvokeHandlerAndUpdateState('editor.italic') - }).render(); - }); - this.context.memo('button.underline', function () { - return _this.button({ - className: 'note-btn-underline', - contents: _this.ui.icon(_this.options.icons.underline), - tooltip: _this.lang.font.underline + _this.representShortcut('underline'), - click: _this.context.createInvokeHandlerAndUpdateState('editor.underline') - }).render(); - }); - this.context.memo('button.clear', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.eraser), - tooltip: _this.lang.font.clear + _this.representShortcut('removeFormat'), - click: _this.context.createInvokeHandler('editor.removeFormat') - }).render(); - }); - this.context.memo('button.strikethrough', function () { - return _this.button({ - className: 'note-btn-strikethrough', - contents: _this.ui.icon(_this.options.icons.strikethrough), - tooltip: _this.lang.font.strikethrough + _this.representShortcut('strikethrough'), - click: _this.context.createInvokeHandlerAndUpdateState('editor.strikethrough') - }).render(); - }); - this.context.memo('button.superscript', function () { - return _this.button({ - className: 'note-btn-superscript', - contents: _this.ui.icon(_this.options.icons.superscript), - tooltip: _this.lang.font.superscript, - click: _this.context.createInvokeHandlerAndUpdateState('editor.superscript') - }).render(); - }); - this.context.memo('button.subscript', function () { - return _this.button({ - className: 'note-btn-subscript', - contents: _this.ui.icon(_this.options.icons.subscript), - tooltip: _this.lang.font.subscript, - click: _this.context.createInvokeHandlerAndUpdateState('editor.subscript') - }).render(); - }); - this.context.memo('button.fontname', function () { - var styleInfo = _this.context.invoke('editor.currentStyle'); - // Add 'default' fonts into the fontnames array if not exist - $$1.each(styleInfo['font-family'].split(','), function (idx, fontname) { - fontname = fontname.trim().replace(/['"]+/g, ''); - if (_this.isFontDeservedToAdd(fontname)) { - if ($$1.inArray(fontname, _this.options.fontNames) === -1) { - _this.options.fontNames.push(fontname); - } - } - }); - return _this.ui.buttonGroup([ - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents('<span class="note-current-fontname"/>', _this.options), - tooltip: _this.lang.font.name, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdownCheck({ - className: 'dropdown-fontname', - checkClassName: _this.options.icons.menuCheck, - items: _this.options.fontNames.filter(_this.isFontInstalled.bind(_this)), - title: _this.lang.font.name, - template: function (item) { - return '<span style="font-family: \'' + item + '\'">' + item + '</span>'; - }, - click: _this.context.createInvokeHandlerAndUpdateState('editor.fontName') - }) - ]).render(); - }); - this.context.memo('button.fontsize', function () { - return _this.ui.buttonGroup([ - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>', _this.options), - tooltip: _this.lang.font.size, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdownCheck({ - className: 'dropdown-fontsize', - checkClassName: _this.options.icons.menuCheck, - items: _this.options.fontSizes, - title: _this.lang.font.size, - click: _this.context.createInvokeHandlerAndUpdateState('editor.fontSize') - }) - ]).render(); - }); - this.context.memo('button.color', function () { - return _this.ui.buttonGroup({ - className: 'note-color', - children: [ - _this.button({ - className: 'note-current-color-button', - contents: _this.ui.icon(_this.options.icons.font + ' note-recent-color'), - tooltip: _this.lang.color.recent, - click: function (e) { - var $button = $$1(e.currentTarget); - _this.context.invoke('editor.color', { - backColor: $button.attr('data-backColor'), - foreColor: $button.attr('data-foreColor') - }); - }, - callback: function ($button) { - var $recentColor = $button.find('.note-recent-color'); - $recentColor.css('background-color', '#FFFF00'); - $button.attr('data-backColor', '#FFFF00'); - } - }), - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents('', _this.options), - tooltip: _this.lang.color.more, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdown({ - items: [ - '<div class="note-palette">', - ' <div class="note-palette-title">' + _this.lang.color.background + '</div>', - ' <div>', - ' <button type="button" class="note-color-reset btn btn-light" data-event="backColor" data-value="inherit">', - _this.lang.color.transparent, - ' </button>', - ' </div>', - ' <div class="note-holder" data-event="backColor"/>', - '</div>', - '<div class="note-palette">', - ' <div class="note-palette-title">' + _this.lang.color.foreground + '</div>', - ' <div>', - ' <button type="button" class="note-color-reset btn btn-light" data-event="removeFormat" data-value="foreColor">', - _this.lang.color.resetToDefault, - ' </button>', - ' </div>', - ' <div class="note-holder" data-event="foreColor"/>', - '</div>' - ].join(''), - callback: function ($dropdown) { - $dropdown.find('.note-holder').each(function (idx, item) { - var $holder = $$1(item); - $holder.append(_this.ui.palette({ - colors: _this.options.colors, - colorsName: _this.options.colorsName, - eventName: $holder.data('event'), - container: _this.options.container, - tooltip: _this.options.tooltip - }).render()); - }); - }, - click: function (event) { - var $button = $$1(event.target); - var eventName = $button.data('event'); - var value = $button.data('value'); - if (eventName && value) { - var key = eventName === 'backColor' ? 'background-color' : 'color'; - var $color = $button.closest('.note-color').find('.note-recent-color'); - var $currentButton = $button.closest('.note-color').find('.note-current-color-button'); - $color.css(key, value); - $currentButton.attr('data-' + eventName, value); - _this.context.invoke('editor.' + eventName, value); - } - } - }) - ] - }).render(); - }); - this.context.memo('button.ul', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.unorderedlist), - tooltip: _this.lang.lists.unordered + _this.representShortcut('insertUnorderedList'), - click: _this.context.createInvokeHandler('editor.insertUnorderedList') - }).render(); - }); - this.context.memo('button.ol', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.orderedlist), - tooltip: _this.lang.lists.ordered + _this.representShortcut('insertOrderedList'), - click: _this.context.createInvokeHandler('editor.insertOrderedList') - }).render(); - }); - var justifyLeft = this.button({ - contents: this.ui.icon(this.options.icons.alignLeft), - tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'), - click: this.context.createInvokeHandler('editor.justifyLeft') - }); - var justifyCenter = this.button({ - contents: this.ui.icon(this.options.icons.alignCenter), - tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'), - click: this.context.createInvokeHandler('editor.justifyCenter') - }); - var justifyRight = this.button({ - contents: this.ui.icon(this.options.icons.alignRight), - tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'), - click: this.context.createInvokeHandler('editor.justifyRight') - }); - var justifyFull = this.button({ - contents: this.ui.icon(this.options.icons.alignJustify), - tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'), - click: this.context.createInvokeHandler('editor.justifyFull') - }); - var outdent = this.button({ - contents: this.ui.icon(this.options.icons.outdent), - tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'), - click: this.context.createInvokeHandler('editor.outdent') - }); - var indent = this.button({ - contents: this.ui.icon(this.options.icons.indent), - tooltip: this.lang.paragraph.indent + this.representShortcut('indent'), - click: this.context.createInvokeHandler('editor.indent') - }); - this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); - this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); - this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); - this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); - this.context.memo('button.outdent', func.invoke(outdent, 'render')); - this.context.memo('button.indent', func.invoke(indent, 'render')); - this.context.memo('button.paragraph', function () { - return _this.ui.buttonGroup([ - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.alignLeft), _this.options), - tooltip: _this.lang.paragraph.paragraph, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdown([ - _this.ui.buttonGroup({ - className: 'note-align', - children: [justifyLeft, justifyCenter, justifyRight, justifyFull] - }), - _this.ui.buttonGroup({ - className: 'note-list', - children: [outdent, indent] - }) - ]) - ]).render(); - }); - this.context.memo('button.height', function () { - return _this.ui.buttonGroup([ - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.textHeight), _this.options), - tooltip: _this.lang.font.height, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdownCheck({ - items: _this.options.lineHeights, - checkClassName: _this.options.icons.menuCheck, - className: 'dropdown-line-height', - title: _this.lang.font.height, - click: _this.context.createInvokeHandler('editor.lineHeight') - }) - ]).render(); - }); - this.context.memo('button.table', function () { - return _this.ui.buttonGroup([ - _this.button({ - className: 'dropdown-toggle', - contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.table), _this.options), - tooltip: _this.lang.table.table, - data: { - toggle: 'dropdown' - } - }), - _this.ui.dropdown({ - title: _this.lang.table.table, - className: 'note-table', - items: [ - '<div class="note-dimension-picker">', - ' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>', - ' <div class="note-dimension-picker-highlighted"/>', - ' <div class="note-dimension-picker-unhighlighted"/>', - '</div>', - '<div class="note-dimension-display">1 x 1</div>' - ].join('') - }) - ], { - callback: function ($node) { - var $catcher = $node.find('.note-dimension-picker-mousecatcher'); - $catcher.css({ - width: _this.options.insertTableMaxSize.col + 'em', - height: _this.options.insertTableMaxSize.row + 'em' - }).mousedown(_this.context.createInvokeHandler('editor.insertTable')) - .on('mousemove', _this.tableMoveHandler.bind(_this)); - } - }).render(); - }); - this.context.memo('button.link', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.link), - tooltip: _this.lang.link.link + _this.representShortcut('linkDialog.show'), - click: _this.context.createInvokeHandler('linkDialog.show') - }).render(); - }); - this.context.memo('button.picture', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.picture), - tooltip: _this.lang.image.image, - click: _this.context.createInvokeHandler('imageDialog.show') - }).render(); - }); - this.context.memo('button.video', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.video), - tooltip: _this.lang.video.video, - click: _this.context.createInvokeHandler('videoDialog.show') - }).render(); - }); - this.context.memo('button.hr', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.minus), - tooltip: _this.lang.hr.insert + _this.representShortcut('insertHorizontalRule'), - click: _this.context.createInvokeHandler('editor.insertHorizontalRule') - }).render(); - }); - this.context.memo('button.fullscreen', function () { - return _this.button({ - className: 'btn-fullscreen', - contents: _this.ui.icon(_this.options.icons.arrowsAlt), - tooltip: _this.lang.options.fullscreen, - click: _this.context.createInvokeHandler('fullscreen.toggle') - }).render(); - }); - this.context.memo('button.codeview', function () { - return _this.button({ - className: 'btn-codeview', - contents: _this.ui.icon(_this.options.icons.code), - tooltip: _this.lang.options.codeview, - click: _this.context.createInvokeHandler('codeview.toggle') - }).render(); - }); - this.context.memo('button.redo', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.redo), - tooltip: _this.lang.history.redo + _this.representShortcut('redo'), - click: _this.context.createInvokeHandler('editor.redo') - }).render(); - }); - this.context.memo('button.undo', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.undo), - tooltip: _this.lang.history.undo + _this.representShortcut('undo'), - click: _this.context.createInvokeHandler('editor.undo') - }).render(); - }); - this.context.memo('button.help', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.question), - tooltip: _this.lang.options.help, - click: _this.context.createInvokeHandler('helpDialog.show') - }).render(); - }); - }; - /** - * image : [ - * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], - * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], - * ['remove', ['removeMedia']] - * ], - */ - Buttons.prototype.addImagePopoverButtons = function () { - var _this = this; - // Image Size Buttons - this.context.memo('button.imageSize100', function () { - return _this.button({ - contents: '<span class="note-fontsize-10">100%</span>', - tooltip: _this.lang.image.resizeFull, - click: _this.context.createInvokeHandler('editor.resize', '1') - }).render(); - }); - this.context.memo('button.imageSize50', function () { - return _this.button({ - contents: '<span class="note-fontsize-10">50%</span>', - tooltip: _this.lang.image.resizeHalf, - click: _this.context.createInvokeHandler('editor.resize', '0.5') - }).render(); - }); - this.context.memo('button.imageSize25', function () { - return _this.button({ - contents: '<span class="note-fontsize-10">25%</span>', - tooltip: _this.lang.image.resizeQuarter, - click: _this.context.createInvokeHandler('editor.resize', '0.25') - }).render(); - }); - // Float Buttons - this.context.memo('button.floatLeft', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.alignLeft), - tooltip: _this.lang.image.floatLeft, - click: _this.context.createInvokeHandler('editor.floatMe', 'left') - }).render(); - }); - this.context.memo('button.floatRight', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.alignRight), - tooltip: _this.lang.image.floatRight, - click: _this.context.createInvokeHandler('editor.floatMe', 'right') - }).render(); - }); - this.context.memo('button.floatNone', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.alignJustify), - tooltip: _this.lang.image.floatNone, - click: _this.context.createInvokeHandler('editor.floatMe', 'none') - }).render(); - }); - // Remove Buttons - this.context.memo('button.removeMedia', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.trash), - tooltip: _this.lang.image.remove, - click: _this.context.createInvokeHandler('editor.removeMedia') - }).render(); - }); - }; - Buttons.prototype.addLinkPopoverButtons = function () { - var _this = this; - this.context.memo('button.linkDialogShow', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.link), - tooltip: _this.lang.link.edit, - click: _this.context.createInvokeHandler('linkDialog.show') - }).render(); - }); - this.context.memo('button.unlink', function () { - return _this.button({ - contents: _this.ui.icon(_this.options.icons.unlink), - tooltip: _this.lang.link.unlink, - click: _this.context.createInvokeHandler('editor.unlink') - }).render(); - }); - }; - /** - * table : [ - * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], - * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] - * ], - */ - Buttons.prototype.addTablePopoverButtons = function () { - var _this = this; - this.context.memo('button.addRowUp', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.rowAbove), - tooltip: _this.lang.table.addRowAbove, - click: _this.context.createInvokeHandler('editor.addRow', 'top') - }).render(); - }); - this.context.memo('button.addRowDown', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.rowBelow), - tooltip: _this.lang.table.addRowBelow, - click: _this.context.createInvokeHandler('editor.addRow', 'bottom') - }).render(); - }); - this.context.memo('button.addColLeft', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.colBefore), - tooltip: _this.lang.table.addColLeft, - click: _this.context.createInvokeHandler('editor.addCol', 'left') - }).render(); - }); - this.context.memo('button.addColRight', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.colAfter), - tooltip: _this.lang.table.addColRight, - click: _this.context.createInvokeHandler('editor.addCol', 'right') - }).render(); - }); - this.context.memo('button.deleteRow', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.rowRemove), - tooltip: _this.lang.table.delRow, - click: _this.context.createInvokeHandler('editor.deleteRow') - }).render(); - }); - this.context.memo('button.deleteCol', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.colRemove), - tooltip: _this.lang.table.delCol, - click: _this.context.createInvokeHandler('editor.deleteCol') - }).render(); - }); - this.context.memo('button.deleteTable', function () { - return _this.button({ - className: 'btn-md', - contents: _this.ui.icon(_this.options.icons.trash), - tooltip: _this.lang.table.delTable, - click: _this.context.createInvokeHandler('editor.deleteTable') - }).render(); - }); - }; - Buttons.prototype.build = function ($container, groups) { - for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { - var group = groups[groupIdx]; - var groupName = $$1.isArray(group) ? group[0] : group; - var buttons = $$1.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group]; - var $group = this.ui.buttonGroup({ - className: 'note-' + groupName - }).render(); - for (var idx = 0, len = buttons.length; idx < len; idx++) { - var btn = this.context.memo('button.' + buttons[idx]); - if (btn) { - $group.append(typeof btn === 'function' ? btn(this.context) : btn); - } - } - $group.appendTo($container); - } - }; - /** - * @param {jQuery} [$container] - */ - Buttons.prototype.updateCurrentStyle = function ($container) { - var _this = this; - var $cont = $container || this.$toolbar; - var styleInfo = this.context.invoke('editor.currentStyle'); - this.updateBtnStates($cont, { - '.note-btn-bold': function () { - return styleInfo['font-bold'] === 'bold'; - }, - '.note-btn-italic': function () { - return styleInfo['font-italic'] === 'italic'; - }, - '.note-btn-underline': function () { - return styleInfo['font-underline'] === 'underline'; - }, - '.note-btn-subscript': function () { - return styleInfo['font-subscript'] === 'subscript'; - }, - '.note-btn-superscript': function () { - return styleInfo['font-superscript'] === 'superscript'; - }, - '.note-btn-strikethrough': function () { - return styleInfo['font-strikethrough'] === 'strikethrough'; - } - }); - if (styleInfo['font-family']) { - var fontNames = styleInfo['font-family'].split(',').map(function (name) { - return name.replace(/[\'\"]/g, '') - .replace(/\s+$/, '') - .replace(/^\s+/, ''); - }); - var fontName_1 = lists.find(fontNames, this.isFontInstalled.bind(this)); - $cont.find('.dropdown-fontname a').each(function (idx, item) { - var $item = $$1(item); - // always compare string to avoid creating another func. - var isChecked = ($item.data('value') + '') === (fontName_1 + ''); - $item.toggleClass('checked', isChecked); - }); - $cont.find('.note-current-fontname').text(fontName_1).css('font-family', fontName_1); - } - if (styleInfo['font-size']) { - var fontSize_1 = styleInfo['font-size']; - $cont.find('.dropdown-fontsize a').each(function (idx, item) { - var $item = $$1(item); - // always compare with string to avoid creating another func. - var isChecked = ($item.data('value') + '') === (fontSize_1 + ''); - $item.toggleClass('checked', isChecked); - }); - $cont.find('.note-current-fontsize').text(fontSize_1); - } - if (styleInfo['line-height']) { - var lineHeight_1 = styleInfo['line-height']; - $cont.find('.dropdown-line-height li a').each(function (idx, item) { - // always compare with string to avoid creating another func. - var isChecked = ($$1(item).data('value') + '') === (lineHeight_1 + ''); - _this.className = isChecked ? 'checked' : ''; - }); - } - }; - Buttons.prototype.updateBtnStates = function ($container, infos) { - var _this = this; - $$1.each(infos, function (selector, pred) { - _this.ui.toggleBtnActive($container.find(selector), pred()); - }); - }; - Buttons.prototype.tableMoveHandler = function (event) { - var PX_PER_EM = 18; - var $picker = $$1(event.target.parentNode); // target is mousecatcher - var $dimensionDisplay = $picker.next(); - var $catcher = $picker.find('.note-dimension-picker-mousecatcher'); - var $highlighted = $picker.find('.note-dimension-picker-highlighted'); - var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); - var posOffset; - // HTML5 with jQuery - e.offsetX is undefined in Firefox - if (event.offsetX === undefined) { - var posCatcher = $$1(event.target).offset(); - posOffset = { - x: event.pageX - posCatcher.left, - y: event.pageY - posCatcher.top - }; - } - else { - posOffset = { - x: event.offsetX, - y: event.offsetY - }; - } - var dim = { - c: Math.ceil(posOffset.x / PX_PER_EM) || 1, - r: Math.ceil(posOffset.y / PX_PER_EM) || 1 - }; - $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); - $catcher.data('value', dim.c + 'x' + dim.r); - if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) { - $unhighlighted.css({ width: dim.c + 1 + 'em' }); - } - if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) { - $unhighlighted.css({ height: dim.r + 1 + 'em' }); - } - $dimensionDisplay.html(dim.c + ' x ' + dim.r); - }; - return Buttons; -}()); - -var Toolbar = /** @class */ (function () { - function Toolbar(context) { - this.context = context; - this.$window = $$1(window); - this.$document = $$1(document); - this.ui = $$1.summernote.ui; - this.$note = context.layoutInfo.note; - this.$editor = context.layoutInfo.editor; - this.$toolbar = context.layoutInfo.toolbar; - this.options = context.options; - this.followScroll = this.followScroll.bind(this); - } - Toolbar.prototype.shouldInitialize = function () { - return !this.options.airMode; - }; - Toolbar.prototype.initialize = function () { - var _this = this; - this.options.toolbar = this.options.toolbar || []; - if (!this.options.toolbar.length) { - this.$toolbar.hide(); - } - else { - this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar); - } - if (this.options.toolbarContainer) { - this.$toolbar.appendTo(this.options.toolbarContainer); - } - this.changeContainer(false); - this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () { - _this.context.invoke('buttons.updateCurrentStyle'); - }); - this.context.invoke('buttons.updateCurrentStyle'); - if (this.options.followingToolbar) { - this.$window.on('scroll resize', this.followScroll); - } - }; - Toolbar.prototype.destroy = function () { - this.$toolbar.children().remove(); - if (this.options.followingToolbar) { - this.$window.off('scroll resize', this.followScroll); - } - }; - Toolbar.prototype.followScroll = function () { - if (this.$editor.hasClass('fullscreen')) { - return false; - } - var $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper'); - var editorHeight = this.$editor.outerHeight(); - var editorWidth = this.$editor.width(); - var toolbarHeight = this.$toolbar.height(); - $toolbarWrapper.css({ - height: toolbarHeight - }); - // check if the web app is currently using another static bar - var otherBarHeight = 0; - if (this.options.otherStaticBar) { - otherBarHeight = $$1(this.options.otherStaticBar).outerHeight(); - } - var currentOffset = this.$document.scrollTop(); - var editorOffsetTop = this.$editor.offset().top; - var editorOffsetBottom = editorOffsetTop + editorHeight; - var activateOffset = editorOffsetTop - otherBarHeight; - var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight; - if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) { - this.$toolbar.css({ - position: 'fixed', - top: otherBarHeight, - width: editorWidth - }); - } - else { - this.$toolbar.css({ - position: 'relative', - top: 0, - width: '100%' - }); - } - }; - Toolbar.prototype.changeContainer = function (isFullscreen) { - if (isFullscreen) { - this.$toolbar.prependTo(this.$editor); - } - else { - if (this.options.toolbarContainer) { - this.$toolbar.appendTo(this.options.toolbarContainer); - } - } - }; - Toolbar.prototype.updateFullscreen = function (isFullscreen) { - this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen); - this.changeContainer(isFullscreen); - }; - Toolbar.prototype.updateCodeview = function (isCodeview) { - this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview); - if (isCodeview) { - this.deactivate(); - } - else { - this.activate(); - } - }; - Toolbar.prototype.activate = function (isIncludeCodeview) { - var $btn = this.$toolbar.find('button'); - if (!isIncludeCodeview) { - $btn = $btn.not('.btn-codeview'); - } - this.ui.toggleBtn($btn, true); - }; - Toolbar.prototype.deactivate = function (isIncludeCodeview) { - var $btn = this.$toolbar.find('button'); - if (!isIncludeCodeview) { - $btn = $btn.not('.btn-codeview'); - } - this.ui.toggleBtn($btn, false); - }; - return Toolbar; -}()); - -var LinkDialog = /** @class */ (function () { - function LinkDialog(context) { - this.context = context; - this.ui = $$1.summernote.ui; - this.$body = $$1(document.body); - this.$editor = context.layoutInfo.editor; - this.options = context.options; - this.lang = this.options.langInfo; - context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']); - } - LinkDialog.prototype.initialize = function () { - var $container = this.options.dialogsInBody ? this.$body : this.$editor; - var body = [ - '<div class="form-group note-form-group">', - "<label class=\"note-form-label\">" + this.lang.link.textToDisplay + "</label>", - '<input class="note-link-text form-control note-form-control note-input" type="text" />', - '</div>', - '<div class="form-group note-form-group">', - "<label class=\"note-form-label\">" + this.lang.link.url + "</label>", - '<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />', - '</div>', - !this.options.disableLinkTarget - ? $$1('<div/>').append(this.ui.checkbox({ - id: 'sn-checkbox-open-in-new-window', - text: this.lang.link.openInNewWindow, - checked: true - }).render()).html() - : '' - ].join(''); - var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn'; - var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.link.insert + "</button>"; - this.$dialog = this.ui.dialog({ - className: 'link-dialog', - title: this.lang.link.insert, - fade: this.options.dialogsFade, - body: body, - footer: footer - }).render().appendTo($container); - }; - LinkDialog.prototype.destroy = function () { - this.ui.hideDialog(this.$dialog); - this.$dialog.remove(); - }; - LinkDialog.prototype.bindEnterKey = function ($input, $btn) { - $input.on('keypress', function (event) { - if (event.keyCode === key.code.ENTER) { - event.preventDefault(); - $btn.trigger('click'); - } - }); - }; - /** - * toggle update button - */ - LinkDialog.prototype.toggleLinkBtn = function ($linkBtn, $linkText, $linkUrl) { - this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val()); - }; - /** - * Show link dialog and set event handlers on dialog controls. - * - * @param {Object} linkInfo - * @return {Promise} - */ - LinkDialog.prototype.showLinkDialog = function (linkInfo) { - var _this = this; - return $$1.Deferred(function (deferred) { - var $linkText = _this.$dialog.find('.note-link-text'); - var $linkUrl = _this.$dialog.find('.note-link-url'); - var $linkBtn = _this.$dialog.find('.note-link-btn'); - var $openInNewWindow = _this.$dialog.find('input[type=checkbox]'); - _this.ui.onDialogShown(_this.$dialog, function () { - _this.context.triggerEvent('dialog.shown'); - // if no url was given, copy text to url - if (!linkInfo.url) { - linkInfo.url = linkInfo.text; - } - $linkText.val(linkInfo.text); - var handleLinkTextUpdate = function () { - _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); - // if linktext was modified by keyup, - // stop cloning text from linkUrl - linkInfo.text = $linkText.val(); - }; - $linkText.on('input', handleLinkTextUpdate).on('paste', function () { - setTimeout(handleLinkTextUpdate, 0); - }); - var handleLinkUrlUpdate = function () { - _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); - // display same link on `Text to display` input - // when create a new link - if (!linkInfo.text) { - $linkText.val($linkUrl.val()); - } - }; - $linkUrl.on('input', handleLinkUrlUpdate).on('paste', function () { - setTimeout(handleLinkUrlUpdate, 0); - }).val(linkInfo.url); - if (!env.isSupportTouch) { - $linkUrl.trigger('focus'); - } - _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); - _this.bindEnterKey($linkUrl, $linkBtn); - _this.bindEnterKey($linkText, $linkBtn); - var isChecked = linkInfo.isNewWindow !== undefined - ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank; - $openInNewWindow.prop('checked', isChecked); - $linkBtn.one('click', function (event) { - event.preventDefault(); - deferred.resolve({ - range: linkInfo.range, - url: $linkUrl.val(), - text: $linkText.val(), - isNewWindow: $openInNewWindow.is(':checked') - }); - _this.ui.hideDialog(_this.$dialog); - }); - }); - _this.ui.onDialogHidden(_this.$dialog, function () { - // detach events - $linkText.off('input paste keypress'); - $linkUrl.off('input paste keypress'); - $linkBtn.off('click'); - if (deferred.state() === 'pending') { - deferred.reject(); - } - }); - _this.ui.showDialog(_this.$dialog); - }).promise(); - }; - /** - * @param {Object} layoutInfo - */ - LinkDialog.prototype.show = function () { - var _this = this; - var linkInfo = this.context.invoke('editor.getLinkInfo'); - this.context.invoke('editor.saveRange'); - this.showLinkDialog(linkInfo).then(function (linkInfo) { - _this.context.invoke('editor.restoreRange'); - _this.context.invoke('editor.createLink', linkInfo); - }).fail(function () { - _this.context.invoke('editor.restoreRange'); - }); - }; - return LinkDialog; -}()); - -var LinkPopover = /** @class */ (function () { - function LinkPopover(context) { - var _this = this; - this.context = context; - this.ui = $$1.summernote.ui; - this.options = context.options; - this.events = { - 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () { - _this.update(); - }, - 'summernote.disable summernote.dialog.shown': function () { - _this.hide(); - } - }; - } - LinkPopover.prototype.shouldInitialize = function () { - return !lists.isEmpty(this.options.popover.link); - }; - LinkPopover.prototype.initialize = function () { - this.$popover = this.ui.popover({ - className: 'note-link-popover', - callback: function ($node) { - var $content = $node.find('.popover-content,.note-popover-content'); - $content.prepend('<span><a target="_blank"></a> </span>'); - } - }).render().appendTo(this.options.container); - var $content = this.$popover.find('.popover-content,.note-popover-content'); - this.context.invoke('buttons.build', $content, this.options.popover.link); - }; - LinkPopover.prototype.destroy = function () { - this.$popover.remove(); - }; - LinkPopover.prototype.update = function () { - // Prevent focusing on editable when invoke('code') is executed - if (!this.context.invoke('editor.hasFocus')) { - this.hide(); - return; - } - var rng = this.context.invoke('editor.createRange'); - if (rng.isCollapsed() && rng.isOnAnchor()) { - var anchor = dom.ancestor(rng.sc, dom.isAnchor); - var href = $$1(anchor).attr('href'); - this.$popover.find('a').attr('href', href).html(href); - var pos = dom.posFromPlaceholder(anchor); - this.$popover.css({ - display: 'block', - left: pos.left, - top: pos.top - }); - } - else { - this.hide(); - } - }; - LinkPopover.prototype.hide = function () { - this.$popover.hide(); - }; - return LinkPopover; -}()); - -var ImageDialog = /** @class */ (function () { - function ImageDialog(context) { - this.context = context; - this.ui = $$1.summernote.ui; - this.$body = $$1(document.body); - this.$editor = context.layoutInfo.editor; - this.options = context.options; - this.lang = this.options.langInfo; - } - ImageDialog.prototype.initialize = function () { - var $container = this.options.dialogsInBody ? this.$body : this.$editor; - var imageLimitation = ''; - if (this.options.maximumImageFileSize) { - var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)); - var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + - ' ' + ' KMGTP'[unit] + 'B'; - imageLimitation = "<small>" + (this.lang.image.maximumFileSize + ' : ' + readableSize) + "</small>"; - } - var body = [ - '<div class="form-group note-form-group note-group-select-from-files">', - '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', - '<input class="note-image-input note-form-control note-input" ', - ' type="file" name="files" accept="image/*" multiple="multiple" />', - imageLimitation, - '</div>', - '<div class="form-group note-group-image-url" style="overflow:auto;">', - '<label class="note-form-label">' + this.lang.image.url + '</label>', - '<input class="note-image-url form-control note-form-control note-input ', - ' col-md-12" type="text" />', - '</div>' - ].join(''); - var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn'; - var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.image.insert + "</button>"; - this.$dialog = this.ui.dialog({ - title: this.lang.image.insert, - fade: this.options.dialogsFade, - body: body, - footer: footer - }).render().appendTo($container); - }; - ImageDialog.prototype.destroy = function () { - this.ui.hideDialog(this.$dialog); - this.$dialog.remove(); - }; - ImageDialog.prototype.bindEnterKey = function ($input, $btn) { - $input.on('keypress', function (event) { - if (event.keyCode === key.code.ENTER) { - event.preventDefault(); - $btn.trigger('click'); - } - }); - }; - ImageDialog.prototype.show = function () { - var _this = this; - this.context.invoke('editor.saveRange'); - this.showImageDialog().then(function (data) { - // [workaround] hide dialog before restore range for IE range focus - _this.ui.hideDialog(_this.$dialog); - _this.context.invoke('editor.restoreRange'); - if (typeof data === 'string') { - _this.context.invoke('editor.insertImage', data); - } - else { - _this.context.invoke('editor.insertImagesOrCallback', data); - } - }).fail(function () { - _this.context.invoke('editor.restoreRange'); - }); - }; - /** - * show image dialog - * - * @param {jQuery} $dialog - * @return {Promise} - */ - ImageDialog.prototype.showImageDialog = function () { - var _this = this; - return $$1.Deferred(function (deferred) { - var $imageInput = _this.$dialog.find('.note-image-input'); - var $imageUrl = _this.$dialog.find('.note-image-url'); - var $imageBtn = _this.$dialog.find('.note-image-btn'); - _this.ui.onDialogShown(_this.$dialog, function () { - _this.context.triggerEvent('dialog.shown'); - // Cloning imageInput to clear element. - $imageInput.replaceWith($imageInput.clone().on('change', function (event) { - deferred.resolve(event.target.files || event.target.value); - }).val('')); - $imageBtn.click(function (event) { - event.preventDefault(); - deferred.resolve($imageUrl.val()); - }); - $imageUrl.on('keyup paste', function () { - var url = $imageUrl.val(); - _this.ui.toggleBtn($imageBtn, url); - }).val(''); - if (!env.isSupportTouch) { - $imageUrl.trigger('focus'); - } - _this.bindEnterKey($imageUrl, $imageBtn); - }); - _this.ui.onDialogHidden(_this.$dialog, function () { - $imageInput.off('change'); - $imageUrl.off('keyup paste keypress'); - $imageBtn.off('click'); - if (deferred.state() === 'pending') { - deferred.reject(); - } - }); - _this.ui.showDialog(_this.$dialog); - }); - }; - return ImageDialog; -}()); - -/** - * Image popover module - * mouse events that show/hide popover will be handled by Handle.js. - * Handle.js will receive the events and invoke 'imagePopover.update'. - */ -var ImagePopover = /** @class */ (function () { - function ImagePopover(context) { - var _this = this; - this.context = context; - this.ui = $$1.summernote.ui; - this.editable = context.layoutInfo.editable[0]; - this.options = context.options; - this.events = { - 'summernote.disable': function () { - _this.hide(); - } - }; - } - ImagePopover.prototype.shouldInitialize = function () { - return !lists.isEmpty(this.options.popover.image); - }; - ImagePopover.prototype.initialize = function () { - this.$popover = this.ui.popover({ - className: 'note-image-popover' - }).render().appendTo(this.options.container); - var $content = this.$popover.find('.popover-content,.note-popover-content'); - this.context.invoke('buttons.build', $content, this.options.popover.image); - }; - ImagePopover.prototype.destroy = function () { - this.$popover.remove(); - }; - ImagePopover.prototype.update = function (target) { - if (dom.isImg(target)) { - var pos = dom.posFromPlaceholder(target); - var posEditor = dom.posFromPlaceholder(this.editable); - this.$popover.css({ - display: 'block', - left: this.options.popatmouse ? event.pageX - 20 : pos.left, - top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top) - }); - } - else { - this.hide(); - } - }; - ImagePopover.prototype.hide = function () { - this.$popover.hide(); - }; - return ImagePopover; -}()); - -var TablePopover = /** @class */ (function () { - function TablePopover(context) { - var _this = this; - this.context = context; - this.ui = $$1.summernote.ui; - this.options = context.options; - this.events = { - 'summernote.mousedown': function (we, e) { - _this.update(e.target); - }, - 'summernote.keyup summernote.scroll summernote.change': function () { - _this.update(); - }, - 'summernote.disable': function () { - _this.hide(); - } - }; - } - TablePopover.prototype.shouldInitialize = function () { - return !lists.isEmpty(this.options.popover.table); - }; - TablePopover.prototype.initialize = function () { - this.$popover = this.ui.popover({ - className: 'note-table-popover' - }).render().appendTo(this.options.container); - var $content = this.$popover.find('.popover-content,.note-popover-content'); - this.context.invoke('buttons.build', $content, this.options.popover.table); - // [workaround] Disable Firefox's default table editor - if (env.isFF) { - document.execCommand('enableInlineTableEditing', false, false); - } - }; - TablePopover.prototype.destroy = function () { - this.$popover.remove(); - }; - TablePopover.prototype.update = function (target) { - if (this.context.isDisabled()) { - return false; - } - var isCell = dom.isCell(target); - if (isCell) { - var pos = dom.posFromPlaceholder(target); - this.$popover.css({ - display: 'block', - left: pos.left, - top: pos.top - }); - } - else { - this.hide(); - } - return isCell; - }; - TablePopover.prototype.hide = function () { - this.$popover.hide(); - }; - return TablePopover; -}()); - -var VideoDialog = /** @class */ (function () { - function VideoDialog(context) { - this.context = context; - this.ui = $$1.summernote.ui; - this.$body = $$1(document.body); - this.$editor = context.layoutInfo.editor; - this.options = context.options; - this.lang = this.options.langInfo; - } - VideoDialog.prototype.initialize = function () { - var $container = this.options.dialogsInBody ? this.$body : this.$editor; - var body = [ - '<div class="form-group note-form-group row-fluid">', - "<label class=\"note-form-label\">" + this.lang.video.url + " <small class=\"text-muted\">" + this.lang.video.providers + "</small></label>", - '<input class="note-video-url form-control note-form-control note-input" type="text" />', - '</div>' - ].join(''); - var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn'; - var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.video.insert + "</button>"; - this.$dialog = this.ui.dialog({ - title: this.lang.video.insert, - fade: this.options.dialogsFade, - body: body, - footer: footer - }).render().appendTo($container); - }; - VideoDialog.prototype.destroy = function () { - this.ui.hideDialog(this.$dialog); - this.$dialog.remove(); - }; - VideoDialog.prototype.bindEnterKey = function ($input, $btn) { - $input.on('keypress', function (event) { - if (event.keyCode === key.code.ENTER) { - event.preventDefault(); - $btn.trigger('click'); - } - }); - }; - VideoDialog.prototype.createVideoNode = function (url) { - // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) - var ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; - var ytMatch = url.match(ytRegExp); - var igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; - var igMatch = url.match(igRegExp); - var vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; - var vMatch = url.match(vRegExp); - var vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/; - var vimMatch = url.match(vimRegExp); - var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; - var dmMatch = url.match(dmRegExp); - var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; - var youkuMatch = url.match(youkuRegExp); - var qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/; - var qqMatch = url.match(qqRegExp); - var qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/; - var qqMatch2 = url.match(qqRegExp2); - var mp4RegExp = /^.+.(mp4|m4v)$/; - var mp4Match = url.match(mp4RegExp); - var oggRegExp = /^.+.(ogg|ogv)$/; - var oggMatch = url.match(oggRegExp); - var webmRegExp = /^.+.(webm)$/; - var webmMatch = url.match(webmRegExp); - var $video; - if (ytMatch && ytMatch[1].length === 11) { - var youtubeId = ytMatch[1]; - $video = $$1('<iframe>') - .attr('frameborder', 0) - .attr('src', '//www.youtube.com/embed/' + youtubeId) - .attr('width', '640').attr('height', '360'); - } - else if (igMatch && igMatch[0].length) { - $video = $$1('<iframe>') - .attr('frameborder', 0) - .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') - .attr('width', '612').attr('height', '710') - .attr('scrolling', 'no') - .attr('allowtransparency', 'true'); - } - else if (vMatch && vMatch[0].length) { - $video = $$1('<iframe>') - .attr('frameborder', 0) - .attr('src', vMatch[0] + '/embed/simple') - .attr('width', '600').attr('height', '600') - .attr('class', 'vine-embed'); - } - else if (vimMatch && vimMatch[3].length) { - $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') - .attr('frameborder', 0) - .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) - .attr('width', '640').attr('height', '360'); - } - else if (dmMatch && dmMatch[2].length) { - $video = $$1('<iframe>') - .attr('frameborder', 0) - .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) - .attr('width', '640').attr('height', '360'); - } - else if (youkuMatch && youkuMatch[1].length) { - $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') - .attr('frameborder', 0) - .attr('height', '498') - .attr('width', '510') - .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); - } - else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) { - var vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]); - $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') - .attr('frameborder', 0) - .attr('height', '310') - .attr('width', '500') - .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0'); - } - else if (mp4Match || oggMatch || webmMatch) { - $video = $$1('<video controls>') - .attr('src', url) - .attr('width', '640').attr('height', '360'); - } - else { - // this is not a known video link. Now what, Cat? Now what? - return false; - } - $video.addClass('note-video-clip'); - return $video[0]; - }; - VideoDialog.prototype.show = function () { - var _this = this; - var text = this.context.invoke('editor.getSelectedText'); - this.context.invoke('editor.saveRange'); - this.showVideoDialog(text).then(function (url) { - // [workaround] hide dialog before restore range for IE range focus - _this.ui.hideDialog(_this.$dialog); - _this.context.invoke('editor.restoreRange'); - // build node - var $node = _this.createVideoNode(url); - if ($node) { - // insert video node - _this.context.invoke('editor.insertNode', $node); - } - }).fail(function () { - _this.context.invoke('editor.restoreRange'); - }); - }; - /** - * show image dialog - * - * @param {jQuery} $dialog - * @return {Promise} - */ - VideoDialog.prototype.showVideoDialog = function (text) { - var _this = this; - return $$1.Deferred(function (deferred) { - var $videoUrl = _this.$dialog.find('.note-video-url'); - var $videoBtn = _this.$dialog.find('.note-video-btn'); - _this.ui.onDialogShown(_this.$dialog, function () { - _this.context.triggerEvent('dialog.shown'); - $videoUrl.val(text).on('input', function () { - _this.ui.toggleBtn($videoBtn, $videoUrl.val()); - }); - if (!env.isSupportTouch) { - $videoUrl.trigger('focus'); - } - $videoBtn.click(function (event) { - event.preventDefault(); - deferred.resolve($videoUrl.val()); - }); - _this.bindEnterKey($videoUrl, $videoBtn); - }); - _this.ui.onDialogHidden(_this.$dialog, function () { - $videoUrl.off('input'); - $videoBtn.off('click'); - if (deferred.state() === 'pending') { - deferred.reject(); - } - }); - _this.ui.showDialog(_this.$dialog); - }); - }; - return VideoDialog; -}()); - -var HelpDialog = /** @class */ (function () { - function HelpDialog(context) { - this.context = context; - this.ui = $$1.summernote.ui; - this.$body = $$1(document.body); - this.$editor = context.layoutInfo.editor; - this.options = context.options; - this.lang = this.options.langInfo; - } - HelpDialog.prototype.initialize = function () { - var $container = this.options.dialogsInBody ? this.$body : this.$editor; - var body = [ - '<p class="text-center">', - '<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</a> · ', - '<a href="https://github.com/summernote/summernote" target="_blank">Project</a> · ', - '<a href="https://github.com/summernote/summernote/issues" target="_blank">Issues</a>', - '</p>' - ].join(''); - this.$dialog = this.ui.dialog({ - title: this.lang.options.help, - fade: this.options.dialogsFade, - body: this.createShortcutList(), - footer: body, - callback: function ($node) { - $node.find('.modal-body,.note-modal-body').css({ - 'max-height': 300, - 'overflow': 'scroll' - }); - } - }).render().appendTo($container); - }; - HelpDialog.prototype.destroy = function () { - this.ui.hideDialog(this.$dialog); - this.$dialog.remove(); - }; - HelpDialog.prototype.createShortcutList = function () { - var _this = this; - var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; - return Object.keys(keyMap).map(function (key) { - var command = keyMap[key]; - var $row = $$1('<div><div class="help-list-item"/></div>'); - $row.append($$1('<label><kbd>' + key + '</kdb></label>').css({ - 'width': 180, - 'margin-right': 10 - })).append($$1('<span/>').html(_this.context.memo('help.' + command) || command)); - return $row.html(); - }).join(''); - }; - /** - * show help dialog - * - * @return {Promise} - */ - HelpDialog.prototype.showHelpDialog = function () { - var _this = this; - return $$1.Deferred(function (deferred) { - _this.ui.onDialogShown(_this.$dialog, function () { - _this.context.triggerEvent('dialog.shown'); - deferred.resolve(); - }); - _this.ui.showDialog(_this.$dialog); - }).promise(); - }; - HelpDialog.prototype.show = function () { - var _this = this; - this.context.invoke('editor.saveRange'); - this.showHelpDialog().then(function () { - _this.context.invoke('editor.restoreRange'); - }); - }; - return HelpDialog; -}()); - -var AIR_MODE_POPOVER_X_OFFSET = 20; -var AirPopover = /** @class */ (function () { - function AirPopover(context) { - var _this = this; - this.context = context; - this.ui = $$1.summernote.ui; - this.options = context.options; - this.events = { - 'summernote.keyup summernote.mouseup summernote.scroll': function () { - _this.update(); - }, - 'summernote.disable summernote.change summernote.dialog.shown': function () { - _this.hide(); - }, - 'summernote.focusout': function (we, e) { - // [workaround] Firefox doesn't support relatedTarget on focusout - // - Ignore hide action on focus out in FF. - if (env.isFF) { - return; - } - if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(_this.$popover[0]))) { - _this.hide(); - } - } - }; - } - AirPopover.prototype.shouldInitialize = function () { - return this.options.airMode && !lists.isEmpty(this.options.popover.air); - }; - AirPopover.prototype.initialize = function () { - this.$popover = this.ui.popover({ - className: 'note-air-popover' - }).render().appendTo(this.options.container); - var $content = this.$popover.find('.popover-content'); - this.context.invoke('buttons.build', $content, this.options.popover.air); - }; - AirPopover.prototype.destroy = function () { - this.$popover.remove(); - }; - AirPopover.prototype.update = function () { - var styleInfo = this.context.invoke('editor.currentStyle'); - if (styleInfo.range && !styleInfo.range.isCollapsed()) { - var rect = lists.last(styleInfo.range.getClientRects()); - if (rect) { - var bnd = func.rect2bnd(rect); - this.$popover.css({ - display: 'block', - left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, - top: bnd.top + bnd.height - }); - this.context.invoke('buttons.updateCurrentStyle', this.$popover); - } - } - else { - this.hide(); - } - }; - AirPopover.prototype.hide = function () { - this.$popover.hide(); - }; - return AirPopover; -}()); - -var POPOVER_DIST = 5; -var HintPopover = /** @class */ (function () { - function HintPopover(context) { - var _this = this; - this.context = context; - this.ui = $$1.summernote.ui; - this.$editable = context.layoutInfo.editable; - this.options = context.options; - this.hint = this.options.hint || []; - this.direction = this.options.hintDirection || 'bottom'; - this.hints = $$1.isArray(this.hint) ? this.hint : [this.hint]; - this.events = { - 'summernote.keyup': function (we, e) { - if (!e.isDefaultPrevented()) { - _this.handleKeyup(e); - } - }, - 'summernote.keydown': function (we, e) { - _this.handleKeydown(e); - }, - 'summernote.disable summernote.dialog.shown': function () { - _this.hide(); - } - }; - } - HintPopover.prototype.shouldInitialize = function () { - return this.hints.length > 0; - }; - HintPopover.prototype.initialize = function () { - var _this = this; - this.lastWordRange = null; - this.$popover = this.ui.popover({ - className: 'note-hint-popover', - hideArrow: true, - direction: '' - }).render().appendTo(this.options.container); - this.$popover.hide(); - this.$content = this.$popover.find('.popover-content,.note-popover-content'); - this.$content.on('click', '.note-hint-item', function () { - _this.$content.find('.active').removeClass('active'); - $$1(_this).addClass('active'); - _this.replace(); - }); - }; - HintPopover.prototype.destroy = function () { - this.$popover.remove(); - }; - HintPopover.prototype.selectItem = function ($item) { - this.$content.find('.active').removeClass('active'); - $item.addClass('active'); - this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2); - }; - HintPopover.prototype.moveDown = function () { - var $current = this.$content.find('.note-hint-item.active'); - var $next = $current.next(); - if ($next.length) { - this.selectItem($next); - } - else { - var $nextGroup = $current.parent().next(); - if (!$nextGroup.length) { - $nextGroup = this.$content.find('.note-hint-group').first(); - } - this.selectItem($nextGroup.find('.note-hint-item').first()); - } - }; - HintPopover.prototype.moveUp = function () { - var $current = this.$content.find('.note-hint-item.active'); - var $prev = $current.prev(); - if ($prev.length) { - this.selectItem($prev); - } - else { - var $prevGroup = $current.parent().prev(); - if (!$prevGroup.length) { - $prevGroup = this.$content.find('.note-hint-group').last(); - } - this.selectItem($prevGroup.find('.note-hint-item').last()); - } - }; - HintPopover.prototype.replace = function () { - var $item = this.$content.find('.note-hint-item.active'); - if ($item.length) { - var node = this.nodeFromItem($item); - // XXX: consider to move codes to editor for recording redo/undo. - this.lastWordRange.insertNode(node); - range.createFromNode(node).collapse().select(); - this.lastWordRange = null; - this.hide(); - this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]); - this.context.invoke('editor.focus'); - } - }; - HintPopover.prototype.nodeFromItem = function ($item) { - var hint = this.hints[$item.data('index')]; - var item = $item.data('item'); - var node = hint.content ? hint.content(item) : item; - if (typeof node === 'string') { - node = dom.createText(node); - } - return node; - }; - HintPopover.prototype.createItemTemplates = function (hintIdx, items) { - var hint = this.hints[hintIdx]; - return items.map(function (item, idx) { - var $item = $$1('<div class="note-hint-item"/>'); - $item.append(hint.template ? hint.template(item) : item + ''); - $item.data({ - 'index': hintIdx, - 'item': item - }); - return $item; - }); - }; - HintPopover.prototype.handleKeydown = function (e) { - if (!this.$popover.is(':visible')) { - return; - } - if (e.keyCode === key.code.ENTER) { - e.preventDefault(); - this.replace(); - } - else if (e.keyCode === key.code.UP) { - e.preventDefault(); - this.moveUp(); - } - else if (e.keyCode === key.code.DOWN) { - e.preventDefault(); - this.moveDown(); - } - }; - HintPopover.prototype.searchKeyword = function (index, keyword, callback) { - var hint = this.hints[index]; - if (hint && hint.match.test(keyword) && hint.search) { - var matches = hint.match.exec(keyword); - hint.search(matches[1], callback); - } - else { - callback(); - } - }; - HintPopover.prototype.createGroup = function (idx, keyword) { - var _this = this; - var $group = $$1('<div class="note-hint-group note-hint-group-' + idx + '"/>'); - this.searchKeyword(idx, keyword, function (items) { - items = items || []; - if (items.length) { - $group.html(_this.createItemTemplates(idx, items)); - _this.show(); - } - }); - return $group; - }; - HintPopover.prototype.handleKeyup = function (e) { - var _this = this; - if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) { - var wordRange = this.context.invoke('editor.createRange').getWordRange(); - var keyword_1 = wordRange.toString(); - if (this.hints.length && keyword_1) { - this.$content.empty(); - var bnd = func.rect2bnd(lists.last(wordRange.getClientRects())); - if (bnd) { - this.$popover.hide(); - this.lastWordRange = wordRange; - this.hints.forEach(function (hint, idx) { - if (hint.match.test(keyword_1)) { - _this.createGroup(idx, keyword_1).appendTo(_this.$content); - } - }); - // select first .note-hint-item - this.$content.find('.note-hint-item:first').addClass('active'); - // set position for popover after group is created - if (this.direction === 'top') { - this.$popover.css({ - left: bnd.left, - top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST - }); - } - else { - this.$popover.css({ - left: bnd.left, - top: bnd.top + bnd.height + POPOVER_DIST - }); - } - } - } - else { - this.hide(); - } - } - }; - HintPopover.prototype.show = function () { - this.$popover.show(); - }; - HintPopover.prototype.hide = function () { - this.$popover.hide(); - }; - return HintPopover; -}()); - -var Context = /** @class */ (function () { - /** - * @param {jQuery} $note - * @param {Object} options - */ - function Context($note, options) { - this.ui = $$1.summernote.ui; - this.$note = $note; - this.memos = {}; - this.modules = {}; - this.layoutInfo = {}; - this.options = options; - this.initialize(); - } - /** - * create layout and initialize modules and other resources - */ - Context.prototype.initialize = function () { - this.layoutInfo = this.ui.createLayout(this.$note, this.options); - this._initialize(); - this.$note.hide(); - return this; - }; - /** - * destroy modules and other resources and remove layout - */ - Context.prototype.destroy = function () { - this._destroy(); - this.$note.removeData('summernote'); - this.ui.removeLayout(this.$note, this.layoutInfo); - }; - /** - * destory modules and other resources and initialize it again - */ - Context.prototype.reset = function () { - var disabled = this.isDisabled(); - this.code(dom.emptyPara); - this._destroy(); - this._initialize(); - if (disabled) { - this.disable(); - } - }; - Context.prototype._initialize = function () { - var _this = this; - // add optional buttons - var buttons = $$1.extend({}, this.options.buttons); - Object.keys(buttons).forEach(function (key) { - _this.memo('button.' + key, buttons[key]); - }); - var modules = $$1.extend({}, this.options.modules, $$1.summernote.plugins || {}); - // add and initialize modules - Object.keys(modules).forEach(function (key) { - _this.module(key, modules[key], true); - }); - Object.keys(this.modules).forEach(function (key) { - _this.initializeModule(key); - }); - }; - Context.prototype._destroy = function () { - var _this = this; - // destroy modules with reversed order - Object.keys(this.modules).reverse().forEach(function (key) { - _this.removeModule(key); - }); - Object.keys(this.memos).forEach(function (key) { - _this.removeMemo(key); - }); - // trigger custom onDestroy callback - this.triggerEvent('destroy', this); - }; - Context.prototype.code = function (html) { - var isActivated = this.invoke('codeview.isActivated'); - if (html === undefined) { - this.invoke('codeview.sync'); - return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html(); - } - else { - if (isActivated) { - this.layoutInfo.codable.val(html); - } - else { - this.layoutInfo.editable.html(html); - } - this.$note.val(html); - this.triggerEvent('change', html); - } - }; - Context.prototype.isDisabled = function () { - return this.layoutInfo.editable.attr('contenteditable') === 'false'; - }; - Context.prototype.enable = function () { - this.layoutInfo.editable.attr('contenteditable', true); - this.invoke('toolbar.activate', true); - this.triggerEvent('disable', false); - }; - Context.prototype.disable = function () { - // close codeview if codeview is opend - if (this.invoke('codeview.isActivated')) { - this.invoke('codeview.deactivate'); - } - this.layoutInfo.editable.attr('contenteditable', false); - this.invoke('toolbar.deactivate', true); - this.triggerEvent('disable', true); - }; - Context.prototype.triggerEvent = function () { - var namespace = lists.head(arguments); - var args = lists.tail(lists.from(arguments)); - var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; - if (callback) { - callback.apply(this.$note[0], args); - } - this.$note.trigger('summernote.' + namespace, args); - }; - Context.prototype.initializeModule = function (key) { - var module = this.modules[key]; - module.shouldInitialize = module.shouldInitialize || func.ok; - if (!module.shouldInitialize()) { - return; - } - // initialize module - if (module.initialize) { - module.initialize(); - } - // attach events - if (module.events) { - dom.attachEvents(this.$note, module.events); - } - }; - Context.prototype.module = function (key, ModuleClass, withoutIntialize) { - if (arguments.length === 1) { - return this.modules[key]; - } - this.modules[key] = new ModuleClass(this); - if (!withoutIntialize) { - this.initializeModule(key); - } - }; - Context.prototype.removeModule = function (key) { - var module = this.modules[key]; - if (module.shouldInitialize()) { - if (module.events) { - dom.detachEvents(this.$note, module.events); - } - if (module.destroy) { - module.destroy(); - } - } - delete this.modules[key]; - }; - Context.prototype.memo = function (key, obj) { - if (arguments.length === 1) { - return this.memos[key]; - } - this.memos[key] = obj; - }; - Context.prototype.removeMemo = function (key) { - if (this.memos[key] && this.memos[key].destroy) { - this.memos[key].destroy(); - } - delete this.memos[key]; - }; - /** - * Some buttons need to change their visual style immediately once they get pressed - */ - Context.prototype.createInvokeHandlerAndUpdateState = function (namespace, value) { - var _this = this; - return function (event) { - _this.createInvokeHandler(namespace, value)(event); - _this.invoke('buttons.updateCurrentStyle'); - }; - }; - Context.prototype.createInvokeHandler = function (namespace, value) { - var _this = this; - return function (event) { - event.preventDefault(); - var $target = $$1(event.target); - _this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target); - }; - }; - Context.prototype.invoke = function () { - var namespace = lists.head(arguments); - var args = lists.tail(lists.from(arguments)); - var splits = namespace.split('.'); - var hasSeparator = splits.length > 1; - var moduleName = hasSeparator && lists.head(splits); - var methodName = hasSeparator ? lists.last(splits) : lists.head(splits); - var module = this.modules[moduleName || 'editor']; - if (!moduleName && this[methodName]) { - return this[methodName].apply(this, args); - } - else if (module && module[methodName] && module.shouldInitialize()) { - return module[methodName].apply(module, args); - } - }; - return Context; -}()); - -$$1.fn.extend({ - /** - * Summernote API - * - * @param {Object|String} - * @return {this} - */ - summernote: function () { - var type = $$1.type(lists.head(arguments)); - var isExternalAPICalled = type === 'string'; - var hasInitOptions = type === 'object'; - var options = $$1.extend({}, $$1.summernote.options, hasInitOptions ? lists.head(arguments) : {}); - // Update options - options.langInfo = $$1.extend(true, {}, $$1.summernote.lang['en-US'], $$1.summernote.lang[options.lang]); - options.icons = $$1.extend(true, {}, $$1.summernote.options.icons, options.icons); - options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip; - this.each(function (idx, note) { - var $note = $$1(note); - if (!$note.data('summernote')) { - var context = new Context($note, options); - $note.data('summernote', context); - $note.data('summernote').triggerEvent('init', context.layoutInfo); - } - }); - var $note = this.first(); - if ($note.length) { - var context = $note.data('summernote'); - if (isExternalAPICalled) { - return context.invoke.apply(context, lists.from(arguments)); - } - else if (options.focus) { - context.invoke('editor.focus'); - } - } - return this; - } -}); - -$$1.summernote = $$1.extend($$1.summernote, { - version: '0.8.10', - ui: ui, - dom: dom, - plugins: {}, - options: { - modules: { - 'editor': Editor, - 'clipboard': Clipboard, - 'dropzone': Dropzone, - 'codeview': CodeView, - 'statusbar': Statusbar, - 'fullscreen': Fullscreen, - 'handle': Handle, - // FIXME: HintPopover must be front of autolink - // - Script error about range when Enter key is pressed on hint popover - 'hintPopover': HintPopover, - 'autoLink': AutoLink, - 'autoSync': AutoSync, - 'placeholder': Placeholder, - 'buttons': Buttons, - 'toolbar': Toolbar, - 'linkDialog': LinkDialog, - 'linkPopover': LinkPopover, - 'imageDialog': ImageDialog, - 'imagePopover': ImagePopover, - 'tablePopover': TablePopover, - 'videoDialog': VideoDialog, - 'helpDialog': HelpDialog, - 'airPopover': AirPopover - }, - buttons: {}, - lang: 'en-US', - followingToolbar: true, - otherStaticBar: '', - // toolbar - toolbar: [ - ['style', ['style']], - ['font', ['bold', 'underline', 'clear']], - ['fontname', ['fontname']], - ['color', ['color']], - ['para', ['ul', 'ol', 'paragraph']], - ['table', ['table']], - ['insert', ['link', 'picture', 'video']], - ['view', ['fullscreen', 'codeview', 'help']] - ], - // popover - popatmouse: true, - popover: { - image: [ - ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], - ['float', ['floatLeft', 'floatRight', 'floatNone']], - ['remove', ['removeMedia']] - ], - link: [ - ['link', ['linkDialogShow', 'unlink']] - ], - table: [ - ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], - ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] - ], - air: [ - ['color', ['color']], - ['font', ['bold', 'underline', 'clear']], - ['para', ['ul', 'paragraph']], - ['table', ['table']], - ['insert', ['link', 'picture']] - ] - }, - // air mode: inline editor - airMode: false, - width: null, - height: null, - linkTargetBlank: true, - focus: false, - tabSize: 4, - styleWithSpan: true, - shortcuts: true, - textareaAutoSync: true, - hintDirection: 'bottom', - tooltip: 'auto', - container: 'body', - maxTextLength: 0, - styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], - fontNames: [ - 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', - 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', - 'Tahoma', 'Times New Roman', 'Verdana' - ], - fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], - // pallete colors(n x n) - colors: [ - ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], - ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], - ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], - ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], - ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], - ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], - ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], - ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] - ], - // http://chir.ag/projects/name-that-color/ - colorsName: [ - ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], - ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], - ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], - ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], - ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], - ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], - ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], - ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] - ], - lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'], - tableClassName: 'table table-bordered', - insertTableMaxSize: { - col: 10, - row: 10 - }, - dialogsInBody: false, - dialogsFade: false, - maximumImageFileSize: null, - callbacks: { - onInit: null, - onFocus: null, - onBlur: null, - onBlurCodeview: null, - onEnter: null, - onKeyup: null, - onKeydown: null, - onImageUpload: null, - onImageUploadError: null - }, - codemirror: { - mode: 'text/html', - htmlMode: true, - lineNumbers: true - }, - keyMap: { - pc: { - 'ENTER': 'insertParagraph', - 'CTRL+Z': 'undo', - 'CTRL+Y': 'redo', - 'TAB': 'tab', - 'SHIFT+TAB': 'untab', - 'CTRL+B': 'bold', - 'CTRL+I': 'italic', - 'CTRL+U': 'underline', - 'CTRL+SHIFT+S': 'strikethrough', - 'CTRL+BACKSLASH': 'removeFormat', - 'CTRL+SHIFT+L': 'justifyLeft', - 'CTRL+SHIFT+E': 'justifyCenter', - 'CTRL+SHIFT+R': 'justifyRight', - 'CTRL+SHIFT+J': 'justifyFull', - 'CTRL+SHIFT+NUM7': 'insertUnorderedList', - 'CTRL+SHIFT+NUM8': 'insertOrderedList', - 'CTRL+LEFTBRACKET': 'outdent', - 'CTRL+RIGHTBRACKET': 'indent', - 'CTRL+NUM0': 'formatPara', - 'CTRL+NUM1': 'formatH1', - 'CTRL+NUM2': 'formatH2', - 'CTRL+NUM3': 'formatH3', - 'CTRL+NUM4': 'formatH4', - 'CTRL+NUM5': 'formatH5', - 'CTRL+NUM6': 'formatH6', - 'CTRL+ENTER': 'insertHorizontalRule', - 'CTRL+K': 'linkDialog.show' - }, - mac: { - 'ENTER': 'insertParagraph', - 'CMD+Z': 'undo', - 'CMD+SHIFT+Z': 'redo', - 'TAB': 'tab', - 'SHIFT+TAB': 'untab', - 'CMD+B': 'bold', - 'CMD+I': 'italic', - 'CMD+U': 'underline', - 'CMD+SHIFT+S': 'strikethrough', - 'CMD+BACKSLASH': 'removeFormat', - 'CMD+SHIFT+L': 'justifyLeft', - 'CMD+SHIFT+E': 'justifyCenter', - 'CMD+SHIFT+R': 'justifyRight', - 'CMD+SHIFT+J': 'justifyFull', - 'CMD+SHIFT+NUM7': 'insertUnorderedList', - 'CMD+SHIFT+NUM8': 'insertOrderedList', - 'CMD+LEFTBRACKET': 'outdent', - 'CMD+RIGHTBRACKET': 'indent', - 'CMD+NUM0': 'formatPara', - 'CMD+NUM1': 'formatH1', - 'CMD+NUM2': 'formatH2', - 'CMD+NUM3': 'formatH3', - 'CMD+NUM4': 'formatH4', - 'CMD+NUM5': 'formatH5', - 'CMD+NUM6': 'formatH6', - 'CMD+ENTER': 'insertHorizontalRule', - 'CMD+K': 'linkDialog.show' - } - }, - icons: { - 'align': 'note-icon-align', - 'alignCenter': 'note-icon-align-center', - 'alignJustify': 'note-icon-align-justify', - 'alignLeft': 'note-icon-align-left', - 'alignRight': 'note-icon-align-right', - 'rowBelow': 'note-icon-row-below', - 'colBefore': 'note-icon-col-before', - 'colAfter': 'note-icon-col-after', - 'rowAbove': 'note-icon-row-above', - 'rowRemove': 'note-icon-row-remove', - 'colRemove': 'note-icon-col-remove', - 'indent': 'note-icon-align-indent', - 'outdent': 'note-icon-align-outdent', - 'arrowsAlt': 'note-icon-arrows-alt', - 'bold': 'note-icon-bold', - 'caret': 'note-icon-caret', - 'circle': 'note-icon-circle', - 'close': 'note-icon-close', - 'code': 'note-icon-code', - 'eraser': 'note-icon-eraser', - 'font': 'note-icon-font', - 'frame': 'note-icon-frame', - 'italic': 'note-icon-italic', - 'link': 'note-icon-link', - 'unlink': 'note-icon-chain-broken', - 'magic': 'note-icon-magic', - 'menuCheck': 'note-icon-menu-check', - 'minus': 'note-icon-minus', - 'orderedlist': 'note-icon-orderedlist', - 'pencil': 'note-icon-pencil', - 'picture': 'note-icon-picture', - 'question': 'note-icon-question', - 'redo': 'note-icon-redo', - 'square': 'note-icon-square', - 'strikethrough': 'note-icon-strikethrough', - 'subscript': 'note-icon-subscript', - 'superscript': 'note-icon-superscript', - 'table': 'note-icon-table', - 'textHeight': 'note-icon-text-height', - 'trash': 'note-icon-trash', - 'underline': 'note-icon-underline', - 'undo': 'note-icon-undo', - 'unorderedlist': 'note-icon-unorderedlist', - 'video': 'note-icon-video' - } - } -}); - -}))); -//# sourceMappingURL=summernote.js.map diff --git a/public/assets/addons/summernote/js/summernote.min.js b/public/assets/addons/summernote/js/summernote.min.js deleted file mode 100644 index 8ccedd6..0000000 --- a/public/assets/addons/summernote/js/summernote.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(require("jquery")):typeof define==="function"&&define.amd?define(["jquery"],factory):factory(global.jQuery)})(this,function($$1){"use strict";$$1=$$1&&$$1.hasOwnProperty("default")?$$1["default"]:$$1;var Renderer=function(){function Renderer(markup,children,options,callback){this.markup=markup;this.children=children;this.options=options;this.callback=callback}Renderer.prototype.render=function($parent){var $node=$$1(this.markup);if(this.options&&this.options.contents){$node.html(this.options.contents)}if(this.options&&this.options.className){$node.addClass(this.options.className)}if(this.options&&this.options.data){$$1.each(this.options.data,function(k,v){$node.attr("data-"+k,v)})}if(this.options&&this.options.click){$node.on("click",this.options.click)}if(this.children){var $container_1=$node.find(".note-children-container");this.children.forEach(function(child){child.render($container_1.length?$container_1:$node)})}if(this.callback){this.callback($node,this.options)}if(this.options&&this.options.callback){this.options.callback($node)}if($parent){$parent.append($node)}return $node};return Renderer}();var renderer={create:function(markup,callback){return function(){var options=typeof arguments[1]==="object"?arguments[1]:arguments[0];var children=$$1.isArray(arguments[0])?arguments[0]:[];if(options&&options.children){children=options.children}return new Renderer(markup,children,options,callback)}}};var editor=renderer.create('<div class="note-editor note-frame panel"/>');var toolbar=renderer.create('<div class="note-toolbar-wrapper panel-default"><div class="note-toolbar panel-heading" role="toolbar"></div></div>');var editingArea=renderer.create('<div class="note-editing-area"/>');var codable=renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>');var editable=renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>');var statusbar=renderer.create(['<output class="note-status-output" aria-live="polite"/>','<div class="note-statusbar" role="status">',' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>'," </div>","</div>"].join(""));var airEditor=renderer.create('<div class="note-editor"/>');var airEditable=renderer.create([' <output class="note-status-output" aria-live="polite"/>','<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'].join(""));var buttonGroup=renderer.create('<div class="note-btn-group btn-group">');var dropdown=renderer.create('<ul class="dropdown-menu" role="list">',function($node,options){var markup=$$1.isArray(options.items)?options.items.map(function(item){var value=typeof item==="string"?item:item.value||"";var content=options.template?options.template(item):item;var option=typeof item==="object"?item.option:undefined;var dataValue='data-value="'+value+'"';var dataOption=option!==undefined?' data-option="'+option+'"':"";return'<li role="listitem" aria-label="'+item+'"><a href="#" '+(dataValue+dataOption)+">"+content+"</a></li>"}).join(""):options.items;$node.html(markup).attr({"aria-label":options.title})});var dropdownButtonContents=function(contents,options){return contents+" "+icon(options.icons.caret,"span")};var dropdownCheck=renderer.create('<ul class="dropdown-menu note-check" role="list">',function($node,options){var markup=$$1.isArray(options.items)?options.items.map(function(item){var value=typeof item==="string"?item:item.value||"";var content=options.template?options.template(item):item;return'<li role="listitem" aria-label="'+item+'"><a href="#" data-value="'+value+'">'+icon(options.checkClassName)+" "+content+"</a></li>"}).join(""):options.items;$node.html(markup).attr({"aria-label":options.title})});var palette=renderer.create('<div class="note-color-palette"/>',function($node,options){var contents=[];for(var row=0,rowSize=options.colors.length;row<rowSize;row++){var eventName=options.eventName;var colors=options.colors[row];var colorsName=options.colorsName[row];var buttons=[];for(var col=0,colSize=colors.length;col<colSize;col++){var color=colors[col];var colorName=colorsName[col];buttons.push(['<button type="button" class="note-color-btn"','style="background-color:',color,'" ','data-event="',eventName,'" ','data-value="',color,'" ','title="',colorName,'" ','aria-label="',colorName,'" ','data-toggle="button" tabindex="-1"></button>'].join(""))}contents.push('<div class="note-color-row">'+buttons.join("")+"</div>")}$node.html(contents.join(""));if(options.tooltip){$node.find(".note-color-btn").tooltip({container:options.container,trigger:"hover",placement:"bottom"})}});var dialog=renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>',function($node,options){if(options.fade){$node.addClass("fade")}$node.attr({"aria-label":options.title});$node.html(['<div class="modal-dialog">',' <div class="modal-content">',options.title?' <div class="modal-header">'+' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>'+' <h4 class="modal-title">'+options.title+"</h4>"+" </div>":"",' <div class="modal-body">'+options.body+"</div>",options.footer?' <div class="modal-footer">'+options.footer+"</div>":""," </div>","</div>"].join(""))});var popover=renderer.create(['<div class="note-popover popover in">',' <div class="arrow"/>',' <div class="popover-content note-children-container"/>',"</div>"].join(""),function($node,options){var direction=typeof options.direction!=="undefined"?options.direction:"bottom";$node.addClass(direction);if(options.hideArrow){$node.find(".arrow").hide()}});var checkbox=renderer.create('<div class="checkbox"></div>',function($node,options){$node.html([" <label"+(options.id?' for="'+options.id+'"':"")+">",' <input role="checkbox" type="checkbox"'+(options.id?' id="'+options.id+'"':""),options.checked?" checked":"",' aria-checked="'+(options.checked?"true":"false")+'"/>',options.text?options.text:"","</label>"].join(""))});var icon=function(iconClassName,tagName){tagName=tagName||"i";return"<"+tagName+' class="'+iconClassName+'"/>'};var ui={editor:editor,toolbar:toolbar,editingArea:editingArea,codable:codable,editable:editable,statusbar:statusbar,airEditor:airEditor,airEditable:airEditable,buttonGroup:buttonGroup,dropdown:dropdown,dropdownButtonContents:dropdownButtonContents,dropdownCheck:dropdownCheck,palette:palette,dialog:dialog,popover:popover,checkbox:checkbox,icon:icon,options:{},button:function($node,options){return renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">',function($node,options){if(options&&options.tooltip){$node.attr({title:options.tooltip,"aria-label":options.tooltip}).tooltip({container:options.container,trigger:"hover",placement:"bottom"})}})($node,options)},toggleBtn:function($btn,isEnable){$btn.toggleClass("disabled",!isEnable);$btn.attr("disabled",!isEnable)},toggleBtnActive:function($btn,isActive){$btn.toggleClass("active",isActive)},onDialogShown:function($dialog,handler){$dialog.one("shown.bs.modal",handler)},onDialogHidden:function($dialog,handler){$dialog.one("hidden.bs.modal",handler)},showDialog:function($dialog){$dialog.modal("show")},hideDialog:function($dialog){$dialog.modal("hide")},createLayout:function($note,options){var $editor=(options.airMode?ui.airEditor([ui.editingArea([ui.airEditable()])]):ui.editor([ui.toolbar(),ui.editingArea([ui.codable(),ui.editable()]),ui.statusbar()])).render();$editor.insertAfter($note);return{note:$note,editor:$editor,toolbar:$editor.find(".note-toolbar"),editingArea:$editor.find(".note-editing-area"),editable:$editor.find(".note-editable"),codable:$editor.find(".note-codable"),statusbar:$editor.find(".note-statusbar")}},removeLayout:function($note,layoutInfo){$note.html(layoutInfo.editable.html());layoutInfo.editor.remove();$note.show()}};function eq(itemA){return function(itemB){return itemA===itemB}}function eq2(itemA,itemB){return itemA===itemB}function peq2(propName){return function(itemA,itemB){return itemA[propName]===itemB[propName]}}function ok(){return true}function fail(){return false}function not(f){return function(){return!f.apply(f,arguments)}}function and(fA,fB){return function(item){return fA(item)&&fB(item)}}function self(a){return a}function invoke(obj,method){return function(){return obj[method].apply(obj,arguments)}}var idCounter=0;function uniqueId(prefix){var id=++idCounter+"";return prefix?prefix+id:id}function rect2bnd(rect){var $document=$(document);return{top:rect.top+$document.scrollTop(),left:rect.left+$document.scrollLeft(),width:rect.right-rect.left,height:rect.bottom-rect.top}}function invertObject(obj){var inverted={};for(var key in obj){if(obj.hasOwnProperty(key)){inverted[obj[key]]=key}}return inverted}function namespaceToCamel(namespace,prefix){prefix=prefix||"";return prefix+namespace.split(".").map(function(name){return name.substring(0,1).toUpperCase()+name.substring(1)}).join("")}function debounce(func,wait,immediate){var _this=this;var timeout;return function(){var context=_this;var args=arguments;var later=function(){timeout=null;if(!immediate){func.apply(context,args)}};var callNow=immediate&&!timeout;clearTimeout(timeout);timeout=setTimeout(later,wait);if(callNow){func.apply(context,args)}}}var func={eq:eq,eq2:eq2,peq2:peq2,ok:ok,fail:fail,self:self,not:not,and:and,invoke:invoke,uniqueId:uniqueId,rect2bnd:rect2bnd,invertObject:invertObject,namespaceToCamel:namespaceToCamel,debounce:debounce};function head(array){return array[0]}function last(array){return array[array.length-1]}function initial(array){return array.slice(0,array.length-1)}function tail(array){return array.slice(1)}function find(array,pred){for(var idx=0,len=array.length;idx<len;idx++){var item=array[idx];if(pred(item)){return item}}}function all(array,pred){for(var idx=0,len=array.length;idx<len;idx++){if(!pred(array[idx])){return false}}return true}function indexOf(array,item){return $$1.inArray(item,array)}function contains(array,item){return indexOf(array,item)!==-1}function sum(array,fn){fn=fn||func.self;return array.reduce(function(memo,v){return memo+fn(v)},0)}function from(collection){var result=[];var length=collection.length;var idx=-1;while(++idx<length){result[idx]=collection[idx]}return result}function isEmpty$1(array){return!array||!array.length}function clusterBy(array,fn){if(!array.length){return[]}var aTail=tail(array);return aTail.reduce(function(memo,v){var aLast=last(memo);if(fn(last(aLast),v)){aLast[aLast.length]=v}else{memo[memo.length]=[v]}return memo},[[head(array)]])}function compact(array){var aResult=[];for(var idx=0,len=array.length;idx<len;idx++){if(array[idx]){aResult.push(array[idx])}}return aResult}function unique(array){var results=[];for(var idx=0,len=array.length;idx<len;idx++){if(!contains(results,array[idx])){results.push(array[idx])}}return results}function next(array,item){var idx=indexOf(array,item);if(idx===-1){return null}return array[idx+1]}function prev(array,item){var idx=indexOf(array,item);if(idx===-1){return null}return array[idx-1]}var lists={head:head,last:last,initial:initial,tail:tail,prev:prev,next:next,find:find,contains:contains,all:all,sum:sum,from:from,isEmpty:isEmpty$1,clusterBy:clusterBy,compact:compact,unique:unique};var isSupportAmd=typeof define==="function"&&define.amd;function isFontInstalled(fontName){var testFontName=fontName==="Comic Sans MS"?"Courier New":"Comic Sans MS";var $tester=$$1("<div>").css({position:"absolute",left:"-9999px",top:"-9999px",fontSize:"200px"}).text("mmmmmmmmmwwwwwww").appendTo(document.body);var originalWidth=$tester.css("fontFamily",testFontName).width();var width=$tester.css("fontFamily",fontName+","+testFontName).width();$tester.remove();return originalWidth!==width}var userAgent=navigator.userAgent;var isMSIE=/MSIE|Trident/i.test(userAgent);var browserVersion;if(isMSIE){var matches=/MSIE (\d+[.]\d+)/.exec(userAgent);if(matches){browserVersion=parseFloat(matches[1])}matches=/Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);if(matches){browserVersion=parseFloat(matches[1])}}var isEdge=/Edge\/\d+/.test(userAgent);var hasCodeMirror=!!window.CodeMirror;if(!hasCodeMirror&&isSupportAmd){if(typeof __webpack_require__==="function"){try{require.resolve("codemirror");hasCodeMirror=true}catch(e){}}else if(typeof require!=="undefined"){if(typeof require.resolve!=="undefined"){try{require.resolve("codemirror");hasCodeMirror=true}catch(e){}}else if(typeof require.specified!=="undefined"){hasCodeMirror=require.specified("codemirror")}}}var isSupportTouch="ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0;var inputEventName=isMSIE||isEdge?"DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted":"input";var env={isMac:navigator.appVersion.indexOf("Mac")>-1,isMSIE:isMSIE,isEdge:isEdge,isFF:!isEdge&&/firefox/i.test(userAgent),isPhantom:/PhantomJS/i.test(userAgent),isWebkit:!isEdge&&/webkit/i.test(userAgent),isChrome:!isEdge&&/chrome/i.test(userAgent),isSafari:!isEdge&&/safari/i.test(userAgent),browserVersion:browserVersion,jqueryVersion:parseFloat($$1.fn.jquery),isSupportAmd:isSupportAmd,isSupportTouch:isSupportTouch,hasCodeMirror:hasCodeMirror,isFontInstalled:isFontInstalled,isW3CRangeSupport:!!document.createRange,inputEventName:inputEventName};var NBSP_CHAR=String.fromCharCode(160);var ZERO_WIDTH_NBSP_CHAR="\ufeff";function isEditable(node){return node&&$$1(node).hasClass("note-editable")}function isControlSizing(node){return node&&$$1(node).hasClass("note-control-sizing")}function makePredByNodeName(nodeName){nodeName=nodeName.toUpperCase();return function(node){return node&&node.nodeName.toUpperCase()===nodeName}}function isText(node){return node&&node.nodeType===3}function isElement(node){return node&&node.nodeType===1}function isVoid(node){return node&&/^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase())}function isPara(node){if(isEditable(node)){return false}return node&&/^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase())}function isHeading(node){return node&&/^H[1-7]/.test(node.nodeName.toUpperCase())}var isPre=makePredByNodeName("PRE");var isLi=makePredByNodeName("LI");function isPurePara(node){return isPara(node)&&!isLi(node)}var isTable=makePredByNodeName("TABLE");var isData=makePredByNodeName("DATA");function isInline(node){return!isBodyContainer(node)&&!isList(node)&&!isHr(node)&&!isPara(node)&&!isTable(node)&&!isBlockquote(node)&&!isData(node)}function isList(node){return node&&/^UL|^OL/.test(node.nodeName.toUpperCase())}var isHr=makePredByNodeName("HR");function isCell(node){return node&&/^TD|^TH/.test(node.nodeName.toUpperCase())}var isBlockquote=makePredByNodeName("BLOCKQUOTE");function isBodyContainer(node){return isCell(node)||isBlockquote(node)||isEditable(node)}var isAnchor=makePredByNodeName("A");function isParaInline(node){return isInline(node)&&!!ancestor(node,isPara)}function isBodyInline(node){return isInline(node)&&!ancestor(node,isPara)}var isBody=makePredByNodeName("BODY");function isClosestSibling(nodeA,nodeB){return nodeA.nextSibling===nodeB||nodeA.previousSibling===nodeB}function withClosestSiblings(node,pred){pred=pred||func.ok;var siblings=[];if(node.previousSibling&&pred(node.previousSibling)){siblings.push(node.previousSibling)}siblings.push(node);if(node.nextSibling&&pred(node.nextSibling)){siblings.push(node.nextSibling)}return siblings}var blankHTML=env.isMSIE&&env.browserVersion<11?" ":"<br>";function nodeLength(node){if(isText(node)){return node.nodeValue.length}if(node){return node.childNodes.length}return 0}function isEmpty(node){var len=nodeLength(node);if(len===0){return true}else if(!isText(node)&&len===1&&node.innerHTML===blankHTML){return true}else if(lists.all(node.childNodes,isText)&&node.innerHTML===""){return true}return false}function paddingBlankHTML(node){if(!isVoid(node)&&!nodeLength(node)){node.innerHTML=blankHTML}}function ancestor(node,pred){while(node){if(pred(node)){return node}if(isEditable(node)){break}node=node.parentNode}return null}function singleChildAncestor(node,pred){node=node.parentNode;while(node){if(nodeLength(node)!==1){break}if(pred(node)){return node}if(isEditable(node)){break}node=node.parentNode}return null}function listAncestor(node,pred){pred=pred||func.fail;var ancestors=[];ancestor(node,function(el){if(!isEditable(el)){ancestors.push(el)}return pred(el)});return ancestors}function lastAncestor(node,pred){var ancestors=listAncestor(node);return lists.last(ancestors.filter(pred))}function commonAncestor(nodeA,nodeB){var ancestors=listAncestor(nodeA);for(var n=nodeB;n;n=n.parentNode){if($$1.inArray(n,ancestors)>-1){return n}}return null}function listPrev(node,pred){pred=pred||func.fail;var nodes=[];while(node){if(pred(node)){break}nodes.push(node);node=node.previousSibling}return nodes}function listNext(node,pred){pred=pred||func.fail;var nodes=[];while(node){if(pred(node)){break}nodes.push(node);node=node.nextSibling}return nodes}function listDescendant(node,pred){var descendants=[];pred=pred||func.ok;(function fnWalk(current){if(node!==current&&pred(current)){descendants.push(current)}for(var idx=0,len=current.childNodes.length;idx<len;idx++){fnWalk(current.childNodes[idx])}})(node);return descendants}function wrap(node,wrapperName){var parent=node.parentNode;var wrapper=$$1("<"+wrapperName+">")[0];parent.insertBefore(wrapper,node);wrapper.appendChild(node);return wrapper}function insertAfter(node,preceding){var next=preceding.nextSibling;var parent=preceding.parentNode;if(next){parent.insertBefore(node,next)}else{parent.appendChild(node)}return node}function appendChildNodes(node,aChild){$$1.each(aChild,function(idx,child){node.appendChild(child)});return node}function isLeftEdgePoint(point){return point.offset===0}function isRightEdgePoint(point){return point.offset===nodeLength(point.node)}function isEdgePoint(point){return isLeftEdgePoint(point)||isRightEdgePoint(point)}function isLeftEdgeOf(node,ancestor){while(node&&node!==ancestor){if(position(node)!==0){return false}node=node.parentNode}return true}function isRightEdgeOf(node,ancestor){if(!ancestor){return false}while(node&&node!==ancestor){if(position(node)!==nodeLength(node.parentNode)-1){return false}node=node.parentNode}return true}function isLeftEdgePointOf(point,ancestor){return isLeftEdgePoint(point)&&isLeftEdgeOf(point.node,ancestor)}function isRightEdgePointOf(point,ancestor){return isRightEdgePoint(point)&&isRightEdgeOf(point.node,ancestor)}function position(node){var offset=0;while(node=node.previousSibling){offset+=1}return offset}function hasChildren(node){return!!(node&&node.childNodes&&node.childNodes.length)}function prevPoint(point,isSkipInnerOffset){var node;var offset;if(point.offset===0){if(isEditable(point.node)){return null}node=point.node.parentNode;offset=position(point.node)}else if(hasChildren(point.node)){node=point.node.childNodes[point.offset-1];offset=nodeLength(node)}else{node=point.node;offset=isSkipInnerOffset?0:point.offset-1}return{node:node,offset:offset}}function nextPoint(point,isSkipInnerOffset){var node,offset;if(nodeLength(point.node)===point.offset){if(isEditable(point.node)){return null}node=point.node.parentNode;offset=position(point.node)+1}else if(hasChildren(point.node)){node=point.node.childNodes[point.offset];offset=0}else{node=point.node;offset=isSkipInnerOffset?nodeLength(point.node):point.offset+1}return{node:node,offset:offset}}function isSamePoint(pointA,pointB){return pointA.node===pointB.node&&pointA.offset===pointB.offset}function isVisiblePoint(point){if(isText(point.node)||!hasChildren(point.node)||isEmpty(point.node)){return true}var leftNode=point.node.childNodes[point.offset-1];var rightNode=point.node.childNodes[point.offset];if((!leftNode||isVoid(leftNode))&&(!rightNode||isVoid(rightNode))){return true}return false}function prevPointUntil(point,pred){while(point){if(pred(point)){return point}point=prevPoint(point)}return null}function nextPointUntil(point,pred){while(point){if(pred(point)){return point}point=nextPoint(point)}return null}function isCharPoint(point){if(!isText(point.node)){return false}var ch=point.node.nodeValue.charAt(point.offset-1);return ch&&(ch!==" "&&ch!==NBSP_CHAR)}function walkPoint(startPoint,endPoint,handler,isSkipInnerOffset){var point=startPoint;while(point){handler(point);if(isSamePoint(point,endPoint)){break}var isSkipOffset=isSkipInnerOffset&&startPoint.node!==point.node&&endPoint.node!==point.node;point=nextPoint(point,isSkipOffset)}}function makeOffsetPath(ancestor,node){var ancestors=listAncestor(node,func.eq(ancestor));return ancestors.map(position).reverse()}function fromOffsetPath(ancestor,offsets){var current=ancestor;for(var i=0,len=offsets.length;i<len;i++){if(current.childNodes.length<=offsets[i]){current=current.childNodes[current.childNodes.length-1]}else{current=current.childNodes[offsets[i]]}}return current}function splitNode(point,options){var isSkipPaddingBlankHTML=options&&options.isSkipPaddingBlankHTML;var isNotSplitEdgePoint=options&&options.isNotSplitEdgePoint;if(isEdgePoint(point)&&(isText(point.node)||isNotSplitEdgePoint)){if(isLeftEdgePoint(point)){return point.node}else if(isRightEdgePoint(point)){return point.node.nextSibling}}if(isText(point.node)){return point.node.splitText(point.offset)}else{var childNode=point.node.childNodes[point.offset];var clone=insertAfter(point.node.cloneNode(false),point.node);appendChildNodes(clone,listNext(childNode));if(!isSkipPaddingBlankHTML){paddingBlankHTML(point.node);paddingBlankHTML(clone)}return clone}}function splitTree(root,point,options){var ancestors=listAncestor(point.node,func.eq(root));if(!ancestors.length){return null}else if(ancestors.length===1){return splitNode(point,options)}return ancestors.reduce(function(node,parent){if(node===point.node){node=splitNode(point,options)}return splitNode({node:parent,offset:node?position(node):nodeLength(parent)},options)})}function splitPoint(point,isInline){var pred=isInline?isPara:isBodyContainer;var ancestors=listAncestor(point.node,pred);var topAncestor=lists.last(ancestors)||point.node;var splitRoot,container;if(pred(topAncestor)){splitRoot=ancestors[ancestors.length-2];container=topAncestor}else{splitRoot=topAncestor;container=splitRoot.parentNode}var pivot=splitRoot&&splitTree(splitRoot,point,{isSkipPaddingBlankHTML:isInline,isNotSplitEdgePoint:isInline});if(!pivot&&container===point.node){pivot=point.node.childNodes[point.offset]}return{rightNode:pivot,container:container}}function create(nodeName){return document.createElement(nodeName)}function createText(text){return document.createTextNode(text)}function remove(node,isRemoveChild){if(!node||!node.parentNode){return}if(node.removeNode){return node.removeNode(isRemoveChild)}var parent=node.parentNode;if(!isRemoveChild){var nodes=[];for(var i=0,len=node.childNodes.length;i<len;i++){nodes.push(node.childNodes[i])}for(var i=0,len=nodes.length;i<len;i++){parent.insertBefore(nodes[i],node)}}parent.removeChild(node)}function removeWhile(node,pred){while(node){if(isEditable(node)||!pred(node)){break}var parent=node.parentNode;remove(node);node=parent}}function replace(node,nodeName){if(node.nodeName.toUpperCase()===nodeName.toUpperCase()){return node}var newNode=create(nodeName);if(node.style.cssText){newNode.style.cssText=node.style.cssText}appendChildNodes(newNode,lists.from(node.childNodes));insertAfter(newNode,node);remove(node);return newNode}var isTextarea=makePredByNodeName("TEXTAREA");function value($node,stripLinebreaks){var val=isTextarea($node[0])?$node.val():$node.html();if(stripLinebreaks){return val.replace(/[\n\r]/g,"")}return val}function html($node,isNewlineOnBlock){var markup=value($node);if(isNewlineOnBlock){var regexTag=/<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g;markup=markup.replace(regexTag,function(match,endSlash,name){name=name.toUpperCase();var isEndOfInlineContainer=/^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name)&&!!endSlash;var isBlockNode=/^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);return match+(isEndOfInlineContainer||isBlockNode?"\n":"")});markup=$$1.trim(markup)}return markup}function posFromPlaceholder(placeholder){var $placeholder=$$1(placeholder);var pos=$placeholder.offset();var height=$placeholder.outerHeight(true);return{left:pos.left,top:pos.top+height}}function attachEvents($node,events){Object.keys(events).forEach(function(key){$node.on(key,events[key])})}function detachEvents($node,events){Object.keys(events).forEach(function(key){$node.off(key,events[key])})}function isCustomStyleTag(node){return node&&!isText(node)&&lists.contains(node.classList,"note-styletag")}var dom={NBSP_CHAR:NBSP_CHAR,ZERO_WIDTH_NBSP_CHAR:ZERO_WIDTH_NBSP_CHAR,blank:blankHTML,emptyPara:"<p>"+blankHTML+"</p>",makePredByNodeName:makePredByNodeName,isEditable:isEditable,isControlSizing:isControlSizing,isText:isText,isElement:isElement,isVoid:isVoid,isPara:isPara,isPurePara:isPurePara,isHeading:isHeading,isInline:isInline,isBlock:func.not(isInline),isBodyInline:isBodyInline,isBody:isBody,isParaInline:isParaInline,isPre:isPre,isList:isList,isTable:isTable,isData:isData,isCell:isCell,isBlockquote:isBlockquote,isBodyContainer:isBodyContainer,isAnchor:isAnchor,isDiv:makePredByNodeName("DIV"),isLi:isLi,isBR:makePredByNodeName("BR"),isSpan:makePredByNodeName("SPAN"),isB:makePredByNodeName("B"),isU:makePredByNodeName("U"),isS:makePredByNodeName("S"),isI:makePredByNodeName("I"),isImg:makePredByNodeName("IMG"),isTextarea:isTextarea,isEmpty:isEmpty,isEmptyAnchor:func.and(isAnchor,isEmpty),isClosestSibling:isClosestSibling,withClosestSiblings:withClosestSiblings,nodeLength:nodeLength,isLeftEdgePoint:isLeftEdgePoint,isRightEdgePoint:isRightEdgePoint,isEdgePoint:isEdgePoint,isLeftEdgeOf:isLeftEdgeOf,isRightEdgeOf:isRightEdgeOf,isLeftEdgePointOf:isLeftEdgePointOf,isRightEdgePointOf:isRightEdgePointOf,prevPoint:prevPoint,nextPoint:nextPoint,isSamePoint:isSamePoint,isVisiblePoint:isVisiblePoint,prevPointUntil:prevPointUntil,nextPointUntil:nextPointUntil,isCharPoint:isCharPoint,walkPoint:walkPoint,ancestor:ancestor,singleChildAncestor:singleChildAncestor,listAncestor:listAncestor,lastAncestor:lastAncestor,listNext:listNext,listPrev:listPrev,listDescendant:listDescendant,commonAncestor:commonAncestor,wrap:wrap,insertAfter:insertAfter,appendChildNodes:appendChildNodes,position:position,hasChildren:hasChildren,makeOffsetPath:makeOffsetPath,fromOffsetPath:fromOffsetPath,splitTree:splitTree,splitPoint:splitPoint,create:create,createText:createText,remove:remove,removeWhile:removeWhile,replace:replace,html:html,value:value,posFromPlaceholder:posFromPlaceholder,attachEvents:attachEvents,detachEvents:detachEvents,isCustomStyleTag:isCustomStyleTag};$$1.summernote=$$1.summernote||{lang:{}};$$1.extend($$1.summernote.lang,{"en-US":{font:{bold:"Bold",italic:"Italic",underline:"Underline",clear:"Remove Font Style",height:"Line Height",name:"Font Family",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript",size:"Font Size"},image:{image:"Picture",insert:"Insert Image",resizeFull:"Resize Full",resizeHalf:"Resize Half",resizeQuarter:"Resize Quarter",floatLeft:"Float Left",floatRight:"Float Right",floatNone:"Float None",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Drag image or text here",dropImage:"Drop image or Text",selectFromFiles:"Select from files",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Image URL",remove:"Remove Image",original:"Original"},video:{video:"Video",videoLink:"Video Link",insert:"Insert Video",url:"Video URL",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"Link",insert:"Insert Link",unlink:"Unlink",edit:"Edit",textToDisplay:"Text to display",url:"To what URL should this link go?",openInNewWindow:"Open in new window"},table:{table:"Table",addRowAbove:"Add row above",addRowBelow:"Add row below",addColLeft:"Add column left",addColRight:"Add column right",delRow:"Delete row",delCol:"Delete column",delTable:"Delete table"},hr:{insert:"Insert Horizontal Rule"},style:{style:"Style",p:"Normal",blockquote:"Quote",pre:"Code",h1:"Header 1",h2:"Header 2",h3:"Header 3",h4:"Header 4",h5:"Header 5",h6:"Header 6"},lists:{unordered:"Unordered list",ordered:"Ordered list"},options:{help:"Help",fullscreen:"Full Screen",codeview:"Code View"},paragraph:{paragraph:"Paragraph",outdent:"Outdent",indent:"Indent",left:"Align left",center:"Align center",right:"Align right",justify:"Justify full"},color:{recent:"Recent Color",more:"More Color",background:"Background Color",foreground:"Foreground Color",transparent:"Transparent",setTransparent:"Set transparent",reset:"Reset",resetToDefault:"Reset to default"},shortcut:{shortcuts:"Keyboard shortcuts",close:"Close",textFormatting:"Text formatting",action:"Action",paragraphFormatting:"Paragraph formatting",documentStyle:"Document Style",extraKeys:"Extra keys"},help:{insertParagraph:"Insert Paragraph",undo:"Undoes the last command",redo:"Redoes the last command",tab:"Tab",untab:"Untab",bold:"Set a bold style",italic:"Set a italic style",underline:"Set a underline style",strikethrough:"Set a strikethrough style",removeFormat:"Clean a style",justifyLeft:"Set left align",justifyCenter:"Set center align",justifyRight:"Set right align",justifyFull:"Set full align",insertUnorderedList:"Toggle unordered list",insertOrderedList:"Toggle ordered list",outdent:"Outdent on current paragraph",indent:"Indent on current paragraph",formatPara:"Change current block's format as a paragraph(P tag)",formatH1:"Change current block's format as H1",formatH2:"Change current block's format as H2",formatH3:"Change current block's format as H3",formatH4:"Change current block's format as H4",formatH5:"Change current block's format as H5",formatH6:"Change current block's format as H6",insertHorizontalRule:"Insert horizontal rule","linkDialog.show":"Show Link Dialog"},history:{undo:"Undo",redo:"Redo"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}});var KEY_MAP={BACKSPACE:8,TAB:9,ENTER:13,SPACE:32,DELETE:46,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUM0:48,NUM1:49,NUM2:50,NUM3:51,NUM4:52,NUM5:53,NUM6:54,NUM7:55,NUM8:56,B:66,E:69,I:73,J:74,K:75,L:76,R:82,S:83,U:85,V:86,Y:89,Z:90,SLASH:191,LEFTBRACKET:219,BACKSLASH:220,RIGHTBRACKET:221};var key={isEdit:function(keyCode){return lists.contains([KEY_MAP.BACKSPACE,KEY_MAP.TAB,KEY_MAP.ENTER,KEY_MAP.SPACE,KEY_MAP.DELETE],keyCode)},isMove:function(keyCode){return lists.contains([KEY_MAP.LEFT,KEY_MAP.UP,KEY_MAP.RIGHT,KEY_MAP.DOWN],keyCode)},nameFromCode:func.invertObject(KEY_MAP),code:KEY_MAP};function textRangeToPoint(textRange,isStart){var container=textRange.parentElement();var offset;var tester=document.body.createTextRange();var prevContainer;var childNodes=lists.from(container.childNodes);for(offset=0;offset<childNodes.length;offset++){if(dom.isText(childNodes[offset])){continue}tester.moveToElementText(childNodes[offset]);if(tester.compareEndPoints("StartToStart",textRange)>=0){break}prevContainer=childNodes[offset]}if(offset!==0&&dom.isText(childNodes[offset-1])){var textRangeStart=document.body.createTextRange();var curTextNode=null;textRangeStart.moveToElementText(prevContainer||container);textRangeStart.collapse(!prevContainer);curTextNode=prevContainer?prevContainer.nextSibling:container.firstChild;var pointTester=textRange.duplicate();pointTester.setEndPoint("StartToStart",textRangeStart);var textCount=pointTester.text.replace(/[\r\n]/g,"").length;while(textCount>curTextNode.nodeValue.length&&curTextNode.nextSibling){textCount-=curTextNode.nodeValue.length;curTextNode=curTextNode.nextSibling}var dummy=curTextNode.nodeValue;if(isStart&&curTextNode.nextSibling&&dom.isText(curTextNode.nextSibling)&&textCount===curTextNode.nodeValue.length){textCount-=curTextNode.nodeValue.length;curTextNode=curTextNode.nextSibling}container=curTextNode;offset=textCount}return{cont:container,offset:offset}}function pointToTextRange(point){var textRangeInfo=function(container,offset){var node,isCollapseToStart;if(dom.isText(container)){var prevTextNodes=dom.listPrev(container,func.not(dom.isText));var prevContainer=lists.last(prevTextNodes).previousSibling;node=prevContainer||container.parentNode;offset+=lists.sum(lists.tail(prevTextNodes),dom.nodeLength);isCollapseToStart=!prevContainer}else{node=container.childNodes[offset]||container;if(dom.isText(node)){return textRangeInfo(node,0)}offset=0;isCollapseToStart=false}return{node:node,collapseToStart:isCollapseToStart,offset:offset}};var textRange=document.body.createTextRange();var info=textRangeInfo(point.node,point.offset);textRange.moveToElementText(info.node);textRange.collapse(info.collapseToStart);textRange.moveStart("character",info.offset);return textRange}var WrappedRange=function(){function WrappedRange(sc,so,ec,eo){this.sc=sc;this.so=so;this.ec=ec;this.eo=eo;this.isOnEditable=this.makeIsOn(dom.isEditable);this.isOnList=this.makeIsOn(dom.isList);this.isOnAnchor=this.makeIsOn(dom.isAnchor);this.isOnCell=this.makeIsOn(dom.isCell);this.isOnData=this.makeIsOn(dom.isData)}WrappedRange.prototype.nativeRange=function(){if(env.isW3CRangeSupport){var w3cRange=document.createRange();w3cRange.setStart(this.sc,this.so);w3cRange.setEnd(this.ec,this.eo);return w3cRange}else{var textRange=pointToTextRange({node:this.sc,offset:this.so});textRange.setEndPoint("EndToEnd",pointToTextRange({node:this.ec,offset:this.eo}));return textRange}};WrappedRange.prototype.getPoints=function(){return{sc:this.sc,so:this.so,ec:this.ec,eo:this.eo}};WrappedRange.prototype.getStartPoint=function(){return{node:this.sc,offset:this.so}};WrappedRange.prototype.getEndPoint=function(){return{node:this.ec,offset:this.eo}};WrappedRange.prototype.select=function(){var nativeRng=this.nativeRange();if(env.isW3CRangeSupport){var selection=document.getSelection();if(selection.rangeCount>0){selection.removeAllRanges()}selection.addRange(nativeRng)}else{nativeRng.select()}return this};WrappedRange.prototype.scrollIntoView=function(container){var height=$$1(container).height();if(container.scrollTop+height<this.sc.offsetTop){container.scrollTop+=Math.abs(container.scrollTop+height-this.sc.offsetTop)}return this};WrappedRange.prototype.normalize=function(){var getVisiblePoint=function(point,isLeftToRight){if(dom.isVisiblePoint(point)&&!dom.isEdgePoint(point)||dom.isVisiblePoint(point)&&dom.isRightEdgePoint(point)&&!isLeftToRight||dom.isVisiblePoint(point)&&dom.isLeftEdgePoint(point)&&isLeftToRight||dom.isVisiblePoint(point)&&dom.isBlock(point.node)&&dom.isEmpty(point.node)){return point}var block=dom.ancestor(point.node,dom.isBlock);if((dom.isLeftEdgePointOf(point,block)||dom.isVoid(dom.prevPoint(point).node))&&!isLeftToRight||(dom.isRightEdgePointOf(point,block)||dom.isVoid(dom.nextPoint(point).node))&&isLeftToRight){if(dom.isVisiblePoint(point)){return point}isLeftToRight=!isLeftToRight}var nextPoint=isLeftToRight?dom.nextPointUntil(dom.nextPoint(point),dom.isVisiblePoint):dom.prevPointUntil(dom.prevPoint(point),dom.isVisiblePoint);return nextPoint||point};var endPoint=getVisiblePoint(this.getEndPoint(),false);var startPoint=this.isCollapsed()?endPoint:getVisiblePoint(this.getStartPoint(),true);return new WrappedRange(startPoint.node,startPoint.offset,endPoint.node,endPoint.offset)};WrappedRange.prototype.nodes=function(pred,options){pred=pred||func.ok;var includeAncestor=options&&options.includeAncestor;var fullyContains=options&&options.fullyContains;var startPoint=this.getStartPoint();var endPoint=this.getEndPoint();var nodes=[];var leftEdgeNodes=[];dom.walkPoint(startPoint,endPoint,function(point){if(dom.isEditable(point.node)){return}var node;if(fullyContains){if(dom.isLeftEdgePoint(point)){leftEdgeNodes.push(point.node)}if(dom.isRightEdgePoint(point)&&lists.contains(leftEdgeNodes,point.node)){node=point.node}}else if(includeAncestor){node=dom.ancestor(point.node,pred)}else{node=point.node}if(node&&pred(node)){nodes.push(node)}},true);return lists.unique(nodes)};WrappedRange.prototype.commonAncestor=function(){return dom.commonAncestor(this.sc,this.ec)};WrappedRange.prototype.expand=function(pred){var startAncestor=dom.ancestor(this.sc,pred);var endAncestor=dom.ancestor(this.ec,pred);if(!startAncestor&&!endAncestor){return new WrappedRange(this.sc,this.so,this.ec,this.eo)}var boundaryPoints=this.getPoints();if(startAncestor){boundaryPoints.sc=startAncestor;boundaryPoints.so=0}if(endAncestor){boundaryPoints.ec=endAncestor;boundaryPoints.eo=dom.nodeLength(endAncestor)}return new WrappedRange(boundaryPoints.sc,boundaryPoints.so,boundaryPoints.ec,boundaryPoints.eo)};WrappedRange.prototype.collapse=function(isCollapseToStart){if(isCollapseToStart){return new WrappedRange(this.sc,this.so,this.sc,this.so)}else{return new WrappedRange(this.ec,this.eo,this.ec,this.eo)}};WrappedRange.prototype.splitText=function(){var isSameContainer=this.sc===this.ec;var boundaryPoints=this.getPoints();if(dom.isText(this.ec)&&!dom.isEdgePoint(this.getEndPoint())){this.ec.splitText(this.eo)}if(dom.isText(this.sc)&&!dom.isEdgePoint(this.getStartPoint())){boundaryPoints.sc=this.sc.splitText(this.so);boundaryPoints.so=0;if(isSameContainer){boundaryPoints.ec=boundaryPoints.sc;boundaryPoints.eo=this.eo-this.so}}return new WrappedRange(boundaryPoints.sc,boundaryPoints.so,boundaryPoints.ec,boundaryPoints.eo)};WrappedRange.prototype.deleteContents=function(){if(this.isCollapsed()){return this}var rng=this.splitText();var nodes=rng.nodes(null,{fullyContains:true});var point=dom.prevPointUntil(rng.getStartPoint(),function(point){return!lists.contains(nodes,point.node)});var emptyParents=[];$$1.each(nodes,function(idx,node){var parent=node.parentNode;if(point.node!==parent&&dom.nodeLength(parent)===1){emptyParents.push(parent)}dom.remove(node,false)});$$1.each(emptyParents,function(idx,node){dom.remove(node,false)});return new WrappedRange(point.node,point.offset,point.node,point.offset).normalize()};WrappedRange.prototype.makeIsOn=function(pred){return function(){var ancestor=dom.ancestor(this.sc,pred);return!!ancestor&&ancestor===dom.ancestor(this.ec,pred)}};WrappedRange.prototype.isLeftEdgeOf=function(pred){if(!dom.isLeftEdgePoint(this.getStartPoint())){return false}var node=dom.ancestor(this.sc,pred);return node&&dom.isLeftEdgeOf(this.sc,node)};WrappedRange.prototype.isCollapsed=function(){return this.sc===this.ec&&this.so===this.eo};WrappedRange.prototype.wrapBodyInlineWithPara=function(){if(dom.isBodyContainer(this.sc)&&dom.isEmpty(this.sc)){this.sc.innerHTML=dom.emptyPara;return new WrappedRange(this.sc.firstChild,0,this.sc.firstChild,0)}var rng=this.normalize();if(dom.isParaInline(this.sc)||dom.isPara(this.sc)){return rng}var topAncestor;if(dom.isInline(rng.sc)){var ancestors=dom.listAncestor(rng.sc,func.not(dom.isInline));topAncestor=lists.last(ancestors);if(!dom.isInline(topAncestor)){topAncestor=ancestors[ancestors.length-2]||rng.sc.childNodes[rng.so]}}else{topAncestor=rng.sc.childNodes[rng.so>0?rng.so-1:0]}var inlineSiblings=dom.listPrev(topAncestor,dom.isParaInline).reverse();inlineSiblings=inlineSiblings.concat(dom.listNext(topAncestor.nextSibling,dom.isParaInline));if(inlineSiblings.length){var para=dom.wrap(lists.head(inlineSiblings),"p");dom.appendChildNodes(para,lists.tail(inlineSiblings))}return this.normalize()};WrappedRange.prototype.insertNode=function(node){var rng=this.wrapBodyInlineWithPara().deleteContents();var info=dom.splitPoint(rng.getStartPoint(),dom.isInline(node));if(info.rightNode){info.rightNode.parentNode.insertBefore(node,info.rightNode)}else{info.container.appendChild(node)}return node};WrappedRange.prototype.pasteHTML=function(markup){var contentsContainer=$$1("<div></div>").html(markup)[0];var childNodes=lists.from(contentsContainer.childNodes);var rng=this.wrapBodyInlineWithPara().deleteContents();return childNodes.reverse().map(function(childNode){return rng.insertNode(childNode)}).reverse()};WrappedRange.prototype.toString=function(){var nativeRng=this.nativeRange();return env.isW3CRangeSupport?nativeRng.toString():nativeRng.text};WrappedRange.prototype.getWordRange=function(findAfter){var endPoint=this.getEndPoint();if(!dom.isCharPoint(endPoint)){return this}var startPoint=dom.prevPointUntil(endPoint,function(point){return!dom.isCharPoint(point)});if(findAfter){endPoint=dom.nextPointUntil(endPoint,function(point){return!dom.isCharPoint(point)})}return new WrappedRange(startPoint.node,startPoint.offset,endPoint.node,endPoint.offset)};WrappedRange.prototype.bookmark=function(editable){return{s:{path:dom.makeOffsetPath(editable,this.sc),offset:this.so},e:{path:dom.makeOffsetPath(editable,this.ec),offset:this.eo}}};WrappedRange.prototype.paraBookmark=function(paras){return{s:{path:lists.tail(dom.makeOffsetPath(lists.head(paras),this.sc)),offset:this.so},e:{path:lists.tail(dom.makeOffsetPath(lists.last(paras),this.ec)),offset:this.eo}}};WrappedRange.prototype.getClientRects=function(){var nativeRng=this.nativeRange();return nativeRng.getClientRects()};return WrappedRange}();var range={create:function(sc,so,ec,eo){if(arguments.length===4){return new WrappedRange(sc,so,ec,eo)}else if(arguments.length===2){ec=sc;eo=so;return new WrappedRange(sc,so,ec,eo)}else{var wrappedRange=this.createFromSelection();if(!wrappedRange&&arguments.length===1){wrappedRange=this.createFromNode(arguments[0]);return wrappedRange.collapse(dom.emptyPara===arguments[0].innerHTML)}return wrappedRange}},createFromSelection:function(){var sc,so,ec,eo;if(env.isW3CRangeSupport){var selection=document.getSelection();if(!selection||selection.rangeCount===0){return null}else if(dom.isBody(selection.anchorNode)){return null}var nativeRng=selection.getRangeAt(0);sc=nativeRng.startContainer;so=nativeRng.startOffset;ec=nativeRng.endContainer;eo=nativeRng.endOffset}else{var textRange=document.selection.createRange();var textRangeEnd=textRange.duplicate();textRangeEnd.collapse(false);var textRangeStart=textRange;textRangeStart.collapse(true);var startPoint=textRangeToPoint(textRangeStart,true);var endPoint=textRangeToPoint(textRangeEnd,false);if(dom.isText(startPoint.node)&&dom.isLeftEdgePoint(startPoint)&&dom.isTextNode(endPoint.node)&&dom.isRightEdgePoint(endPoint)&&endPoint.node.nextSibling===startPoint.node){startPoint=endPoint}sc=startPoint.cont;so=startPoint.offset;ec=endPoint.cont;eo=endPoint.offset}return new WrappedRange(sc,so,ec,eo)},createFromNode:function(node){var sc=node;var so=0;var ec=node;var eo=dom.nodeLength(ec);if(dom.isVoid(sc)){so=dom.listPrev(sc).length-1;sc=sc.parentNode}if(dom.isBR(ec)){eo=dom.listPrev(ec).length-1;ec=ec.parentNode}else if(dom.isVoid(ec)){eo=dom.listPrev(ec).length;ec=ec.parentNode}return this.create(sc,so,ec,eo)},createFromNodeBefore:function(node){return this.createFromNode(node).collapse(true)},createFromNodeAfter:function(node){return this.createFromNode(node).collapse()},createFromBookmark:function(editable,bookmark){var sc=dom.fromOffsetPath(editable,bookmark.s.path);var so=bookmark.s.offset;var ec=dom.fromOffsetPath(editable,bookmark.e.path);var eo=bookmark.e.offset;return new WrappedRange(sc,so,ec,eo)},createFromParaBookmark:function(bookmark,paras){var so=bookmark.s.offset;var eo=bookmark.e.offset;var sc=dom.fromOffsetPath(lists.head(paras),bookmark.s.path);var ec=dom.fromOffsetPath(lists.last(paras),bookmark.e.path);return new WrappedRange(sc,so,ec,eo)}};function readFileAsDataURL(file){return $$1.Deferred(function(deferred){$$1.extend(new FileReader,{onload:function(e){var dataURL=e.target.result;deferred.resolve(dataURL)},onerror:function(err){deferred.reject(err)}}).readAsDataURL(file)}).promise()}function createImage(url){return $$1.Deferred(function(deferred){var $img=$$1("<img>");$img.one("load",function(){$img.off("error abort");deferred.resolve($img)}).one("error abort",function(){$img.off("load").detach();deferred.reject($img)}).css({display:"none"}).appendTo(document.body).attr("src",url)}).promise()}var History=function(){function History($editable){this.stack=[];this.stackOffset=-1;this.$editable=$editable;this.editable=$editable[0]}History.prototype.makeSnapshot=function(){var rng=range.create(this.editable);var emptyBookmark={s:{path:[],offset:0},e:{path:[],offset:0}};return{contents:this.$editable.html(),bookmark:rng?rng.bookmark(this.editable):emptyBookmark}};History.prototype.applySnapshot=function(snapshot){if(snapshot.contents!==null){this.$editable.html(snapshot.contents)}if(snapshot.bookmark!==null){range.createFromBookmark(this.editable,snapshot.bookmark).select()}};History.prototype.rewind=function(){if(this.$editable.html()!==this.stack[this.stackOffset].contents){this.recordUndo()}this.stackOffset=0;this.applySnapshot(this.stack[this.stackOffset])};History.prototype.reset=function(){this.stack=[];this.stackOffset=-1;this.$editable.html("");this.recordUndo()};History.prototype.undo=function(){if(this.$editable.html()!==this.stack[this.stackOffset].contents){this.recordUndo()}if(this.stackOffset>0){this.stackOffset--;this.applySnapshot(this.stack[this.stackOffset])}};History.prototype.redo=function(){if(this.stack.length-1>this.stackOffset){this.stackOffset++;this.applySnapshot(this.stack[this.stackOffset])}};History.prototype.recordUndo=function(){this.stackOffset++;if(this.stack.length>this.stackOffset){this.stack=this.stack.slice(0,this.stackOffset)}this.stack.push(this.makeSnapshot())};return History}();var Style=function(){function Style(){}Style.prototype.jQueryCSS=function($obj,propertyNames){if(env.jqueryVersion<1.9){var result_1={};$$1.each(propertyNames,function(idx,propertyName){result_1[propertyName]=$obj.css(propertyName)});return result_1}return $obj.css(propertyNames)};Style.prototype.fromNode=function($node){var properties=["font-family","font-size","text-align","list-style-type","line-height"];var styleInfo=this.jQueryCSS($node,properties)||{};styleInfo["font-size"]=parseInt(styleInfo["font-size"],10);return styleInfo};Style.prototype.stylePara=function(rng,styleInfo){$$1.each(rng.nodes(dom.isPara,{includeAncestor:true}),function(idx,para){$$1(para).css(styleInfo)})};Style.prototype.styleNodes=function(rng,options){rng=rng.splitText();var nodeName=options&&options.nodeName||"SPAN";var expandClosestSibling=!!(options&&options.expandClosestSibling);var onlyPartialContains=!!(options&&options.onlyPartialContains);if(rng.isCollapsed()){return[rng.insertNode(dom.create(nodeName))]}var pred=dom.makePredByNodeName(nodeName);var nodes=rng.nodes(dom.isText,{fullyContains:true}).map(function(text){return dom.singleChildAncestor(text,pred)||dom.wrap(text,nodeName)});if(expandClosestSibling){if(onlyPartialContains){var nodesInRange_1=rng.nodes();pred=func.and(pred,function(node){return lists.contains(nodesInRange_1,node)})}return nodes.map(function(node){var siblings=dom.withClosestSiblings(node,pred);var head=lists.head(siblings);var tails=lists.tail(siblings);$$1.each(tails,function(idx,elem){dom.appendChildNodes(head,elem.childNodes);dom.remove(elem)});return lists.head(siblings)})}else{return nodes}};Style.prototype.current=function(rng){var $cont=$$1(!dom.isElement(rng.sc)?rng.sc.parentNode:rng.sc);var styleInfo=this.fromNode($cont);try{styleInfo=$$1.extend(styleInfo,{"font-bold":document.queryCommandState("bold")?"bold":"normal","font-italic":document.queryCommandState("italic")?"italic":"normal","font-underline":document.queryCommandState("underline")?"underline":"normal","font-subscript":document.queryCommandState("subscript")?"subscript":"normal","font-superscript":document.queryCommandState("superscript")?"superscript":"normal","font-strikethrough":document.queryCommandState("strikethrough")?"strikethrough":"normal","font-family":document.queryCommandValue("fontname")||styleInfo["font-family"]})}catch(e){}if(!rng.isOnList()){styleInfo["list-style"]="none"}else{var orderedTypes=["circle","disc","disc-leading-zero","square"];var isUnordered=$$1.inArray(styleInfo["list-style-type"],orderedTypes)>-1;styleInfo["list-style"]=isUnordered?"unordered":"ordered"}var para=dom.ancestor(rng.sc,dom.isPara);if(para&¶.style["line-height"]){styleInfo["line-height"]=para.style.lineHeight}else{var lineHeight=parseInt(styleInfo["line-height"],10)/parseInt(styleInfo["font-size"],10);styleInfo["line-height"]=lineHeight.toFixed(1)}styleInfo.anchor=rng.isOnAnchor()&&dom.ancestor(rng.sc,dom.isAnchor);styleInfo.ancestors=dom.listAncestor(rng.sc,dom.isEditable);styleInfo.range=rng;return styleInfo};return Style}();var Bullet=function(){function Bullet(){}Bullet.prototype.insertOrderedList=function(editable){this.toggleList("OL",editable)};Bullet.prototype.insertUnorderedList=function(editable){this.toggleList("UL",editable)};Bullet.prototype.indent=function(editable){var _this=this;var rng=range.create(editable).wrapBodyInlineWithPara();var paras=rng.nodes(dom.isPara,{includeAncestor:true});var clustereds=lists.clusterBy(paras,func.peq2("parentNode"));$$1.each(clustereds,function(idx,paras){var head=lists.head(paras);if(dom.isLi(head)){_this.wrapList(paras,head.parentNode.nodeName)}else{$$1.each(paras,function(idx,para){$$1(para).css("marginLeft",function(idx,val){return(parseInt(val,10)||0)+25})})}});rng.select()};Bullet.prototype.outdent=function(editable){var _this=this;var rng=range.create(editable).wrapBodyInlineWithPara();var paras=rng.nodes(dom.isPara,{includeAncestor:true});var clustereds=lists.clusterBy(paras,func.peq2("parentNode"));$$1.each(clustereds,function(idx,paras){var head=lists.head(paras);if(dom.isLi(head)){_this.releaseList([paras])}else{$$1.each(paras,function(idx,para){$$1(para).css("marginLeft",function(idx,val){val=parseInt(val,10)||0;return val>25?val-25:""})})}});rng.select()};Bullet.prototype.toggleList=function(listName,editable){var _this=this;var rng=range.create(editable).wrapBodyInlineWithPara();var paras=rng.nodes(dom.isPara,{includeAncestor:true});var bookmark=rng.paraBookmark(paras);var clustereds=lists.clusterBy(paras,func.peq2("parentNode"));if(lists.find(paras,dom.isPurePara)){var wrappedParas_1=[];$$1.each(clustereds,function(idx,paras){wrappedParas_1=wrappedParas_1.concat(_this.wrapList(paras,listName))});paras=wrappedParas_1}else{var diffLists=rng.nodes(dom.isList,{includeAncestor:true}).filter(function(listNode){return!$$1.nodeName(listNode,listName)});if(diffLists.length){$$1.each(diffLists,function(idx,listNode){dom.replace(listNode,listName)})}else{paras=this.releaseList(clustereds,true)}}range.createFromParaBookmark(bookmark,paras).select()};Bullet.prototype.wrapList=function(paras,listName){var head=lists.head(paras);var last=lists.last(paras);var prevList=dom.isList(head.previousSibling)&&head.previousSibling;var nextList=dom.isList(last.nextSibling)&&last.nextSibling;var listNode=prevList||dom.insertAfter(dom.create(listName||"UL"),last);paras=paras.map(function(para){return dom.isPurePara(para)?dom.replace(para,"LI"):para});dom.appendChildNodes(listNode,paras);if(nextList){dom.appendChildNodes(listNode,lists.from(nextList.childNodes));dom.remove(nextList)}return paras};Bullet.prototype.releaseList=function(clustereds,isEscapseToBody){var releasedParas=[];$$1.each(clustereds,function(idx,paras){var head=lists.head(paras);var last=lists.last(paras);var headList=isEscapseToBody?dom.lastAncestor(head,dom.isList):head.parentNode;var lastList=headList.childNodes.length>1?dom.splitTree(headList,{node:last.parentNode,offset:dom.position(last)+1},{isSkipPaddingBlankHTML:true}):null;var middleList=dom.splitTree(headList,{node:head.parentNode,offset:dom.position(head)},{isSkipPaddingBlankHTML:true});paras=isEscapseToBody?dom.listDescendant(middleList,dom.isLi):lists.from(middleList.childNodes).filter(dom.isLi);if(isEscapseToBody||!dom.isList(headList.parentNode)){paras=paras.map(function(para){return dom.replace(para,"P")})}$$1.each(lists.from(paras).reverse(),function(idx,para){dom.insertAfter(para,headList)});var rootLists=lists.compact([headList,middleList,lastList]);$$1.each(rootLists,function(idx,rootList){var listNodes=[rootList].concat(dom.listDescendant(rootList,dom.isList));$$1.each(listNodes.reverse(),function(idx,listNode){if(!dom.nodeLength(listNode)){dom.remove(listNode,true)}})});releasedParas=releasedParas.concat(paras)});return releasedParas};return Bullet}();var Typing=function(){function Typing(){this.bullet=new Bullet}Typing.prototype.insertTab=function(rng,tabsize){var tab=dom.createText(new Array(tabsize+1).join(dom.NBSP_CHAR));rng=rng.deleteContents();rng.insertNode(tab,true);rng=range.create(tab,tabsize);rng.select()};Typing.prototype.insertParagraph=function(editable){var rng=range.create(editable);rng=rng.deleteContents();rng=rng.wrapBodyInlineWithPara();var splitRoot=dom.ancestor(rng.sc,dom.isPara);var nextPara;if(splitRoot){if(dom.isEmpty(splitRoot)&&dom.isLi(splitRoot)){this.bullet.toggleList(splitRoot.parentNode.nodeName);return}else if(dom.isEmpty(splitRoot)&&dom.isPara(splitRoot)&&dom.isBlockquote(splitRoot.parentNode)){dom.insertAfter(splitRoot,splitRoot.parentNode);nextPara=splitRoot}else{nextPara=dom.splitTree(splitRoot,rng.getStartPoint());var emptyAnchors=dom.listDescendant(splitRoot,dom.isEmptyAnchor);emptyAnchors=emptyAnchors.concat(dom.listDescendant(nextPara,dom.isEmptyAnchor));$$1.each(emptyAnchors,function(idx,anchor){dom.remove(anchor)});if((dom.isHeading(nextPara)||dom.isPre(nextPara)||dom.isCustomStyleTag(nextPara))&&dom.isEmpty(nextPara)){nextPara=dom.replace(nextPara,"p")}}}else{var next=rng.sc.childNodes[rng.so];nextPara=$$1(dom.emptyPara)[0];if(next){rng.sc.insertBefore(nextPara,next)}else{rng.sc.appendChild(nextPara)}}range.create(nextPara,0).normalize().select().scrollIntoView(editable)};return Typing}();var TableResultAction=function(startPoint,where,action,domTable){var _startPoint={colPos:0,rowPos:0};var _virtualTable=[];var _actionCellList=[];function setStartPoint(){if(!startPoint||!startPoint.tagName||startPoint.tagName.toLowerCase()!=="td"&&startPoint.tagName.toLowerCase()!=="th"){console.error("Impossible to identify start Cell point.",startPoint);return}_startPoint.colPos=startPoint.cellIndex;if(!startPoint.parentElement||!startPoint.parentElement.tagName||startPoint.parentElement.tagName.toLowerCase()!=="tr"){console.error("Impossible to identify start Row point.",startPoint);return}_startPoint.rowPos=startPoint.parentElement.rowIndex}function setVirtualTablePosition(rowIndex,cellIndex,baseRow,baseCell,isRowSpan,isColSpan,isVirtualCell){var objPosition={baseRow:baseRow,baseCell:baseCell,isRowSpan:isRowSpan,isColSpan:isColSpan,isVirtual:isVirtualCell};if(!_virtualTable[rowIndex]){_virtualTable[rowIndex]=[]}_virtualTable[rowIndex][cellIndex]=objPosition}function getActionCell(virtualTableCellObj,resultAction,virtualRowPosition,virtualColPosition){return{baseCell:virtualTableCellObj.baseCell,action:resultAction,virtualTable:{rowIndex:virtualRowPosition,cellIndex:virtualColPosition}}}function recoverCellIndex(rowIndex,cellIndex){if(!_virtualTable[rowIndex]){return cellIndex}if(!_virtualTable[rowIndex][cellIndex]){return cellIndex}var newCellIndex=cellIndex;while(_virtualTable[rowIndex][newCellIndex]){newCellIndex++;if(!_virtualTable[rowIndex][newCellIndex]){return newCellIndex}}}function addCellInfoToVirtual(row,cell){var cellIndex=recoverCellIndex(row.rowIndex,cell.cellIndex);var cellHasColspan=cell.colSpan>1;var cellHasRowspan=cell.rowSpan>1;var isThisSelectedCell=row.rowIndex===_startPoint.rowPos&&cell.cellIndex===_startPoint.colPos;setVirtualTablePosition(row.rowIndex,cellIndex,row,cell,cellHasRowspan,cellHasColspan,false);var rowspanNumber=cell.attributes.rowSpan?parseInt(cell.attributes.rowSpan.value,10):0;if(rowspanNumber>1){for(var rp=1;rp<rowspanNumber;rp++){var rowspanIndex=row.rowIndex+rp;adjustStartPoint(rowspanIndex,cellIndex,cell,isThisSelectedCell);setVirtualTablePosition(rowspanIndex,cellIndex,row,cell,true,cellHasColspan,true)}}var colspanNumber=cell.attributes.colSpan?parseInt(cell.attributes.colSpan.value,10):0;if(colspanNumber>1){for(var cp=1;cp<colspanNumber;cp++){var cellspanIndex=recoverCellIndex(row.rowIndex,cellIndex+cp);adjustStartPoint(row.rowIndex,cellspanIndex,cell,isThisSelectedCell);setVirtualTablePosition(row.rowIndex,cellspanIndex,row,cell,cellHasRowspan,true,true)}}}function adjustStartPoint(rowIndex,cellIndex,cell,isSelectedCell){if(rowIndex===_startPoint.rowPos&&_startPoint.colPos>=cell.cellIndex&&cell.cellIndex<=cellIndex&&!isSelectedCell){_startPoint.colPos++}}function createVirtualTable(){var rows=domTable.rows;for(var rowIndex=0;rowIndex<rows.length;rowIndex++){var cells=rows[rowIndex].cells;for(var cellIndex=0;cellIndex<cells.length;cellIndex++){addCellInfoToVirtual(rows[rowIndex],cells[cellIndex])}}}function getDeleteResultActionToCell(cell){switch(where){case TableResultAction.where.Column:if(cell.isColSpan){return TableResultAction.resultAction.SubtractSpanCount}break;case TableResultAction.where.Row:if(!cell.isVirtual&&cell.isRowSpan){return TableResultAction.resultAction.AddCell}else if(cell.isRowSpan){return TableResultAction.resultAction.SubtractSpanCount}break}return TableResultAction.resultAction.RemoveCell}function getAddResultActionToCell(cell){switch(where){case TableResultAction.where.Column:if(cell.isColSpan){return TableResultAction.resultAction.SumSpanCount}else if(cell.isRowSpan&&cell.isVirtual){return TableResultAction.resultAction.Ignore}break;case TableResultAction.where.Row:if(cell.isRowSpan){return TableResultAction.resultAction.SumSpanCount}else if(cell.isColSpan&&cell.isVirtual){return TableResultAction.resultAction.Ignore}break}return TableResultAction.resultAction.AddCell}function init(){setStartPoint();createVirtualTable()}this.getActionList=function(){var fixedRow=where===TableResultAction.where.Row?_startPoint.rowPos:-1;var fixedCol=where===TableResultAction.where.Column?_startPoint.colPos:-1;var actualPosition=0;var canContinue=true;while(canContinue){var rowPosition=fixedRow>=0?fixedRow:actualPosition;var colPosition=fixedCol>=0?fixedCol:actualPosition;var row=_virtualTable[rowPosition];if(!row){canContinue=false;return _actionCellList}var cell=row[colPosition];if(!cell){canContinue=false;return _actionCellList}var resultAction=TableResultAction.resultAction.Ignore;switch(action){case TableResultAction.requestAction.Add:resultAction=getAddResultActionToCell(cell);break;case TableResultAction.requestAction.Delete:resultAction=getDeleteResultActionToCell(cell);break}_actionCellList.push(getActionCell(cell,resultAction,rowPosition,colPosition));actualPosition++}return _actionCellList};init()};TableResultAction.where={Row:0,Column:1};TableResultAction.requestAction={Add:0,Delete:1};TableResultAction.resultAction={Ignore:0,SubtractSpanCount:1,RemoveCell:2,AddCell:3,SumSpanCount:4};var Table=function(){function Table(){}Table.prototype.tab=function(rng,isShift){var cell=dom.ancestor(rng.commonAncestor(),dom.isCell);var table=dom.ancestor(cell,dom.isTable);var cells=dom.listDescendant(table,dom.isCell);var nextCell=lists[isShift?"prev":"next"](cells,cell);if(nextCell){range.create(nextCell,0).select()}};Table.prototype.addRow=function(rng,position){var cell=dom.ancestor(rng.commonAncestor(),dom.isCell);var currentTr=$$1(cell).closest("tr");var trAttributes=this.recoverAttributes(currentTr);var html=$$1("<tr"+trAttributes+"></tr>");var vTable=new TableResultAction(cell,TableResultAction.where.Row,TableResultAction.requestAction.Add,$$1(currentTr).closest("table")[0]);var actions=vTable.getActionList();for(var idCell=0;idCell<actions.length;idCell++){var currentCell=actions[idCell];var tdAttributes=this.recoverAttributes(currentCell.baseCell);switch(currentCell.action){case TableResultAction.resultAction.AddCell:html.append("<td"+tdAttributes+">"+dom.blank+"</td>");break;case TableResultAction.resultAction.SumSpanCount:if(position==="top"){var baseCellTr=currentCell.baseCell.parent;var isTopFromRowSpan=(!baseCellTr?0:currentCell.baseCell.closest("tr").rowIndex)<=currentTr[0].rowIndex;if(isTopFromRowSpan){var newTd=$$1("<div></div>").append($$1("<td"+tdAttributes+">"+dom.blank+"</td>").removeAttr("rowspan")).html();html.append(newTd);break}}var rowspanNumber=parseInt(currentCell.baseCell.rowSpan,10);rowspanNumber++;currentCell.baseCell.setAttribute("rowSpan",rowspanNumber);break}}if(position==="top"){currentTr.before(html)}else{var cellHasRowspan=cell.rowSpan>1;if(cellHasRowspan){var lastTrIndex=currentTr[0].rowIndex+(cell.rowSpan-2);$$1($$1(currentTr).parent().find("tr")[lastTrIndex]).after($$1(html));return}currentTr.after(html)}};Table.prototype.addCol=function(rng,position){var cell=dom.ancestor(rng.commonAncestor(),dom.isCell);var row=$$1(cell).closest("tr");var rowsGroup=$$1(row).siblings();rowsGroup.push(row);var vTable=new TableResultAction(cell,TableResultAction.where.Column,TableResultAction.requestAction.Add,$$1(row).closest("table")[0]);var actions=vTable.getActionList();for(var actionIndex=0;actionIndex<actions.length;actionIndex++){var currentCell=actions[actionIndex];var tdAttributes=this.recoverAttributes(currentCell.baseCell);switch(currentCell.action){case TableResultAction.resultAction.AddCell:if(position==="right"){$$1(currentCell.baseCell).after("<td"+tdAttributes+">"+dom.blank+"</td>")}else{$$1(currentCell.baseCell).before("<td"+tdAttributes+">"+dom.blank+"</td>")}break;case TableResultAction.resultAction.SumSpanCount:if(position==="right"){var colspanNumber=parseInt(currentCell.baseCell.colSpan,10);colspanNumber++;currentCell.baseCell.setAttribute("colSpan",colspanNumber)}else{$$1(currentCell.baseCell).before("<td"+tdAttributes+">"+dom.blank+"</td>")}break}}};Table.prototype.recoverAttributes=function(el){var resultStr="";if(!el){return resultStr}var attrList=el.attributes||[];for(var i=0;i<attrList.length;i++){if(attrList[i].name.toLowerCase()==="id"){continue}if(attrList[i].specified){resultStr+=" "+attrList[i].name+"='"+attrList[i].value+"'"}}return resultStr};Table.prototype.deleteRow=function(rng){var cell=dom.ancestor(rng.commonAncestor(),dom.isCell);var row=$$1(cell).closest("tr");var cellPos=row.children("td, th").index($$1(cell));var rowPos=row[0].rowIndex;var vTable=new TableResultAction(cell,TableResultAction.where.Row,TableResultAction.requestAction.Delete,$$1(row).closest("table")[0]);var actions=vTable.getActionList();for(var actionIndex=0;actionIndex<actions.length;actionIndex++){if(!actions[actionIndex]){continue}var baseCell=actions[actionIndex].baseCell;var virtualPosition=actions[actionIndex].virtualTable;var hasRowspan=baseCell.rowSpan&&baseCell.rowSpan>1;var rowspanNumber=hasRowspan?parseInt(baseCell.rowSpan,10):0;switch(actions[actionIndex].action){case TableResultAction.resultAction.Ignore:continue;case TableResultAction.resultAction.AddCell:var nextRow=row.next("tr")[0];if(!nextRow){continue}var cloneRow=row[0].cells[cellPos];if(hasRowspan){if(rowspanNumber>2){rowspanNumber--;nextRow.insertBefore(cloneRow,nextRow.cells[cellPos]);nextRow.cells[cellPos].setAttribute("rowSpan",rowspanNumber);nextRow.cells[cellPos].innerHTML=""}else if(rowspanNumber===2){nextRow.insertBefore(cloneRow,nextRow.cells[cellPos]);nextRow.cells[cellPos].removeAttribute("rowSpan");nextRow.cells[cellPos].innerHTML=""}}continue;case TableResultAction.resultAction.SubtractSpanCount:if(hasRowspan){if(rowspanNumber>2){rowspanNumber--;baseCell.setAttribute("rowSpan",rowspanNumber);if(virtualPosition.rowIndex!==rowPos&&baseCell.cellIndex===cellPos){baseCell.innerHTML=""}}else if(rowspanNumber===2){baseCell.removeAttribute("rowSpan");if(virtualPosition.rowIndex!==rowPos&&baseCell.cellIndex===cellPos){baseCell.innerHTML=""}}}continue;case TableResultAction.resultAction.RemoveCell:continue}}row.remove()};Table.prototype.deleteCol=function(rng){var cell=dom.ancestor(rng.commonAncestor(),dom.isCell);var row=$$1(cell).closest("tr");var cellPos=row.children("td, th").index($$1(cell));var vTable=new TableResultAction(cell,TableResultAction.where.Column,TableResultAction.requestAction.Delete,$$1(row).closest("table")[0]);var actions=vTable.getActionList();for(var actionIndex=0;actionIndex<actions.length;actionIndex++){if(!actions[actionIndex]){continue}switch(actions[actionIndex].action){case TableResultAction.resultAction.Ignore:continue;case TableResultAction.resultAction.SubtractSpanCount:var baseCell=actions[actionIndex].baseCell;var hasColspan=baseCell.colSpan&&baseCell.colSpan>1;if(hasColspan){var colspanNumber=baseCell.colSpan?parseInt(baseCell.colSpan,10):0;if(colspanNumber>2){colspanNumber--;baseCell.setAttribute("colSpan",colspanNumber);if(baseCell.cellIndex===cellPos){baseCell.innerHTML=""}}else if(colspanNumber===2){baseCell.removeAttribute("colSpan");if(baseCell.cellIndex===cellPos){baseCell.innerHTML=""}}}continue;case TableResultAction.resultAction.RemoveCell:dom.remove(actions[actionIndex].baseCell,true);continue}}};Table.prototype.createTable=function(colCount,rowCount,options){var tds=[];var tdHTML;for(var idxCol=0;idxCol<colCount;idxCol++){tds.push("<td>"+dom.blank+"</td>")}tdHTML=tds.join("");var trs=[];var trHTML;for(var idxRow=0;idxRow<rowCount;idxRow++){trs.push("<tr>"+tdHTML+"</tr>")}trHTML=trs.join("");var $table=$$1("<table>"+trHTML+"</table>");if(options&&options.tableClassName){$table.addClass(options.tableClassName)}return $table[0]};Table.prototype.deleteTable=function(rng){var cell=dom.ancestor(rng.commonAncestor(),dom.isCell);$$1(cell).closest("table").remove()};return Table}();var KEY_BOGUS="bogus";var Editor=function(){function Editor(context){var _this=this;this.context=context;this.$note=context.layoutInfo.note;this.$editor=context.layoutInfo.editor;this.$editable=context.layoutInfo.editable;this.options=context.options;this.lang=this.options.langInfo;this.editable=this.$editable[0];this.lastRange=null;this.style=new Style;this.table=new Table;this.typing=new Typing;this.bullet=new Bullet;this.history=new History(this.$editable);this.context.memo("help.undo",this.lang.help.undo);this.context.memo("help.redo",this.lang.help.redo);this.context.memo("help.tab",this.lang.help.tab);this.context.memo("help.untab",this.lang.help.untab);this.context.memo("help.insertParagraph",this.lang.help.insertParagraph);this.context.memo("help.insertOrderedList",this.lang.help.insertOrderedList);this.context.memo("help.insertUnorderedList",this.lang.help.insertUnorderedList);this.context.memo("help.indent",this.lang.help.indent);this.context.memo("help.outdent",this.lang.help.outdent);this.context.memo("help.formatPara",this.lang.help.formatPara);this.context.memo("help.insertHorizontalRule",this.lang.help.insertHorizontalRule);this.context.memo("help.fontName",this.lang.help.fontName);var commands=["bold","italic","underline","strikethrough","superscript","subscript","justifyLeft","justifyCenter","justifyRight","justifyFull","formatBlock","removeFormat","backColor"];for(var idx=0,len=commands.length;idx<len;idx++){this[commands[idx]]=function(sCmd){return function(value){_this.beforeCommand();document.execCommand(sCmd,false,value);_this.afterCommand(true)}}(commands[idx]);this.context.memo("help."+commands[idx],this.lang.help[commands[idx]])}this.fontName=this.wrapCommand(function(value){return _this.fontStyling("font-family","'"+value+"'")});this.fontSize=this.wrapCommand(function(value){return _this.fontStyling("font-size",value+"px")});for(var idx=1;idx<=6;idx++){this["formatH"+idx]=function(idx){return function(){_this.formatBlock("H"+idx)}}(idx);this.context.memo("help.formatH"+idx,this.lang.help["formatH"+idx])}this.insertParagraph=this.wrapCommand(function(){_this.typing.insertParagraph(_this.editable)});this.insertOrderedList=this.wrapCommand(function(){_this.bullet.insertOrderedList(_this.editable)});this.insertUnorderedList=this.wrapCommand(function(){_this.bullet.insertUnorderedList(_this.editable)});this.indent=this.wrapCommand(function(){_this.bullet.indent(_this.editable)});this.outdent=this.wrapCommand(function(){_this.bullet.outdent(_this.editable)});this.insertNode=this.wrapCommand(function(node){if(_this.isLimited($$1(node).text().length)){return}var rng=_this.createRange();rng.insertNode(node);range.createFromNodeAfter(node).select()});this.insertText=this.wrapCommand(function(text){if(_this.isLimited(text.length)){return}var rng=_this.createRange();var textNode=rng.insertNode(dom.createText(text));range.create(textNode,dom.nodeLength(textNode)).select()});this.pasteHTML=this.wrapCommand(function(markup){if(_this.isLimited(markup.length)){return}var contents=_this.createRange().pasteHTML(markup);range.createFromNodeAfter(lists.last(contents)).select()});this.formatBlock=this.wrapCommand(function(tagName,$target){var onApplyCustomStyle=_this.options.callbacks.onApplyCustomStyle;if(onApplyCustomStyle){onApplyCustomStyle.call(_this,$target,_this.context,_this.onFormatBlock)}else{_this.onFormatBlock(tagName,$target)}});this.insertHorizontalRule=this.wrapCommand(function(){var hrNode=_this.createRange().insertNode(dom.create("HR"));if(hrNode.nextSibling){range.create(hrNode.nextSibling,0).normalize().select()}});this.lineHeight=this.wrapCommand(function(value){_this.style.stylePara(_this.createRange(),{lineHeight:value})});this.createLink=this.wrapCommand(function(linkInfo){var linkUrl=linkInfo.url;var linkText=linkInfo.text;var isNewWindow=linkInfo.isNewWindow;var rng=linkInfo.range||_this.createRange();var isTextChanged=rng.toString()!==linkText;if(typeof linkUrl==="string"){linkUrl=linkUrl.trim()}if(_this.options.onCreateLink){linkUrl=_this.options.onCreateLink(linkUrl)}else{linkUrl=/^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl)?linkUrl:"http://"+linkUrl}var anchors=[];if(isTextChanged){rng=rng.deleteContents();var anchor=rng.insertNode($$1("<A>"+linkText+"</A>")[0]);anchors.push(anchor)}else{anchors=_this.style.styleNodes(rng,{nodeName:"A",expandClosestSibling:true,onlyPartialContains:true})}$$1.each(anchors,function(idx,anchor){$$1(anchor).attr("href",linkUrl);if(isNewWindow){$$1(anchor).attr("target","_blank")}else{$$1(anchor).removeAttr("target")}});var startRange=range.createFromNodeBefore(lists.head(anchors));var startPoint=startRange.getStartPoint();var endRange=range.createFromNodeAfter(lists.last(anchors));var endPoint=endRange.getEndPoint();range.create(startPoint.node,startPoint.offset,endPoint.node,endPoint.offset).select()});this.color=this.wrapCommand(function(colorInfo){var foreColor=colorInfo.foreColor;var backColor=colorInfo.backColor;if(foreColor){document.execCommand("foreColor",false,foreColor)}if(backColor){document.execCommand("backColor",false,backColor)}});this.foreColor=this.wrapCommand(function(colorInfo){document.execCommand("styleWithCSS",false,true);document.execCommand("foreColor",false,colorInfo)});this.insertTable=this.wrapCommand(function(dim){var dimension=dim.split("x");var rng=_this.createRange().deleteContents();rng.insertNode(_this.table.createTable(dimension[0],dimension[1],_this.options))});this.removeMedia=this.wrapCommand(function(){var $target=$$1(_this.restoreTarget()).parent();if($target.parent("figure").length){$target.parent("figure").remove()}else{$target=$$1(_this.restoreTarget()).detach()}_this.context.triggerEvent("media.delete",$target,_this.$editable)});this.floatMe=this.wrapCommand(function(value){var $target=$$1(_this.restoreTarget());$target.toggleClass("note-float-left",value==="left");$target.toggleClass("note-float-right",value==="right");$target.css("float",value)});this.resize=this.wrapCommand(function(value){var $target=$$1(_this.restoreTarget());$target.css({width:value*100+"%",height:""})})}Editor.prototype.initialize=function(){var _this=this;this.$editable.on("keydown",function(event){if(event.keyCode===key.code.ENTER){_this.context.triggerEvent("enter",event)}_this.context.triggerEvent("keydown",event);if(!event.isDefaultPrevented()){if(_this.options.shortcuts){_this.handleKeyMap(event)}else{_this.preventDefaultEditableShortCuts(event)}}if(_this.isLimited(1,event)){return false}}).on("keyup",function(event){_this.context.triggerEvent("keyup",event)}).on("focus",function(event){_this.context.triggerEvent("focus",event)}).on("blur",function(event){_this.context.triggerEvent("blur",event)}).on("mousedown",function(event){_this.context.triggerEvent("mousedown",event)}).on("mouseup",function(event){_this.context.triggerEvent("mouseup",event)}).on("scroll",function(event){_this.context.triggerEvent("scroll",event)}).on("paste",function(event){_this.context.triggerEvent("paste",event)});this.$editable.html(dom.html(this.$note)||dom.emptyPara);this.$editable.on(env.inputEventName,func.debounce(function(){_this.context.triggerEvent("change",_this.$editable.html())},100));this.$editor.on("focusin",function(event){_this.context.triggerEvent("focusin",event)}).on("focusout",function(event){_this.context.triggerEvent("focusout",event)});if(!this.options.airMode){if(this.options.width){this.$editor.outerWidth(this.options.width)}if(this.options.height){this.$editable.outerHeight(this.options.height)}if(this.options.maxHeight){this.$editable.css("max-height",this.options.maxHeight)}if(this.options.minHeight){this.$editable.css("min-height",this.options.minHeight)}}this.history.recordUndo()};Editor.prototype.destroy=function(){this.$editable.off()};Editor.prototype.handleKeyMap=function(event){var keyMap=this.options.keyMap[env.isMac?"mac":"pc"];var keys=[];if(event.metaKey){keys.push("CMD")}if(event.ctrlKey&&!event.altKey){keys.push("CTRL")}if(event.shiftKey){keys.push("SHIFT")}var keyName=key.nameFromCode[event.keyCode];if(keyName){keys.push(keyName)}var eventName=keyMap[keys.join("+")];if(eventName){if(this.context.invoke(eventName)!==false){event.preventDefault()}}else if(key.isEdit(event.keyCode)){this.afterCommand()}};Editor.prototype.preventDefaultEditableShortCuts=function(event){if((event.ctrlKey||event.metaKey)&&lists.contains([66,73,85],event.keyCode)){event.preventDefault()}};Editor.prototype.isLimited=function(pad,event){pad=pad||0;if(typeof event!=="undefined"){if(key.isMove(event.keyCode)||(event.ctrlKey||event.metaKey)||lists.contains([key.code.BACKSPACE,key.code.DELETE],event.keyCode)){return false}}if(this.options.maxTextLength>0){if(this.$editable.text().length+pad>=this.options.maxTextLength){return true}}return false};Editor.prototype.createRange=function(){this.focus();return range.create(this.editable)};Editor.prototype.saveRange=function(thenCollapse){this.lastRange=this.createRange();if(thenCollapse){this.lastRange.collapse().select()}};Editor.prototype.restoreRange=function(){if(this.lastRange){this.lastRange.select();this.focus()}};Editor.prototype.saveTarget=function(node){this.$editable.data("target",node)};Editor.prototype.clearTarget=function(){this.$editable.removeData("target")};Editor.prototype.restoreTarget=function(){return this.$editable.data("target")};Editor.prototype.currentStyle=function(){var rng=range.create();if(rng){rng=rng.normalize()}return rng?this.style.current(rng):this.style.fromNode(this.$editable)};Editor.prototype.styleFromNode=function($node){return this.style.fromNode($node)};Editor.prototype.undo=function(){this.context.triggerEvent("before.command",this.$editable.html());this.history.undo();this.context.triggerEvent("change",this.$editable.html())};Editor.prototype.redo=function(){this.context.triggerEvent("before.command",this.$editable.html());this.history.redo();this.context.triggerEvent("change",this.$editable.html())};Editor.prototype.beforeCommand=function(){this.context.triggerEvent("before.command",this.$editable.html());this.focus()};Editor.prototype.afterCommand=function(isPreventTrigger){this.normalizeContent();this.history.recordUndo();if(!isPreventTrigger){this.context.triggerEvent("change",this.$editable.html())}};Editor.prototype.tab=function(){var rng=this.createRange();if(rng.isCollapsed()&&rng.isOnCell()){this.table.tab(rng)}else{if(this.options.tabSize===0){return false}if(!this.isLimited(this.options.tabSize)){this.beforeCommand();this.typing.insertTab(rng,this.options.tabSize);this.afterCommand()}}};Editor.prototype.untab=function(){var rng=this.createRange();if(rng.isCollapsed()&&rng.isOnCell()){this.table.tab(rng,true)}else{if(this.options.tabSize===0){return false}}};Editor.prototype.wrapCommand=function(fn){var _this=this;return function(){_this.beforeCommand();fn.apply(_this,arguments);_this.afterCommand()}};Editor.prototype.insertImage=function(src,param){var _this=this;return createImage(src,param).then(function($image){_this.beforeCommand();if(typeof param==="function"){param($image)}else{if(typeof param==="string"){$image.attr("data-filename",param)}$image.css("width",Math.min(_this.$editable.width(),$image.width()))}$image.show();range.create(_this.editable).insertNode($image[0]);range.createFromNodeAfter($image[0]).select();_this.afterCommand()}).fail(function(e){_this.context.triggerEvent("image.upload.error",e)})};Editor.prototype.insertImages=function(files){var _this=this;$$1.each(files,function(idx,file){var filename=file.name;if(_this.options.maximumImageFileSize&&_this.options.maximumImageFileSize<file.size){_this.context.triggerEvent("image.upload.error",_this.lang.image.maximumFileSizeError)}else{readFileAsDataURL(file).then(function(dataURL){return _this.insertImage(dataURL,filename)}).fail(function(){_this.context.triggerEvent("image.upload.error")})}})};Editor.prototype.insertImagesOrCallback=function(files){var callbacks=this.options.callbacks;if(callbacks.onImageUpload){this.context.triggerEvent("image.upload",files)}else{this.insertImages(files)}};Editor.prototype.getSelectedText=function(){var rng=this.createRange();if(rng.isOnAnchor()){rng=range.createFromNode(dom.ancestor(rng.sc,dom.isAnchor))}return rng.toString()};Editor.prototype.onFormatBlock=function(tagName,$target){tagName=env.isMSIE?"<"+tagName+">":tagName;document.execCommand("FormatBlock",false,tagName);if($target&&$target.length){var className=$target[0].className||"";if(className){var currentRange=this.createRange();var $parent=$$1([currentRange.sc,currentRange.ec]).closest(tagName);$parent.addClass(className)}}};Editor.prototype.formatPara=function(){this.formatBlock("P")};Editor.prototype.fontStyling=function(target,value){var rng=this.createRange();if(rng){var spans=this.style.styleNodes(rng);$$1(spans).css(target,value);if(rng.isCollapsed()){var firstSpan=lists.head(spans);if(firstSpan&&!dom.nodeLength(firstSpan)){firstSpan.innerHTML=dom.ZERO_WIDTH_NBSP_CHAR;range.createFromNodeAfter(firstSpan.firstChild).select();this.$editable.data(KEY_BOGUS,firstSpan)}}}};Editor.prototype.unlink=function(){var rng=this.createRange();if(rng.isOnAnchor()){var anchor=dom.ancestor(rng.sc,dom.isAnchor);rng=range.createFromNode(anchor);rng.select();this.beforeCommand();document.execCommand("unlink");this.afterCommand()}};Editor.prototype.getLinkInfo=function(){var rng=this.createRange().expand(dom.isAnchor);var $anchor=$$1(lists.head(rng.nodes(dom.isAnchor)));var linkInfo={range:rng,text:rng.toString(),url:$anchor.length?$anchor.attr("href"):""};if($anchor.length){linkInfo.isNewWindow=$anchor.attr("target")==="_blank"}return linkInfo};Editor.prototype.addRow=function(position){var rng=this.createRange(this.$editable);if(rng.isCollapsed()&&rng.isOnCell()){this.beforeCommand();this.table.addRow(rng,position);this.afterCommand()}};Editor.prototype.addCol=function(position){var rng=this.createRange(this.$editable);if(rng.isCollapsed()&&rng.isOnCell()){this.beforeCommand();this.table.addCol(rng,position);this.afterCommand()}};Editor.prototype.deleteRow=function(){var rng=this.createRange(this.$editable);if(rng.isCollapsed()&&rng.isOnCell()){this.beforeCommand();this.table.deleteRow(rng);this.afterCommand()}};Editor.prototype.deleteCol=function(){var rng=this.createRange(this.$editable);if(rng.isCollapsed()&&rng.isOnCell()){this.beforeCommand();this.table.deleteCol(rng);this.afterCommand()}};Editor.prototype.deleteTable=function(){var rng=this.createRange(this.$editable);if(rng.isCollapsed()&&rng.isOnCell()){this.beforeCommand();this.table.deleteTable(rng);this.afterCommand()}};Editor.prototype.resizeTo=function(pos,$target,bKeepRatio){var imageSize;if(bKeepRatio){var newRatio=pos.y/pos.x;var ratio=$target.data("ratio");imageSize={width:ratio>newRatio?pos.x:pos.y/ratio,height:ratio>newRatio?pos.x*ratio:pos.y}}else{imageSize={width:pos.x,height:pos.y}}$target.css(imageSize)};Editor.prototype.hasFocus=function(){return this.$editable.is(":focus")};Editor.prototype.focus=function(){if(!this.hasFocus()){this.$editable.focus()}};Editor.prototype.isEmpty=function(){return dom.isEmpty(this.$editable[0])||dom.emptyPara===this.$editable.html()};Editor.prototype.empty=function(){this.context.invoke("code",dom.emptyPara)};Editor.prototype.normalizeContent=function(){this.$editable[0].normalize()};return Editor}();var Clipboard=function(){function Clipboard(context){this.context=context;this.$editable=context.layoutInfo.editable}Clipboard.prototype.initialize=function(){this.$editable.on("paste",this.pasteByEvent.bind(this))};Clipboard.prototype.pasteByEvent=function(event){var clipboardData=event.originalEvent.clipboardData;if(clipboardData&&clipboardData.items&&clipboardData.items.length){var item=lists.head(clipboardData.items);if(item.kind==="file"&&item.type.indexOf("image/")!==-1){this.context.invoke("editor.insertImagesOrCallback",[item.getAsFile()])}this.context.invoke("editor.afterCommand")}};return Clipboard}();var Dropzone=function(){function Dropzone(context){this.context=context;this.$eventListener=$$1(document);this.$editor=context.layoutInfo.editor;this.$editable=context.layoutInfo.editable;this.options=context.options;this.lang=this.options.langInfo;this.documentEventHandlers={};this.$dropzone=$$1(['<div class="note-dropzone">',' <div class="note-dropzone-message"/>',"</div>"].join("")).prependTo(this.$editor)}Dropzone.prototype.initialize=function(){if(this.options.disableDragAndDrop){this.documentEventHandlers.onDrop=function(e){e.preventDefault()};this.$eventListener=this.$dropzone;this.$eventListener.on("drop",this.documentEventHandlers.onDrop)}else{this.attachDragAndDropEvent()}};Dropzone.prototype.attachDragAndDropEvent=function(){var _this=this;var collection=$$1();var $dropzoneMessage=this.$dropzone.find(".note-dropzone-message");this.documentEventHandlers.onDragenter=function(e){var isCodeview=_this.context.invoke("codeview.isActivated");var hasEditorSize=_this.$editor.width()>0&&_this.$editor.height()>0;if(!isCodeview&&!collection.length&&hasEditorSize){_this.$editor.addClass("dragover");_this.$dropzone.width(_this.$editor.width());_this.$dropzone.height(_this.$editor.height());$dropzoneMessage.text(_this.lang.image.dragImageHere)}collection=collection.add(e.target)};this.documentEventHandlers.onDragleave=function(e){collection=collection.not(e.target);if(!collection.length){_this.$editor.removeClass("dragover")}};this.documentEventHandlers.onDrop=function(){collection=$$1();_this.$editor.removeClass("dragover")};this.$eventListener.on("dragenter",this.documentEventHandlers.onDragenter).on("dragleave",this.documentEventHandlers.onDragleave).on("drop",this.documentEventHandlers.onDrop);this.$dropzone.on("dragenter",function(){_this.$dropzone.addClass("hover");$dropzoneMessage.text(_this.lang.image.dropImage)}).on("dragleave",function(){_this.$dropzone.removeClass("hover");$dropzoneMessage.text(_this.lang.image.dragImageHere)});this.$dropzone.on("drop",function(event){var dataTransfer=event.originalEvent.dataTransfer;event.preventDefault();if(dataTransfer&&dataTransfer.files&&dataTransfer.files.length){_this.$editable.focus();_this.context.invoke("editor.insertImagesOrCallback",dataTransfer.files)}else{$$1.each(dataTransfer.types,function(idx,type){var content=dataTransfer.getData(type);if(type.toLowerCase().indexOf("text")>-1){_this.context.invoke("editor.pasteHTML",content)}else{$$1(content).each(function(idx,item){_this.context.invoke("editor.insertNode",item)})}})}}).on("dragover",false)};Dropzone.prototype.destroy=function(){var _this=this;Object.keys(this.documentEventHandlers).forEach(function(key){_this.$eventListener.off(key.substr(2).toLowerCase(),_this.documentEventHandlers[key])});this.documentEventHandlers={}};return Dropzone}();var CodeMirror;if(env.hasCodeMirror){if(env.isSupportAmd){require(["codemirror"],function(cm){CodeMirror=cm})}else{CodeMirror=window.CodeMirror}}var CodeView=function(){function CodeView(context){this.context=context;this.$editor=context.layoutInfo.editor;this.$editable=context.layoutInfo.editable;this.$codable=context.layoutInfo.codable;this.options=context.options}CodeView.prototype.sync=function(){var isCodeview=this.isActivated();if(isCodeview&&env.hasCodeMirror){this.$codable.data("cmEditor").save()}};CodeView.prototype.isActivated=function(){return this.$editor.hasClass("codeview")};CodeView.prototype.toggle=function(){if(this.isActivated()){this.deactivate()}else{this.activate()}this.context.triggerEvent("codeview.toggled")};CodeView.prototype.activate=function(){var _this=this;this.$codable.val(dom.html(this.$editable,this.options.prettifyHtml));this.$codable.height(this.$editable.height());this.context.invoke("toolbar.updateCodeview",true);this.$editor.addClass("codeview");this.$codable.focus();if(env.hasCodeMirror){var cmEditor_1=CodeMirror.fromTextArea(this.$codable[0],this.options.codemirror);if(this.options.codemirror.tern){var server_1=new CodeMirror.TernServer(this.options.codemirror.tern);cmEditor_1.ternServer=server_1;cmEditor_1.on("cursorActivity",function(cm){server_1.updateArgHints(cm)})}cmEditor_1.on("blur",function(event){_this.context.triggerEvent("blur.codeview",cmEditor_1.getValue(),event)});cmEditor_1.setSize(null,this.$editable.outerHeight());this.$codable.data("cmEditor",cmEditor_1)}else{this.$codable.on("blur",function(event){_this.context.triggerEvent("blur.codeview",_this.$codable.val(),event)})}};CodeView.prototype.deactivate=function(){if(env.hasCodeMirror){var cmEditor=this.$codable.data("cmEditor");this.$codable.val(cmEditor.getValue());cmEditor.toTextArea()}var value=dom.value(this.$codable,this.options.prettifyHtml)||dom.emptyPara;var isChange=this.$editable.html()!==value;this.$editable.html(value);this.$editable.height(this.options.height?this.$codable.height():"auto");this.$editor.removeClass("codeview");if(isChange){this.context.triggerEvent("change",this.$editable.html(),this.$editable)}this.$editable.focus();this.context.invoke("toolbar.updateCodeview",false)};CodeView.prototype.destroy=function(){if(this.isActivated()){this.deactivate()}};return CodeView}();var EDITABLE_PADDING=24;var Statusbar=function(){function Statusbar(context){this.$document=$$1(document);this.$statusbar=context.layoutInfo.statusbar;this.$editable=context.layoutInfo.editable;this.options=context.options}Statusbar.prototype.initialize=function(){var _this=this;if(this.options.airMode||this.options.disableResizeEditor){this.destroy();return}this.$statusbar.on("mousedown",function(event){event.preventDefault();event.stopPropagation();var editableTop=_this.$editable.offset().top-_this.$document.scrollTop();var onMouseMove=function(event){var height=event.clientY-(editableTop+EDITABLE_PADDING);height=_this.options.minheight>0?Math.max(height,_this.options.minheight):height;height=_this.options.maxHeight>0?Math.min(height,_this.options.maxHeight):height;_this.$editable.height(height)};_this.$document.on("mousemove",onMouseMove).one("mouseup",function(){_this.$document.off("mousemove",onMouseMove)})})};Statusbar.prototype.destroy=function(){this.$statusbar.off();this.$statusbar.addClass("locked")};return Statusbar}();var Fullscreen=function(){function Fullscreen(context){var _this=this;this.context=context;this.$editor=context.layoutInfo.editor;this.$toolbar=context.layoutInfo.toolbar;this.$editable=context.layoutInfo.editable;this.$codable=context.layoutInfo.codable;this.$window=$$1(window);this.$scrollbar=$$1("html, body");this.onResize=function(){_this.resizeTo({h:_this.$window.height()-_this.$toolbar.outerHeight()})}}Fullscreen.prototype.resizeTo=function(size){this.$editable.css("height",size.h);this.$codable.css("height",size.h);if(this.$codable.data("cmeditor")){this.$codable.data("cmeditor").setsize(null,size.h)}};Fullscreen.prototype.toggle=function(){this.$editor.toggleClass("fullscreen");if(this.isFullscreen()){this.$editable.data("orgHeight",this.$editable.css("height"));this.$window.on("resize",this.onResize).trigger("resize");this.$scrollbar.css("overflow","hidden")}else{this.$window.off("resize",this.onResize);this.resizeTo({h:this.$editable.data("orgHeight")});this.$scrollbar.css("overflow","visible")}this.context.invoke("toolbar.updateFullscreen",this.isFullscreen())};Fullscreen.prototype.isFullscreen=function(){return this.$editor.hasClass("fullscreen")};return Fullscreen}();var Handle=function(){function Handle(context){var _this=this;this.context=context;this.$document=$$1(document);this.$editingArea=context.layoutInfo.editingArea;this.options=context.options;this.lang=this.options.langInfo;this.events={"summernote.mousedown":function(we,e){if(_this.update(e.target)){e.preventDefault()}},"summernote.keyup summernote.scroll summernote.change summernote.dialog.shown":function(){_this.update()},"summernote.disable":function(){_this.hide()},"summernote.codeview.toggled":function(){_this.update()}}}Handle.prototype.initialize=function(){var _this=this;this.$handle=$$1(['<div class="note-handle">','<div class="note-control-selection">','<div class="note-control-selection-bg"></div>','<div class="note-control-holder note-control-nw"></div>','<div class="note-control-holder note-control-ne"></div>','<div class="note-control-holder note-control-sw"></div>','<div class="',this.options.disableResizeImage?"note-control-holder":"note-control-sizing",' note-control-se"></div>',this.options.disableResizeImage?"":'<div class="note-control-selection-info"></div>',"</div>","</div>"].join("")).prependTo(this.$editingArea);this.$handle.on("mousedown",function(event){if(dom.isControlSizing(event.target)){event.preventDefault();event.stopPropagation();var $target_1=_this.$handle.find(".note-control-selection").data("target");var posStart_1=$target_1.offset();var scrollTop_1=_this.$document.scrollTop();var onMouseMove_1=function(event){_this.context.invoke("editor.resizeTo",{x:event.clientX-posStart_1.left,y:event.clientY-(posStart_1.top-scrollTop_1)},$target_1,!event.shiftKey);_this.update($target_1[0])};_this.$document.on("mousemove",onMouseMove_1).one("mouseup",function(e){e.preventDefault();_this.$document.off("mousemove",onMouseMove_1);_this.context.invoke("editor.afterCommand")});if(!$target_1.data("ratio")){$target_1.data("ratio",$target_1.height()/$target_1.width())}}});this.$handle.on("wheel",function(e){e.preventDefault();_this.update()})};Handle.prototype.destroy=function(){this.$handle.remove()};Handle.prototype.update=function(target){if(this.context.isDisabled()){return false}var isImage=dom.isImg(target);var $selection=this.$handle.find(".note-control-selection");this.context.invoke("imagePopover.update",target);if(isImage){var $image=$$1(target);var position=$image.position();var pos={left:position.left+parseInt($image.css("marginLeft"),10),top:position.top+parseInt($image.css("marginTop"),10)};var imageSize={w:$image.outerWidth(false),h:$image.outerHeight(false)};$selection.css({display:"block",left:pos.left,top:pos.top,width:imageSize.w,height:imageSize.h}).data("target",$image);var origImageObj=new Image;origImageObj.src=$image.attr("src");var sizingText=imageSize.w+"x"+imageSize.h+" ("+this.lang.image.original+": "+origImageObj.width+"x"+origImageObj.height+")";$selection.find(".note-control-selection-info").text(sizingText);this.context.invoke("editor.saveTarget",target)}else{this.hide()}return isImage};Handle.prototype.hide=function(){this.context.invoke("editor.clearTarget");this.$handle.children().hide()};return Handle}();var defaultScheme="http://";var linkPattern=/^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i;var AutoLink=function(){function AutoLink(context){var _this=this;this.context=context;this.events={"summernote.keyup":function(we,e){if(!e.isDefaultPrevented()){_this.handleKeyup(e)}},"summernote.keydown":function(we,e){_this.handleKeydown(e)}}}AutoLink.prototype.initialize=function(){this.lastWordRange=null};AutoLink.prototype.destroy=function(){this.lastWordRange=null};AutoLink.prototype.replace=function(){if(!this.lastWordRange){return}var keyword=this.lastWordRange.toString();var match=keyword.match(linkPattern);if(match&&(match[1]||match[2])){var link=match[1]?keyword:defaultScheme+keyword;var node=$$1("<a />").html(keyword).attr("href",link)[0];this.lastWordRange.insertNode(node);this.lastWordRange=null;this.context.invoke("editor.focus")}};AutoLink.prototype.handleKeydown=function(e){if(lists.contains([key.code.ENTER,key.code.SPACE],e.keyCode)){var wordRange=this.context.invoke("editor.createRange").getWordRange();this.lastWordRange=wordRange}};AutoLink.prototype.handleKeyup=function(e){if(lists.contains([key.code.ENTER,key.code.SPACE],e.keyCode)){this.replace()}};return AutoLink}();var AutoSync=function(){function AutoSync(context){var _this=this;this.$note=context.layoutInfo.note;this.events={"summernote.change":function(){_this.$note.val(context.invoke("code"))}}}AutoSync.prototype.shouldInitialize=function(){return dom.isTextarea(this.$note[0])};return AutoSync}();var Placeholder=function(){function Placeholder(context){var _this=this;this.context=context;this.$editingArea=context.layoutInfo.editingArea;this.options=context.options;this.events={"summernote.init summernote.change":function(){_this.update()},"summernote.codeview.toggled":function(){_this.update()}}}Placeholder.prototype.shouldInitialize=function(){return!!this.options.placeholder};Placeholder.prototype.initialize=function(){var _this=this;this.$placeholder=$$1('<div class="note-placeholder">');this.$placeholder.on("click",function(){_this.context.invoke("focus")}).text(this.options.placeholder).prependTo(this.$editingArea);this.update()};Placeholder.prototype.destroy=function(){this.$placeholder.remove()};Placeholder.prototype.update=function(){var isShow=!this.context.invoke("codeview.isActivated")&&this.context.invoke("editor.isEmpty");this.$placeholder.toggle(isShow)};return Placeholder}();var Buttons=function(){function Buttons(context){this.ui=$$1.summernote.ui;this.context=context;this.$toolbar=context.layoutInfo.toolbar;this.options=context.options;this.lang=this.options.langInfo;this.invertedKeyMap=func.invertObject(this.options.keyMap[env.isMac?"mac":"pc"])}Buttons.prototype.representShortcut=function(editorMethod){var shortcut=this.invertedKeyMap[editorMethod];if(!this.options.shortcuts||!shortcut){return""}if(env.isMac){shortcut=shortcut.replace("CMD","⌘").replace("SHIFT","⇧")}shortcut=shortcut.replace("BACKSLASH","\\").replace("SLASH","/").replace("LEFTBRACKET","[").replace("RIGHTBRACKET","]");return" ("+shortcut+")"};Buttons.prototype.button=function(o){if(!this.options.tooltip&&o.tooltip){delete o.tooltip}o.container=this.options.container;return this.ui.button(o)};Buttons.prototype.initialize=function(){this.addToolbarButtons();this.addImagePopoverButtons();this.addLinkPopoverButtons();this.addTablePopoverButtons();this.fontInstalledMap={}};Buttons.prototype.destroy=function(){delete this.fontInstalledMap};Buttons.prototype.isFontInstalled=function(name){if(!this.fontInstalledMap.hasOwnProperty(name)){this.fontInstalledMap[name]=env.isFontInstalled(name)||lists.contains(this.options.fontNamesIgnoreCheck,name)}return this.fontInstalledMap[name]};Buttons.prototype.isFontDeservedToAdd=function(name){var genericFamilies=["sans-serif","serif","monospace","cursive","fantasy"];name=name.toLowerCase();return name!==""&&this.isFontInstalled(name)&&$$1.inArray(name,genericFamilies)===-1};Buttons.prototype.addToolbarButtons=function(){var _this=this;this.context.memo("button.style",function(){return _this.ui.buttonGroup([_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.magic),_this.options),tooltip:_this.lang.style.style,data:{toggle:"dropdown"}}),_this.ui.dropdown({className:"dropdown-style",items:_this.options.styleTags,title:_this.lang.style.style,template:function(item){if(typeof item==="string"){item={tag:item,title:_this.lang.style.hasOwnProperty(item)?_this.lang.style[item]:item}}var tag=item.tag;var title=item.title;var style=item.style?' style="'+item.style+'" ':"";var className=item.className?' class="'+item.className+'"':"";return"<"+tag+style+className+">"+title+"</"+tag+">"},click:_this.context.createInvokeHandler("editor.formatBlock")})]).render()});var _loop_1=function(styleIdx,styleLen){var item=this_1.options.styleTags[styleIdx];this_1.context.memo("button.style."+item,function(){return _this.button({className:"note-btn-style-"+item,contents:'<div data-value="'+item+'">'+item.toUpperCase()+"</div>",tooltip:_this.lang.style[item],click:_this.context.createInvokeHandler("editor.formatBlock")}).render()})};var this_1=this;for(var styleIdx=0,styleLen=this.options.styleTags.length;styleIdx<styleLen;styleIdx++){_loop_1(styleIdx,styleLen)}this.context.memo("button.bold",function(){return _this.button({className:"note-btn-bold",contents:_this.ui.icon(_this.options.icons.bold),tooltip:_this.lang.font.bold+_this.representShortcut("bold"),click:_this.context.createInvokeHandlerAndUpdateState("editor.bold")}).render()});this.context.memo("button.italic",function(){return _this.button({className:"note-btn-italic",contents:_this.ui.icon(_this.options.icons.italic),tooltip:_this.lang.font.italic+_this.representShortcut("italic"),click:_this.context.createInvokeHandlerAndUpdateState("editor.italic")}).render()});this.context.memo("button.underline",function(){return _this.button({className:"note-btn-underline",contents:_this.ui.icon(_this.options.icons.underline),tooltip:_this.lang.font.underline+_this.representShortcut("underline"),click:_this.context.createInvokeHandlerAndUpdateState("editor.underline")}).render()});this.context.memo("button.clear",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.eraser),tooltip:_this.lang.font.clear+_this.representShortcut("removeFormat"),click:_this.context.createInvokeHandler("editor.removeFormat")}).render()});this.context.memo("button.strikethrough",function(){return _this.button({className:"note-btn-strikethrough",contents:_this.ui.icon(_this.options.icons.strikethrough),tooltip:_this.lang.font.strikethrough+_this.representShortcut("strikethrough"),click:_this.context.createInvokeHandlerAndUpdateState("editor.strikethrough")}).render()});this.context.memo("button.superscript",function(){return _this.button({className:"note-btn-superscript",contents:_this.ui.icon(_this.options.icons.superscript),tooltip:_this.lang.font.superscript,click:_this.context.createInvokeHandlerAndUpdateState("editor.superscript")}).render()});this.context.memo("button.subscript",function(){return _this.button({className:"note-btn-subscript",contents:_this.ui.icon(_this.options.icons.subscript),tooltip:_this.lang.font.subscript,click:_this.context.createInvokeHandlerAndUpdateState("editor.subscript")}).render()});this.context.memo("button.fontname",function(){var styleInfo=_this.context.invoke("editor.currentStyle");$$1.each(styleInfo["font-family"].split(","),function(idx,fontname){fontname=fontname.trim().replace(/['"]+/g,"");if(_this.isFontDeservedToAdd(fontname)){if($$1.inArray(fontname,_this.options.fontNames)===-1){_this.options.fontNames.push(fontname)}}});return _this.ui.buttonGroup([_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents('<span class="note-current-fontname"/>',_this.options),tooltip:_this.lang.font.name,data:{toggle:"dropdown"}}),_this.ui.dropdownCheck({className:"dropdown-fontname",checkClassName:_this.options.icons.menuCheck,items:_this.options.fontNames.filter(_this.isFontInstalled.bind(_this)),title:_this.lang.font.name,template:function(item){return"<span style=\"font-family: '"+item+"'\">"+item+"</span>"},click:_this.context.createInvokeHandlerAndUpdateState("editor.fontName")})]).render()});this.context.memo("button.fontsize",function(){return _this.ui.buttonGroup([_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>',_this.options),tooltip:_this.lang.font.size,data:{toggle:"dropdown"}}),_this.ui.dropdownCheck({className:"dropdown-fontsize",checkClassName:_this.options.icons.menuCheck,items:_this.options.fontSizes,title:_this.lang.font.size,click:_this.context.createInvokeHandlerAndUpdateState("editor.fontSize")})]).render()});this.context.memo("button.color",function(){return _this.ui.buttonGroup({className:"note-color",children:[_this.button({className:"note-current-color-button",contents:_this.ui.icon(_this.options.icons.font+" note-recent-color"),tooltip:_this.lang.color.recent,click:function(e){var $button=$$1(e.currentTarget);_this.context.invoke("editor.color",{backColor:$button.attr("data-backColor"),foreColor:$button.attr("data-foreColor")})},callback:function($button){var $recentColor=$button.find(".note-recent-color");$recentColor.css("background-color","#FFFF00");$button.attr("data-backColor","#FFFF00")}}),_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents("",_this.options),tooltip:_this.lang.color.more,data:{toggle:"dropdown"}}),_this.ui.dropdown({items:['<div class="note-palette">',' <div class="note-palette-title">'+_this.lang.color.background+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-light" data-event="backColor" data-value="inherit">',_this.lang.color.transparent," </button>"," </div>",' <div class="note-holder" data-event="backColor"/>',"</div>",'<div class="note-palette">',' <div class="note-palette-title">'+_this.lang.color.foreground+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-light" data-event="removeFormat" data-value="foreColor">',_this.lang.color.resetToDefault," </button>"," </div>",' <div class="note-holder" data-event="foreColor"/>',"</div>"].join(""),callback:function($dropdown){$dropdown.find(".note-holder").each(function(idx,item){var $holder=$$1(item);$holder.append(_this.ui.palette({colors:_this.options.colors,colorsName:_this.options.colorsName,eventName:$holder.data("event"),container:_this.options.container,tooltip:_this.options.tooltip}).render())})},click:function(event){var $button=$$1(event.target);var eventName=$button.data("event");var value=$button.data("value");if(eventName&&value){var key=eventName==="backColor"?"background-color":"color";var $color=$button.closest(".note-color").find(".note-recent-color");var $currentButton=$button.closest(".note-color").find(".note-current-color-button");$color.css(key,value);$currentButton.attr("data-"+eventName,value);_this.context.invoke("editor."+eventName,value)}}})]}).render()});this.context.memo("button.ul",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.unorderedlist),tooltip:_this.lang.lists.unordered+_this.representShortcut("insertUnorderedList"),click:_this.context.createInvokeHandler("editor.insertUnorderedList")}).render()});this.context.memo("button.ol",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.orderedlist),tooltip:_this.lang.lists.ordered+_this.representShortcut("insertOrderedList"),click:_this.context.createInvokeHandler("editor.insertOrderedList")}).render()});var justifyLeft=this.button({contents:this.ui.icon(this.options.icons.alignLeft),tooltip:this.lang.paragraph.left+this.representShortcut("justifyLeft"),click:this.context.createInvokeHandler("editor.justifyLeft")});var justifyCenter=this.button({contents:this.ui.icon(this.options.icons.alignCenter),tooltip:this.lang.paragraph.center+this.representShortcut("justifyCenter"),click:this.context.createInvokeHandler("editor.justifyCenter")});var justifyRight=this.button({contents:this.ui.icon(this.options.icons.alignRight),tooltip:this.lang.paragraph.right+this.representShortcut("justifyRight"),click:this.context.createInvokeHandler("editor.justifyRight")});var justifyFull=this.button({contents:this.ui.icon(this.options.icons.alignJustify),tooltip:this.lang.paragraph.justify+this.representShortcut("justifyFull"),click:this.context.createInvokeHandler("editor.justifyFull")});var outdent=this.button({contents:this.ui.icon(this.options.icons.outdent),tooltip:this.lang.paragraph.outdent+this.representShortcut("outdent"),click:this.context.createInvokeHandler("editor.outdent")});var indent=this.button({contents:this.ui.icon(this.options.icons.indent),tooltip:this.lang.paragraph.indent+this.representShortcut("indent"),click:this.context.createInvokeHandler("editor.indent")});this.context.memo("button.justifyLeft",func.invoke(justifyLeft,"render"));this.context.memo("button.justifyCenter",func.invoke(justifyCenter,"render"));this.context.memo("button.justifyRight",func.invoke(justifyRight,"render"));this.context.memo("button.justifyFull",func.invoke(justifyFull,"render"));this.context.memo("button.outdent",func.invoke(outdent,"render"));this.context.memo("button.indent",func.invoke(indent,"render"));this.context.memo("button.paragraph",function(){return _this.ui.buttonGroup([_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.alignLeft),_this.options),tooltip:_this.lang.paragraph.paragraph,data:{toggle:"dropdown"}}),_this.ui.dropdown([_this.ui.buttonGroup({className:"note-align",children:[justifyLeft,justifyCenter,justifyRight,justifyFull]}),_this.ui.buttonGroup({className:"note-list",children:[outdent,indent]})])]).render()});this.context.memo("button.height",function(){return _this.ui.buttonGroup([_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.textHeight),_this.options),tooltip:_this.lang.font.height,data:{toggle:"dropdown"}}),_this.ui.dropdownCheck({items:_this.options.lineHeights,checkClassName:_this.options.icons.menuCheck,className:"dropdown-line-height",title:_this.lang.font.height,click:_this.context.createInvokeHandler("editor.lineHeight")})]).render()});this.context.memo("button.table",function(){return _this.ui.buttonGroup([_this.button({className:"dropdown-toggle",contents:_this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.table),_this.options),tooltip:_this.lang.table.table,data:{toggle:"dropdown"}}),_this.ui.dropdown({title:_this.lang.table.table,className:"note-table",items:['<div class="note-dimension-picker">',' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>',' <div class="note-dimension-picker-highlighted"/>',' <div class="note-dimension-picker-unhighlighted"/>',"</div>",'<div class="note-dimension-display">1 x 1</div>'].join("")})],{callback:function($node){var $catcher=$node.find(".note-dimension-picker-mousecatcher");$catcher.css({width:_this.options.insertTableMaxSize.col+"em",height:_this.options.insertTableMaxSize.row+"em"}).mousedown(_this.context.createInvokeHandler("editor.insertTable")).on("mousemove",_this.tableMoveHandler.bind(_this))}}).render()});this.context.memo("button.link",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.link),tooltip:_this.lang.link.link+_this.representShortcut("linkDialog.show"),click:_this.context.createInvokeHandler("linkDialog.show")}).render()});this.context.memo("button.picture",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.picture),tooltip:_this.lang.image.image,click:_this.context.createInvokeHandler("imageDialog.show")}).render()});this.context.memo("button.video",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.video),tooltip:_this.lang.video.video,click:_this.context.createInvokeHandler("videoDialog.show")}).render()});this.context.memo("button.hr",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.minus),tooltip:_this.lang.hr.insert+_this.representShortcut("insertHorizontalRule"),click:_this.context.createInvokeHandler("editor.insertHorizontalRule")}).render()});this.context.memo("button.fullscreen",function(){return _this.button({className:"btn-fullscreen",contents:_this.ui.icon(_this.options.icons.arrowsAlt),tooltip:_this.lang.options.fullscreen,click:_this.context.createInvokeHandler("fullscreen.toggle")}).render()});this.context.memo("button.codeview",function(){return _this.button({className:"btn-codeview",contents:_this.ui.icon(_this.options.icons.code),tooltip:_this.lang.options.codeview,click:_this.context.createInvokeHandler("codeview.toggle")}).render()});this.context.memo("button.redo",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.redo),tooltip:_this.lang.history.redo+_this.representShortcut("redo"),click:_this.context.createInvokeHandler("editor.redo")}).render()});this.context.memo("button.undo",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.undo),tooltip:_this.lang.history.undo+_this.representShortcut("undo"),click:_this.context.createInvokeHandler("editor.undo")}).render()});this.context.memo("button.help",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.question),tooltip:_this.lang.options.help,click:_this.context.createInvokeHandler("helpDialog.show")}).render()})};Buttons.prototype.addImagePopoverButtons=function(){var _this=this;this.context.memo("button.imageSize100",function(){return _this.button({contents:'<span class="note-fontsize-10">100%</span>',tooltip:_this.lang.image.resizeFull,click:_this.context.createInvokeHandler("editor.resize","1")}).render()});this.context.memo("button.imageSize50",function(){return _this.button({contents:'<span class="note-fontsize-10">50%</span>',tooltip:_this.lang.image.resizeHalf,click:_this.context.createInvokeHandler("editor.resize","0.5")}).render()});this.context.memo("button.imageSize25",function(){return _this.button({contents:'<span class="note-fontsize-10">25%</span>',tooltip:_this.lang.image.resizeQuarter,click:_this.context.createInvokeHandler("editor.resize","0.25")}).render()});this.context.memo("button.floatLeft",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.alignLeft),tooltip:_this.lang.image.floatLeft,click:_this.context.createInvokeHandler("editor.floatMe","left")}).render()});this.context.memo("button.floatRight",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.alignRight),tooltip:_this.lang.image.floatRight,click:_this.context.createInvokeHandler("editor.floatMe","right")}).render()});this.context.memo("button.floatNone",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.alignJustify),tooltip:_this.lang.image.floatNone,click:_this.context.createInvokeHandler("editor.floatMe","none")}).render()});this.context.memo("button.removeMedia",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.trash),tooltip:_this.lang.image.remove,click:_this.context.createInvokeHandler("editor.removeMedia")}).render()})};Buttons.prototype.addLinkPopoverButtons=function(){var _this=this;this.context.memo("button.linkDialogShow",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.link),tooltip:_this.lang.link.edit,click:_this.context.createInvokeHandler("linkDialog.show")}).render()});this.context.memo("button.unlink",function(){return _this.button({contents:_this.ui.icon(_this.options.icons.unlink),tooltip:_this.lang.link.unlink,click:_this.context.createInvokeHandler("editor.unlink")}).render()})};Buttons.prototype.addTablePopoverButtons=function(){var _this=this;this.context.memo("button.addRowUp",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.rowAbove),tooltip:_this.lang.table.addRowAbove,click:_this.context.createInvokeHandler("editor.addRow","top")}).render()});this.context.memo("button.addRowDown",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.rowBelow),tooltip:_this.lang.table.addRowBelow,click:_this.context.createInvokeHandler("editor.addRow","bottom")}).render()});this.context.memo("button.addColLeft",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.colBefore),tooltip:_this.lang.table.addColLeft,click:_this.context.createInvokeHandler("editor.addCol","left")}).render()});this.context.memo("button.addColRight",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.colAfter),tooltip:_this.lang.table.addColRight,click:_this.context.createInvokeHandler("editor.addCol","right")}).render()});this.context.memo("button.deleteRow",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.rowRemove),tooltip:_this.lang.table.delRow,click:_this.context.createInvokeHandler("editor.deleteRow")}).render()});this.context.memo("button.deleteCol",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.colRemove),tooltip:_this.lang.table.delCol,click:_this.context.createInvokeHandler("editor.deleteCol")}).render()});this.context.memo("button.deleteTable",function(){return _this.button({className:"btn-md",contents:_this.ui.icon(_this.options.icons.trash),tooltip:_this.lang.table.delTable,click:_this.context.createInvokeHandler("editor.deleteTable")}).render()})};Buttons.prototype.build=function($container,groups){for(var groupIdx=0,groupLen=groups.length;groupIdx<groupLen;groupIdx++){var group=groups[groupIdx];var groupName=$$1.isArray(group)?group[0]:group;var buttons=$$1.isArray(group)?group.length===1?[group[0]]:group[1]:[group];var $group=this.ui.buttonGroup({className:"note-"+groupName}).render();for(var idx=0,len=buttons.length;idx<len;idx++){var btn=this.context.memo("button."+buttons[idx]);if(btn){$group.append(typeof btn==="function"?btn(this.context):btn)}}$group.appendTo($container)}};Buttons.prototype.updateCurrentStyle=function($container){var _this=this;var $cont=$container||this.$toolbar;var styleInfo=this.context.invoke("editor.currentStyle");this.updateBtnStates($cont,{".note-btn-bold":function(){return styleInfo["font-bold"]==="bold"},".note-btn-italic":function(){return styleInfo["font-italic"]==="italic"},".note-btn-underline":function(){return styleInfo["font-underline"]==="underline"},".note-btn-subscript":function(){return styleInfo["font-subscript"]==="subscript"},".note-btn-superscript":function(){return styleInfo["font-superscript"]==="superscript"},".note-btn-strikethrough":function(){return styleInfo["font-strikethrough"]==="strikethrough"}});if(styleInfo["font-family"]){var fontNames=styleInfo["font-family"].split(",").map(function(name){return name.replace(/[\'\"]/g,"").replace(/\s+$/,"").replace(/^\s+/,"")});var fontName_1=lists.find(fontNames,this.isFontInstalled.bind(this));$cont.find(".dropdown-fontname a").each(function(idx,item){var $item=$$1(item);var isChecked=$item.data("value")+""===fontName_1+"";$item.toggleClass("checked",isChecked)});$cont.find(".note-current-fontname").text(fontName_1).css("font-family",fontName_1)}if(styleInfo["font-size"]){var fontSize_1=styleInfo["font-size"];$cont.find(".dropdown-fontsize a").each(function(idx,item){var $item=$$1(item);var isChecked=$item.data("value")+""===fontSize_1+"";$item.toggleClass("checked",isChecked)});$cont.find(".note-current-fontsize").text(fontSize_1)}if(styleInfo["line-height"]){var lineHeight_1=styleInfo["line-height"];$cont.find(".dropdown-line-height li a").each(function(idx,item){var isChecked=$$1(item).data("value")+""===lineHeight_1+"";_this.className=isChecked?"checked":""})}};Buttons.prototype.updateBtnStates=function($container,infos){var _this=this;$$1.each(infos,function(selector,pred){_this.ui.toggleBtnActive($container.find(selector),pred())})};Buttons.prototype.tableMoveHandler=function(event){var PX_PER_EM=18;var $picker=$$1(event.target.parentNode);var $dimensionDisplay=$picker.next();var $catcher=$picker.find(".note-dimension-picker-mousecatcher");var $highlighted=$picker.find(".note-dimension-picker-highlighted");var $unhighlighted=$picker.find(".note-dimension-picker-unhighlighted");var posOffset;if(event.offsetX===undefined){var posCatcher=$$1(event.target).offset();posOffset={x:event.pageX-posCatcher.left,y:event.pageY-posCatcher.top}}else{posOffset={x:event.offsetX,y:event.offsetY}}var dim={c:Math.ceil(posOffset.x/PX_PER_EM)||1,r:Math.ceil(posOffset.y/PX_PER_EM)||1};$highlighted.css({width:dim.c+"em",height:dim.r+"em"});$catcher.data("value",dim.c+"x"+dim.r);if(dim.c>3&&dim.c<this.options.insertTableMaxSize.col){$unhighlighted.css({width:dim.c+1+"em"})}if(dim.r>3&&dim.r<this.options.insertTableMaxSize.row){$unhighlighted.css({height:dim.r+1+"em"})}$dimensionDisplay.html(dim.c+" x "+dim.r)};return Buttons}();var Toolbar=function(){function Toolbar(context){this.context=context;this.$window=$$1(window);this.$document=$$1(document);this.ui=$$1.summernote.ui;this.$note=context.layoutInfo.note;this.$editor=context.layoutInfo.editor;this.$toolbar=context.layoutInfo.toolbar;this.options=context.options;this.followScroll=this.followScroll.bind(this)}Toolbar.prototype.shouldInitialize=function(){return!this.options.airMode};Toolbar.prototype.initialize=function(){var _this=this;this.options.toolbar=this.options.toolbar||[];if(!this.options.toolbar.length){this.$toolbar.hide()}else{this.context.invoke("buttons.build",this.$toolbar,this.options.toolbar)}if(this.options.toolbarContainer){this.$toolbar.appendTo(this.options.toolbarContainer)}this.changeContainer(false);this.$note.on("summernote.keyup summernote.mouseup summernote.change",function(){_this.context.invoke("buttons.updateCurrentStyle")});this.context.invoke("buttons.updateCurrentStyle");if(this.options.followingToolbar){this.$window.on("scroll resize",this.followScroll)}};Toolbar.prototype.destroy=function(){this.$toolbar.children().remove();if(this.options.followingToolbar){this.$window.off("scroll resize",this.followScroll)}};Toolbar.prototype.followScroll=function(){if(this.$editor.hasClass("fullscreen")){return false}var $toolbarWrapper=this.$toolbar.parent(".note-toolbar-wrapper");var editorHeight=this.$editor.outerHeight();var editorWidth=this.$editor.width();var toolbarHeight=this.$toolbar.height();$toolbarWrapper.css({height:toolbarHeight});var otherBarHeight=0;if(this.options.otherStaticBar){otherBarHeight=$$1(this.options.otherStaticBar).outerHeight()}var currentOffset=this.$document.scrollTop();var editorOffsetTop=this.$editor.offset().top;var editorOffsetBottom=editorOffsetTop+editorHeight;var activateOffset=editorOffsetTop-otherBarHeight;var deactivateOffsetBottom=editorOffsetBottom-otherBarHeight-toolbarHeight;if(currentOffset>activateOffset&¤tOffset<deactivateOffsetBottom){this.$toolbar.css({position:"fixed",top:otherBarHeight,width:editorWidth})}else{this.$toolbar.css({position:"relative",top:0,width:"100%"})}};Toolbar.prototype.changeContainer=function(isFullscreen){if(isFullscreen){this.$toolbar.prependTo(this.$editor)}else{if(this.options.toolbarContainer){this.$toolbar.appendTo(this.options.toolbarContainer)}}};Toolbar.prototype.updateFullscreen=function(isFullscreen){this.ui.toggleBtnActive(this.$toolbar.find(".btn-fullscreen"),isFullscreen);this.changeContainer(isFullscreen)};Toolbar.prototype.updateCodeview=function(isCodeview){this.ui.toggleBtnActive(this.$toolbar.find(".btn-codeview"),isCodeview);if(isCodeview){this.deactivate()}else{this.activate()}};Toolbar.prototype.activate=function(isIncludeCodeview){var $btn=this.$toolbar.find("button");if(!isIncludeCodeview){$btn=$btn.not(".btn-codeview")}this.ui.toggleBtn($btn,true)};Toolbar.prototype.deactivate=function(isIncludeCodeview){var $btn=this.$toolbar.find("button");if(!isIncludeCodeview){$btn=$btn.not(".btn-codeview")}this.ui.toggleBtn($btn,false)};return Toolbar}();var LinkDialog=function(){function LinkDialog(context){this.context=context;this.ui=$$1.summernote.ui;this.$body=$$1(document.body);this.$editor=context.layoutInfo.editor;this.options=context.options;this.lang=this.options.langInfo;context.memo("help.linkDialog.show",this.options.langInfo.help["linkDialog.show"])}LinkDialog.prototype.initialize=function(){var $container=this.options.dialogsInBody?this.$body:this.$editor;var body=['<div class="form-group note-form-group">','<label class="note-form-label">'+this.lang.link.textToDisplay+"</label>",'<input class="note-link-text form-control note-form-control note-input" type="text" />',"</div>",'<div class="form-group note-form-group">','<label class="note-form-label">'+this.lang.link.url+"</label>",'<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />',"</div>",!this.options.disableLinkTarget?$$1("<div/>").append(this.ui.checkbox({id:"sn-checkbox-open-in-new-window",text:this.lang.link.openInNewWindow,checked:true}).render()).html():""].join("");var buttonClass="btn btn-primary note-btn note-btn-primary note-link-btn";var footer='<button type="submit" href="#" class="'+buttonClass+'" disabled>'+this.lang.link.insert+"</button>";this.$dialog=this.ui.dialog({className:"link-dialog",title:this.lang.link.insert,fade:this.options.dialogsFade,body:body,footer:footer}).render().appendTo($container)};LinkDialog.prototype.destroy=function(){this.ui.hideDialog(this.$dialog);this.$dialog.remove()};LinkDialog.prototype.bindEnterKey=function($input,$btn){$input.on("keypress",function(event){if(event.keyCode===key.code.ENTER){event.preventDefault();$btn.trigger("click")}})};LinkDialog.prototype.toggleLinkBtn=function($linkBtn,$linkText,$linkUrl){this.ui.toggleBtn($linkBtn,$linkText.val()&&$linkUrl.val())};LinkDialog.prototype.showLinkDialog=function(linkInfo){var _this=this;return $$1.Deferred(function(deferred){var $linkText=_this.$dialog.find(".note-link-text");var $linkUrl=_this.$dialog.find(".note-link-url");var $linkBtn=_this.$dialog.find(".note-link-btn");var $openInNewWindow=_this.$dialog.find("input[type=checkbox]");_this.ui.onDialogShown(_this.$dialog,function(){_this.context.triggerEvent("dialog.shown");if(!linkInfo.url){linkInfo.url=linkInfo.text}$linkText.val(linkInfo.text);var handleLinkTextUpdate=function(){_this.toggleLinkBtn($linkBtn,$linkText,$linkUrl);linkInfo.text=$linkText.val()};$linkText.on("input",handleLinkTextUpdate).on("paste",function(){setTimeout(handleLinkTextUpdate,0)});var handleLinkUrlUpdate=function(){_this.toggleLinkBtn($linkBtn,$linkText,$linkUrl);if(!linkInfo.text){$linkText.val($linkUrl.val())}};$linkUrl.on("input",handleLinkUrlUpdate).on("paste",function(){setTimeout(handleLinkUrlUpdate,0)}).val(linkInfo.url);if(!env.isSupportTouch){$linkUrl.trigger("focus")}_this.toggleLinkBtn($linkBtn,$linkText,$linkUrl);_this.bindEnterKey($linkUrl,$linkBtn);_this.bindEnterKey($linkText,$linkBtn);var isChecked=linkInfo.isNewWindow!==undefined?linkInfo.isNewWindow:_this.context.options.linkTargetBlank;$openInNewWindow.prop("checked",isChecked);$linkBtn.one("click",function(event){event.preventDefault();deferred.resolve({range:linkInfo.range,url:$linkUrl.val(),text:$linkText.val(),isNewWindow:$openInNewWindow.is(":checked")});_this.ui.hideDialog(_this.$dialog)})});_this.ui.onDialogHidden(_this.$dialog,function(){$linkText.off("input paste keypress");$linkUrl.off("input paste keypress");$linkBtn.off("click");if(deferred.state()==="pending"){deferred.reject()}});_this.ui.showDialog(_this.$dialog)}).promise()};LinkDialog.prototype.show=function(){var _this=this;var linkInfo=this.context.invoke("editor.getLinkInfo");this.context.invoke("editor.saveRange");this.showLinkDialog(linkInfo).then(function(linkInfo){_this.context.invoke("editor.restoreRange");_this.context.invoke("editor.createLink",linkInfo)}).fail(function(){_this.context.invoke("editor.restoreRange")})};return LinkDialog}();var LinkPopover=function(){function LinkPopover(context){var _this=this;this.context=context;this.ui=$$1.summernote.ui;this.options=context.options;this.events={"summernote.keyup summernote.mouseup summernote.change summernote.scroll":function(){_this.update()},"summernote.disable summernote.dialog.shown":function(){_this.hide()}}}LinkPopover.prototype.shouldInitialize=function(){return!lists.isEmpty(this.options.popover.link)};LinkPopover.prototype.initialize=function(){this.$popover=this.ui.popover({className:"note-link-popover",callback:function($node){var $content=$node.find(".popover-content,.note-popover-content");$content.prepend('<span><a target="_blank"></a> </span>')}}).render().appendTo(this.options.container);var $content=this.$popover.find(".popover-content,.note-popover-content");this.context.invoke("buttons.build",$content,this.options.popover.link)};LinkPopover.prototype.destroy=function(){this.$popover.remove()};LinkPopover.prototype.update=function(){if(!this.context.invoke("editor.hasFocus")){this.hide();return}var rng=this.context.invoke("editor.createRange");if(rng.isCollapsed()&&rng.isOnAnchor()){var anchor=dom.ancestor(rng.sc,dom.isAnchor);var href=$$1(anchor).attr("href");this.$popover.find("a").attr("href",href).html(href);var pos=dom.posFromPlaceholder(anchor);this.$popover.css({display:"block",left:pos.left,top:pos.top})}else{this.hide()}};LinkPopover.prototype.hide=function(){this.$popover.hide()};return LinkPopover}();var ImageDialog=function(){function ImageDialog(context){this.context=context;this.ui=$$1.summernote.ui;this.$body=$$1(document.body);this.$editor=context.layoutInfo.editor;this.options=context.options;this.lang=this.options.langInfo}ImageDialog.prototype.initialize=function(){var $container=this.options.dialogsInBody?this.$body:this.$editor;var imageLimitation="";if(this.options.maximumImageFileSize){var unit=Math.floor(Math.log(this.options.maximumImageFileSize)/Math.log(1024));var readableSize=(this.options.maximumImageFileSize/Math.pow(1024,unit)).toFixed(2)*1+" "+" KMGTP"[unit]+"B";imageLimitation="<small>"+(this.lang.image.maximumFileSize+" : "+readableSize)+"</small>"}var body=['<div class="form-group note-form-group note-group-select-from-files">','<label class="note-form-label">'+this.lang.image.selectFromFiles+"</label>",'<input class="note-image-input note-form-control note-input" ',' type="file" name="files" accept="image/*" multiple="multiple" />',imageLimitation,"</div>",'<div class="form-group note-group-image-url" style="overflow:auto;">','<label class="note-form-label">'+this.lang.image.url+"</label>",'<input class="note-image-url form-control note-form-control note-input ',' col-md-12" type="text" />',"</div>"].join("");var buttonClass="btn btn-primary note-btn note-btn-primary note-image-btn";var footer='<button type="submit" href="#" class="'+buttonClass+'" disabled>'+this.lang.image.insert+"</button>";this.$dialog=this.ui.dialog({title:this.lang.image.insert,fade:this.options.dialogsFade,body:body,footer:footer}).render().appendTo($container)};ImageDialog.prototype.destroy=function(){this.ui.hideDialog(this.$dialog);this.$dialog.remove()};ImageDialog.prototype.bindEnterKey=function($input,$btn){$input.on("keypress",function(event){if(event.keyCode===key.code.ENTER){event.preventDefault();$btn.trigger("click")}})};ImageDialog.prototype.show=function(){var _this=this;this.context.invoke("editor.saveRange");this.showImageDialog().then(function(data){_this.ui.hideDialog(_this.$dialog);_this.context.invoke("editor.restoreRange");if(typeof data==="string"){_this.context.invoke("editor.insertImage",data)}else{_this.context.invoke("editor.insertImagesOrCallback",data)}}).fail(function(){_this.context.invoke("editor.restoreRange")})};ImageDialog.prototype.showImageDialog=function(){var _this=this;return $$1.Deferred(function(deferred){var $imageInput=_this.$dialog.find(".note-image-input");var $imageUrl=_this.$dialog.find(".note-image-url");var $imageBtn=_this.$dialog.find(".note-image-btn");_this.ui.onDialogShown(_this.$dialog,function(){_this.context.triggerEvent("dialog.shown");$imageInput.replaceWith($imageInput.clone().on("change",function(event){deferred.resolve(event.target.files||event.target.value)}).val(""));$imageBtn.click(function(event){event.preventDefault();deferred.resolve($imageUrl.val())});$imageUrl.on("keyup paste",function(){var url=$imageUrl.val();_this.ui.toggleBtn($imageBtn,url)}).val("");if(!env.isSupportTouch){$imageUrl.trigger("focus")}_this.bindEnterKey($imageUrl,$imageBtn)});_this.ui.onDialogHidden(_this.$dialog,function(){$imageInput.off("change");$imageUrl.off("keyup paste keypress");$imageBtn.off("click");if(deferred.state()==="pending"){deferred.reject()}});_this.ui.showDialog(_this.$dialog)})};return ImageDialog}();var ImagePopover=function(){function ImagePopover(context){var _this=this;this.context=context;this.ui=$$1.summernote.ui;this.editable=context.layoutInfo.editable[0];this.options=context.options;this.events={"summernote.disable":function(){_this.hide()}}}ImagePopover.prototype.shouldInitialize=function(){return!lists.isEmpty(this.options.popover.image)};ImagePopover.prototype.initialize=function(){this.$popover=this.ui.popover({className:"note-image-popover"}).render().appendTo(this.options.container);var $content=this.$popover.find(".popover-content,.note-popover-content");this.context.invoke("buttons.build",$content,this.options.popover.image)};ImagePopover.prototype.destroy=function(){this.$popover.remove()};ImagePopover.prototype.update=function(target){if(dom.isImg(target)){var pos=dom.posFromPlaceholder(target);var posEditor=dom.posFromPlaceholder(this.editable);this.$popover.css({display:"block",left:this.options.popatmouse?event.pageX-20:pos.left,top:this.options.popatmouse?event.pageY:Math.min(pos.top,posEditor.top)})}else{this.hide()}};ImagePopover.prototype.hide=function(){this.$popover.hide()};return ImagePopover}();var TablePopover=function(){function TablePopover(context){var _this=this;this.context=context;this.ui=$$1.summernote.ui;this.options=context.options;this.events={"summernote.mousedown":function(we,e){_this.update(e.target)},"summernote.keyup summernote.scroll summernote.change":function(){_this.update()},"summernote.disable":function(){_this.hide()}}}TablePopover.prototype.shouldInitialize=function(){return!lists.isEmpty(this.options.popover.table)};TablePopover.prototype.initialize=function(){this.$popover=this.ui.popover({className:"note-table-popover"}).render().appendTo(this.options.container);var $content=this.$popover.find(".popover-content,.note-popover-content");this.context.invoke("buttons.build",$content,this.options.popover.table);if(env.isFF){document.execCommand("enableInlineTableEditing",false,false)}};TablePopover.prototype.destroy=function(){this.$popover.remove()};TablePopover.prototype.update=function(target){if(this.context.isDisabled()){return false}var isCell=dom.isCell(target);if(isCell){var pos=dom.posFromPlaceholder(target);this.$popover.css({display:"block",left:pos.left,top:pos.top})}else{this.hide()}return isCell};TablePopover.prototype.hide=function(){this.$popover.hide()};return TablePopover}();var VideoDialog=function(){function VideoDialog(context){this.context=context;this.ui=$$1.summernote.ui;this.$body=$$1(document.body);this.$editor=context.layoutInfo.editor;this.options=context.options;this.lang=this.options.langInfo}VideoDialog.prototype.initialize=function(){var $container=this.options.dialogsInBody?this.$body:this.$editor;var body=['<div class="form-group note-form-group row-fluid">','<label class="note-form-label">'+this.lang.video.url+' <small class="text-muted">'+this.lang.video.providers+"</small></label>",'<input class="note-video-url form-control note-form-control note-input" type="text" />',"</div>"].join("");var buttonClass="btn btn-primary note-btn note-btn-primary note-video-btn";var footer='<button type="submit" href="#" class="'+buttonClass+'" disabled>'+this.lang.video.insert+"</button>";this.$dialog=this.ui.dialog({title:this.lang.video.insert,fade:this.options.dialogsFade,body:body,footer:footer}).render().appendTo($container)};VideoDialog.prototype.destroy=function(){this.ui.hideDialog(this.$dialog);this.$dialog.remove()};VideoDialog.prototype.bindEnterKey=function($input,$btn){$input.on("keypress",function(event){if(event.keyCode===key.code.ENTER){event.preventDefault();$btn.trigger("click")}})};VideoDialog.prototype.createVideoNode=function(url){var ytRegExp=/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;var ytMatch=url.match(ytRegExp);var igRegExp=/(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/;var igMatch=url.match(igRegExp);var vRegExp=/\/\/vine\.co\/v\/([a-zA-Z0-9]+)/;var vMatch=url.match(vRegExp);var vimRegExp=/\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/;var vimMatch=url.match(vimRegExp);var dmRegExp=/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/;var dmMatch=url.match(dmRegExp);var youkuRegExp=/\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/;var youkuMatch=url.match(youkuRegExp);var qqRegExp=/\/\/v\.qq\.com.*?vid=(.+)/;var qqMatch=url.match(qqRegExp);var qqRegExp2=/\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/;var qqMatch2=url.match(qqRegExp2);var mp4RegExp=/^.+.(mp4|m4v)$/;var mp4Match=url.match(mp4RegExp);var oggRegExp=/^.+.(ogg|ogv)$/;var oggMatch=url.match(oggRegExp);var webmRegExp=/^.+.(webm)$/;var webmMatch=url.match(webmRegExp);var $video;if(ytMatch&&ytMatch[1].length===11){var youtubeId=ytMatch[1];$video=$$1("<iframe>").attr("frameborder",0).attr("src","//www.youtube.com/embed/"+youtubeId).attr("width","640").attr("height","360")}else if(igMatch&&igMatch[0].length){$video=$$1("<iframe>").attr("frameborder",0).attr("src","https://instagram.com/p/"+igMatch[1]+"/embed/").attr("width","612").attr("height","710").attr("scrolling","no").attr("allowtransparency","true")}else if(vMatch&&vMatch[0].length){$video=$$1("<iframe>").attr("frameborder",0).attr("src",vMatch[0]+"/embed/simple").attr("width","600").attr("height","600").attr("class","vine-embed")}else if(vimMatch&&vimMatch[3].length){$video=$$1("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("src","//player.vimeo.com/video/"+vimMatch[3]).attr("width","640").attr("height","360")}else if(dmMatch&&dmMatch[2].length){$video=$$1("<iframe>").attr("frameborder",0).attr("src","//www.dailymotion.com/embed/video/"+dmMatch[2]).attr("width","640").attr("height","360")}else if(youkuMatch&&youkuMatch[1].length){$video=$$1("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("height","498").attr("width","510").attr("src","//player.youku.com/embed/"+youkuMatch[1])}else if(qqMatch&&qqMatch[1].length||qqMatch2&&qqMatch2[2].length){var vid=qqMatch&&qqMatch[1].length?qqMatch[1]:qqMatch2[2];$video=$$1("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("height","310").attr("width","500").attr("src","http://v.qq.com/iframe/player.html?vid="+vid+"&auto=0")}else if(mp4Match||oggMatch||webmMatch){$video=$$1("<video controls>").attr("src",url).attr("width","640").attr("height","360")}else{return false}$video.addClass("note-video-clip");return $video[0]};VideoDialog.prototype.show=function(){var _this=this;var text=this.context.invoke("editor.getSelectedText");this.context.invoke("editor.saveRange");this.showVideoDialog(text).then(function(url){_this.ui.hideDialog(_this.$dialog);_this.context.invoke("editor.restoreRange");var $node=_this.createVideoNode(url);if($node){_this.context.invoke("editor.insertNode",$node)}}).fail(function(){_this.context.invoke("editor.restoreRange")})};VideoDialog.prototype.showVideoDialog=function(text){var _this=this;return $$1.Deferred(function(deferred){var $videoUrl=_this.$dialog.find(".note-video-url");var $videoBtn=_this.$dialog.find(".note-video-btn");_this.ui.onDialogShown(_this.$dialog,function(){_this.context.triggerEvent("dialog.shown");$videoUrl.val(text).on("input",function(){_this.ui.toggleBtn($videoBtn,$videoUrl.val())});if(!env.isSupportTouch){$videoUrl.trigger("focus")}$videoBtn.click(function(event){event.preventDefault();deferred.resolve($videoUrl.val())});_this.bindEnterKey($videoUrl,$videoBtn)});_this.ui.onDialogHidden(_this.$dialog,function(){$videoUrl.off("input");$videoBtn.off("click");if(deferred.state()==="pending"){deferred.reject()}});_this.ui.showDialog(_this.$dialog)})};return VideoDialog}();var HelpDialog=function(){function HelpDialog(context){this.context=context;this.ui=$$1.summernote.ui;this.$body=$$1(document.body);this.$editor=context.layoutInfo.editor;this.options=context.options;this.lang=this.options.langInfo}HelpDialog.prototype.initialize=function(){var $container=this.options.dialogsInBody?this.$body:this.$editor;var body=['<p class="text-center">','<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</a> · ','<a href="https://github.com/summernote/summernote" target="_blank">Project</a> · ','<a href="https://github.com/summernote/summernote/issues" target="_blank">Issues</a>',"</p>"].join("");this.$dialog=this.ui.dialog({title:this.lang.options.help,fade:this.options.dialogsFade,body:this.createShortcutList(),footer:body,callback:function($node){$node.find(".modal-body,.note-modal-body").css({"max-height":300,overflow:"scroll"})}}).render().appendTo($container)};HelpDialog.prototype.destroy=function(){this.ui.hideDialog(this.$dialog);this.$dialog.remove()};HelpDialog.prototype.createShortcutList=function(){var _this=this;var keyMap=this.options.keyMap[env.isMac?"mac":"pc"];return Object.keys(keyMap).map(function(key){var command=keyMap[key];var $row=$$1('<div><div class="help-list-item"/></div>');$row.append($$1("<label><kbd>"+key+"</kdb></label>").css({width:180,"margin-right":10})).append($$1("<span/>").html(_this.context.memo("help."+command)||command));return $row.html()}).join("")};HelpDialog.prototype.showHelpDialog=function(){var _this=this;return $$1.Deferred(function(deferred){_this.ui.onDialogShown(_this.$dialog,function(){_this.context.triggerEvent("dialog.shown");deferred.resolve()});_this.ui.showDialog(_this.$dialog)}).promise()};HelpDialog.prototype.show=function(){var _this=this;this.context.invoke("editor.saveRange");this.showHelpDialog().then(function(){_this.context.invoke("editor.restoreRange")})};return HelpDialog}();var AIR_MODE_POPOVER_X_OFFSET=20;var AirPopover=function(){function AirPopover(context){var _this=this;this.context=context;this.ui=$$1.summernote.ui;this.options=context.options;this.events={"summernote.keyup summernote.mouseup summernote.scroll":function(){_this.update()},"summernote.disable summernote.change summernote.dialog.shown":function(){_this.hide()},"summernote.focusout":function(we,e){if(env.isFF){return}if(!e.relatedTarget||!dom.ancestor(e.relatedTarget,func.eq(_this.$popover[0]))){_this.hide()}}}}AirPopover.prototype.shouldInitialize=function(){return this.options.airMode&&!lists.isEmpty(this.options.popover.air)};AirPopover.prototype.initialize=function(){this.$popover=this.ui.popover({className:"note-air-popover"}).render().appendTo(this.options.container);var $content=this.$popover.find(".popover-content");this.context.invoke("buttons.build",$content,this.options.popover.air)};AirPopover.prototype.destroy=function(){this.$popover.remove()};AirPopover.prototype.update=function(){var styleInfo=this.context.invoke("editor.currentStyle");if(styleInfo.range&&!styleInfo.range.isCollapsed()){var rect=lists.last(styleInfo.range.getClientRects());if(rect){var bnd=func.rect2bnd(rect);this.$popover.css({display:"block",left:Math.max(bnd.left+bnd.width/2,0)-AIR_MODE_POPOVER_X_OFFSET,top:bnd.top+bnd.height});this.context.invoke("buttons.updateCurrentStyle",this.$popover)}}else{this.hide()}};AirPopover.prototype.hide=function(){this.$popover.hide()};return AirPopover}();var POPOVER_DIST=5;var HintPopover=function(){function HintPopover(context){var _this=this;this.context=context;this.ui=$$1.summernote.ui;this.$editable=context.layoutInfo.editable;this.options=context.options;this.hint=this.options.hint||[];this.direction=this.options.hintDirection||"bottom";this.hints=$$1.isArray(this.hint)?this.hint:[this.hint];this.events={"summernote.keyup":function(we,e){if(!e.isDefaultPrevented()){_this.handleKeyup(e)}},"summernote.keydown":function(we,e){_this.handleKeydown(e)},"summernote.disable summernote.dialog.shown":function(){_this.hide()}}}HintPopover.prototype.shouldInitialize=function(){return this.hints.length>0};HintPopover.prototype.initialize=function(){var _this=this;this.lastWordRange=null;this.$popover=this.ui.popover({className:"note-hint-popover",hideArrow:true,direction:""}).render().appendTo(this.options.container);this.$popover.hide();this.$content=this.$popover.find(".popover-content,.note-popover-content");this.$content.on("click",".note-hint-item",function(){_this.$content.find(".active").removeClass("active");$$1(_this).addClass("active");_this.replace()})};HintPopover.prototype.destroy=function(){this.$popover.remove()};HintPopover.prototype.selectItem=function($item){this.$content.find(".active").removeClass("active");$item.addClass("active");this.$content[0].scrollTop=$item[0].offsetTop-this.$content.innerHeight()/2};HintPopover.prototype.moveDown=function(){var $current=this.$content.find(".note-hint-item.active");var $next=$current.next();if($next.length){this.selectItem($next)}else{var $nextGroup=$current.parent().next();if(!$nextGroup.length){$nextGroup=this.$content.find(".note-hint-group").first()}this.selectItem($nextGroup.find(".note-hint-item").first())}};HintPopover.prototype.moveUp=function(){var $current=this.$content.find(".note-hint-item.active");var $prev=$current.prev();if($prev.length){this.selectItem($prev)}else{var $prevGroup=$current.parent().prev();if(!$prevGroup.length){$prevGroup=this.$content.find(".note-hint-group").last()}this.selectItem($prevGroup.find(".note-hint-item").last())}};HintPopover.prototype.replace=function(){var $item=this.$content.find(".note-hint-item.active");if($item.length){var node=this.nodeFromItem($item);this.lastWordRange.insertNode(node);range.createFromNode(node).collapse().select();this.lastWordRange=null;this.hide();this.context.triggerEvent("change",this.$editable.html(),this.$editable[0]);this.context.invoke("editor.focus")}};HintPopover.prototype.nodeFromItem=function($item){var hint=this.hints[$item.data("index")];var item=$item.data("item");var node=hint.content?hint.content(item):item;if(typeof node==="string"){node=dom.createText(node)}return node};HintPopover.prototype.createItemTemplates=function(hintIdx,items){var hint=this.hints[hintIdx];return items.map(function(item,idx){var $item=$$1('<div class="note-hint-item"/>');$item.append(hint.template?hint.template(item):item+"");$item.data({index:hintIdx,item:item});return $item})};HintPopover.prototype.handleKeydown=function(e){if(!this.$popover.is(":visible")){return}if(e.keyCode===key.code.ENTER){e.preventDefault();this.replace()}else if(e.keyCode===key.code.UP){e.preventDefault();this.moveUp()}else if(e.keyCode===key.code.DOWN){e.preventDefault();this.moveDown()}};HintPopover.prototype.searchKeyword=function(index,keyword,callback){var hint=this.hints[index];if(hint&&hint.match.test(keyword)&&hint.search){var matches=hint.match.exec(keyword);hint.search(matches[1],callback)}else{callback()}};HintPopover.prototype.createGroup=function(idx,keyword){var _this=this;var $group=$$1('<div class="note-hint-group note-hint-group-'+idx+'"/>');this.searchKeyword(idx,keyword,function(items){items=items||[];if(items.length){$group.html(_this.createItemTemplates(idx,items));_this.show()}});return $group};HintPopover.prototype.handleKeyup=function(e){var _this=this;if(!lists.contains([key.code.ENTER,key.code.UP,key.code.DOWN],e.keyCode)){var wordRange=this.context.invoke("editor.createRange").getWordRange();var keyword_1=wordRange.toString();if(this.hints.length&&keyword_1){this.$content.empty();var bnd=func.rect2bnd(lists.last(wordRange.getClientRects()));if(bnd){this.$popover.hide();this.lastWordRange=wordRange;this.hints.forEach(function(hint,idx){if(hint.match.test(keyword_1)){_this.createGroup(idx,keyword_1).appendTo(_this.$content)}});this.$content.find(".note-hint-item:first").addClass("active");if(this.direction==="top"){this.$popover.css({left:bnd.left,top:bnd.top-this.$popover.outerHeight()-POPOVER_DIST})}else{this.$popover.css({left:bnd.left,top:bnd.top+bnd.height+POPOVER_DIST})}}}else{this.hide()}}};HintPopover.prototype.show=function(){this.$popover.show()};HintPopover.prototype.hide=function(){this.$popover.hide()};return HintPopover}();var Context=function(){function Context($note,options){this.ui=$$1.summernote.ui;this.$note=$note;this.memos={};this.modules={};this.layoutInfo={};this.options=options;this.initialize()}Context.prototype.initialize=function(){this.layoutInfo=this.ui.createLayout(this.$note,this.options);this._initialize();this.$note.hide();return this};Context.prototype.destroy=function(){this._destroy();this.$note.removeData("summernote");this.ui.removeLayout(this.$note,this.layoutInfo)};Context.prototype.reset=function(){var disabled=this.isDisabled();this.code(dom.emptyPara);this._destroy();this._initialize();if(disabled){this.disable()}};Context.prototype._initialize=function(){var _this=this;var buttons=$$1.extend({},this.options.buttons);Object.keys(buttons).forEach(function(key){_this.memo("button."+key,buttons[key])});var modules=$$1.extend({},this.options.modules,$$1.summernote.plugins||{});Object.keys(modules).forEach(function(key){_this.module(key,modules[key],true)});Object.keys(this.modules).forEach(function(key){_this.initializeModule(key)})};Context.prototype._destroy=function(){var _this=this;Object.keys(this.modules).reverse().forEach(function(key){_this.removeModule(key)});Object.keys(this.memos).forEach(function(key){_this.removeMemo(key)});this.triggerEvent("destroy",this)};Context.prototype.code=function(html){var isActivated=this.invoke("codeview.isActivated");if(html===undefined){this.invoke("codeview.sync");return isActivated?this.layoutInfo.codable.val():this.layoutInfo.editable.html()}else{if(isActivated){this.layoutInfo.codable.val(html)}else{this.layoutInfo.editable.html(html)}this.$note.val(html);this.triggerEvent("change",html)}};Context.prototype.isDisabled=function(){return this.layoutInfo.editable.attr("contenteditable")==="false"};Context.prototype.enable=function(){this.layoutInfo.editable.attr("contenteditable",true);this.invoke("toolbar.activate",true);this.triggerEvent("disable",false)};Context.prototype.disable=function(){if(this.invoke("codeview.isActivated")){this.invoke("codeview.deactivate")}this.layoutInfo.editable.attr("contenteditable",false);this.invoke("toolbar.deactivate",true);this.triggerEvent("disable",true)};Context.prototype.triggerEvent=function(){var namespace=lists.head(arguments);var args=lists.tail(lists.from(arguments));var callback=this.options.callbacks[func.namespaceToCamel(namespace,"on")];if(callback){callback.apply(this.$note[0],args)}this.$note.trigger("summernote."+namespace,args)};Context.prototype.initializeModule=function(key){var module=this.modules[key];module.shouldInitialize=module.shouldInitialize||func.ok;if(!module.shouldInitialize()){return}if(module.initialize){module.initialize()}if(module.events){dom.attachEvents(this.$note,module.events)}};Context.prototype.module=function(key,ModuleClass,withoutIntialize){if(arguments.length===1){return this.modules[key]}this.modules[key]=new ModuleClass(this);if(!withoutIntialize){this.initializeModule(key)}};Context.prototype.removeModule=function(key){var module=this.modules[key];if(module.shouldInitialize()){if(module.events){dom.detachEvents(this.$note,module.events)}if(module.destroy){module.destroy()}}delete this.modules[key]};Context.prototype.memo=function(key,obj){if(arguments.length===1){return this.memos[key]}this.memos[key]=obj};Context.prototype.removeMemo=function(key){if(this.memos[key]&&this.memos[key].destroy){this.memos[key].destroy()}delete this.memos[key]};Context.prototype.createInvokeHandlerAndUpdateState=function(namespace,value){var _this=this;return function(event){_this.createInvokeHandler(namespace,value)(event);_this.invoke("buttons.updateCurrentStyle")}};Context.prototype.createInvokeHandler=function(namespace,value){var _this=this;return function(event){event.preventDefault();var $target=$$1(event.target);_this.invoke(namespace,value||$target.closest("[data-value]").data("value"),$target)}};Context.prototype.invoke=function(){var namespace=lists.head(arguments);var args=lists.tail(lists.from(arguments));var splits=namespace.split(".");var hasSeparator=splits.length>1;var moduleName=hasSeparator&&lists.head(splits);var methodName=hasSeparator?lists.last(splits):lists.head(splits);var module=this.modules[moduleName||"editor"];if(!moduleName&&this[methodName]){return this[methodName].apply(this,args)}else if(module&&module[methodName]&&module.shouldInitialize()){return module[methodName].apply(module,args)}};return Context}();$$1.fn.extend({summernote:function(){var type=$$1.type(lists.head(arguments));var isExternalAPICalled=type==="string";var hasInitOptions=type==="object";var options=$$1.extend({},$$1.summernote.options,hasInitOptions?lists.head(arguments):{});options.langInfo=$$1.extend(true,{},$$1.summernote.lang["en-US"],$$1.summernote.lang[options.lang]);options.icons=$$1.extend(true,{},$$1.summernote.options.icons,options.icons);options.tooltip=options.tooltip==="auto"?!env.isSupportTouch:options.tooltip;this.each(function(idx,note){var $note=$$1(note);if(!$note.data("summernote")){var context=new Context($note,options);$note.data("summernote",context);$note.data("summernote").triggerEvent("init",context.layoutInfo)}});var $note=this.first();if($note.length){var context=$note.data("summernote");if(isExternalAPICalled){return context.invoke.apply(context,lists.from(arguments))}else if(options.focus){context.invoke("editor.focus")}}return this}});$$1.summernote=$$1.extend($$1.summernote,{version:"0.8.10",ui:ui,dom:dom,plugins:{},options:{modules:{editor:Editor,clipboard:Clipboard,dropzone:Dropzone,codeview:CodeView,statusbar:Statusbar,fullscreen:Fullscreen,handle:Handle,hintPopover:HintPopover,autoLink:AutoLink,autoSync:AutoSync,placeholder:Placeholder,buttons:Buttons,toolbar:Toolbar,linkDialog:LinkDialog,linkPopover:LinkPopover,imageDialog:ImageDialog,imagePopover:ImagePopover,tablePopover:TablePopover,videoDialog:VideoDialog,helpDialog:HelpDialog,airPopover:AirPopover},buttons:{},lang:"en-US",followingToolbar:true,otherStaticBar:"",toolbar:[["style",["style"]],["font",["bold","underline","clear"]],["fontname",["fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["table",["table"]],["insert",["link","picture","video"]],["view",["fullscreen","codeview","help"]]],popatmouse:true,popover:{image:[["imagesize",["imageSize100","imageSize50","imageSize25"]],["float",["floatLeft","floatRight","floatNone"]],["remove",["removeMedia"]]],link:[["link",["linkDialogShow","unlink"]]],table:[["add",["addRowDown","addRowUp","addColLeft","addColRight"]],["delete",["deleteRow","deleteCol","deleteTable"]]],air:[["color",["color"]],["font",["bold","underline","clear"]],["para",["ul","paragraph"]],["table",["table"]],["insert",["link","picture"]]]},airMode:false,width:null,height:null,linkTargetBlank:true,focus:false,tabSize:4,styleWithSpan:true,shortcuts:true,textareaAutoSync:true,hintDirection:"bottom",tooltip:"auto",container:"body",maxTextLength:0,styleTags:["p","blockquote","pre","h1","h2","h3","h4","h5","h6"],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Tahoma","Times New Roman","Verdana"],fontSizes:["8","9","10","11","12","14","18","24","36"],colors:[["#000000","#424242","#636363","#9C9C94","#CEC6CE","#EFEFEF","#F7F7F7","#FFFFFF"],["#FF0000","#FF9C00","#FFFF00","#00FF00","#00FFFF","#0000FF","#9C00FF","#FF00FF"],["#F7C6CE","#FFE7CE","#FFEFC6","#D6EFD6","#CEDEE7","#CEE7F7","#D6D6E7","#E7D6DE"],["#E79C9C","#FFC69C","#FFE79C","#B5D6A5","#A5C6CE","#9CC6EF","#B5A5D6","#D6A5BD"],["#E76363","#F7AD6B","#FFD663","#94BD7B","#73A5AD","#6BADDE","#8C7BC6","#C67BA5"],["#CE0000","#E79439","#EFC631","#6BA54A","#4A7B8C","#3984C6","#634AA5","#A54A7B"],["#9C0000","#B56308","#BD9400","#397B21","#104A5A","#085294","#311873","#731842"],["#630000","#7B3900","#846300","#295218","#083139","#003163","#21104A","#4A1031"]],colorsName:[["Black","Tundora","Dove Gray","Star Dust","Pale Slate","Gallery","Alabaster","White"],["Red","Orange Peel","Yellow","Green","Cyan","Blue","Electric Violet","Magenta"],["Azalea","Karry","Egg White","Zanah","Botticelli","Tropical Blue","Mischka","Twilight"],["Tonys Pink","Peach Orange","Cream Brulee","Sprout","Casper","Perano","Cold Purple","Careys Pink"],["Mandy","Rajah","Dandelion","Olivine","Gulf Stream","Viking","Blue Marguerite","Puce"],["Guardsman Red","Fire Bush","Golden Dream","Chelsea Cucumber","Smalt Blue","Boston Blue","Butterfly Bush","Cadillac"],["Sangria","Mai Tai","Buddha Gold","Forest Green","Eden","Venice Blue","Meteorite","Claret"],["Rosewood","Cinnamon","Olive","Parsley","Tiber","Midnight Blue","Valentino","Loulou"]],lineHeights:["1.0","1.2","1.4","1.5","1.6","1.8","2.0","3.0"],tableClassName:"table table-bordered",insertTableMaxSize:{col:10,row:10},dialogsInBody:false,dialogsFade:false,maximumImageFileSize:null,callbacks:{onInit:null,onFocus:null,onBlur:null,onBlurCodeview:null,onEnter:null,onKeyup:null,onKeydown:null,onImageUpload:null,onImageUploadError:null},codemirror:{mode:"text/html",htmlMode:true,lineNumbers:true},keyMap:{pc:{ENTER:"insertParagraph","CTRL+Z":"undo","CTRL+Y":"redo",TAB:"tab","SHIFT+TAB":"untab","CTRL+B":"bold","CTRL+I":"italic","CTRL+U":"underline","CTRL+SHIFT+S":"strikethrough","CTRL+BACKSLASH":"removeFormat","CTRL+SHIFT+L":"justifyLeft","CTRL+SHIFT+E":"justifyCenter","CTRL+SHIFT+R":"justifyRight","CTRL+SHIFT+J":"justifyFull","CTRL+SHIFT+NUM7":"insertUnorderedList","CTRL+SHIFT+NUM8":"insertOrderedList","CTRL+LEFTBRACKET":"outdent","CTRL+RIGHTBRACKET":"indent","CTRL+NUM0":"formatPara","CTRL+NUM1":"formatH1","CTRL+NUM2":"formatH2","CTRL+NUM3":"formatH3","CTRL+NUM4":"formatH4","CTRL+NUM5":"formatH5","CTRL+NUM6":"formatH6","CTRL+ENTER":"insertHorizontalRule","CTRL+K":"linkDialog.show"},mac:{ENTER:"insertParagraph","CMD+Z":"undo","CMD+SHIFT+Z":"redo",TAB:"tab","SHIFT+TAB":"untab","CMD+B":"bold","CMD+I":"italic","CMD+U":"underline","CMD+SHIFT+S":"strikethrough","CMD+BACKSLASH":"removeFormat","CMD+SHIFT+L":"justifyLeft","CMD+SHIFT+E":"justifyCenter","CMD+SHIFT+R":"justifyRight","CMD+SHIFT+J":"justifyFull","CMD+SHIFT+NUM7":"insertUnorderedList","CMD+SHIFT+NUM8":"insertOrderedList","CMD+LEFTBRACKET":"outdent","CMD+RIGHTBRACKET":"indent","CMD+NUM0":"formatPara","CMD+NUM1":"formatH1","CMD+NUM2":"formatH2","CMD+NUM3":"formatH3","CMD+NUM4":"formatH4","CMD+NUM5":"formatH5","CMD+NUM6":"formatH6","CMD+ENTER":"insertHorizontalRule","CMD+K":"linkDialog.show"}},icons:{align:"note-icon-align",alignCenter:"note-icon-align-center",alignJustify:"note-icon-align-justify",alignLeft:"note-icon-align-left",alignRight:"note-icon-align-right",rowBelow:"note-icon-row-below",colBefore:"note-icon-col-before",colAfter:"note-icon-col-after",rowAbove:"note-icon-row-above",rowRemove:"note-icon-row-remove",colRemove:"note-icon-col-remove",indent:"note-icon-align-indent",outdent:"note-icon-align-outdent",arrowsAlt:"note-icon-arrows-alt",bold:"note-icon-bold",caret:"note-icon-caret",circle:"note-icon-circle",close:"note-icon-close",code:"note-icon-code",eraser:"note-icon-eraser",font:"note-icon-font",frame:"note-icon-frame",italic:"note-icon-italic",link:"note-icon-link",unlink:"note-icon-chain-broken",magic:"note-icon-magic",menuCheck:"note-icon-menu-check",minus:"note-icon-minus",orderedlist:"note-icon-orderedlist",pencil:"note-icon-pencil",picture:"note-icon-picture",question:"note-icon-question",redo:"note-icon-redo",square:"note-icon-square",strikethrough:"note-icon-strikethrough",subscript:"note-icon-subscript",superscript:"note-icon-superscript",table:"note-icon-table",textHeight:"note-icon-text-height",trash:"note-icon-trash",underline:"note-icon-underline",undo:"note-icon-undo",unorderedlist:"note-icon-unorderedlist",video:"note-icon-video"}}})}); diff --git a/public/assets/addons/summernote/lang/summernote-zh-CN.js b/public/assets/addons/summernote/lang/summernote-zh-CN.js deleted file mode 100644 index d20fb2c..0000000 --- a/public/assets/addons/summernote/lang/summernote-zh-CN.js +++ /dev/null @@ -1,155 +0,0 @@ -(function($) { - $.extend($.summernote.lang, { - 'zh-CN': { - font: { - bold: '粗体', - italic: '斜体', - underline: '下划线', - clear: '清除格式', - height: '行高', - name: '字体', - strikethrough: '删除线', - subscript: '下标', - superscript: '上标', - size: '字号' - }, - image: { - image: '图片', - insert: '插入图片', - resizeFull: '缩放至 100%', - resizeHalf: '缩放至 50%', - resizeQuarter: '缩放至 25%', - floatLeft: '靠左浮动', - floatRight: '靠右浮动', - floatNone: '取消浮动', - shapeRounded: '形状: 圆角', - shapeCircle: '形状: 圆', - shapeThumbnail: '形状: 缩略图', - shapeNone: '形状: 无', - dragImageHere: '将图片拖拽至此处', - dropImage: 'Drop image or Text', - selectFromFiles: '从本地上传', - maximumFileSize: '文件大小最大值', - maximumFileSizeError: '文件大小超出最大值。', - url: '图片地址', - remove: '移除图片', - original: 'Original' - }, - video: { - video: '视频', - videoLink: '视频链接', - insert: '插入视频', - url: '视频地址', - providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)' - }, - link: { - link: '链接', - insert: '插入链接', - unlink: '去除链接', - edit: '编辑链接', - textToDisplay: '显示文本', - url: '链接地址', - openInNewWindow: '在新窗口打开' - }, - table: { - table: '表格', - addRowAbove: 'Add row above', - addRowBelow: 'Add row below', - addColLeft: 'Add column left', - addColRight: 'Add column right', - delRow: 'Delete row', - delCol: 'Delete column', - delTable: 'Delete table' - }, - hr: { - insert: '水平线' - }, - style: { - style: '样式', - p: '普通', - blockquote: '引用', - pre: '代码', - h1: '标题 1', - h2: '标题 2', - h3: '标题 3', - h4: '标题 4', - h5: '标题 5', - h6: '标题 6' - }, - lists: { - unordered: '无序列表', - ordered: '有序列表' - }, - options: { - help: '帮助', - fullscreen: '全屏', - codeview: '源代码' - }, - paragraph: { - paragraph: '段落', - outdent: '减少缩进', - indent: '增加缩进', - left: '左对齐', - center: '居中对齐', - right: '右对齐', - justify: '两端对齐' - }, - color: { - recent: '最近使用', - more: '更多', - background: '背景', - foreground: '前景', - transparent: '透明', - setTransparent: '透明', - reset: '重置', - resetToDefault: '默认' - }, - shortcut: { - shortcuts: '快捷键', - close: '关闭', - textFormatting: '文本格式', - action: '动作', - paragraphFormatting: '段落格式', - documentStyle: '文档样式', - extraKeys: '额外按键' - }, - help: { - insertParagraph: '插入段落', - undo: '撤销', - redo: '重做', - tab: '增加缩进', - untab: '减少缩进', - bold: '粗体', - italic: '斜体', - underline: '下划线', - strikethrough: '删除线', - removeFormat: '清除格式', - justifyLeft: '左对齐', - justifyCenter: '居中对齐', - justifyRight: '右对齐', - justifyFull: '两端对齐', - insertUnorderedList: '无序列表', - insertOrderedList: '有序列表', - outdent: '减少缩进', - indent: '增加缩进', - formatPara: '设置选中内容样式为 普通', - formatH1: '设置选中内容样式为 标题1', - formatH2: '设置选中内容样式为 标题2', - formatH3: '设置选中内容样式为 标题3', - formatH4: '设置选中内容样式为 标题4', - formatH5: '设置选中内容样式为 标题5', - formatH6: '设置选中内容样式为 标题6', - insertHorizontalRule: '插入水平线', - 'linkDialog.show': '显示链接对话框' - }, - history: { - undo: '撤销', - redo: '重做' - }, - specialChar: { - specialChar: 'SPECIAL CHARACTERS', - select: 'Select Special characters' - } - } - }); -})(jQuery); diff --git a/public/assets/addons/summernote/lang/summernote-zh-CN.min.js b/public/assets/addons/summernote/lang/summernote-zh-CN.min.js deleted file mode 100644 index 53047ac..0000000 --- a/public/assets/addons/summernote/lang/summernote-zh-CN.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ - -!function(e){e.extend(e.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",dropImage:"Drop image or Text",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片",original:"Original"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开"},table:{table:"表格",addRowAbove:"Add row above",addRowBelow:"Add row below",addColLeft:"Add column left",addColRight:"Add column right",delRow:"Delete row",delCol:"Delete column",delTable:"Delete table"},hr:{insert:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"},history:{undo:"撤销",redo:"重做"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery); \ No newline at end of file diff --git a/public/assets/addons/summernote/lang/summernote-zh-TW.js b/public/assets/addons/summernote/lang/summernote-zh-TW.js deleted file mode 100644 index bb39e29..0000000 --- a/public/assets/addons/summernote/lang/summernote-zh-TW.js +++ /dev/null @@ -1,155 +0,0 @@ -(function($) { - $.extend($.summernote.lang, { - 'zh-TW': { - font: { - bold: '粗體', - italic: '斜體', - underline: '底線', - clear: '清除格式', - height: '行高', - name: '字體', - strikethrough: '刪除線', - subscript: '下標', - superscript: '上標', - size: '字號' - }, - image: { - image: '圖片', - insert: '插入圖片', - resizeFull: '縮放至100%', - resizeHalf: '縮放至 50%', - resizeQuarter: '縮放至 25%', - floatLeft: '靠左浮動', - floatRight: '靠右浮動', - floatNone: '取消浮動', - shapeRounded: '形狀: 圓角', - shapeCircle: '形狀: 圓', - shapeThumbnail: '形狀: 縮略圖', - shapeNone: '形狀: 無', - dragImageHere: '將圖片拖曳至此處', - dropImage: 'Drop image or Text', - selectFromFiles: '從本機上傳', - maximumFileSize: '文件大小最大值', - maximumFileSizeError: '文件大小超出最大值。', - url: '圖片網址', - remove: '移除圖片', - original: 'Original' - }, - video: { - video: '影片', - videoLink: '影片連結', - insert: '插入影片', - url: '影片網址', - providers: '(優酷, Instagram, DailyMotion, Youtube等)' - }, - link: { - link: '連結', - insert: '插入連結', - unlink: '取消連結', - edit: '編輯連結', - textToDisplay: '顯示文字', - url: '連結網址', - openInNewWindow: '在新視窗開啟' - }, - table: { - table: '表格', - addRowAbove: 'Add row above', - addRowBelow: 'Add row below', - addColLeft: 'Add column left', - addColRight: 'Add column right', - delRow: 'Delete row', - delCol: 'Delete column', - delTable: 'Delete table' - }, - hr: { - insert: '水平線' - }, - style: { - style: '樣式', - p: '一般', - blockquote: '引用區塊', - pre: '程式碼區塊', - h1: '標題 1', - h2: '標題 2', - h3: '標題 3', - h4: '標題 4', - h5: '標題 5', - h6: '標題 6' - }, - lists: { - unordered: '項目清單', - ordered: '編號清單' - }, - options: { - help: '幫助', - fullscreen: '全螢幕', - codeview: '原始碼' - }, - paragraph: { - paragraph: '段落', - outdent: '取消縮排', - indent: '增加縮排', - left: '靠右對齊', - center: '靠中對齊', - right: '靠右對齊', - justify: '左右對齊' - }, - color: { - recent: '字型顏色', - more: '更多', - background: '背景', - foreground: '前景', - transparent: '透明', - setTransparent: '透明', - reset: '重設', - resetToDefault: '默認' - }, - shortcut: { - shortcuts: '快捷鍵', - close: '關閉', - textFormatting: '文字格式', - action: '動作', - paragraphFormatting: '段落格式', - documentStyle: '文件格式', - extraKeys: '額外按鍵' - }, - help: { - 'insertParagraph': 'Insert Paragraph', - 'undo': 'Undoes the last command', - 'redo': 'Redoes the last command', - 'tab': 'Tab', - 'untab': 'Untab', - 'bold': 'Set a bold style', - 'italic': 'Set a italic style', - 'underline': 'Set a underline style', - 'strikethrough': 'Set a strikethrough style', - 'removeFormat': 'Clean a style', - 'justifyLeft': 'Set left align', - 'justifyCenter': 'Set center align', - 'justifyRight': 'Set right align', - 'justifyFull': 'Set full align', - 'insertUnorderedList': 'Toggle unordered list', - 'insertOrderedList': 'Toggle ordered list', - 'outdent': 'Outdent on current paragraph', - 'indent': 'Indent on current paragraph', - 'formatPara': 'Change current block\'s format as a paragraph(P tag)', - 'formatH1': 'Change current block\'s format as H1', - 'formatH2': 'Change current block\'s format as H2', - 'formatH3': 'Change current block\'s format as H3', - 'formatH4': 'Change current block\'s format as H4', - 'formatH5': 'Change current block\'s format as H5', - 'formatH6': 'Change current block\'s format as H6', - 'insertHorizontalRule': 'Insert horizontal rule', - 'linkDialog.show': 'Show Link Dialog' - }, - history: { - undo: '復原', - redo: '取消復原' - }, - specialChar: { - specialChar: 'SPECIAL CHARACTERS', - select: 'Select Special characters' - } - } - }); -})(jQuery); diff --git a/public/assets/addons/summernote/lang/summernote-zh-TW.min.js b/public/assets/addons/summernote/lang/summernote-zh-TW.min.js deleted file mode 100644 index 8f0c949..0000000 --- a/public/assets/addons/summernote/lang/summernote-zh-TW.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ - -!function(e){e.extend(e.summernote.lang,{"zh-TW":{font:{bold:"粗體",italic:"斜體",underline:"底線",clear:"清除格式",height:"行高",name:"字體",strikethrough:"刪除線",subscript:"下標",superscript:"上標",size:"字號"},image:{image:"圖片",insert:"插入圖片",resizeFull:"縮放至100%",resizeHalf:"縮放至 50%",resizeQuarter:"縮放至 25%",floatLeft:"靠左浮動",floatRight:"靠右浮動",floatNone:"取消浮動",shapeRounded:"形狀: 圓角",shapeCircle:"形狀: 圓",shapeThumbnail:"形狀: 縮略圖",shapeNone:"形狀: 無",dragImageHere:"將圖片拖曳至此處",dropImage:"Drop image or Text",selectFromFiles:"從本機上傳",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"圖片網址",remove:"移除圖片",original:"Original"},video:{video:"影片",videoLink:"影片連結",insert:"插入影片",url:"影片網址",providers:"(優酷, Instagram, DailyMotion, Youtube等)"},link:{link:"連結",insert:"插入連結",unlink:"取消連結",edit:"編輯連結",textToDisplay:"顯示文字",url:"連結網址",openInNewWindow:"在新視窗開啟"},table:{table:"表格",addRowAbove:"Add row above",addRowBelow:"Add row below",addColLeft:"Add column left",addColRight:"Add column right",delRow:"Delete row",delCol:"Delete column",delTable:"Delete table"},hr:{insert:"水平線"},style:{style:"樣式",p:"一般",blockquote:"引用區塊",pre:"程式碼區塊",h1:"標題 1",h2:"標題 2",h3:"標題 3",h4:"標題 4",h5:"標題 5",h6:"標題 6"},lists:{unordered:"項目清單",ordered:"編號清單"},options:{help:"幫助",fullscreen:"全螢幕",codeview:"原始碼"},paragraph:{paragraph:"段落",outdent:"取消縮排",indent:"增加縮排",left:"靠右對齊",center:"靠中對齊",right:"靠右對齊",justify:"左右對齊"},color:{recent:"字型顏色",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重設",resetToDefault:"默認"},shortcut:{shortcuts:"快捷鍵",close:"關閉",textFormatting:"文字格式",action:"動作",paragraphFormatting:"段落格式",documentStyle:"文件格式",extraKeys:"額外按鍵"},help:{insertParagraph:"Insert Paragraph",undo:"Undoes the last command",redo:"Redoes the last command",tab:"Tab",untab:"Untab",bold:"Set a bold style",italic:"Set a italic style",underline:"Set a underline style",strikethrough:"Set a strikethrough style",removeFormat:"Clean a style",justifyLeft:"Set left align",justifyCenter:"Set center align",justifyRight:"Set right align",justifyFull:"Set full align",insertUnorderedList:"Toggle unordered list",insertOrderedList:"Toggle ordered list",outdent:"Outdent on current paragraph",indent:"Indent on current paragraph",formatPara:"Change current block's format as a paragraph(P tag)",formatH1:"Change current block's format as H1",formatH2:"Change current block's format as H2",formatH3:"Change current block's format as H3",formatH4:"Change current block's format as H4",formatH5:"Change current block's format as H5",formatH6:"Change current block's format as H6",insertHorizontalRule:"Insert horizontal rule","linkDialog.show":"Show Link Dialog"},history:{undo:"復原",redo:"取消復原"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery); \ No newline at end of file diff --git a/public/assets/js/addons.js b/public/assets/js/addons.js index 7274d87..e66e096 100644 --- a/public/assets/js/addons.js +++ b/public/assets/js/addons.js @@ -30,133 +30,619 @@ define([], function () { }); }); +if (Config.modulename === 'index' && Config.controllername === 'user' && ['login', 'register'].indexOf(Config.actionname) > -1 && $("#register-form,#login-form").size() > 0) { + $('<style>.social-login{display:flex}.social-login a{flex:1;margin:0 2px;}.social-login a:first-child{margin-left:0;}.social-login a:last-child{margin-right:0;}</style>').appendTo("head"); + $("#register-form,#login-form").append('<div class="form-group social-login"></div>'); + if (Config.third.status.indexOf("wechat") > -1) { + $('<a class="btn btn-success" href="' + Fast.api.fixurl('/third/connect/wechat') + '"><i class="fa fa-wechat"></i> 微信登录</a>').appendTo(".social-login"); + } + if (Config.third.status.indexOf("qq") > -1) { + $('<a class="btn btn-info" href="' + Fast.api.fixurl('/third/connect/qq') + '"><i class="fa fa-qq"></i> QQ登录</a>').appendTo(".social-login"); + } + if (Config.third.status.indexOf("weibo") > -1) { + $('<a class="btn btn-danger" href="' + Fast.api.fixurl('/third/connect/weibo') + '"><i class="fa fa-weibo"></i> 微博登录</a>').appendTo(".social-login"); + } +} + +window.UEDITOR_HOME_URL = Config.__CDN__ + "/assets/addons/ueditor/"; require.config({ paths: { - 'summernote': '../addons/summernote/lang/summernote-zh-CN.min' + 'ueditor.config': '../addons/ueditor/ueditor.config', + 'ueditor': '../addons/ueditor/ueditor.all.min', + 'ueditor.zh': '../addons/ueditor/lang/zh-cn/zh-cn', + 'zeroclipboard': '../addons/ueditor/third-party/zeroclipboard/ZeroClipboard.min', }, shim: { - 'summernote': ['../addons/summernote/js/summernote.min', 'css!../addons/summernote/css/summernote.css'], + 'ueditor': { + deps: ['zeroclipboard', 'ueditor.config'], + exports: 'UE', + init: function (ZeroClipboard) { + //导出到全局变量,供ueditor使用 + window.ZeroClipboard = ZeroClipboard; + }, + }, + 'ueditor.zh': ['ueditor'] } }); -require(['form', 'upload'], function (Form, Upload) { - var _bindevent = Form.events.bindevent; - Form.events.bindevent = function (form) { - _bindevent.apply(this, [form]); - try { - //绑定summernote事件 - if ($(".summernote,.editor", form).size() > 0) { - require(['summernote'], function () { - var imageButton = function (context) { - var ui = $.summernote.ui; - var button = ui.button({ - contents: '<i class="fa fa-file-image-o"/>', - tooltip: __('Choose'), - click: function () { - parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=image/*", __('Choose'), { - callback: function (data) { - var urlArr = data.url.split(/\,/); - $.each(urlArr, function () { - var url = Fast.api.cdnurl(this); - context.invoke('editor.insertImage', url); - }); +require(['form', 'upload', 'ueditor', 'ueditor.zh'], function (Form, Upload, UE, undefined) { + UE.plugin.register('simpleupload', function () { + var me = this, + isLoaded = false, + containerBtn; + + function initUploadBtn() { + var w = containerBtn.offsetWidth || 20, + h = containerBtn.offsetHeight || 20, + btnIframe = document.createElement('iframe'), + btnStyle = 'display:block;width:' + w + 'px;height:' + h + 'px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;'; + + UE.dom.domUtils.on(btnIframe, 'load', function () { + + var timestrap = (+new Date()).toString(36), + wrapper, + btnIframeDoc, + btnIframeBody; + + btnIframeDoc = (btnIframe.contentDocument || btnIframe.contentWindow.document); + btnIframeBody = btnIframeDoc.body; + wrapper = btnIframeDoc.createElement('div'); + + wrapper.innerHTML = '<form id="edui_form_' + timestrap + '" target="edui_iframe_' + timestrap + '" method="POST" enctype="multipart/form-data" action="' + me.getOpt('serverUrl') + '" ' + + 'style="' + btnStyle + '">' + + '<input id="edui_input_' + timestrap + '" type="file" accept="image/*" name="' + me.options.imageFieldName + '" ' + + 'style="' + btnStyle + '">' + + '</form>' + + '<iframe id="edui_iframe_' + timestrap + '" name="edui_iframe_' + timestrap + '" style="display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;"></iframe>'; + + wrapper.className = 'edui-' + me.options.theme; + wrapper.id = me.ui.id + '_iframeupload'; + btnIframeBody.style.cssText = btnStyle; + btnIframeBody.style.width = w + 'px'; + btnIframeBody.style.height = h + 'px'; + btnIframeBody.appendChild(wrapper); + + if (btnIframeBody.parentNode) { + btnIframeBody.parentNode.style.width = w + 'px'; + btnIframeBody.parentNode.style.height = w + 'px'; + } + + var form = btnIframeDoc.getElementById('edui_form_' + timestrap); + var input = btnIframeDoc.getElementById('edui_input_' + timestrap); + var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap); + + UE.dom.domUtils.on(input, 'change', function () { + if (!input.value) return; + var loadingId = 'loading_' + (+new Date()).toString(36); + var params = UE.utils.serializeParam(me.queryCommandValue('serverparam')) || ''; + + var imageActionUrl = me.getActionUrl(me.getOpt('imageActionName')); + var allowFiles = me.getOpt('imageAllowFiles'); + + me.focus(); + me.execCommand('inserthtml', '<img class="loadingclass" id="' + loadingId + '" src="' + me.options.themePath + me.options.theme + '/images/spacer.gif" title="' + (me.getLang('simpleupload.loading') || '') + '" >'); + + function showErrorLoader(title) { + if (loadingId) { + var loader = me.document.getElementById(loadingId); + loader && UE.dom.domUtils.remove(loader); + me.fireEvent('showmessage', { + 'id': loadingId, + 'content': title, + 'type': 'error', + 'timeout': 4000 + }); + } + } + + // 判断文件格式是否错误 + var filename = input.value, + fileext = filename ? filename.substr(filename.lastIndexOf('.')) : ''; + if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) { + showErrorLoader(me.getLang('simpleupload.exceedTypeError')); + return; + } + for (var i = 0; i < this.files.length; i++) { + Upload.api.send(this.files[i], function (data) { + var url = Fast.api.cdnurl(data.url); + loader = me.document.getElementById(loadingId); + loader.setAttribute('src', url); + loader.setAttribute('_src', url); + loader.setAttribute('title', ''); + loader.setAttribute('alt', ''); + loader.removeAttribute('id'); + UE.dom.domUtils.removeClasses(loader, 'loadingclass'); + form.reset(); + }); + } + }); + + var stateTimer; + me.addListener('selectionchange', function () { + clearTimeout(stateTimer); + stateTimer = setTimeout(function () { + var state = me.queryCommandState('simpleupload'); + if (state == -1) { + input.disabled = 'disabled'; + } else { + input.disabled = false; + } + }, 400); + }); + isLoaded = true; + }); + + btnIframe.style.cssText = btnStyle; + containerBtn.appendChild(btnIframe); + } + + return { + bindEvents: { + 'ready': function () { + //设置loading的样式 + UE.utils.cssRule('loading', + '.loadingclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme + '/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n' + + '.loaderrorclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme + '/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' + + '}', + this.document); + }, + /* 初始化简单上传按钮 */ + 'simpleuploadbtnready': function (type, container) { + containerBtn = container; + me.afterConfigReady(initUploadBtn); + } + }, + outputRule: function (root) { + UE.utils.each(root.getNodesByTagName('img'), function (n) { + if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + }, + commands: { + 'simpleupload': { + queryCommandState: function () { + return isLoaded ? 0 : -1; + } + } + } + } + }); + UE.plugin.register('autoupload', function () { + + function sendAndInsertFile(file, editor) { + var me = editor; + //模拟数据 + var fieldName, urlPrefix, maxSize, allowFiles, actionUrl, + loadingHtml, errorHandler, successHandler, + filetype = /image\/\w+/i.test(file.type) ? 'image' : 'file', + loadingId = 'loading_' + (+new Date()).toString(36); + + fieldName = me.getOpt(filetype + 'FieldName'); + urlPrefix = me.getOpt(filetype + 'UrlPrefix'); + maxSize = me.getOpt(filetype + 'MaxSize'); + allowFiles = me.getOpt(filetype + 'AllowFiles'); + actionUrl = me.getActionUrl(me.getOpt(filetype + 'ActionName')); + errorHandler = function (title) { + var loader = me.document.getElementById(loadingId); + loader && UE.dom.domUtils.remove(loader); + me.fireEvent('showmessage', { + 'id': loadingId, + 'content': title, + 'type': 'error', + 'timeout': 4000 + }); + }; + + if (filetype == 'image') { + loadingHtml = '<img class="loadingclass" id="' + loadingId + '" src="' + + me.options.themePath + me.options.theme + + '/images/spacer.gif" title="' + (me.getLang('autoupload.loading') || '') + '" >'; + successHandler = function (data) { + var link = urlPrefix + data.url, + loader = me.document.getElementById(loadingId); + if (loader) { + loader.setAttribute('src', link); + loader.setAttribute('_src', link); + loader.setAttribute('title', data.title || ''); + loader.setAttribute('alt', data.original || ''); + loader.removeAttribute('id'); + UE.dom.domUtils.removeClasses(loader, 'loadingclass'); + } + }; + } else { + loadingHtml = '<p>' + + '<img class="loadingclass" id="' + loadingId + '" src="' + + me.options.themePath + me.options.theme + + '/images/spacer.gif" title="' + (me.getLang('autoupload.loading') || '') + '" >' + + '</p>'; + successHandler = function (data) { + var link = urlPrefix + data.url, + loader = me.document.getElementById(loadingId); + + var rng = me.selection.getRange(), + bk = rng.createBookmark(); + rng.selectNode(loader).select(); + me.execCommand('insertfile', { + 'url': link + }); + rng.moveToBookmark(bk).select(); + }; + } + + /* 插入loading的占位符 */ + me.execCommand('inserthtml', loadingHtml); + + /* 判断后端配置是否没有加载成功 */ + if (!me.getOpt(filetype + 'ActionName')) { + errorHandler(me.getLang('autoupload.errorLoadConfig')); + return; + } + /* 判断文件大小是否超出限制 */ + if (file.size > maxSize) { + errorHandler(me.getLang('autoupload.exceedSizeError')); + return; + } + /* 判断文件格式是否超出允许 */ + var fileext = file.name ? file.name.substr(file.name.lastIndexOf('.')) : ''; + if ((fileext && filetype != 'image') || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) { + errorHandler(me.getLang('autoupload.exceedTypeError')); + return; + } + try { + Upload.api.send(file, function (data) { + var url = Fast.api.cdnurl(data.url); + successHandler({ + "state": "SUCCESS", + "url": url, + "title": file.name, + "original": file.name, + "type": fileext, + "size": file['size'] + }); + }); + } catch (er) { + errorHandler(me.getLang('autoupload.loadError')); + } + } + + function getPasteImage(e) { + return e.clipboardData && e.clipboardData.items && e.clipboardData.items.length == 1 && /^image\//.test(e.clipboardData.items[0].type) ? e.clipboardData.items : null; + } + + function getDropImage(e) { + return e.dataTransfer && e.dataTransfer.files ? e.dataTransfer.files : null; + } + + return { + outputRule: function (root) { + UE.utils.each(root.getNodesByTagName('img'), function (n) { + if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + UE.utils.each(root.getNodesByTagName('p'), function (n) { + if (/\bloadpara\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + }, + bindEvents: { + //插入粘贴板的图片,拖放插入图片 + 'ready': function (e) { + var me = this; + if (window.FormData && window.FileReader) { + UE.dom.domUtils.on(me.body, 'paste drop', function (e) { + var hasImg = false, + items; + //获取粘贴板文件列表或者拖放文件列表 + items = e.type == 'paste' ? getPasteImage(e) : getDropImage(e); + if (items) { + var len = items.length, + file; + while (len--) { + file = items[len]; + if (file.getAsFile) file = file.getAsFile(); + if (file && file.size > 0) { + sendAndInsertFile(file, me); + hasImg = true; } - }); - return false; + } + hasImg && e.preventDefault(); } + }); - return button.render(); - }; - var attachmentButton = function (context) { - var ui = $.summernote.ui; - var button = ui.button({ - contents: '<i class="fa fa-file"/>', - tooltip: __('Choose'), - click: function () { - parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=*", __('Choose'), { - callback: function (data) { - var urlArr = data.url.split(/\,/); - $.each(urlArr, function () { - var url = Fast.api.cdnurl(this); - var node = $("<a href='" + url + "'>" + url + "</a>"); - context.invoke('insertNode', node[0]); - }); - } - }); - return false; + //取消拖放图片时出现的文字光标位置提示 + UE.dom.domUtils.on(me.body, 'dragover', function (e) { + if (e.dataTransfer.types[0] == 'Files') { + e.preventDefault(); } }); - return button.render(); - }; - $(".summernote,.editor", form).summernote({ - height: 250, - lang: 'zh-CN', - fontNames: [ - 'Arial', 'Arial Black', 'Serif', 'Sans', 'Courier', - 'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande', - "Open Sans", "Hiragino Sans GB", "Microsoft YaHei", - '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆', - ], - fontNamesIgnoreCheck: [ - "Open Sans", "Microsoft YaHei", - '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆' - ], - toolbar: [ - ['style', ['style', 'undo', 'redo']], - ['font', ['bold', 'underline', 'strikethrough', 'clear']], - ['fontname', ['color', 'fontname', 'fontsize']], - ['para', ['ul', 'ol', 'paragraph', 'height']], - ['table', ['table', 'hr']], - ['insert', ['link', 'picture', 'video']], - ['select', ['image', 'attachment']], - ['view', ['fullscreen', 'codeview', 'help']], - ], - buttons: { - image: imageButton, - attachment: attachmentButton, - }, - dialogsInBody: true, - followingToolbar: false, - callbacks: { - onChange: function (contents) { - $(this).val(contents); - $(this).trigger('change'); - }, - onInit: function () { - }, - onImageUpload: function (files) { - var that = this; - //依次上传图片 - for (var i = 0; i < files.length; i++) { - Upload.api.send(files[i], function (data) { - var url = Fast.api.cdnurl(data.url); - $(that).summernote("insertImage", url, 'filename'); + //设置loading的样式 + UE.utils.cssRule('loading', + '.loadingclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme + '/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\n' + + '.loaderrorclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme + '/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' + + '}', + this.document); + } + } + } + } + }); + + /** + * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片 + */ + UE.plugins['catchremoteimage'] = function () { + var me = this, + ajax = UE.ajax; + + /* 设置默认值 */ + if (me.options.catchRemoteImageEnable === false) return; + me.setOpt({ + catchRemoteImageEnable: false + }); + + me.addListener("afterpaste", function () { + me.fireEvent("catchRemoteImage"); + }); + + me.addListener("catchRemoteImage", function () { + + var catcherLocalDomain = me.getOpt('catcherLocalDomain'), + catcherActionUrl = me.getActionUrl(me.getOpt('catcherActionName')), + catcherUrlPrefix = me.getOpt('catcherUrlPrefix'), + catcherFieldName = me.getOpt('catcherFieldName'); + var remoteImages = [], + imgs = UE.dom.domUtils.getElementsByTagName(me.document, "img"), + test = function (src, urls) { + if (src.indexOf(location.host) != -1 || /(^\.)|(^\/)/.test(src)) { + return true; + } + if (urls) { + for (var j = 0, url; url = urls[j++];) { + if (src.indexOf(url) !== -1) { + return true; + } + } + } + return false; + }; + + for (var i = 0, ci; ci = imgs[i++];) { + if (ci.getAttribute("word_img")) { + continue; + } + var src = ci.getAttribute("_src") || ci.src || ""; + if (/^(https?|ftp):/i.test(src) && !test(src, catcherLocalDomain)) { + remoteImages.push(src); + } + } + + if (remoteImages.length) { + catchremoteimage(remoteImages, { + //成功抓取 + success:async function (r) { + try { + var info = r.state !== undefined ? r:eval("(" + r.responseText + ")"); + } catch (e) { + return; + } + + /* 获取源路径和新路径 */ + var i, j, ci, cj, oldSrc, newSrc, list = info.list; + + for (i = 0; ci = imgs[i++];) { + oldSrc = ci.getAttribute("_src") || ci.src || ""; + for (j = 0; cj = list[j++];) { + //抓取失败时不做替换处理 + if (oldSrc == cj.source && cj.state == "SUCCESS") { + var file = dataURLtoFile(cj.base64Data, (new Date()).valueOf() + '.jpg'); + var imgUrl=await getLoaclImg(file); + newSrc = Fast.api.cdnurl(imgUrl); + UE.dom.domUtils.setAttributes(ci, { + "src": newSrc, + "_src": newSrc }); + break; } } } - }); + me.fireEvent('catchremotesuccess') + }, + //回调失败,本次请求超时 + error: function () { + me.fireEvent("catchremoteerror"); + } }); } - } catch (e) { - - } + async function getLoaclImg(file){ + const promise =new Promise((resolve,reject) => { + Upload.api.send(file, function (res) { + resolve(res.url); + }) + }) + return promise; + } + + /** + * base64转file + * @param {base64数据} data + * @param {文件名} filename + */ + function dataURLtoFile(data, filename) { + var arr = data.split(','), + mime = arr[0].match(/:(.*?);/)[1], + bstr = atob(arr[1]), + n = bstr.length, + u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new File([u8arr], filename, { + type: mime + }); + } + /** + *获取base64 + * + * @param {*} img + * @param {*} callbacks + */ + function catchremoteimage(img, callbacks) { + var params = UE.utils.serializeParam(me.queryCommandValue('serverparam')) || '', + url = UE.utils.formatUrl(catcherActionUrl + (catcherActionUrl.indexOf('?') == -1 ? '?':'&') + params), + isJsonp = UE.utils.isCrossDomainUrl(url), + opt = { + 'method': 'POST', + 'dataType': isJsonp ? 'jsonp':'', + 'timeout': 60000, //单位:毫秒,回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值 + 'onsuccess': callbacks["success"], + 'onerror': callbacks["error"] + }; + opt[catcherFieldName] = img; + ajax.request(url, opt); + } + }); }; -}); -if (Config.modulename === 'index' && Config.controllername === 'user' && ['login', 'register'].indexOf(Config.actionname) > -1 && $("#register-form,#login-form").size() > 0) { - $('<style>.social-login{display:flex}.social-login a{flex:1;margin:0 2px;}.social-login a:first-child{margin-left:0;}.social-login a:last-child{margin-right:0;}</style>').appendTo("head"); - $("#register-form,#login-form").append('<div class="form-group social-login"></div>'); - if (Config.third.status.indexOf("wechat") > -1) { - $('<a class="btn btn-success" href="' + Fast.api.fixurl('/third/connect/wechat') + '"><i class="fa fa-wechat"></i> 微信登录</a>').appendTo(".social-login"); - } - if (Config.third.status.indexOf("qq") > -1) { - $('<a class="btn btn-info" href="' + Fast.api.fixurl('/third/connect/qq') + '"><i class="fa fa-qq"></i> QQ登录</a>').appendTo(".social-login"); - } - if (Config.third.status.indexOf("weibo") > -1) { - $('<a class="btn btn-danger" href="' + Fast.api.fixurl('/third/connect/weibo') + '"><i class="fa fa-weibo"></i> 微博登录</a>').appendTo(".social-login"); - } -} + $(".editor").each(function () { + var id = $(this).attr("id"); + $(this).removeClass('form-control'); + UE.list[id] = UE.getEditor(id, { + serverUrl: Fast.api.fixurl('/addons/ueditor/api/'), + allowDivTransToP: false, //阻止div自动转p标签 + initialFrameWidth: '100%', + zIndex: 90, + xssFilterRules: false, + outputXssFilter: false, + inputXssFilter: false, + catchRemoteImageEnable: true + }); + //监听图片上传事件 + UE.list[id].addListener("uploadBtn.click", function (e, up, editor) { + var filesObj = up.getFiles(); + for (var i = 0; i < filesObj.length; i++) { + (function (j) { + var file = filesObj[j]; + var id = filesObj[j].id; + var name = filesObj[j].name; + Upload.api.send(file.source.source, function (data) { + var pic = { + url: Fast.api.cdnurl(data.url), + state: "SUCCESS", + title: name + }; + editor.fireEvent("upload.success", id, pic, file); + }); + })(i); + } + }); + //打开图片管理 + UE.list[id].addListener("upload.online", function (e, editor, dialog) { + dialog.close(false); + Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=image/*", "选择", { + callback: function (data) { + var urlArr = data.url.split(/\,/); + urlArr.forEach(function (item, index) { + var url = Fast.api.cdnurl(item); + editor.execCommand('insertimage', { + src: url + }); + }); + } + }); + }); + // 涂画 + UE.list[id].addListener("upload.scrawl", function (e, editor, base64, dialog) { + function dataURLtoFile(dataurl, filename) { + var arr = dataurl.split(','), + mime = arr[0].match(/:(.*?);/)[1], + bstr = atob(arr[1]), + n = bstr.length, + u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new File([u8arr], filename, { + type: mime + }); + } + var file = dataURLtoFile('data:image/png;base64,' + base64, editor.getOpt('scrawlFieldName') + '.png'); + Upload.api.send(file, function (data) { + editor.execCommand('insertimage', { + src: Fast.api.cdnurl(data.url) + }); + dialog.close(false); + }) + }) + //视频上传 + UE.list[id].addListener("upload.video", function (e, up, editor) { + var filesObj = up.getFiles(); + for (var i = 0; i < filesObj.length; i++) { + (function (j) { + var file = filesObj[j]; + var id = filesObj[j].id; + var name = filesObj[j].name; + Upload.api.send(file.source.source, function (data) { + var pic = { + url: Fast.api.cdnurl(data.url), + state: "SUCCESS", + title: name + }; + editor.fireEvent("video.file.success", id, pic, file); + }); + })(i); + } + }); + // 附件上传 + UE.list[id].addListener("upload.attachment", function (e, up, editor) { + var filesObj = up.getFiles(); + for (var i = 0; i < filesObj.length; i++) { + (function (j) { + var file = filesObj[j]; + var id = filesObj[j].id; + var name = filesObj[j].name; + Upload.api.send(file.source.source, function (data) { + var pic = { + url: Fast.api.cdnurl(data.url), + state: "SUCCESS", + title: name + }; + editor.fireEvent("attachment.file.success", id, pic, file); + }); + })(i); + } + }); + //打开附件管理 + UE.list[id].addListener("file.online", function (e, editor, dialog) { + dialog.close(false); + Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=application/*", "选择", { + callback: function (data) { + var urlArr = data.url.split(/\,/); + urlArr.forEach(function (item, index) { + var url = Fast.api.cdnurl(item); + editor.execCommand('insertfile', { + url: url + }); + }); + } + }); + }); + // 修复cms提取关键词和违禁词检测 + UE.list[id].addListener("contentChange", function () { + $('#' + id).val(this.getContent()); + }) + }); +}); }); \ No newline at end of file diff --git a/public/assets/js/backend/job.js b/public/assets/js/backend/job.js index fe8b411..e89a3ae 100644 --- a/public/assets/js/backend/job.js +++ b/public/assets/js/backend/job.js @@ -51,6 +51,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin }, edit: function () { Controller.api.bindevent(); + setTimeout(function () { + $('input[name="row[lookdata]"]').trigger("change"); + }, 100); }, api: { bindevent: function () { @@ -60,6 +63,18 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin var A = parseFloat($("#c-factory_price").val()) + parseFloat($("#c-subsidy_price").val()); $("#c-factory_price_total").val(A); }); + + $(document).on("change", 'input[name="row[lookdata]"]', function () { + var status = $('input[name="row[lookdata]"]:checked').val(); + if(status == 0){ + $('.job').addClass('hide'); + }else{ + $('.job').removeClass('hide'); + } + }); + // Form.api.bindevent($("form[role=form]")); + + } } }; diff --git a/public/assets/js/backend/user/realname.js b/public/assets/js/backend/user/realname.js index d7a6dfb..2059c31 100644 --- a/public/assets/js/backend/user/realname.js +++ b/public/assets/js/backend/user/realname.js @@ -30,7 +30,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin {field: 'mobile', title: __('Mobile'), operate: 'LIKE'}, {field: 'idcard', title: __('Idcard'), operate: 'LIKE'}, {field: 'idcard_front', title: __('Idcard_front'), events: Table.api.events.image, formatter: Table.api.formatter.image, operate: false}, - {field: 'idcard_back', title: __('Idcard_back'), events: Table.api.events.image, formatter: Table.api.formatter.image, operate: false}, + // {field: 'idcard_back', title: __('Idcard_back'), events: Table.api.events.image, formatter: Table.api.formatter.image, operate: false}, {field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"1":__('Status 1'),"2":__('Status 2')}, formatter: Table.api.formatter.status}, {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime}, {field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'}, diff --git a/public/assets/js/backend/user/user.js b/public/assets/js/backend/user/user.js index 7b1e0dc..5f85e21 100644 --- a/public/assets/js/backend/user/user.js +++ b/public/assets/js/backend/user/user.js @@ -54,6 +54,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin {field: 'is_complete', title: __('Is_complete'), formatter: Table.api.formatter.status, searchList: {0: __('否'), 1: __('是')}}, // {field: 'work_subsidy', title: __('Work_subsidy'), operate: false}, {field: 'recruit_subsidy', title: __('Recruit_subsidy'), operate: false}, + {field: 'recruit_subsidy2', title: __('Recruit_subsidy2'), operate: false}, {field: 'work_subsidy_month', title: __('Work_subsidy_month'), operate: false}, {field: 'recruit_subsidy_month', title: __('Recruit_subsidy_month'), operate: false}, {field: 'lower_num', title: __('Lower_num'), operate: false},