• 【VUE】vue程序设计----模仿菜谱做菜网站


    1、引言

    设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题,在微信公众号“coding加油站”中全部会得到解决

    2、作品介绍

    菜谱做菜网站系统采用html,css,vue技术来实现,符合所学知识体系,适用于常见的作业以及课程设计,需要获取更多的作品,请关注微信公众号:coding加油站,获取,如需更多资料,可在微信后台留言。欢迎大家来提问,交流学习。

    2.1、作品简介方面 

    菜谱做菜网站系统采用常规方式来实现,符合绝大部分的要求。代码配置有相关文档讲解,如需从代码中学到知识点,那么这个作品将是你的不二之选

    2.2、作品二次开发工具

    此作品代码相对简单,基本使用课堂中所学知识点来完成,只需要修改相关的介绍文字,一些图片,就可以改为自己独一无二的代码,网页作品下载后可使用任意编辑软件(例如:DW、HBuilder、NotePAD 、Vscode 、Sublime 、Webstorm 所有编辑器均可使用)。

    2.3、作品技术介绍

    html网页作品技术方面:使用CSS制作了网页背景图、鼠标经过及选中导航变色效果、下划线等相关技术来美化相关界面,部分采用了javascript来做校验。 使用html5,以及css3等相关技术完成技术的布局,在本作品中,会使用常见的布局,常见的浮动布局,flex布局都会有使用到哦。同时在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识,同时使用了一些js的相关知识。例如使用到了dom,和bom来获取浏览器的相关api,同时使用css对样式进行相关的美化,使得界面更加符合网页设计

    vue作品技术方面:使用vue技术开发的网站,涉及常见的vue指令,如v-for,v-if,v-show,v-html等的使用,包含watch,计算属性等常见功能的开发,以及组件的使用,使用vue相关全家桶的使用,运用了v-router来作为路由,完全符合常见的网站开发技术。同时也会使用html5,以及css3等相关技术完成技术的布局,在本作品中,会使用常见的布局,常见的浮动布局,flex布局都会有使用到哦。

    3、作品演示

    【coding加油站】vue程序设计---模仿做菜菜谱网站

    3.1、首页

     相关代码:

    1. <template>
    2. <div class="home">
    3. <homeNavBar />
    4. <homeIconList/>
    5. <homeSwipe />
    6. <hiddenTopNav v-show="listShow" :listShow = "listShow"/>
    7. <tab1 />
    8. <tab2 />
    9. <tab3 />
    10. <tab4 />
    11. <tab5 />
    12. <tab6 />
    13. <bottomSwipe />
    14. <bottomBar />
    15. div>
    16. template>
    17. <script>
    18. import {reactive,toRefs,onMounted,ref} from 'vue';
    19. import bottomBar from '../components/bottomBar.vue';
    20. import homeSwipe from '../components/homePage/homeSwipe.vue'
    21. import homeNavBar from '../components/homePage/homeNavBar.vue'
    22. import homeIconList from '../components/homePage/homeIconList.vue'
    23. import hiddenTopNav from '../components/homePage/hiddenTopNav.vue'
    24. import tab1 from '../components/homePage/tab1.vue'
    25. import tab2 from '../components/homePage/tab2.vue'
    26. import tab3 from '../components/homePage/tab3.vue'
    27. import tab4 from '../components/homePage/tab4.vue'
    28. import tab5 from '../components/homePage/tab5.vue'
    29. import tab6 from '../components/homePage/tab6.vue'
    30. import bottomSwipe from '../components/homePage/bottomSwipe.vue'
    31. // @ is an alias to /src
    32. export default{
    33. components:{
    34. homeSwipe,
    35. homeNavBar,
    36. homeIconList,
    37. hiddenTopNav,
    38. tab1,
    39. tab2,
    40. tab3,
    41. tab4,
    42. tab5,
    43. tab6,
    44. bottomSwipe,
    45. bottomBar
    46. },
    47. setup(){
    48. const state = reactive({
    49. listShow: false,
    50. })
    51. onMounted(()=>{
    52. window.addEventListener('scroll', () => {
    53. let top = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset
    54. if(top>=197){
    55. state.listShow = true;
    56. }
    57. else {
    58. state.listShow = false;
    59. }
    60. })
    61. })
    62. return {
    63. ...toRefs(state),
    64. }
    65. }
    66. }
    67. script>

    3.2、课堂界面

     相关代码:

    1. <template>
    2. <van-tabs v-model:active="active" >
    3. <transition enter-active-class="animate__animated animate__fadeInLeft animate__faster " >
    4. <van-tab title="推荐" class="rec-box">
    5. <div class="item" v-for="item in list">
    6. <div @click="jump(item.img,item.name)">
    7. <div class = "linkBox" >
    8. <img class="imgbox" :src="item.img" alt="">
    9. <span>{{item.name}}span>
    10. div>
    11. div>
    12. div>
    13. van-tab>
    14. transition>
    15. <transition enter-active-class="animate__animated animate__fadeInLeft animate__faster " >
    16. <van-tab title="减脂">
    17. <fatLoss />
    18. van-tab>
    19. transition>
    20. <transition enter-active-class="animate__animated animate__fadeInLeft animate__faster " >
    21. <van-tab title="分类">
    22. <kinds />
    23. van-tab>
    24. transition>
    25. van-tabs>
    26. <div style="height: 2rem" >div>
    27. template>
    28. <script>
    29. import { ref ,reactive ,toRefs,onMounted} from 'vue';
    30. import { useStore } from 'vuex';
    31. import { useRoute,useRouter } from 'vue-router';
    32. import fatLoss from '../classPage/fatLoss/fatLoss.vue'
    33. import kinds from '@/views/kinds.vue';
    34. export default {
    35. components:{
    36. fatLoss,
    37. kinds
    38. },
    39. setup(){
    40. const router = useRouter();
    41. const store = useStore();
    42. const state = reactive({
    43. list:[
    44. {
    45. img: require('@/assets/class/1.jpg'),
    46. name:'炒合菜',
    47. url:'cook1',
    48. },
    49. {
    50. img: require('@/assets/class/2.jpg'),
    51. name:'土豆炖牛肉',
    52. url:'cook2',
    53. },
    54. {
    55. img: require('@/assets/class/3.jpg'),
    56. name:'清蒸鲈鱼🐟',
    57. url:'cook3',
    58. },
    59. {
    60. img: require('@/assets/class/4.jpg'),
    61. name:'娃娃菜粉丝汤',
    62. url:'cook4',
    63. },
    64. {
    65. img: require('@/assets/class/5.jpg'),
    66. name:'番茄炒蛋',
    67. url:'cook5',
    68. },
    69. {
    70. img: require('@/assets/class/6.jpg'),
    71. name:'皮蛋拌黄瓜',
    72. url:'cook6',
    73. },
    74. {
    75. img: require('@/assets/class/7.jpg'),
    76. name:'虾仁芦笋',
    77. url:'cook7',
    78. },
    79. {
    80. img: require('@/assets/class/8.jpg'),
    81. name:'鱼香茄子',
    82. url:'cook8',
    83. },
    84. {
    85. img: require('@/assets/class/9.jpg'),
    86. name:'烧腐竹',
    87. url:'cook9',
    88. },
    89. {
    90. img: require('@/assets/class/10.jpg'),
    91. name:'蒜蓉金针菇',
    92. url:'cook10',
    93. },
    94. ],
    95. })
    96. onMounted(()=>{
    97. console.log(store.state.cook);
    98. })
    99. const jump = (img,text)=>{
    100. console.log(text);
    101. router.push({name:'cook1',params:{img:img,text:text}});
    102. //改进要用store存储,点击之后存到信息里显示
    103. }
    104. return {
    105. ...toRefs(state),
    106. jump
    107. }
    108. }
    109. }
    110. script>
    111. <style lang="less" scoped>
    112. .rec-box{
    113. width: 95%;
    114. height:auto;
    115. display:flex;
    116. flex-direction: row;
    117. flex-wrap: wrap;
    118. margin: -.2rem auto;
    119. justify-content: space-around;
    120. align-items: center;
    121. align-content: center;
    122. .item{
    123. width: 3.3rem;
    124. height: 4rem;
    125. display:flex;
    126. margin-top: .3rem;
    127. flex-direction: row;
    128. flex-wrap: wrap;
    129. justify-content:start;
    130. align-items:left;
    131. }
    132. .linkBox{
    133. width: 3.3rem;
    134. height: 4rem;
    135. display:flex;
    136. margin-top: .3rem;
    137. flex-direction: column;
    138. justify-content:center;
    139. align-items:left;
    140. img{
    141. width: 100%;
    142. height: 3.5rem;
    143. border-radius: .2rem;
    144. box-shadow: 2px 2px 2px rgb(178, 175, 175);
    145. }
    146. span{
    147. margin-top: .1rem;
    148. text-align: left;
    149. color: black;
    150. font-weight: 550;
    151. }
    152. }
    153. }
    154. style>

    3.3、步骤界面

     相关代码:

    1. <template>
    2. <div class="cook" >
    3. <div class="cookBar">
    4. <img class="btn1" :src = "imgs[0]" @click="$router.go(-1)">
    5. <img class="btn2" :src="imgs[1]" @click="share">
    6. div>
    7. <div class="cookBar1" >div>
    8. <img class="imgbox" :src="$route.params.img" alt="">
    9. <div class="text"> {{$route.params.text}}div>
    10. <div class="need">
    11. <div class="title">
    12. <span>用料span>
    13. <img :src="imgs[2]" alt="">
    14. div>
    15. <div class = "shadow">
    16. <div class="need-item" v-for="item in needs">
    17. <div class="item-name">{{item.name}}div>
    18. <div class="item-account">{{item.account}}div>
    19. div>
    20. div>
    21. <div class="steps" v-for="(item,index) in steps">
    22. <span>步骤{{index+1}}span>
    23. <img :src=item.img alt="">
    24. <div class="dis">{{item.dis}}div>
    25. <el-divider border-style="dashed" />
    26. div>
    27. div>
    28. div>
    29. <cookBottom @event="addCollect"> cookBottom>
    30. <van-share-sheet
    31. v-model:show="showShare"
    32. title="立即分享给好友"
    33. :options="options"
    34. />
    35. template>
    36. <script>
    37. import { StarFilled } from '@element-plus/icons-vue'
    38. import cookBottom from '@/components/classPage/cooks/cookBottom.vue';
    39. import {reactive,toRefs,onMounted,ref} from 'vue'
    40. import { useStore } from 'vuex';
    41. import {useRoute} from 'vue-router'
    42. export default {
    43. components: {
    44. cookBottom
    45. },
    46. setup(){
    47. const route = useRoute();
    48. const store = useStore();
    49. const showShare = ref(false);
    50. const options = [
    51. [
    52. { name: '微信', icon: 'wechat' },
    53. { name: '朋友圈', icon: 'wechat-moments' },
    54. { name: '微博', icon: 'weibo' },
    55. { name: 'QQ', icon: 'qq' },
    56. ],
    57. [
    58. { name: '复制链接', icon: 'link' },
    59. { name: '分享海报', icon: 'poster' },
    60. { name: '二维码', icon: 'qrcode' },
    61. { name: '小程序码', icon: 'weapp-qrcode' },
    62. ],
    63. ];
    64. const state = reactive({
    65. needs:[
    66. {
    67. name:'绿豆芽',
    68. account:'300克',
    69. },
    70. {
    71. name:'韭菜',
    72. account:'200克',
    73. },
    74. {
    75. name:'鸡蛋',
    76. account:'2个',
    77. },
    78. {
    79. name:'粉条',
    80. account:'一小把',
    81. },
    82. {
    83. name:'生抽',
    84. account:'2勺',
    85. },
    86. {
    87. name:'盐',
    88. account:'一小勺',
    89. },
    90. {
    91. name:'鸡精',
    92. account:'一小勺',
    93. },
    94. {
    95. name:'蒜末',
    96. account:'2瓣',
    97. },
    98. {
    99. name:'耗油',
    100. account:'一小勺',
    101. },
    102. ],
    103. steps:[
    104. {
    105. img: require('@/assets/cook/1.jpg'),
    106. dis:'绿豆芽洗净,控水'
    107. },
    108. {
    109. img: require('@/assets/cook/2.jpg'),
    110. dis:'绿豆芽洗净,控水'
    111. },
    112. {
    113. img: require('@/assets/cook/3.jpg'),
    114. dis:'绿豆芽洗净,控水'
    115. },
    116. {
    117. img: require('@/assets/cook/4.jpg'),
    118. dis:'绿豆芽洗净,控水'
    119. },
    120. {
    121. img: require('@/assets/cook/5.jpg'),
    122. dis:'绿豆芽洗净,控水'
    123. },
    124. {
    125. img: require('@/assets/cook/6.jpg'),
    126. dis:'绿豆芽洗净,控水'
    127. },
    128. {
    129. img: require('@/assets/cook/7.jpg'),
    130. dis:'绿豆芽洗净,控水'
    131. },
    132. {
    133. img: require('@/assets/cook/8.jpg'),
    134. dis:'绿豆芽洗净,控水'
    135. },
    136. {
    137. img: require('@/assets/cook/9.jpg'),
    138. dis:'绿豆芽洗净,控水'
    139. },
    140. ],
    141. imgs:[
    142. require('@/assets/class图标/1.png'),
    143. require('@/assets/class图标/2.png'),
    144. require('@/assets/class图标/3.png'),
    145. ],
    146. })
    147. onMounted(()=>{
    148. window.addEventListener('scroll',()=>{
    149. let top = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
    150. let o = document.querySelector('.cookBar1');
    151. o.style.opacity = top/400;
    152. })
    153. })
    154. const share = ()=>{
    155. showShare.value = true;
    156. }
    157. const addCollect = ()=>{
    158. console.log('收到消息')
    159. store.commit('setCook1',route.params.img);
    160. store.commit('setCook2',route.params.text);
    161. store.state.cook.isCollect = true;
    162. console.log(store.state.cook.isCollect)
    163. console.log(store.state.cook);
    164. }
    165. return{
    166. ...toRefs(state),
    167. options,
    168. showShare,
    169. share,
    170. addCollect
    171. }
    172. }
    173. }
    174. script>

    4、代码结构图

    总结

    以上就是本次项目的全部内容,需要交流或者获取代码请关注微信公众号:coding加油站获取

  • 相关阅读:
    [BUG]warn(f“Failed to load image Python extension: {e}“)的解决办法
    jenkins如何请求http接口及乱码问题解决
    技术实践|高斯集群服务器双缺省网关故障分析
    springboot防止表单重复提交
    离散数学复习:命题逻辑
    [Vue]配置代理
    3.1、数据链路层概述
    乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具
    快来!!!学弟的这篇结构体让学姐老脸一红!!!
    python标准库操作
  • 原文地址:https://blog.csdn.net/pandas23/article/details/126612010