+
+
+
+
+
+
+
+
+
点击或拖动文件到该区域来上传
+
仅支持 pdf 类型的文件
+
+
+
+
+
-
-
-
diff --git a/apps/web-office/src/views/contract/business/edit/basic-info-curd.tsx b/apps/web-office/src/views/contract/business/edit/basic-info-curd.tsx
index 4ebc01b7..c4f8b255 100644
--- a/apps/web-office/src/views/contract/business/edit/basic-info-curd.tsx
+++ b/apps/web-office/src/views/contract/business/edit/basic-info-curd.tsx
@@ -1,5 +1,6 @@
import { DICT_TYPE, getDictOptions } from "#/utils/dict";
import { dict } from "@fast-crud/fast-crud";
+import { render } from "vue";
/**
@@ -97,6 +98,65 @@ export function getFormSchema(params: any = {}) {
return
;
}
},
+ budgetSum: {
+ title: '预算金额',
+ key: 'budgetSum',
+ col: { span: 5 },
+ colon: false,
+ component: {
+ name: 'a-input-number',
+ vModel: 'value',
+ class: 'w-full',
+ min: 0,
+ max: 9999,
+ },
+ },
+ priceType: {
+ title: '',
+ key: 'priceType',
+ col: { span: 3 },
+ labelCol: { style: { width: "12px" } },
+ colon: false,
+ component: {
+ name: 'fs-dict-select',
+ vModel: 'value',
+ dict: dict({
+ data: getDictOptions(DICT_TYPE.contractCurrencyUnit)
+ }),
+ },
+ },
+ fundAllocation: {
+ title: "资金流向",
+ key: "fundAllocation",
+ col: { span: 8 },
+ component: {
+ name: "fs-dict-select",
+ vModel: "value",
+ allowClear: false,
+ class: 'min-w-[200px]',
+ dict: dict({
+ data: getDictOptions(DICT_TYPE.contractFundFlow)
+ }),
+ },
+ rules: [{ required: true, message: "请选择资金流向" }],
+ },
+ fundDitch: {
+ title: "资金渠道",
+ key: "fundDitch",
+ col: { span: 8 },
+ component: {
+ name: "fs-dict-select",
+ vModel: "value",
+ allowClear: false,
+ class: 'min-w-[200px]',
+ dict: dict({
+ data: getDictOptions(DICT_TYPE.contractFundingSource)
+ }),
+ },
+ rules: [{ required: true, message: "请选择资金渠道" }],
+ },
+
+
frameProtocol: {
title: "框架协议",
key: "frameProtocol",
@@ -115,8 +175,8 @@ export function getFormSchema(params: any = {}) {
frameProtocolCtr: {
title: "框架协议下的合同",
key: "frameProtocolCtr",
- col: { span: 12 },
- labelCol: { style: { width: "200px" } },
+ col: { span: 8 },
+ labelCol: { style: { width: "150px" } },
component: {
name: "fs-dict-radio",
vModel: "value",
@@ -128,70 +188,12 @@ export function getFormSchema(params: any = {}) {
}),
},
},
- fundAllocation: {
- title: "资金流向",
- key: "fundAllocation",
- col: { span: 12 },
- component: {
- name: "fs-dict-select",
- vModel: "value",
- allowClear: false,
- class: 'min-w-[200px]',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractFundFlow)
- }),
- },
- rules: [{ required: true, message: "请选择资金流向" }],
- },
- fundDitch: {
- title: "资金渠道",
- key: "fundDitch",
- col: { span: 12 },
- component: {
- name: "fs-dict-select",
- vModel: "value",
- allowClear: false,
- class: 'min-w-[200px]',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractFundingSource)
- }),
- },
- rules: [{ required: true, message: "请选择资金渠道" }],
- },
- budgetSum: {
- title: '预算金额',
- key: 'budgetSum',
- col: { span: 8 },
- colon: false,
- component: {
- name: 'a-input-number',
- vModel: 'value',
- class: 'w-full',
- min: 0,
- max: 9999,
- },
-
- },
- priceType: {
- title: '',
- key: 'priceType',
- col: { span: 6 },
- labelCol: { style: { width: "12px" } },
- colon: false,
- component: {
- name: 'fs-dict-select',
- vModel: 'value',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractCurrencyUnit)
- }),
- },
- },
organiza: {
- title: "组织形式",
+ title: "组织方式",
key: "organiza",
- col: { span: 12 },
+ col: { span: 8 },
component: {
- name: "fs-dict-select",
+ name: "fs-dict-radio",
vModel: "value",
allowClear: false,
class: 'min-w-[200px]',
@@ -199,11 +201,7 @@ export function getFormSchema(params: any = {}) {
data: getDictOptions(DICT_TYPE.contractOrganizationForm)
}),
},
- rules: [{ required: true, message: "请选择组织形式" }],
- },
- fileList: {
- title: "相关附件",
- key: "fileList",
+ rules: [{ required: true, message: "请选择组织方式" }],
},
}
diff --git a/apps/web-office/src/views/contract/business/edit/curd.tsx b/apps/web-office/src/views/contract/business/edit/curd.tsx
index 4c79d22b..de967578 100644
--- a/apps/web-office/src/views/contract/business/edit/curd.tsx
+++ b/apps/web-office/src/views/contract/business/edit/curd.tsx
@@ -20,7 +20,7 @@ export function getFormSchema(_params: any = {}) {
key: "projectProp",
col: { span: 12 },
component: {
- name: "fs-dict-select",
+ name: "fs-dict-radio",
vModel: "value",
class: 'min-w-[200px]',
dict: dict({
@@ -75,6 +75,7 @@ export function getFormSchema(_params: any = {}) {
component: {
name: "a-textarea",
vModel: "value",
+ autosize: { minRows: 4, maxRows: 6 }
},
},
qualificReq: {
@@ -84,6 +85,7 @@ export function getFormSchema(_params: any = {}) {
component: {
name: "a-textarea",
vModel: "value",
+ autosize: { minRows: 4, maxRows: 6 }
},
},
isBid: {
@@ -99,8 +101,8 @@ export function getFormSchema(_params: any = {}) {
// },
render({ form }) {
//注意此处的v-model写法
- let options1 = getDictOptions(DICT_TYPE.sectionType,'number')
- let options2 = getDictOptions(DICT_TYPE.sectionNum,'number')
+ let options1 = getDictOptions(DICT_TYPE.sectionType,'string')
+ let options2 = getDictOptions(DICT_TYPE.sectionNum,'string')
return (
@@ -117,78 +119,58 @@ export function getFormSchema(_params: any = {}) {
);
}
},
- fundAllocation: {
- title: "资金流向",
- key: "fundAllocation",
- col: { span: 12 },
+ projectRange: {
+ title: "项目范围",
+ key: "projectRange",
+ col: { span: 24 },
component: {
- name: "fs-dict-select",
+ name: "a-textarea",
vModel: "value",
- allowClear: false,
- class: 'min-w-[200px]',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractFundFlow)
- }),
+ autosize: { minRows: 4, maxRows: 6 }
},
- rules: [{ required: true, message: "请选择资金流向" }],
},
- fundDitch: {
- title: "资金渠道",
- key: "fundDitch",
- col: { span: 12 },
+ projectContent: {
+ title: "项目内容",
+ key: "projectContent",
+ col: { span: 24 },
component: {
- name: "fs-dict-select",
+ name: "a-textarea",
vModel: "value",
- allowClear: false,
- class: 'min-w-[200px]',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractFundingSource)
- }),
- },
- rules: [{ required: true, message: "请选择资金渠道" }],
- },
- budgetSum: {
- title: '预算金额',
- key: 'budgetSum',
- col: { span: 8 },
- colon: false,
- component: {
- name: 'a-input-number',
- vModel: 'value',
- class: 'w-full',
- min: 0,
- max: 9999,
- },
-
- },
- priceType: {
- title: '',
- key: 'priceType',
- col: { span: 6 },
- labelCol: { style: { width: "12px" } },
- colon: false,
- component: {
- name: 'fs-dict-select',
- vModel: 'value',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractCurrencyUnit)
- }),
+ autosize: { minRows: 4, maxRows: 6 }
},
},
- organiza: {
- title: "组织形式",
- key: "organiza",
- col: { span: 12 },
+ quality: {
+ title: "工期要求(质量要求)",
+ key: "quality",
+ col: { span: 24 },
+ labelWrap:true,
component: {
- name: "fs-dict-select",
+ name: "a-textarea",
vModel: "value",
- allowClear: false,
- class: 'min-w-[200px]',
- dict: dict({
- data: getDictOptions(DICT_TYPE.contractOrganizationForm)
- }),
+ autosize: { minRows: 4, maxRows: 6 }
+ },
+ },
+ stockNums: {
+ title: "工程量(采购量)",
+ key: "stockNums",
+ col: { span: 24 },
+ labelWrap:true,
+ component: {
+ name: "a-textarea",
+ vModel: "value",
+ autosize: { minRows: 4, maxRows: 6 }
+ },
+ },
+ stockPlanMx: {
+ title: "计划投资明细",
+ key: "stockPlanMx",
+ col: { span: 24 },
+ labelWrap:true,
+ component: {
+ name: "a-textarea",
+ vModel: "value",
+ autosize: { minRows: 4, maxRows: 6 }
},
- rules: [{ required: true, message: "请选择组织形式" }],
},
}
diff --git a/apps/web-office/src/views/contract/business/edit/index.vue b/apps/web-office/src/views/contract/business/edit/index.vue
index 809c491b..35fa5c67 100644
--- a/apps/web-office/src/views/contract/business/edit/index.vue
+++ b/apps/web-office/src/views/contract/business/edit/index.vue
@@ -46,7 +46,7 @@ const formBinding = ref({
initialForm: {
contractName: '',
priceType: 'CNY',
- isBid: 0
+ isBid: '0'
},
labelCol: { style: { width: "120px" } },
columns: getFormSchema()
@@ -148,26 +148,91 @@ async function handleSave() {
isLoading.value = true
try {
- let form = formRef.value.form;
console.log(formRef.value)
await formRef.value.submit()
+ await formRefByBaseInfo.value.submit()
+
+ let contractForm = formRefByBaseInfo.value.form;
+ let bussinessForm = formRef.value.form;
+
+ bussinessForm.priceStyleName = getDictObj(DICT_TYPE.contractPriceStyle, bussinessForm.priceStyleId)?.label
+ bussinessForm.choiceTypeName = getDictObj(DICT_TYPE.contractSelectionMethod, bussinessForm.choiceType)?.label;
+
+ // 合同附件
+ {
+ let tempFileList = contractForm.fileList
+ let tempFiles: any = []
+ if (fileList && tempFileList.length) {
+ tempFiles = await fileUploader.upload(tempFileList, { source: 'ht' })
+ }
+ console.log(tempFiles)
+ if (tempFiles) {
+ contractForm.fileUuid = (tempFiles.map((item) => item.fileUuid) || []).join(',')
+ }
+ }
+
+ // 招标文件
+ {
+ let tempFileList = fileList.value
+ let tempFiles: any = []
+ if (fileList && tempFileList.length) {
+ tempFiles = await fileUploader.upload(tempFileList, { source: 'ht' })
+ }
+ console.log(tempFiles)
+ if (tempFiles) {
+ bussinessForm.fileUuid = (tempFiles.map((item) => item.fileUuid) || []).join(',')
+ }
+ }
+ let form = {
+ contractBaseInfo: contractForm,
+ selectMerchantsBasicInfo: bussinessForm,
+ biddingList: xGridRef.value?.getTableData().fullData,
+ };
+
+ if (form.selectMerchantsBasicInfo.isBid) {
+ let biddingList: any[] = xGridRef.value?.getTableData().fullData || [];
+
+ let index = 1;
+ for (const item of biddingList) {
+ if (!item.phaseName) {
+ message.error(`标段信息中的标段名称不能为空`);
+ return;
+ }
+ if (!item.phaseMoney) {
+ message.error(`标段信息中的预算金额不能为空`);
+ return;
+ }
+ if (!item.phaseDesc) {
+ message.error(`标段信息中的标段范围说明不能为空`);
+ return;
+ }
+ item.phaseSeq = index + "";
+ index++;
+ }
+ form.biddingList = biddingList;
+ }
+
+
+ console.log("提交表单", form)
+
+ return
const userStore = useUserStore()
let newForm = {}
// 会议附件
- let fileList = formRef.value.form.fileList
- let files: any = []
- if (fileList && fileList.length) {
- files = await fileUploader.upload(fileList, { source: 'ht' })
- }
- console.log(files)
- if (files) {
- newForm.fileUuid = (files.map((item) => item.fileUuid) || []).join(',')
- }
+ // let fileList = formRef.value.form.fileList
+ // let files: any = []
+ // if (fileList && fileList.length) {
+ // 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)
diff --git a/apps/web-office/src/views/contract/business/list/crud.tsx b/apps/web-office/src/views/contract/business/list/crud.tsx
index 1de3bc53..31cbc984 100644
--- a/apps/web-office/src/views/contract/business/list/crud.tsx
+++ b/apps/web-office/src/views/contract/business/list/crud.tsx
@@ -3,6 +3,7 @@ import { useRender } from '#/hooks/useRender';
import dayjs from 'dayjs';
import { DICT_TYPE, getDictOptions } from '#/utils/dict';
import { dict } from '@fast-crud/fast-crud';
+import { unitComponentProps } from '#/common/unit'
export const PrimaryKey = 'guid';
@@ -48,14 +49,10 @@ export function getFormSchema(_params: any = {}) {
autoSearchTrigger: 'enter',
show: true,
},
- inputDepartName: {
+ inputDepartId: {
title: '承办单位',
- key: 'inputDepartName',
- component: {
- name: 'a-input',
- vModel: 'value',
- allowClear: true,
- },
+ key: 'inputUnitId',
+ component: unitComponentProps,
autoSearchTrigger: 'enter',
show: true,
},
diff --git a/apps/web-office/src/views/duty/list/duty-edit-modal.vue b/apps/web-office/src/views/duty/list/duty-edit-modal.vue
index 9de69f4a..f20ee3e9 100644
--- a/apps/web-office/src/views/duty/list/duty-edit-modal.vue
+++ b/apps/web-office/src/views/duty/list/duty-edit-modal.vue
@@ -41,6 +41,7 @@ const formBinding = ref({
},
zzb: {
colon: false,
+ class:'!mb-2',
render: () => {
return
总值班;
},
@@ -86,6 +87,7 @@ const formBinding = ref({
},
jgbmld: {
colon: false,
+ class:'!mb-2',
render: () => {
return
机关部门领导;
},
@@ -131,6 +133,7 @@ const formBinding = ref({
},
zb: {
colon: false,
+ class:'!mb-2',
render: () => {
return
值班;
},
@@ -176,6 +179,7 @@ const formBinding = ref({
},
sj: {
colon: false,
+ class:'!mb-2',
render: () => {
return
司机;
},
@@ -204,8 +208,9 @@ const formBinding = ref({
},
bz: {
colon: false,
+ class:'!mb-2',
render: () => {
- return
;
+ return
值班备注;
},
},
remark: {
@@ -269,3 +274,10 @@ const [Modal, modalApi] = useVbenModal({
+
+
diff --git a/apps/web-office/vite.config.mts b/apps/web-office/vite.config.mts
index 3f8d4cea..cb0687db 100644
--- a/apps/web-office/vite.config.mts
+++ b/apps/web-office/vite.config.mts
@@ -66,14 +66,14 @@ export default defineConfig(async () => {
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api\/czg\/app/, '/'),
// mock代理目标地址
- target: `http://10.71.221.222:8083/rl`,
+ target: `http://192.168.147.238:8083/rl`,
ws: true,
},
'/api/czg/uc': {
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api\/czg\/uc/, '/'),
// mock代理目标地址
- target: `http://10.71.220.24:8082`,
+ target: `http://192.168.147.164:8082`,
ws: true,
},
'/api/zp/app': {
@@ -90,6 +90,20 @@ export default defineConfig(async () => {
target: `http://192.168.147.164:8082`,
ws: true,
},
+ '/api/xmh/app': {
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api\/xmh\/app/, '/'),
+ // mock代理目标地址
+ target: `http://192.168.147.144:8083/rl`,
+ ws: true,
+ },
+ '/api/xmh/uc': {
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api\/xmh\/uc/, '/'),
+ // mock代理目标地址
+ target: `http://192.168.147.164:8082`,
+ ws: true,
+ },
},
},
},