pull/480/head
parent
798041a328
commit
a0502af42c
|
|
@ -107,4 +107,10 @@ export const MainApi = {
|
||||||
getFundsListByApplyId: async (applyId) => {
|
getFundsListByApplyId: async (applyId) => {
|
||||||
return await request.get({ url: `/apply/main/funds/list-by-apply-id?applyId=` + applyId })
|
return await request.get({ url: `/apply/main/funds/list-by-apply-id?applyId=` + applyId })
|
||||||
},
|
},
|
||||||
|
getRecordList: async (params: any) => {
|
||||||
|
return await request.get({ url: `/apply/main/aduit/records?itmeId=` + params })
|
||||||
|
},
|
||||||
|
saveRecordList: async (data: any) => {
|
||||||
|
return await request.post({ url: `/apply/main/aduit`, data })
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -70,12 +70,12 @@ const dialogStyle = computed(() => {
|
||||||
:show-close="false"
|
:show-close="false"
|
||||||
>
|
>
|
||||||
<template #header="{ close }">
|
<template #header="{ close }">
|
||||||
<div class="relative h-54px flex items-center justify-between pl-15px pr-15px">
|
<div class="relative h-40px flex items-center justify-between pl-15px pr-15px">
|
||||||
<slot name="title">
|
<slot name="title">
|
||||||
{{ title }}
|
{{ title }}
|
||||||
</slot>
|
</slot>
|
||||||
<div
|
<div
|
||||||
class="absolute right-15px top-[50%] h-54px flex translate-y-[-50%] items-center justify-between"
|
class="absolute right-15px top-[50%] h-40px flex translate-y-[-50%] items-center justify-between"
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
v-if="fullscreen"
|
v-if="fullscreen"
|
||||||
|
|
@ -118,7 +118,7 @@ const dialogStyle = computed(() => {
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
|
|
||||||
&__header {
|
&__header {
|
||||||
height: 54px;
|
height: 40px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin-right: 0 !important;
|
margin-right: 0 !important;
|
||||||
border-bottom: 1px solid var(--el-border-color);
|
border-bottom: 1px solid var(--el-border-color);
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,7 @@ export default {
|
||||||
happyDay: '祝你开心每一天!',
|
happyDay: '祝你开心每一天!',
|
||||||
toady: '今日晴',
|
toady: '今日晴',
|
||||||
notice: '通知公告',
|
notice: '通知公告',
|
||||||
project: '项目数',
|
project: '站内通知',
|
||||||
access: '项目访问',
|
access: '项目访问',
|
||||||
toDo: '待办',
|
toDo: '待办',
|
||||||
introduction: '一个正经的简介',
|
introduction: '一个正经的简介',
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,31 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never" class="mt-8px">
|
||||||
|
<template #header>
|
||||||
|
<div class="h-3 flex justify-between">
|
||||||
|
<span>{{ t('workplace.notice') }}</span>
|
||||||
|
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<el-skeleton :loading="loading" animated>
|
<el-skeleton :loading="loading" animated>
|
||||||
<el-row :gutter="16" justify="space-between">
|
<div v-for="(item, index) in notice" :key="`dynamics-${index}`">
|
||||||
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<el-avatar :src="avatar" :size="35" class="mr-16px">
|
||||||
<el-avatar :src="avatar" :size="70" class="mr-16px">
|
<img src="@/assets/imgs/avatar.gif" alt="" />
|
||||||
<img src="@/assets/imgs/avatar.gif" alt="" />
|
</el-avatar>
|
||||||
</el-avatar>
|
<div>
|
||||||
<div>
|
<div class="text-14px">
|
||||||
<div class="text-20px">
|
<Highlight :keys="item.keys.map((v) => t(v))">
|
||||||
{{ t('workplace.welcome') }} {{ username }} {{ t('workplace.happyDay') }}
|
{{ item.type }} : {{ item.title }}
|
||||||
</div>
|
</Highlight>
|
||||||
<div class="mt-10px text-14px text-gray-500">
|
</div>
|
||||||
{{ t('workplace.toady') }},20℃ - 32℃!
|
<div class="mt-16px text-12px text-gray-400">
|
||||||
</div>
|
{{ formatTime(item.date, 'yyyy-MM-dd') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
|
<el-divider />
|
||||||
<div class="h-70px flex items-center justify-end lt-sm:mt-10px">
|
</div>
|
||||||
<div class="px-8px text-right">
|
|
||||||
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.project') }}</div>
|
|
||||||
<CountTo
|
|
||||||
class="text-20px"
|
|
||||||
:start-val="0"
|
|
||||||
:end-val="totalSate.project"
|
|
||||||
:duration="2600"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<el-divider direction="vertical" />
|
|
||||||
<div class="px-8px text-right">
|
|
||||||
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.toDo') }}</div>
|
|
||||||
<CountTo
|
|
||||||
class="text-20px"
|
|
||||||
:start-val="0"
|
|
||||||
:end-val="totalSate.todo"
|
|
||||||
:duration="2600"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<el-divider direction="vertical" border-style="dashed" />
|
|
||||||
<div class="px-8px text-right">
|
|
||||||
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.access') }}</div>
|
|
||||||
<CountTo
|
|
||||||
class="text-20px"
|
|
||||||
:start-val="0"
|
|
||||||
:end-val="totalSate.access"
|
|
||||||
:duration="2600"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-skeleton>
|
</el-skeleton>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -61,103 +35,59 @@
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="h-3 flex justify-between">
|
<div class="h-3 flex justify-between">
|
||||||
<span>{{ t('workplace.project') }}</span>
|
<span>{{ t('workplace.toDo') }}</span>
|
||||||
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
|
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-skeleton :loading="loading" animated>
|
<el-skeleton :loading="loading" animated>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col
|
<el-col v-for="item in TodoList" :key="`team-${item.name}`" :span="6" class="mb-8px">
|
||||||
v-for="(item, index) in projects"
|
|
||||||
:key="`card-${index}`"
|
<div class="flex flex-col items-center">
|
||||||
:xl="8"
|
<el-badge :value="12" class="item">
|
||||||
:lg="8"
|
<Icon :icon="item.icon" :size="40" />
|
||||||
:md="8"
|
</el-badge>
|
||||||
:sm="24"
|
|
||||||
:xs="24"
|
<div class="mb-8px"> {{ item.name }}</div>
|
||||||
>
|
<!-- <el-link type="default" :underline="false">
|
||||||
<el-card shadow="hover">
|
{{ item.name }}
|
||||||
<div class="flex items-center">
|
</el-link> -->
|
||||||
<Icon :icon="item.icon" :size="25" class="mr-8px" />
|
</div>
|
||||||
<span class="text-16px">{{ item.name }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="mt-16px text-14px text-gray-400">{{ t(item.message) }}</div>
|
|
||||||
<div class="mt-16px flex justify-between text-12px text-gray-400">
|
|
||||||
<span>{{ item.personal }}</span>
|
|
||||||
<span>{{ formatTime(item.time, 'yyyy-MM-dd') }}</span>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-skeleton>
|
</el-skeleton>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="never" class="mt-8px">
|
|
||||||
<el-skeleton :loading="loading" animated>
|
|
||||||
<el-row :gutter="20" justify="space-between">
|
|
||||||
<el-col :xl="10" :lg="10" :md="24" :sm="24" :xs="24">
|
|
||||||
<el-card shadow="hover" class="mb-8px">
|
|
||||||
<el-skeleton :loading="loading" animated>
|
|
||||||
<Echart :options="pieOptionsData" :height="280" />
|
|
||||||
</el-skeleton>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<el-col :xl="14" :lg="14" :md="24" :sm="24" :xs="24">
|
|
||||||
<el-card shadow="hover" class="mb-8px">
|
|
||||||
<el-skeleton :loading="loading" animated>
|
|
||||||
<Echart :options="barOptionsData" :height="280" />
|
|
||||||
</el-skeleton>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-skeleton>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xl="8" :lg="8" :md="24" :sm="24" :xs="24" class="mb-8px">
|
<el-col :xl="8" :lg="8" :md="24" :sm="24" :xs="24" class="mb-8px">
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="h-3 flex justify-between">
|
<div class="h-3 flex justify-between">
|
||||||
<span>{{ t('workplace.shortcutOperation') }}</span>
|
<span>{{ t('workplace.project') }}</span>
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<el-skeleton :loading="loading" animated>
|
|
||||||
<el-row>
|
|
||||||
<el-col v-for="item in shortcut" :key="`team-${item.name}`" :span="8" class="mb-8px">
|
|
||||||
<div class="flex items-center">
|
|
||||||
<Icon :icon="item.icon" class="mr-8px" />
|
|
||||||
<el-link type="default" :underline="false" @click="setWatermark(item.name)">
|
|
||||||
{{ item.name }}
|
|
||||||
</el-link>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-skeleton>
|
|
||||||
</el-card>
|
|
||||||
<el-card shadow="never" class="mt-8px">
|
|
||||||
<template #header>
|
|
||||||
<div class="h-3 flex justify-between">
|
|
||||||
<span>{{ t('workplace.notice') }}</span>
|
|
||||||
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
|
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-skeleton :loading="loading" animated>
|
<el-skeleton :loading="loading" animated>
|
||||||
<div v-for="(item, index) in notice" :key="`dynamics-${index}`">
|
<div v-for="(item, index) in message" :key="`dynamics-${index}`">
|
||||||
<div class="flex items-center">
|
<div class="flex justify-between ">
|
||||||
<el-avatar :src="avatar" :size="35" class="mr-16px">
|
<div class="text-14px">
|
||||||
<img src="@/assets/imgs/avatar.gif" alt="" />
|
<Highlight :keys="item.keys.map((v) => t(v))">
|
||||||
</el-avatar>
|
{{ item.type }} : {{ item.title }}
|
||||||
<div>
|
</Highlight>
|
||||||
<div class="text-14px">
|
|
||||||
<Highlight :keys="item.keys.map((v) => t(v))">
|
|
||||||
{{ item.type }} : {{ item.title }}
|
|
||||||
</Highlight>
|
|
||||||
</div>
|
|
||||||
<div class="mt-16px text-12px text-gray-400">
|
|
||||||
{{ formatTime(item.date, 'yyyy-MM-dd') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class=" text-12px text-gray-400">
|
||||||
|
{{ formatTime(item.date, 'yyyy-MM-dd') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<el-divider />
|
<div style="display: block;
|
||||||
|
height: 1px;
|
||||||
|
width: 100%;
|
||||||
|
margin: 14px 0;
|
||||||
|
border-top: 1px var(--el-border-color) var(--el-border-style);"></div>
|
||||||
</div>
|
</div>
|
||||||
</el-skeleton>
|
</el-skeleton>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
@ -165,127 +95,56 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { set } from 'lodash-es'
|
|
||||||
import { EChartsOption } from 'echarts'
|
|
||||||
import { formatTime } from '@/utils'
|
import { formatTime } from '@/utils'
|
||||||
|
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { useWatermark } from '@/hooks/web/useWatermark'
|
import type { TodoList, Notice, Message } from './types'
|
||||||
import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
|
|
||||||
import { pieOptions, barOptions } from './echarts-data'
|
|
||||||
|
|
||||||
defineOptions({ name: 'Home' })
|
defineOptions({ name: 'Home' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const { setWatermark } = useWatermark()
|
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const avatar = userStore.getUser.avatar
|
const avatar = userStore.getUser.avatar
|
||||||
const username = userStore.getUser.nickname
|
|
||||||
const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption
|
|
||||||
// 获取统计数
|
|
||||||
let totalSate = reactive<WorkplaceTotal>({
|
|
||||||
project: 0,
|
|
||||||
access: 0,
|
|
||||||
todo: 0
|
|
||||||
})
|
|
||||||
|
|
||||||
const getCount = async () => {
|
|
||||||
const data = {
|
|
||||||
project: 40,
|
|
||||||
access: 2340,
|
|
||||||
todo: 10
|
|
||||||
}
|
|
||||||
totalSate = Object.assign(totalSate, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取项目数
|
// 获取代办
|
||||||
let projects = reactive<Project[]>([])
|
let TodoList = reactive<TodoList[]>([])
|
||||||
const getProject = async () => {
|
const getTodoList = async () => {
|
||||||
const data = [
|
const data = [
|
||||||
{
|
{
|
||||||
name: 'Github',
|
name: 'Github',
|
||||||
icon: 'akar-icons:github-fill',
|
icon: 'akar-icons:github-fill',
|
||||||
message: 'workplace.introduction',
|
url: 'github.io'
|
||||||
personal: 'Archer',
|
|
||||||
time: new Date()
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Vue',
|
name: 'Vue',
|
||||||
icon: 'logos:vue',
|
icon: 'logos:vue',
|
||||||
message: 'workplace.introduction',
|
url: 'vuejs.org'
|
||||||
personal: 'Archer',
|
|
||||||
time: new Date()
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Angular',
|
|
||||||
icon: 'logos:angular-icon',
|
|
||||||
message: 'workplace.introduction',
|
|
||||||
personal: 'Archer',
|
|
||||||
time: new Date()
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'React',
|
|
||||||
icon: 'logos:react',
|
|
||||||
message: 'workplace.introduction',
|
|
||||||
personal: 'Archer',
|
|
||||||
time: new Date()
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Webpack',
|
|
||||||
icon: 'logos:webpack',
|
|
||||||
message: 'workplace.introduction',
|
|
||||||
personal: 'Archer',
|
|
||||||
time: new Date()
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Vite',
|
name: 'Vite',
|
||||||
icon: 'vscode-icons:file-type-vite',
|
icon: 'vscode-icons:file-type-vite',
|
||||||
message: 'workplace.introduction',
|
url: 'https://vitejs.dev/'
|
||||||
personal: 'Archer',
|
|
||||||
time: new Date()
|
|
||||||
}
|
|
||||||
]
|
|
||||||
projects = Object.assign(projects, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取通知公告
|
|
||||||
let notice = reactive<Notice[]>([])
|
|
||||||
const getNotice = async () => {
|
|
||||||
const data = [
|
|
||||||
{
|
|
||||||
title: '系统升级版本',
|
|
||||||
type: '通知',
|
|
||||||
keys: ['通知', '升级'],
|
|
||||||
date: new Date()
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '系统凌晨维护',
|
name: 'Angular',
|
||||||
type: '公告',
|
icon: 'logos:angular-icon',
|
||||||
keys: ['公告', '维护'],
|
url: 'github.io'
|
||||||
date: new Date()
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '系统升级版本',
|
name: 'React',
|
||||||
type: '通知',
|
icon: 'logos:react',
|
||||||
keys: ['通知', '升级'],
|
url: 'github.io'
|
||||||
date: new Date()
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '系统凌晨维护',
|
name: 'Webpack',
|
||||||
type: '公告',
|
icon: 'logos:webpack',
|
||||||
keys: ['公告', '维护'],
|
url: 'github.io'
|
||||||
date: new Date()
|
},
|
||||||
}
|
|
||||||
]
|
|
||||||
notice = Object.assign(notice, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取快捷入口
|
|
||||||
let shortcut = reactive<Shortcut[]>([])
|
|
||||||
|
|
||||||
const getShortcut = async () => {
|
|
||||||
const data = [
|
|
||||||
{
|
{
|
||||||
name: 'Github',
|
name: 'Github',
|
||||||
icon: 'akar-icons:github-fill',
|
icon: 'akar-icons:github-fill',
|
||||||
|
|
@ -317,65 +176,79 @@ const getShortcut = async () => {
|
||||||
url: 'github.io'
|
url: 'github.io'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
shortcut = Object.assign(shortcut, data)
|
TodoList = Object.assign(TodoList, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用户来源
|
|
||||||
const getUserAccessSource = async () => {
|
|
||||||
const data = [
|
|
||||||
{ value: 335, name: 'analysis.directAccess' },
|
|
||||||
{ value: 310, name: 'analysis.mailMarketing' },
|
|
||||||
{ value: 234, name: 'analysis.allianceAdvertising' },
|
|
||||||
{ value: 135, name: 'analysis.videoAdvertising' },
|
|
||||||
{ value: 1548, name: 'analysis.searchEngines' }
|
|
||||||
]
|
|
||||||
set(
|
|
||||||
pieOptionsData,
|
|
||||||
'legend.data',
|
|
||||||
data.map((v) => t(v.name))
|
|
||||||
)
|
|
||||||
pieOptionsData!.series![0].data = data.map((v) => {
|
|
||||||
return {
|
|
||||||
name: t(v.name),
|
|
||||||
value: v.value
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const barOptionsData = reactive<EChartsOption>(barOptions) as EChartsOption
|
|
||||||
|
|
||||||
// 周活跃量
|
// 获取通知公告
|
||||||
const getWeeklyUserActivity = async () => {
|
let notice = reactive<Notice[]>([])
|
||||||
|
const getNotice = async () => {
|
||||||
const data = [
|
const data = [
|
||||||
{ value: 13253, name: 'analysis.monday' },
|
|
||||||
{ value: 34235, name: 'analysis.tuesday' },
|
|
||||||
{ value: 26321, name: 'analysis.wednesday' },
|
|
||||||
{ value: 12340, name: 'analysis.thursday' },
|
|
||||||
{ value: 24643, name: 'analysis.friday' },
|
|
||||||
{ value: 1322, name: 'analysis.saturday' },
|
|
||||||
{ value: 1324, name: 'analysis.sunday' }
|
|
||||||
]
|
|
||||||
set(
|
|
||||||
barOptionsData,
|
|
||||||
'xAxis.data',
|
|
||||||
data.map((v) => t(v.name))
|
|
||||||
)
|
|
||||||
set(barOptionsData, 'series', [
|
|
||||||
{
|
{
|
||||||
name: t('analysis.activeQuantity'),
|
title: '系统升级版本',
|
||||||
data: data.map((v) => v.value),
|
type: '通知',
|
||||||
type: 'bar'
|
keys: ['通知', '升级'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '系统凌晨维护',
|
||||||
|
type: '公告',
|
||||||
|
keys: ['公告', '维护'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '系统升级版本',
|
||||||
|
type: '通知',
|
||||||
|
keys: ['通知', '升级'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
]
|
||||||
|
notice = Object.assign(notice, data)
|
||||||
|
}
|
||||||
|
//获取通知
|
||||||
|
let message = reactive<Message[]>([])
|
||||||
|
|
||||||
|
const getMsg = async () => {
|
||||||
|
const data = [
|
||||||
|
{
|
||||||
|
title: '测试1',
|
||||||
|
type: '通知',
|
||||||
|
keys: ['通知', '升级'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '测试1',
|
||||||
|
type: '通知',
|
||||||
|
keys: ['通知'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '测试1',
|
||||||
|
type: '通知',
|
||||||
|
keys: ['通知', '升级'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '测试1',
|
||||||
|
type: '通知',
|
||||||
|
keys: ['通知', '升级'],
|
||||||
|
date: new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '测试1',
|
||||||
|
type: '通知',
|
||||||
|
keys: ['通知'],
|
||||||
|
date: new Date()
|
||||||
}
|
}
|
||||||
])
|
]
|
||||||
|
message = Object.assign(message, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllApi = async () => {
|
const getAllApi = async () => {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
getCount(),
|
getTodoList(),
|
||||||
getProject(),
|
|
||||||
getNotice(),
|
getNotice(),
|
||||||
getShortcut(),
|
getMsg()
|
||||||
getUserAccessSource(),
|
|
||||||
getWeeklyUserActivity()
|
|
||||||
])
|
])
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,13 @@ export type Notice = {
|
||||||
keys: string[]
|
keys: string[]
|
||||||
date: Date | number | string
|
date: Date | number | string
|
||||||
}
|
}
|
||||||
|
export type Message = {
|
||||||
export type Shortcut = {
|
title: string
|
||||||
|
type: string
|
||||||
|
keys: string[]
|
||||||
|
date: Date | number | string
|
||||||
|
}
|
||||||
|
export type TodoList = {
|
||||||
name: string
|
name: string
|
||||||
icon: string
|
icon: string
|
||||||
url: string
|
url: string
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@
|
||||||
<legend>基本信息</legend>
|
<legend>基本信息</legend>
|
||||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
|
|
||||||
<el-form-item label="编号" prop="number">
|
<el-form-item label="编号" prop="number">
|
||||||
<el-input v-model="formData.number" placeholder="请输入编号" />
|
<el-input v-model="formData.number" placeholder="请输入编号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="项目名称" prop="name">
|
<el-form-item label="项目名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入项目名称" />
|
<el-input v-model="formData.name" placeholder="请输入项目名称" />
|
||||||
|
|
@ -20,30 +20,28 @@
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="所属技术领域" prop="technicalField">
|
<el-form-item label="所属技术领域" prop="technicalField">
|
||||||
<el-select v-model="formData.technicalField" clearable placeholder="请选择所属技术领域">
|
<el-select v-model="formData.technicalField" clearable placeholder="请选择所属技术领域">
|
||||||
<el-option
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TECHNICAL_FIELD)" :key="dict.value"
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.TECHNICAL_FIELD)"
|
:label="dict.label" :value="dict.value" />
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="年度" prop="year">
|
<el-form-item label="年度" prop="year">
|
||||||
<el-input v-model="formData.year" placeholder="请输入年度" />
|
<el-input v-model="formData.year" placeholder="请输入年度" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col> -->
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="开始时间" prop="beginDate">
|
<el-form-item label="开始时间" prop="beginDate">
|
||||||
<el-date-picker v-model="formData.beginDate" type="date" value-format="x" placeholder="选择开始时间" style="width:100%"/>
|
<el-date-picker v-model="formData.beginDate" type="date" value-format="x" placeholder="选择开始时间"
|
||||||
|
style="width:100%" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="结束时间" prop="endData">
|
<el-form-item label="结束时间" prop="endData">
|
||||||
<el-date-picker v-model="formData.endData" type="date" value-format="x" placeholder="请输入结束时间" style="width:100%"/>
|
<el-date-picker v-model="formData.endData" type="date" value-format="x" placeholder="请输入结束时间"
|
||||||
|
style="width:100%" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="负责人Id" prop="directorId">
|
<el-form-item label="负责人Id" prop="directorId">
|
||||||
<el-input v-model="formData.directorId" placeholder="请输入负责人Id" />
|
<el-input v-model="formData.directorId" placeholder="请输入负责人Id" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col> -->
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="负责人姓名" prop="director">
|
<el-form-item label="负责人姓名" prop="director">
|
||||||
<el-input v-model="formData.director" placeholder="请输入负责人姓名" />
|
<el-input v-model="formData.director" placeholder="请输入负责人姓名" />
|
||||||
|
|
@ -59,34 +57,22 @@
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="学历" prop="education">
|
<el-form-item label="学历" prop="education">
|
||||||
<el-select v-model="formData.education" clearable placeholder="请选择学历">
|
<el-select v-model="formData.education" clearable placeholder="请选择学历">
|
||||||
<el-option
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_EDUCATION)" :key="dict.value"
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_EDUCATION)"
|
:label="dict.label" :value="dict.value" />
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="所学专业" prop="major">
|
<el-form-item label="所学专业" prop="major">
|
||||||
<el-select v-model="formData.major" clearable placeholder="请选择所学专业">
|
<el-select v-model="formData.major" clearable placeholder="请选择所学专业">
|
||||||
<el-option
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)" :key="dict.value"
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)"
|
:label="dict.label" :value="dict.value" />
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="从事专业" prop="engagMajor">
|
<el-form-item label="从事专业" prop="engagMajor">
|
||||||
<el-select v-model="formData.engagMajor" clearable placeholder="请选择从事专业">
|
<el-select v-model="formData.engagMajor" clearable placeholder="请选择从事专业">
|
||||||
<el-option
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)" :key="dict.value"
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)"
|
:label="dict.label" :value="dict.value" />
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
|
|
@ -113,11 +99,11 @@
|
||||||
<el-form-item label="通讯地址" prop="address">
|
<el-form-item label="通讯地址" prop="address">
|
||||||
<el-input v-model="formData.address" placeholder="请输入通讯地址" />
|
<el-input v-model="formData.address" placeholder="请输入通讯地址" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="24" :md="24" :lg="24">
|
||||||
<el-form-item label="主要业绩" prop="achievement">
|
<el-form-item label="主要业绩" prop="achievement">
|
||||||
<el-input v-model="formData.achievement" placeholder="请输入主要业绩" />
|
<el-input v-model="formData.achievement" placeholder="请输入主要业绩" type="textarea" :rows="4"/>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
|
|
@ -167,7 +153,8 @@
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="创建时间" prop="createTime">
|
<el-form-item label="创建时间" prop="createTime">
|
||||||
<el-date-picker v-model="formData.createTime" type="date" value-format="x" placeholder="选择创建时间" style="width:100%"/>
|
<el-date-picker v-model="formData.createTime" type="date" value-format="x" placeholder="选择创建时间"
|
||||||
|
style="width:100%" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="更新人" prop="updater">
|
<el-form-item label="更新人" prop="updater">
|
||||||
|
|
@ -175,13 +162,14 @@
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="更新时间" prop="updateTime">
|
<el-form-item label="更新时间" prop="updateTime">
|
||||||
<el-date-picker v-model="formData.updateTime" type="date" value-format="x" placeholder="选择更新时间" style="width:100%"/>
|
<el-date-picker v-model="formData.updateTime" type="date" value-format="x" placeholder="选择更新时间"
|
||||||
|
style="width:100%" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||||
<el-form-item label="是否删除" prop="deleted">
|
<el-form-item label="是否删除" prop="deleted">
|
||||||
<el-input v-model="formData.deleted" placeholder="请输入是否删除" />
|
<el-input v-model="formData.deleted" placeholder="请输入是否删除" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
@ -215,7 +203,7 @@ import UnitsForm from './components/UnitsForm.vue'
|
||||||
import ParticipantForm from './components/ParticipantForm.vue'
|
import ParticipantForm from './components/ParticipantForm.vue'
|
||||||
import PlanForm from './components/PlanForm.vue'
|
import PlanForm from './components/PlanForm.vue'
|
||||||
import FundsForm from './components/FundsForm.vue'
|
import FundsForm from './components/FundsForm.vue'
|
||||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
import { DICT_TYPE, getIntDictOptions } from "@/utils/dict";
|
||||||
|
|
||||||
/** 立项申请主 表单 */
|
/** 立项申请主 表单 */
|
||||||
defineOptions({ name: 'MainForm' })
|
defineOptions({ name: 'MainForm' })
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,51 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-position="top">
|
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="180px">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>项目信息</legend>
|
<legend>项目信息</legend>
|
||||||
<el-form-item label="项目目的与意义" prop="purposeSignificance">
|
<el-row :gutter="20">
|
||||||
<el-input v-model="formData.purposeSignificance" placeholder="请输入项目目的与意义" type="textarea" />
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
</el-form-item>
|
<el-form-item label="项目目的与意义" prop="purposeSignificance">
|
||||||
<el-form-item label="项目所属领域国内外产业、技术的现状和发展趋势" prop="currentSituation">
|
<el-input v-model="formData.purposeSignificance" placeholder="请输入项目目的与意义" type="textarea" :rows="6" />
|
||||||
<el-input v-model="formData.currentSituation" placeholder="请输入项目所属领域国内外产业、技术的现状和发展趋势" type="textarea" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="项目现有工作基础" prop="workFoundation">
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
<el-input v-model="formData.workFoundation" placeholder="请输入项目现有工作基础" type="textarea" />
|
<el-form-item label="项目所属领域国内外产业、技术的现状和发展趋势" prop="currentSituation">
|
||||||
</el-form-item>
|
<el-input v-model="formData.currentSituation" placeholder="请输入项目所属领域国内外产业、技术的现状和发展趋势" type="textarea" :rows="6" />
|
||||||
<el-form-item label="项目实施目标及考核指标-项目目标" prop="objectives">
|
</el-form-item> </el-col>
|
||||||
<el-input v-model="formData.objectives" placeholder="请输入项目实施目标及考核指标-项目目标" type="textarea" />
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
</el-form-item>
|
<el-form-item label="项目现有工作基础" prop="workFoundation">
|
||||||
<el-form-item label="项目实施目标及考核指标-考核指标" prop="evaluation">
|
<el-input v-model="formData.workFoundation" placeholder="请输入项目现有工作基础" type="textarea" :rows="6" />
|
||||||
<el-input v-model="formData.evaluation" placeholder="请输入项目实施目标及考核指标-考核指标" type="textarea" />
|
</el-form-item> </el-col>
|
||||||
</el-form-item>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
<el-form-item label="项目实施目标及考核指标-考核指标依据" prop="according">
|
<el-form-item label="项目实施目标及考核指标-项目目标" prop="objectives">
|
||||||
<el-input v-model="formData.according" placeholder="请输入项目实施目标及考核指标-考核指标依据" type="textarea" />
|
<el-input v-model="formData.objectives" placeholder="请输入项目实施目标及考核指标-项目目标" type="textarea" :rows="6" />
|
||||||
</el-form-item>
|
</el-form-item> </el-col>
|
||||||
<el-form-item label="主要研究开发内容-主要研究内容" prop="researchContents">
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
<el-input v-model="formData.researchContents" placeholder="请输入主要研究开发内容-主要研究内容" type="textarea" />
|
<el-form-item label="项目实施目标及考核指标-考核指标" prop="evaluation">
|
||||||
</el-form-item>
|
<el-input v-model="formData.evaluation" placeholder="请输入项目实施目标及考核指标-考核指标" type="textarea" :rows="6" />
|
||||||
<el-form-item label="主要研究开发内容-技术路线" prop="roadmap">
|
</el-form-item> </el-col>
|
||||||
<el-input v-model="formData.roadmap" placeholder="请输入主要研究开发内容-技术路线" type="textarea" />
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
</el-form-item>
|
<el-form-item label="项目实施目标及考核指标-考核指标依据" prop="according">
|
||||||
<el-form-item label="主要研究开发内容-创新性" prop="innovation">
|
<el-input v-model="formData.according" placeholder="请输入项目实施目标及考核指标-考核指标依据" type="textarea" :rows="6" />
|
||||||
<el-input v-model="formData.innovation" placeholder="请输入主要研究开发内容-创新性" type="textarea" />
|
</el-form-item> </el-col>
|
||||||
</el-form-item>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
<el-form-item label="课题实施的风险分析" prop="riskAnalysis">
|
<el-form-item label="主要研究开发内容-主要研究内容" prop="researchContents">
|
||||||
<el-input v-model="formData.riskAnalysis" placeholder="请输入课题实施的风险分析" type="textarea" />
|
<el-input v-model="formData.researchContents" placeholder="请输入主要研究开发内容-主要研究内容" type="textarea" :rows="6" />
|
||||||
</el-form-item>
|
</el-form-item> </el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
|
<el-form-item label="主要研究开发内容-技术路线" prop="roadmap">
|
||||||
|
<el-input v-model="formData.roadmap" placeholder="请输入主要研究开发内容-技术路线" type="textarea" :rows="6" />
|
||||||
|
</el-form-item> </el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
|
<el-form-item label="主要研究开发内容-创新性" prop="innovation">
|
||||||
|
<el-input v-model="formData.innovation" placeholder="请输入主要研究开发内容-创新性" type="textarea" :rows="6" />
|
||||||
|
</el-form-item> </el-col>
|
||||||
|
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||||
|
<el-form-item label="课题实施的风险分析" prop="riskAnalysis">
|
||||||
|
<el-input v-model="formData.riskAnalysis" placeholder="请输入课题实施的风险分析" type="textarea" :rows="6" />
|
||||||
|
</el-form-item> </el-col>
|
||||||
|
|
||||||
|
</el-row>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,14 @@
|
||||||
:inline-message="true"
|
:inline-message="true"
|
||||||
>
|
>
|
||||||
<el-table :data="formData" class="-mt-10px">
|
<el-table :data="formData" class="-mt-10px">
|
||||||
<el-table-column label="序号" type="index" width="100" />
|
<!-- <el-table-column label="序号" type="index" width="100" /> -->
|
||||||
|
<el-table-column label="排序号" min-width="150">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.orderNo`" :rules="formRules.orderNo" class="mb-0px!">
|
||||||
|
<el-input v-model="row.orderNo" placeholder="请输入排序号" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="姓名" min-width="150">
|
<el-table-column label="姓名" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
|
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
|
||||||
|
|
@ -72,14 +79,8 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="排序号" min-width="150">
|
|
||||||
<template #default="{ row, $index }">
|
<!-- <el-table-column label="创建人" min-width="150">
|
||||||
<el-form-item :prop="`${$index}.orderNo`" :rules="formRules.orderNo" class="mb-0px!">
|
|
||||||
<el-input v-model="row.orderNo" placeholder="请输入排序号" />
|
|
||||||
</el-form-item>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="创建人" min-width="150">
|
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
|
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
|
||||||
<el-input v-model="row.creator" placeholder="请输入创建人" />
|
<el-input v-model="row.creator" placeholder="请输入创建人" />
|
||||||
|
|
@ -116,7 +117,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||||
<template #default="{ $index }">
|
<template #default="{ $index }">
|
||||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||||
|
|
|
||||||
|
|
@ -14,21 +14,25 @@
|
||||||
<el-form-item :prop="`${$index}.implDate`" :rules="formRules.implDate" class="mb-0px!">
|
<el-form-item :prop="`${$index}.implDate`" :rules="formRules.implDate" class="mb-0px!">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="row.implDate"
|
v-model="row.implDate"
|
||||||
type="date"
|
|
||||||
value-format="x"
|
value-format="x"
|
||||||
|
type="datetimerange"
|
||||||
placeholder="选择时间"
|
placeholder="选择时间"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="实施内容" min-width="400">
|
<el-table-column label="实施内容" min-width="400">
|
||||||
|
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.implContent`" :rules="formRules.implContent" class="mb-0px!">
|
<el-form-item :prop="`${$index}.name`" :rules="formRules.implContent" class="mb-0px!">
|
||||||
<Editor v-model="row.implContent" height="150px" />
|
<el-input v-model="row.implContent" placeholder="请输入实施内容" type="textarea" :rows="6"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!-- <el-form-item :prop="`${$index}.implContent`" :rules="formRules.implContent" class="mb-0px!">
|
||||||
|
<Editor v-model="row.implContent" height="150px" />
|
||||||
|
</el-form-item> -->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人" min-width="150">
|
<!-- <el-table-column label="创建人" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
|
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
|
||||||
<el-input v-model="row.creator" placeholder="请输入创建人" />
|
<el-input v-model="row.creator" placeholder="请输入创建人" />
|
||||||
|
|
@ -65,7 +69,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||||
<template #default="{ $index }">
|
<template #default="{ $index }">
|
||||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,20 @@
|
||||||
:inline-message="true"
|
:inline-message="true"
|
||||||
>
|
>
|
||||||
<el-table :data="formData" class="-mt-10px">
|
<el-table :data="formData" class="-mt-10px">
|
||||||
<el-table-column label="序号" type="index" width="100" />
|
<!-- <el-table-column label="序号" type="index" width="100" /> -->
|
||||||
<el-table-column label="单位ID" min-width="150">
|
<!-- <el-table-column label="单位ID" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.deptId`" :rules="formRules.deptId" class="mb-0px!">
|
<el-form-item :prop="`${$index}.deptId`" :rules="formRules.deptId" class="mb-0px!">
|
||||||
<el-input v-model="row.deptId" placeholder="请输入单位ID" />
|
<el-input v-model="row.deptId" placeholder="请输入单位ID" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
|
</el-table-column> -->
|
||||||
|
<el-table-column label="排序号" min-width="150">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.orderNo`" :rules="formRules.orderNo" class="mb-0px!">
|
||||||
|
<el-input v-model="row.orderNo" placeholder="请输入排序号" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="单位名称" min-width="150">
|
<el-table-column label="单位名称" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
|
|
@ -93,14 +100,8 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="排序号" min-width="150">
|
|
||||||
<template #default="{ row, $index }">
|
<!-- <el-table-column label="租户号" min-width="150">
|
||||||
<el-form-item :prop="`${$index}.orderNo`" :rules="formRules.orderNo" class="mb-0px!">
|
|
||||||
<el-input v-model="row.orderNo" placeholder="请输入排序号" />
|
|
||||||
</el-form-item>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="租户号" min-width="150">
|
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.tenantId`" :rules="formRules.tenantId" class="mb-0px!">
|
<el-form-item :prop="`${$index}.tenantId`" :rules="formRules.tenantId" class="mb-0px!">
|
||||||
<el-input v-model="row.tenantId" placeholder="请输入租户号" />
|
<el-input v-model="row.tenantId" placeholder="请输入租户号" />
|
||||||
|
|
@ -144,7 +145,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||||
<template #default="{ $index }">
|
<template #default="{ $index }">
|
||||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,8 @@
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||||
<el-table-column label="id" align="center" prop="id" />
|
<!-- <el-table-column label="id" align="center" prop="id" /> -->
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column label="编号" align="center" prop="number" />
|
<el-table-column label="编号" align="center" prop="number" />
|
||||||
<el-table-column label="项目名称" align="center" prop="name" />
|
<el-table-column label="项目名称" align="center" prop="name" />
|
||||||
<el-table-column label="所属技术领域" align="center" prop="technicalField" />
|
<el-table-column label="所属技术领域" align="center" prop="technicalField" />
|
||||||
|
|
@ -82,6 +83,12 @@
|
||||||
<el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['apply:main:update']">
|
<el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['apply:main:update']">
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button link type="primary" @click="handleAduit(scope.row.id)" >
|
||||||
|
审核
|
||||||
|
</el-button>
|
||||||
|
<el-button link type="primary" @click="aduitRecord(scope.row.id)" >
|
||||||
|
审核记录
|
||||||
|
</el-button>
|
||||||
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['apply:main:delete']">
|
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['apply:main:delete']">
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
|
|
@ -95,6 +102,30 @@
|
||||||
|
|
||||||
<!-- 表单弹窗:添加/修改 -->
|
<!-- 表单弹窗:添加/修改 -->
|
||||||
<MainForm ref="formRef" @success="getList" />
|
<MainForm ref="formRef" @success="getList" />
|
||||||
|
<!-- 审核意见 -->
|
||||||
|
<el-dialog title="审核" v-model="Visible" width="600px" append-to-body destroy-on-close>
|
||||||
|
<el-form :model="listenerFieldForm" size="small" label-width="96px" ref="listenerFieldFormRef" style="height: 136px">
|
||||||
|
<el-form-item label="审核意见:" prop="comment" :rules="{ required: true, trigger: ['blur', 'change'] }">
|
||||||
|
<el-input v-model="listenerFieldForm.comment" clearable type="textarea" :rows="6" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button size="small" @click="Visible = false">取 消</el-button>
|
||||||
|
<el-button size="small" type="primary" @click="saveListenerFiled">确 定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 审核记录 -->
|
||||||
|
<el-dialog title="审核" v-model="Visible1" width="600px" append-to-body destroy-on-close>
|
||||||
|
<el-table :data="listRecord" :stripe="true" :show-overflow-tooltip="true">
|
||||||
|
<!-- <el-table-column label="id" align="center" prop="id" /> -->
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
<el-table-column label="审核人名称" align="center" prop="creatorName" />
|
||||||
|
<el-table-column label="审核意见" align="center" prop="comment" />
|
||||||
|
<el-table-column label="审核状态" align="center" prop="status" />
|
||||||
|
<el-table-column label="审核时间" align="center" prop="createTime" />
|
||||||
|
</el-table>
|
||||||
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
@ -107,9 +138,12 @@ defineOptions({ name: 'ApplyMain' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
const Visible = ref(false) // 监听器 显示状态
|
||||||
|
const Visible1 = ref(false) // 监听器 显示状态
|
||||||
|
const listenerFieldForm = ref<any>({}) // 监听器 注入字段 详情表单
|
||||||
const loading = ref(true) // 列表的加载中
|
const loading = ref(true) // 列表的加载中
|
||||||
const list = ref<MainVO[]>([]) // 列表的数据
|
const list = ref<MainVO[]>([]) // 列表的数据
|
||||||
|
const listRecord = ref<MainVO[]>([]) // 审核列表的数据
|
||||||
const total = ref(0) // 列表的总页数
|
const total = ref(0) // 列表的总页数
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
|
|
@ -186,6 +220,39 @@ const handleExport = async () => {
|
||||||
exportLoading.value = false
|
exportLoading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const listenerFieldFormRef = ref()
|
||||||
|
//审核
|
||||||
|
const listid = ref()
|
||||||
|
const handleAduit = (id?: number) => {
|
||||||
|
listid.value = id
|
||||||
|
Visible.value = true
|
||||||
|
}
|
||||||
|
// 保存监听器注入字段
|
||||||
|
const saveListenerFiled = async () => {
|
||||||
|
|
||||||
|
let validateStatus = await listenerFieldFormRef.value.validate()
|
||||||
|
if (!validateStatus) return // 验证不通过直接返回
|
||||||
|
try {
|
||||||
|
var param ={
|
||||||
|
itmeId: listid.value,
|
||||||
|
status:'',
|
||||||
|
comment:''
|
||||||
|
}
|
||||||
|
await MainApi.saveRecordList(param)
|
||||||
|
Visible.value = false
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//审核记录
|
||||||
|
const aduitRecord = async (id?: number) => {
|
||||||
|
try {
|
||||||
|
const data = await MainApi.getRecordList(id)
|
||||||
|
Visible1.value = true
|
||||||
|
listRecord.value = data.list
|
||||||
|
} finally {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue