基于Java生鲜蔬菜食品商城系统详细设计和实现

 博主介绍公司项目主程、全网粉丝10W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计

🍅文末获取源码联系🍅

🍅CSDN官方推荐10W+JAVA技术人文章发布打卡社区🍅

目录

一、前言介绍:

二、系统设计:

系统性能分析

系统功能需求分析:

登录模块主要流程图

​编辑系统数据模型

三、功能截图:

系统前端首页:

用户登陆注册

系统前台首页:

商品信息展示:

商品详情展示:

购物车信息:

个人中心:

新闻咨询:

用户端后端管理:

管理员后端管理:

用户管理:

商品分类管理:

商品类型管理:

商品信息管理:

商品评价管理:

系统轮播图管理:

新闻咨询管理:

订单模块管理:

四、数据设计:

五、代码实现:

六、源码获取:


一、前言介绍:

        随着现代网络技术发展,对于生鲜蔬菜食品商城系统现在正处于网络发展的阶段,所以对它的要求也是比较严格的,要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式,依靠网络技术的的快速发展和现代通讯技术的结合为用户带来方便,可以方便管理员网上管理,生鲜蔬菜食品商城系统信息,还可以通过这些技术实现发布生鲜蔬菜食品商城系统等过程。当今社会互联网急速发展,电子商务系统也在国内爆炸式的发展起来。这种网络模式对长期使用互联网社会产生了深远的影响,在这种社会环境下开发一个适用于用户都可以操作的、简单的、便捷的生鲜蔬菜食品商城系统的发展前景是非常好的。

       生鲜蔬菜食品商城系统是一个典型的管理系统,在整个系统的发展来看包括数据库的设计、分析、连接、功能实现和系统维护以及用户的正确操作方式,对于上述的问题我们根据用户的实际情况来设计出一个典型的生鲜蔬菜食品商城系统,在一定的基础上保证了这个系统的完整性和安全性。在整个系统程序当中的功能我们要保证用户方便使用而且易于操作的特点。在当今社会当中随着现代科学技术网络的快速发展和用户对网络技术意识不断提高,网络给用户带来强大的功能早已经被用户所接受,就拿这个生鲜蔬菜食品商城系统来说,在整个系统当中开发它的要求是越来越高,同时所用的软件环境也是要不断提高。对于这个生鲜蔬菜食品商城系统来说它已经满足现代化的信息化、潮流化的管理。能够有效的提高生鲜蔬菜食品商城系统人员的工作效率和工作信心。

二、系统设计:

系统性能分析

如果我们想要对前后台处理的层次分明那么我们就要采用B/S模式来进行系统的开发这样就可以方便用户的使用。

对于系统的开发和设计我们就要采用大家日常所需要的要求,这样一来可以提高系统的适用性也能保证系统利用价值。对于一个系统来说一个好的框架是很重要的,因为一个好的框架它可以提高系统的稳定和高效性。

在系统界面上也要设计一个方便快捷的登录界面,这样就可以提高用户对系统操作性和适用性。

在系统模块设计当中我们要对系统各个模块进行合理简化和设计,这样就能提高系统使用性。

对于一个完整的系统来说对于它的测评和测试是比较重要的,所以我们在软件设计程序中要保持软件占用的时间和速度快的特点。

对于这个系统来说我们首先要考虑所设计出的系统它具有那些突破和体现,所以我们尽力去改进这个系统去适应用户

系统功能需求分析:

对于一个新的网站来说开发新网站我们就要做出这个系统的任务需求分析,因为对系统分析的质量好坏它可以决定这个网站开发的意义,俗话说得好一个好的开头是成功的一半,对于开发这个网上图书购物系统来说前期的分析是比较重要的,所以任务分析它可以决定这系统的开展和设计,这样就可以保证用户满意性。

任务的需求它能决定这个系统开发过程当中一个重要环节,所以我们在系统开发过程所用质量是比较重要的,因为我们在系统应用过程当中不一定那会出现问题,所以我们在进行对系统分析是比较重要的,因为它可以决定这个系统功能和需求。

本课题要求实现一套 生鲜蔬菜食品商城系统的开发与实现,主要实现功能包括管理员:首页、个人中心、商品分类管理、商品信息管理、商品折扣管理、商品旧书管理、用户管理、订单评价管理、管理员管理、系统管理、订单管理,

前台使用:首页、商品信息、特价区、商品折扣、公告资讯、个人中心、后台管理、购物车、客服

登录模块主要流程图

系统数据模型

按照设计的这个药品系统的具体分析,可以描绘出这个系统各个部分功能模块之间的主要关联关系。系统每个模块的E-R 图如下所示

三、功能截图:

系统前端首页:

用户登陆注册

通过用户注册获取用户名、密码、姓名、性别、头像、手机、邮箱等信息进行注册。

系统前台首页:

生鲜蔬菜食品商城系统,在系统首页可以查看首页、商品信息、特价区、商品折扣、公告资讯、个人中心、后台管理、购物车、客服,如图所示。

商品信息展示:

查看商品列表信息、可根据关键字以及条件搜索

商品详情展示:

可以查看商品名称、分类、图片、规格、价格等信息、可以对商品进行收藏、加入购物车、购买和查看详情以及评价等操作

购物车信息:

在购物车页面可以查看购买商品、价格、数量、总价等信息进行点击购买

确认下单,在确认下单页面可以查看选择、收件人、联系方式、地址等信息进行支付

个人中心:

新闻咨询:

前端用户可以查看公告资讯等

用户端后端管理:

管理员后端管理:

管理员后端主要功能有:个人中心、商品分类管理、商品信息管理、商品折扣管理、商品旧书管理、用户管理、订单评价管理、管理员管理、系统管理、订单管理

用户管理:

在用户管理页面可以查看用户名、密码、姓名、性别、头像、手机、邮箱等信息,并可根据需要对用户管理进行详情,删除或查看详细内容操作

商品分类管理:

商品类型管理:

商品信息管理:

商品评价管理:

订单评价管理进行编辑订单编号、评价标题、订单评分、评价日期、用户名、手机、邮箱、审核回复、审核状态、审核等信息进行添加修改、查看等操作。订单评价管理效果图如图所示。

 查看评价详情页面

系统轮播图管理:

该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作

新闻咨询管理:

管理员可以上传系统公告资讯以及在前端用户可以查看公告资讯等

订单模块管理:

四、数据设计:

在该系统的信息中,由于数据库的支持,我们可以对数据库进行收集、整理、更新和加工等操作。由于数据库的存储功能强大,所以数据库已经成为了计算机必不可少的一部分,一个数据库的好坏直接影响该系统的质量和效率。一个系统中的数据库是必不可少的,并且起着决定性因素。通过之前的系统分析,可以规划出本系统中使用的主要等,下面设计出这几个关键实体的实体关系图: 

订单管理实体E-R图如图所示

五、代码实现:


/*** 商品信息* 后端接口* @author * @email * @date 2022-05-13 12:42:37*/
@RestController
@RequestMapping("/shangpinxinxi")
public class ShangpinxinxiController {@Autowiredprivate ShangpinxinxiService shangpinxinxiService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( ShangpinxinxiEntity shangpinxinxi){EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi")); return R.ok().put("data", shangpinxinxiService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(ShangpinxinxiEntity shangpinxinxi){EntityWrapper< ShangpinxinxiEntity> ew = new EntityWrapper< ShangpinxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi")); ShangpinxinxiView shangpinxinxiView =  shangpinxinxiService.selectView(ew);return R.ok("查询商品信息成功").put("data", shangpinxinxiView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);shangpinxinxi.setClicktime(new Date());shangpinxinxiService.updateById(shangpinxinxi);return R.ok().put("data", shangpinxinxi);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") String id){ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);shangpinxinxi.setClicktime(new Date());shangpinxinxiService.updateById(shangpinxinxi);return R.ok().put("data", shangpinxinxi);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(shangpinxinxi);shangpinxinxiService.insert(shangpinxinxi);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(shangpinxinxi);shangpinxinxiService.insert(shangpinxinxi);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){//ValidatorUtils.validateEntity(shangpinxinxi);shangpinxinxiService.updateById(shangpinxinxi);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){shangpinxinxiService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<ShangpinxinxiEntity> wrapper = new EntityWrapper<ShangpinxinxiEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = shangpinxinxiService.selectCount(wrapper);return R.ok().put("count", count);}/*** 前端智能排序*/@IgnoreAuth@RequestMapping("/autoSort")public R autoSort(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request,String pre){EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();Map<String, Object> newMap = new HashMap<String, Object>();Map<String, Object> param = new HashMap<String, Object>();Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> entry = it.next();String key = entry.getKey();String newKey = entry.getKey();if (pre.endsWith(".")) {newMap.put(pre + newKey, entry.getValue());} else if (StringUtils.isEmpty(pre)) {newMap.put(newKey, entry.getValue());} else {newMap.put(pre + "." + newKey, entry.getValue());}}params.put("sort", "clicknum");params.put("order", "desc");PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));return R.ok().put("data", page);}}
# Tomcat
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springbootwebspring:datasource:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.1.145:3306/springbootdb?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8username: rootpassword: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 10MBresources:static-locations: classpath:/testStatic/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
#mybatis
mybatis-plus:mapper-locations: classpath*:mapper/*.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.entityglobal-config:#主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: 1#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#逻辑删除配置logic-delete-value: -1logic-not-delete-value: 0#自定义SQL注入器sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjectorconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: true#springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)jdbc-type-for-null: 'null'

六、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 253/  365天

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例《100套》

web前端期末大作业网页实战《100套》

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

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

相关文章

摄像头夜间拍摄画面有拖影_让客厅秒变健身房,OPPO智能电视R1+摄像头上手体验...

当前智能电视日趋普及&#xff0c;大屏电视资源也逐渐丰富&#xff0c;借助智能电视&#xff0c;消费者足不出户就能体验到更智能的人机交互和更便捷的生活服务。而购买OPPO智能电视R1所赠送的价值399元的摄像头&#xff0c;也赋予了OPPO智能电视R1更多的玩法&#xff0c;为我们…

【云原生】Spring Cloud是什么?Spring Cloud版本介绍

什么是SpringCloud 上一章节介绍了总体的SpringCloud的总体学习章节&#xff0c;因为最近项目刚好需要用到SpringCloud来搭建微服务项目、所以就跟着大家一起来再学习巩固下SpringCloud的相关知识 SpringCloud是基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注…

sap 一代增强_在SAP故乡,感受“边缘智能”之变

汉诺威工业博览会SAP展台在德国&#xff0c;有奔驰、宝马等汽车巨头&#xff0c;但SAP仍然是德国市值最高的企业&#xff0c;目前这家企业正在发生什么变化&#xff1f;5G、人工智能、区块链、VR/AR、物联网等新技术如火如荼&#xff0c;正在港口、汽车、叉车制造等客户带什么样…

基于Java+SpringBoot+vue+element实现餐厅点餐系统平台

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; 精彩专栏推荐&#x1f447;&a…

字典添加数据_MATLAB自动化——EXCEL与数据字典管理(一)

以下平台同步更新&#xff0c;欢迎喜欢的朋友收藏、分享知乎专栏&#xff1a;汽车电控杂谈微信公众号&#xff1a;AutoGeeker在从EXCEL自动生成Signal和Parameter到Workspace中一文中&#xff0c;我们将所有设计数据都定义在基础工作区。将设计数据存储位置设置在基础工作区&am…

【云原生】微服务架构SpringCloud和Dubbo的区别?

现在做技术开发都在转型微服务化架构、目前主要的选择就是Dubbo和SpringCloud、 Dubbo dubbo启动流程图 先说说Dubbo吧&#xff01;Dubbo是基于Tcp协议、是阿里巴巴开源的分布式服务治理框架&#xff0c;出现的时间比Spring Cloud早&#xff0c;并且当时国内在这方面并未成熟&…

ddmmyy日期格式是多少_解锁9个日期时间计算套路,效率提高3.2%

小伙伴们好啊&#xff0c;今天老祝和大家学习一组日期时间计算的套路&#xff0c;让工作效率再高一点点。1、日期时间合并如下图&#xff0c;需要将A列日期和B列的时间合并到一起&#xff0c;变成既有日期又带有时间的数据。C2公式为&#xff1a;A2B22、日期时间拆分如下图&…

基于Java+SpringBoot+vue+element实现婚纱摄影网系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; 精彩专栏推荐&#x1f447;&a…

【云原生】SpringCloud-Spring Boot Starter使用测试

目录 Spring Boot Starter是什么&#xff1f; 以前传统的做法 使用 Spring Boot Starter 之后 starter 的理念&#xff1a; starter 的实现&#xff1a; 创建Spring Boot Starter步骤 在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件&…

otn系统中常用的电层_自动化系统中常用的液位计

1、磁致伸缩液位计磁致伸缩液位计由探测杆、电路单元和浮子组成。首先&#xff0c;由电路单元提供电流脉冲&#xff0c;接着脉冲按照磁致伸缩线向下方向传输&#xff0c;构成环形磁场。浮子将会沿着探测杆并随液位的变化而往复移动。同时&#xff0c;浮子内的永磁铁产生一个磁场…

【云原生】微服务SpringCloud-eureka(server)集群搭建

目录 工作原理&#xff1a; eureka 高可用集群 项目创建&#xff1a; Maven 依赖 本地hosts文件修改 启动服务测试 工作原理&#xff1a; Spring Cloud框架下的服务发现Eureka包含两个组件 分别是: Eureka Server与Eureka Client Eureka Server,也称为服务注册中心。各个…

log解析工具 px4_console.log(console.log) = ?

在开始今天的内容之前&#xff0c;先想一下 console.log(console.log) 的结果是啥。前面有一篇文章 别担心把 console 带到线上 介绍了关于 console 在线上不打印的操作&#xff0c;今天我给大家普及另外一种技巧&#xff1a;通过 url 参数控制。比如线上访问地址是&#xff1a…

基于Java+SpringBoot+vue实现图书借阅和销售商城一体化系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; 精彩专栏推荐&#x1f447;&#x1…

【云原生】开源数据分析 SPL 轻松应对 T+0

T0问题 T0查询是指实时数据查询&#xff0c;数据查询统计时将涉及到最新产生的数据。在数据量不大时&#xff0c;T0很容易完成&#xff0c;直接基于生产数据库查询就可以了。但是&#xff0c;当数据量积累到一定程度时&#xff0c;在生产库中进行大数据量的查询会消耗过多的数…

这款国产API神器工具也太强了吧...让我放弃了postman

今天我发现了一款国产化的API工具&#xff0c;去官网看了下它的中文页面&#xff0c;觉得很干净、倍感亲切&#xff0c;我感觉Eolink结合了postman 和 swagger 的优点。摒弃了不足、甚至发生了公开踩踏事件&#xff0c;最近国产API管理工具越来越卷&#xff0c;但最后还是要回归…

快收藏!最适合计算机大学生的Java毕业设计项目--音乐视频网站系统!

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取源码联系&#x1f345; 精彩专栏推荐&#x1f447;&#x1…

基于Java+SpringBoot+mybatis+vue+element实现旅游管理系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&#x1f447;&#…

基于Java+SpringBoot+vue+elementui社区疫情防控系统详细设计实现

博主介绍&#xff1a;✌公司项目主程、全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&…

基于Java+SpringBoot+vue+elementui药品商城采购系统详细设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ &#x1f345;文末获取联系&#x1f345; 精彩专栏推荐&#x1f447;&a…

嵌套页面h5怎么调起手机文件_让微信公众号文章排版像网页h5一样高大上

做过微信公众号文章排版的同学都知道&#xff0c;微信自己的排版工具只能排些简单的图文混合。遇到这种同况时&#xff0c;很多同学会考虑用第三方编辑器或直接用他们的模板&#xff0c;然后稍微改改便直接发布。 没有我想要的排版样式怎么办&#xff0c;可以自己设计吗&#x…