/** * http rest api * v1.0 */ /** * @apiDefine User 用户 * * 用户相关接口 */ /** * @apiDefine Support 工单 * * 意见反馈相关接口 */ /** * @apiDefine SubDomainClientParam * @apiParam {String} subDomain 企业号,测试可填写 'vip',上线请填写真实企业号 * @apiParam {String} client 固定写死为 'web' */ /** * @apiDefine UserResultSuccess * @apiSuccess {String} uid 用户唯一uid. * @apiSuccess {String} username 用户名. * @apiSuccess {String} nickname 昵称. */ /** * @apiDefine ResponseResultSuccess * @apiSuccess {String} message 返回提示 * @apiSuccess {Number} status_code 状态码 * @apiSuccess {String} data 返回内容 */ var httpapi = { /** * @api {get} /visitor/api/username 生成默认访客账号 * @apiName requestUsername * @apiGroup User * @apiVersion 1.5.6 * @apiPermission none * * @apiUse SubDomainClientParam * * @apiDescription 1. 首先判断是否已经注册过; * 2. 如果已经注册过,则直接调用登录接口; * 3. 如果没有注册过,则从服务器请求用户名; * 4. FIXME: 暂未考虑浏览器不支持localStorage的情况 * * @apiUse UserResultSuccess */ requestUsername: function () { // data.username = localStorage.username; data.password = localStorage.password; if (data.username) { if (data.password == null) { data.password = data.username; } httpapi.login(); } else { // $.ajax({ url: data.HTTP_HOST + "/visitor/api/username", contentType: "application/json; charset=utf-8", type: "get", data: { subDomain: data.subDomain, client: data.client }, success:function(response){ // 登录 data.uid = response.data.uid; data.username = response.data.username; data.password = data.username; data.nickname = response.data.nickname; // 本地存储 localStorage.uid = data.uid; localStorage.username = data.username; localStorage.password = data.password; // 登录 httpapi.login(); }, error: function(error) { //Do Something to handle error console.log(error); } }); } }, /** * @api {post} /oauth/token 登录 * @apiName login * @apiGroup User * @apiVersion 1.5.6 * @apiPermission none * * @apiHeader {String} Authorization 值固定写死为: 'Basic Y2xpZW50OnNlY3JldA==' * * @apiParam {String} username 用户名 * @apiParam {String} password 密码 * * @apiDescription 登录 * * @apiSuccess {String} access_token 访问令牌 * @apiSuccess {Number} expires_in 过期时间 * @apiSuccess {String} jti * @apiSuccess {String} refresh_token 刷新令牌 * @apiSuccess {String} scope 固定值:'all' * @apiSuccess {String} token_type 固定值:'bearer' */ login: function () { // console.log('do login: ', data.username, data.password); $.ajax({ url: data.HTTP_HOST + "/oauth/token", type: "post", data: { "username": data.username, "password": data.password, "grant_type": "password", "scope": "all" }, beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'Basic Y2xpZW50OnNlY3JldA=='); }, success:function(response){ // console.log("login success: ", response); // 本地存储, data.passport.token = response; // 本地存储 localStorage.username = data.username; localStorage.password = data.password; localStorage.subDomain = data.subDomain; // localStorage 存储 localStorage.setItem(data.token, JSON.stringify(response)); // FIXME: 判断是首页 if (data.page === "index") { // 加载帮助类别 httpapi.getSupportCategories(); // 加载文章 httpapi.getArticles(); } else if (data.page === "category") { // 加载类别详情 httpapi.getCategoryDetail(data.cid); } else if (data.page === "article") { // 加载文章详情 httpapi.getArticleDetail(data.aid); } else if (data.page === "search") { // 加载搜索结果 httpapi.searchArticle(data.searchContent); } NProgress.done(); }, error: function(error) { //Do Something to handle error console.log(error); } }); }, /** * 加载系统配置 */ getSettings: function () { var hostname = window.location.hostname data.kbSubdomain = hostname.split(".")[0] $.ajax({ url: data.HTTP_HOST + "/visitor/api/setting/get", type: "get", data: { sub: data.kbSubdomain, client: data.client }, success: function (response) { console.log("get settings:", response.data); if (response.status_code === 200) { // data.adminUid = response.data.user.uid $('#supporHometTitle').html(response.data.kbTitle) } else { // alert(response.message); } }, error: function (error) { console.log("get settings error:", error); } }); }, /** * @api {get} /visitor/api/category/support 加载类别 * @apiName getSupportCategories * @apiGroup Support * @apiVersion 1.0 * @apiPermission afterLogin * * @apiParam {String} access_token 访问令牌 * @apiParam {String} uid 后台管理员唯一uid * @apiParam {String} client 固定写死为 'web' * * @apiDescription 加载类别 * * @apiUse ResponseResultSuccess */ getSupportCategories: function () { $.ajax({ url: data.HTTP_HOST + "/visitor/api/category/support?access_token=" + data.passport.token.access_token, type: "get", data: { uid: data.adminUid, client: data.client }, success:function(response){ console.log("get Support categories success:", response.data); if (response.status_code === 200) { // for (var i = 0; i < response.data.length; i++) { var category = response.data[i]; if (data.page === "index") { // 其中href参数&ph=ph为占位符,无实际用途 $("#supportCategory").append("
" + "" + "

" + category.name + "

" + "
" + "
"); } else if (data.page === "category") { // 分类页面 if (category.cid == data.currentCategory.cid) { // 当前分类 $("#supportCategory").append("
  • " + category.name + "
  • ") } else { // 其他分类 $("#supportCategory").append("
  • " + category.name + "
  • ") } } } } else { alert(response.message); } }, error: function(error) { console.log("get Support categories error:", error); } }); }, /** * @api {get} /visitor/api/articles 加载文章 * @apiName getArticles * @apiGroup Support * @apiVersion 1.0 * @apiPermission afterLogin * * @apiParam {String} access_token 访问令牌 * @apiParam {String} uid 后台管理员唯一uid * @apiParam {String} client 固定写死为 'web' * * @apiDescription 加载类别 * * @apiUse ResponseResultSuccess */ getArticles: function () { $.ajax({ url: data.HTTP_HOST + "/visitor/api/articles?access_token=" + data.passport.token.access_token, type: "get", data: { uid: data.adminUid, type: 'support', page: 0, size: 20, client: data.client }, success:function(response){ console.log("get articles success:", response.data); if (response.status_code === 200) { // if (data.page === "index") { // 首页 var hotCount = 0; var latestCount = 0; for (var i = 0; i < response.data.content.length; i++) { var article = response.data.content[i]; if (article.recommend) { // 限制最多显示5条 if (hotCount >= 5) { continue; } else { hotCount++; } // 其中href参数&ph=ph为占位符,无实际用途 $("#supportHotArticle").append("
  • " + "" + article.title + "" + "
  • "); } else { // 限制最多显示5条 if (latestCount >= 5) { continue; } else { latestCount++; } // 其中href参数&ph=ph为占位符,无实际用途 $("#supportLatestArtcle").append("
  • " + "" + article.title + "" + "
  • "); } } } else if (data.page === "category") { // 分类页面 } } else { alert(response.message); } }, error: function(error) { console.log("get articles error:", error); } }); }, /** * @api {get} /api/category/detail 加载类别详情 * @apiName getCategoryDetail * @apiGroup Support * @apiVersion 1.0 * @apiPermission afterLogin * * @apiParam {String} access_token 访问令牌 * @apiParam {String} cid 类别cid * @apiParam {String} client 固定写死为 'web' * * @apiDescription 加载类别详情 * * @apiUse ResponseResultSuccess */ getCategoryDetail: function (cid) { $.ajax({ url: data.HTTP_HOST + "/api/v2/category/detail?access_token=" + data.passport.token.access_token, type: "get", data: { cid: cid, client: data.client }, success:function(response){ console.log("get category detail success:", response.data); if (response.status_code === 200) { // data.currentCategory = response.data.category; $("#supportCategoryName").text(data.currentCategory.name); $("#supportCategoryName2").text(data.currentCategory.name); // for (var i = 0; i < response.data.articles.length; i++) { var article = response.data.articles[i]; $("#supportCategoryArticle").append("
  • " + "

    " + article.title + "

    " + "
  • "); } // 加载帮助类别 httpapi.getSupportCategories(); } else { alert(response.message); } }, error: function(error) { console.log("get category detail error:", error); } }); }, /** * @api {get} /api/article/detail 加载类别详情 * @apiName getArticleDetail * @apiGroup Support * @apiVersion 1.0 * @apiPermission afterLogin * * @apiParam {String} access_token 访问令牌 * @apiParam {String} aid 文章aid * @apiParam {String} client 固定写死为 'web' * * @apiDescription 加载类别详情 * * @apiUse ResponseResultSuccess */ getArticleDetail: function (aid) { $.ajax({ url: data.HTTP_HOST + "/api/article/detail?access_token=" + data.passport.token.access_token, type: "get", data: { aid: aid, client: data.client }, success:function(response){ console.log("get article detail success:", response.data); if (response.status_code === 200) { // data.currentArticle = response.data.article; data.currentCategory = data.currentArticle.categories[0]; // 面包屑导航breadcrumb $("#supportArticleBreadcrumb").append("
  • " + data.currentCategory.name + "
  • "); $("#supportArticleBreadcrumb").append("
  • " + data.currentArticle.title + "
  • "); // 文章作者 $("#supportArticleTitle").html(data.currentArticle.title); $("#supportArticleUserAvatar").attr("src",data.currentArticle.user.avatar); $("#supportArticleUserNickname").html(data.currentArticle.user.nickname); $("#supportArticleUpdatedAt").html(data.currentArticle.createdAt); // $("#supportArticleReadCount").html("阅读次数:" + data.currentArticle.readCount); // 文章内容 $("#supportArticleSummary").html(data.currentArticle.summary != null ? data.currentArticle.summary : ""); $("#supportArticleContent").html(data.currentArticle.content); // 评价 data.articleRate = response.data.rate; $("#supportArticleRateHelpfull").html("是的(" + data.currentArticle.rateHelpful + ")"); $("#supportArticleRateHelpless").html("没有(" + data.currentArticle.rateUseless + ")"); // $("#supportArticleRateThanks").html(); // 最近阅读 if (response.data.recent.length > 0) { // for (var i = 0; i < response.data.recent.length; i++) { var article = response.data.recent[i].article; $("#supportArticleRecent").append("
  • " + article.title + "
  • "); } } else { $("#supportArticleRecent").append("暂无"); } // 相关文章 if (response.data.related.length > 0) { // for (var i = 0; i < response.data.related.length; i++) { var article = response.data.related[i]; $("#supportArticleRelated").append("
  • " + article.title + "
  • "); } } else { $("#supportArticleRelated").append("暂无"); } } else { alert(response.message); } }, error: function(error) { console.log("get article detail error:", error); } }); }, /** * @api {get} /api/article/search 搜索文章 * @apiName searchArticle * @apiGroup Support * @apiVersion 1.0 * @apiPermission afterLogin * * @apiParam {String} access_token 访问令牌 * @apiParam {String} content 搜索内容 * @apiParam {String} client 固定写死为 'web' * * @apiDescription 搜索文章 * * @apiUse ResponseResultSuccess */ searchArticle: function (content) { $.ajax({ url: data.HTTP_HOST + "/api/article/search2?access_token=" + data.passport.token.access_token, type: "get", data: { uid: data.adminUid, content: content, page: 0, size: 20, client: data.client }, success:function(response){ console.log("search article success:", response.data); if (response.status_code === 200) { // if (response.data.content.length == 0) { // 搜索结果为空 $("#supportSearchArticle").append("未找到结果"); } else { // 搜索结果不为空 for (var i = 0; i < response.data.content.length; i++) { var article = response.data.content[i]; $("#supportSearchArticle").append("
  • " + article.title + "
  • "); } } } else { alert(response.message); } }, error: function(error) { console.log("search article detail error:", error); } }); }, /** * @api {post} /api/article/rate 评价文章是否有用 * @apiName leaveMessage * @apiGroup Support * @apiVersion 1.0 * @apiPermission afterLogin * * @apiParam {String} access_token 访问令牌 * @apiParam {String} aid 文章aid * @apiParam {String} rate 是否有帮助 boolean, 有: true, 无: false * @apiParam {String} client 固定写死为 'web' * * @apiDescription 评价文章是否有用 * * @apiUse ResponseResultSuccess */ rateArticle: function (aid, rate) { $.ajax({ url: data.HTTP_HOST + "/api/article/rate?access_token=" + data.passport.token.access_token, contentType: "application/json; charset=utf-8", dataType: "json", type: "post", data: JSON.stringify({ aid: aid, rate: rate, client: data.client }), success:function(response){ console.log("rate article success:", response.data); if (response.status_code === 200) { } else { alert(response.message); } }, error: function(error) { console.log(error); alert("评价失败"); } }); }, };