前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >相册功能的实现

相册功能的实现

作者头像
Diuut
发布2022-11-22 19:15:58
1K0
发布2022-11-22 19:15:58
举报
文章被收录于专栏:Diuut

提供好的有album模板界面,上传组件,pojo类,albumService接口,album通用Mapper,数据库表。

首先分析数据库表:

相册数据库整体只有一张表,主键为相册id,相册内的图片是由url,uid,status组成的json字符串数组共同存在一条相册的一个字段中,所以得出结论新建相册的操作是insert一条数据库字段,而添加删除相册内的图片则是对该字段的json数组进行修改,因此就是对这条相册数据库的update操作。麻烦的地方就是对于该字段json数组的增删转换。

前端方面的思路:因为分为相册列表和相册详情,所以需要两个页面才方便展示不同的操作,直接复制个album界面,通过修改按钮和表格显示体现出列表与详情的区别。相册列表界面显示所有相册,然后点击查看相册,带上相册id跳转至相册详情页面,在相册详情页面通过截取方式获取id后再发送请求获取相册详情,再将imageItems中图片读取展示出来。

代码语言:javascript
复制
axios.get(`/album/findById.do?id=${window.location.href.split("id=")[1]}`)

相册列表

相册详情

后端service层:利用现成的Service接口中简单的增删查改进行组合,主要在controller层进行编写

代码语言:javascript
复制
    @PostMapping("/add")
    public Result add(@RequestBody Album album){
        //相册的上传
        albumService.add(album);
        return new Result();
    }

    @PostMapping("/update")
    public Result update(@RequestBody Album album){
        //主要用于相册中图片列表字段的增删
        albumService.update(album);
        return new Result();
    }
    @GetMapping("/delete")
    public Result delete(Long id){
        //删除相册
        albumService.delete(id);
        return new Result();
    }

前端显示:个人感觉最麻烦的就是前端对于图片详情字段的增删操作,因为传过来的其实只是一段String字符串,需要先转换成json数组,然后再进行查改。

代码语言:javascript
复制
<!---------图片详情显示部分代码--------->
            <el-table :data="tableData" border style="width: 100%">
                <el-table-column prop="images" label="相册图片" width="250">
                    <template slot-scope="scope">
                        <img width="230px" height="230px" :src="scope.row.url">
                    </template>
                </el-table-column>
                <el-table-column
                        label="操作">
                    <template slot-scope="scope">
                        <el-button @click="dele(scope.row.uid)" size="mini" type="danger" size="small">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>


<!----------请求部分代码---------->

 new Vue({
        el: '#app',
        data() {
            return {
                tableData: [],
                searchMap: {},
                pojo: {},
                formVisible: false,
                imageUrl: '',
                items: [],
                images:[null],
                id: ""
            }
        },
        created() {
            this.fetchData();
        },

        methods: {
            fetchData() {
                axios.get(`/album/findById.do?id=${window.location.href.split("id=")[1]}`).then(response => {
                    this.items = response.data.imageItems;
                    this.pojo.title = response.data.title;
                    this.id = response.data.id;
                    this.images = JSON.parse(this.items);
                    this.tableData = this.images;
                });
            },
            save() {
                //相册详情页面向相册中添加图片
                let json = {"url": this.imageUrl, "uid": this.get_uuid(), "status": "success"};
                this.images.push(json);
                this.pojo.id = this.id;
                this.pojo.imageItems = this.images;
                axios.post(`/album/update.do`, this.pojo).then(response => {
                    this.fetchData(); //刷新列表
                    this.formVisible = false;//关闭窗口
                });
            },
            get_uuid() {
                var s = [];
                var hexDigits = "0123456789abcdef";
                for (var i = 0; i < 36; i++) {
                    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
                }
                s[14] = "4";
                s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
                s[8] = s[13] = s[18] = s[23] = "-";

                var uuid = s.join("");
                return uuid;
            },
            dele(uid) {
                this.$confirm('确定要删除此记录吗?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => {
                    this.pojo.id = this.id;
                    for (let i = 0; i < this.images.length; i++) {
                        if (this.images[i].uid == uid) {         //根据uid判断删除json字段
                            this.images.splice(i, 1)
                        }
                    }
                    this.pojo.id = this.id;
                    this.pojo.imageItems = this.images;
                    axios.post(`/album/update.do`, this.pojo).then(response => {
                        this.fetchData(); //刷新列表
                    })
                })
            }

此外还有个问题就是在新建相册的时候,默认的图片详情的字段为空,所以在albums中如果第一次上传的话会导致识别不出images为数组,所以无法使用push方法进行字段添加,所以需要在album页面新建相册时添加“[]”字符串进行占位,之后albums中就可以进行正常增删操作。

代码语言:javascript
复制
  save() {
                this.pojo.image= this.imageUrl; //如页面有图片上传功能放开注释
                this.pojo.imageItems="[]",
                axios.post(`/album/add.do`, this.pojo).then(response => {
                    this.fetchData(); //刷新列表
                    this.formVisible = false;//关闭窗口
                });
            },

以上。

Post Views: 70

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年10月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档