addCreditInfo.vue 7.58 KB
<template>
  <div>
    <el-dialog :title="props.title" v-model="state.openDialog" width="900px" append-to-body destroy-on-close @close="handleClose(false)">

      <el-form ref="orderFormRef" :model="state.formModel" :rules="formRules" label-position="left" label-width="130px">
        <el-row :gutter="40">
          <el-col v-for="item in state.formItemList[props.openName]" :span="item.span || 12">

            <el-form-item :label="item.label" :prop="item.prop" :rules="{required: true, message: item.label+'不能为空', trigger: ['blur']}">
              <el-select v-if="item.type === 'select'" style="width: 100%" v-model="state.formModel[item.prop]" clearable>
                <el-option v-for="dict in state[item.options]" :label="dict.dictLabel" :value="dict.id"></el-option>
              </el-select>
              <el-date-picker v-else-if="item.type === 'date'"
                v-model="state.formModel[item.prop]"
                type="date"
                value-format="YYYY-MM-DD"
                style="width: 100%;"
              >
              </el-date-picker>
              <el-input v-else-if="item.type === 'textarea'" type="textarea" :rows="4" v-model="state.formModel[item.prop]"></el-input>
              <template v-else-if="item.type === 'show'">
                {{state.formModel[item.name] ? getTypeValue(state.formModel[item.name]) : '请先选择类型'}}
                <el-input v-show="false" v-model="state.formModel[item.prop]"></el-input>
              </template>
              <template v-else-if="item.type === 'count'">
                {{getTotalValue(state.formModel[item.name1], state.formModel[item.name2])}}
                <el-input v-show="false" v-model="state.formModel[item.prop]"></el-input>
              </template>
              <el-input v-else v-model="state.formModel[item.prop]">
                <template v-if="item.unit" #append>{{item.unit}}</template>
              </el-input>
            </el-form-item>

          </el-col>
        </el-row>
      </el-form>

      <template #footer v-if="props.isShowFooter">
        <span class="dialog-footer">
          <el-button @click="handleClose(false)">取消</el-button>
          <el-button type="primary" :loading="state.isSubmit" @click="handleSubmit">确定</el-button>
        </span>
      </template>

    </el-dialog>
  </div>
</template>

<script setup lang="ts">
  import { orderInfo } from '../../store'
  import { storeToRefs } from 'pinia';
  let orderInfoAct = orderInfo()
  let { getReportOrder } = storeToRefs(orderInfoAct)

  import OrderSuccess from "./orderSuccess.vue";
  import * as api from '../../interface/api.ts'

  let orderFormRef = ref<FormInstance>()
  const emit = defineEmits(["handleClose", "handleAddInfo"]);

  let props = defineProps({
    title: {
      default: "",
      type: String
    },
    open: {
      default: false,
      type: Boolean
    },
    openName: {
      type: String,
      required: true,
      default: ""
    },
    isShowFooter: {
      default: true,
      type: Boolean
    },
    rowInfo: {
      type: Object,
    }
  })

  let formRules = reactive<FormRules>({
    remark: [
      { required: true, message: "下单备注不能为空", trigger: ["blur","change"] }
    ],
  })

  let state = reactive({
    openDialog: false,
    formModel: {},
    isSubmit: false,
    formItemList: {
      financialOpen: [
        {
          label: "年份",
          prop: "year",
          span: 24
        }, {
          label: '资产总计',
          prop: 'totAssets'
        }, {
          label: '负债总计',
          prop: 'totLiab'
        }, {
          label: '所有者权益总计',
          prop: 'totalEquity'
        }, {
          label: '营业总收入',
          prop: 'operRev'
        }, {
          label: '利润总额',
          prop: 'totProfit'
        }, {
          label: '净利润',
          prop: 'netProfit'
        },
      ],
      mortgageOpen: [
        {
          label: "名称",
          prop: "name",
        }, {
          label: "类型",
          prop: "type",
          type: 'select',
          options: "mortgageTypeList"
        }, {
          label: "账面价格",
          prop: "price",
          unit: '万元'
        }, {
          label: "评估价值",
          prop: "assessValue",
          unit: '万元'
        }, {
          label: "折扣率",
          prop: "discountRate",
          type: 'show',
          name: 'type'
        }, {
          label: "抵押物价值",
          prop: "collateraValue",
          type: "count",
          name1: 'assessValue',
          name2: 'type',
        }, {
          label: "位置",
          prop: "position",
          span: 24,
        }, {
          type:'textarea',
          label: "详情",
          prop: "details",
          span: 24
        },
      ],
      guaranteeOpen: [
        {
          label: "担保合同名称",
          prop: "name",
        }, {
          label: "担保人名称",
          prop: "peopleName",
        }, {
          label: "担保事项",
          prop: "matters",
        }, {
          label: "担保金额",
          prop: "money",
          unit: '万元'
        }, {
          label: "担保期限",
          prop: "term",
        }, {
          label: "担保责任",
          prop: "responsibility",
          type: 'select',
          options: "responsibilityList"
        }, {
          label: "生效时间",
          prop: "effectiveDate",
          type:'date',
        }, {
          label: "合同份数",
          prop: "countSize",
          unit: '份'
        }, {
          type:'textarea',
          label: "争议解决",
          prop: "disputeResolution",
          span: 24,
        }
      ]
    },
    mortgageTypeList: [{dictLabel: "住宅", dictValue: 0.7, id: 1}, {dictLabel: "写字楼、商铺", dictValue: 0.5, id: 2}, {dictLabel: "厂房", dictValue: 0.4, id: 3}, {dictLabel: "工业土地使用权", dictValue: 0.4, id: 4}, {dictLabel: "股权", dictValue: 0.3, id: 5}, {dictLabel: "车位", dictValue: 0.3, id: 6}],
    responsibilityList: [{dictLabel: "承担连带责任保证", id: "承担连带责任保证"}, {dictLabel: "承担一般责任保证", id: "承担一般责任保证"}],
    matchIndex: -1,
  })

  let handleClose = (isRefresh: boolean) => {
    emit('handleClose', props.openName, false, isRefresh)
  }

  let handleSubmit = () => {
    // state.orderSuccessOpen = true
    // handleClose(false)
    orderFormRef.value.validate((valid: boolean) => {
      if (valid) {
        emit('handleAddInfo', state.formModel, props.openName, state.matchIndex)
        emit('handleClose', props.openName, false, false)
      }
    })
  }

  let getTypeValue = (id: number) => {
    let dictValue = 0
    state.mortgageTypeList.forEach(item=> {
      if (item.id === id) {
        dictValue = item.dictValue
        state.formModel['discountRate'] = item.dictValue
      }
    })
    return dictValue
  }

  let getTotalValue = (value1: any , value2: any) => {
    let result = ""
    if (value1 && getTypeValue(value2)) {
      let totalValue = (value1 *  getTypeValue(value2)).toFixed(2)
      result = `${value1}*${getTypeValue(value2)}=${totalValue}万元`
      state.formModel['collateraValue'] = totalValue
    } else {
      result = "请输入评估价值和选择类型"
    }
    return result
  }

  watchEffect(()=> {
    state.openDialog = props.open
    state.formModel = {}
    if (state.openDialog) {
      if (JSON.stringify(props.rowInfo) === '{}') {
        state.matchIndex = -1
      } else {
        state.matchIndex = props.rowInfo.index
      }
      Object.assign(state.formModel, props.rowInfo)
    }
  })
</script>

<style scoped>

</style>