payFeeUserAccount.vue 4.02 KB
<template>
  <div>
    <el-card v-if="accountList.length > 0" class="margin-bottom-sm">
      <div slot="header" class="flex justify-between">
        <span>{{ $t('payFeeUserAccount.accountInfo') }}</span>
        <el-button type="primary" size="small" style="float: right;" @click="queryPayFeeUserAccount">
          <i class="el-icon-refresh"></i>
          {{ $t('payFeeUserAccount.refresh') }}
        </el-button>
      </div>

      <el-table :data="accountList" border style="width: 100%">
        <el-table-column align="center" :label="$t('payFeeUserAccount.select')" width="120">
          <template slot-scope="scope">
            <el-radio
              v-model="selectedAccount"
              :label="scope.row.acctId"
              @change="() => handleAccountChange(scope.row)"
            >
            </el-radio>
          </template>
        </el-table-column>
        <el-table-column prop="acctTypeName" align="center" :label="$t('payFeeUserAccount.accountType')" />
        <el-table-column prop="acctName" align="center" :label="$t('payFeeUserAccount.accountName')" />
        <el-table-column prop="amount" align="center" :label="$t('payFeeUserAccount.accountAmount')">
          <template slot-scope="scope">
            {{ scope.row.amount }} {{ $t('payFeeUserAccount.yuan') }}
          </template>
        </el-table-column>
        <el-table-column align="center" :label="$t('payFeeUserAccount.operation')" width="150">
          <template slot-scope="scope">
            <el-button type="primary" size="mini" @click="openAddUserAmountModal(scope.row)">
              <i class="el-icon-plus"></i>
              {{ $t('payFeeUserAccount.prestore') }}
            </el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-card>
  </div>
</template>

<script>
import { getCommunityId } from '@/api/community/communityApi'
import { queryCommunityOwnerAccount } from '@/api/fee/payFeeOrderApi'

export default {
  name: 'PayFeeUserAccount',
  data() {
    return {
      accountList: [],
      feeId: '',
      ownerId: '',
      communityId: '',
      selectedAccount: '' // 单选账户
    }
  },
  methods: {
    open(params) {
      this.feeId = params.feeId
      this.ownerId = params.ownerId || ''
      this.listUserAccount()
    },
    close() {
      this.dialogVisible = false
    },
    async listUserAccount() {
      try {
        this.communityId = await getCommunityId()
        const params = {
          page: 1,
          row: 20,
          feeId: this.feeId,
          ownerId: this.ownerId,
          communityId: this.communityId
        }

        const response = await queryCommunityOwnerAccount(params)
        this.accountList = response.data || []
      } catch (error) {
        console.error('查询用户账户失败:', error)
      }
    },
    queryPayFeeUserAccount() {
      this.listUserAccount()
    },
    openAddUserAmountModal(userAccount) {
      window.open(`/#/views/owner/ownerDetail?ownerId=${userAccount.objId}&currentTab=ownerDetailAccount`)
    },
    // 处理账户选择变化
    handleAccountChange(account) {
      if (!account) {
        this.selectedAccount = ''
      } else {
        this.selectedAccount = account.acctId
      }
      this.computeFeeUserAmount()
    },
    // 计算费用使用金额
    computeFeeUserAmount() {
      let totalUserAmount = 0.0
      let selectAccount = []

      const account = this.accountList.find(item => item.acctId === this.selectedAccount)
      if (account && Number(account.amount) !== 0) {
        totalUserAmount = parseFloat(account.amount)
        selectAccount = [account]
      }

      this.$emit('changeUserAmountPrice', {
        totalUserAmount,
        accountList: this.accountList,
        integralAmount: 0,
        cashAmount: totalUserAmount,
        couponAmount: 0,
        selectAccount
      })
    },
    handleClose() {
      this.accountList = []
      this.selectedAccount = '' // 清空选中的账户
      this.feeId = ''
      this.ownerId = ''
    }
  }
}
</script>

<style scoped>
.el-table {
  margin-top: 20px;
}
</style>