Uname: Linux webm012.cluster130.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Software: Apache
PHP version: 8.0.30 [ PHP INFO ] PHP os: Linux
Server Ip: 145.239.37.162
Your Ip: 216.73.216.190
User: dreampi (1009562) | Group: users (100)
Safe Mode: OFF
Disable Function:
_dyuweyrj4,_dyuweyrj4r,dl

name : Extensions.vue
<template>
  <!-- Form -->
  <el-form label-position="top">

    <!-- Extensions -->
    <div class="am-extra-list" style="padding: 0;">
      <el-button @click="addExtension" size="large" type="primary" class="am-dialog-create">
        <i class="el-icon-plus"></i>
        <span class="button-text">{{ addLabel }}</span>
      </el-button>

      <transition-group name="list-complete">
        <div class="am-extra-item"
             v-for="(extensionItem, index) in extensions" :key="index + 1">
          <!-- Preview -->
          <el-row align="top" style="margin-bottom: 0;">
            <el-col :span="24">
              <el-row type="flex" align="middle" style="margin-bottom: 0;">
                <el-col :span="18">
                  <component
                    v-if="editedExtension === null || index !== extensions.indexOf(editedExtension)"
                    :is="formHeader"
                    :extension="extensionItem"
                    :type="type"
                    :index="index"
                  >
                  </component>
                </el-col>
                <el-col
                    :span="6"
                    class="extra-item-actions align-right"
                    v-if="editedExtension === null || index !== extensions.indexOf(editedExtension)">
                  <span @click="showEditExtensionDialog(extensionItem)">
                    <img class="svg-amelia edit" width="16px" :src="$root.getUrl+'public/img/edit.svg'">
                  </span>
                  <span @click="showDeleteExtensionDialog(extensionItem)" v-if="!(oneRequired && extensions.length === 1)">
                    <img class="svg-amelia" width="16px" :src="$root.getUrl+'public/img/delete.svg'">
                  </span>
                </el-col>
              </el-row>

              <div class="am-extra-item-data"
                   v-show="(editedExtension === null || index !== extensions.indexOf(editedExtension)) && (extensionToDelete === null || index !== extensions.indexOf(extensionToDelete))">
                <component
                  :is="formInfo"
                  :extension="extensionItem"
                  :type="type"
                >
                </component>
              </div>

            </el-col>
          </el-row>

          <!-- Delete -->
          <el-collapse-transition>
            <div class="am-confirmation"
                 v-show="extensionToDelete !== null && index === extensions.indexOf(extensionToDelete)">
              <p>{{ deleteMessage }}?</p>
              <div class="align-right" style="display: inline-flex;">
                <el-button size="small" @click="hideDeleteExtensionDialog()">{{ $root.labels.cancel }}</el-button>
                <el-button size="small" @click="deleteExtension(extensionItem)" type="primary">{{ $root.labels.delete }}</el-button>
              </div>
            </div>
          </el-collapse-transition>

          <!-- Edit -->
          <el-collapse-transition>
            <div v-show="extensionEditDialog === true && index === extensions.indexOf(editedExtension)">
              <el-form :model="extensionItem" ref="extensionsRef" :rules="rules" label-position="top" style="padding: 0;" :id="'extension-' + type + '-' + index">
                <template>
                  <component
                    :is="form"
                    :extension="extensionItem"
                    :extensions="extensions"
                    :type="type"
                  >
                  </component>
                </template>

                <!-- Cancel & Save -->
                <div class="align-right" style="display: inline-flex;">
                  <el-button @click="cancelExtension(extensionItem)" size="small">
                    {{ $root.labels.cancel }}
                  </el-button>
                  <el-button size="small" @click="saveExtension(index)" type="primary">
                    {{ $root.labels.save }}
                  </el-button>
                </div>
              </el-form>
            </div>
          </el-collapse-transition>

        </div>
      </transition-group>

    </div>

  </el-form>
</template>

<script>
import notifyMixin from '../../../js/backend/mixins/notifyMixin'
import imageMixin from '../../../js/common/mixins/imageMixin'
import helperMixin from '../../../js/backend/mixins/helperMixin'
import wooCommerceRule from '../settings/payments/WooCommerceRule'
import wooCommerceRuleHeader from '../settings/payments/WooCommerceRuleHeader'
import wooCommerceRuleInfo from '../settings/payments/WooCommerceRuleInfo'

export default {

  components: {
    wooCommerceRule,
    wooCommerceRuleHeader,
    wooCommerceRuleInfo
  },

  mixins: [imageMixin, helperMixin, notifyMixin],

  props: {
    formHeader: {
      type: String,
      default: ''
    },

    formInfo: {
      type: String,
      default: ''
    },

    form: {
      type: String,
      default: ''
    },

    oneRequired: {
      type: Boolean,
      default: false
    },

    type: {
      type: String,
      default: ''
    },

    rules: {
      type: Object,
      default: () => {}
    },

    addLabel: {
      type: String,
      default: ''
    },

    deleteMessage: {
      type: String,
      default: ''
    },

    extensions: {
      type: Array,
      default: () => []
    },

    newExtension: {
      type: Object,
      default: () => {}
    }
  },

  data () {
    return {
      extensionToDelete: null,
      extensionEditDialog: null,
      editedExtension: null,
      editedExtensionOld: null,
      isNewExtension: false
    }
  },

  methods: {
    addExtension () {
      if (this.editedExtension === null) {
        this.extensionEditDialog = true

        this.editedExtension = JSON.parse(JSON.stringify(this.newExtension))

        this.isNewExtension = true

        this.extensions.push(this.editedExtension)
      }

      this.scrollViewInModal('extension-' + this.type + '-' + (this.extensions.length - 1))
    },

    showEditExtensionDialog (extensionItem) {
      this.editedExtension = extensionItem
      this.editedExtensionOld = JSON.parse(JSON.stringify(extensionItem))
      this.extensionToDelete = null
      this.extensionEditDialog = true
    },

    showDeleteExtensionDialog (extensionItem) {
      this.extensionToDelete = extensionItem
      this.editedExtension = null
      this.extensionEditDialog = false
    },

    hideDeleteExtensionDialog () {
      this.extensionToDelete = null
      this.extensionEditDialog = true
    },

    deleteExtension (extensionItem) {
      let index = this.extensions.indexOf(extensionItem)
      this.extensions.splice(index, 1)
    },

    cancelExtension (extensionItem) {
      if (this.editedExtensionOld !== null) {
        Object.keys(this.editedExtensionOld).forEach((property) => {
          extensionItem[property] = this.editedExtensionOld[property]
        })
      }

      if (this.isNewExtension) {
        let index = this.extensions.indexOf(extensionItem)

        this.extensions.splice(index, 1)

        this.isNewExtension = false
      }

      this.editedExtension = null
      this.editedExtensionOld = null
      this.extensionEditDialog = false
    },

    saveExtension (index) {
      this.$refs.extensionsRef[index].validate((valid) => {
        if (valid) {
          this.editedExtension = null
          this.extensionEditDialog = false
          this.isNewExtension = false
          this.$refs.extensionsRef[index].clearValidate()
        } else {
          return false
        }
      })
    }
  }
}
</script>
© 2026 GrazzMean-Shell