mirror of
https://gitee.com/java110/MicroCommunityWeb.git
synced 2026-02-23 21:36:37 +08:00
201 lines
6.7 KiB
Vue
201 lines
6.7 KiB
Vue
<template>
|
|
<el-dialog :title="$t('meterWater.meterReadingImport')" :visible.sync="dialogVisible" width="40%"
|
|
@close="handleClose">
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right" class="text-left">
|
|
<el-form-item :label="$t('meterWater.feeType')" prop="feeTypeCd">
|
|
<el-select v-model="form.feeTypeCd" :placeholder="$t('meterWater.selectFeeType')" style="width: 100%"
|
|
@change="handleFeeTypeChange">
|
|
<el-option v-for="item in feeTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item :label="$t('meterWater.feeItem')" prop="configId">
|
|
<el-select v-model="form.configId" :placeholder="$t('meterWater.selectFeeItem')" style="width: 100%">
|
|
<el-option v-for="item in feeConfigs" :key="item.configId" :label="item.feeName" :value="item.configId" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item :label="$t('meterWater.meterType')" prop="meterType">
|
|
<el-select v-model="form.meterType" :placeholder="$t('meterWater.selectMeterType')" style="width: 100%">
|
|
<el-option v-for="item in meterTypes" :key="item.typeId" :label="item.typeName" :value="item.typeId" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item :label="$t('meterWater.selectFile')" prop="file">
|
|
<el-upload ref="upload" :auto-upload="false" :limit="1" :on-change="handleFileChange" :file-list="fileList"
|
|
accept=".xls,.xlsx" action="">
|
|
<el-button size="small" type="primary">{{ $t('meterWater.selectFile') }}</el-button>
|
|
<div slot="tip" class="el-upload__tip">
|
|
{{ fileList.length > 0 ? fileList[0].name : $t('meterWater.fileRequired') }}
|
|
</div>
|
|
</el-upload>
|
|
</el-form-item>
|
|
|
|
<el-form-item :label="$t('meterWater.downloadTemplate')">
|
|
<div>
|
|
{{ $t('meterWater.downloadTip') }}
|
|
<el-link type="primary" @click="handleDownloadTemplate">
|
|
{{ $t('meterWater.importTemplate') }}
|
|
</el-link>
|
|
{{ $t('meterWater.prepareData') }}
|
|
</div>
|
|
</el-form-item>
|
|
</el-form>
|
|
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
|
<el-button type="primary" @click="handleImport">{{ $t('common.import') }}</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
import { importMeterWaterData, exportMeterWaterTemplate } from '@/api/fee/meterWaterManageApi'
|
|
import { listFeeConfigs, listMeterTypes } from '@/api/fee/meterWaterManageApi'
|
|
import { getDict } from '@/api/community/communityApi'
|
|
import { getCommunityId } from '@/api/community/communityApi'
|
|
|
|
export default {
|
|
name: 'ImportMeterWaterFee',
|
|
data() {
|
|
return {
|
|
dialogVisible: false,
|
|
form: {
|
|
feeTypeCd: '',
|
|
configId: '',
|
|
meterType: '',
|
|
file: null,
|
|
communityId: ''
|
|
},
|
|
rules: {
|
|
feeTypeCd: [
|
|
{ required: true, message: this.$t('meterWater.feeTypeRequired'), trigger: 'blur' }
|
|
],
|
|
configId: [
|
|
{ required: true, message: this.$t('meterWater.feeItemRequired'), trigger: 'blur' }
|
|
],
|
|
meterType: [
|
|
{ required: true, message: this.$t('meterWater.meterTypeRequired'), trigger: 'blur' }
|
|
],
|
|
file: [
|
|
{ required: true, message: this.$t('meterWater.fileRequired'), trigger: 'blur' }
|
|
]
|
|
},
|
|
feeTypeOptions: [],
|
|
feeConfigs: [],
|
|
meterTypes: [],
|
|
fileList: []
|
|
}
|
|
},
|
|
created() {
|
|
this.form.communityId = getCommunityId()
|
|
this.loadFeeTypes()
|
|
this.loadMeterTypes()
|
|
},
|
|
methods: {
|
|
open() {
|
|
this.dialogVisible = true
|
|
},
|
|
handleClose() {
|
|
this.$refs.form.resetFields()
|
|
this.fileList = []
|
|
},
|
|
async loadFeeTypes() {
|
|
try {
|
|
const data = await getDict('pay_fee_config', 'fee_type_cd')
|
|
this.feeTypeOptions = data.map(item => ({
|
|
value: item.statusCd,
|
|
label: item.name
|
|
}))
|
|
} catch (error) {
|
|
console.error('Failed to load fee types:', error)
|
|
}
|
|
},
|
|
async loadMeterTypes() {
|
|
try {
|
|
const { data } = await listMeterTypes({
|
|
communityId: this.form.communityId,
|
|
page: 1,
|
|
row: 50
|
|
})
|
|
this.meterTypes = data
|
|
} catch (error) {
|
|
console.error('Failed to load meter types:', error)
|
|
}
|
|
},
|
|
async handleFeeTypeChange(feeTypeCd) {
|
|
try {
|
|
const { data } = await listFeeConfigs({
|
|
communityId: this.form.communityId,
|
|
feeTypeCd,
|
|
isDefault: 'F',
|
|
valid: '1',
|
|
page: 1,
|
|
row: 20
|
|
})
|
|
this.feeConfigs = data
|
|
this.form.configId = ''
|
|
} catch (error) {
|
|
console.error('Failed to load fee configs:', error)
|
|
}
|
|
},
|
|
handleFileChange(file) {
|
|
this.form.file = file.raw
|
|
this.fileList = [file]
|
|
},
|
|
async handleDownloadTemplate() {
|
|
if (!this.form.meterType) {
|
|
this.$message.warning(this.$t('meterWater.selectMeterTypeFirst'))
|
|
return
|
|
}
|
|
|
|
try {
|
|
await exportMeterWaterTemplate({
|
|
communityId: this.form.communityId,
|
|
meterType: this.form.meterType,
|
|
pagePath:'exportMeterWater'
|
|
})
|
|
|
|
this.$message.success(this.$t('meterWater.downloadStarted'))
|
|
this.dialogVisible = false
|
|
this.$router.push('/pages/property/downloadTempFile?tab=下载中心')
|
|
|
|
} catch (error) {
|
|
console.error('Failed to download template:', error)
|
|
this.$message.error(error.message || this.$t('common.downloadFailed'))
|
|
}
|
|
},
|
|
async handleImport() {
|
|
this.$refs.form.validate(async valid => {
|
|
if (!valid) return
|
|
|
|
if (!this.form.file) {
|
|
this.$message.warning(this.$t('meterWater.fileRequired'))
|
|
return
|
|
}
|
|
|
|
const formData = new FormData()
|
|
formData.append('uploadFile', this.form.file)
|
|
formData.append('communityId', this.form.communityId)
|
|
formData.append('feeTypeCd', this.form.feeTypeCd)
|
|
formData.append('configId', this.form.configId)
|
|
formData.append('meterType', this.form.meterType)
|
|
formData.append('importAdapt', 'importMeterWaterFee')
|
|
|
|
try {
|
|
const res = await importMeterWaterData(formData)
|
|
if( res.code != 0){
|
|
this.$message.error(res.msg)
|
|
return ;
|
|
}
|
|
this.$message.success(this.$t('meterWater.importSuccess'))
|
|
this.dialogVisible = false
|
|
this.$emit('success', res.logId)
|
|
} catch (error) {
|
|
this.$message.error(error)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script> |