Browse Source

完成周报和合同开发

master
zhouhaibin 1 year ago
parent
commit
fc6d88eeba
  1. 109
      src/views/ProcessApprovalSubPage/ProjectArchiveApproval.vue
  2. 42
      src/views/ProcessApprovalSubPage/component/ApprovalDetails.vue
  3. 66
      src/views/ProcessApprovalSubPage/component/ApprovalFromPage.vue
  4. 30
      src/views/ProcessApprovalSubPage/component/ApprovalPageModel.vue
  5. 42
      src/views/ProcessApprovalSubPage/component/PlaninfoDetails.vue
  6. 75
      src/views/ProcessApprovalSubPage/component/ProjectDetails.vue
  7. 61
      src/views/ProcessApprovalSubPage/component/UploadfileDetail.vue
  8. 164
      src/views/ProcessApprovalSubPage/initiatesProjectsApproval.vue
  9. 22
      src/views/ProcessApprovalSubPage/initiatesProjectsApproval/childProjectsApproval.vue
  10. 189
      src/views/ProcessApprovalSubPage/initiatesProjectsApproval/index.vue
  11. 188
      src/views/ProcessApprovalSubPage/planFileApproval.vue
  12. 191
      src/views/ProcessApprovalSubPage/planFileApproval/index.vue
  13. 144
      src/views/ProcessApprovalSubPage/projectPlanApproval.vue
  14. 123
      src/views/ProcessApprovalSubPage/projectPlanApproval/index.vue
  15. 139
      src/views/ProcessApprovalSubPage/uploadfileApproval.vue
  16. 207
      src/views/ProcessApprovalSubPage/uploadfileApproval/index.vue
  17. 23
      src/views/Regulation/RegulationLab/RegulationLab.api.ts
  18. 70
      src/views/Regulation/RegulationLab/RegulationLab.data.ts
  19. 136
      src/views/Regulation/RegulationLab/addAndModify.vue
  20. 109
      src/views/Regulation/RegulationLab/index.vue
  21. 124
      src/views/myWork/completed/complectedDetail.vue
  22. 18
      src/views/myWork/completed/complete.data.ts
  23. 60
      src/views/myWork/completed/index.vue
  24. 37
      src/views/myWork/inComplete/inComplete.api.ts
  25. 64
      src/views/myWork/inComplete/inComplete.data.ts
  26. 54
      src/views/myWork/inComplete/index.vue
  27. 618
      src/views/projectLib/initiatesProjects/initiatesProjects.data.ts
  28. 29
      src/views/projectLib/initiatesProjects/initiatesProjects.vue
  29. 12
      src/views/projectLib/planinfoHistory/index.vue
  30. 33
      src/views/projectLib/planinfoHistory/planinfoHistory.data.ts
  31. 6
      src/views/projectLib/planinfoHistory/planinfoHistoryDetaillist.vue
  32. 10
      src/views/projectLib/planinfoHistory/planinfoHistoryDetailpage.vue
  33. 80
      src/views/projectLib/projectArchive/SubmitProjectArchive.vue
  34. 141
      src/views/projectLib/projectArchive/index.vue
  35. 22
      src/views/projectLib/projectArchive/projectArchive.api.ts
  36. 5
      src/views/projectLib/projectArchive/projectArchive.data.ts
  37. 60
      src/views/projectLib/projectContract/DetailTable.vue
  38. 16
      src/views/projectLib/projectContract/contractDetail.vue
  39. 119
      src/views/projectLib/projectContract/index.vue
  40. 26
      src/views/projectLib/projectContract/projectContract.api.ts
  41. 193
      src/views/projectLib/projectContract/projectContract.data.ts
  42. 136
      src/views/projectLib/projectContract/projectContract.vue
  43. 96
      src/views/projectLib/projectInfo/Detailpage.vue
  44. 5
      src/views/projectLib/projectInfo/batchImportProjects.vue
  45. 67
      src/views/projectLib/projectInfo/index.vue
  46. 5
      src/views/projectLib/projectInfo/projectInfo.api.ts
  47. 35
      src/views/projectLib/projectInfo/projectInfo.data.ts
  48. 82
      src/views/projectLib/projectInfo/uploadFile.vue
  49. 51
      src/views/projectLib/projectInfoHistory/Detaillist.vue
  50. 111
      src/views/projectLib/projectInfoHistory/Detailpage.vue
  51. 9
      src/views/projectLib/projectInfoHistory/index.vue
  52. 36
      src/views/projectLib/projectInfoHistory/projectInfoHistory.data.ts
  53. 3
      src/views/projectLib/projectPlan/addPlan.vue
  54. 23
      src/views/projectLib/projectPlan/addPlanFile.vue
  55. 4
      src/views/projectLib/projectPlan/elstepchild.vue
  56. 102
      src/views/projectLib/projectPlan/index.vue
  57. 61
      src/views/projectLib/projectPlan/planinfoFileDetail.vue
  58. 14
      src/views/projectLib/projectPlan/projectPlan.api.ts
  59. 374
      src/views/projectLib/projectPlan/projectPlan.data.ts
  60. 45
      src/views/projectLib/projectPlan/viewPlanDetail.vue
  61. 136
      src/views/projectLib/workReport/addModifyWorkreport.vue
  62. 101
      src/views/projectLib/workReport/index.vue
  63. 25
      src/views/projectLib/workReport/workReport.api.ts
  64. 196
      src/views/projectLib/workReport/workReport.data.ts
  65. 6
      src/views/system/dict/index.vue
  66. 12
      src/views/system/role/index.vue
  67. 50
      src/views/system/user/index.vue
  68. 210
      src/views/system/user/user.data.ts
  69. 4
      src/views/system/usersetting/BaseSetting.vue
  70. 78
      src/views/system/usersetting/UserSetting.data.ts

109
src/views/ProcessApprovalSubPage/ProjectArchiveApproval.vue

@ -0,0 +1,109 @@
<template>
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="项目入库详情" name="1">
<ProjectDetails :IsEdit="false" :projectid="projectid" />
</el-tab-pane>
<el-tab-pane label="项目监理管理资料" name="2">
<el-divider content-position="left">项目资料详情</el-divider>
<UploadfileDetail :projectid="projectid" :stage="1" />
<el-divider content-position="left">意见文件</el-divider>
<UploadfileDetail :projectid="projectid" :stage="2" />
</el-tab-pane>
<el-tab-pane label="项目计划详情" name="3">
<PlaninfoDetails :projectid="projectid" :showActionColumn="true">
<template #default="record">
<TableAction :actions="getTableAction(record)" />
</template>
</PlaninfoDetails>
</el-tab-pane>
</el-tabs>
<ApprovalDetails :processInstanceId="processInstanceId"/>
<planinfoFileDetail @register="registerFileInfo" :planinfoid="planinfoid" :taskName="taskName" :isfinish="isfinish" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref,onMounted } from 'vue';
import { useModal } from '/@/components/Modal';
import ProjectDetails from "../ProcessApprovalSubPage/component/ProjectDetails.vue"
import UploadfileDetail from "../ProcessApprovalSubPage/component/UploadfileDetail.vue"
import PlaninfoDetails from "../ProcessApprovalSubPage/component/PlaninfoDetails.vue"
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue"
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
import { ActionItem, TableAction } from '/@/components/Table';
import { getActionParam } from '../myWork/inComplete/inComplete.api';
import planinfoFileDetail from '../projectLib/projectPlan/planinfoFileDetail.vue'
import { approveProjectArchive } from "../projectLib/projectArchive/projectArchive.api"
import type { TabsPaneContext } from 'element-plus'
let emit = defineEmits(["close"])
let dataTo = defineProps(["record"])
console.log("routerouterouteroute", dataTo.record)
let projectid = dataTo.record.projectId as string
let processInstanceId = dataTo.record.processInstanceId
let stage = dataTo.record.stage as string
let taskid = dataTo.record.taskId as string
let ApprovalFromPageRef = ref()
let showApprovalForm = ref()
let planinfoid = ref()
let taskName = ref()
let isfinish = ref()
let resButton = ref({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
onMounted(async () => {
resButton.value = await getActionParam({ projectid: projectid, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.value.showApprovalForm
})
const [registerFileInfo, { openModal: openFileInfo }] = useModal();//
console.log("dataTo",dataTo)
const activeName = ref('1')
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
}
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
}
function handleDetail(record) {
console.log("rrrrrrrr", record)
planinfoid.value = record.record.id
taskName.value = record.record.taskName
isfinish.value = record.record.isfinish
console.log("rrrrrrrr", record, record.id, record.taskName, planinfoid.value, taskName.value)
openFileInfo()
}
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectid)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", stage)
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approveProjectArchive(params)
console.log("提交成功!", res)
emit("close")
}
}
function exit() {
emit("close")
}
</script>
<style scoped></style>

42
src/views/ProcessApprovalSubPage/component/ApprovalDetails.vue

@ -0,0 +1,42 @@
<template>
<div>
<el-divider content-position="left">项目审批详情</el-divider>
<BasicTable @register="registerTable" />
</div>
</template>
<script lang="ts" name="ApprovalDetails" setup>
//ts
import { defineProps } from 'vue';
import { BasicTable } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { approveStartProcessColumns } from "../../myWork/inComplete/inComplete.data";
import { queryProcessInfo } from '../../myWork/inComplete/inComplete.api';
let dataTo = defineProps(["processInstanceId","stage","projectid"])
//
const { tableContext } = useListPage({
tableProps: {
size: 'small',//
title: '流程审批情况',
api: queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
if(dataTo.stage){
params.stage = dataTo.stage
params.projectid = dataTo.projectid
}else{
params.processInstanceId = dataTo.processInstanceId
}
},
},
});
//
const [registerTable] = tableContext;
</script>
<style scoped></style>

66
src/views/ProcessApprovalSubPage/component/ApprovalFromPage.vue

@ -0,0 +1,66 @@
<template>
<el-divider content-position="left" v-if="showApprovalForm">项目审批</el-divider>
<div v-if="showApprovalForm">
<BasicForm @register="registerApprovalForm" @submit="handleSubmit" />
</div>
</template>
<script lang="ts" name="ApprovalFromPage" setup>
//ts
import { defineProps,onUpdated } from 'vue';
import { useForm, BasicForm } from '/@/components/Form';
import { approvalformSchemas } from '../../myWork/inComplete/inComplete.data'
let emit = defineEmits(["submit","exit"])
onUpdated(()=>{
console.log("我更新了",dataTo)
updateSchema({
field: 'flag',
componentProps: {
options: dataTo.buttons,
}
})
})
let dataTo = defineProps(["showApprovalForm","buttons"])
//
/**
* 审批表单
*/
const [registerApprovalForm, { validate: validateApprovalForm, getFieldsValue: getFieldsValueApprovalForm, updateSchema }] = useForm({
//
schemas: approvalformSchemas,
//
// submitButtonOptions: { text: '', preIcon: '' },
//
resetButtonOptions: { text: '取消', preIcon: '' },
// showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
submitButtonOptions: { text: '提交', preIcon: '' },
// 24 0-24
actionColOptions: { span: 14 },
//
// submitFunc: customSubmitFunc,
//
resetFunc: customResetFunc,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
})
async function handleSubmit() {
emit("submit");
}
async function customResetFunc() {
emit("exit")
}
defineExpose({validateApprovalForm,getFieldsValueApprovalForm})
</script>
<style scoped></style>

30
src/views/ProcessApprovalSubPage/component/ApprovalPageModel.vue

@ -0,0 +1,30 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" width="1200px" :showOkBtn="false">
<initiatesProjectsApproval :record="record" @close="exit" v-if="record.stage==1"/>
<uploadfileApproval :record="record" @close="exit" v-if="record.stage==2"/>
<projectPlanApproval :record="record" @close="exit" v-if="record.stage==3"/>
<planFileApproval :record="record" @close="exit" v-if="record.stage==4"/>
<ProjectArchiveApproval :record="record" @close="exit" v-if="record.stage==5"/>
</BasicModal>
</template>
<script lang="ts" name="ApprovalPageModel" setup>
import { BasicModal, useModalInner } from '/@/components/Modal';
import initiatesProjectsApproval from "../initiatesProjectsApproval.vue"
import planFileApproval from '../planFileApproval.vue'
import uploadfileApproval from '../uploadfileApproval.vue'
import projectPlanApproval from '../projectPlanApproval.vue'
import ProjectArchiveApproval from '../ProjectArchiveApproval.vue'
const [registerModal, { closeModal }] = useModalInner();
defineProps(["record"])
let emit = defineEmits(["close"])
function exit(){
closeModal()
console.log("ApprovalPageModel")
emit("close")
}
</script>
<style></style>

42
src/views/ProcessApprovalSubPage/component/PlaninfoDetails.vue

@ -0,0 +1,42 @@
<template>
<div>
<el-divider content-position="left">项目计划阶段详情</el-divider>
<BasicTable @register="registerPlanTable">
<template #action="{ record }" v-if="showActionColumn">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<slot :record="record"></slot>
</template>
</BasicTable>
</div>
</template>
<script lang="ts" name="PlaninfoDetails" setup>
//ts
import { defineProps } from 'vue';
import { BasicTable } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { PlaninfoColumn } from '../../projectLib/projectPlan/projectPlan.data';
import { queryPlanInfoMainTimeline } from '../../projectLib/projectPlan/projectPlan.api'
let dataTo = defineProps(["showActionColumn", "projectid"])
//
// table
const { tableContext: tableContextPlan } = useListPage({
tableProps: {
size: 'small',//
title: '项目计划阶段详情',
api: queryPlanInfoMainTimeline,
columns: PlaninfoColumn,
showActionColumn: dataTo.showActionColumn,
useSearchForm: false,
beforeFetch(params) {
params.projectid = dataTo.projectid;
},
},
});
// BasicTable
const [registerPlanTable] = tableContextPlan;
</script>
<style scoped></style>

75
src/views/ProcessApprovalSubPage/component/ProjectDetails.vue

@ -0,0 +1,75 @@
<template>
<div>
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
</div>
</template>
<script lang="ts" name="ProjectDetails" setup>
//ts
import { defineProps, defineExpose,watchEffect } from 'vue';
import { useForm, BasicForm } from '/@/components/Form';
import { queryProjectInfoById } from '../../projectLib/projectInfo/projectInfo.api'
import { formSchemas } from '../../projectLib/projectInfo/projectInfo.data';
import { getUserInfoByid } from '../../projectLib/initiatesProjects/initiatesProjects.api'
import { onMounted } from 'vue';
let dataTo = defineProps(["projectid", "IsEdit"])
/**
* 项目详情展示表单
*/
const [registerProjectForm, { validate: validateProjectForm, setFieldsValue, getFieldsValue: getFieldsValueProjectForm, setProps, updateSchema: updateProjectSchema }] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled:true
});
onMounted(async () => {
console.log("ProjectDetailsresout",dataTo,dataTo.IsEdit)
let param: any = {
projectid: dataTo.projectid
}
let res = await queryProjectInfoById(param)
console.log("结果是", res)
setFieldsValue(res)
for (let key in res) {
if (key.indexOf("Contactor") != -1 && res[key] != null) {
let userid = res[key]
let resout = await getUserInfoByid({ id: userid })
console.log(key, resout.realname)
updateProjectSchema({
field: key,
componentProps: {
options: [{
value: userid,
label: resout.realname
}
],
}
})
}
}
})
watchEffect(()=>{
console.log("watchEffect",dataTo)
if(dataTo.IsEdit){
setProps({disabled:false})
}
})
defineExpose({getFieldsValueProjectForm,validateProjectForm,IsEdit:dataTo })
</script>
<style scoped></style>

61
src/views/ProcessApprovalSubPage/component/UploadfileDetail.vue

@ -0,0 +1,61 @@
<template>
<div>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
</div>
</template>
<script lang="ts" name="ApprovalDetails" setup>
//ts
import { defineProps } from 'vue';
import { BasicTable, ActionItem, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { resourcetableColumns } from '../../projectLib/projectInfo/projectInfo.data';
import { uploacFilePageList } from '../../projectLib/projectInfo/projectInfo.api'
import { downloadFile } from "../../../api/common/api"
let dataTo = defineProps(["stage","projectid"])
//
//table
const { tableContext: resourceTableContext } = useListPage({
tableProps: {
size: 'small',//
api: uploacFilePageList,
columns: resourcetableColumns,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: "right",
},
beforeFetch(params) {
params.stage = dataTo.stage,
params.projectid = dataTo.projectid
},
},
});
const [registerResourceTable] = resourceTableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
}
];
}
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
</script>
<style scoped></style>

164
src/views/ProcessApprovalSubPage/initiatesProjectsApproval.vue

@ -0,0 +1,164 @@
<template>
<!-- 自定义表单 -->
<div v-if="!IsbatchImportProjects">
<ProjectDetails :IsEdit="resButton.IsEdit" :projectid="projectid" ref="ProjectDetailsRef" />
</div>
<div v-if="IsbatchImportProjects">
<el-divider content-position="left">批量导入项目入库详情</el-divider>
<BasicTable @register="registerbatchImportTable">
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
<BasicModal @register="registeProjectrModal" title="项目信息详情" width="1200px" :showOkBtn="false">
<childProjectsApproval :projectid="proid" :IsEdit="proIsEdit" @close="closeProjectrModal" />
</BasicModal>
</template>
<script lang="ts" name="initiatesProjectsApproval" setup>
import { ref, onMounted } from 'vue'
import { columns } from '../projectLib/projectInfo/projectInfo.data';
import { getIsbatchImportProjects, batchImportProjectPageListByInstid } from '../projectLib/projectInfo/projectInfo.api'
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { submitTask, getActionParam } from '../myWork/inComplete/inComplete.api';
import { BasicModal, useModal } from '/@/components/Modal';
import childProjectsApproval from '../ProcessApprovalSubPage/initiatesProjectsApproval/childProjectsApproval.vue'
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ProjectDetails from "../ProcessApprovalSubPage/component/ProjectDetails.vue"
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
let dataTo = defineProps(["record"])
let emit = defineEmits(["close"])
console.log("routerouterouteroute", dataTo.record)
let processInstanceId = dataTo.record.processInstanceId
let projectid = dataTo.record.projectId
let taskid = dataTo.record.taskId
let ProjectDetailsRef = ref()
let ApprovalFromPageRef = ref()
let IsbatchImportProjects = ref<Boolean>(false);
let proIsEdit = ref<Boolean>(false);
let showApprovalForm = ref()
let resButton = ref({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
let proid = ref()
onMounted(async () => {
//id
IsbatchImportProjects.value = await getIsbatchImportProjects({ processInstanceId: processInstanceId })
if (IsbatchImportProjects.value) {
//
reloadBatchImportTable()
}
resButton.value = await getActionParam({ projectid: projectid, stage: "1", taskId: taskid, procesType: dataTo.record.procesType })
console.log("resButton", resButton.value)
showApprovalForm.value = resButton.value.showApprovalForm
})
/**
* 批量导入表格
*/
const { tableContext: tableContextBatchImportTable } = useListPage({
tableProps: {
size: 'small',//
title: '入库项目',
api: batchImportProjectPageListByInstid,
columns: columns,
showActionColumn: true,
useSearchForm: false,
beforeFetch(params) {
params.processInstanceId = processInstanceId
},
},
});
//
const [registerbatchImportTable, { reload: reloadBatchImportTable, getDataSource }] = tableContextBatchImportTable;
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
onClick: handleDetailpage.bind(null, record),
},
{
label: '修改',
onClick: handleModifyDetailpage.bind(null, record),
ifShow: () => {
return resButton.value.IsEdit
}
},
];
}
const [registeProjectrModal, { openModal: openModalProjectr, closeModal: closeModalProjectr }] = useModal();//
function handleDetailpage(record) {
proIsEdit.value = false
proid.value = record.id
openModalProjectr()
}
function handleModifyDetailpage(record) {
proIsEdit.value = resButton.value.IsEdit == true ? true : false
proid.value = record.id
openModalProjectr()
}
function closeProjectrModal() {
closeModalProjectr()
console.log("qqqqqqqqqqq")
reloadBatchImportTable()
}
/**
* 提交
*/
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
let projectform = await ProjectDetailsRef.value.getFieldsValueProjectForm()
if (!IsbatchImportProjects.value) {
let param = {
flag: approvalform.flag,
projectid: projectid,
comment: approvalform.comment,
taskId: taskid,
stage: dataTo.record.stage,
projectInfo: projectform,
isEdit: resButton.value.IsEdit == true ? "1" : "0"
}
if (await ApprovalFromPageRef.value.validateApprovalForm() && await ProjectDetailsRef.value.validateProjectForm()) {
console.log("提交成功!1")
submitTask(param)
console.log("提交成功!2", param, ProjectDetailsRef.value.IsEdit)
emit("close")
}
} else {
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
console.log("提交成功!3")
let projectArr = await getDataSource()
let param = {
flag: approvalform.flag,
projectid: projectid,
comment: approvalform.comment,
taskId: taskid,
stage: dataTo.record.stage,
isEdit: resButton.value.IsEdit == true ? "1" : "0",
projectArr: projectArr
}
let res = await submitTask(param)
console.log("提交成功!", res)
emit("close")
}
}
}
function exit(){
emit("close")
}
</script>
<style></style>

22
src/views/ProcessApprovalSubPage/initiatesProjectsApproval/childProjectsApproval.vue

@ -2,23 +2,17 @@
<!-- 自定义表单 -->
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" @submit="handleSubmit" />
<!-- <el-divider content-position="left">项目审批详情</el-divider>
<BasicTable @register="registerTable" />
<el-divider content-position="left" v-if="showApprovalForm">项目审批</el-divider>
<div v-if="showApprovalForm">
<BasicForm @register="registerApprovalForm" @submit="handleSubmit" />
</div> -->
</template>
<script lang="ts" name="initiatesProjectsApproval" setup>
import { onMounted, reactive, onUpdated } from 'vue'
import { onMounted, onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas } from '../../projectLib/projectInfo/projectInfo.data';
import { queryProjectInfoById } from '../../projectLib/projectInfo/projectInfo.api'
import { submitTask, modifyProjectInfo } from '../../myWork/inComplete/inComplete.api';
import { modifyProjectInfo,modifyProjectInfoApproval } from '../../myWork/inComplete/inComplete.api';
import { getUserInfoByid } from '../../projectLib/initiatesProjects/initiatesProjects.api'
let dataTo = defineProps(["projectid","IsEdit"])
let dataTo = defineProps(["projectid", "IsEdit", "IsApproval"])
const emit = defineEmits(['close']);
console.log("结果ddddd是", dataTo)
@ -27,7 +21,7 @@ onMounted(async () => {
projectid: dataTo.projectid
}
let res = await queryProjectInfoById(param)
console.log("结果是", res,dataTo)
console.log("结果是", res, dataTo)
setFieldsValue(res)
})
onUpdated(async () => {
@ -76,7 +70,7 @@ const [registerProjectForm, { validate: validateProjectForm, setFieldsValue, get
actionColOptions: { span: 14 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled:dataTo.IsEdit==true?false:true,
disabled: dataTo.IsEdit == true ? false : true,
});
@ -88,8 +82,14 @@ async function handleSubmit() {
// let outrs = Object.assign({},param,projectform)
console.log("param", param, "projectform", projectform)
if (await validateProjectForm()) {
if (dataTo.IsApproval) {
modifyProjectInfoApproval(projectform)
emit("close")
} else {
modifyProjectInfo(projectform)
emit("close")
}
}
}

189
src/views/ProcessApprovalSubPage/initiatesProjectsApproval/index.vue

@ -1,8 +1,7 @@
<template>
<!-- 自定义表单 -->
<div v-if="!IsbatchImportProjects">
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
<ProjectDetails :IsEdit="resButton.IsEdit" :projectid="projectid" ref="ProjectDetailsRef" />
</div>
<div v-if="IsbatchImportProjects">
<el-divider content-position="left">批量导入项目入库详情</el-divider>
@ -13,170 +12,57 @@
</template>
</BasicTable>
</div>
<el-divider content-position="left">项目审批详情</el-divider>
<BasicTable @register="registerTable" />
<el-divider content-position="left" v-if="showApprovalForm">项目审批</el-divider>
<div v-if="showApprovalForm">
<BasicForm @register="registerApprovalForm" @submit="handleSubmit" />
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
<BasicModal @register="registeProjectrModal" title="项目信息详情" width="1200px" :showOkBtn="false">
<childProjectsApproval :projectid="proid" :IsEdit="proIsEdit" @close="closeProjectrModal" />
<childProjectsApproval :projectid="proid" :IsEdit="proIsEdit" @close="closeProjectrModal" :IsApproval="false" />
</BasicModal>
</template>
<script lang="ts" name="initiatesProjectsApproval" setup>
import { ref, onMounted, reactive, onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas, approveStartProcessColumns, columns } from '../../projectLib/projectInfo/projectInfo.data';
import { approvalformSchemas } from '../../myWork/inComplete/inComplete.data'
import { queryProjectInfoById, queryProcessInfo, getIsbatchImportProjects, batchImportProjectPageListByInstid } from '../../projectLib/projectInfo/projectInfo.api'
import { ref, onMounted } from 'vue'
import { columns } from '../../projectLib/projectInfo/projectInfo.data';
import { getIsbatchImportProjects, batchImportProjectPageListByInstid } from '../../projectLib/projectInfo/projectInfo.api'
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { submitTask, getActionParam } from '../../myWork/inComplete/inComplete.api';
import { getUserInfoByid } from '../../projectLib/initiatesProjects/initiatesProjects.api'
import { BasicModal, useModal } from '/@/components/Modal';
import { useRouter, useRoute } from 'vue-router'
import childProjectsApproval from './childProjectsApproval.vue'
const route = useRoute();
const router = useRouter()
console.log("routerouterouteroute", route.query)
let projectid = route.query.projectid
let taskid = route.query.taskId
let processInstanceId = route.query.processInstanceId
import ApprovalDetails from "../component/ApprovalDetails.vue";
import ProjectDetails from "../component/ProjectDetails.vue"
import ApprovalFromPage from "../component/ApprovalFromPage.vue"
console.log("routerouterouteroute", route.query)
let projectid = route.query.projectId
let taskid = route.query.taskId
let ProjectDetailsRef = ref()
let ApprovalFromPageRef = ref()
let IsbatchImportProjects = ref<Boolean>(false);
let proIsEdit = ref<Boolean>(false);
let showApprovalForm = ref()
let resButton = reactive({
let resButton = ref({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
let proid = ref()
let proform = ref()
onMounted(async () => {
//id
IsbatchImportProjects.value = await getIsbatchImportProjects({ processInstanceId: processInstanceId })
if (IsbatchImportProjects.value) {
//
reloadBatchImportTable()
} else {
let param: any = {
projectid: projectid
}
let res = await queryProjectInfoById(param)
proform= res
console.log("结果是", res)
setFieldsValue(res)
}
reload()
resButton = await getActionParam({ projectid: projectid, stage: "1", taskId: taskid, procesType: route.query.procesType })
console.log("resButton", resButton)
if (resButton.IsEdit) {
setProps({ disabled: false })
}
showApprovalForm.value = resButton.showApprovalForm
resButton.value = await getActionParam({ projectid: projectid, stage: "1", taskId: taskid, procesType: route.query.procesType })
console.log("resButton", resButton.value)
showApprovalForm.value = resButton.value.showApprovalForm
})
onUpdated(async () => {
console.log("我更新了")
updateSchema({
field: 'flag',
componentProps: {
options: resButton.buttons,
}
})
if (!IsbatchImportProjects.value) {
console.log("proform",proform)
for (let key in proform) {
if (key.indexOf("Contactor") != -1&&proform[key]!=null) {
let userid = proform[key]
let res = await getUserInfoByid({ id: userid })
console.log(key, res.realname)
updateProjectSchema({
field: key,
componentProps: {
options: [{
value: userid,
label: res.realname
}
],
}
})
}
}
}
}
)
/**
* 项目详情展示表单
*/
const [registerProjectForm, { validate: validateProjectForm, setFieldsValue, getFieldsValue: getFieldsValueProjectForm, setProps, updateSchema: updateProjectSchema }] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled: !resButton.IsEdit
});
/**
* 审批表单
*/
const [registerApprovalForm, { validate: validateApprovalForm, getFieldsValue: getFieldsValueApprovalForm, updateSchema }] = useForm({
//
schemas: approvalformSchemas,
//
// submitButtonOptions: { text: '', preIcon: '' },
//
resetButtonOptions: { text: '取消', preIcon: '' },
// showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
submitButtonOptions: { text: '提交', preIcon: '' },
// 24 0-24
actionColOptions: { span: 14 },
//
// submitFunc: customSubmitFunc,
//
resetFunc: customResetFunc,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
})
/**
* 流程审批情况表格配置
*/
const { tableContext } = useListPage({
tableProps: {
size: 'small',//
title: '流程审批情况',
api: queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.stage = "1",
params.projectid = projectid
},
},
});
//
const [registerTable, { reload }] = tableContext;
/**
* 批量导入表格
*/
@ -194,7 +80,7 @@ const { tableContext: tableContextBatchImportTable } = useListPage({
},
});
//
const [registerbatchImportTable, { reload: reloadBatchImportTable,getDataSource }] = tableContextBatchImportTable;
const [registerbatchImportTable, { reload: reloadBatchImportTable, getDataSource }] = tableContextBatchImportTable;
function getTableAction(record): ActionItem[] {
return [
{
@ -205,7 +91,7 @@ function getTableAction(record): ActionItem[] {
label: '修改',
onClick: handleModifyDetailpage.bind(null, record),
ifShow: () => {
return resButton.IsEdit
return resButton.value.IsEdit
}
},
@ -214,12 +100,12 @@ function getTableAction(record): ActionItem[] {
const [registeProjectrModal, { openModal: openModalProjectr, closeModal: closeModalProjectr }] = useModal();//
function handleDetailpage(record) {
proIsEdit.value=false
proIsEdit.value = false
proid.value = record.id
openModalProjectr()
}
function handleModifyDetailpage(record) {
proIsEdit.value=resButton.IsEdit==true?true:false
proIsEdit.value = resButton.value.IsEdit == true ? true : false
proid.value = record.id
openModalProjectr()
}
@ -232,10 +118,10 @@ function closeProjectrModal() {
* 提交
*/
async function handleSubmit() {
let approvalform = await getFieldsValueApprovalForm();
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
let projectform = await ProjectDetailsRef.value.getFieldsValueProjectForm()
if (!IsbatchImportProjects.value) {
let projectform = await getFieldsValueProjectForm();
let param = {
flag: approvalform.flag,
projectid: projectid,
@ -243,19 +129,19 @@ async function handleSubmit() {
taskId: taskid,
stage: route.query.stage,
projectInfo: projectform,
isEdit: resButton.IsEdit == true ? "1" : "0"
isEdit: resButton.value.IsEdit == true ? "1" : "0"
}
if (await validateApprovalForm() && await validateProjectForm()) {
if (await ApprovalFromPageRef.value.validateApprovalForm() && await ProjectDetailsRef.value.validateProjectForm()) {
console.log("提交成功!1")
let res = await submitTask(param)
console.log("提交成功!2", res)
submitTask(param)
console.log("提交成功!2", param, ProjectDetailsRef.value.IsEdit)
router.go(-1)
}
} else {
if (await validateApprovalForm()) {
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
console.log("提交成功!3")
let projectArr = await getDataSource()
let param = {
@ -264,22 +150,17 @@ async function handleSubmit() {
comment: approvalform.comment,
taskId: taskid,
stage: route.query.stage,
isEdit: resButton.IsEdit == true ? "1" : "0",
projectArr:projectArr
isEdit: resButton.value.IsEdit == true ? "1" : "0",
projectArr: projectArr
}
let res = await submitTask(param)
console.log("提交成功!", res)
router.go(-1)
}
}
}
async function customResetFunc() {
function exit(){
router.go(-1)
}
</script>
<style></style>

188
src/views/ProcessApprovalSubPage/planFileApproval.vue

@ -0,0 +1,188 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目计划详情</el-divider>
<BasicTable @register="registerplaninfoTable">
</BasicTable>
<el-divider content-position="left">项目资料详情</el-divider>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<el-divider content-position="left" v-if="resButton.IsEdit">重新上传项目资料</el-divider>
<div v-if="resButton.IsEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="5" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="uploadfileApproval" setup>
import { onMounted, ref, reactive } from 'vue'
import { BasicTable, ActionItem, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { approvePlanFile, getActionParam } from '../myWork/inComplete/inComplete.api';
import { PlaninfoFiletableColumns, PlaninfoColumn } from '../projectLib/projectPlan/projectPlan.data';
import { planFilePageList, getplaninfoByid } from '../projectLib/projectPlan/projectPlan.api'
import { downloadFile } from "../../api/common/api"
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
let dataTo = defineProps(["record"])
const emit = defineEmits(['close']);
console.log("routerouterouteroute", dataTo.record)
let planinfoid = dataTo.record.projectId as string
let processInstanceId = dataTo.record.processInstanceId
let stage = dataTo.record.stage as string
let taskid = dataTo.record.taskId as string
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ projectid: planinfoid, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
const { tableContext: tableplaninfoContext } = useListPage({
tableProps: {
size: 'small',//
title: '项目计划详情',
api: getplaninfoByid,
columns: PlaninfoColumn,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.planinfoid = planinfoid;
},
},
});
// BasicTable
const [registerplaninfoTable, { getDataSource }] = tableplaninfoContext;
//table
const { tableContext: resourceTableContext } = useListPage({
tableProps: {
size: 'small',//
title: '项目计划资料详情',
api: planFilePageList,
columns: PlaninfoFiletableColumns,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: "right",
},
beforeFetch(params) {
params.planinfoid = planinfoid
},
},
});
const [registerResourceTable] = resourceTableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
}
];
}
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
}
function httpRequest(option) {
fileList.push(option)
}
//
async function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 5 * 1024 * 1024;
//5M
let tableData = await getDataSource()
let files = tableData[0].taskFile.split(",")
if (files.indexOf(file.name) != -1) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == file.name) {
ElMessage.error(file.name + "请勿重复上传")
return false
}
}
} else {
ElMessage.error("请上传:" + files)
return false
}
if (fileSize > FIVE_M) {
ElMessage.error("最大上传5M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传五个文件")
}
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("planinfoid", planinfoid)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", stage)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
});
}
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approvePlanFile(params)
console.log("提交成功!", res)
emit("close")
}
}
async function exit() {
emit("close")
}
</script>
<style></style>

191
src/views/ProcessApprovalSubPage/planFileApproval/index.vue

@ -0,0 +1,191 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目计划详情</el-divider>
<BasicTable @register="registerplaninfoTable">
</BasicTable>
<el-divider content-position="left">项目资料详情</el-divider>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<el-divider content-position="left" v-if="resButton.IsEdit">重新上传项目资料</el-divider>
<div v-if="resButton.IsEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="5" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="uploadfileApproval" setup>
import { onMounted, ref, reactive } from 'vue'
import { BasicTable, ActionItem, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { approvePlanFile, getActionParam } from '../../myWork/inComplete/inComplete.api';
import { PlaninfoFiletableColumns, PlaninfoColumn } from '../../projectLib/projectPlan/projectPlan.data';
import { planFilePageList, getplaninfoByid } from '../../projectLib/projectPlan/projectPlan.api'
import { useRouter, useRoute } from 'vue-router'
import { downloadFile } from "../../../api/common/api"
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../component/ApprovalDetails.vue";
import ApprovalFromPage from "../component/ApprovalFromPage.vue"
const route = useRoute();
const router = useRouter()
console.log("routerouterouteroute", route.query)
let planinfoid = route.query.projectId as string
let processInstanceId = route.query.processInstanceId
let stage = route.query.stage as string
let taskid = route.query.taskId as string
const emit = defineEmits(['close']);
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ projectid: planinfoid, taskId: taskid, procesType: route.query.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
const { tableContext: tableplaninfoContext } = useListPage({
tableProps: {
size: 'small',//
title: '项目计划详情',
api: getplaninfoByid,
columns: PlaninfoColumn,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.planinfoid = planinfoid;
},
},
});
// BasicTable
const [registerplaninfoTable, { getDataSource }] = tableplaninfoContext;
//table
const { tableContext: resourceTableContext } = useListPage({
tableProps: {
size: 'small',//
title: '项目计划资料详情',
api: planFilePageList,
columns: PlaninfoFiletableColumns,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: "right",
},
beforeFetch(params) {
params.planinfoid = planinfoid
},
},
});
const [registerResourceTable] = resourceTableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
}
];
}
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
}
function httpRequest(option) {
fileList.push(option)
}
//
async function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 5 * 1024 * 1024;
//5M
let tableData = await getDataSource()
let files = tableData[0].taskFile.split(",")
if (files.indexOf(file.name) != -1) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == file.name) {
ElMessage.error(file.name + "请勿重复上传")
return false
}
}
} else {
ElMessage.error("请上传:" + files)
return false
}
if (fileSize > FIVE_M) {
ElMessage.error("最大上传5M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传五个文件")
}
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("planinfoid", planinfoid)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", stage)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
});
}
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approvePlanFile(params)
console.log("提交成功!", res)
router.go(-1)
}
}
async function exit() {
router.go(-1)
}
</script>
<style></style>

144
src/views/ProcessApprovalSubPage/projectPlanApproval.vue

@ -0,0 +1,144 @@
<template>
<!-- 自定义表单 -->
<PlaninfoDetails :projectid="projectId" :showActionColumn="false"/>
<el-divider content-position="left" v-if="resButton.IsEdit">重新上传项目计划</el-divider>
<div v-if="resButton.IsEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="1" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="projectPlanApproval" setup>
import { ref, onMounted, reactive } from 'vue'
import { getActionParam } from '../myWork/inComplete/inComplete.api';
import { approvePlaninfo } from '../projectLib/projectPlan/projectPlan.api'
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
import PlaninfoDetails from "../ProcessApprovalSubPage/component/PlaninfoDetails.vue"
let dataTo = defineProps(["record"])
const emit = defineEmits(['close']);
let processInstanceId = dataTo.record.processInstanceId
let projectId = dataTo.record.projectId as string
let taskid = dataTo.record.taskId as string
let stage = dataTo.record.stage as string
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ processInstanceId: processInstanceId, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectId)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", stage)
if (fileList.length > 0) {
params.append("file", fileList[0].file)
}
let res = await approvePlaninfo(params)
console.log("提交成功!", res)
emit("close")
}
}
async function exit() {
emit("close")
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
}
function httpRequest(option) {
fileList.push(option)
}
//
function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 5 * 1024 * 1024;
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
let whiteList = ["xls", "xlsx"];
if (whiteList.indexOf(fileSuffix) === -1) {
ElMessage.error('上传文件只能是xls、xlsx格式');
return false;
}
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传5M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
</script>
<style scoped>
.timeline {
display: flex;
width: 100%;
margin-bottom: 100px;
.lineitem {
transform: translateX(50%);
width: 25%;
}
}
:deep(.el-timeline-item__tail) {
border-left: none;
border-top: 2px solid #e4e7ed;
width: 100%;
position: absolute;
top: 9px;
}
:deep(.el-timeline-item__wrapper) {
padding-left: 0;
position: absolute;
top: 20px;
transform: translateX(-50%);
text-align: center;
}
:deep(.el-timeline-item__timestamp) {
font-size: 14px;
}
</style>

123
src/views/ProcessApprovalSubPage/projectPlanApproval/index.vue

@ -1,8 +1,6 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目计划阶段详情</el-divider>
<BasicTable @register="registerPlanTable">
</BasicTable>
<PlaninfoDetails :projectid="projectId" :showActionColumn="false"/>
<el-divider content-position="left" v-if="resButton.IsEdit">重新上传项目计划</el-divider>
<div v-if="resButton.IsEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
@ -11,34 +9,29 @@
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
<el-divider content-position="left">项目审批详情</el-divider>
<BasicTable @register="registerTable" />
<el-divider content-position="left" v-if="showApprovalForm">项目审批</el-divider>
<div v-if="showApprovalForm">
<BasicForm @register="registerApprovalForm" @submit="handleSubmit" />
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { ref, onMounted, reactive, onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas, approveStartProcessColumns, columns } from '../../projectLib/projectInfo/projectInfo.data';
import { approvalformSchemas } from '../../myWork/inComplete/inComplete.data'
import { BasicModal } from '/@/components/Modal';
import { PlaninfoColumn } from '../../projectLib/projectPlan/projectPlan.data';
import { queryPlaninfoFilePageByid, queryPlanInfoMainTimeline } from '../../projectLib/projectPlan/projectPlan.api'
import { queryProjectInfoById, queryProcessInfo } from '../../projectLib/projectInfo/projectInfo.api'
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { ref, onMounted, reactive } from 'vue'
import { getActionParam } from '../../myWork/inComplete/inComplete.api';
import { approvePlaninfo } from '../../projectLib/projectPlan/projectPlan.api'
import { useRouter, useRoute } from 'vue-router'
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../component/ApprovalDetails.vue";
import ApprovalFromPage from "../component/ApprovalFromPage.vue"
import PlaninfoDetails from "../component/PlaninfoDetails.vue"
const route = useRoute();
const router = useRouter()
let projectid = route.query.projectid
let taskid = route.query.taskId
let processInstanceId = route.query.processInstanceId
let projectId = route.query.projectId as string
let taskid = route.query.taskId as string
let stage = route.query.stage as string
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
IsEdit: false,
@ -47,89 +40,25 @@ let resButton = reactive({
let fileList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ projectid: projectid, stage: "3", taskId: taskid, procesType: route.query.procesType })
resButton = await getActionParam({ processInstanceId: processInstanceId, taskId: taskid, procesType: route.query.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
onUpdated(async () => {
console.log("我更新了:")
updateSchema({
field: 'flag',
componentProps: {
options: resButton.buttons,
}
})
})
// table
const { tableContext: tableContextPlan } = useListPage({
tableProps: {
size: 'small',//
title: '项目计划阶段详情',
api: queryPlanInfoMainTimeline,
columns: PlaninfoColumn,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.projectid = projectid;
},
},
});
// BasicTable
const [registerPlanTable] = tableContextPlan;
// table
const { tableContext } = useListPage({
tableProps: {
size: 'small',//
title: '流程审批情况',
api: queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.stage = "3",
params.projectid = projectid
},
},
});
//
const [registerTable, { reload }] = tableContext;
const [registerApprovalForm, { validate: validateApprovalForm, getFieldsValue: getFieldsValueApprovalForm, updateSchema }] = useForm({
//
schemas: approvalformSchemas,
//
// submitButtonOptions: { text: '', preIcon: '' },
//
resetButtonOptions: { text: '取消', preIcon: '' },
// showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
submitButtonOptions: { text: '提交', preIcon: '' },
// 24 0-24
actionColOptions: { span: 14 },
//
// submitFunc: customSubmitFunc,
//
resetFunc: customResetFunc,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
})
async function handleSubmit() {
let approvalform = await getFieldsValueApprovalForm();
if (await validateApprovalForm()) {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectid)
params.append("projectid", projectId)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", route.query.stage)
if(fileList.length>0){
params.append("stage", stage)
if (fileList.length > 0) {
params.append("file", fileList[0].file)
}
let res = await approvePlaninfo(params)
@ -137,7 +66,7 @@ async function handleSubmit() {
router.go(-1)
}
}
async function customResetFunc() {
async function exit() {
router.go(-1)
}
@ -177,6 +106,8 @@ function beforeUpload(file) {
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
</script>
<style scoped>
.timeline {

139
src/views/ProcessApprovalSubPage/uploadfileApproval.vue

@ -0,0 +1,139 @@
<template>
<!-- 自定义表单 -->
<!-- <el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" /> -->
<ProjectDetails :IsEdit="false" :projectid="projectId" ref="ProjectDetailsRef" />
<div>
<el-divider content-position="left">项目资料详情</el-divider>
<UploadfileDetail :projectid="projectId" :stage="1" />
</div>
<el-divider content-position="left" v-if="resButton.IsEdit">重新上传项目资料</el-divider>
<div v-if="resButton.IsEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="5" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
<div>
<el-divider content-position="left">意见文件</el-divider>
<UploadfileDetail :projectid="projectId" :stage="2" />
</div>
<ApprovalDetails :processInstanceId="processInstanceId" />
<!-- -->
<div v-if="procesType == '0' && !resButton.IsEdit">
<el-divider content-position="left">上传意见文件</el-divider>
<div style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequestadvice"
:before-upload="beforeUpload" :on-exceed="handleExceed" :limit="5" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
</div>
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="uploadfileApproval" setup>
import { onMounted, ref, reactive } from 'vue'
import { approveUploadFile, getActionParam } from '../myWork/inComplete/inComplete.api';
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ProjectDetails from "../ProcessApprovalSubPage/component/ProjectDetails.vue"
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
import UploadfileDetail from "../ProcessApprovalSubPage/component/UploadfileDetail.vue"
let dataTo = defineProps(["record"])
console.log("routerouterouteroute", dataTo.record)
let projectId = dataTo.record.projectId as string
let processInstanceId = dataTo.record.processInstanceId
let stage = dataTo.record.stage as string
let taskid = dataTo.record.taskId as string
let procesType = dataTo.record.procesType
const emit = defineEmits(['close']);
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
IsEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ projectid: projectId, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
for (let i = 0; i < fileAdviceList.length; i++) {
if (fileAdviceList[i].file.name == option.name) {
fileAdviceList.splice(i, 1)
}
}
}
function httpRequest(option) {
fileList.push(option)
}
function httpRequestadvice(option) {
fileAdviceList.push(option)
}
//
function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 5 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传5M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传五个文件")
}
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectId)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", stage)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
});
}
if (fileAdviceList.length > 0) {
fileAdviceList.forEach((x) => {
params.append("adviceFile", x.file)
});
}
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approveUploadFile(params)
console.log("提交成功!", res)
emit("close")
}
}
async function exit() {
emit("close")
}
</script>
<style></style>

207
src/views/ProcessApprovalSubPage/uploadfileApproval/index.vue

@ -1,13 +1,13 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
<!-- <el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" /> -->
<ProjectDetails :IsEdit="false" :projectid="projectId" ref="ProjectDetailsRef" />
<div>
<el-divider content-position="left">项目资料详情</el-divider>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<UploadfileDetail :projectid="projectId" :stage="1" />
</div>
<el-divider content-position="left" v-if="resButton.IsEdit">重新上传项目资料</el-divider>
<div v-if="resButton.IsEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
@ -16,16 +16,11 @@
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
</div>
<div >
<div>
<el-divider content-position="left">意见文件</el-divider>
<BasicTable @register="registerAdviceResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<UploadfileDetail :projectid="projectId" :stage="2" />
</div>
<el-divider content-position="left">项目审批详情</el-divider>
<BasicTable @register="registerTable" />
<ApprovalDetails :processInstanceId="processInstanceId" />
<!-- -->
<div v-if="procesType == '0' && !resButton.IsEdit">
<el-divider content-position="left">上传意见文件</el-divider>
@ -38,34 +33,29 @@
</div>
</div>
<el-divider content-position="left" v-if="showApprovalForm">项目审批</el-divider>
<div v-if="showApprovalForm">
<BasicForm @register="registerApprovalForm" @submit="handleSubmit" />
</div>
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="uploadfileApproval" setup>
import { onMounted, ref, reactive, onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas, approveStartProcessColumns, } from '../../projectLib/projectInfo/projectInfo.data';
import { approvalformSchemas } from '../../myWork/inComplete/inComplete.data'
import { queryProjectInfoById, queryProcessInfo } from '../../projectLib/projectInfo/projectInfo.api'
import { BasicTable, ActionItem, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { onMounted, ref, reactive } from 'vue'
import { approveUploadFile, getActionParam } from '../../myWork/inComplete/inComplete.api';
import { resourcetableColumns } from '../../projectLib/projectInfo/projectInfo.data';
import { uploacFilePageList } from '../../projectLib/projectInfo/projectInfo.api'
import { useRouter, useRoute } from 'vue-router'
import { downloadFile } from "../../../api/common/api"
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../component/ApprovalDetails.vue";
import ProjectDetails from "../component/ProjectDetails.vue"
import ApprovalFromPage from "../component/ApprovalFromPage.vue"
import UploadfileDetail from "../component/UploadfileDetail.vue"
const route = useRoute();
const router = useRouter()
console.log("routerouterouteroute", route.query)
let projectid = route.query.projectid
let taskid = route.query.taskId
let projectId = route.query.projectId as string
let processInstanceId = route.query.processInstanceId
let stage = route.query.stage as string
let taskid = route.query.taskId as string
let procesType = route.query.procesType
const emit = defineEmits(['close']);
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
IsEdit: false,
@ -74,149 +64,11 @@ let resButton = reactive({
let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]);
onMounted(async () => {
let param: any = {
projectid: projectid
}
let res = await queryProjectInfoById(param)
console.log("结果是", res)
setFieldsValue(res)
reload()
resButton = await getActionParam({ projectid: projectid, stage: "2", taskId: taskid, procesType: route.query.procesType })
resButton = await getActionParam({ projectid: projectId, stage: "2", taskId: taskid, procesType: route.query.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
onUpdated(async () => {
console.log("我更新了:")
updateSchema({
field: 'flag',
componentProps: {
options: resButton.buttons,
}
})
})
/**
* BasicForm绑定注册;src\views\ProcessApprovalSubPage\initiatesProjectsApproval\initiatesProjectsApproval.vue
* useForm 是整个框架的核心用于表单渲染里边封装了很多公共方法;
* 支持schemas: 渲染表单列autoSubmitOnEnter回车提交,submitButtonOptions自定义按钮文本和图标等方法
* 平台通过此封装简化了代码支持自定义扩展;
*/
const [registerProjectForm, { setFieldsValue }] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled: true
});
const [registerApprovalForm, { validate, getFieldsValue, updateSchema }] = useForm({
//
schemas: approvalformSchemas,
//
// submitButtonOptions: { text: '', preIcon: '' },
//
resetButtonOptions: { text: '取消', preIcon: '' },
// showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
submitButtonOptions: { text: '提交', preIcon: '' },
// 24 0-24
actionColOptions: { span: 14 },
//
// submitFunc: customSubmitFunc,
//
resetFunc: customResetFunc,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
})
const { tableContext } = useListPage({
tableProps: {
size: 'small',//
title: '流程审批情况',
api: queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.stage = "2",
params.projectid = projectid
},
},
});
// BasicTable
const [registerTable, { reload }] = tableContext;
//table
const { tableContext: resourceTableContext } = useListPage({
tableProps: {
size: 'small',//
title: '项目入库资料详情',
api: uploacFilePageList,
columns: resourcetableColumns,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: "right",
},
beforeFetch(params) {
params.stage = "1",
params.projectid = projectid
},
},
});
const [registerResourceTable] = resourceTableContext;
const { tableContext: resourceAdviceTableContext } = useListPage({
tableProps: {
size: 'small',//
title: '意见文件',
api: uploacFilePageList,
columns: resourcetableColumns,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: "right",
},
beforeFetch(params) {
params.stage = "2",
params.projectid = projectid
},
},
});
const [registerAdviceResourceTable] = resourceAdviceTableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
}
];
}
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
@ -253,17 +105,14 @@ function handleExceed() {
ElMessage.warning("最多只能上传五个文件")
}
async function handleSubmit() {
let approvalform = await getFieldsValue();
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectid)
params.append("projectid", projectId)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
params.append("stage", route.query.stage)
params.append("stage", stage)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
@ -275,7 +124,7 @@ async function handleSubmit() {
});
}
console.log("param", params, "approvalform", approvalform)
if (await validate()) {
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approveUploadFile(params)
console.log("提交成功!", res)
@ -284,7 +133,7 @@ async function handleSubmit() {
}
}
async function customResetFunc() {
async function exit() {
router.go(-1)
}

23
src/views/Regulation/RegulationLab/RegulationLab.api.ts

@ -0,0 +1,23 @@
import { defHttp } from '/@/utils/http/axios';
import { downloadFile } from "../../../api/common/api"
export enum Api {
regulationlabPageList = '/huzhouRegulationlab/regulationlabPageList',
addRegulationlab="/huzhouRegulationlab/addRegulationlab",
modifyRegulationlab = '/huzhouRegulationlab/modifyRegulationlab',
getregulationlabById="/huzhouRegulationlab/getregulationlabById",
deleteRegulationlab = '/huzhouRegulationlab/deleteRegulationlab',
batchdownloadRegulationlabFiles="/huzhouRegulationlab/batchdownloadRegulationlabFiles"
}
export const regulationlabPageList = (params) => defHttp.get({ url: Api.regulationlabPageList, params })
export const getregulationlabById = (params) => defHttp.get({ url: Api.getregulationlabById, params })
export const batchdownloadRegulationlabFiles = (params) => downloadFile(Api.batchdownloadRegulationlabFiles,"批量导出.zip",params)
export const addRegulationlab = (params?) =>defHttp.post({ url: Api.addRegulationlab,headers:{ "Content-Type": "multipart/form-data" }, params })
export const modifyRegulationlab = (params?) =>defHttp.post({ url: Api.modifyRegulationlab,headers:{ "Content-Type": "multipart/form-data" }, params })
export const deleteRegulationlab = (params?) =>defHttp.post({ url: Api.deleteRegulationlab, params })

70
src/views/Regulation/RegulationLab/RegulationLab.data.ts

@ -0,0 +1,70 @@
import { FormSchema } from '/@/components/Form';
import { BasicColumn } from '/@/components/Table';
export const RegulationLabcolumns: BasicColumn[] = [
{
title: '政策法规名称',
width: 150,
dataIndex: 'regulationlabName',
},
{
title: '政策法规描述',
width: 150,
dataIndex: 'regulationlabDescribe',
},
{
title: '文件名称',
dataIndex: 'documentName',
width: 150,
},
{
title: '文件大小',
dataIndex: 'size',
width: 150,
customRender: ({ record }) => {
let kbNum: number = record.size / 1024
if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB"
} else {
let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB"
}
},
},
];
export const searchFormSchema: FormSchema[] = [
{
label: '政策法规名称',
field: 'regulationlabName',
component: 'Input',
//colProps: { span: 6 },
},
{
label: '文件名称',
field: 'documentName',
component: 'Input',
//colProps: { span: 6 },
}
];
export const regularformSchemas: FormSchema[] = [
{
label: '政策法规名称',
field: 'regulationlabName',
component: 'Input',
required: true,
},
{
label: '法规资料描述',
field: 'regulationlabDescribe',
component: 'Input',
required: true,
}
];

136
src/views/Regulation/RegulationLab/addAndModify.vue

@ -0,0 +1,136 @@
<template>
<!-- 自定义表单 -->
<BasicModal @register="registerModal" title="归档信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<el-divider content-position="left">法规信息</el-divider>
<BasicForm @register="registerProjectForm" />
<el-divider content-position="left">上传法规资料</el-divider>
<el-form ref="importFormRef" label-width="130px">
<el-form-item label="上传文件:">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="1" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过10M</div>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitImportForm">上传</el-button>
<el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item>
</el-form>
</BasicModal>
</template>
<script lang="ts" name="addAndModify" setup>
import { ref, reactive, defineProps, watchEffect } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { regularformSchemas } from './RegulationLab.data';
import { modifyRegulationlab, addRegulationlab, getregulationlabById } from './RegulationLab.api';
import { ElMessage } from 'element-plus'
import { useModalInner, BasicModal } from '/@/components/Modal';
const [registerModal, { closeModal }] = useModalInner(init);
let fileList = reactive<Array<any>>([]);
let id = ref()
const emit = defineEmits(['close']);
async function init(data) {
fileList.pop()
if (data.id != null) {
id.value = data.id
let param: any = {
id: data.id
}
let res = await getregulationlabById(param)
console.log("结果是", res)
setFieldsValue(res)
}
}
//
const [registerProjectForm, { setFieldsValue: setFieldsValue, getFieldsValue, validate }] = useForm({
//
schemas: regularformSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
// fileList,
function httpRequest(option) {
fileList.push(option)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
console.log(fileList, option)
}
//
function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 10 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传10M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
//Excel
async function submitImportForm() {
if (await validate()) {
let data = await getFieldsValue()
console.log("data", data)
// 使form
const params = new FormData()
if (id.value != null) {
//
if(fileList.length>0){
params.append('file', fileList[0].file)
}
params.append("id", id.value)
params.append("regulationlabName", data.regulationlabName)
params.append("regulationlabDescribe", data.regulationlabDescribe)
modifyRegulationlab(params)
} else {
if (fileList.length == 0) {
ElMessage.warning("请上传文件")
return;
}
params.append('file', fileList[0].file)
params.append("regulationlabName", data.regulationlabName)
params.append("regulationlabDescribe", data.regulationlabDescribe)
addRegulationlab(params)
}
dialogVisible()
}
}
function dialogVisible() {
closeModal()
emit("close")
}
</script>
<style></style>

109
src/views/Regulation/RegulationLab/index.vue

@ -0,0 +1,109 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable">
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
</template>
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleAdd">新增政策法规</a-button>
<a-button type="primary" preIcon="ant-design:download-outlined" @click="handleBatchdownload"> 批量导出</a-button>
</template>
</BasicTable>
<addAndModify @register="registerSubmitProjectArchive" @close="closeModel" />
</div>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { useModal, BasicModal } from '/@/components/Modal';
import { downloadFile } from "../../../api/common/api"
import { RegulationLabcolumns, searchFormSchema } from './RegulationLab.data';
import addAndModify from "./addAndModify.vue"
import { regulationlabPageList, batchdownloadRegulationlabFiles, deleteRegulationlab } from './RegulationLab.api';
const [registerSubmitProjectArchive, { openModal }] = useModal();
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
title: '政策法规信息',
api: regulationlabPageList,
columns: RegulationLabcolumns,
actionColumn: {
width: 120,
fixed: "right",
},
//
formConfig: {
schemas: searchFormSchema,
}
},
});
//BasicTable
const [registerTable, { reload, getForm }] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
onClick: handledown.bind(null, record),
}
];
}
function getDropDownAction(record): ActionItem[] {
return [
{
label: '修改',
onClick: handleModify.bind(null, record)
},
{
label: '删除',
popConfirm: {
title: '确定删除吗?',
confirm: handleDelete.bind(null, record),
},
}
];
}
function handleAdd() {
openModal(true, { id: null })
}
function handleModify(record) {
openModal(true, { id: record.id })
}
function handleSubmit(record) {
}
function handledown(record) {
let param = {
path: record.documentPath,
}
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
async function handleDelete(record) {
await deleteRegulationlab({ id: record.id })
reload()
}
function handleBatchdownload() {
let { getFieldsValue } = getForm()
let fromData = getFieldsValue()
batchdownloadRegulationlabFiles(fromData)
}
function closeModel() {
reload()
}
</script>
<style scoped></style>

124
src/views/myWork/completed/complectedDetail.vue

@ -1,124 +0,0 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
<el-divider content-position="left">项目审批详情</el-divider>
<BasicTable @register="registerTable"/>
<div>
<el-divider content-position="left">项目审批</el-divider>
<BasicForm @register="registerApprovalForm" @submit="handleSubmit"/>
</div>
</template>
<script lang="ts" name="complectedDetail" setup>
import { defineProps,watchEffect} from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas,approveStartProcessColumns} from '../../projectLib/projectInfo/projectInfo.data';
import {queryProjectInfoById,queryProcessInfo} from '../../projectLib/projectInfo/projectInfo.api'
import {BasicTable } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import {approvalformSchemas} from '../inComplete/inComplete.data'
import {submitTask} from '../inComplete/inComplete.api';
let proid = defineProps(["dataTo","taskid"])
const emit = defineEmits(['close']);
watchEffect(async ()=>{
console.log("dataTo",proid.dataTo)
let param:any = {
projectid:proid.dataTo
}
let res =await queryProjectInfoById(param)
console.log("结果是",res)
setFieldsValue(res)
reload()
})
/**
* BasicForm绑定注册;
* useForm 是整个框架的核心用于表单渲染里边封装了很多公共方法;
* 支持schemas: 渲染表单列autoSubmitOnEnter回车提交,submitButtonOptions自定义按钮文本和图标等方法
* 平台通过此封装简化了代码支持自定义扩展;
*/
const [registerProjectForm,{setFieldsValue}] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol:{ style: { width: 'auto' } },
disabled:true
});
const { tableContext } = useListPage({
tableProps: {
size:'small',//
title: '流程审批情况',
api:queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn:false,
useSearchForm:false,
beforeFetch(params) {
params.status = "1",
params.projectid=proid.dataTo
},
},
});
// BasicTable
const [registerTable,{reload}] = tableContext;
const[registerApprovalForm,{validate,getFieldsValue}] = useForm({
//
schemas: approvalformSchemas,
//
// submitButtonOptions: { text: '', preIcon: '' },
//
resetButtonOptions: { text: '取消', preIcon: '' },
// showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
submitButtonOptions: { text: '提交', preIcon: '' },
// 24 0-24
actionColOptions: { span: 14 },
//
// submitFunc: customSubmitFunc,
//
resetFunc: customResetFunc,
labelCol: { style: { width: '120px' } },
wrapperCol:{ style: { width: 'auto' } },
// disabled:true
})
async function handleSubmit(){
let approvalform = await getFieldsValue();
let param = {
flag:approvalform.flag,
projectid:proid.dataTo,
comment:approvalform.comment,
taskId:proid.taskid
}
console.log("aaaaaaaaaaa",proid)
console.log("param",param,"approvalform",approvalform)
if(await validate()){
let res = await submitTask(param)
console.log("提交成功!",res)
await emit("close");
}
}
async function customResetFunc(){
emit("close");
}
</script>
<style></style>

18
src/views/myWork/completed/complete.data.ts

@ -12,7 +12,7 @@ export const columns: BasicColumn[] = [
},
{
title: '项目id',
dataIndex: 'projectid',
dataIndex: 'projectId',
width: 100,
},
{
@ -35,21 +35,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'createTime',
width: 100,
},
// {
// title: '发起单位',
// dataIndex: 'workplace',
// width: 100,
// },
// {
// title: '发起单位类型',
// dataIndex: 'workplaceTpye',
// width: 200,
// },
// {
// title: '联系电话',
// width: 150,
// dataIndex: 'phone',
// },
];
export const searchFormSchema: FormSchema[] = [

60
src/views/myWork/completed/index.vue

@ -2,17 +2,12 @@
<div>
<!--引用表格-->
<BasicTable @register="registerTable">
<!--插槽:table标题-->
<!--操作栏-->
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<BasicModal @register="registerModal" title="已办流程信息详情" width="1200px" :showOkBtn="false">
<complectedDetail :dataTo="proid" :taskid="taskid" @close="closeModals()" />
</BasicModal>
<ApprovalPageModel @register="register" :record="rowData" @close="exit"/>
</div>
</template>
@ -22,22 +17,18 @@ import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, searchFormSchema } from './complete.data';
// import { list } from './address.api';
import { myCompleteTask } from '../inComplete/inComplete.api';
import { useModal } from '/@/components/Modal';
import { BasicModal } from '/@/components/Modal';
import complectedDetail from './complectedDetail.vue';
import ApprovalPageModel from '../../ProcessApprovalSubPage/component/ApprovalPageModel.vue'
const [registerModal, { openModal, closeModal }] = useModal();
import { useRouter, useRoute } from 'vue-router'
const route = useRoute();
const router = useRouter();
console.log(" const route = useRoute();", route.query)
let proid = ref();
let taskid = ref()
const [register, { openModal }] = useModal();//
let rowData =ref()
/**
* 我的已办表格
*/
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
@ -54,7 +45,7 @@ const { tableContext } = useListPage({
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
const [registerTable,{reload}] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
@ -66,36 +57,13 @@ function getTableAction(record): ActionItem[] {
}
function handleEdit(record) {
record.procesType="1" // 1 0
console.log("打开子页面", record);
// openModal();
// proid.value =record.projectid
// record.procesType="1" // 1 0
if (record.stage == 1) {
router.push({ // push
path: '/ProcessApprovalSubPage/initiatesProjectsApproval', //name inComplectedDetail
query: record
})
}
else if (record.stage == 2) {
router.push({ // push
path: '/ProcessApprovalSubPage/uploadfileApproval', //name inComplectedDetail
query: record
})
}
else if(record.stage ==3){
router.push({ // push
path: '/ProcessApprovalSubPage/projectPlanApproval', //name inComplectedDetail
query: record
})
}
// console.log(selectedRows.value);
// console.log(selectedRowKeys.value);
//openApprovePage(record,router);
rowData.value =record
openModal(true)
}
function closeModals() {
closeModal()
function exit(){
console.log("fatheer")
reload()
}
</script>

37
src/views/myWork/inComplete/inComplete.api.ts

@ -7,15 +7,48 @@ export enum Api {
myCompleteTask = '/workflow/myCompleteTask',
getActionParam = '/workflow/getActionParam',
approveUploadFile = "/huzhouUploadfileinfo/approveUploadFile",
modifyProjectInfo='/huzhouProject/modifyProjectInfo'
modifyProjectInfo = '/huzhouProject/modifyProjectInfo',
approvePlanFile = "/huzhouPlaninfofile/approvePlanFile",
queryProcessInfo = '/workflow/getprocessInfo',
modifyProjectInfoApproval="/huzhouProject/modifyProjectInfoApproval"
}
/**
*
*/
export const queryProcessInfo = (params?) => defHttp.get({ url: Api.queryProcessInfo, params });
export const myTaskList = (params) => defHttp.get({ url: Api.myTaskList, params })
export const submitTask = (params) => defHttp.post({ url: Api.submitTask, params })
export const myCompleteTask = (params) => defHttp.get({ url: Api.myCompleteTask, params })
export const getActionParam = (params) => defHttp.get({ url: Api.getActionParam, params })
export const approveUploadFile = (params) => defHttp.post({ url: Api.approveUploadFile, headers: { "Content-Type": "multipart/form-data" }, params })
export const modifyProjectInfo = (params) => defHttp.post({ url: Api.modifyProjectInfo, params })
export const modifyProjectInfoApproval = (params) => defHttp.post({ url: Api.modifyProjectInfoApproval, params })
export const approvePlanFile = (params) => defHttp.post({ url: Api.approvePlanFile, headers: { "Content-Type": "multipart/form-data" }, params })
export const openApprovePage = (record,router) => {
if (record.stage == 1) {
router.push({ // push方法
path: '/ProcessApprovalSubPage/initiatesProjectsApproval', //项目入库流程详情审批页
query: record
})
}
else if (record.stage == 2) {
router.push({ // push方法
path: '/ProcessApprovalSubPage/uploadfileApproval', //项目监理管理资料审批详情页面
query: record
})
}
else if (record.stage == 3) {
router.push({ // push方法
path: '/ProcessApprovalSubPage/projectPlanApproval', //项目计划审批详情页面
query: record
})
} else if (record.stage == 4) {
router.push({ // push方法
path: '/ProcessApprovalSubPage/planFileApproval', //项目计划文件审批详情页面
query: record
})
}
}

64
src/views/myWork/inComplete/inComplete.data.ts

@ -4,13 +4,6 @@ import { getDictItemsByCode } from '/@/utils/dict/index';
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
const projectTypeDicts: Array<Object> = getDictItemsByCode("projectType")
function projectTypeDict() {
for (let i = 0; i < projectTypeDicts.length; i++) {
projectTypeDicts[i].label = projectTypeDicts[i].text;
}
return projectTypeDicts
}
const approvalRsesults:Array<Object> = getDictItemsByCode("approvalResult")
function approvalRsesult(){
@ -19,45 +12,41 @@ function approvalRsesult(){
}
return approvalRsesults
}
export const columns1: BasicColumn[] = [
export const approveStartProcessColumns: BasicColumn[] = [
{
title: '项目编号',
width: 150,
dataIndex: 'id',
title: '节点名称',
dataIndex: 'taskName',
},
{
title: '项目名称',
dataIndex: 'projectName',
title: '处理人',
dataIndex: 'operator',
width: 150,
},
{
title: '主要任务及标志性成果',
dataIndex: 'description',
title: '处理时间',
dataIndex: 'operateDate',
width: 150,
},
{
title: '责任单位',
dataIndex: 'dutyWorkplace',
width: 100,
},
{
title: '发起单位',
dataIndex: 'workplace',
title: '审批状态',
dataIndex: 'approvalStatue',
width: 100,
customRender: ({ record }) => {
for (let i = 0; i < approvalRsesults.length; i++) {
if (record.approvalStatue == approvalRsesults[i].value) {
return approvalRsesults[i].text
}
}
},
{
title: '发起单位类型',
dataIndex: 'workplaceTpye',
width: 200,
},
{
title: '联系电话',
width: 150,
dataIndex: 'phone',
},
title: '审批意见',
dataIndex: 'comment',
width: 100,
}
];
export const columns: BasicColumn[] = [
{
@ -77,7 +66,7 @@ export const columns: BasicColumn[] = [
},
{
title: '项目编号',
dataIndex: 'projectid',
dataIndex: 'projectId',
width: 100,
},
{
@ -85,16 +74,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'createTime',
width: 100,
},
// {
// title: '发起单位类型',
// dataIndex: 'workplaceTpye',
// width: 200,
// },
// {
// title: '联系电话',
// width: 150,
// dataIndex: 'phone',
// },
];
export const searchFormSchema: FormSchema[] = [

54
src/views/myWork/inComplete/index.vue

@ -2,44 +2,37 @@
<div>
<!--引用表格-->
<BasicTable @register="registerTable">
<!--插槽:table标题-->
<!--操作栏-->
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<!-- <BasicModal @register="registerModalDetail" title="代办流程信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<inComplectedDetail :dataTo="proid" :taskid="taskid" @close="closeModalDetail()"/>
</BasicModal> -->
<ApprovalPageModel @register="register" :record="rowData" @close="exit"/>
</div>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref, computed, unref } from 'vue';
import { ref} from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, searchFormSchema } from './inComplete.data';
// import { list } from './address.api';
import { myTaskList } from './inComplete.api';
import { useModal } from '/@/components/Modal';
import ApprovalPageModel from '../../ProcessApprovalSubPage/component/ApprovalPageModel.vue'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter();
import { useModal } from '/@/components/Modal';
import { BasicModal } from '/@/components/Modal';
const [register, { openModal }] = useModal();//
let rowData =ref()
let proid = ref()
let taskid = ref()
const [registerModalDetail, { openModal: openDetail, closeModal: closeDetail }] = useModal();//
// import { useRouter } from 'vue-router'
// const router = useRouter();
//
//
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
title: '我的办',
title: '我的办',
api: myTaskList,
columns: columns,
actionColumn: {
@ -52,7 +45,7 @@ const { tableContext } = useListPage({
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
const [registerTable,{reload}] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
@ -64,28 +57,11 @@ function getTableAction(record): ActionItem[] {
}
function handleEdit(record) {
record.procesType="0" //流程类型, 已办是1 代办是0Object.assign({}, xiaoming, {test1:'demo1', test2:'demo2'}); // 第一个参数是 目标对象后面的全是源对象执行完之后返回目标对象
if (record.stage == 1) {
router.push({ // push
path: '/ProcessApprovalSubPage/initiatesProjectsApproval', //name inComplectedDetail
query: record
})
}
else if (record.stage == 2) {
router.push({ // push
path: '/ProcessApprovalSubPage/uploadfileApproval', //name inComplectedDetail
query: record
})
}else if(record.stage ==3){
router.push({ // push
path: '/ProcessApprovalSubPage/projectPlanApproval', //name inComplectedDetail
query: record
})
}
// console.log(selectedRows.value);
// console.log(selectedRowKeys.value);
rowData.value =record
openModal(true)
}
function closeModalDetail() {
closeDetail()
function exit(){
console.log("fatheer")
reload()
}
</script>

618
src/views/projectLib/initiatesProjects/initiatesProjects.data.ts

@ -1,618 +0,0 @@
import { FormSchema, FormActionType } from '/@/components/Form';
import { getDictItemsByCode } from '/@/utils/dict/index';
import { getWorkPlaceTypeDict, getContactorDict } from './initiatesProjects.api'
const projectTypeDicts: Array<Object> = getDictItemsByCode("projectType")
const approvalRsesults: Array<Object> = getDictItemsByCode("approvalResult")
let manageOrgDict = await getWorkPlaceTypeDict({ workPlaceType: "1" })
let supervisorDict = await getWorkPlaceTypeDict({ workPlaceType: "2" })
let contructorDict = await getWorkPlaceTypeDict({ workPlaceType: "4" })
let ownerDict = await getWorkPlaceTypeDict({ workPlaceType: "3" })
let controlerDict = await getWorkPlaceTypeDict({ workPlaceType: "6" })
let consultDict = await getWorkPlaceTypeDict({ workPlaceType: "5" })
const reformTasksDicts: Array<Object> = getDictItemsByCode("reformTasks")
function reformTasksDict() {
for (let i = 0; i < reformTasksDicts.length; i++) {
reformTasksDicts[i].label = reformTasksDicts[i].text;
}
return reformTasksDicts
}
const roomDicts: Array<Object> = getDictItemsByCode("room")
function roomDict() {
for (let i = 0; i < roomDicts.length; i++) {
roomDicts[i].label = roomDicts[i].text;
}
return roomDicts
}
export const formSchemas: FormSchema[] = [
{
//标题名称
label: '项目名称',
//字段
field: 'projectName',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input',
//标题宽度,支持数字和字符串
// labelWidth: 150,
// //标题长度,超过位数隐藏
// labelLength: 3,
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
label: '行政区划',
field: 'adminDivision',
//子标题名称(在主标题后面)
component: 'Input',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
// {
// label: '项目类型',
// field: 'projectType',
// component: 'Select',
// colProps: { span: 12 },
// //填写组件Select的属性
// componentProps: {
// options: projectTypeDict()
// },
// },
{
label: '主要任务',
field: 'description',
//子标题名称(在主标题后面)
component: 'InputTextArea',
//一列占比总共24,比如一行显示2列
colProps: { span: 24 },
required: true,
},
{
//标题名称
label: '责任单位',
//字段
field: 'dutyWorkplace',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '单位属性',
//字段
field: 'workplaceProperties',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '建设周期(月)',
//字段
field: 'constructionPeriod',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//数值精度
precision: 0,
//步数
step: 0.1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '总投资(元)',
//字段
field: 'totalMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '中央资金(元)',
//字段
field: 'centralMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '省级资金(元)',
//字段
field: 'provincialMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '市级资金(元)',
//字段
field: 'cityMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '区县级资金(元)',
//字段
field: 'countyMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '自筹资金(元)',
//字段
field: 'selfMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '2023年支付(元)',
//字段
field: 'payamount2023Money',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '2024年支付(元)',
//字段
field: 'payamount2024Money',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
}, {
//标题名称
label: '2025年支付(元)',
//字段
field: 'payamount2025Money',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
addonBefore: '保留两位小数',
//数值精度
precision: 2,
//步数
step: 1
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '改革所属项目',
//字段
field: 'reformName',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
componentProps:{
options:reformTasksDict()
}
},
{
//标题名称
label: '上级指导室',
//字段
field: 'superLeader',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
componentProps:{
options:roomDict()
}
},
{
//标题名称
label: '项目联系人',
//字段
field: 'projectContacts',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '联系电话',
//字段
field: 'phone',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input',
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
dynamicRules: () => {
return [
{ required: true, message: '请填写手机号' },
{ pattern: /^1[3456789]\d{9}$/, message: '手机号码格式有误' },
];
},
},
{
//标题名称
label: '管理单位',
//字段
field: 'manageOrg',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
console.log("formModel", formModel, "formActionType", formActionType)
return {
//
options: manageOrgDict,
onChange: async (value) => {
// console.log(e)
let manageContactorDict = await getContactorDict({ workPlace: value, workPlaceType: "1" })
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
updateSchema({
field: 'manageContactor',
componentProps: {
options: manageContactorDict,
},
});
setFieldsValue({ manageContactor: "" })
},
};
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '管理单位负责人',
//字段
field: 'manageContactor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: {
options: [],
}, //一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '监管单位',
//字段
field: 'supervisor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
console.log("formModel", formModel, "formActionType", formActionType)
return {
//
options: supervisorDict,
onChange: async (value) => {
// console.log(e)
let supervisorContactorDict = await getContactorDict({ workPlace: value, workPlaceType: "2" })
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
updateSchema({
field: 'supervisorContactor',
componentProps: {
options: supervisorContactorDict,
},
});
setFieldsValue({ supervisorContactor: "" })
},
};
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '监管单位联系人',
//字段
field: 'supervisorContactor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: {
options: [],
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '承建单位',
//字段
field: 'contructor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
console.log("formModel", formModel, "formActionType", formActionType)
return {
//
options: contructorDict,
onChange: async (value) => {
// console.log(e)
let contructorContactorDict = await getContactorDict({ workPlace: value, workPlaceType: "4" })
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
updateSchema({
field: 'contructorContactor',
componentProps: {
options: contructorContactorDict,
},
});
setFieldsValue({ contructorContactor: "" })
},
};
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '承建单位负责人',
//字段
field: 'contructorContactor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: {
options: [],
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '建设单位',
//字段
field: 'owner',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
console.log("formModel", formModel, "formActionType", formActionType)
return {
//
options: ownerDict,
onChange: async (value) => {
// console.log(e)
let ownerContactorDict = await getContactorDict({ workPlace: value, workPlaceType: "3" })
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
updateSchema({
field: 'ownerContactor',
componentProps: {
options: ownerContactorDict,
}
});
setFieldsValue({ ownerContactor: "" })
},
};
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '建设单位负责人',
//字段
field: 'ownerContactor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: {
options: [],
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
},
{
//标题名称
label: '监理单位',
//字段
field: 'controler',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
console.log("formModel", formModel, "formActionType", formActionType)
return {
//
options: controlerDict,
onChange: async (value) => {
// console.log(e)
let controlerContactorDict = await getContactorDict({ workPlace: value, workPlaceType: "6" })
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
updateSchema({
field: 'controlerContactor',
componentProps: {
options: controlerContactorDict,
}
});
setFieldsValue({ controlerContactor: "" })
},
};
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '监理单位负责人',
//字段
field: 'controlerContactor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: {
options: [],
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '咨询单位',
//字段
field: 'consult',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
console.log("formModel", formModel, "formActionType", formActionType)
return {
//
options: consultDict,
onChange: async (value) => {
// console.log(e)
let consultContactoDict = await getContactorDict({ workPlace: value, workPlaceType: "5" })
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
updateSchema({
field: 'consultContactor',
componentProps: {
options: consultContactoDict,
}
});
setFieldsValue({ consultContactor: "" })
},
};
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
{
//标题名称
label: '咨询单位负责人',
//字段
field: 'consultContactor',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Select',
componentProps: {
options: [],
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
},
];

29
src/views/projectLib/initiatesProjects/initiatesProjects.vue

@ -10,19 +10,13 @@
<script lang="ts" name="initiatesProjects" setup>
import { } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas } from './initiatesProjects.data';
import { submitProjectInfo, getWorkPlaceTypeDict } from './initiatesProjects.api'
import { formSchemas } from '../projectInfo/projectInfo.data';
import { submitProjectInfo } from './initiatesProjects.api'
import { Modal } from 'ant-design-vue';
let emit = defineEmits(["close"])
let res = getWorkPlaceTypeDict({ workPlaceType: "2" })
console.log("getWorkPlaceTypeDictgetWorkPlaceTypeDictgetWorkPlaceTypeDictgetWorkPlaceTypeDictgetWorkPlaceTypeDictgetWorkPlaceTypeDict", res)
/**
* BasicForm绑定注册;
* useForm 是整个框架的核心用于表单渲染里边封装了很多公共方法;
* 支持schemas: 渲染表单列autoSubmitOnEnter回车提交,submitButtonOptions自定义按钮文本和图标等方法
* 平台通过此封装简化了代码支持自定义扩展;
*/
const [registerForm, { validate, setFieldsValue, getFieldsValue }] = useForm({
//
schemas: formSchemas,
@ -40,21 +34,6 @@ const [registerForm, { validate, setFieldsValue, getFieldsValue }] = useForm({
wrapperCol: { style: { width: 'auto' } },
});
//table
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
async function customResetFunc() {
emit("close")
}

12
src/views/projectLib/planinfoHistory/index.vue

@ -11,7 +11,7 @@
</BasicTable>
</div>
<BasicModal @register="registeProjectrModal" title="项目信息详情" width="1200px" :showOkBtn="false">
<Detaillist :projectid="proid" />
<planinfoHistoryDetaillist :projectid="proid" />
</BasicModal>
</template>
@ -23,13 +23,11 @@ import { useListPage } from '/@/hooks/system/useListPage';
import { BasicModal,useModal } from '/@/components/Modal';
import { searchFormSchema } from '../projectInfo/projectInfo.data';
import {columns} from './planinfoHistory.data'
import {columns} from '../projectInfo/projectInfo.data'
// import { list } from './address.api';
import Detaillist from './Detaillist.vue';
import planinfoHistoryDetaillist from './planinfoHistoryDetaillist.vue';
import { planInfoHistoryPageList } from './planinfoHistory.api';
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
let proid = ref();
const [registeProjectrModal, { openModal: openModalProjectr }] = useModal();//
@ -51,7 +49,7 @@ const { tableContext } = useListPage({
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
const [registerTable] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
@ -70,4 +68,4 @@ function handleDetailpage(record) {
</script>
<style scoped></style>./projectInfoHistory.data
<style scoped></style>

33
src/views/projectLib/planinfoHistory/planinfoHistory.data.ts

@ -1,39 +1,6 @@
import { BasicColumn } from '/@/components/Table';
// function approvalRsesult(){
// for(let i = 0;i<approvalRsesults.length;i++){
// approvalRsesults[i].label=approvalRsesults[i].text;
// }
// return approvalRsesults
// }
export const columns: BasicColumn[] = [
{
title: '项目编号',
width: 150,
dataIndex: 'id',
},
{
title: '项目名称',
dataIndex: 'projectName',
width: 150,
},
{
title: '主要任务及标志性成果',
dataIndex: 'description',
width: 150,
},
{
title: '责任单位',
dataIndex: 'dutyWorkplace',
width: 100,
},
{
title: '联系电话',
width: 150,
dataIndex: 'phone',
},
];
export const columnschild: BasicColumn[] = [
{
title: 'id',

6
src/views/projectLib/planinfoHistory/planinfoHistoryDetaillist.vue

@ -26,10 +26,8 @@
// import { list } from './address.api';
import planinfoHistoryDetailpage from './planinfoHistoryDetailpage.vue';
import { singlePlanInfoHistoryPageList } from './planinfoHistory.api';
import { useUserStore } from '/@/store/modules/user';
let dataTo = defineProps(["projectid"])
const userStore = useUserStore();
let proid = ref();
let groupid = ref();
const [registeProjectrModal, { openModal: openModalProjectr }] = useModal();//
@ -53,7 +51,7 @@
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
const [registerTable] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
@ -73,4 +71,4 @@
</script>
<style scoped></style>./projectInfoHistory.data
<style scoped></style>

10
src/views/projectLib/planinfoHistory/planinfoHistoryDetailpage.vue

@ -4,16 +4,13 @@
</BasicTable>
</template>
<script lang="ts" name="planinfoHistoryDetailpage" setup>
import { ref, defineProps, onMounted,onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { defineProps } from 'vue'
import { PlaninfoColumn } from '../../projectLib/projectPlan/projectPlan.data';
import { queryPlanInfoHistoryGroupList } from './planinfoHistory.api';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { BasicTable } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { getUserInfoByid } from '../initiatesProjects/initiatesProjects.api'
let dataTo = defineProps(["projectid","groupid"])
let projectstage = ref()
let dataTo = defineProps(["projectid", "groupid"])
// table
@ -38,4 +35,3 @@ const [registerPlanTable] = tableContextPlan;
</script>
<style></style>
./projectInfoHistory.data

80
src/views/projectLib/projectArchive/SubmitProjectArchive.vue

@ -0,0 +1,80 @@
<template>
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="项目入库详情" name="1">
<ProjectDetails :IsEdit="false" :projectid="projectid" />
</el-tab-pane>
<el-tab-pane label="项目监理管理资料" name="2">
<el-divider content-position="left">项目资料详情</el-divider>
<UploadfileDetail :projectid="projectid" :stage="1" />
<el-divider content-position="left">意见文件</el-divider>
<UploadfileDetail :projectid="projectid" :stage="2" />
</el-tab-pane>
<el-tab-pane label="项目计划详情" name="3">
<PlaninfoDetails :projectid="projectid" :showActionColumn="true">
<template #default="record">
<TableAction :actions="getTableAction(record)" />
</template>
</PlaninfoDetails>
</el-tab-pane>
</el-tabs>
<ApprovalDetails :projectid="projectid" :stage="5" v-if="showApprovalForm" />
<planinfoFileDetail @register="registerFileInfo" :planinfoid="planinfoid" :taskName="taskName" :isfinish="isfinish" />
<div style="display: flex; justify-content: center; align-items: center; height: 100px;" v-if="!showApprovalForm">
<el-button type="primary" @click="submitImportForm">发起审批</el-button>
<el-button type="info" @click="closeModel()">关闭窗口</el-button>
</div>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref } from 'vue';
import { useModal } from '/@/components/Modal';
import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue"
import UploadfileDetail from "../../ProcessApprovalSubPage/component/UploadfileDetail.vue"
import PlaninfoDetails from "../../ProcessApprovalSubPage/component/PlaninfoDetails.vue"
import { ActionItem, TableAction } from '/@/components/Table';
import planinfoFileDetail from '../projectPlan/planinfoFileDetail.vue'
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue"
import { submitProjectArchive } from "./projectArchive.api"
import type { TabsPaneContext } from 'element-plus'
let emit = defineEmits(["close"])
let dataTo = defineProps(["projectid", "showApprovalForm"])
let planinfoid = ref()
let taskName = ref()
let isfinish = ref()
const [registerFileInfo, { openModal: openFileInfo }] = useModal();//
console.log("dataTo",dataTo)
const activeName = ref('1')
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
}
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
}
function handleDetail(record) {
console.log("rrrrrrrr", record)
planinfoid.value = record.record.id
taskName.value = record.record.taskName
isfinish.value = record.record.isfinish
console.log("rrrrrrrr", record, record.id, record.taskName, planinfoid.value, taskName.value)
openFileInfo()
}
function submitImportForm() {
submitProjectArchive({ projectid: dataTo.projectid })
}
function closeModel() {
emit("close")
}
</script>
<style scoped></style>

141
src/views/projectLib/projectArchive/index.vue

@ -0,0 +1,141 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable">
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<BasicModal @register="registerSubmitProjectArchive" title="归档信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<SubmitProjectArchive :projectid="projectid" :showApprovalForm="showApprovalForm" @close="close"/>
</BasicModal>
</div>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { useModal,BasicModal } from '/@/components/Modal';
import SubmitProjectArchive from './SubmitProjectArchive.vue'
// const viewPlanDetail = defineAsyncComponent(() =>
// import('./viewPlanDetail.vue')
// )
import { columns, searchFormSchema } from '../projectInfo/projectInfo.data';
import { projectArchivePageList } from './projectArchive.api';
const [registerSubmitProjectArchive, { openModal: openModalSubmitProjectArchive,closeModal }] = useModal();
let projectid = ref()
let showApprovalForm = ref<boolean>(false)
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
title: '项目归档信息',
api: projectArchivePageList,
columns: columns,
actionColumn: {
width: 120,
fixed: "right",
},
//
formConfig: {
schemas: searchFormSchema,
}
},
});
//BasicTable
const [registerTable] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
ifShow: () => {
return record.stage > 6
},
onClick: handleDetailpage.bind(null, record),
},
{
label: '发起归档流程',
ifShow: () => {
return record.stage == 6
},
onClick: handleSubmit.bind(null, record)
}
];
}
function handleDetailpage(record) {
projectid.value=record.id
showApprovalForm.value = true
openModalSubmitProjectArchive(true)
}
function handleSubmit(record) {
projectid.value=record.id
showApprovalForm.value = false
openModalSubmitProjectArchive(true)
}
function close(){
closeModal()
}
</script>
<style scoped>
.timeline {
display: flex;
width: 100%;
margin-bottom: 100px;
.lineitem {
transform: translateX(50%);
width: 25%;
}
}
::v-deep .el-timeline-item__tail {
border-left: none;
width: 100%;
border-top: 2px solid #e4e7ed;
position: absolute;
top: 6px;
}
::v-deep .el-timeline-item__wrapper {
padding-left: 0;
position: absolute;
top: 20px;
transform: translateX(-50%);
text-align: center;
}
::v-deep .el-timeline-item__timestamp {
font-size: 14px;
}
.nested-timeline {
margin-left: 20px;
border-left: 1px dashed #ccc;
padding-left: 20px;
}
.nested-timeline-item {
margin-bottom: 10px;
}
::v-deep .ant-table-expanded-row {
height: auto !important;
/* 其他样式 */
}
</style>

22
src/views/projectLib/projectArchive/projectArchive.api.ts

@ -0,0 +1,22 @@
import { defHttp } from '/@/utils/http/axios';
export enum Api {
submitProjectArchive = '/huzhouProject/submitProjectArchive',
approveProjectArchive="/huzhouProject/approveProjectArchive",
projectArchivePageList = '/huzhouProject/projectArchivePageList',
queryPlanModuleDetailPage = "/huzhouPlan/queryPlanModuleDetailPage",
}
/**
*
*/
export const submitProjectArchive = (params) => defHttp.post({ url: Api.submitProjectArchive, params })
export const approveProjectArchive = (params) => defHttp.post({ url: Api.approveProjectArchive, params })
export const projectArchivePageList = (params) => defHttp.get({ url: Api.projectArchivePageList, params })
// export const submitplaninfoUploadFile = (params?) =>defHttp.post({ url: Api.submitplaninfoUploadFile,headers:{ "Content-Type": "multipart/form-data" }, params })

5
src/views/projectLib/projectArchive/projectArchive.data.ts

@ -0,0 +1,5 @@
import { FormSchema } from '/@/components/Form';
import { BasicColumn } from '/@/components/Table';
import { getDictItemsByCode } from '/@/utils/dict/index';
import { useUserStore } from '/@/store/modules/user';
import dayjs from "dayjs";

60
src/views/projectLib/projectContract/DetailTable.vue

@ -0,0 +1,60 @@
<template>
<div>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
</div>
</template>
<script lang="ts" name="DetailTable" setup>
//ts
import { defineProps } from 'vue';
import { BasicTable, ActionItem, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { contractDetailcolumns } from './projectContract.data';
import { getContractinfoListById } from './projectContract.api'
import { downloadFile } from "../../../api/common/api"
let dataTo = defineProps(["stage","id"])
//
//table
const { tableContext: resourceTableContext } = useListPage({
tableProps: {
size: 'small',//
api: getContractinfoListById,
columns: contractDetailcolumns,
useSearchForm: false,
actionColumn: {
width: 120,
fixed: "right",
},
beforeFetch(params) {
params.id = dataTo.id
},
},
});
const [registerResourceTable] = resourceTableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
}
];
}
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
</script>
<style scoped></style>

16
src/views/projectLib/projectContract/contractDetail.vue

@ -0,0 +1,16 @@
<template>
<ProjectDetails :IsEdit="false" :projectid="projectid" ref="ProjectDetailsRef" />
<div>
<el-divider content-position="left">合同资料详情</el-divider>
<DetailTable :id="id" />
</div>
</template>
<script lang="ts" name="uploadfileApproval" setup>
import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue"
import DetailTable from "./DetailTable.vue"
defineProps(["projectid","id"])
</script>
<style></style>

119
src/views/projectLib/projectContract/index.vue

@ -0,0 +1,119 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable">
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
</template>
</BasicTable>
<projectContract @register="registerSubmitProjectArchive" @close="closeModel" />
<BasicModal @register="registecontractDetail" title="合同信息详情" width="1200px" :showOkBtn="false">
<contractDetail :projectid="projectid" @close="closeProjectrModal" :id="id" />
</BasicModal>
</div>
</template>
<script lang="ts" name="system-user" setup>
//ts
import {ref} from "vue"
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { BasicModal, useModal } from '/@/components/Modal';
import { contractShowcolumns, searchFormSchema } from './projectContract.data';
import projectContract from "./projectContract.vue"
import contractDetail from './contractDetail.vue'
import { huzhouContractinfoPageList, deleteContractinfo } from './projectContract.api';
const [registerSubmitProjectArchive, { openModal }] = useModal();
const [registecontractDetail, { openModal: opencontractDetail, closeModal: closecontractDetail }] = useModal();
let projectid =ref()
let id = ref()
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
title: '合同信息',
api: huzhouContractinfoPageList,
columns: contractShowcolumns,
actionColumn: {
width: 120,
fixed: "right",
},
//
formConfig: {
schemas: searchFormSchema,
}
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
ifShow: () => {
return record.totalAmount != null
},
onClick: handledetail.bind(null, record),
},
{
label: '新增',
ifShow: () => {
return record.totalAmount == null
},
onClick: handleuploadContract.bind(null, record),
}
];
}
function getDropDownAction(record): ActionItem[] {
if (record.totalAmount == null) {
return []
}
return [
{
label: '修改',
onClick: handleModify.bind(null, record)
},
{
label: '删除',
popConfirm: {
title: '确定删除吗?',
confirm: handleDelete.bind(null, record),
},
}
];
}
function handleModify(record) {
openModal(true, { id: record.id })
}
function handledetail(record) {
// openModal(true,{id:null,projectid:record.id})
projectid.value = record.pid
id =record.id
opencontractDetail()
}
function closeProjectrModal() {
closecontractDetail()
}
async function handleDelete(record) {
await deleteContractinfo({ id: record.id })
reload()
}
function closeModel() {
reload()
}
function handleuploadContract(record) {
console.log("refffffffffffffffffffff", record)
openModal(true, { id: null, projectid: record.pid })
}
</script>
<style scoped></style>

26
src/views/projectLib/projectContract/projectContract.api.ts

@ -0,0 +1,26 @@
import { defHttp } from '/@/utils/http/axios';
import { downloadFile } from "../../../api/common/api"
export enum Api {
huzhouContractinfoPageList = '/huzhouContractinfo/huzhouContractinfoPageList',
addContractinfo="/huzhouContractinfo/addContractinfo",
modifyContractinfo = '/huzhouContractinfo/modifyContractinfo',
getContractinfoById="/huzhouContractinfo/getContractinfoById",
deleteContractinfo = '/huzhouContractinfo/deleteContractinfo',
isExistContractinfo="/huzhouContractinfo/isExistContractinfo",
getContractinfoListById="/huzhouContractinfo/getContractinfoListById"
}
export const huzhouContractinfoPageList = (params) => defHttp.get({ url: Api.huzhouContractinfoPageList, params })
export const getContractinfoById = (params) => defHttp.get({ url: Api.getContractinfoById, params })
export const isExistContractinfo = (params) => defHttp.get({ url: Api.isExistContractinfo, params })
export const getContractinfoListById = (params) => defHttp.get({ url: Api.getContractinfoListById, params })
export const addContractinfo = (params?) =>defHttp.post({ url: Api.addContractinfo,headers:{ "Content-Type": "multipart/form-data" }, params })
export const modifyContractinfo = (params?) =>defHttp.post({ url: Api.modifyContractinfo,headers:{ "Content-Type": "multipart/form-data" }, params })
export const deleteContractinfo = (params?) =>defHttp.post({ url: Api.deleteContractinfo, params })

193
src/views/projectLib/projectContract/projectContract.data.ts

@ -0,0 +1,193 @@
import { FormSchema } from '/@/components/Form';
import { BasicColumn } from '/@/components/Table';
export const contractShowcolumns: BasicColumn[] = [
{
title: '项目名称',
dataIndex: 'projectName',
},
{
title: '合同总金额',
dataIndex: 'totalAmount',
},
{
title: '文件名称',
dataIndex: 'documentName',
width: 150,
},
{
title: '文件大小',
dataIndex: 'size',
width: 150,
customRender: ({ record }) => {
let kbNum: number = record.size / 1024
if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB"
} else {
let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB"
}
},
},
];
export const contractDetailcolumns: BasicColumn[] = [
{
title: '合同总金额',
dataIndex: 'totalAmount',
},
{
title: '首付时间',
dataIndex: 'downpaymentDate',
},
{
title: '首付比例',
dataIndex: 'downpaymentRatio',
},
{
title: '初验时间',
dataIndex: 'initialDate',
},
{
title: '初验比例',
dataIndex: 'initialRatio',
},
{
title: '终验时间',
dataIndex: 'finalDate',
},
{
title: '终验比例',
dataIndex: 'finalRatio',
},
{
title: '文件名称',
dataIndex: 'documentName',
width: 150,
},
{
title: '文件大小',
dataIndex: 'size',
width: 150,
customRender: ({ record }) => {
let kbNum: number = record.size / 1024
if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB"
} else {
let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB"
}
},
},
];
export const searchFormSchema: FormSchema[] = [
{
label: '项目名称',
field: 'projectName',
component: 'Input',
},
{
label: '文件名称',
field: 'documentName',
component: 'Input',
}
];
export const contractformSchemas: FormSchema[] = [
{
label: '首付时间',
field: 'downpaymentDate',
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD',
},
required: true,
colProps: { span: 12},
},
{
label: '首付比例',
field: 'downpaymentRatio',
component:'InputNumber',
componentProps: {
//数值精度
precision: 0,
//步数
step: 1
},
required: true,
colProps: { span: 12 },
},
{
label: '初验时间',
field: 'initialDate',
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD',
},
required: true,
colProps: { span: 12},
},
{
label: '初验比例',
field: 'initialRatio',
component: 'InputNumber',
componentProps: {
//数值精度
precision: 0,
//步数
step: 1
},
required: true,
colProps: { span: 12 },
},
{
label: '终验时间',
field: 'finalDate',
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD',
},
required: true,
colProps: { span: 12 },
},
{
label: '终验比例',
field: 'finalRatio',
component: 'InputNumber',
componentProps: {
//数值精度
precision: 0,
//步数
step: 1
},
required: true,
colProps: { span: 12 },
},
{
label: '合同总金额',
field: 'totalAmount',
component: 'InputNumber',
componentProps: {
//数值精度
precision: 2,
//步数
step: 1
},
required: true,
colProps: { span: 12 },
}
];

136
src/views/projectLib/projectContract/projectContract.vue

@ -0,0 +1,136 @@
<template>
<!-- 自定义表单 -->
<BasicModal @register="registerModal" title="归档信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<el-divider content-position="left">合同信息</el-divider>
<BasicForm @register="registerContractForm" />
<el-divider content-position="left">上传合同文件</el-divider>
<el-form ref="importFormRef" label-width="130px">
<el-form-item label="上传文件:">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="1" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过10M</div>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitImportForm">上传</el-button>
<el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item>
</el-form>
</BasicModal>
</template>
<script lang="ts" name="addAndModify" setup>
import { ref, reactive, defineProps, watchEffect } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { contractformSchemas } from './projectContract.data';
import { modifyContractinfo, addContractinfo, getContractinfoById } from './projectContract.api';
import { ElMessage } from 'element-plus'
import { useModalInner, BasicModal } from '/@/components/Modal';
const [registerModal, { closeModal }] = useModalInner(init);
let fileList = reactive<Array<any>>([]);
let id = ref()
let projectid = ref()
const emit = defineEmits(['close']);
async function init(data) {
console.log("datadatadata",data)
if (data.projectid) {
projectid.value = data.projectid
}
fileList.pop()
if (data.id != null) {
id.value = data.id
let param: any = {
id: data.id
}
let res = await getContractinfoById(param)
console.log("结果是", res)
setFieldsValue(res)
}
}
//
const [registerContractForm, { setFieldsValue: setFieldsValue, getFieldsValue, validate }] = useForm({
//
schemas: contractformSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
// fileList,
function httpRequest(option) {
fileList.push(option)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
console.log(fileList, option)
}
//
function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 10 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传10M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
//Excel
async function submitImportForm() {
if (await validate()) {
let data = await getFieldsValue()
console.log("data", data)
// 使form
if (id.value != null) {
if (fileList.length > 0) {
data.file = fileList[0].file
}
//
data.id=id.value
modifyContractinfo(data)
} else {
if (fileList.length == 0) {
ElMessage.warning("请上传文件")
return;
}
data.file = fileList[0].file
data.projectid =projectid.value
addContractinfo(data)
}
dialogVisible()
}
}
function dialogVisible() {
closeModal()
emit("close")
}
</script>
<style></style>

96
src/views/projectLib/projectInfo/Detailpage.vue

@ -1,10 +1,7 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
<ProjectDetails :IsEdit="false" :projectid="projectid" />
<div v-if="projectstage >= 3">
<div v-if="stage >= 3&&IsModify==2">
<el-divider content-position="left">项目资料详情</el-divider>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
@ -12,53 +9,21 @@
</template>
</BasicTable>
</div>
<el-divider content-position="left">审批详情</el-divider>
<BasicTable @register="registerApproveStartTable" />
<ApprovalDetails :projectid="projectid" :stage="stage>=3&&IsModify==2?2:1"/>
</template>
<script lang="ts" name="Detailpage" setup>
import { ref, defineProps, onMounted,onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas, approveStartProcessColumns, resourcetableColumns } from './projectInfo.data';
import { queryProjectInfoById, queryProcessInfo, uploacFilePageList } from './projectInfo.api'
import { defineProps } from 'vue'
import { resourcetableColumns } from './projectInfo.data';
import { uploacFilePageList } from './projectInfo.api'
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { downloadFile } from "../../../api/common/api"
import { getUserInfoByid } from '../initiatesProjects/initiatesProjects.api'
import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue"
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue"
let dataTo = defineProps(["projectid"])
let projectstage = ref()
let proform =ref()
onMounted(async () => {
console.log("projectid", dataTo.projectid)
let param: any = {
projectid: dataTo.projectid
}
let resProject = await queryProjectInfoById(param)
proform =resProject
setFieldsValue(resProject)
projectstage.value = resProject.stage
console.log("projectid", dataTo.projectid, projectstage.value)
})
onUpdated(async()=>{
console.log("getFieldsValueProjectForm",proform)
for (let key in proform) {
if (key.indexOf("Contactor") != -1&&proform[key]!=null) {
let userid = proform[key]
let res = await getUserInfoByid({ id: userid })
console.log("Contactor",key, res)
updateProjectSchema({
field: key,
componentProps: {
options: [{
value: userid,
label: res.realname
}
],
}
})
}
}
})
let dataTo = defineProps(["projectid","stage","IsModify"])
console.log("dataTo11111",dataTo)
function getTableAction(record): ActionItem[] {
return [
{
@ -68,46 +33,7 @@ function getTableAction(record): ActionItem[] {
}
];
}
/**
* BasicForm绑定注册;
* useForm 是整个框架的核心用于表单渲染里边封装了很多公共方法;
* 支持schemas: 渲染表单列autoSubmitOnEnter回车提交,submitButtonOptions自定义按钮文本和图标等方法
* 平台通过此封装简化了代码支持自定义扩展;
*/
const [registerProjectForm, { setFieldsValue,getFieldsValue: getFieldsValueProjectForm, setProps, updateSchema: updateProjectSchema }] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled: true
});
//table
const { tableContext: approveStarttableContext } = useListPage({
tableProps: {
size: 'small',//
title: '审批详情',
api: queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.stage = projectstage.value>=3?"2":"1",
params.projectid = dataTo.projectid
},
},
});
// BasicTable
const [registerApproveStartTable] = approveStarttableContext;
//table
const { tableContext } = useListPage({

5
src/views/projectLib/projectInfo/batchImportProjects.vue

@ -20,9 +20,8 @@
</el-form>
</template>
<script lang="ts" name="uploadFile" setup>
import { ref, reactive, defineProps, watchEffect } from 'vue'
import { useForm } from '/@/components/Form';
import { formSchemas } from './projectInfo.data';
import { reactive, defineProps, watchEffect } from 'vue'
import { batchImportProjects } from './projectInfo.api';
import { ElMessage } from 'element-plus'
import { downloadFile } from "../../../api/common/api"

67
src/views/projectLib/projectInfo/index.vue

@ -11,14 +11,15 @@
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增入库项目</a-button>
<a-button type="primary" preIcon="ant-design:upload-outlined" @click="handleBatchImport"> 批量导入入库项目</a-button>
<a-button type="primary" preIcon="ant-design:download-outlined" @click="handleBatchdownload"> 导出项目</a-button>
</template>
</BasicTable>
</div>
<BasicModal @register="registeProjectrModal" title="项目信息详情" width="1200px" :showOkBtn="false">
<Detailpage :projectid="proid" />
<Detailpage :projectid="proid" :stage="ProjectStage" :IsModify="IsModify"/>
</BasicModal>
<BasicModal @register="registeinitiatesModal" title="发起项目入库申请" width="1200px" :showOkBtn="false">
<initiatesProjects @close="closeinitiatesModal()"/>
<initiatesProjects @close="closeinitiatesModal()" />
</BasicModal>
<BasicModal @register="registerModalUploadFiles" title="申报项目资料" width="1200px" :showOkBtn="false"
:showCancelBtn="false">
@ -28,6 +29,11 @@
:showCancelBtn="false">
<batchImportProjects :projectid="proid" @close="closeBatchImportModal()" />
</BasicModal>
<BasicModal @register="registeProjectrModalModify" title="修改项目信息" width="1200px" :showOkBtn="false">
<childProjectsApproval :projectid="proid" :IsEdit="true" @close="closeProjectrModal" :IsApproval="true" />
</BasicModal>
<addModifyWorkreport @register="registeraddworkreport" />
</template>
<script lang="ts" name="system-user" setup>
@ -36,22 +42,28 @@ import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { BasicModal,useModal } from '/@/components/Modal';
import { BasicModal, useModal } from '/@/components/Modal';
import { columns, searchFormSchema } from './projectInfo.data';
// import { list } from './address.api';
import Detailpage from './Detailpage.vue';
import uploadFile from './uploadFile.vue';
import initiatesProjects from '../initiatesProjects/initiatesProjects.vue'
import batchImportProjects from './batchImportProjects.vue'
import { projectInfoPageList } from './projectInfo.api';
import childProjectsApproval from '../../ProcessApprovalSubPage/initiatesProjectsApproval/childProjectsApproval.vue'
import addModifyWorkreport from '../workReport/addModifyWorkreport.vue'
import { projectInfoPageList, batchdownloadProject } from './projectInfo.api';
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
let proid = ref();
let ProjectStage = ref()
let IsModify = ref()
const [registeProjectrModal, { openModal: openModalProjectr }] = useModal();//
const [registerModalUploadFiles, { openModal: openUploadFiles, closeModal: closeUploadFiles }] = useModal();//
const [registeinitiatesModal, { openModal: openinitiate, closeModal: closeinitiates }] = useModal();//
const [registerModalBatchImport, { openModal: openBatchImport, closeModal: closeBatchImport }] = useModal();//
const [registeProjectrModalModify, { openModal: openModelModfiy, closeModal: closeModelModfiy }] = useModal();//
const [registeraddworkreport, { openModal: openModelregisteraddworkreport}] = useModal();//
const { tableContext } = useListPage({
@ -71,7 +83,7 @@ const { tableContext } = useListPage({
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
const [registerTable, { reload, getForm }] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
@ -93,17 +105,30 @@ function getDropDownAction(record): ActionItem[] {
},
onClick: handleuploadFile.bind(null, record)
},
{
label: '修改项目信息',
ifShow: () => {
return record.stage >= 2 && record.stage <=6 && record.creator == userStore.getUserInfo.id &&record.ismodify==2
},
onClick: handleumodifyinfo.bind(null, record)
},
{
label: '上传周报月报',
ifShow: () => {
return record.stage >= 2 && record.creator == userStore.getUserInfo.id
},
onClick: handleWorkreport.bind(null, record)
}
];
}
function handleDetailpage(record) {
ProjectStage.value = record.stage
proid.value = record.id
IsModify.value=record.ismodify
openModalProjectr()
// console.log(selectedRows.value);
// console.log(selectedRowKeys.value);
}
function handleuploadFile(record) {
proid.value = record.id
@ -118,18 +143,38 @@ function closeUploadFilesModal() {
function handleCreate() {
openinitiate()
}
function closeinitiatesModal(){
function closeinitiatesModal() {
closeinitiates()
reload()
}
function handleBatchImport(){
function handleBatchImport() {
openBatchImport()
}
function closeBatchImportModal(){
function closeBatchImportModal() {
closeBatchImport()
reload()
}
function handleBatchdownload() {
let { getFieldsValue } = getForm()
let fromData = getFieldsValue()
batchdownloadProject(fromData)
console.log("getFieldsValue", getFieldsValue())
}
function handleumodifyinfo(record){
proid.value = record.id
openModelModfiy()
reload()
}
function handleWorkreport(record){
openModelregisteraddworkreport(true,{projectid:record.id})
}
function closeProjectrModal(){
closeModelModfiy()
reload()
}
</script>
<style scoped></style>

5
src/views/projectLib/projectInfo/projectInfo.api.ts

@ -1,4 +1,4 @@
import { update } from 'lodash-es';
import { downloadFile } from "../../../api/common/api"
import { defHttp } from '/@/utils/http/axios';
export enum Api {
@ -11,6 +11,7 @@ export enum Api {
batchImportProjects="/huzhouProject/batchImportProjects",
getIsbatchImportProjects = '/huzhouProject/getIsbatchImportProjects',
batchImportProjectPageListByInstid = '/huzhouProject/batchImportProjectPageListByInstid',
batchdownloadProject="/huzhouProject/batchdownloadProject"
}
/**
*
@ -30,6 +31,8 @@ export const batchImportProjects = (params?) =>defHttp.post({ url: Api.batchImp
export const getIsbatchImportProjects = (params?) =>defHttp.get({ url: Api.getIsbatchImportProjects, params });
export const batchImportProjectPageListByInstid = (params?) =>defHttp.get({ url: Api.batchImportProjectPageListByInstid, params });
export const batchdownloadProject = (params?) => downloadFile(Api.batchdownloadProject,"项目入库数据.xlsx",params)

35
src/views/projectLib/projectInfo/projectInfo.data.ts

@ -643,7 +643,7 @@ export const formSchemas: FormSchema[] = [
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
// required: true,
},
{
//标题名称
@ -747,40 +747,7 @@ export const formSchemas: FormSchema[] = [
}
];
export const approveStartProcessColumns: BasicColumn[] = [
{
title: '节点名称',
dataIndex: 'taskName',
},
{
title: '处理人',
dataIndex: 'operator',
width: 150,
},
{
title: '处理时间',
dataIndex: 'operateDate',
width: 150,
},
{
title: '审批状态',
dataIndex: 'approvalStatue',
width: 100,
customRender: ({ record }) => {
for (let i = 0; i < approvalRsesults.length; i++) {
if (record.approvalStatue == approvalRsesults[i].value) {
return approvalRsesults[i].text
}
}
},
},
{
title: '审批意见',
dataIndex: 'comment',
width: 100,
}
];
export const resourcetableColumns: BasicColumn[] = [
{
title: '文件名称',

82
src/views/projectLib/projectInfo/uploadFile.vue

@ -6,7 +6,7 @@
<el-form-item label="上传文件:">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="5">
:on-exceed="handleExceed" :limit="5" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过5M</div>
</el-upload>
@ -17,77 +17,36 @@
<el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item>
</el-form>
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
<ProjectDetails :IsEdit="false" :projectid="projectid" />
</template>
<script lang="ts" name="submitUploadFile" setup>
import { ref, reactive, defineProps, watchEffect } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas, uploadFileformSchemas } from './projectInfo.data';
import { queryProjectInfoById, submitUploadFile } from './projectInfo.api';
import { reactive, defineProps } from 'vue'
import { submitUploadFile } from './projectInfo.api';
import { ElMessage } from 'element-plus'
import { defHttp } from '/@/utils/http/axios';
import { string } from 'vue-types';
import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue"
let fileList = reactive<Array<any>>([]);
let dataTo = defineProps(["projectid"])
const emit = defineEmits(['close']);
let projecystage = ref()
//
watchEffect(async () => {
console.log("dataTo", dataTo, dataTo.projectid)
let param: any = {
projectid: dataTo.projectid
}
let res = await queryProjectInfoById(param)
console.log("结果是", res)
setProjectFieldsValue(res)
projecystage.value = res.stage
})
//
const [registerProjectForm, { setFieldsValue: setProjectFieldsValue, getFieldsValue }] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled: true
});
// const [registerFormUploadFile] = useForm({
// //
// schemas: uploadFileformSchemas,
// // showActionButtonGroup: false,
// resetButtonOptions: { text: '', preIcon: '' },
// // showActionButtonGroup: false,
// //
// // autoSubmitOnEnter: true,
// // //
// // showResetButton: false,
// //
// submitButtonOptions: { text: '', preIcon: '' },
// // 24 0-24
// actionColOptions: { span: 14 },
// labelCol: { style: { width: '120px' } },
// wrapperCol:{ style: { width: 'auto' } },
// });
// function handleSubmit(){
// }
// fileList,
function httpRequest(option) {
fileList.push(option)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
console.log(fileList, option)
}
//
function beforeUpload(file) {
let fileSize = file.size
@ -112,15 +71,6 @@ function handleExceed() {
}
//Excel
async function submitImportForm() {
let data = await getFieldsValue()
console.log("datadatadatadatadatadata", data)
if (data.stage != 2) {
ElMessage({
message: "当前阶段无法上传文件",
type: "error"
})
return
}
// 使form
const params = new FormData()
// paramsData

51
src/views/projectLib/projectInfoHistory/Detaillist.vue

@ -11,30 +11,27 @@
</BasicTable>
</div>
<BasicModal @register="registeProjectrModal" title="项目信息详情" width="1200px" :showOkBtn="false">
<Detailpage :projectid="proid" />
<ProjectDetails :IsEdit="false" :projectid="proid" />
</BasicModal>
</template>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
<script lang="ts" name="system-user" setup>
//ts
import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { BasicModal,useModal } from '/@/components/Modal';
import {columns} from './projectInfoHistory.data'
// import { list } from './address.api';
import Detailpage from './Detailpage.vue';
import { singleProjectInfoHistoryPageList } from './projectInfoHistory.api';
import { useUserStore } from '/@/store/modules/user';
let dataTo = defineProps(["projectid"])
import { BasicModal, useModal } from '/@/components/Modal';
import { columns } from '../projectInfo/projectInfo.data'
import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue"
import { singleProjectInfoHistoryPageList } from './projectInfoHistory.api';
let dataTo = defineProps(["projectid"])
const userStore = useUserStore();
let proid = ref();
const [registeProjectrModal, { openModal: openModalProjectr }] = useModal();//
let proid = ref();
const [registeProjectrModal, { openModal: openModalProjectr }] = useModal();//
const { tableContext } = useListPage({
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
title: '项目信息',
@ -50,10 +47,10 @@
params.projectId = dataTo.projectid
},
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
function getTableAction(record): ActionItem[] {
});
//BasicTable
const [registerTable] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
@ -61,14 +58,14 @@
},
];
}
}
function handleDetailpage(record) {
function handleDetailpage(record) {
proid.value = record.id
openModalProjectr()
}
}
</script>
</script>
<style scoped></style>./projectInfoHistory.data
<style scoped></style>

111
src/views/projectLib/projectInfoHistory/Detailpage.vue

@ -1,111 +0,0 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" />
</template>
<script lang="ts" name="Detailpage" setup>
import { ref, defineProps, onMounted,onUpdated } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { formSchemas, } from '../projectInfo/projectInfo.data';
import { queryProjectInfoHistoryById } from './projectInfoHistory.api';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { getUserInfoByid } from '../initiatesProjects/initiatesProjects.api'
let dataTo = defineProps(["projectid"])
let projectstage = ref()
onMounted(async () => {
console.log("projectid", dataTo.projectid)
let param: any = {
id: dataTo.projectid
}
let resProject = await queryProjectInfoHistoryById(param)
setFieldsValue(resProject)
projectstage.value = resProject.stage
console.log("projectid", dataTo.projectid, projectstage.value)
})
onUpdated(async()=>{
let proform = getFieldsValueProjectForm()
for (let key in proform) {
if (key.indexOf("Contactor") != -1&&proform[key]!=null) {
let userid = proform[key]
let res = await getUserInfoByid({ id: userid })
console.log("Contactor",key, res)
updateProjectSchema({
field: key,
componentProps: {
options: [{
value: userid,
label: res.realname
}
],
}
})
}
}
})
/**
* BasicForm绑定注册;
* useForm 是整个框架的核心用于表单渲染里边封装了很多公共方法;
* 支持schemas: 渲染表单列autoSubmitOnEnter回车提交,submitButtonOptions自定义按钮文本和图标等方法
* 平台通过此封装简化了代码支持自定义扩展;
*/
const [registerProjectForm, { setFieldsValue,getFieldsValue: getFieldsValueProjectForm, setProps, updateSchema: updateProjectSchema }] = useForm({
//
schemas: formSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
disabled: true
});
//table
// const { tableContext: approveStarttableContext } = useListPage({
// tableProps: {
// size: 'small',//
// title: '',
// api: queryProcessInfo,
// columns: approveStartProcessColumns,
// showActionColumn: false,
// useSearchForm: false,
// beforeFetch(params) {
// params.stage = projectstage.value>=3?"2":"1",
// params.projectid = dataTo.projectid
// },
// },
// });
// BasicTable
// const [registerApproveStartTable] = approveStarttableContext;
// //table
// const { tableContext } = useListPage({
// tableProps: {
// size: 'small',//
// title: '',
// api: queryResourceInfo,
// columns: resourcetableColumns,
// useSearchForm: false,
// actionColumn: {
// width: 120,
// fixed: "right",
// },
// beforeFetch(params) {
// params.stage = "1",
// params.projectid = dataTo.projectid
// },
// },
// });
// const [registerResourceTable] = tableContext;
</script>
<style></style>
./projectInfoHistory.data

9
src/views/projectLib/projectInfoHistory/index.vue

@ -23,13 +23,12 @@ import { useListPage } from '/@/hooks/system/useListPage';
import { BasicModal,useModal } from '/@/components/Modal';
import { searchFormSchema } from '../projectInfo/projectInfo.data';
import {columns} from './projectInfoHistory.data'
import {columns} from '../projectInfo/projectInfo.data'
// import { list } from './address.api';
import Detaillist from './Detaillist.vue';
import { projectInfoHistoryPageList } from './projectInfoHistory.api';
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
let proid = ref();
const [registeProjectrModal, { openModal: openModalProjectr }] = useModal();//
@ -51,7 +50,7 @@ const { tableContext } = useListPage({
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
const [registerTable] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
@ -70,4 +69,4 @@ function handleDetailpage(record) {
</script>
<style scoped></style>./projectInfoHistory.data
<style scoped></style>

36
src/views/projectLib/projectInfoHistory/projectInfoHistory.data.ts

@ -632,7 +632,7 @@ export const formSchemas: FormSchema[] = [
},
//一列占比总共24,比如一行显示2列
colProps: { span: 12 },
required: true,
// required: true,
},
{
//标题名称
@ -736,40 +736,6 @@ export const formSchemas: FormSchema[] = [
}
];
export const approveStartProcessColumns: BasicColumn[] = [
{
title: '节点名称',
dataIndex: 'taskName',
},
{
title: '处理人',
dataIndex: 'operator',
width: 150,
},
{
title: '处理时间',
dataIndex: 'operateDate',
width: 150,
},
{
title: '审批状态',
dataIndex: 'approvalStatue',
width: 100,
customRender: ({ record }) => {
for (let i = 0; i < approvalRsesults.length; i++) {
if (record.approvalStatue == approvalRsesults[i].value) {
return approvalRsesults[i].text
}
}
},
},
{
title: '审批意见',
dataIndex: 'comment',
width: 100,
}
];
export const resourcetableColumns: BasicColumn[] = [
{
title: '文件名称',

3
src/views/projectLib/projectPlan/addPlan.vue

@ -20,8 +20,7 @@
</el-form>
</template>
<script lang="ts" name="uploadFile" setup>
import { ref, reactive, defineProps, watchEffect } from 'vue'
import { useForm } from '/@/components/Form';
import { reactive, defineProps, watchEffect } from 'vue'
import { } from './projectPlan.data';
import { submitplaninfoUploadFile, modifyPlaninfo } from './projectPlan.api';
import { ElMessage } from 'element-plus'

23
src/views/projectLib/projectPlan/addPlanFile.vue

@ -21,9 +21,7 @@
</el-form>
</template>
<script lang="ts" name="uploadFile" setup>
import { ref, reactive, defineProps, onMounted } from 'vue'
import { useForm } from '/@/components/Form';
import { } from './projectPlan.data';
import { reactive, defineProps, onMounted } from 'vue'
import { planUploadFile, planUploadModifyFile } from './projectPlan.api';
import { ElMessage } from 'element-plus'
@ -37,10 +35,6 @@ onMounted(async () => {
})
function httpRequest(option) {
fileList.push(option)
console.log(fileList, option)
@ -68,22 +62,7 @@ function beforeUpload(file, item) {
ElMessage.error('请上传文件:' + item);
return false;
}
//xlsx
// const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
// let whiteList = ["xls", "xlsx"];
// if (whiteList.indexOf(fileSuffix) === -1) {
// ElMessage.error('xlsxlsx');
// return false;
// }
// let fileName = file.name
// let reg = /^.+(\.xlsx)$/
// if(!reg.test(fileName)){
// ElMessage.error("xlsx!")
// return false
// }
return true
}
//

4
src/views/projectLib/projectPlan/elstepchild.vue

@ -1,6 +1,6 @@
<template>
<el-steps direction="vertical" finish-status="success">
<el-step v-for="(item, index) in dataTo.child" :key="index" :status="item.isfinish==1?'success':'wait'">
<el-step v-for="(item, index) in dataTo.child" :key="index" :status="item.isfinish==2?'success':'wait'">
<template #title>
<div>
{{ item.taskName }}
@ -19,10 +19,8 @@
</el-steps>
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { ref, onMounted } from 'vue'
import elstepchild from './elstepchild.vue'
let dataTo = defineProps(["child"])
let active = ref(2)
</script>
<style scoped></style>

102
src/views/projectLib/projectPlan/index.vue

@ -1,31 +1,14 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" @expand="tableExpand">
<!--插槽:table标题-->
<!--操作栏-->
<!-- <template #expandedRowRender="{ record }" class="your-custom-expanded-row">
<el-timeline class="timeline">
<el-timeline-item
class="lineitem"
v-for="(item,index) in activities"
@click.native="handleChangeVideo(activities)"
:key="index"
:timestamp="item.scheduledStartTime+'--'+item.scheduledEndTime"
:color="item.actualEndTime!=null?'green':''"
style="border-top: #0048d8!important;"
>
{{ item.taskName }}
</el-timeline-item>
</el-timeline>
</template> -->
<BasicTable @register="registerTable" >
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
</div>
<BasicModal @register="registeViewPlanDetail" title="项目信息详情" width="1200px" :showOkBtn="false">
<BasicModal @register="registeViewPlanDetail" title="项目计划详情" width="1200px" :showOkBtn="false">
<viewPlanDetail :projectId="projectId" :projectStage="projectStage"/>
</BasicModal>
<BasicModal @register="registerProjectPlan" title="发起项目计划审批" width="1200px" :showOkBtn="false" :showCancelBtn="false">
@ -35,7 +18,7 @@
<script lang="ts" name="system-user" setup>
//ts
import { ref,reactive,defineAsyncComponent } from 'vue';
import { ref } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
@ -44,16 +27,13 @@ import { BasicModal } from '/@/components/Modal';
import addPlan from './addPlan.vue'
import viewPlanDetail from "./viewPlanDetail.vue";
// const viewPlanDetail = defineAsyncComponent(() =>
// import('./viewPlanDetail.vue')
// )
import { columns, searchFormSchema } from '../projectInfo/projectInfo.data';
import { projectApprovedPageList,queryPlanInfoMainTimeline } from './projectPlan.api';
import { projectApprovedPageList } from './projectPlan.api';
let projectId = ref();
let type = ref();
let activities = ref([])
let projectStage = ref();
const [registeViewPlanDetail, { openModal: openViewPlanDetail }] = useModal();//
const [registerProjectPlan, { openModal: openProjectPlan, closeModal: closeProjectPlan }] = useModal();//
@ -109,37 +89,19 @@ function handleDetailpage(record) {
projectStage.value=record.stage
openViewPlanDetail()
// console.log(selectedRows.value);
// console.log(selectedRowKeys.value);
}
function handlePlan(record) {
type.value =record.stage==5?"2":"1"
projectId.value = record.id
openProjectPlan()
// console.log(selectedRows.value);
// console.log(selectedRowKeys.value);
}
function closeProjectPlanModal() {
closeProjectPlan()
reload()
}
async function tableExpand(expanded, record) {
console.log("wwwwwwwwwwww", expanded, record)
if(expanded){
activities.value = await queryPlanInfoMainTimeline({
projectid:record.id
})
console.log("22222222222222",activities)
}
//API
}
function handleChangeVideo(record) {
console.log("qqqqqqqqqqqqqqq", record)
}
</script>
<style scoped>
@ -190,57 +152,5 @@ function handleChangeVideo(record) {
/* 其他样式 */
}
/* .processBox {
background-color: #fff;
height: 210px;
.title {
font-size: 16px;
font-weight: 600;
padding-left: 32px;
padding-top: 16px;
}
.timelineProcessBox {
.timeline {
display: flex;
width: 95%;
margin: 40px auto;
.lineitem {
transform: translateX(50%);
width: 25%;
}
}
}
}
:deep(.el-timeline-item__tail) {
border-left: none;
border-top: 2px solid #e4e7ed;
width: 100%;
position: absolute;
top: 6px;
}
:deep(.el-timeline-item__wrapper) {
padding-left: 0;
position: absolute;
top: 20px;
transform: translateX(-50%);
text-align: center;
}
:deep(.el-timeline-item__timestamp) {
font-size: 14px;
}
.active {
:deep(.el-timeline-item__node) {
background-color: $login_word;
}
:deep(.el-timeline-item__tail) {
border-color: $login_word;
}
}
.active + li {
:deep(.el-timeline-item__node) {
background-color: $login_word;
}
} */
</style>

61
src/views/projectLib/projectPlan/planinfoFileDetail.vue

@ -1,32 +1,33 @@
<template>
<!-- 自定义表单 -->
<!-- <el-divider content-position="left">项目入库详情</el-divider>
<BasicForm @register="registerProjectForm" /> -->
<el-divider content-position="left">{{dataTo.taskName}}</el-divider>
<div >
<BasicModal v-bind="$attrs" @register="registerModal" title="文件详情" width="1200px" :showOkBtn="false">
<el-divider content-position="left">{{ dataTo.taskName }}</el-divider>
<div>
<el-divider content-position="left">项目资料详情</el-divider>
<BasicTable @register="registerResourceTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<div v-if="dataTo.isfinish == 1">
<ApprovalDetails :projectid="planinfoid" :stage="4" />
</div>
</div>
<!-- <el-divider content-position="left">审批详情</el-divider>
<BasicTable @register="registerApproveStartTable" /> -->
</BasicModal>
</template>
<script lang="ts" name="Detailpage" setup>
import { ref, defineProps, onMounted } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { defineProps, onMounted } from 'vue'
import { PlaninfoFiletableColumns } from './projectPlan.data';
import { queryPlaninfoFilePageByid } from './projectPlan.api'
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { downloadFile } from "../../../api/common/api"
let dataTo = defineProps(["planinfoid","taskName"])
let projectstage = ref()
import { BasicModal ,useModalInner} from '/@/components/Modal';
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue"
const [registerModal, { closeModal }] = useModalInner();
let dataTo = defineProps(["planinfoid", "taskName", "isfinish"])
console.log("wwwwwwwwwwww",dataTo)
onMounted(async () => {
})
@ -46,40 +47,8 @@ function getTableAction(record): ActionItem[] {
* 支持schemas: 渲染表单列autoSubmitOnEnter回车提交,submitButtonOptions自定义按钮文本和图标等方法
* 平台通过此封装简化了代码支持自定义扩展;
*/
// const [registerProjectForm, { setFieldsValue }] = useForm({
// //
// schemas: formSchemas,
// showActionButtonGroup: false,
// //
// // autoSubmitOnEnter: true,
// // //
// // showResetButton: false,
// //
// // submitButtonOptions: { text: '', preIcon: '' },
// // 24 0-24
// // actionColOptions: { span: 17 },
// labelCol: { style: { width: '120px' } },
// wrapperCol: { style: { width: 'auto' } },
// disabled: true
// });
// //table
// const { tableContext: approveStarttableContext } = useListPage({
// tableProps: {
// size: 'small',//
// title: '',
// api: queryProcessInfo,
// columns: approveStartProcessColumns,
// showActionColumn: false,
// useSearchForm: false,
// beforeFetch(params) {
// params.stage = projectstage.value>=3?"2":"1",
// params.projectid = dataTo.projectid
// },
// },
// });
// // BasicTable
// const [registerApproveStartTable] = approveStarttableContext;
//table
const { tableContext } = useListPage({

14
src/views/projectLib/projectPlan/projectPlan.api.ts

@ -9,11 +9,13 @@ export enum Api {
queryProjectPlan="/huzhouPlan/queryProjectPlan",
submitplaninfoUploadFile="/huzhouPlan/submitplaninfoUploadFile",
queryPlanInfoMainTimeline="/huzhouPlan/queryPlanInfoMainTimeline",
planUploadFile="/huzhouPlan/planUploadFile",
queryPlaninfoFilePageByid="/huzhouPlan/queryPlaninfoFilePageByid",
planUploadModifyFile="/huzhouPlan/planUploadModifyFile",
planUploadFile="/huzhouPlaninfofile/planUploadFile",
queryPlaninfoFilePageByid="/huzhouPlaninfofile/queryPlaninfoFilePageByid",
planUploadModifyFile="/huzhouPlaninfofile/planUploadModifyFile",
modifyPlaninfo="/huzhouPlan/modifyPlaninfo",
approvePlaninfo='huzhouPlan/approvePlaninfo'
approvePlaninfo='/huzhouPlan/approvePlaninfo',
planFilePageList="/huzhouPlaninfofile/planFilePageList",
getplaninfoByid="/huzhouPlan/qetplaninfoByid",
}
/**
*
@ -32,6 +34,10 @@ export const queryPlaninfoFilePageByid = (params) => defHttp.get({ url: Api.quer
export const planUploadModifyFile = (params?) =>defHttp.post({ url: Api.planUploadModifyFile,headers:{ "Content-Type": "multipart/form-data" }, params })
export const modifyPlaninfo = (params?) =>defHttp.post({ url: Api.modifyPlaninfo,headers:{ "Content-Type": "multipart/form-data" }, params })
export const approvePlaninfo = (params?) =>defHttp.post({ url: Api.approvePlaninfo,headers:{ "Content-Type": "multipart/form-data" }, params })
export const planFilePageList = (params) => defHttp.get({ url: Api.planFilePageList, params })
export const getplaninfoByid = (params) => defHttp.get({ url: Api.getplaninfoByid, params })

374
src/views/projectLib/projectPlan/projectPlan.data.ts

@ -19,293 +19,147 @@ function approvalRsesult() {
}
return approvalRsesults
}
export const hommPageColumns: BasicColumn[] = [
{
title: '模板ID',
width: 150,
dataIndex: 'id',
},
{
title: '项目类型',
dataIndex: 'projectType',
width: 150,
customRender: ({ record }) => {
for (let i = 0; i < projectTypeDicts.length; i++) {
if (record.projectType == projectTypeDicts[i].value) {
return projectTypeDicts[i].text
}
}
},
},
{
title: '模板名称',
dataIndex: 'moduleName',
width: 150,
},
{
title: '创建时间',
dataIndex: 'createtime',
width: 100,
},
];
export const planDetailColumns: BasicColumn[] = [
{
title: '模板id',
width: 150,
dataIndex: 'moduleId',
},
{
title: '计划名称',
dataIndex: 'taskName',
width: 150,
},
{
title: '计划序号',
dataIndex: 'orderNumber',
width: 150,
// export const planDetailColumns: BasicColumn[] = [
// {
// title: '模板id',
// width: 150,
// dataIndex: 'moduleId',
// },
// {
// title: '计划名称',
// dataIndex: 'taskName',
// width: 150,
// },
// {
// title: '计划序号',
// dataIndex: 'orderNumber',
// width: 150,
// },
// {
// title: '最大天数',
// dataIndex: 'maxDays',
// width: 100,
// },
// {
// title: '计划开始时间',
// dataIndex: 'scheduledStartTime',
// width: 150,
// edit: true,
// editRule: async (text, record) => {
// if (text > record.scheduledEndTime) {
// return '开始时间必须小于结束时间';
// }
// if (!text) {
// return '请选择日期';
// }
// if (record.maxDays && text && record.scheduledEndTime) {
// let days = dayjs(record.scheduledEndTime).diff(text, "day")
// console.log("我这一行的数据是daysdaysdays", days)
// if (days > record.maxDays) {
// return '计划时常超过预定期限';
// }
// }
// return '';
// },
// editComponent: 'DatePicker',
// editComponentProps: {
// //日期格式化,页面上显示的值
// format: 'YYYY-MM-DD',
// //返回值格式化(绑定值的格式)
// valueFormat: 'YYYY-MM-DD',
// //是否显示今天按钮
// showToday: true,
// //不可选择日期
// disabledDate: (currentDate) => {
// let date = dayjs(currentDate).format('YYYY-MM-DD');
// let nowDate = dayjs(new Date()).format('YYYY-MM-DD');
// //当天不可选择
// if (date < nowDate) {
// return true;
// }
// return false;
// }
// }
// },
// {
// title: '计划结束时间',
// dataIndex: 'scheduledEndTime',
// width: 150,
// edit: true,
// editRule: async (text, record) => {
// if (text < record.scheduledStartTime) {
// return '结束时间必须大于开始时间';
// }
// if (!text) {
// return '请选择日期';
// }
// if (record.maxDays && text && record.scheduledStartTime) {
// let days = dayjs(text).diff(record.scheduledStartTime, "day")
// if (days > record.maxDays) {
// return '计划时常超过预定期限';
// }
// }
// return '';
// },
// editComponent: 'DatePicker',
// editComponentProps: {
// //日期格式化,页面上显示的值
// format: 'YYYY-MM-DD',
// //返回值格式化(绑定值的格式)
// valueFormat: 'YYYY-MM-DD',
// //是否显示今天按钮
// showToday: true,
// //不可选择日期
// disabledDate: (currentDate) => {
// let date = dayjs(currentDate).format('YYYY-MM-DD');
// let nowDate = dayjs(new Date()).format('YYYY-MM-DD');
// //当天不可选择
// if (date < nowDate) {
// return true;
// }
// return false;
// }
// }
// },
// ];
},
{
title: '最大天数',
dataIndex: 'maxDays',
width: 100,
},
{
title: '计划开始时间',
dataIndex: 'scheduledStartTime',
width: 150,
edit: true,
editRule: async (text, record) => {
if (text > record.scheduledEndTime) {
return '开始时间必须小于结束时间';
}
if (!text) {
return '请选择日期';
}
if (record.maxDays && text && record.scheduledEndTime) {
let days = dayjs(record.scheduledEndTime).diff(text, "day")
console.log("我这一行的数据是daysdaysdays", days)
if (days > record.maxDays) {
return '计划时常超过预定期限';
}
}
return '';
},
editComponent: 'DatePicker',
editComponentProps: {
//日期格式化,页面上显示的值
format: 'YYYY-MM-DD',
//返回值格式化(绑定值的格式)
valueFormat: 'YYYY-MM-DD',
//是否显示今天按钮
showToday: true,
//不可选择日期
disabledDate: (currentDate) => {
let date = dayjs(currentDate).format('YYYY-MM-DD');
let nowDate = dayjs(new Date()).format('YYYY-MM-DD');
//当天不可选择
if (date < nowDate) {
return true;
}
return false;
}
}
},
{
title: '计划结束时间',
dataIndex: 'scheduledEndTime',
width: 150,
edit: true,
editRule: async (text, record) => {
if (text < record.scheduledStartTime) {
return '结束时间必须大于开始时间';
}
if (!text) {
return '请选择日期';
}
if (record.maxDays && text && record.scheduledStartTime) {
let days = dayjs(text).diff(record.scheduledStartTime, "day")
if (days > record.maxDays) {
return '计划时常超过预定期限';
}
}
return '';
},
editComponent: 'DatePicker',
editComponentProps: {
//日期格式化,页面上显示的值
format: 'YYYY-MM-DD',
//返回值格式化(绑定值的格式)
valueFormat: 'YYYY-MM-DD',
//是否显示今天按钮
showToday: true,
//不可选择日期
disabledDate: (currentDate) => {
let date = dayjs(currentDate).format('YYYY-MM-DD');
let nowDate = dayjs(new Date()).format('YYYY-MM-DD');
//当天不可选择
if (date < nowDate) {
return true;
}
return false;
}
}
},
];
export const viewPlanDetailColumns: BasicColumn[] = [
{
title: '计划名称',
dataIndex: 'taskName',
width: 150,
},
{
title: '计划序号',
dataIndex: 'orderNumber',
width: 150,
},
{
title: '最大天数',
dataIndex: 'maxDays',
width: 100,
},
{
title: '计划开始时间',
dataIndex: 'scheduledStartTime',
width: 150,
},
{
title: '计划结束时间',
dataIndex: 'scheduledEndTime',
width: 150,
},
];
export const searchFormSchema: FormSchema[] = [
{
label: '项目类型',
field: 'projectType',
component: 'Select',
componentProps: {
options: projectTypeDict()
},
//colProps: { span: 6 },
},
{
label: '模板名称',
field: 'moduleName',
component: 'Input',
//colProps: { span: 6 },
},
];
export const planFormSchemas: FormSchema[] = [
// {
// label: '项目类型',
// field: 'user',
// component: 'Select',
// required: true,
// dynamicDisabled: true,
// componentProps: {
// options: [
// { value: userStore.getUserInfo.id, label: userStore.getUserInfo.username }
// ],
// },
// defaultValue: userStore.getUserInfo.id,
// colProps: { span: 12 },
// },
{
label: '模板id',
field: 'id',
component: 'Input',
dynamicDisabled: true,
colProps: { span: 12 },
},
{
label: '项目类型',
field: 'projectType',
component: 'Select',
required: true,
componentProps: {
options: projectTypeDict()
},
colProps: { span: 12 },
},
{
label: '模板名称',
field: 'moduleName',
component: 'Input',
required: true,
colProps: { span: 12 },
},
];
export const ProcessColumns: BasicColumn[] = [
{
title: '节点名称',
dataIndex: 'taskName',
},
{
title: '处理人',
dataIndex: 'operator',
width: 150,
},
{
title: '处理时间',
dataIndex: 'operateDate',
width: 150,
},
{
title: '审批状态',
dataIndex: 'approvalStatue',
width: 100,
},
{
title: '审批意见',
dataIndex: 'workplace',
width: 100,
}
];
export const PlaninfoColumn: BasicColumn[] = [
{
title: '任务名称',
dataIndex: 'taskName',
align:'left'
},
{
title: '计划开始时间',
dataIndex: 'scheduledStartTime',
width: 150,
},
{
title: '计划结束时间',
dataIndex: 'scheduledEndTime',
width: 150,
},
{
title: '所需文件',
dataIndex: 'taskFile',
width: 100,
},
{
title: '是否已完成',
dataIndex: 'isfinish',
width: 100,
customRender: ({ record }) => {
if (record.isfinish == 1) {
return "审批中"
}else if(record.isfinish == 2) {
return "已完成"
} else {
}
else {
return "未完成"
}
},
@ -341,8 +195,6 @@ export const PlaninfoFiletableColumns: BasicColumn[] = [
dataIndex: 'status',
customRender: ({ record }) => {
if (record.status == 1) {
return "审批中"
} else if(record.status == 2) {
return "有效"
}
else {

45
src/views/projectLib/projectPlan/viewPlanDetail.vue

@ -17,7 +17,7 @@
</el-row>
<el-steps finish-status="success" :active="activities.status">
<el-step v-for="(item, index) in activities" :key="index">
<el-step v-for="(item, index) in activities" :key="index" :status="item.isfinish==2?'success':'wait'">
<template #title>
<div>
{{ item.taskName }}
@ -34,6 +34,7 @@
</template>
</el-step>
</el-steps>
<el-divider content-position="left">项目计划阶段详情</el-divider>
<BasicTable @register="registerTable">
<template #action="{ record }">
@ -42,15 +43,12 @@
</template>
</BasicTable>
<div v-if="dataTo.projectStage==4">
<el-divider content-position="left">审批详情</el-divider>
<BasicTable @register="registerApproveStartTable" />
<ApprovalDetails :projectid="projectId" :stage="3"/>
</div>
<BasicModal @register="registeruploadFile" title="上传文件" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<addPlanFile :type="type" :planinfoid="planinfoid" :files="fileArr" @close="closePlanFileModal()" />
</BasicModal>
<BasicModal @register="registerFileInfo" title="文件详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<planinfoFileDetail :planinfoid="planinfoid" :taskName="taskName" @close="closePlanFileInfoModal()" />
</BasicModal>
<planinfoFileDetail @register="registerFileInfo" :planinfoid="planinfoid" :taskName="taskName" :isfinish="isfinish" />
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { ref, onMounted } from 'vue'
@ -61,21 +59,21 @@ import { Progress } from 'ant-design-vue';
import { BasicModal } from '/@/components/Modal';
import { PlaninfoColumn } from './projectPlan.data';
import { queryPlanInfoMainTimeline } from './projectPlan.api'
import { queryProcessInfo } from '../projectInfo/projectInfo.api'
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { useModal } from '/@/components/Modal';
import { approveStartProcessColumns } from '../projectInfo/projectInfo.data';
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue"
let dataTo = defineProps(["projectId","projectStage"])
let projectId = ref(dataTo.projectId)
let isfinish= ref()
let activities = ref([])
let type = ref(1)
let fileArr = ref([])
let planinfoid = ref()
let taskName = ref()
const [registeruploadFile, { openModal: openPlanFile, closeModal: closePlanFile }] = useModal();//
const [registerFileInfo, { openModal: openFileInfo, closeModal: closeFileInfo }] = useModal();//
const [registerFileInfo, { openModal: openFileInfo}] = useModal();//
onMounted(() => {
queryPlanInfoMainTimeline({
@ -115,7 +113,7 @@ function getTableAction(record): ActionItem[] {
{
label: '详情',
ifShow: () => {
if (record.isfinish == 1) {
if (record.isfinish != 0 && record.taskFile?.length>0) {
return true
}
return false
@ -125,7 +123,7 @@ function getTableAction(record): ActionItem[] {
{
label: '上传资料',
ifShow: () => {
if (record.isfinish != 1) {
if (record.isfinish == 0 && record.taskFile?.length>0) {
return true
}
return false
@ -135,7 +133,7 @@ function getTableAction(record): ActionItem[] {
{
label: '修改资料',
ifShow: () => {
if (record.isfinish == 1) {
if (record.isfinish == 2 && record.taskFile?.length>0 &&dataTo.projectStage<7) {//归档流程中不允许修改
return true
}
return false
@ -144,25 +142,11 @@ function getTableAction(record): ActionItem[] {
},
];
}
const { tableContext: approveStarttableContext } = useListPage({
tableProps: {
size: 'small',//
title: '审批详情',
api: queryProcessInfo,
columns: approveStartProcessColumns,
showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.stage = "3",
params.projectid =projectId.value
},
},
});
// BasicTable
const [registerApproveStartTable] = approveStarttableContext;
function handleDetail(record) {
planinfoid.value = record.id
taskName = record.taskName
taskName.value = record.taskName
isfinish.value = record.isfinish
openFileInfo()
}
@ -182,9 +166,6 @@ function closePlanFileModal() {
console.log("activities", activities)
})
}
function closePlanFileInfoModal() {
closeFileInfo()
}
</script>
<style scoped>
.timeline {

136
src/views/projectLib/workReport/addModifyWorkreport.vue

@ -0,0 +1,136 @@
<template>
<!-- 自定义表单 -->
<BasicModal @register="registerModal" title="归档信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<el-divider content-position="left">合同信息</el-divider>
<BasicForm @register="registerWorkreport" />
<el-divider content-position="left">上传合同文件</el-divider>
<el-form ref="importFormRef" label-width="130px">
<el-form-item label="上传文件:">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="1" :on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过10M</div>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitImportForm">上传</el-button>
<el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item>
</el-form>
</BasicModal>
</template>
<script lang="ts" name="addModifyWorkreport" setup>
import { ref, reactive, defineProps, watchEffect } from 'vue'
import { useForm, BasicForm } from '/@/components/Form';
import { workReportformSchemas } from './workReport.data';
import { modifyWorkreport, addWorkreport, getWorkreportById } from './workReport.api';
import { ElMessage } from 'element-plus'
import { useModalInner, BasicModal } from '/@/components/Modal';
const [registerModal, { closeModal }] = useModalInner(init);
let fileList = reactive<Array<any>>([]);
let id = ref()
let projectid = ref()
const emit = defineEmits(['close']);
async function init(data) {
console.log("datadatadata", data)
if (data.projectid) {
projectid.value = data.projectid
}
fileList.pop()
if (data.id != null) {
id.value = data.id
let param: any = {
id: data.id
}
let res = await getWorkreportById(param)
console.log("结果是", res)
setFieldsValue(res)
}
}
//
const [registerWorkreport, { setFieldsValue: setFieldsValue, getFieldsValue, validate }] = useForm({
//
schemas: workReportformSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
// fileList,
function httpRequest(option) {
fileList.push(option)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
console.log(fileList, option)
}
//
function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 10 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传10M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
//Excel
async function submitImportForm() {
if (await validate()) {
let data = await getFieldsValue()
console.log("data", data)
// 使form
if (id.value != null) {
if (fileList.length > 0) {
data.file = fileList[0].file
}
//
data.id = id.value
modifyWorkreport(data)
} else {
if (fileList.length == 0) {
ElMessage.warning("请上传文件")
return;
}
data.file = fileList[0].file
data.projectid = projectid.value
addWorkreport(data)
}
dialogVisible()
}
}
function dialogVisible() {
closeModal()
emit("close")
}
</script>
<style></style>

101
src/views/projectLib/workReport/index.vue

@ -0,0 +1,101 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable">
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
</template>
</BasicTable>
<addModifyWorkreport @register="registeraddworkreport" @close="closeModel" />
</div>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref } from "vue"
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { useModal } from '/@/components/Modal';
import { downloadFile } from "../../../api/common/api"
import { workReportShowcolumns, searchFormSchema } from './workReport.data';
import addModifyWorkreport from "./addModifyWorkreport.vue"
import { workreportPageList, deleteWorkreport } from './workReport.api';
const [registeraddworkreport, { openModal }] = useModal();
const [registecontractDetail, { openModal: opencontractDetail, closeModal: closecontractDetail }] = useModal();
let projectid = ref()
let id = ref()
const { tableContext } = useListPage({
designScope: 'basic-table-demo-ajax',
tableProps: {
title: '项目周报信息',
api: workreportPageList,
columns: workReportShowcolumns,
actionColumn: {
width: 120,
fixed: "right",
},
//
formConfig: {
schemas: searchFormSchema,
}
},
});
//BasicTable
const [registerTable, { reload }] = tableContext;
function getTableAction(record): ActionItem[] {
return [
{
label: '修改',
onClick: handleModify.bind(null, record)
},
];
}
function getDropDownAction(record): ActionItem[] {
return [
{
label: '下载',
onClick: handledown.bind(null, record)
},
{
label: '删除',
popConfirm: {
title: '确定删除吗?',
confirm: handleDelete.bind(null, record),
},
},
];
}
function handleModify(record) {
openModal(true, { id: record.id })
}
function handledown(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
async function handleDelete(record) {
await deleteWorkreport({ id: record.id })
reload()
}
function closeModel() {
reload()
}
</script>
<style scoped></style>

25
src/views/projectLib/workReport/workReport.api.ts

@ -0,0 +1,25 @@
import { defHttp } from '/@/utils/http/axios';
import { downloadFile } from "../../../api/common/api"
export enum Api {
workreportPageList = '/huzhouWorkreport/workreportPageList',
addWorkreport="/huzhouWorkreport/addWorkreport",
modifyWorkreport = '/huzhouWorkreport/modifyWorkreport',
getWorkreportById="/huzhouWorkreport/getWorkreportById",
deleteWorkreport = '/huzhouWorkreport/deleteWorkreport',
}
export const workreportPageList = (params) => defHttp.get({ url: Api.workreportPageList, params })
export const getWorkreportById = (params) => defHttp.get({ url: Api.getWorkreportById, params })
export const isExistContractinfo = (params) => defHttp.get({ url: Api.isExistContractinfo, params })
export const getContractinfoListById = (params) => defHttp.get({ url: Api.getContractinfoListById, params })
export const addWorkreport = (params?) =>defHttp.post({ url: Api.addWorkreport,headers:{ "Content-Type": "multipart/form-data" }, params })
export const modifyWorkreport = (params?) =>defHttp.post({ url: Api.modifyWorkreport,headers:{ "Content-Type": "multipart/form-data" }, params })
export const deleteWorkreport = (params?) =>defHttp.post({ url: Api.deleteWorkreport, params })

196
src/views/projectLib/workReport/workReport.data.ts

@ -0,0 +1,196 @@
import { collapseTextChangeRangesAcrossMultipleVersions } from 'typescript';
import { FormSchema } from '/@/components/Form';
import { BasicColumn } from '/@/components/Table';
import dayjs from "dayjs";
import { da } from 'element-plus/es/locale';
export const workReportShowcolumns: BasicColumn[] = [
{
title: '项目名称',
dataIndex: 'projectName',
},
{
title: '类型',
dataIndex: 'type',
},
{
title: '开始时间',
dataIndex: 'startDate',
},
{
title: '结束时间',
dataIndex: 'endDate',
},
{
title: '文件名称',
dataIndex: 'documentName',
width: 150,
},
{
title: '文件大小',
dataIndex: 'size',
width: 150,
customRender: ({ record }) => {
let kbNum: number = record.size / 1024
if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB"
} else {
let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB"
}
},
},
];
export const workReportDetailcolumns: BasicColumn[] = [
{
title: '合同总金额',
dataIndex: 'totalAmount',
},
{
title: '首付时间',
dataIndex: 'downpaymentDate',
},
{
title: '首付比例',
dataIndex: 'downpaymentRatio',
},
{
title: '初验时间',
dataIndex: 'initialDate',
},
{
title: '初验比例',
dataIndex: 'initialRatio',
},
{
title: '终验时间',
dataIndex: 'finalDate',
},
{
title: '终验比例',
dataIndex: 'finalRatio',
},
{
title: '文件名称',
dataIndex: 'documentName',
width: 150,
},
{
title: '文件大小',
dataIndex: 'size',
width: 150,
customRender: ({ record }) => {
let kbNum: number = record.size / 1024
if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB"
} else {
let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB"
}
},
},
];
export const searchFormSchema: FormSchema[] = [
{
label: '项目名称',
field: 'projectName',
component: 'Input',
},
{
label: '文件名称',
field: 'documentName',
component: 'Input',
}
];
export const workReportformSchemas: FormSchema[] = [
{
label: '类型',
field: 'type',
component: 'Select',
componentProps: ({ formModel, formActionType }) => {
return {
//
options: [
{
value: '周报',
label: '周报'
}, {
value: '月报',
label: '月报'
}
],
onChange: async (value) => {
const { setFieldsValue } = formActionType;
if(formModel.startDate){
if(value=="周报"){
let nextDate = dayjs(formModel.startDate).add(7,"day").format("YYYY-MM-DD")
setFieldsValue({ endDate: nextDate })
}else{
let nextDate = dayjs(formModel.startDate).add(1,"month").format("YYYY-MM-DD")
setFieldsValue({ endDate: nextDate })
}
}
},
};
},
required: true,
colProps: { span: 12 },
},
{
label: '开始时间',
field: 'startDate',
component: 'DatePicker',
// componentProps: {
// valueFormat: 'YYYY-MM-DD',
// },
componentProps: ({ formModel, formActionType }) => {
return {
//
valueFormat: 'YYYY-MM-DD',
onChange: async (value) => {
const { setFieldsValue } = formActionType;
if(formModel.type){
if(formModel.type=="周报"){
let nextDate = dayjs(value).add(7,"day").format("YYYY-MM-DD")
setFieldsValue({ endDate: nextDate })
}else{
let nextDate = dayjs(value).add(1,"month").format("YYYY-MM-DD")
setFieldsValue({ endDate: nextDate })
}
}
},
};
},
required: true,
colProps: { span: 12 },
},
{
label: '结束时间',
field: 'endDate',
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD',
},
dynamicDisabled: true,
colProps: { span: 12 },
},
];

6
src/views/system/dict/index.vue

@ -4,10 +4,10 @@
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> -->
<a-button type="primary" @click="handlerRefreshCache" preIcon="ant-design:sync-outlined"> 刷新缓存</a-button>
<a-button type="primary" @click="openRecycleModal(true)" preIcon="ant-design:hdd-outlined"> 回收站</a-button>
<!-- <a-button type="primary" @click="openRecycleModal(true)" preIcon="ant-design:hdd-outlined"> 回收站</a-button> -->
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>

12
src/views/system/role/index.vue

@ -2,8 +2,8 @@
<BasicTable @register="registerTable">
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> -->
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
@ -184,10 +184,10 @@
confirm: handleDelete.bind(null, record),
},
},
{
label: '首页配置',
onClick: handleIndexConfig.bind(null, record.roleCode),
},
// {
// label: '',
// onClick: handleIndexConfig.bind(null, record.roleCode),
// },
];
}
</script>

50
src/views/system/user/index.vue

@ -5,9 +5,9 @@
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" :disabled="isDisabledAuth('system:user:export')"> 导出</a-button>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" :disabled="isDisabledAuth('system:user:export')"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-button type="primary" @click="openModal(true, {})" preIcon="ant-design:hdd-outlined"> 回收站</a-button>
<a-button type="primary" @click="openModal(true, {})" preIcon="ant-design:hdd-outlined"> 回收站</a-button> -->
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
@ -188,9 +188,9 @@
/**
* 打开代理人弹窗
*/
function handleAgentSettings(userName) {
openAgentModal(true, { userName });
}
// function handleAgentSettings(userName) {
// openAgentModal(true, { userName });
// }
/**
* 冻结解冻
*/
@ -263,26 +263,26 @@
confirm: handleDelete.bind(null, record),
},
},
{
label: '冻结',
ifShow: record.status == 1,
popConfirm: {
title: '确定冻结吗?',
confirm: handleFrozen.bind(null, record, 2),
},
},
{
label: '解冻',
ifShow: record.status == 2,
popConfirm: {
title: '确定解冻吗?',
confirm: handleFrozen.bind(null, record, 1),
},
},
{
label: '代理人',
onClick: handleAgentSettings.bind(null, record.username),
},
// {
// label: '',
// ifShow: record.status == 1,
// popConfirm: {
// title: '?',
// confirm: handleFrozen.bind(null, record, 2),
// },
// },
// {
// label: '',
// ifShow: record.status == 2,
// popConfirm: {
// title: '?',
// confirm: handleFrozen.bind(null, record, 1),
// },
// },
// {
// label: '',
// onClick: handleAgentSettings.bind(null, record.username),
// },
];
}

210
src/views/system/user/user.data.ts

@ -3,6 +3,15 @@ import { FormSchema } from '/@/components/Table';
import { getAllRolesListNoByTenant, getAllTenantList } from './user.api';
import { rules } from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
import { getDictItemsByCode } from '/@/utils/dict/index';
const workplaceTypeDicts: Array<Object> = getDictItemsByCode("workplaceType")
function workplaceTypeDict() {
for (let i = 0; i < workplaceTypeDicts.length; i++) {
workplaceTypeDicts[i].label = workplaceTypeDicts[i].text;
}
return workplaceTypeDicts
}
export const columns: BasicColumn[] = [
{
title: '用户账号',
@ -170,22 +179,22 @@ export const formSchema: FormSchema[] = [
required: true,
component: 'Input',
},
{
label: '工号',
field: 'workNo',
required: true,
component: 'Input',
dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
},
{
label: '职务',
field: 'post',
required: false,
component: 'JSelectPosition',
componentProps: {
labelKey: 'name',
},
},
// {
// label: '工号',
// field: 'workNo',
// required: true,
// component: 'Input',
// dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
// },
// {
// label: '职务',
// field: 'post',
// required: false,
// component: 'JSelectPosition',
// componentProps: {
// labelKey: 'name',
// },
// },
{
label: '角色',
field: 'selectedroles',
@ -198,70 +207,70 @@ export const formSchema: FormSchema[] = [
immediate: false,
},
},
{
label: '所属部门',
field: 'selecteddeparts',
component: 'JSelectDept',
componentProps: ({ formActionType, formModel }) => {
return {
sync: false,
checkStrictly: true,
defaultExpandLevel: 2,
// {
// label: '所属部门',
// field: 'selecteddeparts',
// component: 'JSelectDept',
// componentProps: ({ formActionType, formModel }) => {
// return {
// sync: false,
// checkStrictly: true,
// defaultExpandLevel: 2,
onSelect: (options, values) => {
const { updateSchema } = formActionType;
//所属部门修改后更新负责部门下拉框数据
updateSchema([
{
field: 'departIds',
componentProps: { options },
},
]);
//所属部门修改后更新负责部门数据
formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
},
};
},
},
{
label: '租户',
field: 'relTenantIds',
component: 'ApiSelect',
componentProps: {
mode: 'multiple',
api: getAllTenantList,
numberToString: true,
labelField: 'name',
valueField: 'id',
immediate: false,
},
},
{
label: '身份',
field: 'userIdentity',
component: 'RadioGroup',
defaultValue: 1,
componentProps: ({ formModel }) => {
return {
options: [
{ label: '普通用户', value: 1, key: '1' },
{ label: '上级', value: 2, key: '2' },
],
onChange: () => {
formModel.userIdentity == 1 && (formModel.departIds = []);
},
};
},
},
{
label: '负责部门',
field: 'departIds',
component: 'Select',
componentProps: {
mode: 'multiple',
},
ifShow: ({ values }) => values.userIdentity == 2,
},
// onSelect: (options, values) => {
// const { updateSchema } = formActionType;
// //所属部门修改后更新负责部门下拉框数据
// updateSchema([
// {
// field: 'departIds',
// componentProps: { options },
// },
// ]);
// //所属部门修改后更新负责部门数据
// formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
// },
// };
// },
// },
// {
// label: '租户',
// field: 'relTenantIds',
// component: 'ApiSelect',
// componentProps: {
// mode: 'multiple',
// api: getAllTenantList,
// numberToString: true,
// labelField: 'name',
// valueField: 'id',
// immediate: false,
// },
// },
// {
// label: '身份',
// field: 'userIdentity',
// component: 'RadioGroup',
// defaultValue: 1,
// componentProps: ({ formModel }) => {
// return {
// options: [
// { label: '普通用户', value: 1, key: '1' },
// { label: '上级', value: 2, key: '2' },
// ],
// onChange: () => {
// formModel.userIdentity == 1 && (formModel.departIds = []);
// },
// };
// },
// },
// {
// label: '负责部门',
// field: 'departIds',
// component: 'Select',
// componentProps: {
// mode: 'multiple',
// },
// ifShow: ({ values }) => values.userIdentity == 2,
// },
{
label: '头像',
field: 'avatar',
@ -308,22 +317,39 @@ export const formSchema: FormSchema[] = [
},
},
{
label: '座机',
field: 'telephone',
component: 'Input',
rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
},
{
label: '工作流引擎',
field: 'activitiSync',
defaultValue: 1,
component: 'JDictSelectTag',
label: '单位类型',
field: 'workplaceType',
component: 'Select',
//填写组件的属性
componentProps: {
dictCode: 'activiti_sync',
type: 'radio',
stringToNumber: true,
options: workplaceTypeDict()
},
required:true
},
{
label: '单位名称',
field: 'workplace',
component: 'Input',
required:true
//填写组件的属
},
// {
// label: '座机',
// field: 'telephone',
// component: 'Input',
// rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
// },
// {
// label: '工作流引擎',
// field: 'activitiSync',
// defaultValue: 1,
// component: 'JDictSelectTag',
// componentProps: {
// dictCode: 'activiti_sync',
// type: 'radio',
// stringToNumber: true,
// },
// },
];
export const formPasswordSchema: FormSchema[] = [

4
src/views/system/usersetting/BaseSetting.vue

@ -39,10 +39,10 @@
<span class="gray-75 item-label">性别</span>
<span class="gray-3">{{ userInfo.sexText }}</span>
</div>
<div class="margin-bottom-10 nowarp font-size-13">
<!-- <div class="margin-bottom-10 nowarp font-size-13">
<span class="gray-75 item-label">职位</span>
<span class="gray-3">{{ userInfo.postText ? userInfo.postText : "未填写" }}</span>
</div>
</div> -->
<div class="font-size-13">
<span class="item-label"></span>
<span class="item-label pointer" style="color:#1e88e5" @click="openEditModal">编辑</span>

78
src/views/system/usersetting/UserSetting.data.ts

@ -30,15 +30,15 @@ export const settingList = [
img1: geren1,
img2: geren2,
},
{
key: '2',
name: '我的租户',
component: 'TenantSetting',
isSlot:false,
icon:'ant-design:team-outlined',
img1: zuhu1,
img2: zuhu2,
},
// {
// key: '2',
// name: '我的租户',
// component: 'TenantSetting',
// isSlot:false,
// icon:'ant-design:team-outlined',
// img1: zuhu1,
// img2: zuhu2,
// },
{
key: '3',
name: '账号安全',
@ -47,14 +47,14 @@ export const settingList = [
img1: anquan1,
img2: anquan2,
},
{
key: '4',
name: '第三方APP',
component: 'WeChatDingSetting',
icon: 'ant-design:contacts-outlined',
img1: app1,
img2: app2,
},
// {
// key: '4',
// name: '第三方APP',
// component: 'WeChatDingSetting',
// icon: 'ant-design:contacts-outlined',
// img1: app1,
// img2: app2,
// },
];
@ -98,28 +98,28 @@ export const formSchema: FormSchema[] = [
],
}
},
{
field: 'relTenantIds',
component: 'JDictSelectTag',
label: '租户',
colProps: { span: 24 },
componentProps:{
mode:'multiple',
dictCode:'sys_tenant,name,id',
disabled:true
}
},
{
field: 'post',
component: 'JDictSelectTag',
label: '职位',
colProps: { span: 24 },
componentProps:{
mode:'multiple',
dictCode:'sys_position,name,id',
disabled:true
}
},
// {
// field: 'relTenantIds',
// component: 'JDictSelectTag',
// label: '租户',
// colProps: { span: 24 },
// componentProps:{
// mode:'multiple',
// dictCode:'sys_tenant,name,id',
// disabled:true
// }
// },
// {
// field: 'post',
// component: 'JDictSelectTag',
// label: '职位',
// colProps: { span: 24 },
// componentProps:{
// mode:'multiple',
// dictCode:'sys_position,name,id',
// disabled:true
// }
// },
{
label: '',
field: 'id',

Loading…
Cancel
Save