asset.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. import request, {
  2. tenantRequest,
  3. downloadRequest
  4. } from '@/utils/request.js'
  5. import {
  6. State,
  7. Dataset
  8. } from '@/constant.js'
  9. import {
  10. getAssetThumb,
  11. getAssetDiff,
  12. parseTime
  13. } from '@/utils'
  14. import {
  15. send,
  16. add,
  17. del,
  18. update,
  19. submit,
  20. resolve,
  21. messageSend,
  22. confirmAndSend,
  23. addStatus,
  24. addTenant
  25. } from './base.js'
  26. function download ({ data, headers }, fileName) {
  27. const blob = new Blob([data], { type: headers['content-type'] })
  28. const url = window.URL.createObjectURL(blob)
  29. const dom = document.createElement('a')
  30. dom.href = url
  31. dom.download = decodeURI(fileName)
  32. dom.style.display = 'none'
  33. document.body.appendChild(dom)
  34. dom.click()
  35. dom.parentNode.removeChild(dom)
  36. window.URL.revokeObjectURL(url)
  37. }
  38. export function resourceExport (data) {
  39. return send({
  40. url: '/minio-data/usage/count/export',
  41. method: 'POST',
  42. data
  43. }, downloadRequest).then(response => {
  44. download(response, `资源曝光率${parseTime(new Date(), '{y}{m}{d}{h}{i}{s}')}.zip`)
  45. })
  46. }
  47. export function addAsset (data) {
  48. return add({
  49. url: '/minio-data',
  50. method: 'POST',
  51. data: addTenant(data)
  52. }, tenantRequest)
  53. }
  54. export function getAsset (keyName) {
  55. return send({
  56. url: '/minio-data/queryById',
  57. method: 'GET',
  58. params: { keyName }
  59. })
  60. }
  61. export function getAssetsByQuery (query) {
  62. const { pageNum: currentPage, pageSize: pageCount, typeList, type, ...params } = query
  63. return request({
  64. url: '/minio-data/listByPage',
  65. method: 'POST',
  66. data: addStatus({
  67. currentPage,
  68. pageCount,
  69. typeList: typeList || (type ? [type] : void 0),
  70. ...params
  71. })
  72. }).then(({ data, totalCount }) => {
  73. data.forEach(asset => {
  74. if (asset.status === State.DRAFT) {
  75. asset.draft = '解析中'
  76. } else if (asset.status === State.TRANSCODE_FAILURE) {
  77. asset.draft = '转码失败'
  78. } else {
  79. const tag = asset.tag
  80. asset.file = {
  81. type: asset.type,
  82. url: asset.keyName,
  83. thumb: getAssetThumb(asset),
  84. files: asset.childrenData?.length
  85. ? asset.childrenData.map(({ type, keyName, size, md5, sort }) => {
  86. // 仅会为图片
  87. return { tag, type, keyName, size, md5, sort }
  88. })
  89. : null
  90. }
  91. }
  92. asset.diff = getAssetDiff(asset)
  93. })
  94. return { data, totalCount }
  95. })
  96. }
  97. export function updateAsset (data) {
  98. return update({
  99. url: '/minio-data/update',
  100. method: 'POST',
  101. data
  102. })
  103. }
  104. export function deleteAsset ({ keyName, originalName }) {
  105. return del({
  106. url: '/minio-data/delete',
  107. method: 'DELETE',
  108. params: { keyName }
  109. }, originalName)
  110. }
  111. export function deleteAssets (keyNames) {
  112. return del({
  113. url: '/minio-data/batchDelete',
  114. method: 'POST',
  115. data: keyNames
  116. }, '所选资源')
  117. }
  118. export function getAssetUrl (keyName) {
  119. return `${process.env.VUE_APP_MINIO}/${keyName}`
  120. }
  121. const LIMIT_SIZE = 1024 * 1024
  122. export function getThumbnailUrl (item, option) {
  123. let url
  124. if (item && typeof item === 'object') {
  125. const { size, keyName } = item
  126. if (size <= LIMIT_SIZE) {
  127. return getAssetUrl(keyName)
  128. }
  129. url = getAssetUrl(keyName)
  130. option = getImageProxyOption(option, size)
  131. } else {
  132. url = getAssetUrl(item)
  133. option = getImageProxyOption(option)
  134. }
  135. if (url.charAt(0) === '/') {
  136. url = `${process.env.VUE_APP_THUMBNAIL_ORIGIN || location.origin}${url}`
  137. }
  138. return `${process.env.VUE_APP_THUMBNAIL}/${option}/${url}`
  139. }
  140. function getImageProxyOption (option, size) {
  141. switch (option) {
  142. case 'size':
  143. return size ? `q${Math.ceil(LIMIT_SIZE * 100 / size)}` : 'q60'
  144. default:
  145. return option || 'x0.2,q30'
  146. }
  147. }
  148. export function submitAsset ({ keyName, originalName }) {
  149. return submit({
  150. url: '/minio-data/submit',
  151. method: 'GET',
  152. params: { keyName }
  153. }, originalName)
  154. }
  155. export function resolveAsset ({ keyName, originalName }) {
  156. return resolve({
  157. url: '/minio-data/reviewed',
  158. method: 'GET',
  159. params: { keyName }
  160. }, originalName)
  161. }
  162. export function rejectAsset ({ keyName }, remark) {
  163. return messageSend({
  164. url: '/minio-data/reject',
  165. method: 'POST',
  166. data: { keyName, remark }
  167. }, '驳回')
  168. }
  169. export function getAssetSubTags () {
  170. return tenantRequest({
  171. url: '/minio-data/subtag/queryList',
  172. method: 'GET',
  173. params: addTenant({})
  174. })
  175. }
  176. export function getAssetSubTagsByTenant (query) {
  177. const { pageNum: pageIndex, pageSize, ...params } = query
  178. return tenantRequest({
  179. url: '/minio-data/subtag/queryListPage',
  180. method: 'GET',
  181. params: addTenant({
  182. pageIndex, pageSize,
  183. ...params
  184. })
  185. })
  186. }
  187. export function addAssetSubTag (data) {
  188. return add({
  189. url: '/minio-data/subtag/add',
  190. method: 'POST',
  191. data: addTenant(data)
  192. }, tenantRequest)
  193. }
  194. export function updateAssetSubTag (data) {
  195. return update({
  196. url: '/minio-data/subtag/modify',
  197. method: 'PUT',
  198. data
  199. })
  200. }
  201. export function deleteAssetSubTag ({ id, name }) {
  202. return del({
  203. url: '/minio-data/subtag/delBatchByIds',
  204. method: 'POST',
  205. data: [id]
  206. }, name)
  207. }
  208. export function deleteAssetSubTags (ids) {
  209. return del({
  210. url: '/minio-data/subtag/delBatchByIds',
  211. method: 'POST',
  212. data: ids
  213. }, '所选标签')
  214. }
  215. export function getDatasets (query) {
  216. const { pageNum: pageIndex, pageSize, ...params } = query
  217. return tenantRequest({
  218. url: '/media/dataset/pageQuery',
  219. method: 'GET',
  220. params: addTenant({
  221. pageIndex, pageSize,
  222. ...params
  223. })
  224. })
  225. }
  226. export function addDataset (data) {
  227. return add({
  228. url: '/media/dataset',
  229. method: 'POST',
  230. data: addTenant(data)
  231. }, tenantRequest)
  232. }
  233. export function copyDataset (data) {
  234. return messageSend({
  235. url: '/media/dataset/copy',
  236. method: 'POST',
  237. data
  238. }, '复制')
  239. }
  240. export function updateDataset (data) {
  241. return update({
  242. url: '/media/dataset',
  243. method: 'PUT',
  244. data
  245. })
  246. }
  247. export function getFillDataset (id) {
  248. return request({
  249. url: `/media/dataset/${id}`,
  250. params: {
  251. type: Dataset.FILL,
  252. flag: 1
  253. }
  254. })
  255. }
  256. export function getCommonDataset (id) {
  257. return request({
  258. url: '/media/dataset/order',
  259. params: {
  260. id,
  261. flag: 1
  262. }
  263. })
  264. }
  265. export function deleteDataset ({ id, name }) {
  266. return del({
  267. url: `/media/dataset/${id}`,
  268. method: 'DELETE'
  269. }, name)
  270. }
  271. export function bindAssetsToDataset (datasetId, assets) {
  272. return messageSend({
  273. url: '/media/dataset/batchBindAsset',
  274. method: 'POST',
  275. data: assets.map(item => {
  276. return {
  277. datasetId,
  278. ...item
  279. }
  280. })
  281. }, '添加')
  282. }
  283. export function updateDatasetAssets (datasetId, assets) {
  284. return update({
  285. url: '/media/dataset/orderBindAsset',
  286. method: 'POST',
  287. data: {
  288. id: datasetId,
  289. relationList: assets
  290. }
  291. })
  292. }
  293. export function getDevicesByDataset (query) {
  294. const { pageNum: pageIndex, pageSize, ...params } = query
  295. return request({
  296. url: '/media/dataset/pageQueryDevice',
  297. method: 'GET',
  298. params: {
  299. pageIndex, pageSize,
  300. ...params
  301. }
  302. })
  303. }
  304. export function countByDay (query) {
  305. return request({
  306. url: '/minio-data/usage/countByDay',
  307. method: 'GET',
  308. params: query
  309. })
  310. }
  311. // 查询媒资执行队列
  312. export function listActivate (query) {
  313. return request({
  314. url: '/minio-data/mediaProcessTask/listActivate',
  315. method: 'GET',
  316. params: query
  317. })
  318. }
  319. export function mediaList (query) {
  320. const { pageNum: pageIndex, pageSize, ...params } = query
  321. return tenantRequest({
  322. url: '/minio-data/mediaProcessTask/pageQuery',
  323. method: 'GET',
  324. params: addTenant({
  325. pageIndex, pageSize,
  326. ...params
  327. })
  328. })
  329. }
  330. // 转换旧媒资
  331. export function secondaryTransList (data) {
  332. return request({
  333. url: '/minio-data/mediaProcessTask/batchSave',
  334. method: 'POST',
  335. data
  336. })
  337. }
  338. export function treeLocation (data) {
  339. return request({
  340. url: '/minio-data/treeLocation',
  341. method: 'PUT',
  342. data
  343. })
  344. }
  345. export function getDatasetByDevice (id) {
  346. return request({
  347. url: `/media/dataset/${id}`,
  348. params: {
  349. type: 1,
  350. flag: 1
  351. }
  352. })
  353. }
  354. export function bindDatasetToDevice (data) {
  355. return messageSend({
  356. url: '/media/dataset/bindDevice',
  357. method: 'POST',
  358. data
  359. }, '绑定')
  360. }
  361. export function unbindDatasetByDevice ({ id, name }) {
  362. return confirmAndSend('解绑', name, {
  363. url: '/media/dataset/batchUnbindDevice',
  364. method: 'POST',
  365. data: [id]
  366. })
  367. }
  368. export function unbindDatasetByDevices (ids) {
  369. return confirmAndSend('解绑', '所选设备', {
  370. url: '/media/dataset/batchUnbindDevice',
  371. method: 'POST',
  372. data: ids
  373. })
  374. }
  375. export function unbindAssetsFromDataset (datasetId, keyNames) {
  376. return messageSend({
  377. url: `/media/dataset/batchUnbindAsset/${datasetId}`,
  378. method: 'POST',
  379. data: keyNames
  380. }, '移除')
  381. }
  382. export function updateDatasetAssetDuration (relationId, adDuration) {
  383. return update({
  384. url: '/media/dataset/assetChangDuration',
  385. method: 'POST',
  386. data: {
  387. relationId,
  388. adDuration
  389. }
  390. })
  391. }