vue element 三级联动

Hbulid代码


景点列表




按风格:
<el-button @click=“fg(1)” size=“mini”>海滨风光
<el-button @click=“fg(2)” size=“mini”>名山胜水
<el-button @click=“fg(3)” size=“mini”>人文景观
<el-button @click=“fg(4)” size=“mini”>都市田园
<el-button @click=“fg(5)” size=“mini”>其他
<el-button @click=“fg(0)” size=“mini”>全部
按风格:
<el-button @click=“dj(‘AAAAA’)” size=“mini”>5A
<el-button @click=“dj(‘AAAA’)” size=“mini”>4A
<el-button @click=“dj(‘AAA’)” size=“mini”>3A
<el-button @click=“dj(‘AA’)” size=“mini”>2A
<el-button @click=“dj(‘A’)” size=“mini”>1A
<el-button @click=“dj(’’)” size=“mini”>全部

				<div class="diqu">按地区:
					<el-button @click="dq(230)" size="mini">山西</el-button>
					<el-button @click="dq(2425)" size="mini">三亚</el-button>
					<el-button @click="dq(372)" size="mini">内蒙古</el-button>
					<el-button @click="dq(2978)" size="mini">西藏</el-button>
					<el-button @click="dq(3063)" size="mini">陕西</el-button>
					<el-button @click="dq(0)" size="mini">全部</el-button>
					
				</div>
			</el-header>
	        <el-main>
				<el-row align="middle">
					<el-col :span="6" v-for="scenic in tableData">
						 <el-card :body-style="{ padding: '0px' }">
							<el-upload class="avatar-uploader" action="http://localhost:91/upload" :show-file-list="false" :on-success="handleAvatarSuccess">
								<img v-if="scenic.pic" :src="scenic.pic" class="avatar">
								<i v-else class="el-icon-plus avatar-uploader-icon"></i>
							</el-upload>
						    <div style="padding: 14px;">
						        <span>{{scenic.name}}</span>&nbsp;&nbsp;<span style="color: red;">{{scenic.level}}</span><br />
								<span>{{scenic.tname}}</span><br />
								<span>{{scenic.pname}}{{scenic.cname}}{{scenic.dname}}</span><br />
								<span>门票:{{scenic.ticket}}元/人</span><br />
						        <div class="bottom clearfix">
						          <el-button type="primary" size="mini" icon="el-icon-detail" @click="openDetilDialog(scenic)">详情</el-button>
						          <el-button type="info" size="mini" icon="el-icon-edit-outline" @click="openEditDialog(scenic)">修改</el-button>
						          <el-button type="danger" size="mini" icon="el-icon-remove" @click="removeScenic(scenic.id)">删除</el-button>
						        </div>
						      </div>
						    </el-card>
					</el-col>
				</el-row>
				<!-- <el-row>
					<el-col :span="24">
						 <el-pagination
						      @size-change="handleSizeChange"
						      @current-change="handleCurrentChange"
						      :current-page="currentPage4"
						      :page-sizes="[100, 200, 300, 400]"
						      :page-size="100"
						      layout="total, sizes, prev, pager, next, jumper"
						      :total="400">
						    </el-pagination>
					</el-col>
				</el-row> -->
				<!--行-->
				<el-row>
					<el-col :span="3">
						<el-button type="success" icon="el-icon-circle-plus-outline" @click="openInsertScenicDialog">添加景点</el-button>
					</el-col>
					<el-col :span="3">
						<el-button type="danger" icon="el-icon-remove-outline" @click="removeScenics">批量删除</el-button>
					</el-col>
					<!--24  6  12  6-->
					<el-col :span="18">
						<el-pagination @current-change="handlecurrentChange" @size-change="handlesizeChange" layout="sizes,prev,pager,next,jumper,->,total"
						 :page-sizes="pageSizes" :total="total" :current-page="current" :page-size="pageSize" background></el-pagination>
					</el-col>
				</el-row>
			</el-main>
	      </el-container>
	
	
	<!-- <el-table :data="tableData" @selection-change="handleSelectionChange">
		<el-table-column type="selection"></el-table-column>
		<el-table-column prop="id" label="景点编号"></el-table-column>
		<el-table-column prop="name" label="景点名称"></el-table-column>
		<el-table-column prop="level" label="景点级别"></el-table-column>
		<el-table-column prop="tname" label="景点类型"></el-table-column>
		<el-table-column prop="ticket" label="门票"></el-table-column>
		<el-table-column prop="pname" label="省"></el-table-column>
		<el-table-column prop="cname" label="市"></el-table-column>
		<el-table-column prop="dname" label="县"></el-table-column>
		<el-table-column label="景点图片">
			<template slot-scope="scope">
				<el-avatar shape="square" :size="100" :src="scope.row.pic"></el-avatar>
			</template>
		</el-table-column>
		<el-table-column prop="introduction" label="景点描述"></el-table-column>
		<el-table-column label="操作">
			<template slot-scope="scope">
				<el-button type="primary" size="mini" icon="el-icon-detail" @click="openDetilDialog(scope.row)">详情</el-button>
				<el-button type="info" size="mini" icon="el-icon-edit-outline" @click="openEditDialog(scope.row)">修改</el-button>
				<el-button type="danger" size="mini" icon="el-icon-remove" @click="removeScenic(scope.row.id)">删除</el-button>
			</template>
		</el-table-column>
	</el-table>
	<el-row>
		<el-col :span="24">
			<el-pagination @current-change="handlecurrentChange" @size-change="handlesizeChange" layout="sizes,prev,pager,next,jumper,->,total"
			 :page-sizes="pageSizes" :total="total" :current-page="current" :page-size="pageSize" background></el-pagination>
		</el-col>
	</el-row> -->

	<!-- 添加页面 -->
	<el-dialog :visible.sync="insertDialogVisiable" title="添加景点" width="60%" center>
		<el-form :model="insertScenicForm" label-width="100px">
			<el-form-item label="景点名称">
				<el-input v-model="insertScenicForm.name" placeholder="请输入景点名称"></el-input>
			</el-form-item>
			<el-form-item label="景区等级">
				<el-select v-model="insertScenicForm.level" placeholder="请选择景区等级" clearable>
					<el-option label="A" value="A"></el-option>
					<el-option label="AA" value="AA"></el-option>
					<el-option label="AAA" value="AAA"></el-option>
					<el-option label="AAAA" value="AAAA"></el-option>
					<el-option label="AAAAA" value="AAAAA"></el-option>
				</el-select>
			</el-form-item>
			<el-form-item label="景区风格">
				<el-select v-model="insertScenicForm.type" placeholder="请输入景点风格">
					<el-option label="海滨风光" value="1"></el-option>
					<el-option label="名山胜水" value="2"></el-option>
					<el-option label="人文景观" value="3"></el-option>
					<el-option label="都市田园" value="4"></el-option>
					<el-option label="其他" value="5"></el-option>
				</el-select>
			</el-form-item>
			<el-form-item label="所属地区">
				<el-cascader :options="options" :props="props" @change="handleChange" clearable></el-cascader>
			</el-form-item>
			<el-form-item label="门票">
				<el-input v-model="insertScenicForm.ticket" placeholder="请输入门票价格"></el-input>
			</el-form-item>
			<el-form-item label="景区图片">
				<el-upload class="avatar-uploader" action="http://localhost:91/upload" :show-file-list="false" :on-success="handleAvatarSuccess">
					<img v-if="imageUrl" :src="imageUrl" class="avatar">
					<i v-else class="el-icon-plus avatar-uploader-icon"></i>
				</el-upload>
			</el-form-item>
			<el-form-item label="景区介绍">
				<el-input type="textarea" v-model="insertScenicForm.introduction" placeholder="请输入景区介绍"></el-input>
			</el-form-item>
			<el-form-item>
				<el-button type="primary" @click="insertClient">添加</el-button>
				<el-button>重置</el-button>
			</el-form-item>
		</el-form>
	</el-dialog>

	<!-- 详情页面 -->
	<el-dialog :visible.sync="detailDialogVisiable" title="景点详情" width="60%" center>
		<el-row>
			<el-col :span="4">景区名称</el-col>
			<el-col :span="20">{{detailScenicForm.name}}</el-col>
		</el-row>
		<el-row>
			<el-col :span="4">景区等级</el-col>
			<el-col :span="20">{{detailScenicForm.level}}</el-col>
		</el-row>
		<el-row>
			<el-col :span="4">景区风格</el-col>
			<el-col :span="20">{{detailScenicForm.tname}}</el-col>
		</el-row>
		<el-row>
			<el-col :span="4">所属地区</el-col>
			<el-col :span="20">{{detailScenicForm.pname}}{{detailScenicForm.cname}}{{detailScenicForm.dname}}</el-col>
		</el-row>
		<el-row>
			<el-col :span="4">门票</el-col>
			<el-col :span="20">{{detailScenicForm.ticket}}</el-col>
		</el-row>
		<el-row>
			<el-col :span="4">景区图片</el-col>
			<el-col :span="20">
				<el-upload class="avatar-uploader" action="http://localhost:91/upload" :show-file-list="false" :on-success="handleAvatarSuccess">
					<img v-if="imageUrl" :src="imageUrl" class="avatar">
					<i v-else class="el-icon-plus avatar-uploader-icon"></i>
				</el-upload>
			</el-col>
		</el-row>
		<el-row>
			<el-col :span="4">景区介绍</el-col>
			<el-col :span="20">{{detailScenicForm.introduction}}</el-col>
		</el-row>
		<el-row>
			<el-col :span="24">
				<el-button type="primary" size="mini" @click="detailDialogVisiable=false">返回</el-button>
			</el-col>
		</el-row>
	</el-dialog>

	<!-- 修改页面 -->
	<el-dialog :visible.sync="editDialogVisiable" title="更新景点" width="60%" center>
		<el-form :model="editScenicForm" label-width="100px">
			<el-form-item label="景点名称">
				<el-input v-model="editScenicForm.name" placeholder="请输入景点名称"></el-input>
			</el-form-item>
			<el-form-item label="景区等级">
				<el-select v-model="editScenicForm.level" placeholder="请选择景区等级" clearable>
					<el-option label="A" value="A"></el-option>
					<el-option label="AA" value="AA"></el-option>
					<el-option label="AAA" value="AAA"></el-option>
					<el-option label="AAAA" value="AAAA"></el-option>
					<el-option label="AAAAA" value="AAAAA"></el-option>
				</el-select>
			</el-form-item>
			<el-form-item label="景区风格">
				<el-select v-model="editScenicForm.tname" placeholder="请输入景点风格">
					<el-option label="海滨风光" value="1"></el-option>
					<el-option label="名山胜水" value="2"></el-option>
					<el-option label="人文景观" value="3"></el-option>
					<el-option label="都市田园" value="4"></el-option>
					<el-option label="其他" value="5"></el-option>
				</el-select>
			</el-form-item>
			<el-form-item label="所属地区">
				<el-cascader v-model="values" :options="options" :props="props" @change="handleChange" clearable></el-cascader>
			</el-form-item>
			<el-form-item label="门票">
				<el-input v-model="editScenicForm.ticket" placeholder="请输入门票价格"></el-input>
			</el-form-item>
			<el-form-item label="景区图片">
				<el-upload class="avatar-uploader" action="http://localhost:91/upload" :show-file-list="false" :on-success="handleAvatarSuccess">
					<img v-if="imageUrl" :src="imageUrl" class="avatar">
					<i v-else class="el-icon-plus avatar-uploader-icon"></i>
				</el-upload>
			</el-form-item>
			<el-form-item label="景区介绍">
				<el-input type="textarea" v-model="editScenicForm.introduction" placeholder="请输入景区介绍"></el-input>
			</el-form-item>
			<el-form-item>
				<el-button type="primary" @click="editClient">更新</el-button>
				<el-button>重置</el-button>
			</el-form-item>
		</el-form>
	</el-dialog>
</div>

idea代码
@RestController
@RequestMapping("/scenic")
public class ScenicController {

@Autowired
private IScenicService iScenicService;

@RequestMapping("/list")
public ResultApi list(Page page , ScenicVo vo){
    return ResultApi.success(iScenicService.selectPageVo(page,vo));
}

@RequestMapping("/insert")
public ResultApi insert(@RequestBody Scenic scenic){
    return ResultApi.success(iScenicService.save(scenic));
}

@RequestMapping("/update")
public ResultApi update(@RequestBody Scenic scenic){
    return ResultApi.success(iScenicService.updateById(scenic));
}

@RequestMapping("/delete")
public ResultApi delete(Integer ids[]){
    try {
        System.out.println(ids+"*******");
        iScenicService.removeByIds(Arrays.asList(ids));
        System.out.println(ids);
        return ResultApi.success(true);
    }catch (Exception e){
        e.printStackTrace();
    }
    return ResultApi.error(false);
}

}

图片上传controller
//返回的都是json类型 等效于@Controller @ResponseBody
@RestController
public class UploadController {

@RequestMapping("/upload")
private ResultApi upload(MultipartFile file){
    if(!file.isEmpty()){
        //原始文件名称
        String originalFilename = file.getOriginalFilename();
        //文件名的唯一性
        String fileName = UUID.randomUUID()+"_"+originalFilename;
        //设置上传的路劲
        File destFile = new File("D:/pic/", fileName);
        //判断目录是否存在
        if(!destFile.getParentFile().exists()){
            //则创建目录
            destFile.getParentFile().mkdir();
        }
        //保存文件
        try{
            file.transferTo(destFile);
            return ResultApi.success("http://localhost:91/img/"+fileName);
        }catch (IOException e){
            e.printStackTrace();
        }

    }
    return ResultApi.error(null);
}

}

递归获取三级联动数据
@RestController
@RequestMapping("/district")
public class DistrictController {

@Autowired
private IDistrictService iDistrictService;

@RequestMapping("/findAll")
public List<DistrictVo> findAll(){
    return iDistrictService.findAll();
}

}

三级联动需要的实体类
@Data
public class DistrictVo implements Serializable {

private static final long serialVersionUID=1L;

//记录省市县的id
private Integer id;
//映射省市县的名称
private String name;

private List<DistrictVo> list;

}

主表需要的实体类
@Data
public class ScenicVo extends Scenic {
private String pname;
private String cname;
private String dname;
private String tname;
private Integer sorted;
private Integer provinceId;
private String levelId;
private Integer typeId;
}

三级联动sql Mapper











SELECT p.id, p.province, c.id cid, c.city city, d.id did, d.district district FROM t_district p LEFT JOIN t_district c ON c.parent = p.id LEFT JOIN t_district d ON d.parent = c.id WHERE p.parent = 1

主表sql Mapper









SELECT s.*,d1.province as pname,d2.city as cname,d3.district as dname,t.`name` as tname , t.sorted as sorted FROM t_scenic s LEFT JOIN t_district d1 ON (s.province=d1.id) LEFT JOIN t_district d2 ON (s.city=d2.id) LEFT JOIN t_district d3 ON (s.county=d3.id) LEFT JOIN t_type t ON (s.type=t.id) and s.level = #{vo.levelId} and s.type = #{vo.typeId} and s.province = #{vo.provinceId}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值