基于Vue+Vuex+Vue-Router+axios+mint-ui的移动端电商项目

第一步:安装Nodecss

一、打开NodeJS的官网,下载和本身系统相配的NodeJS的安装程序,包括32位仍是64位必定要选择好,不然会出现安装问题。html

下载地址:https://nodejs.org/en/download/vue


 

我选择的是Window版本64位的安装程序,也有MAC平台的安装程序。node

    下载完成,如图:mysql


 

二、接下来就是安装了,安装很简单,直接下一步下一步就能够,可是我也把流程记录下来,给第一次看本教程的人有一个大概的了解。webpack

  双击安装文件,如图:ios


 

三、点击下一步,选择赞成协议,不然没法继续安装。如图:git


 

四、这一步选择安装的目录,可使用默认目录【C:\Program Files\nodejs\】,也能够根据须要改变目录,我选择安装在D盘:github


 

六、最后一步就是安装和完成了。如图:web


 

完成效果:


 

安装完成后,在cmd窗口下执行 node -v 命令,看到版本信息,则说明安装成功:


 

参考连接:http://www.javashuo.com/article/p-mpdcimfc-hw.html

第二步:配置淘宝npm镜像

因为须要经过npm下载各类模块,默认npm是从国处服务器下载,对于网络条件通常的用户可能很难下载成功,因此须要配置成淘宝的镜像。

打开命令行,输入:npm config set registry https://registry.npm.taobao.org

之后下载模块会自动从淘宝地址进行下载。

第三步:安装webpack

打开命令行,输入npm install webpack -g。安装完成后输入webpack -v,若是显示版本号,则说明安装成功。

第四步:安装vue-cli

打开命令行,输入npm install vue-cli -g。安装完成后输入vue -V查看版本事情,如今应该是三点几的版本了,不过个人项目是用的2.9.6版本。

第五步:经过vue-cli初始化项目

打开命令行,进入指定的目录,输入vue init webpack 项目名,确认建立项目后,后续还需输入一下项目名称、项目描述、做者、打包方式、是否使用ESLint规范代码等等,详见上图。安装顺利执行后会,生成以下文件目录。


 

若是不是很习惯ESLint规范代码,建议新手选择No,若是你的编辑器安装了ESLint插件,但你的代码写的又不规范,因此会一直报错,尽管不影响项目的运行,但仍是会一直出现讨厌的红色。

前面简单的介绍了怎么搭建Vue项目以及Node环境,下面切入正题:

先说一下三零九在线药品销售系统    前台的项目配置信息,跟上图所示的其实也差很少吧,只是文件夹下的没再依次展现了。

|-- build // 项目构建(webpack)相关代码

| |-- build.js // 生产环境构建代码

| |-- check-version.js // 检查node、npm等版本

| |-- utils.js // 构建工具相关

| |-- webpack.base.conf.js // webpack基础配置

| |-- webpack.dev.conf.js // webpack开发环境配置

| |-- webpack.prod.conf.js // webpack生产环境配置

|-- config // 项目开发环境配置

| |-- dev.env.js // 开发环境变量

| |-- index.js // 项目一些配置变量

| |-- prod.env.js // 生产环境变量

|-- src // 源码目录

| |-- assets // 图片样式文件

| |-- components // vue公共组件

| |-- pages // 页面 (里面有不少页面,就不依次详细展开了)

| |-- router // 路由文件

| |-- store // vuex的状态管理

| |-- util // 公共js文件

| |-- App.vue // 页面入口文件

| |-- main.js // 程序入口文件,加载各类公共组件

|-- static // 静态文件,好比一些图片,json数据等

|-- .babelrc // ES6语法编译配置

|-- .editorconfig // 定义代码格式

|-- .gitignore // git上传须要忽略的文件格式

|-- README.md // 项目说明

|-- favicon.ico // logo图标

|-- index.html // 入口页面

|-- package.json // 项目基本信息

他主要用到的技术有(Vue+Vuex+Vue-router+Axios+Mint-ui+Element-ui+Webpack)等等。

仍是先看一下Mobile端的演示效果吧:


 

 

 

 

 

 

 

 

只列出了部分功能,像九九包邮,健康资讯,当季必备,关于咱们等等没有列出来。像购物车动画,同步刷新购物车中商品数量,以及实时刷新我的中心各个订单状态的数量。其中弹出框主要是用的Mint-ui中的Message和饿了么组件的MessqgeBox和alert框。

入口文件main.js部分代码:


 

 

其中基于ES6中的Promise的HTTP库的Axios,关于它的响应拦截请求,以及各类请求方法  请 查看它的官方社区Api中文文档,地址以下:https://www.kancloud.cn/yunye/axios/234845

再来看一下三零九在线药品销售系统    后台的项目配置信息,其实跟前台的目录结构差很少,毕竟都是用Vue-cli脚手架生成的。

后台管理系统主要用到Vue+Vuex+Vue-router+AxiosElement-ui+Webpack技术等等。

|-- build // 项目构建(webpack)相关代码

| |-- build.js // 生产环境构建代码

| |-- check-version.js // 检查node、npm等版本

| |-- utils.js // 构建工具相关

| |-- webpack.base.conf.js // webpack基础配置

| |-- webpack.dev.conf.js // webpack开发环境配置

| |-- webpack.prod.conf.js // webpack生产环境配置

|-- config // 项目开发环境配置

| |-- dev.env.js // 开发环境变量

| |-- index.js // 项目一些配置变量

| |-- prod.env.js // 生产环境变量

|-- src // 源码目录

| |-- assets // 图片样式文件

| |-- components // vue公共组件

| |-- pages // 页面 (里面有不少页面,就不依次详细展开了)

| |-- router // 路由文件

| |-- store // vuex的状态管理

| |-- util // 公共js文件

| |-- App.vue // 页面入口文件

| |-- main.js // 程序入口文件,加载各类公共组件

|-- static // 静态文件,好比一些图片,json数据等

|-- .babelrc // ES6语法编译配置

|-- .editorconfig // 定义代码格式

|-- .gitignore // git上传须要忽略的文件格式

|-- README.md // 项目说明

|-- favicon.ico // logo图标

|-- index.html // 入口页面

|-- package.json // 项目基本信息

先后台 都有用到  缓解首屏加载时间过长的一个 过分 页面(能够这么说吧,其实就是怕一次性加载的数据过大致使白屏时间太长),效果以下:


 

只是在index.html根页面下加了以下代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>三零九笙尘药膳坊后台管理系统</title>
    <link rel="shortcut icon" type="image/x-icon" href="static/icon.jfif">
    <style>
    html,
    body,
    #app {
      height: 100%;
      margin: 0px;
      padding: 0px;
    }
    .chromeframe {
      margin: 0.2em 0;
      background: #ccc;
      color: #000;
      padding: 0.2em 0;
    }
    #loader-wrapper {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 999999;
    }
    #loader {
      display: block;
      position: relative;
      left: 50%;
      top: 50%;
      width: 150px;
      height: 150px;
      margin: -75px 0 0 -75px;
      border-radius: 50%;
      border: 3px solid transparent;
      /* COLOR 1 */
      border-top-color: #FFF;
      -webkit-animation: spin 2s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -ms-animation: spin 2s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -moz-animation: spin 2s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -o-animation: spin 2s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      animation: spin 2s linear infinite;
      /* Chrome, Firefox 16+, IE 10+, Opera */
      z-index: 1001;
    }
    #loader:before {
      content: "";
      position: absolute;
      top: 5px;
      left: 5px;
      right: 5px;
      bottom: 5px;
      border-radius: 50%;
      border: 3px solid transparent;
      /* COLOR 2 */
      border-top-color: #FFF;
      -webkit-animation: spin 3s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -moz-animation: spin 3s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -o-animation: spin 3s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -ms-animation: spin 3s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      animation: spin 3s linear infinite;
      /* Chrome, Firefox 16+, IE 10+, Opera */
    }
    #loader:after {
      content: "";
      position: absolute;
      top: 15px;
      left: 15px;
      right: 15px;
      bottom: 15px;
      border-radius: 50%;
      border: 3px solid transparent;
      border-top-color: #FFF;
      /* COLOR 3 */
      -moz-animation: spin 1.5s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -o-animation: spin 1.5s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -ms-animation: spin 1.5s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      -webkit-animation: spin 1.5s linear infinite;
      /* Chrome, Opera 15+, Safari 5+ */
      animation: spin 1.5s linear infinite;
      /* Chrome, Firefox 16+, IE 10+, Opera */
    }
    @-webkit-keyframes spin {
      0% {
        -webkit-transform: rotate(0deg);
        /* Chrome, Opera 15+, Safari 3.1+ */
        -ms-transform: rotate(0deg);
        /* IE 9 */
        transform: rotate(0deg);
        /* Firefox 16+, IE 10+, Opera */
      }
      100% {
        -webkit-transform: rotate(360deg);
        /* Chrome, Opera 15+, Safari 3.1+ */
        -ms-transform: rotate(360deg);
        /* IE 9 */
        transform: rotate(360deg);
        /* Firefox 16+, IE 10+, Opera */
      }
    }
    @keyframes spin {
      0% {
        -webkit-transform: rotate(0deg);
        /* Chrome, Opera 15+, Safari 3.1+ */
        -ms-transform: rotate(0deg);
        /* IE 9 */
        transform: rotate(0deg);
        /* Firefox 16+, IE 10+, Opera */
      }
      100% {
        -webkit-transform: rotate(360deg);
        /* Chrome, Opera 15+, Safari 3.1+ */
        -ms-transform: rotate(360deg);
        /* IE 9 */
        transform: rotate(360deg);
        /* Firefox 16+, IE 10+, Opera */
      }
    }
    #loader-wrapper .loader-section {
      position: fixed;
      top: 0;
      width: 51%;
      height: 100%;
      background: #7171C6;
      /* Old browsers */
      z-index: 1000;
      -webkit-transform: translateX(0);
      /* Chrome, Opera 15+, Safari 3.1+ */
      -ms-transform: translateX(0);
      /* IE 9 */
      transform: translateX(0);
      /* Firefox 16+, IE 10+, Opera */
    }
    #loader-wrapper .loader-section.section-left {
      left: 0;
    }
    #loader-wrapper .loader-section.section-right {
      right: 0;
    }
    /* Loaded */
    .loaded #loader-wrapper .loader-section.section-left {
      -webkit-transform: translateX(-100%);
      /* Chrome, Opera 15+, Safari 3.1+ */
      -ms-transform: translateX(-100%);
      /* IE 9 */
      transform: translateX(-100%);
      /* Firefox 16+, IE 10+, Opera */
      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
    }
    .loaded #loader-wrapper .loader-section.section-right {
      -webkit-transform: translateX(100%);
      /* Chrome, Opera 15+, Safari 3.1+ */
      -ms-transform: translateX(100%);
      /* IE 9 */
      transform: translateX(100%);
      /* Firefox 16+, IE 10+, Opera */
      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
    }
    .loaded #loader {
      opacity: 0;
      -webkit-transition: all 0.3s ease-out;
      transition: all 0.3s ease-out;
    }
    .loaded #loader-wrapper {
      visibility: hidden;
      -webkit-transform: translateY(-100%);
      /* Chrome, Opera 15+, Safari 3.1+ */
      -ms-transform: translateY(-100%);
      /* IE 9 */
      transform: translateY(-100%);
      /* Firefox 16+, IE 10+, Opera */
      -webkit-transition: all 0.3s 1s ease-out;
      transition: all 0.3s 1s ease-out;
    }
    /* JavaScript Turned Off */
    .no-js #loader-wrapper {
      display: none;
    }
    .no-js h1 {
      color: #222222;
    }
    #loader-wrapper .load_title {
      font-family: 'Open Sans';
      color: #FFF;
      font-size: 19px;
      width: 100%;
      text-align: center;
      z-index: 9999999999999;
      position: absolute;
      top: 60%;
      opacity: 1;
      line-height: 30px;
    }
    #loader-wrapper .load_title span {
      font-weight: normal;
      font-style: italic;
      font-size: 13px;
      color: #FFF;
      opacity: 0.5;
    }
  </style>
  </head>
  <body>
      <div id="app">
    <div id="loader-wrapper">
      <div id="loader"></div>
      <div class="loader-section section-left"></div>
      <div class="loader-section section-right"></div>
      <div class="load_title">正在加载 309-admin,请耐心等待
        <br>
        <span>master-tzy</span>
      </div>
    </div>
  </div>
  </body>
</html>

而后看一下后台管理系统的效果图吧!!!!!!❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

登陆页面以下:


 

运行Mobile端的商城和PC端的管理系统时,前提必须是先打开Node+express的本地服务器(后面会说到),否则会报如下错误:


 

首页效果以下:

首页布局其实也是参考了饿了么的Contain布局吧,但又不全是,因此我没有加动态的Tag标签页了,其实也能够实现吧,不过本身用的面包屑也凑合着吧,就懒得换了,当时答辩的前一天晚上,同组的Mr Yang都把代码发给我了,我也没来得及去加,由于当时要加的功能真的还有几个,好比后台没有考虑周到的大可能是没有对数据进行查询,还有对订单没有进行分页,以及订单的按时间查找等等。后来肝到凌晨2点多实在不行了,因此一直没有将面包屑换掉,因此也凑合着用吧。

在这里再连接一个专门用到了饿了么组件中的Tag的动态标签页的小例子吧,虽然很简单,但仍是根据自身须要来决定是否要用到Tag标签页吧。

连接地址 :https://github.com/tzy13755126023/Vue-elementui-demo-Tag


 

这里用到了视图化数据的Echarts中的柱形图和折线图来展现数据,关于Echarts怎么使用这里 也不作详细介绍了吧,直接把官方Api文档地址放这里了,地址以下: https://www.echartsjs.com/api.html#echarts。请自行查看。

我只贴出关于Echarts组件的部分代码。

<template>
    <div class="ECharts1">
    </div>
</template>
<script>
// 引入 ECharts 主模块
var echarts = require('echarts/lib/echarts');
// 引入柱状图
require('echarts/lib/chart/bar');
require("echarts/lib/component/dataset");
// 引入提示框和标题组件
require('echarts/lib/component/tooltip');
require('echarts/lib/component/title');
require("echarts/lib/component/legendScroll");
require("echarts/lib/component/axisPointer");
require("echarts/lib/component/markLine");
export default{
   name:'Echarts1',
   data(){
        return{

        }
   },
   mounted(){
      var myChart = echarts.init(document.querySelector('.ECharts1'))
      myChart.setOption({
        title: {
          text: '2018-2019年各种药物月交易额',
          textStyle:{                  //文字样式
            color:'#000',               //颜色
            fontWeight:700,            //粗细
            fontSize:30,               
            // textBorderColor:'black',  //文字自己的描边颜色。
            textShadowColor:'rgba(255,0,0,.2)', //文字自己的阴影颜色。
            // textShadowBlur :5,      //文字自己的阴影长度。
            // textShadowOffsetX:8,     //文字自己的阴影 X 偏移。
            // textShadowOffsetY:5,      //文字自己的阴影 Y 偏移。
          }
         },
        tooltip : {                 //提示框组件。
        trigger: 'axis',           //触发类型。
           // 可选: 'item'数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
           //        'axis'  坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
        axisPointer : {            // 坐标轴指示器,坐标轴触发有效
            type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
        }
    },
    legend: {   //  图例组件
        data:['中西药品','养生保健','医疗器械','计生用品','中药饮品','美容护肤'],
        right:25,
        top:70,
        // orient:'vertica'  图例列表的布局朝向。可选:'horizontal'    'vertical'
        itemWidth:30,           // 图例的宽度
        itemHeight:20,          // 图例的高度
        textStyle:{
          fontSize:16
        }
    },
    grid: {    //  直角坐标系内绘图网格
        top:150,   
        left: '3%',
        right: '4.5%',
        bottom: '3%',
        containLabel: true
    }, 
    xAxis : [    // grid 中的 x 轴
        {   
            type : 'category',   //类目轴,适用于离散的类目数据,为该类型时必须经过 data 设置类目数据
            data : [
            {
                value: '2018年11月',
                textStyle: {
                    fontSize: 16,
                }
            }, 
            {
                value: '2018年12月',
                textStyle: {
                    fontSize: 16,
                }
            },
            { 
                value: '2019年1月',
                textStyle: {
                    fontSize: 16,
                }
            }, 
            {
                value: '2019年2月',
                textStyle: {
                    fontSize: 16,
                }
            }, 
            {
                value: '2019年3月',
                textStyle: {
                    fontSize: 16,
                }
            }, 
            {
                value: '2019年4月',
                textStyle: {
                    fontSize: 16,
                }
            },
            {
                value: '2019年5月',
                textStyle: {
                    fontSize: 16,
                }
            },]
        }
    ],
    yAxis : [     // grid 中的 Y 轴
        {
            name:'单位(千元)',
            // category
            type : 'value',
            nameTextStyle:{
                fontSize: 16,
            }
        },
    ],
    series : [
        {
            name:'中西药品',
            type:'bar',
            data:[260, 332, 301, 334, 390, 330, 320]
        },
        {
            name:'养生保健',
            type:'bar',
            stack: '广告',
            data:[120, 132, 101, 134, 90, 230, 210]
        },
        {
            name:'医疗器械',
            type:'bar',
            stack: '广告',
            data:[220, 182, 191, 234, 290, 330, 310]
        },
        {
            name:'计生用品',
            type:'bar',
            stack: '广告',
            data:[150, 232, 201, 154, 190, 330, 410],
        },
        {
            name:'中药饮品',
            type:'bar',
            data:[862, 1018, 964, 1026, 1679, 1600, 1570],
            markLine : {
                lineStyle: {
                    normal: {
                        type: 'dashed'
                    }
                },
                data : [
                    [{type : 'min'}, {type : 'max'}]
                ]
            }
        },
        {
            name:'美容护肤',
            type:'bar',
            barWidth : 5,
            stack: '中药饮品',
            data:[620, 732, 701, 734, 1090, 1130, 1120],
            markLine : {
                lineStyle: {
                    normal: {
                        type: 'dashed'
                    }
                },
                data : [
                    [{type : 'min'}, {type : 'max'}]
                ]
            }
        },
    ]
    });
    },

}
</script>
<style scoped>
.ECharts1{
  margin:2% 0;
  width: 50%;
  height: 600px;
  float: left;
  /*background-color: red;*/
}
</style>

 

平台用户管理效果以下:


 

模糊查询是当时在老师指出后临时加的。效果以下:


 

这里的输入框中数据发生变化,则会自动更新获取的数据,每次都会进行分页,分页有两种形式,一种是后台进行分页再传到前台,一种是后台传过来全部的数据交给前台去进行分页,这里用的是第一种,因此配合饿了么组件的Pagination,当时本身以为写得麻烦,pagination中的total总数和分页加载的数据每次都要请求两次,因此若是用第二种方法进行分页的话,则只需请求一次就能够将数据分页展现出来了。(当时本身也没考虑这么多吧,后期可能会进行改进。)

查看待审核商家(这里说明一下,由于Mobile端没有贴申请商家入驻的图,因此这里的待审核的商家数其实是用户提交的申请数):


 

查看已审核商家(经过审核的,能够查看当前商家全部上架的商品,以及发布新的商品):


 

查看唐志远大药房商家的全部上架的商品:


 

发布新的商品:


 

查看用户反馈消息(用户提交的反馈信息将在这个模块中展现):


 

订单管理(二级路由,默认跳转到的是商家代发货页面,并展现当前待发货的数据):


 

查看健康资讯文章(点进去能够看到详细内容):


 

发布健康资讯(后台发布的健康资讯,会在Mobile端展现出来,展现给用户看):


 

当季必备:


 

 

查看登陆日志:


 

关于后台管理这块,权限方面没有作完,由于预想是后台设计两个角色,一个管理员身份,另外一个则是商家的身份,虽然大同小异,可是实际上获取的菜单项却差异很大,商家则只能获取三个,第一,自身的商家信息管理,第二,该商家的订单管理,在你家买的东西确定要你来完成发货了(若是是代理的话,固然能够不用本身发货,咱们组另一个同窗Ms yong 就是作的跟代理有关的,用户即代理其实也没错,符合当下的这种微商模式),第三就是对本身店内的商品进行管理了。这里只写了admin管理员的身份,暂时没有写商家的身份,后期有时间可能会完善。

最后一个就是服务器项目了,用Node+Express+mysql搭的本地服务器。

Express是Node.js上最流行的Web开发框架,咱们能够经过应用生成器工具快速建立一个应用的骨架。

先去了解node下express初始化项目骨架的知识,算了在这里写一下吧,写在这里总以为会好一点(图片用的CSDN的,我没有本身在建项目了~~~~~)。

参考连接:http://www.expressjs.com.cn/starter/generator.html

$ npm install express-generator -g      全局安装 express-generator


 

在当前目录下建立一个命名为myapp的应用(express  你的项目名)

注意:这里express myapp命令默认会使用jade模板引擎,建议使用ejs模板引擎,则应将命令改成express -e myapp


 

而后进入到你建立的项目目录下,安装全部依赖包


 

启动这个应用(Windows平台)


 

而后在浏览器输入localhost:3000/网址就能够看到这个应用了

经过Express应用生成器建立的应用通常具备以下的目录结构


 

解释:

app.js                        启动文件,入口文件

package.json        存储工程的信息及模块依赖,当添加依赖模块时,运行npm install,npm会检查当前目录下的package.json,并自动安装全部指定的模块

node_modules      存放package.json中安装的模块

public                      存放image、css、js文件

routes                    存放路由文件

views                      存放视图文件,或者说是模板文件

bin                          存放可执行文件

固然本项目中多了两个Floder,一个是MySQL,其中放了sql脚本,还有mysqlConfig数据库配置信息等等。

另外一个是Api ,其中是关于Client和Admin的 Api接口方法。

服务器项目目录以下图所示:


 

部分Sql脚本以下所示:


 

309药膳坊-Mobile商城              项目地址:https://github.com/tzy13755126023/309-Client若是以为还不错,请Star一下啦  ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤❤

309药膳坊-Admin后台管理      项目地址:https://github.com/tzy13755126023/309-Admin若是以为还不错,请Star一下啦  ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤❤

309药膳坊-Server服务器端      项目地址:https://github.com/tzy13755126023/309-server若是以为还不错,请Star一下啦  ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤❤      thanks a lot。

Clone到本地后,走下面这个流程吧!!

npm install(npm网速可能比较慢,建议安装淘宝镜像cnpm install)

安装全部的包以后呢,就npm start吧,或者npm run dev 均可以,这个在package.json中的script能够自行设置。可是若是改动了config目录下的配置文件,好比进行代理跨域,或者改变运行端口,则须要从新启动项目。

在运行309药膳坊-Mobile商城 和309药膳坊-Admin后台管理 以前,记得先打开本地服务器。 

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

数据库数据就不放出来了,若是须要数据,联系方式以下:QQ:2938526863    vx:tzy13755126023。 

欢迎Star  欢迎Star  欢迎Star  欢迎Star    ❤❤❤❤❤❤❤❤❤❤ ❤❤❤❤❤❤❤❤❤❤ ❤❤❤❤❤❤❤❤❤❤❤❤❤❤

其实当时老师给个人建议是,你过重感情了,从你的项目名字上来看,就能够看出来,其实眼界能够再高点,不要局限于你的寝室。其实,当时我很想反驳他,可是我没有,也对,四年来确实是室友过于珍贵,可能也和本身参加的活动太少有关吧。如今想一想其实也没那么珍贵吧,由于本就没有不散的宴席,每一个人都是以本身为世界的中心,不强求也不奢求。学习的路还很长,但愿本身一直保持这种学习的状态吧,加油,和看到这篇博文的朋友一块儿共勉。将来你必定会过得很好!! 

欢迎Star  欢迎Star  欢迎Star  欢迎Star  ❤❤❤❤❤❤❤ ❤❤❤❤❤❤❤❤❤❤❤❤❤❤ ❤❤❤❤❤❤❤❤❤❤❤❤❤❤

相关文章
相关标签/搜索