web端3D表白情侣网站带后台

文章介绍了如何基于模仿3D签到的代码构建一个包含后台管理、图片上传和数据库交互功能的网站,包括安装依赖、配置数据库、前端和后端代码示例等。
摘要由CSDN通过智能技术生成

概述

网站是模仿3D签到的一块代码,增加了后台管理,可以设置整体的背景,想说的话,表白主题。同时可以上传表白人的图片,或者在一起的图片记录。记录生活的点点滴滴。可以直接运行,也可以当作学习教材。整体已经写完,可以在原有基础上增加想要的功能。

详细

首先代码可以完整运行,运行需要安装部分依赖。通过命令直接安装。

目录:

WX20200110-105330@2x.png

1、admin目录是后台管理 (后台默认账号:admin  密码:123456)

2、love3d是前台目录

3、love3d.sql是sql文件

4、app.js是node入口文件(本地跑的话,在webstorm点击右键可以直接运行,启动服务系统必须安装了node)

5、说一下这个model这个目录,这个目录放了两个文件,一个mysql配置文件,一个图片上传文件。db.js配置文件,把你本地的数据库信息再这里配置,文件里有详细的说明。

现在开始安装依赖

1、服务端是用node写的,安装服务端依赖,打开控制台(或者终端)进入love3d根目录,输入命令 npm install 进行安装依赖。

2、后台管理是通过vue写的,打开控制台(或者终端)进入admin,输入命令 npm install 进行安装依赖。

3、把sql文件导入本地数据库(或者线上的数据库),在db.js中进行配置数据库信息

4、运行app.js,不报错说明运行成功。

5、进入admin 运行命令 yarn serve进行启动后台管理,浏览器会自动打开一个窗口。

6、点击love3d里的index.html文件,这个文件可以在本地直接运行。

这时所以的依赖已经安装成功。index.html可以看到如下效果图

1、照片墙

1.png

2、照片球

3.png

3、螺旋照片

4.png

4、整齐排列

5.png

5、控制缩小

6.png

6、控制放大

7.png

8.png

后台管理效果图

1、登陆页面

12.png

2、设置页面

13.png

15.png

23.png

32.png

后台图片上传部分代码展示:

export default {
    name: "index",
    data: function () {
        return {
            action:'',
            //背景
            imageUrlBg: '',
            //主图
            imageUrl: '',
            name:'',
            nameId:'',
            radio:'1',
            content:'',
            //图片列表
            setUpload:'',
            dialogImageUrl: '',
            dialogVisible: false,
            disabled: false,
            imgIdArr:[],//图片id
            fileList: []
        }
    },
    mounted() {
        this.action = this.$api.upload;
        this.setUpload = this.$api.setUpload;
        this.$request(this.$api.get, {}).then(res => {
            let data = res.data;
            this.name = data.name;
            this.nameId = data.inter;
            this.radio = data.sex;
            this.content = data.content;
            this.imageUrlBg = data.imgBg;
            this.imageUrl = data.graphImg;
            let spArr = data.imgList.split(',');
            this.imgIdArr = spArr;
            for (let item of data.imgListArr){
                let obj = {};
                obj.url = item.imgUrl;
                obj.id = item.imgId;
                this.fileList.push(obj);
            }
        });
    },
    methods: {
        //背景上传
        handleAvatarSuccessBg(res, file) {
            if (res.status == 200) {
                this.imageUrlBg = res.imgUrl;
                console.log(res)
                this.$message({
                    showClose: true,
                    message: res.message,
                    type: 'success'
                })
            }

        },
        beforeAvatarUploadBg(file) {
            // const isJPG = file.type === 'image/jpeg/png';
            const isLt2M = file.size / 1024 / 1024 < 2;
            // if (!isJPG) {
            //     this.$message.error('上传图片只能是 JPG、PNG 格式!');
            // }
            if (!isLt2M) {
                this.$message.error('上传图片大小不能超过 2MB!');
            }
            // return isJPG && isLt2M;
            return isLt2M;
        },
        //主图上传
        handleAvatarSuccess(res, file) {
            if (res.status == 200) {
                this.imageUrl = res.imgUrl;
                this.$message({
                    showClose: true,
                    message: res.message,
                    type: 'success'
                })
            }

        },
        beforeAvatarUpload(file) {
            // const isJPG = file.type === 'image/jpeg/png';
            const isLt2M = file.size / 1024 / 1024 < 2;
            // if (!isJPG) {
            //     this.$message.error('上传图片只能是 JPG、PNG 格式!');
            // }
            if (!isLt2M) {
                this.$message.error('上传图片大小不能超过 2MB!');
            }
            // return isJPG && isLt2M;
            return isLt2M;
        },

        //添加图片
        //删除缩略图
        handleRemove(file, fileList) {
            console.log(this.imgIdArr)
            console.log(file)
            let newArr = this.imgIdArr.filter((item, index, arr) => item != file.id);
            console.log(newArr,'111')
            this.imgIdArr = newArr;
        },

        //查看图片
        handlePictureCardPreviewLists(file) {
            this.dialogImageUrl = file.url;
            this.dialogVisible = true;
        },
        handleAvatarSuccessLists(res, file) {
            if (res.status == 200){
                this.imgIdArr.push(res.imgId);
                this.$message({
                    showClose: true,
                    message: res.message,
                    type: 'success'
                })
            }

        },
        beforeAvatarUploadLists(file) {
            const isLt2M = file.size / 1024 / 1024 < 2;
            if (!isLt2M) {
                this.$message.error('上传图片大小不能超过 2MB!');
            }
            return isLt2M;
        },
        btn() {
            this.$request(this.$api.add, {
                name :this.name,
                inter:this.nameId,
                sex : this.radio,
                content:this.content,
                graphImg:this.imageUrl ,
                imgBg:this.imageUrlBg,
                imgList:this.imgIdArr,
            }).then(res => {
                this.$message({
                    showClose: true,
                    message: res.message,
                    type: 'success'
                })
            });
        }
    }

前台渲染部分代码展示:

().(res=>{
    console.(res)$().({
        : ${res..}:})$().(res..)$().(res..)$().(res..)(res..== ){
        $().()
    } {
        $().()
    }
    $().(res..)s = (() {
        rand_in = (Math.() * _in.)rand_out = (Math.() * _out.)(CurPersonNum >= personArray.) {
            CurPersonNum = }
        $().()$().(_in[rand_in])(() {
            $().(_in[rand_in])img = document
                .()
                [CurPersonNum].()[]++CurPersonNum(() {
                $().(_out[rand_out])(() {
                    $().(_out[rand_out])$().()})})})})(item res..) {
        obj = {}
        obj.= item.imgUrlpersonArray.(obj)
    }
    table = Array()(i = i < personArray.i++) {
        table[i] = Object()(i < personArray.) {
            table[i] = personArray[i]table[i].= personArray[i].thumb_image}
        table[i].= (i % ) + table[i].= Math.(i / ) + }
    camerascenerenderercontrolsobjects = []targets = {: []: []: []: []}()()() {
        camera = .(
            window./ window.)camera..= scene = .()(i = i < table.i++) {
            element = document.()element.= element..=
                + (Math.() * + ) + img = document.()img.= table[i].element.(img)object = .(element)object..= Math.() * - object..= Math.() * - object..= Math.() * - scene.(object)objects.(object)object = .()object..= table[i].* - object..= -(table[i].* ) + targets..(object)}

服务端db.js数据库配置部分代码展示:

mysql = require()http = pool = mysql.createPool({
    : : : : : : })= (sqlvalues) => {
    Promise((resolvereject) => {
        pool.getConnection((errconnection) => {
            (err) {
                reject(+ err)
            } {
                connection.(sqlvalues(errrows) => {
                    (err) {
                        reject(+ err)
                    } {
                        resolve(rows)
                    }
                })
                connection.()
            }
        })
    })
}module.= {http}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西安未央

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值