Commit 29276e293d178ae4f79fda5d96b1e2593bb59d93
1 parent
3ec84c85
feat: 更新标题&图片alt&keyword&h4
Showing
23 changed files
with
138 additions
and
80 deletions
README.md
@@ -17,9 +17,9 @@ docker run -d -p 8088:3000 --name canrud-outside-front canrud-outside-front:dev | @@ -17,9 +17,9 @@ docker run -d -p 8088:3000 --name canrud-outside-front canrud-outside-front:dev | ||
17 | 1. 修改 deploy/prod.sh的 TAG 将版本号+1,默认改动小版本,如1.0.0->1.0.1 | 17 | 1. 修改 deploy/prod.sh的 TAG 将版本号+1,默认改动小版本,如1.0.0->1.0.1 |
18 | 1. 在根目录执行 sh deploy/prod.sh | 18 | 1. 在根目录执行 sh deploy/prod.sh |
19 | 1. 登录112服务器,,将镜像拷贝到生产的47服务器 | 19 | 1. 登录112服务器,,将镜像拷贝到生产的47服务器 |
20 | -scp /root/web/canrud-outside-nuxt-front/canrud-outside-front_1.0.2.tar root@47.89.254.121:/root/web/canrud-outside-nuxt-front | 20 | +scp /root/web/canrud-outside-nuxt-front/canrud-outside-front_1.0.6.tar root@47.89.254.121:/root/web/canrud-outside-nuxt-front |
21 | 1. 登录47服务器,进入到 /root/web/canrud-outside-nuxt-front 目录 | 21 | 1. 登录47服务器,进入到 /root/web/canrud-outside-nuxt-front 目录 |
22 | -1. 加载镜像 docker load -i canrud-outside-front_1.0.2.tar (1.0.0对应你的tag) | 22 | +1. 加载镜像 docker load -i canrud-outside-front_1.0.6.tar (1.0.0对应你的tag) |
23 | 1. 修改 docker-compose.yaml 的镜像版本号 | 23 | 1. 修改 docker-compose.yaml 的镜像版本号 |
24 | 1. 启动服务 docker-compose up -d | 24 | 1. 启动服务 docker-compose up -d |
25 | 25 |
components/ContactDialog.vue
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | <span class="text-grey-darken-4 font-weight-medium"> contactcanrd </span> | 34 | <span class="text-grey-darken-4 font-weight-medium"> contactcanrd </span> |
35 | </v-card-text> | 35 | </v-card-text> |
36 | <p> | 36 | <p> |
37 | - <img src="/wechat.jpg" alt="" width="140" class="tw-m-auto tw-block" /> | 37 | + <img src="/wechat.jpg" alt="canrud-wechat" width="140" class="tw-m-auto tw-block" /> |
38 | </p> | 38 | </p> |
39 | <!-- <v-card-actions class="pa-0"> | 39 | <!-- <v-card-actions class="pa-0"> |
40 | <v-btn color="blue-darken-1" block @click="dialogStore.updateDialog(false)">Close </v-btn> | 40 | <v-btn color="blue-darken-1" block @click="dialogStore.updateDialog(false)">Close </v-btn> |
components/Footer.vue
@@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
24 | <p>Phone: +86 19867737979</p> | 24 | <p>Phone: +86 19867737979</p> |
25 | <p>Wechat: contactcanrd</p> | 25 | <p>Wechat: contactcanrd</p> |
26 | </div> | 26 | </div> |
27 | - <img class="tw-float-left" src="/wechat.jpg" width="80" /> | 27 | + <img class="tw-float-left" src="/wechat.jpg" alt="canrud-wechat" width="80" /> |
28 | </v-col> | 28 | </v-col> |
29 | </v-row> | 29 | </v-row> |
30 | </v-container> | 30 | </v-container> |
@@ -38,10 +38,12 @@ b { | @@ -38,10 +38,12 @@ b { | ||
38 | margin-bottom: 12px; | 38 | margin-bottom: 12px; |
39 | display: block; | 39 | display: block; |
40 | } | 40 | } |
41 | + | ||
41 | p { | 42 | p { |
42 | cursor: pointer; | 43 | cursor: pointer; |
43 | margin-bottom: 8px; | 44 | margin-bottom: 8px; |
44 | } | 45 | } |
46 | + | ||
45 | p a:hover { | 47 | p a:hover { |
46 | color: #e0e0e0; | 48 | color: #e0e0e0; |
47 | } | 49 | } |
components/Header.vue
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | <router-link to="/"><v-img src="/logo.jpg" alt="canrud" /></router-link> | 5 | <router-link to="/"><v-img src="/logo.jpg" alt="canrud" /></router-link> |
6 | </v-col> | 6 | </v-col> |
7 | <v-col cols="6" md="8" class="px-0"> | 7 | <v-col cols="6" md="8" class="px-0"> |
8 | - <v-text-field label="Search keyword" hide-details="auto" variant="solo" append-inner-icon="mdi-magnify" | ||
9 | - @click:appendInner="handleClick" @keydown="handleKeyDown" v-model="input"> | 8 | + <v-text-field name="keyword" label="Search keyword" hide-details="auto" variant="solo" |
9 | + append-inner-icon="mdi-magnify" @click:appendInner="handleClick" @keydown="handleKeyDown" v-model="input"> | ||
10 | </v-text-field> | 10 | </v-text-field> |
11 | </v-col> | 11 | </v-col> |
12 | <v-col cols="4" md="2" class="px-0"> | 12 | <v-col cols="4" md="2" class="px-0"> |
@@ -30,11 +30,11 @@ | @@ -30,11 +30,11 @@ | ||
30 | <v-tab :value="4" to="/contact"><span @click="handleTabClick" | 30 | <v-tab :value="4" to="/contact"><span @click="handleTabClick" |
31 | class="text-grey-lighten-3 tw-font-bold">Contact</span> | 31 | class="text-grey-lighten-3 tw-font-bold">Contact</span> |
32 | </v-tab> | 32 | </v-tab> |
33 | - <v-tab> | ||
34 | - <span class="text-grey-lighten-3 tw-font-bold"> | ||
35 | - <a href="http://blog.canrud.com/" target="" title="Blog">Blog</a> | ||
36 | - </span> | ||
37 | - </v-tab> | 33 | + <v-tab> |
34 | + <span class="text-grey-lighten-3 tw-font-bold"> | ||
35 | + <a href="http://blog.canrud.com/" target="" title="Blog">Blog</a> | ||
36 | + </span> | ||
37 | + </v-tab> | ||
38 | </v-tabs> | 38 | </v-tabs> |
39 | </div> | 39 | </div> |
40 | </div> | 40 | </div> |
@@ -71,7 +71,7 @@ const handleClick = () => { | @@ -71,7 +71,7 @@ const handleClick = () => { | ||
71 | categoryStore.updateDisplay(!input.value) | 71 | categoryStore.updateDisplay(!input.value) |
72 | productStore.updateKeyword(input.value) | 72 | productStore.updateKeyword(input.value) |
73 | productStore.updatePageNo(1) | 73 | productStore.updatePageNo(1) |
74 | - router.push('/products') | 74 | + router.push({ path: '/products', query: { keyword: input.value } }) |
75 | } | 75 | } |
76 | 76 | ||
77 | const tab = ref(1) | 77 | const tab = ref(1) |
@@ -100,6 +100,11 @@ onMounted(() => { | @@ -100,6 +100,11 @@ onMounted(() => { | ||
100 | if (obj.flag) { | 100 | if (obj.flag) { |
101 | dialog.updateDialog(true) | 101 | dialog.updateDialog(true) |
102 | } | 102 | } |
103 | + | ||
104 | + if (obj.keyword) { | ||
105 | + productStore.updateKeyword(obj.keyword) | ||
106 | + categoryStore.updateDisplay(false) | ||
107 | + } | ||
103 | } | 108 | } |
104 | }) | 109 | }) |
105 | </script> | 110 | </script> |
components/MainTitleList.vue
1 | <template> | 1 | <template> |
2 | <div class="text-blue-darken-1 text-h4 text-sm-h3 tw-text-center tw-mb-[16px] font-weight-bold"> | 2 | <div class="text-blue-darken-1 text-h4 text-sm-h3 tw-text-center tw-mb-[16px] font-weight-bold"> |
3 | - <div :class="titleCls">{{ title }}</div> | 3 | + <h2 :class="titleCls">{{ title }}</h2> |
4 | </div> | 4 | </div> |
5 | <div class="text-body-1 tw-max-w-[600px] tw-m-auto tw-mb-8"> | 5 | <div class="text-body-1 tw-max-w-[600px] tw-m-auto tw-mb-8"> |
6 | - <span class="tw-mb-[64px] tw-max-w-[600px] tw-m-auto font-weight-medium text-grey-darken-1">{{ | 6 | + <section class="tw-inline tw-mb-[64px] tw-max-w-[600px] tw-m-auto font-weight-medium text-grey-darken-1">{{ |
7 | desc | 7 | desc |
8 | - }}</span> | 8 | + }}</section> |
9 | <router-link :to="href" v-if="href"> | 9 | <router-link :to="href" v-if="href"> |
10 | <span | 10 | <span |
11 | - class="font-weight-bold text-decoration-underline tw-inline-block tw-underline tw-text-sky-500 hover:tw-text-sky-800" | ||
12 | - >detail | 11 | + class="font-weight-bold text-decoration-underline tw-inline-block tw-underline tw-text-sky-500 hover:tw-text-sky-800">detail |
13 | <v-icon class="tw-mt-[-4px]" size="18" icon="mdi-arrow-right"></v-icon> | 12 | <v-icon class="tw-mt-[-4px]" size="18" icon="mdi-arrow-right"></v-icon> |
14 | </span> | 13 | </span> |
15 | </router-link> | 14 | </router-link> |
@@ -18,16 +17,9 @@ | @@ -18,16 +17,9 @@ | ||
18 | <v-row> | 17 | <v-row> |
19 | <v-col v-for="(item, index) in list" :key="index" cols="6" :lg="lgCol" md="4" sm="6"> | 18 | <v-col v-for="(item, index) in list" :key="index" cols="6" :lg="lgCol" md="4" sm="6"> |
20 | <v-hover v-slot="{ isHovering, props }" open-delay="200" :disabled="disabled"> | 19 | <v-hover v-slot="{ isHovering, props }" open-delay="200" :disabled="disabled"> |
21 | - <v-card | ||
22 | - color="blue-darken-1" | ||
23 | - variant="outlined" | ||
24 | - :elevation="isHovering ? 16 : 2" | ||
25 | - :class="{ 'on-hover': isHovering }" | ||
26 | - class="mx-auto" | ||
27 | - max-width="260" | ||
28 | - v-bind="props" | ||
29 | - @click="handleCardClick(item)" | ||
30 | - > | 20 | + <v-card color="blue-darken-1" variant="outlined" :elevation="isHovering ? 16 : 2" |
21 | + :class="{ 'on-hover': isHovering }" class="mx-auto" max-width="260" v-bind="props" | ||
22 | + @click="handleCardClick(item)"> | ||
31 | <v-img :src="item.imageUrl" :alt="item.name" /> | 23 | <v-img :src="item.imageUrl" :alt="item.name" /> |
32 | <div class="text-center bg-blue-darken-1 tw-text-center tw-w-full tw-h-9 tw-leading-9"> | 24 | <div class="text-center bg-blue-darken-1 tw-text-center tw-w-full tw-h-9 tw-leading-9"> |
33 | {{ item.name }} | 25 | {{ item.name }} |
@@ -41,21 +33,12 @@ | @@ -41,21 +33,12 @@ | ||
41 | <v-row> | 33 | <v-row> |
42 | <v-col v-for="(item, index) in list" :key="index"> | 34 | <v-col v-for="(item, index) in list" :key="index"> |
43 | <v-hover v-slot="{ isHovering, props }" open-delay="200" :disabled="disabled"> | 35 | <v-hover v-slot="{ isHovering, props }" open-delay="200" :disabled="disabled"> |
44 | - <v-card | ||
45 | - color="blue-darken-1" | ||
46 | - variant="outlined" | ||
47 | - :elevation="isHovering ? 16 : 2" | ||
48 | - :class="{ 'on-hover': isHovering }" | ||
49 | - class="pt-5 mx-auto" | ||
50 | - height="350" | ||
51 | - v-bind="props" | ||
52 | - :href="item.href ? item.href : undefined" | ||
53 | - @click="handleCardClick(item)" | ||
54 | - > | 36 | + <v-card color="blue-darken-1" variant="outlined" :elevation="isHovering ? 16 : 2" |
37 | + :class="{ 'on-hover': isHovering }" class="pt-5 mx-auto" height="350" v-bind="props" | ||
38 | + :href="item.href ? item.href : undefined" @click="handleCardClick(item)"> | ||
55 | <v-img :src="item.imageUrl" width="250" class="text-center ma-auto" /> | 39 | <v-img :src="item.imageUrl" width="250" class="text-center ma-auto" /> |
56 | <div | 40 | <div |
57 | - class="text-center bg-blue-darken-1 tw-absolute tw-bottom-0 tw-text-center tw-w-full tw-h-9 tw-leading-9" | ||
58 | - > | 41 | + class="text-center bg-blue-darken-1 tw-absolute tw-bottom-0 tw-text-center tw-w-full tw-h-9 tw-leading-9"> |
59 | {{ item.name }} | 42 | {{ item.name }} |
60 | </div> | 43 | </div> |
61 | </v-card> | 44 | </v-card> |
components/MainTitleListOdd.vue
1 | <template> | 1 | <template> |
2 | <div class="text-blue-darken-1 tw-text-center tw-mb-[16px] font-weight-bold text-h4 text-sm-h3"> | 2 | <div class="text-blue-darken-1 tw-text-center tw-mb-[16px] font-weight-bold text-h4 text-sm-h3"> |
3 | - <div :class="titleCls">{{ title }}</div> | 3 | + <h2 :class="titleCls">{{ title }}</h2> |
4 | </div> | 4 | </div> |
5 | <div class="text-body-1 tw-max-w-[600px] tw-m-auto tw-mb-8"> | 5 | <div class="text-body-1 tw-max-w-[600px] tw-m-auto tw-mb-8"> |
6 | <span class="tw-mb-[64px] tw-max-w-[600px] tw-m-auto font-weight-medium text-grey-darken-1">{{ | 6 | <span class="tw-mb-[64px] tw-max-w-[600px] tw-m-auto font-weight-medium text-grey-darken-1">{{ |
7 | desc | 7 | desc |
8 | - }}</span> | 8 | + }}</span> |
9 | <router-link :to="href" v-if="href"> | 9 | <router-link :to="href" v-if="href"> |
10 | <span | 10 | <span |
11 | - class="font-weight-bold text-decoration-underline tw-inline-block tw-underline tw-text-sky-500 hover:tw-text-sky-800" | ||
12 | - >detail | 11 | + class="font-weight-bold text-decoration-underline tw-inline-block tw-underline tw-text-sky-500 hover:tw-text-sky-800">detail |
13 | <v-icon class="tw-mt-[-4px]" size="18" icon="mdi-arrow-right"></v-icon> | 12 | <v-icon class="tw-mt-[-4px]" size="18" icon="mdi-arrow-right"></v-icon> |
14 | </span> | 13 | </span> |
15 | </router-link> | 14 | </router-link> |
@@ -18,16 +17,18 @@ | @@ -18,16 +17,18 @@ | ||
18 | <v-row> | 17 | <v-row> |
19 | <v-col v-for="(item, index) in list" :key="index" cols="4" lg="4" md="4" sm="6"> | 18 | <v-col v-for="(item, index) in list" :key="index" cols="4" lg="4" md="4" sm="6"> |
20 | <v-hover v-slot="{ isHovering, props }" open-delay="200" :disabled="disabled"> | 19 | <v-hover v-slot="{ isHovering, props }" open-delay="200" :disabled="disabled"> |
21 | - <v-card | ||
22 | - color="blue-darken-1" | ||
23 | - variant="outlined" | ||
24 | - :elevation="isHovering ? 16 : 2" | ||
25 | - :class="{ 'on-hover': isHovering }" | ||
26 | - class="pt-5 mx-auto" | ||
27 | - v-bind="props" | ||
28 | - @click="handleCardClick(item)" | ||
29 | - > | ||
30 | - <v-img :src="item.imageUrl" class="text-center ma-auto" :alt="item.name" /> | 20 | + <v-card color="blue-darken-1" variant="outlined" :elevation="isHovering ? 16 : 2" |
21 | + :class="{ 'on-hover': isHovering }" class="pt-5 mx-auto " v-bind="props" @click="handleCardClick(item)"> | ||
22 | + <div class="relative w-full bg-gray-200 aspect-w-1 aspect-h-1 aspect-w "> | ||
23 | + <v-img :src="item.imageUrl" class="tw-min-h-[100px] absolute inset-0 object-cover w-full h-full" | ||
24 | + :alt="item.name"> | ||
25 | + <template v-slot:placeholder> | ||
26 | + <div class="justify-center d-flex align-center fill-height"> | ||
27 | + <v-progress-circular color="grey-lighten-4" indeterminate></v-progress-circular> | ||
28 | + </div> | ||
29 | + </template> | ||
30 | + </v-img> | ||
31 | + </div> | ||
31 | <div class="text-center bg-blue-darken-1 tw-text-center tw-w-full tw-h-9 tw-leading-9"> | 32 | <div class="text-center bg-blue-darken-1 tw-text-center tw-w-full tw-h-9 tw-leading-9"> |
32 | {{ item.name }} | 33 | {{ item.name }} |
33 | </div> | 34 | </div> |
components/MobileHeader.vue
@@ -36,10 +36,10 @@ | @@ -36,10 +36,10 @@ | ||
36 | <v-divider></v-divider> | 36 | <v-divider></v-divider> |
37 | <v-list-item to="/contact" title="Contact" value="contact" @click="handleTabClick" | 37 | <v-list-item to="/contact" title="Contact" value="contact" @click="handleTabClick" |
38 | color="blue-darken-1"></v-list-item> | 38 | color="blue-darken-1"></v-list-item> |
39 | - <v-divider></v-divider> | ||
40 | - <v-list-item title="Blog" value="blog" color="blue-darken-1"> | ||
41 | - <a href="http://blog.canrud.com/" target="" title="Blog">Blog</a> | ||
42 | - </v-list-item> | 39 | + <v-divider></v-divider> |
40 | + <v-list-item title="Blog" value="blog" color="blue-darken-1"> | ||
41 | + <a href="http://blog.canrud.com/" target="" title="Blog">Blog</a> | ||
42 | + </v-list-item> | ||
43 | </v-list> | 43 | </v-list> |
44 | </v-navigation-drawer> | 44 | </v-navigation-drawer> |
45 | </v-layout> | 45 | </v-layout> |
@@ -111,6 +111,28 @@ const handleTabClick = () => { | @@ -111,6 +111,28 @@ const handleTabClick = () => { | ||
111 | watchEffect(() => { | 111 | watchEffect(() => { |
112 | input.value = productStore.keyword | 112 | input.value = productStore.keyword |
113 | }) | 113 | }) |
114 | + | ||
115 | +onMounted(() => { | ||
116 | + // 获取url的参数 | ||
117 | + const url = window.location.href | ||
118 | + const index = url.indexOf('?') | ||
119 | + if (index !== -1) { | ||
120 | + const params = url.slice(index + 1).split('&') | ||
121 | + const obj: any = {} | ||
122 | + params.forEach((item) => { | ||
123 | + const arr = item.split('=') | ||
124 | + obj[arr[0]] = arr[1] | ||
125 | + }) | ||
126 | + // 获取dialog的状态 | ||
127 | + if (obj.flag) { | ||
128 | + dialog.updateDialog(true) | ||
129 | + } | ||
130 | + | ||
131 | + if (obj.keyword) { | ||
132 | + productStore.updateKeyword(obj.keyword) | ||
133 | + } | ||
134 | + } | ||
135 | +}) | ||
114 | </script> | 136 | </script> |
115 | 137 | ||
116 | <style lang="scss" scoped> | 138 | <style lang="scss" scoped> |
components/MobileProductDetail.vue
@@ -43,7 +43,8 @@ | @@ -43,7 +43,8 @@ | ||
43 | </div> | 43 | </div> |
44 | </div> | 44 | </div> |
45 | </v-sheet> | 45 | </v-sheet> |
46 | - <v-btn size="large" color="blue-darken-1" @click="dialogStore.updateDialog(true)"> | 46 | + <v-btn size="large" color="blue-darken-1" @click="router.push('/contact')"> |
47 | + | ||
47 | Quotation Inquiry | 48 | Quotation Inquiry |
48 | </v-btn> | 49 | </v-btn> |
49 | </div> | 50 | </div> |
@@ -115,6 +116,7 @@ const info = props.info | @@ -115,6 +116,7 @@ const info = props.info | ||
115 | // }) | 116 | // }) |
116 | const tab = ref(0) | 117 | const tab = ref(0) |
117 | const slide = ref(0) | 118 | const slide = ref(0) |
119 | +const router = useRouter() | ||
118 | </script> | 120 | </script> |
119 | 121 | ||
120 | <style lang="scss" scoped> | 122 | <style lang="scss" scoped> |
components/ProductDetail.vue
@@ -43,7 +43,7 @@ | @@ -43,7 +43,7 @@ | ||
43 | <td class="td text-grey-darken-4 font-weight-medium">{{ item.typeName }}</td> | 43 | <td class="td text-grey-darken-4 font-weight-medium">{{ item.typeName }}</td> |
44 | <!-- <td class="td">{{ item.price }}</td> --> | 44 | <!-- <td class="td">{{ item.price }}</td> --> |
45 | <td class="td"> | 45 | <td class="td"> |
46 | - <v-btn size="small" color="blue-darken-1" @click="dialogStore.updateDialog(true)"> | 46 | + <v-btn size="small" color="blue-darken-1" @click="router.push('/contact')"> |
47 | Quotation Inquiry | 47 | Quotation Inquiry |
48 | </v-btn> | 48 | </v-btn> |
49 | </td> | 49 | </td> |
@@ -123,6 +123,7 @@ const info = props.info | @@ -123,6 +123,7 @@ const info = props.info | ||
123 | 123 | ||
124 | const tab = ref(0) | 124 | const tab = ref(0) |
125 | const slide = ref(0) | 125 | const slide = ref(0) |
126 | +const router = useRouter() | ||
126 | </script> | 127 | </script> |
127 | 128 | ||
128 | <style lang="scss" scoped> | 129 | <style lang="scss" scoped> |
deploy/prod.sh
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | 2 | ||
3 | # 变量定义 | 3 | # 变量定义 |
4 | IMAGE_NAME="canrud-outside-front" | 4 | IMAGE_NAME="canrud-outside-front" |
5 | -TAG="1.0.3" | 5 | +TAG="1.0.6" |
6 | TAR_FILE="${IMAGE_NAME}_${TAG}.tar" | 6 | TAR_FILE="${IMAGE_NAME}_${TAG}.tar" |
7 | REMOTE_HOST="root@112.74.45.244" | 7 | REMOTE_HOST="root@112.74.45.244" |
8 | REMOTE_DIR="/root/web/canrud-outside-nuxt-front" | 8 | REMOTE_DIR="/root/web/canrud-outside-nuxt-front" |
package.json
@@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
19 | }, | 19 | }, |
20 | "devDependencies": { | 20 | "devDependencies": { |
21 | "@nuxtjs/i18n": "^8.3.1", | 21 | "@nuxtjs/i18n": "^8.3.1", |
22 | + "@tailwindcss/aspect-ratio": "^0.4.2", | ||
22 | "autoprefixer": "^10.4.19", | 23 | "autoprefixer": "^10.4.19", |
23 | "postcss": "^8.4.38", | 24 | "postcss": "^8.4.38", |
24 | "sass": "^1.77.1", | 25 | "sass": "^1.77.1", |
pages/contact.vue
@@ -24,11 +24,15 @@ | @@ -24,11 +24,15 @@ | ||
24 | <span>contactcanrd</span> | 24 | <span>contactcanrd</span> |
25 | </div> | 25 | </div> |
26 | <div class="tw-w-[300px]"> | 26 | <div class="tw-w-[300px]"> |
27 | - <v-img src="/wechat.jpg"></v-img> | 27 | + <v-img src="/wechat.jpg" alt="canrud-wechat"></v-img> |
28 | </div> | 28 | </div> |
29 | </v-card> | 29 | </v-card> |
30 | </template> | 30 | </template> |
31 | 31 | ||
32 | -<script setup lang="ts"></script> | 32 | +<script setup lang="ts"> |
33 | +useHead({ | ||
34 | + title: 'Contact', | ||
35 | + | ||
36 | +})</script> | ||
33 | 37 | ||
34 | <style lang="less" scoped></style> | 38 | <style lang="less" scoped></style> |
pages/customize.vue
@@ -179,7 +179,7 @@ import ContentDescription from '@/components/ContentDescription.vue' | @@ -179,7 +179,7 @@ import ContentDescription from '@/components/ContentDescription.vue' | ||
179 | import { isMobile } from '~/utils' | 179 | import { isMobile } from '~/utils' |
180 | 180 | ||
181 | useHead({ | 181 | useHead({ |
182 | - title: 'About Us', | 182 | + title: 'Customize', |
183 | meta: [ | 183 | meta: [ |
184 | { | 184 | { |
185 | name: 'title', | 185 | name: 'title', |
pages/equipment.vue
@@ -203,7 +203,7 @@ let equipTimer: any = null | @@ -203,7 +203,7 @@ let equipTimer: any = null | ||
203 | let pouchTimer: any = null | 203 | let pouchTimer: any = null |
204 | 204 | ||
205 | useHead({ | 205 | useHead({ |
206 | - title: 'About Us', | 206 | + title: 'Equipment', |
207 | meta: [ | 207 | meta: [ |
208 | { | 208 | { |
209 | name: 'title', | 209 | name: 'title', |
pages/index.vue
@@ -56,8 +56,8 @@ import MainTitleListOdd from '../components/MainTitleListOdd.vue' | @@ -56,8 +56,8 @@ import MainTitleListOdd from '../components/MainTitleListOdd.vue' | ||
56 | import { useCategoryStore } from '../stores/category' | 56 | import { useCategoryStore } from '../stores/category' |
57 | import { computed } from 'vue' | 57 | import { computed } from 'vue' |
58 | import { isMobile } from '../utils' | 58 | import { isMobile } from '../utils' |
59 | -onMounted(()=>{ | ||
60 | - console.log('%c [ onMounted ]-10', 'font-size:13px; background:pink; color:#bf2c9f;',111) | 59 | +onMounted(() => { |
60 | + console.log('%c [ onMounted ]-10', 'font-size:13px; background:pink; color:#bf2c9f;', 111) | ||
61 | }) | 61 | }) |
62 | useHead({ | 62 | useHead({ |
63 | title: 'canrud', | 63 | title: 'canrud', |
@@ -65,15 +65,18 @@ useHead({ | @@ -65,15 +65,18 @@ useHead({ | ||
65 | { | 65 | { |
66 | name: 'title', | 66 | name: 'title', |
67 | content: "科路得,助您科研之路势在必得。Canrd aims to be the world's leading one-stop service provider in new energy research. With a dedication to excellence, we offer Material Reagents, Lab Devices, Customized Batteries, Testing, and Advanced Packaging for energy materials and storage systems. We master advanced technologies to provide high-quality solutions. Our team's quick responses ensure tailored and professional services to meet your unique needs. Contact us at contact@canrd.com or call +86 19867737979 to explore our innovative offerings. Together, let's shape a greener, brighter world!" | 67 | content: "科路得,助您科研之路势在必得。Canrd aims to be the world's leading one-stop service provider in new energy research. With a dedication to excellence, we offer Material Reagents, Lab Devices, Customized Batteries, Testing, and Advanced Packaging for energy materials and storage systems. We master advanced technologies to provide high-quality solutions. Our team's quick responses ensure tailored and professional services to meet your unique needs. Contact us at contact@canrd.com or call +86 19867737979 to explore our innovative offerings. Together, let's shape a greener, brighter world!" |
68 | - },{ | 68 | + }, { |
69 | name: 'keywords', | 69 | name: 'keywords', |
70 | content: | 70 | content: |
71 | - '科路得,canrd,canrud,Energy Storage Research,Lithium Batteries Research,Material Reagents,Lab Device,Customized Battery,Testing,Pack', | ||
72 | - },{ | ||
73 | - name:"description", | 71 | + '科路得,canrd,canrud,Energy Storage Research,Lithium Batteries Research,Material Reagents,Lab Device,Customized Battery,Testing,Pack', |
72 | + }, { | ||
73 | + name: "description", | ||
74 | content: | 74 | content: |
75 | - "科路得,助您科研之路势在必得。Canrd aims to be the world's leading one-stop service provider in new energy research. With a dedication to excellence, we offer Material Reagents, Lab Devices, Customized Batteries, Testing, and Advanced Packaging for energy materials and storage systems. We master advanced technologies to provide high-quality solutions. Our team's quick responses ensure tailored and professional services to meet your unique needs. Contact us at contact@canrd.com or call +86 19867737979 to explore our innovative offerings. Together, let's shape a greener, brighter world!" | ||
76 | - }] | 75 | + "科路得,助您科研之路势在必得。Canrd aims to be the world's leading one-stop service provider in new energy research. With a dedication to excellence, we offer Material Reagents, Lab Devices, Customized Batteries, Testing, and Advanced Packaging for energy materials and storage systems. We master advanced technologies to provide high-quality solutions. Our team's quick responses ensure tailored and professional services to meet your unique needs. Contact us at contact@canrd.com or call +86 19867737979 to explore our innovative offerings. Together, let's shape a greener, brighter world!" |
76 | + }], | ||
77 | + link: [ | ||
78 | + { rel: 'preload', href: '/banner/banner1.jpg', as: 'image' } | ||
79 | + ] | ||
77 | }) | 80 | }) |
78 | 81 | ||
79 | // useAsyncData(async ({ app }) => { | 82 | // useAsyncData(async ({ app }) => { |
@@ -101,7 +104,7 @@ const banners = [ | @@ -101,7 +104,7 @@ const banners = [ | ||
101 | '/banner/banner1.jpg', | 104 | '/banner/banner1.jpg', |
102 | '/banner/banner2.jpg', | 105 | '/banner/banner2.jpg', |
103 | '/banner/banner3.jpg', | 106 | '/banner/banner3.jpg', |
104 | - '/banner/banner4.png' | 107 | + '/banner/banner5.jpg' |
105 | ] | 108 | ] |
106 | 109 | ||
107 | const mobileBanners = [ | 110 | const mobileBanners = [ |
pages/pack.vue
@@ -74,7 +74,7 @@ import { ref, onMounted, onUnmounted } from 'vue' | @@ -74,7 +74,7 @@ import { ref, onMounted, onUnmounted } from 'vue' | ||
74 | import { isMobile } from '~/utils' | 74 | import { isMobile } from '~/utils' |
75 | 75 | ||
76 | useHead({ | 76 | useHead({ |
77 | - title: 'canrud', | 77 | + title: 'Pack', |
78 | meta: [{ | 78 | meta: [{ |
79 | name: 'title', | 79 | name: 'title', |
80 | content: | 80 | content: |
pages/products/detail/[id]/index.vue
@@ -28,6 +28,25 @@ let { data: resData } = await useAsyncData('detail', () => $fetch('/shop/product | @@ -28,6 +28,25 @@ let { data: resData } = await useAsyncData('detail', () => $fetch('/shop/product | ||
28 | server: true // 仅在服务器端获取数据 | 28 | server: true // 仅在服务器端获取数据 |
29 | }) | 29 | }) |
30 | 30 | ||
31 | +useHead({ | ||
32 | + title: info.name || 'canrud', | ||
33 | + meta: [ | ||
34 | + { | ||
35 | + name: 'title', | ||
36 | + content: | ||
37 | + '科路得,Equipment,High-precision,Machining center,Design,Manufacturing capabilities,Equipment supply,Production line planning,Construction services,Battery assembly lines,Pouch cell testing lines', | ||
38 | + }, { | ||
39 | + name: 'keywords', | ||
40 | + content: | ||
41 | + '科路得,Equipment,High-precision,Machining center,Design,Manufacturing capabilities,Equipment supply,Production line planning,Construction services,Battery assembly lines,Pouch cell testing lines', | ||
42 | + }, { | ||
43 | + name: 'description', | ||
44 | + content: | ||
45 | + '科路得,助您科研之路势在必得。Equipment Business: With our self-built high-precision machining center, we possess robust design and manufacturing capabilities. We offer comprehensive equipment supply, production line planning, and construction services, including battery assembly lines, pouch cell testing lines, and more. Our aim is to provide complete equipment solutions that cater to the diverse needs of our clients. Expect top-quality equipment and professional services that will help you stand out in a fiercely competitive market!' | ||
46 | + }, | ||
47 | + ], | ||
48 | +}) | ||
49 | + | ||
31 | const newData: Product = resData.value.data | 50 | const newData: Product = resData.value.data |
32 | 51 | ||
33 | newData.productimageliststore = typeof newData.productimageliststore === 'string' ? | 52 | newData.productimageliststore = typeof newData.productimageliststore === 'string' ? |
pages/products/index.vue
@@ -23,9 +23,11 @@ | @@ -23,9 +23,11 @@ | ||
23 | </div> | 23 | </div> |
24 | </v-expand-transition> --> | 24 | </v-expand-transition> --> |
25 | </v-img> | 25 | </v-img> |
26 | - <v-card-text class="tw-text-left font-weight-medium title">{{ | ||
27 | - item.name | ||
28 | - }}</v-card-text> | 26 | + <v-card-text class="tw-text-left font-weight-medium title"> |
27 | + <h4>{{ | ||
28 | + item.name | ||
29 | + }}</h4> | ||
30 | + </v-card-text> | ||
29 | </v-card> | 31 | </v-card> |
30 | </v-hover> | 32 | </v-hover> |
31 | </v-col> | 33 | </v-col> |
pages/test.vue
@@ -104,7 +104,7 @@ import { onMounted, onUnmounted, ref } from 'vue' | @@ -104,7 +104,7 @@ import { onMounted, onUnmounted, ref } from 'vue' | ||
104 | import { isMobile } from '~/utils' | 104 | import { isMobile } from '~/utils' |
105 | 105 | ||
106 | useHead({ | 106 | useHead({ |
107 | - title: 'canrud', | 107 | + title: 'Test', |
108 | meta: [{ | 108 | meta: [{ |
109 | name: 'title', | 109 | name: 'title', |
110 | content: | 110 | content: |
pnpm-lock.yaml
@@ -28,6 +28,9 @@ devDependencies: | @@ -28,6 +28,9 @@ devDependencies: | ||
28 | '@nuxtjs/i18n': | 28 | '@nuxtjs/i18n': |
29 | specifier: ^8.3.1 | 29 | specifier: ^8.3.1 |
30 | version: 8.3.1(rollup@4.17.2)(vue@3.4.27) | 30 | version: 8.3.1(rollup@4.17.2)(vue@3.4.27) |
31 | + '@tailwindcss/aspect-ratio': | ||
32 | + specifier: ^0.4.2 | ||
33 | + version: 0.4.2(tailwindcss@3.4.3) | ||
31 | autoprefixer: | 34 | autoprefixer: |
32 | specifier: ^10.4.19 | 35 | specifier: ^10.4.19 |
33 | version: 10.4.19(postcss@8.4.38) | 36 | version: 10.4.19(postcss@8.4.38) |
@@ -1901,6 +1904,14 @@ packages: | @@ -1901,6 +1904,14 @@ packages: | ||
1901 | resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} | 1904 | resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} |
1902 | engines: {node: '>=18'} | 1905 | engines: {node: '>=18'} |
1903 | 1906 | ||
1907 | + /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.3): | ||
1908 | + resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} | ||
1909 | + peerDependencies: | ||
1910 | + tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' | ||
1911 | + dependencies: | ||
1912 | + tailwindcss: 3.4.3 | ||
1913 | + dev: true | ||
1914 | + | ||
1904 | /@trysound/sax@0.2.0: | 1915 | /@trysound/sax@0.2.0: |
1905 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} | 1916 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} |
1906 | engines: {node: '>=10.13.0'} | 1917 | engines: {node: '>=10.13.0'} |
public/banner/banner4.png deleted
100644 → 0
3.05 MB
public/banner/banner5.jpg
0 → 100644
335 KB