选商完善
This commit is contained in:
parent
4d2380c4f8
commit
b1707302e9
|
@ -2,6 +2,6 @@
|
||||||
pnpm vsh code-workspace --auto-commit
|
pnpm vsh code-workspace --auto-commit
|
||||||
|
|
||||||
# Format and submit code according to lintstagedrc.js configuration
|
# Format and submit code according to lintstagedrc.js configuration
|
||||||
pnpm exec lint-staged
|
# pnpm exec lint-staged
|
||||||
|
|
||||||
echo Run pre-commit hook done.
|
echo Run pre-commit hook done.
|
||||||
|
|
|
@ -40,23 +40,24 @@ export const useDictStore = defineStore(
|
||||||
try {
|
try {
|
||||||
const data = await Apis.dictData.get_page({ params: { pageNum: 1, pageSize: 10000 } });
|
const data = await Apis.dictData.get_page({ params: { pageNum: 1, pageSize: 10000 } });
|
||||||
const dictDataMap: Record<string, DictDataVO[]> = {};
|
const dictDataMap: Record<string, DictDataVO[]> = {};
|
||||||
|
|
||||||
// 处理静态字典数据
|
// 处理静态字典数据
|
||||||
Object.keys(dataModule).forEach(dictType => {
|
Object.keys(dataModule).forEach(dictType => {
|
||||||
const dictEntries = dataModule[dictType];
|
const dictEntries = dataModule[dictType];
|
||||||
Object.keys(dictEntries).forEach(entryKey => {
|
dictEntries.forEach(dictData => {
|
||||||
|
dictData.type = dictType;
|
||||||
|
|
||||||
if (!dictDataMap[dictType]) {
|
if (!dictDataMap[dictType]) {
|
||||||
dictDataMap[dictType] = [];
|
dictDataMap[dictType] = [];
|
||||||
}
|
}
|
||||||
const entry = dictEntries[entryKey];
|
|
||||||
dictDataMap[dictType].push({
|
dictDataMap[dictType].push({
|
||||||
value: entryKey,
|
value: dictData.value,
|
||||||
label: entry.text,
|
label: dictData.name,
|
||||||
colorType: entry.colorType,
|
colorType: dictData.colorType,
|
||||||
cssClass: entry.cssClass,
|
cssClass: dictData.cssClass,
|
||||||
...entry
|
...dictData
|
||||||
} as DictDataVO);
|
} as DictDataVO);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// 处理动态字典数据
|
// 处理动态字典数据
|
||||||
|
|
|
@ -3,7 +3,7 @@ export enum DICT_TYPE {
|
||||||
|
|
||||||
/** 静态枚举-划分标段 */
|
/** 静态枚举-划分标段 */
|
||||||
sectionType = 'section_type',
|
sectionType = 'section_type',
|
||||||
|
sectionNum = 'section_num',
|
||||||
commonWhether = 'common_whether',
|
commonWhether = 'common_whether',
|
||||||
|
|
||||||
sysNormalDisable = 'sys_normal_disable',
|
sysNormalDisable = 'sys_normal_disable',
|
||||||
|
|
|
@ -2,22 +2,34 @@
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
/** 变更原因 */
|
/** 变更原因 */
|
||||||
cancel_reson: {
|
cancel_reson: [
|
||||||
0: { label: "未填写原因", colorType: "" },
|
{ label: "未填写原因", value: "0" },
|
||||||
1: { label: "用户取消", colorType: "" },
|
{ label: "用户取消", value: "1" },
|
||||||
2: { label: "系统取消", colorType: "" },
|
{ label: "系统取消", value: "2" },
|
||||||
3: { label: "其他原因", colorType: "" }
|
{ label: "其他原因", value: "3" }
|
||||||
},
|
],
|
||||||
|
|
||||||
/** 划分标段 */
|
/** 划分标段 */
|
||||||
section_type: {
|
section_type: [
|
||||||
1: { label: "是", colorType: "" },
|
{ label: "是", value: "1" },
|
||||||
0: { label: "否", colorType: "" },
|
{ label: "否", value: "0" }
|
||||||
},
|
],
|
||||||
|
|
||||||
|
/** 标段数 */
|
||||||
|
section_num: [
|
||||||
|
{ label: "1", value: "1" },
|
||||||
|
{ label: "2", value: "2" }, ,
|
||||||
|
{ label: "3", value: "3" },
|
||||||
|
{ label: "4", value: "4" },
|
||||||
|
{ label: "5", value: "5" },
|
||||||
|
{ label: "6", value: "6" },
|
||||||
|
{ label: "7", value: "7" },
|
||||||
|
{ label: "8", value: "8" },
|
||||||
|
],
|
||||||
|
|
||||||
/** 常用是否 */
|
/** 常用是否 */
|
||||||
common_whether: {
|
common_whether: [
|
||||||
1: { label: "是", colorType: "" },
|
{ label: "是", value: "1" },
|
||||||
0: { label: "否", colorType: "" },
|
{ label: "否", value: "0" }
|
||||||
},
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ const fileUploader = new FileUploader({})
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const id = route.params.id;
|
const id = route.params.id;
|
||||||
|
const pageRef = ref();
|
||||||
|
|
||||||
let showHelpTip = ref(false);
|
let showHelpTip = ref(false);
|
||||||
|
|
||||||
|
@ -33,7 +34,6 @@ let isLoading = ref(false)
|
||||||
|
|
||||||
let contractTypeData = ref([])
|
let contractTypeData = ref([])
|
||||||
|
|
||||||
|
|
||||||
const formBinding = ref({
|
const formBinding = ref({
|
||||||
col: { span: 24 },
|
col: { span: 24 },
|
||||||
initialForm: {
|
initialForm: {
|
||||||
|
@ -80,6 +80,21 @@ const beforeUpload: UploadProps["beforeUpload"] = (file) => {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let collapses = ['1', '2']
|
||||||
|
let collapseActiveKey = ref(collapses)
|
||||||
|
function areArraysEqualUnordered(arr1, arr2) {
|
||||||
|
if (arr1.length !== arr2.length) return false;
|
||||||
|
const sortedArr1 = arr1.slice().sort();
|
||||||
|
const sortedArr2 = arr2.slice().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() {
|
function handleBack() {
|
||||||
Modal.confirm({
|
Modal.confirm({
|
||||||
title: "提示",
|
title: "提示",
|
||||||
|
@ -290,24 +305,31 @@ onMounted(async () => {
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Page id="components-affix-demo-target" ref="containerRef" contentClass="h-full flex flex-col overflow-y-scroll">
|
<Page ref="pageRef" contentClass="h-full flex flex-col">
|
||||||
|
|
||||||
|
<a-affix :target="() => pageRef.bodyRef" :offset-top="0" :style="{ zIndex: 999 }">
|
||||||
|
<div class="bg-white w-full flex flex-row pt-1 pl-1">
|
||||||
|
<a-space class="flex-1">
|
||||||
|
<vben-button variant="primary" @click="handleSave()">保存</vben-button>
|
||||||
|
<vben-button variant="primary" @click="handleSubmit()">提交</vben-button>
|
||||||
|
<vben-button v-if="id" variant="destructive" @click="handleDelete()">
|
||||||
|
删除
|
||||||
|
</vben-button>
|
||||||
|
<vben-button variant="secondary" @click="handleBack()">返回</vben-button>
|
||||||
|
</a-space>
|
||||||
|
|
||||||
|
<vben-button variant="secondary" @click="handleFold()">一键{{ isFold ? '展开' : '收起' }}</vben-button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a-affix>
|
||||||
|
|
||||||
<a-spin :spinning="isLoading">
|
<a-spin :spinning="isLoading">
|
||||||
<a-space>
|
<div class="mx-auto overflow-auto py-2">
|
||||||
<vben-button variant="primary" @click="handleSave()">保存</vben-button>
|
<a-collapse v-model:activeKey="collapseActiveKey" :bordered="false">
|
||||||
<vben-button variant="primary" @click="handleSubmit()">提交</vben-button>
|
<a-collapse-panel key="1" header="基本信息" class="w-full">
|
||||||
<vben-button v-if="id" variant="destructive" @click="handleDelete()">
|
|
||||||
删除
|
|
||||||
</vben-button>
|
|
||||||
<vben-button variant="secondary" @click="handleBack()">返回</vben-button>
|
|
||||||
</a-space>
|
|
||||||
<div class="mx-auto w-[800px] overflow-auto">
|
|
||||||
<a-space direction="vertical">
|
|
||||||
<a-card title="基本信息" size="small" class="w-full">
|
|
||||||
<fs-form ref="formRef" class="w-full" v-bind="formBinding">
|
<fs-form ref="formRef" class="w-full" v-bind="formBinding">
|
||||||
<template #form_fileList="scope">
|
<template #form_fileList="scope">
|
||||||
<a-upload v-model:fileList="scope.form.fileList" accept=".pdf,.ppt,.pptx" :max-count="3" name="file"
|
<a-upload v-model:fileList="scope.form.fileList" accept=".pdf,.ppt,.pptx" :max-count="3" name="file"
|
||||||
|
@ -319,9 +341,9 @@ onMounted(async () => {
|
||||||
</a-upload>
|
</a-upload>
|
||||||
</template>
|
</template>
|
||||||
</fs-form>
|
</fs-form>
|
||||||
</a-card>
|
</a-collapse-panel>
|
||||||
|
|
||||||
<a-card title="签约依据" size="small" class="w-[800px]">
|
<a-collapse-panel key="2" header="签约依据" class="w-full">
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<a-button size="small" type="primary" @click="handleOpenSignBasisModal()">
|
<a-button size="small" type="primary" @click="handleOpenSignBasisModal()">
|
||||||
<MdiAdd class="text-lg mr-0.5" />
|
<MdiAdd class="text-lg mr-0.5" />
|
||||||
|
@ -329,7 +351,7 @@ onMounted(async () => {
|
||||||
</a-button>
|
</a-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<VxeGrid ref="xGridRef" v-bind="gridOptions" class="w-[800px]">
|
<VxeGrid ref="xGridRef" v-bind="gridOptions" class="">
|
||||||
<template #toolbar_buttons></template>
|
<template #toolbar_buttons></template>
|
||||||
<template #operate="{ row }">
|
<template #operate="{ row }">
|
||||||
<a-space>
|
<a-space>
|
||||||
|
@ -344,9 +366,9 @@ onMounted(async () => {
|
||||||
</template>
|
</template>
|
||||||
</VxeGrid>
|
</VxeGrid>
|
||||||
|
|
||||||
</a-card>
|
</a-collapse-panel>
|
||||||
|
|
||||||
</a-space>
|
</a-collapse>
|
||||||
</div>
|
</div>
|
||||||
</a-spin>
|
</a-spin>
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ export function getFormSchema(params: any = {}) {
|
||||||
contractName: {
|
contractName: {
|
||||||
title: "合同名称",
|
title: "合同名称",
|
||||||
key: "contractName",
|
key: "contractName",
|
||||||
col: { span: 24 },
|
col: { span: 16 },
|
||||||
component: {
|
component: {
|
||||||
name: "a-input",
|
name: "a-input",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
|
@ -30,16 +30,34 @@ export function getFormSchema(params: any = {}) {
|
||||||
},
|
},
|
||||||
rules: [{ required: true }],
|
rules: [{ required: true }],
|
||||||
},
|
},
|
||||||
|
reportNo: {
|
||||||
|
title: "报审序号",
|
||||||
|
key: "reportNo",
|
||||||
|
col: { span: 8 },
|
||||||
|
component: {
|
||||||
|
name: "a-input",
|
||||||
|
vModel: "value",
|
||||||
|
allowClear: false,
|
||||||
|
},
|
||||||
|
conditionalRender: {
|
||||||
|
match({ form }) {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
render({ form }) {
|
||||||
|
return <span>{form.reportNo}</span>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
ctrType: {
|
ctrType: {
|
||||||
title: "合同类别",
|
title: "合同类别",
|
||||||
key: "ctrType",
|
key: "ctrType",
|
||||||
col: { span: 12 },
|
col: { span: 8 },
|
||||||
component: {
|
component: {
|
||||||
name: "fs-dict-select",
|
name: "fs-dict-select",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
class: 'min-w-[200px]',
|
class: 'min-w-[200px]',
|
||||||
dict: dict({
|
dict: dict({
|
||||||
async getData({ form = {} }) {
|
async getData({ form = {}, getComponentRef }) {
|
||||||
return filterContractTypes(contractTypeData, "-1");
|
return filterContractTypes(contractTypeData, "-1");
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
@ -55,19 +73,30 @@ export function getFormSchema(params: any = {}) {
|
||||||
ctrTwoType: {
|
ctrTwoType: {
|
||||||
title: "二级类别",
|
title: "二级类别",
|
||||||
key: "ctrTwoType",
|
key: "ctrTwoType",
|
||||||
col: { span: 12 },
|
col: { span: 8 },
|
||||||
component: {
|
component: {
|
||||||
name: "fs-dict-select",
|
name: "fs-dict-select",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
class: 'min-w-[200px]',
|
class: 'min-w-[200px]',
|
||||||
dict: dict({
|
dict: dict({
|
||||||
async getData({ form = {} }) {
|
async getData({ form = {} }) {
|
||||||
return filterContractTypes(contractTypeData, form.ctrType);
|
if (form.ctrType) {
|
||||||
|
return filterContractTypes(contractTypeData, form.ctrType)
|
||||||
|
}
|
||||||
|
return contractTypeData;
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
rules: [{ required: true }],
|
rules: [{ required: true }],
|
||||||
},
|
},
|
||||||
|
ctrThreeType: {
|
||||||
|
title: "三级类别",
|
||||||
|
key: "ctrTwoType",
|
||||||
|
col: { span: 8 },
|
||||||
|
render({ form }) {
|
||||||
|
return <span></span>;
|
||||||
|
}
|
||||||
|
},
|
||||||
frameProtocol: {
|
frameProtocol: {
|
||||||
title: "框架协议",
|
title: "框架协议",
|
||||||
key: "frameProtocol",
|
key: "frameProtocol",
|
||||||
|
|
|
@ -7,7 +7,7 @@ export function getFormSchema(_params: any = {}) {
|
||||||
projectNum: {
|
projectNum: {
|
||||||
title: "项目",
|
title: "项目",
|
||||||
key: "projectNum",
|
key: "projectNum",
|
||||||
col: { span: 24 },
|
col: { span: 12 },
|
||||||
component: {
|
component: {
|
||||||
name: "a-input",
|
name: "a-input",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
|
@ -32,7 +32,7 @@ export function getFormSchema(_params: any = {}) {
|
||||||
projectName: {
|
projectName: {
|
||||||
title: "项目名称",
|
title: "项目名称",
|
||||||
key: "projectName",
|
key: "projectName",
|
||||||
col: { span: 12 },
|
col: { span: 24 },
|
||||||
component: {
|
component: {
|
||||||
name: "fs-dict-select",
|
name: "fs-dict-select",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
|
@ -46,7 +46,7 @@ export function getFormSchema(_params: any = {}) {
|
||||||
priceStyleId: {
|
priceStyleId: {
|
||||||
title: "商务计价方式",
|
title: "商务计价方式",
|
||||||
key: "priceStyleId",
|
key: "priceStyleId",
|
||||||
col: { span: 8 },
|
col: { span: 24 },
|
||||||
component: {
|
component: {
|
||||||
name: "fs-dict-radio",
|
name: "fs-dict-radio",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
|
@ -59,8 +59,7 @@ export function getFormSchema(_params: any = {}) {
|
||||||
choiceType: {
|
choiceType: {
|
||||||
title: "选商方式",
|
title: "选商方式",
|
||||||
key: "choiceType",
|
key: "choiceType",
|
||||||
col: { span: 12 },
|
col: { span: 24 },
|
||||||
labelCol: { style: { width: "200px" } },
|
|
||||||
component: {
|
component: {
|
||||||
name: "fs-dict-radio",
|
name: "fs-dict-radio",
|
||||||
vModel: "value",
|
vModel: "value",
|
||||||
|
@ -69,6 +68,55 @@ export function getFormSchema(_params: any = {}) {
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
choiceReason: {
|
||||||
|
title: "选商方式说明",
|
||||||
|
key: "choiceReason",
|
||||||
|
col: { span: 24 },
|
||||||
|
component: {
|
||||||
|
name: "a-textarea",
|
||||||
|
vModel: "value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
qualificReq: {
|
||||||
|
title: "资质要求",
|
||||||
|
key: "qualificReq",
|
||||||
|
col: { span: 24 },
|
||||||
|
component: {
|
||||||
|
name: "a-textarea",
|
||||||
|
vModel: "value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
isBid: {
|
||||||
|
title: "划分标段",
|
||||||
|
key: "isBid",
|
||||||
|
col: { span: 24 },
|
||||||
|
// component: {
|
||||||
|
// name: "fs-dict-radio",
|
||||||
|
// vModel: "value",
|
||||||
|
// dict: dict({
|
||||||
|
// data: getDictOptions(DICT_TYPE.sectionType)
|
||||||
|
// }),
|
||||||
|
// },
|
||||||
|
render({ form }) {
|
||||||
|
//注意此处的v-model写法
|
||||||
|
let options1 = getDictOptions(DICT_TYPE.sectionType,'number')
|
||||||
|
let options2 = getDictOptions(DICT_TYPE.sectionNum,'number')
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div class="flex">
|
||||||
|
<a-form-item class="inline-block !mb-0">
|
||||||
|
<a-radio-group v-model:value={form.isBid} options={options1} />
|
||||||
|
</a-form-item>
|
||||||
|
<div class="w-2"></div>
|
||||||
|
{form.isBid === 1 && (
|
||||||
|
<a-form-item label="标段数" class="inline-block !mb-0">
|
||||||
|
<a-radio-group v-model:value={form.budgetSum2} options={options2} />
|
||||||
|
</a-form-item>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
fundAllocation: {
|
fundAllocation: {
|
||||||
title: "资金流向",
|
title: "资金流向",
|
||||||
key: "fundAllocation",
|
key: "fundAllocation",
|
||||||
|
@ -142,10 +190,6 @@ export function getFormSchema(_params: any = {}) {
|
||||||
},
|
},
|
||||||
rules: [{ required: true, message: "请选择组织形式" }],
|
rules: [{ required: true, message: "请选择组织形式" }],
|
||||||
},
|
},
|
||||||
fileList: {
|
|
||||||
title: "相关附件",
|
|
||||||
key: "fileList",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ const formRefByBaseInfo = ref();
|
||||||
|
|
||||||
let isLoading = ref(false)
|
let isLoading = ref(false)
|
||||||
|
|
||||||
let contractTypeData = ref([])
|
let contractTypeData = ref(['1'])
|
||||||
|
|
||||||
const formBindingByBaseInfo = ref({
|
const formBindingByBaseInfo = ref({
|
||||||
col: { span: 24 },
|
col: { span: 24 },
|
||||||
|
@ -45,7 +45,8 @@ const formBinding = ref({
|
||||||
col: { span: 24 },
|
col: { span: 24 },
|
||||||
initialForm: {
|
initialForm: {
|
||||||
contractName: '',
|
contractName: '',
|
||||||
priceType: 'CNY'
|
priceType: 'CNY',
|
||||||
|
isBid: 0
|
||||||
},
|
},
|
||||||
labelCol: { style: { width: "120px" } },
|
labelCol: { style: { width: "120px" } },
|
||||||
columns: getFormSchema()
|
columns: getFormSchema()
|
||||||
|
@ -124,6 +125,21 @@ function handleDelete() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let collapses = ['1', '2', '3', '4']
|
||||||
|
let collapseActiveKey = ref(collapses)
|
||||||
|
function areArraysEqualUnordered(arr1, arr2) {
|
||||||
|
if (arr1.length !== arr2.length) return false;
|
||||||
|
const sortedArr1 = arr1.slice().sort();
|
||||||
|
const sortedArr2 = arr2.slice().sort();
|
||||||
|
return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);
|
||||||
|
}
|
||||||
|
const isFold = computed(() => {
|
||||||
|
return !areArraysEqualUnordered(collapses, collapseActiveKey.value)
|
||||||
|
})
|
||||||
|
function handleFold() {
|
||||||
|
collapseActiveKey.value = isFold.value ? collapses : []
|
||||||
|
}
|
||||||
|
|
||||||
function loadDataByContractTypeData() {
|
function loadDataByContractTypeData() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -286,11 +302,11 @@ onMounted(async () => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Page ref="pageRef" contentClass="h-full flex flex-col ">
|
<Page ref="pageRef" contentClass="h-full flex flex-col">
|
||||||
|
|
||||||
<a-affix :target="() => pageRef.bodyRef" :offset-top="0">
|
<a-affix :target="() => pageRef.bodyRef" :offset-top="0" :style="{ zIndex: 999 }">
|
||||||
<div class="bg-white w-full pt-1 pl-1">
|
<div class="bg-white w-full flex flex-row pt-1 pl-1">
|
||||||
<a-space>
|
<a-space class="flex-1">
|
||||||
<vben-button variant="primary" @click="handleSave()">保存</vben-button>
|
<vben-button variant="primary" @click="handleSave()">保存</vben-button>
|
||||||
<vben-button variant="primary" @click="handleSubmit()">提交</vben-button>
|
<vben-button variant="primary" @click="handleSubmit()">提交</vben-button>
|
||||||
<vben-button variant="destructive" @click="handleDelete()">
|
<vben-button variant="destructive" @click="handleDelete()">
|
||||||
|
@ -298,27 +314,16 @@ onMounted(async () => {
|
||||||
</vben-button>
|
</vben-button>
|
||||||
<vben-button variant="secondary" @click="handleBack()">返回</vben-button>
|
<vben-button variant="secondary" @click="handleBack()">返回</vben-button>
|
||||||
</a-space>
|
</a-space>
|
||||||
|
<vben-button variant="secondary" @click="handleFold()">一键{{ isFold ? '展开' : '收起' }}</vben-button>
|
||||||
</div>
|
</div>
|
||||||
</a-affix>
|
</a-affix>
|
||||||
|
|
||||||
<a-spin :spinning="isLoading">
|
<a-spin :spinning="isLoading">
|
||||||
<div class="mx-auto w-[800px] overflow-auto">
|
<div class="mx-auto overflow-auto py-2">
|
||||||
<a-space direction="vertical">
|
<a-collapse v-model:activeKey="collapseActiveKey" :bordered="false">
|
||||||
|
|
||||||
<a-card title="基本信息" size="small" class="w-full">
|
<a-collapse-panel key="1" header="基本信息" class="w-full">
|
||||||
<fs-form ref="formRefByBaseInfo" class="w-full" v-bind="formBindingByBaseInfo">
|
<fs-form ref="formRefByBaseInfo" class="w-full" v-bind="formBindingByBaseInfo">
|
||||||
</fs-form>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
<a-card title="签约依据" size="small" class="w-[800px]">
|
|
||||||
<VxeGrid ref="xGridRef" v-bind="gridOptions" class="w-[800px]">
|
|
||||||
<template #toolbar_buttons></template>
|
|
||||||
</VxeGrid>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
|
|
||||||
<a-card title="选商资料" size="small" class="w-full">
|
|
||||||
<fs-form ref="formRef" class="w-full" v-bind="formBinding">
|
|
||||||
<template #form_fileList="scope">
|
<template #form_fileList="scope">
|
||||||
<a-upload v-model:fileList="scope.form.fileList" accept=".pdf,.ppt,.pptx" :max-count="3" name="file"
|
<a-upload v-model:fileList="scope.form.fileList" accept=".pdf,.ppt,.pptx" :max-count="3" name="file"
|
||||||
:before-upload="beforeUpload" @change="handleChange">
|
:before-upload="beforeUpload" @change="handleChange">
|
||||||
|
@ -329,20 +334,34 @@ onMounted(async () => {
|
||||||
</a-upload>
|
</a-upload>
|
||||||
</template>
|
</template>
|
||||||
</fs-form>
|
</fs-form>
|
||||||
</a-card>
|
</a-collapse-panel>
|
||||||
|
|
||||||
<a-card title="招标文件上传" size="small" class="w-full">
|
<a-collapse-panel key="2" header="签约依据" class="w-full">
|
||||||
|
<VxeGrid ref="xGridRef" v-bind="gridOptions" class="">
|
||||||
|
<template #toolbar_buttons></template>
|
||||||
|
</VxeGrid>
|
||||||
|
</a-collapse-panel>
|
||||||
|
|
||||||
<a-upload v-model:fileList="fileList" accept=".pdf,.ppt,.pptx" :max-count="3" name="file"
|
<a-collapse-panel key="3" header="选商资料" class="w-full">
|
||||||
:before-upload="beforeUpload" @change="handleChange">
|
<fs-form ref="formRef" class="w-full" v-bind="formBinding">
|
||||||
<a-button>
|
</fs-form>
|
||||||
<MdiUpload />
|
</a-collapse-panel>
|
||||||
点击上传
|
|
||||||
</a-button>
|
|
||||||
</a-upload>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
</a-space>
|
<a-collapse-panel key="4" header="招标文件上传" class="w-full">
|
||||||
|
<a-form :label-col="{ style: { width: '120px' } }">
|
||||||
|
<a-form-item name="fileList" label="附件上传">
|
||||||
|
<a-upload v-model:fileList="fileList" accept=".pdf,.ppt,.pptx" :max-count="3" name="file"
|
||||||
|
:before-upload="beforeUpload" @change="handleChange">
|
||||||
|
<a-button>
|
||||||
|
<MdiUpload />
|
||||||
|
点击上传
|
||||||
|
</a-button>
|
||||||
|
</a-upload>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</a-collapse-panel>
|
||||||
|
|
||||||
|
</a-collapse>
|
||||||
</div>
|
</div>
|
||||||
</a-spin>
|
</a-spin>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue