pull/480/head
liting 2024-04-15 19:11:42 +08:00
parent 798041a328
commit a0502af42c
11 changed files with 437 additions and 478 deletions

View File

@ -107,4 +107,10 @@ export const MainApi = {
getFundsListByApplyId: async (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 })
},
}

View File

@ -70,12 +70,12 @@ const dialogStyle = computed(() => {
:show-close="false"
>
<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">
{{ title }}
</slot>
<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
v-if="fullscreen"
@ -118,7 +118,7 @@ const dialogStyle = computed(() => {
margin: 0 !important;
&__header {
height: 54px;
height: 40px;
padding: 0;
margin-right: 0 !important;
border-bottom: 1px solid var(--el-border-color);

View File

@ -197,7 +197,7 @@ export default {
happyDay: '祝你开心每一天!',
toady: '今日晴',
notice: '通知公告',
project: '项目数',
project: '站内通知',
access: '项目访问',
toDo: '待办',
introduction: '一个正经的简介',

View File

@ -1,138 +1,5 @@
<template>
<div>
<el-card shadow="never">
<el-skeleton :loading="loading" animated>
<el-row :gutter="16" justify="space-between">
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
<div class="flex items-center">
<el-avatar :src="avatar" :size="70" class="mr-16px">
<img src="@/assets/imgs/avatar.gif" alt="" />
</el-avatar>
<div>
<div class="text-20px">
{{ t('workplace.welcome') }} {{ username }} {{ t('workplace.happyDay') }}
</div>
<div class="mt-10px text-14px text-gray-500">
{{ t('workplace.toady') }}20 - 32
</div>
</div>
</div>
</el-col>
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
<div class="h-70px flex items-center justify-end lt-sm:mt-10px">
<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-card>
</div>
<el-row class="mt-8px" :gutter="8" justify="space-between">
<el-col :xl="16" :lg="16" :md="24" :sm="24" :xs="24" class="mb-8px">
<el-card shadow="never">
<template #header>
<div class="h-3 flex justify-between">
<span>{{ t('workplace.project') }}</span>
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
</div>
</template>
<el-skeleton :loading="loading" animated>
<el-row>
<el-col
v-for="(item, index) in projects"
:key="`card-${index}`"
:xl="8"
:lg="8"
:md="8"
:sm="24"
:xs="24"
>
<el-card shadow="hover">
<div class="flex items-center">
<Icon :icon="item.icon" :size="25" class="mr-8px" />
<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-row>
</el-skeleton>
</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 :xl="8" :lg="8" :md="24" :sm="24" :xs="24" class="mb-8px">
<el-card shadow="never">
<template #header>
<div class="h-3 flex justify-between">
<span>{{ t('workplace.shortcutOperation') }}</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">
@ -161,131 +28,123 @@
</div>
</el-skeleton>
</el-card>
</div>
<el-row class="mt-8px" :gutter="8" justify="space-between">
<el-col :xl="16" :lg="16" :md="24" :sm="24" :xs="24" class="mb-8px">
<el-card shadow="never">
<template #header>
<div class="h-3 flex justify-between">
<span>{{ t('workplace.toDo') }}</span>
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
</div>
</template>
<el-skeleton :loading="loading" animated>
<el-row>
<el-col v-for="item in TodoList" :key="`team-${item.name}`" :span="6" class="mb-8px">
<div class="flex flex-col items-center">
<el-badge :value="12" class="item">
<Icon :icon="item.icon" :size="40" />
</el-badge>
<div class="mb-8px"> {{ item.name }}</div>
<!-- <el-link type="default" :underline="false">
{{ item.name }}
</el-link> -->
</div>
</el-col>
</el-row>
</el-skeleton>
</el-card>
</el-col>
<el-col :xl="8" :lg="8" :md="24" :sm="24" :xs="24" class="mb-8px">
<el-card shadow="never">
<template #header>
<div class="h-3 flex justify-between">
<span>{{ t('workplace.project') }}</span>
<el-link type="primary" :underline="false">{{ t('action.more') }}</el-link>
</div>
</template>
<el-skeleton :loading="loading" animated>
<div v-for="(item, index) in message" :key="`dynamics-${index}`">
<div class="flex justify-between ">
<div class="text-14px">
<Highlight :keys="item.keys.map((v) => t(v))">
{{ item.type }} : {{ item.title }}
</Highlight>
</div>
<div class=" text-12px text-gray-400">
{{ formatTime(item.date, 'yyyy-MM-dd') }}
</div>
</div>
<div style="display: block;
height: 1px;
width: 100%;
margin: 14px 0;
border-top: 1px var(--el-border-color) var(--el-border-style);"></div>
</div>
</el-skeleton>
</el-card>
</el-col>
</el-row>
</template>
<script lang="ts" setup>
import { set } from 'lodash-es'
import { EChartsOption } from 'echarts'
import { formatTime } from '@/utils'
import { useUserStore } from '@/store/modules/user'
import { useWatermark } from '@/hooks/web/useWatermark'
import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
import { pieOptions, barOptions } from './echarts-data'
import type { TodoList, Notice, Message } from './types'
defineOptions({ name: 'Home' })
const { t } = useI18n()
const userStore = useUserStore()
const { setWatermark } = useWatermark()
const loading = ref(true)
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[]>([])
const getProject = async () => {
//
let TodoList = reactive<TodoList[]>([])
const getTodoList = async () => {
const data = [
{
name: 'Github',
icon: 'akar-icons:github-fill',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
url: 'github.io'
},
{
name: 'Vue',
icon: 'logos:vue',
message: 'workplace.introduction',
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()
url: 'vuejs.org'
},
{
name: 'Vite',
icon: 'vscode-icons:file-type-vite',
message: 'workplace.introduction',
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()
url: 'https://vitejs.dev/'
},
{
title: '系统凌晨维护',
type: '公告',
keys: ['公告', '维护'],
date: new Date()
name: 'Angular',
icon: 'logos:angular-icon',
url: 'github.io'
},
{
title: '系统升级版本',
type: '通知',
keys: ['通知', '升级'],
date: new Date()
name: 'React',
icon: 'logos:react',
url: 'github.io'
},
{
title: '系统凌晨维护',
type: '公告',
keys: ['公告', '维护'],
date: new Date()
}
]
notice = Object.assign(notice, data)
}
//
let shortcut = reactive<Shortcut[]>([])
const getShortcut = async () => {
const data = [
name: 'Webpack',
icon: 'logos:webpack',
url: 'github.io'
},
{
name: 'Github',
icon: 'akar-icons:github-fill',
@ -317,65 +176,79 @@ const getShortcut = async () => {
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 = [
{ 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'),
data: data.map((v) => v.value),
type: 'bar'
title: '系统升级版本',
type: '通知',
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 () => {
await Promise.all([
getCount(),
getProject(),
getTodoList(),
getNotice(),
getShortcut(),
getUserAccessSource(),
getWeeklyUserActivity()
getMsg()
])
loading.value = false
}

View File

@ -18,8 +18,13 @@ export type Notice = {
keys: string[]
date: Date | number | string
}
export type Shortcut = {
export type Message = {
title: string
type: string
keys: string[]
date: Date | number | string
}
export type TodoList = {
name: string
icon: string
url: string

View File

@ -7,12 +7,12 @@
<legend>基本信息</legend>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<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-input v-model="formData.number" placeholder="请输入编号" />
</el-form-item>
</el-col>
</el-col> -->
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="项目名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入项目名称" />
@ -20,30 +20,28 @@
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="所属技术领域" prop="technicalField">
<el-select v-model="formData.technicalField" clearable placeholder="请选择所属技术领域">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.TECHNICAL_FIELD)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TECHNICAL_FIELD)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</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-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-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-col :xs="24" :sm="12" :md="8" :lg="6">
<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-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-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-form-item label="负责人姓名" prop="director">
<el-input v-model="formData.director" placeholder="请输入负责人姓名" />
@ -59,34 +57,22 @@
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="学历" prop="education">
<el-select v-model="formData.education" clearable placeholder="请选择学历">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_EDUCATION)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_EDUCATION)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item></el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="所学专业" prop="major">
<el-select v-model="formData.major" clearable placeholder="请选择所学专业">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item></el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="从事专业" prop="engagMajor">
<el-select v-model="formData.engagMajor" clearable placeholder="请选择从事专业">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item></el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
@ -113,11 +99,11 @@
<el-form-item label="通讯地址" prop="address">
<el-input v-model="formData.address" placeholder="请输入通讯地址" />
</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-input v-model="formData.achievement" placeholder="请输入主要业绩" />
<el-input v-model="formData.achievement" placeholder="请输入主要业绩" type="textarea" :rows="4"/>
</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-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
</el-form-item></el-col>
@ -167,7 +153,8 @@
</el-form-item></el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<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-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="更新人" prop="updater">
@ -175,13 +162,14 @@
</el-form-item></el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<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-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="是否删除" prop="deleted">
<el-input v-model="formData.deleted" placeholder="请输入是否删除" />
</el-form-item>
</el-col>
</el-col> -->
</el-row>
</el-form>
</fieldset>

View File

@ -1,37 +1,51 @@
<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>
<legend>项目信息</legend>
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="12" :lg="12">
<el-form-item label="项目目的与意义" prop="purposeSignificance">
<el-input v-model="formData.purposeSignificance" placeholder="请输入项目目的与意义" type="textarea" />
<el-input v-model="formData.purposeSignificance" 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="currentSituation">
<el-input v-model="formData.currentSituation" placeholder="请输入项目所属领域国内外产业、技术的现状和发展趋势" type="textarea" />
</el-form-item>
<el-input v-model="formData.currentSituation" 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="workFoundation">
<el-input v-model="formData.workFoundation" placeholder="请输入项目现有工作基础" type="textarea" />
</el-form-item>
<el-input v-model="formData.workFoundation" 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="objectives">
<el-input v-model="formData.objectives" placeholder="请输入项目实施目标及考核指标-项目目标" type="textarea" />
</el-form-item>
<el-input v-model="formData.objectives" 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="evaluation">
<el-input v-model="formData.evaluation" placeholder="请输入项目实施目标及考核指标-考核指标" type="textarea" />
</el-form-item>
<el-input v-model="formData.evaluation" 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="according">
<el-input v-model="formData.according" placeholder="请输入项目实施目标及考核指标-考核指标依据" type="textarea" />
</el-form-item>
<el-input v-model="formData.according" 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="researchContents">
<el-input v-model="formData.researchContents" placeholder="请输入主要研究开发内容-主要研究内容" type="textarea" />
</el-form-item>
<el-input v-model="formData.researchContents" 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="roadmap">
<el-input v-model="formData.roadmap" placeholder="请输入主要研究开发内容-技术路线" type="textarea" />
</el-form-item>
<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" />
</el-form-item>
<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" />
</el-form-item>
<el-input v-model="formData.riskAnalysis" placeholder="请输入课题实施的风险分析" type="textarea" :rows="6" />
</el-form-item> </el-col>
</el-row>
</fieldset>
</el-form>
</template>

View File

@ -8,7 +8,14 @@
:inline-message="true"
>
<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">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
@ -72,14 +79,8 @@
</el-form-item>
</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 label="创建人" min-width="150">
<!-- <el-table-column label="创建人" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
<el-input v-model="row.creator" placeholder="请输入创建人" />
@ -116,7 +117,7 @@
/>
</el-form-item>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column align="center" fixed="right" label="操作" width="60">
<template #default="{ $index }">
<el-button @click="handleDelete($index)" link></el-button>

View File

@ -14,21 +14,25 @@
<el-form-item :prop="`${$index}.implDate`" :rules="formRules.implDate" class="mb-0px!">
<el-date-picker
v-model="row.implDate"
type="date"
value-format="x"
type="datetimerange"
placeholder="选择时间"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="实施内容" min-width="400">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.implContent`" :rules="formRules.implContent" class="mb-0px!">
<Editor v-model="row.implContent" height="150px" />
<el-form-item :prop="`${$index}.name`" :rules="formRules.implContent" class="mb-0px!">
<el-input v-model="row.implContent" placeholder="请输入实施内容" type="textarea" :rows="6"/>
</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>
</el-table-column>
<el-table-column label="创建人" min-width="150">
<!-- <el-table-column label="创建人" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
<el-input v-model="row.creator" placeholder="请输入创建人" />
@ -65,7 +69,7 @@
/>
</el-form-item>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column align="center" fixed="right" label="操作" width="60">
<template #default="{ $index }">
<el-button @click="handleDelete($index)" link></el-button>

View File

@ -8,13 +8,20 @@
:inline-message="true"
>
<el-table :data="formData" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="单位ID" min-width="150">
<!-- <el-table-column label="序号" type="index" width="100" /> -->
<!-- <el-table-column label="单位ID" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.deptId`" :rules="formRules.deptId" class="mb-0px!">
<el-input v-model="row.deptId" placeholder="请输入单位ID" />
</el-form-item>
</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 label="单位名称" min-width="150">
<template #default="{ row, $index }">
@ -93,14 +100,8 @@
</el-form-item>
</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 label="租户号" min-width="150">
<!-- <el-table-column label="租户号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.tenantId`" :rules="formRules.tenantId" class="mb-0px!">
<el-input v-model="row.tenantId" placeholder="请输入租户号" />
@ -144,7 +145,7 @@
/>
</el-form-item>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column align="center" fixed="right" label="操作" width="60">
<template #default="{ $index }">
<el-button @click="handleDelete($index)" link></el-button>

View File

@ -64,7 +64,8 @@
<!-- 列表 -->
<ContentWrap>
<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="name" />
<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>
<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>
@ -95,6 +102,30 @@
<!-- 表单弹窗添加/修改 -->
<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>
<script setup lang="ts">
@ -107,9 +138,12 @@ defineOptions({ name: 'ApplyMain' })
const message = useMessage() //
const { t } = useI18n() //
const Visible = ref(false) //
const Visible1 = ref(false) //
const listenerFieldForm = ref<any>({}) //
const loading = ref(true) //
const list = ref<MainVO[]>([]) //
const listRecord = ref<MainVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
@ -186,6 +220,39 @@ const handleExport = async () => {
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(() => {