resultDetail_student.vue 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319
  1. <template>
  2. <!-- 成果展示 项目成果展示 -->
  3. <div class="rs1apply">
  4. <!-- 头部展示区开始 -->
  5. <div class="header">
  6. <div class="headerConcent">
  7. <div class="rsHead1Tit">
  8. 项目名称:<span>{{ TitleMessage.title }}</span>
  9. </div>
  10. <div class="rsHead2Tit rsHead3Tit">
  11. <div>
  12. 负责人:<span class="titleMessage">{{
  13. TitleMessage.pro_leader
  14. }}</span>
  15. </div>
  16. <div v-if="TitleMessage.lead_leader">
  17. 学院牵头领导:<span class="titleMessage">{{
  18. TitleMessage.lead_leader
  19. }}</span>
  20. </div>
  21. </div>
  22. <div class="rsHead3Tit rsHead2Tit">
  23. <div>
  24. 学院:<span class="titleMessage">{{ TitleMessage.ClassName }}</span>
  25. </div>
  26. <div>
  27. 分类:<span class="titleMessage"
  28. >{{ TitleMessage.TypeName }} - {{ TitleMessage.tn2 }}</span
  29. >
  30. </div>
  31. </div>
  32. <div class="rsHead2Tit personListUL">
  33. <!-- 老师 -->
  34. <img
  35. src="@/assets/img/doctorialHat.svg"
  36. style="margin-right: 10px; width: 25px; height: 25px"
  37. />
  38. <el-tooltip
  39. class="item"
  40. effect="light"
  41. :content="
  42. TitleMessage.teacher.reduce(
  43. (prev, cur) => (prev += ' ' + cur.name),
  44. ''
  45. )
  46. "
  47. placement="top-start"
  48. >
  49. <div class="personListLI">
  50. <span
  51. v-for="(item, index) in TitleMessage.teacher"
  52. :key="index"
  53. >{{ item.name }}</span
  54. >
  55. </div>
  56. </el-tooltip>
  57. <!-- 学生 -->
  58. <img
  59. src="@/assets/img/student.svg"
  60. style="margin: 0px 10px; width: 25px; height: 25px"
  61. />
  62. <el-tooltip
  63. class="item"
  64. effect="light"
  65. :content="
  66. TitleMessage.student.reduce(
  67. (prev, cur) => (prev += ' ' + cur.name),
  68. ''
  69. )
  70. "
  71. placement="top-start"
  72. >
  73. <div class="personListLI">
  74. <span
  75. v-for="(item, index) in TitleMessage.student"
  76. :key="index"
  77. >{{ item.name }}</span
  78. >
  79. </div>
  80. </el-tooltip>
  81. </div>
  82. </div>
  83. <!-- <el-button class="backBtn" type="primary" @click="$router.back()">返回</el-button> -->
  84. </div>
  85. <!-- 头部展示区结束 -->
  86. <!--导航栏区域开始-->
  87. <div id="Nav">
  88. <div class="navLi" @click="pageState = 0">
  89. <img src="@/assets/anliDetail/proOver.png" alt="" />
  90. <span>项目基本内容</span>
  91. </div>
  92. <div class="navLi" @click="pageState = 1">
  93. <img src="@/assets/anliDetail/proOverTwo.png" alt="" />
  94. <span>项目详细</span>
  95. </div>
  96. <div class="navLi" @click="pageState = 2">
  97. <i
  98. class="iconStyle iconfont icon-jiegou"
  99. style="color: #58c2fe; font-size: 22px; margin-right: 7px"
  100. ></i>
  101. <span>活动开展</span>
  102. </div>
  103. <div class="navLi" @click="pageState = 3">
  104. <i
  105. class="iconStyle iconfont icon-wenjian"
  106. style="color: #58c2fe; font-size: 22px; margin-right: 7px"
  107. ></i>
  108. <span>项目附件</span>
  109. </div>
  110. <div class="navLi" @click="pageState = 4">
  111. <i
  112. class="iconStyle iconfont icon-baogao"
  113. style="color: #58c2fe; font-size: 22px; margin-right: 7px"
  114. ></i>
  115. <span>项目结题报告</span>
  116. </div>
  117. </div>
  118. <!--导航栏区域结束-->
  119. <!--内容区开始-->
  120. <!--基础信息开始-->
  121. <div class="BaseMessage" v-show="pageState == 0">
  122. <div class="BaseTitle">
  123. <span>项目基本内容</span>
  124. </div>
  125. <div class="brief">
  126. <div class="brief_title">
  127. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  128. <span>开始时间与结题时间</span>
  129. </div>
  130. <div class="beginTime_EndTime">
  131. <span>{{ TitleMessage.beginTime }}</span>
  132. <i class="el-icon-arrow-right"></i>
  133. <span>{{ TitleMessage.EndTime }}</span>
  134. </div>
  135. </div>
  136. <div class="brief">
  137. <div class="brief_title">
  138. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  139. <span>项目基础信息</span>
  140. </div>
  141. <el-descriptions style="width: 100%" :column="2" border>
  142. <el-descriptions-item label="优先支持项目">
  143. <div v-for="(item,index) in TitleMessage.multiSelectProject" :key="index">
  144. {{ classType[item] }}
  145. </div>
  146. <!-- {{
  147. TitleMessage.multiSelectProject.indexOf("1") != -1
  148. ? "大赛选拔项目"
  149. : ""
  150. }}
  151. {{
  152. TitleMessage.multiSelectProject.indexOf("2") != -1
  153. ? "落地注册项目"
  154. : ""
  155. }}
  156. {{
  157. TitleMessage.multiSelectProject.indexOf("3") != -1
  158. ? "社会征集项目"
  159. : ""
  160. }}
  161. {{
  162. TitleMessage.multiSelectProject.indexOf("4") != -1
  163. ? "产业命题项目"
  164. : ""
  165. }} -->
  166. </el-descriptions-item>
  167. <el-descriptions-item label="联系电话">{{
  168. TitleMessage.phone
  169. }}</el-descriptions-item>
  170. <el-descriptions-item label="美丽校园改造项目">
  171. <div>{{ TitleMessage.schoolRemould.includes('1') ? "校园安全项目" : "" }}</div>
  172. <div>{{ TitleMessage.schoolRemould.includes('2') ? "环境治理项目" : "" }}</div>
  173. <div>{{ TitleMessage.schoolRemould.includes('3') ? "校园服务项目" : "" }}</div>
  174. <div>{{ TitleMessage.schoolRemould.includes('4') ? "文创装置项目" : "" }}</div>
  175. </el-descriptions-item>
  176. <!-- <el-descriptions-item label="项目申请人">{{
  177. TitleMessage.projectApplyperson == 1
  178. ? "在校学生"
  179. : "入驻学校孵化基地的初创企业法人"
  180. }}</el-descriptions-item> -->
  181. </el-descriptions>
  182. </div>
  183. <div class="brief">
  184. <div class="brief_title">
  185. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  186. <span>教师组</span>
  187. </div>
  188. <div class="projectStudent">
  189. <el-table :data="TitleMessage.teacher" border style="width: 100%">
  190. <el-table-column prop="name" label="姓名" align="center">
  191. </el-table-column>
  192. <el-table-column
  193. prop="collage"
  194. label="所在学院/部门/专业"
  195. align="center"
  196. >
  197. </el-table-column>
  198. <el-table-column prop="work" label="项目组角色分工" align="center">
  199. </el-table-column>
  200. </el-table>
  201. </div>
  202. </div>
  203. <!-- 学生组表格 -->
  204. <div class="brief">
  205. <div class="brief_title">
  206. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  207. <span>学生组</span>
  208. </div>
  209. <div class="projectStudent">
  210. <el-table :data="TitleMessage.student" border style="width: 100%">
  211. <el-table-column prop="name" label="姓名" align="center">
  212. </el-table-column>
  213. <el-table-column
  214. prop="collage"
  215. label="所在学院/部门/专业"
  216. align="center"
  217. >
  218. </el-table-column>
  219. <el-table-column prop="work" label="项目组角色分工" align="center">
  220. </el-table-column>
  221. </el-table>
  222. </div>
  223. </div>
  224. <div class="brief" v-if="TitleMessage.brief != ''">
  225. <div class="brief_title">
  226. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  227. <span>简介</span>
  228. </div>
  229. <div class="TextView" style="display: block">
  230. {{ TitleMessage.brief }}
  231. </div>
  232. </div>
  233. </div>
  234. <!--基础信息结束-->
  235. <!--项目详细开始-->
  236. <div class="BaseMessage" v-show="pageState == 1">
  237. <div class="BaseTitle" type="1">
  238. <span>研发内容</span>
  239. </div>
  240. <div class="brief">
  241. <div class="brief_title" type="1.1">
  242. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  243. <span>一、项目研发背景</span>
  244. </div>
  245. <div class="TextView" v-html="DetailMessage['back']"></div>
  246. </div>
  247. <div class="brief">
  248. <div class="brief_title" type="1.1">
  249. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  250. <span>二、项目创新点</span>
  251. </div>
  252. <div class="TextView" v-html="DetailMessage['innovate']"></div>
  253. </div>
  254. <div class="brief">
  255. <div class="brief_title" type="1.1">
  256. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  257. <span>三、技术研发路线</span>
  258. </div>
  259. <div class="TextView" v-html="DetailMessage['path']"></div>
  260. </div>
  261. <div class="brief">
  262. <div class="brief_title" type="1.1">
  263. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  264. <span>四、项目应用场景</span>
  265. </div>
  266. <div class="TextView" v-html="DetailMessage['scene']"></div>
  267. </div>
  268. <div class="BaseTitle" type="1">
  269. <span>商业模式及社会价值</span>
  270. </div>
  271. <div class="brief">
  272. <div class="brief_title" type="1.1">
  273. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  274. <span>一、项目商业模式/社会价值</span>
  275. </div>
  276. <div class="TextView" v-html="DetailMessage['worth']"></div>
  277. </div>
  278. <div class="BaseTitle" type="1">
  279. <span>团队优势</span>
  280. </div>
  281. <div class="brief">
  282. <div class="brief_title" type="1.1">
  283. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  284. <span>一、团队构成及优势</span>
  285. </div>
  286. <div class="TextView" v-html="DetailMessage['team']"></div>
  287. </div>
  288. <div class="BaseTitle" type="1">
  289. <span>研发成本</span>
  290. </div>
  291. <div class="brief">
  292. <div class="brief_title" type="1.1">
  293. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  294. <span>一、研发成本来源及构成</span>
  295. </div>
  296. <div class="TextView" v-html="DetailMessage['cost']"></div>
  297. </div>
  298. <div class="BaseTitle" type="1">
  299. <span>预期成果</span>
  300. </div>
  301. <div class="brief">
  302. <div class="brief_title" type="1.1">
  303. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  304. <span
  305. >一、项目预期成果、数量及形式(产品原型/发明专利/双创竞赛/成果转化/社会效益)</span
  306. >
  307. </div>
  308. <div class="TextView" v-html="DetailMessage['expectResults']"></div>
  309. </div>
  310. <div class="brief">
  311. <div class="brief_title" type="1.1">
  312. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  313. <span>二、学生创客人才培养预期成果、数量(教师填写)</span>
  314. </div>
  315. <div
  316. class="TextView"
  317. v-html="DetailMessage['expectResultsTeacher']"
  318. ></div>
  319. </div>
  320. <div class="brief">
  321. <div class="brief_title" type="1.1">
  322. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  323. <span>三、项目预期孵化、转化创业项目情况</span>
  324. </div>
  325. <div class="TextView" v-html="DetailMessage['expectConversion']"></div>
  326. </div>
  327. <div class="BaseTitle" type="1">
  328. <span>实施计划</span>
  329. </div>
  330. <div class="brief">
  331. <!-- <div class="brief_title" type="1.1">
  332. <img src="@/assets/anliDetail/jdTitle.png" alt="">
  333. <span>三、项目预期孵化、转化创业项目情况</span>
  334. </div> -->
  335. <div class="TextView" v-html="DetailMessage['plan']"></div>
  336. </div>
  337. </div>
  338. <!-- 项目详细结束 -->
  339. <!-- 活动开展开始 -->
  340. <div class="BaseMessage" v-show="pageState == 2">
  341. <div class="BaseTitle" type="1">
  342. <span>活动开展</span>
  343. </div>
  344. <div
  345. class="arrangement"
  346. v-for="(item, index) in AllActivity"
  347. :key="index"
  348. >
  349. <div class="arrangement_assignment">
  350. <div class="arrangement_assignment_title">
  351. <span>
  352. <img src="@/assets/anliDetail/jdNewTitle.png" />
  353. <span>活动{{ index + 1 }}:</span>
  354. <span>{{ item.title }}</span>
  355. </span>
  356. </div>
  357. <div class="brief">
  358. <div class="brief_title">
  359. <!-- <img src="@/assets/anliDetail/jdTitle.png" alt=""> -->
  360. <i class="el-icon-tickets"></i>
  361. <span>基础信息</span>
  362. </div>
  363. <div class="ActivityBaseMessage">
  364. <el-descriptions class="margin-top" :column="3" border>
  365. <el-descriptions-item>
  366. <template slot="label">
  367. <i class="el-icon-s-custom"></i>
  368. 负责人
  369. </template>
  370. {{ item.pro_leader }}
  371. </el-descriptions-item>
  372. <el-descriptions-item>
  373. <template slot="label">
  374. <i class="el-icon-mobile-phone"></i>
  375. 联系电话
  376. </template>
  377. {{ item.phone }}
  378. </el-descriptions-item>
  379. <el-descriptions-item>
  380. <template slot="label">
  381. <i class="el-icon-coordinate"></i>
  382. 活动创建时间
  383. </template>
  384. {{ item.create_at }}
  385. </el-descriptions-item>
  386. <el-descriptions-item>
  387. <template slot="label">
  388. <i class="el-icon-date"></i>
  389. 活动开展时间
  390. </template>
  391. <!-- {{ JSON.parse(item.begin_at) }} -->
  392. {{
  393. JSON.parse(item.begin_at)[0].split(" ")[0] +
  394. "\t至\t" +
  395. JSON.parse(item.begin_at)[1].split(" ")[0]
  396. }}
  397. </el-descriptions-item>
  398. <el-descriptions-item>
  399. <template slot="label">
  400. <i class="el-icon-coin"></i>
  401. 活动预算(元)
  402. </template>
  403. {{ item.money }}
  404. </el-descriptions-item>
  405. <el-descriptions-item>
  406. <template slot="label">
  407. <i class="el-icon-user"></i>
  408. 参与学生人数
  409. </template>
  410. {{ item.students }}
  411. </el-descriptions-item>
  412. </el-descriptions>
  413. </div>
  414. <div class="brief_title MarginTop30px">
  415. <!-- <img src="@/assets/anliDetail/jdTitle.png" alt=""> -->
  416. <i class="el-icon-user-solid"></i>
  417. <span>指导老师</span>
  418. </div>
  419. <div class="projectStudent">
  420. <el-table
  421. :data="JSON.parse(item.course_teacher)"
  422. border
  423. style="width: 100%"
  424. >
  425. <el-table-column prop="name" label="姓名" align="center">
  426. </el-table-column>
  427. <el-table-column prop="work" label="工作单位" align="center">
  428. </el-table-column>
  429. <el-table-column prop="work" align="center" label="活动分工">
  430. </el-table-column>
  431. </el-table>
  432. </div>
  433. <!-- <div class="brief_title MarginTop30px">
  434. <img src="@/assets/anliDetail/proOverTwo.png" alt="">
  435. <span>活动简介</span>
  436. </div> -->
  437. <!-- <div class="TextView" v-text="item.brief"> -->
  438. <!-- </div> -->
  439. <div class="brief_title MarginTop30px">
  440. <!-- <img src="@/assets/anliDetail/jdTitle.png" alt=""> -->
  441. <i class="el-icon-edit-outline"></i>
  442. <span>活动计划</span>
  443. </div>
  444. <div
  445. class="TextView"
  446. v-text="JSON.parse(item.chapters).activityPlan"
  447. ></div>
  448. <div class="brief_title MarginTop30px">
  449. <!-- <img src="@/assets/anliDetail/jdTitle.png" alt=""> -->
  450. <i class="el-icon-data-line"></i>
  451. <span>预期目标</span>
  452. </div>
  453. <div
  454. class="TextView"
  455. v-text="JSON.parse(item.chapters).expectations"
  456. ></div>
  457. <div class="brief_title MarginTop30px">
  458. <!-- <img src="@/assets/anliDetail/jdTitle.png" alt=""> -->
  459. <i class="el-icon-pie-chart"></i>
  460. <span>活动受面</span>
  461. </div>
  462. <div
  463. class="TextView"
  464. v-text="JSON.parse(item.chapters).eventAudience"
  465. ></div>
  466. <div class="brief_title MarginTop30px">
  467. <!-- <img src="@/assets/anliDetail/jdTitle.png" alt=""> -->
  468. <i class="el-icon-money"></i>
  469. <span>经费支出计划</span>
  470. </div>
  471. <div
  472. class="TextView"
  473. v-text="JSON.parse(item.chapters).fundingPlan"
  474. ></div>
  475. <div
  476. class="brief_title MarginTop30px"
  477. v-if="ActivityLookFile[index].url != ''"
  478. >
  479. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  480. <!-- <i class="el-icon-money"></i> -->
  481. <span>活动完结报告</span>
  482. </div>
  483. <div class="brief" v-if="ActivityLookFile[index].url != ''">
  484. <div class="material">
  485. <div class="material_title">
  486. <img src="@/assets/anliDetail/fileList.png" alt="" />
  487. <span>活动完结报告</span>
  488. </div>
  489. <div class="FileShowArea">
  490. <div class="FileShowArea_Left">
  491. <vword
  492. style="width: 100%; height: 100%; overflow: auto"
  493. class="fullStyle"
  494. v-if="
  495. checkFileType(ActivityLookFile[index].url)['type'] !=
  496. 'pdf' &&
  497. checkFileType(ActivityLookFile[index].url)['name'] !=
  498. '图片'
  499. "
  500. :pdfUrl="
  501. 'https://view.officeapps.live.com/op/view.aspx?src=' +
  502. ActivityLookFile[index].url
  503. "
  504. ></vword>
  505. <vpdf
  506. style="width: 100%; height: 100%; overflow: auto"
  507. class="fullStyle"
  508. :pdfUrl="ActivityLookFile[index].url"
  509. v-if="
  510. checkFileType(ActivityLookFile[index].url)['type'] ==
  511. 'pdf'
  512. "
  513. ></vpdf>
  514. <img
  515. :src="ActivityLookFile[index].url"
  516. alt="图片哦"
  517. v-if="
  518. checkFileType(ActivityLookFile[index].url)['name'] ==
  519. '图片'
  520. "
  521. style="width: 100%; height: 100%"
  522. />
  523. </div>
  524. <div class="FileShowArea_Right core_dialogue">
  525. <div
  526. v-for="(i, index2) in item.reportFile"
  527. :key="i.url"
  528. @click="Object.assign(ActivityLookFile[index], i)"
  529. :class="[
  530. 'FileList',
  531. ActivityLookFile[index]['url'] == i.url
  532. ? 'lookFile'
  533. : '',
  534. ]"
  535. >
  536. <span
  537. >{{ index2 + 1 }}.{{
  538. checkFileType(i.url)["name"]
  539. }}</span
  540. >
  541. <div>{{ i.fileName }}</div>
  542. </div>
  543. </div>
  544. </div>
  545. </div>
  546. </div>
  547. </div>
  548. </div>
  549. </div>
  550. </div>
  551. <!-- 活动开展结束 -->
  552. <!-- 项目附件开始 -->
  553. <div class="BaseMessage" v-show="pageState == 3">
  554. <div class="BaseTitle" type="3">
  555. <span>项目附件</span>
  556. </div>
  557. <div class="brief" v-if="ProjectLookFile.url != ''">
  558. <div class="material">
  559. <div class="material_title">
  560. <img src="@/assets/anliDetail/fileList.png" alt="" />
  561. <span>项目材料</span>
  562. </div>
  563. <div class="FileShowArea">
  564. <div class="FileShowArea_Left">
  565. <vword
  566. style="width: 100%; height: 100%; overflow: auto"
  567. class="fullStyle"
  568. v-if="
  569. checkFileType(ProjectLookFile.url)['type'] != 'pdf' &&
  570. checkFileType(ProjectLookFile.url)['name'] != '图片'
  571. "
  572. :pdfUrl="
  573. 'https://view.officeapps.live.com/op/view.aspx?src=' +
  574. ProjectLookFile.url
  575. "
  576. ></vword>
  577. <vpdf
  578. style="width: 100%; height: 100%; overflow: auto"
  579. class="fullStyle"
  580. :pdfUrl="ProjectLookFile.url"
  581. v-if="checkFileType(ProjectLookFile.url)['type'] == 'pdf'"
  582. ></vpdf>
  583. <img
  584. :src="ProjectLookFile.url"
  585. alt="图片哦"
  586. v-if="checkFileType(ProjectLookFile.url)['name'] == '图片'"
  587. style="width: 100%; height: 100%"
  588. />
  589. </div>
  590. <div class="FileShowArea_Right core_dialogue">
  591. <div
  592. v-for="(item, index) in ProjectFile"
  593. :key="item.url"
  594. @click="ProjectLookFile = item"
  595. :class="[
  596. 'FileList',
  597. ProjectLookFile['url'] == item.url ? 'lookFile' : '',
  598. ]"
  599. >
  600. <span
  601. >{{ index + 1 }}.{{ checkFileType(item.url)["name"] }}</span
  602. >
  603. <div>{{ item.fileName }}</div>
  604. </div>
  605. </div>
  606. </div>
  607. </div>
  608. </div>
  609. </div>
  610. <!-- 项目中期报告开始 -->
  611. <div class="BaseMessage" v-show="pageState == 4">
  612. <!-- <div class="BaseTitle">
  613. <span>结项评价</span>
  614. </div>
  615. <div class="brief">
  616. <div class="brief_title" type="1.1">
  617. <img src="@/assets/anliDetail/jdTitle.png" alt="">
  618. <span>科研办</span>
  619. </div>
  620. <div class="TextView" >
  621. <div class="TextView">
  622. {{ endProjectRemark['kRem'] }}
  623. </div>
  624. </div>
  625. </div>
  626. <div class="brief">
  627. <div class="brief_title" type="1.1">
  628. <img src="@/assets/anliDetail/jdTitle.png" alt="">
  629. <span>学术委员会</span>
  630. </div>
  631. <div class="TextView" >
  632. <div class="TextView">
  633. {{ endProjectRemark["bRem"] }}
  634. </div>
  635. </div>
  636. </div>
  637. <div class="brief">
  638. <div class="brief_title" type="1.1">
  639. <img src="@/assets/anliDetail/jdTitle.png" alt="">
  640. <span>部门审核评语</span>
  641. </div>
  642. <div class="TextView" >
  643. <div class="TextView">
  644. {{ endProjectRemark["xRem"] }}
  645. </div>
  646. </div>
  647. </div> -->
  648. <div class="BaseTitle" type="5">
  649. <span>项目结题报告</span>
  650. </div>
  651. <div class="brief">
  652. <projectSettlementBook></projectSettlementBook>
  653. <!-- <div class="brief_title">
  654. <img src="@/assets/anliDetail/jdTitle.png" alt="" />
  655. <span>项目结题附件</span>
  656. </div>
  657. <div class="material" v-if="ProjectEndLookFile.url != ''">
  658. <div class="material_title">
  659. <img src="@/assets/anliDetail/fileList.png" alt="" />
  660. <span>项目结题附件</span>
  661. </div>
  662. <div class="FileShowArea">
  663. <div class="FileShowArea_Left">
  664. <vword
  665. style="width: 100%; height: 100%; overflow: auto"
  666. class="fullStyle"
  667. v-if="
  668. checkFileType(ProjectEndLookFile.url)['type'] != 'pdf' &&
  669. checkFileType(ProjectEndLookFile.url)['name'] != '图片'
  670. "
  671. :pdfUrl="
  672. 'https://view.officeapps.live.com/op/view.aspx?src=' +
  673. ProjectEndLookFile.url
  674. "
  675. ></vword>
  676. <vpdf
  677. style="width: 100%; height: 100%; overflow: auto"
  678. class="fullStyle"
  679. :pdfUrl="ProjectEndLookFile.url"
  680. v-if="checkFileType(ProjectEndLookFile.url)['type'] == 'pdf'"
  681. ></vpdf>
  682. <img
  683. :src="ProjectEndLookFile.url"
  684. alt="图片哦"
  685. v-if="checkFileType(ProjectEndLookFile.url)['name'] == '图片'"
  686. style="width: 100%; height: 100%"
  687. />
  688. </div>
  689. <div class="FileShowArea_Right core_dialogue">
  690. <div
  691. v-for="(item, index) in ProjectEndFile"
  692. :key="item.url"
  693. @click="ProjectEndLookFile = item"
  694. :class="[
  695. 'FileList',
  696. ProjectEndLookFile['url'] == item.url ? 'lookFile' : '',
  697. ]"
  698. >
  699. <span
  700. >{{ index + 1 }}.{{ checkFileType(item.url)["name"] }}</span
  701. >
  702. <div>{{ item.fileName }}</div>
  703. </div>
  704. </div>
  705. </div>
  706. </div> -->
  707. </div>
  708. </div>
  709. <!--项目详结束-->
  710. <!--内容区结束-->
  711. </div>
  712. </template>
  713. <script>
  714. import vpdf from "@/components/vpdf.vue";
  715. import vword from "@/components/vword.vue";
  716. import { VueEditor } from "vue2-editor";
  717. // 结项书
  718. import projectSettlementBook from "../../projectSettlement/components/projectSettlementBook.vue";
  719. export default {
  720. components: { vpdf, vword, VueEditor,projectSettlementBook },
  721. data() {
  722. return {
  723. pageState: 0,
  724. loading: false,
  725. classType:{
  726. "0":"团队合作项目、跨学科合作项目。",
  727. "1":"科技创新、低空经济、银发经济、乡村振兴、助残助学、非遗文创等新技术、新产业、新业态、新模式方面的项目。",
  728. "2":"企业真实生产经营项目或外包服务项目。",
  729. "3":"社会征集项目、产业命题项目。",
  730. "4":"近两年内参与校级以上创新创业大赛并获奖的项目。",
  731. "5":"美丽校园改造计划中的校园智能产品及文创产品的研发项目。",
  732. "6":"企申报人为港澳籍、学校扶贫班及在校贫困生申报的项目"
  733. },
  734. //头部信息 项目名称 负责人 学院牵头领导 封面图片 分类 所在部门 优先支持项目 联系电话 项目申请人 美丽校园改造项目
  735. TitleMessage: {
  736. title: "",
  737. pro_leader: "",
  738. lead_leader: "",
  739. image: "",
  740. TypeName: "",
  741. ClassName: "",
  742. tn2: 0,
  743. multiSelectProject: [],
  744. },
  745. // TitleMessage:{ClassName:"",EndTime:"",TypeName:"",beginTime:"",brief:"",course_student:[],image:"",pro_leader:"",title:""},
  746. DetailMessage: [],
  747. ProjectFile: [],
  748. ProjectLookFile: { url: "", type: "" },
  749. ProjectEndFile: [],
  750. ProjectEndLookFile: { url: "", type: "" },
  751. AllActivity: [],
  752. ActivityLookFile: [],
  753. endProjectRemark: { kRem: "", bRem: "", xRem: "" },
  754. canonical: {
  755. Image:
  756. /^https?:\/\/(.+\/)+.+(\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif))$/i,
  757. File: /^https?:\/\/(.+\/)+.+(\.(docx|xlsx|ppt|pdf))$/i,
  758. },
  759. };
  760. },
  761. methods: {
  762. getData() {
  763. this.loading = true;
  764. this.ActivityLookFile = [];
  765. this.ajax
  766. .get(this.$store.state.api + "/SelectResultDetailStudent", {
  767. uid: this.$store.state.userInfo.userid,
  768. pid: this.$route.query["pid"],
  769. })
  770. .then((res) => {
  771. let FormData = res.data;
  772. console.log(FormData);
  773. // return console.log(FormData)
  774. // //头部信息
  775. this.TitleMessage = FormData[0][0];
  776. // 教师表格
  777. console.log(this.TitleMessage);
  778. this.TitleMessage["teacher"] = JSON.parse(
  779. this.TitleMessage["teacher"]
  780. );
  781. // 学生表格
  782. this.TitleMessage["student"] = JSON.parse(
  783. this.TitleMessage["student"]
  784. );
  785. this.TitleMessage["multiSelectProject"] = JSON.parse(
  786. this.TitleMessage["multiSelectProject"]
  787. );
  788. console.log(this.TitleMessage["multiSelectProject"]);
  789. this.DetailMessage = JSON.parse(FormData[1][0]["chapters"]);
  790. // // //项目附件
  791. // this.ProjectFile = JSON.parse(FormData[2][0]['projectFile'])
  792. // if(this.ProjectFile!=null)this.ProjectLookFile = this.ProjectFile[0]
  793. // else this.ProjectLookFile = {url:'',type:""};
  794. // //项目结题附件
  795. // console.log(JSON.parse(FormData[3][0]['endFile']));
  796. // this.ProjectEndFile = JSON.parse(FormData[3][0]['endFile']!=''?JSON.parse(FormData[3][0]['endFile']):'');
  797. // if(this.ProjectEndFile!=null && this.ProjectEndFile.length!=0) this.ProjectEndLookFile = this.ProjectEndFile[0];
  798. // else this.ProjectEndLookFile = {url:"",type:""}
  799. // console.log(111);
  800. // if(FormData[4][0]['title']!=null){
  801. // this.AllActivity = FormData[4]
  802. // this.AllActivity.forEach(item=>{
  803. // if(item['reportFile']!=null&&item['reportFile']!=''){
  804. // item['reportFile'] = JSON.parse(item['reportFile']);
  805. // if(item['reportFile'].length!=0) this.ActivityLookFile.push({url:item['reportFile'][0].url,fileName:item['reportFile'][0].fileName})
  806. // else this.ActivityLookFile.push({url:"",type:""})
  807. // }else this.ActivityLookFile.push({url:"",type:""})
  808. // })
  809. // };
  810. // // if(JSON.parse(FormData[5][0]['endProjectRemark'])!=null)this.endProjectRemark = JSON.parse(FormData[5][0]['endProjectRemark']);
  811. // this.loading = false;
  812. //项目附件
  813. this.ProjectFile = JSON.parse(FormData[2][0]["projectFile"]);
  814. if (this.ProjectFile != null)
  815. this.ProjectLookFile = this.ProjectFile[0];
  816. else this.ProjectLookFile = { url: "", type: "" };
  817. //项目结题附件
  818. this.ProjectEndFile =
  819. FormData[3][0]["endFile"] != ""
  820. ? JSON.parse(FormData[3][0]["endFile"])
  821. : "";
  822. if (this.ProjectEndFile != null && this.ProjectEndFile != "")
  823. this.ProjectEndLookFile = this.ProjectEndFile[0];
  824. else this.ProjectEndLookFile = { url: "", type: "" };
  825. console.log(FormData[4][0]);
  826. if (FormData[4][0]["title"] != null) {
  827. this.AllActivity = FormData[4];
  828. this.AllActivity.forEach((item) => {
  829. if (item["reportFile"] != null && item["reportFile"] != "") {
  830. item["reportFile"] = JSON.parse(item["reportFile"]);
  831. if (item["reportFile"].length != 0)
  832. this.ActivityLookFile.push({
  833. url: item["reportFile"][0].url,
  834. fileName: item["reportFile"][0].fileName,
  835. });
  836. else this.ActivityLookFile.push({ url: "", type: "" });
  837. } else this.ActivityLookFile.push({ url: "", type: "" });
  838. });
  839. }
  840. // if(JSON.parse(FormData[5][0]['endProjectRemark'])!=null)this.endProjectRemark = JSON.parse(FormData[5][0]['endProjectRemark']);
  841. this.loading = false;
  842. })
  843. .catch((err) => {
  844. console.log(err);
  845. });
  846. },
  847. checkFileType(url) {
  848. if (typeof url == "undefined") return { type: "", name: "" };
  849. let urlSplit = url.split(".");
  850. const type = urlSplit[urlSplit.length - 1];
  851. if (this.canonical.Image.test(url)) return { type: type, name: "图片" };
  852. if (this.canonical.File.test(url)) return { type: type, name: "文档" };
  853. else return { type: type, name: type };
  854. },
  855. ActivityChangeFileLook(index, item) {
  856. Object.assign(this.ActivityLookFile[index], item);
  857. },
  858. },
  859. mounted() {
  860. //监听元素滚动
  861. document.querySelector(".core_dialogue").addEventListener("scroll", (e) => {
  862. let Nav = document.querySelector("#Nav");
  863. let scrollTop = e.target.scrollTop;
  864. if (scrollTop >= 250) {
  865. document
  866. .querySelector(".core_dialogue")
  867. .querySelector(".el-header").style =
  868. "position:fixed;z-index:10;width:100%";
  869. Nav.style = `width:100%;padding:0 20%;box-sizing: border-box;border-radius:0;display:flex;justify-content: space-around;position: fixed;top:calc(70px - 20px);z-index:99;align-items: center;box-shadow: 0 0 5px gray;`;
  870. } else if (scrollTop <= 100) {
  871. document
  872. .querySelector(".core_dialogue")
  873. .querySelector(".el-header").style = "";
  874. Nav.style = ``;
  875. }
  876. });
  877. this.getData();
  878. },
  879. };
  880. </script>
  881. <style lang="less" scoped>
  882. .rs1apply {
  883. width: 100%;
  884. height: 100%;
  885. // height: auto;
  886. display: flex;
  887. flex-direction: column;
  888. align-items: center;
  889. background-color: #e6eaf0;
  890. box-sizing: border-box;
  891. padding-bottom: 50px;
  892. }
  893. .header {
  894. width: 100%;
  895. min-height: 200px;
  896. background-color: white;
  897. margin-top: 10px;
  898. display: flex;
  899. align-items: center;
  900. box-sizing: border-box;
  901. padding-left: 5%;
  902. position: relative;
  903. .imgBlock {
  904. width: 230px;
  905. height: 130px;
  906. margin-right: 20px;
  907. img {
  908. width: 100%;
  909. height: 100%;
  910. object-fit: cover;
  911. }
  912. }
  913. .headerConcent {
  914. line-height: 40px;
  915. display: flex;
  916. flex-direction: column;
  917. justify-content: space-between;
  918. // width: ;
  919. .rsHead1Tit {
  920. font-size: 22px;
  921. font-weight: bold;
  922. }
  923. .rsHead2Tit {
  924. font-size: 16px;
  925. }
  926. .rsHead3Tit {
  927. display: flex;
  928. div {
  929. margin-right: 30px;
  930. }
  931. }
  932. }
  933. .backBtn {
  934. position: absolute;
  935. right: 10%;
  936. width: 100px;
  937. top: 10%;
  938. box-sizing: border-box;
  939. padding: 9px 0;
  940. display: flex;
  941. justify-content: center;
  942. align-items: center;
  943. font-size: 16px;
  944. cursor: pointer;
  945. }
  946. }
  947. #Nav {
  948. box-sizing: border-box;
  949. padding: 0 80px 0 70px;
  950. width: 60%;
  951. min-height: 50px;
  952. background-color: white;
  953. margin-top: 20px;
  954. border-radius: 5px;
  955. display: flex;
  956. justify-content: space-around;
  957. align-items: center;
  958. .navLi {
  959. // width: 150px;
  960. height: 100%;
  961. display: flex;
  962. justify-content: flex-start;
  963. align-items: center;
  964. font-size: 18px;
  965. // margin-left: 20px;
  966. cursor: pointer;
  967. img {
  968. height: 40px;
  969. }
  970. }
  971. .navLi:hover span {
  972. color: gray;
  973. }
  974. }
  975. .BaseMessage {
  976. width: 60%;
  977. position: relative;
  978. box-sizing: border-box;
  979. // margin-bottom: 20px;
  980. .BaseTitle {
  981. width: 100%;
  982. height: 85px;
  983. background-color: white;
  984. border-radius: 5px;
  985. margin-top: 20px;
  986. display: flex;
  987. align-items: center;
  988. margin-bottom: 20px;
  989. span {
  990. display: flex;
  991. align-items: center;
  992. // width: 160px;
  993. height: 50px;
  994. box-sizing: border-box;
  995. justify-content: center;
  996. padding-right: 2%;
  997. padding-left: 4%;
  998. align-items: center;
  999. background-image: url("@/assets/anliDetail/longNavBg.png");
  1000. background-size: 100% 100%;
  1001. margin-left: 20px;
  1002. color: white;
  1003. font-size: 18px;
  1004. }
  1005. }
  1006. .brief {
  1007. width: 100%;
  1008. height: auto;
  1009. border-radius: 5px;
  1010. box-sizing: border-box;
  1011. display: flex;
  1012. flex-direction: column;
  1013. align-items: center;
  1014. background-color: white;
  1015. padding: 10px 10px 20px 10px;
  1016. margin-bottom: 20px;
  1017. position: relative;
  1018. }
  1019. .brief_title {
  1020. width: 100%;
  1021. height: 40px;
  1022. display: flex;
  1023. align-items: center;
  1024. // margin-top: 10px;
  1025. font-size: 18px;
  1026. i {
  1027. width: 30px;
  1028. height: 30px;
  1029. font-size: 1.5em;
  1030. color: #50c5ff;
  1031. }
  1032. img {
  1033. width: 30px;
  1034. height: 30px;
  1035. }
  1036. span {
  1037. margin-left: 10px;
  1038. color: gray;
  1039. }
  1040. }
  1041. .TextView {
  1042. width: 100%;
  1043. min-height: 200px;
  1044. box-sizing: border-box;
  1045. padding: 10px;
  1046. border-radius: 5px;
  1047. background-color: rgb(240, 240, 240);
  1048. line-height: 2em;
  1049. word-wrap: break-word;
  1050. word-break: break-all;
  1051. }
  1052. .FileView {
  1053. width: 100%;
  1054. box-sizing: border-box;
  1055. padding: 0px 10px 10px 10px;
  1056. border-radius: 10px;
  1057. background-color: rgb(240, 240, 240);
  1058. .FileList {
  1059. width: 100%;
  1060. height: 50px;
  1061. border-radius: 10px;
  1062. background-color: white;
  1063. display: flex;
  1064. overflow: hidden;
  1065. cursor: pointer;
  1066. box-shadow: 0px 0px 4px rgb(185, 185, 185);
  1067. margin-top: 10px;
  1068. .FileType {
  1069. width: 15%;
  1070. height: 100%;
  1071. display: flex;
  1072. justify-content: center;
  1073. align-items: center;
  1074. color: white;
  1075. font-size: 18px;
  1076. background-color: #0c74ab;
  1077. }
  1078. .FileTitle {
  1079. display: flex;
  1080. height: 100%;
  1081. flex: 1;
  1082. align-items: center;
  1083. box-sizing: border-box;
  1084. padding-left: 2%;
  1085. }
  1086. }
  1087. }
  1088. .FileShow {
  1089. width: 100%;
  1090. height: 200px;
  1091. background-color: gray;
  1092. }
  1093. }
  1094. .material {
  1095. width: 100%;
  1096. height: 900px;
  1097. // height: 1000px;
  1098. margin-top: 20px;
  1099. border-radius: 5px;
  1100. box-sizing: border-box;
  1101. border: 1px solid #2f89dd;
  1102. overflow: hidden;
  1103. .material_title {
  1104. width: 100%;
  1105. height: 40px;
  1106. display: flex;
  1107. align-items: center;
  1108. box-sizing: border-box;
  1109. padding-left: 10px;
  1110. color: white;
  1111. background-color: #2f89dd;
  1112. }
  1113. .FileShowArea {
  1114. width: 100%;
  1115. height: calc(100% - 40px);
  1116. display: flex;
  1117. justify-content: space-around;
  1118. align-items: center;
  1119. .FileShowArea_Left {
  1120. width: 60%;
  1121. height: 95%;
  1122. background-color: white;
  1123. }
  1124. .FileShowArea_Right {
  1125. width: 35%;
  1126. height: 95%;
  1127. display: flex;
  1128. flex-direction: column;
  1129. align-items: center;
  1130. background-color: #f6f9fe;
  1131. border-radius: 5px;
  1132. .FileList {
  1133. width: 95%;
  1134. height: 45px;
  1135. background-color: white;
  1136. margin-top: 20px;
  1137. border-radius: 10px;
  1138. font-size: 18px;
  1139. cursor: pointer;
  1140. display: flex;
  1141. align-items: center;
  1142. overflow: hidden;
  1143. div {
  1144. height: auto;
  1145. width: 70%;
  1146. display: block;
  1147. overflow: hidden;
  1148. white-space: nowrap;
  1149. text-overflow: ellipsis;
  1150. }
  1151. span {
  1152. max-width: 20%;
  1153. min-width: 20%;
  1154. height: 100%;
  1155. display: flex;
  1156. align-items: center;
  1157. justify-content: center;
  1158. color: white;
  1159. background-color: #0c74ab;
  1160. margin-right: 10px;
  1161. float: left;
  1162. }
  1163. }
  1164. .FileList:hover {
  1165. color: gray;
  1166. }
  1167. }
  1168. }
  1169. }
  1170. .arrangement {
  1171. width: 100%;
  1172. margin-top: 10px;
  1173. background-color: white;
  1174. border-radius: 5px;
  1175. padding: 10 px;
  1176. box-sizing: border-box;
  1177. .arrangement_assignment_title {
  1178. width: 100%;
  1179. height: 50px;
  1180. display: flex;
  1181. box-sizing: border-box;
  1182. padding: 0px 20px 0px 10px;
  1183. justify-content: space-between;
  1184. font-size: 18px;
  1185. align-items: center;
  1186. span {
  1187. display: flex;
  1188. align-items: center;
  1189. color: black;
  1190. font-weight: 600;
  1191. span:nth-of-type(2) {
  1192. margin-left: 10px;
  1193. }
  1194. img {
  1195. width: 30px;
  1196. height: 30px;
  1197. margin-right: 10px;
  1198. }
  1199. }
  1200. }
  1201. .assignment {
  1202. width: 100%;
  1203. display: flex;
  1204. box-sizing: border-box;
  1205. padding: 0px 20px 0px 20px;
  1206. justify-content: center;
  1207. font-size: 18px;
  1208. align-items: space-between;
  1209. flex-direction: column;
  1210. span {
  1211. display: flex;
  1212. align-items: center;
  1213. color: gray;
  1214. img {
  1215. width: 30px;
  1216. height: 30px;
  1217. margin-right: 10px;
  1218. }
  1219. }
  1220. .assignment_message {
  1221. width: 100%;
  1222. }
  1223. }
  1224. }
  1225. .fullStyle {
  1226. width: 100% !important;
  1227. max-width: 100% !important;
  1228. height: 100% !important;
  1229. margin: 0 !important;
  1230. }
  1231. .personListUL {
  1232. width: 100%;
  1233. display: flex;
  1234. align-items: center;
  1235. .personListLI {
  1236. width: 80%;
  1237. text-overflow: ellipsis;
  1238. overflow: hidden;
  1239. white-space: nowrap;
  1240. span {
  1241. margin-right: 10px;
  1242. color: darkgray;
  1243. }
  1244. }
  1245. }
  1246. .titleMessage {
  1247. color: darkgray;
  1248. }
  1249. .projectStudent {
  1250. width: 100%;
  1251. cursor: default;
  1252. }
  1253. .beginTime_EndTime {
  1254. width: 100%;
  1255. height: 40px;
  1256. display: flex;
  1257. align-items: center;
  1258. font-size: 18px;
  1259. box-sizing: border-box;
  1260. padding-left: 20px;
  1261. i {
  1262. margin: 0 20px 0 20px;
  1263. font-size: 22px;
  1264. }
  1265. // background-color: red;
  1266. }
  1267. /deep/ .ql-toolbar {
  1268. display: none !important;
  1269. }
  1270. /deep/ .ql-container.ql-snow {
  1271. border: none !important;
  1272. }
  1273. .lookFile {
  1274. color: grey;
  1275. }
  1276. .ActivityBaseMessage {
  1277. width: 100%;
  1278. height: auto;
  1279. }
  1280. .MarginTop30px {
  1281. margin-top: 30px;
  1282. }
  1283. </style>