filters.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. import moment from 'moment';
  2. function fixedZero(val) {
  3. return val * 1 < 10 ? `0${val}` : val;
  4. }
  5. // function getrandom(minnum , maxnum ,total,size){
  6. // var num = total; //定义整数
  7. // var length= size; //定义多个整数的数量
  8. // var numArr = [];
  9. // while(length > 1){
  10. // var rnd = Math.floor(Math.random() * num); //通过JS的随机函数生成随机数
  11. // num -= rnd;
  12. // numArr.push(rnd);
  13. // length --;
  14. // }
  15. // numArr.push(num);
  16. // console.info(numArr);
  17. // return numArr;
  18. // };getrandom(6,30,45,6)
  19. const filters = {
  20. // 格式化时间展示多长时间之前
  21. formatTime(time) {
  22. let formatTime
  23. const date = new Date(time)
  24. const dateObj = {
  25. year: date.getFullYear(),
  26. month: date.getMonth(),
  27. date: date.getDate(),
  28. hours: date.getHours(),
  29. minutes: date.getMinutes()
  30. }
  31. const newTime = new Date()
  32. const diff = newTime.getTime() - time
  33. if (newTime.getDate() === dateObj.date && diff < 60000) {
  34. formatTime = '刚刚'
  35. } else if (
  36. newTime.getDate() === dateObj.date &&
  37. diff > 60000 &&
  38. diff < 3600000
  39. ) {
  40. formatTime = `${Math.floor(diff / 60000)}分钟前`
  41. } else if (
  42. newTime.getDate() === dateObj.date &&
  43. diff > 3600000 &&
  44. diff < 86400000
  45. ) {
  46. formatTime = `${addZero(dateObj.hours)}:${addZero(dateObj.minutes)}`
  47. } else if (newTime.getDate() !== dateObj.date && diff < 86400000) {
  48. formatTime = `昨天${addZero(dateObj.hours)}:${addZero(dateObj.minutes)}`
  49. } else if (newTime.getFullYear() === dateObj.year) {
  50. formatTime = `${dateObj.month + 1}月${dateObj.date}日`
  51. } else {
  52. formatTime = `${dateObj.year}年${dateObj.month + 1}月${dateObj.date}日`
  53. }
  54. return formatTime
  55. },
  56. //时间日期格式化
  57. format(time) {
  58. const hours = 60 * 60 * 1000;
  59. const minutes = 60 * 1000;
  60. const h = Math.floor(time / hours);
  61. const m = Math.floor((time - h * hours) / minutes);
  62. const s = Math.floor((time - h * hours - m * minutes) / 1000);
  63. return `${fixedZero(h)}:${fixedZero(m)}:${fixedZero(s)}`
  64. },
  65. //年月日格式化
  66. getDate(value) {
  67. let date = new Date(value)
  68. let y = date.getFullYear()
  69. let MM = date.getMonth() + 1
  70. MM = MM < 10 ? '0' + MM : MM
  71. let d = date.getDate()
  72. d = d < 10 ? '0' + d : d
  73. return y + '-' + MM + '-' + d
  74. },
  75. //年月日时分秒格式化
  76. formatDate: function (value) {
  77. let date = new Date(value)
  78. let y = date.getFullYear()
  79. let MM = date.getMonth() + 1
  80. MM = MM < 10 ? '0' + MM : MM
  81. let d = date.getDate()
  82. d = d < 10 ? '0' + d : d
  83. let h = date.getHours()
  84. h = h < 10 ? '0' + h : h
  85. let m = date.getMinutes()
  86. m = m < 10 ? '0' + m : m
  87. let s = date.getSeconds()
  88. s = s < 10 ? '0' + s : s
  89. return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s
  90. },
  91. //时间秒转化为时间格式
  92. formatS: function (s) {
  93. var sTime = parseInt(s);// 秒
  94. var mTime = 0;// 分
  95. var hTime = 0;// 时
  96. if (sTime > 60) {//如果秒数大于60,将秒数转换成整数
  97. //获取分钟,除以60取整数,得到整数分钟
  98. mTime = parseInt(sTime / 60);
  99. //获取秒数,秒数取佘,得到整数秒数
  100. sTime = parseInt(sTime % 60);
  101. //如果分钟大于60,将分钟转换成小时
  102. if (mTime > 60) {
  103. //获取小时,获取分钟除以60,得到整数小时
  104. hTime = parseInt(mTime / 60);
  105. //获取小时后取佘的分,获取分钟除以60取佘的分
  106. mTime = parseInt(mTime % 60);
  107. }
  108. }
  109. var result = '';
  110. if (sTime >= 0 && sTime < 10) {
  111. result = "0" + parseInt(sTime) + "";
  112. } else {
  113. result = "" + parseInt(sTime) + "";
  114. }
  115. if (mTime >= 0 && mTime < 10) {
  116. result = "0" + parseInt(mTime) + ":" + result;
  117. } else {
  118. result = "" + parseInt(mTime) + ":" + result;
  119. }
  120. if (hTime >= 0 && hTime < 10) {
  121. result = "0" + parseInt(hTime) + ":" + result;
  122. } else {
  123. result = "" + parseInt(hTime) + ":" + result;
  124. }
  125. return result;
  126. },
  127. //bidType类型
  128. bidType(sta) {
  129. var data = {
  130. null: '-',
  131. 1: 'CPM',
  132. 2: '封面点击(CPC)',
  133. 6: 'OCPC',
  134. 10: '转化(OCPM)',
  135. 12: '最大转化'
  136. }
  137. return data[sta]
  138. },
  139. //ocpxActionType类型
  140. ocpxActionType(sta) {
  141. var data = {
  142. null: '-',
  143. 0: '封面点击',
  144. 2: '行为数',
  145. 10: '曝光',
  146. 11: '点击',
  147. 31: '下载完成',
  148. 53: '提交线索',
  149. 180: '激活',
  150. 190: '付费',
  151. 191: '首日ROI',
  152. 348: '有效线索',
  153. 383: '授信',
  154. 384: '完件',
  155. 394: '订单提交',
  156. 324: '唤起应用',
  157. 715: '微信复制优化目标',
  158. 716: '多转化事件',
  159. 396: '注册优化目标',
  160. 731: '广告观看5次',
  161. 732: '广告观看10次',
  162. 773: '关键行为'
  163. }
  164. return data[sta]
  165. },
  166. //角色类型
  167. roleCode(value) {
  168. var state = {
  169. clip: '剪辑',
  170. shot: '拍摄',
  171. plan: '策划',
  172. plane: '平面',
  173. admin: '管理员',
  174. operator: '运营专员',
  175. kuaishouOperationManager: '快手运营经理',
  176. designTeamLeader: '设计组长',
  177. planeLeader: '平面组长',
  178. touTiaoOperationManager: '头条运营经理',
  179. operationAssistant: '运营助理',
  180. }
  181. if (value) {
  182. return state[value]
  183. } else {
  184. return '暂无'
  185. }
  186. },
  187. //保留两位小数并且变成货币格式
  188. decimalsHandle(val) {
  189. if (val && typeof val != 'string') {
  190. if (val >= 0) {
  191. val = parseFloat(val).toFixed(2);
  192. let numberStr = val.toString()
  193. let str = numberStr.split('.')
  194. let str0 = str[0].split('').reverse();
  195. for (let i = 0; i < str0.length; i++) {
  196. if ((i + 1) % 4 === 0) {
  197. str0.splice(i, 0, ',')
  198. }
  199. }
  200. str0.reverse()
  201. let handleResult = ''
  202. for (let j = 0; j < str0.length; j++) {
  203. handleResult += str0[j]
  204. }
  205. return handleResult + '.' + str[1]
  206. } else {
  207. val = parseFloat(val).toFixed(2);
  208. let numberStr = val.toString()
  209. let str = numberStr.split('.')
  210. let str0 = str[0].substr(1).split('').reverse();
  211. for (let i = 0; i < str0.length; i++) {
  212. if ((i + 1) % 4 === 0) {
  213. str0.splice(i, 0, ',')
  214. }
  215. }
  216. str0.reverse()
  217. let handleResult = ''
  218. for (let j = 0; j < str0.length; j++) {
  219. handleResult += str0[j]
  220. }
  221. return '-' + handleResult + '.' + str[1]
  222. }
  223. } else if (typeof val == 'string') {
  224. return val
  225. }
  226. else {
  227. return 0
  228. }
  229. },
  230. //变成货币格式
  231. formatCurrency(val) {
  232. if ((val || val == 0) && typeof val != 'string') {
  233. let numberStr = val.toString()
  234. let str = numberStr.split('').reverse()
  235. for (let i = 0; i < str.length; i++) {
  236. if ((i + 1) % 4 === 0) {
  237. str.splice(i, 0, ',')
  238. }
  239. }
  240. str.reverse()
  241. let handleResult = ''
  242. for (let j = 0; j < str.length; j++) {
  243. handleResult += str[j]
  244. }
  245. return handleResult
  246. } else if (typeof val == 'string') {
  247. return val
  248. }
  249. else {
  250. return '-'
  251. }
  252. },
  253. //加百分比
  254. toPercentage(val) {
  255. if (val) {
  256. if (typeof val != 'string') {
  257. return (val * 100).toFixed(2) + '%'
  258. } else {
  259. return val
  260. }
  261. } else if (typeof val == 'string') {
  262. return val
  263. }
  264. else {
  265. return 0
  266. }
  267. },
  268. //媒体类型
  269. handleMediaType(val) {
  270. switch (val) {
  271. case 1:
  272. return '头条'
  273. break
  274. case 2:
  275. return '快手'
  276. break
  277. case 3:
  278. return '头条内广'
  279. break
  280. case 4:
  281. return '快手内广'
  282. break
  283. default:
  284. break
  285. }
  286. },
  287. //文件大小
  288. sizeShow(value) {
  289. return (value / 1024).toFixed(2)
  290. },
  291. //预警计算符号
  292. conditionName(val) {
  293. var data = {
  294. equal: '=',//'等于',
  295. not_equal: '≠',//不等于,
  296. greater: '>',//大于
  297. less: '<',//小于
  298. greater_equal: '≥',//大于等于
  299. less_equal: '≤',//小于等于
  300. between:'介于'
  301. }
  302. return data[val]
  303. },
  304. //预警计算符号
  305. cindicatorName(val) {
  306. var data = {
  307. charge: '金额',//'等于',
  308. dayBudget: '预算',//不等于,
  309. bid: '出价',//大于
  310. cost: '成本',//小于
  311. }
  312. return data[val]
  313. },
  314. operationType(val) {
  315. var data = {
  316. up: '提高',//'等于',
  317. down: '降低',//不等于,
  318. to: '调整至',//大于
  319. }
  320. return data[val]
  321. },
  322. //快手年龄
  323. kuaishouAge(val) {
  324. var data = {
  325. 18: '18-23岁',//'等于',
  326. 24: '24-30岁',//不等于,
  327. 31: '31-40岁',//大于
  328. 41: '41-49岁',//小于
  329. 50: '50+',//大于等于
  330. }
  331. return data[val]
  332. },
  333. //快手手机价格
  334. kuaishouPrice(val) {
  335. var data = {
  336. 1: '1500以下',
  337. 2: '1501~2000',
  338. 3: '2001~2500',
  339. 4: '2501~3000',
  340. 5: '3001~3500',
  341. 6: '3501~4000',
  342. 7: '4001~4500',
  343. 8: '4501~5000',
  344. 9: '5001~5500',
  345. 10: '5500以上',
  346. }
  347. return data[val]
  348. },
  349. //快手过滤以转化用户
  350. kuaishouFilterConvertedLevel(val) {
  351. var data = {
  352. 0: '不限',
  353. 1: '广告组',
  354. 2: '广告计划',
  355. 3: '本账户',
  356. 4: '公司主体',
  357. 5: 'APP'
  358. }
  359. return data[val]
  360. },
  361. //场景广告位
  362. kuaishouSceneId(val) {
  363. var data = {
  364. 1: '优选广告位',
  365. 3: '视频播放页广告',
  366. 6: '上下滑大屏广告',
  367. 7: '信息流广告',
  368. 5: "联盟广告"
  369. }
  370. return data[val]
  371. },
  372. platform(str) {
  373. var data = {
  374. 1: 'Android应用下载',
  375. 2: 'Android网页游戏',
  376. 3: 'iOS应用下载',
  377. 4: 'iOS网页游戏'
  378. }
  379. return data[str]
  380. },
  381. // 人群包定向
  382. customCrowdHandler(val){
  383. let str=''
  384. switch (val) {
  385. case 1:
  386. str='上传人群'
  387. break;
  388. case 2:
  389. str='广告人群'
  390. break;
  391. case 3:
  392. str='主题专区'
  393. break;
  394. case 4:
  395. str='逻辑规则'
  396. break;
  397. case 5:
  398. str='人群扩展'
  399. break;
  400. case 6:
  401. str='平台定制'
  402. break;
  403. case 7:
  404. str='定制付费'
  405. break;
  406. case 8:
  407. str='网红粉丝类别'
  408. break;
  409. case 9:
  410. str='内容付费行为'
  411. break;
  412. case 10:
  413. str='移动应用安装'
  414. break;
  415. case 11:
  416. str='快手使用活跃度'
  417. break;
  418. case 12:
  419. str='行业分类'
  420. break;
  421. case 13:
  422. str='商业兴趣'
  423. break;
  424. case 14:
  425. str='固化标签'
  426. break;
  427. case 15:
  428. str='行业偏好'
  429. break;
  430. case 16:
  431. str='第三方标签'
  432. break;
  433. case 17:
  434. str='产品关键词'
  435. break;
  436. default:
  437. break;
  438. }
  439. return str
  440. },
  441. deviceBrand(str) {
  442. var data = {
  443. 1:"OPPO",
  444. 2:"VIVO",
  445. 3:"华为",
  446. 4:"小米",
  447. 5:"荣耀",
  448. 6:"三星",
  449. 7:"金立",
  450. 8:"魅族",
  451. 9:"乐视",
  452. 10:"其他",
  453. 11:"苹果",
  454. }
  455. return data[str]
  456. }
  457. }
  458. // 获取当前月的第一天
  459. function getCurrentMonthFirst() {
  460. let date = new Date();
  461. date.setDate(1);
  462. return date;
  463. }
  464. // 获取当前月的最后一天
  465. function getCurrentMonthLast() {
  466. let date = new Date();
  467. let currentMonth = date.getMonth();
  468. let nextMonth = ++currentMonth;
  469. let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
  470. let oneDay = 1000 * 60 * 60 * 24;
  471. return new Date(nextMonthFirstDay - oneDay);
  472. }
  473. // 今日日期小于15号时和今日日期大于等于15号时
  474. function getCurrentMonthFifty() {
  475. let date = new Date();
  476. if (date.getDate() < 15) {
  477. let bb = date.setTime(new Date().getTime() - 3600 * 1000 * 24 * 15);
  478. return bb;
  479. } else if (date.getDate() >= 15) {
  480. let year = date.getFullYear();
  481. let month = date.getMonth();
  482. let myDate = new Date(year, month, 0);
  483. let lastDay = year + "-" + month + "-" + myDate.getDate();//上个月的最后一天
  484. return lastDay;
  485. }
  486. }
  487. export default {
  488. install: function (Vue) {
  489. Object.keys(filters).forEach(key => {
  490. Vue.filter(key, filters[key])
  491. })
  492. }
  493. }