wangEditor富文本编辑器与layui图片上传

news2024/12/25 14:07:53
记录:js 显示默认的wangEditor富文本编辑器内容和图片
<style>
     body {
         background-color: #ffffff;
     }
     .layui-form-select dl{
         z-index:100000;
     }
</style>
<div class="layui-form layuimini-form">
     <div class="layui-form-item">
        <label class="layui-form-label">人员</label>
        <div class="layui-input-inline">
            <select name="uid" lay-verify="required" lay-search="" id="uid" lay-filter="user">
                <option value="">请选择人员</option>
                {volist name="sh_user_data" id="vo"}
                <option value="{$vo.id}">{$vo.username}</option>
                {/volist}
            </select>
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">上传照片</label>
        <div class="layui-upload">
            <input type="hidden" name="thumbnail" value="" id="thumbnail">
            <button type="button" class="layui-btn" id="test1">上传图片</button>
            <div class="layui-upload-list">
                <img class="layui-upload-img" src="" style="margin-left: 150px;max-width:120px;" id="demo1" name="img">
                <p id="demoText"></p>
            </div>
        </div>
    </div>
        <div class="layui-form-item layui-form-text">
        <label class="layui-form-label">人员详情</label>
        <div class="layui-input-block">
            <div id="editor" name="abstract">
            </div>
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
        </div>
    </div>
</div>

<script src="__ADMINLIB__/wangEditor/wangEditor.js" charset="utf-8"></script>
<script src="__ADMINLIB__/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script type="text/javascript">
    var E = window.wangEditor
    //  创建编辑器
    var editor = new E('#editor')

    // 关闭粘贴样式的过滤
    editor.customConfig.pasteFilterStyle = false
    // 忽略粘贴内容中的图片
    editor.customConfig.pasteIgnoreImg = false
    // 插入网络图片的回调
    editor.customConfig.linkImgCallback = function (url) {
        console.log(url) // url 即插入图片的地址
    }
    //  用户点击富文本区域会触发onfocus函数执行。
    editor.customConfig.onfocus = function () {
        console.log("进入回调")
    }
    //  用户离开富文本进行回调。
    editor.customConfig.onblur = function (html) {
        console.log('离开回调')
    }
    //  上传图片地址
    // editor.customConfig.uploadFileName = 'yourFileName'
    editor.customConfig.uploadImgServer = "{:url('admin/gift/wangeditorImg')}"  // 上传图片到服务器
    // 限制一次最多上传 5 张图片
    editor.customConfig.uploadImgMaxLength = 5
    // 将图片大小限制为 3M
    editor.customConfig.uploadImgMaxSize = 3 * 1024 * 1024
    editor.customConfig.uploadImgHooks = {
        customInsert: function (insertImg, result, editor) {
            var url =result.data.url;//获取后台返回的url
            insertImg(url);
        }
    };

    editor.create()
</script>
<script>
    layui.use(['form', 'upload', 'laydate'], function () {
        var form = layui.form,
            layer = layui.layer,
            upload = layui.upload;
        laydate = layui.laydate;
        $ = layui.$;
        
        
        // 监听选择人员
        form.on('select(user)', function(data){
            layer.load(1);//加载中
            var uid=data.value;
            $.ajax({
                url: "{:url('admin/floor/get_user_info')}",
                type: 'POST',
                async: true,
                data: {uid:uid},
                success: function (datas) {
                    if(datas.status == 0){
                        layer.msg(datas.msg);
                        return false;
                    }
                    // 显示照片
                    $('input[name=thumbnail]').val(datas.data.img);
                    $('img.layui-upload-img').attr('src',datas.data.img);
                    // 显示介绍
                    if(datas.data.abstract){
                        editor.txt.html(datas.data.abstract);
                    }else{
                        editor.txt.html('');
                    }
                    form.render();
                    layer.closeAll('loading');
                }
            });
        });
        
        //监听提交
        form.on('submit(saveBtn)', function (data) {
            // data = data.field;
            var uid = $("#uid").val();
            if(uid == ""){
                alert("请选择用户");
                return false;
            }
            var img = $("#thumbnail").val();
            var abstract = editor.txt.html();

            $.post("{:url('admin/floor/addinfook')}", {uid:uid,img:img,abstract:abstract}, function (res) {
                if (res.code == 1) {
                    layer.alert(res.msg, {icon: 6, title: '添加提示'}, function () {
                        var iframeIndex = parent.layer.getFrameIndex(window.name);
                        parent.layer.close(iframeIndex);
                    });
                } else {
                    layer.alert(res.msg, {icon: 7, title: '添加提示'}, function () {
                        var iframeIndex = parent.layer.getFrameIndex(window.name);
                        parent.layer.close(iframeIndex);
                    });
                }
            })
            return false;
        });

        //普通图片上传
        var uploadInst = upload.render({
            elem: '#test1'
            , url: "{:url('admin/banner/upload')}" //改成您自己的上传接口
            , before: function (obj) {
                //预读本地文件示例,不支持ie8
                obj.preview(function (index, file, result) {
                    $('#demo1').attr('height', '100px'); //图片链接(base64)
                    $('#demo1').attr('width', '100px'); //图片链接(base64)
                    $('#demo1').attr('src', result); //图片链接(base64)
                });
            }
            , done: function (res) {
                if (res.code == 1) {
                    var src = res.data.img;
                    $("input[name='thumbnail']").attr('value', src)
                    return layer.msg(res.msg);
                }else{
                    $('input[name=thumbnail]').val('');
                    $('img.layui-upload-img').attr('src','');
                    return layer.msg(res.msg);
                }
            }
            , error: function () {
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
                demoText.find('.demo-reload').on('click', function () {
                    uploadInst.upload();
                });
            }
        });
    });
</script>

可以用 editor.txt.html() 获取 html内容 这里获取到的是 html代码 这一块是没有样式的 需引入样式 样式可参考官网
可以用 editor.txt.text() 获取 text内容 这里获取到的是文字内容

php代码(tp5)

    public function addinfook(){
        $uid = input('post.uid');
        $save = [];
        // $this->error('修改失败'.input('post.img'));
        if(input('post.img')){
            $save['img'] = input('post.img');
            if(strpos($save['img'], "https://xcxs.yxzyhz.com") === false){
                $save['img'] = "https://xcxs.yxzyhz.com".$save['img'];
            }
        }
        if(input('post.abstract')){
            $save['abstract'] = input('post.abstract');
        }
        
        if($save){
            $rest = DB::name("user")->where("id = {$uid}")->update($save);
            if ($rest !== false) {
                $this->success('修改成功', 'house');
            } else {
                $this->error('修改失败');
            }  
        }else{
            $this->error('未修改内容');
        }
        
    }
    
    public function get_user_info(){
        $uid = input('uid');
        $floor_user = DB::name("user")->where("id = '{$uid}'")->field("id,abstract,img")->find();
        if(!$floor_user){
            return json([
                'status'=>0,
                'msg'=>'未找到此人员信息',
                'data'=>'',
            ]);
        }
        return json([
                'status'=>1,
                'msg'=>'',
                'data'=>$floor_user,
            ]);
    }

    //  文件上传方法
    public function upload()
    {
        // 获取表单上传文件 例如上传了001.jpg

        $file = request()->file('file');
        $info = $file->validate(['size' => 9999999999, 'ext' => 'jpg,png,gif,pdf,jpeg'])->move('./uploads');
        if ($info) {
            // 成功上传后 获取上传信息
            $data['img'] = '/aixin/public/uploads/' . $info->getSaveName();
            $data['img'] = str_replace('\\', '/', $data['img']);
             $this->success('success', '', $data);
        } else {
            $this->error($file->getError());
        }
    }

图示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…

一个全栈SpringBoot项目-Book Social Network

一个全栈SpringBoot项目-Book Social Network BSN是一个会员之间交换图书的社交网络平台。图书社交网络是一个全栈应用程序&#xff0c;使用户能够管理他们的图书收藏并与图书爱好者社区互动。它提供的功能包括用户注册、安全电子邮件验证、图书管理&#xff08;包括创建、更新…

使用SPI驱动串行LCD的驱动实现(STM32F4)

目录 概述 1. 硬件介绍 1.1 ST7796-LCD 1.2 MCU IO与LCD PIN对应关系 2 功能实现 2.1 使用STM32Cube配置Project 2.2 STM32Cube生成工程 3 代码实现 3.1 SPI接口实现 3.2 LCD驱动程序实现 3.3 测试程序实现 4 测试 源代码下载地址&#xff1a; https://gitee.com/mf…

[蓝桥杯]真题讲解:AB路线(BFS+分层图)

[蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #define INF …

大数据Scala教程从入门到精通第八篇:Scala在IDEA中编写Hello World

一&#xff1a;Scala在IDEA中编写Hello World object HelloWorld {def main(args: Array[String]): Unit {println("hello world")}}这个对象也单例的。 特殊的Java类库需要import

【Java 查询树结构列表,递归删除子节点】

Java 获取列表树结构&#xff0c;递归删除子节点 数据库表结构ModelVO查询树结构列表递归删除子节点 数据库表结构 Model Data AllArgsConstructor NoArgsConstructor public class TBaseDept {/** ID */private String id;/** 单位名称 */private String fdName;/** 部门编码…

Python | Leetcode Python题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution:def largestRectangleArea(self, heights: List[int]) -> int:n len(heights)left, right [0] * n, [n] * nmono_stack list()for i in range(n):while mono_stack and heights[mono_stack[-1]] > heights[i]:righ…

scanf留下的那一片云彩

【题目描述】 给出一个由O和X组成的串&#xff08;长度为1&#xff5e;80&#xff09;&#xff0c;统计得分。每个O的得分为目前连续出现的O的个数&#xff0c;X的得分为0。例如&#xff0c;OOXXOXXOOO的得分为1200100123。 输入第一行表示有n个字符串&#xff0c;后续是n行字…

1056: 邻接表到邻接矩阵

解法&#xff1a; #include<iostream> #include<vector> #include<string> using namespace std; int arr[100][100]; int main() {int n;cin >> n;getchar();vector<string> s(n);for (int i 0; i < n; i) {getline(cin, s[i]);}for (int …

进程间通信:连接不同程序世界的桥梁

目录 一、进程间通信的重要性 二、常见的进程间通信方式 三、进程间通信的目的 四、进程间通信的本质 在计算机编程的领域中&#xff0c;进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&#xff09;是一个至关重要的概念。当我们在操作系统中运行多个程…

数据结构之——队列详解

目录 前言&#xff1a; 一、什么是队列 二、队列的实现 2.1 队列结构 2.2 队列初始化 2.3 队列销毁 2.4 入队列 2.5 出队列 2.6 获取队列头部元素 2.7 获取队列尾部元素 2.8 获取队列中有效元素个数 2.9 检测队列是否为空 三、 代码总览 Queue.h test.c 四、例题 前言…

Base64在线编码解码方法

Base64在线编码解码 打开网站 在线工具网-梦幻加菲猫 选择“Base64编码解码” 输入需要编码/解码的内容&#xff0c;点击“编码”/“解码”按钮 编码&#xff1a; 解码&#xff1a; 4. 复制已经编码/解码后的内容。

大数据交通行政执法监测系统

交通行政执法监测系统应用系统按照监测主体可分为&#xff1a;出租车交通违法监测&#xff0c;客车交通违法监测&#xff0c;货车、危化品车辆交通违法监测&#xff0c;非法营运车辆监测。功能模块涵盖&#xff1a;特征识别、档案查询、预警分析等。 &#xff08;1&#xff09;…

腾讯云服务器之ssh远程连接登录及转发映射端口实现内网穿透(实现服务器访问本地电脑端口)

目录 一、创建密钥绑定实例二、设置私钥权限三、ssh远程连接到服务器四、修改root密码五、端口转发&#xff08;实现服务器访问本地电脑的端口&#xff09; 一、创建密钥绑定实例 创建密钥会自动下载一个私钥&#xff0c;把这个私钥复制到c盘 二、设置私钥权限 1、删除所有用户…

前端笔记-day04

文章目录 01-后代选择器02-子代选择器03-并集选择器04-交集选择器05-伪类选择器06-拓展-超链接伪类07-CSS特性-继承性08-CSS特性-层叠性09-CSS特性-优先级11-Emmet写法12-背景图13-背景图平铺方式14-背景图位置15-背景图缩放16-背景图固定17-background属性18-显示模式19-显示模…

NPOI生成word浮动图标

1、NPOI版本2.7.0, net框架4.8 2、安装OpenXMLSDKToolV25.msi 3、先创建一个word文档&#xff0c;并设置图片为浮于文字之上 4、OpenXML显示的结果 5、实际代码如下&#xff1a; public class GenerateWordDemo {public GenerateWordDemo(){}//https://blog.fileformat.co…

word-排版文本基本格式

1、文本的基本格式&#xff1a;字体格式、段落格式 2、段落&#xff1a;word排版的基本控制单位 3、每敲一次回车&#xff0c;为一个段落标记&#xff0c;注意区分换行符和段落标记&#xff0c;换行符为指向下的箭头&#xff0c;段落标记为带拐弯的箭头&#xff0c;换行符&…

C语言基础——循环语句

&#x1f33a;​&#x1f64f;&#x1f64f;&#x1f64f;欢迎大家观看&#xff0c;写的好的话希望三连感谢&#x1f64f;&#x1f64f;&#x1f64f;&#x1f33a; 文章目录 一、循环语句的介绍 二、不同循环语句的使用 1.while循环 1.1 while循环的使用方式 1.2 while循环的执…

Java | Leetcode Java题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution {public int largestRectangleArea(int[] heights) {int n heights.length;int[] left new int[n];int[] right new int[n];Arrays.fill(right, n);Deque<Integer> mono_stack new ArrayDeque<Integer>();f…

https免费证书获取

获取免费证书的网址&#xff1a; Certbot 1. 进入你的linux系统&#xff0c;先安装snapd&#xff0c; yum install snapd 2. 启动snapd service snapd start 3.安装 Certbot snap install --classic certbot 注意如下出现此错误时&#xff0c;需要先建立snap 软连接后&am…