ITÊýÂë ¹ºÎï ÍøÖ· Í·Ìõ Èí¼þ ÈÕÀú ÔĶÁ ͼÊé¹Ý
TxTС˵ÔĶÁÆ÷
¡ýÓïÒôÔĶÁ,С˵ÏÂÔØ,¹ÅµäÎÄѧ¡ý
ͼƬÅúÁ¿ÏÂÔØÆ÷
¡ýÅúÁ¿ÏÂÔØͼƬ,ÃÀŮͼ¿â¡ý
ͼƬ×Ô¶¯²¥·ÅÆ÷
¡ýͼƬ×Ô¶¯²¥·ÅÆ÷¡ý
Ò»¼üÇå³ýÀ¬»ø
¡ýÇáÇáÒ»µã,Çå³ýϵͳÀ¬»ø¡ý
¿ª·¢: C++֪ʶ¿â Java֪ʶ¿â JavaScript Python PHP֪ʶ¿â È˹¤ÖÇÄÜ Çø¿éÁ´ ´óÊý¾Ý Òƶ¯¿ª·¢ ǶÈëʽ ¿ª·¢¹¤¾ß Êý¾Ý½á¹¹ÓëËã·¨ ¿ª·¢²âÊÔ ÓÎÏ·¿ª·¢ ÍøÂçЭÒé ϵͳÔËά
½Ì³Ì: HTML½Ì³Ì CSS½Ì³Ì JavaScript½Ì³Ì GoÓïÑÔ½Ì³Ì JQuery½Ì³Ì VUE½Ì³Ì VUE3½Ì³Ì Bootstrap½Ì³Ì SQLÊý¾Ý¿â½Ì³Ì CÓïÑÔ½Ì³Ì C++½Ì³Ì Java½Ì³Ì Python½Ì³Ì Python3½Ì³Ì C#½Ì³Ì
ÊýÂë: µçÄÔ ±Ê¼Ç±¾ ÏÔ¿¨ ÏÔʾÆ÷ ¹Ì̬ӲÅÌ Ó²ÅÌ ¶ú»ú ÊÖ»ú iphone vivo oppo СÃ× »ªÎª µ¥·´ ×°»ú ͼÀ­¶¡
 
   -> JavaScript֪ʶ¿â -> wangEditor ¸»Îı¾±à¼­Æ÷ʵÏÖ--ʶ±ð--ÆÁ±Î--Ãô¸Ð´Ê»ã£¬ÉÏ´«Í¼Æ¬---ÉÏ´«±¾µØÊÓƵ -> ÕýÎÄÔĶÁ

[JavaScript֪ʶ¿â]wangEditor ¸»Îı¾±à¼­Æ÷ʵÏÖ--ʶ±ð--ÆÁ±Î--Ãô¸Ð´Ê»ã£¬ÉÏ´«Í¼Æ¬---ÉÏ´«±¾µØÊÓƵ

Ч¹ûͼ
ÔÚÕâÀï²åÈëͼƬÃèÊö
ÔÚÕâÀï²åÈëͼƬÃèÊö
ÔÚÕâÀï²åÈëͼƬÃèÊö

Ö±½Ó°ÑÍêÕû×é¼þÄóöÀ´,ʹÓÃʱºò×Ô¼º¿´ºÃ½Ó¿Ú¸ÉÂïµÄ,¶ÔÓ¦ÉÏ

<template>
  <div class="box">
    <el-button
      type="primary"
      icon="el-icon-view"
      style="cursor: pointer; margin-bottom: 20px"
      @click="see()"
      >Ô¤ÀÀ</el-button
    >
    <el-button
      v-if="!isignore"
      type="primary"
      @click="sensitive()"
      icon="el-icon-view"
      style="cursor: pointer; margin-bottom: 20px"
      >Ò»¼üºöÂÔÃô¸Ð´Ê»ã</el-button
    >
    <el-button
      v-else
      type="success"
      icon="el-icon-check"
      style="cursor: pointer; margin-bottom: 20px"
      >ÒѺöÂÔÃô¸Ð´Ê»ã</el-button
    >
    <!-- <el-button

      type="primary"
      @click="discern()"
      icon="el-icon-view"
      style="cursor: pointer; margin-bottom: 20px"
      >ʶ±ð</el-button
    > -->
    <el-button
      v-if="isignore"
      type="warning"
      @click="again()"
      icon="el-icon-close"
      style="cursor: pointer; margin-bottom: 20px"
      >½â³ýºöÂÔ</el-button
    >

    <div id="editor"></div>
    <!-- <el-row>
      <el-col :span="12"> <div id="editor"></div></el-col>
      <el-col :span="12">
        Ô¤ÀÀ
        <hr />
        <div class="html" v-html="contentEditor"></div
      ></el-col>
    </el-row> -->

    <div id="editorBox" v-if="lookSEE">
      <el-dialog :visible.sync="lookSEE">
        <el-dialog
          width="1100px"
          title="ÕýÎÄÄÚÈÝ > Ч¹ûÔ¤ÀÀ"
          :visible.sync="lookSEE"
          append-to-body
          @close="concal()"
        >
          <hr />
          <div class="html" v-html="contentEditor"></div>
          <div slot="footer" class="dialog-footer">
            <el-button @click="concal()">È¡Ïû</el-button>
          </div>
        </el-dialog>
      </el-dialog>
    </div>
  </div>
</template>

<script>
import E from "wangeditor";
import { getToken } from "@/utils/auth";//»ñÈ¡ÇëÇóÍ·
import { uploadPath } from "@/api/upload";//ÉÏ´«ÎļþµÄµØÖ·
import {  alllist } from "@/api/business/sensitiveWord";//»ñÈ¡Ãô¸Ð´ÊÁбí
export default {
  data() {
    return {
      contentEditor: "",
      lookSEE: false,
      isignore: true,
      ignore: '<i style="display: none;">ÒѺöÂÔÃô¸Ð´Ê</i>',
      editor: undefined,
      show: true,
      ignoreChars:
        " \t\r\n~!@#$%^&*()_+-=¡¾¡¿¡¢{}|;':\",¡£¡¢¡¶¡·?¦Á¦Â¦Ã¦Ä¦Å¦Æ¦Ç¦È¦É¦Ê¦Ë¦Ì¦Í¦Î¦Ï¦Ð¦Ñ¦Ò¦Ó¦Ô¦Õ¦Ö¦×¦Ø¦¡¦¢¦£¦¤¦¥¦¦¦§¦¨¦©¦ª¦«¦¬¦­¦®¦¯¦°¦±¦²¦³¦´¦µ¦¶¦·¦¸¡£,¡¢;:?!¡­¡ª¡¤¡¥¡§¡®¡¯¡°¡±¡©~¡¬¡Ã"'`|¡¨¡²¡³¡´¡µ¡¶¡·¡¸¡¹¡º¡».¡¼¡½¡¾¡¿()[]{}¢ñ¢ò¢ó¢ô¢õ¢ö¢÷¢ø¢ù¢ú¢û¢ü¢±¢²¢³¢´¢µ¢¶¢·¢¸¢¹¢º¢»¢¼¢½¢¾¢¿¢À¢Á¢Â¢Ã¢Ä¢å¢æ¢ç¢è¢é¢ê¢ë¢ì¢í¢î¢Ù¢Ú¢Û¢Ü¢Ý¢Þ¢ß¢à¢á¢â¢Å¢Æ¢Ç¢È¢É¢Ê¢Ë¢Ì¢Í¢Î¢Ï¢Ð¢Ñ¢Ò¢Ó¢Ô¢Õ¢Ö¢×¢Ø¡Ö¡Ô¡Ù=¡Ü¡Ý<>¡Ú¡Û¡Ë¡À+-¡Á¡Â/¡Ò¡Ó¡Ø¡Þ¡Ä¡Å¡Æ¡Ç¡È¡É¡Ê¡ß¡à¡Í¡Î¡Ï¡Ð¡Ñ¡Õ¡×¡Ì¡ì¡í¡î¡ï¡ð¡ñ¡ò¡ó¡ô¡õ¡æ¡ë€¡ö¡÷¡ø¡ù¡ú¡û¡ü¡ý¡þ¡è¡ã#&@\¦ä_ ̄¨D©°©±©²©´©µ©¶©·©¤©¨©¬©À©Á©Â©Ã©Ä©Å©Æ©Ç©¦©ª©®©Ð©Ñ©Ò©Ó©Ô©Õ©Ö©×©à©á©â©ã©ä©å©æ©ç©¸©¹©º©»©¼©½©¾©¿©¥©©©­©È©É©Ê©Ë©Ì©Í©Î©Ï©§©«©¯©Ø©Ù©Ú©Û©Ü©Ý©Þ©ß©ï©î©í©ì©ë©ê©é©è",
      ignoreObj: {},
      keywords: ["Ãô¸Ð´ÊÇë¸ü¸Ä", "·¨ÂÖ¹¦"],
      sensitiveWords: undefined,
      map: undefined,
      iskeyword: false, //ÊÇ·ñ°üº¬Ãô¸Ð´Ê
      queryParams: {},
    };
  },
  props: {
    contentHtml: {
      type: String,
      default() {
        return "";
      },
    },
  },

  created() {
    // console.log(this.contentHtml,"´«²ÎÄÚÈÝ");
    for (let i = 0, j = this.ignoreChars.length; i < j; i++) {
      this.ignoreObj[this.ignoreChars.charCodeAt(i)] = true;
    }
      // »ñÈ¡Ãô¸Ð´Ê¿â¶ÔÏó
    alllist(this.queryParams, this.$i18n.locale).then((response) => {
      this.keywords = response.data;

      this.map = this.buildMap(this.keywords);
    });
    if (this.contentHtml) {
      this.contentEditor = this.contentHtml;
    }

    // ÅжÏÊÇ·ñÒѾ­ºöÂÔÃô¸Ð´Ê»ã
    let reg = new RegExp(/<i style="display: none;">ÒѺöÂÔÃô¸Ð´Ê<\/i>/, "g");
    this.isignore = reg.test(this.contentEditor);
  },
  mounted() {
    this.editor = new E("#editor");
    // ÉèÖñ༭ÇøÓò¸ß¶ÈΪ 300px
    this.editor.config.height = 300;
    // ±à¼­Æ÷ z-index ĬÈÏΪ 10000,¿ÉÒÔ×ÔÐе÷Õû¡£
    this.editor.config.zIndex = 20;
    // ¿ÉÒÔÐÞ¸Ä placeholder µÄÌáʾÎÄ×Ö¡£
    this.editor.config.placeholder = "ÇëÊäÈëÕýÎÄ";
    // È¡Ïû×Ô¶¯ focus
    this.editor.config.focus = false;

    // *****************************************************
    this.editor.config.menus = [
      "head",
      "bold",
      "fontSize",
      "fontName",
      "italic",
      "underline",
      "strikeThrough",
      "indent",
      "lineHeight",
      "foreColor",
      "backColor",
      "link",
      "list",
      // "todo",
      "justify",
      "quote",
      "emoticon",
      "image",
      "video",
      "table",
      // "code", // ²åÈë´úÂë
      "splitLine",
      "undo",
      "redo",
    ];
    // *****************************************************
    // ÅäÖÃÑÕÉ«(ÎÄ×ÖÑÕÉ«¡¢±³¾°É«)
    this.editor.config.colors = [
      "#333333",
      "#1c487f",
      "#eeece0",
      "#4d80bf",
      "#ffffff",
      "#FF0000",
      "#00FF00",
      " #0000FF",
      "#FF00FF",
      "#FFFF00",
      "#70DB93",
      "#5C3317",
    ];
    // *****************************************************
    // ÅäÖÃ×ÖÌå
    this.editor.config.fontNames = [
      // ×Ö·û´®ÐÎʽ
      // "·ÂËÎ",
      // "ºÚÌå",
      // "¿¬Ìå",
      // "±ê¿¬Ìå",
      // "»ªÎÄ·ÂËÎ",
      // "»ªÎÄ¿¬Ìå",
      // "ËÎÌå",
      "΢ÈíÑźÚ",
      "Microsoft YaHei",
      // "Times New Roman",
      // "Arial",
      // "Tahoma",
      // "Verdana",
      // "Courier New",
    ];
    // *****************************************************
    // ÉèÖÃ×ÖºÅ,Ö»ÄÜ¸Ä±ä  name×Ö¶Î
    this.editor.config.fontSizes = {
      "x-small": { name: "14px", value: "1" },
      small: { name: "16px", value: "2" },
      normal: { name: "18px", value: "3" },
      large: { name: "20px", value: "4" },
      "x-large": { name: "22px", value: "5" },
      "xx-large": { name: "24px", value: "6" },
      "xxx-large": { name: "26px", value: "7" },
    };
    // ÅäÖÃÐиß
    this.editor.config.lineHeights = [
      "1",
      "1.25",
      "1.5",
      "1.75",
      "2",
      "2.5",
      "3",
    ];
    // *****************************************************
    // ²åÈëÍøÂçͼƬµÄ»Øµ÷
    this.editor.config.linkImgCallback = function (src, alt, href) {
    };
    // *********************Õ³Ìù********************************
    // ¹Ø±ÕÕ³ÌùÑùʽµÄ¹ýÂË
    this.editor.config.pasteFilterStyle = false;
    // ºöÂÔÕ³ÌùÄÚÈÝÖеÄͼƬ
    this.editor.config.pasteIgnoreImg = false;

    // ************************Ãô¸Ð´Ê  ´¦Àí*****************************
    // Õ³ÌùÎı¾Ê¶±ðÃô¸Ð´Ê
    this.editor.config.pasteTextHandle = (pasteStr) => {
      // ¶ÔÕ³ÌùµÄÎı¾½øÐд¦Àí
      //   sss = false;
      let arr = this.checkSensitive(pasteStr);
      if (arr) this.iskeyword = true;
      arr.forEach((item, index) => {
        var reg = new RegExp(item, "g");
        pasteStr = pasteStr.replace(
          reg,
          `&nbsp;<span id="checkSensitive" style="background-color: rgb(250, 228, 34);">${item}<i style="color: rgb(250, 0, 0);font-style: italic;">[Ãô¸Ð´Ê,Çë¸ü¸Ä]</i></span>&nbsp;`
        );
      });
      return pasteStr;
    };

    // *************************ÉÏ´«Í¼Æ¬****************************
    this.editor.config.showLinkImg = true; //ÉÏ´«ÍøÂçͼƬ
    // // this.editor.config.uploadImgShowBase64 = true; //base64 ±£´æͼƬ

    // ÏÞÖÆͼƬ´óСºÍÀàÐÍ
    this.editor.config.uploadImgMaxSize = 8 * 1024 * 1024; // 8M
    // Èç¹û²»Ï£ÍûÏÞÖÆÀàÐÍ,¿É½«ÆäÉèΪ¿ÕÊý×é:
    this.editor.config.uploadImgAccept = [];
    this.editor.config.uploadImgMaxLength = 3; // Ò»´Î×î¶àÉÏ´« 5 ¸öͼƬ
    // console.log(uploadPath, "ÇëÇóµØÖ·");
    this.editor.config.uploadImgServer = uploadPath; // ÉÏ´«Í¼Æ¬µÄ½Ó¿ÚµØÖ·
    this.editor.config.uploadFileName = "file"; // formdataÖеÄnameÊôÐÔ
    // this.editor.config.debug = true; // ¿ªÆôdebugģʽ
    this.editor.config.uploadImgHeaders = {
      Authorization: getToken(), // ÉèÖÃÇëÇóÍ·
    };

    this.editor.config.uploadImgHooks = {
      // ͼƬÉÏ´«²¢·µ»Ø½á¹û,µ«Í¼Æ¬²åÈë´íÎóʱ´¥·¢
      fail: function (xhr, editor, result) {
        // console.log(xhr, "²åÈë´íÎóʱ´¥·¢ xhr");
        // console.log(editor, "²åÈë´íÎóʱ´¥·¢ editor");
        // console.log(result, "²åÈë´íÎóʱ´¥·¢ result");
      },
      success: function (xhr, editor, result) {
        // ͼƬÉÏ´«²¢·µ»Ø½á¹û,ͼƬ²åÈë³É¹¦Ö®ºó´¥·¢
        // console.log(xhr, editor, result, "³É¹¦Ö®ºó´¥·¢");
      },
      before: function (xhr, editor, files) {
        // ͼƬÉÏ´«Ö®Ç°´¥·¢
        // xhr ÊÇ XMLHttpRequst ¶ÔÏó,editor ÊDZ༭Æ÷¶ÔÏó,files ÊÇÑ¡ÔñµÄͼƬÎļþ
        // Èç¹û·µ»ØµÄ½á¹ûÊÇ {prevent: true, msg: 'xxxx'} Ôò±íʾÓû§·ÅÆúÉÏ´«
        // console.log(xhr, editor, files, "ͼƬÉÏ´«Ö®Ç°´¥·¢");
      },
      error: function (xhr, editor) {
        // console.log(xhr.response, editor, "ͼƬÉÏ´«³ö´íʱ´¥·¢");
      },
      // ͼƬÉÏ´«²¢·µ»ØÁ˽á¹û,ÏëÒª×Ô¼º°ÑͼƬ²åÈëµ½±à¼­Æ÷ÖÐ
      // ÀýÈç·þÎñÆ÷¶Ë·µ»ØµÄ²»ÊÇ { errno: 0, data: [...] } ÕâÖÖ¸ñʽ,¿ÉʹÓà customInsert
      customInsert: function (insertImgFn, result) {
        // result ¼´·þÎñ¶Ë·µ»ØµÄ½Ó¿Ú
        // insertImgFn ¿É°ÑͼƬ²åÈëµ½±à¼­Æ÷,´«ÈëͼƬ src ,Ö´Ðк¯Êý¼´¿É
        insertImgFn(result.data.full);
      },
    };
    // *********************ÉÏ´«±¾µØÊÓƵ******************************
    this.editor.config.uploadVideoServer = uploadPath; // ÉÏ´«µÄ½Ó¿ÚµØÖ·
    this.editor.config.uploadVideoParams = {
      'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarycZm1pHksXeHS6t5r'
    }
    this.editor.config.uploadVideoHeaders = {
      Authorization: getToken(), // ÉèÖÃÇëÇóÍ·
    };
      let this_ = this

    this.editor.config.uploadVideoName = "file";
    this.editor.config.uploadVideoHooks = {
      // ÉÏ´«Íê³É´¦Àí·½·¨
      fail: (xhr, editor, result) => {
        // ²åÈëͼƬʧ°Ü»Øµ÷
      },
      success: (xhr, editor, result) => {
        // ͼƬÉÏ´«³É¹¦»Øµ÷
      },
      timeout: (xhr, editor) => {
        // ÍøÂ糬ʱµÄ»Øµ÷
      },
      error: (xhr, editor) => {
        // ͼƬÉÏ´«´íÎóµÄ»Øµ÷
        console.log("err--->", xhr);
      },
      customInsert: function (insertVideo, result) {
        console.log("result--->", result);
        const link = result.data.full;
        insertVideo(link)
        },
    };
    // ***********************´´½¨¸»Îı¾***************

    this.editor.config.onchange = (html) => {
      this.contentEditor = html;
      this.sentContent();
    };
    this.editor.config.onfocus = (html) => {

      if (this.isignore) {
        // console.log("Óбêʶ,²»Ê¶±ð");
        this.sendIskeyword();
        this.contentEditor = html;
      } else {
        // console.log("ûÓбêʶ,Ҫʶ±ð");
        // console.log(html);
        this.changIsignore(html);
      }
      this.sentContent();
    };
    this.editor.create();
    // ³õʼ»¯
    this.$nextTick(() => {
      if (this.contentEditor) {
        // console.log("³õʼ»¯");
        this.editor.txt.html(this.contentEditor);
      }
    });
  },

  methods: {
    // ºöÂÔ¹¦ÄÜ
    sensitive() {
      this.isignore = true;
      this.show = false;
      // ¸øÒѾ­ÉèÖúöÂÔµÄ×Ö·û´®Ìí¼Ó±êʶ === ¡· ÔÚthis.contentEditor ×îÇ°ÃæÌí¼ÓÒ»¸öÒþ²ØµÄi±êÇ©
      this.contentEditor = this.ignore + this.contentEditor;
      let reg = new RegExp(
        /<i style="color: rgb\(250, 0, 0\);font-style: italic;">\[Ãô¸Ð´Ê,Çë¸ü¸Ä\]<\/i>/,
        "g"
      );
      let reg1 = new RegExp(
        /style="background-color: rgb\(250, 228, 34\);"/,
        "g"
      );
      this.contentEditor = this.contentEditor.replace(reg1, "");
      this.contentEditor = this.contentEditor.replace(reg, "");
      this.editor.txt.html(this.contentEditor);

      this.sentContent();
      this.sendIskeyword();
    },
    // Ïò¸¸×é¼þ´«µÝ¸»Îı¾ÄÚÈÝ
    sentContent() {
      this.$emit("sentContent", this.contentEditor);
    },
    // Ïò¸¸×é¼þ´«µÝ¸»Îı¾ÊÇ·ñ°üº¬Ãô¸Ð´Ê
    sendIskeyword() {
      let reg = new RegExp(/\[Ãô¸Ð´Ê,Çë¸ü¸Ä\]/);
      let val = reg.test(this.contentEditor);
      this.$emit("sendIskeyword", val);
    },
    // ½â³ýºöÂÔ
    again() {
      let reg = new RegExp(/<i style="display: none;">ÒѺöÂÔÃô¸Ð´Ê<\/i>/, "g");
      this.contentEditor = this.contentEditor.replace(reg, "");
      this.isignore = false;
      this.changIsignore(this.contentEditor);

      this.sendIskeyword();
    },
    // Ô¤ÀÀ
    see() {
      this.lookSEE = true;
      if (this.isignore) {
        // console.log("Óбêʶ,²»Ê¶±ð");
        this.sendIskeyword();
        this.contentEditor = this.contentEditor;
      } else {
        // console.log("ûÓбêʶ,Ҫʶ±ð");
        this.changIsignore(this.contentEditor);
      }
    },
    concal() {
      this.lookSEE = false;
    },
    changIsignore(html) {
      //´¦ÀíºöÂÔÃô¸Ð´Ê
      // console.log("´¦ÀíºöÂÔÃô¸Ð´Ê");
      let arr = this.checkSensitive(html);
      arr.forEach((item, index) => {
        var reg = new RegExp(item, "g");
        html = html.replace(
          reg,
          `&nbsp;<span id="checkSensitive" style="background-color: rgb(250, 228, 34);">${item}<i style="color: rgb(250, 0, 0);font-style: italic;">[Ãô¸Ð´Ê,Çë¸ü¸Ä]</i></span>&nbsp;`
        );
      });
      this.contentEditor = html;
      this.editor.txt.html(this.contentEditor);
      if (arr.length > 0) {
        this.sendIskeyword();
      } else {
        this.sendIskeyword();
      }
    },
    // ¾ßÌå¼ì²â´úÂë¡£
    check(map, content) {
      const result = [];
      let stack = [];
      let point = map;
      for (let i = 0, len = content.length; i < len; ++i) {
        const code = content.charCodeAt(i);
        if (this.ignoreObj[code]) {
          continue;
        }
        const ch = content.charAt(i);
        const item = point[ch.toLowerCase()];
        if (!item) {
          i = i - stack.length;
          stack = [];
          point = map;
        } else if (item.empty) {
          stack.push(ch);
          result.push(stack.join(""));
          stack = [];
          point = map;
        } else {
          stack.push(ch);
          point = item;
        }
      }
      return result;
    },
    buildMap(wordList) {
      const result = {};

      for (let i = 0, len = wordList.length; i < len; ++i) {
        let map = result;
        const word = wordList[i];
        for (let j = 0; j < word.length; ++j) {
          const ch = word.charAt(j).toLowerCase();
          if (map[ch]) {
            map = map[ch];
            if (map.empty) {
              break;
            }
          } else {
            if (map.empty) {
              delete map.empty;
            }
            map[ch] = {
              empty: true,
            };
            map = map[ch];
          }
        }
      }
      return result;
    },
    checkSensitive(content) {
      const words = this.check(this.map, content);
      return words;
    },
  },
};
</script>

<style scoped>
/* #editor {
width: 50%;
} */
#contentEditor {
  width: 900px;
}
.html {
  /* width: 50%; */
  margin-top: 20px;
  height: 100%;
  min-height: 70vh;
}
.wrap {
  /* position: absolute; */
  width: 670px;
  height: 300px;
  line-height: 300px;
  background-color: rgb(75, 73, 73);
  color: #fff;
  text-align: center;
}
.box {
  position: relative;
}
/* Ô¤ÀÀÑùʽ */

/* Ð޸ĸ»Îı¾×ֺŠ*/
font[size="1"] {
  font-size: 14px;
}
font[size="2"] {
  font-size: 16px;
}
font[size="3"] {
  font-size: 18px;
}
font[size="4"] {
  font-size: 20px;
}
font[size="5"] {
  font-size: 22px;
}
font[size="6"] {
  font-size: 24px;
}
font[size="7"] {
  font-size: 26px;
}
/* table Ñùʽ */
.html >>> table {
  border-top: 1px solid #ccc;
  border-left: 1px solid #ccc;
  margin: 10px 0;
  line-height: 1.5;
}
.html >>> table td,
.html >>> table th {
  border-bottom: 1px solid #ccc;
  border-right: 1px solid #ccc;
  padding: 3px 5px;
  min-height: 30px;
  height: 30px;
}
.html >>> table th {
  border-bottom: 2px solid #ccc;
  text-align: center;
  background-color: #f1f1f1;
}
</style>

  JavaScript֪ʶ¿â ×îÐÂÎÄÕÂ
ES6µÄÏà¹Ø֪ʶµã
react º¯Êýʽ×é¼þ & reactÆäËûһЩ×ܽá
Vue»ù´¡³¬Ïêϸ
Ç°¶ËJSÒ²¿ÉÒÔÁ¬µã³ÉÏߣ¨VueÖÐÔËÓà AntVG6£©
Vueʼþ´¦ÀíµÄ»ù±¾Ê¹ÓÃ
Vueºǫ́ÏîÄ¿µÄ¼Ç¼ £¨Ò»£©
Ç°ºó¶Ë·ÖÀëvue¿çÓò£¬devServerÅäÖÃproxy´úÀí
TypeScript
³õʶvuex
vueÏîÄ¿°²×°°üÖ¸ÁîÊÕ¼¯
ÉÏһƪÎÄÕ      ÏÂһƪÎÄÕ      ²é¿´ËùÓÐÎÄÕÂ
¼Ó:2022-05-08 07:59:01  ¸ü:2022-05-08 08:00:23 
 
¿ª·¢: C++֪ʶ¿â Java֪ʶ¿â JavaScript Python PHP֪ʶ¿â È˹¤ÖÇÄÜ Çø¿éÁ´ ´óÊý¾Ý Òƶ¯¿ª·¢ ǶÈëʽ ¿ª·¢¹¤¾ß Êý¾Ý½á¹¹ÓëËã·¨ ¿ª·¢²âÊÔ ÓÎÏ·¿ª·¢ ÍøÂçЭÒé ϵͳÔËά
½Ì³Ì: HTML½Ì³Ì CSS½Ì³Ì JavaScript½Ì³Ì GoÓïÑÔ½Ì³Ì JQuery½Ì³Ì VUE½Ì³Ì VUE3½Ì³Ì Bootstrap½Ì³Ì SQLÊý¾Ý¿â½Ì³Ì CÓïÑÔ½Ì³Ì C++½Ì³Ì Java½Ì³Ì Python½Ì³Ì Python3½Ì³Ì C#½Ì³Ì
ÊýÂë: µçÄÔ ±Ê¼Ç±¾ ÏÔ¿¨ ÏÔʾÆ÷ ¹Ì̬ӲÅÌ Ó²ÅÌ ¶ú»ú ÊÖ»ú iphone vivo oppo СÃ× »ªÎª µ¥·´ ×°»ú ͼÀ­¶¡

360ͼÊé¹Ý ¹ºÎï Èý·á¿Æ¼¼ ÔĶÁÍø ÈÕÀú ÍòÄêÀú 2024Äê11ÈÕÀú -2024/11/23 22:34:02-

ͼƬ×Ô¶¯²¥·ÅÆ÷
¡ýͼƬ×Ô¶¯²¥·ÅÆ÷¡ý
TxTС˵ÔĶÁÆ÷
¡ýÓïÒôÔĶÁ,С˵ÏÂÔØ,¹ÅµäÎÄѧ¡ý
Ò»¼üÇå³ýÀ¬»ø
¡ýÇáÇáÒ»µã,Çå³ýϵͳÀ¬»ø¡ý
ͼƬÅúÁ¿ÏÂÔØÆ÷
¡ýÅúÁ¿ÏÂÔØͼƬ,ÃÀŮͼ¿â¡ý
  ÍøÕ¾ÁªÏµ: qq:121756557 email:121756557@qq.com  ITÊýÂë