index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  1. <template>
  2. <view class="content">
  3. <view class="one">
  4. <video :src="info.vUrl" :poster="info.iUrl" :title="info.title" controls :show-center-play-btn="false"
  5. :show-mute-btn="true" :enable-play-gesture="true" :vslide-gesture-in-fullscreen="true" v-if="video_user_vip==true"></video>
  6. <image :src="info.iUrl" mode="" class="image" v-else-if="video_user_vip==false"></image>
  7. </view>
  8. <view class="two">
  9. <view class="two_1">
  10. <view :class="['list',active==index?'active':'']" v-for="(item,index) in tabList" :key="index"
  11. @tap="tabChange(index)">
  12. <span>{{item.title}}</span>
  13. </view>
  14. </view>
  15. <view class="two_2">
  16. <view class="tab_1" v-if="active===0">
  17. <view class="btn">
  18. <view class="btn_1" @tap="toLikes()">
  19. <span class="span">
  20. <uni-icons :type="likeInfo.is==true?'heart-filled':'heart'" size="15"
  21. color="va(--rgbfff)">
  22. </uni-icons>
  23. <span>喜欢</span>
  24. </span>
  25. </view>
  26. <view class="btn_1" @tap="toCollects()">
  27. <span class="span">
  28. <uni-icons :type="collectInfo.is==true?'heart-filled':'heart'" size="15"
  29. color="va(--rgbfff)">
  30. </uni-icons>
  31. <span>收藏</span>
  32. </span>
  33. </view>
  34. <view class="btn_1" @tap="toShare()">
  35. <span class="span">
  36. <uni-icons type="redo-filled" size="15" color="va(--rgbfff)"></uni-icons>
  37. <span>分享</span>
  38. </span>
  39. </view>
  40. </view>
  41. <view class="title">
  42. <span>
  43. <uni-icons type="heart-filled" size="15" color="var(--rgbfff)"></uni-icons>:
  44. </span>
  45. <span>
  46. <uni-icons type="vip-filled" size="15" color="var(--rgbffd)" v-if="info.is_vip=='1'">
  47. </uni-icons>{{info.title}}
  48. </span>
  49. </view>
  50. <view class="actor">
  51. <span>
  52. <uni-icons type="person-filled" size="15" color="var(--rgbfff)"></uni-icons>:
  53. </span>
  54. <span
  55. @tap="toCommon('pagesVideo/more/index',`head_actor=${info.head_actor}`)">{{info.head_actor_name}}</span>
  56. </view>
  57. <view class="actor">
  58. <view class="actor_1">
  59. <uni-icons type="staff" size="15" color="var(--rgbfff)"></uni-icons>:
  60. </view>
  61. <view class="actor_2">
  62. <scroll-view class="actor_scroll_view" scroll-x="true">
  63. <view class="actorList" v-for="(item,index) in info.actorList" :key="index"
  64. @tap="toCommon('pagesVideo/more/index',`head_actor=${item._id}`)">
  65. <image class="image"
  66. :src="item.img_url&&item.img_url.length>0?item.img_url[0].url:''" mode="">
  67. </image>
  68. <view class="name textOver">
  69. {{item.title}}
  70. </view>
  71. </view>
  72. </scroll-view>
  73. </view>
  74. </view>
  75. <view class="brief">
  76. <span>
  77. <uni-icons type="star-filled" size="15" color="var(--rgbfff)"></uni-icons>:
  78. </span>
  79. <span>{{info.brief}}</span>
  80. </view>
  81. <view class="other">
  82. <view class="other_1">
  83. <uni-icons type="videocam-filled" size="15" color="var(--rgbfff)"></uni-icons>:
  84. </view>
  85. <view class="other_2" s>
  86. <view class="firmvideoList" v-for="(item,index) in firmvideoList" :key="index"
  87. @tap="videoView(item)">
  88. <image class="image" :src="item.img_url&&item.img_url.length>0?item.img_url[0].url:''"
  89. mode="">
  90. </image>
  91. <view class="name textOver">
  92. {{item.title}}
  93. </view>
  94. <view class="other">
  95. <view class="other_1">
  96. <uni-icons type="eye" color="var(--rgbfff)" size="12"></uni-icons>
  97. {{item.view_num}}
  98. </view>
  99. <view class="other_2">
  100. {{item.time_num}}
  101. </view>
  102. </view>
  103. </view>
  104. </view>
  105. </view>
  106. </view>
  107. <view class="tab_2" v-else-if="active===1">
  108. <scroll-view scroll-y="true" class="scroll-view" @scrolltolower="toPage" @scroll="toScroll">
  109. <view class="list-scroll-view">
  110. <view class="tab_2_1">
  111. <view class="discussList" v-for="(item,index) in discussList" :key="index">
  112. <view class="dis_1">
  113. <view class="l">
  114. <image class="image"
  115. :src="item.user_img_url&&item.user_img_url.length>0?item.user_img_url[0].url:''"
  116. mode="">
  117. </view>
  118. <view class="c">
  119. {{item.user_name}}
  120. </view>
  121. <view class="r">
  122. {{item.create_time}}
  123. </view>
  124. </view>
  125. <view class="dis_2">
  126. {{item.content}}
  127. </view>
  128. </view>
  129. </view>
  130. </view>
  131. </scroll-view>
  132. <view class="chatBtn">
  133. <button size="mini" @tap="diaChat">评论</button>
  134. </view>
  135. </view>
  136. </view>
  137. </view>
  138. <uni-popup ref="dialog" type="dialog">
  139. <uni-popup-dialog mode="input" title="评论" :before-close="true" @close="diaClose" @confirm="diaSave">
  140. </uni-popup-dialog>
  141. </uni-popup>
  142. </view>
  143. </template>
  144. <script>
  145. export default {
  146. data() {
  147. return {
  148. // 基本信息
  149. basicInfo: {},
  150. // 用户信息
  151. user: {},
  152. // 判断视频为VIP.判断登录是否为VIP,
  153. video_user_vip: false,
  154. // 获取当前地址
  155. locationInfo: {},
  156. id: '',
  157. info: {
  158. // 其他演员
  159. actorList: []
  160. },
  161. tabList: [ // 选项卡
  162. {
  163. title: '详情'
  164. },
  165. {
  166. title: '评论'
  167. }
  168. ],
  169. active: 0,
  170. // 详情-start
  171. firmvideoList: [ // 相关视频
  172. ],
  173. // 是否喜欢
  174. likeInfo: {},
  175. // 是否收藏
  176. collectInfo: {},
  177. // 详情-ends
  178. // 讨论-start
  179. discussList: [],
  180. dtotal: 0,
  181. dpage: 0,
  182. dskip: 0,
  183. dlimit: 5,
  184. // 数据是否触底
  185. is_bottom: false,
  186. scrollTop: 0,
  187. // 讨论-end
  188. }
  189. },
  190. onShow() {
  191. const that = this;
  192. // 基本信息
  193. that.searchBasic();
  194. // 获取当前地址
  195. that.searchLocal();
  196. // 已登录,相关信息查询
  197. that.searchUser();
  198. },
  199. onLoad(options) {
  200. const that = this;
  201. that.$set(that, `id`, options.id || '63fd915b134900004000482c');
  202. // 详细信息
  203. that.search()
  204. // 查看评论
  205. that.searchDiscuss();
  206. },
  207. methods: {
  208. // 基本信息
  209. searchBasic() {
  210. const that = this;
  211. uni.getStorage({
  212. key: 'basicInfo',
  213. success: (res) => {
  214. let data = res.data
  215. data.account_btn = data.account_btn.sort((a, b) => {
  216. return a.sort - b.sort
  217. });
  218. that.$set(that, `basicInfo`, data);
  219. }
  220. })
  221. },
  222. // 获取当前地址
  223. searchLocal() {
  224. const that = this;
  225. // 获取位置信息,待做
  226. // uni.getLocation({
  227. // type: 'gcj02',
  228. // isHighAccuracy: true,
  229. // geocode: true,
  230. // success: (res) => {
  231. // console.log(res);
  232. // },
  233. // fail: (err) => {
  234. // console.log(err);
  235. // }
  236. // })
  237. },
  238. // 查询用户
  239. searchUser() {
  240. const that = this;
  241. uni.getStorage({
  242. key: 'token',
  243. success: async (res) => {
  244. let user = that.$jwt(res.data);
  245. let arr = await that.$api(`user/${user._id}`, 'GET');
  246. if (arr.errcode == '0') {
  247. that.$set(that, `user`, arr.data);
  248. // 已有用户信息,查询是否喜欢/收藏
  249. that.searchLikes();
  250. that.searchCollects();
  251. }
  252. },
  253. fail: (err) => {
  254. console.log('暂无用户信息');
  255. }
  256. })
  257. },
  258. // 查询喜欢
  259. async searchLikes() {
  260. const that = this;
  261. let user = that.user;
  262. let res = await that.$api('likes/selikes', 'POST', {
  263. user_id: user._id,
  264. video_id: that.id
  265. })
  266. if (res.errcode == '0') {
  267. that.$set(that, `likeInfo`, res.data)
  268. }
  269. },
  270. // 查询收藏
  271. async searchCollects() {
  272. const that = this;
  273. let user = that.user;
  274. let res = await that.$api('collects/secollects', 'POST', {
  275. user_id: user._id,
  276. video_id: that.id
  277. })
  278. if (res.errcode == '0') {
  279. that.$set(that, `collectInfo`, res.data)
  280. }
  281. },
  282. // 详细信息
  283. async search() {
  284. const that = this;
  285. let user = that.user;
  286. let res;
  287. res = await that.$api(`videos/${that.id}`, 'GET', {})
  288. if (res.errcode == '0') {
  289. // 赋值名字
  290. let data = res.data;
  291. uni.setNavigationBarTitle({
  292. title: data.title
  293. });
  294. if (data.video_url && data.video_url.length > 0) data.vUrl = data.video_url[0].url;
  295. if (data.img_url && data.img_url.length > 0) data.iUrl = data.img_url[0].url;
  296. if (data && data.head_actor) data.head_actor_name = await that.searchName(data.head_actor);
  297. if (data && data.actor && data.actor.length > 0) data.actorList = await that
  298. .searchlistName(data
  299. .actor);
  300. that.$set(that, `info`, data);
  301. // 观看次数统计
  302. that.updateNum(data);
  303. // 查询相关视频,相同厂商
  304. that.searchfirm(data.firm_id);
  305. // 判断是否为VIP视频,判断是否登录,判断是否为VIP用户
  306. that.judgeVip(data);
  307. }
  308. },
  309. // 领衔演员姓名
  310. async searchName(e) {
  311. const that = this;
  312. let res;
  313. res = await that.$api(`scenedata/${e}`, 'GET', {});
  314. if (res.errcode == '0') {
  315. if (res.data && res.data.title) return res.data.title
  316. else return '暂无'
  317. }
  318. },
  319. // 演员姓名列表
  320. async searchlistName(e) {
  321. const that = this;
  322. let list = [];
  323. for (let val of e) {
  324. let res = await that.$api(`scenedata/${val}`, 'GET', {})
  325. if (res.errcode = '0') {
  326. list.push({
  327. _id: res.data._id,
  328. title: res.data.title,
  329. img_url: res.data.img_url
  330. })
  331. }
  332. }
  333. return list
  334. },
  335. // 观看次数统计
  336. async updateNum(e) {
  337. const that = this;
  338. let data = {
  339. id: e.id,
  340. view_num: e.view_num + 1
  341. }
  342. let res = await that.$api(`videos/${data.id}`, 'POST', data)
  343. if (res.errcode == '0') {
  344. console.log('观看统计完成,+1');
  345. }
  346. },
  347. // 相同厂商其他视频
  348. async searchfirm(firm_id) {
  349. const that = this;
  350. let res;
  351. res = await that.$api('videos', 'GET', {
  352. firm_id: firm_id,
  353. skip: 0,
  354. limit: 6
  355. })
  356. if (res.errcode == '0') {
  357. that.$set(that, `firmvideoList`, res.data)
  358. }
  359. },
  360. // 判断vip
  361. judgeVip(video) {
  362. const that = this;
  363. let user = that.user;
  364. // 1:判断是否为vip视频--0:不是vip 1:是vip
  365. if (video && video.is_vip == '1') {
  366. // 2:用户是否登录--0:不是vip 1:是vip
  367. if (user && user._id) {
  368. if (user && user.is_vip == '0') {
  369. uni.showToast({
  370. title: '当前账号不是VIP用户,无法观看VIP视频',
  371. icon: 'none'
  372. })
  373. that.$set(that, `video_user_vip`, false)
  374. } else if (user && user.is_vip == '1') {
  375. that.$set(that, `video_user_vip`, true)
  376. }
  377. } else {
  378. uni.showToast({
  379. title: '暂无用户信息,无法观看VIP视频',
  380. icon: 'none'
  381. })
  382. that.$set(that, `video_user_vip`, false)
  383. }
  384. } else {
  385. that.$set(that, `video_user_vip`, true)
  386. }
  387. },
  388. // 选项卡选择
  389. tabChange(e) {
  390. const that = this;
  391. that.$set(that, `active`, e)
  392. },
  393. // 视频查看
  394. videoView(e) {
  395. uni.navigateTo({
  396. url: `/pagesVideo/video/index?id=${e._id}`
  397. })
  398. },
  399. // 更多
  400. toCommon(route, query) {
  401. uni.navigateTo({
  402. url: `/${route}?${query}`
  403. })
  404. },
  405. // 我的喜欢
  406. async toLikes() {
  407. const that = this;
  408. let user = that.user;
  409. let info = that.info;
  410. let res;
  411. if (user && user._id) {
  412. let data = {
  413. user_id: user._id,
  414. user_name: user.nick_name,
  415. video_id: info._id,
  416. title: info.title,
  417. img_url: info.img_url,
  418. view_num: info.view_num,
  419. time_num: info.time_num,
  420. follow_time: that.$moment().format('YYYY-MM-DD HH:mm:ss'),
  421. }
  422. if (that.likeInfo && that.likeInfo.is == true) {
  423. res = await that.$api(`likes/${that.likeInfo.id}`, 'delete', {})
  424. if (res.errcode == '0') {
  425. uni.showToast({
  426. title: '取消喜欢成功!',
  427. icon: 'success'
  428. })
  429. that.searchLikes()
  430. } else {
  431. uni.showToast({
  432. title: res.errmsg,
  433. icon: 'none'
  434. })
  435. }
  436. } else {
  437. res = await that.$api('likes', 'POST', data);
  438. if (res.errcode == '0') {
  439. uni.showToast({
  440. title: '关注喜欢成功!',
  441. icon: 'success'
  442. })
  443. that.searchLikes()
  444. } else {
  445. uni.showToast({
  446. title: res.errmsg,
  447. icon: 'none'
  448. })
  449. }
  450. }
  451. } else {
  452. uni.showToast({
  453. title: '暂无用户信息,无法关注喜欢!',
  454. icon: 'none'
  455. })
  456. }
  457. },
  458. // 我的收藏
  459. async toCollects() {
  460. const that = this;
  461. let user = that.user;
  462. let info = that.info;
  463. let res;
  464. if (user && user._id) {
  465. let data = {
  466. user_id: user._id,
  467. user_name: user.nick_name,
  468. video_id: info._id,
  469. title: info.title,
  470. img_url: info.img_url,
  471. time_num: info.time_num,
  472. follow_time: that.$moment().format('YYYY-MM-DD HH:mm:ss'),
  473. }
  474. if (that.collectInfo && that.collectInfo.is == true) {
  475. res = await that.$api(`collects/${that.collectInfo.id}`, 'delete', {})
  476. if (res.errcode == '0') {
  477. uni.showToast({
  478. title: '取消收藏成功!',
  479. icon: 'success'
  480. })
  481. that.searchCollects()
  482. } else {
  483. uni.showToast({
  484. title: res.errmsg,
  485. icon: 'none'
  486. })
  487. }
  488. } else {
  489. res = await that.$api('collects', 'POST', data);
  490. if (res.errcode == '0') {
  491. uni.showToast({
  492. title: '关注收藏成功!',
  493. icon: 'success'
  494. })
  495. that.searchCollects()
  496. } else {
  497. uni.showToast({
  498. title: res.errmsg,
  499. icon: 'none'
  500. })
  501. }
  502. }
  503. } else {
  504. uni.showToast({
  505. title: '暂无用户信息,无法关注收藏!',
  506. icon: 'none'
  507. })
  508. }
  509. },
  510. // 分享
  511. toShare() {
  512. const that = this;
  513. let system = that.$config.system
  514. let basicInfo = that.basicInfo;
  515. if (system.uniPlatform == 'app') {
  516. uni.share({
  517. provider: "weixin",
  518. scene: "WXSceneSession",
  519. type: 0,
  520. href: that.$config.app_url,
  521. title: system.appName,
  522. summary: "我正在玩自由天空,赶紧和我一起体验吧",
  523. imageUrl: basicInfo.logo_url && basicInfo.logo_url.length > 0 ? basicInfo.logo_url[
  524. 0].url : '',
  525. success: function(res) {
  526. console.log("success:" + JSON.stringify(res));
  527. },
  528. fail: function(err) {
  529. console.log("fail:" + JSON.stringify(err));
  530. uni.showToast({
  531. title: JSON.stringify(err),
  532. icon: 'none'
  533. })
  534. }
  535. });
  536. } else if (system.uniPlatform == 'mp-weixin') {
  537. uni.showToast({
  538. title: '小程序未开通分享功能!',
  539. icon: "none"
  540. })
  541. }
  542. },
  543. // 讨论
  544. async searchDiscuss() {
  545. const that = this;
  546. let info = {
  547. skip: that.dskip,
  548. limit: that.dlimit,
  549. video_id: that.id
  550. }
  551. let res = await that.$api('discuss', 'GET', {
  552. ...info
  553. })
  554. if (res.errcode == '0') {
  555. let list = [...that.discussList, ...res.data]
  556. that.$set(that, `discussList`, list)
  557. that.$set(that, `dtotal`, res.total)
  558. }
  559. },
  560. // 打开评论
  561. diaChat() {
  562. const that = this;
  563. let user = that.user;
  564. if (user && user._id) {
  565. that.$refs.dialog.open()
  566. } else {
  567. uni.showToast({
  568. title: '暂无用户信息,无法发表评论',
  569. icon: 'none'
  570. })
  571. }
  572. },
  573. // 提交
  574. async diaSave(e) {
  575. const that = this;
  576. let user = that.user;
  577. if (user && user._id) {
  578. if (e) {
  579. let data = {
  580. user_id: user._id,
  581. user_name: user.nick_name,
  582. user_img_url: user.logo_url,
  583. video_id: that.info._id,
  584. video_title: that.info.title,
  585. content: e,
  586. create_time: that.$moment().format('YYYY-MM-DD HH:mm:ss'),
  587. }
  588. let res = await that.$api('discuss', 'POST', data)
  589. if (res.errcode == '0') {
  590. uni.showToast({
  591. title: '评论成功!',
  592. icon: 'success'
  593. })
  594. that.dclearPage()
  595. that.searchDiscuss()
  596. that.diaClose()
  597. } else {
  598. uni.showToast({
  599. title: res.errmsg,
  600. icon: 'none'
  601. })
  602. }
  603. } else {
  604. uni.showToast({
  605. title: '暂无评论内容,无法发表评论',
  606. icon: 'none'
  607. })
  608. }
  609. } else {
  610. uni.showToast({
  611. title: '暂无用户信息,无法发表评论',
  612. icon: 'none'
  613. })
  614. }
  615. },
  616. // 关闭
  617. diaClose() {
  618. const that = this;
  619. that.$refs.dialog.close()
  620. },
  621. toPage() {
  622. const that = this;
  623. let list = that.discussList;
  624. let limit = that.dlimit;
  625. if (that.dtotal > list.length) {
  626. uni.showLoading({
  627. title: '加载中',
  628. mask: true
  629. })
  630. let page = that.dpage + 1;
  631. that.$set(that, `dpage`, page)
  632. let skip = page * limit;
  633. that.$set(that, `dskip`, skip)
  634. that.searchDiscuss();
  635. uni.hideLoading();
  636. } else that.$set(that, `is_bottom`, true)
  637. },
  638. toScroll(e) {
  639. const that = this;
  640. let up = that.scrollTop;
  641. that.$set(that, `scrollTop`, e.detail.scrollTop);
  642. let num = Math.sign(up - e.detail.scrollTop);
  643. if (num == 1) that.$set(that, `is_bottom`, false);
  644. },
  645. // 清空评论列表
  646. dclearPage() {
  647. const that = this;
  648. that.$set(that, `discussList`, [])
  649. that.$set(that, `dskip`, 0)
  650. that.$set(that, `dlimit`, 5)
  651. that.$set(that, `dpage`, 0)
  652. },
  653. }
  654. }
  655. </script>
  656. <style lang="scss">
  657. .content {
  658. background-color: var(--rgb111);
  659. overflow: hidden;
  660. .one {
  661. padding: 0 2vw;
  662. margin: 0 0 2vw 0;
  663. video {
  664. width: 100%;
  665. height: 210px;
  666. overflow: hidden;
  667. border: 1px solid var(--rgbf1f);
  668. }
  669. .image {
  670. width: 100%;
  671. height: 210px;
  672. overflow: hidden;
  673. border: 1px solid var(--rgbf1f);
  674. }
  675. }
  676. .two {
  677. position: relative;
  678. flex-grow: 1;
  679. padding: 0 2vw;
  680. .two_1 {
  681. display: flex;
  682. justify-content: space-around;
  683. margin: 0 0 3vw 0;
  684. .list {
  685. span {
  686. background-color: var(--rgbfff);
  687. color: var(--rgb000);
  688. padding: 1vw 4vw;
  689. font-size: 14px;
  690. border-radius: 5px;
  691. }
  692. }
  693. .active {
  694. span {
  695. background-color: var(--rgbfa4);
  696. color: var(--rgbfff);
  697. }
  698. }
  699. }
  700. .two_2 {
  701. .tab_1 {
  702. display: flex;
  703. flex-direction: column;
  704. width: 96vw;
  705. height: 57vh;
  706. overflow-y: auto;
  707. padding: 1vw 0 0 0;
  708. .btn {
  709. display: flex;
  710. justify-content: space-around;
  711. margin: 0 0 2vw 0;
  712. .btn_1 {
  713. .span {
  714. display: inline-block;
  715. background-color: var(--rgb313);
  716. color: var(--rgbfff);
  717. padding: 1vw 4vw;
  718. border-radius: 5px;
  719. span {
  720. font-size: 14px;
  721. padding: 0 0 0 1vw;
  722. }
  723. }
  724. }
  725. }
  726. .title {
  727. font-size: 15px;
  728. color: var(--rgbfff);
  729. margin: 0 0 2vw 0;
  730. }
  731. .actor {
  732. font-size: 15px;
  733. color: var(--rgbfff);
  734. margin: 0 0 2vw 0;
  735. .actor_1 {
  736. margin: 0 0 2vw 0;
  737. }
  738. .actor_2 {
  739. .actor_scroll_view {
  740. white-space: nowrap;
  741. .actorList {
  742. display: inline-block;
  743. text-align: center;
  744. margin: 0 6px 0 0;
  745. .image {
  746. width: 66px;
  747. height: 66px;
  748. overflow: hidden;
  749. border-radius: 90%;
  750. }
  751. .name {
  752. font-size: 15px;
  753. }
  754. }
  755. }
  756. }
  757. }
  758. .brief {
  759. font-size: 15px;
  760. color: var(--rgbfff);
  761. margin: 0 0 2vw 0;
  762. }
  763. .other {
  764. .other_1 {
  765. font-size: 15px;
  766. color: var(--rgbfff);
  767. margin: 0 0 2vw 0;
  768. }
  769. .other_2 {
  770. display: flex;
  771. flex-wrap: wrap;
  772. .firmvideoList {
  773. width: 48%;
  774. margin: 0 10px 5px 0;
  775. .image {
  776. width: 100%;
  777. height: 100px;
  778. overflow: hidden;
  779. border-radius: 5px;
  780. box-shadow: 0 0 5px var(--rgbf1f);
  781. margin: 0 0 5px 0;
  782. }
  783. .name {
  784. font-size: 14px;
  785. color: var(--rgbfff);
  786. margin: 0 0 5px 0;
  787. }
  788. .other {
  789. display: flex;
  790. color: var(--rgbfff);
  791. font-size: 12px;
  792. justify-content: space-between;
  793. }
  794. }
  795. .firmvideoList:nth-child(2n) {
  796. margin: 0 0 5px 0;
  797. }
  798. }
  799. }
  800. }
  801. .tab_2 {
  802. display: flex;
  803. flex-direction: column;
  804. width: 96vw;
  805. height: 57vh;
  806. overflow-y: auto;
  807. padding: 1vw 0 0 0;
  808. position: relative;
  809. .tab_2_1 {
  810. display: flex;
  811. flex-direction: column;
  812. .discussList {
  813. margin: 0 0 2vw 0;
  814. background-color: var(--rgb000);
  815. padding: 2vw;
  816. border-radius: 5px;
  817. .dis_1 {
  818. display: flex;
  819. margin: 0 0 1vw 0;
  820. .l {
  821. width: 8vw;
  822. height: 8vw;
  823. margin: 0 2vw 0 0;
  824. .image {
  825. width: 100%;
  826. height: 100%;
  827. border-radius: 90%;
  828. }
  829. }
  830. .c {
  831. flex-grow: 1;
  832. font-size: 14px;
  833. color: var(--rgbfff);
  834. padding: 1vw 0;
  835. }
  836. .r {
  837. font-size: 12px;
  838. color: var(--rgbf1f);
  839. padding: 2vw 0 0 0;
  840. }
  841. }
  842. .dis_2 {
  843. font-size: 15px;
  844. color: var(--rgbfff);
  845. }
  846. }
  847. }
  848. .chatBtn {
  849. position: fixed;
  850. width: 100vw;
  851. bottom: 5vw;
  852. right: 4vw;
  853. text-align: right;
  854. button {
  855. width: 50px;
  856. height: 50px;
  857. line-height: 50px;
  858. padding: 0;
  859. border-radius: 90%;
  860. font-size: 14px;
  861. font-weight: bold;
  862. background-color: var(--rgbfa4);
  863. color: var(--rgbfff);
  864. }
  865. }
  866. }
  867. }
  868. }
  869. }
  870. .scroll-view {
  871. position: absolute;
  872. top: 0;
  873. left: 0;
  874. right: 0;
  875. bottom: 0;
  876. .list-scroll-view {
  877. display: flex;
  878. flex-direction: column;
  879. }
  880. }
  881. .is_bottom {
  882. text-align: center;
  883. text {
  884. padding: 2vw 0;
  885. display: inline-block;
  886. color: #858585;
  887. font-size: 14px;
  888. }
  889. }
  890. </style>