Commit 4a17ae4e65e14dd8134f1cd1b3dc52076dff4d74
1 parent
bb673e6b
up
Showing
8 changed files
with
185 additions
and
8 deletions
package.json
@@ -21,6 +21,7 @@ | @@ -21,6 +21,7 @@ | ||
21 | "tailwindcss": "^3.3.2", | 21 | "tailwindcss": "^3.3.2", |
22 | "vite-plugin-vuetify": "^1.0.2", | 22 | "vite-plugin-vuetify": "^1.0.2", |
23 | "vue": "^3.3.2", | 23 | "vue": "^3.3.2", |
24 | + "vue-i18n": "^9.2.2", | ||
24 | "vue-router": "^4.2.0", | 25 | "vue-router": "^4.2.0", |
25 | "vuetify": "^3.3.1" | 26 | "vuetify": "^3.3.1" |
26 | }, | 27 | }, |
src/components/HomeCategoryList.vue
1 | <template> | 1 | <template> |
2 | <v-container class=""> | 2 | <v-container class=""> |
3 | - <div class="text-blue-darken-2 text-h3 tw-text-center tw-mb-16">{{ title }}</div> | 3 | + <div class="text-blue-darken-2 text-h3 tw-text-center tw-mb-8">{{ title }}</div> |
4 | + <div class="text-body-1 tw-text-left tw-mb-8">{{ desc }}</div> | ||
4 | <v-item-group multiple> | 5 | <v-item-group multiple> |
5 | <v-row> | 6 | <v-row> |
6 | - <v-col v-for="(item, index) in list" :key="index" cols="12" lg="3" md="4" sm="6"> | 7 | + <v-col |
8 | + v-for="(item, index) in list" | ||
9 | + :key="index" | ||
10 | + cols="3" | ||
11 | + :lg="lgCol" | ||
12 | + md="4" | ||
13 | + sm="6" | ||
14 | + xs="12" | ||
15 | + > | ||
7 | <v-hover v-slot="{ isHovering, props }" open-delay="200"> | 16 | <v-hover v-slot="{ isHovering, props }" open-delay="200"> |
8 | <v-card | 17 | <v-card |
9 | :elevation="isHovering ? 16 : 2" | 18 | :elevation="isHovering ? 16 : 2" |
@@ -28,10 +37,14 @@ | @@ -28,10 +37,14 @@ | ||
28 | 37 | ||
29 | <script setup lang="ts"> | 38 | <script setup lang="ts"> |
30 | import type { Category } from '@/type' | 39 | import type { Category } from '@/type' |
31 | -import { onMounted, ref } from 'vue' | 40 | +import { computed, ref } from 'vue' |
32 | 41 | ||
33 | -defineProps<{ | 42 | +const props = defineProps<{ |
34 | title: string | 43 | title: string |
35 | - list: Category[] | 44 | + desc?: string |
45 | + list: Category[] | { name: string }[] | ||
46 | + cardNum?: number | ||
36 | }>() | 47 | }>() |
48 | + | ||
49 | +const lgCol = computed(() => (props.cardNum === 3 ? 4 : 3)) | ||
37 | </script> | 50 | </script> |
src/main.ts
@@ -8,9 +8,11 @@ import '@mdi/font/css/materialdesignicons.css' // Ensure you are using css-loade | @@ -8,9 +8,11 @@ import '@mdi/font/css/materialdesignicons.css' // Ensure you are using css-loade | ||
8 | 8 | ||
9 | import { createApp } from 'vue' | 9 | import { createApp } from 'vue' |
10 | import { createPinia } from 'pinia' | 10 | import { createPinia } from 'pinia' |
11 | +import { createI18n } from 'vue-i18n' | ||
11 | 12 | ||
12 | import App from './App.vue' | 13 | import App from './App.vue' |
13 | import router from './router' | 14 | import router from './router' |
15 | +import messages from './message' | ||
14 | 16 | ||
15 | const app = createApp(App) | 17 | const app = createApp(App) |
16 | 18 | ||
@@ -21,4 +23,16 @@ app.use(router) | @@ -21,4 +23,16 @@ app.use(router) | ||
21 | 23 | ||
22 | app.use(vuetify) | 24 | app.use(vuetify) |
23 | 25 | ||
26 | +const i18n = createI18n({ | ||
27 | + legacy: false, | ||
28 | + allowComposition: true, | ||
29 | + locale: 'en', // set locale | ||
30 | + // fallbackLocale: 'en', // set fallback locale | ||
31 | + messages, // set locale messages | ||
32 | + globalInjection: true | ||
33 | +}) | ||
34 | + | ||
35 | +app.use(i18n) | ||
36 | +console.log('%c [ messages ]-32', 'font-size:13px; background:pink; color:#bf2c9f;', messages) | ||
37 | + | ||
24 | app.mount('#app') | 38 | app.mount('#app') |
src/message.ts
0 โ 100644
1 | +const messages = { | ||
2 | + cn: { | ||
3 | + // ไผๅฟ: 'Strengths', | ||
4 | + hello: 'sssss' | ||
5 | + }, | ||
6 | + en: { | ||
7 | + ไผๅฟ: 'Strengths', | ||
8 | + ๆๆ่ฏๅ: 'Material Reagents', | ||
9 | + ไผๅฟ1: 'Energy materials', | ||
10 | + ไผๅฟ2: 'Universal consumables', | ||
11 | + ไผๅฟ3: 'low-dimensional materials', | ||
12 | + ่ฎพๅค: 'Lab Device' | ||
13 | + // ไผๅฟ1: '' | ||
14 | + // hello: 'sssss' | ||
15 | + } | ||
16 | +} | ||
17 | +const materials = [{ name: '่ฝๆบๆๆ' }, { name: 'ๅฎ้ช่ๆ' }, { name: 'ไฝ็ปดๆๆ' }] | ||
18 | +export default messages |
src/service.ts
@@ -2,6 +2,8 @@ import axios from 'axios' | @@ -2,6 +2,8 @@ import axios from 'axios' | ||
2 | import type { ProductListQuery } from './type' | 2 | import type { ProductListQuery } from './type' |
3 | 3 | ||
4 | export const getCategoryList = () => { | 4 | export const getCategoryList = () => { |
5 | + // http://39.108.227.113:3000/mock/11/shop/product/category | ||
6 | + // return axios.post('/mock/11/shop/product/category', {}) | ||
5 | return axios.post('/shop/product/category', {}) | 7 | return axios.post('/shop/product/category', {}) |
6 | } | 8 | } |
7 | 9 |
src/views/Home.vue
@@ -5,8 +5,57 @@ | @@ -5,8 +5,57 @@ | ||
5 | <v-carousel-item src="/banner2.jpeg" cover> </v-carousel-item> | 5 | <v-carousel-item src="/banner2.jpeg" cover> </v-carousel-item> |
6 | <v-carousel-item src="/banner3.jpeg" cover> </v-carousel-item> | 6 | <v-carousel-item src="/banner3.jpeg" cover> </v-carousel-item> |
7 | </v-carousel> | 7 | </v-carousel> |
8 | - <div v-for="item in store.list" :key="item.categoryDisplayName" class="tw-mb-[64px]"> | ||
9 | - <HomeProductList :title="item.categoryDisplayName" :list="item.list" /> | 8 | + <!-- ไผๅฟ --> |
9 | + <div class="tw-mb-[64px]"> | ||
10 | + <HomeProductList | ||
11 | + :cardNum="3" | ||
12 | + :title="t('ไผๅฟ')" | ||
13 | + :list="strengths" | ||
14 | + desc="Canrd is aimed to be the world's top one-stop service provider in the field of new energy research Dedicated, professional, and quick response/solution" | ||
15 | + /> | ||
16 | + </div> | ||
17 | + <!-- ่ฝๆบๆๆ --> | ||
18 | + <div class="tw-mb-[64px]"> | ||
19 | + <HomeProductList | ||
20 | + :cardNum="3" | ||
21 | + :title="t('ๆๆ่ฏๅ')" | ||
22 | + :list="materials" | ||
23 | + desc="Leading global provider of energy storage research materials and providing other professional/universal experimental materials" | ||
24 | + /> | ||
25 | + </div> | ||
26 | + <!-- ่ฎพๅค --> | ||
27 | + <div class="tw-mb-[64px]"> | ||
28 | + <HomeProductList | ||
29 | + :title="t(store.list[3].categoryDisplayName)" | ||
30 | + :list="store.list[3].list" | ||
31 | + desc="Leading global provider of energy storage research materials and providing other professional/universal experimental materials | ||
32 | +" | ||
33 | + /> | ||
34 | + </div> | ||
35 | + <!-- Customized Battery --> | ||
36 | + <div class="tw-mb-[64px]"> | ||
37 | + <HomeProductList | ||
38 | + :title="t('Customized Battery')" | ||
39 | + :list="batteries" | ||
40 | + desc="200mAh~10Ah, winding/laminating, non liquid filled cell/liquid filled cell/three electrode, etc" | ||
41 | + /> | ||
42 | + </div> | ||
43 | + <!-- Testing --> | ||
44 | + <div class="tw-mb-[64px]"> | ||
45 | + <HomeProductList | ||
46 | + :title="t('Testing')" | ||
47 | + :list="tests" | ||
48 | + desc="Self built testing center and signed strategic cooperation with ATL, Tsinghua and other units" | ||
49 | + /> | ||
50 | + </div> | ||
51 | + <!-- Pack --> | ||
52 | + <div class="tw-mb-[64px]"> | ||
53 | + <HomeProductList | ||
54 | + :cardNum="3" | ||
55 | + :title="t('Pack')" | ||
56 | + :list="packs" | ||
57 | + desc="200mAh~10Ah, winding/laminating, non liquid filled cell/liquid filled cell/three electrode, etc" | ||
58 | + /> | ||
10 | </div> | 59 | </div> |
11 | </v-container> | 60 | </v-container> |
12 | </template> | 61 | </template> |
@@ -14,8 +63,32 @@ | @@ -14,8 +63,32 @@ | ||
14 | <script setup lang="ts"> | 63 | <script setup lang="ts"> |
15 | import HomeProductList from '@/components/HomeCategoryList.vue' | 64 | import HomeProductList from '@/components/HomeCategoryList.vue' |
16 | import { useCategoryStore } from '@/stores/category' | 65 | import { useCategoryStore } from '@/stores/category' |
66 | +import { useI18n } from 'vue-i18n' | ||
67 | +import { computed } from 'vue' | ||
68 | + | ||
69 | +const { t } = useI18n() | ||
17 | 70 | ||
18 | const store = useCategoryStore() | 71 | const store = useCategoryStore() |
72 | + | ||
73 | +const strengths = [{ name: t('ไผๅฟ1') }, { name: t('ไผๅฟ2') }, { name: t('ไผๅฟ3') }] | ||
74 | +const materials = [{ name: '่ฝๆบๆๆ' }, { name: 'ๅฎ้ช่ๆ' }, { name: 'ไฝ็ปดๆๆ' }] | ||
75 | +const tests = [ | ||
76 | + { name: 'Electrochemical performance' }, | ||
77 | + { name: 'Reliability testing' }, | ||
78 | + { name: 'Material testing' }, | ||
79 | + { name: 'Calibration' } | ||
80 | +] | ||
81 | +const batteries = [ | ||
82 | + { name: 'Material evaluation' }, | ||
83 | + { name: 'R&D foundry' }, | ||
84 | + { name: 'Chemical system' }, | ||
85 | + { name: 'Semi product customization' } | ||
86 | +] | ||
87 | +const packs = [ | ||
88 | + { name: 'Power bank' }, | ||
89 | + { name: 'Energy storage' }, | ||
90 | + { name: 'low-dimensional materials' } | ||
91 | +] | ||
19 | </script> | 92 | </script> |
20 | 93 | ||
21 | <style lang="scss" scoped> | 94 | <style lang="scss" scoped> |
vite.config.ts
@@ -18,6 +18,9 @@ export default defineConfig({ | @@ -18,6 +18,9 @@ export default defineConfig({ | ||
18 | proxy: { | 18 | proxy: { |
19 | '/shop': { | 19 | '/shop': { |
20 | target: 'http://39.108.227.113:8002' | 20 | target: 'http://39.108.227.113:8002' |
21 | + }, | ||
22 | + '/mock': { | ||
23 | + target: 'http://39.108.227.113:3000' | ||
21 | } | 24 | } |
22 | } | 25 | } |
23 | } | 26 | } |
yarn.lock
@@ -441,6 +441,44 @@ | @@ -441,6 +441,44 @@ | ||
441 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" | 441 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" |
442 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== | 442 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== |
443 | 443 | ||
444 | +"@intlify/core-base@9.2.2": | ||
445 | + version "9.2.2" | ||
446 | + resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz#5353369b05cc9fe35cab95fe20afeb8a4481f939" | ||
447 | + integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA== | ||
448 | + dependencies: | ||
449 | + "@intlify/devtools-if" "9.2.2" | ||
450 | + "@intlify/message-compiler" "9.2.2" | ||
451 | + "@intlify/shared" "9.2.2" | ||
452 | + "@intlify/vue-devtools" "9.2.2" | ||
453 | + | ||
454 | +"@intlify/devtools-if@9.2.2": | ||
455 | + version "9.2.2" | ||
456 | + resolved "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz#b13d9ac4b4e2fe6d2e7daa556517a8061fe8bd39" | ||
457 | + integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg== | ||
458 | + dependencies: | ||
459 | + "@intlify/shared" "9.2.2" | ||
460 | + | ||
461 | +"@intlify/message-compiler@9.2.2": | ||
462 | + version "9.2.2" | ||
463 | + resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz#e42ab6939b8ae5b3d21faf6a44045667a18bba1c" | ||
464 | + integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA== | ||
465 | + dependencies: | ||
466 | + "@intlify/shared" "9.2.2" | ||
467 | + source-map "0.6.1" | ||
468 | + | ||
469 | +"@intlify/shared@9.2.2": | ||
470 | + version "9.2.2" | ||
471 | + resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5" | ||
472 | + integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q== | ||
473 | + | ||
474 | +"@intlify/vue-devtools@9.2.2": | ||
475 | + version "9.2.2" | ||
476 | + resolved "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz#b95701556daf7ebb3a2d45aa3ae9e6415aed8317" | ||
477 | + integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg== | ||
478 | + dependencies: | ||
479 | + "@intlify/core-base" "9.2.2" | ||
480 | + "@intlify/shared" "9.2.2" | ||
481 | + | ||
444 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": | 482 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": |
445 | version "0.3.3" | 483 | version "0.3.3" |
446 | resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" | 484 | resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" |
@@ -813,7 +851,7 @@ | @@ -813,7 +851,7 @@ | ||
813 | "@vue/compiler-dom" "3.3.4" | 851 | "@vue/compiler-dom" "3.3.4" |
814 | "@vue/shared" "3.3.4" | 852 | "@vue/shared" "3.3.4" |
815 | 853 | ||
816 | -"@vue/devtools-api@^6.5.0": | 854 | +"@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.5.0": |
817 | version "6.5.0" | 855 | version "6.5.0" |
818 | resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" | 856 | resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" |
819 | integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== | 857 | integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== |
@@ -3089,6 +3127,11 @@ slash@^3.0.0: | @@ -3089,6 +3127,11 @@ slash@^3.0.0: | ||
3089 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" | 3127 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" |
3090 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== | 3128 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== |
3091 | 3129 | ||
3130 | +source-map@0.6.1: | ||
3131 | + version "0.6.1" | ||
3132 | + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" | ||
3133 | + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== | ||
3134 | + | ||
3092 | spdx-correct@^3.0.0: | 3135 | spdx-correct@^3.0.0: |
3093 | version "3.2.0" | 3136 | version "3.2.0" |
3094 | resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" | 3137 | resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" |
@@ -3514,6 +3557,16 @@ vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.3.0: | @@ -3514,6 +3557,16 @@ vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.3.0: | ||
3514 | lodash "^4.17.21" | 3557 | lodash "^4.17.21" |
3515 | semver "^7.3.6" | 3558 | semver "^7.3.6" |
3516 | 3559 | ||
3560 | +vue-i18n@^9.2.2: | ||
3561 | + version "9.2.2" | ||
3562 | + resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz#aeb49d9424923c77e0d6441e3f21dafcecd0e666" | ||
3563 | + integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ== | ||
3564 | + dependencies: | ||
3565 | + "@intlify/core-base" "9.2.2" | ||
3566 | + "@intlify/shared" "9.2.2" | ||
3567 | + "@intlify/vue-devtools" "9.2.2" | ||
3568 | + "@vue/devtools-api" "^6.2.1" | ||
3569 | + | ||
3517 | vue-router@^4.2.0: | 3570 | vue-router@^4.2.0: |
3518 | version "4.2.1" | 3571 | version "4.2.1" |
3519 | resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.1.tgz#f8ab85c89e74682cad71519480fdf2b855e8c9e0" | 3572 | resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.1.tgz#f8ab85c89e74682cad71519480fdf2b855e8c9e0" |