景徳镇旅游微信小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
5.0 KiB

8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
  1. function toArray(data) {
  2. if (!data) return []
  3. if (data instanceof Array){
  4. return data
  5. } else {
  6. return [data]
  7. }
  8. }
  9. function generateUUID() {
  10. return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  11. var r = Math.random() * 16 | 0,
  12. v = c == 'x' ? r : (r & 0x3 | 0x8);
  13. return v.toString(16);
  14. });
  15. }
  16. function generateRandomColor() {
  17. const letters = '0123456789ABCDEF';
  18. let color = '#';
  19. for (let i = 0; i < 6; i++) {
  20. color += letters[Math.floor(Math.random() * 16)];
  21. }
  22. return color;
  23. }
  24. function generateLightRandomColor() {
  25. const min = 150;
  26. const range = 105;
  27. const r = Math.floor(Math.random() * range + min);
  28. const g = Math.floor(Math.random() * range + min);
  29. const b = Math.floor(Math.random() * range + min);
  30. const color = 'rgb(' + r + ',' + g + ',' + b + ')';
  31. return color;
  32. }
  33. function verificationAll(data, msg){
  34. let Msgs = {
  35. default : msg || '表单数据未填写'
  36. }
  37. if(typeof msg == 'object'){
  38. Msgs = {
  39. default : '表单数据未填写',
  40. ...msg,
  41. }
  42. }
  43. if (!data){
  44. uni.showToast({
  45. title: Msgs.default,
  46. icon: "none"
  47. })
  48. return true
  49. }
  50. for (let key in data) {
  51. if (!data[key] || data[key] === "") {
  52. uni.showToast({
  53. title: (Msgs[key] || Msgs.default),
  54. icon: "none"
  55. })
  56. return true
  57. }
  58. }
  59. return false
  60. }
  61. //验证手机号是否合法
  62. function verificationPhone(phone){
  63. if(!/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(phone)){
  64. return false
  65. }
  66. return true
  67. }
  68. //获取url中参数的方法
  69. export function getHrefParams(name) {
  70. var url = window.location.href;
  71. try {
  72. var cs = url.split('?')[1]; //获取?之后的参数字符串
  73. var cs_arr = cs.split('&'); //参数字符串分割为数组
  74. for (var i = 0; i < cs_arr.length; i++) { //遍历数组,拿到json对象
  75. if (cs_arr[i].split('=')[0] == name) {
  76. return cs_arr[i].split('=')[1];
  77. }
  78. }
  79. return "";
  80. } catch {
  81. return "";
  82. }
  83. }
  84. //其中url是文件的地址
  85. export function hanldePreview(url) {
  86. console.log("url--->", url)
  87. let index = url.lastIndexOf('.');
  88. let fileType = url.substring(index + 1, url.length);
  89. let white_filetype = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf']
  90. let white_image = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'ico', 'wbmp', 'fax', 'net', 'rp', 'jfif', 'jpe',
  91. 'tiff', 'tif'
  92. ]
  93. let white_media = ['mp3', 'wav', 'flac', 'aac', 'mp4', 'avi', 'wmv', 'mov', 'flv']
  94. uni.downloadFile({
  95. url: url,
  96. success: function(res) {
  97. console.log("res--->", res)
  98. var filePath = res.tempFilePath;
  99. if (white_filetype.indexOf(fileType) != -1) {
  100. uni.openDocument({
  101. filePath: filePath,
  102. showMenu: true,
  103. success: function(res) {
  104. console.log('打开文档成功');
  105. },
  106. fail: function(err) {
  107. console.log('打开文档失败--->', err);
  108. uni.showToast({
  109. title: err.errMsg,
  110. icon: 'none'
  111. })
  112. },
  113. });
  114. } else if (white_image.indexOf(fileType) != -1) {
  115. uni.previewImage({
  116. urls: [filePath],
  117. longPressActions: {
  118. itemList: ['发送给朋友', '保存图片', '收藏'],
  119. success: function(data) {
  120. },
  121. fail: function(err) {
  122. console.log(err.errMsg);
  123. uni.showToast({
  124. title: err.errMsg,
  125. icon: 'none'
  126. })
  127. }
  128. }
  129. });
  130. } else if (white_media.indexOf(fileType) != -1) {
  131. wx.previewMedia({
  132. sources: [{
  133. url: filePath, //图片或者视频所在路径
  134. type: 'video', //图片为image,视频为video
  135. }],
  136. success(res) {
  137. //预览成功
  138. // uni.showToast({
  139. // title: "预览成功",
  140. // icon: "none"
  141. // })
  142. },
  143. fail(err) {
  144. console.log(err);
  145. uni.showToast({
  146. title: err.errMsg,
  147. icon: 'none'
  148. })
  149. //预览失败
  150. }
  151. })
  152. } else {
  153. uni.showToast({
  154. title: '不支持打开该类型文件',
  155. icon: 'none'
  156. })
  157. }
  158. },
  159. fail: function(err) {
  160. console.log("err--->", err)
  161. uni.showToast({
  162. title: err.errMsg,
  163. icon: 'none'
  164. })
  165. }
  166. });
  167. }
  168. //深度对比合并两个对象,相同属性b会覆盖a
  169. export function deepMergeObject(a, b){
  170. let data = JSON.parse(JSON.stringify(a))
  171. function mergeObject(obj1, obj2){
  172. for(let key in obj2){
  173. if(typeof obj1[key] == 'object'){
  174. obj1[key] = mergeObject(obj1[key], obj2[key])
  175. }else{
  176. obj1[key] = obj2[key]
  177. }
  178. }
  179. return obj1
  180. }
  181. return mergeObject(data, b)
  182. }
  183. function params(url){
  184. if(typeof url == 'object'){
  185. return url
  186. }
  187. let data = {
  188. url
  189. }
  190. if(!data.url.includes('/pages')){
  191. data.url = '/pages' + data.url
  192. }
  193. return data
  194. }
  195. export function navigateTo(...args){
  196. uni.navigateTo(params(...args))
  197. }
  198. export function navigateBack(num = -1){
  199. uni.navigateBack(num)
  200. }
  201. export function redirectTo(...args){
  202. uni.redirectTo(params(...args))
  203. }
  204. export default {
  205. toArray,
  206. generateUUID,
  207. verificationAll,
  208. generateRandomColor,
  209. generateLightRandomColor,
  210. verificationPhone,
  211. getHrefParams,
  212. deepMergeObject,
  213. navigateTo,
  214. navigateBack,
  215. redirectTo,
  216. hanldePreview,
  217. }