QuillEditor无法识别显示含有div和转义字符的问题

在解决前端根据爬取抓过来的数据时,要显示到富文本框中,如下:

<div class=\"info_cont\" id=\"zoomcon\">\n <p><br></p><p style=\";text-align: justify;font-family: Calibri;font-size: 14px;white-space: normal;text-indent: 43px\"><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">近日,工业和信息化部等部门联合印发《绿色建材产业高质量发展实施方案》(以下简称《方案》),明确了目标任务,到</span><span style=\"font-family:仿宋_GB2312\">2026年,绿色建材年营业收入超过3000亿元,总计培育30个以上特色产业集群,建设50项以上绿色建材应用示范工程 ,政府采购政策实施城市不少于100个,绿色建材产品认证证书达到12000张。到2030年,绿色建材全生命周期内“节能、减排、低碳、安全、便利和可循环”水平进一步提升,形成一批国际知名度高的绿色建材生产企业和产品品牌。江苏作为绿色建材大省、绿色建材下乡活动试点地区,有责任也有义务率先推动《方案》落地见效,发挥试点带动作用,全力打造绿色建材高质量发展的江苏样板。</span></span></p><p style=\";text-align: justify;font-family: Calibri;font-size: 14px;white-space: normal;text-indent: 43px\"><span style=\"font-family: 黑体;font-size: 21px\"><span style=\"font-family:黑体\">一、充分认识《方案》的出台对促进绿色建材企业高质量发展的重大意义。</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">推进绿色建材产业高质量发展,企业是重要的承载体。《方案》中提出了坚持系统观念,统筹扩大内需和深化供给侧结构性改革,促进建材工业绿色化转型,推动绿色建材增品种、提品质、创品牌,提升全产业链内生力、影响力、增长力、支撑力,加速绿色建材产业高质量发展的总体要求,为企业未来走什么样的路径,指明了方向、提供了遵循。其中不仅明确了集群培育、政府采购、绿色认证等近期目标,还明确了到</span><span style=\"font-family:仿宋_GB2312\">2030年“形成一批国际知名度高的绿色建材生产企业和产品品牌”的中期目标,使企业发展更精准地找到发力点。《方案》中明确了推进产业高质量发展的4个方面12项重点任务及国家有关部门的职责分工,形成了有利于绿色建材产业发展的良好政策环境,对企业发展形成强有力的支撑。</span></span></p><p style=\";text-align: justify;font-family: Calibri;font-size: 14px;white-space: normal;text-indent: 43px\"><span style=\"font-family: 黑体;font-size: 21px\"><span style=\"font-family:黑体\">二、着力推进建材企业绿色化、智能化、协同化发展。</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">一是要加快生产过程绿色化。强化工艺升级、能源替代、节能降耗、资源循环利用等综合性措施,实现污染物和碳排放双下降。要优化用能结构,推动清洁生产,争创环保绩效</span><span style=\"font-family:仿宋_GB2312\">A、B级或绩效引领性企业,培育10个以上行业节能降碳技术创新示范企业。要以“六零”工厂为目标,建设“一零”试点生产,尤其是水泥、玻璃、陶瓷、玻纤及制品等重点行业企业更要开展节能降碳技术集成应用,到2026年创建省级以上绿色工厂100家。二是要加速生产方式智能化。推进企业加快推进与新一代信息技术深度融合,促进智能化生产、规模化定制、服务化延伸。到2026年,省级以上智能车间和智能工厂超过50家,关键序数控化率超过70%。推进建材企业积极探索多品种、小批量绿色建材产品柔性生产方式,更好适应定制化差异化需求。三是要推进产业发展协同化。建材企业要发挥“城市环境净化器”作用,利用工业窑炉协同处置各项废弃物和垃圾。增强企业核心竞争力,积极争创单项冠军企业。</span></span></p><p style=\";text-align: justify;font-family: Calibri;font-size: 14px;white-space: normal;text-indent: 43px\"><span style=\"font-family: 黑体;font-size: 21px\"><span style=\"font-family:黑体\">三、着力推进企业增品种、提品质、创品牌。</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">“增品种、提品质、创品牌”是企业提升影响力的重要手段。要推进企业加快实施“三品”行动:一是要加快推动产品升级,如水泥、玻璃等生产企业要推动低碳化、制品化发展;装饰、装修材料企业要推进产品功能化、装配化发展。要加大新产品开发,特别是围绕城市更新改造需求和农房绿色低碳建设需求,发展配套的绿色建材产品,到2026年,绿色建材认证产品生产企业超过600家。二是要努力提升产品品质。积极建立满足绿色建材生产的全过程控制及质量管控体系,严格生产工艺,全面提升产品质量,向卓越质量攀升。三是要扩大品牌影响。引导和鼓励企业制定品牌发展战略,创新品牌传播模式,加大品牌建设投入,推出更多让利于民的优惠促销措施。支持企业积极参与品牌价值评价、品牌宣传周、“绿色建材下乡”等活动,大力培育商标品牌,支持优质企业参与“江苏精品”认证,争创中国质量奖、省长质量奖等奖项,主动参与国际合作,不断增强国际社会对企业品牌的认同。</span></span></p><p style=\";text-align: justify;font-family: Calibri;font-size: 14px;white-space: normal;text-indent: 43px\"><span style=\"font-family: 黑体;font-size: 21px\"><span style=\"font-family:黑体\">四、着力推进企业加大模式、技术、产品创新。</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">一是要创新消费模式。推动生产企业主动联合房地产、建筑设计、装饰装修企业提供菜单式、定制化应用方案,探索装饰装修一体化服务新模式。企业家居体验馆、生活馆等新零售模式向社区和农村下沉,满足消费者多样化、个性化需求。二是要加大科技创新。企业要加大科技创新投入,积极联合上下游企业、高校、科研院所等,构建产学研用相结合的创新体系,进行工艺设备和产品攻关。联合软件开发商、装备制造商开展国产化替代技术攻关,打造一批具有自主知识产权、具有行业特点的专业工业软件和智能装备,并推进适应性改造与规模化应用,打造</span><span style=\"font-family:仿宋_GB2312\">10个智能制造单项应用及系统集成应用典范项目。</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">(</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">江苏省工业和信息化厅</span></span><span style=\"font-family: 仿宋_GB2312;font-size: 21px\"><span style=\"font-family:仿宋_GB2312\">)</span></span></p><p><br></p>\n </div>

QuillEditor标签无法识别它,如下

解决方法:先创建html,把内容复制给这个html

 

/** 编辑 */

async function editService(data) {

  let res  = await getPolicyDetail(data.id);

  serviceForm.value = {...res};

  console.log("serviceForm.value",serviceForm.value.content);

  serviceForm.value.content=htmlDecode(serviceForm.value.content);

  provinceData();

  text.value = "编辑政策";

  disabled1.value = false;

  dialogVisibleService.value = true;

}

解决方式

function htmlDecode(input) {

  console.log("input",input.innerHTML);

  var e = document.createElement('div');

  e.innerHTML = input;

  console.log("e",e);

  console.log("e.childNodes",e.childNodes);

  console.log("e.innerHTML",e.innerHTML);

  if(e.childNodes.length>1){

    return e.innerHTML

  }

  else{

    return e.childNodes[0].innerHTML;

  }

  // return  e.childNodes[0].innerHTML;

  //return e.childNodes.length === 0 ? '' : e.childNodes[0].innerHTML;

}

具体代码

<el-col :span="24">
  <el-form-item label="政策解读" prop="content">
    <Editor :modelValue="serviceForm.content" :disabled="disabled1"/>
  </el-form-item>
</el-col>

import Editor from "@/components/Editor";

<script setup>
    /** 编辑 */
async function editService(data) {
  let res  = await getPolicyDetail(data.id);
  serviceForm.value = {...res};
  console.log("serviceForm.value",serviceForm.value.content);
  serviceForm.value.content=htmlDecode(serviceForm.value.content);
  provinceData();
  text.value = "编辑政策";
  disabled1.value = false;
  dialogVisibleService.value = true;
}

function htmlDecode(input) {
  console.log("input",input.innerHTML);
  var e = document.createElement('div');
  e.innerHTML = input;

  console.log("e",e);
  console.log("e.childNodes",e.childNodes);

  console.log("e.innerHTML",e.innerHTML);

  if(e.childNodes.length>1){
    return e.innerHTML
  }
  else{
    return e.childNodes[0].innerHTML;
  }

  //return e.innerHTML;

  // if(e.childNodes.length==1){
  //   return e.childNodes[0].innerHTML;
  // }
  // else if(e.childNodes.length > 1){
  //   const htmlStr="";
  //   for(var i=0;i<e.childNodes.length;i++)
  //   {
  //     console.log("htmlStr",e.childNodes[i]);
  //     htmlStr+=e.childNodes[i];
  //   }

  //   console.log("htmlStr",htmlStr);
  //   return htmlStr;
  // }

  // return  e.childNodes[0].innerHTML;
  //return e.childNodes.length === 0 ? '' : e.childNodes[0].innerHTML;
}
</script>

 /components/Editor/index.vue文件

<template>
  <div>
    <el-upload
      :action="uploadUrl"
      :before-upload="handleBeforeUpload"
      :on-success="handleUploadSuccess"
      :on-error="handleUploadError"
      class="editor-img-uploader"
      name="file"
      :show-file-list="false"
      :headers="headers"
      ref="uploadRef"
      v-if="type == 'url'"
    >
    </el-upload>
    <div class="editor">
      <quill-editor
        ref="quillEditorRef"
        v-model:content="content"
        contentType="html"
        @textChange="(e) => $emit('update:modelValue', content)"
        :options="options"
        :style="styles"
      />
    </div>
  </div>
</template>

<script setup>
import { QuillEditor, Quill } from '@vueup/vue-quill';
import '@vueup/vue-quill/dist/vue-quill.snow.css';
import { getToken } from "@/utils/auth";

const props = defineProps({
  /* 编辑器的内容 */
  modelValue: {
    type: String,
  },
  /* 高度 */
  height: {
    type: Number,
    default: null,
  },
  /* 最小高度 */
  minHeight: {
    type: Number,
    default: null,
  },
  /* 只读 */
  readOnly: {
    type: Boolean,
    default: false,
  },
  /* 上传文件大小限制(MB) */
  fileSize: {
    type: Number,
    default: 5,
  },
  /* 类型(base64格式、url格式) */
  type: {
    type: String,
    default: "url",
  }
});

const { proxy } = getCurrentInstance();
// 上传的图片服务器地址
const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/system/oss/upload");
const headers = ref({ Authorization: "Bearer " + getToken() });
const quillEditorRef = ref();

const options = ref({
  theme: "snow",
  bounds: document.body,
  debug: "warn",
  modules: {
    // 工具栏配置
    toolbar: {
      container: [
        ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
        ["blockquote", "code-block"],                    // 引用  代码块
        [{ list: "ordered" }, { list: "bullet"} ],       // 有序、无序列表
        [{ indent: "-1" }, { indent: "+1" }],            // 缩进
        [{ size: ["small", false, "large", "huge"] }],   // 字体大小
        [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 标题
        [{ color: [] }, { background: [] }],             // 字体颜色、字体背景颜色
        [{ align: [] }],                                 // 对齐方式
        ["clean"],                                       // 清除文本格式
        ["link", "image", "video"]                       // 链接、图片、视频
      ],
      handlers: {
        image: function (value) {
          if (value) {
            // 调用element图片上传
            document.querySelector(".editor-img-uploader>.el-upload").click();
          } else {
            Quill.format("image", true);
          }
        },
      },
    }
  },
  placeholder: "请输入内容",
  readOnly: props.readOnly,
});

const styles = computed(() => {
  let style = {};
  if (props.minHeight) {
    style.minHeight = `${props.minHeight}px`;
  }
  if (props.height) {
    style.height = `${props.height}px`;
  }
  return style;
});

const content = ref("");
watch(() => props.modelValue, (v) => {
  if (v !== content.value) {
    content.value = v === undefined ? "<p></p>" : v;
  }
}, { immediate: true });

// 图片上传成功返回图片地址
function handleUploadSuccess(res, file) {
  // 如果上传成功
  if (res.code == 200) {
    // 获取富文本实例
    let quill = toRaw(quillEditorRef.value).getQuill();
    // 获取光标位置
    let length = quill.selection.savedRange.index;
    // 插入图片,res为服务器返回的图片链接地址
    quill.insertEmbed(length, "image", res.data.url);
    // 调整光标到最后
    quill.setSelection(length + 1);
    proxy.$modal.closeLoading();
  } else {
    proxy.$modal.loading(res.msg);
    proxy.$modal.closeLoading();
  }
}

// 图片上传前拦截
function handleBeforeUpload(file) {
  const type = ["image/jpeg", "image/jpg", "image/png", "image/svg"];
  const isJPG = type.includes(file.type);
  //检验文件格式
  if (!isJPG) {
    proxy.$modal.msgError(`图片格式错误!`);
    return false;
  }
  // 校检文件大小
  if (props.fileSize) {
    const isLt = file.size / 1024 / 1024 < props.fileSize;
    if (!isLt) {
      proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
      return false;
    }
  }
  proxy.$modal.loading("正在上传文件,请稍候...");
  return true;
}

// 图片失败拦截
function handleUploadError(err) {
  proxy.$modal.msgError("上传文件失败");
}

</script>

<style>
.editor-img-uploader {
  display: none;
}
.editor, .ql-toolbar {
  white-space: pre-wrap !important;
  line-height: normal !important;
}
.quill-img {
  display: none;
}
.ql-snow .ql-tooltip[data-mode="link"]::before {
  content: "请输入链接地址:";
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
  border-right: 0px;
  content: "保存";
  padding-right: 0px;
}

.ql-snow .ql-tooltip[data-mode="video"]::before {
  content: "请输入视频地址:";
}

.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
  content: "14px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
  content: "10px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
  content: "18px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
  content: "32px";
}

.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
  content: "文本";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
  content: "标题1";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
  content: "标题2";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
  content: "标题3";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
  content: "标题4";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
  content: "标题5";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
  content: "标题6";
}

.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
  content: "标准字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
  content: "衬线字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
  content: "等宽字体";
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决Quartus与modelsim联合仿真问题:# Error loading design解决,是tb文件中没加:`timescale 1ns/1ns

解决Quartus与modelsim联合仿真问题&#xff1a;# Error loading design解决&#xff0c;是tb文件中没加&#xff1a;timescale 1&#xff0c;一直走下来&#xff0c;在modelsim中出现了下面问题2&#xff0c;rtl文件、tb文件2.1&#xff0c;rtl代码2.2&#xff0c;tb测试2.3&a…

设计模式23--观察者模式

定义 案例一 案例二 优缺点

《Python之路:系统自学指南》

引言 在当今信息时代&#xff0c;编程已经成为一项越来越重要的技能。而Python作为一门功能强大、易学易用的编程语言&#xff0c;受到了越来越多人的青睐。然而&#xff0c;学习Python并不是一蹴而就的事情&#xff0c;尤其是对于没有编程基础的初学者来说&#xff0c;往往需…

智慧城市一屏统览,数字孪生综合治理

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维&#xff0c;从构成城市诸多要素、结构、功能等方面入手&#xff0c;系统推进…

什么是JPA,JPA的概念

什么是JPA JPA&#xff08;Java Persistence API&#xff0c;Java持久化API&#xff09;&#xff0c;定义了对象-关系映射&#xff08;ORM&#xff09;以及实体对象持久化的标准接口,它是一套标准,具体的实现要根据不同的厂商来提供,就跟JDBC类型 持久化单元 持久化单元是运行…

进程概念篇

1. 冯诺依曼体系结构 目前市面上&#xff0c;几乎所有计算机的硬件构成都遵循冯诺依曼体系结构 与最原始的【输入设备->CPU->输出设备】这样简单的结构相比&#xff0c;冯诺依曼体系结构有何好处&#xff1f; 每次我们在键盘输入数据&#xff0c;经过CPU处理&#xff0c…

train拦截器

拦截器拦截到的请求&#xff0c;设置本地变量member&#xff0c;主要为了获取memberId&#xff0c;在passenger表中存放memberId。 拦截器&#xff1a; 乘客表外键memberId关联member表

开抖店卖什么产品最好?这些类目建议新手收藏好,带你快速起店!

大家好&#xff0c;我是电商小布。 各位小伙伴们加入到抖店这个市场当中&#xff0c;当然就是为了利用我们的小店实现产品转化工作。 而在我们开店的时候&#xff0c;就要考虑好一个东西&#xff0c;就是我们开店到底要卖什么&#xff1f;什么样的产品好卖&#xff1f; 跟这…

OSPF协议详解

静态缺点 1、中大型复杂网络----配置量大 2、不能实时收敛 动态-----可以实时收敛 IGP----内部网关路由协议 RIP OSPF EIGRP ISIS EGP----外部网关路由协议 BGP IGP &#xff08;选路佳 占用资源 收敛快&#xff09;----一个协议好需满足这三个 距离矢量 DV RIP…

Java 线程的状态

线程状态 操作系统的线程 从上图可以详细分析出线程的五种状态以及状态之间的切换。 1&#xff09;新建状态&#xff08;New&#xff09;&#xff1a;当线程对象对创建后&#xff0c;即进入了新建状态&#xff0c;如&#xff1a;Thread t new MyThread(); 2&#xff09;就绪…

【Vue3进阶】- 第2学堂小商城实战课程前言

该教程为进阶教程&#xff0c;如果你还不了解Vue3的基础知识&#xff0c;可以先前往Vue3基础教程&#xff0c;从入门到实战。 学习时遇到的任何疑问都欢迎在相应课文页面下方的问答区进行提问哦 我能学到什么&#xff1f; 编程写法千千万&#xff0c;实现需求是第一。 教程中…

智慧工地可视化解决方案(2)

系统功能 总体应用设计 系统业务分为中心管理、视频联网、人员管理、环境管理、起重机械管理、车辆管理。 每个业务对应一个或者多个硬件系统。中心管理为监控中心。视频联网包含视频联网监控和移动执法子系统。人员管理分为实名制考勤子系统和人员安全子系统(安全帽)。起…

5.11 Vue配置Element UI框架

Vue配置Element UI框架 目录一、 概要二、 开发前准备1. 搭建Vue框架 三、 安装 Element UI1. 引入 Element UI 依赖2. 在 main.js 中引入 Element UI 和相关样式&#xff1a;3. 按需引入(非必须, 可忽略)4. 简单构建一个主页面 目录 一、 概要 Element UI 是一个基于 Vue.js …

安卓Termux系统安装MariaDB结合内网穿透实现公网连接本地数据库

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

SSM框架学习——Spring事务管理

Spring事务管理 概念 事务&#xff08;Transaction&#xff09;是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行&#xff0c;要么都不执行&#xff0c;是一个不可分割的工作单元。 事务有如下特性&#xff1a; 原子性隔离性一致性持久性 …

116. 飞行员兄弟(递推+暴力)太难了不要求

输入样例&#xff1a; --- ---- ---- ---输出样例&#xff1a; 6 1 1 1 3 1 4 4 1 4 3 4 4 代码&#xff1a; #include<algorithm> #include<iostream> #include<cstring> #include<queue> #include<cmath> #define x first #define y second…

往word表格插入图片,表格大小如何不变形?

在word中进行大量图片排版时&#xff0c;往往会用到表格。然而在往word表格插入图片的过程中&#xff0c;表格往往会随图片大小自适应变化&#xff0c;如何保证图片自适应表格大小&#xff08;即图片按照所给定的表格大小自动缩放&#xff09;&#xff0c;解决方法如下&#xf…

小红书运营快捷回复工具

小红书作为一个热门的社交电商平台&#xff0c;吸引了众多品牌和个人用户进行运营和互动。而很多做小红书运营的姐妹&#xff0c;经常会有回评论懒得打字的困扰&#xff0c;为了提高回复评论和私信的效率&#xff0c;本文给大家推荐一款快捷回复工具&#xff0c;手机电脑都能用…

【Python使用】嘿马头条完整开发md笔记第3篇:数据库,1 新增【附代码文档】

嘿马头条项目从到完整开发笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;课程简介&#xff0c;ToutiaoWeb虚拟机使用说明1 产品介绍,2 原型图与UI图,3 技术架构,4 开发,1 需求,2 注意事项。数据库&#xff0c;理解ORM1 简介,2 安装,3 数据库连接…

电商新手选品易犯6大通病,85%的人都踩过雷!

电商选品是一个复杂而关键的过程&#xff0c;需要综合考虑多种因素&#xff0c;尤其对于刚刚涉猎电商行业的新手来更有难度&#xff0c;许多电商新手在选品过程中都会犯一些通病&#xff0c;以下是一些常见的电商选品通病以及调整建议&#xff0c;希望对大家有所帮助&#xff1…