utils.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. import { message } from 'ant-design-vue';
  2. import { create, all } from 'mathjs'
  3. import { useAuthStore } from "@/stores/modules/auth";
  4. import { useBaseStore } from '@/stores/modules/base'
  5. import router from "@/router/index";
  6. const config = {
  7. number: 'BigNumber',
  8. precision: 20
  9. }
  10. const math = create(all, config)
  11. let time = null
  12. const hide = null
  13. let questArray = [];
  14. export default {
  15. // 判断应用是否授权
  16. hasAuth (app) {
  17. if (!app) {
  18. return false
  19. } else {
  20. return true
  21. }
  22. },
  23. // 检查权限是否存在
  24. hasPermission (permission) {
  25. let hasPermission = true
  26. const store = useAuthStore()
  27. let appData = store.app
  28. let auth = appData.meta.auth
  29. if (appData.meta.auth) {
  30. hasPermission = auth.some(item=>item.option == permission)
  31. return hasPermission
  32. }
  33. },
  34. // 获取应用表格
  35. TBLayout (tablename,i) {
  36. try {
  37. // 获取应用数据
  38. const store = useAuthStore()
  39. const hideAmount = store.hiddenSensitiveFields
  40. let apps = store.app
  41. // 获取当前应用表格数据
  42. if (apps.meta.tables[tablename]) {
  43. let tablecols = apps.meta.tables[tablename].tablecols.map(e=>{
  44. return {
  45. title:e.title,
  46. filter:e.filter,
  47. sortable:e.sortable,
  48. dataIndex:e.columnname,
  49. sort:0,
  50. align:e.align?e.align:'left',
  51. width:e.width == 0?'150':e.width,
  52. fixed:e.freezetype ? e.freezetype !== '' ? e.freezetype : false:false,
  53. fn:e.script !=='' ? (data,dataIndex)=>{
  54. try {
  55. let func = new Function('data','hideAmount',e.script);
  56. return func(data,hideAmount); // 输出1
  57. } catch (error) {
  58. console.log(error)
  59. }
  60. }:null,
  61. ellipsis:true
  62. }
  63. })
  64. return tablecols
  65. }
  66. } catch (error) {
  67. console.log(error,'tool')
  68. }
  69. },
  70. // 获取表头及表单配置
  71. FormLayout (name,data) {
  72. var that = this
  73. /** 验证数据格式类型 */
  74. let checkType = (dataformat,value)=>{
  75. if (dataformat && dataformat.type && dataformat.type !== '' && dataformat.type !== 'none') {
  76. switch (dataformat.type) {
  77. case 'number':
  78. return that.formatAmount(value)
  79. break;
  80. case 'mapping':
  81. dataformat.mapping.some(e=>{
  82. if (value == e.value) {
  83. value = e.label
  84. }
  85. })
  86. return value
  87. break;
  88. default:
  89. break;
  90. }
  91. } else {
  92. return value
  93. }
  94. }
  95. try {
  96. // 获取应用数据
  97. const store = useAuthStore()
  98. let apps = store.app
  99. // 获取当前应用表格数据
  100. if (apps.meta.forms[name]) {
  101. let formlat = apps.meta.forms[name].formcols.map(e=>{
  102. return {
  103. label:e.title,
  104. value:checkType(e.dataformat,data[e.columnname]),
  105. key:e.columnname,
  106. span:e.span,
  107. style:e.script !=='' ? ()=>{
  108. try {
  109. let func = new Function('data','that',e.script);
  110. return func(data,that); // 输出1
  111. } catch (error) {
  112. console.log(error)
  113. }
  114. }:null,
  115. }
  116. })
  117. return formlat
  118. }
  119. } catch (error) {
  120. console.log(error,'tool')
  121. }
  122. },
  123. TBLayoutID (appname) {
  124. try {
  125. // 获取应用数据
  126. const store = useAuthStore()
  127. let apps = store.app
  128. // 获取当前应用表格数据
  129. if (apps.meta.tables[appname]) {
  130. let id = apps.meta.tables[appname].tableid
  131. return id
  132. }
  133. } catch (error) {
  134. console.log(error,'tool')
  135. }
  136. },
  137. // 判断参数隐藏
  138. hideFields (name,key) {
  139. const store = useAuthStore()
  140. let appData = store.app
  141. let keyArray = appData.meta.forms[name]
  142. let isShow = keyArray.formcols.some(e=>key == e.columnname)
  143. return isShow
  144. },
  145. // 验证按钮状态
  146. isDisabled (status,arr,fn) {
  147. let rs = false
  148. if (fn) return fn
  149. rs = arr.some(item=>item == status)
  150. return rs
  151. },
  152. // 数据消息提醒
  153. message (res,msg,fn) {
  154. if (!res) return false
  155. if (res.code === 1) {
  156. msg ? message.success({content:msg,key:1}) : ''
  157. if(time !== null){
  158. clearTimeout(time);
  159. }
  160. time = setTimeout(() => {
  161. fn ? fn() : ''
  162. },500)
  163. } else {
  164. console.log(res)
  165. message.error({content:res.data + ':' + res.msg,key:1})
  166. }
  167. },
  168. // 金额格式化
  169. formatAmount(amount, fn) {
  170. console.log(fn,'------')
  171. if (fn !== undefined && !fn) return '****'
  172. const { hiddenSensitiveFields } = useAuthStore()
  173. if (hiddenSensitiveFields) return '****'
  174. let amt = math.format(Number(amount), {notation: 'fixed',precision: 2})
  175. const amountStr = String(amt)
  176. const reg = /\B(?=(?:\d{3})+$)/g
  177. // 是否是小数
  178. const isDecimal = amountStr.indexOf('.') > -1
  179. if (isDecimal) {
  180. // 整数部分
  181. const integerPart = amountStr.substring(0, amountStr.indexOf('.'))
  182. // 小数部分
  183. const decimalPart = amountStr.substring(amountStr.length, amountStr.indexOf('.'))
  184. return `${integerPart.replace(reg, ',')}${decimalPart}`
  185. } else {
  186. return amountStr.replace(reg, ',')
  187. }
  188. },
  189. // 验证数字输入框手动输入的值是否合法
  190. validateInputNumber (start,value,step) {
  191. return new Promise((reslove,reject)=>{
  192. console.log(start,value)
  193. if (!value) return reslove(start)
  194. if ((value * 100 - start * 100) % (step * 100) === 0) {
  195. reslove(value)
  196. } else {
  197. message.error(value?`输入的值${value}不符合增量规则,已修正!`:`输入的值不能为空!`);
  198. let val = value - ((value - start) % step)
  199. reslove(val)
  200. }
  201. })
  202. },
  203. // 设置状态颜色
  204. statusAndColor(status) {
  205. let statusArr = [
  206. {st:'新建',cl:"#1677ff"},
  207. {st:'提交',cl:'#646cff'},
  208. {st:'审核',cl:'#ff5656'},
  209. {st:'关闭',cl:'#acbdc5'},
  210. {st:'预提交',cl:'#005792'},
  211. {st:'确认',cl:'#01352c'},
  212. {st:'复核',cl:'#ff9234'},
  213. {st:'启用',cl:"#1890ff"},
  214. {st:'停用',cl:'#acbdc5'},
  215. {st:'发布',cl:'#52c41a'},
  216. ]
  217. if (statusArr.find(e=>e.st == status)) {
  218. return statusArr.find(e=>e.st == status).cl
  219. } else {
  220. return '#333'
  221. }
  222. },
  223. // 接口防抖
  224. questArray,
  225. anti_shake (config, axios) {
  226. const now_date = new Date().getTime();
  227. const request_info = JSON.parse(sessionStorage.getItem("request_url"));
  228. sessionStorage.setItem(
  229. "request_url",
  230. JSON.stringify({ url: config.type, time: new Date().getTime() })
  231. );
  232. if (request_info === null) return true;
  233. if (config.type == 'post') {
  234. useBaseStore().canPointer = false
  235. }
  236. //存储请求队列,判断post请求是否为重复的请求
  237. if (config.data.id) {
  238. questArray.push(Number(config.data.id))
  239. }
  240. if (now_date - request_info.time < 500 && config.type == 'post') {
  241. let cancel;
  242. config.cancelToken = new axios.CancelToken((c) => {
  243. cancel = c;
  244. });
  245. message.error({content:'请求过于频繁,请稍后再试!',duration:1,key:1});
  246. useBaseStore().canPointer = true
  247. cancel(`${config.url}请求被中断`);
  248. return false;
  249. } else {
  250. return true;
  251. }
  252. },
  253. messageLoading: {
  254. hide:()=>{
  255. message.loading({content:'操作正在执行,请稍等..',duration:10,});
  256. }
  257. },
  258. date:{
  259. yearStart:`${(new Date).getFullYear()-1}-01-01`,
  260. yearEnd:`${(new Date).getFullYear()}-12-31`,
  261. }
  262. }