projectPresentationDetails.vue 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908
  1. <template>
  2. <div>
  3. <div class="autoBox box">
  4. <div class="crumbs">
  5. <el-breadcrumb separator="/">
  6. <el-breadcrumb-item :to="{ path: 'home' }">{{
  7. $t("common.Home")
  8. }}
  9. </el-breadcrumb-item>
  10. <el-breadcrumb-item :to="{ path: 'projectPresentation' }"
  11. >{{ $t("common.ProjectResources") }}
  12. </el-breadcrumb-item>
  13. <el-breadcrumb-item>{{
  14. $t("common.ProjectDetails")
  15. }}
  16. </el-breadcrumb-item>
  17. </el-breadcrumb>
  18. </div>
  19. <div style="width: 100%; height: 480px; position: relative">
  20. <div class="swipers">
  21. <div class="swiper-container gallery-top">
  22. <div class="swiper-wrapper">
  23. <div
  24. class="swiper-slide"
  25. v-for="(i, index) in initData.bannerList"
  26. :data-swiper-slide-index="i + index"
  27. >
  28. <img
  29. :src="'api/fileextend/pub/' + i + '?custom=550_352'"
  30. alt
  31. style="width: 100%; height: 100%"
  32. />
  33. </div>
  34. </div>
  35. <div class="swiper-button-next swiper-button-white"></div>
  36. <div class="swiper-button-prev swiper-button-white"></div>
  37. </div>
  38. <div class="swiper-container gallery-thumbs">
  39. <div class="swiper-wrapper">
  40. <div
  41. class="swiper-slide"
  42. :key="i"
  43. :data-swiper-slide-index="index"
  44. v-for="(i, index) in initData.bannerList"
  45. >
  46. <img
  47. :src="'api/fileextend/pub/' + i + '?custom=130_67'"
  48. alt
  49. style="width: 100%; height: 100%"
  50. />
  51. </div>
  52. <!-- -->
  53. <!-- -->
  54. </div>
  55. </div>
  56. </div>
  57. <!-- 项目详情 -->
  58. <div class="details">
  59. <div style="width: 100%; font-size: 16px; color: #333">
  60. <div>
  61. <span class="initData_label cursor" :alt="initData.projectName">
  62. {{ initData.projectName }}
  63. </span>
  64. <span>
  65. <img
  66. src="@/assets/img/projectPresentation/project-recommended.png"
  67. v-if="initData.recommendFlag == 'y'"
  68. alt=""
  69. style="margin-left: 20px"
  70. />
  71. </span>
  72. <!-- 最新发布 -->
  73. <span
  74. v-if="releaseView()"
  75. style="
  76. font-size: 12px;
  77. padding: 5px 10px;
  78. background: #d53c3d;
  79. color: #fff;
  80. font-weight: 700;
  81. float: right;
  82. "
  83. >
  84. {{ $t("common.LatestRelease") }}
  85. </span>
  86. <!-- 推荐项目 -->
  87. <!-- <span style="font-size: 12px;margin-right: 20px;padding:5px 10px;background: #82ab5b;color: #fff;font-weight: 700;float:right;"
  88. >{{$t('common.RecommendedProject')}}</span> -->
  89. </div>
  90. <div style="line-height: 35px">
  91. <div>
  92. <!-- <span>
  93. <i class="el-icon-location-outline"></i>
  94. <el-button type="text" @click="bannerFour(initData.bannerFour)"> {{ initData.bannerFour }}</el-button>
  95. </span>-->
  96. <i class="el-icon-location-outline"></i>
  97. <span v-for="item in initData.bannerFour.split(',')">
  98. <el-button type="text" @click="bannerFour(item)"> {{item}}</el-button>
  99. </span>
  100. </div>
  101. <!-- <div style="overflow:hidden;white-space:nowrap; text-overflow:ellipsis; width: 450px">-->
  102. <div>
  103. <i class="el-icon-place"></i>
  104. <span v-for="item in initData.unitCountry.split(',')">
  105. <el-button type="text" @click="unitCountryFour(item)"> {{item}}</el-button>
  106. </span>
  107. </div>
  108. <div>
  109. <span>
  110. <i class="el-icon-office-building" aria-hidden="true"></i>
  111. {{ initData.technicalCategories }} |
  112. {{ initData.technicalScope }}
  113. </span>
  114. </div>
  115. <div>
  116. <span>
  117. <i class="el-icon-time"></i>
  118. {{ $t("common.Releasedate") }} :
  119. {{
  120. handlePublishTimeDesc(
  121. toDate,
  122. initData.createDate,
  123. $i18n.locale
  124. )
  125. }}
  126. {{ $t("common.release") }}
  127. </span>
  128. </div>
  129. <!-- <div>-->
  130. <!-- <span>-->
  131. <!-- <i class="el-icon-time"></i>-->
  132. <!-- {{$t('common.Deadline')}}:{{initData.setDownDate ||$t('common.NoDeadline')}}-->
  133. <!-- </span>-->
  134. <!-- </div>-->
  135. <div>
  136. <span>
  137. <i class="el-icon-tickets"></i>
  138. {{ $t("common.ProjectNumber") }}:
  139. <span style="color: #62b605">{{
  140. initData.projectNum || $t("common.NoProjectNumber")
  141. }}</span>
  142. </span>
  143. <!--当前阶段-->
  144. <div>
  145. <span> {{ $t("common.CurrentStage") }}: </span>
  146. <span>
  147. {{ initData.phaseType }}
  148. </span>
  149. </div>
  150. </div>
  151. <!-- <div>
  152. <span>
  153. <i class="el-icon-office-building"></i>
  154. {{$t('common.ProjectAmount')}}:
  155. <span
  156. style="color:#62b605"
  157. >{{initData.amount}}{{$t('common.TenThousandYuan')}}</span>
  158. </span>
  159. </div> -->
  160. <!-- <div style="display: -webkit-box;-->
  161. <!-- -webkit-box-orient: vertical;-->
  162. <!-- -webkit-line-clamp: 5;-->
  163. <!-- overflow: hidden;cursor: pointer;" @click="dialogVisibleChange">-->
  164. <!-- -->
  165. <!-- <span style="line-height:30px">-->
  166. <!-- <i class="el-icon-tickets"></i>-->
  167. <!-- {{$t('common.ProjectScales')}}:-->
  168. <!-- <span v-if="flag == true">{{initData.projectScale}}:</span>-->
  169. <!-- </span>-->
  170. <!-- </div>-->
  171. <!-- <el-dialog-->
  172. <!-- v-if="flag == true"-->
  173. <!-- :title="$t('common.ProjectScale')"-->
  174. <!-- :visible.sync="dialogVisible"-->
  175. <!-- width="30%">-->
  176. <!-- <span style="line-height: 29px;font-size: 18px;">{{initData.projectScale}}</span>-->
  177. <!-- </el-dialog>-->
  178. <!-- <img-->
  179. <!-- v-if="flag == false && this.$i18n.locale == 'zh'"-->
  180. <!-- ref="photoImg"-->
  181. <!-- alt-->
  182. <!-- src="@/assets/zhong.png"-->
  183. <!-- class="img-responsive"-->
  184. <!-- style="display: inline-block; vertical-align: middle;height: 100px;width: 400px;"-->
  185. <!-- />-->
  186. <!-- <img-->
  187. <!-- v-if="flag == false && this.$i18n.locale == 'en'"-->
  188. <!-- ref="photoImg"-->
  189. <!-- alt-->
  190. <!-- src="@/assets/ying.png"-->
  191. <!-- class="img-responsive"-->
  192. <!-- style="display: inline-block; vertical-align: middle;height: 100px;width: 400px;"-->
  193. <!-- />-->
  194. <!-- 项目关注和分享 -->
  195. <!-- <div style="color: #666;font-size: 14px;margin-right: 20px;color: #333;">-->
  196. <!-- <span class="share cursor"-->
  197. <!-- :style="ifcommon?'color: #66b1ff;':''"-->
  198. <!-- style="margin-right: 20px;"-->
  199. <!-- @click="shareChange()">-->
  200. <!-- <i class="el-icon-star-off" :style="ifcommon?'color: #66b1ff;':''"></i>-->
  201. <!-- {{ifcommon?$t('common.ProjectAttentioned'):$t('common.AttentionProject')}}-->
  202. <!-- </span>-->
  203. <!-- &lt;!&ndash; <span class="share cursor btn" :data-clipboard-text="url" @click="copy">-->
  204. <!-- <i class="el-icon-share"></i>-->
  205. <!-- {{$t('common.ShareProject')}}-->
  206. <!-- </span> &ndash;&gt;-->
  207. <!-- </div>-->
  208. <div>
  209. <el-button
  210. type=""
  211. style="
  212. margin-left: 10px;
  213. margin-top: 10px;
  214. height: 40px;
  215. width: 170px;
  216. "
  217. icon="el-icon-star-off"
  218. :style="
  219. ifcommon
  220. ? 'color: #fff;border:1px solid #66b1ff;background:#66b1ff;'
  221. : ''
  222. "
  223. @click="shareChange()"
  224. >
  225. {{
  226. ifcommon
  227. ? $t("common.ProjectAttentioned")
  228. : $t("common.AttentionProject")
  229. }}
  230. </el-button>
  231. <el-button
  232. type="success"
  233. style="
  234. margin-left: 10px;
  235. margin-top: 10px;
  236. height: 40px;
  237. width: 170px;
  238. "
  239. icon="el-icon-chat-dot-round"
  240. @click="olineConsultingOpen"
  241. >
  242. {{ $t("common.OlineConsulting") }}
  243. </el-button>
  244. </div>
  245. <div
  246. style="
  247. line-height: 32px;
  248. color: #333;
  249. width: 581px;
  250. height: 256px;
  251. overflow: hidden;
  252. text-overflow: ellipsis;
  253. "
  254. ></div>
  255. </div>
  256. </div>
  257. </div>
  258. </div>
  259. <div style="width: 100%; position: relative">
  260. <div class="enterprise_style">
  261. <span
  262. :class="
  263. indexTo == 1
  264. ? 'enterprise_screen cursor'
  265. : 'enterprise_screen2 cursor'
  266. "
  267. @click="indexTo = 1"
  268. style="display: inline-block"
  269. >{{ $t("common.ProjectPresentation") }}</span
  270. >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  271. <span
  272. :class="
  273. indexTo == 2
  274. ? 'enterprise_screen cursor'
  275. : 'enterprise_screen2 cursor'
  276. "
  277. @click="indexTo = 2"
  278. >{{ $t("common.AnalysisReport") }}</span
  279. >
  280. </div>
  281. <div style="margin-top: 5px; margin-bottom: 15px; overflow: hidden">
  282. <!-- 项目介绍-->
  283. <span
  284. v-if="indexTo == 1"
  285. style="
  286. margin-top: 16px;
  287. display: inline-block;
  288. color: #333;
  289. margin-left: 30px;
  290. line-height: 32px;
  291. width: 90%;
  292. word-break: break-all;
  293. "
  294. >
  295. <!--当前阶段-->
  296. <!-- <div>
  297. <div style="color: #0079ef;font-size: 18px;">
  298. {{$t('common.CurrentStage')}}
  299. </div>
  300. <div style="text-indent: 30px;">
  301. {{initData.phaseType}}
  302. </div>
  303. </div> -->
  304. <!--项目描述-->
  305. <div>
  306. <!-- <div style="color: #0079ef;font-size: 18px;">
  307. {{$t('common.Description')}}
  308. </div> -->
  309. <div
  310. style="text-indent: 30px; word-break: keep-all"
  311. v-html="initData.projectDescription"
  312. >
  313. <!-- {{initData.projectDescription}}-->
  314. </div>
  315. </div>
  316. </span>
  317. <span
  318. v-if="indexTo == 2"
  319. style="
  320. margin-top: 16px;
  321. display: inline-block;
  322. color: #333;
  323. margin-left: 30px;
  324. line-height: 32px;
  325. width: 90%;
  326. word-break: break-all;
  327. "
  328. >
  329. <div v-show="isLogin == false">
  330. <div style="text-align: center; margin: 137px 0 94px 0">
  331. <img
  332. class="loginTip"
  333. src="@/assets/img/projectPresentation/backpack.png"
  334. alt=""
  335. />
  336. </div>
  337. <div style="margin-bottom: 54px">
  338. <div class="moreContent">{{ $t("common.ForMore") }}</div>
  339. <div
  340. style="
  341. width: 190px;
  342. height: 37px;
  343. background-color: rgba(24, 144, 255, 1);
  344. margin: 15px auto;
  345. cursor: pointer;
  346. text-align: center;
  347. "
  348. @click="toViewLogin = true"
  349. >
  350. <span
  351. style="
  352. font-size: 18px;
  353. font-weight: 400;
  354. color: #ffffff;
  355. line-height: 38px;
  356. "
  357. >{{ $t("common.resourceLogIn") }}</span
  358. >
  359. </div>
  360. <!-- <LoginMusk :toViewLogin="toViewLogin" @LoginBack="LoginBack"></LoginMusk>-->
  361. </div>
  362. </div>
  363. <div>
  364. <div
  365. v-show="isLogin == true"
  366. style="text-indent: 30px; word-break: keep-all"
  367. v-html="initData.projectRequirements"
  368. ></div>
  369. </div>
  370. </span>
  371. <!-- <div style="width: 600px;float: right;height: 190px;"> -->
  372. <!-- <div-->
  373. <!-- style="height: 30px;line-height: 30px;background: rgba(44,85,138,.1); margin-top: 20px;width: 100%;"-->
  374. <!-- >-->
  375. <!-- <span-->
  376. <!-- style="float: left;font-size: 12px;margin-left: 10px;font-weight: 700;color: rgba(44,85,138,1);"-->
  377. <!-- >{{$t('common.ProjectConsultant')}}</span>-->
  378. <!-- <span-->
  379. <!-- style="float: right;font-size: 12px;margin-right: 10px; color: rgba(44,85,138,1);"-->
  380. <!-- >{{$t('common.ResourcesProgram')}}</span>-->
  381. <!-- </div>-->
  382. <!-- <div style="margin-top: 20px;height: 176px;">-->
  383. <!-- <div style="width: 80px;height: 100px;float: left;">-->
  384. <!-- &lt;!&ndash; <img-->
  385. <!-- :src="'api/file/pub/' + ProjectConsultant.pictureAddress"-->
  386. <!-- alt-->
  387. <!-- style="width: 100%;height: 100%;"-->
  388. <!-- v-if="ProjectConsultant.pictureAddress"-->
  389. <!-- /> &ndash;&gt;-->
  390. <!-- <img src="@/assets/img/projectPresentation/user.png" alt="" style="width: 100%;height: 100%;">-->
  391. <!-- </div>-->
  392. <!-- <div style="float: left;">-->
  393. <!-- <div>-->
  394. <!-- <span-->
  395. <!-- v-if="$i18n.locale == 'zh'"-->
  396. <!-- style="font-size: 17px;font-weight: 600;margin-left: 10px;"-->
  397. <!-- >{{ProjectConsultant.consultantName}}</span>-->
  398. <!-- </div>-->
  399. <!-- <div>-->
  400. <!-- <span-->
  401. <!-- v-if="$i18n.locale == 'en'"-->
  402. <!-- style="font-size: 17px;font-weight: 600;margin-left: 10px;"-->
  403. <!-- >{{ProjectConsultant.consultantNameEn}}</span>-->
  404. <!-- </div>-->
  405. <!-- <div style="width:500px;line-height:24px;margin-top: 5px;">-->
  406. <!-- <span-->
  407. <!-- style="font-size: 14px;margin-left: 10px;color:rgba(102,102,102,1);"-->
  408. <!-- >{{$t('common.AnyConsulting')}}</span>-->
  409. <!-- </div>-->
  410. <!-- </div>-->
  411. <!-- </div>-->
  412. <!-- </div> -->
  413. </div>
  414. </div>
  415. <div class="enter">
  416. <!-- 留言内容 -->
  417. <span
  418. style="
  419. font-weight: 600;
  420. color: #333333;
  421. margin: 0 20px;
  422. line-height: 32px;
  423. "
  424. >{{ $t("common.ProjectMessage") }}({{
  425. ProjectMessageNum == "" ? 0 : ProjectMessageNum
  426. }})
  427. </span>
  428. <span
  429. style="
  430. font-weight: 600;
  431. color: #0091ff;
  432. margin: 0 20px;
  433. line-height: 32px;
  434. float: right;
  435. "
  436. class="cursor"
  437. @click="dialogVisibleChange()"
  438. >{{ $t("common.LeavingMessage") }}</span
  439. >
  440. <!-- <div class="cursor">
  441. </div> -->
  442. <div
  443. style="
  444. margin: 0 20px;
  445. padding: 20px 10px;
  446. border-top: 1px #2c558a solid;
  447. "
  448. ></div>
  449. <div class="messageBox" v-for="(item, index) in paramesList">
  450. <div
  451. style="
  452. margin: 0 20px;
  453. padding: 10px 10px 0 10px;
  454. border-top: 1px solid #cbcbcb;
  455. "
  456. >
  457. <div>
  458. <!-- <span style="font-size:14px;color: #666666;line-height: 22px;">{{item.columnName}}项目</span> -->
  459. <div
  460. style="
  461. width: 40px;
  462. height: 40px;
  463. border-radius: 50%;
  464. border: 1px solid #aaaaaa;
  465. display: inline-block;
  466. overflow: hidden;
  467. "
  468. >
  469. <img
  470. v-if="item.imagesPath"
  471. :src="imageAddPath(item.imagesPath)"
  472. alt=""
  473. style="width: 100%; height: 100%"
  474. />
  475. </div>
  476. <div style="width: 95%; float: right">
  477. <div>
  478. <span
  479. style="float: left; color: #3a88c6"
  480. v-if="useId == item.senderId"
  481. >{{ item.senderName }}
  482. </span>
  483. <span v-if="useId != item.senderId"
  484. >{{ item.senderName }}
  485. </span>
  486. <span style="float: right; color: #c1c1c1"
  487. >{{ $t("common.MessageTime") }}:{{ item.createDate }}</span
  488. >
  489. </div>
  490. <div style="margin: 30px 0">
  491. <p>{{ item.content }}</p>
  492. </div>
  493. <!-- <div>
  494. <span style="float:right;margin-left:34px;color:#c1c1c1"><span style="color:#000">{{messageList.collect_num}} </span>{{$t('common.Collect')}}</span>
  495. <span style="float:right;margin-left:34px;color:#c1c1c1"><span style="color:#000">{{messageList.like_num}}</span>{{$t('common.Praise')}}</span>
  496. </div> -->
  497. </div>
  498. <div style="clear: both"></div>
  499. </div>
  500. </div>
  501. <!-- 回复内容-->
  502. <div class="Platform" v-if="item.interactiveMessageInfo">
  503. <div
  504. style="
  505. height: 70px;
  506. padding: 0 10px;
  507. line-height: 70px;
  508. "
  509. >
  510. <img
  511. v-if="item.imagesPath"
  512. :src="imageAddPath(item.interactiveMessageInfo.imagesPath)"
  513. alt=""
  514. style="
  515. width: 40px;
  516. border-radius: 50%;
  517. vertical-align: middle;
  518. margin-right: 15px;
  519. height: 55%;
  520. "
  521. />
  522. <span>{{ item.interactiveMessageInfo.senderName }} </span>
  523. <span style="float: right; color: #c1c1c1; width: 18%"
  524. >{{ $t("common.ReplyTime") }}:<span>{{
  525. item.interactiveMessageInfo.updateDate
  526. }}</span>
  527. </span>
  528. </div>
  529. <div
  530. style="
  531. width: 100%;
  532. margin: auto;
  533. padding-left: 65px;
  534. box-sizing: border-box;
  535. "
  536. >
  537. <div style="margin: 0px 0">
  538. <p style="display: inline-block">
  539. {{ item.interactiveMessageInfo.content }}
  540. </p>
  541. <div style="clear: both"></div>
  542. </div>
  543. <!-- <div style="height: 20px; margin-bottom: 30px; padding: 0 40px">
  544. <span style="float: right; margin-left: 34px; color: #c1c1c1"
  545. ><span style="color: #000">15 </span
  546. >{{ $t("common.Collect") }}</span
  547. >
  548. <span style="float: right; margin-left: 34px; color: #c1c1c1"
  549. ><span style="color: #000">10</span
  550. >{{ $t("common.Praise") }}</span
  551. >
  552. </div> -->
  553. </div>
  554. </div>
  555. </div>
  556. <!-- <div style="margin: 0 20px;padding:20px 10px 0 10px;border-top:1px #979797 solid">
  557. <div>
  558. <div style="width:40px;height:40px;border-radius:50%;border:1px solid #aaaaaa;display:inline-block">
  559. <img src="@/assets/img/helpCenter/head.jpg" alt="" style="width:100%;border-radius: 50%;">
  560. </div>
  561. <div style="width:95%;float:right;">
  562. <div>
  563. <span style="float:left;color:#3a88c6;">asdasd</span>
  564. <span style="float:right;color:#c1c1c1">{{$t('common.MessageTime')}}:2020-2-12</span>
  565. </div>
  566. <div style="margin:30px 0;">
  567. <p > 清洁能源也被称为绿色能源,包括水能、生物能、太阳能、风能、地热能和海洋能等可再生能源,也包括核能、天然气、清洁煤等非再生能源。下面进行清洁能源行业前景分析。 清洁能源行业分析表示,风能是一种清洁、安全、可再生的绿色能源,利用风能对环境无污染,对生态无破坏,环保效益和生态效益良好,对于人类社会可持续发展具有重要意义。风能可以用来发电、提水、助航、加热等。目前,利用风力发电已越来越成为风能利用的主要形式,受到各国的高度重视,且发展速度最快。</p>
  568. </div>
  569. <div>
  570. <span style="float:right;margin-left:34px;color:#c1c1c1"><span style="color:#000">{{messageList.collect_num}} </span>{{$t('common.Collect')}}</span>
  571. <span style="float:right;margin-left:34px;color:#c1c1c1"><span style="color:#000">{{messageList.like_num}}</span>{{$t('common.Praise')}}</span>
  572. </div>
  573. </div>
  574. <div style="clear:both"></div>
  575. </div>
  576. </div>
  577. <div class="Platform" >
  578. <div style="height:70px;border-bottom:1px solid #cecece;padding:0 10px;line-height: 70px;">
  579. <img src="@/assets/img/helpCenter/head.jpg" alt="" style="width:40px;border-radius: 50%;vertical-align: middle;margin-right: 10px;">
  580. <span style="font-size:14px;color: #666666;line-height: 22px;">金鑫国际电力设备集团有限公司的回复</span>
  581. <span style="float:right;color:#c1c1c1;width:18%">回复时间:<span>2020-2-12</span></span>
  582. </div>
  583. <div style="width:95%;margin:auto" >
  584. <div style="margin:0px 0;">
  585. <p style="display:inline-block" >清洁能源也被称为绿色能源,包括水能、生物能、太阳能、风能、地热能和海洋能等可再生能源,也包括核能、天然气、清洁煤等非再生能源。下面进行清洁能源行业前景分析。 </p>
  586. <div style="clear:both"></div>
  587. </div>
  588. <div style="height: 20px;margin-bottom: 30px;padding:0 40px;">
  589. <span style="float:right;margin-left:34px;color:#c1c1c1"><span style="color:#000">15 </span>{{$t('common.Collect')}}</span>
  590. <span style="float:right;margin-left:34px;color:#c1c1c1"><span style="color:#000">10</span>{{$t('common.Praise')}}</span>
  591. </div>
  592. </div>
  593. </div> -->
  594. <div
  595. style="position: relative; width: 100%; height: 200px"
  596. v-if="paramesList && paramesList.length > 0"
  597. >
  598. <el-pagination
  599. type="index"
  600. :index="indexMethod"
  601. style="
  602. position: absolute;
  603. left: 50%;
  604. top: 50%;
  605. transform: translate(-50%, -50%);
  606. "
  607. background
  608. layout="prev, pager, next"
  609. :page-size="2"
  610. :total="ProjectMessageNum - 0"
  611. @current-change="handleCurrentChange"
  612. >
  613. </el-pagination>
  614. </div>
  615. </div>
  616. <!-- 留言数据 -->
  617. <!-- <div class="enterprise_style" style="font-size: 18px;color: #333;display: block"> -->
  618. <!-- <span>{{$t('common.ProjectMessage')}}({{ProjectMessageNum}}) | {{$t('common.MyMessage')}}({{MyMessageNum}})</span> -->
  619. <!-- <span @click="toUserCenterCommunication()">{{$t('common.ProjectMessage')}} | {{$t('common.MyMessage')}}({{MyMessageNum}})</span> -->
  620. <!-- </div> -->
  621. <!-- 留言框 -->
  622. <el-dialog
  623. :title="$t('common.LeavingMessage')"
  624. :visible.sync="dialogVisible"
  625. width="30%"
  626. >
  627. <div style="padding: 0 20px" v-if="$i18n.locale == 'zh'">
  628. <span>留言内容:</span>
  629. <el-input
  630. required="required"
  631. type="textarea"
  632. style="margin-top: 10px; margin-bottom: 10px"
  633. placeholder="请输入内容"
  634. maxlength="200"
  635. show-word-limit
  636. v-model="textarea"
  637. >
  638. </el-input>
  639. <div style="color: #67c23a; margin-bottom: 20px">
  640. 提示:您的留言需要平台工作人员审核后才可以对外展示,请耐心等待。
  641. </div>
  642. <span slot="footer" class="dialog-footer" style="margin-left: 150px">
  643. <el-button @click="closeDialogVisible()">取 消</el-button>
  644. <el-button type="primary" @click="publish()">确 定</el-button>
  645. </span>
  646. </div>
  647. <div style="padding: 0 20px" v-if="$i18n.locale == 'en'">
  648. <span>Message Content:</span>
  649. <el-input
  650. required="required"
  651. type="textarea"
  652. style="margin-top: 10px; margin-bottom: 10px"
  653. placeholder="Please input the content"
  654. v-model="textarea"
  655. >
  656. </el-input>
  657. <div style="color: #67c23a; margin-bottom: 20px">
  658. Tips:Your message needs to be reviewed by the platform staff before
  659. it can be displayed. Please wait patiently.
  660. </div>
  661. <span slot="footer" class="dialog-footer" style="margin-left: 150px">
  662. <el-button @click="closeDialogVisible()">Close</el-button>
  663. <el-button type="primary" @click="publish()">Save</el-button>
  664. </span>
  665. </div>
  666. </el-dialog>
  667. <!-- 发布 取消按钮 -->
  668. <!-- <div style="width:650px;margin-top: 20px;height: 50px;">
  669. <div style="float: right;">
  670. <el-button type="danger" @click="publish()">{{$t('common.releases')}}</el-button>
  671. <el-button type="reset">{{$t('common.Cancel')}}</el-button>
  672. </div>
  673. </div> -->
  674. <!-- <div style="width: 100%;height: 250px;">
  675. <div class="enterprise_style">
  676. <span class="enterprise_style_span">{{$t('common.GuessProjects')}}</span>
  677. </div>
  678. <div class="recommend">
  679. <ul>
  680. <li v-for="(item,index) in recommend" v-if="index<5" :key="index + 2" style="margin-left: 20px;"
  681. >
  682. <img @click="toViewChange(item.projectId,index)" :src="'api/file/pub/' + item.bannerList[0]" alt style="width: 100%;height: 115px;cursor: pointer;" />
  683. <img @click="toViewNew('projectPresentationDetails',item.projectId,index)"
  684. :src="'api/file/pub/' + item.bannerList[0]" alt
  685. style="width: 100%;height: 115px;cursor: pointer;"/>
  686. <div
  687. style="color: #bcbcbc;font-size: 14px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"
  688. >{{item.projectName}}
  689. </div>
  690. </li>
  691. </ul>
  692. </div>
  693. </div> -->
  694. <el-dialog
  695. :title="$t('common.ConsultingBar')"
  696. :visible.sync="isOnlineConsultation"
  697. width="50%"
  698. center
  699. >
  700. <div style="font-size: 21px">
  701. <i class="el-icon-office-building" aria-hidden="true"></i>
  702. {{ $t("common.projectName") }}:
  703. <span :alt="initData.projectName"> {{ initData.projectName }} </span>
  704. </div>
  705. <div style="font-size: 21px">
  706. <span>
  707. <i class="el-icon-office-building" aria-hidden="true"></i>
  708. {{ initData.technicalCategories }} | {{ initData.technicalScope }}
  709. </span>
  710. </div>
  711. <div style="font-size: 21px">
  712. <span>
  713. <i class="el-icon-tickets"></i>
  714. {{ $t("common.ProjectNumber") }}:
  715. <span style="color: #62b605">{{
  716. initData.projectNum || $t("common.NoProjectNumber")
  717. }}</span>
  718. </span>
  719. </div>
  720. <div>
  721. <el-input
  722. type="textarea"
  723. :rows="2"
  724. style="margin-top: 30px; min-height: 300px"
  725. :placeholder="$t('common.EnterContent')"
  726. maxlength="200"
  727. show-word-limit
  728. v-model="consultMessageInfo.content"
  729. ></el-input>
  730. </div>
  731. <span slot="footer" class="dialog-footer">
  732. <el-button @click="handleClose">{{ $t("common.Cancel") }}</el-button>
  733. <el-button type="primary" @click="consultMessage">{{
  734. $t("common.OK")
  735. }}</el-button>
  736. </span>
  737. </el-dialog>
  738. <el-dialog
  739. :title="$i18n.locale == 'zh' ? '提示' : 'Reminder'"
  740. :visible.sync="toViewLogin"
  741. :width="$i18n.locale == 'zh' ? '30%' : '40%'"
  742. :height="$i18n.locale == 'zh' ? '300px' : '386px'"
  743. :before-close="toViewLoginChange"
  744. >
  745. <div style="width: 100%; height: 100%">
  746. <img
  747. src="@/assets/img/loginTips.png"
  748. alt=""
  749. style="width: 180px; height: 180px; margin-left: 20px"
  750. />
  751. <div
  752. style="float: right; margin-right: 20px"
  753. :style="
  754. $i18n.locale == 'zh'
  755. ? 'width: 49%;margin-top: 10px;'
  756. : 'width: 453px;margin-top: -25px;'
  757. "
  758. >
  759. <div
  760. style="
  761. font-size: 20px;
  762. font-weight: normal;
  763. color: #333333;
  764. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  765. line-height: 40px;
  766. "
  767. >
  768. {{ $t("common.ReminderFirst") }}
  769. </div>
  770. <div
  771. style="
  772. font-size: 16px;
  773. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  774. font-weight: normal;
  775. color: #666666;
  776. line-height: 30px;
  777. "
  778. >
  779. {{ $t("common.ReminderSecond") }}
  780. <span style="color: #0091ff; font-size: 18px">{{ num }}</span>
  781. {{ $t("common.ReminderThird") }}
  782. </div>
  783. <div
  784. style="
  785. font-size: 14px;
  786. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  787. font-weight: normal;
  788. color: #666666;
  789. line-height: 30px;
  790. "
  791. >
  792. {{ $t("common.ReminderForth") }}
  793. </div>
  794. <div
  795. style="
  796. font-size: 14px;
  797. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  798. height: 33px;
  799. line-height: 60px;
  800. font-weight: normal;
  801. color: #0091ff;
  802. "
  803. >
  804. <span
  805. style="margin-left: 40px"
  806. class="cursor"
  807. @click="toView('login')"
  808. >
  809. {{ $t("common.ReminderFifth") }}
  810. </span>
  811. <span
  812. style="margin-left: 10px"
  813. class="cursor"
  814. @click="toView('Register')"
  815. >
  816. {{ $t("common.ReminderSixth") }}
  817. </span>
  818. </div>
  819. </div>
  820. </div>
  821. </el-dialog>
  822. </div>
  823. </div>
  824. </template>
  825. <script>
  826. import Base from "@/views/base/Base";
  827. import {getDicts} from "@/api/dict";
  828. import {Swiper, SwiperSlide, directive} from "vue-awesome-swiper";
  829. import "vue-awesome-swiper/node_modules/swiper/dist/css/swiper.css";
  830. import {formatDate} from "@/utils/formatUtils";
  831. import Clipboard from "clipboard";
  832. import {saveOrUpdate as saveConsultMessageInfo} from "@/api/operation/consultMessageInfo";
  833. import {getFollowModeNumlByModelIdAndUserId} from "@/api/operation/basePortalModelFollowInfo";
  834. import {
  835. saveInteractiveMessage,
  836. getInteractiveMessageInfosList,
  837. } from "@/api/operation/interactiveMessage";
  838. import {saveOrUpdate as clickSave} from "@/api/operation/basePortalModelClickInfo";
  839. import {
  840. get,
  841. getBannerPaths,
  842. gateGetProjectViewInfo,
  843. getBaseProjectViews,
  844. getBaseProjectViewsm,
  845. getInteractiveMessageCount,
  846. gateGetArchiveFilePath,
  847. getBaseProjectViewsRecommend,
  848. } from "@/api/project/baseProjectView";
  849. import {getToken, resetToken} from "@/utils/auth";
  850. import {gateGetProjectConsultant} from "@/api/project/baseProjectConsultantInfo";
  851. import {getBaseProjectArchivesFiles} from "@/api/baseProjectArchivesFile";
  852. import {getBaseProjectArchivesInfos} from "@/api/baseProjectArchivesInfo";
  853. import {downloadFile, downloadAttachment} from "@/api/file";
  854. import {
  855. getFollowModeNumlByModelId,
  856. getFollowModelNumByUser,
  857. saveFollowModelLanguage,
  858. } from "@/api/operation/basePortalModelFollowInfo";
  859. import {addIntegral, addGrowth} from "@/utils/toCompleteTask";
  860. import {getUserPointPage} from "@/api/user";
  861. import {getCountryByName} from '@/api/country/countryList'
  862. // import throttle from "lodash/throttle ";
  863. import _ from "lodash";
  864. export default {
  865. name: "projectPresentationDetails",
  866. extends: Base,
  867. data() {
  868. return {
  869. language: this.$i18n.locale.toUpperCase(),
  870. flag: false,
  871. dialogVisible: false,
  872. num: 0,
  873. toViewLogin: false,
  874. timer: "",
  875. indexTo: 1,
  876. num: 5,
  877. tokenLogin: null,
  878. toDate: 0,
  879. attaments: [],
  880. attachmentId: "",
  881. attamentParams: {
  882. attachmentBusinessId: "",
  883. attachmentBusinessType: "base_project_archives_file",
  884. },
  885. currentPage3: 5,
  886. infoParams: {
  887. pageNo: 0,
  888. pageSize: 1,
  889. language: "",
  890. projectId: "",
  891. screenId: this.$route.params.screenId,
  892. dataIndex: this.$route.params.dataIndex,
  893. cruPage: this.$route.params.cruPage,
  894. },
  895. // parentIndex:this.$parent.params.descStatus,
  896. parames: {
  897. columnCode: "", //项目id
  898. pageSize: "2",
  899. pageNo: "0",
  900. bizObjectType: "0",
  901. },
  902. paramesList: [],
  903. paramesListSelf: [],
  904. ProjectMessageNum: 0,
  905. MyMessageNum: 0,
  906. ReplyMyNum: 0,
  907. enterpriseDetails: "",
  908. textarea: "",
  909. url: "",
  910. isOnlineConsultation: false,
  911. id: this.$route.params.key,
  912. ProjectConsultant: {},
  913. clickModel: {
  914. modelType: "project",
  915. modelEntityId: "",
  916. userId: "",
  917. clickTime: "",
  918. },
  919. consultMessageInfo: {},
  920. interactiveMessageInfo: {
  921. title: "",
  922. content: "",
  923. senderId: "",
  924. receiverId: "",
  925. replyStatus: "",
  926. replyStatusDict: "",
  927. approveStatus: "",
  928. approveStatusDict: "",
  929. columnName: "",
  930. columnCode: "",
  931. bizObjectId: "",
  932. bizObjectType: "",
  933. createBy: "",
  934. createDate: "",
  935. updateBy: "",
  936. updateDate: "",
  937. },
  938. img: [],
  939. imgs: [
  940. {
  941. src: "u6668.png",
  942. },
  943. {
  944. src: "u6676.png",
  945. },
  946. {
  947. src: "u6720.png",
  948. },
  949. {
  950. src: "u6763.png",
  951. },
  952. {
  953. src: "u6668.png",
  954. },
  955. {
  956. src: "u6720.png",
  957. },
  958. ],
  959. recommend: [],
  960. ifcommon: false,
  961. initData: {},
  962. enterprise: {
  963. label1: {
  964. label:
  965. "经营范围包括三峡工程建设和经营管理,住宿经营的管理;长江中上游水资源开发;水利水电技术服务;水利水电工程所需物资、设备的销售(国家有专营专项的除外);与上述业务有关的咨询服务;经营或代理公司所属企业自产产品(国家组织统一联合经营的16种出口商品除外)的出口业务;经营或代理公司及所属产业所需设备和材料(国家指定公司经营的12种进口商品除外)的进口业务;经营或代理技术进出口业务;承办中外合资经营、合作生产、来料加工、来样加工、来件装配、补偿贸易及易货贸易业务。(企依法自主选择经营项目,开展经营活动;依法需批准的项目;经相关部门批准后依批准的内容开展经营活动;不得从事本市产业政策禁止和限制类的经营活动。",
  966. src: "u6668.png",
  967. },
  968. },
  969. user: {},
  970. useId: "",
  971. indexMethod: "",
  972. isLogin: false,
  973. user: {
  974. umsUser: {},
  975. },
  976. pointStatus: null,
  977. isToken: null,
  978. };
  979. },
  980. created() {
  981. this.enterpriseDetails = this.$route.params.key;
  982. this.url = window.location.href;
  983. this.tokenLogin = this.$Cookies.get("token");
  984. },
  985. updated() {
  986. this.Swiper();
  987. },
  988. mounted() {
  989. this.initData1();
  990. this.$store.commit("modify", "projectPresentationDetails");
  991. window.localStorage.setItem("router", "projectPresentationDetails");
  992. if (this.$Cookies.get("token")) {
  993. this.isLogin = true;
  994. } else {
  995. this.isLogin = false;
  996. }
  997. // 项目查询
  998. this.toDate = Date.parse(new Date());
  999. this.getProjextList();
  1000. this.getMessageNum();
  1001. // debugger;
  1002. },
  1003. watch: {
  1004. "$i18n.locale"() {
  1005. this.getProjextList();
  1006. this.language = this.$i18n.locale.toUpperCase();
  1007. },
  1008. toViewLogin() {
  1009. if (this.toViewLogin == true) {
  1010. this.loginTipsChange();
  1011. }
  1012. },
  1013. },
  1014. methods: {
  1015. initData1() {
  1016. this.isToken = getToken()
  1017. if (this.isToken) {
  1018. getUserPointPage().then((res) => {
  1019. this.pointStatus = res.data.umsUserPoints[0].pointStatus;
  1020. });
  1021. }
  1022. },
  1023. closeDialogVisible: function () {
  1024. this.textarea = "";
  1025. this.dialogVisible = false;
  1026. },
  1027. //图片地址补全
  1028. imageAddPath(path) {
  1029. const origin = document.location.origin;
  1030. // console.log(origin + "/common/opt/file/pub/" + path)
  1031. return origin + "/api/file/pub/" + path;
  1032. },
  1033. handleCurrentChange(val) {
  1034. this.pageNo = val;
  1035. this.parames.pageNo = this.pageNo;
  1036. this.getMessageNum();
  1037. },
  1038. toUserCenterCommunication() {
  1039. var router = "communication";
  1040. var json = "/communication";
  1041. var index = null;
  1042. window.localStorage.setItem("router", router);
  1043. this.$store.commit("modify", router);
  1044. const {href} = this.$router.resolve({
  1045. name: router,
  1046. query: {
  1047. key: json,
  1048. dataIndex: index,
  1049. },
  1050. });
  1051. window.open(href, "_blank");
  1052. },
  1053. //跳到一个新的页面
  1054. toViewNew(router, json, index) {
  1055. console.log(router, json, index, "---------- ----");
  1056. this.index = this.params ? this.params.descStatus : "0";
  1057. window.localStorage.setItem("router", router);
  1058. this.dataIndex = this.params;
  1059. this.cruPage = this.params ? this.params.pageNo : "0";
  1060. this.$store.commit("modify", router);
  1061. console.log(this.cruPage);
  1062. this.$store.commit("modify", router);
  1063. window.localStorage.setItem("router", router);
  1064. const {href} = this.$router.resolve({
  1065. name: router,
  1066. params: {
  1067. key: json,
  1068. screenId: this.index,
  1069. dataIndex: index,
  1070. cruPage: this.cruPage,
  1071. },
  1072. });
  1073. window.open(href, "_blank");
  1074. },
  1075. //项目顾问在线咨询打开方法
  1076. olineConsultingOpen() {
  1077. // alert("项目顾问在线咨询");
  1078. //检测是否为登陆用户
  1079. let user = window.localStorage.getItem("user");
  1080. if (!this.$Cookies.get("token")) {
  1081. this.toViewLogin = true;
  1082. } else {
  1083. this.isOnlineConsultation = true;
  1084. }
  1085. },
  1086. dialogVisibleChange() {
  1087. let user = window.localStorage.getItem("user");
  1088. if (!this.$Cookies.get("token")) {
  1089. this.toViewLogin = true;
  1090. } else {
  1091. this.dialogVisible = true;
  1092. }
  1093. },
  1094. // 推荐数据切换
  1095. toViewChange(id, index) {
  1096. this.infoParams.projectId = id;
  1097. this.getList();
  1098. },
  1099. // 未登录跳转
  1100. loginTipsChange() {
  1101. const that = this;
  1102. this.num = 5;
  1103. // clearInterval(that.timer);
  1104. this.timer = setInterval(function () {
  1105. if (that.num > 0) {
  1106. that.num--;
  1107. } else {
  1108. if (that.toViewLogin == true) {
  1109. clearInterval(that.timer);
  1110. that.toView("login");
  1111. } else {
  1112. clearInterval(that.timer);
  1113. }
  1114. }
  1115. }, 1000);
  1116. },
  1117. // 判断未登录跳转是否关闭
  1118. toViewLoginChange(done) {
  1119. this.toViewLogin = false;
  1120. this.num = 5;
  1121. clearInterval(this.timer);
  1122. },
  1123. //关注操作方法
  1124. saveFollowModelDo: function (followType) {
  1125. let user = window.localStorage.getItem("user");
  1126. let that = this;
  1127. if (!this.$Cookies.get("token")) {
  1128. // this.$message.warning("请先登录");
  1129. // this.$confirm('检测到您未登录,是否登录')
  1130. // .then(_ => {
  1131. // this.toView('login');
  1132. // })
  1133. // .catch(_ => {});
  1134. this.toViewLogin = true;
  1135. } else {
  1136. var users = JSON.parse(user);
  1137. var token = "" + getToken();
  1138. var projectId = this.initData.projectId;
  1139. var userId = users.userId;
  1140. // 接口逻辑
  1141. this.submitHandler((token) => {
  1142. saveFollowModelLanguage(
  1143. that.language,
  1144. projectId,
  1145. "project",
  1146. userId,
  1147. followType,
  1148. token
  1149. )
  1150. .then((result) => {
  1151. if (followType == "unfollow") {
  1152. if (this.$i18n.locale == "zh") {
  1153. this.$message({
  1154. message: "取消关注成功",
  1155. type: "success",
  1156. });
  1157. } else {
  1158. this.$message({
  1159. message: "Cancel the follow successfully",
  1160. type: "success",
  1161. });
  1162. }
  1163. } else {
  1164. if (this.user.umsUser.userUsertypeDict !== "2" && this.pointStatus == 'y') {
  1165. addIntegral("point_task_attention", "1");
  1166. }
  1167. if (this.$i18n.locale == "zh") {
  1168. this.$message({
  1169. message: "关注成功",
  1170. type: "success",
  1171. });
  1172. } else {
  1173. this.$message({
  1174. message: "Follow of success",
  1175. type: "success",
  1176. });
  1177. }
  1178. }
  1179. // console.log(result);
  1180. // this.$message({
  1181. // message: result.data,
  1182. // type: "success",
  1183. // });
  1184. this.ifcommon = !this.ifcommon;
  1185. this.resetToken();
  1186. })
  1187. .catch((error) => {
  1188. // 此处你的业务代码
  1189. });
  1190. });
  1191. }
  1192. },
  1193. // 留言操作方法
  1194. publish: function () {
  1195. if (!this.$Cookies.get("token")) {
  1196. this.toViewLogin = true;
  1197. } else {
  1198. this.interactiveMessageInfo.content = this.textarea;
  1199. if (this.interactiveMessageInfo.content.match(/^\s+$/)) {
  1200. if (this.$i18n.locale == "zh") {
  1201. this.$message("请重新输入");
  1202. } else {
  1203. this.$message("Please Re-enter");
  1204. }
  1205. this.textarea = "";
  1206. return (this.interactiveMessageInfo.content = "");
  1207. }
  1208. if (this.interactiveMessageInfo.content.match(/^[ ]+$/)) {
  1209. if (this.$i18n.locale == "zh") {
  1210. this.$message("请重新输入");
  1211. } else {
  1212. this.$message("Please Re-enter");
  1213. }
  1214. this.textarea = "";
  1215. return (this.interactiveMessageInfo.content = "");
  1216. }
  1217. if (this.interactiveMessageInfo.content.match(/^[ ]*$/)) {
  1218. if (this.$i18n.locale == "zh") {
  1219. this.$message("请重新输入");
  1220. } else {
  1221. this.$message("Please Re-enter");
  1222. }
  1223. this.textarea = "";
  1224. return (this.interactiveMessageInfo.content = "");
  1225. }
  1226. if (this.interactiveMessageInfo.content.match(/^\s*$/)) {
  1227. if (this.$i18n.locale == "zh") {
  1228. this.$message("请重新输入");
  1229. } else {
  1230. this.$message("Please Re-enter");
  1231. }
  1232. this.textarea = "";
  1233. return (this.interactiveMessageInfo.content = "");
  1234. }
  1235. this.interactiveMessageInfo.replyStatus = "否";
  1236. this.interactiveMessageInfo.replyStatusDict = "N";
  1237. this.interactiveMessageInfo.approveStatusDict = "0";
  1238. this.interactiveMessageInfo.bizObjectType = "0";
  1239. this.interactiveMessageInfo.columnCode = this.initData.projectId;
  1240. let token = getToken();
  1241. if (this.textarea) {
  1242. this.submitHandler((token) => {
  1243. saveInteractiveMessage(
  1244. JSON.stringify(this.interactiveMessageInfo),
  1245. token
  1246. )
  1247. .then((res) => {
  1248. if (this.user.umsUser.userUsertypeDict !== "2" && this.pointStatus == 'y') {
  1249. addIntegral("point_task_project_message", "5");
  1250. addGrowth("aubmit_a_message_once");
  1251. }
  1252. if (this.$i18n.locale == "zh") {
  1253. this.$message({
  1254. message: "已发送成功,请等待回复",
  1255. type: "success",
  1256. });
  1257. } else {
  1258. this.$message({
  1259. message:
  1260. "It has been sent successfully. Please wait for your reply",
  1261. type: "success",
  1262. });
  1263. }
  1264. // alert(res.msg);
  1265. // this.$message({
  1266. // message: "已发送成功,请等待回复",
  1267. // type: "success",
  1268. // });
  1269. this.getMessageNum();
  1270. })
  1271. .catch((err) => {
  1272. if (err.msg == "包含敏感词" && this.$i18n.locale == "zh") {
  1273. alert(err.msg);
  1274. }
  1275. if (err.msg == "包含敏感词" && this.$i18n.locale == "en") {
  1276. alert("Include Sensitive Words");
  1277. }
  1278. console.log(err);
  1279. });
  1280. this.interactiveMessageInfo = {};
  1281. this.textarea = "";
  1282. this.resetToken();
  1283. });
  1284. } else {
  1285. this.$message(this.$t("common.Pleasefillinthecontentfirst"));
  1286. }
  1287. this.dialogVisible = false;
  1288. }
  1289. },
  1290. downLoad: function () {
  1291. gateGetArchiveFilePath(this.id)
  1292. .then((res) => {
  1293. downloadAttachment(res.data.paths[0])
  1294. .then((res) => {
  1295. this.download(res);
  1296. })
  1297. .catch((err) => {
  1298. if (err.msg) {
  1299. // alert(err.msg);
  1300. this.$message({
  1301. message: err.msg,
  1302. type: "error",
  1303. });
  1304. }
  1305. console.log(err);
  1306. });
  1307. })
  1308. .catch((err) => {
  1309. if (err.msg) {
  1310. // alert(err.msg);
  1311. this.$message({
  1312. message: err.msg,
  1313. type: "error",
  1314. });
  1315. }
  1316. console.log(err);
  1317. });
  1318. },
  1319. getProjextList() {
  1320. this.infoParams.projectId =
  1321. this.$route.query.key !== undefined
  1322. ? this.$route.query.key
  1323. : this.$route.params.key !== undefined
  1324. ? this.$route.params.key
  1325. : "";
  1326. this.getList();
  1327. },
  1328. getList() {
  1329. // 判断是否是会员显示项目规模
  1330. let user = window.localStorage.getItem("user");
  1331. var users = JSON.parse(user);
  1332. if (
  1333. null != users &&
  1334. null != users.userId &&
  1335. users.umsUser.userUsertypeDict == "2"
  1336. ) {
  1337. this.flag = true;
  1338. }
  1339. this.infoParams.language = this.$i18n.locale.toUpperCase();
  1340. const that = this;
  1341. gateGetProjectViewInfo(this.infoParams).then((res) => {
  1342. // res.data.baseProjectView.setUpDate=this.handlePublishTimeDesc(new Date, res.data.baseProjectView.setUpDate)
  1343. if (JSON.stringify(res.data) == "{}") {
  1344. this.$message({
  1345. message: this.$t("common.Projecthasnocurrentversion"),
  1346. type: "error",
  1347. });
  1348. return (that.initData = []);
  1349. } else {
  1350. res.data.baseProjectView.setDownDate = that.formatDate(
  1351. res.data.baseProjectView.setDownDate,
  1352. "YYYY-MM-DD"
  1353. );
  1354. that.initData = res.data.baseProjectView || [];
  1355. that.interactiveMessageInfo.columnCode =
  1356. res.data.baseProjectView.projectId;
  1357. if (!that.initData.bannerList[0]) {
  1358. (that.initData.bannerList[0] = ""),
  1359. (that.initData.bannerList[0] = "/def/projectdefault.png");
  1360. }
  1361. if (that.initData.updateDate) {
  1362. that.initData.createDate = that.initData.updateDate;
  1363. }
  1364. gateGetProjectConsultant(this.initData.projectConsultantId).then(
  1365. (res) => {
  1366. if (res.data != undefined) {
  1367. this.ProjectConsultant = res.data.baseProjectConsultantInfo;
  1368. }
  1369. }
  1370. );
  1371. console.log(
  1372. "----------------____________-----------------",
  1373. that.initData.bannerList
  1374. );
  1375. this.$forceUpdate();
  1376. that.getRecommended();
  1377. // 获取字典值
  1378. if (this.$i18n.locale == "zh") {
  1379. getDicts("PROJECT_CATEGORIES_DICT").then((res) => {
  1380. res.data[0].forEach((i) => {
  1381. if (i.value == this.initData.technicalCategories) {
  1382. this.initData.technicalCategories = i.label;
  1383. }
  1384. });
  1385. });
  1386. getDicts("TECHNICAL_SCOPE_DICT").then((res) => {
  1387. res.data[0].forEach((i) => {
  1388. if (i.value == this.initData.technicalScope) {
  1389. this.initData.technicalScope = i.label;
  1390. }
  1391. });
  1392. });
  1393. getDicts("PHASE_TYPE_DICT").then((res) => {
  1394. res.data[0].forEach((i) => {
  1395. if (i.value == this.initData.phaseType) {
  1396. this.initData.phaseType = i.label;
  1397. }
  1398. });
  1399. });
  1400. } else {
  1401. getDicts("PROJECT_CATEGORIES_DICT_EN").then((res) => {
  1402. res.data[0].forEach((i) => {
  1403. if (i.value == this.initData.technicalCategories) {
  1404. this.initData.technicalCategories = i.label;
  1405. }
  1406. });
  1407. });
  1408. getDicts("TECHNICAL_SCOPE_DICT_EN").then((res) => {
  1409. res.data[0].forEach((i) => {
  1410. if (i.value == this.initData.technicalScope) {
  1411. this.initData.technicalScope = i.label;
  1412. }
  1413. });
  1414. });
  1415. getDicts("PHASE_TYPE_DICT_EN").then((res) => {
  1416. res.data[0].forEach((i) => {
  1417. if (i.value == this.initData.phaseType) {
  1418. this.initData.phaseType = i.label;
  1419. }
  1420. });
  1421. });
  1422. }
  1423. let user = window.localStorage.getItem("user");
  1424. if (user) {
  1425. var users = JSON.parse(user);
  1426. var token = "" + getToken();
  1427. var projectId = this.initData.projectId;
  1428. this.userId = users.userId;
  1429. getFollowModeNumlByModelIdAndUserId(
  1430. projectId,
  1431. "project",
  1432. this.userId
  1433. ).then((res) => {
  1434. this.ifcommon = res.data;
  1435. console.log(
  1436. res.data,
  1437. "---------------------------------------------------------------------------"
  1438. );
  1439. });
  1440. this.clickModel.modelEntityId = this.infoParams.projectId;
  1441. this.clickModel.userId = users.userId;
  1442. this.clickModel.clickTime = new Date().getTime();
  1443. //如果存在用户则对用户进行点击保存操作
  1444. this.submitHandler((token) => {
  1445. clickSave(JSON.stringify(this.consultMessageInfo), token);
  1446. this.resetToken();
  1447. });
  1448. }
  1449. }
  1450. });
  1451. },
  1452. //获取留言信息
  1453. getMessageNum() {
  1454. if (window.localStorage.getItem("user")) {
  1455. let user = window.localStorage.getItem("user");
  1456. var users = JSON.parse(user);
  1457. this.useId = users.userId;
  1458. }
  1459. //2020年12月8日 11:09:36 取消项目留言数量
  1460. //获取项目id
  1461. this.parames.columnCode = this.infoParams.projectId;
  1462. this.parames.approveStatusDict = "2";
  1463. //获取用户id
  1464. let token = getToken();
  1465. // console.log(JSON.parse(JSON.stringify(this.parames)));
  1466. getInteractiveMessageInfosList(this.parames, token).then((result) => {
  1467. this.paramesList = result.data.interactiveMessageInfos;
  1468. this.paramesList.forEach((i) => {
  1469. i.createDate = this.formatDate(i.createDate, "YYYY-MM-DD");
  1470. if (!i.imagesPath) {
  1471. i.imagesPath = "def/user.png";
  1472. }
  1473. });
  1474. this.paramesList.forEach((i) => {
  1475. if (i.interactiveMessageInfo) {
  1476. i.interactiveMessageInfo.updateDate = this.formatDate(
  1477. i.interactiveMessageInfo.updateDate,
  1478. "YYYY-MM-DD"
  1479. );
  1480. }
  1481. });
  1482. this.ProjectMessageNum = result.data.page.totalCount;
  1483. });
  1484. // if (window.localStorage.getItem("user")) {
  1485. // let user = window.localStorage.getItem("user");
  1486. // var users = JSON.parse(user);
  1487. // var parames1= {
  1488. // columnCode: this.infoParams.projectId, //项目id
  1489. // senderId: users.userId,
  1490. // pageSize: "1",
  1491. // pageNo: "0"
  1492. // }
  1493. // getInteractiveMessageInfosList(parames1, token).then((result) => {
  1494. // this.paramesListSelf = []
  1495. // if (result.data.interactiveMessageInfos) {
  1496. // this.paramesListSelf.push(result.data.interactiveMessageInfos[0]);
  1497. // this.paramesListSelf.forEach((i) => {
  1498. // i.createDate = this.formatDate(
  1499. // i.createDate,
  1500. // "YYYY-MM-DD"
  1501. // );
  1502. // })
  1503. // this.paramesListSelf.forEach((i) => {
  1504. // if (i.interactiveMessageInfo) {
  1505. // i.interactiveMessageInfo.updateDate = this.formatDate(
  1506. // i.interactiveMessageInfo.updateDate,
  1507. // "YYYY-MM-DD"
  1508. // );
  1509. // }
  1510. // })
  1511. // }
  1512. // debugger
  1513. // });
  1514. // }
  1515. },
  1516. Swiper() {
  1517. var galleryThumbs = new Swiper(".gallery-thumbs", {
  1518. spaceBetween: 10,
  1519. slidesPerView: 4,
  1520. freeMode: true,
  1521. watchSlidesVisibility: true,
  1522. watchSlidesProgress: true,
  1523. autoplay: {
  1524. //自动播放
  1525. delay: 4000,
  1526. disableOnInteraction: false, //用户操作后是否停止 默认停止(true)
  1527. },
  1528. });
  1529. var galleryTop = new Swiper(".gallery-top", {
  1530. spaceBetween: 10,
  1531. navigation: {
  1532. nextEl: ".swiper-button-next",
  1533. prevEl: ".swiper-button-prev",
  1534. },
  1535. autoplay: {
  1536. //自动播放
  1537. delay: 4000,
  1538. disableOnInteraction: false, //用户操作后是否停止 默认停止(true)
  1539. },
  1540. thumbs: {
  1541. swiper: galleryThumbs,
  1542. },
  1543. });
  1544. },
  1545. getRecommended() {
  1546. let params = {
  1547. pageNo: 0,
  1548. pageSize: 5,
  1549. language: this.$i18n.locale.toUpperCase(),
  1550. recommendFlag: "y",
  1551. status: "1",
  1552. descStatus: 0,
  1553. id: this.infoParams.projectId,
  1554. };
  1555. const that = this;
  1556. getBaseProjectViews(params).then((res) => {
  1557. if (res.data.baseProjectViews) {
  1558. that.recommend = [];
  1559. res.data.baseProjectViews.forEach((item) => {
  1560. if (item.bannerList.length > 0) {
  1561. that.recommend.push(item);
  1562. }
  1563. });
  1564. console.log(res.data.baseUnitViews, that.init);
  1565. } else {
  1566. // this.$message("当前推荐企业暂无信息");
  1567. }
  1568. this.loading = false;
  1569. });
  1570. },
  1571. // 项目收藏改变
  1572. shareChange: _.throttle(function () {
  1573. if (this.ifcommon) {
  1574. this.saveFollowModelDo("unfollow");
  1575. } else {
  1576. this.saveFollowModelDo("follow");
  1577. }
  1578. }, 3000),
  1579. handleClose(done) {
  1580. this.isOnlineConsultation = false;
  1581. this.consultMessageInfo.content = "";
  1582. },
  1583. consultMessage() {
  1584. // debugger
  1585. // 人员信息
  1586. if (this.consultMessageInfo.content) {
  1587. if (this.consultMessageInfo.content.match(/^\s+$/)) {
  1588. return (this.consultMessageInfo.content = "");
  1589. }
  1590. if (this.consultMessageInfo.content.match(/^[ ]+$/)) {
  1591. return (this.consultMessageInfo.content = "");
  1592. }
  1593. if (this.consultMessageInfo.content.match(/^[ ]*$/)) {
  1594. return (this.consultMessageInfo.content = "");
  1595. }
  1596. if (this.consultMessageInfo.content.match(/^\s*$/)) {
  1597. return (this.consultMessageInfo.content = "");
  1598. }
  1599. this.consultMessageInfo.replyStatusDict = "N";
  1600. this.consultMessageInfo.senderDate = new Date();
  1601. this.consultMessageInfo.bizObjectType = "0";
  1602. this.consultMessageInfo.columnCode = this.initData.projectId;
  1603. this.consultMessageInfo.columnCodeName = this.initData.projectName;
  1604. let token = getToken();
  1605. this.submitHandler((token) => {
  1606. saveConsultMessageInfo(JSON.stringify(this.consultMessageInfo), token)
  1607. .then((result) => {
  1608. // alert(result.msg);
  1609. if (this.user.umsUser.userUsertypeDict !== "2" && this.pointStatus == 'y') {
  1610. addIntegral("point_task_project_ask", "3");
  1611. }
  1612. this.$message({
  1613. message: this.$t("common.Sentsuccessfullypleasewaitforreply"), //已发送成功,请等待回复
  1614. type: "success",
  1615. });
  1616. this.consultMessageInfo = {};
  1617. this.isOnlineConsultation = false;
  1618. this.resetToken();
  1619. })
  1620. .catch((error) => {
  1621. this.consultMessageInfo = {};
  1622. this.resetToken();
  1623. });
  1624. this.resetToken();
  1625. });
  1626. } else {
  1627. this.$message({
  1628. message: this.$t("common.EnterContent"),
  1629. type: "warning",
  1630. });
  1631. }
  1632. },
  1633. getIconUrl(url) {
  1634. return require("@/assets/img/realTimeInfo/" + url);
  1635. },
  1636. toView(router, json) {
  1637. clearInterval(this.timer);
  1638. this.$router.push({
  1639. name: router,
  1640. params: json,
  1641. });
  1642. },
  1643. screenBack(data) {
  1644. console.log(data, "screenBackscreenBackscreenBackscreenBack");
  1645. },
  1646. //最新发布标志是否展示
  1647. releaseView() {
  1648. // console.log(this.infoParams.dataIndex);
  1649. // console.log(this.infoParams.screenId);
  1650. // console.log(this.infoParams.dataIndex);
  1651. if (
  1652. this.infoParams.screenId == 0 &&
  1653. this.infoParams.dataIndex < 5 &&
  1654. this.infoParams.cruPage == 1
  1655. ) {
  1656. return true;
  1657. } else {
  1658. return false;
  1659. }
  1660. },
  1661. bannerFour:function (banner){
  1662. this.$router.push({
  1663. name: 'projectPresentation',
  1664. params: {
  1665. banner: banner,
  1666. },
  1667. })
  1668. },
  1669. unitCountryFour:function (unitCountry){
  1670. getCountryByName(unitCountry).then(res=>{
  1671. console.log("请求返回的值",res.data)
  1672. if (res.data.countryById != null ){
  1673. this.$store.commit('modify', 'countryNationalSpace')
  1674. window.localStorage.setItem('router', 'countryNationalSpace')
  1675. const { href } = this.$router.resolve({
  1676. name: 'countryNationalSpace',
  1677. query: {
  1678. key: res.data.countryById,
  1679. },
  1680. })
  1681. window.open(href, '_blank')
  1682. }else{
  1683. alert("国别信息库中未维护该国别");
  1684. }
  1685. })
  1686. console.log("当前语言版本",this.language);
  1687. console.log("显示选中的国别信息",unitCountry);
  1688. }
  1689. },
  1690. };
  1691. </script>
  1692. <!-- Add "scoped" attribute to limit CSS to this component only -->
  1693. <style scoped>
  1694. .box {
  1695. margin-top: 10px;
  1696. background: #fff;
  1697. /* height: 500px; */
  1698. padding: 20px 0;
  1699. }
  1700. .crumbs {
  1701. margin-left: 20px;
  1702. }
  1703. body {
  1704. margin: 0;
  1705. }
  1706. .swipers {
  1707. position: absolute;
  1708. top: 30px;
  1709. left: 30px;
  1710. width: 550px;
  1711. height: 439px;
  1712. }
  1713. .details {
  1714. position: absolute;
  1715. top: 30px;
  1716. left: 600px;
  1717. width: 460px;
  1718. height: 390px;
  1719. }
  1720. .swiper-container {
  1721. width: 100%;
  1722. height: 300px;
  1723. margin-left: auto;
  1724. margin-right: auto;
  1725. }
  1726. .swiper-slide {
  1727. background-size: cover;
  1728. background-position: center;
  1729. }
  1730. .gallery-top {
  1731. height: 80%;
  1732. width: 100%;
  1733. }
  1734. .gallery-thumbs {
  1735. height: 20%;
  1736. box-sizing: border-box;
  1737. padding: 10px 0;
  1738. }
  1739. .gallery-thumbs .swiper-slide {
  1740. width: 25%;
  1741. height: 100%;
  1742. opacity: 0.4;
  1743. }
  1744. .gallery-thumbs .swiper-slide-thumb-active {
  1745. opacity: 1;
  1746. }
  1747. .initData_label {
  1748. color: #2c558a;
  1749. font-weight: 700;
  1750. font-size: 18px;
  1751. line-height: 42px;
  1752. width: 500px;
  1753. display: inline-block;
  1754. /*overflow: hidden;*/
  1755. /*white-space: nowrap;*/
  1756. text-overflow: ellipsis;
  1757. }
  1758. .enterprise_style {
  1759. line-height: 50px;
  1760. height: 50px;
  1761. color: #333;
  1762. padding-left: 30px;
  1763. font-size: 18px;
  1764. font-weight: 700;
  1765. margin-top: 5px;
  1766. }
  1767. .enterprise_style_span {
  1768. display: inline-block;
  1769. /* width: 82px; */
  1770. padding: 0 5px;
  1771. text-align: center;
  1772. height: 100%;
  1773. border-bottom: 2px solid #6699ff;
  1774. }
  1775. .enterprise_style_product tr {
  1776. line-height: 30px;
  1777. width: 100%;
  1778. display: inline-block;
  1779. border-bottom: 1px dashed #ccc;
  1780. font-size: 14px;
  1781. color: #6c819d;
  1782. margin-bottom: 5px;
  1783. }
  1784. .recommend {
  1785. margin-top: 16px;
  1786. /* margin-left: 30px; */
  1787. }
  1788. .recommend li {
  1789. display: inline-block;
  1790. width: 170px;
  1791. /* height: 130px; */
  1792. text-align: center;
  1793. margin-right: 16px;
  1794. }
  1795. .share:hover {
  1796. color: #66b1ff;
  1797. }
  1798. .box >>> .el-textarea__inner {
  1799. height: 85px;
  1800. }
  1801. .enterprise_screen,
  1802. .enterprise_screen2 {
  1803. height: 50px;
  1804. /* padding: 0 10px; */
  1805. width: 150px;
  1806. line-height: 50px;
  1807. float: left;
  1808. text-align: center;
  1809. font-family: HiraginoSansGB-W3, HiraginoSansGB;
  1810. font-weight: normal;
  1811. color: rgba(51, 51, 51, 1);
  1812. font-size: 16px;
  1813. }
  1814. .enterprise_screen {
  1815. background: #2c558a;
  1816. color: #fff;
  1817. border: 1px solid #2c558a;
  1818. /* border-top: 2px #2c558a solid; */
  1819. /* width: 124px; */
  1820. }
  1821. .box >>> .el-textarea__inner {
  1822. min-height: 220px !important;
  1823. /* max-height: 220px !important; */
  1824. }
  1825. .enterprise_screen2 {
  1826. /* background: linear-gradient(
  1827. 180deg,
  1828. rgba(253, 253, 253, 1) 0%,
  1829. rgba(197, 208, 222, 1) 100%
  1830. ); */
  1831. border: 1px solid rgba(214, 225, 238, 1);
  1832. }
  1833. .crumbs {
  1834. margin-left: 20px;
  1835. }
  1836. .Platform {
  1837. width: 100%;
  1838. margin: 0px 20px;
  1839. /* border-top: 3px solid #2f5586; */
  1840. /* border-bottom: 3px solid #2f5586; */
  1841. }
  1842. .moreContent {
  1843. text-align: center;
  1844. font-size: 18px;
  1845. font-weight: 600;
  1846. }
  1847. .loginTip {
  1848. width: 1046px;
  1849. height: 364px;
  1850. }
  1851. </style>