{"id":15107301,"url":"https://github.com/j-duya/iviewworld","last_synced_at":"2025-10-23T02:31:02.423Z","repository":{"id":36300130,"uuid":"155206580","full_name":"J-DuYa/iviewWorld","owner":"J-DuYa","description":"✅vue后台管理系统（自由编写）","archived":false,"fork":false,"pushed_at":"2022-02-10T15:47:06.000Z","size":3606,"stargazers_count":27,"open_issues_count":7,"forks_count":16,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-30T16:52:40.782Z","etag":null,"topics":["canvas","coder","e2e","echarts","es6","iview","iviewui","javascript","js","node","nodejs","ss","vue","web","website","zoujun"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/J-DuYa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-29T12:16:17.000Z","updated_at":"2024-06-22T16:44:29.000Z","dependencies_parsed_at":"2022-08-08T14:01:49.820Z","dependency_job_id":null,"html_url":"https://github.com/J-DuYa/iviewWorld","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/J-DuYa%2FiviewWorld","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/J-DuYa%2FiviewWorld/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/J-DuYa%2FiviewWorld/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/J-DuYa%2FiviewWorld/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/J-DuYa","download_url":"https://codeload.github.com/J-DuYa/iviewWorld/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237763855,"owners_count":19362310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","coder","e2e","echarts","es6","iview","iviewui","javascript","js","node","nodejs","ss","vue","web","website","zoujun"],"created_at":"2024-09-25T21:22:56.841Z","updated_at":"2025-10-23T02:31:01.771Z","avatar_url":"https://github.com/J-DuYa.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 毒牙的vue代码世界\n\n\u003e 在茫茫人海中，你只给别人杯水般的帮助，对别人来说都是无法比拟的。 谢谢那些帮助过我的好人😝\n\n[![Build Status](https://travis-ci.org/joemccann/dillinger.svg?branch=master)](https://travis-ci.org/joemccann/dillinger)\n\n\u003e 账号: admin 密码: 123456  \n\n可以查看一下另一个项目使用的是vue-antd ui写的 样式觉得还是很okay的，能够适配移动端，地址：https://github.com/dyJunZou/dy-vue-template\n\n### 整体架构\n- vue  前端使用的语言框架\n- ES6  es2015\n- vue-i18n  语言化处理\n- mockJs  mockJs模拟后台接口\n- axios  http请求\n- nprogress 加载页面进度条\n- paper  \n- vuex  管理store\n- vue-router vue路由\n- iview  前端ui框架\n- js-cookie  cookie\n- vue-canvas-effect  canvas动画第三方插件\n- vue-echarts 流程图\n- echart 流程图\n- vue-video-player 视频播放 \n- codemirror 代码编辑器\n- showdown markdom编辑器\n- vue-quill-editor 富文本编辑器\n\n### 实现的功能\n  - 占位卡片封装\n  - 表格样式统一封装\n  - cropper样式封装\n  - 个人信息卡片样式封装\n  - 起始屏幕（页面）封装\n  - 头部信息展示样式封装\n  - ...\n\n## 项目启动\n\n1、 添加依赖\nnpm install\n \n2、 服务默认启动在 localhost:8080(可以在/config/index.js中修改端口号)\nnpm run dev\n\n* 下面是额外的shell命令（了解就行）\n  \u003e 1、对象打包 ---\u003e 根目录 下的dist文件夹 npm run build  \n  \u003e 2、启动unit测试 npm run unit  \n  \u003e 3、启动e2e测试 npm run e2e  \n  \u003e 4、启动所有测试 npm test  \n\n\u003e 我们的目标 ---\u003e 先搞起来，搞起来，起来，来👌   \n\u003e 理想：努力✊，让世界更美好！  \n\n项目图片：\n \u003cp align=\"center\"\u003e\n  \u003cimg width=\"900\" src=\"https://dyJunZou.github.io/iviewWorld/src/assets/images/program/login.png\"\u003e\n \u003c/p\u003e\n  \u003cp align=\"center\"\u003e\n   \u003cimg width=\"900\" src=\"https://dyJunZou.github.io/iviewWorld/src/assets/images/program/basicInfo.png\"\u003e\n  \u003c/p\u003e\n   \u003cp align=\"center\"\u003e\n     \u003cimg width=\"900\" src=\"https://dyJunZou.github.io/iviewWorld/src/assets/images/program/video.png\"\u003e\n   \u003c/p\u003e\n\n### 那河畔中的金柳，是夕阳中的新娘；波光里的艳影，在我心头荡漾。-- 徐志摩《再别康桥》\n\n\u003e 只身一人，默默街头走，身无人，旁无物，只剩无尽暗默，倔强不回头，永远不回首。  \n\n***部分地方講解***  \n```\n    proxyTable: {\n      // 配置代理\n      '/api': {\n        target: '自己後台的地址', // 改成自己的IP地址\n        changeOrigin: true,\n        pathRewrite: {\n          '^/api': '' // 這一步是選擇的 但是最好加一下防止和自己的其他系統接口衝突\n        }\n      }\n    },\n```\n  \n```\n    host: 'localhost', // can be overwritten by process.env.HOST // 要想IP地址訪問要將自己的地址改成自己IP地址\n    port: 8080, //  這裡修改成自己想要的端口號（不要和後台重複）\n```\n\n\u003e 提示   封装的HTTP请求只是初始的状态， 之后需要进一步的封装  封装的http请求的目录在：/src/http/apis.js文件夹下 \n\n\u003e 状态机(初步)\n  \n|状态|状态精灵提示|\n|:---|:---|\n|200|请求成功|\n|403|接口超时|\n|404|未连接到接口|\n|500|服务器跑丢了|\n\nvue具有RESTful模式的路由。\nRESTful作为一种架构风格，是一种设计风格而不是一个标准，只提供了一组设计原则和约束条件，它主要用于客户端和服务器端交互的`桥梁`。基于这种风格设计的应用可以`更简洁、更有层次、更易于`实现缓存等机制。\n### Vue的路由vue-router@3.0+\nvue-router在vue中充当一个非常强大的角色。通过vue-router，vue可以更加方便的进行路由控制。开发者可以通过`vue-router+Vue`实现一个强大的单页面的应用。\n\u003e Vue脚手架搭建项目的指令：`vue init webpack 项目名称`  \n \n 基础路由的构成\n```\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport HelloWorld from '@/components/HelloWorld'\n\nVue.use(Router)\n\nexport default new Router({  //实例化一个路由对象\n  routes: [\n    {\n      path: '/',\n      name: 'HelloWorld',\n      component: HelloWorld\n    }\n  ]\n})\n```\n在它原有的基础上动一下，是的代码更加的简洁\n```\nimport Vue from 'vue'\nimport Router from 'vue-router'\n\nVue.use(Router)\n\nexport default new Router({\n  routes: [\n    {\n      path: '/',\n      name: 'HelloWorld',\n      component: () =\u003e import('@/components/HelloWorld')  // 改变引入的方式，减少引入组件的不便\n    }\n  ]\n})\n```\n当然在很多时候路由都是公用的一个页面可以提供给不同的角色参数使用。\n\n 1. 可以通过组件封装；\n 2. 可以通过路由配置（动态路由）；\n \u003e 动态路由在相同路由之间切换是不会有history的变化所以 浏览器的返回键不会如愿以尝的返回你想返回的页面。\n \n\u003e 动态路由的变化可以通过`watch`监听得到，也可以通过vue-router的beforeRouteUpdate进行监听。\n\u003e \n通过`watch`监听\n```\nconst User = {\n  template: '...',\n  watch: {\n    '$route' (to, from) {\n      // 对路由变化作出响应...\n    }\n  }\n}\n```\n或\n\n通过vue-router的beforeRouteUpdate进行监听\n```\nconst User = {\n  template: '...',\n  beforeRouteUpdate (to, from, next) {\n    // 当路由发生改变...\n    // 不要忘记使用next()\n  }\n}\n```\n\n \n vue-router导航守卫经常用到的情况之一就是：`登录权限验证`和`组件内部内容权限的验证`，只有当用户`满足一定的条件`才能进行`登录`和`进行部分内容的访问和操作`。当然，如果路由route`寻找不到页面`的时候，应用通常需要返回`404页面`以告诉用户当前访问的页面不存在，这样你的应用的用户感知会更加的`好`。\n \n \u003e 通常使用通配符`*`来配置404页面的`访问`，当然通配符必须`配置在所有路由的后面`，以保证路由展示正确。\n\n\u003e 如果要配置500页面，可以使用```$route.push({ path: '500' })```进行访问\n\n### 进阶版导航守卫\n\u003e “导航”表示路由正在发生改变\n\nvue-router总共有三个全局守卫，分别是：`beforeEach`, `beforeResolve`, `afterEach`。\n`beforeEach`:\n```\nconst router = new Router({ ... })\nrouter.beforeEach((to, from, next) =\u003e {\n\t// to 将要进入的页面\n\t// from 即将离开的页面\n\t// next 必须配置的 next(false)路由跳转; next({ path: `跳转路由的path值` })\n\t// TODO\n})\n```\n`beforeResolve`:\n```\nconst router = new Router({...})\nrouter.beforeResolve((to, from, next) =\u003e {\n\t// 跟beforeEach类似\n\t// 区别是在导航被确认之前，同时在所有组件内守卫和异步路由组件被解析之后，解析守卫就被调用。\n})\n```\n`afterEach`:\n```\nconst router = new Router({...})\nrouter.afterEach((to, from) =\u003e {\n\t// to 进入的页面\n\t// from 进入前的页面\n})\n```\n\n### 组件内守卫\n组件内守卫同样也有三个：`beforeRouteEnter`, `beforeRouteUpdate`, `beforeRouteLeave`\n\n* beforeRouteEnter\n```\nexport default {\n\tname: '...',\n\tbeforeRouteEnter(to, from, next) {\n\t\t// 不能使用this， 因为该组件在这时候还没有实例化\n\t}\n}\n```\n* beforeRouteUpdate\n```\nexport default {\n\tname: '...',\n\tbeforeRouteUpdate(to, from, next) {\n\t\t// 能使用this，组件此时已经被实例化 \n\t\t//当前路由被复用的时候调用，例如：/user/:id =\u003e // /user/1 and /user/2\n\t}\n}\n```\n* beforeRouteLeave\n```\nexport default {\n\tname: '...',\n\tbeforeRouteLeave(to, from, next) {\n\t\t// 即将离开当前路由时触发\n\t\t// 能使用this，组件此时已经被实例化 \n\t}\n}\n```\n```\n/**\n--\u003e 导航被触发。\n--\u003e 在失活的组件里调用离开守卫。\n--\u003e 调用全局的 beforeEach 守卫。\n--\u003e 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。\n--\u003e 在路由配置里调用 beforeEnter。\n--\u003e 解析异步路由组件。\n--\u003e 在被激活的组件里调用 beforeRouteEnter。\n--\u003e 调用全局的 beforeResolve 守卫 (2.5+)。\n--\u003e 导航被确认。\n--\u003e 调用全局的 afterEach 钩子。\n--\u003e 触发 DOM 更新。\n--\u003e 用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。\n*/\n```\n\n### 路由过渡\n* transition\n```\n\u003ctransition name=`自己配置值`\u003e // 有`slide`, `fade`等等\n\t\u003crouter-view\u003e\u003c/router-view\u003e\n\u003c/transition\u003e\n```\n\n## vue生命周期（在这个周期内，this都可以调用）\n![在这里插入图片描述](https://img-blog.csdnimg.cn/20190227102933930.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDIzMTE2,size_16,color_FFFFFF,t_70)  \n\n`循序排列` 开始 ---\u003e 结束\n* beforeCreate\n* created\n* beforeMount\n* mounted\n* beforeUpdate\n* updated\n* beforeDestroy\n* destroyed\n\n### 成长\n2019\n\n### 合作人\n\u003e 毒牙\n\n***\u003cspan style=\"color: blue\"\u003e 如果对你\u003cspan style=\"color: red\"\u003e有用\u003c/span\u003e，或者你认为本项目\u003cspan style=\"color: red\"\u003e有所价值\u003c/span\u003e，请为我们的项目点个\u003cspan style=\"color: red\"\u003eStar\u003c/span\u003e\u003c/span\u003e***\n\n@copyright 2019\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj-duya%2Fiviewworld","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fj-duya%2Fiviewworld","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj-duya%2Fiviewworld/lists"}