pull/480/head
parent
798041a328
commit
a0502af42c
|
|
@ -1,110 +1,116 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 立项申请主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
number: string // 编号
|
||||
name: string // 项目名称
|
||||
technicalField: string // 所属技术领域
|
||||
year: string // 年度
|
||||
beginDate: string // 开始时间
|
||||
endData: string // 结束时间
|
||||
directorId: string // 负责人Id
|
||||
director: string // 负责人姓名
|
||||
gender: string // 负责人性别
|
||||
age: string // 年龄
|
||||
education: string // 学历
|
||||
major: string // 所学专业
|
||||
engagMajor: string // 从事专业
|
||||
position: string // 职务(职称)
|
||||
phoneNo: string // 电话
|
||||
email: string // 邮箱
|
||||
fax: string // 传真
|
||||
postalCode: string // 邮编
|
||||
address: string // 通讯地址
|
||||
achievement: string // 主要业绩
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
creator: string // 创建人
|
||||
createTime: Date // 创建时间
|
||||
updater: string // 更新人
|
||||
updateTime: Date // 更新时间
|
||||
deleted: number // 是否删除
|
||||
}
|
||||
|
||||
// 立项申请主 API
|
||||
export const MainApi = {
|
||||
// 查询立项申请主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/apply/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询立项申请主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/apply/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增立项申请主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/apply/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改立项申请主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/apply/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除立项申请主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/apply/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出立项申请主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/apply/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项详细信息) ====================
|
||||
|
||||
// 获得立项详细信息
|
||||
getInfoByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/info/get-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项单位信息) ====================
|
||||
|
||||
// 获得立项单位信息列表
|
||||
getUnitsListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/units/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(主要参加人员) ====================
|
||||
|
||||
// 获得主要参加人员列表
|
||||
getParticipantListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/participant/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项实施计划) ====================
|
||||
|
||||
// 获得立项实施计划列表
|
||||
getPlanListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/plan/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项经费) ====================
|
||||
|
||||
// 获得立项经费列表
|
||||
getFundsListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/funds/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 立项申请主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
number: string // 编号
|
||||
name: string // 项目名称
|
||||
technicalField: string // 所属技术领域
|
||||
year: string // 年度
|
||||
beginDate: string // 开始时间
|
||||
endData: string // 结束时间
|
||||
directorId: string // 负责人Id
|
||||
director: string // 负责人姓名
|
||||
gender: string // 负责人性别
|
||||
age: string // 年龄
|
||||
education: string // 学历
|
||||
major: string // 所学专业
|
||||
engagMajor: string // 从事专业
|
||||
position: string // 职务(职称)
|
||||
phoneNo: string // 电话
|
||||
email: string // 邮箱
|
||||
fax: string // 传真
|
||||
postalCode: string // 邮编
|
||||
address: string // 通讯地址
|
||||
achievement: string // 主要业绩
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
creator: string // 创建人
|
||||
createTime: Date // 创建时间
|
||||
updater: string // 更新人
|
||||
updateTime: Date // 更新时间
|
||||
deleted: number // 是否删除
|
||||
}
|
||||
|
||||
// 立项申请主 API
|
||||
export const MainApi = {
|
||||
// 查询立项申请主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/apply/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询立项申请主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/apply/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增立项申请主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/apply/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改立项申请主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/apply/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除立项申请主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/apply/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出立项申请主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/apply/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项详细信息) ====================
|
||||
|
||||
// 获得立项详细信息
|
||||
getInfoByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/info/get-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项单位信息) ====================
|
||||
|
||||
// 获得立项单位信息列表
|
||||
getUnitsListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/units/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(主要参加人员) ====================
|
||||
|
||||
// 获得主要参加人员列表
|
||||
getParticipantListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/participant/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项实施计划) ====================
|
||||
|
||||
// 获得立项实施计划列表
|
||||
getPlanListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/plan/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项经费) ====================
|
||||
|
||||
// 获得立项经费列表
|
||||
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 })
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ export default {
|
|||
happyDay: '祝你开心每一天!',
|
||||
toady: '今日晴',
|
||||
notice: '通知公告',
|
||||
project: '项目数',
|
||||
project: '站内通知',
|
||||
access: '项目访问',
|
||||
toDo: '待办',
|
||||
introduction: '一个正经的简介',
|
||||
|
|
|
|||
|
|
@ -1,57 +1,31 @@
|
|||
<template>
|
||||
<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-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 v-for="(item, index) in notice" :key="`dynamics-${index}`">
|
||||
<div class="flex items-center">
|
||||
<el-avatar :src="avatar" :size="35" class="mr-16px">
|
||||
<img src="@/assets/imgs/avatar.gif" alt="" />
|
||||
</el-avatar>
|
||||
<div>
|
||||
<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>
|
||||
</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>
|
||||
</div>
|
||||
<el-divider />
|
||||
</div>
|
||||
</el-skeleton>
|
||||
</el-card>
|
||||
</div>
|
||||
|
|
@ -61,103 +35,59 @@
|
|||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<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>
|
||||
</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 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-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">
|
||||
<span>{{ t('workplace.notice') }}</span>
|
||||
<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 notice" :key="`dynamics-${index}`">
|
||||
<div class="flex items-center">
|
||||
<el-avatar :src="avatar" :size="35" class="mr-16px">
|
||||
<img src="@/assets/imgs/avatar.gif" alt="" />
|
||||
</el-avatar>
|
||||
<div>
|
||||
<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 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>
|
||||
<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>
|
||||
</el-skeleton>
|
||||
</el-card>
|
||||
|
|
@ -165,127 +95,56 @@
|
|||
</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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -215,7 +203,7 @@ import UnitsForm from './components/UnitsForm.vue'
|
|||
import ParticipantForm from './components/ParticipantForm.vue'
|
||||
import PlanForm from './components/PlanForm.vue'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
import { DICT_TYPE, getIntDictOptions } from "@/utils/dict";
|
||||
|
||||
/** 立项申请主 表单 */
|
||||
defineOptions({ name: 'MainForm' })
|
||||
|
|
|
|||
|
|
@ -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-form-item label="项目目的与意义" prop="purposeSignificance">
|
||||
<el-input v-model="formData.purposeSignificance" placeholder="请输入项目目的与意义" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目所属领域国内外产业、技术的现状和发展趋势" prop="currentSituation">
|
||||
<el-input v-model="formData.currentSituation" placeholder="请输入项目所属领域国内外产业、技术的现状和发展趋势" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目现有工作基础" prop="workFoundation">
|
||||
<el-input v-model="formData.workFoundation" placeholder="请输入项目现有工作基础" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目实施目标及考核指标-项目目标" prop="objectives">
|
||||
<el-input v-model="formData.objectives" placeholder="请输入项目实施目标及考核指标-项目目标" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目实施目标及考核指标-考核指标" prop="evaluation">
|
||||
<el-input v-model="formData.evaluation" placeholder="请输入项目实施目标及考核指标-考核指标" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目实施目标及考核指标-考核指标依据" prop="according">
|
||||
<el-input v-model="formData.according" placeholder="请输入项目实施目标及考核指标-考核指标依据" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究开发内容-主要研究内容" prop="researchContents">
|
||||
<el-input v-model="formData.researchContents" placeholder="请输入主要研究开发内容-主要研究内容" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究开发内容-技术路线" prop="roadmap">
|
||||
<el-input v-model="formData.roadmap" placeholder="请输入主要研究开发内容-技术路线" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究开发内容-创新性" prop="innovation">
|
||||
<el-input v-model="formData.innovation" placeholder="请输入主要研究开发内容-创新性" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="课题实施的风险分析" prop="riskAnalysis">
|
||||
<el-input v-model="formData.riskAnalysis" placeholder="请输入课题实施的风险分析" type="textarea" />
|
||||
</el-form-item>
|
||||
<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" :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" :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" :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" :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" :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" :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" :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" :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>
|
||||
</el-form>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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(() => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue