I18nMessageEdit.vue 5.38 KB
<template>
  <el-dialog
    width="60%"
    v-if="dialogVisible"
    :title="i18nMessageTitle"
    :visible="dialogVisible"
    :before-close="handleClose"
    append-to-body
    :close-on-click-modal="false"
  >
    <div slot="title">
      {{ i18nMessageTitle }}
      <el-tooltip
        content="配置国际化信息之后需要保存表单方可生效"
        placement="top"
      >
        <i class="el-icon-info"></i>
      </el-tooltip>
    </div>
    <el-form v-model="i18nMessage" data-vv-scope="editi18nMessageForm">
      <table class="form-table" cellspacing="0" cellpadding="0" border="0">
        <tbody>
          <tr>
            <th width="120px" class="is-required">资源KEY:</th>
            <td class="i18nMessage-input-width">
              <ht-input
                v-model="i18nMessage.key_"
                autocomplete="off"
                :validate="{
                  required: true,
                  regex: {
                    exp: '^[a-zA-Z][a-zA-Z0-9_-]+$',
                    message: '只能输入字母、数字、下划线,且以字母开头'
                  }
                }"
                :disabled="true"
                :maxlength="50"
                :showWordLimit="true"
              ></ht-input>
            </td>
          </tr>
          <tr>
            <th width="120px">资源:</th>
            <td>
              <table
                class="form-table I18nTable"
                cellspacing="0"
                cellpadding="0"
                border="0"
              >
                <tbody>
                  <tr>
                    <th width="30%">类型</th>
                    <th width="30%">描述</th>
                    <th width="30%">资源值</th>
                  </tr>
                  <tr v-for="item in types" :key="item.id">
                    <td>{{ item.type }}</td>
                    <td>{{ item.desc }}</td>
                    <td>
                      <ht-input
                        :maxlength="50"
                        :showWordLimit="true"
                        v-model="item.val"
                      ></ht-input>
                    </td>
                  </tr>
                </tbody>
              </table>
            </td>
          </tr>
        </tbody>
      </table>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button @click="dialogCancel('dialogVisible')">{{
        $t('eip.common.cancel')
      }}</el-button>
      <ht-submit-button
        :url="savei18nMessageUrl()"
        :model="i18nMessage"
        :is-submit="isSubmit"
        request-method="POST"
        scope-name="editi18nMessageForm"
        @before-save-data="beforeSaveData"
        @after-save-data="afterSaveData"
        >{{ $t('eip.common.save') }}</ht-submit-button
      >
    </div>
    <ht-load-data
      :url="loadDataUrl"
      requestMethod="post"
      context="portal"
      @after-load-data="afterLoadData"
    ></ht-load-data>
  </el-dialog>
</template>

<script>
export default {
  name: '',
  props: {
    messageKey: String
  },
  data() {
    return {
      i18nMessageTitle: '添加国际化信息',
      dialogVisible: false,
      i18nMessage: {
        key_: ''
      },
      oldKey: '',
      isSubmit: false,
      loadDataUrl: '',
      types: []
    }
  },
  methods: {
    handleClose() {
      this.dialogVisible = false
    },
    handleOpen() {
      this.$nextTick(() => {
        if (this.messageKey) {
          this.loadDataUrl =
            '/i18n/custom/i18nMessage/v1/getI18nMessageJson?key=' +
            this.messageKey
          this.dialogVisible = true
        } else {
          this.$message('请选择需要修改的组件或绑定属性')
        }
      })
    },
    dialogCancel() {
      this.dialogVisible = false
    },
    savei18nMessageUrl() {
      return (
        window.context.portal +
        '/i18n/custom/i18nMessage/v1/save' +
        '?oldKey=' +
        this.messageKey
      )
    },
    beforeSaveData() {
      this.isSubmit = true
      this.i18nMessage.vals = ''
      this.i18nMessage.types = ''
      var noData = true
      this.types.forEach(item => {
        this.i18nMessage.types = this.i18nMessage.types + item.type + ','
        if (item.val && item.val != '') {
          noData = false
          this.i18nMessage.vals = this.i18nMessage.vals + ','
        } else {
          this.i18nMessage.vals = this.i18nMessage.vals + item.val + ','
        }
      })
      if (noData) {
        this.$message.error('资源中资源值至少有一个!')
        this.isSubmit = false
        return
      }
      this.i18nMessage.key = this.i18nMessage.key_
      this.i18nMessage.mesTypeInfo = this.types
    },
    afterSaveData() {
      this.dialogVisible = false
      let desc = ''
      for (let i = 0; i < this.i18nMessage.mesTypeInfo.length; i++) {
        if (this.i18nMessage.mesTypeInfo[i].type === 'zh-CN') {
          desc = this.i18nMessage.mesTypeInfo[i].val
        }
      }
      this.$emit('after-save', {
        key: '${' + this.i18nMessage.key_ + '}',
        desc: desc,
        prop: this.i18nMessage.key_
      })
    },
    afterLoadData(data) {
      this.i18nMessage = data
      this.types = data.mesTypeInfo
      if (!data.key) {
        this.i18nMessage.key_ = this.messageKey
      }
      // 编辑数据源
      if (this.dialogVisible) {
        setTimeout(() => this.$validator.validateAll('editi18nMessageForm'))
      }
    }
  }
}
</script>

<style scoped></style>