vue路径component使用import的方式来写 component: () => import(‘@/views/order/orderDetail‘)

本文介绍了Vue路由懒加载的两种方法,包括普通引入和动态import()语法。懒加载可以提高应用性能,避免一次性加载大量代码导致的延迟。文章详细解释了为何要使用路由懒加载,并提供了实现懒加载的代码示例,有助于优化SPA应用的加载速度和用户体验。

以前老师教的一直是这种写法:

在这里插入图片描述

 工作后突然看到这种写法,我蒙了

在这里插入图片描述

 首先我们先来理解一下,路由文件里面.
path里面其实就是url也就是我们写路径的,我们在网址栏所看到的.
component则是我们所对应的页面组件.每个页面相当于一个组件.所以我们的页面的名字就是组件的名字.

方法一:普通引入方式
所以其实老师教的则是最简单的一种引入组件的方式:

在这里插入图片描述

 我们在component中定义完组件名字,还需要去通过import去引入组件.
这种方法不推荐,因为
优点: 易理解,
缺点:webpack在打包的时候会把整个路由打包成一个js文件,如果页面一多,会导致这个文件非常大,加载缓慢

方法二:使用动态的import( )语法(推荐使用)(路由懒加载)

在这里插入图片描述

 在这里插入图片描述

 而@的写法呢是因为我们vue在webpack.base.conf.js文件中有如下配置

在这里插入图片描述

 1,为什么要是使用vue路由懒加载

vue这种单页面应用,如果我们不去做路由懒加载,打包之后的文件将会异常的大,就会造成进入首页时,需要加载的内容过多,时间过长,会出现长时间的白屏,不利于用户体验,运用懒加载就可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时。


2,如何实现路由懒加载
方法一(ES中的import 推荐使用):

import Vue from 'vue'
import Router from 'vue-router'
const home = ()=>import("@/components/page/home/home")
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: home
    },

方法二:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: resolve=>(require(["@/components/page/home/home"],resolve))
    },

以下代码中,查看订单详情,跳转后,id获取不到: <template> <div class="tabel-search marb-20"> <div class="left" style="display: flex; align-items: center; justify-content: space-between;"> <div class="search-group" style="display: flex; gap: 10px; flex-wrap: wrap;"> <el-select v-model="datas.reportType" placeholder="请选择..." @change="initData" style="min-width: 120px;"> <el-option label="所有类型" :value="-1"></el-option> <el-option label="精选-A" :value="1"></el-option> <el-option label="精选-C" :value="7"></el-option> <el-option label="精选-D" :value="10"></el-option> <el-option label="优选-A" :value="2"></el-option> <el-option label="优选-B" :value="3"></el-option> <el-option label="优选-C" :value="5"></el-option> <el-option label="优选-D" :value="4"></el-option> <el-option label="优选-E" :value="6"></el-option> <el-option label="优选-F" :value="8"></el-option> <el-option label="优选-G" :value="9"></el-option> <el-option label="优选-H" :value="11"></el-option> <el-option label="优选-I" :value="12"></el-option> </el-select> </div> <div style="margin-left:1rem"> <el-select v-model="datas.reportStatus" placeholder="请选择..." @change="initData" style="min-width: 120px;"> <el-option label="所有状态" :value="-1"></el-option> <el-option label="待确认" :value="100"></el-option> <el-option label="待付款" :value="110"></el-option> <el-option label="生成中" :value="120"></el-option> <el-option label="已生效" :value="130"></el-option> <el-option label="已退单" :value="190"></el-option> <el-option label="查询失败" :value="199"></el-option> </el-select> </div> </div> <div class="right" style="display: flex; justify-content: space-between;"> <div style="display: flex; gap: 10px; flex-wrap: wrap;"> <el-input v-model="datas.keyword" placeholder="请输入关健字" @clear="initData" @keyup.enter.native="initData" clearable> <template #append> <el-button :icon="ElIconSearch" @click="initData" /> </template> </el-input> </div> <div style="margin-left:1rem"> <!-- <el-button type="primary" :icon="Download" @click="exportExcel">导出Excel</el-button> --> </div> </div> </div> <div class="order-list"> <el-skeleton :loading="datas.loading" animated> <template #template> </template> <div v-if="datas.listData.length===0" class="nodata"> <span class="text">暂无记录</span> </div> <el-table ref="tableRef" v-loading="datas.loading" :data="datas.listData" stripe class="table-list"> <el-table-column prop="reportNo" label="订单号" min-width="120"></el-table-column> <el-table-column prop="id" label="Id" min-width="120"></el-table-column> <el-table-column label="报告类型" width="120"> <template #default="scope"> <el-tag v-if="scope.row.reportType===1">精选-A</el-tag> <el-tag v-else-if="scope.row.reportType===7">精选-C</el-tag> <el-tag v-else-if="scope.row.reportType===10">精选-D</el-tag> <el-tag v-else-if="scope.row.reportType===2">优选-A</el-tag> <el-tag v-else-if="scope.row.reportType===3">优选-B</el-tag> <el-tag v-else-if="scope.row.reportType===5">优选-C</el-tag> <el-tag v-else-if="scope.row.reportType===4">优选-D</el-tag> <el-tag v-else-if="scope.row.reportType===6">优选-E</el-tag> <el-tag v-else-if="scope.row.reportType===8">优选-F</el-tag> <el-tag v-else-if="scope.row.reportType===9">优选-G</el-tag> <el-tag v-else-if="scope.row.reportType===11">优选-H</el-tag> <el-tag v-else-if="scope.row.reportType===12">优选-I</el-tag> <el-tag v-else type="warning">未知</el-tag> </template> </el-table-column> <el-table-column prop="vin" label="车架号" width="200"></el-table-column> <el-table-column prop="addTime" label="下单时间" width="200"></el-table-column> <el-table-column label="状态" width="120"> <template #default="scope"> <el-tag v-if="scope.row.reportStatus===130" type="success">已生效</el-tag> <el-tag v-else-if="scope.row.reportStatus===100" type="info">待确认</el-tag> <el-tag v-else-if="scope.row.reportStatus===190" type="info">已退单</el-tag> <el-tag v-else-if="scope.row.reportStatus===199" type="info">查询失败</el-tag> <el-tag v-else-if="scope.row.reportStatus===110" type="warning">待付款</el-tag> <el-tag v-else-if="scope.row.reportStatus===120" type="warning">生成中</el-tag> <el-tag v-else type="warning">未知</el-tag> </template> </el-table-column> <el-table-column type="primary" label="查看详情"> <div class="btns"> <el-button type="primary" @click="common.linkUrl(`/account/vinReport/show/${id}`)">查看详情</el-button> </div> </el-table-column> </el-table> </el-skeleton> </div> <div class="pager-box"> <el-pagination background :page-size="datas.pageSize" :current-page="datas.pageIndex" :total="datas.totalCount" layout="prev,pager,next" @current-change="handleCurrentChange" /> </div> </template> <script setup> //获取当前站点信息 const siteConfig = await useSite('site') //页面SEO设置 useSeoMeta({ title: `订单管理 - ${siteConfig.seoKeyword}`, ogTitle: siteConfig.seoKeyword, description: siteConfig.seoDescription, ogDescription: siteConfig.seoDescription, }) //获取路由信息 const route = useRoute() //定义属性 const datas = reactive({ loading: false, keyword: '', totalCount: 0, pageSize: 10, pageIndex: 1, listData: [], reportType: -1, reportStatus: -1, dateRange: [], }) //初始化数据 const initData = async () => { let sendUrl = `/account/vinReport?pageSize=${datas.pageSize}&pageIndex=${datas.pageIndex}` if (datas.reportType >= 0) { sendUrl += `&reportType=${datas.reportType}` } if (datas.reportStatus >= 0) { sendUrl += `&reportStatus=${datas.reportStatus}` } if (datas.keyword.length > 0) { sendUrl += `&keyword=${encodeURI(datas.keyword)}` } if (datas.dateRange.length > 0) { sendUrl += `&startTime=${datas.dateRange[0]}` sendUrl += `&endTime=${datas.dateRange[1]}` } //获取分页列表 useHttp({ url: sendUrl, beforeSend() { datas.loading = true }, success(res) { datas.listData = res.data datas.totalCount = res.pagination.totalCount datas.pageIndex = res.pagination.pageIndex datas.pageSize = res.pagination.pageSize }, error(err) { datas.listData = [] }, complete() { datas.loading = false } }) } //跳转到第几页 const handleCurrentChange = (val) => { if (datas.pageIndex != val) { datas.pageIndex = val initData() } } // //数据导出功能 ------------ // const exportExcel = async () => { // let sendUrl = `/vehicleReport/reports/ExportExcel?reportType=${datas.reportType}` + // `&reportStatus=${datas.reportStatus}` // if (datas.dateRange.length > 0) { // sendUrl += `&startTime=${datas.dateRange[0]}` // sendUrl += `&endTime=${datas.dateRange[1]}` // } // if (datas.keyword.length > 0) { // sendUrl += `&keyword=${encodeURI(datas.keyword)}` // } // //获取分页列表 // await proxy.$api.request({ // url: sendUrl, // responseType: 'blob', // beforeSend() { // datas.loading = true // }, // success(res) { // let exportData = res.data; // // console.log('导出数据', res); // // 获取当前日期时间 // const now = new Date(); // // 获得年月日时分秒 // const datetimeStr = // now.getFullYear() + // (now.getMonth() + 1).toString().padStart(2, '0') + // now.getDate().toString().padStart(2, '0') + // now.getHours().toString().padStart(2, '0') + // now.getMinutes().toString().padStart(2, '0') + // now.getSeconds().toString().padStart(2, '0'); // // 从响应头获取文件名 // let filename = "车辆报告_" + datetimeStr +".xlsx"; // // 创建下载链接 // const url = window.URL.createObjectURL(new Blob([exportData])); // const link = document.createElement('a'); // link.href = url; // link.setAttribute('download', filename); // document.body.appendChild(link); // link.click(); // // 清理 // document.body.removeChild(link); // window.URL.revokeObjectURL(url); // }, // error(err) { // proxy.$message.error('导出失败,请重试!') // }, // complete() { // datas.loading = false // } // }) // } // //数据导出功能 ------------ //页面完成后执行 onMounted(() => { if (route.params.type) { datas.reportType = parseInt(route.params.type) } initData() }) </script>
08-11
Compiled with problems: × ERROR in ./src/views/admin/AdminDashboard.vue?vue&type=template&id=716cc37f&scoped=true (./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/admin/AdminDashboard.vue?vue&type=template&id=716cc37f&scoped=true) Module Error (from ./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js): (Emitted value instead of an instance of Error) Errors compiling template: Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed. 107| ¥{{ scope.row.totalAmount.toFixed(2) }} 108| </template> 109| | 110| <script> | ^^^^^^^^ 111| import AdminDashboardJS from './js/AdminDashboard.js'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 112| | 113| export default { | ^^^^^^^^^^^^^^^^ 114| ...AdminDashboardJS | ^^^^^^^^^^^^^^^^^^^^^ 115| }; | ^^ 116| </script> | ^^^^^^^^^ 117| | 118| <style scoped> | ^^^^^^^^^^^^^^ 119| @import './css/AdminDashboard.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 120| </style> | ^^^^^^^^ Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <style>, as they will not be parsed. 115| }; 116| </script> 117| | 118| <style scoped> | ^^^^^^^^^^^^^^ 119| @import './css/AdminDashboard.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 120| </style> | ^^^^^^^^ tag <el-table-column> has no matching end tag. 103| <el-table :data="latestOrders" style="width: 100%" border size="small"> 104| <el-table-column prop="orderNo" label="订单编号" min-width="180"></el-table-column> 105| <el-table-column prop="totalAmount" label="订单金额" min-width="100"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 106| <template slot-scope="scope"> 107| ¥{{ scope.row.totalAmount.toFixed(2) }} tag <el-table> has no matching end tag. 101| </div> 102| <div class="latest-content"> 103| <el-table :data="latestOrders" style="width: 100%" border size="small"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 104| <el-table-column prop="orderNo" label="订单编号" min-width="180"></el-table-column> 105| <el-table-column prop="totalAmount" label="订单金额" min-width="100"> tag <div> has no matching end tag. 100| <el-link type="primary" @click="viewAllOrders">查看全部 <i class="el-icon-arrow-right"></i></el-link> 101| </div> 102| <div class="latest-content"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 103| <el-table :data="latestOrders" style="width: 100%" border size="small"> 104| <el-table-column prop="orderNo" label="订单编号" min-width="180"></el-table-column> tag <div> has no matching end tag. 95 | <!-- 订单和用户信息区域 --> 96 | <div class="latest-section"> 97 | <div class="latest-card"> | ^^^^^^^^^^^^^^^^^^^^^^^^^ 98 | <div class="latest-header"> 99 | <h3>最新订单信息</h3> tag <div> has no matching end tag. 94 | 95 | <!-- 订单和用户信息区域 --> 96 | <div class="latest-section"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 97 | <div class="latest-card"> 98 | <div class="latest-header"> tag <div> has no matching end tag. 1 | 2 | 3 | <div class="admin-dashboard-container"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | <div class="page-header"> 5 | <h2>仪表盘</h2> ERROR in ./src/views/admin/Marketing.vue?vue&type=template&id=2760991c&scoped=true (./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/admin/Marketing.vue?vue&type=template&id=2760991c&scoped=true) Module Error (from ./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js): (Emitted value instead of an instance of Error) Errors compiling template: Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed. 61 | 62 | </template> 63 | | 64 | <script> | ^^^^^^^^ 65 | import MarketingJS from './js/Marketing.js'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 66 | | 67 | export default { | ^^^^^^^^^^^^^^^^ 68 | ...MarketingJS | ^^^^^^^^^^^^^^^^ 69 | }; | ^^ 70 | </script> | ^^^^^^^^^ 71 | | 72 | <style scoped> | ^^^^^^^^^^^^^^ 73 | @import './css/Marketing.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 74 | </style> | ^^^^^^^^ Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <style>, as they will not be parsed. 69 | }; 70 | </script> 71 | | 72 | <style scoped> | ^^^^^^^^^^^^^^ 73 | @import './css/Marketing.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 74 | </style> | ^^^^^^^^ tag <el-table-column> has no matching end tag. 55 | <el-table :data="couponList" style="width: 100%;" border size="small"> 56 | <el-table-column type="index" width="50" label="序号"></el-table-column> 57 | <el-table-column prop="name" label="优惠券名称" min-width="180"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 58 | <template slot-scope="scope"> 59 | <div class="coupon-name">{{ scope.row.name }}</div> tag <el-table> has no matching end tag. 53 | 54 | <!-- 优惠券列表 --> 55 | <el-table :data="couponList" style="width: 100%;" border size="small"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 56 | <el-table-column type="index" width="50" label="序号"></el-table-column> 57 | <el-table-column prop="name" label="优惠券名称" min-width="180"> tag <div> has no matching end tag. 12 | <!-- 优惠券管理 --> 13 | <el-tab-pane label="优惠券管理" name="coupons"> 14 | <div class="tab-content"> | ^^^^^^^^^^^^^^^^^^^^^^^^^ 15 | <!-- 操作按钮 --> 16 | <div class="action-bar"> tag <el-tab-pane> has no matching end tag. 11 | <el-tabs v-model="activeTab" class="marketing-tabs"> 12 | <!-- 优惠券管理 --> 13 | <el-tab-pane label="优惠券管理" name="coupons"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 14 | <div class="tab-content"> 15 | <!-- 操作按钮 --> tag <el-tabs> has no matching end tag. 9 | <div class="content-card"> 10 | <!-- 选项卡 --> 11 | <el-tabs v-model="activeTab" class="marketing-tabs"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 12 | <!-- 优惠券管理 --> 13 | <el-tab-pane label="优惠券管理" name="coupons"> tag <div> has no matching end tag. 7 | </div> 8 | 9 | <div class="content-card"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^ 10 | <!-- 选项卡 --> 11 | <el-tabs v-model="activeTab" class="marketing-tabs"> tag <div> has no matching end tag. 1 | 2 | 3 | <div class="admin-marketing-container"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | <div class="page-header"> 5 | <h2>营销管理</h2> ERROR in ./src/views/admin/OrdersList.vue?vue&type=template&id=d6917ac6 (./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/admin/OrdersList.vue?vue&type=template&id=d6917ac6) Module Error (from ./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js): (Emitted value instead of an instance of Error) Errors compiling template: tag <el-button> has no matching end tag. 114| {{ scope.row.orderStatus === 'WAIT_PAY' ? '催付' : '发货' }} 115| </el-button> 116| <el-button size="small" type="danger" @click="cancelOrder(scope.row)" | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 117| v-if="scope.row.orderStatus === 'WAIT_PAY'">取消订单</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 118| </template> tag <el-button> has no matching end tag. 109| <el-table-column label="操作" min-width="180" fixed="right"> 110| <template slot-scope="scope"> 111| <el-button size="small" @click="viewOrderDetail(scope.row.orderNo)">查看详情</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 112| <el-button size="small" type="primary" @click="processOrder(scope.row)" 113| v-if="scope.row.orderStatus === 'WAIT_PAY' || scope.row.orderStatus === 'WAIT_SHIP'"> tag <el-button> has no matching end tag. 138| <span class="selected-count">已选择 {{ selectedOrders.length }} 条订单</span> 139| <el-button size="small" type="danger" @click="batchCancelOrders">批量取消</el按钮> 140| <el-button size="small" type="primary" @click="batchExportOrders">批量导出</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 141| </div> 142| </div> tag <el-button> has no matching end tag. 137| <div class="batch-operations" v-if="selectedOrders.length > 0"> 138| <span class="selected-count">已选择 {{ selectedOrders.length }} 条订单</span> 139| <el-button size="small" type="danger" @click="batchCancelOrders">批量取消</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 140| <el-button size="small" type="primary" @click="batchExportOrders">批量导出</el按钮> 141| </div> tag <el-input> has no matching end tag. 158| </el-form-item> 159| <el-form-item label="物流单号" prop="trackingNumber"> 160| <el-input v-model="shipForm.trackingNumber" placeholder="请输入物流单号"></el输入> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 161| </el-form-item> 162| <el-form-item label="发货备注"> tag <el-input> has no matching end tag. 161| </el-form-item> 162| <el-form-item label="发货备注"> 163| <el-input v-model="shipForm.remark" type="textarea" placeholder="可输入发货说明" :rows="3"></el输入> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 164| </el-form项> 165| </el-form> tag <el-form-item> has no matching end tag. 160| <el-input v-model="shipForm.trackingNumber" placeholder="请输入物流单号"></el输入> 161| </el-form-item> 162| <el-form-item label="发货备注"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 163| <el-input v-model="shipForm.remark" type="textarea" placeholder="可输入发货说明" :rows="3"></el输入> 164| </el-form项> tag <el-button> has no matching end tag. 166| <div slot="footer" class="dialog-footer"> 167| <el-button @click="shipDialogVisible = false">取消</el按钮> 168| <el-button type="primary" @click="submitShipment">确认发货</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 169| </div> 170| </el-dialog> tag <el-button> has no matching end tag. 165| </el-form> 166| <div slot="footer" class="dialog-footer"> 167| <el-button @click="shipDialogVisible = false">取消</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 168| <el-button type="primary" @click="submitShipment">确认发货</el按钮> 169| </div> Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead. 143| 144| <!-- 发货对话框 --> 145| <el-dialog title="订单发货" :visible.sync="shipDialogVisible" width="500px"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 146| <el-form :model="shipForm" :rules="shipFormRules" ref="shipForm" label-width="100px"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 147| <el-form-item label="订单编号"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 148| <el-input v-model="shipForm.orderNo" disabled></el-input> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 149| </el-form-item> | ^^^^^^^^^^^^^^^^^^^^^ 150| <el-form-item label="物流公司" prop="shippingCompany"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 151| <el-select v-model="shipForm.shippingCompany" placeholder="请选择物流公司"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 152| <el-option label="顺丰速运" value="SF"></el-option> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 153| <el-option label="圆通速递" value="YT"></el-option> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 154| <el-option label="中通快递" value="ZT"></el-option> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 155| <el-option label="申通快递" value="ST"></el-option> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 156| <el-option label="京东物流" value="JD"></el-option> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 157| </el-select> | ^^^^^^^^^^^^^^^^^^^^ 158| </el-form-item> | ^^^^^^^^^^^^^^^^^^^^^ 159| <el-form-item label="物流单号" prop="trackingNumber"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 160| <el-input v-model="shipForm.trackingNumber" placeholder="请输入物流单号"></el输入> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 161| </el-form-item> | ^^^^^^^^^^^^^^^^^^^^^ 162| <el-form-item label="发货备注"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 163| <el-input v-model="shipForm.remark" type="textarea" placeholder="可输入发货说明" :rows="3"></el输入> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 164| </el-form项> | ^^^^^^^^^^^^^^^^^ 165| </el-form> | ^^^^^^^^^^^^^^ 166| <div slot="footer" class="dialog-footer"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 167| <el-button @click="shipDialogVisible = false">取消</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 168| <el-button type="primary" @click="submitShipment">确认发货</el按钮> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 169| </div> | ^^^^^^^^^^ 170| </el-dialog> | ^^^^^^^^^^^^^^ 171| </div> | ^^^^^^ ERROR in ./src/views/admin/ProductsList.vue?vue&type=template&id=06c7319c (./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/admin/ProductsList.vue?vue&type=template&id=06c7319c) Module Error (from ./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js): (Emitted value instead of an instance of Error) Errors compiling template: Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed. 101| 102| </template> 103| | 104| <script> | ^^^^^^^^ 105| import ProductsListJS from './js/ProductsList.js' | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 106| | 107| export default { | ^^^^^^^^^^^^^^^^ 108| ...ProductsListJS | ^^^^^^^^^^^^^^^^^^^ 109| } | ^ 110| </script> | ^^^^^^^^^ 111| | 112| <style scoped> | ^^^^^^^^^^^^^^ 113| @import './css/ProductsList.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 114| </style> | ^^^^^^^^ Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <style>, as they will not be parsed. 109| } 110| </script> 111| | 112| <style scoped> | ^^^^^^^^^^^^^^ 113| @import './css/ProductsList.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 114| </style> | ^^^^^^^^ tag <el-table-column> has no matching end tag. 94 | <el-table-column type="selection" width="55"></el-table-column> 95 | <el-table-column prop="id" label="商品ID" width="100"></el-table-column> 96 | <el-table-column label="商品图片" width="80"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 97 | <template slot-scope="scope"> 98 | <el-image :src="scope.row.mainImage" :preview-src-list="[scope.row.mainImage]" tag <el-table> has no matching end tag. 89 | <!-- 商品列表表格 --> 90 | <div class="table-section"> 91 | <el-table :data="productsData" style="width: 100%" stripe border | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 92 | @selection-change="handleSelectionChange" | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 93 | @row-click="handleRowClick"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tag <div> has no matching end tag. 88 | 89 | <!-- 商品列表表格 --> 90 | <div class="table-section"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 91 | <el-table :data="productsData" style="width: 100%" stripe border 92 | @selection-change="handleSelectionChange" tag <div> has no matching end tag. 7 | </div> 8 | 9 | <div class="content-card"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^ 10 | <!-- 操作按钮栏 --> 11 | <div class="action-bar"> tag <div> has no matching end tag. 1 | 2 | 3 | <div class="admin-products-container"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | <div class="page-header"> 5 | <h2>商品管理</h2> ERROR in ./src/views/admin/UsersList.vue?vue&type=template&id=2e29edbc (./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/views/admin/UsersList.vue?vue&type=template&id=2e29edbc) Module Error (from ./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js): (Emitted value instead of an instance of Error) Errors compiling template: Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed. 102| 103| </template> 104| | 105| <script> | ^^^^^^^^ 106| import UsersListJS from './js/UsersList.js'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 107| | 108| export default { | ^^^^^^^^^^^^^^^^ 109| ...UsersListJS | ^^^^^^^^^^^^^^^^ 110| }; | ^^ 111| </script> | ^^^^^^^^^ 112| | 113| <style scoped> | ^^^^^^^^^^^^^^ 114| @import './css/UsersList.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 115| </style> | ^^^^^^^^ Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <style>, as they will not be parsed. 110| }; 111| </script> 112| | 113| <style scoped> | ^^^^^^^^^^^^^^ 114| @import './css/UsersList.css'; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 115| </style> | ^^^^^^^^ tag <el-table-column> has no matching end tag. 93 | <el-table-column type="selection" width="55"></el-table-column> 94 | <el-table-column prop="id" label="用户ID" width="100"></el-table-column> 95 | <el-table-column label="头像" width="80"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 96 | <template slot-scope="scope"> 97 | <el-avatar :src="scope.row.avatar" tag <el-table> has no matching end tag. 88 | <!-- 用户列表表格 --> 89 | <div class="table-section"> 90 | <el-table :data="usersData" style="width: 100%" stripe border | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 91 | @selection-change="handleSelectionChange" | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 92 | @row-click="handleRowClick"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tag <div> has no matching end tag. 87 | 88 | <!-- 用户列表表格 --> 89 | <div class="table-section"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 90 | <el-table :data="usersData" style="width: 100%" stripe border 91 | @selection-change="handleSelectionChange" tag <div> has no matching end tag. 7 | </div> 8 | 9 | <div class="content-card"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^ 10 | <!-- 操作按钮栏 --> 11 | <div class="action-bar"> tag <div> has no matching end tag. 1 | 2 | 3 | <div class="admin-users-container"> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | <div class="page-header"> 5 | <h2>用户管理</h2> ERROR [eslint] C:\Users\Lenovo\Desktop\电子商务平台系统\ecommerce-project\frontend\src\views\FAQ.vue 54:33 error 'index' is defined but never used vue/no-unused-vars C:\Users\Lenovo\Desktop\电子商务平台系统\ecommerce-project\frontend\src\views\admin\Marketing.vue 146:105 error Parsing error: x-invalid-end-tag vue/no-parsing-error 147:140 error Parsing error: x-invalid-end-tag vue/no-parsing-error 148:140 error Parsing error: x-invalid-end-tag vue/no-parsing-error 166:15 error Parsing error: x-invalid-end-tag vue/no-parsing-error 196:98 error Parsing error: x-invalid-end-tag vue/no-parsing-error 201:15 error Parsing error: x-invalid-end-tag vue/no-parsing-error 213:70 error Parsing error: x-invalid-end-tag vue/no-parsing-error 228:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 238:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 244:93 error Parsing error: x-invalid-end-tag vue/no-parsing-error 252:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 260:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 264:63 error Parsing error: x-invalid-end-tag vue/no-parsing-error 273:72 error Parsing error: x-invalid-end-tag vue/no-parsing-error 282:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 292:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 299:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 309:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 326:96 error Parsing error: x-invalid-end-tag vue/no-parsing-error 328:86 error Parsing error: x-invalid-end-tag vue/no-parsing-error 330:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 338:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 341:62 error Parsing error: x-invalid-end-tag vue/no-parsing-error 342:66 error Parsing error: x-invalid-end-tag vue/no-parsing-error 351:66 error Parsing error: x-invalid-end-tag vue/no-parsing-error 352:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 359:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 371:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 373:70 error Parsing error: x-invalid-end-tag vue/no-parsing-error 374:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 384:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 387:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 395:9 error Parsing error: x-invalid-end-tag vue/no-parsing-error 398:55 error Parsing error: x-invalid-end-tag vue/no-parsing-error 399:59 error Parsing error: x-invalid-end-tag vue/no-parsing-error C:\Users\Lenovo\Desktop\电子商务平台系统\ecommerce-project\frontend\src\views\admin\OrderDetail.vue 91:15 error 'orderId' is assigned a value but never used no-unused-vars C:\Users\Lenovo\Desktop\电子商务平台系统\ecommerce-project\frontend\src\views\admin\OrdersList.vue 279:0 error Parsing error: Unexpected token 104 | } 105 | return map든 > 106 | | ^ C:\Users\Lenovo\Desktop\电子商务平台系统\ecommerce-project\frontend\src\views\user\js\FAQ.js 104:28 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins ✖ 39 problems (39 errors, 0 warnings)
最新发布
11-12
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值