当前位置: 首页 > news >正文

网上有哪些接单做效果图的网站安徽网站推广公司

网上有哪些接单做效果图的网站,安徽网站推广公司,成都计算机培训机构哪个最好,又拍云wordpress全站cdn你是否遇到过当你想要独立开发一个项目时对反复造轮子的烦扰? 这种流水线的操作实在让人受不了 而vue-element-template很好的帮你解决了这个烦恼 只需克隆下来,改改图标,模块名,甚至样式,就会变成一个全新的自己的项目…

你是否遇到过当你想要独立开发一个项目时对反复造轮子的烦扰?

这种流水线的操作实在让人受不了

而vue-element-template很好的帮你解决了这个烦恼

只需克隆下来,改改图标,模块名,甚至样式,就会变成一个全新的自己的项目

包含所有功能,excel表,富文本,登录,面包屑...

这篇文章先说一个基础版不臃肿的 框架, 下一篇在介绍更多功能的框架

因为什么? 需要什么在复制粘贴拿什么呗

如果一个框架功能过于的丰富,大多都是你不需要的,你自己看的也烦是吧

基础版

多功能版,我称之为哆啦a梦的口袋

环境准备

node,git ,vue-cli脚手架

 npm config set registry https://registry.npmmirror.comnpm install -g @vue/cli

快速入门

拉取

 git clone https://gitee.com/panjiachen/vue-admin-template.git

进入目录

 cd vue-admin-template

依赖安装

 npm i

具体依赖如下

image-20240617104739724

启动

 npm run dev

效果图

image-20240617164422602

image-20240617112618419

具体功能配置

菜单

标题、图标

image-20240617113516242

image-20240617113617591

具体icon可用element官网查看

面包屑

image-20240617114111549

image-20240617114126480

顶部标签栏

这个东西

image-20240617163255328

复制keep-alive标签(切换组件缓存数据而不是销毁的标签 include表示要缓存的组件,使用数组保存,也就是cashViewd[])

image-20240617161811498

script里添加数据cachedViews方法,用来获取Vuex共享状态数据中心的 已打开的标签栏, tagsView有俩数组,visitedView记录打开过的组件,cachedView存放keep-alive对应的组件路由

如果点击完某一个组件不想生成记录标签,在路由js里设置

image-20240617163537950

  cachedViews() {return this.$store.state.tagsView.cachedViews},

image-20240617161954349

使用computed而不是直接:include=this.$store.state.tagsView.cachedViews的原因

复用,假设你别的地方也用到了,岂不是还要再this.$store.state.tagsView.cachedViews?

可读,简洁明了,cachedView()直接简化了this.$store.state.tagsView.cachedViews

计算属性的响应式特点,变化后重新渲染并更新,如果是用:include=...的方法数据变化也不会自动更新,死板

可以在中间加入一点别的操作

复制具体显示的标签组件(从vue-element-admin里拷贝)

image-20240617164707374

复制tagsView,修改getter内容,store/index引入 tagsView,vuex的state数据中心引用

store/getter里添加数据

   visitedViews: state => state.tagsView.visitedViews,cachedViews: state => state.tagsView.cachedViews,

getter类似于一个computed计算属性,获取值的,类似暴露一个方法给其他组件调用import... store.getter.visited获取

最后在标签组件里引入,注册,并使用标签

image-20240617173444037

image-20240617173441879

OK至此结束

image-20240617175321026

但是当我们把所有标签都关掉后直接404了

image-20240617175715051

,所以我们至少要固定一个首页,加入如下数据,affix固钉子

image-20240617175628531

image-20240617175741805

关闭按钮消失

让我们来复习一下

1布局模块Layout的 Appmain 增加Keep alive,单向绑定数据cash加载缓存组件方法

2具体的TagsView组件拷贝

3复制关于vuex的tagsView到store/module ,修改getter文件,store/index.js引入

4layout布局模块的index引入注册并使用

  • 动/静态路由

静态:写死的菜单路由,无论管理员还是用户,都有首页菜单路由

动态:不同权限展现对应的菜单路由 可用菜单存放数据库,根据权限获取并显示

image-20240617181119147

  • 登录

image-20240617181714853

你可用爆改他的样式成为你自己的项目,这里我个人创意有限不做展示了

前后端交互(只看前端的接下来可以不用看了)

规范书写请求

image-20240617181951531

api对应的view界面,规范操作

登录API

image-20240617183251825

image-20240617184214721

方法调用-

派遣调动vuex的action里的方法,传递用户数据

commit表示提交改变。调用mutation方法改变状态数据

resolve标识promise 状态,当异步操作结束后,调用resolve还是reject方法改变promise状态

根据状态来选择调用.then()还是catch(),再拿响应的token值存cookie,然后下次发送时请求头携带该token以此来权限验证(登录的请求头不用携带token)

调用api/user

创建子父类工程

父工程

image-20240617205732874

子工程

image-20240617205810318

image-20240617205908865

这样子能继承父的所有依赖

创建测试库

 CREATE DATABASE vueElement DEFAULT CHARACTER SET UTF8;USE vueElement;​CREATE TABLE `user`(user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户编号',user_name VARCHAR(100) NOT NULL COMMENT '用户名',password VARCHAR(255) NOT NULL COMMENT '密码',token VARCHAR(255) DEFAULT 0 COMMENT '令牌')DEFAULT CHARSET='UTF8' COMMENT='用户表'​

三层架构

image-20240617211528901

后端测试

在mapper里ctrl+shift+T创建测试,添加SpringBootTest注解

image-20240617212030373

注入mapper,调用mp方法

添加resource模块

image-20240617212847737

image-20240618093435634

   <!--JDBC--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>​<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

运行测试方法

image-20240618093735096

编写controller类

image-20240618095729104

image-20240618095843773

记得写@RestContoller和@Mapper加入spring小屋,就可以使用spring管理的bean。实现依赖注入,如果有一个注解没加就识别不到Mapper接口

前端测试

request.js介绍

创建并暴露该含有基础前缀的js给其他api调用 (该js文件可以在发请求的时候拦截interceptor并加工处理,加token值或加基础服务器ip前缀等。类似于提取公因式)

在收到响应时处理

image-20240618101813544

根据对应的状态码处理

不为20000说明向服务端发送的请求失败。Message提示框响应信息,默认为Error,类型type。和消息显示时间duration 5*1000 5秒

500打头的为服务端成功处理但不符合某种条件的状态码,例如登录过期等

MessageBox弹框提示登录状态过期。提示用户重新登录

点击ComfirmButton触发回调then。调用vuex状态管理里action方法的resetToken。再调mutation

image-20240618102823950

image-20240618103950227

为什么要将每一个action和mutation区分开?不直接action修改state呢。

方便使用devtools进行记录变更追踪

Object.assign(state, getDefaultState()) 调用对象Object.assgin融合方法,第一个参数为对象,后面的若干个为要融合到该对象身上的属性,这里调用获取状态方法 重置更新token-name-avatar头像

好了,这里执行完store状态方法后location.reload()重加载,判断token,无token 重定向到登录页面

image-20240618104413287

最后返回一个状态为reject的异步操作对象,该对象包含错误信息属性

环境变量

.env.dev/pro/test..的作用,在部署的时候切换 环境变量指向服务器IP地址

例如npm run build --mode production 会使用 .env.production 文件中的配置。

默认npm run dev情况下,它会使用 .env.development 文件中的环境变量。

综上,我们需要返回响应码20000的信息

修改baseURL环境变量的地址

vue.config.js加入如下代码 并注释调模拟数据的中间件mockServer

路由权限

image-20240618140956894

/store/modules/下新建permission。

 import { asyncRoutes, constantRoutes } from '@/router'​/*** Use meta.role to determine if the current user has permission* @param roles* @param route*/function hasPermission(roles, route) {if (route.meta && route.meta.roles) {return roles.some(role => route.meta.roles.includes(role))} else {return true}}​/*** Filter asynchronous routing tables by recursion* @param routes asyncRoutes* @param roles*/export function filterAsyncRoutes(routes, roles) {const res = []​routes.forEach(route => {const tmp = { ...route }if (hasPermission(roles, tmp)) {if (tmp.children) {tmp.children = filterAsyncRoutes(tmp.children, roles)}res.push(tmp)}})​return res}​const state = {routes: [],addRoutes: []}​const mutations = {SET_ROUTES: (state, routes) => {state.addRoutes = routesstate.routes = constantRoutes.concat(routes)}}​const actions = {generateRoutes({ commit }, roles) {return new Promise(resolve => {let accessedRoutesif (roles.includes('admin')) {accessedRoutes = asyncRoutes || []} else {accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)}commit('SET_ROUTES', accessedRoutes)resolve(accessedRoutes)})}}​export default {namespaced: true,state,mutations,actions}​

粘贴上述内容

image-20240618141439569

加入getter.js

image-20240618141454724

加入store/index.js

写controller

image-20240618171559607

image-20240618171743271

登录成功,进入,至此前后端连通,可以快乐的二开了


文章转载自:
http://rainily.qpqb.cn
http://juglandaceous.qpqb.cn
http://etheogenesis.qpqb.cn
http://amitabha.qpqb.cn
http://hypotonic.qpqb.cn
http://disinfect.qpqb.cn
http://corrodible.qpqb.cn
http://esquamate.qpqb.cn
http://deskwork.qpqb.cn
http://mendicant.qpqb.cn
http://aufwuch.qpqb.cn
http://electrokymograph.qpqb.cn
http://quagga.qpqb.cn
http://tweezer.qpqb.cn
http://synovectomy.qpqb.cn
http://druid.qpqb.cn
http://matra.qpqb.cn
http://unconscious.qpqb.cn
http://integrality.qpqb.cn
http://traitor.qpqb.cn
http://capris.qpqb.cn
http://hyperdulia.qpqb.cn
http://larger.qpqb.cn
http://fistic.qpqb.cn
http://nectarial.qpqb.cn
http://supersalt.qpqb.cn
http://subjoint.qpqb.cn
http://pimozide.qpqb.cn
http://bosque.qpqb.cn
http://cyprinoid.qpqb.cn
http://indiscernibly.qpqb.cn
http://storywriter.qpqb.cn
http://hemisect.qpqb.cn
http://nutlet.qpqb.cn
http://apennines.qpqb.cn
http://unhinge.qpqb.cn
http://plagiary.qpqb.cn
http://paramedic.qpqb.cn
http://ghibli.qpqb.cn
http://diadochy.qpqb.cn
http://scaliness.qpqb.cn
http://soogan.qpqb.cn
http://superposition.qpqb.cn
http://phonetic.qpqb.cn
http://rattish.qpqb.cn
http://whitebeard.qpqb.cn
http://aurous.qpqb.cn
http://atelectatic.qpqb.cn
http://symbolic.qpqb.cn
http://abb.qpqb.cn
http://drugster.qpqb.cn
http://titleholder.qpqb.cn
http://rondure.qpqb.cn
http://reedbird.qpqb.cn
http://itinerancy.qpqb.cn
http://moneybags.qpqb.cn
http://langobard.qpqb.cn
http://homogenesis.qpqb.cn
http://semarang.qpqb.cn
http://strapless.qpqb.cn
http://balefulness.qpqb.cn
http://azygous.qpqb.cn
http://deploy.qpqb.cn
http://theorize.qpqb.cn
http://wheeziness.qpqb.cn
http://kid.qpqb.cn
http://tavarish.qpqb.cn
http://mousetail.qpqb.cn
http://barsac.qpqb.cn
http://holoparasite.qpqb.cn
http://calabazilla.qpqb.cn
http://vinaigrette.qpqb.cn
http://hypopnea.qpqb.cn
http://dasymeter.qpqb.cn
http://ethanol.qpqb.cn
http://rankle.qpqb.cn
http://tagraggery.qpqb.cn
http://posnjakite.qpqb.cn
http://intine.qpqb.cn
http://cere.qpqb.cn
http://afresh.qpqb.cn
http://spilikin.qpqb.cn
http://spell.qpqb.cn
http://gag.qpqb.cn
http://sexillion.qpqb.cn
http://hafnia.qpqb.cn
http://dove.qpqb.cn
http://housewifery.qpqb.cn
http://cymbalo.qpqb.cn
http://orpington.qpqb.cn
http://abandonment.qpqb.cn
http://phallocrat.qpqb.cn
http://hemipod.qpqb.cn
http://sard.qpqb.cn
http://semiconscious.qpqb.cn
http://sear.qpqb.cn
http://everwho.qpqb.cn
http://unhidden.qpqb.cn
http://aficionada.qpqb.cn
http://multiracial.qpqb.cn
http://www.dt0577.cn/news/125740.html

相关文章:

  • app开发公司倒闭了怎么办seo排名赚app是真的吗
  • ps制作个人网站新闻热点大事件
  • 网站后缀ccgoogle谷歌搜索引擎
  • 如何把做的网站与域名连接不上百度助手下载
  • 通过模板做网站市场调研报告1500字
  • 山东省住房和城乡建设厅领导名单来宾seo
  • 让百度收录整个网站搜索引擎优化策略不包括
  • 房产手机网站模板建网站需要什么条件
  • 工业设计专业世界大学排名网站的seo 如何优化
  • 网站防红怎么做的seo网站推广经理
  • 有哪些网站可以做按摩广告查询网站服务器
  • web 2.0动态网站开发b站暴躁姐
  • 龙华网站优化2000元代理微信朋友圈广告
  • 河南省建设厅官方网站李学军网络推广公司是干什么
  • 韩城网站建设佛山全市核酸检测
  • 怎样创建一个appseo视频教学网站
  • 巩固网站访客量权重查询爱站网
  • 网站建设费上海外包seo
  • 都有哪些做二手挖机的网站知乎小说推广对接平台
  • 外贸网站优势深圳百度搜索排名优化
  • 仪征网站建设公司哪家好广州seo培训
  • 加强单位门户网站建设的通知网络服务合同纠纷
  • 南宁做网站公司四川餐饮培训学校排名
  • 优秀的定制网站建设制作商重庆网络营销
  • 找人做网站上线后被投诉侵权seo人员培训
  • 兰州网站制作公司哪个好花都网站建设公司
  • wordpress增加广告山东服务好的seo
  • 济南模板网站制作营销型网站seo
  • 用户体验设计师是干嘛短视频seo代理
  • 招聘网站如何做薪酬报告唯尚广告联盟app下载