direct.vue 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234
  1. <template>
  2. <div id="hall" style="background-color: #fff">
  3. <el-row>
  4. <el-col :span="24">
  5. <div class="livetop">
  6. <div class="w_1200">
  7. <el-col :span="24" class="title">
  8. {{ dockInfo.title }}
  9. </el-col>
  10. <el-col :span="24" class="zhuban">
  11. <span>主办方:</span>
  12. <span>{{ dockInfo.sponsor }}</span>
  13. </el-col>
  14. <el-col :span="24" class="num">
  15. <p>
  16. <span>同时在线</span>
  17. <span>{{ statNum.tszx || 0 }}人</span>
  18. </p>
  19. <p>
  20. <span>特邀嘉宾</span>
  21. <span>{{ statNum.tyjb || 0 }}人</span>
  22. </p>
  23. <p>
  24. <span>洽谈合作</span>
  25. <span>{{ statNum.qthz || 0 }}项</span>
  26. </p>
  27. <p>
  28. <span>达成意愿</span>
  29. <span>{{ statNum.dcyx || 0 }}项</span>
  30. </p>
  31. <p>
  32. <span>交易完成</span>
  33. <span>{{ statNum.jywc || 0 }}项</span>
  34. </p>
  35. <p>
  36. <span>参展项目</span>
  37. <span>{{ statNum.czxm || 0 }}项</span>
  38. </p>
  39. </el-col>
  40. </div>
  41. </div>
  42. <div class="w_1200">
  43. <el-col :span="24" class="livemain">
  44. <!-- 直播,交易实况 -->
  45. <el-col :span="24" class="livevideo">
  46. <!-- 视频左侧 -->
  47. <el-col :span="12" class="left">
  48. <el-col :span="24" class="lefttop">
  49. <el-col :span="4" class="lefttopleft">
  50. <span style="color: rgb(255, 132, 0);">视频</span>
  51. <span>直播</span>
  52. </el-col>
  53. <el-col :span="20" class="lefttopright">
  54. <p class="textOver">{{ dockInfo.title }}</p>
  55. </el-col>
  56. </el-col>
  57. <el-col :span="24" :class="[dockInfo.room_id == '1006' ? 'leftvideos' : 'leftvideo']">
  58. <span v-if="dockInfo.room_id == '1006'">
  59. <!-- <div class="h5video" id="videoDiv" style="height:400px;"></div> -->
  60. <div id="videoDiv" class="h5video active"></div>
  61. </span>
  62. <span v-else>
  63. <el-col :span="24" class="videoTop">
  64. <video :src="videoPath" autoplay="autoplay" controls="controls" v-if="videoData != ''" loop="loop">
  65. 您的浏览器不支持 video 标签。
  66. </video>
  67. <div class="videointro" v-else>
  68. <p>{{ dockInfo.title }}</p>
  69. </div>
  70. </el-col>
  71. <el-col :span="24" class="videoDown">
  72. <swiper :list="videoData" :options="options">
  73. <template v-slot="{ index, item }">
  74. <p :class="`${menuIndex == index ? 'indexClass' : 'videodata'}`" @click="changeMenu(index, item)">第{{ index + 1 }}辑</p>
  75. </template>
  76. </swiper>
  77. </el-col>
  78. </span>
  79. </el-col>
  80. </el-col>
  81. <!-- 视频右侧 -->
  82. <el-col :span="12" class="right">
  83. <el-tabs v-model="videoListtabs" type="card">
  84. <el-tab-pane label="图文直播" name="first">
  85. <imagetxtList></imagetxtList>
  86. </el-tab-pane>
  87. <el-tab-pane label="洽谈合作" name="second">
  88. <trainList :list="trainoneList"></trainList>
  89. </el-tab-pane>
  90. <el-tab-pane label="达成意向" name="third">
  91. <trainList :list="traintwoList"></trainList>
  92. </el-tab-pane>
  93. <el-tab-pane label="交易完成" name="fourth">
  94. <trainList :list="trainthreeList"></trainList>
  95. </el-tab-pane>
  96. </el-tabs>
  97. </el-col>
  98. </el-col>
  99. <!-- 科技超市 -->
  100. <el-col :span="24" class="tabsData">
  101. <!-- 技术成果,科技需求,专家智库 -->
  102. <el-tabs type="border-card" @tab-click="handleClick">
  103. <el-tab-pane label="技术成果">
  104. <el-col :span="24" class="one">
  105. <el-col :span="24" class="demandList">
  106. <el-col :span="24" class="topList">
  107. <el-col :span="4" class="list" v-for="(item, index) in demandList" :key="index" @click.native="oneBtnDetail(item)">
  108. <el-image :src="achievezb"></el-image>
  109. <el-col :span="24" class="company textOver">
  110. {{ item.company }}
  111. </el-col>
  112. <el-col :span="24" class="aName textOver">
  113. {{ item.name }}
  114. </el-col>
  115. <el-col :span="24" class="a-brief">{{ item.achievebrief }}</el-col>
  116. <el-col :span="24" class="cont">
  117. <el-col :span="24" class="a-field">领域:{{ item.field }}</el-col>
  118. <el-col :span="24" class="a-contacts">联系人:{{ item.contacts }}</el-col>
  119. </el-col>
  120. <el-col :span="24" class="clickBtn">
  121. <el-button size="mini" type="primary" @click="oneBtnDetail(item)">详情</el-button>
  122. <el-button
  123. size="mini"
  124. type="success"
  125. @click="
  126. $router.push({
  127. path: '/live/hall/dock/dockDetail',
  128. query: { id: item._id, dockid: dock_id, user_id: user_id, type: item.type },
  129. })
  130. "
  131. >对接</el-button
  132. >
  133. </el-col>
  134. </el-col>
  135. </el-col>
  136. <el-col :span="24" class="btn">
  137. <el-button
  138. type="primary"
  139. size="mini"
  140. @click="$router.push({ path: '/hall/productList/technologyList', query: { column_name: '技术成果', dockid: dock_id } })"
  141. v-if="demandList.length > 6"
  142. >查看所有项目</el-button
  143. >
  144. </el-col>
  145. </el-col>
  146. </el-col>
  147. </el-tab-pane>
  148. <el-tab-pane label="科技需求">
  149. <el-col :span="24" class="one">
  150. <el-row class="jishulist">
  151. <el-col :span="24" class="topList">
  152. <el-col :span="24" class="list" v-for="(item, index) in jishulist" :key="index">
  153. <el-col :span="16" class="name">
  154. <p>
  155. <span class="inname"> {{ item.name }}</span>
  156. </p>
  157. </el-col>
  158. <el-col :span="4" class="names">
  159. <p>
  160. <span>
  161. 所属领域:
  162. {{ item.field }}</span
  163. >
  164. </p>
  165. </el-col>
  166. <el-col :span="4" class="click">
  167. <el-button size="mini" type="primary" @click="oneBtnDetail(item)">详情</el-button>
  168. <el-button
  169. size="mini"
  170. type="success"
  171. @click="
  172. $router.push({
  173. path: '/live/hall/dock/dockDetail',
  174. query: { id: item._id, dockid: dock_id, user_id: user_id, type: item.type },
  175. })
  176. "
  177. >对接</el-button
  178. >
  179. </el-col>
  180. </el-col>
  181. </el-col>
  182. <el-col :span="24" class="btn">
  183. <el-button
  184. type="primary"
  185. size="mini"
  186. @click="$router.push({ path: '/hall/productList/technologyList', query: { column_name: '科技需求', dockid: dock_id } })"
  187. v-if="jishulist.length > 10"
  188. >查看所有项目</el-button
  189. >
  190. </el-col>
  191. </el-row>
  192. </el-col>
  193. </el-tab-pane>
  194. <el-tab-pane label="专家智库">
  195. <el-col :span="24" class="two">
  196. <el-col :span="12" class="twoList" v-for="(item, index) in expertList" :key="index">
  197. <el-col :span="4" class="image">
  198. <el-image :src="item.expertimage" style="width:70px;height: 70px;border: 1px solid #f1f1f1;" v-if="item.expertimage != ''"></el-image>
  199. <el-image :src="expertimage" style="width:70px;height: 70px;border: 1px solid #f1f1f1;" v-else></el-image>
  200. </el-col>
  201. <el-col :span="20" class="info">
  202. <el-col :span="16" class="name textOver">
  203. {{ item.name }}
  204. </el-col>
  205. <el-col :span="8">
  206. <el-button size="mini" type="primary" @click="twoBtnDetail(item)" style="margin:0 5px 0 5px">详情</el-button>
  207. <el-button
  208. size="mini"
  209. type="success"
  210. @click="$router.push({ path: '/live/hall/dock/zhanjiaduijie', query: { id: item._id, dockid: dock_id, user_id: user_id } })"
  211. >对接</el-button
  212. >
  213. </el-col>
  214. <el-col :span="24" class="txt textOver"> {{ item.zwzc || '暂无' }} </el-col>
  215. <el-col :span="24" class="txt textOver"> {{ item.company || '暂无' }} </el-col>
  216. </el-col>
  217. </el-col>
  218. <el-col :span="24" class="onmore">
  219. <el-button
  220. v-if="expertList.length >= 8"
  221. type="primary"
  222. size="mini"
  223. @click="$router.push({ path: '/hall/productList/expertList', query: { dockid: dock_id, user_id: user_id } })"
  224. >查看所有项目</el-button
  225. >
  226. </el-col>
  227. </el-col>
  228. </el-tab-pane>
  229. </el-tabs>
  230. <!-- 搜索 -->
  231. <el-col :span="24" class="marketPublish">
  232. <el-col :span="18"> <el-input v-model="name" placeholder="请输入名称" style="height:30px" class="newinput"></el-input></el-col>
  233. <el-col :span="6"><el-button class="btnSearch" size="mini" @click="resetForm(name)">查询</el-button></el-col>
  234. </el-col>
  235. </el-col>
  236. <!-- 图片分割 -->
  237. <el-col :span="24">
  238. <el-image :src="two" style="width:100%;height:100px;position:relative;"> </el-image>
  239. </el-col>
  240. <!-- 嘉宾访谈,项目路演,公共聊天 -->
  241. <el-col :span="24" class="fangtan">
  242. <el-col :span="7" class="jiabin">
  243. <p class="jiabintop">
  244. <span>嘉宾访谈</span>
  245. </p>
  246. <div class="jiabinlist">
  247. <ul>
  248. <li
  249. v-for="(ref, index) in zxzdlist"
  250. :key="index"
  251. @click="$router.push({ path: '/hall/zxzdxmly/zxzdDetail', query: { id: ref.id, dock_id: dock_id } })"
  252. >
  253. <img :src="ref.picture" />
  254. <p>
  255. <span class="textOver">{{ ref.title }}</span>
  256. <span>{{ ref.publish_time }}</span>
  257. <span class="text">{{ ref.titlejj }} </span>
  258. </p>
  259. </li>
  260. </ul>
  261. </div>
  262. </el-col>
  263. <el-col :span="7" class="jiabin luyan">
  264. <p class="jiabintop luyanTop">
  265. <span>项目路演</span>
  266. </p>
  267. <div class="luyanList">
  268. <ul>
  269. <li
  270. v-for="(item, index) in xmlylist"
  271. :key="index"
  272. @click="$router.push({ path: '/hall/zxzdxmly/xmlyDetail', query: { id: item.id, dock_id: dock_id } })"
  273. >
  274. <p>
  275. <span class="textOver">{{ item.title }}</span>
  276. <span>时间:{{ item.publish_time }}</span>
  277. </p>
  278. <p>
  279. {{ item.titlejj }}
  280. </p>
  281. </li>
  282. </ul>
  283. </div>
  284. </el-col>
  285. <el-col :span="7" class="chat">
  286. <chat></chat>
  287. </el-col>
  288. </el-col>
  289. </el-col>
  290. </div>
  291. </el-col>
  292. <!-- 底部信息 -->
  293. <div class="pz_down">
  294. <live-foot></live-foot>
  295. </div>
  296. </el-row>
  297. <!-- 个人中心 -->
  298. <el-col :span="24" class="nameShow">
  299. <div class="w_1200">
  300. <el-col :span="24" v-if="this.user.uid">
  301. <span>{{ user.name }}</span>
  302. <el-button
  303. type="info"
  304. size="mini"
  305. v-if="this.user.role == '4' || this.user.role == '5' || this.user.role == '6' || this.user.role == '7'"
  306. @click="$router.push({ path: '/userCenter/index', query: { num: 1 } })"
  307. >个人中心</el-button
  308. >
  309. <el-button type="info" size="mini" v-else-if="this.user.role == '3'" @click="$router.push({ path: '/adminCenter/index', query: { num: 1 } })"
  310. >管理中心</el-button
  311. >
  312. <el-button type="info" size="mini" v-else-if="this.user.role == '8'" @click="$router.push({ path: '/vipCenter/index', query: { num: 1 } })"
  313. >管理中心</el-button
  314. >
  315. </el-col>
  316. </div>
  317. </el-col>
  318. <!-- 科技超市信息详情 -->
  319. <el-dialog title="信息详情" :visible.sync="dialogVisible" width="55%" :before-close="handleClose">
  320. <directDetail :directInfo="directInfo"></directDetail>
  321. </el-dialog>
  322. <el-dialog title="专家信息" :visible.sync="dialogExport" width="60%" :before-close="handleCloseExport">
  323. <expeDetail :detailInfo="exportInfo" :displayBtn="displayBtn"></expeDetail>
  324. </el-dialog>
  325. </div>
  326. </template>
  327. <script>
  328. // 底部信息
  329. import liveFoot from '@/layout/live/foot.vue';
  330. // 聊天
  331. import chat from '@/components/parts/chat.vue';
  332. // 技术,产品,服务详情
  333. import directDetail from '@/layout/direct/directDetail.vue';
  334. // 专家
  335. import expeDetail from '@/views/market/detail/expeDetail.vue';
  336. // 正在洽谈,达成意向,交易完成
  337. import trainList from './parts/trainList.vue';
  338. // 图文直播
  339. import imagetxtList from './parts/imagetxtList.vue';
  340. import swiper from '@c/swiper-frame.vue';
  341. import { mapState, createNamespacedHelpers } from 'vuex';
  342. const { mapActions: dock } = createNamespacedHelpers('dock');
  343. const { mapActions: market } = createNamespacedHelpers('market');
  344. const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
  345. const { mapActions: mapProduct } = createNamespacedHelpers('marketproduct');
  346. const { mapActions: transaction } = createNamespacedHelpers('transaction');
  347. const { mapActions: newsguidance } = createNamespacedHelpers('newsguidance');
  348. const { mapActions: newsroadshow } = createNamespacedHelpers('newsroadshow');
  349. import moment from 'moment';
  350. import _ from 'loadsh';
  351. export default {
  352. name: 'hall',
  353. props: {},
  354. components: {
  355. liveFoot, //底部信息
  356. chat, //聊天
  357. directDetail, //技术,产品,服务详情
  358. expeDetail, //专家详情
  359. trainList, //交易列表
  360. imagetxtList, //图文直播
  361. swiper,
  362. },
  363. data: () => ({
  364. // 对接会详情
  365. dockInfo: {},
  366. //对接会创建人id
  367. user_id: '',
  368. name: '',
  369. dock_id: '',
  370. // 统计数字
  371. statNum: {},
  372. // 视频管理
  373. menuIndex: '0',
  374. videoData: [],
  375. videoPath: '',
  376. // 视频右侧聊天列表
  377. videoListtabs: 'first',
  378. trainoneList: [],
  379. traintwoList: [],
  380. trainthreeList: [],
  381. // 科技超市
  382. jishulist: [],
  383. demandList: [],
  384. serviceList: [],
  385. expertList: [],
  386. // 搜索
  387. panduan: '找技术',
  388. // 信息详情
  389. dialogVisible: false,
  390. directInfo: {},
  391. dialogExport: false,
  392. exportInfo: {},
  393. displayBtn: false,
  394. achievezb: require('@/assets/3.png'),
  395. expertimage: require('@/assets/live/222.png'),
  396. // 使用手册图片
  397. two: require('@/assets/live/top_bg.png'),
  398. // 嘉宾访谈
  399. zxzdlist: [],
  400. // 路演
  401. xmlylist: [],
  402. options: {
  403. slidesPerView: 7,
  404. spaceBetween: 10,
  405. // 分页
  406. navigation: {
  407. nextEl: '.swiper-button-next',
  408. prevEl: '.swiper-button-prev',
  409. },
  410. },
  411. }),
  412. async created() {
  413. this.$set(this, `dock_id`, this.$route.query.id);
  414. await this.searchdock();
  415. await this.seachtVideo();
  416. this.$nextTick(() => {
  417. this.searchLive();
  418. });
  419. },
  420. methods: {
  421. searchLive() {
  422. let rmtpUrl = `${process.env.VUE_APP_LIVE_URL + this.dockInfo.room_id}`;
  423. setTimeout(function() {
  424. var videoObjects = {
  425. container: '#videoDiv',
  426. variable: 'player',
  427. autoplay: true,
  428. live: true,
  429. video: rmtpUrl,
  430. };
  431. let player = new ckplayer(videoObjects);
  432. }, 2);
  433. },
  434. // 展会
  435. ...dock({ dockQuery: 'query', dockFetch: 'fetch', goodsquery: 'goodsquery' }),
  436. // 用户
  437. ...market({ marketFetch: 'fetch', operaFetch: 'operaFetch', sendMsg: 'operationCreate', operaQuery: 'operaQuery' }),
  438. // 专家
  439. ...expertsuser({ expertQuery: 'query' }),
  440. // 产品
  441. ...mapProduct({ mapProductQuery: 'newquery' }),
  442. // 交易记录
  443. ...transaction({ tquery: 'query' }),
  444. // 嘉宾访谈
  445. ...newsguidance({ danceQuery: 'query' }),
  446. // 项目路演
  447. ...newsroadshow({ adshowQuery: 'query' }),
  448. // 查询详情
  449. async searchdock() {
  450. // 对接会详情
  451. let res = await this.dockFetch(this.dock_id);
  452. if (this.$checkRes(res)) {
  453. this.$set(this, `dockInfo`, res.data);
  454. this.$set(this, `user_id`, res.data.user_id);
  455. }
  456. // 参展项目
  457. let czxm = res.data.apply.map(item => item.goodsList);
  458. czxm = _.flattenDeep(czxm);
  459. var czxmNew = czxm.filter(item => item.dockStatus == '1');
  460. this.$set(this.statNum, `czxm`, czxmNew.length);
  461. // 技术
  462. var jishuData = czxmNew.filter(item => item.type === '0');
  463. this.$set(this, `jishulist`, jishuData);
  464. // 成果
  465. var chanpinData = czxmNew.filter(item => item.type === '1');
  466. if (chanpinData) this.$set(this, `demandList`, chanpinData);
  467. // 专家
  468. let exportdata = await this.expertQuery({ role: 6, limit: 8 });
  469. if (this.$checkRes(exportdata)) {
  470. this.$set(this, `expertList`, exportdata.data);
  471. // 特邀嘉宾
  472. this.$set(this.statNum, `tyjb`, exportdata.total);
  473. }
  474. // 正在洽谈
  475. let qthe = await this.tquery({ status: 0, dockid: this.id });
  476. this.$set(this, `trainoneList`, qthe.data);
  477. // 洽谈数
  478. this.$set(this.statNum, `qthz`, qthe.total);
  479. // 达成意向
  480. let dcyx = await this.tquery({ status: 1, dockid: this.id });
  481. this.$set(this, `traintwoList`, dcyx.data);
  482. // 意向数
  483. this.$set(this.statNum, `dcyx`, dcyx.total);
  484. // 交易完成
  485. let jywc = await this.tquery({ status: 2, dockid: this.id });
  486. this.$set(this, `trainthreeList`, jywc.data);
  487. // 完成数
  488. this.$set(this.statNum, `jywc`, jywc.total);
  489. // 同时在线数
  490. let tszx = await this.operaQuery({ type: '0' });
  491. if (tszx) this.$set(this.statNum, `tszx`, tszx.total);
  492. // 嘉宾访谈,项目路演
  493. let zxzd = await this.danceQuery({ dock_id: this.dock_id });
  494. this.$set(this, `zxzdlist`, zxzd.data);
  495. let xmly = await this.adshowQuery({ dock_id: this.dock_id });
  496. this.$set(this, `xmlylist`, xmly.data);
  497. // //交易实况
  498. // let jysk = await this.tquery({ dockid: this.id });
  499. // let newjysk = jysk.data.filter(f => f.status == '1' || f.status == '2');
  500. // for (const val of newjysk) {
  501. // var time = moment(val.meta.createdAt).format('YYYY-MM-DD hh:mm');
  502. // val.time = time;
  503. // }
  504. // console.log(newjysk);
  505. // 登录情况+交易情况
  506. // let jioayi = await this.operaFetch({ dockid: this.dock_id });
  507. // for (const val of jioayi.data) {
  508. // var date = moment(val.meta.createdAt).format('YYYY-MM-DD hh:mm');
  509. // val.date = date;
  510. // }
  511. // console.log(jioayi.data);
  512. },
  513. // 科技超市查询
  514. async resetForm(name) {
  515. if (this.panduan == '找技术') {
  516. if (name) {
  517. let jishu = await this.goodsquery({ name: name });
  518. this.$set(this, `jishulist`, jishu.data);
  519. } else {
  520. this.searchdock();
  521. }
  522. } else if (this.panduan == '找产品') {
  523. if (name) {
  524. let chanpin = await this.goodsquery({ name: name });
  525. this.$set(this, `demandList`, chanpin.data);
  526. } else {
  527. this.searchdock();
  528. }
  529. } else if (this.panduan == '找服务') {
  530. if (name) {
  531. let service = await this.goodsquery({ name: name });
  532. this.$set(this, `serviceList`, service.data);
  533. } else {
  534. this.searchdock();
  535. }
  536. } else if (this.panduan == '找专家') {
  537. if (name) {
  538. var filterdata = this.expertList.filter(item => item.name === name);
  539. this.$set(this, `expertList`, filterdata);
  540. } else {
  541. this.searchdock();
  542. }
  543. }
  544. },
  545. //技术,成果,专家
  546. handleClick(tab, event) {
  547. if (event.target.getAttribute('id') == 'tab-0') this.panduan = '找技术';
  548. else if (event.target.getAttribute('id') == 'tab-1') this.panduan = '找产品';
  549. else if (event.target.getAttribute('id') == 'tab-2') this.panduan = '找服务';
  550. else if (event.target.getAttribute('id') == 'tab-3') this.panduan = '找专家';
  551. },
  552. // 信息详情
  553. oneBtnDetail(data) {
  554. this.dialogVisible = true;
  555. this.$set(this, `directInfo`, data);
  556. },
  557. handleClose(done) {
  558. done();
  559. },
  560. // 专家详情
  561. twoBtnDetail(data) {
  562. this.dialogExport = true;
  563. this.$set(this, `exportInfo`, data);
  564. },
  565. handleCloseExport(done) {
  566. done();
  567. },
  568. // 视频管理
  569. async seachtVideo() {
  570. let res = await this.dockFetch(this.dock_id);
  571. if (this.$checkRes(res)) {
  572. this.$set(this, `videoData`, res.data.videodata);
  573. this.changeMenu('0', this.videoData[0]);
  574. }
  575. },
  576. channelvideo() {
  577. this.$stomp({
  578. [`/exchange/dock_video/${this.dock_id}`]: this.onMessageVideo,
  579. });
  580. },
  581. onMessageVideo(message) {
  582. let arr = JSON.parse(message.body);
  583. this.$set(this, `videoData`, arr);
  584. let num = this.videoData.length - 1;
  585. let newarr = _.last(arr);
  586. this.changeMenu(num, newarr);
  587. },
  588. changeMenu(index, item) {
  589. if (item) {
  590. this.menuIndex = index;
  591. this.$set(this, `videoPath`, item.file_path);
  592. }
  593. },
  594. },
  595. mounted() {
  596. this.channelvideo();
  597. },
  598. computed: {
  599. ...mapState(['user']),
  600. pageTitle() {
  601. return `${this.$route.meta.title}`;
  602. },
  603. },
  604. metaInfo() {
  605. return { title: this.$route.meta.title };
  606. },
  607. };
  608. </script>
  609. <style lang="less" scoped>
  610. .w_1200 {
  611. margin: 0 auto;
  612. width: 1200px;
  613. }
  614. // 头部
  615. .livetop {
  616. width: 100%;
  617. height: 487px;
  618. overflow: hidden;
  619. background-image: url('~@/assets/live/top_3.png');
  620. .title {
  621. text-align: center;
  622. color: #fff;
  623. position: relative;
  624. width: 100%;
  625. font-size: 45px;
  626. top: 65px;
  627. }
  628. .zhuban {
  629. text-align: center;
  630. color: #fff;
  631. position: relative;
  632. width: 100%;
  633. font-size: 25px;
  634. top: 140px;
  635. span:first-child {
  636. font-weight: 700;
  637. }
  638. }
  639. .num {
  640. position: relative;
  641. top: 190px;
  642. color: #fff;
  643. p {
  644. float: left;
  645. width: 15%;
  646. background: #fff;
  647. margin: 0 14px 0 0 !important;
  648. color: #000;
  649. height: 50px;
  650. line-height: 50px;
  651. border-radius: 30px;
  652. span:first-child {
  653. display: inline-block;
  654. width: 56%;
  655. text-align: center;
  656. height: 50px;
  657. line-height: 50px;
  658. font-size: 16px;
  659. background: red;
  660. border-radius: 30px;
  661. color: #fff;
  662. font-weight: 700;
  663. }
  664. span:last-child {
  665. display: inline-block;
  666. width: 42%;
  667. text-align: center;
  668. font-size: 15px;
  669. font-weight: 700;
  670. }
  671. }
  672. }
  673. }
  674. // 直播
  675. .livemain {
  676. position: relative;
  677. top: -55px;
  678. z-index: 999;
  679. .livevideo {
  680. height: 470px;
  681. overflow: hidden;
  682. .left {
  683. height: 470px;
  684. overflow: hidden;
  685. border: 5px solid #000;
  686. background: #fff;
  687. border-radius: 5px;
  688. margin: 0 15px 0 0;
  689. .lefttop {
  690. padding: 0 10px;
  691. height: 60px;
  692. .lefttopleft {
  693. height: 60px;
  694. line-height: 40px;
  695. font-size: 20px;
  696. font-weight: 700;
  697. }
  698. .lefttopright {
  699. height: 60px;
  700. line-height: 65px;
  701. font-weight: bolder;
  702. -webkit-text-stroke: 1px #6e042c;
  703. -webkit-text-fill-color: #fff;
  704. letter-spacing: 3px;
  705. font-size: 20px;
  706. }
  707. }
  708. .h5video {
  709. height: 400px;
  710. }
  711. .leftvideo {
  712. height: 410px;
  713. overflow: hidden;
  714. .videoTop {
  715. height: 360px;
  716. overflow: hidden;
  717. video {
  718. width: 100%;
  719. height: 360px;
  720. background: #000;
  721. }
  722. .videointro {
  723. height: 360px;
  724. text-align: center;
  725. background-image: url('~@/assets/directBack.png');
  726. background-size: 100% 100%;
  727. background-repeat: no-repeat;
  728. p {
  729. font-size: 30px;
  730. color: #fff;
  731. padding: 50px 0;
  732. }
  733. }
  734. }
  735. .videoDown {
  736. height: 40px;
  737. overflow: hidden;
  738. border: 1px solid #ccc;
  739. .videodata {
  740. border-radius: 10px;
  741. background: #cccccc8f;
  742. height: 39px;
  743. line-height: 39px;
  744. text-align: center;
  745. // margin: 0 5px;
  746. font-weight: bold;
  747. }
  748. .videodata:hover {
  749. cursor: pointer;
  750. color: #fff;
  751. background: #409eff;
  752. }
  753. .indexClass {
  754. border-radius: 10px;
  755. height: 39px;
  756. line-height: 39px;
  757. text-align: center;
  758. // margin: 0 5px;
  759. font-weight: bold;
  760. color: #fff;
  761. background: #409eff;
  762. }
  763. }
  764. }
  765. .leftvideos {
  766. height: 400px;
  767. overflow: hidden;
  768. .videoTop {
  769. height: 360px;
  770. overflow: hidden;
  771. video {
  772. width: 100%;
  773. height: 360px;
  774. background: #000;
  775. }
  776. .videointro {
  777. height: 360px;
  778. text-align: center;
  779. background-image: url('~@/assets/directBack.png');
  780. background-size: 100% 100%;
  781. background-repeat: no-repeat;
  782. p {
  783. font-size: 30px;
  784. color: #fff;
  785. padding: 50px 0;
  786. }
  787. }
  788. }
  789. .videoDown {
  790. height: 40px;
  791. overflow: hidden;
  792. border: 1px solid #ccc;
  793. .videodata {
  794. border-radius: 10px;
  795. background: #cccccc8f;
  796. height: 39px;
  797. line-height: 39px;
  798. text-align: center;
  799. // margin: 0 5px;
  800. font-weight: bold;
  801. }
  802. .videodata:hover {
  803. cursor: pointer;
  804. color: #fff;
  805. background: #409eff;
  806. }
  807. .indexClass {
  808. border-radius: 10px;
  809. height: 39px;
  810. line-height: 39px;
  811. text-align: center;
  812. // margin: 0 5px;
  813. font-weight: bold;
  814. color: #fff;
  815. background: #409eff;
  816. }
  817. }
  818. }
  819. }
  820. .right {
  821. width: 48%;
  822. height: 468px;
  823. overflow: hidden;
  824. background: #f0ffff5f;
  825. box-shadow: 0 0 5px #409eff;
  826. border-radius: 5px;
  827. }
  828. /deep/.el-tabs--card > .el-tabs__header {
  829. border-bottom: none;
  830. }
  831. /deep/.el-tabs__header {
  832. margin: 0;
  833. }
  834. /deep/.el-tabs--card > .el-tabs__header .el-tabs__item {
  835. border-bottom: none;
  836. border-left: none;
  837. }
  838. /deep/.el-tabs--card > .el-tabs__header .el-tabs__nav {
  839. border: none;
  840. }
  841. /deep/.el-tabs__item {
  842. font-weight: 700;
  843. font-size: 16px;
  844. color: #fff;
  845. }
  846. /deep/.el-tabs__item.is-active {
  847. color: #ff0000;
  848. }
  849. /deep/.el-tabs__nav-scroll {
  850. background-color: #fe950e;
  851. }
  852. }
  853. }
  854. // 科技超市
  855. .tabsData {
  856. position: relative;
  857. height: 510px;
  858. margin: 20px 0;
  859. .one {
  860. height: 467px;
  861. padding: 0 15px;
  862. overflow: hidden;
  863. // 产品
  864. .jishulist {
  865. .topList {
  866. height: 430px;
  867. overflow: hidden;
  868. .list {
  869. border-bottom: 1px dashed #ccc;
  870. padding: 6px 0;
  871. .name {
  872. height: 30px;
  873. line-height: 30px;
  874. p:first-child {
  875. font-size: 16px;
  876. // display: inline-block;
  877. width: 700px;
  878. display: block;
  879. overflow: hidden;
  880. white-space: nowrap;
  881. text-overflow: ellipsis;
  882. }
  883. }
  884. .names {
  885. height: 30px;
  886. line-height: 30px;
  887. p:first-child {
  888. font-size: 14px;
  889. display: inline-block;
  890. width: 300px;
  891. overflow: hidden;
  892. text-overflow: ellipsis;
  893. -o-text-overflow: ellipsis;
  894. }
  895. }
  896. .click {
  897. height: 30px;
  898. line-height: 30px;
  899. text-align: center;
  900. }
  901. }
  902. }
  903. .btn {
  904. margin: 6px 0 0 0;
  905. text-align: center;
  906. }
  907. }
  908. // 技术
  909. .demandList {
  910. .topList {
  911. height: 430px;
  912. overflow: hidden;
  913. .list {
  914. height: 215px;
  915. position: relative;
  916. margin: 5px 10px 0px 9px;
  917. width: 15%;
  918. .el-image {
  919. width: 100%;
  920. height: 205px;
  921. overflow: hidden;
  922. // border-radius: 5px;
  923. // transition: all 0.4s linear;
  924. position: relative;
  925. }
  926. .company {
  927. position: absolute;
  928. top: 3px;
  929. left: 20px;
  930. width: 86%;
  931. color: #ec6c2d;
  932. -webkit-text-stroke: 1px #f18d2c;
  933. font-style: oblique;
  934. -webkit-text-fill-color: #ec6c2d;
  935. letter-spacing: 3px;
  936. }
  937. .aName {
  938. position: absolute;
  939. top: 30px;
  940. left: 0px;
  941. text-align: center;
  942. transform: scale(0.8);
  943. font-weight: bolder;
  944. -webkit-text-stroke: 1px #f18d2c;
  945. font-style: oblique;
  946. -webkit-text-fill-color: transparent;
  947. letter-spacing: 3px;
  948. }
  949. .a-brief {
  950. margin: 10px 0px;
  951. position: absolute;
  952. top: 30px;
  953. left: 0px;
  954. overflow: hidden;
  955. line-height: 20px;
  956. letter-spacing: 2px;
  957. text-overflow: ellipsis;
  958. -webkit-line-clamp: 5;
  959. word-break: break-all;
  960. display: -webkit-box;
  961. -webkit-box-orient: vertical;
  962. transform: scale(0.8);
  963. }
  964. .cont {
  965. position: absolute;
  966. left: 0px;
  967. bottom: 50px;
  968. transform: scale(0.8);
  969. .a-field {
  970. overflow: hidden;
  971. text-overflow: ellipsis;
  972. white-space: nowrap;
  973. }
  974. }
  975. .clickBtn {
  976. position: relative;
  977. top: -38px;
  978. text-align: center;
  979. /deep/.el-button {
  980. padding: 5px 10px;
  981. }
  982. }
  983. }
  984. }
  985. .btn {
  986. text-align: center;
  987. margin: 6px 0 0 0;
  988. }
  989. }
  990. }
  991. .two {
  992. padding: 15px 15px 0 15px;
  993. height: 466px;
  994. overflow: hidden;
  995. .twoList {
  996. box-shadow: 0 0 3px #cccccc;
  997. margin-bottom: 10px;
  998. padding: 10px 5px;
  999. .image {
  1000. border-radius: 90px;
  1001. .el-image {
  1002. border-radius: 90px;
  1003. }
  1004. }
  1005. .info {
  1006. .name {
  1007. font-size: 18px;
  1008. }
  1009. .txt {
  1010. font-size: 16px;
  1011. }
  1012. }
  1013. }
  1014. }
  1015. /deep/.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
  1016. font-weight: bold;
  1017. font-size: 16px;
  1018. background-color: #6e042c;
  1019. color: #fff;
  1020. }
  1021. /deep/.el-tabs__item {
  1022. font-size: 16px;
  1023. }
  1024. /deep/.el-tabs--border-card > .el-tabs__content {
  1025. padding: 0;
  1026. }
  1027. // 搜索
  1028. .marketPublish {
  1029. position: absolute;
  1030. top: 42.2%;
  1031. width: 286px;
  1032. z-index: 999;
  1033. left: 72%;
  1034. top: 1%;
  1035. text-align: center;
  1036. font-size: 18px;
  1037. color: #fff;
  1038. /deep/.el-input__inner {
  1039. -webkit-appearance: none;
  1040. background-color: #fff;
  1041. background-image: none;
  1042. border-radius: 4px;
  1043. border: 1px solid #dcdfe6;
  1044. box-sizing: border-box;
  1045. color: #606266;
  1046. display: inline-block;
  1047. font-size: inherit;
  1048. height: 30px;
  1049. line-height: 12px;
  1050. outline: 0;
  1051. padding: 0 15px;
  1052. transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
  1053. width: 100%;
  1054. }
  1055. }
  1056. // 查看更多
  1057. .onmore {
  1058. text-align: center;
  1059. }
  1060. }
  1061. // 嘉宾访谈,项目路演,聊天
  1062. .fangtan {
  1063. height: 525px;
  1064. overflow: hidden;
  1065. .jiabin {
  1066. width: 31%;
  1067. border-radius: 5px;
  1068. box-shadow: 0 0 5px #c20808;
  1069. padding: 0 10px 0px 10px;
  1070. margin: 4px 15px 0 3px;
  1071. height: 515px;
  1072. .jiabintop {
  1073. height: 30px;
  1074. line-height: 30px;
  1075. span {
  1076. display: inline-block;
  1077. padding: 0 10px;
  1078. height: 30px;
  1079. color: #fff;
  1080. background-color: #ff8500;
  1081. border-bottom-left-radius: 10px;
  1082. border-bottom-right-radius: 10px;
  1083. }
  1084. a {
  1085. float: right;
  1086. }
  1087. }
  1088. .jiabinlist ul {
  1089. float: left;
  1090. width: 100%;
  1091. height: 475px;
  1092. overflow: auto;
  1093. li {
  1094. float: left;
  1095. width: 100%;
  1096. border-bottom: 1px dashed #ff8500;
  1097. padding: 16px 0;
  1098. img {
  1099. float: left;
  1100. width: 20%;
  1101. height: 80px;
  1102. }
  1103. p {
  1104. float: left;
  1105. width: 71%;
  1106. padding: 0 0 0 10px;
  1107. span:first-child {
  1108. float: left;
  1109. width: 70%;
  1110. font-size: 18px;
  1111. }
  1112. span:first-child:hover {
  1113. cursor: pointer;
  1114. }
  1115. span:last-child {
  1116. float: left;
  1117. width: 100%;
  1118. font-size: 14px;
  1119. color: #888;
  1120. overflow: hidden;
  1121. text-overflow: ellipsis;
  1122. -webkit-line-clamp: 3;
  1123. word-break: break-all;
  1124. display: -webkit-box;
  1125. -webkit-box-orient: vertical;
  1126. }
  1127. }
  1128. }
  1129. li:last-child {
  1130. border-bottom: none;
  1131. float: left;
  1132. width: 100%;
  1133. }
  1134. li:hover p span:first-child {
  1135. color: #0e90d2;
  1136. }
  1137. }
  1138. }
  1139. .luyan {
  1140. width: 33%;
  1141. border-radius: 5px;
  1142. box-shadow: 0 0 5px #c20808;
  1143. padding: 0 10px 0px 10px;
  1144. margin: 4px 10px 0 3px;
  1145. height: 515px;
  1146. overflow: hidden;
  1147. .luyanList {
  1148. padding: 10px 0 0 0;
  1149. ul {
  1150. margin: 0;
  1151. padding: 0;
  1152. list-style-type: none;
  1153. float: left;
  1154. width: 100%;
  1155. height: 450px;
  1156. overflow-y: auto;
  1157. overflow-x: hidden;
  1158. li {
  1159. float: left;
  1160. border-radius: 10px;
  1161. padding: 5px;
  1162. margin: 0 0 12px 0;
  1163. height: 95px;
  1164. border: 1px solid #ff8500;
  1165. width: 95%;
  1166. p:first-child span:first-child {
  1167. font-size: 18px;
  1168. float: left;
  1169. width: 70%;
  1170. height: 30px;
  1171. line-height: 30px;
  1172. }
  1173. p:first-child span:first-child:hover {
  1174. cursor: pointer;
  1175. color: #0279d5;
  1176. }
  1177. p:first-child span:last-child {
  1178. float: left;
  1179. width: 30%;
  1180. height: 30px;
  1181. line-height: 30px;
  1182. }
  1183. p:last-child span {
  1184. float: left;
  1185. width: 100%;
  1186. padding: 5px 0;
  1187. font-size: 14px;
  1188. color: #666;
  1189. }
  1190. }
  1191. li:nth-child(5) {
  1192. border: 1px solid #ff8500;
  1193. float: left;
  1194. border-radius: 10px;
  1195. padding: 5px 10px;
  1196. margin: 0 0 22px 0;
  1197. height: 95px;
  1198. }
  1199. li:hover {
  1200. box-shadow: 0 0 5px red;
  1201. }
  1202. }
  1203. }
  1204. }
  1205. .chat {
  1206. float: left;
  1207. width: 33%;
  1208. }
  1209. }
  1210. // 头部个人中心
  1211. .nameShow {
  1212. position: fixed;
  1213. top: 15px;
  1214. text-align: right;
  1215. z-index: 999;
  1216. span {
  1217. color: #fff;
  1218. font-weight: bold;
  1219. font-size: 16px;
  1220. padding: 0 10px;
  1221. }
  1222. }
  1223. // dialog样式
  1224. /deep/.el-dialog__body {
  1225. padding: 20px;
  1226. }
  1227. </style>