filters.js 14 KB

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