This commit is contained in:
lilinyuan
2024-05-24 14:24:39 +08:00
3 changed files with 52 additions and 20 deletions

View File

@@ -3,14 +3,14 @@
<baseTitle title="需求征集信息录入"></baseTitle> <baseTitle title="需求征集信息录入"></baseTitle>
<el-form :model="formData" inline class="query-form" ref="demandForm" :rules="rules"> <el-form :model="formData" inline class="query-form" ref="demandForm" :rules="rules">
<div class="left-info"> <div class="left-info">
<el-form-item label="名称" prop="requirementName"> <el-form-item v-if="checkFormPrem('requirementName')" label="名称" prop="requirementName">
<el-input v-model="formData.requirementName" placeholder="请输入名称" clearable></el-input> <el-input v-model="formData.requirementName" placeholder="请输入名称" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="所属公司" prop="companyIds"> <el-form-item v-if="checkFormPrem('companyIds')" label="所属公司" prop="companyIds">
<el-tree-select v-model="formData.companyIds" :data="companyOption" style="width: 100%;" <el-tree-select v-model="formData.companyIds" :data="companyOption" style="width: 100%;"
filterable clearable :check-strictly="true" multiple/> filterable clearable :check-strictly="true" multiple/>
</el-form-item> </el-form-item>
<el-form-item label="征集类型" prop="collectType"> <el-form-item v-if="checkFormPrem('collectType')" label="征集类型" prop="collectType">
<el-select v-model="formData.collectType" placeholder="征集类型" clearable filterable> <el-select v-model="formData.collectType" placeholder="征集类型" clearable filterable>
<el-option <el-option
v-for="item in typeOption" v-for="item in typeOption"
@@ -20,7 +20,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="截止时间" prop="deadline"> <el-form-item v-if="checkFormPrem('deadline')" label="截止时间" prop="deadline">
<el-config-provider> <el-config-provider>
<el-date-picker <el-date-picker
v-model="formData.deadline" v-model="formData.deadline"
@@ -33,11 +33,12 @@
</div> </div>
</el-form> </el-form>
<baseTitle title="征集说明"></baseTitle> <baseTitle title="征集说明"></baseTitle>
<Tinymce image-url="/notice/file" file-url="/notice/file" v-model:value="formData.collectExplain" height="300" <Tinymce v-if="checkFormPrem('collectExplain') && showTinymce" image-url="/notice/file" file-url="/notice/file"
v-if="showTinymce"/> v-model:value="formData.collectExplain" height="300" />
<baseTitle title="申请文件"></baseTitle> <baseTitle title="申请文件"></baseTitle>
<file-upload @getFile="getFile"/> <file-upload v-if="checkFormPrem('fileList')" @getFile="getFile"/>
<fvTable style="width: 100%;max-height: 200px" v-if="showTable" :tableConfig="tableConfig" :data="formData.fileList" <fvTable style="width: 100%;max-height: 200px" v-if="showTable"
:tableConfig="tableConfig" :data="formData.fileList"
:isSettingCol="false" :pagination="false"> :isSettingCol="false" :pagination="false">
<template #empty> <template #empty>
<el-empty :image-size="90" description="暂无数据" style="padding: 0"/> <el-empty :image-size="90" description="暂无数据" style="padding: 0"/>
@@ -105,6 +106,7 @@ const loading = ref(false)
const showTable = ref(true) const showTable = ref(true)
const processStore = useProcessStore() const processStore = useProcessStore()
const processInstanceData = ref() const processInstanceData = ref()
const formPermMap = ref(new Map());
const rules = reactive({ const rules = reactive({
requirementName: [{required: true, message: '请输入名称', trigger: 'blur'}], requirementName: [{required: true, message: '请输入名称', trigger: 'blur'}],
companyIds: [{required: true, message: '请选择所属公司', trigger: 'blur'}], companyIds: [{required: true, message: '请选择所属公司', trigger: 'blur'}],
@@ -154,6 +156,16 @@ const tableConfig = reactive({
] ]
}) })
const checkFormPrem = (formKey) => {
if (formPermMap.value.hasOwnProperty(formKey)) {
let formItem = formPermMap.value[formKey];
return formItem.perm === 'EDIT'
} else {
return true;
}
}
const handleDownload = (row) => { const handleDownload = (row) => {
downloadFile(row.fileId).then(res => { downloadFile(row.fileId).then(res => {
const blob = new Blob([res]) const blob = new Blob([res])
@@ -207,6 +219,9 @@ const init = async () => {
processStore.noTakeList.value = data.noTakeList; processStore.noTakeList.value = data.noTakeList;
processStore.refuseList.value = data.refuseList; processStore.refuseList.value = data.refuseList;
processStore.passList.value = data.passList; processStore.passList.value = data.passList;
formPermMap.value = data.formPermMap
// const entriesArray = Object.entries(data.formPermMap);// 使用Map构造函数将键值对数组转换为Map对象
// formPermMap.value = new Map(entriesArray);
nextTick(() => { nextTick(() => {
processDiagramViewer.value = true processDiagramViewer.value = true
}) })

View File

@@ -3,28 +3,28 @@
<el-form :model="formData" ref="demandForm" label-width="auto" :rules="rules"> <el-form :model="formData" ref="demandForm" label-width="auto" :rules="rules">
<baseTitle title="需求征集详情"></baseTitle> <baseTitle title="需求征集详情"></baseTitle>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12" v-if="checkFormPrem('requirementName')">
<el-form-item label="名称"> <el-form-item label="名称">
<span>{{ formData.requirementName }}</span> <span>{{ formData.requirementName }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="checkFormPrem('companyIds')">
<el-form-item label="所属公司"> <el-form-item label="所属公司">
<span>{{ formData.companyIds }}</span> <span>{{ formData.companyIds }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="checkFormPrem('collectType')">
<el-form-item label="征集类型"> <el-form-item label="征集类型">
<span>{{ formData.collectType }}</span> <span>{{ formData.collectType }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="checkFormPrem('deadline')">
<el-form-item label="截止时间"> <el-form-item label="截止时间">
<span>{{ formData.deadline }}</span> <span>{{ formData.deadline }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<baseTitle title="征集说明"></baseTitle> <baseTitle title="征集说明"></baseTitle>
<el-col :span="24"> <el-col :span="24" v-if="checkFormPrem('collectExplain')">
<el-form-item> <el-form-item>
<el-card style="width: 100%"> <el-card style="width: 100%">
<div v-html="formData.collectExplain"> <div v-html="formData.collectExplain">
@@ -33,7 +33,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<baseTitle title="附件列表"></baseTitle> <baseTitle title="附件列表"></baseTitle>
<el-col :span="24"> <el-col :span="24" v-if="checkFormPrem('collectExplain')">
<el-form-item> <el-form-item>
<fvTable style="width: 100%;max-height: 200px" v-if="showTable" :tableConfig="tableConfig" <fvTable style="width: 100%;max-height: 200px" v-if="showTable" :tableConfig="tableConfig"
:data="formData.fileList" :isSettingCol="false" :pagination="false"> :data="formData.fileList" :isSettingCol="false" :pagination="false">
@@ -77,7 +77,7 @@
import OperationRender from '@/views/workflow/common/OperationRender.vue' import OperationRender from '@/views/workflow/common/OperationRender.vue'
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue' import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue'
import {useProcessStore} from '@/stores/processStore.js'; import {useProcessStore} from '@/stores/processStore.js';
import {getInfo, agreeTask, rejectTask,downloadFile} from "@/api/project-demand/index.js"; import {getInfo, agreeTask, rejectTask, downloadFile} from "@/api/project-demand/index.js";
import {getSubCompOpt} from '@/api/user/user.js' import {getSubCompOpt} from '@/api/user/user.js'
import {ElMessage} from "element-plus"; import {ElMessage} from "element-plus";
import {useTagsView} from '@/stores/tagsview.js' import {useTagsView} from '@/stores/tagsview.js'
@@ -91,6 +91,7 @@ const loading = ref(false)
const demandForm = ref() const demandForm = ref()
const processStore = useProcessStore() const processStore = useProcessStore()
const companyOption = ref([]) const companyOption = ref([])
const formPermMap = ref(new Map());
const processInstanceData = ref({}) const processInstanceData = ref({})
const showTable = ref(false) const showTable = ref(false)
const processDiagramViewer = ref(false) const processDiagramViewer = ref(false)
@@ -137,6 +138,22 @@ const tableConfig = reactive({
} }
] ]
}) })
const checkFormPrem = (formKey) => {
if (formPermMap.value.hasOwnProperty(formKey)) {
let formItem = formPermMap.value[formKey];
return formItem.perm === 'READ'
} else {
return true;
}
}
const fromPrem = (formKey) => {
let formItem = formPermMap.value[formKey];
return formItem.perm
}
const handleSubmit = () => { const handleSubmit = () => {
let approve = { let approve = {
taskId: processInstanceData.value.taskId, taskId: processInstanceData.value.taskId,
@@ -184,7 +201,7 @@ const getCompanyOption = async () => {
const getDataSourceOptionItem = (val) => { const getDataSourceOptionItem = (val) => {
if (val !== undefined) { if (val !== undefined) {
val.forEach(item => { val.forEach(item => {
matterTree(companyNameArray.value,companyOption.value, item) matterTree(companyNameArray.value, companyOption.value, item)
}) })
} }
return companyNameArray.value.join(''); return companyNameArray.value.join('');
@@ -194,7 +211,7 @@ const handleDownload = (row) => {
downloadFile(row.fileId).then(res => { downloadFile(row.fileId).then(res => {
const blob = new Blob([res]) const blob = new Blob([res])
let a = document.createElement('a') let a = document.createElement('a')
a.href=URL.createObjectURL(blob) a.href = URL.createObjectURL(blob)
a.download = row.originalFileName a.download = row.originalFileName
a.click() a.click()
}) })
@@ -203,7 +220,7 @@ const init = async () => {
if (!route.query.id) return; if (!route.query.id) return;
await getCompanyOption() await getCompanyOption()
getInfo(route.query.id).then(res => { getInfo(route.query.id).then(res => {
loading.value=false loading.value = false
let data = res.data let data = res.data
formData.value = data.formData; formData.value = data.formData;
data.formData.companyIds = getDataSourceOptionItem(data.formData.companyIds) data.formData.companyIds = getDataSourceOptionItem(data.formData.companyIds)
@@ -221,7 +238,7 @@ const init = async () => {
}) })
} }
onMounted(async () => { onMounted(async () => {
loading.value=true loading.value = true
await init() await init()
}) })
</script> </script>

View File

@@ -100,7 +100,7 @@ const tableConfig = reactive({
btn.push({label: '详情', prem: ['mosr:requirement:info'], func: () => handleDetail(row), type: 'primary'}) btn.push({label: '详情', prem: ['mosr:requirement:info'], func: () => handleDetail(row), type: 'primary'})
} }
if (buttons.has("edit")) { if (buttons.has("edit")) {
btn.push({label: '编辑',prem: ['mosr:requirement:resubmit'], func: () => handleEdit(row), type: 'primary'}) btn.push({label: '编辑', prem: ['mosr:requirement:resubmit'], func: () => handleEdit(row), type: 'primary'})
} }
// if (buttons.has("delete")) { // if (buttons.has("delete")) {
// btn.push({label: '删除',prem: ['mosr:requirement:del'], func: () => handleDelete(row), type: 'primary'}) // btn.push({label: '删除',prem: ['mosr:requirement:del'], func: () => handleDelete(row), type: 'primary'})