Files
dvcp_v2_webapp/project/xumu/AppLoanApply/add.vue
aixianling f108a61293 feat(loan): 适配贷款业务流程
- 修改投保单号为贷款合同号
- 更新相关 API 路径
-调整表格列和搜索条件以适应贷款业务
- 优化耳标号筛选功能
- 更新字典加载项
2025-01-03 14:52:43 +08:00

187 lines
7.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script>
import {mapState} from "vuex"
import AiEartagPicker from "@project/xumu/components/AiEartagPicker.vue";
const columns = [
{label: "序号", type: "index"},
{label: "生物芯片耳标号", prop: "biochipEarNumber"},
{label: "类别", prop: "category", dict: "category"},
{label: "品种", prop: "variety", dict: "variety"},
]
export default {
name: "loanAdd",
components: {AiEartagPicker},
props: {
instance: Function,
permissions: Function,
dict: Object
},
data() {
return {
detail: {detailList: [], loanAmount: 0},
columns,
bankList: [],
filterText: ""
}
},
computed: {
...mapState(["user"]),
userinfo: v => v.user.info || {},
pageTitle: v => {
const appName = v.$parent.menuName || v.$parent.$options.label
return v.$route.query.id ? v.isEdit ? `编辑${appName}` : `${appName}详情` : `新增${appName}`
},
isAdd: v => !v.$route.query.id,
isEdit: v => v.$route.query.edit == 1,
formImages: v => [
{label: "身份证(正面)", prop: "frontCard", rules: {required: v.isAdd || v.isEdit, message: '请上传 身份证(正面)'}},
{label: "身份证(反面)", prop: "reverseCard", rules: {required: v.isAdd || v.isEdit, message: '请上传 身份证(反面)'}},
{label: "营业执照", prop: "businessPic", rules: {required: v.isAdd || v.isEdit, message: '请上传 营业执照'}},
{label: "畜禽经营许可证", prop: "breedPic", rules: {required: v.isAdd || v.isEdit, message: '请上传 畜禽经营许可证'}},
{label: "动物防疫条件许可证", prop: "prevention", rules: {required: v.isAdd || v.isEdit, message: '请上传 动物防疫条件许可证'}},
],
selectedEartags: v => v.detail.detailList?.length || 0,
tableData: v => v.detail.detailList?.filter(e => e.biochipEarNumber.indexOf(v.filterText) > -1) || [],
},
methods: {
back(params = {}) {
this.$router.push(params)
},
getDetail() {
const {id} = this.$route.query
return id && this.instance.post("/api/loan/apply/getInfo", null, {params: {id}}).then(res => {
if (res?.data) {
const detail = res.data
detail.detailList = detail.detailList || []
let {farmPicture: picture = "{}"} = detail
picture = JSON.parse(picture)
return this.detail = {...detail, ...picture}
}
})
},
getBanks() {
this.instance.post("/api/loan/apply/getBank").then(res => {
if (res?.data) {
this.bankList = res.data
}
})
},
getProducts(id) {
const item = this.bankList.find(e => e.id == id)
return item?.children || []
},
submit(submitType) {
this.$refs.detail.validate().then(() => {
const farmPicture = {}
this.formImages.forEach(e => {
const {prop} = e
const val = this.detail[prop]
if (val) {
farmPicture[prop] = val
}
})
this.detail.farmPicture = JSON.stringify(farmPicture)
this.instance.post("/api/loan/apply/addOrEdit", {...this.detail, submitType}).then(res => {
if (res?.code == '0') {
this.$message.success("提交成功!")
this.back()
}
})
})
}
},
created() {
this.getBanks()
this.getDetail()
}
}
</script>
<template>
<ai-page :title="pageTitle" class="loanAdd" showBack content-string="blank">
<el-form size="small" label-width="120px" :model="detail" ref="detail">
<ai-card title="基础信息">
<div class="grid">
<el-form-item label="养殖场" prop="farmId" :rules="{required: isAdd||isEdit,message:'请选择 养殖场'}">
<ai-select v-if="isAdd||isEdit" v-model="detail.farmId" :instance="instance" :action="`/api/siteUser/querySiteByUserId?userId=${userinfo.id}`" :prop="{label:'name'}"/>
<b v-else v-text="detail.farmName"/>
</el-form-item>
<el-form-item label="贷款银行" prop="bankId" :rules="{required: isAdd||isEdit,message:'请选择 贷款银行'}">
<ai-select v-if="isAdd||isEdit" v-model="detail.bankId" :select-list="bankList" :prop="{label:'name'}"/>
<b v-else v-text="detail.bankName"/>
</el-form-item>
<el-form-item label="贷款产品" prop="productType" :rules="{required: isAdd||isEdit,message:'请选择 贷款产品'}">
<ai-select v-if="isAdd||isEdit" v-model="detail.productType"
:select-list="getProducts(detail.bankId)" :prop="{label:'name',value:'productType'}"/>
<b v-else v-text="dict.getLabel('loanProduct',detail.productType)"/>
</el-form-item>
<el-form-item label="预期贷款额(万)" prop="loanAmount" :rules="{required: isAdd||isEdit,message:'请输入 预期贷款额'}">
<ai-input v-model.number="detail.loanAmount" :edit="isAdd||isEdit"/>
</el-form-item>
<el-form-item label="联系人" prop="contacts" :rules="{required: isAdd||isEdit,message:'请输入 联系人'}">
<ai-input v-model="detail.contacts" :edit="isAdd||isEdit"/>
</el-form-item>
<el-form-item label="联系电话" prop="phone" :rules="{required: isAdd||isEdit,message:'请输入 联系电话'}">
<ai-input v-model="detail.phone" :edit="isAdd||isEdit"/>
</el-form-item>
</div>
</ai-card>
<ai-card title="质押标的">
<template #right>
<ai-input placeholder="请输入/扫描耳标号" v-model="filterText" class="shrink"/>
<ai-eartag-picker @select="v=>detail.detailList=v" :instance="instance" v-if="isAdd||isEdit"
:action="`/api/insurance/apply/getEarNumberList?farmId=${detail.farmId}`">
<el-button type="text">选择</el-button>
</ai-eartag-picker>
</template>
<ai-highlight class="mar-b8 font-14" :content="`拟抵押标的选择 @v 只`" color="red" :value="selectedEartags"/>
<ai-table :tableData="tableData" :colConfigs="columns" :isShowPagination="!1" hideOptions/>
</ai-card>
<ai-card title="证件信息">
<div v-if="isAdd||isEdit" class="font-12 color-888">只能上传JPG/PNG文件且不超过2M</div>
<div class="grid c-5 el-form--label-top">
<el-form-item v-for="(img,i) in formImages" :key="i" v-bind="img">
<ai-uploader v-if="isAdd||isEdit" v-model="detail[img.prop]" :instance="instance" :limit="1" value-is-url/>
<el-image :src="detail[img.prop]" :preview-src-list="[detail[img.prop]]" v-else/>
</el-form-item>
</div>
</ai-card>
<ai-card title="审核信息" v-if="!(isAdd||isEdit)">
<el-form-item label="审核状态">{{ dict.getLabel('auditStatus', detail.auditStatus) }}</el-form-item>
<el-form-item label="审核时间">{{ detail.auditTime }}</el-form-item>
<el-form-item label="审核人">{{ detail.auditName }}</el-form-item>
<el-form-item label="贷款合同号">{{ detail.contractNo || "-" }}</el-form-item>
<el-form-item label="贷款资料">
<el-image :src="detail.picture" :preview-src-list="[detail.picture]"/>
</el-form-item>
<el-form-item label="说明">{{ detail.remarks }}</el-form-item>
</ai-card>
</el-form>
<div slot="footer">
<template v-if="isAdd||isEdit">
<el-button type="primary" @click="submit(1)">保存草稿</el-button>
<el-button type="primary" @click="submit(2)">保存并提交</el-button>
</template>
<el-button @click="back">返回</el-button>
</div>
</ai-page>
</template>
<style scoped lang="scss">
.loanAdd {
:deep(.el-form--label-top) {
.el-form-item__label {
width: 100% !important;
}
.el-form-item__content {
margin-left: unset !important;
}
}
.shrink {
flex-shrink: 0;
}
}
</style>