Browse Source

提交

master
zhouhaibin 5 months ago
parent
commit
443792e68b
  1. 1
      index.html
  2. 6
      src/api/activiti/activitiTask.ts
  3. BIN
      src/assets/images/logo_ad_text.png
  4. BIN
      src/assets/images/logo_ad_text2.png
  5. BIN
      src/assets/svg/login-bg.jpg
  6. 0
      src/assets/svg/login-bg.svg.bak
  7. BIN
      src/assets/svg/login-bg1.jpg
  8. 2
      src/views/ProcessApprovalSubPage/ProjectArchiveApproval.vue
  9. 4
      src/views/ProcessApprovalSubPage/component/ApprovalDetails.vue
  10. 2
      src/views/ProcessApprovalSubPage/component/ApprovalPageModel.vue
  11. 17
      src/views/ProcessApprovalSubPage/component/PlaninfoDetails.vue
  12. 3
      src/views/ProcessApprovalSubPage/component/ProjectDetails.vue
  13. 43
      src/views/ProcessApprovalSubPage/component/ProjectinfoComponent.vue
  14. 111
      src/views/Regulation/RegulationLab/RegulationLab.data.ts
  15. 10
      src/views/Regulation/RegulationLab/addAndModify.vue
  16. 7
      src/views/Regulation/RegulationLab/index.vue
  17. 4
      src/views/activiti/task/List.vue
  18. 11
      src/views/activiti/task/list.data.ts
  19. 11
      src/views/addressBook/address/address.data.ts
  20. 4
      src/views/addressBook/address/addressProjectinfoComponent(弃用).vue
  21. 4
      src/views/addressBook/address/index.vue
  22. 287
      src/views/auth/login/Login.vue
  23. 4
      src/views/auth/login/LoginForm.vue
  24. 2
      src/views/dashboard/workbench/components/WorkbenchHeader.vue
  25. 1
      src/views/myWork/inComplete/inComplete.api.ts
  26. 174
      src/views/performanceIndicator/projectAssessment/addProjectAssessment.vue
  27. 58
      src/views/performanceIndicator/projectAssessment/detailTabel.vue
  28. 136
      src/views/performanceIndicator/projectAssessment/index.vue
  29. 26
      src/views/performanceIndicator/projectAssessment/projectAssessment.api.ts
  30. 200
      src/views/performanceIndicator/projectAssessment/projectAssessment.data.ts
  31. 53
      src/views/performanceIndicator/templateContent/detailTemplateContent.vue
  32. 81
      src/views/performanceIndicator/templateContent/index.vue
  33. 115
      src/views/performanceIndicator/templateContent/modify.vue
  34. 19
      src/views/performanceIndicator/templateContent/templateContent.api.ts
  35. 260
      src/views/performanceIndicator/templateContent/templateContent.data.ts
  36. 2
      src/views/projectLib/projectArchive/SubmitProjectArchive.vue
  37. 6
      src/views/projectLib/projectContract/index.vue
  38. 100
      src/views/projectLib/projectContract/projectContract.data.ts
  39. 220
      src/views/projectLib/projectContract/projectContract.vue
  40. 33
      src/views/projectLib/projectInfo/index.vue
  41. 7
      src/views/projectLib/projectInfo/projectInfo.api.ts
  42. 10
      src/views/projectLib/projectPlan/index.vue
  43. 4
      src/views/projectLib/projectPlan/planinfoFileDetail.vue
  44. 4
      src/views/projectLib/projectPlan/projectPlan.api.ts
  45. 106
      src/views/projectLib/projectPlan/viewPlanDetail.vue
  46. 6
      src/views/projectLib/workReport/index.vue
  47. 4
      src/views/projectLib/workReport/workReportProjectinfoComponent(弃用).vue

1
index.html

@ -94,6 +94,7 @@
border-radius: 100%; border-radius: 100%;
opacity: 0.3; opacity: 0.3;
background-color: #1677ff; background-color: #1677ff;
/* background-color: #e11153;转圈的颜色 */
} }
.dot i:nth-child(1) { .dot i:nth-child(1) {

6
src/api/activiti/activitiTask.ts

@ -6,6 +6,12 @@ import { ActivitiTaskInfo } from '@/api/activiti/model/activitiTaskInfoModel';
// base url // base url
const BASE_URL = '/api/auth/activiti/task'; const BASE_URL = '/api/auth/activiti/task';
export function selectModify(params: ActivitiTask, page: Page<ActivitiTask>) {
return defHttp.get<Page<ActivitiTask>>({
url: `/workflow/status/${params.status}`,
params: Object.assign(params, page),
});
}
/** /**
* *
* *

BIN
src/assets/images/logo_ad_text.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/assets/images/logo_ad_text2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
src/assets/svg/login-bg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

0
src/assets/svg/login-bg.svg → src/assets/svg/login-bg.svg.bak

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/assets/svg/login-bg1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

2
src/views/ProcessApprovalSubPage/ProjectArchiveApproval.vue

@ -3,7 +3,7 @@
<el-tab-pane label="项目入库详情" name="1"> <el-tab-pane label="项目入库详情" name="1">
<ProjectDetails :isEdit="false" :projectid="projectid" /> <ProjectDetails :isEdit="false" :projectid="projectid" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="项目监理管理资料" name="2"> <el-tab-pane label="项目资料" name="2">
<el-divider content-position="left">项目资料详情</el-divider> <el-divider content-position="left">项目资料详情</el-divider>
<UploadfileDetail :projectid="projectid" :stage="1" /> <UploadfileDetail :projectid="projectid" :stage="1" />
<el-divider content-position="left">意见文件</el-divider> <el-divider content-position="left">意见文件</el-divider>

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

@ -3,7 +3,7 @@
<el-tab-pane label="项目审批详情" name="1"> <el-tab-pane label="项目审批详情" name="1">
<BasicTable @register="registerTable" /> <BasicTable @register="registerTable" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="流程图" name="2"> <!-- <el-tab-pane label="流程图" name="2">
<img class="process-img" alt="" :src="imgSrc" /> <img class="process-img" alt="" :src="imgSrc" />
<a-divider>流程记录</a-divider> <a-divider>流程记录</a-divider>
<a-timeline> <a-timeline>
@ -24,7 +24,7 @@
</a-timeline-item> </a-timeline-item>
</template> </template>
</a-timeline> </a-timeline>
</el-tab-pane> </el-tab-pane> -->
</el-tabs> </el-tabs>
</template> </template>

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

@ -3,7 +3,7 @@
<initiatesProjectsApproval :record="record" @close="exit" v-if="record.stage=='creatProjectinfo'"/> <initiatesProjectsApproval :record="record" @close="exit" v-if="record.stage=='creatProjectinfo'"/>
<uploadfileApproval :record="record" @close="exit" v-if="record.stage=='supervisionFile'"/> <uploadfileApproval :record="record" @close="exit" v-if="record.stage=='supervisionFile'"/>
<projectPlanApproval :record="record" @close="exit" v-if="record.stage=='createPlaninfo'"/> <projectPlanApproval :record="record" @close="exit" v-if="record.stage=='createPlaninfo'"/>
<planFileApproval :record="record" @close="exit" v-if="record.stage=='createPlaninfoFile'"/> <planFileApproval :record="record" @close="exit" v-if="record.stage=='createPlaninfoFile'||record.stage=='createPlaninfoFile2'"/>
<ProjectArchiveApproval :record="record" @close="exit" v-if="record.stage==5"/> <ProjectArchiveApproval :record="record" @close="exit" v-if="record.stage==5"/>
<fieldChangeApproval :record="record" @close="exit" v-if="record.stage=='fieldChange'"/> <fieldChangeApproval :record="record" @close="exit" v-if="record.stage=='fieldChange'"/>
</BasicModal> </BasicModal>

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

@ -6,6 +6,9 @@
<!-- <TableAction :actions="getTableAction(record)" /> --> <!-- <TableAction :actions="getTableAction(record)" /> -->
<slot :record="record"></slot> <slot :record="record"></slot>
</template> </template>
<template #tableTitle >
<el-button type="primary" @click="handledownload" v-if="isShowByRoles('manageOrg,supervisor')">下载</el-button>
</template>
</BasicTable> </BasicTable>
</div> </div>
</template> </template>
@ -15,10 +18,11 @@
import { defineProps } from 'vue'; import { defineProps } from 'vue';
import { BasicTable, useTable } from '@/components/Table'; import { BasicTable, useTable } from '@/components/Table';
import { PlaninfoColumn } from '../../projectLib/projectPlan/projectPlan.data'; import { PlaninfoColumn } from '../../projectLib/projectPlan/projectPlan.data';
import { queryPlanInfoMainTimeline } from '../../projectLib/projectPlan/projectPlan.api' import { queryPlanInfoMainTimeline,downloadPlanInfo } from '../../projectLib/projectPlan/projectPlan.api'
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
let dataTo = defineProps(["showActionColumn", "projectid","isArchive"]) let dataTo = defineProps(["showActionColumn", "projectid", "isArchive"])
// //
// table // table
const [registerPlanTable] = useTable({ const [registerPlanTable] = useTable({
@ -27,7 +31,7 @@ const [registerPlanTable] = useTable({
api: queryPlanInfoMainTimeline, api: queryPlanInfoMainTimeline,
columns: PlaninfoColumn, columns: PlaninfoColumn,
rowKey: "taskName", rowKey: "taskName",
showIndexColumn:false, showIndexColumn: false,
// showActionColumn: dataTo.showActionColumn, // showActionColumn: dataTo.showActionColumn,
actionColumn: { actionColumn: {
width: 140, width: 140,
@ -38,11 +42,14 @@ const [registerPlanTable] = useTable({
useSearchForm: false, useSearchForm: false,
beforeFetch(params) { beforeFetch(params) {
params.projectid = dataTo.projectid; params.projectid = dataTo.projectid;
params.isArchive=dataTo.isArchive params.isArchive = dataTo.isArchive
}, },
}); });
async function handledownload() {
//
await downloadPlanInfo({ projectid: dataTo.projectid});
}
</script> </script>

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

@ -7,11 +7,10 @@
<script lang="ts" name="ProjectDetails" setup> <script lang="ts" name="ProjectDetails" setup>
//ts //ts
import { defineProps, defineExpose,watchEffect, onUpdated } from 'vue'; import { defineProps, defineExpose,watchEffect } from 'vue';
import { useForm, BasicForm } from '@/components/Form'; import { useForm, BasicForm } from '@/components/Form';
import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api' import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api'
import { formSchemas } from '../../projectLib/projectInfo/projectInfo.data'; import { formSchemas } from '../../projectLib/projectInfo/projectInfo.data';
import { getUserInfoByid } from '../../projectLib/initiatesProjects/initiatesProjects.api'
import { onMounted } from 'vue'; import { onMounted } from 'vue';
let dataTo = defineProps(["projectid", "isEdit"]) let dataTo = defineProps(["projectid", "isEdit"])

43
src/views/ProcessApprovalSubPage/component/ProjectinfoComponent.vue

@ -17,27 +17,40 @@
</template> </template>
<script lang="ts" name="addressProjectinfoComponent" setup> <script lang="ts" name="ProjectinfoComponent" setup>
//ts //ts
import { ref } from 'vue'; import { ref,reactive } from 'vue';
import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table'; import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table';
import modifycontacts from './modifycontacts.vue' import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicModal, useModal, useModalInner } from '@/components/Modal';
import { columns, searchFormSchema } from '../../projectLib/projectInfo/projectInfo.data'; import { columns, searchFormSchema } from '../../projectLib/projectInfo/projectInfo.data';
import { projectInfoPageList, isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api'; import { getProjectInfoAndChildPageList, isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api';
import { useUserStore } from '@/store/modules/user';
let dataTo = defineProps(["title", "api"])
let emit = defineEmits(["openChildModal"]) let emit = defineEmits(["openChildModal"])
const userStore = useUserStore();
let proid = ref(); let proid = ref();
const [registerModal, { closeModal }] = useModalInner(); let dataTo = reactive({
title: "",
api:getProjectInfoAndChildPageList,
stage: 2
})
const [registerModal] = useModalInner(init);
function init(data) {
console.log("initdataTo", data,dataTo.api)
if(data.api){
dataTo.api = data.api
}
if(data.title){
dataTo.title = data.title
}
if(data.stage){
dataTo.stage = data.stage
}
setProps({api:dataTo.api})
reload()
}
console.log("isShowByRoles", isShowByRoles('manage,sys:admin')) console.log("isShowByRoles", isShowByRoles('manage,sys:admin'))
const [registerTable,{reload,setProps}] = useTable({
const [registerTable, { reload }] = useTable({
title: '项目信息', title: '项目信息',
api: dataTo.api ? dataTo.api : projectInfoPageList, api: dataTo.api,
useSearchForm: true, useSearchForm: true,
columns: columns, columns: columns,
rowKey: "id", rowKey: "id",
@ -49,7 +62,7 @@ const [registerTable, { reload }] = useTable({
slots: { customRender: 'action' }, slots: { customRender: 'action' },
}, },
beforeFetch(param) { beforeFetch(param) {
param.stage = 2 param.stage = dataTo.stage? dataTo.stage : 2
}, },
// rowSelection: { type: 'radio' }, // rowSelection: { type: 'radio' },
// //
@ -90,7 +103,7 @@ function getTableAction(record): ActionItem[] {
function handlemodify(record) { function handlemodify(record) {
proid.value = record.id proid.value = record.id
console.log("handlemodify", proid.value) console.log("handlemodify", proid.value)
emit("openChildModal", proid.value) emit("openChildModal", record)
} }

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

@ -4,14 +4,20 @@ import { BasicColumn } from '@/components/Table';
export const RegulationLabcolumns: BasicColumn[] = [ export const RegulationLabcolumns: BasicColumn[] = [
{ {
title: '政策法规名称', title: '资料名称',
width: 150, width: 150,
dataIndex: 'regulationlabName', dataIndex: 'regulationlabName',
}, },
{ {
title: '政策法规描述', title: '资料分类',
width: 150, width: 150,
dataIndex: 'regulationlabCategory',
format: 'dict|regulationlabCategory',
},
{
title: '资料描述',
width: 200,
dataIndex: 'regulationlabDescribe', dataIndex: 'regulationlabDescribe',
}, },
{ {
@ -24,47 +30,72 @@ export const RegulationLabcolumns: BasicColumn[] = [
dataIndex: 'size', dataIndex: 'size',
width: 150, width: 150,
customRender: ({ record }) => { customRender: ({ record }) => {
let kbNum: number = record.size / 1024 let kbNum: number = record.size / 1024
if (kbNum < 1024) { if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB" return kbNum.toFixed(2).toString() + "KB"
} else { } else {
let mbNum: number = kbNum / 1024 let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB" return mbNum.toFixed(2).toString() + "MB"
} }
}, },
}, },
]; ];
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [
{ {
label: '政策法规名称', label: '资料名称',
field: 'regulationlabName', field: 'regulationlabName',
component: 'Input', component: 'Input',
//colProps: { span: 6 }, colProps: { span: 8 },
},
{
label: '资料分类',
field: 'regulationlabCategory',
component: 'DictSelect',
itemProps: { validateTrigger: 'blur' },
componentProps: {
dictType: 'regulationlabCategory'
}, },
{ colProps: { span: 8 },
label: '文件名称',
field: 'documentName', },
component: 'Input', {
//colProps: { span: 6 }, label: '文件名称',
} field: 'documentName',
component: 'Input',
]; colProps: { span: 8 },
export const regularformSchemas: FormSchema[] = [ }
{
label: '政策法规名称', ];
field: 'regulationlabName', export const regularformSchemas: FormSchema[] = [
component: 'Input', {
required: true, label: '资料名称',
field: 'regulationlabName',
component: 'Input',
required: true,
colProps: { span: 12 },
},
{
label: '资料分类',
field: 'regulationlabCategory',
component: 'DictSelect',
itemProps: { validateTrigger: 'blur' },
required: true,
componentProps: {
dictType: 'regulationlabCategory'
}, },
{ colProps: { span: 12 },
label: '法规资料描述',
field: 'regulationlabDescribe', }, {
component: 'Input', label: '资料描述',
required: true, field: 'regulationlabDescribe',
} component: 'InputTextArea',
required: true,
]; colProps: { span: 24 },
},
];

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

@ -1,8 +1,8 @@
<template> <template>
<!-- 自定义表单 --> <!-- 自定义表单 -->
<BasicModal @register="registerModal" title="归档信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false"> <BasicModal v-bind="$attrs" @register="registerModal" title="归档信息详情" width="1200px" :showOkBtn="false" :showCancelBtn="false">
<el-divider content-position="left">法规信息</el-divider> <el-divider content-position="left">资料信息</el-divider>
<BasicForm @register="registerProjectForm" /> <BasicForm @register="registerProjectForm" />
<el-divider content-position="left">上传法规资料</el-divider> <el-divider content-position="left">上传法规资料</el-divider>
<el-form ref="importFormRef" > <el-form ref="importFormRef" >
@ -113,7 +113,8 @@ async function submitImportForm() {
params.append("id", id.value) params.append("id", id.value)
params.append("regulationlabName", data.regulationlabName) params.append("regulationlabName", data.regulationlabName)
params.append("regulationlabDescribe", data.regulationlabDescribe) params.append("regulationlabDescribe", data.regulationlabDescribe)
modifyRegulationlab(params) params.append("regulationlabCategory", data.regulationlabCategory)
await modifyRegulationlab(params)
} else { } else {
if (fileList.length == 0) { if (fileList.length == 0) {
ElMessage.warning("请上传文件") ElMessage.warning("请上传文件")
@ -122,7 +123,8 @@ async function submitImportForm() {
params.append('file', fileList[0].file) params.append('file', fileList[0].file)
params.append("regulationlabName", data.regulationlabName) params.append("regulationlabName", data.regulationlabName)
params.append("regulationlabDescribe", data.regulationlabDescribe) params.append("regulationlabDescribe", data.regulationlabDescribe)
addRegulationlab(params) params.append("regulationlabCategory", data.regulationlabCategory)
await addRegulationlab(params)
} }
dialogVisible() dialogVisible()
} }

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

@ -33,9 +33,12 @@ const [registerTable, { reload, getForm }] = useTable({
title: '政策法规信息', title: '政策法规信息',
api: regulationlabPageList, api: regulationlabPageList,
columns: RegulationLabcolumns, columns: RegulationLabcolumns,
useSearchForm: true,
actionColumn: { actionColumn: {
width: 120, width: 140,
fixed: "right", title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
}, },
// //
formConfig: { formConfig: {

4
src/views/activiti/task/List.vue

@ -43,7 +43,7 @@
import { searchFormSchema, columns } from '@/views/activiti/task/list.data'; import { searchFormSchema, columns } from '@/views/activiti/task/list.data';
import { PageWrapper } from '@/components/Page'; import { PageWrapper } from '@/components/Page';
import { Icon } from '@/components/Icon'; import { Icon } from '@/components/Icon';
import { claimTask, select } from '@/api/activiti/activitiTask'; import { claimTask, selectModify } from '@/api/activiti/activitiTask';
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { useDrawer } from '@/components/Drawer'; import { useDrawer } from '@/components/Drawer';
@ -80,7 +80,7 @@
*/ */
const [registerTable, { reload }] = useTable({ const [registerTable, { reload }] = useTable({
title: props.title, title: props.title,
api: select, api: selectModify,
columns, columns,
useSearchForm: true, useSearchForm: true,
formConfig: { formConfig: {

11
src/views/activiti/task/list.data.ts

@ -25,8 +25,15 @@ export const columns: BasicColumn[] = [
width: 100, width: 100,
sorter: true, sorter: true,
}, },
{ // {
title: '业务', // title: '业务',
// dataIndex: 'businessTitle',
// sortField: 'arv_businessTitle.text_',
// width: 260,
// sorter: true,
// },
{
title: '项目名称',
dataIndex: 'businessTitle', dataIndex: 'businessTitle',
sortField: 'arv_businessTitle.text_', sortField: 'arv_businessTitle.text_',
width: 260, width: 260,

11
src/views/addressBook/address/address.data.ts

@ -2,6 +2,17 @@ import { FormSchema } from '@/components/Form';
import { BasicColumn } from '@/components/Table'; import { BasicColumn } from '@/components/Table';
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{
title: '项目名称',
dataIndex: 'projectName',
width: 150,
},
{
title: '行政区划',
dataIndex: 'adminDivision',
width: 150,
},
{ {
title: '用户名', title: '用户名',
dataIndex: 'username', dataIndex: 'username',

4
src/views/addressBook/address/addressProjectinfoComponent(弃用).vue

@ -26,7 +26,7 @@ import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Tabl
import modifycontacts from './modifycontacts.vue' import modifycontacts from './modifycontacts.vue'
import { BasicModal, useModal,useModalInner } from '@/components/Modal'; import { BasicModal, useModal,useModalInner } from '@/components/Modal';
import { columns, searchFormSchema } from '../../projectLib/projectInfo/projectInfo.data'; import { columns, searchFormSchema } from '../../projectLib/projectInfo/projectInfo.data';
import { projectInfoPageList, isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api'; import { getProjectInfoAndChildPageList, isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
const userStore = useUserStore(); const userStore = useUserStore();
@ -40,7 +40,7 @@ console.log("isShowByRoles", isShowByRoles('manage,sys:admin'))
const [registerTable, { reload, clearSelectedRowKeys }] = useTable({ const [registerTable, { reload, clearSelectedRowKeys }] = useTable({
title: '项目信息', title: '项目信息',
api: projectInfoPageList, api: getProjectInfoAndChildPageList,
useSearchForm: true, useSearchForm: true,
columns: columns, columns: columns,
rowKey:"id", rowKey:"id",

4
src/views/addressBook/address/index.vue

@ -8,7 +8,7 @@
</template> </template>
</BasicTable> </BasicTable>
<!-- <addressProjectinfoComponent @register="register"/> --> <!-- <addressProjectinfoComponent @register="register"/> -->
<ProjectinfoComponent @register="register" :title="'变更联系人'" @openChildModal="openModalProjectr"> <ProjectinfoComponent @register="register" @openChildModal="openModalProjectr">
<template #default="record"> <template #default="record">
<BasicModal @register="registeProjectrModal" title="变更联系人" width="1200px" :showOkBtn="false"> <BasicModal @register="registeProjectrModal" title="变更联系人" width="1200px" :showOkBtn="false">
<modifycontacts :projectid="record.projectid" @exit="close" /> <modifycontacts :projectid="record.projectid" @exit="close" />
@ -52,7 +52,7 @@ const [registerTable, { reload }] = useTable({
} }
}); });
function handlemodify() { function handlemodify() {
openModal() openModal(true,{title:"变更联系人"})
} }
function handleadd() { function handleadd() {
openDrawer() openDrawer()

287
src/views/auth/login/Login.vue

@ -1,29 +1,24 @@
<template> <template>
<div :class="prefixCls" class="relative w-full h-full px-4"> <div :class="prefixCls" class="relative w-full h-full px-4">
<AppLocalePicker <AppLocalePicker class="absolute text-white top-4 right-4 enter-x xl:text-gray-600" :showText="false"
class="absolute text-white top-4 right-4 enter-x xl:text-gray-600" v-if="!sessionTimeout && showLocale" />
:showText="false"
v-if="!sessionTimeout && showLocale"
/>
<AppDarkModeToggle class="absolute top-3 right-7 enter-x" v-if="!sessionTimeout" /> <AppDarkModeToggle class="absolute top-3 right-7 enter-x" v-if="!sessionTimeout" />
<span class="-enter-x xl:hidden"> <span class="-enter-x xl:hidden">
<AppLogo :alwaysShowTitle="true" /> <!-- <AppLogo :alwaysShowTitle="true" /> -->
<img :alt="title" src="../../../assets/images/logomini.png" class="w-1/6 -mt-0 -mr-20 -enter-x" />
</span> </span>
<div class="container relative h-full py-2 mx-auto sm:px-10"> <div class="container relative h-full py-2 mx-auto sm:px-10">
<div class="flex h-full"> <div class="flex h-full">
<div class="hidden min-h-full pl-4 mr-4 xl:flex xl:flex-col xl:w-6/12"> <div class="hidden min-h-full pl-4 mr-4 xl:flex xl:flex-col xl:w-6/12">
<AppLogo class="-enter-x" /> <!-- <AppLogo class="-enter-x" /> -->
<img :alt="title" src="../../../assets/images/logomini.png" class="w-1/6 -mt-0 -ml-20 -enter-x" />
<div class="my-auto"> <div class="my-auto">
<img <img :alt="title" src="../../../assets/images/logo_ad_text.png" class="w-2/2 -mt-0 -ml-30 -enter-x" />
:alt="title"
src="../../../assets/images/logo_ad_text.png"
class="w-2/2 -mt-0 -ml-30 -enter-x"
/>
<div class="mt-10 font-medium text-white -enter-x"> <div class="mt-10 font-medium text-white -enter-x">
<span class="inline-block mt-4 text-3xl"> <span class="inline-block mt-4 text-3xl">
<!-- {{ t('sys.login.signInTitle') }} --> <!-- <img :alt="title" src="../../../assets/images/logo_ad_text2.png" class="w-2/2 -mt-20 -ml-30 -enter-x" /> -->
</span> </span>
</div> </div>
<div class="mt-5 font-normal text-white text-md dark:text-gray-500 -enter-x"> <div class="mt-5 font-normal text-white text-md dark:text-gray-500 -enter-x">
@ -32,10 +27,8 @@
</div> </div>
</div> </div>
<div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12"> <div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12">
<div <div :class="`${prefixCls}-form`"
:class="`${prefixCls}-form`" class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x">
class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x"
>
<LoginForm /> <LoginForm />
<ForgetPasswordForm /> <ForgetPasswordForm />
<RegisterForm /> <RegisterForm />
@ -48,174 +41,182 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed } from 'vue'; import { computed } from 'vue';
import { AppLogo } from '@/components/Application'; import { AppLogo } from '@/components/Application';
import { AppLocalePicker, AppDarkModeToggle } from '@/components/Application'; import { AppLocalePicker, AppDarkModeToggle } from '@/components/Application';
import LoginForm from './LoginForm.vue'; import LoginForm from './LoginForm.vue';
import ForgetPasswordForm from './ForgetPasswordForm.vue'; import ForgetPasswordForm from './ForgetPasswordForm.vue';
import RegisterForm from './RegisterForm.vue'; import RegisterForm from './RegisterForm.vue';
import MobileForm from './MobileForm.vue'; import MobileForm from './MobileForm.vue';
import QrCodeForm from './QrCodeForm.vue'; import QrCodeForm from './QrCodeForm.vue';
import { useGlobSetting } from '@/hooks/setting'; import { useGlobSetting } from '@/hooks/setting';
import { useI18n } from '@/hooks/web/useI18n'; import { useI18n } from '@/hooks/web/useI18n';
import { useDesign } from '@/hooks/web/useDesign'; import { useDesign } from '@/hooks/web/useDesign';
import { useLocaleStore } from '@/store/modules/locale'; import { useLocaleStore } from '@/store/modules/locale';
defineProps({ defineProps({
sessionTimeout: { sessionTimeout: {
type: Boolean, type: Boolean,
}, },
}); });
const globSetting = useGlobSetting(); const globSetting = useGlobSetting();
const { prefixCls } = useDesign('login'); const { prefixCls } = useDesign('login');
const { t } = useI18n(); const { t } = useI18n();
const localeStore = useLocaleStore(); const localeStore = useLocaleStore();
const showLocale = localeStore.getShowPicker; const showLocale = localeStore.getShowPicker;
const title = computed(() => globSetting?.title ?? ''); const title = computed(() => globSetting?.title ?? '');
</script> </script>
<style lang="less"> <style lang="less">
@prefix-cls: ~'@{namespace}-login'; @prefix-cls: ~'@{namespace}-login';
@logo-prefix-cls: ~'@{namespace}-app-logo'; @logo-prefix-cls: ~'@{namespace}-app-logo';
@countdown-prefix-cls: ~'@{namespace}-countdown-input'; @countdown-prefix-cls: ~'@{namespace}-countdown-input';
@dark-bg: #293146; @dark-bg: #293146;
html[data-theme='dark'] { html[data-theme='dark'] {
.@{prefix-cls} { .@{prefix-cls} {
background-color: @dark-bg; background-color: @dark-bg;
&::before { &::before {
background-image: url(@/assets/svg/login-bg-dark.svg); background-image: url(@/assets/svg/login-bg-dark.svg);
} }
.ant-input, .ant-input,
.ant-input-password { .ant-input-password {
background-color: #232a3b; background-color: #cccccc // #232a3b;
} }
.ant-btn:not(.ant-btn-link):not(.ant-btn-primary) { .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
border: 1px solid #4a5569; border: 1px solid #cccccc //#4a5569;
} }
&-form { &-form {
background: transparent !important; background: transparent !important;
} }
.app-iconify { .app-iconify {
color: #fff; color: #fff;
}
} }
}
input.fix-auto-fill,
.fix-auto-fill input {
-webkit-text-fill-color: #c9d1d9 !important;
box-shadow: inherit !important;
}
}
.@{prefix-cls} {
min-height: 100%;
overflow: hidden;
@media (max-width: @screen-xl) {
background-color: #cccccc; //#293146;
input.fix-auto-fill, .@{prefix-cls}-form {
.fix-auto-fill input { background-color: #fff;
-webkit-text-fill-color: #c9d1d9 !important;
box-shadow: inherit !important;
} }
} }
.@{prefix-cls} { &::before {
min-height: 100%; position: absolute;
overflow: hidden; top: 0;
left: 0;
width: 100%;
height: 100vh;
margin-left: -55%;
// background-color: #194fab;
background-image: url(@/assets/svg/login-bg.jpg);
background-position: 100%;
background-repeat: no-repeat;
// background-size: auto 100%;
// background-position: center;
/* 图片居中显示 */
background-size: cover;
/* 垂直居中内容 */
content: '';
@media (max-width: @screen-xl) { @media (max-width: @screen-xl) {
background-color: #293146; display: none;
}
}
.@{prefix-cls}-form { .@{logo-prefix-cls} {
background-color: #fff; position: absolute;
} top: 12px;
height: 30px;
&__title {
font-size: 16px;
color: #fff;
} }
&::before { img {
position: absolute; width: 32px;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin-left: -55%;
background-color: #194fab;
background-position: 100%;
background-repeat: no-repeat;
background-size: auto 100%;
content: '';
@media (max-width: @screen-xl) {
display: none;
}
} }
}
.container {
.@{logo-prefix-cls} { .@{logo-prefix-cls} {
position: absolute; display: flex;
top: 12px; width: 60%;
height: 30px; height: 80px;
&__title { &__title {
font-size: 16px; font-size: 24px;
color: #fff; color: #fff;
} }
img { img {
width: 32px; width: 48px;
} }
} }
}
.container { &-sign-in-way {
.@{logo-prefix-cls} { .anticon {
display: flex; font-size: 22px;
width: 60%; color: #888;
height: 80px; cursor: pointer;
&__title {
font-size: 24px;
color: #fff;
}
img { &:hover {
width: 48px; color: @primary-color;
}
} }
} }
}
&-sign-in-way { input:not([type='checkbox'], [type='search']) {
.anticon { min-width: 360px;
font-size: 22px;
color: #888;
cursor: pointer;
&:hover { @media (max-width: @screen-xl) {
color: @primary-color; min-width: 320px;
}
}
} }
input:not([type='checkbox'], [type='search']) { @media (max-width: @screen-lg) {
min-width: 360px; min-width: 260px;
}
@media (max-width: @screen-xl) {
min-width: 320px;
}
@media (max-width: @screen-lg) {
min-width: 260px;
}
@media (max-width: @screen-md) { @media (max-width: @screen-md) {
min-width: 240px; min-width: 240px;
}
@media (max-width: @screen-sm) {
min-width: 160px;
}
} }
.@{countdown-prefix-cls} input { @media (max-width: @screen-sm) {
min-width: unset; min-width: 160px;
} }
}
.ant-divider-inner-text { .@{countdown-prefix-cls} input {
font-size: 12px; min-width: unset;
color: @text-color-secondary; }
}
.ant-divider-inner-text {
font-size: 12px;
color: @text-color-secondary;
} }
.aui-image-text { }
.aui-image-text {
top: 50%; top: 50%;
left: 50%; left: 50%;
width: 100%; width: 100%;

4
src/views/auth/login/LoginForm.vue

@ -62,11 +62,11 @@
{{ t('sys.login.qrSignInFormTitle') }} {{ t('sys.login.qrSignInFormTitle') }}
</a-button> </a-button>
</a-col> --> </a-col> -->
<a-col :md="24" :xs="24"> <!-- <a-col :md="24" :xs="24">
<a-button block @click="setLoginState(LoginStateEnum.REGISTER)"> <a-button block @click="setLoginState(LoginStateEnum.REGISTER)">
{{ t('sys.login.registerButton') }} {{ t('sys.login.registerButton') }}
</a-button> </a-button>
</a-col> </a-col> -->
</a-row> </a-row>
<!-- <!--
<a-divider class="enter-x">{{ t('sys.login.otherSignIn') }}</a-divider> <a-divider class="enter-x">{{ t('sys.login.otherSignIn') }}</a-divider>

2
src/views/dashboard/workbench/components/WorkbenchHeader.vue

@ -2,7 +2,7 @@
<div class="lg:flex"> <div class="lg:flex">
<!-- <Avatar :src="userinfo.avatar || headerImg" :size="72" class="!mx-auto !block" /> --> <!-- <Avatar :src="userinfo.avatar || headerImg" :size="72" class="!mx-auto !block" /> -->
<div class="md:ml-6 flex flex-col justify-center md:mt-0 mt-2"> <div class="md:ml-6 flex flex-col justify-center md:mt-0 mt-2">
<h1 class="md:text-lg text-md">早安, {{ userinfo.nickname }}, 开始你一天的工作吧</h1> <h1 class="md:text-lg text-md">你好, {{ userinfo.nickname }}, 欢迎回来</h1>
<!-- <span class="text-secondary"> 今日晴20 - 32 </span> --> <!-- <span class="text-secondary"> 今日晴20 - 32 </span> -->
</div> </div>
<!-- <div class="flex flex-1 justify-end md:mt-0 mt-4"> <!-- <div class="flex flex-1 justify-end md:mt-0 mt-4">

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

@ -14,6 +14,7 @@ export enum Api {
getProcessInstanceIdByProid = "/workflow/getProcessInstanceIdByProid", getProcessInstanceIdByProid = "/workflow/getProcessInstanceIdByProid",
getWorkcountNumber="/workflow/getWorkcountNumber", getWorkcountNumber="/workflow/getWorkcountNumber",
} }
/** /**
* *
*/ */

174
src/views/performanceIndicator/projectAssessment/addProjectAssessment.vue

@ -0,0 +1,174 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="ismodify ? '修改项目考核' : '新增项目考核'" width="1200px"
:showOkBtn="false" :showCancelBtn="false">
<!--引用表格-->
<BasicTable @register="registerTable">
<template #selfScores="{ record }">
<div v-if="isShowByRoles('projectContact') && record.scores != null">
<a-row>
<a-col :span="12">
<a-input-number v-model="record.selfScores" style="width: 100%; " min="0" :max=record.scores />
</a-col>
<a-col :span="12">
<!-- <el-button type="primary" size="small" @click="(record) => { record.selfScores = 0 }"
style="width: 100%; margin-left: 5px;">
上传文件a
</el-button> -->
<el-upload v-if="ismodify" class="upload-demo" ref="upload" action :http-request="(file) => { return httpRequest(file, record.id,record.selfScores) }"
:before-upload="beforeUpload" :on-exceed="handleExceed" :limit="1" :show-file-list="false" style="width: 100%;">
<el-button slot="trigger" size="small" type="primary" style="width: 80%;font-size: 10px; ">上传文件</el-button>
</el-upload>
</a-col>
</a-row>
</div>
<div v-else>
{{ record.selfScores }}
</div>
<a-row>
<!-- <a-divider orientation="left" orientation-margin="0px" style="font-size: small;">文件信息</a-divider> -->
<!-- {{ record.filename }} -->
<a @click="handledown(record)">{{ record.documentName }}</a>
</a-row>
</template>
<template #pscores="{ record }">
<div v-if="isShowByRoles('manageOrg') && record.scores != null">
<a-row>
<a-col :span="12">
<el-input v-model="record.pscores" style="width: 100%; " type="number" min="0" :max=record.scores />
</a-col>
</a-row>
</div>
</template>
</BasicTable>
<div style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-button type="primary" @click="add" size="large">提交</el-button>
<el-button @click="close" size="large">取消</el-button>
</div>
</BasicModal>
</template>
<script lang="ts" name="addProjectAssessment" setup>
//ts
import { ref, onMounted, defineEmits } from 'vue';
import { BasicTable, useTable } from '@/components/Table';
import { useModalInner, BasicModal } from '@/components/Modal';
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
import { addProjectassessment, modifyProjectassessment, getProjectassessmentByprojectId,uploadProjectassessmentFile } from '@/views/performanceIndicator/projectAssessment/projectAssessment.api';
import { templateContentColumns } from '@/views/performanceIndicator/templateContent/templateContent.data';
import { getPerformancescore } from '@/views/performanceIndicator/templateContent/templateContent.api'
import { cloneDeep } from 'lodash-es';
import{ElMessage,UploadInstance} from 'element-plus'
import { downloadFile } from "@/api/common/api"
const [registerModal, { closeModal }] = useModalInner(init);
let projectid = ref(null);
let type = ref(null);
let ismodify = ref(false);
const upload = ref<UploadInstance>()
let emit = defineEmits(["close"])
async function init(data) {
console.log("datadatadata", data)
let columnsTemp = cloneDeep(templateContentColumns)
setColumns(columnsTemp)
if (data.projectid) {
projectid.value = data.projectid
type.value = data.type
ismodify.value = data.ismodify
}
if (data.ismodify) {
setProps({ api: getProjectassessmentByprojectId })
reload()
}
}
const [registerTable, { getDataSource, setProps, reload, setColumns }] = useTable({
api: getPerformancescore,
columns: templateContentColumns,
useSearchForm: false,
pagination: false,
// actionColumn: {
// width: 140,
// title: '',
// dataIndex: 'action',
// slots: { customRender: 'action' },
// },
beforeFetch(params) {
params.projectId = projectid.value
params.type = type.value
},
afterFetch: (data) => {
},
//
// formConfig: {
// schemas: searchFormSchema,
// }
});
function close() {
closeModal();
}
async function add() {
let tableData = await getDataSource()
tableData.forEach(item => {
item.projectId = projectid.value
item.type = type.value
})
if (ismodify.value) {
await modifyProjectassessment(tableData)
console.log("修改", tableData)
} else {
await addProjectassessment(tableData)
console.log("新增", tableData)
}
closeModal();
emit("close")
}
// fileList,
async function httpRequest(option,id,selfScores) {
const params = new FormData()
params.append('file', option.file)
params.append('id',id)
params.append('selfScores',selfScores)
upload.value?.clearFiles()
await uploadProjectassessmentFile(params)
ElMessage.success('上传成功')
reload()
return true
}
//
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("最多只能上传一个文件")
}
function handledown(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>

58
src/views/performanceIndicator/projectAssessment/detailTabel.vue

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" title="查看项目考核" width="1200px" :showOkBtn="false">
<!--引用表格-->
<BasicTable @register="registerTable">
</BasicTable>
</BasicModal>
</template>
<script lang="ts" name="addProjectAssessment" setup>
//ts
import { ref } from 'vue';
import { BasicTable, useTable } from '@/components/Table';
import { useModalInner, BasicModal } from '@/components/Modal';
import { getProjectassessmentByprojectId } from '@/views/performanceIndicator/projectAssessment/projectAssessment.api';
import { templateContentColumns } from '@/views/performanceIndicator/templateContent/templateContent.data';
const [registerModal, { closeModal }] = useModalInner(init);
let projectid = ref(null);
let type = ref(null);
async function init(data) {
console.log("datadatadata", data)
if (data.projectid) {
projectid.value = data.projectid
type.value = data.type
}
}
const [registerTable] = useTable({
api: getProjectassessmentByprojectId,
columns: templateContentColumns,
useSearchForm: false,
pagination:false,
// actionColumn: {
// width: 140,
// title: '',
// dataIndex: 'action',
// slots: { customRender: 'action' },
// },
beforeFetch(params) {
params.projectId = projectid.value
},
afterFetch: (data) => {
},
//
// formConfig: {
// schemas: searchFormSchema,
// }
});
function close() {
closeModal();
}
</script>
<style scoped>
</style>

136
src/views/performanceIndicator/projectAssessment/index.vue

@ -0,0 +1,136 @@
<template>
<PageWrapper dense>
<!--引用表格-->
<BasicTable @register="registerTable">
<template #action="{ record }">
<!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" />
</template>
<template #tableTitle>
<el-button type="primary" @click="handleAddcontract" v-if="isShowByRoles('projectContact')">
新增项目考核</el-button>
</template>
</BasicTable>
<ProjectinfoComponent @register="registerProjectinfo"
@openChildModal="openModalProjectr">
<template #default>
<addProjectAssessment @register="registerProjectAssessment" @close="closeModel" />
</template>
</ProjectinfoComponent>
<addProjectAssessment @register="registerProjectAssessment" @close="closeModel" />
<detailTabel @register="registerDetailTable" />
</PageWrapper>
</template>
<script lang="ts" name="system-user" setup>
//ts
import { ref } from "vue"
import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table';
import { useModal } from '@/components/Modal';
import { PageWrapper } from '@/components/Page';
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
import { searchFormSchema } from '@/views/projectLib/projectInfo/projectInfo.data';
import { getProjectassessmentPageList,getProjectassessmentProjectPageList ,deleteProjectassessment} from '@/views/performanceIndicator/projectAssessment/projectAssessment.api';
import { projectAssessmentColumns } from '@/views/performanceIndicator/projectAssessment/projectAssessment.data';
import detailTabel from './detailTabel.vue'
import ProjectinfoComponent from '@/views/ProcessApprovalSubPage/component/ProjectinfoComponent.vue'
import addProjectAssessment from './addProjectAssessment.vue'
const [registerProjectAssessment, { openModal: openModalProjectAssessment, closeModal: closeModalProjectAssessment }] = useModal();
const [registerProjectinfo, { openModal: openModalProjectinfo, closeModal: closeModalProjectinfo }] = useModal();
const [registerDetailTable, { openModal: openModalDetailTable }] = useModal();
let projectid = ref()
const [registerTable, { reload }] = useTable({
title: '合同信息',
api: getProjectassessmentPageList,
columns: projectAssessmentColumns,
useSearchForm: true,
rowKey: "id",
showIndexColumn: false,
actionColumn: {
width: 140,
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
},
//
formConfig: {
schemas: searchFormSchema,
},
});
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
ifShow: () => {
return isShowByRoles("projectContact,manageOrg") && (record.children == null || record.projectId != null)
},
onClick: handledetail.bind(null, record),
},
{
label: '编辑',
ifShow: () => {
return isShowByRoles("projectContact,manageOrg") && (record.children == null || record.projectId != null)
},
onClick: handleModify.bind(null, record),
},
// {
// label: '',
// ifShow: () => {
// return isShowByRoles("manageOrg") && (record.children == null || record.projectId != null)
// },
// popConfirm: {
// title: '?',
// confirm: handleDelete.bind(null, record),
// },
// }
];
}
function handledetail(record) {
openModalDetailTable(true, { projectid: record.projectId })
}
/**
* 修改
*/
function handleModify(record) {
console.log(record, projectid.value)
openModalProjectAssessment(true, { projectid: record.projectId, type: record.type,ismodify:true })
}
/**
* 新增
*/
function openModalProjectr(value) {
console.log("proidproid", value)
let type="1"
if(value.superLeader=="5"&&value.dutyWorkplace.indexOf("医院")!=-1){
type="2"
}else if(value.superLeader=="5"&&value.dutyWorkplace.indexOf("卫生健康")!=-1){
type="1"
}else{
return;
}
openModalProjectAssessment(true, { projectid: value.id,type: type,ismodify:false })
}
async function handleDelete(record) {
await deleteProjectassessment({ projectId: record.projectId})
reload()
}
function closeModel() {
closeModalProjectAssessment()
closeModalProjectinfo()
reload()
}
function handleAddcontract(record) {
openModalProjectinfo(true,{title:'新增项目考核' ,api:getProjectassessmentProjectPageList ,stage:6})
}
</script>
<style scoped></style>

26
src/views/performanceIndicator/projectAssessment/projectAssessment.api.ts

@ -0,0 +1,26 @@
import { defHttp } from '@/utils/http/axios';
export enum Api {
addProjectassessment = '/huzhouProjectassessment/addProjectassessment',
modifyProjectassessment='/huzhouProjectassessment/modifyProjectassessment',
getProjectassessmentPageList = '/huzhouProjectassessment/getProjectassessmentPageList',
getProjectassessmentProjectPageList='/huzhouProjectassessment/getProjectassessmentProjectPageList',
deleteProjectassessment="/huzhouProjectassessment/deleteProjectassessment",
getProjectassessmentByprojectId="/huzhouProjectassessment/getProjectassessmentByprojectId",
uploadProjectassessmentFile="/huzhouProjectassessment/uploadProjectassessmentFile",
}
/**
* list
*/
export const addProjectassessment = (params?) => defHttp.post({ url: Api.addProjectassessment, params });
export const modifyProjectassessment = (params?) => defHttp.post({ url: Api.modifyProjectassessment, params });
export const deleteProjectassessment = (params?) => defHttp.post({ url: Api.deleteProjectassessment, params });
export const getProjectassessmentByprojectId = (params?) => defHttp.get({ url: Api.getProjectassessmentByprojectId, params });
export const getProjectassessmentPageList = (params?) => defHttp.get({ url: Api.getProjectassessmentPageList, params });
export const getProjectassessmentProjectPageList = (params?) => defHttp.get({ url: Api.getProjectassessmentProjectPageList, params });
export const uploadProjectassessmentFile = (params?) =>defHttp.post({ url: Api.uploadProjectassessmentFile,headers:{ "Content-Type": "multipart/form-data" }, params })

200
src/views/performanceIndicator/projectAssessment/projectAssessment.data.ts

@ -0,0 +1,200 @@
import { FormSchema } from '@/components/Form';
import { BasicColumn } from '@/components/Table';
import { el } from 'element-plus/es/locale';
// export const showDetailColumns: BasicColumn[] = [
// {
// title: '评价维度',
// width: 150,
// dataIndex: 'evaluationDimension',
// customRender: ({ text, record, index }) => {
// const obj = {
// children: text,
// props: {} as any,
// };
// if (record.evaluationLength != null && record.evaluationLength != 0) {
// obj.props.rowSpan = record.evaluationLength
// } else {
// obj.props.rowSpan = 0
// }
// return obj
// },
// },
// {
// title: '一级指标',
// dataIndex: 'primaryIndicator',
// customRender: ({ text, record, index }) => {
// const obj = {
// children: text,
// props: {} as any,
// };
// if (record.primaryLength != null && record.primaryLength != 0) {
// obj.props.rowSpan = record.primaryLength
// }
// else {
// obj.props.rowSpan = 0
// }
// return obj
// },
// },
// {
// title: '二级指标',
// dataIndex: 'secondaryIndicator',
// customRender: ({ text, record, index }) => {
// const obj = {
// children: text,
// props: {} as any,
// };
// if (record.secondaryLength != null) {
// obj.props.rowSpan = record.secondaryLength
// }
// else {
// obj.props.rowSpan = 0
// }
// return obj
// },
// },
// {
// title: '三级指标',
// dataIndex: 'tertiaryIndicator',
// customRender: ({ text, record, index }) => {
// const obj = {
// children: text,
// props: {} as any,
// };
// if (record.tertiaryLength != null) {
// obj.props.rowSpan = record.tertiaryLength
// }
// else {
// obj.props.rowSpan = 0
// }
// return obj
// },
// },
// {
// title: '描述',
// resizable: true,
// ellipsis: false,
// dataIndex: 'description',
// },
// {
// title: '分数',
// fixed: 'right',
// dataIndex: 'scores',
// width: 80,
// },
// {
// title: '自我评分',
// width: 80,
// dataIndex: 'selfScores',
// },
// {
// title: '系统评分',
// dataIndex: 'sysscores',
// fixed: 'right',
// width: 80,
// },
// {
// title: '管理评分',
// fixed: 'right',
// width: 80,
// dataIndex: 'pscores',
// }
// ]
export const projectAssessmentColumns: BasicColumn[] = [
{
title: '项目编号',
width: 150,
dataIndex: 'projectId',
ifShow: false,
},
{
title: '项目名称',
dataIndex: 'projectName',
width: 300,
resizable: true,
},
{
title: '行政区划',
dataIndex: 'adminDivision',
resizable: true
},
{
title: '责任单位',
dataIndex: 'dutyWorkplace',
resizable: true
},
{
title: '单位属性',
dataIndex: 'workplaceProperties',
resizable: true
},
{
title: '改革所属项目',
dataIndex: 'reformName',
format: 'dict|reformTasks',
resizable: true
},
{
title: '上级指导处室',
dataIndex: 'superLeader',
format: 'dict|superLeader',
resizable: true
},
{
title: '系统评分总分',
dataIndex: 'totalSysscores',
resizable: true
},
{
title: '管理人员评分总分',
dataIndex: 'totalPscores',
resizable: true
},
{
title: '总得分',
dataIndex: 'totalScores',
resizable: true
},
];
export const projectInfoHistoryDetailColumns: BasicColumn[] = [
{
title: '字段名称',
width: 150,
dataIndex: 'fieldName',
},
{
title: '字段修改次数',
dataIndex: 'fieldTotal',
},
{
title: '新值',
dataIndex: 'newvalue',
},
{
title: '旧值',
dataIndex: 'oldvalue',
},
{
title: '修改时间',
dataIndex: 'createDate',
},
]
export const searchFormSchema: FormSchema[] = [
{
label: '项目名称',
field: 'projectName',
component: 'Input',
//colProps: { span: 6 },
},
{
label: '项目编号',
field: 'projectId',
component: 'Input',
//colProps: { span: 6 },
}
];

53
src/views/performanceIndicator/templateContent/detailTemplateContent.vue

@ -0,0 +1,53 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" title="详情" width="1200px" :showOkBtn="false">
<!--引用表格-->
<BasicTable @register="registerTable">
</BasicTable>
</BasicModal>
</template>
<script lang="ts" name="detailTemplateContent" setup>
//ts
import { ref } from 'vue';
import { BasicTable, useTable } from '@/components/Table';
import { useModalInner, BasicModal } from '@/components/Modal';
import { performancescoreColumns } from './templateContent.data';
import { getPerformancescore } from './templateContent.api'
const [registerModal, { closeModal }] = useModalInner(init);
let type = ref()
function init(props) {
type.value = props.type
}
const [registerTable] = useTable({
api: getPerformancescore,
columns: performancescoreColumns,
useSearchForm: false,
pagination:false,
// actionColumn: {
// width: 140,
// title: '',
// dataIndex: 'action',
// slots: { customRender: 'action' },
// },
beforeFetch(params) {
params.type = type.value
},
//
// formConfig: {
// schemas: searchFormSchema,
// }
});
function close() {
closeModal();
}
</script>
<style scoped>
</style>

81
src/views/performanceIndicator/templateContent/index.vue

@ -0,0 +1,81 @@
<template>
<PageWrapper dense>
<!--引用表格-->
<BasicTable @register="registerTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<detailTemplateContent @register="registerDetail" />
<modify @register="registerModify" @close="closeModel"/>
</PageWrapper>
</template>
<script lang="ts" name="planSummary" setup>
//ts
import { BasicTable, useTable ,ActionItem,TableAction} from '@/components/Table';
import { PageWrapper } from '@/components/Page';
import { useModal } from '@/components/Modal';
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
import detailTemplateContent from './detailTemplateContent.vue'
import modify from './modify.vue'
import { PerformanColumns } from './templateContent.data';
import { getPerforman } from './templateContent.api'
const [registerDetail, { openModal: openModalDetail }] = useModal();
const [registerModify, { openModal: openModalModify, closeModal: closeModalModify }] = useModal();
const [registerTable,{reload}] = useTable({
api: getPerforman,
columns: PerformanColumns,
useSearchForm: false,
pagination:false,
actionColumn: {
width: 140,
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
},
afterFetch: (data) => {
},
//
// formConfig: {
// schemas: searchFormSchema,
// }
});
function getTableAction(record): ActionItem[] {
return [
{
label: '详情',
onClick: handledetail.bind(null, record),
},
// {
// label: '',
// ifShow: () => {
// return isShowByRoles("manageOrg")
// },
// onClick: handleModify.bind(null, record),
// },
];
}
function handledetail(record) {
openModalDetail(true,{type:record.type})
console.log(record)
}
// function handleModify(record) {
// openModalModify(true,{type:record.type})
// console.log(record)
// }
function closeModel() {
closeModalModify()
reload()
}
</script>
<style scoped>
</style>

115
src/views/performanceIndicator/templateContent/modify.vue

@ -0,0 +1,115 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" title="修改" width="1200px" :showOkBtn="false">
<!-- 自定义表单 -->
<el-divider content-position="left">模板表格文件下载</el-divider>
<div style="padding-left: 40px;">
<el-button slot="trigger" type="primary" @click="downexcel">下载模板</el-button>
</div>
<el-divider content-position="left">上传表格文件</el-divider>
<el-form ref="importFormRef">
<el-form-item label="上传文件:">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest" :before-upload="beforeUpload"
:on-exceed="handleExceed" :limit="1" accept=".xls, .xlsx">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel文件且不超过5M</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="uploadFile" setup>
import { reactive, ref ,defineEmits} from 'vue'
import { useModalInner, BasicModal } from '@/components/Modal';
import { importPerformancescore } from './templateContent.api';
import { ElMessage } from 'element-plus'
import { downloadFile } from "@/api/common/api"
const [registerModal, { closeModal }] = useModalInner(init);
let emit = defineEmits(['close'])
let type = ref()
let fileList = reactive<Array<any>>([]);
function downexcel(){
let param = {
path: "Resources/考核模板.xlsx",
fileName: "考核模板.xlsx"
}
downloadFile("/huzhouUploadfileinfo/downloadfile", "考核模板.xlsx", param)
}
function init(params) {
type.value = params.type
}
function httpRequest(option) {
fileList.pop()
fileList.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
}
//xlsx
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
let whiteList = ["xls", "xlsx"];
if (whiteList.indexOf(fileSuffix) === -1) {
ElMessage.error('上传文件只能是xls、xlsx格式');
return false;
}
// let fileName = file.name
// let reg = /^.+(\.xlsx)$/
// if(!reg.test(fileName)){
// ElMessage.error("xlsx!")
// return false
// }
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
//Excel
async function submitImportForm() {
// console.log("datadatadatadatadatadata", data)
// if (data.stage != 2) {
// ElMessage({
// message: "",
// type: "error"
// })
// return
// }
// // 使form
const params = new FormData()
// paramsData
// fileList.forEach((x) => {
// console.log("xxxxxxxxxx", x, x.file)
// });
params.append('file', fileList[0].file)
params.append('type', type.value)
//axios
await importPerformancescore(params).then(() => {
})
emit('close')
}
function dialogVisible() {
closeModal()
}
</script>
<style></style>

19
src/views/performanceIndicator/templateContent/templateContent.api.ts

@ -0,0 +1,19 @@
import { defHttp } from '@/utils/http/axios';
export enum Api {
importPerformancescore = '/huzhouPerformancescore/importPerformancescore',
getPerformancescore = '/huzhouPerformancescore/getPerformancescore',
getPerforman="/huzhouPerformancescore/getPerforman",
}
/**
* list
*/
export const importPerformancescore = (params?) =>defHttp.post({ url: Api.importPerformancescore,headers:{ "Content-Type": "multipart/form-data" }, params })
export const getPerformancescore = (params?) => defHttp.get({ url: Api.getPerformancescore, params });
export const getPerforman = (params?) => defHttp.get({ url: Api.getPerforman, params });

260
src/views/performanceIndicator/templateContent/templateContent.data.ts

@ -0,0 +1,260 @@
import { FormSchema } from '@/components/Form';
import { BasicColumn } from '@/components/Table';
import { useDictStore } from '@/store/modules/dict';
// 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" })
// let manageOrgDict = []
// let supervisorDict = []
// let contructorDict = []
// let ownerDict = []
// let controlerDict = []
// let consultDict = []
export const templateContentColumns: BasicColumn[] = [
{
title: '评价维度',
width: 120,
dataIndex: 'evaluationDimension',
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.evaluationLength != null && record.evaluationLength != 0) {
obj.props.rowSpan = record.evaluationLength
} else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '一级指标',
dataIndex: 'primaryIndicator',
width: 120,
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.primaryLength != null && record.primaryLength != 0) {
obj.props.rowSpan = record.primaryLength
}
else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '二级指标',
width: 120,
dataIndex: 'secondaryIndicator',
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.secondaryLength != null) {
obj.props.rowSpan = record.secondaryLength
}
else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '三级指标',
width: 120,
dataIndex: 'tertiaryIndicator',
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.tertiaryLength != null) {
obj.props.rowSpan = record.tertiaryLength
}
else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '描述',
resizable:true,
ellipsis:false,
dataIndex: 'description',
},
{
title: '分数',
width:80,
dataIndex: 'scores',
},
{
title: '系统评分',
width:120,
dataIndex: 'sysscores',
},
{
title: '自我评分',
width: 120,
dataIndex: 'selfScores',
slots: { customRender: 'selfScores' },
},
{
title: '管理评分',
width:120,
dataIndex: 'pscores',
slots: { customRender: 'pscores' },
}
];
export const performancescoreColumns: BasicColumn[] = [
{
title: '评价维度',
width: 150,
dataIndex: 'evaluationDimension',
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.evaluationLength != null && record.evaluationLength != 0) {
obj.props.rowSpan = record.evaluationLength
} else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '一级指标',
dataIndex: 'primaryIndicator',
width: 150,
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.primaryLength != null && record.primaryLength != 0) {
obj.props.rowSpan = record.primaryLength
}
else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '二级指标',
width: 150,
dataIndex: 'secondaryIndicator',
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.secondaryLength != null) {
obj.props.rowSpan = record.secondaryLength
}
else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '三级指标',
width: 150,
dataIndex: 'tertiaryIndicator',
customRender: ({ text, record, index }) => {
const obj = {
children: text,
props: {} as any,
};
if (record.tertiaryLength != null) {
obj.props.rowSpan = record.tertiaryLength
}
else {
obj.props.rowSpan = 0
}
return obj
},
},
{
title: '描述',
resizable:true,
ellipsis:false,
dataIndex: 'description',
},
{
title: '分数',
width:80,
dataIndex: 'scores',
},
];
export const PerformanColumns: BasicColumn[] = [
{
title: 'id',
width: 80,
dataIndex: 'id',
},
{
title: '考核名称',
width: 150,
dataIndex: 'name',
},
{
title: '上级指导室',
dataIndex: 'superLeader',
},
{
title: '责任单位',
dataIndex: 'dutyWorkplace',
},
{
title: '总分',
dataIndex: 'total',
},
]
export const searchFormSchema: FormSchema[] = [
{
label: '项目名称',
field: 'projectName',
component: 'Input',
//colProps: { span: 6 },
},
{
label: '项目编号',
field: 'projectId',
component: 'Input',
//colProps: { span: 6 },
}
];

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

@ -3,7 +3,7 @@
<el-tab-pane label="项目入库详情" name="1"> <el-tab-pane label="项目入库详情" name="1">
<ProjectDetails :isEdit="false" :projectid="projectid" /> <ProjectDetails :isEdit="false" :projectid="projectid" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="项目监理管理资料" name="2" v-if="isshowUploadfileDetail"> <el-tab-pane label="项目资料" name="2" v-if="isshowUploadfileDetail">
<el-divider content-position="left">项目资料详情</el-divider> <el-divider content-position="left">项目资料详情</el-divider>
<UploadfileDetail :projectid="projectid" :stage="1" :isArchive="1" /> <UploadfileDetail :projectid="projectid" :stage="1" :isArchive="1" />
<el-divider content-position="left">意见文件</el-divider> <el-divider content-position="left">意见文件</el-divider>

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

@ -11,7 +11,7 @@
新增项目合同</el-button> 新增项目合同</el-button>
</template> </template>
</BasicTable> </BasicTable>
<ProjectinfoComponent @register="registerProjectinfo" :title="'新增项目合同'" :api="getContractProjectPageList" <ProjectinfoComponent @register="registerProjectinfo"
@openChildModal="openModalProjectr"> @openChildModal="openModalProjectr">
<template #default> <template #default>
<projectContract @register="registerSubmitprojectContract" @close="closeModel" /> <projectContract @register="registerSubmitprojectContract" @close="closeModel" />
@ -110,7 +110,7 @@ function handleModify(record) {
*/ */
function openModalProjectr(value) { function openModalProjectr(value) {
console.log("proidproid", value) console.log("proidproid", value)
openModalprojectContract(true, { projectid: value }) openModalprojectContract(true, { projectid: value.id })
} }
async function handleDelete(record) { async function handleDelete(record) {
await deleteContractinfo({ projectId: record.id }) await deleteContractinfo({ projectId: record.id })
@ -123,7 +123,7 @@ function closeModel() {
reload() reload()
} }
function handleAddcontract(record) { function handleAddcontract(record) {
openModalProjectinfo() openModalProjectinfo(true,{ title:"新增项目合同" ,api:getContractProjectPageList})
} }
</script> </script>

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

@ -117,7 +117,7 @@ export const MoneyFormSchemas: FormSchema[] = [
//字段 //字段
field: 'projectName', field: 'projectName',
component: 'Input', component: 'Input',
colProps: { span: 5 }, colProps: { span: 6 },
}, },
{ {
@ -126,16 +126,15 @@ export const MoneyFormSchemas: FormSchema[] = [
//字段 //字段
field: 'totalMoney', field: 'totalMoney',
component: 'Input', component: 'Input',
colProps: { span: 3 }, colProps: { span: 6 },
}, },
{ {
//标题名称 //标题名称
label: '自筹资金(元)', label: '中央资金(元)',
//字段 //字段
field: 'selfMoney', field: 'centralMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input', component: 'Input',
colProps: { span: 3 }, colProps: { span: 6 },
}, },
{ {
//标题名称 //标题名称
@ -143,7 +142,7 @@ export const MoneyFormSchemas: FormSchema[] = [
//字段 //字段
field: 'provincialMoney', field: 'provincialMoney',
component: 'Input', component: 'Input',
colProps: { span: 3 }, colProps: { span: 6 },
}, },
{ {
//标题名称 //标题名称
@ -151,7 +150,7 @@ export const MoneyFormSchemas: FormSchema[] = [
//字段 //字段
field: 'cityMoney', field: 'cityMoney',
component: 'Input', component: 'Input',
colProps: { span: 3 }, colProps: { span: 6 },
}, },
{ {
//标题名称 //标题名称
@ -160,16 +159,18 @@ export const MoneyFormSchemas: FormSchema[] = [
field: 'countyMoney', field: 'countyMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType //组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input', component: 'Input',
colProps: { span: 4 }, colProps: { span: 6 },
labelWidth: "100px", labelWidth: "100px",
}, },
{ {
//标题名称 //标题名称
label: '中央资金(元)', label: '自筹资金(元)',
//字段 //字段
field: 'centralMoney', field: 'selfMoney',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'Input', component: 'Input',
colProps: { span: 3 }, colProps: { span: 6 },
}, },
] ]
export const contractformSchemas: FormSchema[] = [ export const contractformSchemas: FormSchema[] = [
@ -238,7 +239,7 @@ export const contractformSchemas: FormSchema[] = [
// ]; // ];
// }, // },
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 6,},
}, },
{ {
@ -248,15 +249,7 @@ export const contractformSchemas: FormSchema[] = [
componentProps: { componentProps: {
style: { width: '80%' }, style: { width: '80%' },
}, },
// componentProps: ({ formModel, formActionType }) => {
// return {
// //
// style: { width: '80%' },
// onBlur: async (value) => {
// console.log("value",value,formModel)
// },
// };
// },
dynamicRules: ({ values }) => { dynamicRules: ({ values }) => {
console.log('values:', values);//表单所有值 console.log('values:', values);//表单所有值
//需要return //需要return
@ -295,11 +288,11 @@ export const contractformSchemas: FormSchema[] = [
]; ];
}, },
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 6,},
helpMessage: '需与项目计划的阶段名称所匹配', helpMessage: '需与项目计划的阶段名称所匹配',
}, },
{ {
label: '第1次支付总金额', label: '次支付总金额',
field: 'totalMoney', field: 'totalMoney',
component: 'InputNumber', component: 'InputNumber',
componentProps: { componentProps: {
@ -311,78 +304,45 @@ export const contractformSchemas: FormSchema[] = [
}, },
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 6 ,},
labelWidth: "130px", labelWidth: "130px",
}, },
{ {
label: '自筹资金', label: '中央资金',
field: 'selfMoney', field: 'centralMoney',
component: 'InputNumber', component: 'InputNumber',
componentProps: {
//数值精度
precision: 2,
//步数
step: 1,
style: { width: '80%' },
},
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 4,offset: 3,pull:3 },
}, },
{ {
label: '省级资金', label: '省级资金',
field: 'provincialMoney', field: 'provincialMoney',
component: 'InputNumber', component: 'InputNumber',
componentProps: {
//数值精度
precision: 2,
//步数
step: 1,
style: { width: '80%' },
},
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 4,pull:3 },
}, },
{ {
label: '市级资金', label: '市级资金',
field: 'cityMoney', field: 'cityMoney',
component: 'InputNumber', component: 'InputNumber',
componentProps: {
precision: 2,
//步数
step: 1,
style: { width: '80%' },
},
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 4 ,pull:3},
}, },
{ {
label: '区县级资金', label: '区县级资金',
field: 'countyMoney', field: 'countyMoney',
component: 'InputNumber', component: 'InputNumber',
componentProps: {
//数值精度
precision: 2,
//步数
step: 1,
style: { width: '80%', },
},
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 4,pull:3},
}, },
{ {
label: '中央资金', label: '自筹资金',
field: 'centralMoney', field: 'selfMoney',
component: 'InputNumber', component: 'InputNumber',
componentProps: {
//数值精度
precision: 2,
//步数
step: 1,
style: { width: '80%' },
},
required: true, required: true,
colProps: { span: 6 }, colProps: { span: 4 ,pull:3},
} },
]; ];

220
src/views/projectLib/projectContract/projectContract.vue

@ -1,6 +1,6 @@
<template> <template>
<!-- 自定义表单 --> <!-- 自定义表单 -->
<BasicModal v-bind="$attrs" @register="registerModal" title="项目合同信息详情" width="1200px" :showOkBtn="false" <BasicModal v-bind="$attrs" @register="registerModal" title="项目合同信息详情" width="1500px" :showOkBtn="false"
:showCancelBtn="false"> :showCancelBtn="false">
<el-divider content-position="left">项目信息</el-divider> <el-divider content-position="left">项目信息</el-divider>
<BasicForm @register="registerMoneyForm" /> <BasicForm @register="registerMoneyForm" />
@ -47,6 +47,106 @@ import { message } from 'ant-design-vue';
import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons-vue'; import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons-vue';
import { cloneDeep } from 'lodash-es'; import { cloneDeep } from 'lodash-es';
const aaa = ({ values }) => {
// console.log('values:', values);//
//return
return [
{
//
required: true,
// value
validator: (formSchemas, value) => {
console.log("______", formSchemas, value);
//return Promise
return new Promise((resolve, reject) => {
if (formSchemas.field.indexOf("centralMoney") != -1) {
let fieldnum = formSchemas.field.replace("centralMoney", "")
Object.keys(values).forEach(key => {
if (values["taskName" + fieldnum] == null) {
reject("请填写本次支付的属性值")
}
if (values["taskName" + fieldnum] != null && values["taskName" + fieldnum]?.indexOf("首付") != -1) {
if (fieldnum.length == 0) {
console.log("首付的中央资金不能超过总中央资金的30%11", value, Number(values["centralMoney"]), Number(resMoney.value.centralMoney), Number(values["centralMoney"]) / Number(resMoney.value.centralMoney))
if (Number(value) / Number(resMoney.value.centralMoney) > 0.3) {
reject("首付的中央资金不能超过总中央资金的30%")
}
} else {
let total = Number(values["centralMoney"])
if (Number(fieldnum) == 2) {
total += value
} else {
for (let i = 2; i < Number(fieldnum); i++) {
total += Number(values[`centralMoney${i}`])
}
total += value
}
if (total / Number(resMoney.value.centralMoney) > 0.3) {
reject("首付的中央资金不能超过总中央资金的30%")
}
}
}
if (values["taskName" + fieldnum] != null && values["taskName" + fieldnum]?.indexOf("初验") != -1) {
if (fieldnum.length == 0) {
if (Number(value) / Number(resMoney.value.centralMoney) > 0.6) {
reject("初验的中央资金不能超过总中央资金的60%")
}
} else {
//
let total = Number(values["centralMoney"])
if (Number(fieldnum) == 2) {
total += value
} else {
for (let i = 2; i < Number(fieldnum); i++) {
total += Number(values[`centralMoney${i}`])
}
total += value
}
if (total / Number(resMoney.value.centralMoney) > 0.6) {
reject("初验的中央资金不能超过总中央资金的60%")
}
}
}
resolve("1")
})
}
resolve("1")
});
},
},
];
}
const bbb = ({ schema,formModel, formActionType }) => {
console.log("formModel", schema)
if(schema==undefined||schema.field==undefined){
console.log("formModel111111",schema )
return {
//
precision: 2,
//
step: 1,
}
}
return {
//
precision: 2,
//
step: 1,
min: 0,
max:resMoney.value[schema.field.replace(/\d/g, '')],
style: { width: '90%' },
onChange: async (value, option) => {
// formModel.manageContactor = undefined; // reset city value
const { updateSchema ,setFieldsValue,getFieldsValue} = formActionType;
let percentage =value/resMoney.value[schema.field.replace(/\d/g, '')]*100
console.log("percentage",percentage.toFixed(0))
schema.suffix=percentage.toFixed(0)+"%"
updateSchema(schema)
},
};
}
const [registerModal, { closeModal }] = useModalInner(init); const [registerModal, { closeModal }] = useModalInner(init);
@ -56,11 +156,25 @@ let projectid = ref()
let payNum = ref(1) let payNum = ref(1)
let resMoney = ref() let resMoney = ref()
let tempSchemas = cloneDeep(contractformSchemas) as Array<FormSchema> let tempSchemas = cloneDeep(contractformSchemas) as Array<FormSchema>
tempSchemas.forEach(item => {
if (item.field.indexOf("Money") != -1) {
item.dynamicRules = aaa
item.componentProps=bbb
}
})
const emit = defineEmits(['close']); const emit = defineEmits(['close']);
async function init(data) { async function init(data) {
payNum.value = 1 payNum.value = 1
tempSchemas = cloneDeep(contractformSchemas) as Array<FormSchema> tempSchemas = cloneDeep(contractformSchemas) as Array<FormSchema>
tempSchemas.forEach(item => {
if (item.field.indexOf("Money") != -1) {
item.dynamicRules = aaa
item.componentProps=bbb
}
})
console.log("datadatadata", data, tempSchemas) console.log("datadatadata", data, tempSchemas)
projectid.value = data.projectid projectid.value = data.projectid
let parammoney: any = { let parammoney: any = {
@ -89,12 +203,16 @@ async function init(data) {
}) })
} }
} }
if (num > 1) { if (num > 1) {
payNum.value = num payNum.value = num
for (let i = 2; i <= num; i++) { for (let i = 2; i <= num; i++) {
contractformSchemas.forEach(item => { contractformSchemas.forEach(item => {
let tempitem = cloneDeep(item) let tempitem = cloneDeep(item)
if (tempitem.field.indexOf("Money") != -1) {
tempitem.dynamicRules = aaa
item.componentProps=bbb
}
if (tempitem.field == "payDate") { if (tempitem.field == "payDate") {
tempitem.label = "第" + i + "次支付" tempitem.label = "第" + i + "次支付"
} }
@ -106,6 +224,8 @@ async function init(data) {
}) })
} }
resetSchema(tempSchemas) resetSchema(tempSchemas)
} else {
resetSchema(tempSchemas)
} }
console.log("结果是", res, obj) console.log("结果是", res, obj)
obj["id"] = data.projectid obj["id"] = data.projectid
@ -164,6 +284,11 @@ async function addFrom() {
payNum.value += 1 payNum.value += 1
contractformSchemas.forEach(item => { contractformSchemas.forEach(item => {
let tempitem = cloneDeep(item) let tempitem = cloneDeep(item)
if (tempitem.field.indexOf("Money") != -1) {
tempitem.dynamicRules = aaa
item.componentProps=bbb
}
if (tempitem.field == "payDate") { if (tempitem.field == "payDate") {
tempitem.label = "第" + payNum.value + "次支付" tempitem.label = "第" + payNum.value + "次支付"
} }
@ -247,7 +372,7 @@ async function submitImportForm() {
// 使form // 使form
if (isModify.value != null) { if (isModify.value != null) {
if (fileList.length > 0) { if (fileList.length > 0) {
params["file"] = fileList[0].file params.append("file", fileList[0].file)
} }
// //
params.append("contractinfoList", JSON.stringify(res)) params.append("contractinfoList", JSON.stringify(res))
@ -271,7 +396,6 @@ function dialogVisible() {
} }
function checkForm() { // function checkForm() { //
let centralMoney = resMoney.value.centralMoney
let data = getFieldsValue() let data = getFieldsValue()
let totalCentralMoney = 0 let totalCentralMoney = 0
let totalCountyMoney = 0 let totalCountyMoney = 0
@ -287,51 +411,51 @@ function checkForm() { //校验表单
Object.keys(data).forEach(key => { Object.keys(data).forEach(key => {
if (key.indexOf("taskName") != -1 && data[key].indexOf("首付") != -1) { if (key.indexOf("taskName") != -1 && data[key].indexOf("首付") != -1) {
showshoufu = true showshoufu = true
if (key == "taskName") { // if (key == "taskName") {
if (Number(data["centralMoney"]) / Number(centralMoney) > 0.3) { // if (Number(data["centralMoney"]) / Number(centralMoney) > 0.3) {
ElMessage.error("首付的中央资金不能超过总中央资金的30%") // ElMessage.error("30%")
returnRes = false // returnRes = false
return // return
} // }
} else { // } else {
// // //
let num = key.replace("taskName", "") // let num = key.replace("taskName", "")
let total = Number(data["centralMoney"]) // let total = Number(data["centralMoney"])
for (let i = 2; i <= Number(num); i++) { // for (let i = 2; i <= Number(num); i++) {
total += Number(data[`centralMoney${i}`]) // total += Number(data[`centralMoney${i}`])
} // }
if (total / Number(centralMoney) > 0.3) { // if (total / Number(centralMoney) > 0.3) {
ElMessage.error("首付的中央资金不能超过总中央资金的30%") // ElMessage.error("30%")
returnRes = false // returnRes = false
return // return
} // }
} // }
} }
if (key.indexOf("taskName") != -1 && data[key].indexOf("初验") != -1) { if (key.indexOf("taskName") != -1 && data[key].indexOf("初验") != -1) {
showchuyan = true showchuyan = true
if (key == "taskName") { // if (key == "taskName") {
if (Number(data["centralMoney"]) / Number(centralMoney) > 0.6) { // if (Number(data["centralMoney"]) / Number(centralMoney) > 0.6) {
ElMessage.error("初验的中央资金不能超过总中央资金的60%") // ElMessage.error("60%")
returnRes = false // returnRes = false
return // return
} // }
} else { // } else {
// // //
let num = key.replace("taskName", "") // let num = key.replace("taskName", "")
let total = Number(data["centralMoney"]) // let total = Number(data["centralMoney"])
for (let i = 2; i <= Number(num); i++) { // for (let i = 2; i <= Number(num); i++) {
total += Number(data[`centralMoney${i}`]) // total += Number(data[`centralMoney${i}`])
} // }
if (total / Number(centralMoney) > 0.6) { // if (total / Number(centralMoney) > 0.6) {
ElMessage.error("初验的中央资金不能超过总中央资金的60%") // ElMessage.error("60%")
returnRes = false // returnRes = false
return // return
} // }
} // }
} }
if (key.indexOf("taskName") != -1 && data[key].indexOf("终验") != -1) { if (key.indexOf("taskName") != -1 && data[key].indexOf("终验") != -1) {
showzhongyan = true showzhongyan = true
@ -356,7 +480,7 @@ function checkForm() { //校验表单
totalMoney += Number(data[key]) totalMoney += Number(data[key])
} }
}) })
if(!returnRes){ if (!returnRes) {
return false return false
} }
if (totalCentralMoney != Number(resMoney.value.centralMoney)) { if (totalCentralMoney != Number(resMoney.value.centralMoney)) {
@ -401,4 +525,12 @@ function checkForm() { //校验表单
</script> </script>
<style scoped></style> <style scoped>
.suffix{
font-size: 12px;
color: #999;
margin-left: 5px;
}
</style>

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

@ -21,7 +21,7 @@
<template #tableTitle> <template #tableTitle>
<el-button type="primary" @click="handleCreate" v-if="isShowByRoles('manageOrg,supervisor')"> 新增入库项目</el-button> <el-button type="primary" @click="handleCreate" v-if="isShowByRoles('projectContact')"> 新增入库项目</el-button>
<el-button type="primary" @click="handleBatchImport" v-if="isShowByRoles('manageOrg,supervisor')"> <el-button type="primary" @click="handleBatchImport" v-if="isShowByRoles('manageOrg,supervisor')">
批量导入入库项目</el-button> 批量导入入库项目</el-button>
<el-button type="primary" @click="handleBatchdownload"> 导出项目</el-button> <el-button type="primary" @click="handleBatchdownload"> 导出项目</el-button>
@ -31,6 +31,7 @@
变更项目信息</el-button> 变更项目信息</el-button>
<el-button type="primary" @click="handleAddSubProject()" v-if="isShowByRoles('projectContact')"> <el-button type="primary" @click="handleAddSubProject()" v-if="isShowByRoles('projectContact')">
新增子项目</el-button> 新增子项目</el-button>
<el-button color="#626aef" :dark="true" @click="openModfiyInfoPage()">项目修改记录</el-button>
</template> </template>
</BasicTable> </BasicTable>
@ -78,10 +79,12 @@ import batchImportProjects from './batchImportProjects.vue'
import modifyfieldInfo from './modifyfieldInfo.vue' import modifyfieldInfo from './modifyfieldInfo.vue'
import addOrModifySubProject from './SubProject/addOrModifySubProject.vue' import addOrModifySubProject from './SubProject/addOrModifySubProject.vue'
import addModifyWorkreport from '../workReport/addModifyWorkreport.vue' import addModifyWorkreport from '../workReport/addModifyWorkreport.vue'
import { projectInfoPageList, batchdownloadProject, isShowByRoles, uploacFilePageList } from './projectInfo.api'; import { getProjectInfoAndChildPageList, batchdownloadProject, isShowByRoles, uploacFilePageList } from './projectInfo.api';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { InfoCircleOutlined } from '@ant-design/icons-vue'; import { InfoCircleOutlined } from '@ant-design/icons-vue';
import { useRouter } from 'vue-router'; // useRouter
const router = useRouter();
const userStore = useUserStore(); const userStore = useUserStore();
let proid = ref(); let proid = ref();
let ProjectStage = ref() let ProjectStage = ref()
@ -100,7 +103,7 @@ console.log("isShowByRoles", isShowByRoles('manage,sys:admin'))
const [registerTable, { reload, getForm, getSelectRows, clearSelectedRowKeys }] = useTable({ const [registerTable, { reload, getForm, getSelectRows, clearSelectedRowKeys }] = useTable({
title: '项目信息', title: '项目信息',
api: projectInfoPageList, api: getProjectInfoAndChildPageList,
useSearchForm: true, useSearchForm: true,
columns: columns, columns: columns,
rowKey: "id", rowKey: "id",
@ -111,9 +114,11 @@ const [registerTable, { reload, getForm, getSelectRows, clearSelectedRowKeys }]
dataIndex: 'action', dataIndex: 'action',
slots: { customRender: 'action' }, slots: { customRender: 'action' },
}, },
beforeFetch() { beforeFetch(param) {
clearSelectedRowKeys() clearSelectedRowKeys()
param.stage = "1"
}, },
rowSelection: { type: 'radio' }, rowSelection: { type: 'radio' },
// //
formConfig: { formConfig: {
@ -123,11 +128,7 @@ const [registerTable, { reload, getForm, getSelectRows, clearSelectedRowKeys }]
function getTableAction(record): ActionItem[] { function getTableAction(record): ActionItem[] {
//, //,
uploacFilePageList({ stage: "1", projectid: record.id }).then(data => {
if (data.total > 0) {
record.showUploadfileDetail = true
}
})
return [ return [
{ {
label: '详情', label: '详情',
@ -140,7 +141,7 @@ function getTableAction(record): ActionItem[] {
{ {
label: '上传项目资料', label: '上传项目资料',
ifShow: () => { ifShow: () => {
return record.stage >= 2 && record.showUploadfileDetail == undefined && isShowByRoles("controler,consult") && record.projectId == null return record.stage >= 2 && isShowByRoles("controler,consult") && record.projectId == null
}, },
onClick: handleuploadFile.bind(null, record) onClick: handleuploadFile.bind(null, record)
}, },
@ -156,11 +157,16 @@ function getDropDownAction(record): ActionItem[] {
]; ];
} }
function handleDetailpage(record) { async function handleDetailpage(record) {
ProjectStage.value = record.stage ProjectStage.value = record.stage
proid.value = record.id proid.value = record.id
IsModify.value = record.ismodify IsModify.value = record.ismodify
showUploadfileDetail.value = record.showUploadfileDetail == true ? true : false let data = await uploacFilePageList({ stage: "1", projectid: record.id })
if (data.total > 0) {
showUploadfileDetail.value = true
}else{
showUploadfileDetail.value = false
}
isSubProject.value = record.projectId isSubProject.value = record.projectId
openModalProjectr() openModalProjectr()
@ -252,6 +258,9 @@ function handleAddSubProject() {
openModelSubProject() openModelSubProject()
} }
function openModfiyInfoPage(){
router.push({ path: '/projectLib/projectInfoHistory/index' })
}
</script> </script>
<style scoped></style> <style scoped></style>

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

@ -8,7 +8,8 @@ export enum Api {
queryProcessInfo = '/workflow/getprocessInfo', queryProcessInfo = '/workflow/getprocessInfo',
queryProjectInfoById = '/huzhouProject/queryProjectInfoById', queryProjectInfoById = '/huzhouProject/queryProjectInfoById',
queryProjectInfoNewDataById="/huzhouProject/queryProjectInfoNewDataById", queryProjectInfoNewDataById="/huzhouProject/queryProjectInfoNewDataById",
projectInfoPageList="/huzhouProject/projectInfoPageList", getProjectInfoAndChildPageList="/huzhouProject/getProjectInfoAndChildPageList",
getProjectInfoPageList="/huzhouProject/getProjectInfoPageList",
submitUploadFile = '/huzhouUploadfileinfo/submitUploadFile', submitUploadFile = '/huzhouUploadfileinfo/submitUploadFile',
uploacFilePageList = '/huzhouUploadfileinfo/uploacFilePageList', uploacFilePageList = '/huzhouUploadfileinfo/uploacFilePageList',
batchImportProjects="/huzhouProject/batchImportProjects", batchImportProjects="/huzhouProject/batchImportProjects",
@ -38,7 +39,9 @@ export const getRemainingMoneyinfo = (params?) => defHttp.get({ url: Api.getRema
/** /**
* *
*/ */
export const projectInfoPageList = (params?) => defHttp.get({ url: Api.projectInfoPageList, params }); export const getProjectInfoAndChildPageList = (params?) => defHttp.get({ url: Api.getProjectInfoAndChildPageList, params });
export const getProjectInfoPageList = (params?) => defHttp.get({ url: Api.getProjectInfoPageList, params });
/** /**
* list * list
*/ */

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

@ -6,6 +6,9 @@
<!-- <TableAction :actions="getTableAction(record)" /> --> <!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" /> <TableAction :actions="getTableAction(record)" />
</template> </template>
<template #tableTitle>
<el-button color="#626aef" :dark="true" @click="openModfiyInfoPage()">项目计划修改记录</el-button>
</template>
</BasicTable> </BasicTable>
<BasicModal @register="registeViewPlanDetail" title="项目计划详情" width="1200px" :showOkBtn="false"> <BasicModal @register="registeViewPlanDetail" title="项目计划详情" width="1200px" :showOkBtn="false">
@ -33,8 +36,8 @@ import { columns, searchFormSchema } from '@/views/projectLib/projectInfo/projec
import { projectApprovedPageList } from '@/views/projectLib/projectPlan/projectPlan.api'; import { projectApprovedPageList } from '@/views/projectLib/projectPlan/projectPlan.api';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { useRouter } from 'vue-router'; // useRouter
const userStore = useUserStore(); const router = useRouter();
let projectId = ref(); let projectId = ref();
let type = ref(); let type = ref();
let projectStage = ref(); let projectStage = ref();
@ -105,7 +108,10 @@ function closeProjectPlanModal() {
closeProjectPlan() closeProjectPlan()
reload() reload()
} }
function openModfiyInfoPage() {
router.push({ path: '/projectLib/planinfoHistory/index' })
}
</script> </script>
<style scoped> <style scoped>

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

@ -7,7 +7,7 @@
<el-divider content-position="left">项目计划审批文件列表</el-divider> <el-divider content-position="left">项目计划审批文件列表</el-divider>
<PlanFileDetail :planinfoid="planinfoid" :stage="2" /> <PlanFileDetail :planinfoid="planinfoid" :stage="2" />
<div v-if="dataTo.isfinish == 1"> <div v-if="dataTo.isfinish == 1">
<ApprovalDetails :projectid="planinfoid" stage="createPlaninfoFile" /> <ApprovalDetails :projectid="planinfoid" :stage="name.indexOf(taskName)!=-1?'createPlaninfoFile2':'createPlaninfoFile'" />
</div> </div>
</div> </div>
</BasicModal> </BasicModal>
@ -20,7 +20,7 @@ import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDeta
import PlanFileDetail from "@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue"; import PlanFileDetail from "@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue";
const [registerModal, { closeModal }] = useModalInner(); const [registerModal, { closeModal }] = useModalInner();
let name = ["可研报告初稿编制","初步技术审查","造价评估","可行性研究报告审批","初步设计初稿编制","初步设计技术审查","初步设计审批"]
let dataTo = defineProps(["planinfoid", "taskName", "isfinish"]) let dataTo = defineProps(["planinfoid", "taskName", "isfinish"])
console.log("wwwwwwwwwwww", dataTo) console.log("wwwwwwwwwwww", dataTo)
onMounted(async () => { onMounted(async () => {

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

@ -1,4 +1,5 @@
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
import { downloadFile } from "@/api/common/api"
export enum Api { export enum Api {
saveprojectInfo = "", saveprojectInfo = "",
@ -17,7 +18,7 @@ export enum Api {
planFilePageList="/huzhouPlaninfofile/planFilePageList", planFilePageList="/huzhouPlaninfofile/planFilePageList",
getplaninfoByid="/huzhouPlan/qetplaninfoByid", getplaninfoByid="/huzhouPlan/qetplaninfoByid",
getPlanFileApprovalInfoByPlaninfoId="/huzhouPlaninfofile/getPlanFileApprovalInfoByPlaninfoId", getPlanFileApprovalInfoByPlaninfoId="/huzhouPlaninfofile/getPlanFileApprovalInfoByPlaninfoId",
downloadPlanInfo="/huzhouPlan/downloadPlanInfo",
} }
/** /**
* *
@ -26,6 +27,7 @@ export const projectApprovedPageList = (params) => defHttp.get({ url: Api.projec
export const queryPlanModuleDetailPage = (params) => defHttp.get({ url: Api.queryPlanModuleDetailPage, params }) export const queryPlanModuleDetailPage = (params) => defHttp.get({ url: Api.queryPlanModuleDetailPage, params })
export const queryPlanModuleone = (params) => defHttp.get({ url: Api.queryPlanModuleone, params }) export const queryPlanModuleone = (params) => defHttp.get({ url: Api.queryPlanModuleone, params })
export const getPlanFileApprovalInfoByPlaninfoId = (params) => defHttp.get({ url: Api.getPlanFileApprovalInfoByPlaninfoId, params }) export const getPlanFileApprovalInfoByPlaninfoId = (params) => defHttp.get({ url: Api.getPlanFileApprovalInfoByPlaninfoId, params })
export const downloadPlanInfo = (params) => downloadFile(Api.downloadPlanInfo,"项目计划数据.xlsx",params)
export const saveProjectPlan = (params) => defHttp.post({ url: Api.saveProjectPlan, params }) export const saveProjectPlan = (params) => defHttp.post({ url: Api.saveProjectPlan, params })

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

@ -3,11 +3,32 @@
<el-divider content-position="left">项目计划进程</el-divider> <el-divider content-position="left">项目计划进程</el-divider>
<!-- <BasicTable @register="registerPlanDetail" /> --> <!-- <BasicTable @register="registerPlanDetail" /> -->
<div> <div>
<!-- <el-row>
<el-col :span="24">
时间进度
</el-col>
<el-col :span="24">
<Progress :percent="50" class="componentB" status="exception" :size="20" style="width: 80%;">
</Progress>
<Progress :percent="100" class="componentA" status="success" :size="20" style="width: 80%;">
</Progress>
<ClockCircleFilled class="custom-content" :style="{ left: '88%', fontSize: '40px', color: 'red' }" />
<span class="italicize" :style="{ left: '88%' }">计划一</span>
<ClockCircleFilled class="custom-content" :style="{ left: '48%', fontSize: '40px', color: 'red' }" />
<span class="italicize" :style="{ left: '48%' }">计划一</span>
</el-col>
</el-row> -->
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
总进度<Progress :size="15" :percent="activities[0]?.totalPercent"></Progress> 项目进度<Progress :size="15" :percent="activities[0]?.totalPercent"></Progress>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -41,6 +62,9 @@
<!-- <TableAction :actions="getTableAction(record)" /> --> <!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction :actions="getTableAction(record)" /> <TableAction :actions="getTableAction(record)" />
</template> </template>
<template #tableTitle >
<el-button type="primary" @click="handledownload" v-if="isShowByRoles('manageOrg,supervisor')">下载</el-button>
</template>
</BasicTable> </BasicTable>
<div v-if="dataTo.projectStage == 4"> <div v-if="dataTo.projectStage == 4">
<ApprovalDetails :projectid="projectId" stage="createPlaninfo" /> <ApprovalDetails :projectid="projectId" stage="createPlaninfo" />
@ -49,8 +73,9 @@
<addPlanFile :type="type" :planinfoid="planinfoid" :files="fileArr" @close="closePlanFileModal()" /> <addPlanFile :type="type" :planinfoid="planinfoid" :files="fileArr" @close="closePlanFileModal()" />
</BasicModal> </BasicModal>
<planinfoFileDetail @register="registerFileInfo" :planinfoid="planinfoid" :taskName="taskName" :isfinish="isfinish" /> <planinfoFileDetail @register="registerFileInfo" :planinfoid="planinfoid" :taskName="taskName" :isfinish="isfinish" />
<BasicModal @register="registerplanFileApproval" title="文件审批" width="1200px" :showOkBtn="false" :showCancelBtn="false"> <BasicModal @register="registerplanFileApproval" title="文件审批" width="1200px" :showOkBtn="false"
<planFileApproval :record="recordData" @close="closeplanFile" /> :showCancelBtn="false">
<planFileApproval :record="recordData" @close="closeplanFile" />
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" name="viewPlanDetail" setup> <script lang="ts" name="viewPlanDetail" setup>
@ -61,14 +86,13 @@ import planinfoFileDetail from './planinfoFileDetail.vue'
import { Progress } from 'ant-design-vue'; import { Progress } from 'ant-design-vue';
import { BasicModal } from '@/components/Modal'; import { BasicModal } from '@/components/Modal';
import { PlaninfoColumn } from './projectPlan.data'; import { PlaninfoColumn } from './projectPlan.data';
import { queryPlanInfoMainTimeline,getPlanFileApprovalInfoByPlaninfoId } from './projectPlan.api' import { queryPlanInfoMainTimeline, getPlanFileApprovalInfoByPlaninfoId,planUploadFile,downloadPlanInfo } from './projectPlan.api'
import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table'; import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue" import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue"
import planFileApproval from '@/views/ProcessApprovalSubPage/planFileApproval.vue' import planFileApproval from '@/views/ProcessApprovalSubPage/planFileApproval.vue'
import { isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api'; import { isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api';
import { message } from 'ant-design-vue'; //
let dataTo = defineProps(["projectId", "projectStage"]) let dataTo = defineProps(["projectId", "projectStage"])
let projectId = ref(dataTo.projectId) let projectId = ref(dataTo.projectId)
let isfinish = ref() let isfinish = ref()
@ -124,7 +148,7 @@ function getTableAction(record): ActionItem[] {
{ {
label: '详情', label: '详情',
ifShow: () => { ifShow: () => {
if (record.isfinish >=1 && record.taskFile?.length > 0) { if (record.isfinish >= 1) {
return true return true
} }
return false return false
@ -145,14 +169,21 @@ function getTableAction(record): ActionItem[] {
onClick: handleuploadfile.bind(null, record) onClick: handleuploadfile.bind(null, record)
}, },
{ {
label: '修改资料', label: '完成',
ifShow: () => { ifShow: () => {
if (record.isEdit == 1 && record.taskFile?.length>0) {// if (record.isfinish == 0 && record.children == null && record.taskFile?.length == 0) {//
return true if (isShowByRoles('projectContact')) {
return true
}
return false
} }
return false return false
}, },
onClick: handleModifyuploadfile.bind(null, record) // onClick: handleModifyuploadfile.bind(null, record)
popConfirm: {
title: '确定完成该阶段吗?',
confirm: handlefinish.bind(null, record),
},
}, },
]; ];
} }
@ -170,11 +201,19 @@ function handleuploadfile(record) {
planinfoid.value = record.id planinfoid.value = record.id
openPlanFile() openPlanFile()
} }
async function handlefinish(record) {
let params = {
planinfoid: record.id,
}
await planUploadFile(params)
reload()
}
async function handleModifyuploadfile(record) { async function handleModifyuploadfile(record) {
//record.id //record.id
let res =await getPlanFileApprovalInfoByPlaninfoId({planinfoid: record.id}) let res = await getPlanFileApprovalInfoByPlaninfoId({ planinfoid: record.id })
if(res.isEdit==1){ if (res.isEdit == 1) {
recordData.value=res recordData.value = res
openplanFileApproval() openplanFileApproval()
} }
record.id record.id
@ -193,6 +232,10 @@ function closePlanFileModal() {
console.log("activities", activities) console.log("activities", activities)
}) })
} }
async function handledownload() {
//
await downloadPlanInfo({ projectid: dataTo.projectId});
}
</script> </script>
<style scoped> <style scoped>
.timeline { .timeline {
@ -232,4 +275,39 @@ function closePlanFileModal() {
margin-top: 25px; margin-top: 25px;
} }
.componentA {
position: absolute;
z-index: 1;
/* 设置较低的z-index值 */
/* 其他样式 */
}
.componentB {
position: absolute;
z-index: 2;
/* 设置较高的z-index值 */
/* 其他样式 */
}
.custom-content {
position: absolute;
top: 0;
transform: translateX(-50%);
transition: left 0.3s;
z-index: 3;
margin-top: 20px;
}
.italicize {
/* transform: skew(15deg); 使用 transform 属性进行倾斜 */
transform: rotate(-45deg);
display: inline-block;
/* 需要将元素设为块级元素才能应用transform属性 */
z-index: 4;
margin-top: -20px;
color: #ea1212;
font-size: large;
}
</style> </style>

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

@ -12,7 +12,7 @@
</template> </template>
</BasicTable> </BasicTable>
<addModifyWorkreport @register="registeraddworkreport" @close="closeModel" /> <addModifyWorkreport @register="registeraddworkreport" @close="closeModel" />
<ProjectinfoComponent @register="registerProjectinfo" :title="'新增项目周报'" @openChildModal="openModalProjectr"> <ProjectinfoComponent @register="registerProjectinfo" @openChildModal="openModalProjectr">
<template #default="record"> <template #default="record">
<addModifyWorkreport @register="registeraddworkreport" @close="closeModel" /> <addModifyWorkreport @register="registeraddworkreport" @close="closeModel" />
</template> </template>
@ -116,11 +116,11 @@ function closeModel() {
reload() reload()
} }
function handleAddWorkreport() { function handleAddWorkreport() {
openModalProjectinfo() openModalProjectinfo(true,{title:"新增项目周报"})
} }
function openModalProjectr(value) { function openModalProjectr(value) {
openModal(true,{projectid:value}) openModal(true,{projectid:value.id})
} }
</script> </script>

4
src/views/projectLib/workReport/workReportProjectinfoComponent(弃用).vue

@ -25,7 +25,7 @@ import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Tabl
import modifycontacts from './modifycontacts.vue' import modifycontacts from './modifycontacts.vue'
import { BasicModal, useModal,useModalInner } from '@/components/Modal'; import { BasicModal, useModal,useModalInner } from '@/components/Modal';
import { columns, searchFormSchema } from '@/views/projectLib/projectInfo/projectInfo.data'; import { columns, searchFormSchema } from '@/views/projectLib/projectInfo/projectInfo.data';
import { projectInfoPageList, isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api'; import { getProjectInfoAndChildPageList, isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
import addModifyWorkreport from "@/views/projectLib/workReport/addModifyWorkreport.vue" import addModifyWorkreport from "@/views/projectLib/workReport/addModifyWorkreport.vue"
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
@ -38,7 +38,7 @@ console.log("isShowByRoles", isShowByRoles('manage,sys:admin'))
const [registerTable, { reload, clearSelectedRowKeys }] = useTable({ const [registerTable, { reload, clearSelectedRowKeys }] = useTable({
title: '项目信息', title: '项目信息',
api: projectInfoPageList, api: getProjectInfoAndChildPageList,
useSearchForm: true, useSearchForm: true,
columns: columns, columns: columns,
actionColumn: { actionColumn: {

Loading…
Cancel
Save