projectPresentationDetails1.vue 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226
  1. <template>
  2. <div>
  3. <div class="autoBox box">
  4. <div class="crumbs">
  5. <el-breadcrumb separator="/">
  6. <el-breadcrumb-item :to="{ path: 'home' }">{{$t('common.Home')}}</el-breadcrumb-item>
  7. <el-breadcrumb-item :to="{ path: 'projectPresentation' }">{{$t('common.ProjectResources')}}
  8. </el-breadcrumb-item>
  9. <el-breadcrumb-item>{{$t('common.ProjectDetails')}}</el-breadcrumb-item>
  10. </el-breadcrumb>
  11. </div>
  12. <div style="width: 100%;height: 480px;position: relative;">
  13. <div class="swipers">
  14. <div class="swiper-container gallery-top">
  15. <div class="swiper-wrapper">
  16. <div
  17. class="swiper-slide"
  18. v-for="(i,index) in initData.bannerList"
  19. :data-swiper-slide-index="i+index">
  20. <img :src="'api/fileextend/pub/' + i + '?custom=550_352'" alt style="width: 100%;height: 100%;"/>
  21. </div>
  22. </div>
  23. <div class="swiper-button-next swiper-button-white"></div>
  24. <div class="swiper-button-prev swiper-button-white"></div>
  25. </div>
  26. <div class="swiper-container gallery-thumbs">
  27. <div class="swiper-wrapper">
  28. <div
  29. class="swiper-slide"
  30. :key="i"
  31. :data-swiper-slide-index="index"
  32. v-for="(i,index) in initData.bannerList"
  33. >
  34. <img :src="'api/fileextend/pub/' + i + '?custom=130_67'" alt style="width: 100%;height: 100%;"/>
  35. </div>
  36. <!-- -->
  37. <!-- -->
  38. </div>
  39. </div>
  40. </div>
  41. <!-- 项目详情 -->
  42. <div class="details">
  43. <div style="width: 100%; font-size: 16px;color: #333;">
  44. <div>
  45. <span
  46. class="initData_label cursor"
  47. :alt="initData.projectName"
  48. > {{initData.projectName}}
  49. </span>
  50. <span>
  51. <img src="@/assets/img/projectPresentation/project-recommended.png" v-if="initData.recommendFlag=='y'" alt="" style="margin-left: 20px;">
  52. </span>
  53. <!-- 最新发布 -->
  54. <span
  55. v-if="releaseView()"
  56. style="font-size: 12px;padding:5px 10px;background: #d53c3d;color: #fff;font-weight: 700;float:right;">
  57. {{$t('common.LatestRelease')}}
  58. </span>
  59. <!-- 推荐项目 -->
  60. <!-- <span style="font-size: 12px;margin-right: 20px;padding:5px 10px;background: #82ab5b;color: #fff;font-weight: 700;float:right;"
  61. >{{$t('common.RecommendedProject')}}</span> -->
  62. </div>
  63. <div style="line-height: 35px;">
  64. <div >
  65. <span >
  66. <i class="el-icon-location-outline"></i>
  67. {{initData.bannerFour}}
  68. </span>
  69. </div>
  70. <!-- <div style="overflow:hidden;white-space:nowrap; text-overflow:ellipsis; width: 450px">-->
  71. <div>
  72. <span>
  73. <i class="el-icon-place"></i>
  74. {{initData.unitCountry}}
  75. </span>
  76. </div>
  77. <div>
  78. <span>
  79. <i class="el-icon-office-building" aria-hidden="true"></i>
  80. {{initData.technicalCategories}} | {{initData.technicalScope}}
  81. </span>
  82. </div>
  83. <div>
  84. <span>
  85. <i class="el-icon-time"></i>
  86. {{$t('common.Releasedate')}} : {{handlePublishTimeDesc(toDate,initData.createDate,$i18n.locale)}} {{$t('common.release')}}
  87. </span>
  88. </div>
  89. <!-- <div>-->
  90. <!-- <span>-->
  91. <!-- <i class="el-icon-time"></i>-->
  92. <!-- {{$t('common.Deadline')}}:{{initData.setDownDate ||$t('common.NoDeadline')}}-->
  93. <!-- </span>-->
  94. <!-- </div>-->
  95. <div>
  96. <span>
  97. <i class="el-icon-tickets"></i>
  98. {{$t('common.ProjectNumber')}}:
  99. <span
  100. style="color:#62b605"
  101. >{{initData.projectNum || $t('common.NoProjectNumber')}}</span>
  102. </span>
  103. <!--当前阶段-->
  104. <div>
  105. <span>
  106. {{$t('common.CurrentStage')}}:
  107. </span>
  108. <span>
  109. {{initData.phaseType}}
  110. </span>
  111. </div>
  112. </div>
  113. <!-- <div>
  114. <span>
  115. <i class="el-icon-office-building"></i>
  116. {{$t('common.ProjectAmount')}}:
  117. <span
  118. style="color:#62b605"
  119. >{{initData.amount}}{{$t('common.TenThousandYuan')}}</span>
  120. </span>
  121. </div> -->
  122. <!-- <div style="display: -webkit-box;-->
  123. <!-- -webkit-box-orient: vertical;-->
  124. <!-- -webkit-line-clamp: 5;-->
  125. <!-- overflow: hidden;cursor: pointer;" @click="dialogVisibleChange">-->
  126. <!-- -->
  127. <!-- <span style="line-height:30px">-->
  128. <!-- <i class="el-icon-tickets"></i>-->
  129. <!-- {{$t('common.ProjectScales')}}:-->
  130. <!-- <span v-if="flag == true">{{initData.projectScale}}:</span>-->
  131. <!-- </span>-->
  132. <!-- </div>-->
  133. <!-- <el-dialog-->
  134. <!-- v-if="flag == true"-->
  135. <!-- :title="$t('common.ProjectScale')"-->
  136. <!-- :visible.sync="dialogVisible"-->
  137. <!-- width="30%">-->
  138. <!-- <span style="line-height: 29px;font-size: 18px;">{{initData.projectScale}}</span>-->
  139. <!-- </el-dialog>-->
  140. <!-- <img-->
  141. <!-- v-if="flag == false && this.$i18n.locale == 'zh'"-->
  142. <!-- ref="photoImg"-->
  143. <!-- alt-->
  144. <!-- src="@/assets/zhong.png"-->
  145. <!-- class="img-responsive"-->
  146. <!-- style="display: inline-block; vertical-align: middle;height: 100px;width: 400px;"-->
  147. <!-- />-->
  148. <!-- <img-->
  149. <!-- v-if="flag == false && this.$i18n.locale == 'en'"-->
  150. <!-- ref="photoImg"-->
  151. <!-- alt-->
  152. <!-- src="@/assets/ying.png"-->
  153. <!-- class="img-responsive"-->
  154. <!-- style="display: inline-block; vertical-align: middle;height: 100px;width: 400px;"-->
  155. <!-- />-->
  156. <!-- 项目关注和分享 -->
  157. <!-- <div style="color: #666;font-size: 14px;margin-right: 20px;color: #333;">-->
  158. <!-- <span class="share cursor"-->
  159. <!-- :style="ifcommon?'color: #66b1ff;':''"-->
  160. <!-- style="margin-right: 20px;"-->
  161. <!-- @click="shareChange()">-->
  162. <!-- <i class="el-icon-star-off" :style="ifcommon?'color: #66b1ff;':''"></i>-->
  163. <!-- {{ifcommon?$t('common.ProjectAttentioned'):$t('common.AttentionProject')}}-->
  164. <!-- </span>-->
  165. <!-- &lt;!&ndash; <span class="share cursor btn" :data-clipboard-text="url" @click="copy">-->
  166. <!-- <i class="el-icon-share"></i>-->
  167. <!-- {{$t('common.ShareProject')}}-->
  168. <!-- </span> &ndash;&gt;-->
  169. <!-- </div>-->
  170. <div>
  171. <el-button type="" style="margin-left: 10px;margin-top: 10px;height: 40px;width: 170px;"
  172. icon="el-icon-star-off" :style="ifcommon?'color: #fff;border:1px solid #66b1ff;background:#66b1ff;':''" @click="shareChange()">
  173. {{ifcommon?$t('common.ProjectAttentioned'):$t('common.AttentionProject')}}
  174. </el-button>
  175. <el-button type="success" style="margin-left: 10px;margin-top: 10px;height: 40px;width: 170px;" icon="el-icon-chat-dot-round" @click="olineConsultingOpen">
  176. {{$t('common.OlineConsulting')}}
  177. </el-button>
  178. </div>
  179. <div style="line-height: 32px;color: #333;width: 581px;height: 256px;overflow: hidden;text-overflow:ellipsis;"></div>
  180. </div>
  181. </div>
  182. </div>
  183. </div>
  184. <div style="width: 100%;position: relative;">
  185. <div class="enterprise_style">
  186. <span
  187. :class="indexTo==1?'enterprise_screen cursor':'enterprise_screen2 cursor'"
  188. @click="indexTo=1"
  189. style="display: inline-block;"
  190. >{{$t('common.ProjectPresentation')}}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  191. <span
  192. :class="indexTo==2?'enterprise_screen cursor':'enterprise_screen2 cursor'"
  193. @click="indexTo=2"
  194. >{{$t('common.AnalysisReport')}}</span>
  195. </div>
  196. <div style="margin-top: 5px;margin-bottom: 15px; overflow: hidden;">
  197. <!-- 项目介绍-->
  198. <span v-if="indexTo == 1" style="margin-top: 16px;display: inline-block;
  199. color: #333;margin-left: 30px;line-height: 32px;width: 90%;word-break:break-all;">
  200. <!--当前阶段-->
  201. <!-- <div>
  202. <div style="color: #0079ef;font-size: 18px;">
  203. {{$t('common.CurrentStage')}}
  204. </div>
  205. <div style="text-indent: 30px;">
  206. {{initData.phaseType}}
  207. </div>
  208. </div> -->
  209. <!--项目描述-->
  210. <div>
  211. <!-- <div style="color: #0079ef;font-size: 18px;">
  212. {{$t('common.Description')}}
  213. </div> -->
  214. <div style="text-indent: 30px;word-break: keep-all;" v-html='initData.projectDescription'>
  215. <!-- {{initData.projectDescription}}-->
  216. </div>
  217. </div>
  218. </span>
  219. <span v-if="indexTo == 2" style="margin-top: 16px;display: inline-block;
  220. color: #333;margin-left: 30px;line-height: 32px;width: 90%;word-break:break-all;">
  221. <div>
  222. <!-- <div style="color: #0079ef;font-size: 18px;">
  223. {{$t('common.Description')}}
  224. </div> -->
  225. <div style="text-indent: 30px;word-break: keep-all;" v-html='initData.projectRequirements'>
  226. <!-- {{initData.projectDescription}}-->
  227. </div>
  228. </div>
  229. </span>
  230. <!-- <div style="width: 600px;float: right;height: 190px;"> -->
  231. <!-- <div-->
  232. <!-- style="height: 30px;line-height: 30px;background: rgba(44,85,138,.1); margin-top: 20px;width: 100%;"-->
  233. <!-- >-->
  234. <!-- <span-->
  235. <!-- style="float: left;font-size: 12px;margin-left: 10px;font-weight: 700;color: rgba(44,85,138,1);"-->
  236. <!-- >{{$t('common.ProjectConsultant')}}</span>-->
  237. <!-- <span-->
  238. <!-- style="float: right;font-size: 12px;margin-right: 10px; color: rgba(44,85,138,1);"-->
  239. <!-- >{{$t('common.ResourcesProgram')}}</span>-->
  240. <!-- </div>-->
  241. <!-- <div style="margin-top: 20px;height: 176px;">-->
  242. <!-- <div style="width: 80px;height: 100px;float: left;">-->
  243. <!-- &lt;!&ndash; <img-->
  244. <!-- :src="'api/file/pub/' + ProjectConsultant.pictureAddress"-->
  245. <!-- alt-->
  246. <!-- style="width: 100%;height: 100%;"-->
  247. <!-- v-if="ProjectConsultant.pictureAddress"-->
  248. <!-- /> &ndash;&gt;-->
  249. <!-- <img src="@/assets/img/projectPresentation/user.png" alt="" style="width: 100%;height: 100%;">-->
  250. <!-- </div>-->
  251. <!-- <div style="float: left;">-->
  252. <!-- <div>-->
  253. <!-- <span-->
  254. <!-- v-if="$i18n.locale == 'zh'"-->
  255. <!-- style="font-size: 17px;font-weight: 600;margin-left: 10px;"-->
  256. <!-- >{{ProjectConsultant.consultantName}}</span>-->
  257. <!-- </div>-->
  258. <!-- <div>-->
  259. <!-- <span-->
  260. <!-- v-if="$i18n.locale == 'en'"-->
  261. <!-- style="font-size: 17px;font-weight: 600;margin-left: 10px;"-->
  262. <!-- >{{ProjectConsultant.consultantNameEn}}</span>-->
  263. <!-- </div>-->
  264. <!-- <div style="width:500px;line-height:24px;margin-top: 5px;">-->
  265. <!-- <span-->
  266. <!-- style="font-size: 14px;margin-left: 10px;color:rgba(102,102,102,1);"-->
  267. <!-- >{{$t('common.AnyConsulting')}}</span>-->
  268. <!-- </div>-->
  269. <!-- </div>-->
  270. <!-- </div>-->
  271. <!-- </div> -->
  272. </div>
  273. </div>
  274. <!-- 留言数据 -->
  275. <div class="enterprise_style" style="font-size: 18px;color: #333;display: block">
  276. <!-- <span>{{$t('common.ProjectMessage')}}({{ProjectMessageNum}}) | {{$t('common.MyMessage')}}({{MyMessageNum}})</span>-->
  277. <span @click="toUserCenterCommunication()">{{$t('common.ProjectMessage')}} | {{$t('common.MyMessage')}}({{MyMessageNum}})</span>
  278. </div>
  279. <!-- 留言框 -->
  280. <div style="margin-left: 30px;width:650px;">
  281. <el-input
  282. type="textarea"
  283. :rows="2"
  284. :placeholder="tokenLogin?
  285. $t('common.Pleasefillinthemessage'): $t('common.AccordingtotheProject')"
  286. v-model="textarea"
  287. ></el-input>
  288. </div>
  289. <!-- 发布 取消按钮 -->
  290. <div style="width:650px;margin-top: 20px;height: 50px;">
  291. <div style="float: right;">
  292. <el-button type="danger" @click="publish()">{{$t('common.releases')}}</el-button>
  293. <el-button type="reset">{{$t('common.Cancel')}}</el-button>
  294. </div>
  295. </div>
  296. <!-- <div style="width: 100%;height: 250px;">
  297. <div class="enterprise_style">
  298. <span class="enterprise_style_span">{{$t('common.GuessProjects')}}</span>
  299. </div>
  300. <div class="recommend">
  301. <ul>
  302. <li v-for="(item,index) in recommend" v-if="index<5" :key="index + 2" style="margin-left: 20px;"
  303. >
  304. <img @click="toViewChange(item.projectId,index)" :src="'api/file/pub/' + item.bannerList[0]" alt style="width: 100%;height: 115px;cursor: pointer;" />
  305. <img @click="toViewNew('projectPresentationDetails',item.projectId,index)"
  306. :src="'api/file/pub/' + item.bannerList[0]" alt
  307. style="width: 100%;height: 115px;cursor: pointer;"/>
  308. <div
  309. style="color: #bcbcbc;font-size: 14px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"
  310. >{{item.projectName}}
  311. </div>
  312. </li>
  313. </ul>
  314. </div>
  315. </div> -->
  316. <el-dialog
  317. :title="$t('common.ConsultingBar')"
  318. :visible.sync="isOnlineConsultation"
  319. width="50%"
  320. center>
  321. <div style="font-size: 21px">
  322. <i class="el-icon-office-building" aria-hidden="true"></i>
  323. {{$t('common.projectName')}}:
  324. <span
  325. :alt="initData.projectName"
  326. > {{initData.projectName}}
  327. </span>
  328. </div>
  329. <div style="font-size: 21px">
  330. <span>
  331. <i class="el-icon-office-building" aria-hidden="true"></i>
  332. {{initData.technicalCategories}} | {{initData.technicalScope}}
  333. </span>
  334. </div>
  335. <div style="font-size: 21px">
  336. <span>
  337. <i class="el-icon-tickets"></i>
  338. {{$t('common.ProjectNumber')}}:
  339. <span
  340. style="color:#62b605"
  341. >{{initData.projectNum || $t('common.NoProjectNumber')}}</span>
  342. </span>
  343. </div>
  344. <div>
  345. <el-input
  346. type="textarea"
  347. :rows="2"
  348. style="margin-top: 30px;min-height:300px"
  349. :placeholder="$t('common.EnterContent')"
  350. v-model="consultMessageInfo.content"
  351. ></el-input>
  352. </div>
  353. <span slot="footer" class="dialog-footer">
  354. <el-button @click="isOnlineConsultation = false">{{$t('common.Cancel')}}</el-button>
  355. <el-button type="primary" @click="consultMessage">{{$t('common.OK')}}</el-button>
  356. </span>
  357. </el-dialog>
  358. <el-dialog
  359. :title="$i18n.locale=='zh'?'提示':'Reminder'"
  360. :visible.sync="toViewLogin"
  361. :width="$i18n.locale=='zh'?'500px':'750px'"
  362. :height="$i18n.locale=='zh'?'300px':'386px'"
  363. :before-close="toViewLoginChange">
  364. <div style="width: 100%;height: 100%;">
  365. <img src="@/assets/img/loginTips.png" alt="" style="width: 180px;height: 180px;margin-left: 20px;">
  366. <div style="float: right;margin-right: 20px;"
  367. :style="$i18n.locale=='zh'?'width: 49%;margin-top: 10px;':'width: 453px;margin-top: -25px;'">
  368. <div style="font-size: 20px;font-weight: normal;color: #333333;
  369. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  370. line-height: 40px;">
  371. {{$t('common.ReminderFirst')}}
  372. </div>
  373. <div style="font-size: 16px;font-family: HiraginoSansGB-W3, HiraginoSansGB;
  374. font-weight: normal;color: #666666;line-height: 30px;">
  375. {{$t('common.ReminderSecond')}} <span style="color: #0091FF;font-size: 18px;">{{num}}</span>
  376. {{$t('common.ReminderThird')}}
  377. </div>
  378. <div style="font-size: 14px;font-family: HiraginoSansGB-W3, HiraginoSansGB;
  379. font-weight: normal;color: #666666;line-height: 30px;">
  380. {{$t('common.ReminderForth')}}
  381. </div>
  382. <div style="font-size: 14px;font-family: HiraginoSansGB-W3, HiraginoSansGB;
  383. height:33px;line-height:60px;font-weight: normal;color: #0091FF;">
  384. <span style="margin-left: 40px;" class="cursor" @click="toView('login')">
  385. {{$t('common.ReminderFifth')}}
  386. </span>
  387. <span style="margin-left: 10px;" class="cursor" @click="toView('Register')">
  388. {{$t('common.ReminderSixth')}}
  389. </span>
  390. </div>
  391. </div>
  392. </div>
  393. </el-dialog>
  394. </div>
  395. </div>
  396. </template>
  397. <script>
  398. import Base from "@/views/base/Base";
  399. import {getDicts} from "@/api/dict";
  400. import { Swiper, SwiperSlide, directive } from 'vue-awesome-swiper'
  401. import 'vue-awesome-swiper/node_modules/swiper/dist/css/swiper.css'
  402. import Clipboard from "clipboard";
  403. import {saveOrUpdate as saveConsultMessageInfo} from "@/api/operation/consultMessageInfo";
  404. import {getFollowModeNumlByModelIdAndUserId} from "@/api/operation/basePortalModelFollowInfo";
  405. import {saveInteractiveMessage} from "@/api/operation/interactiveMessage";
  406. import {saveOrUpdate as clickSave} from "@/api/operation/basePortalModelClickInfo";
  407. import {
  408. get,
  409. getBannerPaths,
  410. gateGetProjectViewInfo,
  411. getBaseProjectViews,
  412. getBaseProjectViewsm,
  413. getInteractiveMessageCount,
  414. gateGetArchiveFilePath,
  415. getBaseProjectViewsRecommend
  416. } from "@/api/project/baseProjectView";
  417. import {getToken, resetToken} from "@/utils/auth";
  418. import {gateGetProjectConsultant} from "@/api/project/baseProjectConsultantInfo";
  419. import {getBaseProjectArchivesFiles} from "@/api/baseProjectArchivesFile";
  420. import {getBaseProjectArchivesInfos} from "@/api/baseProjectArchivesInfo";
  421. import {downloadFile, downloadAttachment} from "@/api/file";
  422. import {
  423. getFollowModeNumlByModelId,
  424. getFollowModelNumByUser,
  425. saveFollowModel,
  426. } from "@/api/operation/basePortalModelFollowInfo";
  427. export default {
  428. name: "projectPresentationDetails",
  429. extends: Base,
  430. data() {
  431. return {
  432. flag: false,
  433. dialogVisible: false,
  434. num: 0,
  435. toViewLogin: false,
  436. timer: '',
  437. indexTo: 1,
  438. num:5,
  439. tokenLogin:null,
  440. toDate: 0,
  441. attaments: [],
  442. attachmentId: "",
  443. attamentParams: {
  444. attachmentBusinessId: "",
  445. attachmentBusinessType: "base_project_archives_file",
  446. },
  447. infoParams: {
  448. pageNo: 0,
  449. pageSize: 1,
  450. language: "",
  451. projectId: "",
  452. screenId: this.$route.params.screenId,
  453. dataIndex: this.$route.params.dataIndex,
  454. cruPage: this.$route.params.cruPage,
  455. },
  456. // parentIndex:this.$parent.params.descStatus,
  457. parames: {
  458. columnCode: "", //项目id
  459. scrennid: "",
  460. },
  461. ProjectMessageNum: 0,
  462. MyMessageNum: 0,
  463. ReplyMyNum: 0,
  464. enterpriseDetails: "",
  465. textarea: "",
  466. url: "",
  467. isOnlineConsultation: false,
  468. id: this.$route.params.key,
  469. ProjectConsultant: {},
  470. clickModel:{
  471. modelType:"project",
  472. modelEntityId:"",
  473. userId:"",
  474. clickTime:"",
  475. },
  476. consultMessageInfo: {},
  477. interactiveMessageInfo: {
  478. title: "",
  479. content: "",
  480. senderId: "",
  481. receiverId: "",
  482. replyStatus: "",
  483. replyStatusDict: "",
  484. approveStatus: "",
  485. approveStatusDict: "",
  486. columnName: "",
  487. columnCode: "",
  488. bizObjectId: "",
  489. bizObjectType: "",
  490. createBy: "",
  491. createDate: "",
  492. updateBy: "",
  493. updateDate: "",
  494. },
  495. img: [],
  496. imgs: [
  497. {
  498. src: "u6668.png",
  499. },
  500. {
  501. src: "u6676.png",
  502. },
  503. {
  504. src: "u6720.png",
  505. },
  506. {
  507. src: "u6763.png",
  508. },
  509. {
  510. src: "u6668.png",
  511. },
  512. {
  513. src: "u6720.png",
  514. },
  515. ],
  516. recommend: [],
  517. ifcommon: false,
  518. initData: {},
  519. enterprise: {
  520. label1: {
  521. label:
  522. "经营范围包括三峡工程建设和经营管理,住宿经营的管理;长江中上游水资源开发;水利水电技术服务;水利水电工程所需物资、设备的销售(国家有专营专项的除外);与上述业务有关的咨询服务;经营或代理公司所属企业自产产品(国家组织统一联合经营的16种出口商品除外)的出口业务;经营或代理公司及所属产业所需设备和材料(国家指定公司经营的12种进口商品除外)的进口业务;经营或代理技术进出口业务;承办中外合资经营、合作生产、来料加工、来样加工、来件装配、补偿贸易及易货贸易业务。(企依法自主选择经营项目,开展经营活动;依法需批准的项目;经相关部门批准后依批准的内容开展经营活动;不得从事本市产业政策禁止和限制类的经营活动。",
  523. src: "u6668.png",
  524. },
  525. },
  526. user: {}
  527. };
  528. },
  529. created() {
  530. this.enterpriseDetails = this.$route.params.key;
  531. this.url = window.location.href;
  532. this.tokenLogin=this.$Cookies.get('token');
  533. },
  534. updated() {
  535. this.Swiper();
  536. },
  537. mounted() {
  538. let lang = this.$route.query.lang;
  539. this.$18n.locale = lang;
  540. this.$store.commit('modify', 'projectPresentationDetails');
  541. window.localStorage.setItem('router', 'projectPresentationDetails');
  542. // 项目查询
  543. this.toDate = Date.parse(new Date());
  544. this.getProjextList();
  545. this.getMessageNum();
  546. // debugger;
  547. },
  548. watch: {
  549. "$i18n.locale"() {
  550. this.getProjextList();
  551. },
  552. "toViewLogin"() {
  553. if (this.toViewLogin == true) {
  554. this.loginTipsChange()
  555. }
  556. }
  557. },
  558. methods: {
  559. toUserCenterCommunication(){
  560. var router = 'communication';
  561. var json = '/communication';
  562. var index = null;
  563. window.localStorage.setItem('router', router);
  564. this.$store.commit('modify', router);
  565. const { href } =this.$router.resolve({
  566. name: router,
  567. query: {
  568. key: json,
  569. dataIndex:index,
  570. }
  571. });
  572. window.open(href, '_blank');
  573. },
  574. //跳到一个新的页面
  575. toViewNew(router, json, index) {
  576. console.log(router, json, index, '---------- ----')
  577. this.index = this.params ? this.params.descStatus : '0';
  578. window.localStorage.setItem('router', router);
  579. this.dataIndex = this.params
  580. this.cruPage = this.params ? this.params.pageNo : '0';
  581. this.$store.commit('modify', router);
  582. console.log(this.cruPage)
  583. this.$store.commit('modify', router);
  584. window.localStorage.setItem('router', router);
  585. const { href } = this.$router.resolve({
  586. name: router,
  587. params: {
  588. key: json,
  589. screenId:this.index,
  590. dataIndex:index,
  591. cruPage:this.cruPage
  592. }
  593. });
  594. window.open(href, '_blank');
  595. },
  596. //项目顾问在线咨询打开方法
  597. olineConsultingOpen() {
  598. // alert("项目顾问在线咨询");
  599. //检测是否为登陆用户
  600. let user = window.localStorage.getItem("user");
  601. if (!this.$Cookies.get('token')) {
  602. this.toViewLogin = true;
  603. } else {
  604. this.isOnlineConsultation = true
  605. }
  606. },
  607. dialogVisibleChange() {
  608. this.dialogVisible = true;
  609. },
  610. // 推荐数据切换
  611. toViewChange(id, index) {
  612. this.infoParams.projectId = id;
  613. this.getList();
  614. },
  615. // 未登录跳转
  616. loginTipsChange() {
  617. const that = this;
  618. this.num = 5;
  619. // clearInterval(timer_interval);
  620. this.timer = setInterval(function () {
  621. if (that.num > 0) {
  622. that.num--;
  623. } else {
  624. if (that.toViewLogin == true) {
  625. clearInterval(that.timer);
  626. that.toView('login');
  627. } else {
  628. clearInterval(that.timer);
  629. }
  630. }
  631. }, 1000)
  632. },
  633. // 判断未登录跳转是否关闭
  634. toViewLoginChange(done) {
  635. this.toViewLogin = false;
  636. this.num = 5;
  637. clearInterval(this.timer);
  638. },
  639. //关注操作方法
  640. saveFollowModelDo: function (followType) {
  641. let user = window.localStorage.getItem("user");
  642. if (!this.$Cookies.get('token')) {
  643. // this.$message.warning("请先登录");
  644. // this.$confirm('检测到您未登录,是否登录')
  645. // .then(_ => {
  646. // this.toView('login');
  647. // })
  648. // .catch(_ => {});
  649. this.toViewLogin = true;
  650. } else {
  651. var users = JSON.parse(user);
  652. var token = "" + getToken();
  653. var projectId = this.initData.projectId;
  654. var userId = users.userId;
  655. // 接口逻辑
  656. this.submitHandler((token) => {
  657. saveFollowModel(projectId, "project", userId, followType, token)
  658. .then((result) => {
  659. if(followType=='unfollow'){
  660. if(this.$i18n.locale=='zh'){
  661. this.$message({
  662. message: '取消关注成功',
  663. type: "success",
  664. });
  665. }else{
  666. this.$message({
  667. message: 'Cancel the follow successfully',
  668. type: "success",
  669. });
  670. }
  671. }else{
  672. if(this.$i18n.locale=='zh'){
  673. this.$message({
  674. message: '关注成功',
  675. type: "success",
  676. });
  677. }else{
  678. this.$message({
  679. message: 'Follow of success',
  680. type: "success",
  681. });
  682. }
  683. }
  684. // console.log(result);
  685. // this.$message({
  686. // message: result.data,
  687. // type: "success",
  688. // });
  689. this.ifcommon = !this.ifcommon;
  690. this.resetToken();
  691. })
  692. .catch((error) => {
  693. // 此处你的业务代码
  694. });
  695. });
  696. }
  697. },
  698. // 留言操作方法
  699. publish: function () {
  700. if (!this.$Cookies.get('token')) {
  701. // this.$message.warning("请先登录");
  702. // this.$confirm('检测到您未登录,是否登录')
  703. // .then(_ => {
  704. // this.toView('login');
  705. // })
  706. // .catch(_ => {});
  707. this.toViewLogin = true;
  708. } else {
  709. this.interactiveMessageInfo.content = this.textarea;
  710. // let user = window.localStorage.getItem("user");
  711. // var users = JSON.parse(user);
  712. // this.interactiveMessageInfo.senderId = users.userId;
  713. // this.interactiveMessageInfo.senderName = users.username;
  714. this.interactiveMessageInfo.replyStatus = "否";
  715. this.interactiveMessageInfo.replyStatusDict = "N";
  716. this.interactiveMessageInfo.approveStatusDict = "0";
  717. this.interactiveMessageInfo.bizObjectType = "0";
  718. this.interactiveMessageInfo.columnCode = this.initData.projectId;
  719. let token = getToken();
  720. if (this.textarea) {
  721. this.submitHandler((token) => {
  722. saveInteractiveMessage(
  723. JSON.stringify(this.interactiveMessageInfo),
  724. token
  725. ).then((res) => {
  726. if(this.$i18n.locale=='zh'){
  727. this.$message({
  728. message: '已发送成功,请等待回复',
  729. type: "success",
  730. });
  731. }else{
  732. this.$message({
  733. message: 'It has been sent successfully. Please wait for your reply',
  734. type: "success",
  735. });
  736. }
  737. // alert(res.msg);
  738. // this.$message({
  739. // message: "已发送成功,请等待回复",
  740. // type: "success",
  741. // });
  742. this.getMessageNum();
  743. });
  744. this.interactiveMessageInfo = {};
  745. this.textarea = "";
  746. this.resetToken();
  747. });
  748. } else {
  749. this.$message(this.$t("common.Pleasefillinthecontentfirst"));
  750. }
  751. }
  752. },
  753. downLoad: function () {
  754. gateGetArchiveFilePath(this.id).then((res) => {
  755. downloadAttachment(res.data.paths[0])
  756. .then((res) => {
  757. this.download(res);
  758. })
  759. .catch((err) => {
  760. if (err.msg) {
  761. alert(err.msg);
  762. }
  763. console.log(err);
  764. });
  765. }).catch((err) => {
  766. if (err.msg) {
  767. alert(err.msg);
  768. }
  769. console.log(err);
  770. });
  771. },
  772. getProjextList() {
  773. this.infoParams.projectId = this.$route.query.key !== undefined ? this.$route.query.key :
  774. this.$route.params.key !== undefined ? this.$route.params.key : '';
  775. this.getList();
  776. },
  777. getList() {
  778. // 判断是否是会员显示项目规模
  779. let user = window.localStorage.getItem("user");
  780. var users = JSON.parse(user);
  781. if (null != users && null != users.userId && users.umsUser.userUsertypeDict == "2") {
  782. this.flag = true;
  783. }
  784. this.infoParams.language = this.$i18n.locale.toUpperCase();
  785. const that = this;
  786. gateGetProjectViewInfo(this.infoParams).then((res) => {
  787. // res.data.baseProjectView.setUpDate=this.handlePublishTimeDesc(new Date, res.data.baseProjectView.setUpDate)
  788. if (JSON.stringify(res.data) == '{}') {
  789. this.$message({
  790. message: this.$t('common.Projecthasnocurrentversion'),
  791. type: "error",
  792. });
  793. return this.toView('enterprise');
  794. } else {
  795. res.data.baseProjectView.setDownDate = that.formatDate(
  796. res.data.baseProjectView.setDownDate,
  797. "YYYY-MM-DD"
  798. );
  799. that.initData = res.data.baseProjectView || [];
  800. that.interactiveMessageInfo.columnCode =
  801. res.data.baseProjectView.projectId;
  802. if (!that.initData.bannerList[0]) {
  803. that.initData.bannerList[0] = '',
  804. that.initData.bannerList[0] = "/def/projectdefault.png";
  805. }
  806. if(that.initData.updateDate){
  807. that.initData.createDate = that.initData.updateDate
  808. }
  809. gateGetProjectConsultant(this.initData.projectConsultantId).then(
  810. (res) => {
  811. if(res.data != undefined){
  812. this.ProjectConsultant = res.data.baseProjectConsultantInfo;
  813. }
  814. }
  815. );
  816. console.log('----------------____________-----------------', that.initData.bannerList)
  817. this.$forceUpdate();
  818. that.getRecommended();
  819. // 获取字典值
  820. if (this.$i18n.locale == 'zh') {
  821. getDicts("PROJECT_CATEGORIES_DICT").then((res) => {
  822. res.data[0].forEach((i) => {
  823. if (i.value == this.initData.technicalCategories) {
  824. this.initData.technicalCategories = i.label;
  825. }
  826. });
  827. });
  828. getDicts("TECHNICAL_SCOPE_DICT").then((res) => {
  829. res.data[0].forEach((i) => {
  830. if (i.value == this.initData.technicalScope) {
  831. this.initData.technicalScope = i.label;
  832. }
  833. });
  834. });
  835. getDicts("PHASE_TYPE_DICT").then((res) => {
  836. res.data[0].forEach((i) => {
  837. if (i.value == this.initData.phaseType) {
  838. this.initData.phaseType = i.label;
  839. }
  840. });
  841. });
  842. } else {
  843. getDicts("PROJECT_CATEGORIES_DICT_EN").then((res) => {
  844. res.data[0].forEach((i) => {
  845. if (i.value == this.initData.technicalCategories) {
  846. this.initData.technicalCategories = i.label;
  847. }
  848. });
  849. });
  850. getDicts("TECHNICAL_SCOPE_DICT_EN").then((res) => {
  851. res.data[0].forEach((i) => {
  852. if (i.value == this.initData.technicalScope) {
  853. this.initData.technicalScope = i.label;
  854. }
  855. });
  856. });
  857. getDicts("PHASE_TYPE_DICT_EN").then((res) => {
  858. res.data[0].forEach((i) => {
  859. if (i.value == this.initData.phaseType) {
  860. this.initData.phaseType = i.label;
  861. }
  862. });
  863. });
  864. }
  865. let user = window.localStorage.getItem("user");
  866. if (user) {
  867. var users = JSON.parse(user);
  868. var token = "" + getToken();
  869. var projectId = this.initData.projectId;
  870. this.userId = users.userId;
  871. getFollowModeNumlByModelIdAndUserId(
  872. projectId,
  873. "project",
  874. this.userId
  875. ).then((res) => {
  876. this.ifcommon = res.data;
  877. console.log(
  878. res.data,
  879. "---------------------------------------------------------------------------"
  880. );
  881. });
  882. this.clickModel.modelEntityId = this.infoParams.projectId
  883. this.clickModel.userId = users.userId;
  884. this.clickModel.clickTime = (new Date()).getTime();
  885. //如果存在用户则对用户进行点击保存操作
  886. this.submitHandler((token) => {
  887. clickSave(JSON.stringify(this.consultMessageInfo), token);
  888. this.resetToken();
  889. });
  890. }
  891. }
  892. });
  893. },
  894. //获取留言信息
  895. getMessageNum() {
  896. //2020年12月8日 11:09:36 取消项目留言数量
  897. //获取项目id
  898. this.parames.columnCode = this.infoParams.projectId;
  899. //获取用户id
  900. let token = getToken();
  901. // console.log(JSON.parse(JSON.stringify(this.parames)));
  902. getInteractiveMessageCount(this.parames,token).then(
  903. (result) => {
  904. var data = result.data;
  905. // this.ProjectMessageNum = data.projectNum;
  906. this.MyMessageNum = data.senderNum;
  907. this.ReplyMyNum = data.reciverNum;
  908. this.resetToken();
  909. }
  910. );
  911. },
  912. Swiper() {
  913. var galleryThumbs = new Swiper(".gallery-thumbs", {
  914. spaceBetween: 10,
  915. slidesPerView: 4,
  916. freeMode: true,
  917. watchSlidesVisibility: true,
  918. watchSlidesProgress: true,
  919. autoplay: {//自动播放
  920. delay: 4000,
  921. disableOnInteraction: false,//用户操作后是否停止 默认停止(true)
  922. },
  923. });
  924. var galleryTop = new Swiper(".gallery-top", {
  925. spaceBetween: 10,
  926. navigation: {
  927. nextEl: ".swiper-button-next",
  928. prevEl: ".swiper-button-prev"
  929. },
  930. autoplay: {//自动播放
  931. delay: 4000,
  932. disableOnInteraction: false,//用户操作后是否停止 默认停止(true)
  933. },
  934. thumbs: {
  935. swiper: galleryThumbs
  936. }
  937. });
  938. },
  939. getRecommended() {
  940. let params = {
  941. pageNo: 0,
  942. pageSize: 5,
  943. language: this.$i18n.locale.toUpperCase(),
  944. recommendFlag: "y",
  945. status: "1",
  946. descStatus: 0,
  947. id: this.infoParams.projectId
  948. };
  949. const that = this;
  950. getBaseProjectViews(params).then((res) => {
  951. if (res.data.baseProjectViews) {
  952. that.recommend = [];
  953. res.data.baseProjectViews.forEach((item) => {
  954. if (item.bannerList.length > 0) {
  955. that.recommend.push(item);
  956. }
  957. });
  958. console.log(res.data.baseUnitViews, that.init);
  959. } else {
  960. // this.$message("当前推荐企业暂无信息");
  961. }
  962. this.loading = false;
  963. });
  964. },
  965. // 项目收藏改变
  966. shareChange() {
  967. if (this.ifcommon) {
  968. this.saveFollowModelDo("unfollow");
  969. } else {
  970. this.saveFollowModelDo("follow");
  971. }
  972. },
  973. handleClose(done) {
  974. this.isOnlineConsultation = false;
  975. },
  976. consultMessage() {
  977. // debugger
  978. // 人员信息
  979. this.consultMessageInfo.replyStatusDict = "N";
  980. this.consultMessageInfo.senderDate = new Date();
  981. this.consultMessageInfo.bizObjectType = "0";
  982. this.consultMessageInfo.columnCode = this.initData.projectId;
  983. let token = getToken();
  984. this.submitHandler((token) => {
  985. saveConsultMessageInfo(JSON.stringify(this.consultMessageInfo), token)
  986. .then((result) => {
  987. // alert(result.msg);
  988. this.$message({
  989. message: this.$t('common.Sentsuccessfullypleasewaitforreply'),//已发送成功,请等待回复
  990. type: "success",
  991. });
  992. this.consultMessageInfo = {};
  993. this.isOnlineConsultation = false;
  994. this.resetToken();
  995. })
  996. .catch((error) => {
  997. this.consultMessageInfo = {};
  998. this.resetToken();
  999. });
  1000. this.resetToken();
  1001. });
  1002. },
  1003. getIconUrl(url) {
  1004. return require("@/assets/img/realTimeInfo/" + url);
  1005. },
  1006. toView(router, json) {
  1007. clearInterval(this.timer);
  1008. this.$router.push({
  1009. name: router,
  1010. params: json,
  1011. });
  1012. },
  1013. screenBack(data) {
  1014. console.log(data, "screenBackscreenBackscreenBackscreenBack");
  1015. },
  1016. //最新发布标志是否展示
  1017. releaseView() {
  1018. // console.log(this.infoParams.dataIndex);
  1019. // console.log(this.infoParams.screenId);
  1020. // console.log(this.infoParams.dataIndex);
  1021. if (this.infoParams.screenId == 0 && this.infoParams.dataIndex < 5 && this.infoParams.cruPage == 1) {
  1022. return true
  1023. } else {
  1024. return false
  1025. }
  1026. }
  1027. },
  1028. };
  1029. </script>
  1030. <!-- Add "scoped" attribute to limit CSS to this component only -->
  1031. <style scoped>
  1032. .box {
  1033. margin-top: 10px;
  1034. background: #fff;
  1035. /* height: 500px; */
  1036. padding: 20px 0;
  1037. }
  1038. .crumbs {
  1039. margin-left: 20px;
  1040. }
  1041. body {
  1042. margin: 0;
  1043. }
  1044. .swipers {
  1045. position: absolute;
  1046. top: 30px;
  1047. left: 30px;
  1048. width: 550px;
  1049. height: 439px;
  1050. }
  1051. .details {
  1052. position: absolute;
  1053. top: 30px;
  1054. left: 600px;
  1055. width: 460px;
  1056. height: 390px;
  1057. }
  1058. .swiper-container {
  1059. width: 100%;
  1060. height: 300px;
  1061. margin-left: auto;
  1062. margin-right: auto;
  1063. }
  1064. .swiper-slide {
  1065. background-size: cover;
  1066. background-position: center;
  1067. }
  1068. .gallery-top {
  1069. height: 80%;
  1070. width: 100%;
  1071. }
  1072. .gallery-thumbs {
  1073. height: 20%;
  1074. box-sizing: border-box;
  1075. padding: 10px 0;
  1076. }
  1077. .gallery-thumbs .swiper-slide {
  1078. width: 25%;
  1079. height: 100%;
  1080. opacity: 0.4;
  1081. }
  1082. .gallery-thumbs .swiper-slide-thumb-active {
  1083. opacity: 1;
  1084. }
  1085. .initData_label {
  1086. color: #2c558a;
  1087. font-weight: 700;
  1088. font-size: 18px;
  1089. line-height: 42px;
  1090. width: 500px;
  1091. display: inline-block;
  1092. /*overflow: hidden;*/
  1093. /*white-space: nowrap;*/
  1094. text-overflow: ellipsis;
  1095. }
  1096. .enterprise_style {
  1097. line-height: 50px;
  1098. height: 50px;
  1099. color: #333;
  1100. padding-left: 30px;
  1101. font-size: 18px;
  1102. font-weight: 700;
  1103. margin-top: 5px;
  1104. }
  1105. .enterprise_style_span {
  1106. display: inline-block;
  1107. /* width: 82px; */
  1108. padding: 0 5px;
  1109. text-align: center;
  1110. height: 100%;
  1111. border-bottom: 2px solid #6699ff;
  1112. }
  1113. .enterprise_style_product tr {
  1114. line-height: 30px;
  1115. width: 100%;
  1116. display: inline-block;
  1117. border-bottom: 1px dashed #ccc;
  1118. font-size: 14px;
  1119. color: #6c819d;
  1120. margin-bottom: 5px;
  1121. }
  1122. .recommend {
  1123. margin-top: 16px;
  1124. /* margin-left: 30px; */
  1125. }
  1126. .recommend li {
  1127. display: inline-block;
  1128. width: 170px;
  1129. /* height: 130px; */
  1130. text-align: center;
  1131. margin-right: 16px;
  1132. }
  1133. .share:hover {
  1134. color: #66b1ff;
  1135. }
  1136. .box >>> .el-textarea__inner {
  1137. height: 85px;
  1138. }
  1139. .enterprise_screen,
  1140. .enterprise_screen2 {
  1141. height: 50px;
  1142. /* padding: 0 10px; */
  1143. width:150px;
  1144. line-height: 50px;
  1145. float: left;
  1146. text-align: center;
  1147. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  1148. font-weight: normal;
  1149. color: rgba(51, 51, 51, 1);
  1150. font-size: 16px;
  1151. }
  1152. .enterprise_screen {
  1153. background: #2c558a;
  1154. color: #fff;
  1155. border: 1px solid #2c558a;
  1156. /* border-top: 2px #2c558a solid; */
  1157. /* width: 124px; */
  1158. }
  1159. .box >>>.el-textarea__inner {
  1160. min-height: 220px !important;
  1161. /* max-height: 220px !important; */
  1162. }
  1163. .enterprise_screen2 {
  1164. /* background: linear-gradient(
  1165. 180deg,
  1166. rgba(253, 253, 253, 1) 0%,
  1167. rgba(197, 208, 222, 1) 100%
  1168. ); */
  1169. border: 1px solid rgba(214, 225, 238, 1);
  1170. }
  1171. </style>