Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -88,3 +88,4 @@ export const approvePlan= (data) => {
|
|||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-loading="loading">
|
<div v-loading="loading">
|
||||||
<fvForm :schema="schema" @getInstance="(e)=>form = e"></fvForm>
|
<fvForm :schema="schema" @getInstance="(e)=>form = e"></fvForm>
|
||||||
<el-form :model="formData" label-width="auto" style="margin-top: -15px">
|
<el-form :model="formData" label-width="auto" style="margin-top: -15px">
|
||||||
<file-component :title="getTagName(type)+'附件'" :tag="getTagName(type)"
|
<file-component :title="getTagName(type)+'附件'" :tag="getTagName(type)"
|
||||||
v-model:value="formData.fileList" :processViewer="processViewer"
|
v-model:value="formData.fileList" :processViewer="processViewer"
|
||||||
:file-list-show="fileListShow"/>
|
:file-list-show="fileListShow"/>
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="approval-record">
|
<div class="approval-record">
|
||||||
<div class="approval-title" style="margin-top: -15px">
|
<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>
|
||||||
<el-switch
|
<el-switch
|
||||||
@@ -89,6 +89,38 @@ const schema = computed(() => {
|
|||||||
let arr
|
let arr
|
||||||
if (props.type == 'approval') {
|
if (props.type == 'approval') {
|
||||||
arr = [
|
arr = [
|
||||||
|
{
|
||||||
|
label: '项目负责人',
|
||||||
|
prop: 'projectChargePerson',
|
||||||
|
colProps: {
|
||||||
|
span: 24
|
||||||
|
},
|
||||||
|
component: () => (
|
||||||
|
<div>
|
||||||
|
{
|
||||||
|
props.formData.projectChargePerson ?
|
||||||
|
<span>{props.formData.projectChargePerson.name} </span>
|
||||||
|
: <span>{'--'}</span>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '项目成员',
|
||||||
|
prop: 'projectPersonList',
|
||||||
|
colProps: {
|
||||||
|
span: 24
|
||||||
|
},
|
||||||
|
component: () => (
|
||||||
|
<div>
|
||||||
|
{
|
||||||
|
props.formData.projectPersonList ? props.formData.projectPersonList.map(item => {
|
||||||
|
return <span>{item.name} </span>
|
||||||
|
}) : <span>{'--'}</span>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '前置流程',
|
label: '前置流程',
|
||||||
prop: 'preProcess',
|
prop: 'preProcess',
|
||||||
|
|||||||
@@ -2,8 +2,34 @@
|
|||||||
<div class="apply-block">
|
<div class="apply-block">
|
||||||
<el-form :model="localFormData" ref="formRef" label-width="auto" :rules="rules" v-if="step!=='50'">
|
<el-form :model="localFormData" ref="formRef" label-width="auto" :rules="rules" v-if="step!=='50'">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="24">
|
||||||
<el-form-item label="前置流程" :required="preProcessRequired" prop="requestName" label-width="125">
|
<el-form-item label="项目负责人" :required="true" prop="projectChargePerson"
|
||||||
|
label-width="125">
|
||||||
|
<div v-for="item in projectChargePersonUserList" :key="item.id" style="margin-right: 5px">
|
||||||
|
{{ item.name }}
|
||||||
|
</div>
|
||||||
|
<el-button color="#DED0B2" @click="handleShowProjectChargePersonTable">
|
||||||
|
{{ localFormData.projectChargePerson ? '更改' : '请选择' }}
|
||||||
|
</el-button>
|
||||||
|
<user-picker :multiple="false" ref="projectChargePersonUserPicker" title="请选择项目负责人"
|
||||||
|
v-model:value="projectChargePersonUserList" @ok="projectChargePersonUserPickerOk"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="项目成员" :required="true" prop="projectPerson"
|
||||||
|
label-width="125">
|
||||||
|
<div v-for="item in projectPersonUserList" :key="item.id" style="margin-right: 5px">
|
||||||
|
{{ item.name }}
|
||||||
|
</div>
|
||||||
|
<el-button color="#DED0B2" @click="handleShowProjectPersonTable">
|
||||||
|
{{ localFormData.projectPersonIds ? '更改' : '请选择' }}
|
||||||
|
</el-button>
|
||||||
|
<user-picker :multiple="true" ref="projectPersonUserPicker" title="请选择项目成员"
|
||||||
|
v-model:value="projectPersonUserList" @ok="projectPersonUserPickerOk"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="前置流程" :required="preProcessRequired" prop="preProcess" label-width="125">
|
||||||
<div v-for="item in localFormData.preProcess" :key="item.requestId">
|
<div v-for="item in localFormData.preProcess" :key="item.requestId">
|
||||||
<a :href="item.baseUrl" target="_blank"
|
<a :href="item.baseUrl" target="_blank"
|
||||||
style="color: #2a99ff;margin-right: 10px;cursor: pointer">{{ item.requestName }}</a>
|
style="color: #2a99ff;margin-right: 10px;cursor: pointer">{{ item.requestName }}</a>
|
||||||
@@ -26,7 +52,7 @@
|
|||||||
<baseTitle title="审批记录" v-if="mode === 'resubmit'"></baseTitle>
|
<baseTitle title="审批记录" v-if="mode === 'resubmit'"></baseTitle>
|
||||||
<div v-else></div>
|
<div v-else></div>
|
||||||
<div class="diagram">
|
<div class="diagram">
|
||||||
<div class="base-title" >流程图</div>
|
<div class="base-title">流程图</div>
|
||||||
<el-switch
|
<el-switch
|
||||||
v-model="changeDiagram"
|
v-model="changeDiagram"
|
||||||
style="--el-switch-on-color:#BEA266 ; --el-switch-off-color:#cecdcd"
|
style="--el-switch-on-color:#BEA266 ; --el-switch-off-color:#cecdcd"
|
||||||
@@ -102,12 +128,17 @@ import {
|
|||||||
import {useProcessStore} from '@/stores/processStore.js';
|
import {useProcessStore} from '@/stores/processStore.js';
|
||||||
import {useTagsView} from '@/stores/tagsview.js'
|
import {useTagsView} from '@/stores/tagsview.js'
|
||||||
import Paging from "@/components/pagination/index.vue";
|
import Paging from "@/components/pagination/index.vue";
|
||||||
|
import UserPicker from "@/views/workflow/process/common/UserPicker.vue";
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const changeDiagram = ref(false)
|
const changeDiagram = ref(false)
|
||||||
const preProcessTable = ref()
|
const preProcessTable = ref()
|
||||||
const showSingleTable = ref(false)
|
const showSingleTable = ref(false)
|
||||||
|
const projectChargePersonUserList = ref()
|
||||||
|
const projectChargePersonUserPicker = ref()
|
||||||
|
const projectPersonUserList = ref([])
|
||||||
|
const projectPersonUserPicker = ref()
|
||||||
const singleList = ref([])
|
const singleList = ref([])
|
||||||
const emit = defineEmits(["getAttachment", "getOtherFile"])
|
const emit = defineEmits(["getAttachment", "getOtherFile"])
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -149,12 +180,16 @@ const pageInfo = reactive({
|
|||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
})
|
})
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
requestName: [{required: true, message: '请选择前置流程', trigger: 'blur'}],
|
preProcess: [{required: true, message: '请选择前置流程', trigger: 'blur'}],
|
||||||
|
projectChargePerson: [{required: true, message: '请选择项目负责人', trigger: 'blur'}],
|
||||||
|
projectPerson: [{required: true, message: '请选择项目成员', trigger: 'blur'}],
|
||||||
})
|
})
|
||||||
const tagsViewStore = useTagsView()
|
const tagsViewStore = useTagsView()
|
||||||
const processStore = useProcessStore()
|
const processStore = useProcessStore()
|
||||||
const otherFileList = ref([])
|
const otherFileList = ref([])
|
||||||
const localFormData = ref({
|
const localFormData = ref({
|
||||||
|
projectPersonIds: [],
|
||||||
|
projectChargePerson: null,
|
||||||
preProcess: [
|
preProcess: [
|
||||||
// {
|
// {
|
||||||
// requestId: null,
|
// requestId: null,
|
||||||
@@ -201,6 +236,26 @@ const handleShowPreTable = () => {
|
|||||||
showPreTable.value = true
|
showPreTable.value = true
|
||||||
getPreProcessList()
|
getPreProcessList()
|
||||||
}
|
}
|
||||||
|
const handleShowProjectChargePersonTable = () => {
|
||||||
|
projectChargePersonUserPicker.value.showUserPicker()
|
||||||
|
}
|
||||||
|
|
||||||
|
const projectChargePersonUserPickerOk = (userList) => {
|
||||||
|
projectChargePersonUserList.value = userList
|
||||||
|
localFormData.value.projectChargePerson = userList[0].id
|
||||||
|
}
|
||||||
|
const handleShowProjectPersonTable = () => {
|
||||||
|
projectPersonUserPicker.value.showUserPicker()
|
||||||
|
}
|
||||||
|
|
||||||
|
const projectPersonUserPickerOk = (userList) => {
|
||||||
|
projectPersonUserList.value = userList
|
||||||
|
let userIds = []
|
||||||
|
for (const user of userList) {
|
||||||
|
userIds.push(user.id)
|
||||||
|
}
|
||||||
|
localFormData.value.projectPersonIds = userIds
|
||||||
|
}
|
||||||
const getPreProcessList = () => {
|
const getPreProcessList = () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
getPreProcess().then(res => {
|
getPreProcess().then(res => {
|
||||||
@@ -278,9 +333,9 @@ const compositeParam = (item) => {
|
|||||||
}
|
}
|
||||||
const getAttachment = (val) => {
|
const getAttachment = (val) => {
|
||||||
// console.log('上传文件getAttachment', val)
|
// console.log('上传文件getAttachment', val)
|
||||||
showSingleTable.value=false
|
showSingleTable.value = false
|
||||||
localFormData.value.singleFile = compositeParam(val)
|
localFormData.value.singleFile = compositeParam(val)
|
||||||
singleList.value.push( compositeParam(val))
|
singleList.value.push(compositeParam(val))
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
showSingleTable.value = true
|
showSingleTable.value = true
|
||||||
})
|
})
|
||||||
@@ -349,6 +404,8 @@ const handleSubmit = async () => {
|
|||||||
fileList: files,
|
fileList: files,
|
||||||
singleFile: attachment.value.singleFile,
|
singleFile: attachment.value.singleFile,
|
||||||
projectId: projectId.value,
|
projectId: projectId.value,
|
||||||
|
projectChargePerson: localFormData.value.projectChargePerson,
|
||||||
|
projectPersonIds: localFormData.value.projectPersonIds,
|
||||||
preProcess: JSON.stringify(localFormData.value.preProcess)
|
preProcess: JSON.stringify(localFormData.value.preProcess)
|
||||||
}
|
}
|
||||||
// console.log('params', params)
|
// console.log('params', params)
|
||||||
@@ -430,7 +487,17 @@ const init = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
return Object.keys(props.formData).length && (localFormData.value = props.formData)
|
projectChargePersonUserList.value = [props.formData.projectChargePerson]
|
||||||
|
projectPersonUserList.value = props.formData.projectPersonList
|
||||||
|
let flag = Object.keys(props.formData).length && (localFormData.value = props.formData)
|
||||||
|
localFormData.value.projectChargePerson = props.formData.projectChargePerson.id
|
||||||
|
localFormData.value.projectPersonIds = []
|
||||||
|
if (projectPersonUserList.value){
|
||||||
|
projectPersonUserList.value.forEach(item => {
|
||||||
|
localFormData.value.projectPersonIds.push(item.id)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return flag
|
||||||
})
|
})
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await init()
|
await init()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="sys-name">科技创新项目管理平台</span>
|
|
||||||
<div class="toggle" @click="toggleClick">
|
<div class="toggle" @click="toggleClick">
|
||||||
<component :is="siderbarStore.getSiderBarStatus() ? 'Fold' : 'Expand'" class="icon"></component>
|
<component :is="siderbarStore.getSiderBarStatus() ? 'Fold' : 'Expand'" class="icon"></component>
|
||||||
</div>
|
</div>
|
||||||
|
<span class="sys-name">科技创新项目管理平台</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@@ -15,7 +15,7 @@ const toggleClick = () => {
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.sys-name {
|
.sys-name {
|
||||||
padding-left: 10px;
|
padding: 0 10px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
.toggle{
|
.toggle{
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ serveice.interceptors.response.use(response => {
|
|||||||
case 402:
|
case 402:
|
||||||
break;
|
break;
|
||||||
case 403:
|
case 403:
|
||||||
console.log(response)
|
|
||||||
ElNotification({
|
ElNotification({
|
||||||
title: '系统提示',
|
title: '系统提示',
|
||||||
message: response.data.msg,
|
message: response.data.msg,
|
||||||
|
|||||||
@@ -1,13 +1,27 @@
|
|||||||
<template>
|
<template>
|
||||||
<baseTitle title="年度计划"></baseTitle>
|
<baseTitle title="年度计划"></baseTitle>
|
||||||
<!-- <fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>-->
|
<fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>
|
||||||
<fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick" ></fvTable>
|
<fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick"></fvTable>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
|
import {deletePlan} from "@/api/project-demand/summary";
|
||||||
|
import {ElNotification} from "element-plus";
|
||||||
|
|
||||||
const tableIns = ref()
|
const tableIns = ref()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const searchConfig = ref([
|
||||||
|
{
|
||||||
|
label: '年度计划名称',
|
||||||
|
prop: 'annualPlanName',
|
||||||
|
component: 'el-input',
|
||||||
|
props: {
|
||||||
|
placeholder: '请输入',
|
||||||
|
clearable: true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
])
|
||||||
const tableConfig = reactive({
|
const tableConfig = reactive({
|
||||||
columns: [
|
columns: [
|
||||||
// {
|
// {
|
||||||
@@ -31,22 +45,24 @@ const tableConfig = reactive({
|
|||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
showOverflowTooltip: false,
|
showOverflowTooltip: false,
|
||||||
currentRender: ({row, index}) => {
|
currentRender: ({row, index}) => {
|
||||||
let btn = []
|
let perm = ['annual:plan:del']
|
||||||
btn.push({label: '详情', func: () => handleDetail(row), type: 'primary'})
|
|
||||||
return (
|
return (
|
||||||
<div style={{width: '100%'}}>
|
<div style={{width: '100%'}}>
|
||||||
{
|
<el-button
|
||||||
btn.map(item => (
|
type='primary'
|
||||||
<el-button
|
onClick={() => handleDetail(row)}
|
||||||
type={item.type}
|
link
|
||||||
// v-perm={item.prem}
|
>
|
||||||
onClick={() => item.func()}
|
详情
|
||||||
link
|
</el-button>
|
||||||
>
|
<el-button
|
||||||
{item.label}
|
type='danger'
|
||||||
</el-button>
|
v-perm={perm}
|
||||||
))
|
onClick={() => handleDelete(row)}
|
||||||
}
|
link
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -62,7 +78,13 @@ const headBtnClick = (key) => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const handleDetail=(row)=>{
|
const search = (val) => {
|
||||||
|
let obj = {...val}
|
||||||
|
tableConfig.params = obj
|
||||||
|
tableIns.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDetail = (row) => {
|
||||||
router.push({
|
router.push({
|
||||||
name: 'Plan/detail',
|
name: 'Plan/detail',
|
||||||
query: {
|
query: {
|
||||||
@@ -70,6 +92,16 @@ const handleDetail=(row)=>{
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const handleDelete = (row) => {
|
||||||
|
deletePlan(row.annualPlanId).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: res.msg,
|
||||||
|
type: res.code === 1000 ? 'success' : 'error'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-form :model="queryType">
|
<el-form :model="queryType">
|
||||||
<el-form-item prop="dictType">
|
<el-form-item prop="dictName">
|
||||||
<el-input v-model="queryType.dictType" placeholder="请输入字典类型" :suffix-icon="Search"
|
<el-input v-model="queryType.dictName" placeholder="请输入字典类型" :suffix-icon="Search"
|
||||||
clearable @clear="getTreeList" @input="getTreeList"></el-input>
|
clearable @clear="getTreeList" @input="getTreeList"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -230,7 +230,7 @@ const cacheStore = useCacheStore();
|
|||||||
cacheStore.setCacheKey(["normal_disable"]);
|
cacheStore.setCacheKey(["normal_disable"]);
|
||||||
//查询参数
|
//查询参数
|
||||||
const queryType = reactive({
|
const queryType = reactive({
|
||||||
dictType: ""
|
dictName: ""
|
||||||
});
|
});
|
||||||
//查询参数
|
//查询参数
|
||||||
const queryData = reactive({
|
const queryData = reactive({
|
||||||
|
|||||||
Reference in New Issue
Block a user