请贴出完整代码
<template>
<div id="sortlist">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>新增竞品</span>
</div>
<div class="content">
<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="商品相册">
<el-upload
:action="uploadUrl"
list-type="picture-card"
:on-preview="handlePreview"
:on-success="handleSuccess"
:on-remove="handleRemove"
multiple
>
<i class="el-icon-plus"></i>
</el-upload>
<el-checkbox v-model="numberValidateForm.imageUrl[index].main" v-for="(item,index) in numberValidateForm.imageUrl" :key="item.uid" @change="(value)=>{imageMainChange(value, index)}">是否显示为主图</el-checkbox>
<!-- 预览图片 -->
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
</el-form-item>
<el-form-item label="商品" prop="age">
<el-autocomplete
class="inline-input"
v-model="state1"
:fetch-suggestions="querySearch"
placeholder="请输入商品"
@select="handleSelect"
></el-autocomplete>
</el-form-item>
<el-form-item label="企业" prop="age">
<el-autocomplete
class="inline-input"
v-model="state1"
:fetch-suggestions="querySearch"
placeholder="请输入企业"
@select="handleSelect"
></el-autocomplete>
</el-form-item>
<el-form-item
label="品名"
prop="age"
:rules="[
{ required: true, message: '品名不能为空'},
{ type: '', message: '品名必须两个字以上'}
]"
>
<el-input type="age" v-model.number="numberValidateForm.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item
label="货号"
prop="name"
:rules="[
{ required: true, message: '货号不能为空'}
]"
>
<el-input type="name" v-model.number="numberValidateForm.sn" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="用料" prop="age">
<el-input type="age" v-model.number="numberValidateForm.yongliao" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="织造工艺" prop="age">
<el-input class="textarea" type="textarea" v-model.number="numberValidateForm.zhizao" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="染整工艺" prop="age">
<el-input class="textarea" type="textarea" v-model.number="numberValidateForm.ranzheng" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="开机数" prop="age">
<el-input type="age" v-model.number="numberValidateForm.kaiji" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="坯布价" prop="age">
<el-input type="age" v-model.number="numberValidateForm.pibu" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="后整价" prop="age">
<el-input type="age" v-model.number="numberValidateForm.houzheng" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="成本价" prop="age">
<el-input type="age" v-model.number="numberValidateForm.chengben" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="零售价" prop="age">
<el-input type="age" v-model.number="numberValidateForm.lingshou" autocomplete="off"></el-input>
</el-form-item>
<el-form-item>
<div class="box_btn">
<el-button type="primary" size="mini" class="btn">保存</el-button>
<el-button plain size="mini" class="return-btn" @click="jump('/competing/list')">返回</el-button>
</div>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {
//上传到后台的Api接口网址
uploadUrl:axios.defaults.baseURL+"rivalGoods/file/upload",
//激活即列出输入建议
restaurants: [],
state1: '',
state2: '',
//上传图片
dialogImageUrl: '',
dialogVisible: false,
//表单数据
numberValidateForm: {
imageUrl:[],
name: '',
sn:'',
yongliao:'',
zhizao:'',
ranzheng:'',
kaiji:'',
pibu:'',
houzheng:'',
chenggben:'',
lingshou:''
},
};
},
created(){
console.log('99999')
},
mounted() {
//激活即列出输入建议(商品)
this.restaurants = this.loadAll();
},
methods: {
//上传图片
handleRemove(file, fileList) {//移除图片
console.log(file, fileList);
},
handlePreview(file) {//预览图片
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
imageMainChange(value, index){//是否勾选是否显示主图
if(value){
this.numberValidateForm.imageUrl.forEach((item, idx)=>{
if(idx == index){
this.numberValidateForm.imageUrl[idx].main = true
}else{
this.numberValidateForm.imageUrl[idx].main = false
}
})
}
},
handleSuccess(response, file, fileList){//上传图片成功
//重新封装this.numberValidateForm.imageUrl
this.numberValidateForm.imageUrl.push({
uid: file.uid,
url: file.url,
fileId: response.data.id,
main: false
})
},
//激活即列出输入建议(商品)
querySearch(queryString, cb) {
var restaurants = this.restaurants;
var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
// 调用 callback 返回建议列表的数据
cb(results);
},
createFilter(queryString) {
return (restaurant) => {
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
},
loadAll() {
return[
{ "value": "三全鲜食(北新泾店)", "address": "长宁区新渔路144号" },
{ "value": "Hot honey 首尔炸鸡(仙霞路)", "address": "上海市长宁区淞虹路661号" },
{ "value": "新旺角茶餐厅", "address": "上海市普陀区真北路988号创邑金沙谷6号楼113" },
]
},
handleSelect(item) {
console.log(item);
},
}
}
</script>
<style lang="scss" scoped>
#sortlist{
width: 100%;
.el-card{
width: 100%;
}
}
.text {
font-size: 14px;
}
.item {
margin-bottom: 18px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both;
}
.box-card {
width: 480px;
}
::v-deep .ql-container{
height: 600px;
}
//图片上传
.avatar-uploader-icon[data-v-0fb7db25] {
border: 1px dashed #d9d9d9;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
// 底部按钮
.box_btn{
width:100%;
height: 60px;
background: #fff;
position: fixed;
left: 200px;
bottom: 0;
z-index: 10;
}
.btn {
position: fixed;
bottom: 20px;
left: 60%;
}
.return-btn{
position: fixed;
bottom: 20px;
left: 55%;
}
.el-input , .textarea{
width: 40%;
}
</style>
我亲测了一下,你这个页面没问题。是不是你别的地方也引用这个页面了?引用了5次?
<template>
<div class="index">
<el-tabs type="border-card" @tab-click="show_upsPage">
<el-tab-pane label="商品管理">
<div class="mains">
<div class="menu">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#263445"
text-color="#fff"
active-text-color="#ffd04b">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-menu"></i>
<span>商品管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1" @click="jump('/cates/catelist')"><i class="el-icon-s-tools"></i>商品列表</el-menu-item>
</el-menu-item-group>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="el-icon-menu"></i>
<span>分类管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="2-1" @click="jump('/cates/sortlist')"><i class="el-icon-s-tools"></i>品种分类</el-menu-item>
</el-menu-item-group>
<el-menu-item-group>
<el-menu-item index="2-2" @click="jump('/cates/markesort')"><i class="el-icon-s-tools"></i>营销分类</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
<div class="content">
<div class="main">
<router-view></router-view>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="营销管理">
<div class="mains">
<div class="menu">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#263445"
text-color="#fff"
active-text-color="#ffd04b">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-menu"></i>
<span>活动管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1" @click="jump('/markes/list')"><i class="el-icon-s-tools"></i>首页管理</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
<div class="content">
<div class="main">
<router-view></router-view>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="企业管理">
<div class="mains">
<div class="menu">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#263445"
text-color="#fff"
active-text-color="#ffd04b">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-menu"></i>
<span>企业管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1" @click="jump('/company/content')"><i class="el-icon-s-tools"></i>企业介绍</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
<div class="content">
<div class="main">
<router-view></router-view>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="系统管理">
<div class="mains">
<div class="menu">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#263445"
text-color="#fff"
active-text-color="#ffd04b">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-menu"></i>
<span>系统管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1" @click="jump('/system/workers')"><i class="el-icon-s-tools"></i>后台管理</el-menu-item>
</el-menu-item-group>
<el-menu-item-group>
<el-menu-item index="1-2" @click="jump('/system/vip')"><i class="el-icon-s-tools"></i>会员管理</el-menu-item>
</el-menu-item-group>
<el-menu-item-group>
<el-menu-item index="1-3" @click="jump('/system/users')"><i class="el-icon-s-tools"></i>用户管理</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
<div class="content">
<div class="main">
<router-view></router-view>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="竞品管理">
<div class="mains">
<div class="menu">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#263445"
text-color="#fff"
active-text-color="#ffd04b">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-menu"></i>
<span>竞品管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1" @click="jump('/competing/list')"><i class="el-icon-s-tools"></i>竞品列表</el-menu-item>
</el-menu-item-group>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="el-icon-menu"></i>
<span>企业管理</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1" @click="jump('/company/list')"><i class="el-icon-s-tools"></i>企业列表</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
<div class="content">
<div class="main">
<router-view></router-view>
</div>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
// import {getMenuListApi} from "@/api"
export default {
data(){
return{
tabsList:[]
}
},
// created(){
// this.initData();
// },
methods: {
handleOpen(key, keyPath) {
console.log(key, keyPath);
},
handleClose(key, keyPath) {
console.log(key, keyPath);
},
//获取菜单栏接口数据
initData () {
getMenuListApi({
appValue:2
})
.then(res => {
console.log(res.data)
this.tabsList=res.data;
})
},
show_upsPage(e){
console.log('show_upsPage',e)
this.initData(e.$attrs.id);
}
}
}
</script>
我猜下,是不是你模块化,比如template五次,就要调用template内的创建方法5次,或者是前面调用template的页面循环执行了5次,比如v-for里面创建了5次.