Merge branch 'develop' of https://git.openserver.cn:8089/XinJiang/TheProjectOfFour/kelamayireligongsi/plrl/vue into develop
This commit is contained in:
commit
3985bf343f
|
@ -0,0 +1,111 @@
|
|||
import { dict } from '@fast-crud/fast-crud';
|
||||
|
||||
import { DICT_TYPE, getDictObj, getDictOptions } from '#/utils/dict';
|
||||
import type { delay } from 'lodash-es';
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
export function getFormSchema(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {
|
||||
currencyTypeId: 'CNY',
|
||||
},
|
||||
columns: {
|
||||
ctrBaseId: {
|
||||
title: '合同编号',
|
||||
key: 'ctrBaseId',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入' }],
|
||||
},
|
||||
ctrName: {
|
||||
title: '合同名称',
|
||||
key: 'ctrName',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入合同名称' }],
|
||||
},
|
||||
breachReason: {
|
||||
title: '违约方',
|
||||
key: 'breachReason',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '我方违约', value: 0 },
|
||||
{ label: '对方违约', value: 1 },
|
||||
{ label: '双方违约', value: 2 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
lidatedDamages: {
|
||||
title: '违约金',
|
||||
key: 'lidatedDamages',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
breachReasonDesc: {
|
||||
title: '违约情况简述',
|
||||
key: 'breachReasonDesc',
|
||||
col: { span: 12 },
|
||||
|
||||
component: {
|
||||
name: 'a-textarea',
|
||||
vModel: 'value',
|
||||
autosize: { minRows: 4, maxRows: 6 },
|
||||
},
|
||||
},
|
||||
proposal: {
|
||||
title: '处理意见',
|
||||
key: 'proposal',
|
||||
col: { span: 12 },
|
||||
|
||||
component: {
|
||||
name: 'a-textarea',
|
||||
vModel: 'value',
|
||||
autosize: { minRows: 4, maxRows: 6 },
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export function getFormSchemaByCertification(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {},
|
||||
columns: {
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function getFormSchemaByShareholder(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
columns: {
|
||||
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
|
@ -1,3 +1,288 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import { Page } from '@vben/common-ui';
|
||||
import { MdiUpload } from '@vben/icons';
|
||||
import { useUserStore } from '@vben/stores';
|
||||
|
||||
import {
|
||||
message,
|
||||
Modal,
|
||||
type UploadChangeParam,
|
||||
type UploadFile,
|
||||
} from 'ant-design-vue';
|
||||
|
||||
import Apis from '#/api';
|
||||
import { FileUploader } from '#/utils/file';
|
||||
|
||||
import {
|
||||
getFormSchema,
|
||||
getFormSchemaByCertification,
|
||||
getFormSchemaByShareholder,
|
||||
} from './curd';
|
||||
|
||||
const fileUploader = new FileUploader({});
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const id = route.params.id;
|
||||
const pageRef = ref();
|
||||
|
||||
const formRef = ref();
|
||||
const formRefByBank = ref();
|
||||
const formRefByCertification = ref();
|
||||
const formRefByShareholder = ref();
|
||||
|
||||
const isLoading = ref(false);
|
||||
|
||||
const formBinding = ref({
|
||||
...getFormSchema(),
|
||||
});
|
||||
|
||||
|
||||
|
||||
const formBindingByCertification = ref({
|
||||
...getFormSchemaByCertification(),
|
||||
});
|
||||
|
||||
const formBindingByShareholder = ref({
|
||||
...getFormSchemaByShareholder(),
|
||||
});
|
||||
|
||||
const collapses = ['1', '2', '3', '4', '5'];
|
||||
const collapseActiveKey = ref(collapses);
|
||||
function areArraysEqualUnordered(arr1, arr2) {
|
||||
if (arr1.length !== arr2.length) return false;
|
||||
const sortedArr1 = [...arr1].sort();
|
||||
const sortedArr2 = [...arr2].sort();
|
||||
return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);
|
||||
}
|
||||
const isFold = computed(() => {
|
||||
return !areArraysEqualUnordered(collapses, collapseActiveKey.value);
|
||||
});
|
||||
function handleFold() {
|
||||
collapseActiveKey.value = isFold.value ? collapses : [];
|
||||
}
|
||||
|
||||
function handleBack() {
|
||||
Modal.confirm({
|
||||
title: '提示',
|
||||
content: `是否确认返回上一页面?`,
|
||||
onOk: async () => {
|
||||
back();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面返回并关闭tab
|
||||
*/
|
||||
function back() {
|
||||
router.replace('/contract/company/list');
|
||||
}
|
||||
|
||||
const fileList = ref<UploadFile[]>([]);
|
||||
const handleChange = (info: UploadChangeParam) => {
|
||||
fileList.value = info.fileList.length > 0 ? info.fileList : [];
|
||||
};
|
||||
|
||||
const handleChangeByCertification = (info: UploadChangeParam) => {
|
||||
formRefByCertification.value.setFormData({
|
||||
fileList: info.fileList.length > 0 ? info.fileList : [],
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function loadDataByContractTypeData() {}
|
||||
|
||||
async function handleSave() {
|
||||
isLoading.value = true;
|
||||
|
||||
try {
|
||||
const form = formRef.value.form;
|
||||
console.log(formRef.value);
|
||||
|
||||
try {
|
||||
await formRef.value.submit();
|
||||
} catch {
|
||||
message.error('请完成必填项的填写');
|
||||
return;
|
||||
}
|
||||
|
||||
const userStore = useUserStore();
|
||||
|
||||
let newForm:any = {};
|
||||
|
||||
// 会议附件
|
||||
const fileList = formRef.value.form.fileList;
|
||||
let files: any = [];
|
||||
if (fileList && fileList.length > 0) {
|
||||
files = await fileUploader.upload(fileList, { source: 'ht' });
|
||||
}
|
||||
console.log(files);
|
||||
if (files) {
|
||||
newForm.fileUuid = (files.map((item) => item.fileUuid) || []).join(',');
|
||||
}
|
||||
|
||||
newForm = Object.assign({}, formRef.value.form, newForm);
|
||||
|
||||
delete newForm.fileList;
|
||||
|
||||
// // 获取字典数据的name值
|
||||
// for (const item of contractTypeData.value) {
|
||||
// if (item.contrLevelId == newForm.ctrType) {
|
||||
// newForm.ctrTypeName = item.contrLevelName;
|
||||
// }
|
||||
// if (item.contrLevelId == newForm.ctrTwoType) {
|
||||
// newForm.ctrTwoTypeName = item.contrLevelName;
|
||||
// }
|
||||
// }
|
||||
|
||||
// newForm.fundDitchName = getDictObj(
|
||||
// DICT_TYPE.contract_funding_source,
|
||||
// newForm.fundDitch,
|
||||
// )?.label;
|
||||
|
||||
// newForm.priceTypeName = getDictObj(
|
||||
// DICT_TYPE.contract_currency_unit,
|
||||
// newForm.priceType,
|
||||
// )?.label;
|
||||
|
||||
// newForm.contractMoney = newForm.budgetSum;
|
||||
// newForm.currentContStepId = 0;
|
||||
|
||||
console.log(newForm);
|
||||
|
||||
await Apis.proProviderInfo.post_save({ data: newForm });
|
||||
} catch (error) {
|
||||
message.error('提交失败,请稍候再试');
|
||||
console.log(error);
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
isLoading.value = true;
|
||||
console.log(id);
|
||||
|
||||
// let formSchema = getFormSchema()
|
||||
|
||||
// formBinding.value = formSchema
|
||||
|
||||
try {
|
||||
if (id) {
|
||||
// const data = await Apis.proProviderInfo.get_Query({
|
||||
// params: { guid: id },
|
||||
// });
|
||||
// console.log(data);
|
||||
|
||||
// currData.value = data;
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData(data);
|
||||
// });
|
||||
|
||||
// if (data.fileUuid) {
|
||||
// const files = await fileUploader.select(data.fileUuid);
|
||||
// console.log(files);
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData({
|
||||
// fileList: files,
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
||||
// loadDataByContractTypeData();
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
Modal.error({
|
||||
content: '当前合同信息不存在',
|
||||
onOk() {
|
||||
back();
|
||||
},
|
||||
title: '提示',
|
||||
});
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>break</div>
|
||||
<Page ref="pageRef" content-class="h-full flex flex-col">
|
||||
<a-affix
|
||||
:offset-top="0"
|
||||
:style="{ zIndex: 50 }"
|
||||
:target="() => pageRef.bodyRef"
|
||||
>
|
||||
<div class="flex w-full flex-row bg-white pl-1 pt-1">
|
||||
<a-space class="flex-1">
|
||||
|
||||
</a-space>
|
||||
|
||||
<vben-button variant="secondary" @click="handleFold()">
|
||||
一键{{ isFold ? '展开' : '收起' }}
|
||||
</vben-button>
|
||||
</div>
|
||||
</a-affix>
|
||||
|
||||
<a-spin :spinning="isLoading">
|
||||
<div class="mx-auto overflow-auto py-2">
|
||||
<a-collapse v-model:active-key="collapseActiveKey" :bordered="false">
|
||||
<a-collapse-panel key="1" class="w-full" header="违约情况申报">
|
||||
<fs-form ref="formRef" class="w-full" v-bind="formBinding" />
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="3" class="w-full" header="已上传附件">
|
||||
<fs-form
|
||||
ref="formRefByCertification"
|
||||
class="w-full"
|
||||
v-bind="formBindingByCertification"
|
||||
>
|
||||
<template #form_fileList="scope">
|
||||
<a-upload
|
||||
v-model:file-list="scope.form.fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf"
|
||||
name="file"
|
||||
@change="handleChangeByCertification"
|
||||
>
|
||||
<vben-button variant="secondary">
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</vben-button>
|
||||
</a-upload>
|
||||
</template>
|
||||
</fs-form>
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="5" class="w-full" header="文件名">
|
||||
<a-form :label-col="{ style: { width: '120px' } }">
|
||||
<a-form-item label="附件上传" name="fileList">
|
||||
<a-upload
|
||||
v-model:file-list="fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf,.ppt,.pptx"
|
||||
name="file"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-button>
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</a-spin>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
|
|
@ -0,0 +1,263 @@
|
|||
import { dict } from '@fast-crud/fast-crud';
|
||||
|
||||
import { DICT_TYPE, getDictObj, getDictOptions } from '#/utils/dict';
|
||||
import type { delay } from 'lodash-es';
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
export function getFormSchema(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {
|
||||
currencyTypeId: 'CNY',
|
||||
},
|
||||
columns: {
|
||||
ctrBaseId: {
|
||||
title: '合同编号',
|
||||
key: 'ctrBaseId',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入' }],
|
||||
},
|
||||
ctrName: {
|
||||
title: '合同名称',
|
||||
key: 'ctrName',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入合同名称' }],
|
||||
},
|
||||
|
||||
changeReason: {
|
||||
title: '变更原因',
|
||||
key: 'changeReason',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '我方', value: 0 },
|
||||
{ label: '对方', value: 1 },
|
||||
{ label: '双方', value: 2 },
|
||||
{ label: '其它', value: 3 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
performDescribe: {
|
||||
title: '变更原因说明',
|
||||
key: 'performDescribe',
|
||||
col: { span: 12 },
|
||||
|
||||
component: {
|
||||
name: 'a-textarea',
|
||||
vModel: 'value',
|
||||
autosize: { minRows: 4, maxRows: 6 },
|
||||
},
|
||||
},
|
||||
changeMatters: {
|
||||
title: '变更事项',
|
||||
key: 'changeMatters',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'fs-dict-checkbox',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '合同名称', value: 0 },
|
||||
{ label: '标的金额', value: 1 },
|
||||
{ label: '履行期限', value: 2 },
|
||||
{ label: '合同相对人', value: 3 },
|
||||
{ label: '纠纷解决方式', value: 4 },
|
||||
{ label: '其它', value: 5 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
changeCtrName: {
|
||||
title: '合同名称变更为',
|
||||
key: 'changeCtrName',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
priObjectSum: {
|
||||
title: '原标的金额',
|
||||
key: 'priObjectSum',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
objectsSum: {
|
||||
title: '累变更后标的金额',
|
||||
key: 'objectsSum',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
oldperformtime: {
|
||||
title: '原履行时间',
|
||||
key: 'oldperformtime',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
performStartDate: {
|
||||
title: '变更后履行时间',
|
||||
key: 'performStartDate',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
providerChange: {
|
||||
title: '合同相对人变更',
|
||||
key: 'providerChange',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '名称变更', value: 0 },
|
||||
{ label: '法人变更', value: 1 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
priProviderName: {
|
||||
title: '原合同相对人',
|
||||
key: 'priProviderName',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
providerName: {
|
||||
title: '变更为',
|
||||
key: 'providerName',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
juridicalPerson: {
|
||||
title: '原供应商法人',
|
||||
key: 'juridicalPerson',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
oldsuppliesotherpersonchange: {
|
||||
title: '变更后供应商法人',
|
||||
key: 'oldsuppliesotherpersonchange',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
isDisputeMethod: {
|
||||
title: '解决纠纷方式',
|
||||
key: 'isDisputeMethod',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
disputeMethod: {
|
||||
title: '变更为',
|
||||
key: 'disputeMethod',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '仲裁', value: 0 },
|
||||
{ label: '诉讼', value: 1 },
|
||||
{ label: '其它', value: 2 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
other: {
|
||||
title: '其他',
|
||||
key: 'other',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'a-textarea',
|
||||
vModel: 'value',
|
||||
autosize: { minRows: 4, maxRows: 6 },
|
||||
},
|
||||
},
|
||||
//需要更换对应的组件
|
||||
fileUuid: {
|
||||
title: '附件',
|
||||
key: 'fileUuid',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export function getFormSchemaByCertification(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {},
|
||||
columns: {
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function getFormSchemaByShareholder(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
columns: {
|
||||
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
|
@ -1,3 +1,288 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import { Page } from '@vben/common-ui';
|
||||
import { MdiUpload } from '@vben/icons';
|
||||
import { useUserStore } from '@vben/stores';
|
||||
|
||||
import {
|
||||
message,
|
||||
Modal,
|
||||
type UploadChangeParam,
|
||||
type UploadFile,
|
||||
} from 'ant-design-vue';
|
||||
|
||||
import Apis from '#/api';
|
||||
import { FileUploader } from '#/utils/file';
|
||||
|
||||
import {
|
||||
getFormSchema,
|
||||
getFormSchemaByCertification,
|
||||
getFormSchemaByShareholder,
|
||||
} from './curd';
|
||||
|
||||
const fileUploader = new FileUploader({});
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const id = route.params.id;
|
||||
const pageRef = ref();
|
||||
|
||||
const formRef = ref();
|
||||
const formRefByBank = ref();
|
||||
const formRefByCertification = ref();
|
||||
const formRefByShareholder = ref();
|
||||
|
||||
const isLoading = ref(false);
|
||||
|
||||
const formBinding = ref({
|
||||
...getFormSchema(),
|
||||
});
|
||||
|
||||
|
||||
|
||||
const formBindingByCertification = ref({
|
||||
...getFormSchemaByCertification(),
|
||||
});
|
||||
|
||||
const formBindingByShareholder = ref({
|
||||
...getFormSchemaByShareholder(),
|
||||
});
|
||||
|
||||
const collapses = ['1', '2', '3', '4', '5'];
|
||||
const collapseActiveKey = ref(collapses);
|
||||
function areArraysEqualUnordered(arr1, arr2) {
|
||||
if (arr1.length !== arr2.length) return false;
|
||||
const sortedArr1 = [...arr1].sort();
|
||||
const sortedArr2 = [...arr2].sort();
|
||||
return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);
|
||||
}
|
||||
const isFold = computed(() => {
|
||||
return !areArraysEqualUnordered(collapses, collapseActiveKey.value);
|
||||
});
|
||||
function handleFold() {
|
||||
collapseActiveKey.value = isFold.value ? collapses : [];
|
||||
}
|
||||
|
||||
function handleBack() {
|
||||
Modal.confirm({
|
||||
title: '提示',
|
||||
content: `是否确认返回上一页面?`,
|
||||
onOk: async () => {
|
||||
back();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面返回并关闭tab
|
||||
*/
|
||||
function back() {
|
||||
router.replace('/contract/company/list');
|
||||
}
|
||||
|
||||
const fileList = ref<UploadFile[]>([]);
|
||||
const handleChange = (info: UploadChangeParam) => {
|
||||
fileList.value = info.fileList.length > 0 ? info.fileList : [];
|
||||
};
|
||||
|
||||
const handleChangeByCertification = (info: UploadChangeParam) => {
|
||||
formRefByCertification.value.setFormData({
|
||||
fileList: info.fileList.length > 0 ? info.fileList : [],
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function loadDataByContractTypeData() {}
|
||||
|
||||
async function handleSave() {
|
||||
isLoading.value = true;
|
||||
|
||||
try {
|
||||
const form = formRef.value.form;
|
||||
console.log(formRef.value);
|
||||
|
||||
try {
|
||||
await formRef.value.submit();
|
||||
} catch {
|
||||
message.error('请完成必填项的填写');
|
||||
return;
|
||||
}
|
||||
|
||||
const userStore = useUserStore();
|
||||
|
||||
let newForm:any = {};
|
||||
|
||||
// 会议附件
|
||||
const fileList = formRef.value.form.fileList;
|
||||
let files: any = [];
|
||||
if (fileList && fileList.length > 0) {
|
||||
files = await fileUploader.upload(fileList, { source: 'ht' });
|
||||
}
|
||||
console.log(files);
|
||||
if (files) {
|
||||
newForm.fileUuid = (files.map((item) => item.fileUuid) || []).join(',');
|
||||
}
|
||||
|
||||
newForm = Object.assign({}, formRef.value.form, newForm);
|
||||
|
||||
delete newForm.fileList;
|
||||
|
||||
// // 获取字典数据的name值
|
||||
// for (const item of contractTypeData.value) {
|
||||
// if (item.contrLevelId == newForm.ctrType) {
|
||||
// newForm.ctrTypeName = item.contrLevelName;
|
||||
// }
|
||||
// if (item.contrLevelId == newForm.ctrTwoType) {
|
||||
// newForm.ctrTwoTypeName = item.contrLevelName;
|
||||
// }
|
||||
// }
|
||||
|
||||
// newForm.fundDitchName = getDictObj(
|
||||
// DICT_TYPE.contract_funding_source,
|
||||
// newForm.fundDitch,
|
||||
// )?.label;
|
||||
|
||||
// newForm.priceTypeName = getDictObj(
|
||||
// DICT_TYPE.contract_currency_unit,
|
||||
// newForm.priceType,
|
||||
// )?.label;
|
||||
|
||||
// newForm.contractMoney = newForm.budgetSum;
|
||||
// newForm.currentContStepId = 0;
|
||||
|
||||
console.log(newForm);
|
||||
|
||||
await Apis.proProviderInfo.post_save({ data: newForm });
|
||||
} catch (error) {
|
||||
message.error('提交失败,请稍候再试');
|
||||
console.log(error);
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
isLoading.value = true;
|
||||
console.log(id);
|
||||
|
||||
// let formSchema = getFormSchema()
|
||||
|
||||
// formBinding.value = formSchema
|
||||
|
||||
try {
|
||||
if (id) {
|
||||
// const data = await Apis.proProviderInfo.get_Query({
|
||||
// params: { guid: id },
|
||||
// });
|
||||
// console.log(data);
|
||||
|
||||
// currData.value = data;
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData(data);
|
||||
// });
|
||||
|
||||
// if (data.fileUuid) {
|
||||
// const files = await fileUploader.select(data.fileUuid);
|
||||
// console.log(files);
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData({
|
||||
// fileList: files,
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
||||
// loadDataByContractTypeData();
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
Modal.error({
|
||||
content: '当前合同信息不存在',
|
||||
onOk() {
|
||||
back();
|
||||
},
|
||||
title: '提示',
|
||||
});
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>change</div>
|
||||
<Page ref="pageRef" content-class="h-full flex flex-col">
|
||||
<a-affix
|
||||
:offset-top="0"
|
||||
:style="{ zIndex: 50 }"
|
||||
:target="() => pageRef.bodyRef"
|
||||
>
|
||||
<div class="flex w-full flex-row bg-white pl-1 pt-1">
|
||||
<a-space class="flex-1">
|
||||
|
||||
</a-space>
|
||||
|
||||
<vben-button variant="secondary" @click="handleFold()">
|
||||
一键{{ isFold ? '展开' : '收起' }}
|
||||
</vben-button>
|
||||
</div>
|
||||
</a-affix>
|
||||
|
||||
<a-spin :spinning="isLoading">
|
||||
<div class="mx-auto overflow-auto py-2">
|
||||
<a-collapse v-model:active-key="collapseActiveKey" :bordered="false">
|
||||
<a-collapse-panel key="1" class="w-full" header="合同变更申报">
|
||||
<fs-form ref="formRef" class="w-full" v-bind="formBinding" />
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="3" class="w-full" header="已上传履行附件">
|
||||
<fs-form
|
||||
ref="formRefByCertification"
|
||||
class="w-full"
|
||||
v-bind="formBindingByCertification"
|
||||
>
|
||||
<template #form_fileList="scope">
|
||||
<a-upload
|
||||
v-model:file-list="scope.form.fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf"
|
||||
name="file"
|
||||
@change="handleChangeByCertification"
|
||||
>
|
||||
<vben-button variant="secondary">
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</vben-button>
|
||||
</a-upload>
|
||||
</template>
|
||||
</fs-form>
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="5" class="w-full" header="已上传履行附件">
|
||||
<a-form :label-col="{ style: { width: '120px' } }">
|
||||
<a-form-item label="附件上传" name="fileList">
|
||||
<a-upload
|
||||
v-model:file-list="fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf,.ppt,.pptx"
|
||||
name="file"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-button>
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</a-spin>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
|
|
@ -0,0 +1,298 @@
|
|||
import { dict } from '@fast-crud/fast-crud';
|
||||
|
||||
import { DICT_TYPE, getDictObj, getDictOptions } from '#/utils/dict';
|
||||
import type { delay } from 'lodash-es';
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
export function getFormSchema(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {
|
||||
currencyTypeId: 'CNY',
|
||||
},
|
||||
columns: {
|
||||
ctrBaseId: {
|
||||
title: '合同编号',
|
||||
key: 'ctrBaseId',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入合同编号' }],
|
||||
},
|
||||
ctrName: {
|
||||
title: '合同名称',
|
||||
key: 'ctrName',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入' }],
|
||||
},
|
||||
contractMoney: {
|
||||
title: '合同标的金额',
|
||||
key: 'contractMoney',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
paymentSum: {
|
||||
title: '累计结算金额',
|
||||
key: 'paymentSum',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
paymentMoney: {
|
||||
title: '本次付款金额',
|
||||
key: 'paymentMoney',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
surplusMoney: {
|
||||
title: '剩余金额',
|
||||
key: 'surplusMoney',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
paymentDate: {
|
||||
title: '应付款时间',
|
||||
key: 'paymentDate',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-date-picker',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
},
|
||||
rules: [{ required: true, message: '请选择应付款时间' }],
|
||||
},
|
||||
paympaymentKindIdenttype: {
|
||||
title: '付款性质',
|
||||
key: 'paymentKindId',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-select',
|
||||
vModel: 'value',
|
||||
class: 'min-w-[200px]',
|
||||
dict: dict({
|
||||
data: getDictOptions(DICT_TYPE.counterparty_nature),
|
||||
}),
|
||||
},
|
||||
rules: [{ required: true, message: '请选择付款性质' }],
|
||||
},
|
||||
paymentUnit: {
|
||||
title: '付款单位',
|
||||
key: 'paymentUnit',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
gatheringUnit: {
|
||||
title: '收款单位',
|
||||
key: 'gatheringUnit',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
gatheringBank: {
|
||||
title: '开户银行',
|
||||
key: 'gatheringBank',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
gatheringAccount: {
|
||||
title: '收款账号',
|
||||
key: 'gatheringAccount',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
paymentRemark: {
|
||||
title: '合同约定的付款条件',
|
||||
key: 'paymentRemark',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
creditCode: {
|
||||
title: '合同相对人履约情况',
|
||||
key: 'creditCode',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
checkResult: {
|
||||
title: '本次验收成果',
|
||||
key: 'checkResult',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
delaySay: {
|
||||
title: '延迟履行说明',
|
||||
key: 'delaySay',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
isYsDelay: {
|
||||
title: '验收是否延迟履行',
|
||||
key: 'isYsDelay',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '否', value: 0 },
|
||||
{ label: '是', value: 1 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
isFkDelay: {
|
||||
title: '付款是否延迟履行',
|
||||
key: 'isFkDelay',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '否', value: 0 },
|
||||
{ label: '是', value: 1 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
isOver: {
|
||||
title: '合同是否履行完毕',
|
||||
key: 'isOver',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '否', value: 0 },
|
||||
{ label: '是', value: 1 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
toUsePerson: {
|
||||
title: '对方经办人',
|
||||
key: 'toUsePerson',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
doneDate: {
|
||||
title: '完成时间',
|
||||
key: 'doneDate',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-date-picker',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
},
|
||||
rules: [{ required: true, message: '请选择有效期' }],
|
||||
},
|
||||
remark: {
|
||||
title: '付款备注',
|
||||
key: 'remark',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
},
|
||||
|
||||
// marketScope: {
|
||||
// title: '营业执照经营范围',
|
||||
// key: 'marketScope',
|
||||
// col: { span: 24 },
|
||||
// component: {
|
||||
// name: 'a-textarea',
|
||||
// vModel: 'value',
|
||||
// autosize: { minRows: 4, maxRows: 6 },
|
||||
// },
|
||||
// },
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export function getFormSchemaByCertification(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {},
|
||||
columns: {
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function getFormSchemaByShareholder(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
columns: {
|
||||
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
|
@ -1,3 +1,288 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import { Page } from '@vben/common-ui';
|
||||
import { MdiUpload } from '@vben/icons';
|
||||
import { useUserStore } from '@vben/stores';
|
||||
|
||||
import {
|
||||
message,
|
||||
Modal,
|
||||
type UploadChangeParam,
|
||||
type UploadFile,
|
||||
} from 'ant-design-vue';
|
||||
|
||||
import Apis from '#/api';
|
||||
import { FileUploader } from '#/utils/file';
|
||||
|
||||
import {
|
||||
getFormSchema,
|
||||
getFormSchemaByCertification,
|
||||
getFormSchemaByShareholder,
|
||||
} from './curd';
|
||||
|
||||
const fileUploader = new FileUploader({});
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const id = route.params.id;
|
||||
const pageRef = ref();
|
||||
|
||||
const formRef = ref();
|
||||
const formRefByBank = ref();
|
||||
const formRefByCertification = ref();
|
||||
const formRefByShareholder = ref();
|
||||
|
||||
const isLoading = ref(false);
|
||||
|
||||
const formBinding = ref({
|
||||
...getFormSchema(),
|
||||
});
|
||||
|
||||
|
||||
|
||||
const formBindingByCertification = ref({
|
||||
...getFormSchemaByCertification(),
|
||||
});
|
||||
|
||||
const formBindingByShareholder = ref({
|
||||
...getFormSchemaByShareholder(),
|
||||
});
|
||||
|
||||
const collapses = ['1', '2', '3', '4', '5'];
|
||||
const collapseActiveKey = ref(collapses);
|
||||
function areArraysEqualUnordered(arr1, arr2) {
|
||||
if (arr1.length !== arr2.length) return false;
|
||||
const sortedArr1 = [...arr1].sort();
|
||||
const sortedArr2 = [...arr2].sort();
|
||||
return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);
|
||||
}
|
||||
const isFold = computed(() => {
|
||||
return !areArraysEqualUnordered(collapses, collapseActiveKey.value);
|
||||
});
|
||||
function handleFold() {
|
||||
collapseActiveKey.value = isFold.value ? collapses : [];
|
||||
}
|
||||
|
||||
function handleBack() {
|
||||
Modal.confirm({
|
||||
title: '提示',
|
||||
content: `是否确认返回上一页面?`,
|
||||
onOk: async () => {
|
||||
back();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面返回并关闭tab
|
||||
*/
|
||||
function back() {
|
||||
router.replace('/contract/company/list');
|
||||
}
|
||||
|
||||
const fileList = ref<UploadFile[]>([]);
|
||||
const handleChange = (info: UploadChangeParam) => {
|
||||
fileList.value = info.fileList.length > 0 ? info.fileList : [];
|
||||
};
|
||||
|
||||
const handleChangeByCertification = (info: UploadChangeParam) => {
|
||||
formRefByCertification.value.setFormData({
|
||||
fileList: info.fileList.length > 0 ? info.fileList : [],
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function loadDataByContractTypeData() {}
|
||||
|
||||
async function handleSave() {
|
||||
isLoading.value = true;
|
||||
|
||||
try {
|
||||
const form = formRef.value.form;
|
||||
console.log(formRef.value);
|
||||
|
||||
try {
|
||||
await formRef.value.submit();
|
||||
} catch {
|
||||
message.error('请完成必填项的填写');
|
||||
return;
|
||||
}
|
||||
|
||||
const userStore = useUserStore();
|
||||
|
||||
let newForm:any = {};
|
||||
|
||||
// 会议附件
|
||||
const fileList = formRef.value.form.fileList;
|
||||
let files: any = [];
|
||||
if (fileList && fileList.length > 0) {
|
||||
files = await fileUploader.upload(fileList, { source: 'ht' });
|
||||
}
|
||||
console.log(files);
|
||||
if (files) {
|
||||
newForm.fileUuid = (files.map((item) => item.fileUuid) || []).join(',');
|
||||
}
|
||||
|
||||
newForm = Object.assign({}, formRef.value.form, newForm);
|
||||
|
||||
delete newForm.fileList;
|
||||
|
||||
// // 获取字典数据的name值
|
||||
// for (const item of contractTypeData.value) {
|
||||
// if (item.contrLevelId == newForm.ctrType) {
|
||||
// newForm.ctrTypeName = item.contrLevelName;
|
||||
// }
|
||||
// if (item.contrLevelId == newForm.ctrTwoType) {
|
||||
// newForm.ctrTwoTypeName = item.contrLevelName;
|
||||
// }
|
||||
// }
|
||||
|
||||
// newForm.fundDitchName = getDictObj(
|
||||
// DICT_TYPE.contract_funding_source,
|
||||
// newForm.fundDitch,
|
||||
// )?.label;
|
||||
|
||||
// newForm.priceTypeName = getDictObj(
|
||||
// DICT_TYPE.contract_currency_unit,
|
||||
// newForm.priceType,
|
||||
// )?.label;
|
||||
|
||||
// newForm.contractMoney = newForm.budgetSum;
|
||||
// newForm.currentContStepId = 0;
|
||||
|
||||
console.log(newForm);
|
||||
|
||||
await Apis.proProviderInfo.post_save({ data: newForm });
|
||||
} catch (error) {
|
||||
message.error('提交失败,请稍候再试');
|
||||
console.log(error);
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
isLoading.value = true;
|
||||
console.log(id);
|
||||
|
||||
// let formSchema = getFormSchema()
|
||||
|
||||
// formBinding.value = formSchema
|
||||
|
||||
try {
|
||||
if (id) {
|
||||
// const data = await Apis.proProviderInfo.get_Query({
|
||||
// params: { guid: id },
|
||||
// });
|
||||
// console.log(data);
|
||||
|
||||
// currData.value = data;
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData(data);
|
||||
// });
|
||||
|
||||
// if (data.fileUuid) {
|
||||
// const files = await fileUploader.select(data.fileUuid);
|
||||
// console.log(files);
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData({
|
||||
// fileList: files,
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
||||
// loadDataByContractTypeData();
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
Modal.error({
|
||||
content: '当前合同信息不存在',
|
||||
onOk() {
|
||||
back();
|
||||
},
|
||||
title: '提示',
|
||||
});
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>payment</div>
|
||||
<Page ref="pageRef" content-class="h-full flex flex-col">
|
||||
<a-affix
|
||||
:offset-top="0"
|
||||
:style="{ zIndex: 50 }"
|
||||
:target="() => pageRef.bodyRef"
|
||||
>
|
||||
<div class="flex w-full flex-row bg-white pl-1 pt-1">
|
||||
<a-space class="flex-1">
|
||||
|
||||
</a-space>
|
||||
|
||||
<vben-button variant="secondary" @click="handleFold()">
|
||||
一键{{ isFold ? '展开' : '收起' }}
|
||||
</vben-button>
|
||||
</div>
|
||||
</a-affix>
|
||||
|
||||
<a-spin :spinning="isLoading">
|
||||
<div class="mx-auto overflow-auto py-2">
|
||||
<a-collapse v-model:active-key="collapseActiveKey" :bordered="false">
|
||||
<a-collapse-panel key="1" class="w-full" header="基本信息">
|
||||
<fs-form ref="formRef" class="w-full" v-bind="formBinding" />
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="3" class="w-full" header="历史记录">
|
||||
<fs-form
|
||||
ref="formRefByCertification"
|
||||
class="w-full"
|
||||
v-bind="formBindingByCertification"
|
||||
>
|
||||
<template #form_fileList="scope">
|
||||
<a-upload
|
||||
v-model:file-list="scope.form.fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf"
|
||||
name="file"
|
||||
@change="handleChangeByCertification"
|
||||
>
|
||||
<vben-button variant="secondary">
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</vben-button>
|
||||
</a-upload>
|
||||
</template>
|
||||
</fs-form>
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="5" class="w-full" header="上传附件">
|
||||
<a-form :label-col="{ style: { width: '120px' } }">
|
||||
<a-form-item label="附件上传" name="fileList">
|
||||
<a-upload
|
||||
v-model:file-list="fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf,.ppt,.pptx"
|
||||
name="file"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-button>
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</a-spin>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
import { dict } from '@fast-crud/fast-crud';
|
||||
|
||||
import { DICT_TYPE, getDictObj, getDictOptions } from '#/utils/dict';
|
||||
import type { delay } from 'lodash-es';
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
export function getFormSchema(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {
|
||||
currencyTypeId: 'CNY',
|
||||
},
|
||||
columns: {
|
||||
ctrBaseId: {
|
||||
title: '合同编号',
|
||||
key: 'ctrBaseId',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入' }],
|
||||
},
|
||||
ctrName: {
|
||||
title: '合同名称',
|
||||
key: 'ctrName',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel: 'value',
|
||||
allowClear: false,
|
||||
},
|
||||
rules: [{ required: true, message: '请输入合同名称' }],
|
||||
},
|
||||
canType: {
|
||||
title: '事项',
|
||||
key: 'canType',
|
||||
col: { span: 24 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '合同终止', value: 0 },
|
||||
{ label: '合同解除', value: 1 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
||||
cancelReason: {
|
||||
title: '变更原因',
|
||||
key: 'cancelReason',
|
||||
col: { span: 12 },
|
||||
component: {
|
||||
name: 'fs-dict-radio',
|
||||
vModel: 'value',
|
||||
dict: dict({
|
||||
data: [
|
||||
{ label: '我方', value: 0 },
|
||||
{ label: '对方', value: 1 },
|
||||
{ label: '双方', value: 2 },
|
||||
{ label: '其他', value: 3 },
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
cancelReasonDesc: {
|
||||
title: '变更原因说明',
|
||||
key: 'cancelReasonDesc',
|
||||
col: { span: 12 },
|
||||
|
||||
component: {
|
||||
name: 'a-textarea',
|
||||
vModel: 'value',
|
||||
autosize: { minRows: 4, maxRows: 6 },
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export function getFormSchemaByCertification(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
initialForm: {},
|
||||
columns: {
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function getFormSchemaByShareholder(_params: any = {}) {
|
||||
return {
|
||||
labelCol: { style: { width: '140px' } },
|
||||
columns: {
|
||||
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
}
|
|
@ -1,3 +1,288 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import { Page } from '@vben/common-ui';
|
||||
import { MdiUpload } from '@vben/icons';
|
||||
import { useUserStore } from '@vben/stores';
|
||||
|
||||
import {
|
||||
message,
|
||||
Modal,
|
||||
type UploadChangeParam,
|
||||
type UploadFile,
|
||||
} from 'ant-design-vue';
|
||||
|
||||
import Apis from '#/api';
|
||||
import { FileUploader } from '#/utils/file';
|
||||
|
||||
import {
|
||||
getFormSchema,
|
||||
getFormSchemaByCertification,
|
||||
getFormSchemaByShareholder,
|
||||
} from './curd';
|
||||
|
||||
const fileUploader = new FileUploader({});
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const id = route.params.id;
|
||||
const pageRef = ref();
|
||||
|
||||
const formRef = ref();
|
||||
const formRefByBank = ref();
|
||||
const formRefByCertification = ref();
|
||||
const formRefByShareholder = ref();
|
||||
|
||||
const isLoading = ref(false);
|
||||
|
||||
const formBinding = ref({
|
||||
...getFormSchema(),
|
||||
});
|
||||
|
||||
|
||||
|
||||
const formBindingByCertification = ref({
|
||||
...getFormSchemaByCertification(),
|
||||
});
|
||||
|
||||
const formBindingByShareholder = ref({
|
||||
...getFormSchemaByShareholder(),
|
||||
});
|
||||
|
||||
const collapses = ['1', '2', '3', '4', '5'];
|
||||
const collapseActiveKey = ref(collapses);
|
||||
function areArraysEqualUnordered(arr1, arr2) {
|
||||
if (arr1.length !== arr2.length) return false;
|
||||
const sortedArr1 = [...arr1].sort();
|
||||
const sortedArr2 = [...arr2].sort();
|
||||
return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);
|
||||
}
|
||||
const isFold = computed(() => {
|
||||
return !areArraysEqualUnordered(collapses, collapseActiveKey.value);
|
||||
});
|
||||
function handleFold() {
|
||||
collapseActiveKey.value = isFold.value ? collapses : [];
|
||||
}
|
||||
|
||||
function handleBack() {
|
||||
Modal.confirm({
|
||||
title: '提示',
|
||||
content: `是否确认返回上一页面?`,
|
||||
onOk: async () => {
|
||||
back();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面返回并关闭tab
|
||||
*/
|
||||
function back() {
|
||||
router.replace('/contract/company/list');
|
||||
}
|
||||
|
||||
const fileList = ref<UploadFile[]>([]);
|
||||
const handleChange = (info: UploadChangeParam) => {
|
||||
fileList.value = info.fileList.length > 0 ? info.fileList : [];
|
||||
};
|
||||
|
||||
const handleChangeByCertification = (info: UploadChangeParam) => {
|
||||
formRefByCertification.value.setFormData({
|
||||
fileList: info.fileList.length > 0 ? info.fileList : [],
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function loadDataByContractTypeData() {}
|
||||
|
||||
async function handleSave() {
|
||||
isLoading.value = true;
|
||||
|
||||
try {
|
||||
const form = formRef.value.form;
|
||||
console.log(formRef.value);
|
||||
|
||||
try {
|
||||
await formRef.value.submit();
|
||||
} catch {
|
||||
message.error('请完成必填项的填写');
|
||||
return;
|
||||
}
|
||||
|
||||
const userStore = useUserStore();
|
||||
|
||||
let newForm:any = {};
|
||||
|
||||
// 会议附件
|
||||
const fileList = formRef.value.form.fileList;
|
||||
let files: any = [];
|
||||
if (fileList && fileList.length > 0) {
|
||||
files = await fileUploader.upload(fileList, { source: 'ht' });
|
||||
}
|
||||
console.log(files);
|
||||
if (files) {
|
||||
newForm.fileUuid = (files.map((item) => item.fileUuid) || []).join(',');
|
||||
}
|
||||
|
||||
newForm = Object.assign({}, formRef.value.form, newForm);
|
||||
|
||||
delete newForm.fileList;
|
||||
|
||||
// // 获取字典数据的name值
|
||||
// for (const item of contractTypeData.value) {
|
||||
// if (item.contrLevelId == newForm.ctrType) {
|
||||
// newForm.ctrTypeName = item.contrLevelName;
|
||||
// }
|
||||
// if (item.contrLevelId == newForm.ctrTwoType) {
|
||||
// newForm.ctrTwoTypeName = item.contrLevelName;
|
||||
// }
|
||||
// }
|
||||
|
||||
// newForm.fundDitchName = getDictObj(
|
||||
// DICT_TYPE.contract_funding_source,
|
||||
// newForm.fundDitch,
|
||||
// )?.label;
|
||||
|
||||
// newForm.priceTypeName = getDictObj(
|
||||
// DICT_TYPE.contract_currency_unit,
|
||||
// newForm.priceType,
|
||||
// )?.label;
|
||||
|
||||
// newForm.contractMoney = newForm.budgetSum;
|
||||
// newForm.currentContStepId = 0;
|
||||
|
||||
console.log(newForm);
|
||||
|
||||
await Apis.proProviderInfo.post_save({ data: newForm });
|
||||
} catch (error) {
|
||||
message.error('提交失败,请稍候再试');
|
||||
console.log(error);
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
isLoading.value = true;
|
||||
console.log(id);
|
||||
|
||||
// let formSchema = getFormSchema()
|
||||
|
||||
// formBinding.value = formSchema
|
||||
|
||||
try {
|
||||
if (id) {
|
||||
// const data = await Apis.proProviderInfo.get_Query({
|
||||
// params: { guid: id },
|
||||
// });
|
||||
// console.log(data);
|
||||
|
||||
// currData.value = data;
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData(data);
|
||||
// });
|
||||
|
||||
// if (data.fileUuid) {
|
||||
// const files = await fileUploader.select(data.fileUuid);
|
||||
// console.log(files);
|
||||
// nextTick(() => {
|
||||
// formRef.value.setFormData({
|
||||
// fileList: files,
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
||||
// loadDataByContractTypeData();
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
Modal.error({
|
||||
content: '当前合同信息不存在',
|
||||
onOk() {
|
||||
back();
|
||||
},
|
||||
title: '提示',
|
||||
});
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>relieve</div>
|
||||
<Page ref="pageRef" content-class="h-full flex flex-col">
|
||||
<a-affix
|
||||
:offset-top="0"
|
||||
:style="{ zIndex: 50 }"
|
||||
:target="() => pageRef.bodyRef"
|
||||
>
|
||||
<div class="flex w-full flex-row bg-white pl-1 pt-1">
|
||||
<a-space class="flex-1">
|
||||
|
||||
</a-space>
|
||||
|
||||
<vben-button variant="secondary" @click="handleFold()">
|
||||
一键{{ isFold ? '展开' : '收起' }}
|
||||
</vben-button>
|
||||
</div>
|
||||
</a-affix>
|
||||
|
||||
<a-spin :spinning="isLoading">
|
||||
<div class="mx-auto overflow-auto py-2">
|
||||
<a-collapse v-model:active-key="collapseActiveKey" :bordered="false">
|
||||
<a-collapse-panel key="1" class="w-full" header="合同终止(解除)解除申报">
|
||||
<fs-form ref="formRef" class="w-full" v-bind="formBinding" />
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="3" class="w-full" header="已上传附件">
|
||||
<fs-form
|
||||
ref="formRefByCertification"
|
||||
class="w-full"
|
||||
v-bind="formBindingByCertification"
|
||||
>
|
||||
<template #form_fileList="scope">
|
||||
<a-upload
|
||||
v-model:file-list="scope.form.fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf"
|
||||
name="file"
|
||||
@change="handleChangeByCertification"
|
||||
>
|
||||
<vben-button variant="secondary">
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</vben-button>
|
||||
</a-upload>
|
||||
</template>
|
||||
</fs-form>
|
||||
</a-collapse-panel>
|
||||
|
||||
<a-collapse-panel key="5" class="w-full" header="文件名">
|
||||
<a-form :label-col="{ style: { width: '120px' } }">
|
||||
<a-form-item label="附件上传" name="fileList">
|
||||
<a-upload
|
||||
v-model:file-list="fileList"
|
||||
:before-upload="() => false"
|
||||
:max-count="3"
|
||||
accept=".pdf,.ppt,.pptx"
|
||||
name="file"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-button>
|
||||
<MdiUpload />
|
||||
点击上传
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</a-spin>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
|
Loading…
Reference in New Issue