ss
jiangping
2025-07-01 89e540640b87f4be8656a5bc78f4a5dbcdf1c21f
ss
已删除2个文件
已修改10个文件
487 ■■■■ 文件已修改
admin/src/components/base/BaseOpera.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarouselWindow.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaInformationWindow.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaInformationWindow1.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/RichEditor.vue 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bottom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/carousel.vue 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/information.vue 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/information1.vue 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application-pro.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/base/BaseOpera.vue
@@ -80,16 +80,17 @@
        this.api.create(this.form)
          .then(() => {
            // that.$tip.apiSuccess('新建成功')
            that.$dialog.actionConfirmButton('是否停留该页面继续新建数据?', '新建成功','继续添加','关闭返回')
              .then(() => {
            // that.$dialog.actionConfirmButton('是否停留该页面继续新建数据?', '新建成功','继续添加','关闭返回')
            //   .then(() => {
                that.$refs.form.resetFields()
                that.visible = false
                that.form[this.configData['field.id']] = null
                that.$emit('success')
              })
              .catch(() => {
                that.visible = false
                that.$emit('success')
              })
              // })
              // .catch(() => {
              //   that.visible = false
              //   that.$emit('success')
              // })
          })
          .catch(e => {
            this.$tip.apiFailed(e)
admin/src/components/business/OperaCarouselWindow.vue
@@ -1,7 +1,7 @@
<template>
  <GlobalWindow
    :title="title"
    width="60%"
    width="calc(100% - 250px)"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
@@ -11,7 +11,7 @@
        <el-input v-model="form.title" placeholder="请输入标题" v-trim/>
      </el-form-item>
      <el-form-item label="概述" prop="detail">
        <el-input  type="textarea"  v-model="form.detail" placeholder="请输入描述" v-trim/>
        <el-input  type="textarea" :rows="10" v-model="form.detail" placeholder="请输入描述" v-trim/>
      </el-form-item>
      <div style="display: flex">
        <el-form-item label="缩略图" prop="thumbnailImgurl" style="display:inline-block;flex: 1">
@@ -54,8 +54,9 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import RichEditor from '@/components/common/RichEditor'
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
import RichEditor from '@/components/common/RichEditor'
import '@wangeditor/editor/dist/css/style.css'
export default {
  name: 'OperaCarouselWindow',
  extends: BaseOpera,
@@ -63,7 +64,7 @@
  data () {
    return {
      // è¡¨å•数据
      styleEditor: 'border: 1px solid #ccc;display: inline-block;height:500px',
      styleEditor: 'border: 1px solid #ccc;display: inline-block;height:800px; ',
      form: {
        id: null,
        remark: '',
@@ -122,6 +123,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        console.log(111+this.form.content)
      })
    },
    // ä¸Šä¼ å›¾ç‰‡
@@ -139,3 +141,12 @@
  }
}
</script>
<style>
::v-deep .w-e-text-container {
  height: 420px !important;
}
.w-e-text-container .w-e-scroll {
  height: 500px !important;
  -webkit-overflow-scrolling: touch;
}
</style>
admin/src/components/business/OperaInformationWindow.vue
@@ -1,7 +1,7 @@
<template>
  <GlobalWindow
      :title="title"
      width="60%"
      width="calc(100% - 250px)"
      :visible.sync="visible"
      :confirm-working="isWorking"
      @confirm="confirm"
@@ -16,13 +16,14 @@
        </div>
      </el-form-item>
      <el-form-item label="简介" prop="detail">
        <el-input  type="textarea"  v-model="form.detail" placeholder="请输入简介" v-trim/>
        <el-input  type="textarea"   :rows="10"  v-model="form.detail" placeholder="请输入简介" v-trim/>
      </el-form-item>
      <el-form-item label="发布日期" prop="releaseDate" >
        <el-date-picker v-model="form.releaseDate" value-format="yyyy-MM-dd HH:mm:ss" type="datetime">  </el-date-picker>
      </el-form-item>
      <el-form-item label="内容" prop="content"   >
        <RichEditor    :richData="form.content" :styleEditor="styleEditor"  @getWangedditor="getWangedditor" :readonly="false"/>
        <!--        <RichEditor     :richData="form.content" :styleEditor="styleEditor"  @getWangedditor="getWangedditor" :readonly="false"/>-->
      </el-form-item>
      <el-form-item label="状态" prop="status" required class="form-item-status">
        <el-switch v-model="form.status" :active-value="0" :inactive-value="1" active-color="#13ce66"/>
@@ -40,8 +41,10 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import RichEditor from '@/components/common/RichEditor'
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
import RichEditor from '@/components/common/RichEditor'
import '@wangeditor/editor/dist/css/style.css'
import dayjs from 'dayjs';
export default {
  name: 'OperaInformationWindow',
  extends: BaseOpera,
@@ -49,7 +52,7 @@
  data () {
    return {
      // è¡¨å•数据
      styleEditor: 'border: 1px solid #ccc;display: inline-block;height:500px',
      styleEditor: 'border: 1px solid #ccc;display: inline-block;height:800px;min-height :500px;',
      form: {
        id: null,
        remark: '',
@@ -90,11 +93,9 @@
            remark: '',
            title: '',
            detail: '',
            releaseDate: new Date(),
            releaseDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
            imgurl: '',
            imgurlFull: '',
            thumbnailImgurl: '',
            thumbnailImgurlFull: '',
            fullImgurl: '',
            jumpType: 0,
            content: '',
            sortnum: '',
@@ -108,6 +109,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        console.log(111+this.form.content)
      })
    },
    // ä¸Šä¼ å›¾ç‰‡
@@ -121,3 +123,12 @@
  }
}
</script>
<style>
::v-deep .w-e-text-container {
  height: 420px !important;
}
.w-e-text-container .w-e-scroll {
  height: 500px !important;
  -webkit-overflow-scrolling: touch;
}
</style>
admin/src/components/business/OperaInformationWindow1.vue
ÎļþÒÑɾ³ý
admin/src/components/common/RichEditor.vue
@@ -1,7 +1,7 @@
<template>
  <div :style="styleEditor">
    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
    <Editor :style="style" class="declass"  v-model="html" :defaultConfig="editorConfig" :mode="mode"
    <Editor style="min-height: 80px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
            @onCreated="onCreated" @onChange="onChange" />
  </div>
</template>
@@ -9,7 +9,7 @@
<script>
import Vue from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { Loading } from 'element-ui'
import { Loading } from 'element-ui';
let loadingInstance = null
export default Vue.extend({
  props: {
@@ -18,8 +18,7 @@
      default: ''
    },
    styleEditor: '',
    style:'',
    readonly: false // æ˜¯å¦å¯ä»¥è¾“å…¥
    readonly: false, // æ˜¯å¦å¯ä»¥è¾“å…¥
  },
  name: 'RichEditor',
  components: { Editor, Toolbar },
@@ -28,44 +27,44 @@
      editor: null,
      html: '',
      toolbarConfig: { // å·¥å…·æ é…ç½®
        toolbarKeys: this.readonly ? ['fullScreen'] : [ // æ˜¾ç¤ºæŒ‡å®šçš„菜单项
          'bold', // ç²—体
          'underline', // ä¸‹åˆ’线
          'italic', // æ–œä½“
          'through', // åˆ é™¤çº¿
          'code', // è¡Œå†…代码
          'sub', // ä¸‹æ ‡
          'sup', // ä¸Šæ ‡
          'clearStyle', // æ¸…除格式
          'color', // å­—体颜色
          'bgColor', // èƒŒæ™¯è‰²
          'fontSize', // å­—号
          'fontFamily', // å­—体
          'indent', // å¢žåŠ ç¼©è¿›
          'delIndent', // å‡å°‘缩进
          'justifyLeft', // å·¦å¯¹é½
          'justifyRight', // å³å¯¹é½
          'justifyCenter', // å±…中对齐
          'justifyJustify', // ä¸¤ç«¯å¯¹é½
          'lineHeight', // è¡Œé«˜
        toolbarKeys: this.readonly ? ["fullScreen"]: [ // æ˜¾ç¤ºæŒ‡å®šçš„菜单项
          "bold", // ç²—体
          "underline", // ä¸‹åˆ’线
          "italic", // æ–œä½“
          "through", // åˆ é™¤çº¿
          "code", // è¡Œå†…代码
          "sub", // ä¸‹æ ‡
          "sup", // ä¸Šæ ‡
          "clearStyle", // æ¸…除格式
          "color", // å­—体颜色
          "bgColor", // èƒŒæ™¯è‰²
          "fontSize", // å­—号
          "fontFamily", // å­—体
          "indent", // å¢žåŠ ç¼©è¿›
          "delIndent", // å‡å°‘缩进
          "justifyLeft", // å·¦å¯¹é½
          "justifyRight", // å³å¯¹é½
          "justifyCenter", // å±…中对齐
          "justifyJustify", // ä¸¤ç«¯å¯¹é½
          "lineHeight", // è¡Œé«˜
          // "viewImageLink", // æŸ¥çœ‹é“¾æŽ¥
          'divider', // åˆ†å‰²çº¿
          'emotion', // è¡¨æƒ…
          'insertLink', // æ’入链接
          "divider", // åˆ†å‰²çº¿
          "emotion", // è¡¨æƒ…
          "insertLink", // æ’入链接
          // "editLink", // ä¿®æ”¹é“¾æŽ¥
          // "unLink", // å–消链接
          // "viewLink", // æŸ¥çœ‹é“¾æŽ¥
          'codeBlock', // ä»£ç å—
          'blockquote', // å¼•用
          'headerSelect', // æ ‡é¢˜
          "codeBlock", // ä»£ç å—
          "blockquote", // å¼•用
          "headerSelect", // æ ‡é¢˜
          // "header1", // æ ‡é¢˜1
          // "header2", // æ ‡é¢˜2
          // "header3", // æ ‡é¢˜3
          // "header4", // æ ‡é¢˜4
          // "header5", // æ ‡é¢˜5
          // "todo", // å¾…办
          'redo', // é‡åš
          'undo', // æ’¤é”€
          "redo", // é‡åš
          "undo", // æ’¤é”€
          // "enter", // å›žè½¦
          // "bulletedList", // æ— åºåˆ—表
          // "numberedList", // æœ‰åºåˆ—表
@@ -92,13 +91,13 @@
            title: '图片', // å¿…å¡«
            // iconSvg: '<svg>....</svg>', // å¯é€‰
            menuKeys: [
              'uploadImage', // ä¸Šä¼ å›¾ç‰‡
              'insertImage', // ç½‘络图片
              'deleteImage', // åˆ é™¤å›¾ç‰‡
              'editImage', // ç¼–辑图片
              'imageWidth30', // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比30
              'imageWidth50', // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比50
              'imageWidth100' // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比100
              "uploadImage", // ä¸Šä¼ å›¾ç‰‡
              "insertImage", // ç½‘络图片
              "deleteImage", // åˆ é™¤å›¾ç‰‡
              "editImage", // ç¼–辑图片
              "imageWidth30", // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比30
              "imageWidth50", // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比50
              "imageWidth100", // å›¾ç‰‡å®½åº¦ç›¸å¯¹äºŽç¼–辑器宽度的百分比100
            ] // ä¸‹çº§èœå• key ï¼Œå¿…å¡«
          },
          // è§†é¢‘分组
@@ -107,18 +106,18 @@
            title: '视频', // å¿…å¡«
            // iconSvg: '<svg>....</svg>', // å¯é€‰
            menuKeys: [
              'insertVideo', // æ’入网络视频
              'uploadVideo', // ä¸Šä¼ è§†é¢‘
              'editVideoSize' // ä¿®æ”¹è§†é¢‘尺寸
              "insertVideo", // æ’入网络视频
              "uploadVideo", // ä¸Šä¼ è§†é¢‘
              "editVideoSize", // ä¿®æ”¹è§†é¢‘尺寸
            ] // ä¸‹çº§èœå• key ï¼Œå¿…å¡«
          },
          'fullScreen' // å…¨å±
          "fullScreen", // å…¨å±
        ],
        excludeKeys: [ // éšè—æŒ‡å®šçš„菜单项
          // 'headerSelect',
          // 'video-style'
          // æŽ’除菜单组,写菜单组 key çš„值即可
        ]
        ],
      },
      editorConfig: { // ç¼–辑器配置
@@ -130,10 +129,10 @@
        MENU_CONF: {
          // å›¾ç‰‡ä¸Šä¼ 
          uploadImage: {
            server: process.env.VUE_APP_API_PREFIX + '/web/public/uploadLocal?folder=',
            server: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal?folder=',
            fieldName: 'file',
            // å•个文件的最大体积限制,默认为 2M
            maxFileSize: 20 * 1024 * 1024, // 10M
            maxFileSize: 10 * 1024 * 1024, // 10M
            // æœ€å¤šå¯ä¸Šä¼ å‡ ä¸ªæ–‡ä»¶ï¼Œé»˜è®¤ä¸º 100
            maxNumberOfFiles: 10,
            // é€‰æ‹©æ–‡ä»¶æ—¶çš„类型限制,默认为 ['image/*'] ã€‚如不想限制,则设置为 []
@@ -156,12 +155,12 @@
                text: '上传中...',
                spinner: 'el-icon-loading',
                background: 'rgba(0, 0, 0, 0.7)'
              })
              return files
              });
              return files;
            },
            // è‡ªå®šä¹‰æ’入图片
            customInsert (res, insertFn) {
              console.log(res)
              console.log(res);
              // å› ä¸ºè‡ªå®šä¹‰æ’入导致onSuccess与onFailed回调函数不起作用,自己手动处理
              // å…ˆå…³é—­ç­‰å¾…çš„Message
              loadingInstance = Loading.service({
@@ -169,7 +168,7 @@
                text: '上传中...',
                spinner: 'el-icon-loading',
                background: 'rgba(0, 0, 0, 0.7)'
              }).close()
              }).close();
              if (res.code === 200) {
                // Message.success({
                //     message: `${res.data.originalName} ä¸Šä¼ æˆåŠŸ`
@@ -179,27 +178,27 @@
                //     message: `${res.data.originalName} ä¸Šä¼ å¤±è´¥ï¼Œè¯·é‡æ–°å°è¯•`
                // });
              }
              insertFn(res.data.url, res.data.originname, res.data.imgname)
              insertFn(res.data.url, res.data.originname, res.data.imgname);
            },
            // å•个文件上传成功之后
            onSuccess (file, res) {
              console.log(`${file.originalFilename} ä¸Šä¼ æˆåŠŸ`, res)
              console.log(`${file.originalFilename} ä¸Šä¼ æˆåŠŸ`, res);
            },
            // å•个文件上传失败
            onFailed (file, res) {
              console.log(`${file.originalFilename} ä¸Šä¼ å¤±è´¥`, res)
              loadingInstance.close()
              console.log(`${file.originalFilename} ä¸Šä¼ å¤±è´¥`, res);
              loadingInstance.close();
            },
            // ä¸Šä¼ è¿›åº¦çš„回调函数
            onProgress (progress) {
              console.log('progress', progress)
              console.log('progress', progress);
              // progress æ˜¯ 0-100 çš„æ•°å­—
            },
            // ä¸Šä¼ é”™è¯¯ï¼Œæˆ–者触发 timeout è¶…æ—¶
            onError (file, err, res) {
              loadingInstance.close()
              console.log(`${file.originalFilename} ä¸Šä¼ å‡ºé”™`, err, res)
              loadingInstance.close();
              console.log(`${file.originalFilename} ä¸Šä¼ å‡ºé”™`, err, res);
            }
          },
          // è§†é¢‘上传
@@ -231,7 +230,7 @@
            timeout: 1000 * 1000, // 1000 ç§’,
            // ä¸Šä¼ ä¹‹å‰è§¦å‘
            onBeforeUpload (file) {
              return file
              return file;
            },
            // è‡ªå®šä¹‰æ’入视频
            customInsert (res, insertFn) {
@@ -247,11 +246,11 @@
                //     message: `${res.data.originalName} ä¸Šä¼ å¤±è´¥ï¼Œè¯·é‡æ–°å°è¯•`
                // });
              }
              insertFn(res.data.url, res.data.url)
              insertFn(res.data.url, res.data.url);
            },
            // ä¸Šä¼ è¿›åº¦çš„回调函数
            onProgress (progress) {
              console.log(progress)
              console.log(progress);
              // onProgress(progress) {       // JS è¯­æ³•
              // progress æ˜¯ 0-100 çš„æ•°å­—
            },
@@ -267,7 +266,7 @@
            // },
            // ä¸Šä¼ é”™è¯¯ï¼Œæˆ–者触发 timeout è¶…æ—¶
            onError (file, err, res) {
              console.log(`${file.name} ä¸Šä¼ å‡ºé”™`, err, res)
              console.log(`${file.name} ä¸Šä¼ å‡ºé”™`, err, res);
              // Notification.error({
              //     title: '错误',
              //     message: `${file.name} ä¸Šä¼ å¤±è´¥ï¼Œè¯·é‡æ–°å°è¯•`
@@ -276,19 +275,23 @@
          }
        }
      },
      mode: 'default' // or 'simple'
      mode: 'default', // or 'simple'
    }
  },
  watch: {
    richData: function (value) {
      this.html = value
      console.log("onChange123", value); // onChange æ—¶èŽ·å–ç¼–è¾‘å™¨æœ€æ–°å†…å®¹
      this.$nextTick(()=>{
        this.html = value
      })
    },
    readonly: function (value) {
      this.readonly = value
    },
    styleEditor: function (value) {
      this.styleEditor = value
    }
    },
  },
  mounted () {
    // éœ€è¦åœ¨ç¼–辑器创建完毕后在赋值
@@ -299,13 +302,18 @@
  methods: {
    // ç¼–辑器创建完毕时的回调函数
    onCreated (editor) {
      var that =this
      this.editor = Object.seal(editor) // ä¸€å®šè¦ç”¨ Object.seal() ï¼Œå¦åˆ™ä¼šæŠ¥é”™
      setTimeout(function (){
        that.html = that.richData
        // alert(that.html)
      },15000)
    },
    // ç¼–辑器内容、选区变化时的回调函数
    onChange (editor) {
      this.$emit('getWangedditor', editor.getHtml())
      console.log('onChange', editor.getHtml()) // onChange æ—¶èŽ·å–ç¼–è¾‘å™¨æœ€æ–°å†…å®¹
    }
      console.log("onChange", editor.getHtml()); // onChange æ—¶èŽ·å–ç¼–è¾‘å™¨æœ€æ–°å†…å®¹
    },
  },
  beforeDestroy () {
    // ç¼–辑器销毁时的回调函数。调用 editor.destroy() å³å¯é”€æ¯ç¼–辑器
@@ -315,8 +323,13 @@
  }
})
</script>
<style lang="scss">
.declass{
  min-height: 80px; overflow-y: hidden;
<style>
::v-deep .w-e-text-container {
  height: 420px !important;
}
</style>>
.w-e-text-container .w-e-scroll {
  height: 500px !important;
  -webkit-overflow-scrolling: touch;
}
</style>
admin/src/views/business/bottom.vue
@@ -1,5 +1,5 @@
<template>
  <div class="box" style="height:100%;overflow-y: auto" >
  <div class="box" style="max-height:calc(100% - 60px);margin-bottom:50px;overflow-y: auto" >
    <el-form :model="form" ref="form" label-width="140px">
      <div style="margin: 0px 0 50px 0">
        <span style="font-size: 15px; font-weight: bold">【1】网站配置:</span>
admin/src/views/business/carousel.vue
@@ -7,8 +7,8 @@
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="searchForm.status" clearable @change="search" placeholder="状态">
          <el-option label="正常" value="1"></el-option>
          <el-option label="禁用" value="0"></el-option>
          <el-option label="正常" value="0"></el-option>
          <el-option label="禁用" value="1"></el-option>
        </el-select>
      </el-form-item>
      <section>
@@ -23,6 +23,7 @@
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:carousel:delete']">删除</el-button></li>
      </ul>
      <el-table
          :height="tableHeightNew"
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
@@ -119,22 +120,8 @@
      showContent: '',
      showTitle: '',
      searchForm: {
        id: '',
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        isdeleted: '',
        remark: '',
        title: '',
        describe: '',
        imgurl: '',
        thumbnailImgurl: '',
        type: '',
        jumpType: '',
        contnet: '',
        sortnum: '',
        status: ''
        status: null
      }
    }
  },
admin/src/views/business/information.vue
@@ -7,8 +7,8 @@
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="searchForm.status" clearable @change="search" placeholder="状态">
          <el-option label="正常" value="1"></el-option>
          <el-option label="禁用" value="0"></el-option>
          <el-option label="正常" value="0"></el-option>
          <el-option label="禁用" value="1"></el-option>
        </el-select>
      </el-form-item>
      <section>
@@ -23,6 +23,7 @@
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:information:delete']">删除</el-button></li>
      </ul>
      <el-table
          :height="tableHeightNew"
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
@@ -112,22 +113,8 @@
      showContent: '',
      showTitle: '',
      searchForm: {
        id: '',
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        isdeleted: '',
        remark: '',
        title: '',
        describe: '',
        imgurl: '',
        thumbnailImgurl: '',
        type: '',
        jumpType: '',
        contnet: '',
        sortnum: '',
        status: ''
        status: null
      }
    }
  },
admin/src/views/business/information1.vue
ÎļþÒÑɾ³ý
admin/vue.config.js
@@ -7,7 +7,7 @@
}
module.exports = {
  publicPath: process.env.VUE_APP_CONTEXT_PATH,
  outputDir: 'admin',
  outputDir: 'dmttwebsite_admin',
  assetsDir: 'static',
  lintOnSave: false,
  devServer: {
server/pom.xml
@@ -7,7 +7,7 @@
  <artifactId>dmttwebsite</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>official_website</name>
  <name>dmttwebsite</name>
  <description></description>
  <parent>
server/src/main/resources/application-pro.yml
@@ -33,7 +33,6 @@
            required: true
          ssl:
            enable: true
debug_model: true
# Swagger配置