Merge pull request 'dd' (#606) from dd into master
Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/606
This commit is contained in:
@@ -5,6 +5,7 @@ export function getUserTree(type,chooseId){
|
|||||||
return request({
|
return request({
|
||||||
url:`/admin/user/choose/${type}/${chooseId}`,
|
url:`/admin/user/choose/${type}/${chooseId}`,
|
||||||
method:'get'
|
method:'get'
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,3 +38,10 @@ export function getOrganizationStructure(params) {
|
|||||||
params:params
|
params:params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export function getOrganizationStructureTree(params) {
|
||||||
|
return request({
|
||||||
|
url: '/admin/organizational/structure/tree',
|
||||||
|
method: 'get',
|
||||||
|
params: params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,19 +3,18 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item :label="label" prop="attachment" label-width="125">
|
<el-form-item :label="label" prop="attachment" label-width="125">
|
||||||
<template v-if="preview&&JSON.stringify(singleFile) !== '{}'&&JSON.stringify(singleFile)!=='null'">
|
<template v-if="preview">
|
||||||
<el-button type="primary" link @click="handleDownload(singleFile)" style="font-size: 16px">
|
|
||||||
{{ singleFile ? singleFile?.originalFileName : formData.singleFile?.originalFileName }}
|
|
||||||
</el-button>
|
|
||||||
<el-button type="danger" link @click="deleteSingleFile(singleFile?singleFile:formData.singleFile,1)">删除
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
<template
|
|
||||||
v-else-if="!preview||JSON.stringify(singleFile) == '{}'||singleFile==null||formData.singleFile==null">
|
|
||||||
<file-upload @getFile="getAttachment" :multiple="false"
|
<file-upload @getFile="getAttachment" :multiple="false"
|
||||||
:disabled="isSingleFile" ref="fileUploadRef"/>
|
:disabled="singleFileArray?.length>0?true:false" title="如需修改需求申请书附件,请先删除文件再上传!"/>
|
||||||
<!-- :showFileList="showFileList" @delete="deleteAttachment"-->
|
<fvTable style="width: 100%;max-height: 80px;" height="80" v-if="singleFileArray?.length>0" :tableConfig="editSingleTableConfig"
|
||||||
<fvTable style="width: 100%;max-height: 80px;" v-if="showSingleTable" height="80" :tableConfig="singleTableConfig"
|
:data="singleFileArray" :isSettingCol="false" :pagination="false">
|
||||||
|
</fvTable>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="!preview">
|
||||||
|
<file-upload @getFile="getAttachment" :multiple="false"
|
||||||
|
:disabled="isSingleFile" />
|
||||||
|
<fvTable style="width: 100%;max-height: 80px;" v-if="showSingleTable" height="80"
|
||||||
|
:tableConfig="singleTableConfig"
|
||||||
:data="_singleFileValue" :isSettingCol="false" :pagination="false">
|
:data="_singleFileValue" :isSettingCol="false" :pagination="false">
|
||||||
</fvTable>
|
</fvTable>
|
||||||
</template>
|
</template>
|
||||||
@@ -24,7 +23,7 @@
|
|||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="其他文件" label-width="125">
|
<el-form-item label="其他文件" label-width="125">
|
||||||
<file-upload @getFile="getOtherFile"/>
|
<file-upload @getFile="getOtherFile"/>
|
||||||
<fvTable style="width: 100%;max-height: 162px;" v-if="showTable" height="162" :tableConfig="tableConfig"
|
<fvTable style="width: 100%;max-height: 162px;" v-if="showTable" height="162" :tableConfig="tableConfig"
|
||||||
:data="allFileList" :isSettingCol="false" :pagination="false">
|
:data="allFileList" :isSettingCol="false" :pagination="false">
|
||||||
<template #empty>
|
<template #empty>
|
||||||
<el-empty :image-size="55" description="暂无数据" style="padding: 0"/>
|
<el-empty :image-size="55" description="暂无数据" style="padding: 0"/>
|
||||||
@@ -84,7 +83,7 @@ const props = defineProps({
|
|||||||
default: ''
|
default: ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const emit = defineEmits(["getAttachment", "getOtherFile","update:singleList"])
|
const emit = defineEmits(["getAttachment", "getOtherFile", "update:singleList"])
|
||||||
const tableConfig = reactive({
|
const tableConfig = reactive({
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
@@ -98,6 +97,7 @@ const tableConfig = reactive({
|
|||||||
prop: 'originalFileName',
|
prop: 'originalFileName',
|
||||||
label: '文件名',
|
label: '文件名',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
width: 400,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'tag',
|
prop: 'tag',
|
||||||
@@ -160,6 +160,7 @@ const singleTableConfig = reactive({
|
|||||||
prop: 'originalFileName',
|
prop: 'originalFileName',
|
||||||
label: '文件名',
|
label: '文件名',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
width: 400,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'tag',
|
prop: 'tag',
|
||||||
@@ -209,18 +210,80 @@ const singleTableConfig = reactive({
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
const fileUploadRef = ref()
|
const editSingleTableConfig = reactive({
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
prop: 'index',
|
||||||
|
type: 'index',
|
||||||
|
label: '序号',
|
||||||
|
align: 'center',
|
||||||
|
width: '80',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'originalFileName',
|
||||||
|
label: '文件名',
|
||||||
|
align: 'center',
|
||||||
|
width: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'tag',
|
||||||
|
label: '标签',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'size',
|
||||||
|
label: '文件大小',
|
||||||
|
align: 'center',
|
||||||
|
currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'oper',
|
||||||
|
label: '操作',
|
||||||
|
align: 'center',
|
||||||
|
showOverflowTooltip: false,
|
||||||
|
currentRender: ({row, index}) => {
|
||||||
|
let btn = []
|
||||||
|
btn.push({label: '下载', func: () => handleDownload(row), type: 'primary'})
|
||||||
|
// if (row.newFile) {
|
||||||
|
// btn.push({label: '删除', func: () => handleDelete(row), type: 'primary'})
|
||||||
|
// }
|
||||||
|
return (
|
||||||
|
<div style={{width: '100%'}}>
|
||||||
|
{
|
||||||
|
btn.map(item => (
|
||||||
|
<el-button
|
||||||
|
type={item.type}
|
||||||
|
onClick={() => item.func()}
|
||||||
|
link
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
</el-button>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
{
|
||||||
|
row.newFile || props.preview || !props.preview ?
|
||||||
|
<popover-delete name={row.originalFileName} type={'文件'} btnType={'danger'}
|
||||||
|
// perm={['']}
|
||||||
|
onDelete={() => deleteSingleFile(row, 1)}/>
|
||||||
|
: ''
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const singleFileArray = ref([])
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
attachment: [{required: true, message: '请上传附件', trigger: ['blur', 'change']}],
|
attachment: [{required: true, message: '请上传附件', trigger: ['blur', 'change']}],
|
||||||
})
|
})
|
||||||
const applyForm = ref()
|
const applyForm = ref()
|
||||||
const singleFile = ref(props.formData.singleFile)
|
const singleFile = ref({})
|
||||||
const isSingleFile = ref(false)
|
const isSingleFile = ref(false)
|
||||||
const allFileList = ref([])
|
const allFileList = ref([])
|
||||||
const deleteFileVal = ref({})
|
if (localStorage.getItem('singleFile')) {
|
||||||
const singleFileList = ref([])
|
singleFileArray.value.push(JSON.parse(localStorage.getItem('singleFile')))
|
||||||
if(localStorage.getItem('singleFile')){
|
singleFile.value =JSON.parse(localStorage.getItem('singleFile'))
|
||||||
singleFile.value = JSON.parse(localStorage.getItem('singleFile'))
|
|
||||||
}
|
}
|
||||||
const _singleFileValue = computed({
|
const _singleFileValue = computed({
|
||||||
get() {
|
get() {
|
||||||
@@ -230,8 +293,6 @@ const _singleFileValue = computed({
|
|||||||
emit('update:singleList', value)
|
emit('update:singleList', value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// console.log('_singleFileValue',_singleFileValue.value)
|
|
||||||
const _otherFileListValue = computed({
|
const _otherFileListValue = computed({
|
||||||
get() {
|
get() {
|
||||||
return props.otherFileList;
|
return props.otherFileList;
|
||||||
@@ -240,8 +301,8 @@ const _otherFileListValue = computed({
|
|||||||
emit('update:otherFileList', value)
|
emit('update:otherFileList', value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if(_otherFileListValue.value&&_otherFileListValue.value.length>0){
|
if (_otherFileListValue.value && _otherFileListValue.value.length > 0) {
|
||||||
_otherFileListValue.value.forEach(item=>{
|
_otherFileListValue.value.forEach(item => {
|
||||||
allFileList.value.push(item)
|
allFileList.value.push(item)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -279,16 +340,20 @@ watch(() => props.showTable, (newVal) => {
|
|||||||
// singleFileList.value = newVal
|
// singleFileList.value = newVal
|
||||||
// }, {deep: true})
|
// }, {deep: true})
|
||||||
watch(() => props.formData.singleFile, (newVal) => {
|
watch(() => props.formData.singleFile, (newVal) => {
|
||||||
// console.log('singleFile', newVal)
|
props.formData.singleFile = newVal
|
||||||
|
if(newVal!=null){
|
||||||
|
singleFileArray.value.push(newVal)
|
||||||
|
}else{
|
||||||
|
singleFileArray.value=[]
|
||||||
|
}
|
||||||
singleFile.value = newVal
|
singleFile.value = newVal
|
||||||
props.formData.singleFile=newVal
|
|
||||||
}, {deep: true})
|
}, {deep: true})
|
||||||
watch(() => isSingleFile.value, (newVal) => {
|
watch(() => isSingleFile.value, (newVal) => {
|
||||||
isSingleFile.value = newVal
|
isSingleFile.value = newVal
|
||||||
}, {deep: true})
|
}, {deep: true})
|
||||||
watch(() => singleFile.value, (newVal) => {
|
// watch(() => singleFile.value, (newVal) => {
|
||||||
singleFile.value = newVal
|
// singleFile.value = newVal
|
||||||
}, {deep: true})
|
// }, {deep: true})
|
||||||
const handleDelete = (row, type) => {
|
const handleDelete = (row, type) => {
|
||||||
deleteFile(row.fileId).then(res => {
|
deleteFile(row.fileId).then(res => {
|
||||||
ElNotification({
|
ElNotification({
|
||||||
@@ -307,14 +372,11 @@ const handleDelete = (row, type) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
const handleSingleDelete = (row) => {
|
const handleSingleDelete = (row) => {
|
||||||
// console.log('row',row)
|
|
||||||
// fileUploadRef.value.handleRemove(deleteFileVal.value.id)
|
|
||||||
handleDelete(row, 'single')
|
handleDelete(row, 'single')
|
||||||
}
|
}
|
||||||
const getAttachment = (val) => {
|
const getAttachment = (val) => {
|
||||||
// console.log('getAttachment', val)
|
// console.log('getAttachment', val)
|
||||||
isSingleFile.value = true
|
isSingleFile.value = true
|
||||||
// deleteFileVal.value=val
|
|
||||||
emit('getAttachment', val)
|
emit('getAttachment', val)
|
||||||
}
|
}
|
||||||
const compositeParam = (item) => {
|
const compositeParam = (item) => {
|
||||||
@@ -346,6 +408,7 @@ const deleteAttachment = (val) => {
|
|||||||
})
|
})
|
||||||
isSingleFile.value = false
|
isSingleFile.value = false
|
||||||
singleFile.value = null
|
singleFile.value = null
|
||||||
|
singleFileArray.value= []
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -364,7 +427,8 @@ const deleteSingleFile = (row, type) => {
|
|||||||
if (res.code === 1000) {
|
if (res.code === 1000) {
|
||||||
isSingleFile.value = false
|
isSingleFile.value = false
|
||||||
if (type === 1) {
|
if (type === 1) {
|
||||||
singleFile.value = null
|
singleFile.value =null
|
||||||
|
singleFileArray.value= []
|
||||||
} else {
|
} else {
|
||||||
props.otherFileList.splice(props.otherFileList.findIndex((item) => item.fileId === row.fileId), 1);
|
props.otherFileList.splice(props.otherFileList.findIndex((item) => item.fileId === row.fileId), 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,6 +174,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -190,6 +191,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -206,6 +208,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -223,6 +226,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -248,6 +252,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -265,6 +270,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -290,6 +296,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -315,6 +322,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form :label-position="labelAlign">
|
<el-form :label-position="labelAlign">
|
||||||
<el-form-item :label="title?'其他文件':''" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" :label-position="labelAlign" :label-width="title?95:''">
|
<!-- :label-width="title?95:''"-->
|
||||||
|
<el-form-item :label="title?'其他文件':''" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" :label-position="labelAlign" >
|
||||||
<file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>
|
<file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>
|
||||||
<fvTable style="width: 100%;max-height: 162px;" v-if="processViewer" height="162" :tableConfig="tableConfig"
|
<fvTable style="width: 100%;max-height: 162px;" v-if="processViewer" height="162" :tableConfig="tableConfig"
|
||||||
:data="_value" :isSettingCol="false" :pagination="false">
|
:data="_value" :isSettingCol="false" :pagination="false">
|
||||||
@@ -25,6 +26,10 @@ const props = defineProps({
|
|||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: ''
|
||||||
},
|
},
|
||||||
|
fileNameTableWidth: {
|
||||||
|
type: String,
|
||||||
|
default: '400'
|
||||||
|
},
|
||||||
fileListShow: {
|
fileListShow: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'READ'
|
default: 'READ'
|
||||||
@@ -56,6 +61,7 @@ const tableConfig = reactive({
|
|||||||
prop: 'originalFileName',
|
prop: 'originalFileName',
|
||||||
label: '文件名',
|
label: '文件名',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
width: props.fileNameTableWidth
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'tag',
|
prop: 'tag',
|
||||||
@@ -104,7 +110,6 @@ const tableConfig = reactive({
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
const _value = computed({
|
const _value = computed({
|
||||||
get() {
|
get() {
|
||||||
return props.value;
|
return props.value;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
<span>{{ filterDict(cacheStore.getDict('result_form'), localFormData.resultForm) }}</span>
|
<span>{{ filterDict(cacheStore.getDict('result_form'), localFormData.resultForm) }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
<baseTitle title="预期知识产权"></baseTitle>
|
<baseTitle title="预期知识产权"></baseTitle>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
@@ -130,17 +130,21 @@
|
|||||||
<span>{{ localFormData.contentDescription }}</span>
|
<span>{{ localFormData.contentDescription }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
<baseTitle title="需求上报申请书"></baseTitle>
|
<baseTitle title="需求上报申请书"></baseTitle>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item>
|
<single-file-component tag="需求上报"
|
||||||
<el-button type="primary" link @click="handleDownload(localFormData.singleFile)" style="font-size: 16px">
|
v-model:value="localFormData.singleFile" :processViewer="processViewer"
|
||||||
{{ localFormData.singleFile?.originalFileName }}
|
:file-list-show="fileListShow"/>
|
||||||
</el-button>
|
<!-- <el-form-item>-->
|
||||||
</el-form-item>
|
<!-- {{localFormData.singleFile}}-->
|
||||||
|
<!-- <el-button type="primary" link @click="handleDownload(localFormData.singleFile)" style="font-size: 16px">-->
|
||||||
|
<!-- {{ localFormData.singleFile?.originalFileName }}-->
|
||||||
|
<!-- </el-button>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
<baseTitle title="附件列表"></baseTitle>
|
<baseTitle title="附件列表"></baseTitle>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@@ -148,7 +152,7 @@
|
|||||||
v-model:value="localFormData.fileList" :processViewer="processViewer"
|
v-model:value="localFormData.fileList" :processViewer="processViewer"
|
||||||
:file-list-show="fileListShow"/>
|
:file-list-show="fileListShow"/>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
<div v-if="data.taskId||data.state==='4'">
|
<div v-if="data.taskId||data.state==='4'">
|
||||||
<baseTitle title="审核意见"></baseTitle>
|
<baseTitle title="审核意见"></baseTitle>
|
||||||
<el-form-item prop="_value">
|
<el-form-item prop="_value">
|
||||||
@@ -163,7 +167,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<div class="approval-record">
|
<div class="approval-record">
|
||||||
<div class="approval-title">
|
<div class="approval-title" style="margin-top: -15px">
|
||||||
<baseTitle title="审批记录"></baseTitle>
|
<baseTitle title="审批记录"></baseTitle>
|
||||||
<div class="diagram">
|
<div class="diagram">
|
||||||
<div class="base-title">流程图</div>
|
<div class="base-title">流程图</div>
|
||||||
@@ -355,6 +359,7 @@ watch(() => props.loading, (newVal) => {
|
|||||||
}, {deep: true})
|
}, {deep: true})
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
|
props.formData.singleFile=[props.formData.singleFile]
|
||||||
return Object.keys(props.formData).length && (localFormData.value = props.formData)
|
return Object.keys(props.formData).length && (localFormData.value = props.formData)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
173
src/components/DetailComponent/singleFileComponent.vue
Normal file
173
src/components/DetailComponent/singleFileComponent.vue
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
<template>
|
||||||
|
<el-form :label-position="labelAlign">
|
||||||
|
<el-form-item :label="title?'其他文件':''" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" :label-position="labelAlign" :label-width="title?95:''">
|
||||||
|
<file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>
|
||||||
|
<fvTable style="width: 100%;max-height: 80px;" v-if="processViewer" height="80" :tableConfig="tableConfig"
|
||||||
|
:data="_value" :isSettingCol="false" :pagination="false">
|
||||||
|
<template #empty>
|
||||||
|
<el-empty :image-size="55" description="暂无数据" style="padding: 0"/>
|
||||||
|
</template>
|
||||||
|
</fvTable>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="jsx">
|
||||||
|
import {downloadFile, deleteFile} from "@/api/project-demand";
|
||||||
|
import {ElNotification} from "element-plus";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
tag: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
fileNameTableWidth: {
|
||||||
|
type: String,
|
||||||
|
default: '400'
|
||||||
|
},
|
||||||
|
fileListShow: {
|
||||||
|
type: String,
|
||||||
|
default: 'READ'
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
type: Array,
|
||||||
|
default: []
|
||||||
|
},
|
||||||
|
processViewer: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
labelAlign: {
|
||||||
|
type: String,
|
||||||
|
default: 'right'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emit = defineEmits(['update:value'])
|
||||||
|
const tableConfig = reactive({
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
prop: 'index',
|
||||||
|
type: 'index',
|
||||||
|
label: '序号',
|
||||||
|
align: 'center',
|
||||||
|
width: 85,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'originalFileName',
|
||||||
|
label: '文件名',
|
||||||
|
align: 'center',
|
||||||
|
width: props.fileNameTableWidth
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'tag',
|
||||||
|
label: '标签',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'size',
|
||||||
|
label: '文件大小',
|
||||||
|
align: 'center',
|
||||||
|
width: 150,
|
||||||
|
currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'oper',
|
||||||
|
label: '操作',
|
||||||
|
align: 'center',
|
||||||
|
showOverflowTooltip: false,
|
||||||
|
currentRender: ({row, index}) => {
|
||||||
|
let btn = []
|
||||||
|
btn.push({label: '下载', func: () => handleDownload(row), type: 'primary'})
|
||||||
|
// if (row.newFile) {
|
||||||
|
// btn.push({label: '删除', func: () => handleDelete(row), type: 'primary'})
|
||||||
|
// }
|
||||||
|
return (
|
||||||
|
<div style={{width: '100%'}}>
|
||||||
|
{
|
||||||
|
btn.map(item => (
|
||||||
|
<el-button
|
||||||
|
type={item.type}
|
||||||
|
onClick={() => item.func()}
|
||||||
|
link>
|
||||||
|
{item.label}
|
||||||
|
</el-button>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
{
|
||||||
|
row.newFile ? <popover-delete name={row.originalFileName} type={'文件'} btnType={'danger'}
|
||||||
|
perm={['mosr:requirement:del']}
|
||||||
|
onDelete={() => handleDelete(row)}/>
|
||||||
|
: ''
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const _value = computed({
|
||||||
|
get() {
|
||||||
|
return props.value;
|
||||||
|
},
|
||||||
|
set(val) {
|
||||||
|
emit("update:value", val);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const getOtherFile = (val) => {
|
||||||
|
props.processViewer = false
|
||||||
|
let fileObj = compositeParam(val)
|
||||||
|
_value.value.push(fileObj)
|
||||||
|
nextTick(() => {
|
||||||
|
props.processViewer = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const compositeParam = (item, type) => {
|
||||||
|
return {
|
||||||
|
fileId: item.id,
|
||||||
|
size: item.size,
|
||||||
|
originalFileName: item.originalFilename,
|
||||||
|
fileType: item.fileType,
|
||||||
|
url: item.url,
|
||||||
|
newFile: true,
|
||||||
|
tag: props.tag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const handleDownload = (row) => {
|
||||||
|
downloadFile(row.fileId).then(res => {
|
||||||
|
const blob = new Blob([res])
|
||||||
|
let a = document.createElement('a')
|
||||||
|
a.href = URL.createObjectURL(blob)
|
||||||
|
a.download = row.originalFileName
|
||||||
|
a.click()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const handleDelete = (row) => {
|
||||||
|
deleteFile(row.fileId).then(res => {
|
||||||
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: res.msg,
|
||||||
|
type: res.code === 1000 ? 'success' : 'error'
|
||||||
|
})
|
||||||
|
if (res.code === 1000) {
|
||||||
|
_value.value.splice(_value.value.findIndex((item) => item.fileId === row.fileId), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(() => props.processViewer, (newVal) => {
|
||||||
|
props.processViewer = newVal
|
||||||
|
}, {deep: true})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
:deep(.el-table--fit ) {
|
||||||
|
height: 80px !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
label-width="auto"
|
label-width="auto"
|
||||||
ref="formInstance"
|
ref="formInstance"
|
||||||
class="search-form"
|
class="search-form"
|
||||||
|
@submit.prevent="getValues"
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col
|
<el-col
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="padding: 0 10px;">
|
<div style="padding: 0 10px;">
|
||||||
|
<baseTitle title="费用分摊详情"></baseTitle>
|
||||||
<el-form :model="formData" ref="form" class="query-form" label-width="auto">
|
<el-form :model="formData" ref="form" class="query-form" label-width="auto">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@@ -65,8 +66,7 @@ import {useProcessStore} from '@/stores/processStore.js';
|
|||||||
import {getAllocationDetail} from "@/api/expense-manage";
|
import {getAllocationDetail} from "@/api/expense-manage";
|
||||||
import AllocationSummaryDetailMoblie from './AllocationSummaryDetailMoblie.vue'
|
import AllocationSummaryDetailMoblie from './AllocationSummaryDetailMoblie.vue'
|
||||||
import ExpenseDetailMoblie from './ExpenseDetailMoblie.vue'
|
import ExpenseDetailMoblie from './ExpenseDetailMoblie.vue'
|
||||||
import OpinionMoblie from "@/views/project-demand/requirement/moblieDetail/OpinionMoblie.vue";
|
import OpinionMoblie from '@/views/project-management/mobledetail/OpinionMoblie.vue'
|
||||||
|
|
||||||
const changeDiagram = ref(false)
|
const changeDiagram = ref(false)
|
||||||
const processStore = useProcessStore()
|
const processStore = useProcessStore()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24" style="margin-bottom: -25px">
|
<el-col :span="24" style="margin-bottom: -25px">
|
||||||
<el-form-item label="征集公司" prop="companyIds" class="tree-select" label-width="96">
|
<el-form-item label="征集公司" :required="true" prop="" class="tree-select" label-width="96">
|
||||||
<div style="width: 100%">
|
<div style="width: 100%">
|
||||||
<el-button color="#DED0B2" @click="showCompany">{{ selectedCompanyList.length === 0 ? '请选择征集公司' : '更改' }}
|
<el-button color="#DED0B2" @click="showCompany">{{ selectedCompanyList.length === 0 ? '请选择征集公司' : '更改' }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -170,11 +170,11 @@ const processInstanceData = ref()
|
|||||||
const formPermMap = ref(new Map());
|
const formPermMap = ref(new Map());
|
||||||
const companyNameArray = ref([])
|
const companyNameArray = ref([])
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
requirementName: [{required: true, message: '请输入征集名称', trigger: 'blur'}],
|
requirementName: [{required: true, message: '请输入征集名称', trigger: ['blur','change']}],
|
||||||
companyIds: [{required: true, message: '请选择征集公司', trigger: 'blur'}],
|
// companyIds: [{required: true, message: '请选择征集公司', trigger: ['blur','change']}],
|
||||||
collectType: [{required: true, message: '请选择征集类型', trigger: 'blur'}],
|
collectType: [{required: true, message: '请选择征集类型', trigger: ['blur','change']}],
|
||||||
deadline: [{required: true, message: '请选择截止时间', trigger: 'blur'}],
|
deadline: [{required: true, message: '请选择截止时间', trigger: ['blur','change']}],
|
||||||
specialFundId: [{required: true, message: '请选择专项资金名称', trigger: 'blur'}],
|
specialFundId: [{required: true, message: '请选择专项资金名称', trigger: ['blur','change']}],
|
||||||
})
|
})
|
||||||
|
|
||||||
const tableConfig = reactive({
|
const tableConfig = reactive({
|
||||||
@@ -344,14 +344,6 @@ const init = async () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const submitParam = (item) => {
|
const submitParam = (item) => {
|
||||||
if (item.companyIds.length === 0) {
|
|
||||||
ElNotification({
|
|
||||||
title: '提示',
|
|
||||||
message: '请选择征集公司',
|
|
||||||
type: 'error'
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let files = []
|
let files = []
|
||||||
item.fileList.forEach(item => {
|
item.fileList.forEach(item => {
|
||||||
let obj = {
|
let obj = {
|
||||||
@@ -385,6 +377,14 @@ const handleSubmit = async (instance) => {
|
|||||||
})
|
})
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (formData.value.companyIds.length === 0) {
|
||||||
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: '请选择征集公司',
|
||||||
|
type: 'error'
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
const {msg, code} = await addRequirement(submitParam(formData.value))
|
const {msg, code} = await addRequirement(submitParam(formData.value))
|
||||||
ElNotification({
|
ElNotification({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table--fit ) {
|
:deep(.el-table--fit ) {
|
||||||
height: 300px !important;
|
height: 162px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-block {
|
.detail-block {
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
<el-row gutter="20">
|
<el-row gutter="20">
|
||||||
<el-col :span="5">
|
<el-col :span="5">
|
||||||
<el-form-item prop="requirementName" label="征集名称">
|
<el-form-item prop="requirementName" label="征集名称">
|
||||||
<el-input v-model="selectForm.requirementName" placeholder="请输入征集名称" clearable/>
|
<el-input v-model="selectForm.requirementName" placeholder="请输入征集名称" clearable @keyup.enter.native="getList"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="5" :offset="1">
|
<el-col :span="5" :offset="1">
|
||||||
<el-form-item prop="collectType" label="征集类型">
|
<el-form-item prop="collectType" label="征集类型">
|
||||||
<el-select v-model="selectForm.collectType" placeholder="请选择征集类型" clearable filterable>
|
<el-select v-model="selectForm.collectType" ref="collectTypeSelectRef" placeholder="请选择征集类型" clearable filterable
|
||||||
|
@change="getList">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in cacheStore.getDict('collect_type')"
|
v-for="item in cacheStore.getDict('collect_type')"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="5" :offset="1">
|
<el-col :span="5" :offset="1">
|
||||||
<el-form-item prop="state" label="状态">
|
<el-form-item prop="state" label="状态">
|
||||||
<el-select v-model="selectForm.state" placeholder="请选择状态" clearable filterable>
|
<el-select v-model="selectForm.state" placeholder="请选择状态" clearable filterable @change="getList">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in stateOption"
|
v-for="item in stateOption"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -59,6 +60,7 @@ import {getRequirementStatePerm} from "@/api/project-demand";
|
|||||||
const cacheStore = useCacheStore()
|
const cacheStore = useCacheStore()
|
||||||
const authStore = useAuthStore()
|
const authStore = useAuthStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const collectTypeSelectRef=ref()
|
||||||
const searchConfig = reactive([
|
const searchConfig = reactive([
|
||||||
{
|
{
|
||||||
label: '征集名称',
|
label: '征集名称',
|
||||||
@@ -201,6 +203,7 @@ const tableConfig = reactive({
|
|||||||
],
|
],
|
||||||
params: {}
|
params: {}
|
||||||
})
|
})
|
||||||
|
|
||||||
const getStatePerm = () => {
|
const getStatePerm = () => {
|
||||||
getRequirementStatePerm().then(res => {
|
getRequirementStatePerm().then(res => {
|
||||||
stateOption.value=res.data
|
stateOption.value=res.data
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-loading="loading">
|
<div v-loading="loading">
|
||||||
<el-form :model="formData" label-width="auto">
|
<el-form :model="formData" label-width="left">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24" v-if="type==='singleDetail'">
|
<el-col :span="24" v-if="type==='singleDetail'">
|
||||||
<el-form-item label="征集名称">
|
<el-form-item label="征集名称">
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<baseTitle v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" title="附件列表"></baseTitle>
|
<baseTitle v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" title="附件列表"></baseTitle>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<file-component title="" tag="需求征集"
|
<file-component title="" tag="需求征集" fileNameTableWidth="300"
|
||||||
v-model:value="formData.fileList" :processViewer="processViewer"
|
v-model:value="formData.fileList" :processViewer="processViewer"
|
||||||
:file-list-show="fileListShow"/>
|
:file-list-show="fileListShow"/>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {getFundOption} from "@/api/special-fund";
|
|||||||
import {getSubCompOpt} from "@/api/user/user";
|
import {getSubCompOpt} from "@/api/user/user";
|
||||||
import {matterTree} from "@/utils/matterTree";
|
import {matterTree} from "@/utils/matterTree";
|
||||||
import CollectionDetailMoblie from './CollectionDetailMoblie.vue'
|
import CollectionDetailMoblie from './CollectionDetailMoblie.vue'
|
||||||
import OpinionMoblie from './OpinionMoblie.vue'
|
import OpinionMoblie from '@/views/project-management/mobledetail/OpinionMoblie.vue'
|
||||||
|
|
||||||
const tagsViewStore = useTagsView()
|
const tagsViewStore = useTagsView()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@@ -67,7 +67,11 @@ const init = async () => {
|
|||||||
}
|
}
|
||||||
loading.value = false
|
loading.value = false
|
||||||
let data = res.data
|
let data = res.data
|
||||||
data.formData.companyIds = getCompanyOptionItem(data.formData.companyIds)
|
if (data.formData.companyIds[0] == -1) {
|
||||||
|
data.formData.companyIds = ['所有公司']
|
||||||
|
} else {
|
||||||
|
data.formData.companyIds = getCompanyOptionItem(data.formData.companyIds)
|
||||||
|
}
|
||||||
collectData.value = data
|
collectData.value = data
|
||||||
formData.value = data.formData;
|
formData.value = data.formData;
|
||||||
if (data.formData.specialFund) {
|
if (data.formData.specialFund) {
|
||||||
|
|||||||
@@ -261,7 +261,7 @@
|
|||||||
<div class="oper-page-btn">
|
<div class="oper-page-btn">
|
||||||
<!-- <el-button type="info" @click="staging">存为草稿</el-button>-->
|
<!-- <el-button type="info" @click="staging">存为草稿</el-button>-->
|
||||||
<el-button color="#DED0B2" v-if="name==='Summary/add'" @click="handleSubmit(summaryForm)">发布</el-button>
|
<el-button color="#DED0B2" v-if="name==='Summary/add'" @click="handleSubmit(summaryForm)">发布</el-button>
|
||||||
<el-button color="#DED0B2" v-else @click="handleResubmit">重新发布</el-button>
|
<el-button color="#DED0B2" v-else @click="handleResubmit(summaryForm)">重新发布</el-button>
|
||||||
<el-button @click="handleBack">返回</el-button>
|
<el-button @click="handleBack">返回</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -472,47 +472,58 @@ const handleSubmit = debounce(async (instance) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
const handleResubmit = debounce(() => {
|
const handleResubmit = debounce((instance) => {
|
||||||
let otherFiles = []
|
if (!instance) return
|
||||||
if (name.value === 'Summary/edit') {
|
instance.validate(async (valid, fields) => {
|
||||||
attachment.value.allFileList.forEach(item => {
|
if (!valid) {
|
||||||
otherFiles.push(getFileParam(item))
|
ElNotification({
|
||||||
})
|
title: '提示',
|
||||||
}
|
message: '请完善数据,再提交!',
|
||||||
if (attachment.value.singleFile == null) {
|
type: 'error'
|
||||||
attachment.value.validate()
|
})
|
||||||
ElNotification({
|
return;
|
||||||
title: '提示',
|
}
|
||||||
message: '请上传附件',
|
let otherFiles = []
|
||||||
type: 'error'
|
if (name.value === 'Summary/edit') {
|
||||||
})
|
attachment.value.allFileList.forEach(item => {
|
||||||
return;
|
otherFiles.push(getFileParam(item))
|
||||||
} else {
|
|
||||||
// formData.value.resultForm=JSON.stringify(formData.value.resultForm)
|
|
||||||
attachment.value.clearValidate()
|
|
||||||
}
|
|
||||||
if (formData.value.isSpecialFund && formData.value.specialFund === null) {
|
|
||||||
formData.value.specialFund = getFundName(formData.value.specialFundId)
|
|
||||||
}
|
|
||||||
let params = {
|
|
||||||
...formData.value,
|
|
||||||
deploymentId: deploymentId.value,
|
|
||||||
fileList: otherFiles,
|
|
||||||
requirementId: route.query.id ? route.query.id : '-1'
|
|
||||||
}
|
|
||||||
// console.log('重新提交params', params, formData.value.specialFund, formData.value.specialFundId)
|
|
||||||
resubmitReported(params).then(res => {
|
|
||||||
ElNotification({
|
|
||||||
title: '提示',
|
|
||||||
message: res.msg,
|
|
||||||
type: res.code === 1000 ? 'success' : 'error'
|
|
||||||
})
|
|
||||||
if (res.code === 1000) {
|
|
||||||
tagsViewStore.delVisitedViews(router.currentRoute.value.path)
|
|
||||||
router.push({
|
|
||||||
name: 'Summary'
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if (formData.value.isSpecialFund && formData.value.specialFund === null) {
|
||||||
|
formData.value.specialFund = getFundName(formData.value.specialFundId)
|
||||||
|
}
|
||||||
|
if (attachment.value.singleFile == null) {
|
||||||
|
attachment.value.validate()
|
||||||
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: '请上传附件',
|
||||||
|
type: 'error'
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
// formData.value.resultForm=JSON.stringify(formData.value.resultForm)
|
||||||
|
attachment.value.clearValidate()
|
||||||
|
}
|
||||||
|
let params = {
|
||||||
|
...formData.value,
|
||||||
|
deploymentId: deploymentId.value,
|
||||||
|
fileList: otherFiles,
|
||||||
|
requirementId: route.query.id ? route.query.id : '-1'
|
||||||
|
}
|
||||||
|
// console.log('重新提交params', params, formData.value.specialFund, formData.value.specialFundId)
|
||||||
|
resubmitReported(params).then(res => {
|
||||||
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: res.msg,
|
||||||
|
type: res.code === 1000 ? 'success' : 'error'
|
||||||
|
})
|
||||||
|
if (res.code === 1000) {
|
||||||
|
tagsViewStore.delVisitedViews(router.currentRoute.value.path)
|
||||||
|
router.push({
|
||||||
|
name: 'Summary'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -348,13 +348,25 @@ const handleEdit = (row) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// const handleDetail = (row) => {
|
||||||
|
// router.push({
|
||||||
|
// name: 'Summary/detail',
|
||||||
|
// query: {
|
||||||
|
// id: row.requirementId == null ? '-1' : row.requirementId,
|
||||||
|
// projectId: row.projectId,
|
||||||
|
// state: row.state
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
const handleDetail = (row) => {
|
const handleDetail = (row) => {
|
||||||
router.push({
|
router.push({
|
||||||
name: 'Summary/detail',
|
name: 'Implementation/detail',
|
||||||
query: {
|
query: {
|
||||||
id: row.requirementId == null ? '-1' : row.requirementId,
|
id: row.requirementId == null ? '-1' : row.requirementId,
|
||||||
projectId: row.projectId,
|
projectId: row.projectId,
|
||||||
state: row.state
|
state: row.state,
|
||||||
|
step: '10'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
<el-form :model="basicData">
|
<el-form :model="basicData">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item prop="requirementName" label="征集名称" label-width="122">
|
<el-form-item prop="requirementName" label="征集名称">
|
||||||
<span>{{ basicData.requirementName }}</span>
|
<span>{{ basicData.requirementName }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item prop="projectName" label="项目名称" label-width="130">
|
<el-form-item prop="projectName" label="项目名称" label-width="75">
|
||||||
<span>{{ basicData.projectName }}</span>
|
<span>{{ basicData.projectName }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -50,50 +50,57 @@ const formDataArray = ref([
|
|||||||
prop: 'projectChargePersonName',
|
prop: 'projectChargePersonName',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 8
|
span: 8
|
||||||
}
|
},
|
||||||
|
labelWidth:'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '项目开始时间',
|
label: '项目开始时间',
|
||||||
prop: 'startTime',
|
prop: 'startTime',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 8
|
span: 8
|
||||||
}
|
},
|
||||||
|
labelWidth:'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '项目预计持续时间',
|
label: '项目预计持续时间',
|
||||||
prop: 'endTime',
|
prop: 'endTime',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 8
|
span: 8
|
||||||
}
|
},
|
||||||
|
labelWidth:'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '项目开展方式',
|
label: '项目开展方式',
|
||||||
prop: 'projectDevelopmentWay',
|
prop: 'projectDevelopmentWay',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
}
|
},
|
||||||
|
labelWidth:'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '项目预算',
|
label: '项目预算',
|
||||||
prop: 'projectBudgetDescription',
|
prop: 'projectBudgetDescription',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
}
|
},
|
||||||
|
labelWidth:'left'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '项目总体完成率',
|
label: '项目总体完成率',
|
||||||
prop: 'projectCompletionRate',
|
prop: 'projectCompletionRate',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 6
|
span: 8
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => <span>{tableData.value.projectCompletionRate}%</span>
|
component: () => <span>{tableData.value.projectCompletionRate}%</span>
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '已完成工作量',
|
label: '已完成工作量',
|
||||||
prop: 'completeWork',
|
prop: 'completeWork',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 18
|
span: 16
|
||||||
}
|
},
|
||||||
|
labelWidth:'left'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
const buttonShow = ref(false)
|
const buttonShow = ref(false)
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ import Opinion from "@/components/DetailComponent/Opinion.vue";
|
|||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const editShow = ref(false)
|
const editShow = ref(false)
|
||||||
const applyTitle = ref('apply')
|
const applyTitle = ref('filing')
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const processStore = useProcessStore()
|
const processStore = useProcessStore()
|
||||||
const fileListShow = ref('READ')
|
const fileListShow = ref('READ')
|
||||||
@@ -83,6 +83,9 @@ localStorage.removeItem('projectChargePersonUserList')
|
|||||||
localStorage.removeItem('projectPersonUserList')
|
localStorage.removeItem('projectPersonUserList')
|
||||||
const getAllInfo = async (state) => {
|
const getAllInfo = async (state) => {
|
||||||
const loading = ElLoading.service({fullscreen: true})
|
const loading = ElLoading.service({fullscreen: true})
|
||||||
|
detailData.value = {
|
||||||
|
state: "0"
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
detailShow.value = false
|
detailShow.value = false
|
||||||
fileListShow.value = 'READ'
|
fileListShow.value = 'READ'
|
||||||
@@ -125,14 +128,16 @@ const getAllInfo = async (state) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const changeModel = (active, mode) => {
|
const changeModel = (active, mode) => {
|
||||||
|
// console.log('active, mode',active, mode)
|
||||||
editShow.value = false
|
editShow.value = false
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
editShow.value = mode === 'submit' || mode === 'resubmit';
|
editShow.value = mode === 'submit' || mode === 'resubmit';
|
||||||
if (route.query.step === '20' && active === '20') {
|
// route.query.step === '20' &&
|
||||||
|
if (active === '20') {
|
||||||
applyTitle.value = 'apply'
|
applyTitle.value = 'apply'
|
||||||
} else if (route.query.step === '40' && active === '40') {
|
} else if (active === '40') {
|
||||||
applyTitle.value = 'check'
|
applyTitle.value = 'check'
|
||||||
} else if (route.query.step === '50' && active === '50') {
|
}else if ( active === '50') {
|
||||||
applyTitle.value = 'filing'
|
applyTitle.value = 'filing'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -146,14 +151,9 @@ const stepChange = (data) => {
|
|||||||
showActive.value = data.active
|
showActive.value = data.active
|
||||||
getAllInfo(data.active)
|
getAllInfo(data.active)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
//.detail-block{
|
|
||||||
// padding-top: 15px;
|
|
||||||
//}
|
|
||||||
|
|
||||||
:deep(.el-tabs__nav-scroll) {
|
:deep(.el-tabs__nav-scroll) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -167,11 +167,6 @@ const stepChange = (data) => {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
//.is-active {
|
|
||||||
// color: black;
|
|
||||||
// //background-color: #DED0B2;
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<baseTitle title="基础信息"></baseTitle>
|
<baseTitle title="基础信息"></baseTitle>
|
||||||
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e" style="margin-left:27px"></fvForm>
|
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e" ></fvForm>
|
||||||
<baseTitle title="阶段变更详情" style="margin-top: -10px"></baseTitle>
|
<baseTitle title="阶段变更详情" style="margin-top: -10px"></baseTitle>
|
||||||
<div style="color: #606266;font-size: 14px;height:25px;"><span style="display:inline-block;width: 84px;text-align: right;margin-right: 14px">抄送人</span>{{copyName?copyName:'--'}}</div>
|
<div style="color: #606266;font-size: 14px;height:25px;"><span style="display:inline-block;text-align: right;margin-right: 14px">抄送人</span>{{copyName?copyName:'--'}}</div>
|
||||||
<ApprovalDetail :formData="summaryData.formData" :data="summaryData" type="phase"
|
<ApprovalDetail :formData="summaryData.formData" :data="summaryData" type="phase"
|
||||||
:processViewer="summaryProcessViewer" :loading="loading" :fileListShow="fileListShow" v-model:value="auditOpinion"/>
|
:processViewer="summaryProcessViewer" :loading="loading" :fileListShow="fileListShow" v-model:value="auditOpinion"/>
|
||||||
<opinion v-if="summaryData.taskId" :formData="summaryData.formData" :taskId="summaryData.taskId" v-model:value="auditOpinion"></opinion>
|
<opinion v-if="summaryData.taskId" :formData="summaryData.formData" :taskId="summaryData.taskId" v-model:value="auditOpinion"></opinion>
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -195,6 +196,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -211,6 +213,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -228,6 +231,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -253,6 +257,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -270,6 +275,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -295,6 +301,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
@@ -320,6 +327,7 @@ const schema = computed(() => {
|
|||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
|
labelWidth:'left',
|
||||||
component: () => (
|
component: () => (
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<div v-loading="loading" style="padding: 0 10px;">
|
<div v-loading="loading" style="padding: 0 10px;">
|
||||||
<baseTitle title="专项资金详情"></baseTitle>
|
<baseTitle title="专项资金详情"></baseTitle>
|
||||||
<el-form :model="formData" ref="form" label-width="auto">
|
<el-form :model="formData" ref="form" label-width="left">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="专项名称">
|
<el-form-item label="专项名称">
|
||||||
@@ -101,6 +101,7 @@ import {getFundDetailProcess} from "@/api/special-fund";
|
|||||||
import OpinionMoblie from "./OpinionMoblie.vue";
|
import OpinionMoblie from "./OpinionMoblie.vue";
|
||||||
const processStore = useProcessStore()
|
const processStore = useProcessStore()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const router = useRouter()
|
||||||
const changeDiagram = ref(false)
|
const changeDiagram = ref(false)
|
||||||
const fundData = ref({})
|
const fundData = ref({})
|
||||||
const formData = ref({})
|
const formData = ref({})
|
||||||
@@ -114,12 +115,13 @@ const projectTable = reactive({
|
|||||||
type: 'index',
|
type: 'index',
|
||||||
label: '序号',
|
label: '序号',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
width: 120
|
width: 85
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'projectName',
|
prop: 'projectName',
|
||||||
label: '项目名称',
|
label: '项目名称',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
width: 200,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'specialFundAmount',
|
prop: 'specialFundAmount',
|
||||||
@@ -132,18 +134,19 @@ const projectTable = reactive({
|
|||||||
{
|
{
|
||||||
prop: 'startTime',
|
prop: 'startTime',
|
||||||
label: '项目时间',
|
label: '项目时间',
|
||||||
align: 'center'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'oper',
|
|
||||||
label: '操作',
|
|
||||||
align: 'center',
|
align: 'center',
|
||||||
currentRender: ({row, index}) => {
|
width: 150,
|
||||||
return (
|
},
|
||||||
<el-button type="primary" link onClick={() => handleView(row)}>查看</el-button>
|
// {
|
||||||
)
|
// prop: 'oper',
|
||||||
}
|
// label: '操作',
|
||||||
}
|
// align: 'center',
|
||||||
|
// // currentRender: ({row, index}) => {
|
||||||
|
// // return (
|
||||||
|
// // <el-button type="primary" link onClick={() => handleView(row)}>查看</el-button>
|
||||||
|
// // )
|
||||||
|
// // }
|
||||||
|
// }
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
const fileTable = reactive({
|
const fileTable = reactive({
|
||||||
@@ -159,6 +162,7 @@ const fileTable = reactive({
|
|||||||
prop: 'originalFileName',
|
prop: 'originalFileName',
|
||||||
label: '文件名',
|
label: '文件名',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
width: 160,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'tag',
|
prop: 'tag',
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="detail-block" v-loading="loading">
|
<div class="detail-block" v-loading="loading">
|
||||||
|
<baseTitle title="需求上报信息" style="margin-top: -15px"></baseTitle>
|
||||||
<el-form :model="localFormData" ref="summaryForm" :rules="rules">
|
<el-form :model="localFormData" ref="summaryForm" :rules="rules">
|
||||||
<el-row gutter="50">
|
<el-row gutter="50">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@@ -80,6 +81,10 @@
|
|||||||
}}</span>
|
}}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
|
<baseTitle title="预期知识产权"></baseTitle>
|
||||||
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="发明专利(项)" prop="inventionPatent">
|
<el-form-item label="发明专利(项)" prop="inventionPatent">
|
||||||
<span>{{ localFormData.inventionPatent }}</span>
|
<span>{{ localFormData.inventionPatent }}</span>
|
||||||
@@ -126,26 +131,35 @@
|
|||||||
<span>{{ localFormData.contentDescription }}</span>
|
<span>{{ localFormData.contentDescription }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
|
<baseTitle title="需求上报申请书"></baseTitle>
|
||||||
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="需求上报申请书" label-position="top" style="display:block;">
|
<single-file-component tag="需求上报" :fileNameTableWidth="200"
|
||||||
<!-- style="font-size: 16px"-->
|
v-model:value="localFormData.singleFile" :processViewer="processViewer"
|
||||||
<el-button type="primary" link @click="handleDownload(localFormData.singleFile)">
|
labelAlign="top"
|
||||||
{{ localFormData.singleFile?.originalFileName }}
|
:file-list-show="fileListShow"/>
|
||||||
</el-button>
|
<!-- <el-form-item label="需求上报申请书" label-position="top" style="display:block;">-->
|
||||||
</el-form-item>
|
<!-- <!– style="font-size: 16px"–>-->
|
||||||
|
<!-- <el-button type="primary" link @click="handleDownload(localFormData.singleFile)">-->
|
||||||
|
<!-- {{ localFormData.singleFile?.originalFileName }}-->
|
||||||
|
<!-- </el-button>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
|
<baseTitle title="附件列表"></baseTitle>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<file-component
|
<file-component
|
||||||
title="需求上报附件"
|
tag="需求上报" :fileNameTableWidth="200"
|
||||||
tag="需求上报"
|
|
||||||
v-model:value="localFormData.fileList"
|
v-model:value="localFormData.fileList"
|
||||||
:processViewer="processViewer"
|
:processViewer="processViewer"
|
||||||
:file-list-show="fileListShow"
|
:file-list-show="fileListShow"
|
||||||
labelAlign="top"
|
labelAlign="top"
|
||||||
/>
|
/>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24" style="margin-top: -15px">
|
||||||
<div v-if="data.taskId">
|
<div v-if="data.taskId||data.state==='4'">
|
||||||
<baseTitle title="审核意见"></baseTitle>
|
<baseTitle title="审核意见"></baseTitle>
|
||||||
<el-form-item prop="_value">
|
<el-form-item prop="_value">
|
||||||
<el-input
|
<el-input
|
||||||
@@ -159,7 +173,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<div class="approval-record">
|
<div class="approval-record">
|
||||||
<div class="approval-title">
|
<div class="approval-title" style="margin-top: -15px">
|
||||||
<baseTitle title="审批记录"></baseTitle>
|
<baseTitle title="审批记录"></baseTitle>
|
||||||
<div class="diagram">
|
<div class="diagram">
|
||||||
<div class="base-title">流程图</div>
|
<div class="base-title">流程图</div>
|
||||||
@@ -350,6 +364,7 @@ watch(() => props.loading, (newVal) => {
|
|||||||
}, {deep: true})
|
}, {deep: true})
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
|
props.formData.singleFile=[props.formData.singleFile]
|
||||||
return Object.keys(props.formData).length && (localFormData.value = props.formData)
|
return Object.keys(props.formData).length && (localFormData.value = props.formData)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<file-component
|
<file-component
|
||||||
:title="getTagName(type)+'附件'"
|
:title="getTagName(type)+'附件'"
|
||||||
:tag="getTagName(type)"
|
:tag="getTagName(type)"
|
||||||
|
fileNameTableWidth="300"
|
||||||
v-model:value="formData.fileList"
|
v-model:value="formData.fileList"
|
||||||
:processViewer="processViewer"
|
:processViewer="processViewer"
|
||||||
:file-list-show="fileListShow"
|
:file-list-show="fileListShow"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<baseTitle title="基础信息"></baseTitle>
|
<baseTitle title="基础信息"></baseTitle>
|
||||||
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e"></fvForm>
|
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e"></fvForm>
|
||||||
<baseTitle title="阶段变更详情" style="margin-top: -10px"></baseTitle>
|
<baseTitle title="阶段变更详情" style="margin-top: -10px"></baseTitle>
|
||||||
<div style="color: #606266;font-size: 14px;height:25px;"><span style="display:inline-block;width: 82px;text-align: right;margin-right: 14px">抄送人</span>{{copyName?copyName:'--'}}</div>
|
<div style="color: #606266;font-size: 14px;height:25px;"><span style="display:inline-block;text-align: right;margin-right: 14px">抄送人</span>{{copyName?copyName:'--'}}</div>
|
||||||
<ApprovalDetailMoblie :formData="summaryData.formData" :data="summaryData" type="phase"
|
<ApprovalDetailMoblie :formData="summaryData.formData" :data="summaryData" type="phase"
|
||||||
:processViewer="summaryProcessViewer" :loading="loading" :fileListShow="fileListShow" v-model:value="auditOpinion"/>
|
:processViewer="summaryProcessViewer" :loading="loading" :fileListShow="fileListShow" v-model:value="auditOpinion"/>
|
||||||
<opinion-moblie v-if="summaryData.taskId" :formData="summaryData.formData" :taskId="summaryData.taskId"
|
<opinion-moblie v-if="summaryData.taskId" :formData="summaryData.formData" :taskId="summaryData.taskId"
|
||||||
|
|||||||
@@ -17,8 +17,10 @@
|
|||||||
type="textarea"
|
type="textarea"
|
||||||
placeholder="请输入介绍"
|
placeholder="请输入介绍"
|
||||||
/>
|
/>
|
||||||
<baseTitle title="申请文件"></baseTitle>
|
<div style="display: flex;align-items: center">
|
||||||
<file-upload @getFile="getFile"/>
|
<baseTitle title="申请文件" style="margin-right: 10px"></baseTitle>
|
||||||
|
<file-upload @getFile="getFile"/>
|
||||||
|
</div>
|
||||||
<fvTable style="width: 100%;max-height: 162px;" v-if="showTable"
|
<fvTable style="width: 100%;max-height: 162px;" v-if="showTable"
|
||||||
:tableConfig="tableConfig" height="162" :data="formData.files"
|
:tableConfig="tableConfig" height="162" :data="formData.files"
|
||||||
:isSettingCol="false" :pagination="false">
|
:isSettingCol="false" :pagination="false">
|
||||||
|
|||||||
@@ -2,22 +2,14 @@
|
|||||||
<div class="organization-layout">
|
<div class="organization-layout">
|
||||||
<div class="layout-left">
|
<div class="layout-left">
|
||||||
<div class="candidate" v-loading="loading">
|
<div class="candidate" v-loading="loading">
|
||||||
<el-form :model="queryType" @submit.prevent="getList">
|
<el-input v-model="filterText" clearable placeholder="输入公司或部门名称进行搜索" @input="searchOrganizateData" style="margin-bottom: 15px">
|
||||||
<el-form-item prop="dictName">
|
</el-input>
|
||||||
<el-input v-model="queryType.chooseName" @change="getList"
|
|
||||||
clearable placeholder="输入公司或部门名称进行搜索">
|
|
||||||
<template #append>
|
|
||||||
<el-button @click="getList">搜索</el-button>
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
<div class="tree scrollbar-dict">
|
<div class="tree scrollbar-dict">
|
||||||
<el-tree :data="dataList" ref="tree" :props="defaultProps" empty-text="" node-key="value"
|
<el-tree :data="dataList" ref="treeRef" :props="defaultProps" empty-text="" node-key="value"
|
||||||
:default-expanded-keys="expandedKeys" :lazy="true" :load="handleLoad"
|
:default-expanded-keys="expandedKeys"
|
||||||
@node-expand="handleNodeExpand" @node-click="handleClick"
|
:filter-node-method="filterNode"
|
||||||
>
|
@node-click="handleClick">
|
||||||
<template #default="{ node, data }">
|
<template #default="{ node, data }">
|
||||||
<div class="tree-node">
|
<div class="tree-node">
|
||||||
<div style="display: flex;align-items: center;padding: 3px 0;"
|
<div style="display: flex;align-items: center;padding: 3px 0;"
|
||||||
@@ -48,7 +40,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import SvgIcon from '@/components/svgIcon/index.vue'
|
import SvgIcon from '@/components/svgIcon/index.vue'
|
||||||
import {ElNotification} from "element-plus";
|
import {ElNotification} from "element-plus";
|
||||||
import {getOrganizationStructure} from "@/api/workflow/process-user";
|
import {getOrganizationStructure, getOrganizationStructureTree} from "@/api/workflow/process-user";
|
||||||
import DepartComponent from "@/components/organizationalStructure/Department.vue";
|
import DepartComponent from "@/components/organizationalStructure/Department.vue";
|
||||||
import CompanyDetail from "@/components/organizationalStructure/CompanyDetail.vue";
|
import CompanyDetail from "@/components/organizationalStructure/CompanyDetail.vue";
|
||||||
|
|
||||||
@@ -58,6 +50,7 @@ const queryType = reactive({
|
|||||||
const deptId = ref(0);
|
const deptId = ref(0);
|
||||||
const companyId = ref(0);
|
const companyId = ref(0);
|
||||||
const showDept = ref(false);
|
const showDept = ref(false);
|
||||||
|
const filterText = ref('')
|
||||||
const showCompany = ref(false);
|
const showCompany = ref(false);
|
||||||
let selectItem = reactive({
|
let selectItem = reactive({
|
||||||
type: -1,
|
type: -1,
|
||||||
@@ -65,7 +58,7 @@ let selectItem = reactive({
|
|||||||
});
|
});
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const dataList = ref([]);
|
const dataList = ref([]);
|
||||||
const tree = ref([]);
|
const treeRef = ref()
|
||||||
const selectNodeKey = ref("")
|
const selectNodeKey = ref("")
|
||||||
const expandedKeys = ref([]);
|
const expandedKeys = ref([]);
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
@@ -96,7 +89,7 @@ const getList = () => {
|
|||||||
type: -1,
|
type: -1,
|
||||||
value: "0"
|
value: "0"
|
||||||
};
|
};
|
||||||
getOrganizationStructure(params).then(res => {
|
getOrganizationStructureTree(params).then(res => {
|
||||||
dataList.value = res.data;
|
dataList.value = res.data;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -108,26 +101,38 @@ const init = () => {
|
|||||||
dataList.value = [];
|
dataList.value = [];
|
||||||
expandedKeys.value = [];
|
expandedKeys.value = [];
|
||||||
queryType.chooseName = ""
|
queryType.chooseName = ""
|
||||||
|
getList();
|
||||||
};
|
};
|
||||||
|
watch(filterText.value, (val) => {
|
||||||
|
treeRef.value.filter(val)
|
||||||
|
})
|
||||||
|
const searchOrganizateData=(val)=>{
|
||||||
|
treeRef.value.filter(val)
|
||||||
|
}
|
||||||
|
const filterNode = (value, data) => {
|
||||||
|
if (!value) return true
|
||||||
|
return data.organizationalStructureName.includes(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async function handleLoad(node, resolve, reject) {
|
async function handleLoad(node, resolve, reject) {
|
||||||
let data = node.data
|
// let data = node.data
|
||||||
let params
|
// let params
|
||||||
if (data.organizationalStructureId) {
|
// if (data.organizationalStructureId) {
|
||||||
params = {
|
// params = {
|
||||||
chooseId: data.organizationalStructureId,
|
// chooseId: data.organizationalStructureId,
|
||||||
type: data.type
|
// type: data.type
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
params = {
|
// params = {
|
||||||
chooseId: 0,
|
// chooseId: 0,
|
||||||
type: 0,
|
// type: 0,
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
let result = await getOrganizationStructure(params).then(res => {
|
// let result = await getOrganizationStructure(params).then(res => {
|
||||||
return res.data
|
// return res.data
|
||||||
})
|
// })
|
||||||
resolve(result)
|
// resolve(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleClick = (item, data) => {
|
const handleClick = (item, data) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user