commonuni.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import CryptoJS from 'crypto-js'
  2. import http from './request';
  3. const UrlPath = {
  4. // getBaseUrl() {
  5. // return "http://zyhzty.top/"
  6. // },
  7. // getBaseUrl() {
  8. // return "http://10.110.65.77:5005/"
  9. // }
  10. // getBaseUrl() {
  11. // // return "http://192.168.31.7:48080/"
  12. // return "http://192.168.31.36:98/zyzk/api/"
  13. // }
  14. getBaseUrl() {
  15. return "/zyzk/api/"
  16. }
  17. }
  18. //加密处理
  19. const Encrypt = {
  20. AESINFO: null,
  21. GetAESINFO() {//获取编码信息
  22. if (this.AESINFO == null) {
  23. this.AESINFO = JSON.parse(this.Base64Decode("eyJrZXkiOiJjaWljY2lpY2NpaWNjaWljIiwiaXYiOiJjaWljMjAyMmNpaWMyMDIyIn0="));
  24. }
  25. return this.AESINFO;
  26. },//如果空返回
  27. IsNull(WhenInfo: any, ThenInfo: any) {
  28. if (WhenInfo === null || WhenInfo === undefined) {
  29. return (ThenInfo === null || ThenInfo === undefined) ? "" : ThenInfo;
  30. }
  31. return WhenInfo;
  32. },//如果空返回
  33. IsNullOrEmpty(Info: any) {
  34. return this.IsNull(Info, "") === "";
  35. }, //Base64编码
  36. Base64Encode(str: string) {
  37. return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(str));
  38. },//Base64解码
  39. Base64Decode(str: string) {
  40. return CryptoJS.enc.Base64.parse(str).toString(CryptoJS.enc.Utf8);
  41. },//AES编码
  42. AESEncode(data: string, key: string, iv: string) {
  43. if (typeof data === "object") {
  44. // 如果传入的data是json对象,先转义为json字符串
  45. try {
  46. data = JSON.stringify(data)
  47. } catch (error) {
  48. console.log("error:", error)
  49. }
  50. }
  51. if (this.IsNullOrEmpty(key)) {
  52. key = this.GetAESINFO().key;
  53. }
  54. if (this.IsNullOrEmpty(iv)) {
  55. iv = this.GetAESINFO().iv;
  56. }
  57. const dataHex = CryptoJS.enc.Utf8.parse(data) // 需要加密的数据
  58. const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
  59. const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
  60. const encrypted = CryptoJS.AES.encrypt(dataHex, keyHex, {
  61. iv: ivHex,
  62. mode: CryptoJS.mode.CBC, // 加密模式
  63. padding: CryptoJS.pad.Pkcs7
  64. })
  65. return encrypted.ciphertext.toString() // 返回加密后的值
  66. },
  67. AESDecode(data: string, key: string, iv: string) {//AES解码
  68. if (this.IsNullOrEmpty(key)) {
  69. key = this.GetAESINFO().key;
  70. }
  71. if (this.IsNullOrEmpty(iv)) {
  72. iv = this.GetAESINFO().iv;
  73. }
  74. let encryptedHexStr = CryptoJS.enc.Hex.parse(data);
  75. let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
  76. const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
  77. const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
  78. let decrypt = CryptoJS.AES.decrypt(srcs, keyHex, {
  79. iv: ivHex,
  80. mode: CryptoJS.mode.CBC,
  81. padding: CryptoJS.pad.Pkcs7
  82. });
  83. return decrypt.toString(CryptoJS.enc.Utf8).toString();
  84. }
  85. }
  86. //消息功能
  87. const Message = {
  88. success(content: string) {
  89. uni.showToast({
  90. title: content,
  91. icon: 'success',
  92. duration: 2000
  93. })
  94. },
  95. error(content: string) {
  96. uni.showToast({
  97. title: content,
  98. icon: 'error',
  99. duration: 2000
  100. })
  101. },
  102. info(content: string) {
  103. uni.showToast({
  104. title: content,
  105. icon: 'none',
  106. duration: 2000
  107. })
  108. }
  109. }
  110. //文件上传
  111. const FileInfo = {
  112. Upload(CallBackEvent: Function, FileList: Array<any>, ExtendParameter: any) {
  113. this.defaults = {
  114. Async: true,
  115. ShowWaiting: true,
  116. Later: false,
  117. Encrypt: false,
  118. Timeout: 120000,
  119. Tip: null,
  120. Folder: "Temp",
  121. MedID: "",
  122. IsFileServer: true,
  123. Url: UrlPath.getBaseUrl() + "ExecuteSystemUpLoadFile"
  124. };
  125. const formData = { files: [], formData: null }
  126. let allowfiles: Array<string> = []
  127. let temp_extend: Array<string> = []
  128. if (FileList == null || FileList.length == 0) {
  129. Message.error("没有需要上传的文件!");
  130. return;
  131. }
  132. for (let i = 0; i < FileList.length; i++) {
  133. temp_extend = FileList[i].name.split('.')
  134. allowfiles.push(temp_extend[temp_extend.length - 1])
  135. formData.files.push({
  136. name: "file:" + FileList[i].url,
  137. uri: FileList[i].url
  138. });
  139. }
  140. var Parameters = Object.assign(this.defaults, ExtendParameter);
  141. if (Parameters.IsFileServer === true) {
  142. var cur = null;//state.getters.userinfo;
  143. if (cur == null) {
  144. let uinfo = Utility.GetStorage("userinfo");
  145. if (uinfo == null || uinfo == "") {
  146. Message.error("未获取到登录信息!");
  147. return;
  148. }
  149. cur = JSON.parse(uinfo);
  150. }
  151. if (!Encrypt.IsNullOrEmpty(cur.LoadBalancingFileUrl)) {
  152. Parameters.Url = cur.LoadBalancingFileUrl.replace("[LOCALPATH]", location.protocol + "//" + location.host) + 'Api/File/UploadFilesAsync';
  153. }
  154. Parameters.MedID = cur.MedicalInstitutionID;
  155. Parameters.HttpPath = cur.ResourcePath;
  156. }
  157. formData.formData = { SaveFileInfo: "{\"data\":\"" + Encrypt.AESEncode(JSON.stringify({ IsSystem: false, Folder: Parameters.Folder, AllowFiles: allowfiles.join(","), MedID: Parameters.MedID, Token: Utility.GetStorage("Token"), HttpPath: Parameters.HttpPath }), "", "") + "\"}" }
  158. http.upload(Parameters.Url, formData).then(res => {
  159. CallBackEvent(res);
  160. });
  161. }
  162. }
  163. //通用方法
  164. const Utility = {
  165. //校验密码强度
  166. ValidPassWord(value: string) {
  167. var level = 0;
  168. if (value.length < 6) {
  169. return level;
  170. }
  171. if (/\d/.test(value)) {
  172. level++;
  173. }
  174. if (/[a-z]/.test(value)) {
  175. level++;
  176. }
  177. if (/[A-Z]/.test(value)) {
  178. level++;
  179. }
  180. if (/[\W_!@#$%^&*`~()-+=]/.test(value)) {
  181. level++;
  182. }
  183. return level;
  184. },
  185. //校验手机号
  186. ValidMobild(value: string) {
  187. return /^(((1[3456789][0-9]{1})|(15[0-9]{1}))+\d{8})$/.test(value);
  188. },
  189. SetStorage(key: string, value: string) {
  190. uni.setStorageSync(key, value)
  191. },
  192. GetStorage(key: string) {
  193. return uni.getStorageSync(key)
  194. },
  195. SetStorageJson(key: string, value: object) {
  196. uni.setStorageSync(key, JSON.stringify(value))
  197. },
  198. GetStorageJson(key: string) {
  199. let value = uni.getStorageSync(key)
  200. if (value != null && value != "") {
  201. return JSON.parse(value)
  202. }
  203. return null
  204. },
  205. GetPlatform() {//ios android devtools
  206. return uni.getSystemInfoSync().platform
  207. },
  208. GetRuntime() {
  209. const sysinfo = uni.getSystemInfoSync()
  210. switch (sysinfo.uniPlatform) {
  211. case "app":
  212. return "app";
  213. case "web":
  214. case "h5":
  215. return "web"
  216. default:
  217. return "mp"
  218. }
  219. },
  220. IsWeChat() {//是否微信小程序
  221. return this.GetRuntime() === "mp";
  222. },
  223. TrimEnd(text: string, content: string) {
  224. if (text == null || text == "") {
  225. return "";
  226. }
  227. var str = text.substring(text.length - content.length, text.length);
  228. if (content === str) {
  229. return text.substring(0, text.length - content.length);
  230. }
  231. return text;
  232. }
  233. }
  234. export { Encrypt, Message, FileInfo, Utility, UrlPath }