Commit 29276e293d178ae4f79fda5d96b1e2593bb59d93

Authored by sanmu
1 parent 3ec84c85

feat: 更新标题&图片alt&keyword&h4

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 = () =&gt; { @@ -71,7 +71,7 @@ const handleClick = () =&gt; {
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(() =&gt; { @@ -100,6 +100,11 @@ onMounted(() =&gt; {
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 = () =&gt; { @@ -111,6 +111,28 @@ const handleTabClick = () =&gt; {
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 &#39;@/components/ContentDescription.vue&#39; @@ -179,7 +179,7 @@ import ContentDescription from &#39;@/components/ContentDescription.vue&#39;
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 &#39;../components/MainTitleListOdd.vue&#39; @@ -56,8 +56,8 @@ import MainTitleListOdd from &#39;../components/MainTitleListOdd.vue&#39;
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 &#39;vue&#39; @@ -74,7 +74,7 @@ import { ref, onMounted, onUnmounted } from &#39;vue&#39;
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(&#39;detail&#39;, () =&gt; $fetch(&#39;/shop/product @@ -28,6 +28,25 @@ let { data: resData } = await useAsyncData(&#39;detail&#39;, () =&gt; $fetch(&#39;/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 &#39;vue&#39; @@ -104,7 +104,7 @@ import { onMounted, onUnmounted, ref } from &#39;vue&#39;
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

tailwind.config.js
@@ -21,5 +21,7 @@ export default { @@ -21,5 +21,7 @@ export default {
21 } 21 }
22 }, 22 },
23 }, 23 },
24 - plugins: [], 24 + plugins: [
  25 + require('@tailwindcss/aspect-ratio'),
  26 + ],
25 } 27 }
26 \ No newline at end of file 28 \ No newline at end of file