Browse Source

【修复】修复公告功能组件增改后再增无法初始化Editor的bug,优化代码规范

俞宝山 4 years ago
parent
commit
a6fd845274

+ 1 - 1
_web/src/components/Editor/WangEditor.vue

@ -54,7 +54,7 @@
      },
      initEditor () {
        var self = this
        this.editor = new WangEditor('#editor') // 这个地方传入div元素的id 需要加#号
        this.editor = new WangEditor(this.$refs.myEditor)
        // 配置 onchange 事件
        this.editor.customConfig = this.customConfig
        this.editor.customConfig.uploadImgMaxLength = 5;

+ 5 - 28
_web/src/views/system/notice/addForm.vue

@ -2,12 +2,10 @@
  <a-modal
    title="新增通知公告"
    :width="1000"
    :confirmLoading="confirmLoading"
    :footer="null"
    :visible="visible"
    @cancel="handleCancel"
  >
    <a-spin :spinning="formLoading">
      <a-form :form="form">
      <a-form-item
@ -17,7 +15,6 @@
      >
        <a-input placeholder="请输入标题" v-decorator="['title', {rules: [{required: true, message: '请输入标题!'}]}]" />
      </a-form-item>
        <a-form-item
          label="类型"
          :labelCol="labelCol"
@ -27,7 +24,6 @@
            <a-radio-button v-for='(item,index) in typeDictTypeDropDown' :key="index" :value="item.code">{{item.value}}</a-radio-button>
          </a-radio-group>
        </a-form-item>
      <a-form-item
        :labelCol="labelCol"
        :wrapperCol="wrapperCol"
@ -35,7 +31,6 @@
      >
        <antd-editor :uploadConfig="editorUploadConfig" v-model="editorContent" @onchange="changeEditor" @oninit="getEditor" />
      </a-form-item>
        <a-form-item
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
@ -54,35 +49,27 @@
            @change="handleChange"
          />
        </a-form-item>
        <a-divider />
        <a-form-item class="subForm-item">
          <a-button type="primary"  class="subButton"  @click="handleSubmit('1')" :loading="confirmLoading">发布</a-button>
          <a-button type="primary"  class="subButton"  @click="handleSubmit('1')">发布</a-button>
          <a-button type="danger" class="subButton" @click="handleSubmit('0')">存为草稿</a-button>
          <a-button class="subButton"  @click="handleCancel">取消</a-button>
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import { sysNoticeAdd } from '@/api/modular/system/noticeManage'
  import { sysDictTypeDropDown } from '@/api/modular/system/dictManage'
  import { sysFileInfoUpload ,sysFileInfoDownload } from '@/api/modular/system/fileManage'
  import { sysFileInfoUpload } from '@/api/modular/system/fileManage'
  import { AntdEditor } from '@/components'
  import { sysUserSelector } from '@/api/modular/system/userManage'
  export default {
    name: 'addForm',
    components:{
      AntdEditor
    },
    data () {
      return {
        labelCol: {
@ -108,16 +95,13 @@
        formLoading:true
      }
    },
    methods: {
      //初始化方法
      add () {
        this.visible = true
        this.sysDictTypeDropDown()//先注释
        this.getMock();
      },
      /**
       * 获取字典数据
       */
@ -126,7 +110,6 @@
          this.typeDictTypeDropDown=res.data
        })
      },
      /**
       * 编辑器回调上传及回传图片url
       */
@ -152,7 +135,6 @@
        this.editorContent = html
        this.editorContentText = ele.text()
      },
      /**
       * 穿梭框
       */
@ -179,7 +161,6 @@
      handleChange(targetKeys, direction, moveKeys) {
        this.targetKeys = targetKeys;
      },
      handleSubmit (types) {
        const { form: { validateFields } } = this
        if(this.editorContent == ''){
@ -190,27 +171,23 @@
          this.$message.error("请选择通知到的人")
          return
        }
        this.confirmLoading = true
         validateFields((errors, values) => {
            if (!errors) {
              this.formLoading = true
              values.content = this.editorContent
              values.status = types
              values.noticeUserIdList = this.targetKeys
              sysNoticeAdd(values).then((res) => {
                if(res.success){
                  this.$message.success('新增成功')
                  this.visible = false
                  this.confirmLoading = false
                  this.$emit('ok', values)
                  this.form.resetFields();
                  this.handleCancel()
                }else{
                  this.$message.error('新增失败:'+res.message)
                }
              }).finally((res) =>{
                this.confirmLoading = false
                this.formLoading = false
              })
            } else {
              this.confirmLoading = false
            }
          })
      },

+ 3 - 19
_web/src/views/system/notice/detailForm.vue

@ -8,7 +8,6 @@
    @cancel="handleCancel"
  >
    <a-spin :spinning="confirmLoading">
      <div style="text-align: center;font-size: 30px">{{this.contentRecord.title}}</div>
      <br>
      <div style="text-align: right;font-size: 10px">
@ -19,12 +18,9 @@
      <div >
        <label v-html="this.contentRecord.content"></label>
      </div>
    </a-spin>
  </a-modal>
</template>
<script>
  import { sysNoticeDetail } from '@/api/modular/system/noticeManage'
@ -32,24 +28,20 @@
    name: 'detailForm',
    components:{
    },
    data () {
      return {
        visible:false,
        confirmLoading: false,
        contentRecord: '',
        contentRecord: {},
      }
    },
    methods: {
      //初始化方法
      detail (record) {
        this.confirmLoading=true
        this.visible = true
        this.sysNoticeDetail(record.id)
      },
      /**
       * 查看详情
       */
@ -59,18 +51,10 @@
          this.contentRecord =res.data
        })
      },
      handleCancel () {
        this.visible = false
        this.contentRecord = {}
      }
    }
  }
</script>
<style>
  .subButton{
    float: right;
  }
  .subForm-item{
    margin-bottom: 0px;
  }
</style>
</script>

+ 7 - 36
_web/src/views/system/notice/editForm.vue

@ -2,22 +2,15 @@
  <a-modal
    title="编辑通知公告"
    :width="1000"
    :confirmLoading="confirmLoading"
    :footer="null"
    :visible="visible"
    @cancel="handleCancel"
  >
    <a-spin :spinning="formLoading">
      <a-form :form="form">
        <a-form-item
          style="display: none;"
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
        >
        <a-form-item v-show="false">
          <a-input v-decorator="['id']" />
        </a-form-item>
        <a-form-item
          label="标题"
          :labelCol="labelCol"
@ -25,7 +18,6 @@
        >
          <a-input placeholder="请输入标题" v-decorator="['title', {rules: [{required: true, message: '请输入标题!'}]}]" />
        </a-form-item>
        <a-form-item
          label="类型"
          :labelCol="labelCol"
@ -35,7 +27,6 @@
            <a-radio-button v-for='(item,index) in typeDictTypeDropDown' :key="index" :value="item.code">{{item.value}}</a-radio-button>
          </a-radio-group>
        </a-form-item>
        <a-form-item
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
@ -43,7 +34,6 @@
        >
          <antd-editor :uploadConfig="editorUploadConfig" v-model="editorContent" @onchange="changeEditor" @oninit="getEditor" />
        </a-form-item>
        <a-form-item
          :labelCol="labelCol"
          :wrapperCol="wrapperCol"
@ -62,35 +52,27 @@
            @change="handleChange"
          />
        </a-form-item>
        <a-divider />
        <a-form-item class="subForm-item">
          <a-button type="primary"  class="subButton"  @click="handleSubmit('1')" :loading="confirmLoading">发布</a-button>
          <a-button type="primary"  class="subButton"  @click="handleSubmit('1')">发布</a-button>
          <a-button type="danger" class="subButton" @click="handleSubmit('0')">存为草稿</a-button>
          <a-button class="subButton"   @click="handleCancel">取消</a-button>
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import { sysNoticeEdit ,sysNoticeDetail} from '@/api/modular/system/noticeManage'
  import { sysDictTypeDropDown } from '@/api/modular/system/dictManage'
  import { sysFileInfoUpload ,sysFileInfoDownload } from '@/api/modular/system/fileManage'
  import { sysFileInfoUpload } from '@/api/modular/system/fileManage'
  import { AntdEditor } from '@/components'
  import { sysUserSelector } from '@/api/modular/system/userManage'
  export default {
    name: 'addForm',
    components:{
      AntdEditor
    },
    data () {
      return {
        labelCol: {
@ -102,7 +84,6 @@
          sm: { span: 18 }
        },
        visible:false,
        confirmLoading: false,
        form: this.$form.createForm(this),
        typeDictTypeDropDown:[],//0通知 1公告
        editorContent: '',
@ -117,9 +98,7 @@
        formLoading:true
      }
    },
    methods: {
      //初始化方法
      edit (record) {
        this.visible = true
@ -138,7 +117,6 @@
        },100)
      },
      /**
       * 获取字典数据
       */
@ -147,7 +125,6 @@
          this.typeDictTypeDropDown=res.data
        })
      },
      /**
       * 编辑器回调上传及回传图片url
       */
@ -171,7 +148,6 @@
        this.editorContent = html
        this.editorContentText = ele.text()
      },
      /**
       * 编辑时获取全部信息
       */
@ -181,7 +157,6 @@
          this.getMock(this.noticeDetail);
        })
      },
      /**
       * 穿梭框
       */
@ -213,7 +188,6 @@
      handleChange(targetKeys, direction, moveKeys) {
        this.targetKeys = targetKeys;
      },
      handleSubmit (types) {
        const { form: { validateFields } } = this
        if(this.editorContent == ''){
@ -224,9 +198,9 @@
          this.$message.error("请选择通知到的人")
          return
        }
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            this.formLoading = true
            values.content = this.editorContent
            values.status = types
            values.noticeUserIdList = this.targetKeys
@ -234,21 +208,18 @@
              if(res.success){
                this.$message.success('编辑成功')
                this.visible = false
                this.confirmLoading = false
                this.$emit('ok', values)
                this.form.resetFields();
                this.handleCancel()
              }else{
                this.$message.error('编辑失败:'+res.message)
              }
            }).finally((res) =>{
              this.confirmLoading = false
              this.formLoading = false
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      handleCancel () {
      handleCancel() {
        this.editor.txt.clear()
        this.targetKeys =[]
        this.editorContent =''

+ 67 - 90
_web/src/views/system/notice/index.vue

@ -1,89 +1,77 @@
<template>
  <a-card :bordered="false">
        <div class="table-page-search-wrapper" v-if="hasPerm('sysNotice:page')">
          <a-form layout="inline">
            <a-row :gutter="48">
              <a-col :md="8" :sm="24">
                <a-form-item label="关键词" >
                  <a-input v-model="queryParam.searchValue" allow-clear placeholder="请输入标题、内容"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="类型" >
                  <a-select v-model="queryParam.type" placeholder="请选择类型" allow-clear  >
                    <a-select-option v-for='(item,index) in typeDictTypeDropDown' :key="index" :value="item.code" >{{item.value}}</a-select-option>
                  </a-select>
                </a-form-item>
              </a-col>
              <a-col :md="!advanced && 8 || 24" :sm="24">
            <span class="table-page-search-submitButtons" >
              <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
              <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
            </span>
              </a-col>
            </a-row>
          </a-form>
        </div>
    <div class="table-page-search-wrapper" v-if="hasPerm('sysNotice:page')">
      <a-form layout="inline">
        <a-row :gutter="48">
          <a-col :md="8" :sm="24">
            <a-form-item label="关键词" >
              <a-input v-model="queryParam.searchValue" allow-clear placeholder="请输入标题、内容"/>
            </a-form-item>
          </a-col>
          <a-col :md="8" :sm="24">
            <a-form-item label="类型" >
              <a-select v-model="queryParam.type" placeholder="请选择类型" allow-clear  >
                <a-select-option v-for='(item,index) in typeDictTypeDropDown' :key="index" :value="item.code" >{{item.value}}</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
          <a-col :md="8" :sm="24">
            <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
            <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <div class="table-operator" v-if="hasPerm('sysNotice:add')" >
      <a-button v-if="hasPerm('sysNotice:add')" type="primary" @click="$refs.addForm.add()" icon="plus" >新增公告</a-button>
    </div>
        <s-table
          ref="table"
          size="default"
          :columns="columns"
          :data="loadData"
          :alert="true"
          :rowKey="(record) => record.id"
          :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
        >
          <span slot="status" slot-scope="text">
             {{ statusFilter(text)  }}
          </span>
          <span slot="type" slot-scope="text">
             {{ typeFilter(text)  }}
          </span>
          <span slot="action" slot-scope="text, record">
            <div v-if="record.status == 0">
              <a v-if="hasPerm('sysNotice:detail')" @click="$refs.detailForm.detail(record)">查看</a>
              <a-divider type="vertical"  v-if="hasPerm('sysNotice:detail') & hasPerm('sysNotice:edit')"/>
              <a v-if="hasPerm('sysNotice:edit')" @click="$refs.editForm.edit(record)">编辑</a>
              <a-divider type="vertical"  v-if="hasPerm('sysNotice:edit') & hasPerm('sysNotice:changeStatus')"/>
              <a-popconfirm v-if="hasPerm('sysNotice:changeStatus')" placement="topRight" title="确认发布该信息?" @confirm="() => editNoticeStatus(1,record)">
                  <a>发布</a>
             </a-popconfirm>
            </div>
            <div v-if="record.status == 1">
                <a v-if="hasPerm('sysNotice:detail')" @click="$refs.detailForm.detail(record)">查看</a>
                <a-divider type="vertical" v-if="hasPerm('sysNotice:detail') & hasPerm('sysNotice:changeStatus')"/>
                <a-popconfirm v-if="hasPerm('sysNotice:changeStatus')" placement="topRight" title="确认撤回该信息?" @confirm="() => editNoticeStatus(2,record)">
                    <a>撤回</a>
                </a-popconfirm>
            </div>
            <div v-if="record.status == 2">
              <a v-if="hasPerm('sysNotice:detail')" @click="$refs.detailForm.detail(record)">查看</a>
              <a-divider type="vertical" v-if="hasPerm('sysNotice:detail') & hasPerm('sysNotice:delete')"/>
              <a-popconfirm v-if="hasPerm('sysNotice:delete')" placement="topRight" title="确认删除?" @confirm="() => sysNoticeDelete(record)">
                    <a>删除</a>
              </a-popconfirm>
            </div>
          </span>
        </s-table>
    <add-form  ref="addForm" @ok="handleOk" />
    <edit-form ref="editForm" @ok="handleOk" />
    <detail-form ref="detailForm" @ok="handleOk"/>
    <s-table
      ref="table"
      size="default"
      :columns="columns"
      :data="loadData"
      :alert="true"
      :rowKey="(record) => record.id"
      :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
    >
      <span slot="status" slot-scope="text">
         {{ statusFilter(text)  }}
      </span>
      <span slot="type" slot-scope="text">
         {{ typeFilter(text)  }}
      </span>
      <span slot="action" slot-scope="text, record">
        <div v-if="record.status == 0">
          <a v-if="hasPerm('sysNotice:detail')" @click="$refs.detailForm.detail(record)">查看</a>
          <a-divider type="vertical"  v-if="hasPerm('sysNotice:detail') & hasPerm('sysNotice:edit')"/>
          <a v-if="hasPerm('sysNotice:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical"  v-if="hasPerm('sysNotice:edit') & hasPerm('sysNotice:changeStatus')"/>
          <a-popconfirm v-if="hasPerm('sysNotice:changeStatus')" placement="topRight" title="确认发布该信息?" @confirm="() => editNoticeStatus(1,record)">
              <a>发布</a>
         </a-popconfirm>
        </div>
        <div v-if="record.status == 1">
            <a v-if="hasPerm('sysNotice:detail')" @click="$refs.detailForm.detail(record)">查看</a>
            <a-divider type="vertical" v-if="hasPerm('sysNotice:detail') & hasPerm('sysNotice:changeStatus')"/>
            <a-popconfirm v-if="hasPerm('sysNotice:changeStatus')" placement="topRight" title="确认撤回该信息?" @confirm="() => editNoticeStatus(2,record)">
                <a>撤回</a>
            </a-popconfirm>
        </div>
        <div v-if="record.status == 2">
          <a v-if="hasPerm('sysNotice:detail')" @click="$refs.detailForm.detail(record)">查看</a>
          <a-divider type="vertical" v-if="hasPerm('sysNotice:detail') & hasPerm('sysNotice:delete')"/>
          <a-popconfirm v-if="hasPerm('sysNotice:delete')" placement="topRight" title="确认删除?" @confirm="() => sysNoticeDelete(record)">
                <a>删除</a>
          </a-popconfirm>
        </div>
      </span>
    </s-table>
    <add-form  ref="addForm" @ok="handleOk" v-if="hasPerm('sysNotice:add')"/>
    <edit-form ref="editForm" @ok="handleOk" v-if="hasPerm('sysNotice:edit')"/>
    <detail-form ref="detailForm" @ok="handleOk" v-if="hasPerm('sysNotice:detail')"/>
    <div ref="editor"></div>
  </a-card>
</template>
<script>
  import { STable } from '@/components'
  import { sysNoticePage ,sysNoticeDelete ,sysNoticeChangeStatus} from '@/api/modular/system/noticeManage'
@ -91,7 +79,6 @@
  import addForm from './addForm'
  import editForm from './editForm'
  import detailForm from './detailForm'
  export default {
    components: {
      STable,
@ -99,7 +86,6 @@
      editForm,
      detailForm
    },
    data () {
      return {
        // 高级搜索 展开/关闭
@ -133,9 +119,8 @@
        selectedRows: [],
        statusDictTypeDropDown:[],//0草稿 1发布 2撤回 3删除
        typeDictTypeDropDown:[]//0通知 1公告
    }
      }
    },
    created(){
      this.sysDictTypeDropDown()//先注释
      if(this.hasPerm('sysNotice:changeStatus') || this.hasPerm('sysNotice:edit') || this.hasPerm('sysNotice:delete')){
@ -147,7 +132,6 @@
        })
      }
    },
    methods: {
      /**
       * 获取字典数据
@ -160,7 +144,6 @@
          this.typeDictTypeDropDown=res.data
        })
      },
      statusFilter (status) {
        const status_value = this.statusDictTypeDropDown.filter(item => item.code == status)
        if(status_value.length>0){
@ -173,7 +156,6 @@
          return type_value[0].value
        }
      },
      /**
       * 修改状态
       */
@ -187,7 +169,6 @@
          }
        }))
      },
      /**
       * 提交
       */
@ -203,7 +184,6 @@
          this.$message.error('删除错误:'+err.message)
        })
      },
      handleOk () {
        this.$refs.table.refresh()
      },
@ -212,10 +192,8 @@
        this.selectedRows = selectedRows
      }
    }
  }
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
@ -223,5 +201,4 @@
  button {
    margin-right: 8px;
  }
</style>