diff --git a/sop-admin/sop-admin-front/assets/js/ApiUtil.js b/sop-admin/sop-admin-front/assets/js/ApiUtil.js new file mode 100644 index 00000000..3917785e --- /dev/null +++ b/sop-admin/sop-admin-front/assets/js/ApiUtil.js @@ -0,0 +1,31 @@ +/** + * 请求工具 + */ +var ApiUtil = (function () { + // 接口URL,更改此处即可 + var url = 'http://localhost:8082/api'; + var URI_CHAR = '/'; + + function formatUri(uri) { + if (uri.substring(0, 1) !== URI_CHAR) { + uri = URI_CHAR + uri; + } + if (uri.substring(uri.length - 1) !== URI_CHAR) { + uri = uri + URI_CHAR; + } + return uri; + } + + return { + post: function (uri, params, callback) { + uri = formatUri(uri); + sdk.post({ + url: url + uri + , data: params // 请求参数 + , callback: function (resp) { // 成功回调 + callback(resp); + } + }); + } + } +})(); diff --git a/sop-admin/sop-admin-front/assets/lib/easyopen/index.html b/sop-admin/sop-admin-front/assets/lib/easyopen/index.html new file mode 100644 index 00000000..e910b9f5 --- /dev/null +++ b/sop-admin/sop-admin-front/assets/lib/easyopen/index.html @@ -0,0 +1,136 @@ + + + + +sdk + + + + + +

打开F12查看效果

+ +
+ GET/POST + + +
+
+
+ 上传文件demo +
+ 头像图片:

+ 身份证图片: +
+
+ +
+ + + +
+//需要发布到服务器上运行,并且server端需要处理跨域
+//在IndexController.java上加@CrossOrigin(origins={"*"})
+
+sdk.config({
+    url : 'http://localhost:8080/api'
+    ,app_key : 'test'
+    ,secret : '123456'
+});
+
+sdk.get({
+    name   : 'goods.get' // 接口名
+    ,data  : {'goods_name':'iphone'} // 请求参数
+    ,callback:function(resp) { // 成功回调
+        console.log(resp)
+    }
+}); // get方式不支持上传
+
+sdk.post({
+    name   : 'goods.get' // 接口名
+    ,data  : {'goods_name':'iphone'} // 请求参数
+    ,callback:function(resp) { // 成功回调
+        console.log(resp)
+    }
+});
+
+
+/* ****************上传文件**************** */
+<form id="frm">
+    上传文件1:<input type="file" name="headImg"/>
+    上传文件2:<input type="file" name="idcardImg"/>
+</form>
+
+function uploadTest() {
+    sdk.get({
+        name   : 'file.upload' // 接口名
+        ,data  : {'goods_name':'iphone'} // 请求参数
+        ,form  : document.getElementById('frm')
+        ,callback:function(resp) { // 成功回调
+            if(resp.code == '0') {
+                alert('上传成功,' + resp.msg);
+            } else {
+                alert('上传失败,' + resp.msg)
+            }
+        }
+    });
+}
+
+
+ + + + \ No newline at end of file diff --git a/sop-admin/sop-admin-front/assets/lib/easyopen/sdk.js b/sop-admin/sop-admin-front/assets/lib/easyopen/sdk.js new file mode 100644 index 00000000..f3760be0 --- /dev/null +++ b/sop-admin/sop-admin-front/assets/lib/easyopen/sdk.js @@ -0,0 +1,293 @@ +// MD5 +var hexcase=0;var b64pad="";var chrsz=8;function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz))}function b64_md5(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz))}function str_md5(s){return binl2str(core_md5(str2binl(s),s.length*chrsz))}function hex_hmac_md5(key,data){return binl2hex(core_hmac_md5(key,data))}function b64_hmac_md5(key,data){return binl2b64(core_hmac_md5(key,data))}function str_hmac_md5(key,data){return binl2str(core_hmac_md5(key,data))}function md5_vm_test(){return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72"}function core_md5(x,len){x[len>>5]|=128<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i16){bkey=core_md5(bkey,key.length*chrsz)}var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128)}function safe_add(x,y){var lsw=(x&65535)+(y&65535);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&65535)}function bit_rol(num,cnt){return(num<>>(32-cnt))}function str2binl(str){var bin=Array();var mask=(1<>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32)}return bin}function binl2str(bin){var str="";var mask=(1<>5]>>>(i%32))&mask)}return str}function binl2hex(binarray){var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i>2]>>((i%4)*8+4))&15)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&15)}return str}function binl2b64(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i>2]>>8*(i%4))&255)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&255)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&255); +for(var j=0;j<4;j++){if(i*8+j*6>binarray.length*32){str+=b64pad}else{str+=tab.charAt((triplet>>6*(3-j))&63)}}}return str}; +/** +//需要发布到服务器上运行,并且server端需要处理跨域 +//在IndexController.java上加@CrossOrigin(origins={"*"}) + +sdk.config({ + url : 'http://localhost:8080/api' + ,app_key : 'test' + ,secret : '123456' + ,jwt : 'xxx' +}); + +sdk.post({ + name : 'goods.get' // 接口名 +// ,version:'1.0' +// ,access_token:'' + ,data : {'goods_name':'iphone'} // 请求参数 + ,callback:function(resp) { // 成功回调 + console.log(resp) + } +}); + +sdk.post({ + name : 'goods.get' // 接口名 + ,data : {'goods_name':'iphone'} // 请求参数 + ,callback:function(resp) { // 成功回调 + console.log(resp) + } +}); + */ +;(function(){ + + var config = { + url : 'http://127.0.0.1:8080/api' + ,app_key : 'test' + ,secret : '123456' + ,default_version : '' + + ,api_name : "name" + ,version_name : "version" + ,app_key_name : "app_key" + ,data_name : "data" + ,timestamp_name : "timestamp" + ,sign_name : "sign" + ,format_name : "format" + ,access_token_name : "access_token" + ,jwt : '' + } + + var DEFAULT_FORMAT = 'json'; + var UPLOAD_FORM_DATA_NAME = 'body_data'; + var CONTENT_TYPE_JSON = 'application/json'; + + var CONTENT_TYPE_KEY = 'Content-Type'; + var POST_TYPE = 'POST'; + var GET_TYPE = 'GET'; + + function copy(source, target) { + if (target && source && typeof source == 'object') { + for (var p in source) { + target[p] = source[p]; + } + } + return target; + } + + function add0(m){return m<10?'0'+m:m } + + function formatDate(time) + { + var y = time.getFullYear(); + var m = time.getMonth()+1; + var d = time.getDate(); + var h = time.getHours(); + var mm = time.getMinutes(); + var s = time.getSeconds(); + return y+'-'+add0(m)+'-'+add0(d)+' '+add0(h)+':'+add0(mm)+':'+add0(s); + } + + /** 构建签名 */ + function buildSign(postData,secret) { + if (typeof postData === 'string') { + throw new Error('postData类型必须json对象'); + } + var paramNames = []; + for(var key in postData) { + paramNames.push(key); + } + + paramNames.sort(); + + var paramNameValue = []; + + for(var i=0,len=paramNames.length;i= 200 && status < 300) || status == 304){ + jsonData = JSON.parse(xhr.responseText); + callback(jsonData, paramStr); + } else { + jsonData = JSON.parse('{"message":"后台请求错误(status:' + status + ')"}'); + console.log(xhr.responseText) + error(jsonData, paramStr); + } + } + }; + if (method == GET_TYPE) { + var queryString = []; + for (var key in params) { + var p = key + '=' + encodeURIComponent(params[key]); + queryString.push(p); + } + url = url + '?' + queryString.join('&'); + } + + xhr.open(method, url, true); + + // 添加header + if(headers) { + for (var key in headers) { + xhr.setRequestHeader(key,headers[key]); + } + } + var postData = null; + if(method == POST_TYPE) { + if(form) { + var formData = new FormData(form); + // 添加json + formData.append(UPLOAD_FORM_DATA_NAME, paramStr); + postData = formData; + } else { + xhr.setRequestHeader(CONTENT_TYPE_KEY, CONTENT_TYPE_JSON); + postData = paramStr; + } + } + // 发送请求 + xhr.send(postData); + } + /** + * 创建XHR对象 + * @private + */ + ,createXhrObject:function() { + var methods = [ + function(){ return new XMLHttpRequest();} + ,function(){ return new ActiveXObject('Msxml2.XMLHTTP');} + ,function(){ return new ActiveXObject('Microsoft.XMLHTTP');} + ]; + + var xhr = null; + for(var i=0,len=methods.length; ieasyopen-spring-boot-starter 1.16.0 + + + org.apache.curator + curator-framework + 4.2.0 + org.springframework.boot diff --git a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/ConfigListApi.java b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/ConfigListApi.java new file mode 100644 index 00000000..d3e33398 --- /dev/null +++ b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/ConfigListApi.java @@ -0,0 +1,14 @@ +package com.gitee.sop.adminserver.api; + +import com.gitee.easyopen.annotation.ApiService; +import com.gitee.easyopen.doc.annotation.ApiDoc; + +/** + * @author tanghc + */ +@ApiService +@ApiDoc("配置列表") +public class ConfigListApi { + +// public +} diff --git a/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/RouteListApi.java b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/RouteListApi.java new file mode 100644 index 00000000..59930d69 --- /dev/null +++ b/sop-admin/sop-admin-server/src/main/java/com/gitee/sop/adminserver/api/RouteListApi.java @@ -0,0 +1,13 @@ +package com.gitee.sop.adminserver.api; + +import com.gitee.easyopen.annotation.ApiService; +import com.gitee.easyopen.doc.annotation.ApiDoc; + +/** + * @author tanghc + */ +@ApiService +@ApiDoc("路由列表") +public class RouteListApi { + +} diff --git a/sop-admin/sop-admin-server/src/main/resources/application-dev.properties b/sop-admin/sop-admin-server/src/main/resources/application-dev.properties new file mode 100644 index 00000000..3e962752 --- /dev/null +++ b/sop-admin/sop-admin-server/src/main/resources/application-dev.properties @@ -0,0 +1,38 @@ +server.port=8082 + +#################easyopen基础配置################# +# 显示文档 +easyopen.show-doc=true +# 本地秘钥 +easyopen.app-secret.test=123456 + +# 关闭跨域,默认开启 +#easyopen.cors=false + +# 开启webflux +easyopen.mono=false + +## 拦截器 +#easyopen.interceptors[0]=com.gitee.easyopen.support.LimitInterceptor +#easyopen.interceptors[1]=com.gitee.easyopen.support.PermissionInterceptor + +# 配置中心,config-server-port对应easyopen-config中的netty.server.port +#easyopen.app-name=app-normal +#easyopen.config-server-ip=127.0.0.1 +#easyopen.config-server-port=8071 +#easyopen.doc-url=http://127.0.0.1:8081/api/doc + + +#################redis基础配置################# +spring.redis.database=1 +spring.redis.host=10.1.11.48 +spring.redis.password=0987654321rfvujmtgbyhn +spring.redis.port=6379 +# 连接超时时间 单位 ms(毫秒) +spring.redis.timeout=3000 + + +logging.file=D:/logs/server/server +logging.level.com.gitee=debug + + diff --git a/sop-admin/sop-admin-server/src/main/resources/application.properties b/sop-admin/sop-admin-server/src/main/resources/application.properties index 3e962752..257b3064 100644 --- a/sop-admin/sop-admin-server/src/main/resources/application.properties +++ b/sop-admin/sop-admin-server/src/main/resources/application.properties @@ -1,38 +1 @@ -server.port=8082 - -#################easyopen基础配置################# -# 显示文档 -easyopen.show-doc=true -# 本地秘钥 -easyopen.app-secret.test=123456 - -# 关闭跨域,默认开启 -#easyopen.cors=false - -# 开启webflux -easyopen.mono=false - -## 拦截器 -#easyopen.interceptors[0]=com.gitee.easyopen.support.LimitInterceptor -#easyopen.interceptors[1]=com.gitee.easyopen.support.PermissionInterceptor - -# 配置中心,config-server-port对应easyopen-config中的netty.server.port -#easyopen.app-name=app-normal -#easyopen.config-server-ip=127.0.0.1 -#easyopen.config-server-port=8071 -#easyopen.doc-url=http://127.0.0.1:8081/api/doc - - -#################redis基础配置################# -spring.redis.database=1 -spring.redis.host=10.1.11.48 -spring.redis.password=0987654321rfvujmtgbyhn -spring.redis.port=6379 -# 连接超时时间 单位 ms(毫秒) -spring.redis.timeout=3000 - - -logging.file=D:/logs/server/server -logging.level.com.gitee=debug - - +spring.profiles.active=dev \ No newline at end of file