direct.vue 38 KB

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