index.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809
  1. import {
  2. getClientTypeList
  3. } from "@/api/device/version";
  4. import {
  5. audioType,
  6. platform
  7. } from "@/api/music/platform";
  8. import {
  9. options
  10. } from "@/api/music/radio";
  11. import {
  12. list as categoryList
  13. } from "@/api/device/category";
  14. import {
  15. list as functionList
  16. } from "@/api/device/function";
  17. import {
  18. options as blogClass
  19. } from "@/api/music/blogclass";
  20. import {
  21. options as mapList
  22. } from "@/api/operation/map";
  23. // 设备列表
  24. const devMixin = {
  25. data() {
  26. return {
  27. devOptions: [],
  28. };
  29. },
  30. methods: {
  31. getDevList(e) {
  32. getClientTypeList(e ? e : {}).then((res) => {
  33. // console.log("获取设备列表==" + JSON.stringify(res));
  34. if (res.code === 0) {
  35. res.data.map((i) => {
  36. this.devOptions.push({
  37. value: i.clientTypeId,
  38. label: i.name,
  39. });
  40. });
  41. }
  42. });
  43. },
  44. },
  45. };
  46. // 设备模式
  47. const devModeMixin = {
  48. data() {
  49. return {
  50. devModeOptions: [{
  51. value: 1,
  52. label: "蓝牙",
  53. disabled: false,
  54. },
  55. {
  56. value: 2,
  57. label: "WIFI",
  58. disabled: false,
  59. },
  60. {
  61. value: 3,
  62. label: "传统蓝牙",
  63. disabled: false,
  64. },
  65. {
  66. value: 4,
  67. label: "4G",
  68. disabled: false,
  69. },
  70. ],
  71. };
  72. },
  73. };
  74. // 设备分类
  75. const devCategoryMixin = {
  76. data() {
  77. return {
  78. categoryOptions: [],
  79. };
  80. },
  81. methods: {
  82. getCateGory(status) {
  83. categoryList({
  84. status: status,
  85. isDelete: 0,
  86. }).then((res) => {
  87. res.data.map((i) => {
  88. this.categoryOptions.push({
  89. value: i.id,
  90. label: i.name,
  91. });
  92. });
  93. });
  94. },
  95. },
  96. };
  97. // 设备类型
  98. const devTypeMixin = {
  99. data() {
  100. return {
  101. devTypeOptions: [{
  102. value: 0,
  103. label: "音响",
  104. },
  105. {
  106. value: 1,
  107. label: "耳机",
  108. },
  109. {
  110. value: 2,
  111. label: "穿戴",
  112. },
  113. ],
  114. };
  115. },
  116. };
  117. // 功能权限
  118. const devFucMixin = {
  119. data() {
  120. return {
  121. devFucOptions: [],
  122. };
  123. },
  124. mounted() {
  125. functionList().then((res) => {
  126. if (res.code === 0) {
  127. res.data.map((i) => {
  128. this.devFucOptions.push({
  129. value: i.id,
  130. label: i.name,
  131. });
  132. });
  133. }
  134. });
  135. },
  136. };
  137. // 是否
  138. const yesOrNoMixin = {
  139. data() {
  140. return {
  141. yesOrNoOptions: [{
  142. value: 0,
  143. label: "否",
  144. },
  145. {
  146. value: 1,
  147. label: "是",
  148. },
  149. ],
  150. };
  151. },
  152. };
  153. // 服务时长
  154. const serviceTimeMixin = {
  155. data() {
  156. return {
  157. serviceTimeOptions: [{
  158. value: -1,
  159. label: "1天",
  160. },
  161. {
  162. value: 1,
  163. label: "7天",
  164. },
  165. {
  166. value: 2,
  167. label: "14天",
  168. },
  169. {
  170. value: 3,
  171. label: "1个月",
  172. },
  173. {
  174. value: 4,
  175. label: "3个月",
  176. },
  177. {
  178. value: 5,
  179. label: "6个月",
  180. },
  181. {
  182. value: 6,
  183. label: "1年",
  184. },
  185. {
  186. value: 7,
  187. label: "2年",
  188. },
  189. {
  190. value: 8,
  191. label: "3年",
  192. },
  193. {
  194. value: 9,
  195. label: "5年",
  196. },
  197. {
  198. value: 0,
  199. label: "永久",
  200. },
  201. ],
  202. };
  203. },
  204. };
  205. const serviceTypeMixin = {
  206. data() {
  207. return {
  208. // 服务类型
  209. serviceTypeOptions: [{
  210. value: 0,
  211. label: "签到",
  212. },
  213. {
  214. value: 1,
  215. label: "收听奖励",
  216. },
  217. {
  218. value: 2,
  219. label: "积分抽奖",
  220. },
  221. {
  222. value: 3,
  223. label: "打开手机通知",
  224. },
  225. {
  226. value: 4,
  227. label: "积分兑换",
  228. },
  229. {
  230. value: 5,
  231. label: "会员中心",
  232. },
  233. ],
  234. };
  235. },
  236. };
  237. // 是否免费
  238. const isFreeMixin = {
  239. data() {
  240. return {
  241. freeOptions: [{
  242. value: 0,
  243. label: "付费",
  244. },
  245. {
  246. value: 1,
  247. label: "免费",
  248. },
  249. ],
  250. };
  251. },
  252. };
  253. // 音频类型
  254. const audioMixin = {
  255. data() {
  256. return {
  257. audioOptions: [{
  258. value: 2,
  259. label: "广播电台",
  260. },
  261. {
  262. value: 6,
  263. label: "节目",
  264. },
  265. {
  266. value: 8,
  267. label: "播客专辑",
  268. },
  269. {
  270. value: 9,
  271. label: "歌手",
  272. },
  273. {
  274. value: 10,
  275. label: "歌单",
  276. },
  277. {
  278. value: 11,
  279. label: "歌曲",
  280. },
  281. {
  282. value: 12,
  283. label: "主播",
  284. },
  285. {
  286. value: 15,
  287. label: "音乐专辑",
  288. },
  289. ],
  290. audioTypeOptions: [],
  291. };
  292. },
  293. methods: {
  294. // 通过平台获取对应的音频类型
  295. getAudioType(e) {
  296. return new Promise((resolve, reject) => {
  297. platform(e).then((res) => {
  298. if (res.code === 0) {
  299. resolve(
  300. (this.audioTypeOptions = res.data[0].audioType
  301. .split(",")
  302. .map((i) => this.audioOptions.find((j) => j.value == i)))
  303. );
  304. }
  305. });
  306. }).catch((err) => {
  307. reject();
  308. });
  309. },
  310. },
  311. };
  312. // 性别
  313. const sexMixin = {
  314. data() {
  315. return {
  316. sexOptions: [{
  317. value: 0,
  318. label: "未知",
  319. },
  320. {
  321. value: 1,
  322. label: "男",
  323. },
  324. {
  325. value: 2,
  326. label: "女",
  327. },
  328. ],
  329. };
  330. },
  331. };
  332. // 所属地区
  333. const regionMixin = {
  334. data() {
  335. return {
  336. regionOptions: [{
  337. value: 0,
  338. label: "内地",
  339. },
  340. {
  341. value: 1,
  342. label: "港台",
  343. },
  344. {
  345. value: 2,
  346. label: "欧美",
  347. },
  348. {
  349. value: 3,
  350. label: "日本",
  351. },
  352. {
  353. value: 4,
  354. label: "韩国",
  355. },
  356. {
  357. value: 5,
  358. label: "其他",
  359. },
  360. ],
  361. };
  362. },
  363. };
  364. // 语种
  365. const languageMixin = {
  366. data() {
  367. return {
  368. languageOptions: [{
  369. value: 1,
  370. label: "国语",
  371. },
  372. {
  373. value: 2,
  374. label: "欧美",
  375. },
  376. {
  377. value: 3,
  378. label: "粤语",
  379. },
  380. {
  381. value: 4,
  382. label: "韩语",
  383. },
  384. {
  385. value: 5,
  386. label: "日语",
  387. },
  388. {
  389. value: 6,
  390. label: "其他",
  391. },
  392. ],
  393. };
  394. },
  395. };
  396. // 所属平台
  397. const platformMixin = {
  398. data() {
  399. return {
  400. platformTypeOptions: [],
  401. platformOptions: [],
  402. };
  403. },
  404. methods: {
  405. // 通过音频类型获取对应的平台
  406. getPlatform(e) {
  407. this.platformOptions = [];
  408. return new Promise((resolve, reject) => {
  409. audioType(e)
  410. .then((res) => {
  411. if (res.code === 0) {
  412. res.data.map((i) =>
  413. this.platformOptions.push({
  414. value: Number(i.id),
  415. label: i.name,
  416. joinType: i.joinType,
  417. })
  418. );
  419. e ? (this.platformTypeOptions = this.platformOptions) : "";
  420. resolve(this.platformOptions, this.platformTypeOptions);
  421. }
  422. })
  423. .catch((err) => {
  424. reject();
  425. });
  426. });
  427. },
  428. // 第三方资源平台不可编辑
  429. disabledPlatformId(e) {
  430. let value = this.platformOptions.find((i) => i.value == e);
  431. if (value) {
  432. return value.joinType.includes("1") ? true : false;
  433. }
  434. },
  435. // 禁止选择第三方平台
  436. disabledJoinType(e) {
  437. return e.split(",").includes("1");
  438. },
  439. },
  440. };
  441. // 上下架状态
  442. const onOrOffMixin = {
  443. data() {
  444. return {
  445. onOrOffOptions: [{
  446. value: 1,
  447. label: "上架",
  448. },
  449. {
  450. value: 2,
  451. label: "下架",
  452. },
  453. ],
  454. };
  455. },
  456. };
  457. // 上下架状态
  458. const disabledMixin = {
  459. data() {
  460. return {
  461. disabledOptions: [{
  462. value: 0,
  463. label: "上架",
  464. },
  465. {
  466. value: 1,
  467. label: "下架",
  468. },
  469. ],
  470. };
  471. },
  472. };
  473. // 付费类型
  474. const payTypeMixin = {
  475. data() {
  476. return {
  477. payTypeOptions: [{
  478. value: 1,
  479. label: "免费",
  480. },
  481. {
  482. value: 2,
  483. label: "全集购买",
  484. },
  485. {
  486. value: 3,
  487. label: "单集购买",
  488. },
  489. {
  490. value: 4,
  491. label: "Vip专享",
  492. },
  493. {
  494. value: 5,
  495. label: "亲子付费",
  496. },
  497. ],
  498. };
  499. },
  500. };
  501. // 专辑类型
  502. const albumTypeMixin = {
  503. data() {
  504. return {
  505. albumTypeOptions: [{
  506. value: 1,
  507. label: "Single",
  508. },
  509. {
  510. value: 2,
  511. label: "EP",
  512. },
  513. {
  514. value: 3,
  515. label: "Album",
  516. },
  517. {
  518. value: 4,
  519. label: "古典专辑",
  520. },
  521. {
  522. value: 5,
  523. label: "自制专辑",
  524. },
  525. ],
  526. };
  527. },
  528. };
  529. // 地域分类
  530. const addressMixin = {
  531. data() {
  532. return {
  533. addressOptions: [],
  534. };
  535. },
  536. mounted() {
  537. this.getAddress();
  538. },
  539. methods: {
  540. getAddress() {
  541. options({
  542. type: 2
  543. }).then((res) => {
  544. if (res.code === 0) {
  545. res.data.map((i) => {
  546. this.addressOptions.push({
  547. value: i.id,
  548. label: i.name,
  549. });
  550. });
  551. }
  552. });
  553. },
  554. },
  555. };
  556. // 广播分类
  557. const contentMixin = {
  558. data() {
  559. return {
  560. contentOptions: [],
  561. };
  562. },
  563. methods: {
  564. getContent(data) {
  565. options(data).then((res) => {
  566. if (res.code === 0) {
  567. res.data.map((i) => {
  568. this.contentOptions.push({
  569. value: i.id,
  570. label: i.name,
  571. });
  572. });
  573. }
  574. });
  575. },
  576. },
  577. };
  578. // 播客分类
  579. const blogClassMixin = {
  580. data() {
  581. return {
  582. blogClassOptions: [],
  583. };
  584. },
  585. mounted() {
  586. blogClass().then((res) => {
  587. if (res.code === 0) {
  588. res.data.map((i) => {
  589. this.blogClassOptions.push({
  590. value: i.id,
  591. label: i.name,
  592. });
  593. });
  594. }
  595. });
  596. },
  597. };
  598. // 时效性
  599. const currentMixin = {
  600. data() {
  601. return {
  602. currentOptions: [{
  603. value: 0,
  604. label: "已生效",
  605. },
  606. {
  607. value: 1,
  608. label: "待生效",
  609. },
  610. {
  611. value: 2,
  612. label: "已失效",
  613. },
  614. ],
  615. };
  616. },
  617. };
  618. // 封面类型
  619. const coverMixin = {
  620. data() {
  621. return {
  622. coverOptions: [{
  623. value: 0,
  624. label: "自定义封面",
  625. },
  626. {
  627. value: 1,
  628. label: "内容封面",
  629. },
  630. ],
  631. };
  632. },
  633. };
  634. // 通过频道属性查找音频类型
  635. const channelMixin = {
  636. data() {
  637. return {
  638. channelOptions: {
  639. 2: [{
  640. value: 2,
  641. label: "广播电台",
  642. }, ],
  643. 6: [{
  644. value: 6,
  645. label: "节目",
  646. },
  647. {
  648. value: 11,
  649. label: "歌曲",
  650. },
  651. ],
  652. 8: [{
  653. value: 8,
  654. label: "播客专辑",
  655. },
  656. {
  657. value: 10,
  658. label: "歌单",
  659. },
  660. {
  661. value: 15,
  662. label: "音乐专辑",
  663. },
  664. ],
  665. 16: [{
  666. value: 8,
  667. label: "播客专辑",
  668. }, ],
  669. 17: [{
  670. value: 2,
  671. label: "广播电台",
  672. }, ],
  673. },
  674. };
  675. },
  676. };
  677. // 手机系统
  678. const systemMixin = {
  679. data() {
  680. return {
  681. systemOptions: [{
  682. value: 1,
  683. label: "Android",
  684. },
  685. {
  686. value: 2,
  687. label: "iOS",
  688. },
  689. ],
  690. };
  691. },
  692. };
  693. // 省市区
  694. const mapMixin = {
  695. data() {
  696. return {
  697. mapOptions: [],
  698. };
  699. },
  700. async mounted() {
  701. await this.getMapOptions();
  702. },
  703. methods: {
  704. // 省市区
  705. getMapOptions() {
  706. return new Promise((reslove, reject) => {
  707. mapList().then((res) => {
  708. if (res.code === 0) {
  709. if (this.$route.path.search("/music/radio") !== -1) {
  710. res.data.unshift({
  711. adcode: "1",
  712. childList: [],
  713. citycode: "",
  714. id: "1",
  715. name: "中央台",
  716. });
  717. }
  718. reslove((this.mapOptions = res.data));
  719. }
  720. });
  721. });
  722. },
  723. areaFormatter(row) {
  724. if (this.mapOptions.length > 0) {
  725. let province = row.province ?
  726. this.mapOptions.find((i) => i.id == row.province) :
  727. "";
  728. let provinceName = province ? province.name : "";
  729. let city =
  730. province && province.childList.length > 0 ?
  731. province.childList.find((i) => i.id == row.city) :
  732. "";
  733. let cityName = city ? `-${city.name}` : "";
  734. let area =
  735. city && city.childList.length > 0 ?
  736. city.childList.find((i) => i.id == row.area) :
  737. "";
  738. let areaName = area ? `-${area.name}` : "";
  739. return `${provinceName}${cityName}${areaName}`;
  740. }
  741. },
  742. },
  743. };
  744. export {
  745. addressMixin,
  746. albumTypeMixin,
  747. audioMixin,
  748. blogClassMixin,
  749. channelMixin,
  750. contentMixin,
  751. coverMixin,
  752. currentMixin,
  753. devCategoryMixin,
  754. devFucMixin,
  755. devMixin,
  756. devModeMixin,
  757. devTypeMixin,
  758. disabledMixin,
  759. isFreeMixin,
  760. languageMixin,
  761. mapMixin,
  762. onOrOffMixin,
  763. payTypeMixin,
  764. platformMixin,
  765. regionMixin,
  766. serviceTimeMixin,
  767. serviceTypeMixin,
  768. sexMixin,
  769. systemMixin,
  770. yesOrNoMixin
  771. };