Commit a8044d79 authored by jiaxu.yan's avatar jiaxu.yan

feat: 项目详情

parent fc4bcbe2
import { ProjectParams, ProjectListGetResultModel, ProjectModel } from '@/api/project/model/projectModel'; import {
import {ProjectListItem} from "@/api/contract/model/contractModel" ProjectParams,
ProjectListGetResultModel,
ProjectModel,
} from '@/api/project/model/projectModel';
import { ProjectListItem } from '@/api/contract/model/contractModel';
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
enum Api { enum Api {
//分页查询合同集合 //分页查询合同集合
GetList = '/pro/settlement/select-contract', GetList = '/pro/settlement/select-contract',
//查询项目下拉框集合 //查询项目下拉框集合
ProjectSelect = '/pro/investmentPlan/project-list', ProjectSelect = '/pro/investmentPlan/project-list',
//新增合同 //新增合同
Add = '/pro/settlement/add-contract', Add = '/pro/settlement/add-contract',
} }
export const getContractListPage = (params?: ProjectParams) => export const getContractListPage = (params?: ProjectParams) =>
defHttp.post<ProjectModel>({ url: Api.GetList, data: params }); defHttp.post<ProjectModel>({ url: Api.GetList, data: params });
//查询下拉列表 //查询下拉列表
export const getProjectSelect = (params?: any) => export const getProjectSelect = (params?: any) =>
defHttp.get<ProjectListItem>({ url: Api.ProjectSelect, params }); defHttp.get<ProjectListItem>({ url: Api.ProjectSelect, params });
export const addItem = (params?: any) => export const addItem = (params?: any) =>
defHttp.post<ProjectModel>({ defHttp.post<ProjectModel>({
url: Api.Add, url: Api.Add,
data: params, data: params,
headers: { headers: {
'Content-Type': 'application/json;charset=UTF-8', 'Content-Type': 'application/json;charset=UTF-8',
}, },
}); });
\ No newline at end of file
...@@ -41,4 +41,8 @@ export interface ProjectCountModel { ...@@ -41,4 +41,8 @@ export interface ProjectCountModel {
countbuildbyhold: number; countbuildbyhold: number;
countreserve: number; countreserve: number;
} }
export interface AnnexListItem {
id?: string | number;
}
export type ProjectListGetResultModel = BasicFetchResult<ProjectListItem>; export type ProjectListGetResultModel = BasicFetchResult<ProjectListItem>;
import { import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
ProjectParams,
ProjectListGetResultModel,
ProjectModel,
} from './model/projectModel';
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
enum Api { enum Api {
...@@ -35,7 +31,7 @@ export const updateItem = (params?: any) => ...@@ -35,7 +31,7 @@ export const updateItem = (params?: any) =>
}, },
}); });
export const auditItem = (params?: any) => export const auditItem = (params?: any) =>
defHttp.get<ProjectModel>({ defHttp.post<ProjectModel>({
url: Api.audit, url: Api.audit,
params, params,
}); });
...@@ -45,4 +41,5 @@ export const deleteItem = (params?: any) => ...@@ -45,4 +41,5 @@ export const deleteItem = (params?: any) =>
export const Itemdelete = (params?: any) => export const Itemdelete = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.Itemdelete, params }); defHttp.delete<ProjectModel>({ url: Api.Itemdelete, params });
export const getItem = (params?: any) => defHttp.get<ProjectModel>({ url: Api.ProjectDetail, params }); export const getItem = (params?: any) =>
defHttp.get<ProjectModel>({ url: Api.ProjectDetail, params });
...@@ -3,7 +3,8 @@ import { ...@@ -3,7 +3,8 @@ import {
ProjectListGetResultModel, ProjectListGetResultModel,
ProjectModel, ProjectModel,
ProjectListItem, ProjectListItem,
ProjectCountModel ProjectCountModel,
AnnexListItem,
} from './model/projectModel'; } from './model/projectModel';
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
...@@ -14,6 +15,9 @@ enum Api { ...@@ -14,6 +15,9 @@ enum Api {
DeleteProject = '/pro/project/del', DeleteProject = '/pro/project/del',
ProjectDetail = '/pro/project/details', ProjectDetail = '/pro/project/details',
ProjectCount = '/pro/project/count', ProjectCount = '/pro/project/count',
annexList = '/pro/annex/listByProId',
annexAdd = '/pro/annex/add',
deleteAnnex = '/pro/annex/del',
} }
export const getListByPage = (params?: ProjectParams) => export const getListByPage = (params?: ProjectParams) =>
defHttp.post<ProjectListGetResultModel>({ url: Api.GetList, data: params }); defHttp.post<ProjectListGetResultModel>({ url: Api.GetList, data: params });
...@@ -32,3 +36,18 @@ export const getItem = (params?: any) => ...@@ -32,3 +36,18 @@ export const getItem = (params?: any) =>
export const getProjectCount = (params?: any) => export const getProjectCount = (params?: any) =>
defHttp.post<ProjectCountModel>({ url: Api.ProjectCount, params }); defHttp.post<ProjectCountModel>({ url: Api.ProjectCount, params });
export const getAnnexList = (params?: any) =>
defHttp.get<AnnexListItem>({ url: Api.annexList, params });
export const AnnexAdd = (params?: any) =>
defHttp.post<AnnexListItem>({
url: Api.annexAdd,
data: params,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});
export const deleteAnnex = (params?: any) =>
defHttp.delete<ProjectModel>({ url: Api.deleteAnnex, params });
// import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel'; // import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
import {ProjectParams, ProjectModel} from './model/settlementManageModel' import { ProjectParams, ProjectModel } from './model/settlementManageModel';
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
enum Api { enum Api {
//查询list //查询list
GetList = '/pro/settlement/page', GetList = '/pro/settlement/page',
//新增接口 //新增接口
Add = '/pro/settlement/add', Add = '/pro/settlement/add',
//根据id查询详情 //根据id查询详情
GetItem = '/pro/settlement/findById', GetItem = '/pro/settlement/findById',
//修改接口 //修改接口
update = '/pro/settlement/update-settlement', update = '/pro/settlement/update-settlement',
//根据id删除 //根据id删除
deleteItem = '/pro/settlement/byid-del', deleteItem = '/pro/settlement/byid-del',
//审核接口 //审核接口
audit = '/pro/settlement/byId-examine', audit = '/pro/settlement/byId-examine',
//删除列表接口 //删除列表接口
deleteList = '/pro/settlement/del', deleteList = '/pro/settlement/del',
} }
export const getSettlementManageList = (params?: ProjectParams) => export const getSettlementManageList = (params?: ProjectParams) =>
defHttp.post<ProjectParams>({url: Api.GetList, data: params}); defHttp.post<ProjectParams>({ url: Api.GetList, data: params });
export const addItem = (params?: any) => export const addItem = (params?: any) =>
defHttp.post<ProjectModel>({ defHttp.post<ProjectModel>({
url: Api.Add, url: Api.Add,
data: params, data: params,
headers: { headers: {
'Content-Type': 'application/json;charset=UTF-8', 'Content-Type': 'application/json;charset=UTF-8',
}, },
}); });
//根据id查询详情 //根据id查询详情
export const getItem = (params?: any) => export const getItem = (params?: any) =>
defHttp.get<ProjectModel>({ defHttp.get<ProjectModel>({
url: Api.GetItem, url: Api.GetItem,
params, params,
}); });
/** /**
* 修改 * 修改
*/ */
export const updateItem = (params?: any) => export const updateItem = (params?: any) =>
defHttp.put<ProjectModel>({
defHttp.put<ProjectModel>({ url: Api.update,
url: Api.update, data: params.management,
data: params.management, headers: {
headers: { 'Content-Type': 'application/json;charset=UTF-8',
'Content-Type': 'application/json;charset=UTF-8', },
}, });
});
/** /**
* 根据id删除 * 根据id删除
*/ */
export const deleteOne = (params?: any) => export const deleteOne = (params?: any) =>
defHttp.delete<ProjectModel>({ defHttp.delete<ProjectModel>({
url: Api.deleteItem, url: Api.deleteItem,
params, params,
}); });
/** /**
* 审核接口 * 审核接口
*/ */
export const auditItem = (params?: any) => export const auditItem = (params?: any) =>
defHttp.get<ProjectModel>({ defHttp.get<ProjectModel>({
url: Api.audit, url: Api.audit,
params, params,
}); });
/** /**
* deleteList * deleteList
*/ */
export const deleteList = (params?: any) => export const deleteList = (params?: any) =>
defHttp.delete<ProjectModel>({ defHttp.delete<ProjectModel>({
url: Api.deleteList, url: Api.deleteList,
params, params,
}); });
...@@ -51,7 +51,6 @@ const transform: AxiosTransform = { ...@@ -51,7 +51,6 @@ const transform: AxiosTransform = {
// 这里 code,msg 为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式 // 这里 code,msg 为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
const { code, data, msg, message } = res.data; const { code, data, msg, message } = res.data;
console.log(1);
// 这里逻辑可以根据项目进行修改 // 这里逻辑可以根据项目进行修改
const hasSuccess = const hasSuccess =
......
<template> <template>
<BasicDrawer <BasicDrawer
v-bind="$attrs" v-bind="$attrs"
@register="registerDrawer" @register="registerDrawer"
showFooter showFooter
:title="getTitle" :title="getTitle"
width="700px" width="700px"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicForm ref="formElRef" @register="registerForm"> <BasicForm ref="formElRef" @register="registerForm">
<!-- <template #menu="{ model, field }"> </template> --> <!-- <template #menu="{ model, field }"> </template> -->
...@@ -13,81 +13,95 @@ ...@@ -13,81 +13,95 @@
</BasicDrawer> </BasicDrawer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { unref, computed, onMounted, ref, reactive } from 'vue'; import { unref, computed, onMounted, ref, reactive } from 'vue';
import { BasicForm, useForm, FormActionType } from '@/components/Form'; import { BasicForm, useForm, FormActionType } from '@/components/Form';
import {getProjectSelect,addItem} from "@/api/contract/contract" import { getProjectSelect, addItem } from '@/api/contract/contract';
import { formSchema } from './project.data'; import { formSchema } from './project.data';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer'; import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
// import { addItem, updateItem } from '@/api/project/project'; // import { addItem, updateItem } from '@/api/project/project';
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true); const isUpdate = ref(true);
const detailId = ref(0); const projectId = ref(0);
const formElRef = ref<Nullable<FormActionType>>(null); const detailId = ref(0);
const stype = ref(null); const formElRef = ref<Nullable<FormActionType>>(null);
const [registerForm, { resetFields, setFieldsValue, validate ,updateSchema }] = useForm({ const stype = ref(null);
labelWidth: 90, const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
baseColProps: { span: 24 }, labelWidth: 90,
schemas: formSchema, baseColProps: { span: 24 },
showActionButtonGroup: false, schemas: formSchema,
}); showActionButtonGroup: false,
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
stype.value = await getProjectSelect();
stype.value = await getProjectSelect(); updateSchema({
updateSchema({ field: 'projectId',
field: 'projectId', componentProps: {
componentProps: { options: unref(stype),
options: unref(stype), },
},
})
resetFields();
stype.value= await getProjectSelect()
setDrawerProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
if (isUpdate.value) {
detailId.value = data.record.id;
getTitle.value = '编辑项目';
} else {
getTitle.value = '新建合同';
}
if (data.disabled == true) {
getTitle.value = '查看项目';
const formEl = unref(formElRef);
if (!formEl) return;
await formEl.setProps({
disabled: true,
}); });
} resetFields();
stype.value = await getProjectSelect();
if (unref(isUpdate)) { setDrawerProps({ confirmLoading: false });
setFieldsValue({ isUpdate.value = !!data?.isUpdate;
...data.record, console.log(data);
});
} projectId.value = data.projectId;
});
// });
const getTitle = ref('');
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
if (isUpdate.value) { if (isUpdate.value) {
values.id = detailId.value; detailId.value = data.record.id;
getTitle.value = '编辑项目';
} else {
getTitle.value = '新建合同';
}
if (data.disabled == true) {
getTitle.value = '查看项目';
const formEl = unref(formElRef);
if (!formEl) return;
await formEl.setProps({
disabled: true,
});
} }
// TODO custom api
console.log(values);
let res = await addItem(values); if (unref(isUpdate)) {
setFieldsValue({
...data.record,
});
}
if (unref(projectId)) {
console.log(projectId, 'projectId');
setFieldsValue({
projectId: Number(projectId.value),
});
updateSchema({
field: 'projectId',
componentProps: {
disabled: true,
},
});
}
});
// });
const getTitle = ref('');
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
if (isUpdate.value) {
values.id = detailId.value;
}
// TODO custom api
console.log(values);
console.log(res); let res = await addItem(values);
closeDrawer(); console.log(res);
emit('success', res);
} finally { closeDrawer();
setDrawerProps({ confirmLoading: false }); emit('success', res);
} finally {
setDrawerProps({ confirmLoading: false });
}
} }
}
</script> </script>
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
<a-button type="dashed" @click="add" preIcon="ei:plus" v-if="!disabled"> <a-button type="dashed" @click="add" preIcon="ei:plus" v-if="!disabled">
从合同中导入 从合同中导入
</a-button> </a-button>
<a-button type="dashed" @click="handleAdd" class="ml-2" preIcon="ei:plus" v-if="!disabled"> <a-button type="dashed" @click="handleAdd" class="ml-2" preIcon="ei:plus" v-if="!disabled">
新建合同 新建合同
</a-button> </a-button>
...@@ -97,7 +98,9 @@ ...@@ -97,7 +98,9 @@
name: '项目:' + source.projectName, name: '项目:' + source.projectName,
projectId: source.projectId, projectId: source.projectId,
forceRender: true, forceRender: true,
Form: useForm(Object.assign({ schemas: formSchema }, baseFormConfig) as FormProps), Form: useForm(
Object.assign({ schemas: formSchema, disabled }, baseFormConfig) as FormProps,
),
list: [], list: [],
}; };
tabsFormSchema.push(item); tabsFormSchema.push(item);
...@@ -105,7 +108,7 @@ ...@@ -105,7 +108,7 @@
for (let t = 0; t < source.engineerConList.length; t++) { for (let t = 0; t < source.engineerConList.length; t++) {
const content = source.engineerConList[t]; const content = source.engineerConList[t];
let from = useForm( let from = useForm(
Object.assign({ schemas: subFormSchema }, baseFormConfig) as FormProps, Object.assign({ schemas: subFormSchema, disabled }, baseFormConfig) as FormProps,
); );
item.list.push({ item.list.push({
name: '合同:' + content.contrcatName, name: '合同:' + content.contrcatName,
......
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
<a-button type="default" class="btn" preIcon="ri:edit-line" @click="handleEdit"> <a-button type="default" class="btn" preIcon="ri:edit-line" @click="handleEdit">
编辑项目 编辑项目
</a-button> </a-button>
<a-button type="default" class="btn" preIcon="mdi:book-add" @click="handleEdit"> <a-button type="default" class="btn" preIcon="mdi:book-add" @click="handleContent">
添加合同 添加合同
</a-button> </a-button>
<a-button type="default" class="btn" preIcon="humbleicons:upload" @click="handleEdit"> <a-button type="default" class="btn" preIcon="humbleicons:upload" @click="handleUpload">
上传附件 上传附件
</a-button> </a-button>
<a-button <a-button
...@@ -75,10 +75,15 @@ ...@@ -75,10 +75,15 @@
</Tabs> </Tabs>
</div> </div>
<projectDrawer @register="registerDrawer" @success="handleSuccess" /> <projectDrawer @register="registerDrawer" @success="handleSuccess" />
<contractDrawer @register="register2" @success="handleRegisterSuccess" />
<uploadModal @register="registerModal" @close="handleNewFile" />
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import projectDrawer from './projectDrawer.vue'; import projectDrawer from './projectDrawer.vue';
import uploadModal from './uploadModal.vue';
import { Tabs } from 'ant-design-vue'; import { Tabs } from 'ant-design-vue';
import { useModal } from '@/components/Modal';
import { getItem, deleteItem } from '@/api/project/project'; import { getItem, deleteItem } from '@/api/project/project';
import { tabList } from './project.data'; import { tabList } from './project.data';
import { ref, onMounted, provide } from 'vue'; import { ref, onMounted, provide } from 'vue';
...@@ -87,21 +92,51 @@ ...@@ -87,21 +92,51 @@
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import { router } from '@/router'; import { router } from '@/router';
import InvestmentPlan from './tabs/InvestmentPlan.vue'; import InvestmentPlan from './tabs/InvestmentPlan.vue';
import performance from './tabs/performance.vue';
import annualPlan from './tabs/annualPlan.vue';
import monthlyPlan from './tabs/monthlyPlan.vue';
import completed from './tabs/completed.vue';
import biddingPlan from './tabs/biddingPlan.vue';
import biddingManagement from './tabs/biddingManagement.vue';
import settlementManagement from './tabs/settlementManagement.vue';
import changeSignature from './tabs/changeSignature.vue';
import potentialSafety from './tabs/potentialSafety.vue';
import safetyEducation from './tabs/safetyEducation.vue';
import contract from './tabs/contract.vue';
import annex from './tabs/annex.vue';
import updateRecords from './tabs/updateRecords.vue';
const [registerDrawer, { openDrawer }] = useDrawer();
const [register2, { openDrawer: openDrawer2 }] = useDrawer();
const [registerModal, { openModal: openModal }] = useModal();
import contractDrawer from '@/views/contract/contractDrawer.vue';
const tabs = { const tabs = {
InvestmentPlan, InvestmentPlan,
performance,
annualPlan,
monthlyPlan,
completed,
biddingPlan,
biddingManagement,
settlementManagement,
changeSignature,
potentialSafety,
safetyEducation,
contract,
annex,
updateRecords,
}; };
const TabPane = Tabs.TabPane; const TabPane = Tabs.TabPane;
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const [registerDrawer, { openDrawer }] = useDrawer();
let detail = ref<any>({}); let detail = ref<any>({});
let detailId = ref<any>(0); let detailId = ref<any>(0);
const activeKey = ref('1'); const activeKey = ref('1');
onMounted(async () => { // onMounted(async () => {
const route = useRoute(); const route = useRoute();
detailId.value = route.query.id; // 获取名为id的参数 detailId.value = route.query.id; // 获取名为id的参数
provide('detailId', detailId.value); provide('detailId', detailId.value);
await handleDetail(); handleDetail();
}); // });
function handleEdit() { function handleEdit() {
openDrawer(true, { openDrawer(true, {
...@@ -109,6 +144,20 @@ ...@@ -109,6 +144,20 @@
isUpdate: true, isUpdate: true,
}); });
} }
function handleContent() {
openDrawer2(true, {
projectId: detailId.value,
isUpdate: false,
});
}
function handleUpload() {
openModal(true, {
projectId: detailId.value,
});
}
async function handleRegisterSuccess(params: any) {
// handleNew(params);
}
async function handleSuccess(record: any) { async function handleSuccess(record: any) {
// detail.value = record; // detail.value = record;
await handleDetail(); await handleDetail();
......
...@@ -402,66 +402,66 @@ export const tabList = [ ...@@ -402,66 +402,66 @@ export const tabList = [
{ {
key: '2', key: '2',
tab: '计划完成情况', tab: '计划完成情况',
component: 'InvestmentPlan', component: 'performance',
}, },
{ {
key: '3', key: '3',
tab: '年度资金计划', tab: '年度资金计划',
component: 'InvestmentPlan', component: 'annualPlan',
}, },
{ {
key: '4', key: '4',
tab: '月度资金计划', tab: '月度资金计划',
component: 'InvestmentPlan', component: 'monthlyPlan',
}, },
{ {
key: '5', key: '5',
tab: '已竣工验收项目陈欠资金计划', tab: '已竣工验收项目陈欠资金计划',
component: 'InvestmentPlan', component: 'completed',
}, },
{ {
key: '6', key: '6',
tab: '招标计划', tab: '招标计划',
component: 'InvestmentPlan', component: 'biddingPlan',
}, },
{ {
key: '7', key: '7',
tab: '招标管理', tab: '招标管理',
component: 'InvestmentPlan', component: 'biddingManagement',
}, },
{ {
key: '8', key: '8',
tab: '结算管理', tab: '结算管理',
component: 'InvestmentPlan', component: 'settlementManagement',
}, },
{ {
key: '9', key: '9',
tab: '变更签证管理', tab: '变更签证管理',
component: 'InvestmentPlan', component: 'changeSignature',
}, },
{ {
key: '10', key: '10',
tab: '安全隐患管理', tab: '安全隐患管理',
component: 'InvestmentPlan', component: 'potentialSafety',
}, },
{ {
key: '11', key: '11',
tab: '安全教育培训', tab: '安全教育培训',
component: 'InvestmentPlan', component: 'safetyEducation',
}, },
{ {
key: '12', key: '12',
tab: '合同管理', tab: '合同管理',
component: 'InvestmentPlan', component: 'contract',
}, },
{ {
key: '13', key: '13',
tab: '附件记录', tab: '附件记录',
component: 'InvestmentPlan', component: 'annex',
}, },
{ {
key: '14', key: '14',
tab: '更新记录', tab: '更新记录',
component: 'InvestmentPlan', component: 'updateRecords',
}, },
]; ];
<template>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" preIcon="mdi:plus" @click="handleCreate"> 新增项目 </a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'projectName'">
<Tag color="warning" v-if="record.isReserveProject == 'true'"> 储备 </Tag>
{{ record.projectName }}
</template>
<template v-if="column.key === 'constructionMode'">
<Tag color="processing">
{{ record.constructionMode }}
</Tag>
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '编辑',
onClick: handleEdit.bind(null, record, false),
},
{
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</template>
</template>
</BasicTable>
<projectDrawer @register="registerDrawer" @success="handleSuccess" />
</template>
<script lang="ts" setup>
import { Tag } from 'ant-design-vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage, deleteItem, getItem } from '@/api/project/project';
import { columns, searchFormSchema } from '../project.data';
import { Row, Col } from 'ant-design-vue';
import projectDrawer from '../projectDrawer.vue';
import { useDrawer } from '@/components/Drawer';
import { useRouter } from 'vue-router';
const { push } = useRouter();
const [registerDrawer, { openDrawer }] = useDrawer();
const prefixCls = 'list-basic';
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleCreate() {
openDrawer(true, {
isUpdate: false,
});
}
function handleDetail(record: any) {
push({
path: '/project/detail',
query: {
id: record.id,
},
});
}
async function handleEdit(record: Recordable, disabled: boolean) {
// let res = await getItem({ id: record.id });
// console.log(res);
// res[0]
openDrawer(true, {
record,
isUpdate: true,
disabled,
});
}
function handleDelete(record: Recordable) {
deleteItem({ id: record.id });
reload();
}
function handleSuccess() {
reload();
}
</script>
<style lang="less" scoped>
.list-basic {
&__top {
height: 150px;
padding: 35px;
background-color: @component-background;
text-align: center;
position: relative;
margin: 16px;
margin-bottom: 0;
&-img {
width: 58px;
height: 54px;
position: absolute;
left: 10%;
}
&-col {
// &:not(:last-child) {
// border-right: 1px dashed @border-color-base;
// }
.title {
margin-bottom: 12px;
color: #5d5d5d;
font-size: 18px;
text-align: center;
line-height: 22px;
}
.content {
display: flex;
align-items: flex-end;
width: 100%;
justify-content: center;
}
p {
margin: 0;
color: @text-color-base;
font-size: 40px;
color: #225bde;
font-family: DINAlternate;
font-weight: 700;
margin-bottom: -7px;
}
span {
text-align: center;
display: flex;
align-items: flex-end;
justify-content: center;
color: #878787;
}
}
}
&__list {
&-header {
color: #333;
font-weight: bold;
}
}
&__content {
background-color: @component-background;
.list {
position: relative;
}
.icon {
font-size: 40px !important;
}
.extra {
position: absolute;
top: 20px;
right: 15px;
color: @primary-color;
font-weight: normal;
cursor: pointer;
}
.description {
display: inline-block;
width: 40%;
}
.info {
display: inline-block;
width: 30%;
text-align: center;
div {
display: inline-block;
padding: 0 20px;
span {
display: block;
}
}
}
.progress {
display: inline-block;
width: 15%;
vertical-align: top;
}
}
}
</style>
...@@ -9,7 +9,10 @@ ...@@ -9,7 +9,10 @@
:actions="[ :actions="[
{ {
label: '查看详情', label: '查看详情',
onClick: handleDetail.bind(null, record), onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.reviewStatus == '1';
},
}, },
]" ]"
/> />
...@@ -21,17 +24,20 @@ ...@@ -21,17 +24,20 @@
import { columns, searchFormSchema } from './data'; import { columns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table'; import { BasicTable, useTable, TableAction } from '@/components/Table';
import { inject } from 'vue'; import { inject } from 'vue';
import { getListByPage } from '@/api/project/project'; import { getEngineeringList } from '@/api/project/engineeringProject';
import { router } from '@/router';
let detailId = inject('detailId'); let detailId = inject('detailId');
console.log('detailId', detailId); console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({ const [registerTable, { reload }] = useTable({
api: getListByPage, api: getEngineeringList,
columns, columns,
formConfig: { formConfig: {
labelWidth: 120, labelWidth: 120,
schemas: searchFormSchema, schemas: searchFormSchema,
}, },
searchInfo: {}, searchInfo: {
projectId: detailId,
},
useSearchForm: true, useSearchForm: true,
showTableSetting: false, showTableSetting: false,
bordered: true, bordered: true,
...@@ -44,4 +50,31 @@ ...@@ -44,4 +50,31 @@
fixed: undefined, fixed: undefined,
}, },
}); });
function handleDetail(record: Recordable, disabled: number) {
if (record.planType === '工程') {
router.push({
path: '/engineeringProject/engineeringEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
} else if (record.planType === '承建') {
router.push({
path: '/engineeringProject/constructionEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
} else if (record.planType === '储备') {
router.push({
path: '/engineeringProject/reserveEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
}
</script> </script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '下载',
onClick: handleDown.bind(null, record),
},
{
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
ifShow: (_action) => {
return record.reviewStatus == null;
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { annexColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getAnnexList, deleteAnnex } from '@/api/project/project';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getAnnexList,
columns: annexColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
proId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDown(record: Recordable) {
window.open(record.url);
}
function handleDelete(record: Recordable) {
deleteAnnex({ id: record.id });
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { annualPlanColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { inject } from 'vue';
import { getAnnualPlanList } from '@/api/project/annualPlan';
import { router } from '@/router';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getAnnualPlanList,
columns: annualPlanColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/annualPlan/annualPlanEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { biddingManagementColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage } from '@/api/project/biddingManagement';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns: biddingManagementColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/biddingManagement/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { biddingPlanColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage } from '@/api/project/biddingPlan';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns: biddingPlanColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/biddingPlan/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { changeSignatureColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getSettlementManageList } from '@/api/changeSignatrue/changeSignatrue';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getSettlementManageList,
columns: changeSignatureColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/changeSignature/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { completedColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { inject } from 'vue';
import { getCompletedList } from '@/api/project/completed';
import { router } from '@/router';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getCompletedList,
columns: completedColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/completed/completedEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { contractColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getContractListPage } from '@/api/contract/contract';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getContractListPage,
columns: contractColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/contract/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
This diff is collapsed.
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.reviewStatus == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { monthlyPlanColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { inject } from 'vue';
import { getAnnualPlanList } from '@/api/project/annualPlan';
import { router } from '@/router';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getAnnualPlanList,
columns: monthlyPlanColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/monthlyPlan/monthlyPlanEdit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'completionResult'">
<Tag color="processing">
{{ record.completionResult == 1 ? '已审核' : '未审核' }}
</Tag>
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { performanceColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage } from '@/api/project/performance';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns: performanceColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/performance/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { potentialSafetyColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage } from '@/api/project/saftyManage';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns: potentialSafetyColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/potentialSafety/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { safetyEducationColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getListByPage } from '@/api/project/safetyEducation';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getListByPage,
columns: safetyEducationColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/safetyEducation/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record, index }">
<template v-if="column.key === 'serialNumber'">
{{ index + 1 }}
</template>
<template v-if="column.key === 'tenderYear'">
{{ record.tenderYear + '年' + record.biddingQuarter + '季度' }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script lang="ts" setup>
import { settlementManagementColumns, searchFormSchema } from './data';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { getSettlementManageList } from '@/api/project/settlementManage';
import { inject } from 'vue';
import { router } from '@/router';
import { Tag } from 'ant-design-vue';
let detailId = inject('detailId');
console.log('detailId', detailId);
const [registerTable, { reload }] = useTable({
api: getSettlementManageList,
columns: settlementManagementColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
searchInfo: {
projectId: detailId,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 200,
title: '操作',
dataIndex: 'action',
// slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleDetail(record: Recordable, disabled: number) {
router.push({
path: '/settlementManagement/edit',
query: {
id: record.id,
disabled: String(disabled),
},
});
}
</script>
<template>
<pageCard>
<Timeline>
<Timeline.Item></Timeline.Item>
<Timeline.Item></Timeline.Item>
<Timeline.Item></Timeline.Item>
<Timeline.Item></Timeline.Item>
</Timeline>
</pageCard>
</template>
<script lang="ts" setup>
import PageCard from '@/components/Page/src/PageCard.vue';
import { Timeline } from 'ant-design-vue';
</script>
<template>
<BasicModal
v-bind="$attrs"
@register="register"
title="上传附件"
:minHeight="30"
okText="保存"
@ok="handleSubmit"
@visible-change="handleVisibleChange"
>
<BasicForm @register="registerForm" :model="modelRef" />
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, nextTick, reactive } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, FormSchema, useForm } from '@/components/Form';
import { uploadApi } from '@/api/sys/upload';
import { AnnexAdd } from '@/api/project/project';
const projectId = ref(0);
const schemas: FormSchema[] = [
{
field: 'url',
component: 'Upload',
label: '上传附件',
required: true,
componentProps: {
api: uploadApi,
resultField: 'data.data.fullPath',
accept: ['rar', 'zip', 'doc', 'docx', 'pdf'],
multiple: false,
maxSize: 20,
maxNumber: 1,
name: 'multipartFile',
},
colProps: {
span: 24,
},
},
{
field: 'remarks',
label: '备注内容',
required: true,
component: 'InputTextArea',
componentProps: {
maxlength: 300,
showCount: true,
},
colProps: { span: 24 },
},
];
const props = defineProps({
userData: { type: Object },
});
const emit = defineEmits(['close']);
const modelRef = ref({});
const [
registerForm,
{
getFieldsValue,
validate,
// // setFieldsValue,
// // setProps
},
] = useForm({
labelWidth: 120,
schemas,
showActionButtonGroup: false,
actionColOptions: {
span: 24,
},
});
const [register, { closeModal }] = useModalInner((data) => {
data && onDataReceive(data);
});
function onDataReceive(data) {
console.log('Data Received', data);
projectId.value = data.projectId;
console.log(projectId.value);
}
function handleVisibleChange(v) {
v && props.userData && nextTick(() => onDataReceive(props.userData));
}
function handleSubmit() {
validate().then(async () => {
const value = getFieldsValue();
let url: String = value.url[0];
let res = await AnnexAdd({
url,
remark: value.remarks,
proId: projectId.value,
});
// console.log(res);
emit('close');
closeModal();
});
}
</script>
import { BasicColumn, FormSchema } from '@/components/Table'; import { BasicColumn, FormSchema } from '@/components/Table';
export const formSchema: FormSchema[] = [ export const formSchema: FormSchema[] = [
{ {
field: 'fillingPeriod', field: 'fillingPeriod',
labelWidth: '140px', labelWidth: '140px',
label: '填报周期', label: '填报周期',
required: true, required: true,
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
placeholder: '年份', placeholder: '年份',
picker: 'year', picker: 'year',
valueFormat: 'YYYY', valueFormat: 'YYYY',
format: 'YYYY', format: 'YYYY',
style: { style: {
width: '100%', width: '100%',
}, },
},
},
{
field: 'trainingTime',
labelWidth: '140px',
label: '培训时间',
required: true,
component: 'DatePicker',
componentProps: {
placeholder: '选择培训时间',
style: { width: '100%' },
valueFormat: 'YYYY-MM-DD',
format: 'YYYY-MM-DD',
},
},
{
label: '培训主题',
labelWidth: '140px',
field: 'trainingTheme',
required: true,
component: 'Input',
},
{
label: '培训类型',
labelWidth: '140px',
field: 'trainingType',
required: true,
component: 'Select',
componentProps: {
options: [
{
label: '类型一',
value: '类型一',
}, },
}, {
{ label: '类型二',
field: 'trainingTime', value: '类型二',
labelWidth: '140px',
label: '培训时间',
required: true,
component: 'DatePicker',
componentProps: {
placeholder: '选择培训时间',
style: { width: '100%' },
valueFormat: 'YYYY-MM-DD',
format: 'YYYY-MM-DD',
}, },
}, ],
{ },
label: '培训主题', },
labelWidth: '140px', {
field: 'trainingTheme', label: '培训形式',
required: true, labelWidth: '140px',
component: 'Input', field: 'trainingFormat',
}, required: true,
{ component: 'Input',
label: '培训类型', },
labelWidth: '140px', {
field: 'trainingType', field: 'trainingMeet',
required: true, labelWidth: '140px',
component: 'Select', label: '培训会议',
componentProps: { required: true,
options: [ component: 'Input',
{ },
label: '类型一', {
value: '类型一', field: 'trainers',
}, labelWidth: '140px',
{ label: '培训人员',
label: '类型二', required: true,
value: '类型二', component: 'Select',
}, componentProps: {
], options: [
{
label: '人员一',
value: '人员一',
}, },
}, {
{ label: '人员二',
label: '培训形式', value: '人员二',
labelWidth: '140px',
field: 'trainingFormat',
required: true,
component: 'Input'
},
{
field: 'trainingMeet',
labelWidth: '140px',
label: '培训会议',
required: true,
component: 'Input'
},
{
field: 'trainers',
labelWidth: '140px',
label: '培训人员',
required: true,
component: 'Select',
componentProps: {
options: [
{
label: '人员一',
value: '人员一',
},
{
label: '人员二',
value: '人员二',
},
],
}, },
}, ],
{ },
label: '学时(合计)', },
labelWidth: '140px', {
field: 'knowledge', label: '学时(合计)',
required: true, labelWidth: '140px',
component: 'Input', field: 'knowledge',
}, required: true,
{ component: 'Input',
label: '人数(人)', },
labelWidth: '140px', {
field: 'numberOfPeople', label: '人数(人)',
required: true, labelWidth: '140px',
component: 'Input', field: 'numberOfPeople',
}, required: true,
{ component: 'Input',
label: '备注', },
labelWidth: '140px', {
field: 'remark', label: '备注',
required: true, labelWidth: '140px',
component: 'Input', field: 'remark',
}, required: true,
component: 'Input',
},
]; ];
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '填报周期', title: '填报周期',
dataIndex: 'fillingPeriod', dataIndex: 'fillingPeriod',
width: 150, width: 150,
}, },
{ {
title: '培训时间', title: '培训时间',
dataIndex: 'trainingTime', dataIndex: 'trainingTime',
width: 150, width: 150,
}, },
{ {
title: '培训主题', title: '培训主题',
dataIndex: 'trainingTheme', dataIndex: 'trainingTheme',
width: 150, width: 150,
}, },
{ {
title: '培训类型', title: '培训类型',
dataIndex: 'trainingType', dataIndex: 'trainingType',
width: 180, width: 180,
}, },
{ {
title: '培训形式', title: '培训形式',
dataIndex: 'trainingFormat', dataIndex: 'trainingFormat',
width: 180, width: 180,
}, },
{ {
title: '计划会议', title: '计划会议',
dataIndex: 'trainingMeet', dataIndex: 'trainingMeet',
width: 180, width: 180,
}, },
{ {
title: '培训人员', title: '培训人员',
dataIndex: 'trainers', dataIndex: 'trainers',
width: 180, width: 180,
}, },
{ {
title: '学识(合计)', title: '学识(合计)',
dataIndex: 'knowledge', dataIndex: 'knowledge',
width: 180, width: 180,
}, },
{ {
title: '人数', title: '人数',
dataIndex: 'numberOfPeople', dataIndex: 'numberOfPeople',
width: 180, width: 180,
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'remark', dataIndex: 'remark',
width: 180, width: 180,
}, },
]; ];
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [
{ {
field: 'fillingPeriod', field: 'fillingPeriod',
label: '', label: '',
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
placeholder: '年份', placeholder: '年份',
picker: 'year', picker: 'year',
valueFormat: 'YYYY', valueFormat: 'YYYY',
format: 'YYYY', format: 'YYYY',
style: { style: {
width: '100%', width: '100%',
}, },
}, },
colProps: { span: 4 }, colProps: { span: 4 },
}, },
{ {
field: 'trainers', field: 'trainers',
label: '', label: '',
component: 'Select', component: 'Select',
componentProps: { componentProps: {
options: [ options: [
{ label: '人员一', value: '人员一' }, { label: '人员一', value: '人员一' },
{ label: '人员二', value: '人员二' }, { label: '人员二', value: '人员二' },
], ],
placeholder: '培训人员', placeholder: '培训人员',
}, },
colProps: { span: 4 }, colProps: { span: 4 },
}, },
]; ];
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment