吉光研途前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

659 lines
19 KiB

  1. <template>
  2. <view class="page__view">
  3. <!-- 导航栏 -->
  4. <navbar :title="title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" />
  5. <!-- 轮播图 -->
  6. <view class="swiper">
  7. <uv-swiper :list="bannerList" keyName="image" :autoplay="bannerList.length" :indicator="bannerList.length" indicatorMode="dot" indicatorActiveColor="#4883F9" indicatorInactiveColor="#FFFFFF" height="424rpx"></uv-swiper>
  8. </view>
  9. <!-- 发表全流程辅导 -->
  10. <view class="section">
  11. <view class="section-header">发表全流程辅导</view>
  12. <view class="section-content paragraph process">
  13. <view class="paragraph">
  14. <view class="flex difficulty">
  15. <view>难度</view>
  16. <uv-rate :value="process.difficulty" size="28rpx" activeColor="#4883F9" :allowHalf="true" :minCount="0.5" readonly></uv-rate>
  17. </view>
  18. <view>{{ process.content }}</view>
  19. </view>
  20. </view>
  21. </view>
  22. <!-- 可发表方向 -->
  23. <view class="section">
  24. <view class="section-header">
  25. <view class="section-header-line"></view>
  26. <view>可发表方向</view>
  27. </view>
  28. <view class="section-content direction">
  29. <view class="table">
  30. <view class="table-row" v-for="row in direction" :key="row.id">
  31. <view class="table-cell">{{ row.title }}</view>
  32. <view class="table-cell">{{ row.desc }}</view>
  33. </view>
  34. </view>
  35. </view>
  36. </view>
  37. <!-- 师资介绍 -->
  38. <view class="section">
  39. <view class="section-header">
  40. <view class="section-header-line"></view>
  41. <view>师资介绍</view>
  42. </view>
  43. <view class="section-content teachers">
  44. <view class="card" v-for="item in teachers" :key="item.id">
  45. <view class="info">
  46. <view class="title">
  47. <view class="name">{{ item.name }}</view>
  48. <view class="label">
  49. <view class="label-text">{{ item.label }}</view>
  50. <view class="label-line"></view>
  51. </view>
  52. </view>
  53. <view class="tag">
  54. <image class="tag-icon" src="@/static/image/icon-degree.png" mode="widthFix"></image>
  55. <vie>{{ item.degree }}</vie>
  56. </view>
  57. <view class="desc">
  58. <view>专业经历</view>
  59. <view>{{ item.experience }}</view>
  60. </view>
  61. </view>
  62. <view class="pic">
  63. <image class="img" :src="item.image" mode="aspectFill"></image>
  64. </view>
  65. </view>
  66. </view>
  67. </view>
  68. <!-- 课程安排 -->
  69. <view class="section">
  70. <view class="section-header">
  71. <view class="section-header-line"></view>
  72. <view>课程安排</view>
  73. </view>
  74. <view class="section-content">
  75. <view class="table">
  76. <view class="table-row" v-for="row in course" :key="row.id">
  77. <view class="table-cell">
  78. <view>{{ row.title }}</view>
  79. <view>{{ `(共${row.length}课时)` }}</view>
  80. </view>
  81. <view class="table-cell">{{ row.desc }}</view>
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. <!-- 适用人群 -->
  87. <view class="section">
  88. <view class="section-header">
  89. <view class="section-header-line"></view>
  90. <view>适用人群</view>
  91. </view>
  92. <view class="section-content target-audience">
  93. <view class="paragraph">
  94. {{ targetAudience }}
  95. </view>
  96. </view>
  97. </view>
  98. <!-- 期刊推荐 -->
  99. <view class="section">
  100. <view class="section-header">
  101. <view class="section-header-line"></view>
  102. <view>期刊推荐</view>
  103. </view>
  104. <view class="section-content journal">
  105. <view class="box" v-for="item in journal" :key="item.id">
  106. <view class="card">
  107. <view class="top">
  108. <view class="pic">
  109. <image class="img" :src="item.image" mode="aspectFill"></image>
  110. </view>
  111. <view class="info">
  112. <view class="name">{{ item.name }}</view>
  113. <view class="desc">{{ item.desc }}</view>
  114. </view>
  115. </view>
  116. <view class="main">
  117. {{ item.intro }}
  118. </view>
  119. </view>
  120. </view>
  121. </view>
  122. </view>
  123. <!-- 附加材料 -->
  124. <view class="section">
  125. <view class="section-header">
  126. <view class="section-header-line"></view>
  127. <view>附加材料</view>
  128. </view>
  129. <view class="section-content attachment">
  130. <view class="flex file" v-for="item in attachment" :key="item.id">
  131. <view class="file-info">
  132. <template v-if="item.type == 'pdf'">
  133. <image class="file-icon" src="@/static/image/icon-pdf.png" mode="widthFix"></image>
  134. </template>
  135. <template v-else>
  136. <image class="file-icon" src="@/static/image/icon-word.png" mode="widthFix"></image>
  137. </template>
  138. <view class="file-detail">
  139. <view class="title">{{ item.name }}</view>
  140. <view class="desc">{{ `${item.type} ${item.size}MB` }}</view>
  141. </view>
  142. </view>
  143. <button class="btn" @click="downloadFile(item.url)">下载</button>
  144. </view>
  145. </view>
  146. </view>
  147. </view>
  148. </template>
  149. <script>
  150. export default {
  151. data() {
  152. return {
  153. title: '',
  154. bannerList: [],
  155. process: {},
  156. direction: [],
  157. teachers: [],
  158. course: [],
  159. targetAudience: '',
  160. journal: [],
  161. attachment: [],
  162. }
  163. },
  164. onLoad({ id }) {
  165. this.getData(id)
  166. },
  167. methods: {
  168. async getData(thesisId) {
  169. try {
  170. // todo
  171. await this.$fetch('queryThesisById', { thesisId })
  172. } catch (err) {
  173. }
  174. // todo: delete
  175. this.title = '建筑学学科论文'
  176. this.bannerList = [
  177. { image: '/static/image/temp-1.png' },
  178. { image: '/static/image/temp-2.png' },
  179. { image: '/static/image/temp-3.png' },
  180. { image: '/static/image/temp-2.png' },
  181. ]
  182. this.process = {
  183. difficulty: 4,
  184. content: `导周期本次辅导共包含15课时,每课时60分钟通常建议辅导周期为2-3个月,可根据学员进度个性化调整。发表周期6-12个月不等(包含论文撰写、修改、投稿、审稿等环节)期刊不同。周期有所差异,平均审稿期为3-6月。结果产出定制选题报告与研究框架辅导高质量学术论文初稿+多轮修改辅导完整投稿材料包(含CoverLetter、格式排版等)AHCI核心期刊正式发表
  185. `
  186. }
  187. this.direction = [
  188. {
  189. id: '001',
  190. title: '建筑历史方向',
  191. desc: '聚焦不同时期建筑风格,流派演变,哲学美学(如现象学)与建筑关联,经典或当代实(如生态建筑)、标志性建筑项目实践案例。',
  192. },
  193. {
  194. id: '002',
  195. title: '建筑设计实践',
  196. desc: '创新设计流程(含参数化计)、可持续设计(如生态建筑)、标志性建筑项目实践案例。',
  197. },
  198. {
  199. id: '003',
  200. title: '建筑技术与工程',
  201. desc: '创新设计流程(含参数化计)、可持续设计(如生态建筑)、标志性建筑项目实践案例。',
  202. },
  203. ]
  204. this.teachers = [
  205. {
  206. id: '001',
  207. name: 'Elizabeth',
  208. label: '文化与技术融合研究者',
  209. degree: '牛津大学建筑学博士',
  210. image: '/static/image/temp-11.png',
  211. experience: `
  212. Building Environment等权威期刊发表多篇论文;教学特色:擅长以项目制教学打通理论到实践的闭环学生团队多次斩获亚洲建筑新人赛大奖
  213. `
  214. },
  215. {
  216. id: '002',
  217. name: 'Elizabeth',
  218. label: '文化与技术融合研究者',
  219. degree: '牛津大学建筑学博士',
  220. image: '/static/image/temp-12.png',
  221. experience: `
  222. Building Environment等权威期刊发表多篇论文;教学特色:擅长以项目制教学打通理论到实践的闭环学生团队多次斩获亚洲建筑新人赛大奖
  223. `
  224. },
  225. ]
  226. this.course = [
  227. {
  228. id: '001',
  229. title: '选题指导',
  230. length: 4,
  231. desc: '探讨当前建筑学热点与研究势,启发学员形成研究兴出与方向在导师引导下,完成选题定位、研究问题设定;',
  232. },
  233. {
  234. id: '002',
  235. title: '论文撰写辅导',
  236. length: 4,
  237. desc: '创新设计流程(含参数化计)、可持续设计(如生态建筑)、标志性建筑项目实践案例。',
  238. },
  239. {
  240. id: '003',
  241. title: '论文修改与润色提升',
  242. length: 4,
  243. desc: '......',
  244. },
  245. ]
  246. this.targetAudience = `正在攻读本科、硕土或博士阶段建筑学、城市设计、景观建筑、建筑历史与理论等相关专业的学生
  247. ·有志申请海外建筑类高校研究生项目需准备具有深度与原创性的学术写作材料的申请者;
  248. -准备参与各类学术会议论文竟赛设计研究发表等活动的高校建筑学子;
  249. .希望将设计实践与理论研究相结合通过论文提升学术表达与评职称的建筑从业者或高校教师;
  250. 对跨学科建筑议题(如空间社会学建筑文化研究数字建构等)有浓厚兴趣并计划在学术方向深入发展的研究者
  251. `
  252. this.journal = [
  253. {
  254. id: '001',
  255. name: 'Journal of Architecture',
  256. desc: '发表难度中等偏难,审稿周期较长,注重研究的创新性。',
  257. intro: '专注于建筑理论与历史研究。该刊理论性强,特别欢迎跨学科、历史与文化视角的论文,期刊适合深度分析与批评性研究。作为AHCI核刊。JCRQ2分区。影响因子1.2。',
  258. image: '/static/image/temp-13.png',
  259. },
  260. {
  261. id: '002',
  262. name: 'Journal of Architecture',
  263. desc: '发表难度中等偏难,审稿周期较长,注重研究的创新性。',
  264. intro: '专注于建筑理论与历史研究。该刊理论性强,特别欢迎跨学科、历史与文化视角的论文,期刊适合深度分析与批评性研究。作为AHCI核刊。JCRQ2分区。影响因子1.2。',
  265. image: '/static/image/temp-14.png',
  266. },
  267. ]
  268. this.attachment = [
  269. {
  270. id: '001',
  271. name: '学术平台手册.pdf',
  272. type: 'pdf',
  273. size: 6.37,
  274. url: 'https://www.klook.cn/klvoucher/UENZOG10SE81amgzbURkNXhvRVhFeXFIaDJONnpYb0gyQUNFYURJRzlQVjlydTJUZGFGaVpCM3VmYW1wUnhKSkp0bDBUK2IvekU4Vk14RmhacTJ2d0VqVEVCUHlMZ0JFelNycGxGdTl4VTA9.pdf?from_source=email&from_medium=system_email&from_campaign=TTD_pretrip2_booking_confirmation_base',
  275. },
  276. {
  277. id: '002',
  278. name: '学术平台手册.doc',
  279. type: 'word',
  280. size: 6.37,
  281. url: 'https://qcloud.dpfile.com/pc/myug_luLpDQj6VgAsrUXgol_FrfrTcsVfpzy8-1PMV3uCvjEkdZxjKI_hzpUwDOs.jpg',
  282. },
  283. ]
  284. },
  285. downloadFile(url) {
  286. console.log('downloadFile', url)
  287. uni.downloadFile({
  288. url, // 文件地址
  289. success: (downloadRes) => {
  290. console.log('downloadRes', downloadRes)
  291. if (downloadRes.statusCode === 200) {
  292. uni.openDocument({
  293. showMenu: true,
  294. filePath: downloadRes.tempFilePath,
  295. success: () => console.log('打开成功')
  296. });
  297. } else {
  298. uni.showToast({ title: '下载失败', icon: 'none' });
  299. }
  300. },
  301. fail: (err) => {
  302. uni.showToast({ title: '网络异常', icon: 'none' });
  303. }
  304. });
  305. },
  306. },
  307. }
  308. </script>
  309. <style scoped lang="scss">
  310. .page__view {
  311. padding-bottom: 62rpx;
  312. background: #FFFFFF;
  313. }
  314. .swiper {
  315. margin: 20rpx 18rpx 32rpx 18rpx;
  316. /deep/ .uv-swiper-indicator__wrapper__dot {
  317. width: 15rpx;
  318. height: 15rpx;
  319. }
  320. /deep/ .uv-swiper-indicator__wrapper__dot--active {
  321. width: 15rpx;
  322. }
  323. }
  324. .section {
  325. width: 100%;
  326. padding: 0 18rpx;
  327. box-sizing: border-box;
  328. & + & {
  329. margin-top: 40rpx;
  330. }
  331. &-header {
  332. display: flex;
  333. align-items: center;
  334. justify-content: flex-start;
  335. column-gap: 15rpx;
  336. padding-left: 18rpx;
  337. font-size: 32rpx;
  338. font-weight: 700;
  339. color: #000000;
  340. &-line {
  341. width: 11rpx;
  342. height: 45rpx;
  343. border-radius: 6rpx;
  344. background-image: linear-gradient(#FFFFFF, #4883F9);
  345. }
  346. }
  347. &-content {
  348. margin-top: 37rpx;
  349. .paragraph {
  350. width: 100%;
  351. padding: 22rpx;
  352. box-sizing: border-box;
  353. white-space: pre-line;
  354. font-size: 28rpx;
  355. color: #000000;
  356. background: #F8F8F8;
  357. border-radius: 15rpx;
  358. }
  359. .table {
  360. width: 100%;
  361. border-radius: 15rpx;
  362. overflow: hidden;
  363. &-row {
  364. display: grid;
  365. grid-template-columns: 218rpx auto;
  366. background: #EEEEEE;
  367. &:nth-child(2n) {
  368. background: #DEDEDE;
  369. }
  370. }
  371. &-cell {
  372. display: inline-flex;
  373. flex-direction: column;
  374. align-items: flex-start;
  375. justify-content: center;
  376. padding: 17rpx;
  377. box-sizing: border-box;
  378. font-family: PingFang SC;
  379. font-weight: 400;
  380. font-size: 28rpx;
  381. color: #080808;
  382. &:first-child {
  383. border-right: 1rpx solid #E5E5E5;
  384. }
  385. }
  386. }
  387. &.process {
  388. margin-top: 24rpx;
  389. .difficulty {
  390. justify-content: flex-start;
  391. }
  392. }
  393. &.teachers {
  394. .card {
  395. display: flex;
  396. align-items: center;
  397. column-gap: 12rpx;
  398. background: #ffffff;
  399. border-radius: 15rpx;
  400. box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16);
  401. .info {
  402. flex: 1;
  403. padding: 19rpx 0 28rpx 17rpx;
  404. .title {
  405. display: flex;
  406. align-items: center;
  407. padding-left: 11rpx;
  408. color: #000000;
  409. .name {
  410. font-size: 32rpx;
  411. font-weight: 700;
  412. }
  413. .label {
  414. margin-left: 12rpx;
  415. position: relative;
  416. height: 30rpx;
  417. &-line {
  418. margin: 24rpx 0 0 25rpx;
  419. width: 195rpx;
  420. height: 4rpx;
  421. background-image: linear-gradient(#4883F9, #FFFFFF);
  422. border-radius: 2rpx;
  423. }
  424. &-text {
  425. position: absolute;
  426. top: 0;
  427. left: 0;
  428. font-size: 22rpx;
  429. font-weight: 400;
  430. }
  431. }
  432. }
  433. .tag {
  434. margin: 5rpx 0 18rpx 0;
  435. display: inline-flex;
  436. align-items: center;
  437. padding: 5rpx 43rpx 5rpx 16rpx;
  438. column-gap: 16rpx;
  439. font-size: 28rpx;
  440. color: #FFFFFF;
  441. background: rgba(72,131,249,0.58);
  442. border-radius: 30rpx 0rpx 30rpx 0rpx;
  443. &-icon {
  444. width: 38rpx;
  445. height: auto;
  446. }
  447. }
  448. .desc {
  449. padding: 12rpx 15rpx;
  450. font-size: 28rpx;
  451. font-weight: 500;
  452. color: #000000;
  453. background: #f8f8f8;
  454. border-radius: 16rpx;
  455. }
  456. }
  457. .pic {
  458. padding: 48rpx 9rpx 48rpx 0;
  459. width: 253rpx;
  460. height: 345rpx;
  461. border-radius: 127rpx;
  462. overflow: hidden;
  463. .img {
  464. width: 100%;
  465. height: 100%;
  466. }
  467. }
  468. &:nth-child(2n) {
  469. flex-direction: row-reverse;
  470. .info {
  471. padding: 19rpx 17rpx 28rpx 0;
  472. }
  473. .pic {
  474. padding: 48rpx 0 48rpx 9rpx;
  475. }
  476. }
  477. }
  478. .card + .card {
  479. margin-top: 24rpx;
  480. }
  481. }
  482. &.journal {
  483. .box {
  484. padding-top: 73rpx;
  485. .card {
  486. padding: 29rpx 12rpx 19rpx 12rpx;
  487. background: #f6f6f6;
  488. border-radius: 15rpx;
  489. box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16);
  490. .top {
  491. position: relative;
  492. .pic {
  493. position: absolute;
  494. left: 42rpx;
  495. bottom: 0;
  496. width: 213rpx;
  497. height: 285rpx;
  498. .img {
  499. width: 100%;
  500. height: 100%;
  501. }
  502. }
  503. .info {
  504. height: 181rpx;
  505. padding: 0 14rpx 0 266rpx;
  506. }
  507. }
  508. .main {
  509. margin-top: 18rpx;
  510. padding: 14rpx;
  511. font-size: 28rpx;
  512. color: #000000;
  513. background: #ebebeb;
  514. border-radius: 30rpx 0rpx 30rpx 0rpx;
  515. }
  516. }
  517. &:nth-child(2n) {
  518. .card {
  519. .top {
  520. .info {
  521. padding: 0 258rpx 0 14rpx;
  522. }
  523. .pic {
  524. left: unset;
  525. right: 29rpx;
  526. }
  527. }
  528. }
  529. }
  530. }
  531. .box + .box {
  532. margin-top: 28rpx;
  533. }
  534. }
  535. &.attachment {
  536. .file {
  537. justify-content: space-between;
  538. padding: 32rpx 15rpx 32rpx 26rpx;
  539. background: #f8f8f8;
  540. border-radius: 15rpx;
  541. &-info {
  542. display: flex;
  543. align-items: flex-end;
  544. }
  545. &-icon {
  546. width: 64rpx;
  547. height: auto;
  548. }
  549. &-detail {
  550. margin-left: 14rpx;
  551. .title {
  552. font-size: 30rpx;
  553. color: #000000;
  554. }
  555. .desc {
  556. font-size: 28rpx;
  557. color: #999999;
  558. }
  559. }
  560. .btn {
  561. padding: 7rpx 30rpx;
  562. font-size: 28rpx;
  563. color: #FFFFFF;
  564. background: #4883f9;
  565. border-radius: 27rpx;
  566. }
  567. }
  568. .file + .file {
  569. margin-top: 21rpx;
  570. }
  571. }
  572. }
  573. }
  574. </style>