|  | @@ -0,0 +1,364 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <el-dialog
 | 
	
		
			
				|  |  | +    :title="title"
 | 
	
		
			
				|  |  | +    :visible.sync="open"
 | 
	
		
			
				|  |  | +    width="70%"
 | 
	
		
			
				|  |  | +    append-to-body
 | 
	
		
			
				|  |  | +    :close-on-click-modal="false"
 | 
	
		
			
				|  |  | +    @close="cancel"
 | 
	
		
			
				|  |  | +  >
 | 
	
		
			
				|  |  | +    <div class="form-dialog-box"
 | 
	
		
			
				|  |  | +    v-loading="loading"
 | 
	
		
			
				|  |  | +    :element-loading-text="loadingText"
 | 
	
		
			
				|  |  | +    element-loading-spinner="el-icon-loading"
 | 
	
		
			
				|  |  | +    element-loading-background="rgba(0, 0, 0, 0.8)">
 | 
	
		
			
				|  |  | +      <el-form :model="form" ref="form" :rules="rules" label-width="0">
 | 
	
		
			
				|  |  | +        <el-form-item label="" prop="content">
 | 
	
		
			
				|  |  | +          <quill-editor
 | 
	
		
			
				|  |  | +              v-model="form.content"
 | 
	
		
			
				|  |  | +              ref="myQuillEditor"
 | 
	
		
			
				|  |  | +              :options="editorOption"
 | 
	
		
			
				|  |  | +              @blur="onEditorBlur($event)"
 | 
	
		
			
				|  |  | +              @focus="onEditorFocus($event)"
 | 
	
		
			
				|  |  | +              @change="onEditorChange($event)"
 | 
	
		
			
				|  |  | +              @ready="onEditorReady($event)">
 | 
	
		
			
				|  |  | +          </quill-editor>
 | 
	
		
			
				|  |  | +        </el-form-item>
 | 
	
		
			
				|  |  | +      </el-form>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <span slot="footer" class="dialog-footer" v-if="formStatus==1">
 | 
	
		
			
				|  |  | +      <el-button @click="cancel">关闭</el-button>
 | 
	
		
			
				|  |  | +    </span>
 | 
	
		
			
				|  |  | +    <!-- 添加或修改对话框 End -->
 | 
	
		
			
				|  |  | +  </el-dialog>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import { 
 | 
	
		
			
				|  |  | +  getTableDeatilsByIdApi,
 | 
	
		
			
				|  |  | +  updateTableApi,
 | 
	
		
			
				|  |  | +  addTableApi
 | 
	
		
			
				|  |  | + } from '@/api/CURD'
 | 
	
		
			
				|  |  | +import { quillEditor } from 'vue-quill-editor'
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +import 'quill/dist/quill.core.css'
 | 
	
		
			
				|  |  | +import 'quill/dist/quill.snow.css'
 | 
	
		
			
				|  |  | +import 'quill/dist/quill.bubble.css'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  name: "addAndEdit",
 | 
	
		
			
				|  |  | +  dicts: ['tourism_noticemanagement_type'],
 | 
	
		
			
				|  |  | +  components: {quillEditor},
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      title: "",
 | 
	
		
			
				|  |  | +      model: "", // EDIT: 编辑模式 ADD : 新增模式  EDITInit : 编辑模式(需要请求详情)
 | 
	
		
			
				|  |  | +      open: false,
 | 
	
		
			
				|  |  | +      loading: false,
 | 
	
		
			
				|  |  | +      loadingText: "拼命加载数据中...",
 | 
	
		
			
				|  |  | +      formStatus: null, // 0/null : 加载中 1 : 获取详情成功 2  : 获取详情失败 
 | 
	
		
			
				|  |  | +      configUrl: {
 | 
	
		
			
				|  |  | +        add: '/merchant/agreementInfo/insertOrUpdate', // 新增地址
 | 
	
		
			
				|  |  | +        details: '/merchant/agreementInfo/selectById', // 详情地址
 | 
	
		
			
				|  |  | +        edit: '/merchant/agreementInfo/insertOrUpdate', // 编辑地址
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      form: {
 | 
	
		
			
				|  |  | +        id: undefined,
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      rules: {
 | 
	
		
			
				|  |  | +        type: [{ required: true, message: "请输入协议类型", trigger: ["change","blur"] }],
 | 
	
		
			
				|  |  | +        content: [{ required: true, message: "请输入协议内容", trigger: ["change","blur"] }],
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      scenicAreaProducts: [],// 景点产品关联
 | 
	
		
			
				|  |  | +      // 富文本编辑器配置
 | 
	
		
			
				|  |  | +      editorOption: {
 | 
	
		
			
				|  |  | +        modules: {
 | 
	
		
			
				|  |  | +          toolbar: [
 | 
	
		
			
				|  |  | +            ['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线
 | 
	
		
			
				|  |  | +            ['blockquote', 'code-block'], // 引用  代码块
 | 
	
		
			
				|  |  | +            [{ header: 1 }, { header: 2 }], // 1、2 级标题
 | 
	
		
			
				|  |  | +            [{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表
 | 
	
		
			
				|  |  | +            [{ script: 'sub' }, { script: 'super' }], // 上标/下标
 | 
	
		
			
				|  |  | +            [{ indent: '-1' }, { indent: '+1' }], // 缩进
 | 
	
		
			
				|  |  | +            [{ direction: 'rtl' }], // 文本方向
 | 
	
		
			
				|  |  | +            [{ size: ['12', '14', '16', '18', '20', '22', '24', '28', '32', '36'] }], // 字体大小
 | 
	
		
			
				|  |  | +            [{ header: [1, 2, 3, 4, 5, 6] }], // 标题
 | 
	
		
			
				|  |  | +            [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
 | 
	
		
			
				|  |  | +            // [{ font: ['songti'] }], // 字体种类
 | 
	
		
			
				|  |  | +            [{ align: [] }], // 对齐方式
 | 
	
		
			
				|  |  | +            ['clean'], // 清除文本格式
 | 
	
		
			
				|  |  | +            ['image', 'video'] // 链接、图片、视频
 | 
	
		
			
				|  |  | +          ]
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        placeholder: '请输入正文'
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    async initData(title , model,row){
 | 
	
		
			
				|  |  | +      this.title = title
 | 
	
		
			
				|  |  | +      this.open = true
 | 
	
		
			
				|  |  | +      this.loadingText = "拼命加载数据中..."
 | 
	
		
			
				|  |  | +      this.loading = true
 | 
	
		
			
				|  |  | +      this.model = model
 | 
	
		
			
				|  |  | +      this.formStatus = 0
 | 
	
		
			
				|  |  | +      if(model=='ADD') { // 新增
 | 
	
		
			
				|  |  | +        this.$set(this,'form',row)
 | 
	
		
			
				|  |  | +        this.formStatus = 1
 | 
	
		
			
				|  |  | +      }else if(model=='EDIT') { // 新增
 | 
	
		
			
				|  |  | +        let obj = {
 | 
	
		
			
				|  |  | +          ...row
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.$set(this,'form',obj)
 | 
	
		
			
				|  |  | +        this.formStatus = 1
 | 
	
		
			
				|  |  | +      }else if(model=='EDITInit') { // 新增
 | 
	
		
			
				|  |  | +        await this.getTableDeatilsFun(row)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.loading = false
 | 
	
		
			
				|  |  | +      this.$nextTick(()=>{
 | 
	
		
			
				|  |  | +        if(this.$refs["form"]) {
 | 
	
		
			
				|  |  | +          this.$refs["form"].clearValidate();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 获取详情 */
 | 
	
		
			
				|  |  | +    async getTableDeatilsFun(row) {
 | 
	
		
			
				|  |  | +      const id = row.id
 | 
	
		
			
				|  |  | +      this.loading = true
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        let res = await getTableDeatilsByIdApi(this.configUrl.details,{id})
 | 
	
		
			
				|  |  | +        if(res.code == 200) {
 | 
	
		
			
				|  |  | +          let obj = {
 | 
	
		
			
				|  |  | +            ...res.data
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          this.$set(this,'form',JSON.parse(JSON.stringify(obj)))
 | 
	
		
			
				|  |  | +          this.formStatus = 1
 | 
	
		
			
				|  |  | +        }else {
 | 
	
		
			
				|  |  | +          this.$message.error('获取详情失败!!!');
 | 
	
		
			
				|  |  | +          this.formStatus = 2
 | 
	
		
			
				|  |  | +          this.loading = false
 | 
	
		
			
				|  |  | +          this.open = false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.loading = false
 | 
	
		
			
				|  |  | +      } catch (error) {
 | 
	
		
			
				|  |  | +        console.error('获取详情失败!!!!',error)
 | 
	
		
			
				|  |  | +        this.formStatus = 2
 | 
	
		
			
				|  |  | +        this.loading = false
 | 
	
		
			
				|  |  | +        this.open = false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 保存
 | 
	
		
			
				|  |  | +     * @date 2023-11-22
 | 
	
		
			
				|  |  | +     * @returns {any}
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    submitForm() {
 | 
	
		
			
				|  |  | +      this.$refs["form"].validate(valid => {
 | 
	
		
			
				|  |  | +        if (valid) {
 | 
	
		
			
				|  |  | +          this.loadingText = "提交数据中..."
 | 
	
		
			
				|  |  | +          this.loading = true
 | 
	
		
			
				|  |  | +          if (this.model != 'ADD') {
 | 
	
		
			
				|  |  | +            addTableApi(
 | 
	
		
			
				|  |  | +              this.configUrl.edit,{
 | 
	
		
			
				|  |  | +                ...this.form
 | 
	
		
			
				|  |  | +              }).then(response => {
 | 
	
		
			
				|  |  | +              this.$modal.msgSuccess("修改成功");
 | 
	
		
			
				|  |  | +              this.loading = false
 | 
	
		
			
				|  |  | +              this.open = false;
 | 
	
		
			
				|  |  | +              this.$emit('refresh')
 | 
	
		
			
				|  |  | +            }).catch(()=>{
 | 
	
		
			
				|  |  | +              this.$message.error("修改失败!!!");
 | 
	
		
			
				|  |  | +              this.loading = false
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            addTableApi(this.configUrl.edit,{
 | 
	
		
			
				|  |  | +                ...this.form
 | 
	
		
			
				|  |  | +              }).then(response => {
 | 
	
		
			
				|  |  | +              this.$modal.msgSuccess("新增成功");
 | 
	
		
			
				|  |  | +              this.loading = false
 | 
	
		
			
				|  |  | +              this.open = false;
 | 
	
		
			
				|  |  | +              this.$emit('refresh')
 | 
	
		
			
				|  |  | +            }).catch(()=>{
 | 
	
		
			
				|  |  | +              this.$message.error("新增失败!!!");
 | 
	
		
			
				|  |  | +              this.loading = false
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 重置
 | 
	
		
			
				|  |  | +     * @date 2023-11-22
 | 
	
		
			
				|  |  | +     * @returns {any}
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    reset() {
 | 
	
		
			
				|  |  | +      if(this.$refs["form"]) {
 | 
	
		
			
				|  |  | +        this.$refs["form"].clearValidate();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 关闭弹框
 | 
	
		
			
				|  |  | +     * @date 2023-11-22
 | 
	
		
			
				|  |  | +     * @returns {any}
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    cancel() {
 | 
	
		
			
				|  |  | +      this.reset();
 | 
	
		
			
				|  |  | +      this.open = false;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 失去焦点事件
 | 
	
		
			
				|  |  | +    onEditorBlur(quill) {
 | 
	
		
			
				|  |  | +      console.log('editor blur!', quill)
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 获得焦点事件
 | 
	
		
			
				|  |  | +    onEditorFocus(quill) {
 | 
	
		
			
				|  |  | +      console.log('editor focus!', quill)
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 准备富文本编辑器
 | 
	
		
			
				|  |  | +    onEditorReady(quill) {
 | 
	
		
			
				|  |  | +      console.log('editor ready!', quill)
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 内容改变事件
 | 
	
		
			
				|  |  | +    onEditorChange({ quill, html, text }) {
 | 
	
		
			
				|  |  | +      console.log('editor change!', quill, html, text)
 | 
	
		
			
				|  |  | +      this.form.content = html
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style lang="scss" scoped>
 | 
	
		
			
				|  |  | +.form-dialog-box {
 | 
	
		
			
				|  |  | +  padding: 0 30px;
 | 
	
		
			
				|  |  | +  padding: 0 30px;
 | 
	
		
			
				|  |  | +  min-height: 50vh;
 | 
	
		
			
				|  |  | +  max-height: 65vh;
 | 
	
		
			
				|  |  | +  overflow-y: auto;
 | 
	
		
			
				|  |  | +  .form-title {
 | 
	
		
			
				|  |  | +    padding: 0 0 10px 0;
 | 
	
		
			
				|  |  | +    span {
 | 
	
		
			
				|  |  | +      display: flex;
 | 
	
		
			
				|  |  | +      color: rgba(65,80,88,1);
 | 
	
		
			
				|  |  | +      font-size: 16px;
 | 
	
		
			
				|  |  | +      font-family: SourceHanSansSC;
 | 
	
		
			
				|  |  | +      font-weight: 700;
 | 
	
		
			
				|  |  | +      line-height: 23px;
 | 
	
		
			
				|  |  | +      border-left: 4px solid rgb(22, 132, 252);
 | 
	
		
			
				|  |  | +      padding-left: 10px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  ::v-deep .ql-editor {
 | 
	
		
			
				|  |  | +    height: 400px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .upload-btn {
 | 
	
		
			
				|  |  | +    width: 100px;
 | 
	
		
			
				|  |  | +    height: 100px;
 | 
	
		
			
				|  |  | +    background-color: #fbfdff;
 | 
	
		
			
				|  |  | +    border: dashed 1px #c0ccda;
 | 
	
		
			
				|  |  | +    border-radius: 5px;
 | 
	
		
			
				|  |  | +    i {
 | 
	
		
			
				|  |  | +      font-size: 30px;
 | 
	
		
			
				|  |  | +      margin-top: 20px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    &-text {
 | 
	
		
			
				|  |  | +      margin-top: -10px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .avatar {
 | 
	
		
			
				|  |  | +    cursor: pointer;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.el-table{
 | 
	
		
			
				|  |  | +  .upload-btn {
 | 
	
		
			
				|  |  | +    width: 100px;
 | 
	
		
			
				|  |  | +    height: 100px;
 | 
	
		
			
				|  |  | +    background-color: #fbfdff;
 | 
	
		
			
				|  |  | +    border: dashed 1px #c0ccda;
 | 
	
		
			
				|  |  | +    border-radius: 5px;
 | 
	
		
			
				|  |  | +    i {
 | 
	
		
			
				|  |  | +      font-size: 30px;
 | 
	
		
			
				|  |  | +      margin-top: 20px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    &-text {
 | 
	
		
			
				|  |  | +      margin-top: -10px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .avatar {
 | 
	
		
			
				|  |  | +    cursor: pointer;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.area-container {
 | 
	
		
			
				|  |  | +  min-height: 400px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +::v-deep .area-wrap-city.el-cascader {
 | 
	
		
			
				|  |  | +  line-height: normal;
 | 
	
		
			
				|  |  | +  .el-input {
 | 
	
		
			
				|  |  | +    cursor: pointer;
 | 
	
		
			
				|  |  | +    width: 100% !important;
 | 
	
		
			
				|  |  | +    height: 28px !important;
 | 
	
		
			
				|  |  | +    .el-input__inner {
 | 
	
		
			
				|  |  | +      display: none !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    span.el-input__suffix {
 | 
	
		
			
				|  |  | +      position: inherit !important;
 | 
	
		
			
				|  |  | +      i.el-input__icon {
 | 
	
		
			
				|  |  | +        line-height: inherit;
 | 
	
		
			
				|  |  | +        margin-left: 5px;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .el-input__wrapper {
 | 
	
		
			
				|  |  | +      box-shadow: none;
 | 
	
		
			
				|  |  | +      input {
 | 
	
		
			
				|  |  | +        display: none;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .el-cascader__tags {
 | 
	
		
			
				|  |  | +    display: none;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.area-city-popper {
 | 
	
		
			
				|  |  | +  .el-cascader-panel {
 | 
	
		
			
				|  |  | +    .el-scrollbar.el-cascader-menu {
 | 
	
		
			
				|  |  | +      .el-cascader-menu__wrap.el-scrollbar__wrap {
 | 
	
		
			
				|  |  | +        height: 315px;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +::v-deep .avatar-uploader .el-upload {
 | 
	
		
			
				|  |  | +    border: 1px dashed #d9d9d9;
 | 
	
		
			
				|  |  | +    border-radius: 6px;
 | 
	
		
			
				|  |  | +    cursor: pointer;
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    overflow: hidden;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  ::v-deep .avatar-uploader .el-upload:hover {
 | 
	
		
			
				|  |  | +    border-color: #409EFF;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  ::v-deep .avatar-uploader-icon {
 | 
	
		
			
				|  |  | +    font-size: 28px;
 | 
	
		
			
				|  |  | +    color: #8c939d;
 | 
	
		
			
				|  |  | +    width: 100px;
 | 
	
		
			
				|  |  | +    height: 100px;
 | 
	
		
			
				|  |  | +    line-height: 100px;
 | 
	
		
			
				|  |  | +    text-align: center;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  ::v-deep .avatar {
 | 
	
		
			
				|  |  | +    width: 100px;
 | 
	
		
			
				|  |  | +    height: 100px;
 | 
	
		
			
				|  |  | +    display: block;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +</style>
 | 
	
		
			
				|  |  | +<style>
 | 
	
		
			
				|  |  | +.custom-class-box {
 | 
	
		
			
				|  |  | +  z-index: 999999 !important;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |