| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 | <template>  <el-dialog    :title="title"    :visible.sync="open"    width="800px"    append-to-body    :close-on-click-modal="false"    @close="cancel"  >    <div class="form-dialog-box"    v-loading="loading"    element-loading-text="拼命加载数据中"    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="120px">              </el-form>    </div>    <span slot="footer" class="dialog-footer" v-if="formStatus==1">      <el-button @click="cancel">取消</el-button>      <el-button        type="primary"        @click="submitForm"        v-loading="loading"        element-loading-text="提交中..."        element-loading-spinner="el-icon-loading"        element-loading-background="rgba(0, 0, 0, 0.8)"      >         {{ loading ? '提交中...' : '保存' }}      </el-button>    </span>    <!-- 添加或修改对话框 End -->  </el-dialog></template><script>import {   getTableDeatilsApi,  updateTableApi,  addTableApi } from '@/api/CURD'export default {  name: "addAndEdit",  dicts: [],  data() {    return {      title: "",      model: "", // EDIT: 编辑模式 ADD : 新增模式  EDITInit : 编辑模式(需要请求详情)      open: false,      loading: false,      formStatus: null, // 0/null : 加载中 1 : 获取详情成功 2  : 获取详情失败       configUrl: {        add: '/merchant/merchantSysuser', // 新增地址        details: '/merchant/merchantSysuser/', // 详情地址        edit: '/merchant/merchantSysuser', // 编辑地址      },      form: {        id: undefined,      },      rules: {        xxx: [{ required: true, message: "请输入xxx", trigger: ["change","blur"] }]      }    };  },  methods: {    async initData(title , model,row){      this.title = title      this.open = true      this.loading = true      this.model = model      this.formStatus = 0      if(model=='ADD') { // 新增        this.$set(this,'form',row)        this.formStatus = 1      }else if(model=='EDIT') { // 新增        this.$set(this,'form',row)        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 getTableDeatilsApi(this.configUrl.details,id)        if(res.code == 200) {          this.$set(this,'form',JSON.parse(JSON.stringify(res.data)))          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.loading = true          if (this.model != 'ADD') {            updateTableApi(              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;    },  },};</script><style lang="scss" scoped>.form-dialog-box {  padding: 0 30px;  padding: 0 30px;  min-height: 50vh;  max-height: 65vh;  overflow-y: auto;  .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;      }    }  }}</style><style>.custom-class-box {  z-index: 999999 !important;}</style>
 |