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.

443 lines
12 KiB

2 years ago
2 years ago
  1. var SIGN_REGEXP = /([yMdhsmH])(\1*)/g
  2. var DEFAULT_PATTERN = 'yyyy-MM-dd'
  3. const colors=['#909399','#409EFF','#67C23A','#E6A23C','#F56C6C','#00ced1','#c71585','#ff8c00','#c7158577','#ffd700'];
  4. import {sn} from './sequence.js';//全局公共库
  5. function padding(s, len) {
  6. var len = len - (s + '').length
  7. for (var i = 0; i < len; i++) {
  8. s = '0' + s
  9. }
  10. return s
  11. }
  12. export default {
  13. getCodeKey:function (itemCode,params){
  14. var codeKey='mdp-dict-cache'+'@'+itemCode
  15. if(params){
  16. for (let [key, value] of Object.entries(params)) {
  17. if(key=="itemCode"){
  18. continue;
  19. }
  20. codeKey=codeKey+"@"+key+":"+value
  21. }
  22. }
  23. return codeKey;
  24. },
  25. getDefaultColors:function(){
  26. return colors
  27. },
  28. getIconById:function(id){
  29. return null
  30. },
  31. getColorById:function(id){
  32. var cellValue=id
  33. var colors=this.getDefaultColors();
  34. if(!cellValue){
  35. return colors[0]
  36. }
  37. var cellValueInt=1*cellValue
  38. if( isNaN( cellValueInt) ){
  39. if(typeof cellValue =='string' && cellValue.length>0){
  40. var idxList=[]
  41. if(cellValue.length==1){
  42. idxList=[0]
  43. }else if(cellValue.length==2){
  44. idxList=[0,1]
  45. }else if(cellValue.length==3){
  46. idxList=[0,1,2]
  47. }else{
  48. idxList=[0,parseInt((cellValue.length-1)/2),cellValue.length-1]
  49. }
  50. cellValueInt=0;
  51. for(var i=0;i<idxList.length;i++){
  52. cellValueInt=cellValueInt+ cellValue.charCodeAt(idxList[i])
  53. }
  54. }else{
  55. cellValueInt=0;
  56. }
  57. }
  58. var colorIndex=cellValueInt % colors.length
  59. if(cellValueInt > 0 && colorIndex==0){
  60. colorIndex=1
  61. }
  62. return colors[colorIndex]
  63. },
  64. /**
  65. * 创建随机数
  66. * @param {*} prefix
  67. * @returns
  68. */
  69. createSeqNo:function(prefix){
  70. return sn(prefix);
  71. },
  72. //时间2020-09-30
  73. getDate() {
  74. var date = new Date()
  75. var myyear = date.getFullYear();
  76. var mymonth = date.getMonth() + 1;
  77. var myweekday = date.getDate();
  78. if (mymonth < 10) {
  79. mymonth = "0" + mymonth;
  80. }
  81. if (myweekday < 10) {
  82. myweekday = "0" + myweekday;
  83. }
  84. return (myyear + "-" + mymonth + "-" + myweekday);
  85. },
  86. getQueryStringByName: function(name) {
  87. var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
  88. var r = window.location.search.substr(1).match(reg)
  89. var context = ''
  90. if (r != null) {
  91. context = r[2]
  92. }
  93. reg = null
  94. r = null
  95. return context == null || context == '' || context == 'undefined' ? '' : context
  96. },
  97. fmoney(s, n) {
  98. n = n > 0 && n <= 20 ? n : 2;
  99. s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
  100. var l = s.split(".")[0].split("").reverse(),
  101. r = s.split(".")[1];
  102. var t = "";
  103. for (let i = 0; i < l.length; i++) {
  104. t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
  105. }
  106. return t.split("").reverse().join("") + "." + r;
  107. },
  108. isNull(obj) {
  109. if (obj === null || obj === '' || obj === undefined) {
  110. return true;
  111. }
  112. return false;
  113. },
  114. /**
  115. * 中横线字段转成驼峰命名
  116. * @param {*} name
  117. */
  118. toMCamel(name) {
  119. return name.replace(/\-(\w)/g, function(all, letter) {
  120. return letter.toUpperCase();
  121. });
  122. },
  123. /**
  124. * 字段转成驼峰命名
  125. * @param {*} name
  126. */
  127. toCamel(name) {
  128. return name.replace(/\_(\w)/g, function(all, letter) {
  129. return letter.toUpperCase();
  130. });
  131. },
  132. /**
  133. * 驼峰转下横线
  134. * @param {*} name
  135. */
  136. toLine(name) {
  137. return name.replace(/([A-Z])/g, "_$1").toLowerCase();
  138. },
  139. /**
  140. * 驼峰转中横线
  141. * @param {*} name
  142. */
  143. toMLine(name) {
  144. return name.replace(/([A-Z])/g, "-$1").toLowerCase();
  145. },
  146. formatDate: function(date, pattern) {
  147. pattern = pattern || DEFAULT_PATTERN
  148. return pattern.replace(SIGN_REGEXP, function($0) {
  149. switch ($0.charAt(0)) {
  150. case 'y':
  151. return padding(date.getFullYear(), $0.length)
  152. case 'M':
  153. return padding(date.getMonth() + 1, $0.length)
  154. case 'd':
  155. return padding(date.getDate(), $0.length)
  156. case 'w':
  157. return date.getDay() + 1
  158. case 'h':
  159. return padding(date.getHours(), $0.length)
  160. case 'H':
  161. return padding(date.getHours(), $0.length)
  162. case 'm':
  163. return padding(date.getMinutes(), $0.length)
  164. case 's':
  165. return padding(date.getSeconds(), $0.length)
  166. }
  167. })
  168. },
  169. parseDate: function(dateString, pattern) {
  170. var matchs1 = pattern.match(SIGN_REGEXP)
  171. var matchs2 = dateString.match(/(\d)+/g)
  172. if (matchs1.length == matchs2.length) {
  173. var _date = new Date(1970, 0, 1)
  174. for (var i = 0; i < matchs1.length; i++) {
  175. var _int = parseInt(matchs2[i])
  176. var sign = matchs1[i]
  177. switch (sign.charAt(0)) {
  178. case 'y':
  179. _date.setFullYear(_int);
  180. break
  181. case 'M':
  182. _date.setMonth(_int - 1);
  183. break
  184. case 'd':
  185. _date.setDate(_int);
  186. break
  187. case 'h':
  188. _date.setHours(_int);
  189. break
  190. case 'm':
  191. _date.setMinutes(_int);
  192. break
  193. case 's':
  194. _date.setSeconds(_int);
  195. break
  196. }
  197. }
  198. return _date
  199. }
  200. return null
  201. },
  202. //type date/daterange
  203. getPickerOptions: function(type) {
  204. if (type != 'datarange') {
  205. var shortcuts = [{
  206. text: '今天',
  207. onClick(picker) {
  208. picker.$emit('pick', new Date());
  209. }
  210. }, {
  211. text: '昨天',
  212. onClick(picker) {
  213. const date = new Date();
  214. date.setTime(date.getTime() - 3600 * 1000 * 24);
  215. picker.$emit('pick', date);
  216. }
  217. }, {
  218. text: '前一周',
  219. onClick(picker) {
  220. const date = new Date();
  221. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
  222. picker.$emit('pick', date);
  223. }
  224. }, {
  225. text: '前两周',
  226. onClick(picker) {
  227. const date = new Date();
  228. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7 * 2);
  229. picker.$emit('pick', date);
  230. }
  231. }, {
  232. text: '前四周',
  233. onClick(picker) {
  234. const date = new Date();
  235. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7 * 4);
  236. picker.$emit('pick', date);
  237. }
  238. }, {
  239. text: '后一周',
  240. onClick(picker) {
  241. const date = new Date();
  242. date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);
  243. picker.$emit('pick', date);
  244. }
  245. }, {
  246. text: '后两周',
  247. onClick(picker) {
  248. const date = new Date();
  249. date.setTime(date.getTime() + 3600 * 1000 * 24 * 7 * 2);
  250. picker.$emit('pick', date);
  251. }
  252. }, {
  253. text: '后一月',
  254. onClick(picker) {
  255. const date = new Date();
  256. date.setTime(date.getTime() + 3600 * 1000 * 24 * 7 * 4);
  257. picker.$emit('pick', date);
  258. }
  259. }, {
  260. text: '后两月',
  261. onClick(picker) {
  262. const date = new Date();
  263. date.setTime(date.getTime() + 3600 * 1000 * 24 * 7 * 8);
  264. picker.$emit('pick', date);
  265. }
  266. }, {
  267. text: '后四月',
  268. onClick(picker) {
  269. const date = new Date();
  270. date.setTime(date.getTime() + 3600 * 1000 * 24 * 7 * 16);
  271. picker.$emit('pick', date);
  272. }
  273. }]
  274. return {
  275. shortcuts: shortcuts
  276. };
  277. } else {
  278. var shortcuts = [{
  279. text: "前一周",
  280. onClick(picker) {
  281. const end = new Date();
  282. const start = new Date();
  283. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  284. picker.$emit("pick", [start, end]);
  285. }
  286. },
  287. {
  288. text: "前两周",
  289. onClick(picker) {
  290. const end = new Date();
  291. const start = new Date();
  292. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7 * 2);
  293. picker.$emit("pick", [start, end]);
  294. }
  295. },
  296. {
  297. text: "前三周",
  298. onClick(picker) {
  299. const end = new Date();
  300. const start = new Date();
  301. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7 * 3);
  302. picker.$emit("pick", [start, end]);
  303. }
  304. },
  305. {
  306. text: "前一个月",
  307. onClick(picker) {
  308. const end = new Date();
  309. const start = new Date();
  310. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  311. picker.$emit("pick", [start, end]);
  312. }
  313. },
  314. {
  315. text: "前三个月",
  316. onClick(picker) {
  317. const end = new Date();
  318. const start = new Date();
  319. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  320. picker.$emit("pick", [start, end]);
  321. }
  322. },
  323. {
  324. text: "后一周",
  325. onClick(picker) {
  326. const end = new Date();
  327. const start = new Date();
  328. end.setTime(start.getTime() + 3600 * 1000 * 24 * 7);
  329. picker.$emit("pick", [start, end]);
  330. }
  331. },
  332. {
  333. text: "后两周",
  334. onClick(picker) {
  335. const end = new Date();
  336. const start = new Date();
  337. end.setTime(start.getTime() + 3600 * 1000 * 24 * 7 * 2);
  338. picker.$emit("pick", [start, end]);
  339. }
  340. },
  341. {
  342. text: "后三周",
  343. onClick(picker) {
  344. const end = new Date();
  345. const start = new Date();
  346. end.setTime(start.getTime() + 3600 * 1000 * 24 * 7 * 3);
  347. picker.$emit("pick", [start, end]);
  348. }
  349. },
  350. {
  351. text: "后一个月",
  352. onClick(picker) {
  353. const end = new Date();
  354. const start = new Date();
  355. end.setTime(start.getTime() + 3600 * 1000 * 24 * 30);
  356. picker.$emit("pick", [start, end]);
  357. }
  358. },
  359. {
  360. text: "后三个月",
  361. onClick(picker) {
  362. const end = new Date();
  363. const start = new Date();
  364. end.setTime(start.getTime() + 3600 * 1000 * 24 * 90);
  365. picker.$emit("pick", [start, end]);
  366. }
  367. }
  368. ]
  369. return {
  370. shortcuts: shortcuts
  371. };;
  372. }
  373. },
  374. /**
  375. * 防止禁用弹框 _self模式
  376. * @param {} url
  377. */
  378. openWin:function(url) {
  379. var id='toOpenWindow';
  380. var a = document.createElement('a');
  381. a.setAttribute('href', url);
  382. a.setAttribute('target', '_black');
  383. a.setAttribute('id', id);
  384. // 防止反复添加
  385. if(!document.getElementById(id)) document.body.appendChild(a);
  386. a.click();
  387. },
  388. calcMaxHeight:function(cssSelector) {
  389. var table=cssSelector;
  390. if(typeof cssSelector == 'string'){
  391. table=document.querySelector(cssSelector);
  392. }
  393. var innerHeight=window.innerHeight
  394. var top=150;
  395. if(table!=null){
  396. var rect=table.getBoundingClientRect()
  397. if(rect && rect.top){
  398. top=rect.top;
  399. }
  400. }
  401. var maxTableHeight =innerHeight-top;
  402. return maxTableHeight;
  403. },
  404. calcTableMaxHeight:function(cssSelector) {
  405. var table=cssSelector;
  406. if(typeof cssSelector == 'string'){
  407. table=document.querySelector(cssSelector);
  408. }
  409. var innerHeight=window.innerHeight
  410. var pageHeight=32
  411. var top=150;
  412. var bottomHeight=24
  413. if(table!=null){
  414. var rect=table.getBoundingClientRect()
  415. if(rect && rect.top!=0){
  416. top=rect.top;
  417. }
  418. }
  419. var maxTableHeight =innerHeight-top-pageHeight-bottomHeight;
  420. return maxTableHeight;
  421. },
  422. }