Repair.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. <script setup>
  2. import { ref, reactive } from "vue";
  3. import { useMainStore } from "@/stores/store";
  4. import axios from "axios";
  5. import moment from "moment";
  6. import ArticleCard from "@/components/ArticleCard.vue";
  7. const store = useMainStore();
  8. const articles = reactive({
  9. list: [],
  10. });
  11. let searchInput = ref("");
  12. let searchError = ref(false);
  13. (async () => {
  14. let url = `https://cmm.ai:8088/api/get_group_classes_and_articles?group_id=6`;
  15. try {
  16. const response = await axios.get(url);
  17. articles.list = response.data.articles;
  18. console.log("articles.list", articles.list);
  19. } catch (error) {
  20. console.error(error);
  21. }
  22. })();
  23. const breadcrumbs = reactive([
  24. {
  25. title: "首頁",
  26. disabled: false,
  27. href: "/",
  28. },
  29. {
  30. title: "工藝學群",
  31. disabled: true,
  32. },
  33. {
  34. title: "修護工藝",
  35. disabled: true,
  36. },
  37. ]);
  38. const testData = [
  39. {
  40. title: "臺灣工藝聯合醫院-草鞋墩分院 112 年 6-8 月工藝修復推廣課程",
  41. describe:
  42. "「臺灣工藝聯合醫院-草鞋墩分院」辦理工藝修護各類推廣課程,目標對象群擴及幼童、學生及社會人士等,課程種類包含「臺灣工藝聯合醫院-草鞋墩分院」5位工藝修護師共同授課的「工藝修護技法培訓課程」、個別工藝修護師辦理的「個別工藝修護技法課程」、「工藝修護體驗」等,民眾能依照自身興趣及學習需求,選擇自己適合且需要的工藝修護課程。",
  43. start_time: "2023/06/01",
  44. end_time: "2023/08/22",
  45. address: "國立台灣工藝研究發展中心",
  46. img: store.getImageUrl("college-group/img.jpg"),
  47. },
  48. ];
  49. </script>
  50. <template>
  51. <v-breadcrumbs
  52. :items="breadcrumbs"
  53. divider="/"
  54. class="mt-10 p-0"
  55. ></v-breadcrumbs>
  56. <v-row class="mt-16">
  57. <v-col cols="12" md="6">
  58. <h3 class="text-center mb-5">國家工藝檢測修護平臺</h3>
  59. <div class="video">
  60. <iframe
  61. width="560"
  62. height="315"
  63. src="https://www.youtube.com/embed/eIOkU2q9WHA"
  64. title="YouTube video player"
  65. frameborder="0"
  66. allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
  67. allowfullscreen
  68. ></iframe>
  69. </div>
  70. </v-col>
  71. <v-col cols="12" md="6">
  72. <h3 class="text-center mb-5">臺灣工藝聯合醫院-草鞋墩分院</h3>
  73. <div class="video">
  74. <iframe
  75. width="560"
  76. height="315"
  77. src="https://www.youtube.com/embed/Rb318IkMo80"
  78. title="YouTube video player"
  79. frameborder="0"
  80. allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
  81. allowfullscreen
  82. ></iframe>
  83. </div>
  84. </v-col>
  85. </v-row>
  86. <v-row class="mt-16 article-block">
  87. <v-col cols="12" sm="7" md="8">
  88. <h4 class="mb-5">首創工藝聯合醫院,診斷修復再現舊物新生命</h4>
  89. <p>
  90. 工藝中心在愛物惜物、自然永續的綠工藝精神下,成立「臺灣工藝檢測修護聯盟」,串聯專業學術單位、團體或個人工作室等成為一個工藝的照護聯合網,就像一所工藝的聯合醫院,為博物館、常民工藝或是生活收藏等需求者,提供檢測、維護及修復的服務,猶如醫院的體檢、衛教保健到診斷治療,全臺分區各有據點,提供大眾就近在地的友善服務。
  91. 「臺灣工藝聯合醫院-草鞋墩分院」就是照護聯合網絡的一個據點,由廖偉淇、蔣昆原、張璽元、葉璨榮、陳宜妙5位修復師進駐,服務項目有陶瓷、金屬、漆及複合媒材等修復,歡迎大家隨時來問診交流、學習工藝保養維護,親自體驗舊物新生的感動。
  92. <br />
  93. 「國家工藝檢測修護平臺」開始受理申請,有檢測、修復及維護需求者,皆可透過「國家工藝檢測修護平臺」網站提出申請,或電話撥打0800-222-800洽詢。
  94. </p>
  95. </v-col>
  96. <v-col
  97. cols="12"
  98. sm="5"
  99. md="4"
  100. class="d-flex flex-column align-center align-md-end justify-space-around"
  101. >
  102. <section>
  103. <h4>檢測x修復x維護</h4>
  104. <h4>保存x循環x再生</h4>
  105. </section>
  106. <span class="btn mt-10 mt-sm-0">
  107. <v-btn block size="large"
  108. >點我前往 <br />
  109. 「國家工藝檢測修護平臺」</v-btn
  110. >
  111. </span>
  112. </v-col>
  113. </v-row>
  114. <div
  115. class="d-flex flex-column flex-sm-row align-center justify-space-between"
  116. >
  117. <h2 class="title">修護課程</h2>
  118. <div class="search">
  119. <span>
  120. <input
  121. v-model="searchInput"
  122. type="text"
  123. @keyup.enter="search()"
  124. placeholder="關鍵字搜尋"
  125. />
  126. <button @click="search()">
  127. <img src="@/assets/img/news/news-search-icon.png" alt="" />
  128. </button>
  129. </span>
  130. <div
  131. v-if="searchError"
  132. class="d-flex justify-center align-center error me-4"
  133. >
  134. <v-icon color="primary" icon="mdi-alert" class="me-2"></v-icon>
  135. 沒有符合搜尋條件的項目
  136. </div>
  137. </div>
  138. </div>
  139. <ul class="course-list mt-16 mt-sm-0">
  140. <li v-for="(item, index) in testData" :key="index" class="mb-10">
  141. <v-card variant="outlined" class="d-flex flex-column align-center pa-0">
  142. <h2 class="text-center ma-0 pa-3">{{ item.title }}</h2>
  143. <div class="d-flex flex-column flex-sm-row align-center content">
  144. <img src="@/assets/img/img-04.jpg" alt="" />
  145. <section
  146. class="d-flex flex-column justify-space-between px-0 px-sm-10 pt-5 pt-md-0"
  147. >
  148. <p>{{ item.describe }}</p>
  149. <div class="mt-10">
  150. <span class="d-flex align-center">
  151. <v-icon
  152. color="gray"
  153. icon="mdi-calendar-range"
  154. class="me-2"
  155. ></v-icon>
  156. <p>
  157. {{ moment(`${item.start_time}`).format("YYYY/MM/DD") }}
  158. ~ {{ moment(`${item.end_time}`).format("YYYY/MM/DD") }}
  159. </p>
  160. </span>
  161. <span class="d-flex align-center mt-1">
  162. <v-icon
  163. color="gray"
  164. icon="mdi-map-marker"
  165. class="me-2"
  166. ></v-icon>
  167. <p>
  168. {{ item.address }}
  169. </p>
  170. </span>
  171. </div>
  172. </section>
  173. </div>
  174. </v-card>
  175. </li>
  176. </ul>
  177. <!-- <div class="d-flex justify-end">
  178. <button class="past-btn">觀看已過期課程</button>
  179. </div> -->
  180. <h2 class="title">工藝修護師</h2>
  181. <v-row class="master-list">
  182. <v-col
  183. cols="12"
  184. md="6"
  185. class="v-col-md-6 v-col-12 d-flex flex-column flex-md-row align-center justify-md-center"
  186. >
  187. <img src="@/assets/img/college-group/repair/修護-12.png" alt="" />
  188. <section class="mt-5 mt-md-0 ms-md-5">
  189. <h3>廖偉淇</h3>
  190. <span class="d-block mt-3 mb-5">金工木印工作室</span>
  191. <ul>
  192. <li>主要修護媒材</li>
  193. <li>金屬:金/銀首飾、銀/銅茶具、餐具。</li>
  194. <li>陶瓷:花器、餐具、茶道具、香道具。</li>
  195. <li>主要修復技法:鋦瓷、漆繕、金工鍛造、脫腊鑄造。</li>
  196. </ul>
  197. </section>
  198. </v-col>
  199. <v-col
  200. cols="12"
  201. md="6"
  202. class="v-col-md-6 v-col-12 d-flex flex-column flex-md-row align-center justify-md-center"
  203. >
  204. <img src="@/assets/img/college-group/repair/修護-13.png" alt="" />
  205. <section class="mt-5 mt-md-0 ms-md-5">
  206. <h3>陳高登</h3>
  207. <span class="d-block mt-3 mb-5">金工木印工作室</span>
  208. <ul>
  209. <li>主要修護媒材</li>
  210. <li>陶瓷器物</li>
  211. </ul>
  212. </section>
  213. </v-col>
  214. </v-row>
  215. <h2 class="title">修護故事</h2>
  216. <ul class="story-list">
  217. <li v-for="(item, index) in articles.list" :key="index" class="mb-16">
  218. <ArticleCard :data="item" type="article" />
  219. </li>
  220. </ul>
  221. </template>
  222. <style lang="scss" scoped>
  223. h3 {
  224. font-weight: 400;
  225. }
  226. .video {
  227. position: relative;
  228. padding-bottom: 56%;
  229. overflow: hidden;
  230. iframe {
  231. position: absolute;
  232. top: 0;
  233. left: 0;
  234. width: 100% !important;
  235. height: 100% !important;
  236. }
  237. }
  238. p {
  239. font-weight: 400;
  240. letter-spacing: 1px;
  241. line-height: 28px;
  242. }
  243. .article-block {
  244. h4 {
  245. font-size: 26px;
  246. font-weight: 400;
  247. line-height: 40px;
  248. }
  249. .v-btn {
  250. height: 65px;
  251. color: #fff;
  252. font-weight: 400;
  253. border-radius: 100px;
  254. background-color: #569f33;
  255. @media (max-width: 960px) {
  256. font-size: 14px;
  257. }
  258. @media (max-width: 600px) {
  259. font-size: 16px;
  260. }
  261. }
  262. }
  263. .course-list {
  264. .v-card {
  265. border: none;
  266. border-radius: 20px;
  267. background-color: #e9f1f4;
  268. h2 {
  269. width: 100%;
  270. font-size: 24px;
  271. line-height: 30px;
  272. letter-spacing: 1px;
  273. border-bottom: 3px solid #fff;
  274. @media (max-width: 600px) {
  275. font-size: 22px;
  276. }
  277. }
  278. .content {
  279. padding: 20px;
  280. p:first-child {
  281. font-weight: 400;
  282. line-height: 28px;
  283. color: #606064;
  284. }
  285. }
  286. }
  287. }
  288. .course-list,
  289. .story-list {
  290. img {
  291. width: 100%;
  292. max-width: 300px;
  293. height: 220px;
  294. object-fit: cover;
  295. @media (max-width: 600px) {
  296. max-width: 100%;
  297. }
  298. }
  299. h3 {
  300. font-size: 24px;
  301. font-weight: 500;
  302. line-height: 30px;
  303. letter-spacing: 1px;
  304. }
  305. p {
  306. // 超過兩行則省略
  307. overflow: hidden;
  308. text-overflow: ellipsis;
  309. display: -webkit-box;
  310. -webkit-line-clamp: 4;
  311. -webkit-box-orient: vertical;
  312. line-break: after-white-space;
  313. }
  314. .date {
  315. font-size: 20px;
  316. font-weight: 400;
  317. }
  318. }
  319. .master-list {
  320. img {
  321. width: 250px;
  322. height: 250px;
  323. object-fit: cover;
  324. }
  325. h3 {
  326. font-size: 20px;
  327. color: #000;
  328. }
  329. section {
  330. text-align: center;
  331. color: #606064;
  332. li {
  333. line-height: 28px;
  334. }
  335. }
  336. }
  337. .past-btn {
  338. padding: 15px 40px;
  339. color: #606064;
  340. border-radius: 100px;
  341. border: 2px solid #569f33;
  342. }
  343. </style>