tempImportRoomFee.vue 7.41 KB
<template>
  <el-dialog 
    :title="$t('tempImportRoomFee.title')"
    :visible.sync="dialogVisible"
    width="70%"
    @close="clearTempImportRoomFeeInfo"
  >
    <el-form :model="form" label-width="120px">
      <el-form-item :label="$t('tempImportRoomFee.feeType')">
        <el-select 
          v-model="form.feeTypeCd"
          @change="changeFeeTypeCd"
          :placeholder="$t('tempImportRoomFee.selectFeeType')"
        >
          <el-option 
            v-for="(item,index) in feeTypeCds" 
            :key="index"
            :label="item.name"
            :value="item.statusCd"
          ></el-option>
        </el-select>
      </el-form-item>
      
      <el-form-item :label="$t('tempImportRoomFee.feeObj')">
        <el-input 
          v-model="form.objName" 
          disabled
          :placeholder="$t('tempImportRoomFee.inputFeeObj')"
        ></el-input>
      </el-form-item>

      <el-form-item :label="$t('tempImportRoomFee.feeName')" v-if="form.feeNameFlag === 'S'">
        <el-select 
          v-model="form.configId"
          :placeholder="$t('tempImportRoomFee.selectFeeItem')"
        >
          <el-option 
            v-for="(item,index) in feeConfigs" 
            :key="index"
            :label="item.feeName"
            :value="item.configId"
          ></el-option>
        </el-select>
        <span>{{$t('tempImportRoomFee.feeItemDesc')}}</span>
      </el-form-item>

      <el-form-item :label="$t('tempImportRoomFee.feeName')" v-else>
        <el-col :span="18">
          <el-input 
            v-model="form.feeName" 
            :placeholder="$t('tempImportRoomFee.inputFeeName')"
          ></el-input>
        </el-col>
        <el-col :span="6">
          <el-button @click="toggleFeeNameFlag">{{$t('tempImportRoomFee.select')}}</el-button>
        </el-col>
      </el-form-item>

      <el-form-item :label="$t('tempImportRoomFee.amount')">
        <el-input 
          v-model="form.amount" 
          :placeholder="$t('tempImportRoomFee.inputAmount')"
        ></el-input>
      </el-form-item>

      <el-form-item :label="$t('tempImportRoomFee.startTime')">
        <el-date-picker
          v-model="form.startTime"
          type="datetime"
          :placeholder="$t('tempImportRoomFee.selectStartTime')"
          value-format="yyyy-MM-dd HH:mm:ss"
        ></el-date-picker>
      </el-form-item>

      <el-form-item :label="$t('tempImportRoomFee.endTime')">
        <el-date-picker
          v-model="form.endTime"
          type="datetime"
          :placeholder="$t('tempImportRoomFee.selectEndTime')"
          value-format="yyyy-MM-dd HH:mm:ss"
        ></el-date-picker>
      </el-form-item>
    </el-form>

    <div slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible = false">{{$t('tempImportRoomFee.cancel')}}</el-button>
      <el-button type="primary" @click="saveTempImportFeeInfo">{{$t('tempImportRoomFee.submit')}}</el-button>
    </div>
  </el-dialog>
</template>

<script>
import { importTempData } from '@/api/fee/tempImportRoomFeeApi'
import { getDict } from '@/api/community/communityApi'
import { getCommunityId } from '@/api/community/communityApi'
import { listFeeConfigs } from '@/api/fee/feeConfigManageApi'
export default {
  name: 'TempImportRoomFee',
  data() {
    return {
      dialogVisible: false,
      form: {
        communityId: '',
        feeTypeCd: '',
        objType: '',
        feeTypeCds: [],
        configId: '',
        objName: '',
        objId: '',
        amount: '',
        startTime: this.formatDate(new Date()),
        endTime: this.addMonth(new Date(), 1),
        feeConfigs: [],
        feeNameFlag: 'S'
      },
      feeTypeCds: [],
      feeConfigs: [],
      communityId: ''
    }
  },
  created() {
    this.communityId = getCommunityId()
    this.loadDictData()
  },
  methods: {
    open(room) {
      this.clearTempImportRoomFeeInfo()
      this.form.objId = room.roomId
      this.form.objName = room.roomName
      this.form.objType = room.objType
      this.dialogVisible = true
    },
    async loadDictData() {
      try {
        const data = await getDict('pay_fee_config', 'fee_type_cd')
        this.feeTypeCds = data
        this.form.feeTypeCds = data
      } catch (error) {
        console.error('获取字典数据失败:', error)
      }
    },
    async changeFeeTypeCd(feeTypeCd) {
      try {
        const res = await listFeeConfigs({
          page: 1,
          row: 500,
          communityId: this.communityId,
          feeTypeCd: feeTypeCd,
          isDefault: 'F',
          computingFormula: '4004',
          valid: '1'
        })
        this.feeConfigs = res.feeConfigs
      } catch (error) {
        console.error('获取费用配置失败:', error)
      }
    },
    toggleFeeNameFlag() {
      this.form.feeNameFlag = this.form.feeNameFlag === 'S' ? 'I' : 'S'
    },
    validateForm() {
      if (!this.form.feeTypeCd) {
        this.$message.warning(this.$t('tempImportRoomFee.feeTypeRequired'))
        return false
      }
      if (!this.form.configId && this.form.feeNameFlag === 'S') {
        this.$message.warning(this.$t('tempImportRoomFee.feeNameRequired'))
        return false
      }
      if (!this.form.objId) {
        this.$message.warning(this.$t('tempImportRoomFee.feeObjRequired'))
        return false
      }
      if (!this.form.startTime) {
        this.$message.warning(this.$t('tempImportRoomFee.startTimeRequired'))
        return false
      }
      if (!this.form.endTime) {
        this.$message.warning(this.$t('tempImportRoomFee.endTimeRequired'))
        return false
      }
      if (new Date(this.form.startTime) >= new Date(this.form.endTime)) {
        this.$message.warning(this.$t('tempImportRoomFee.endTimeMustAfterStart'))
        return false
      }
      if (!this.form.amount) {
        this.$message.warning(this.$t('tempImportRoomFee.amountRequired'))
        return false
      }
      return true
    },
    async saveTempImportFeeInfo() {
      if (!this.validateForm()) return
      
      try {
        const res = await importTempData({
          ...this.form,
          communityId: this.communityId
        })
        if (res.code === 0) {
          this.dialogVisible = false
          this.$emit('notify')
          this.$message.success(this.$t('tempImportRoomFee.createSuccess'))
        } else {
          this.$message.error(res.msg)
        }
      } catch (error) {
        console.error('请求失败:', error)
        this.$message.error(this.$t('tempImportRoomFee.createFailed'))
      }
    },
    clearTempImportRoomFeeInfo() {
      this.form = {
        communityId: this.communityId,
        feeTypeCd: '',
        feeTypeCds: this.feeTypeCds,
        configId: '',
        objName: '',
        objId: '',
        amount: '',
        startTime: this.formatDate(new Date()),
        endTime: this.addMonth(new Date(), 1),
        feeNameFlag: 'S',
        feeConfigs: []
      }
    },
    formatDate(date) {
      const year = date.getFullYear()
      const month = String(date.getMonth() + 1).padStart(2, '0')
      const day = String(date.getDate()).padStart(2, '0')
      const hours = String(date.getHours()).padStart(2, '0')
      const minutes = String(date.getMinutes()).padStart(2, '0')
      const seconds = String(date.getSeconds()).padStart(2, '0')
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
    },
    addMonth(date, months) {
      const newDate = new Date(date)
      newDate.setMonth(newDate.getMonth() + months)
      return this.formatDate(newDate)
    }
  }
}
</script>