index.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. import Vue from 'vue'
  2. import {
  3. AssetTag,
  4. AssetTagInfo,
  5. AssetType,
  6. AssetTypeInfo,
  7. SCREEN_TIME_KEY,
  8. TimeType,
  9. FOREVER
  10. } from '@/constant'
  11. export const EventBus = new Vue()
  12. export function parseTime (time, cFormat) {
  13. if (arguments.length === 0 || !time) {
  14. return null
  15. }
  16. const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  17. let date
  18. if (typeof time === 'object') {
  19. date = time
  20. } else {
  21. if ((typeof time === 'string')) {
  22. if ((/^[0-9]+$/.test(time))) {
  23. // support "1548221490638"
  24. time = parseInt(time)
  25. } else {
  26. // support safari
  27. // https://stackoverflow.com/questions/4310953/invalid-date-in-safari
  28. time = time.replace(new RegExp(/-/gm), '/')
  29. }
  30. }
  31. if ((typeof time === 'number') && (time.toString().length === 10)) {
  32. time *= 1000
  33. }
  34. date = new Date(time)
  35. }
  36. const formatObj = {
  37. y: date.getFullYear(),
  38. m: date.getMonth() + 1,
  39. d: date.getDate(),
  40. h: date.getHours(),
  41. i: date.getMinutes(),
  42. s: date.getSeconds(),
  43. a: date.getDay()
  44. }
  45. const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
  46. const value = formatObj[key]
  47. // Note: getDay() returns 0 on Sunday
  48. if (key === 'a') {
  49. return ['日', '一', '二', '三', '四', '五', '六'][value]
  50. }
  51. return value.toString().padStart(2, '0')
  52. })
  53. return time_str
  54. }
  55. export function createListOptions (params) {
  56. return {
  57. list: [],
  58. totalCount: 0,
  59. loading: false,
  60. error: false,
  61. params: {
  62. pageNum: 1,
  63. pageSize: 10,
  64. ...params
  65. }
  66. }
  67. }
  68. const units = ['B', 'KB', 'M', 'G']
  69. export function parseByte (byte) {
  70. byte = Number(byte)
  71. if (!byte) {
  72. return '-'
  73. }
  74. const edge = 1024
  75. let i = 0
  76. while (i < units.length - 1) {
  77. if (byte >= edge / 2) {
  78. byte /= edge
  79. i += 1
  80. } else {
  81. break
  82. }
  83. }
  84. return `${parseInt(byte * 100) / 100}${units[i]}`
  85. }
  86. export function parseDuration (duration, ignore = true) {
  87. if (!duration) {
  88. return ignore ? '-' : '00:00'
  89. }
  90. const seconds = `${duration % 60}`
  91. const minutes = `${duration / 60 | 0}`
  92. return `${minutes.padStart(2, '0')}:${seconds.padStart(2, '0')}`
  93. }
  94. function parseTimeToHHmmss (time, seconds = '00') {
  95. return time && time.length === 8 ? time : `${time}:${seconds}`
  96. }
  97. export function parseTaskTime (task) {
  98. if (!task) {
  99. return {
  100. type: TimeType.SCREEN,
  101. range: ['00:00:00', '23:59:59'],
  102. point: parseTime(new Date(), '{h}:{i}:{s}')
  103. }
  104. }
  105. const { startTime = SCREEN_TIME_KEY, endTime = SCREEN_TIME_KEY } = task
  106. return {
  107. type: startTime === SCREEN_TIME_KEY && endTime === SCREEN_TIME_KEY ? TimeType.SCREEN : endTime ? TimeType.RANGE : TimeType.POINT,
  108. range: [startTime === SCREEN_TIME_KEY ? '00:00:00' : parseTimeToHHmmss(startTime), !endTime || endTime === SCREEN_TIME_KEY ? '23:59:59' : parseTimeToHHmmss(endTime, '59')],
  109. point: startTime === SCREEN_TIME_KEY || endTime ? '00:00:00' : startTime
  110. }
  111. }
  112. export function getTaskTimeInfo ({ startTime, endTime }) {
  113. return startTime === SCREEN_TIME_KEY && endTime === SCREEN_TIME_KEY ? '开机期间' : endTime ? `${startTime}-${endTime}` : startTime
  114. }
  115. export function transformToTaskTime ({ type, range, point }) {
  116. switch (type) {
  117. case TimeType.SCREEN:
  118. return { startTime: SCREEN_TIME_KEY, endTime: SCREEN_TIME_KEY }
  119. case TimeType.RANGE:
  120. return { startTime: range[0], endTime: range[1] }
  121. case TimeType.POINT:
  122. return { startTime: point, endTime: '' }
  123. default:
  124. return { startTime: SCREEN_TIME_KEY, endTime: SCREEN_TIME_KEY }
  125. }
  126. }
  127. export function offsetDate (date, offset) {
  128. const targetDate = new Date(date)
  129. targetDate.setDate(targetDate.getDate() + offset - 1)
  130. return parseTime(targetDate, '{y}-{m}-{d}')
  131. }
  132. export function calculateDay (startDate, endDate) {
  133. return (new Date(endDate) - new Date(startDate)) / 86400000 | 0
  134. }
  135. export function getAssetThumb (asset) {
  136. switch (asset.type) {
  137. case AssetType.IMAGE:
  138. return asset.keyName
  139. case AssetType.VIDEO:
  140. return asset.screenshot === 'analyzing' ? '' : asset.screenshot
  141. case AssetType.PPT:
  142. case AssetType.PDF:
  143. case AssetType.DOC:
  144. if (asset.childrenData?.length) {
  145. return getAssetThumb(asset.childrenData[0])
  146. }
  147. return ''
  148. default:
  149. return ''
  150. }
  151. }
  152. export function getAssetDiff ({ duration }) {
  153. return parseDuration(duration)
  154. }
  155. export function getAssetDuration ({ type, duration }, defaultDuration = 10) {
  156. switch (type) {
  157. case AssetType.STREAMING_MEDIA:
  158. return Number(duration) || 60
  159. default:
  160. return Number(duration) || defaultDuration
  161. }
  162. }
  163. export function getAIState ({ aiAuditState: status, aiAuditMsg: msg }) {
  164. switch (status) {
  165. case 1:
  166. return {
  167. type: 'danger',
  168. label: '不合规'
  169. }
  170. case 2:
  171. return {
  172. type: 'warning',
  173. label: '疑似',
  174. msg
  175. }
  176. case 3:
  177. return {
  178. type: 'info',
  179. label: '审核失败',
  180. msg
  181. }
  182. case 4:
  183. case 5:
  184. case 6:
  185. return {
  186. type: 'primmary',
  187. label: '审核中'
  188. }
  189. case 7:
  190. return {
  191. type: 'success',
  192. label: '通过'
  193. }
  194. case 8:
  195. return {
  196. type: 'info',
  197. label: '无法审核',
  198. msg
  199. }
  200. case 9:
  201. return {
  202. type: 'info',
  203. label: '未开启'
  204. }
  205. default:
  206. return null
  207. }
  208. }
  209. export function transformOrderAssetToAsset ({ keyName, type, adDuration, thumb }) {
  210. if (type) {
  211. const isImage = type === AssetType.IMAGE
  212. return {
  213. tagInfo: AssetTagInfo[AssetTag.AD],
  214. typeInfo: AssetTypeInfo[type],
  215. file: {
  216. type,
  217. url: keyName,
  218. thumb: isImage ? keyName : thumb,
  219. origin: !isImage
  220. },
  221. adDuration: parseDuration(adDuration)
  222. }
  223. }
  224. return {
  225. tagInfo: '资源已删除',
  226. adDuration: parseDuration(adDuration)
  227. }
  228. }
  229. export function transformContractAssetToAsset ({ duration, minioData }) {
  230. if (minioData) {
  231. const { tag, type, keyName } = minioData
  232. return {
  233. tagInfo: AssetTagInfo[tag],
  234. typeInfo: AssetTypeInfo[type],
  235. file: {
  236. type,
  237. url: keyName,
  238. thumb: getAssetThumb(minioData)
  239. },
  240. name: minioData.originalName,
  241. adDuration: parseDuration(duration)
  242. }
  243. }
  244. return {
  245. tagInfo: '资源已删除',
  246. adDuration: parseDuration(duration)
  247. }
  248. }
  249. export function transformContractAssetToDraggableAsset ({ id, keyName, duration, minioData }) {
  250. if (minioData) {
  251. const { tag, type, originalName } = minioData
  252. return {
  253. id,
  254. keyName,
  255. tag,
  256. type,
  257. duration,
  258. key: id,
  259. disabled: type === AssetType.VIDEO,
  260. info: `${AssetTagInfo[tag]} ${AssetTypeInfo[type]}`,
  261. name: originalName,
  262. file: {
  263. type,
  264. url: keyName
  265. }
  266. }
  267. }
  268. return {
  269. id,
  270. keyName,
  271. duration,
  272. key: id,
  273. disabled: true,
  274. name: '资源已删除'
  275. }
  276. }
  277. export function transfromDatasetAssetToDraggableAsset ({ relationId, tag, type, keyName, adDuration, minioData }) {
  278. if (minioData) {
  279. const { originalName, size } = minioData
  280. return {
  281. relationId,
  282. tag,
  283. type,
  284. keyName,
  285. size,
  286. duration: adDuration,
  287. key: relationId,
  288. disabled: type === AssetType.VIDEO,
  289. info: `${AssetTagInfo[tag]} ${AssetTypeInfo[type]}`,
  290. name: originalName,
  291. file: {
  292. type,
  293. url: keyName
  294. }
  295. }
  296. }
  297. return {
  298. relationId,
  299. tag,
  300. type,
  301. keyName,
  302. duration: adDuration,
  303. key: relationId,
  304. disabled: true,
  305. name: '资源已删除'
  306. }
  307. }
  308. export function transformDatasetAssetToAsset (asset) {
  309. if (asset.minioData) {
  310. asset.tagInfo = AssetTagInfo[asset.tag]
  311. asset.typeInfo = AssetTypeInfo[asset.type]
  312. asset.file = {
  313. type: asset.type,
  314. url: asset.keyName,
  315. thumb: asset.minioData ? getAssetThumb(asset.minioData) : null
  316. }
  317. asset.name = asset.minioData.originalName
  318. } else {
  319. asset.tagInfo = '-'
  320. asset.typeInfo = '-'
  321. asset.name = '资源已删除'
  322. }
  323. return asset
  324. }
  325. // dayOfWeek,周日为起始,对应1~7
  326. // 最终cron数据对应的为秒、分、时、日、月、星期、年,例如'30 0 12 14 11 ? 2022'
  327. export function transformToCron (startDate, endDate, dayOfWeek, executeTime) {
  328. let suffix = null
  329. if (startDate === endDate) {
  330. suffix = startDate.split('-').reverse()
  331. suffix.splice(2, 0, '?')
  332. } else if (dayOfWeek === '?') {
  333. suffix = ['*', '*', '?', '*']
  334. } else {
  335. suffix = ['?', '*', dayOfWeek, '*']
  336. }
  337. return executeTime
  338. .split(':')
  339. .map(val => Number(val))
  340. .reverse()
  341. .concat(suffix)
  342. .join(' ')
  343. }
  344. export function transformCron (cron) {
  345. const strArr = cron[0].split(' ')
  346. return {
  347. dayOfWeek: strArr[5],
  348. executeTime: `${strArr[2].padStart(2, '0')}:${strArr[1].padStart(2, '0')}:${strArr[0].padStart(2, '0')}`
  349. }
  350. }
  351. export function transformScreenTaskInfo (startDate, endDate, dayOfWeek, executeTime) {
  352. return {
  353. date: endDate === FOREVER
  354. ? '永久生效'
  355. : startDate === endDate
  356. ? startDate
  357. : `${startDate} - ${endDate}`,
  358. day: startDate === endDate
  359. ? '一次性任务'
  360. : parseCronWeekToInfo(dayOfWeek),
  361. time: executeTime.map(({ start, end }) => start && end
  362. ? `[${start.replace(/:\d{2}$/, '')} - ${end.replace(/:\d{2}$/, '')}]`
  363. : start
  364. ? `${start.replace(/:\d{2}$/, '')} 开启屏幕`
  365. : `${end.replace(/:\d{2}$/, '')} 关闭屏幕`).join(', ')
  366. }
  367. }
  368. export function getCronWeekOptions () {
  369. return [
  370. { value: '2', label: '一' },
  371. { value: '3', label: '二' },
  372. { value: '4', label: '三' },
  373. { value: '5', label: '四' },
  374. { value: '6', label: '五' },
  375. { value: '7', label: '六' },
  376. { value: '1', label: '日' }
  377. ]
  378. }
  379. export function parseCronWeekToInfo (dayOfWeek) {
  380. return dayOfWeek === '?'
  381. ? '每天'
  382. : `每周${dayOfWeek.split(',').map(val => ['', '日', '一', '二', '三', '四', '五', '六'][val]).join('、')}`
  383. }