HTML 引入element ui 并使用axios请求后端

2 篇文章 0 订阅

       由于项目开发,需要在前端项目以外新建一个单页面,做数据处理。

用纯HTML开发,最麻烦的就是处理样式问题以及事件,由于开发单页面没有技术要求,所以直接使用element ui +vue 来开发

链接:

   element-ui: https://unpkg.com/browse/element-ui@2.7.2/lib/ (版本统一,不然出现样式不生效问题)

       1) element-ui/lib 包,先选择想要的版本,只下载index.js 即可,因为index.js文件是其他所有文件的汇总

       2) element-ui/lib/theme-chalk 组件样式包;下载 index.css文件

        3) element-ui/lib/theme-chalk/fonts 字体包;(element-icons.woff、element-icons.ttf)两个文件,都要下载

     vue:  https://cdn.jsdelivr.net/npm/vue@2.7.2/dist/   选择版本,下载 vue.js

  axios:   https://unpkg.com/axios@0.27.2/dist/axios.min.js  (打开右键另存为即可或者直接右键链接另存为)

  axios(github):https://github.com/axios/axios/tree/v1.x/dist

文件结构:

引入文件需要注意的问题;

        顺序问题: vue.js 要在 element.js 之前,不然不会生效

 在引用elementUI 的css文件时,需要修改字体样式的url:

如果还不生效,可能是因为在script标签创建vue,在div标签 设置id为【app】

 

效果:

测试代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>elementUI本地引入测试</title>
    <script src="./element/vue.js"></script>
    <script src="./element/element.js"></script>
    <link rel="stylesheet" href="./element/element.css">
    <script src="./axios/axios.min.js"></script>
</head>

<body>
    <div id="app" style="margin: auto;">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
            <el-form-item label="活动名称" prop="name">
                <el-input v-model="ruleForm.name"></el-input>
            </el-form-item>
            <el-form-item label="活动区域" prop="region">
                <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
                    <el-option label="区域一" value="shanghai"></el-option>
                    <el-option label="区域二" value="beijing"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="活动时间" required>
                <el-col :span="11">
                    <el-form-item prop="date1">
                        <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;">
                        </el-date-picker>
                    </el-form-item>
                </el-col>
                <el-col class="line" :span="2">-</el-col>
                <el-col :span="11">
                    <el-form-item prop="date2">
                        <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;">
                        </el-time-picker>
                    </el-form-item>
                </el-col>
            </el-form-item>
            <el-form-item label="即时配送" prop="delivery">
                <el-switch v-model="ruleForm.delivery"></el-switch>
            </el-form-item>
            <el-form-item label="活动性质" prop="type">
                <el-checkbox-group v-model="ruleForm.type">
                    <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
                    <el-checkbox label="地推活动" name="type"></el-checkbox>
                    <el-checkbox label="线下主题活动" name="type"></el-checkbox>
                    <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
                </el-checkbox-group>
            </el-form-item>
            <el-form-item label="特殊资源" prop="resource">
                <el-radio-group v-model="ruleForm.resource">
                    <el-radio label="线上品牌商赞助"></el-radio>
                    <el-radio label="线下场地免费"></el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="活动形式" prop="desc">
                <el-input type="textarea" v-model="ruleForm.desc"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
                <el-button @click="resetForm('ruleForm')">重置</el-button>
            </el-form-item>
        </el-form>
        <div>
        </div>
    </div>
</body>

<script>
    new Vue({
        el: '#app',
        data: function () {
            return {
                serverUrl: 'http://127.0.0.1:9001/', //服务器地址
                multipleSelection: [], //多选数据列
                dialogFormVisible: false,
                formLabelWidth: '100px',
                align: "center",
                businessIdList: [],
                businessAddressList: [],
                clientNameList: [],
                currentPage: 1, //当前所在页面
                total: 0, //总条数
                tableData: [],
                param: {
                    key: "maintenanceCompany",
                    page: {
                        pageNum: 1,
                        pageSize: 10
                    }
                },
                autosize: { minRows: 2, maxRows: 6 },
                ruleForm: {
                    name: '',
                    region: '',
                    date1: '',
                    date2: '',
                    delivery: false,
                    type: [],
                    resource: '',
                    desc: ''
                },
                searchForm: {
                    sign: '',
                    customerAddress: '',
                    userCustomerName: ''
                },

                rules: {
                    name: [
                        { required: true, message: '请输入活动名称', trigger: 'blur' },
                        { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
                    ],
                    region: [
                        { required: true, message: '请选择活动区域', trigger: 'change' }
                    ],
                    date1: [
                        { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
                    ],
                    date2: [
                        { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
                    ],
                    type: [
                        { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
                    ],
                    resource: [
                        { required: true, message: '请选择活动资源', trigger: 'change' }
                    ],
                    desc: [
                        { required: true, message: '请填写活动形式', trigger: 'blur' }
                    ]
                }
            }
        },
        methods: {
            submitForm(formName) {
                let that = this
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        axios.post(that.serverUrl + '/test/insert', that.ruleForm).then(res => {
                            let data = res.data;
                            if (data.code == 100000) {
                                that.$message({
                                    message: '添加成功',
                                    type: 'success'
                                })
                                that.resetForm("ruleForm")
                            } else {
                                that.$error(data.message)
                            }
                        })
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            cancel(formName) {
                this.dialogFormVisible = false
                this.$refs[formName].resetFields();
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
                console.log(this.$refs[formName]);
            },
            handleSelectionChange(val) {
                this.multipleSelection = val;
                let data = ''
                this.idList = []
                this.businessAddressList = []
                this.clientNameList = []
                for (const key in val) {
                    this.idList.push(val[key].sign)
                    this.businessAddressList.push(val[key].customerAddress)
                    this.clientNameList.push(val[key].userCustomerName)
                }
            },
            search() {
                let param = Object.assign(this.searchForm, this.param);
                axios.post(this.serverUrl + '/import-fault-business-sign/findAll', param).then(res => {
                    let result = res.data.data.pageResult;
                    this.tableData = result.datas
                    this.total = result.total
                })
            },
            selectList() {
                this.ruleForm.businessId = this.idList.join(',')
                this.ruleForm.businessAddress = this.businessAddressList.join(',')
                this.ruleForm.clientName = this.clientNameList.join(',')
                this.dialogFormVisible = false
                console.log(this.idList.join(','));
                console.log(this.businessAddressList.join(','));
                console.log(this.clientNameList.join(','));
            },
            handleSizeChange(val) {
                console.log(`每页 ${val} 条`);
                this.param.page.pageSize = val
                this.findAll()
            },
            handleCurrentChange(val) {
                console.log(`当前页: ${val}`);
                this.currentPage = val
                this.param.page.pageNum = val
                this.findAll()
            },
            queryBusiness() {
                this.findAll()
                this.dialogFormVisible = true
            },
            //获取数据
            findAll() {
                axios.post(this.serverUrl + '/test/findAll', this.param).then(res => {
                    let result = res.data.data.pageResult;
                    this.tableData = result.datas
                    this.total = result.total
                    console.log('data', this.tableData);
                })
            }
        }
    })
</script>

</html>
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以参考以下代码实现: 1. 引入axioselement-ui的上传组件 ```javascript import axios from 'axios' import { Upload } from 'element-ui' ``` 2. 在template中使用上传组件 ```html <el-upload action="" :on-success="handleSuccess" :before-upload="beforeUpload" :file-list="fileList" > <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过2M</div> </el-upload> ``` 3. 在methods中定义上传前的校验和上传成功后的处理函数 ```javascript methods: { // 上传前的校验 beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' const isLt2M = file.size / 1024 / 1024 < 2 if (!isJPG) { this.$message.error('上传图片只能是 JPG/PNG 格式!') return false } if (!isLt2M) { this.$message.error('上传图片大小不能超过 2MB!') return false } return true }, // 上传成功后的处理函数 handleSuccess(response, file, fileList) { if (response.code === 200) { this.$message.success('上传成功') const imageUrl = response.data.imageUrl // 获取后端返回的图片地址 // 这里可以将图片地址保存到数据库或者显示在页面上 console.log(imageUrl) } else { this.$message.error('上传失败') } } } ``` 4. 在handleSuccess中使用axios发送上传请求 ```javascript handleSuccess(response, file, fileList) { if (response.code === 200) { this.$message.success('上传成功') const imageUrl = response.data.imageUrl // 获取后端返回的图片地址 // 使用axios发送上传请求 const formData = new FormData() formData.append('file', file) axios.post('backend/upload/image', formData).then(res => { if (res.data.code === 200) { console.log('上传成功') } else { console.log('上传失败') } }) // 这里可以将图片地址保存到数据库或者显示在页面上 console.log(imageUrl) } else { this.$message.error('上传失败') } } ``` 5. 在后端接口中处理上传的文件 ```java @PostMapping("/upload/image") public Response uploadImage(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return Response.fail("上传失败,请选择文件"); } String fileName = file.getOriginalFilename(); String suffixName = fileName.substring(fileName.lastIndexOf(".")); String newFileName = UUID.randomUUID().toString() + suffixName; String filePath = "D:/image/"; // 这里可以根据实际情况修改图片存储路径 File dest = new File(filePath + newFileName); try { file.transferTo(dest); return Response.success("上传成功", newFileName); } catch (IOException e) { e.printStackTrace(); } return Response.fail("上传失败"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值