prestoreAccount.vue 7.8 KB
<template>
  <el-dialog
    :title="$t('prestoreAccount.title')"
    :visible.sync="dialogVisible"
    width="50%"
  >
    <el-form :model="prestoreAccountInfo" label-width="120px">
      <el-form-item :label="$t('prestoreAccount.accountType')" required>
        <el-select
          v-model="prestoreAccountInfo.acctType"
          style="width: 100%"
        >
          <el-option
            :label="$t('prestoreAccount.selectAccountType')"
            value=""
            disabled
          ></el-option>
          <el-option
            v-for="(type,index) in prestoreAccountInfo.acctTypes"
            :key="index"
            :label="type.name"
            :value="type.statusCd"
          ></el-option>
        </el-select>
      </el-form-item>

      <el-form-item :label="$t('prestoreAccount.ownerPhone')" required>
        <el-input
          v-model="prestoreAccountInfo.tel"
          :placeholder="$t('prestoreAccount.ownerPhonePlaceholder')"
          @blur="_changeTel"
        ></el-input>
      </el-form-item>

      <el-form-item :label="$t('prestoreAccount.ownerName')" required>
        <el-select
          v-model="prestoreAccountInfo.ownerId"
          style="width: 100%"
          @change="_loadOwnerRooms"
        >
          <el-option
            :label="$t('prestoreAccount.selectOwner')"
            value=""
            disabled
          ></el-option>
          <el-option
            v-for="(owner,index) in prestoreAccountInfo.owners"
            :key="index"
            :label="owner.name"
            :value="owner.ownerId"
          ></el-option>
        </el-select>
      </el-form-item>

      <el-form-item
        v-if="prestoreAccountInfo.acctType == '2004' || prestoreAccountInfo.acctType == '2005'"
        :label="$t('prestoreAccount.deductionRoom')"
        required
      >
        <el-select v-model="prestoreAccountInfo.roomId" style="width: 100%">
          <el-option
            :label="$t('prestoreAccount.selectRoom')"
            value=""
            disabled
          ></el-option>
          <el-option
            v-for="(room,index) in prestoreAccountInfo.rooms"
            :key="index"
            :label="room.roomName"
            :value="room.roomId"
          ></el-option>
        </el-select>
      </el-form-item>

      <el-form-item :label="$t('prestoreAccount.prestoreAmount')" required>
        <el-input
          v-model="prestoreAccountInfo.amount"
          :placeholder="$t('prestoreAccount.prestoreAmountPlaceholder')"
        ></el-input>
      </el-form-item>

      <el-form-item :label="$t('prestoreAccount.paymentMethod')" required>
        <el-select v-model="prestoreAccountInfo.primeRate" style="width: 100%">
          <el-option
            :label="$t('prestoreAccount.selectPaymentMethod')"
            value=""
            disabled
          ></el-option>
          <el-option
            v-for="(item,index) in prestoreAccountInfo.primeRates"
            v-if="item.statusCd != '5' && item.statusCd != '6'"
            :key="index"
            :label="item.name"
            :value="item.statusCd"
          ></el-option>
        </el-select>
      </el-form-item>

      <el-form-item :label="$t('prestoreAccount.remark')">
        <el-input
          type="textarea"
          :rows="3"
          v-model="prestoreAccountInfo.remark"
          :placeholder="$t('prestoreAccount.remarkPlaceholder')"
        ></el-input>
      </el-form-item>
    </el-form>

    <span slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible = false">{{ $t('prestoreAccount.cancel') }}</el-button>
      <el-button type="primary" @click="savePrestoreAccountInfo">{{ $t('prestoreAccount.save') }}</el-button>
    </span>
  </el-dialog>
</template>

<script>
import { ownerPrestoreAccount, queryOwners, queryRoomsByOwner } from '@/api/fee/prestoreAccountApi'
import { getDict } from '@/api/community/communityApi'
import { getCommunityId } from '@/api/community/communityApi'

export default {
  name: 'PrestoreAccount',
  data() {
    return {
      dialogVisible: false,
      prestoreAccountInfo: {
        tel: '',
        ownerId: '',
        owners: [],
        amount: '',
        remark: '',
        acctTypes: [],
        acctType: '2003',
        primeRate: '',
        primeRates: [],
        rooms: [],
        roomId: '',
      },
      communityId: ''
    }
  },
  created() {
    this.communityId = getCommunityId()
    this._initPrimeRates()
  },
  methods: {
    open(params) {
      this.dialogVisible = true
      this._initAcctTypes()
      
      if (params) {
        this.prestoreAccountInfo.tel = params.tel || ''
        this.prestoreAccountInfo.ownerId = params.ownerId || ''
        this.prestoreAccountInfo.acctType = params.acctType || '2003'
        this.prestoreAccountInfo.roomId = params.roomId || ''
        
        if (params.tel) {
          this._changeTel()
          this._loadOwnerRooms()
        }
      }
    },
    _initPrimeRates() {
      getDict('pay_fee_detail', 'prime_rate').then(data => {
        this.prestoreAccountInfo.primeRates = data
      })
    },
    _initAcctTypes() {
      getDict('account', 'acct_type').then(data => {
        this.prestoreAccountInfo.acctTypes = data
      })
    },
    prestoreAccountValidate() {
      if (!this.prestoreAccountInfo.ownerId) {
        this.$message.error(this.$t('prestoreAccount.validateOwner'))
        return false
      }
      if (!this.prestoreAccountInfo.amount) {
        this.$message.error(this.$t('prestoreAccount.validateAmount'))
        return false
      }
      if (!this.prestoreAccountInfo.acctType) {
        this.$message.error(this.$t('prestoreAccount.validateAccountType'))
        return false
      }
      if (this.prestoreAccountInfo.remark && this.prestoreAccountInfo.remark.length > 200) {
        this.$message.error(this.$t('prestoreAccount.validateRemark'))
        return false
      }
      return true
    },
    savePrestoreAccountInfo() {
      if (!this.prestoreAccountValidate()) return

      const params = {
        ...this.prestoreAccountInfo,
        communityId: this.communityId
      }

      ownerPrestoreAccount(params).then(response => {
        if (response.code === 0) {
          this.$message.success(this.$t('prestoreAccount.saveSuccess'))
          this.dialogVisible = false
          this.clearPrestoreAccountInfo()
          this.$emit('save-success')
        } else {
          this.$message.error(response.msg)
        }
      }).catch(error => {
        console.error('请求失败:', error)
        this.$message.error(this.$t('prestoreAccount.saveFailed'))
      })
    },
    clearPrestoreAccountInfo() {
      const primeRates = this.prestoreAccountInfo.primeRates
      this.prestoreAccountInfo = {
        tel: '',
        ownerId: '',
        owners: [],
        amount: '',
        remark: '',
        acctTypes: [],
        acctType: '2003',
        primeRate: '',
        primeRates: primeRates,
        rooms: [],
        roomId: '',
      }
    },
    _changeTel() {
      if (!this.prestoreAccountInfo.tel) return

      const params = {
        communityId: this.communityId,
        row: 50,
        page: 1,
        link: this.prestoreAccountInfo.tel,
        ownerTypeCd: '1001'
      }

      queryOwners(params).then(response => {
        this.prestoreAccountInfo.owners = response.data
      }).catch(error => {
        console.error('请求失败:', error)
        this.prestoreAccountInfo.owners = []
      })
    },
    _loadOwnerRooms() {
      if (!this.prestoreAccountInfo.ownerId) return

      const params = {
        communityId: this.communityId,
        row: 50,
        page: 1,
        ownerId: this.prestoreAccountInfo.ownerId,
      }

      queryRoomsByOwner(params).then(response => {
        this.prestoreAccountInfo.rooms = response.rooms
      }).catch(error => {
        console.error('请求失败:', error)
        this.prestoreAccountInfo.rooms = []
      })
    }
  }
}
</script>