hldy_vue/src/views/admin/orgapplyinfo/components/OrgUpContractForm.vue

342 lines
11 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.

<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"
name="OrgApplyInfoForm">
<a-row class="card-class">
<a-col :span="24" style="border-bottom: 2px solid #f7f7f7; margin-bottom: 14px;">
<SectionDivider :title="'机构信息'" />
</a-col>
<a-col :span="12">
<a-form-item label="机构所在地">
<a-textarea :autosize="{ minRows: 1 }" maxlength="50" disabled v-model:value="cityViewValue"
allow-clear></a-textarea>
<!-- {{ cityViewValue }} -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构名称" v-bind="validateInfos.comName" id="OrgApplyInfoForm-comName" name="comName">
<a-textarea :autosize="{ minRows: 1 }" maxlength="50" disabled v-model:value="formData.comName"
allow-clear></a-textarea>
<!-- {{ formData.comName }} -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构负责人" v-bind="validateInfos.orgLeader" id="OrgApplyInfoForm-orgLeader"
name="orgLeader">
<a-input v-model:value="formData.orgLeader" disabled allow-clear></a-input>
<!-- {{ formData.orgLeader }} -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="负责人电话" v-bind="validateInfos.orgLeaderPhone" id="OrgApplyInfoForm-orgLeaderPhone"
name="orgLeaderPhone">
<a-input v-model:value="formData.orgLeaderPhone" disabled allow-clear></a-input>
<!-- {{ formData.orgLeaderPhone }} -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="房屋性质" v-bind="validateInfos.orgPropertyType" id="OrgApplyInfoForm-orgPropertyType"
name="orgPropertyType">
<a-input v-model:value="formData.orgPropertyType" disabled allow-clear></a-input>
<!-- {{ formData.orgPropertyType }} -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="建筑面积(㎡)" v-bind="validateInfos.orgBuildingArea" id="OrgApplyInfoForm-orgBuildingArea"
name="orgBuildingArea">
<a-input v-model:value="formData.orgBuildingArea" disabled allow-clear></a-input>
<!-- {{ formData.orgBuildingArea }}㎡ -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构地址" v-bind="validateInfos.orgAddress" id="OrgApplyInfoForm-orgAddress"
name="orgAddress">
<a-textarea :autosize="{ minRows: 1 }" maxlength="50" disabled v-model:value="formData.orgAddress"
allow-clear></a-textarea>
<!-- {{ formData.orgAddress }} -->
</a-form-item>
</a-col>
</a-row>
<a-row v-if="formData.orgStatus == '3'" class="card-class">
<a-col :span="24" style="border-bottom: 2px solid #f7f7f7; margin-bottom: 14px;">
<SectionDivider :title="'加盟合同'" />
</a-col>
<a-col :span="12">
<a-form-item label="加盟合同" v-bind="validateInfos.contract" id="OrgApplyInfoForm-contract">
<JUpload v-model:value="formData.contract" :bizPath="upBizPrefix + '/jgxx/jg'" :maxCount="1"
accept=".pdf" :beforeUpload="checkFileType">
</JUpload>
</a-form-item>
<div style="margin-top: 15px;margin-left:20%;color:#8e8e8e;font-size:12px;">说明请上传pdf文件并且只能上传一份文件</div>
</a-col>
<a-col :span="12">
<a-form-item label="备注信息" v-bind="validateInfos.contractNote" id="OrgApplyInfoForm-contractNote"
name="contractNote">
<a-textarea :autosize="{ minRows: 3 }" maxlength="100" show-count v-model:value="formData.contractNote"
allow-clear placeholder="请填写备注信息"></a-textarea>
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { getValueType } from '/@/utils';
import { saveOrUpdate, submitContract, editCg } from '../OrgApplyInfo.api';
import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
import TencentMap from '/@/components/TencentMap/TencentMap.vue';
import JImageUpload from '/@/components/Form/src/jeecg/components/JImageUpload.vue';
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
import { queryUpBizPrefix } from '/@/api/common/api'
const cityViewValue = ref('')
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => ({}) },
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const upBizPrefix = ref('')
const formData = reactive<Record<string, any>>({
id: '',
pkId: '',
openId: '',
wechatName: '',
tel: '',
status: '',
orgStatus: '',
content: '',
createTime: '',
updateTime: '',
izEntry: '',
name: '',
sex: '',
national: '',
birthDate: '',
idCardAddress: '',
idCard: '',
issuingAuthority: '',
startTime: '',
endTime: '',
cardZmPath: '',
cardFmPath: '',
comBusinessLicense: '',
comName: '',
comRegisterAddress: '',
comCreditCode: '',
comLegalPerson: '',
orgAddress: '',
orgCoordinateLo: '',
orgCoordinateLa: '',
orgLeader: '',
orgLeaderPhone: '',
orgBuildingNumber: '',
orgPropertyType: '',
orgBuildingArea: undefined,
orgProvince: '',
orgCity: '',
orgDistrict: '',
orgProvince_dictText: '',
orgCity_dictText: '',
orgDistrict_dictText: '',
franchiseTime: null,
contract: null,
contractNote: null,
auditBy: '',
auditTime: null,
});
const tempNullVal = ref('')
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 8 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 14 } });
const confirmLoading = ref<boolean>(false);
//表单验证
const validatorRules = reactive({
status: [{ required: true, message: '请选择审核结果!' },],
contract: [{ required: true, message: '请上传加盟合同!' },],
contractNote: [{ required: true, message: '请填写备注信息!' },],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
// 表单禁用
const disabled = computed(() => {
if (props.formBpm === true) {
if (props.formData.disabled === false) {
return false;
} else {
return true;
}
}
return props.formDisabled;
});
const checkFileType = (file) => {
const isPDF = file.type === 'application/pdf' || file.name.endsWith('.pdf');
if (!isPDF) {
createMessage.error('只能上传 PDF 文件!');
return false; // 阻止上传
}
return true;
};
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
let tmpData = {};
Object.keys(formData).forEach((key) => {
if (record.hasOwnProperty(key)) {
tmpData[key] = record[key]
}
})
if (tmpData.status != '2' && tmpData.status != '3') {
tmpData.status = null
}
cityViewValue.value = record.orgProvince_dictText
+ (!!record.orgCity_dictText ? record.orgCity_dictText : '')
+ (!!record.orgDistrict_dictText ? record.orgDistrict_dictText : '')
//赋值
Object.assign(formData, tmpData);
});
}
/**
* 保存为草稿
*/
async function saveForm() {
console.log('保存为草稿')
try {
// 触发表单验证
await validate();
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
}
confirmLoading.value = true;
//时间格式化
let model = formData;
//循环数据
for (let data in model) {
//如果该数据是数组并且是字符串类型
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//如果是字符串类型的需要变成以逗号分割的字符串
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
await editCg(model, true)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
/**
* 保存并提交
*/
async function submitForm() {
try {
// 触发表单验证
await validate();
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
}
confirmLoading.value = true;
//时间格式化
let model = formData;
//循环数据
for (let data in model) {
//如果该数据是数组并且是字符串类型
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//如果是字符串类型的需要变成以逗号分割的字符串
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
model.workOrderStatus = '1'
model.orgStatus = '4'//给后端判断是否为合同上传并提交状态
await submitContract(model)
.then((res) => {
emit('ok');
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
saveForm,
submitForm,
});
onMounted(() => {
queryUpBizPrefix().then(res => {
upBizPrefix.value = res.result
})
})
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px;
}
.card-class {
padding-top: 24px;
padding-bottom: 24px;
padding-left: 14px;
padding-right: 14px;
// background-color: rgba(255, 255, 255, 0.9);
background-color: #fcfdff;
border-radius: 10px;
// box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 12px;
margin-bottom: 14px;
}
</style>