filters.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  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. //bidType类型
  78. bidType(sta) {
  79. var data = {
  80. null: '-',
  81. 1: 'CPM',
  82. 2: '封面点击(CPC)',
  83. 6: 'OCPC',
  84. 10: '转化(OCPM)',
  85. }
  86. return data[sta]
  87. },
  88. //ocpxActionType类型
  89. ocpxActionType(sta) {
  90. var data = {
  91. null: '-',
  92. 0: '封面点击',
  93. 2: '行为数',
  94. 10: '曝光',
  95. 11: '点击',
  96. 31: '下载完成',
  97. 53: '提交线索',
  98. 180: '激活',
  99. 190: '付费',
  100. 191: '首日ROI',
  101. 348: '有效线索',
  102. 383: '授信',
  103. 384: '完件',
  104. 394: '订单提交',
  105. 324: '唤起应用',
  106. 715: '微信复制优化目标',
  107. 716: '多转化事件',
  108. 396:'注册优化目标',
  109. 731:'广告观看5次',
  110. 732:'广告观看10次',
  111. }
  112. return data[sta]
  113. },
  114. //角色类型
  115. roleCode(value) {
  116. var state = {
  117. clip: '剪辑',
  118. shot: '拍摄',
  119. plan: '策划',
  120. plane: '平面',
  121. admin: '管理员',
  122. operator: '运营专员',
  123. kuaishouOperationManager: '快手运营经理',
  124. designTeamLeader: '设计组长',
  125. planeLeader: '平面组长',
  126. touTiaoOperationManager: '头条运营经理',
  127. operationAssistant: '运营助理',
  128. }
  129. if (value) {
  130. return state[value]
  131. } else {
  132. return '暂无'
  133. }
  134. },
  135. //保留两位小数并且变成货币格式
  136. decimalsHandle(val) {
  137. if (val && typeof val != 'string') {
  138. if (val >= 0) {
  139. val = parseFloat(val).toFixed(2);
  140. let numberStr = val.toString()
  141. let str = numberStr.split('.')
  142. let str0 = str[0].split('').reverse();
  143. for (let i = 0; i < str0.length; i++) {
  144. if ((i + 1) % 4 === 0) {
  145. str0.splice(i, 0, ',')
  146. }
  147. }
  148. str0.reverse()
  149. let handleResult = ''
  150. for (let j = 0; j < str0.length; j++) {
  151. handleResult += str0[j]
  152. }
  153. return handleResult + '.' + str[1]
  154. } else {
  155. val = parseFloat(val).toFixed(2);
  156. let numberStr = val.toString()
  157. let str = numberStr.split('.')
  158. let str0 = str[0].substr(1).split('').reverse();
  159. for (let i = 0; i < str0.length; i++) {
  160. if ((i + 1) % 4 === 0) {
  161. str0.splice(i, 0, ',')
  162. }
  163. }
  164. str0.reverse()
  165. let handleResult = ''
  166. for (let j = 0; j < str0.length; j++) {
  167. handleResult += str0[j]
  168. }
  169. return '-' + handleResult + '.' + str[1]
  170. }
  171. } else if (typeof val == 'string') {
  172. return val
  173. }
  174. else {
  175. return 0
  176. }
  177. },
  178. //变成货币格式
  179. formatCurrency(val) {
  180. if ((val || val == 0) && typeof val != 'string') {
  181. let numberStr = val.toString()
  182. let str = numberStr.split('').reverse()
  183. for (let i = 0; i < str.length; i++) {
  184. if ((i + 1) % 4 === 0) {
  185. str.splice(i, 0, ',')
  186. }
  187. }
  188. str.reverse()
  189. let handleResult = ''
  190. for (let j = 0; j < str.length; j++) {
  191. handleResult += str[j]
  192. }
  193. return handleResult
  194. } else if (typeof val == 'string') {
  195. return val
  196. }
  197. else {
  198. return '-'
  199. }
  200. },
  201. //加百分比
  202. toPercentage(val) {
  203. if (val) {
  204. if (typeof val != 'string') {
  205. return (val * 100).toFixed(2) + '%'
  206. } else {
  207. return val
  208. }
  209. } else if (typeof val == 'string') {
  210. return val
  211. }
  212. else {
  213. return 0
  214. }
  215. },
  216. //媒体类型
  217. handleMediaType(val) {
  218. switch (val) {
  219. case 1:
  220. return '头条'
  221. break
  222. case 2:
  223. return '快手'
  224. break
  225. case 3:
  226. return '头条内广'
  227. break
  228. case 4:
  229. return '快手内广'
  230. break
  231. default:
  232. break
  233. }
  234. },
  235. //文件大小
  236. sizeShow(value) {
  237. return (value / 1024).toFixed(2)
  238. },
  239. //预警计算符号
  240. conditionName(val) {
  241. var data = {
  242. equal: '=',//'等于',
  243. not_equal: '≠',//不等于,
  244. greater: '>',//大于
  245. less: '<',//小于
  246. greater_equal: '≥',//大于等于
  247. less_equal: '≤',//小于等于
  248. }
  249. return data[val]
  250. },
  251. //快手年龄
  252. kuaishouAge(val) {
  253. var data = {
  254. 18: '18-23岁',//'等于',
  255. 24: '24-30岁',//不等于,
  256. 31: '31-40岁',//大于
  257. 41: '41-49岁',//小于
  258. 50: '50+',//大于等于
  259. }
  260. return data[val]
  261. },
  262. //快手手机价格
  263. kuaishouPrice(val) {
  264. var data = {
  265. 1: '1500以下',
  266. 2: '1501~2000',
  267. 3: '2001~2500',
  268. 4: '2501~3000',
  269. 5: '3001~3500',
  270. 6: '3501~4000',
  271. 7: '4001~4500',
  272. 8: '4501~5000',
  273. 9: '5001~5500',
  274. 10: '5500以上',
  275. }
  276. return data[val]
  277. },
  278. //快手过滤以转化用户
  279. kuaishouFilterConvertedLevel(val) {
  280. var data = {
  281. 0: '不限',
  282. 1: '广告组',
  283. 2: '广告计划',
  284. 3: '本账户',
  285. 4: '公司主体',
  286. 5: 'APP'
  287. }
  288. return data[val]
  289. },
  290. //场景广告位
  291. kuaishouSceneId(val) {
  292. var data = {
  293. 1: '优选广告位',
  294. 3: '视频播放页广告',
  295. 6: '上下滑大屏广告',
  296. 7: '信息流广告',
  297. 5: "联盟广告"
  298. }
  299. return data[val]
  300. },
  301. platform(str) {
  302. var data = {
  303. 1: 'Android应用下载',
  304. 2: 'Android网页游戏',
  305. 3: 'iOS应用下载',
  306. 4: 'iOS网页游戏'
  307. }
  308. return data[str]
  309. }
  310. }
  311. // 获取当前月的第一天
  312. function getCurrentMonthFirst() {
  313. let date = new Date();
  314. date.setDate(1);
  315. return date;
  316. }
  317. // 获取当前月的最后一天
  318. function getCurrentMonthLast() {
  319. let date = new Date();
  320. let currentMonth = date.getMonth();
  321. let nextMonth = ++currentMonth;
  322. let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
  323. let oneDay = 1000 * 60 * 60 * 24;
  324. return new Date(nextMonthFirstDay - oneDay);
  325. }
  326. // 今日日期小于15号时和今日日期大于等于15号时
  327. function getCurrentMonthFifty() {
  328. let date = new Date();
  329. if (date.getDate() < 15) {
  330. let bb = date.setTime(new Date().getTime() - 3600 * 1000 * 24 * 15);
  331. return bb;
  332. } else if (date.getDate() >= 15) {
  333. let year = date.getFullYear();
  334. let month = date.getMonth();
  335. let myDate = new Date(year, month, 0);
  336. let lastDay = year + "-" + month + "-" + myDate.getDate();//上个月的最后一天
  337. return lastDay;
  338. }
  339. }
  340. export default {
  341. install: function (Vue) {
  342. Object.keys(filters).forEach(key => {
  343. Vue.filter(key, filters[key])
  344. })
  345. }
  346. }