• vue(32) : win10创建vue2基础前端框架


    • vue2
    • element-ui
    • axios

    接口调用示例

    1.创建vue2项目

    开发工具为HBuilderX 3.7.3

    1.1.新建项目

    1.2.普通项目-vue项目(2.6.10)

    等待创建项目

    2.安装element-ui组件

    2.1右键左下角开始图标

     2.2.cd进入项目目录,执行安装element-ui

    npm i element-ui -S

    2.3.main.js引入配置

    1. import {
    2. Pagination,
    3. Dialog,
    4. Autocomplete,
    5. Dropdown,
    6. DropdownMenu,
    7. DropdownItem,
    8. Menu,
    9. Submenu,
    10. MenuItem,
    11. MenuItemGroup,
    12. Input,
    13. InputNumber,
    14. Radio,
    15. RadioGroup,
    16. RadioButton,
    17. Checkbox,
    18. CheckboxButton,
    19. CheckboxGroup,
    20. Switch,
    21. Select,
    22. Option,
    23. OptionGroup,
    24. Button,
    25. ButtonGroup,
    26. Table,
    27. TableColumn,
    28. DatePicker,
    29. TimeSelect,
    30. TimePicker,
    31. Popover,
    32. Tooltip,
    33. Breadcrumb,
    34. BreadcrumbItem,
    35. Form,
    36. FormItem,
    37. Tabs,
    38. TabPane,
    39. Tag,
    40. Tree,
    41. Alert,
    42. Slider,
    43. Icon,
    44. Row,
    45. Col,
    46. Upload,
    47. Progress,
    48. Spinner,
    49. Badge,
    50. Card,
    51. Rate,
    52. Steps,
    53. Step,
    54. Carousel,
    55. CarouselItem,
    56. Collapse,
    57. CollapseItem,
    58. Cascader,
    59. ColorPicker,
    60. Transfer,
    61. Container,
    62. Header,
    63. Aside,
    64. Main,
    65. Footer,
    66. Timeline,
    67. TimelineItem,
    68. Link,
    69. Divider,
    70. Image,
    71. Calendar,
    72. Backtop,
    73. PageHeader,
    74. CascaderPanel,
    75. Loading,
    76. MessageBox,
    77. Message,
    78. Notification
    79. } from 'element-ui';
    80. Vue.use(Pagination);
    81. Vue.use(Dialog);
    82. Vue.use(Autocomplete);
    83. Vue.use(Dropdown);
    84. Vue.use(DropdownMenu);
    85. Vue.use(DropdownItem);
    86. Vue.use(Menu);
    87. Vue.use(Submenu);
    88. Vue.use(MenuItem);
    89. Vue.use(MenuItemGroup);
    90. Vue.use(Input);
    91. Vue.use(InputNumber);
    92. Vue.use(Radio);
    93. Vue.use(RadioGroup);
    94. Vue.use(RadioButton);
    95. Vue.use(Checkbox);
    96. Vue.use(CheckboxButton);
    97. Vue.use(CheckboxGroup);
    98. Vue.use(Switch);
    99. Vue.use(Select);
    100. Vue.use(Option);
    101. Vue.use(OptionGroup);
    102. Vue.use(Button);
    103. Vue.use(ButtonGroup);
    104. Vue.use(Table);
    105. Vue.use(TableColumn);
    106. Vue.use(DatePicker);
    107. Vue.use(TimeSelect);
    108. Vue.use(TimePicker);
    109. Vue.use(Popover);
    110. Vue.use(Tooltip);
    111. Vue.use(Breadcrumb);
    112. Vue.use(BreadcrumbItem);
    113. Vue.use(Form);
    114. Vue.use(FormItem);
    115. Vue.use(Tabs);
    116. Vue.use(TabPane);
    117. Vue.use(Tag);
    118. Vue.use(Tree);
    119. Vue.use(Alert);
    120. Vue.use(Slider);
    121. Vue.use(Icon);
    122. Vue.use(Row);
    123. Vue.use(Col);
    124. Vue.use(Upload);
    125. Vue.use(Progress);
    126. Vue.use(Spinner);
    127. Vue.use(Badge);
    128. Vue.use(Card);
    129. Vue.use(Rate);
    130. Vue.use(Steps);
    131. Vue.use(Step);
    132. Vue.use(Carousel);
    133. Vue.use(CarouselItem);
    134. Vue.use(Collapse);
    135. Vue.use(CollapseItem);
    136. Vue.use(Cascader);
    137. Vue.use(ColorPicker);
    138. Vue.use(Transfer);
    139. Vue.use(Container);
    140. Vue.use(Header);
    141. Vue.use(Aside);
    142. Vue.use(Main);
    143. Vue.use(Footer);
    144. Vue.use(Timeline);
    145. Vue.use(TimelineItem);
    146. Vue.use(Link);
    147. Vue.use(Divider);
    148. Vue.use(Image);
    149. Vue.use(Calendar);
    150. Vue.use(Backtop);
    151. Vue.use(PageHeader);
    152. Vue.use(CascaderPanel);
    153. Vue.use(Loading.directive);
    154. import axios from 'axios';
    155. Vue.prototype.$loading = Loading.service;
    156. Vue.prototype.$msgbox = MessageBox;
    157. Vue.prototype.$alert = MessageBox.alert;
    158. Vue.prototype.$confirm = MessageBox.confirm;
    159. Vue.prototype.$prompt = MessageBox.prompt;
    160. Vue.prototype.$notify = Notification;
    161. Vue.prototype.$message = Message;
    162. import 'element-ui/lib/theme-chalk/index.css';

    3.安装axios

    3.1.npm安装axios

    npm install --save axios

    3.2.项目根目录创建[vue.config.js]文件, 内容如下

    1. 'use strict'
    2. const path = require('path')
    3. function resolve(dir) {
    4. return path.join(__dirname, dir)
    5. }
    6. const port = process.env.port || process.env.npm_config_port || 9527 // dev port
    7. const name = '测试' // page title
    8. // All configuration item explanations can be find in https://cli.vuejs.org/config/
    9. module.exports = {
    10. /**
    11. * You will need to set publicPath if you plan to deploy your site under a sub path,
    12. * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
    13. * then publicPath should be set to "/bar/".
    14. * In most cases please use '/' !!!
    15. * Detail: https://cli.vuejs.org/config/#publicpath
    16. */
    17. publicPath: '/',
    18. outputDir: 'dist',
    19. assetsDir: 'static',
    20. lintOnSave: process.env.NODE_ENV === 'development',
    21. productionSourceMap: false,
    22. devServer: {
    23. port: port,
    24. open: true,
    25. overlay: {
    26. warnings: false,
    27. errors: true
    28. },
    29. proxy: {
    30. // 代理test开头的uri
    31. '/test': {
    32. target: 'http://127.0.0.1:33001', // 后端地址
    33. // target: 'localhost:8080/manage', // 原始地址
    34. changeOrigin: true, // 开启代理,在本地创建一个虚拟服务端
    35. pathRewrite: {
    36. '^/test': 'test'
    37. }
    38. }
    39. }
    40. //before: require('./mock/mock-server.js')
    41. },
    42. configureWebpack: {
    43. // provide the app's title in webpack's name field, so that
    44. // it can be accessed in index.html to inject the correct title.
    45. name: name,
    46. resolve: {
    47. alias: {
    48. '@': resolve('src')
    49. }
    50. }
    51. },
    52. chainWebpack(config) {
    53. // it can improve the speed of the first screen, it is recommended to turn on preload
    54. // it can improve the speed of the first screen, it is recommended to turn on preload
    55. config.plugin('preload').tap(() => [
    56. {
    57. rel: 'preload',
    58. // to ignore runtime.js
    59. // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
    60. fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
    61. include: 'initial'
    62. }
    63. ])
    64. // when there are many pages, it will cause too many meaningless requests
    65. config.plugins.delete('prefetch')
    66. // set svg-sprite-loader
    67. config.module
    68. .rule('svg')
    69. .exclude.add(resolve('src/icons'))
    70. .end()
    71. config.module
    72. .rule('icons')
    73. .test(/\.svg$/)
    74. .include.add(resolve('src/icons'))
    75. .end()
    76. .use('svg-sprite-loader')
    77. .loader('svg-sprite-loader')
    78. .options({
    79. symbolId: 'icon-[name]'
    80. })
    81. .end()
    82. }
    83. }

    代理后端配置如下, 三个test改成相同的uri前缀即可, uri该签注会代理到后端

    proxy: {
          // 代理test开头的uri
          '/test': {
            target: 'http://192.168.1.1:8080', // 后端地址
            changeOrigin: true, // 开启代理,在本地创建一个虚拟服务端
            pathRewrite: {
              '^/test': '/test'
            }
          }
        }

     3.3.src下创建util目录, util文件夹下创建request.js, 内容如下

    const res = response.data

    这个需要根据后端接口格式修改

    1. /*引入axios*/
    2. import axios from 'axios'
    3. import {
    4. MessageBox,
    5. Message
    6. } from 'element-ui'
    7. const request = axios.create({
    8. baseURL: '', // 基础路径,将统一的部分全部封装
    9. withCredentials: true // 表示请求可以携带cookie
    10. })
    11. axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    12. // response interceptor
    13. request.interceptors.response.use(
    14. /**
    15. * If you want to get http information such as headers or status
    16. * Please return response => response
    17. */
    18. /**
    19. * Determine the request status by custom code
    20. * Here is just an example
    21. * You can also judge the status by HTTP Status Code
    22. */
    23. response => {
    24. const res = response.data
    25. // if the custom code is not 20000, it is judged as an error.
    26. if (res.errCode !== 0) {
    27. Message({
    28. message: res.errMessage || 'Error',
    29. type: 'error',
    30. duration: 3 * 1000
    31. })
    32. // return Promise.reject(new Error(res.message || 'Error'))
    33. return null
    34. } else {
    35. return res
    36. }
    37. },
    38. error => {
    39. console.log('err' + error) // for debug
    40. Message({
    41. message: error.message,
    42. type: 'error',
    43. duration: 5 * 1000
    44. })
    45. return Promise.reject(error)
    46. }
    47. )
    48. //前端采用export.default,在写后端代码时用module.export
    49. export default request

    4.创建测试调用http

    4.1.src下创建api目录, api下创建test.js, 内容如下

    1. import request from '@/util/request'
    2. export function test() {
    3. return request({
    4. url: '/test/2',
    5. method: 'get'
    6. })
    7. }

    4.2. App.vue替换

    4.3.后台接口需要返回以下内容

    接口地址为 : http://127.0.0.1:33001/test/2

    1. @GetMapping("/test/2")
    2. public Object test2() {
    3. Map res = new HashMap<>();
    4. res.put("code", 200);
    5. res.put("errCode", 0);
    6. res.put("errMessage", "测试错误");
    7. res.put("msg", "SUCCESS");
    8. return res;
    9. }

    内容如下

    {
    "msg": "SUCCESS",
    "code": 200,
    "errCode": 0,
    "errMessage": "测试错误"

    5.启动

    npm run serve

    6.编译

    npm run build

    7.部署

    dist里面的文件放到nginx目录下

    nginx.conf添加以下配置

    1. location /test {
    2. proxy_pass http://127.0.0.1:33001;
    3. proxy_set_header X-Forwarded-Proto $scheme;
    4. proxy_set_header Host $http_host;
    5. proxy_set_header X-Real-IP $remote_addr;
    6. }

    可以参考 :VUE(5) : vue-element-admin[5] : 打包及nginx部署_使用nginx部署vue-element-admin项目-CSDN博客

  • 相关阅读:
    双目项目实战---测距(获取三维坐标和深度信息)
    NLP模型笔记2022-18:GCN/GNN模型在nlp中的使用【论文+源码】
    交换排序详讲:冒泡排序+快速排序(多方法+思路+图解+代码)
    Android Aidl跨进程通讯(四)--接口回调,服务端向客户端发送数据
    暴力递归转动态规划(九)
    即时通讯开发之Netty的退出机制和原理
    机器学习笔记 - Ocr识别中的文本检测EAST网络概述
    浅谈虚拟地址转换成物理地址(值得收藏)
    华为机试 - 处理器问题
    记一次bat执行报:‘xxx’不是内部或外部命令,也不是可运行的程序或批处理文件。
  • 原文地址:https://blog.csdn.net/Lxinccode/article/details/134171791