基于微信小程序的智能问卷调查系统设计与实现(源码+定制+解答)基于微信生态的问卷管理与数据分析系统设计

news2025/5/25 10:59:10

博主介绍:
    ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。

技术范围:
    我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方面的设计与开发。如果你有任何技术难题,我都乐意与你分享解决方案。

 主要内容:
     我的服务内容包括:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文撰写与辅导、论文降重、长期答辩答疑辅导。我还提供腾讯会议一对一的专业讲解和模拟答辩演练,帮助你全面掌握答辩技巧与代码逻辑。

🍅获取源码请在文末联系我🍅

温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!

温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!

第二章 开发工具和开发技术

2.1系统的开发环境与开发工具

本系统在开发时选用Windows10中文家庭版为操作系统,选用了JAVA语言,与此同时选用了Mysql为数据库开发工具,两者的兼容性能是最佳的,所以很适合用来开发这款系统。

网页制作以及代码的编写,运用Eclipse开发工具,它可以清晰的整理代码。数据库采用MySQL,与编程开发工具兼容,易于管理维护。

2.2 JAVA技术概述

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,SSM,和XML技术。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于企业Web应用程序开发和移动应用程序开发。Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

2.3 SSM 框架

SSM框架是一种流行的Java Web开发框架,它由Spring框架、Spring MVC和MyBatis三个开源框架组合而成。SSM框架是一种非常高效、灵活和可扩展的Web应用程序开发方式,它充分利用了Spring框架的轻量级、可扩展性和灵活性,以及MyBatis框架的数据访问层分离和ORM能力,实现了前后端分离、模块化开发和快速响应等优点。

SSM框架的优势在于其组件化的开发方式,通过将业务逻辑、数据访问层和表示层分离,提高了代码的可维护性和可扩展性。同时,SSM框架还提供了丰富的组件和工具,如Spring的IoC容器和AOP注解,MyBatis的数据访问组件和XML映射文件等,使得开发人员能够更快速地构建Web应用程序。

SSM框架的核心思想是将Web应用程序的开发分解为三个主要部分:业务逻辑层、数据访问层和表示层。其中,业务逻辑层负责处理业务逻辑和规则判断,数据访问层负责与数据库进行交互和数据持久化,表示层负责展示用户界面和处理用户请求。通过这种方式,开发人员可以将不同的功能模块分离出来,并在不同的层次上进行开发和测试,从而提高开发效率和质量。

2.4 微信小程序介绍

微信小程序是一种可以直接在微信上运行的应用服务。具备开发周期短、成本低、用户无须安装即开即用、无须占用内存等优点,已经广泛应用于电商、教育、服务等行业。微信小程序使用运行机制为“响应—绑定”的 MINA 框架,开发者只需关注前端视图层和后端逻辑层的代码开发。视图层完成逻辑层数据在页面展示,并将视图层事件发送到逻辑层;逻辑层专注具体业务处理;视图层与逻辑层数据传递遵从 JSON 格式。 前端视图层采用 WXML(WeiXin Markup Language)与 WXSS(WeiXin Style Sheet)编写。WXML是微信标记语言,用于描述页面的结构;WXSS 是样式语言,用于描述页面的样式。后端逻辑层采用 Spring Boot 和 MyBatis-Plus 框架进行 开发。Spring 是开源的 Java 主流框架,提供了具有控制反转 和切面编程能力的容器。Spring Boot 在其基础上,简化配置文件并内置Web 容器,是使用最为广泛的微服务开发框架之一。MyBatis 是一款优秀的基于Java 语言的持久层框架,对JDBC 进行封装,屏蔽了 JDBC API 底层访问细节,解决了Java 实体和数据库映射问题。开发者只需要关注 SQL 语句本身即可完成数据持久化操作。Mybatis-Plus 框架是 Mybatis 框架的增强版,继承 Mybatis 功能外,新增 Lambda 形式调用、简化单表操作等功能。

2.5 Mysql数据库技术

MySQL是一种关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种通用的、开源的关系型数据库管理系统,广泛应用于各种类型的项目中,如网站、企业级应用等。MySQL支持多种存储引擎,包括InnoDB、MyISAM等,可以根据项目需求选择合适的存储引擎。MySQL具有高性能、高可靠性、易用性等特点,被广泛应用于各种类型的项目中。

2.6 B/S结构

B/S结构(Browser/Server,浏览器/服务器结构)是一种网络应用模式,它将软件的功能分为客户端和服务器端两部分。在这种结构中,用户通过浏览器访问服务器端的应用程序,而应用程序的数据处理和逻辑运算则由服务器端完成。

B/S结构的优点是易于维护和升级,因为所有的功能都在服务器端实现,客户端只需安装浏览器即可。B/S结构具有较高的可扩展性和跨平台性,用户无需安装专门的客户端软件,只要有网络连接就可以访问应用程序。在B/S结构中,用户界面是关键,因为它直接影响到用户的使用体验。为了提供良好的用户体验,开发者需要关注界面设计、交互设计和响应速度等方面。安全性也是B/S结构中不可忽视的问题,开发者需要采取一定的安全措施来保护用户数据和系统资源。

5.1.1登录界面的实现

在登录流程中,用户首先在Uni前端界面输入用户名和密码。这些信息通过HTTP请求发送到Java后端。后端接收请求,通过与MySQL数据库交互验证用户凭证。如果认证成功,后端会返回给前端,允许用户访问系统。这个过程涵盖了从用户输入到系统验证和响应的全过程。登录界面如图5-1所示。

图5-1 登录界面

在注册流程中,用户在Uni前端填写必要信息(如用户名、密码等)并提交。前端将这些信息通过HTTP请求发送到Java后端。后端处理这些信息,检查用户名是否唯一,并将新用户数据存入MySQL数据库。完成后,后端向前端发送注册成功的确认,前端随后通知用户完成注册。这个过程实现了新用户的数据收集、验证和存储。注册界面如图5-2所示。

图5-2 注册界面

5.1.2 小程序首页功能的实现

小程序首页是用户注册登录后进入的第一个界面,在这里,人们能够看到小程序的导航条,内容包括首页、食疗商品、交流论坛、购物车、我的等。小程序首页界面如图5-3所示。

图5-3 小程序首页界面图

问卷调查:在问卷调查输入栏中输入标题进行查看问卷调查详情信息,根据需要可以进行收藏操作。问卷调查详情如图5-4所示。

图5-4问卷调查详情界面图

5.2后台模板实现

在登录流程中,用户首先在Vue前端界面输入用户名和密码。这些信息通过HTTP请求发送到Java后端。后端接收请求,通过与MySQL数据库交互验证用户凭证。如果认证成功,后端返回给前端,允许用户访问系统。这个过程涵盖了从用户输入到系统验证和响应的全过程。管理员登录界面图5-5所示。

图5-5 管理员登录界面

5.2.1管理员功能实现

管理员进入主页面,主要功能包括对用户、发布者、问卷调查、问卷提交、考试信息、报名表单、在线报名、投票信息、在线投票、在线考试管理、试题管理、轮描图管理、考试管理等进行操作。管理员主页面如图5-6所示:

图5-6管理员主界面

用户管理功能在视图层(view层)进行交互,比如点击“搜索、新增或删除”按钮或填写用户管理信息表单。这些用户管理信息动作被视图层捕获并作为请求发送给相应的控制器层(controller层)。控制器接收到这些请求后,调用服务层(service层)以执行相关的业务逻辑,例如验证输入数据的有效性和与数据库的交互。服务层处理完这些逻辑后,进一步与数据访问对象层(DAO层)交互,后者负责具体的数据操作如更多、改动或删除用户信息,并将操作结果返回给控制器。最终,控制器根据这些结果更新视图层,以便用户管理功能可以看到最新的信息或相应的操作反馈。如图5-7所示:

图5-7用户管理界面

发布者功能在视图层(view层)进行交互,比如点击“搜索、新增或删除”按钮或填写发布者信息表单。这些发布者信息动作被视图层捕获并作为请求发送给相应的控制器层(controller层)。控制器接收到这些请求后,调用服务层(service层)以执行相关的业务逻辑,例如验证输入数据的有效性和与数据库的交互。服务层处理完这些逻辑后,进一步与数据访问对象层(DAO层)交互,后者负责具体的数据操作如更多、改动或删除发布者信息,并将操作结果返回给控制器。最终,控制器根据这些结果更新视图层,以便发布者功能可以看到最新的信息或相应的操作反馈。如图5-8所示:

图5-8发布者界面

管理员点击问卷调查。进入问卷调查页面输入标题、问卷类型或发布者姓名进行搜索、新增或删除问卷调查详细信息。并进行更多、改动或删除操作。如图5-6所示:

图5-6问卷调查界面

package com.controller;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.WenjuantijiaoEntity;
import com.entity.view.WenjuantijiaoView;

import com.service.WenjuantijiaoService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.MapUtils;
import com.utils.CommonUtil;

/**
 * 问卷提交 
 * 后端接口
 * @author 
 * @email 
 * @date 2024-03-22 20:39:46
 */
@RestController
@RequestMapping("/wenjuantijiao")
public class WenjuantijiaoController {
    @Autowired
    private WenjuantijiaoService wenjuantijiaoService;





    



    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WenjuantijiaoEntity wenjuantijiao, 
		HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("fabuzhe")) {
			wenjuantijiao.setFabuzhezhanghao((String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("yonghu")) {
			wenjuantijiao.setZhanghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();


		PageUtils page = wenjuantijiaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenjuantijiao), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,WenjuantijiaoEntity wenjuantijiao, 
		HttpServletRequest request){
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();

		PageUtils page = wenjuantijiaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenjuantijiao), params), params));
        return R.ok().put("data", page);
    }


	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( WenjuantijiaoEntity wenjuantijiao){
       	EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();
      	ew.allEq(MPUtil.allEQMapPre( wenjuantijiao, "wenjuantijiao")); 
        return R.ok().put("data", wenjuantijiaoService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WenjuantijiaoEntity wenjuantijiao){
        EntityWrapper< WenjuantijiaoEntity> ew = new EntityWrapper< WenjuantijiaoEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wenjuantijiao, "wenjuantijiao")); 
		WenjuantijiaoView wenjuantijiaoView =  wenjuantijiaoService.selectView(ew);
		return R.ok("查询问卷提交成功").put("data", wenjuantijiaoView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WenjuantijiaoEntity wenjuantijiao = wenjuantijiaoService.selectById(id);
        wenjuantijiao = wenjuantijiaoService.selectView(new EntityWrapper<WenjuantijiaoEntity>().eq("id", id));
        return R.ok().put("data", wenjuantijiao);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        WenjuantijiaoEntity wenjuantijiao = wenjuantijiaoService.selectById(id);
        wenjuantijiao = wenjuantijiaoService.selectView(new EntityWrapper<WenjuantijiaoEntity>().eq("id", id));
        return R.ok().put("data", wenjuantijiao);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody WenjuantijiaoEntity wenjuantijiao, HttpServletRequest request){
    	//ValidatorUtils.validateEntity(wenjuantijiao);

        wenjuantijiaoService.insert(wenjuantijiao);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
	@IgnoreAuth
    @RequestMapping("/add")
    public R add(@RequestBody WenjuantijiaoEntity wenjuantijiao, HttpServletRequest request){
    	//ValidatorUtils.validateEntity(wenjuantijiao);

        wenjuantijiaoService.insert(wenjuantijiao);
        return R.ok();
    }




    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody WenjuantijiaoEntity wenjuantijiao, HttpServletRequest request){
        //ValidatorUtils.validateEntity(wenjuantijiao);
        wenjuantijiaoService.updateById(wenjuantijiao);//全部更新
        return R.ok();
    }

    /**
     * 审核
     */
    @RequestMapping("/shBatch")
    @Transactional
    public R update(@RequestBody Long[] ids, @RequestParam String sfsh, @RequestParam String shhf){
        List<WenjuantijiaoEntity> list = new ArrayList<WenjuantijiaoEntity>();
        for(Long id : ids) {
            WenjuantijiaoEntity wenjuantijiao = wenjuantijiaoService.selectById(id);
            wenjuantijiao.setSfsh(sfsh);
            wenjuantijiao.setShhf(shhf);
            list.add(wenjuantijiao);
        }
        wenjuantijiaoService.updateBatchById(list);
        return R.ok();
    }
    
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        wenjuantijiaoService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
	







    /**
     * (按值统计)
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}")
    public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("fabuzhe")) {
            ew.eq("fabuzhezhanghao", (String)request.getSession().getAttribute("username"));
        }
        if(tableName.equals("yonghu")) {
            ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = wenjuantijiaoService.selectValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * (按值统计(多))
     */
    @RequestMapping("/valueMul/{xColumnName}")
    public R valueMul(@PathVariable("xColumnName") String xColumnName,@RequestParam String yColumnNameMul, HttpServletRequest request) {
        String[] yColumnNames = yColumnNameMul.split(",");
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        List<List<Map<String, Object>>> result2 = new ArrayList<List<Map<String,Object>>>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("fabuzhe")) {
            ew.eq("fabuzhezhanghao", (String)request.getSession().getAttribute("username"));
        }
        if(tableName.equals("yonghu")) {
            ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
        }
        for(int i=0;i<yColumnNames.length;i++) {
            params.put("yColumn", yColumnNames[i]);
            List<Map<String, Object>> result = wenjuantijiaoService.selectValue(params, ew);
            for(Map<String, Object> m : result) {
                for(String k : m.keySet()) {
                    if(m.get(k) instanceof Date) {
                        m.put(k, sdf.format((Date)m.get(k)));
                    }
                }
            }
            result2.add(result);
        }
        return R.ok().put("data", result2);
    }

    /**
     * (按值统计)时间统计类型
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
    public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        params.put("timeStatType", timeStatType);
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("fabuzhe")) {
            ew.eq("fabuzhezhanghao", (String)request.getSession().getAttribute("username"));
        }
        if(tableName.equals("yonghu")) {
            ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = wenjuantijiaoService.selectTimeStatValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * (按值统计)时间统计类型(多)
     */
    @RequestMapping("/valueMul/{xColumnName}/{timeStatType}")
    public R valueMulDay(@PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,@RequestParam String yColumnNameMul,HttpServletRequest request) {
        String[] yColumnNames = yColumnNameMul.split(",");
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("timeStatType", timeStatType);
        List<List<Map<String, Object>>> result2 = new ArrayList<List<Map<String,Object>>>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("fabuzhe")) {
            ew.eq("fabuzhezhanghao", (String)request.getSession().getAttribute("username"));
        }
        if(tableName.equals("yonghu")) {
            ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
        }
        for(int i=0;i<yColumnNames.length;i++) {
            params.put("yColumn", yColumnNames[i]);
            List<Map<String, Object>> result = wenjuantijiaoService.selectTimeStatValue(params, ew);
            for(Map<String, Object> m : result) {
                for(String k : m.keySet()) {
                    if(m.get(k) instanceof Date) {
                        m.put(k, sdf.format((Date)m.get(k)));
                    }
                }
            }
            result2.add(result);
        }
        return R.ok().put("data", result2);
    }

    /**
     * 分组统计
     */
    @RequestMapping("/group/{columnName}")
    public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("column", columnName);
        EntityWrapper<WenjuantijiaoEntity> ew = new EntityWrapper<WenjuantijiaoEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("fabuzhe")) {
            ew.eq("fabuzhezhanghao", (String)request.getSession().getAttribute("username"));
        }
        if(tableName.equals("yonghu")) {
            ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = wenjuantijiaoService.selectGroup(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }






}

为什么选择我(我可以给你的定制项目推荐核心功能,一对一推荐)实现定制!!!
     博主提供的项目均为博主自己收集和开发的!所有的源码都经由博主检验过,能过正常启动并且功能都没有问题!同学们拿到后就能使用!且博主自身就是高级开发,可以将所有的代码都清晰讲解出来。
源码获取
文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏

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

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

相关文章

React 如何封装一个可复用的 Ant Design 组件

文章目录 前言一、为什么需要封装组件&#xff1f;二、 仿antd组件的Button按钮三、封装一个可复用的表格组件 (实战)1. 明确需求2. 设计组件 API3. 实现组件代码4. 使用组件 三、封装组件的最佳实践四、进阶优化 总结 前言 作为一名前端开发工程师&#xff0c;在日常项目中&a…

Canvas SVG BpmnJS编辑器中Canvas与SVG职能详解

Canvas详解与常见API 一、Canvas基础 核心特性 • 像素级绘图&#xff1a;Canvas是基于位图的绘图技术&#xff0c;通过JavaScript操作像素实现图形渲染&#xff0c;适合动态、高性能场景&#xff08;如游戏、数据可视化&#xff09;。 • 即时模式&#xff1a;每次绘制需手动…

dify多实例部署,一台机器部署多个dify实例

dify多实例部署 目的 实现在一台机器上&#xff0c;部署多个dify的实例。比如一个部署1.2版本&#xff0c;一个部署1.3版本。废话没有&#xff0c;直接上干货。 前提 你的电脑已经部署了一个dify实例&#xff0c;并成功运行。比如已经部署成功0.15.3版本。 步骤如下&#…

ML 48.机器学习之临床生存树(rpartSurv)

简介机器学习中生存树&#xff08;Survival Tree&#xff09;的原理详解 生存树是结合决策树与生存分析的机器学习模型&#xff0c;主要用于处理带有时间-事件数据&#xff08;包含删失数据&#xff09;的预测问题。其核心目标是&#xff1a;通过树状结构对数据进行递归分割&am…

HarmonyOS 应用开发,如何引入 Golang 编译的第三方 SO 库

本指南基于笔者临时修复的 ohos_golang_go 项目fork&#xff0c;解决HO 应用导入 cgo编译产物时的 crash 问题。 1. 下载 ohos_golang_go git clone https://gitcode.com/deslord/ohos_golang_go.git&#x1f4cc; 该仓库为笔者临时修复版本&#xff0c;修复了 CGO 编译模式下…

一体化雷达波明渠流量计简介

一、技术定义与核心原理 一体化雷达波明渠流量计是基于微波技术的全自动流量监测设备&#xff0c;采用 24G K 波段平面雷达技术&#xff0c;通过非接触式测量方式实现对明渠、河道、排水管网等场景的水位、流速及流量监测。其核心原理是利用雷达发射高频电磁波&#xff0c;经水…

Pr -- 耳机没有Pr输出的声音

问题 很久没更新视频号了&#xff0c;想用pr剪辑一下&#xff0c;结果使用Pr打开后发现耳机没有Pr输出的声音 解决方法 在编辑--首选项-音频硬件中设置音频硬件的输出为当前耳机设备

白皮精读:2024年国家数据基础设施建设指引【附全文阅读】

《国家数据基础设施建设指引》提出建设覆盖数据采集至安全全链条的新型基础设施,目标到 2029 年形成横向联通、纵向贯通的格局,聚焦数据可信流通、算力协同、高速传输、安全保障四大功能,明确技术架构与重点方向,强调政府与市场协同,分阶段推进试点及规模化部署,为数字中…

穿屏技巧:Mac-Windows一套鼠标键盘控制多台设备 (sharemouse6.0-Keygen)| KM-401A

文章目录 引言I sharemouse6.0介绍功能介绍关闭自动更新安装包II 安装系统对应的sharemouse软件Windowsmac版本III 知识扩展:SCP、FTP、SSH文件传输SCP配置SSH密钥免密登录FTP(File Transfer Protocal,文件传输协议)引言 基于USB进行同步键盘和鼠标事件,更流畅。 基于局域…

【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化

目录 前言 一、空间检索简介 1、空间表结构 2、四至空间检索 二、前后端实现 1、后端实现 2、前端集成 三、成果展示 1、东部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、总结 前言 在当今数字化时代&#xff0c;地理信息数据的分析与可视化对于众…

如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题?

环境: SearXNG Qwen3-32B-FP8 vllm 0.8.5 问题描述: 如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题? 解决方案: 一、安装searxng 1.按需新建模型相关文件夹 mkdir MCP chmod 777 /mnt/program/MCP2.配置conda源 nano ~/.condarc nano…

服务器硬盘虚拟卷的处理

目前的情况是需要删除逻辑卷&#xff0c;然后再重新来弄一遍。 数据已经备份好了&#xff0c;所以不用担心数据会丢失。 查看服务器的具体情况 使用 vgdisplay 操作查看服务器的卷组情况&#xff1a; --- Volume group ---VG Name vg01System IDFormat …

一个国债交易策略思路

该国债交易策略的核心在于通过分析历史价格数据来识别市场趋势&#xff0c;并在趋势确认时进行开仓操作。策略的设计思路结合了价格波动范围的计算和市场波动性的评估&#xff0c;旨在捕捉市场的短期趋势并控制风险。 首先&#xff0c;策略通过对过去5根K线的最高价和最低价进行…

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球 文章目录 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球前言高斯函数一维高斯多维高斯 椭球基本定义一般二次形式 3D高斯椭球3D高斯与椭球的关系各向同性(Isotropic)和…

手写ES6 Promise() 相关函数

手写 Promise() 相关函数&#xff1a; Promise()、then()、catch()、finally() // 定义三种状态常量 const PENDING pending const FULFILLED fulfilled const REJECTED rejectedclass MyPromise {/*定义状态和结果两个私有属性:1.使用 # 语法&#xff08;ES2022 官方私有字…

【NLP 76、Faiss 向量数据库】

压抑与痛苦&#xff0c;那些辗转反侧的夜&#xff0c;终会让我们更加强大 —— 25.5.20 Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由 Facebook AI 团队开发的一个开源库&#xff0c;用于高效相似性搜索的库&#xff0c;特别适用于大规模向…

软件名称:系统日志监听工具 v1.0

软件功能&#xff1a;一款基于 PyQt5 开发的 Windows 系统日志监听工具&#xff0c;适用于系统运维、网络管理、故障排查等场景&#xff0c;具备以下核心功能&#xff1a; 支持监听系统三大日志源&#xff1a;应用程序 / 系统 / 安全日志实时抓取新日志事件&#xff0c;自动滚…

Spring AI 之结构化输出转换器

截至 2024 年 2 月 5 日,旧的 OutputParser、BeanOutputParser、ListOutputParser 和 MapOutputParser 类已被弃用,取而代之的是新的 StructuredOutputConverter、BeanOutputConverter、ListOutputConverter 和 MapOutputConverter 实现类。后者可直接替换前者,并提供相同的…

Java虚拟机面试题:内存管理(上)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

进程间通信I·匿名管道

目录 进程间通信&#xff08;IPC&#xff09; 含义 目的 分类 匿名管道 原理 创建过程 特性 四大情况 close问题 代码练习 简单通信 进程池 小知识 进程间通信&#xff08;IPC&#xff09; 含义 就是让不同的进程能看到同一份资源&#xff0c;实现数据交流。 …