【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、首页

 相关代码:

<template>
  <div class="home">
    <homeNavBar />
    <homeIconList/>
    <homeSwipe />
      <hiddenTopNav v-show="listShow" :listShow = "listShow"/>
    
    <tab1 />
    <tab2 />
    <tab3 />
    <tab4 />
    <tab5 />
    <tab6 />
    <bottomSwipe />
    <bottomBar />
  </div>
</template>

<script>
import {reactive,toRefs,onMounted,ref} from 'vue';
import bottomBar from '../components/bottomBar.vue';
import homeSwipe from '../components/homePage/homeSwipe.vue'
import homeNavBar from '../components/homePage/homeNavBar.vue'
import homeIconList from '../components/homePage/homeIconList.vue'
import hiddenTopNav from '../components/homePage/hiddenTopNav.vue'
import tab1 from '../components/homePage/tab1.vue'
import tab2 from '../components/homePage/tab2.vue'
import tab3 from '../components/homePage/tab3.vue'
import tab4 from '../components/homePage/tab4.vue'
import tab5 from '../components/homePage/tab5.vue'
import tab6 from '../components/homePage/tab6.vue'
import bottomSwipe from '../components/homePage/bottomSwipe.vue'
// @ is an alias to /src
export default{
  components:{
    homeSwipe,
    homeNavBar,
    homeIconList,
    hiddenTopNav,
    tab1,
    tab2,
    tab3,
    tab4,
    tab5,
    tab6,
    bottomSwipe,
    bottomBar
  },
  setup(){
    const state = reactive({
      listShow: false,
    })
    onMounted(()=>{
      window.addEventListener('scroll', () => {
        let top = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset
        if(top>=197){
          state.listShow = true;
        }
        else {
          state.listShow = false;
        }
      })
    })
    return {
      ...toRefs(state),
    }
  }
 
}
</script>

3.2、课堂界面

 相关代码:

<template>
  <van-tabs v-model:active="active" >
  <transition enter-active-class="animate__animated animate__fadeInLeft animate__faster	" >
    <van-tab title="推荐" class="rec-box">
          <div class="item" v-for="item in list">
              <div  @click="jump(item.img,item.name)">
              <div class = "linkBox" >
                <img class="imgbox" :src="item.img" alt="">
                <span>{{item.name}}</span>
              </div>
            </div>
          </div>
      </van-tab>
  </transition>
  <transition enter-active-class="animate__animated animate__fadeInLeft animate__faster	" >
    <van-tab title="减脂">
      <fatLoss />
    </van-tab>
  </transition>
  <transition enter-active-class="animate__animated animate__fadeInLeft animate__faster	" >
    <van-tab title="分类"> 

      <kinds />
    </van-tab>
  </transition>
    
    <!-- <van-tab title="标签 4">内容 4</van-tab> -->
</van-tabs>
<div style="height: 2rem" ></div>



</template>

<script>
import { ref ,reactive ,toRefs,onMounted} from 'vue';
import { useStore } from 'vuex';
import { useRoute,useRouter } from 'vue-router';
import  fatLoss from '../classPage/fatLoss/fatLoss.vue'
import kinds from '@/views/kinds.vue';
export default {
  components:{
    fatLoss,
    kinds
  },
  setup(){
    const router = useRouter();
    const store = useStore();
    const state = reactive({
      list:[
        {
         img: require('@/assets/class/1.jpg'),
         name:'炒合菜',
         url:'cook1',
        },
        {
         img: require('@/assets/class/2.jpg'),
         name:'土豆炖牛肉',
         url:'cook2',
        },
        {
         img: require('@/assets/class/3.jpg'),
         name:'清蒸鲈鱼🐟',
         url:'cook3',
        },
        {
         img: require('@/assets/class/4.jpg'),
         name:'娃娃菜粉丝汤',
         url:'cook4',
        },
        {
         img: require('@/assets/class/5.jpg'),
         name:'番茄炒蛋',
         url:'cook5',
        },
        {
         img: require('@/assets/class/6.jpg'),
         name:'皮蛋拌黄瓜',
         url:'cook6',
        },
        {
         img: require('@/assets/class/7.jpg'),
         name:'虾仁芦笋',
         url:'cook7',
        },
        {
         img: require('@/assets/class/8.jpg'),
         name:'鱼香茄子',
         url:'cook8',
        },
        {
         img: require('@/assets/class/9.jpg'),
         name:'烧腐竹',
         url:'cook9',
        },
        {
         img: require('@/assets/class/10.jpg'),
         name:'蒜蓉金针菇',
         url:'cook10',
        },

        
      ],
    })
    onMounted(()=>{
        console.log(store.state.cook);
      })
    const jump = (img,text)=>{
      console.log(text);
      router.push({name:'cook1',params:{img:img,text:text}});
      //改进要用store存储,点击之后存到信息里显示

    }
    return {  
      ...toRefs(state),
      jump
    }
  }
}

</script>

<style lang="less" scoped>
.rec-box{
  width: 95%;
  height:auto;
  display:flex;
  flex-direction: row;
  flex-wrap: wrap;
  margin: -.2rem auto;
  justify-content: space-around;
  align-items: center;
  align-content: center;
  
  .item{
   width: 3.3rem;
    height: 4rem;
    display:flex;
    margin-top: .3rem;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content:start;
    align-items:left;
  }
  .linkBox{
    width: 3.3rem;
    height: 4rem;
    display:flex;
    margin-top: .3rem;
    flex-direction: column;
    justify-content:center;
    align-items:left;
    img{
      width: 100%;
      height: 3.5rem;
      border-radius: .2rem;
      box-shadow: 2px 2px 2px rgb(178, 175, 175);
    }
    span{
      margin-top: .1rem;
      text-align: left;
      color: black;
      font-weight: 550;
    }
  }


}

</style>

3.3、步骤界面

 相关代码:

<template>
  <div class="cook"  >
    <div class="cookBar">
      <img class="btn1" :src = "imgs[0]" @click="$router.go(-1)">
      <img class="btn2" :src="imgs[1]" @click="share">
    </div>
    <div class="cookBar1" ></div>
    <img class="imgbox" :src="$route.params.img" alt="">
    <div class="text"> {{$route.params.text}}</div>
    <div class="need">
      <div class="title">
        <span>用料</span>
        <img :src="imgs[2]" alt="">
      </div>
      <div class = "shadow">
        <div class="need-item" v-for="item in needs">
        <div class="item-name">{{item.name}}</div>
        <div class="item-account">{{item.account}}</div>
      </div>
      </div>
      
      <div class="steps" v-for="(item,index) in steps">
        <span>步骤{{index+1}}</span>
        <img :src=item.img alt="">
        <div class="dis">{{item.dis}}</div>
        <el-divider border-style="dashed" />
      </div>
    </div>
  </div>

<cookBottom @event="addCollect"> </cookBottom>
  <van-share-sheet
  v-model:show="showShare"
  title="立即分享给好友"
  :options="options"
/>
</template>

<script>
import { StarFilled } from '@element-plus/icons-vue'
import cookBottom from '@/components/classPage/cooks/cookBottom.vue';
import {reactive,toRefs,onMounted,ref} from 'vue'
import { useStore } from 'vuex';
import {useRoute} from 'vue-router'
export default {
  components: {
    cookBottom
  },
  setup(){
    const route = useRoute();
    const store = useStore();
     const showShare = ref(false);
    const options = [
      [
        { name: '微信', icon: 'wechat' },
        { name: '朋友圈', icon: 'wechat-moments' },
        { name: '微博', icon: 'weibo' },
        { name: 'QQ', icon: 'qq' },
      ],
      [
        { name: '复制链接', icon: 'link' },
        { name: '分享海报', icon: 'poster' },
        { name: '二维码', icon: 'qrcode' },
        { name: '小程序码', icon: 'weapp-qrcode' },
      ],
    ];
    const state = reactive({
      needs:[
        {
          name:'绿豆芽',
          account:'300克',
        },
         {
          name:'韭菜',
          account:'200克',
        },
         {
          name:'鸡蛋',
          account:'2个',
        },
         {
          name:'粉条',
          account:'一小把',
        },
         {
          name:'生抽',
          account:'2勺',
        },
         {
          name:'盐',
          account:'一小勺',
        },
         {
          name:'鸡精',
          account:'一小勺',
        },
         {
          name:'蒜末',
          account:'2瓣',
        },
        {
          name:'耗油',
          account:'一小勺',
        },
      ],
      steps:[
        {
          img: require('@/assets/cook/1.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/2.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/3.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/4.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/5.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/6.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/7.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/8.jpg'),
          dis:'绿豆芽洗净,控水'
        },
        {
          img: require('@/assets/cook/9.jpg'),
          dis:'绿豆芽洗净,控水'
        },
      ],
      imgs:[
        require('@/assets/class图标/1.png'),
        require('@/assets/class图标/2.png'),
        require('@/assets/class图标/3.png'),
      ],
      
    })
    onMounted(()=>{
      window.addEventListener('scroll',()=>{
        let top = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
        let o = document.querySelector('.cookBar1');
        o.style.opacity = top/400;
      })
      
    })
    const share = ()=>{
      showShare.value = true;
    }
    const addCollect = ()=>{
      console.log('收到消息')
      store.commit('setCook1',route.params.img);
      store.commit('setCook2',route.params.text);
      store.state.cook.isCollect = true;
      console.log(store.state.cook.isCollect)
      console.log(store.state.cook);
     
    }
    return{
      ...toRefs(state),
      options,
      showShare,
      share,
      addCollect
    }
  }
  
}
</script>

4、代码结构图

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值