From b028f2a7bd0db8fe005b356ca0fb3d37474ac297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=BE=B7=E8=B6=85?= <13143889+he-dechao@user.noreply.gitee.com> Date: Wed, 23 Jul 2025 22:46:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.production | 4 +- public/static/images/wind-turbine-icon.svg | 20 + src/apis/attendance-record/index.ts | 13 + src/apis/attendance-record/type.ts | 15 + src/apis/performance-setting/index.ts | 40 ++ src/apis/performance-setting/type.ts | 39 ++ src/components/TurbineGrid/index.vue | 234 ++++++++ src/router/route.ts | 4 +- src/types/auto-imports.d.ts | 3 +- src/types/components.d.ts | 1 + .../default/error/components/ErrorPage.vue | 10 +- src/views/hr/attendance-record/index.vue | 73 +++ src/views/login/components/account/index.vue | 13 +- src/views/performance/my.vue | 34 +- .../setting/components/DimensionDrawer.vue | 58 ++ .../setting/components/RuleDrawer.vue | 86 +++ .../setting/components/RuleList.vue | 64 +++ src/views/performance/setting/index.vue | 67 +++ src/views/project/TurbineCard.vue | 88 +++ src/views/project/TurbineGrid.vue | 41 ++ src/views/project/detail/index.vue | 125 ++--- src/views/project/icons/WindTurbine.vue | 358 +++++++++++++ src/views/project/index.vue | 502 ++++++++---------- 23 files changed, 1510 insertions(+), 382 deletions(-) create mode 100644 public/static/images/wind-turbine-icon.svg create mode 100644 src/apis/attendance-record/index.ts create mode 100644 src/apis/attendance-record/type.ts create mode 100644 src/apis/performance-setting/index.ts create mode 100644 src/apis/performance-setting/type.ts create mode 100644 src/components/TurbineGrid/index.vue create mode 100644 src/views/hr/attendance-record/index.vue create mode 100644 src/views/performance/setting/components/DimensionDrawer.vue create mode 100644 src/views/performance/setting/components/RuleDrawer.vue create mode 100644 src/views/performance/setting/components/RuleList.vue create mode 100644 src/views/performance/setting/index.vue create mode 100644 src/views/project/TurbineCard.vue create mode 100644 src/views/project/TurbineGrid.vue create mode 100644 src/views/project/icons/WindTurbine.vue diff --git a/.env.production b/.env.production index debf235..8700360 100644 --- a/.env.production +++ b/.env.production @@ -4,8 +4,8 @@ VITE_BUILD_MOCK = false # 接口地址 -VITE_API_BASE_URL = 'https://api.continew.top' -VITE_API_WS_URL = 'wss://api.continew.top' +VITE_API_BASE_URL = 'http://pms.dtyx.net:9158/' +VITE_API_WS_URL = 'ws://localhost:8000' # 地址前缀 VITE_BASE = '/' diff --git a/public/static/images/wind-turbine-icon.svg b/public/static/images/wind-turbine-icon.svg new file mode 100644 index 0000000..e4841c4 --- /dev/null +++ b/public/static/images/wind-turbine-icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/apis/attendance-record/index.ts b/src/apis/attendance-record/index.ts new file mode 100644 index 0000000..39c5276 --- /dev/null +++ b/src/apis/attendance-record/index.ts @@ -0,0 +1,13 @@ +import http from '@/utils/http' +import type { AttendanceRecordReq, AttendanceRecordResp } from './type' + +const BASE_URL = '/attendance-record' + +/** 新增考勤记录 */ +export function addAttendanceRecord(data: AttendanceRecordReq) { + return http.post(BASE_URL, data, { + headers: { + 'Content-Type': 'application/json' + } + }) +} \ No newline at end of file diff --git a/src/apis/attendance-record/type.ts b/src/apis/attendance-record/type.ts new file mode 100644 index 0000000..d00853c --- /dev/null +++ b/src/apis/attendance-record/type.ts @@ -0,0 +1,15 @@ +/** 新增考勤记录请求体 */ +export interface AttendanceRecordReq { + recordImage?: string + recordPosition?: string + recordPositionLabel?: string + } + + /** 新增考勤记录响应体 */ + export interface AttendanceRecordResp { + code: number + data: object + msg: string + status: number + success: boolean + } \ No newline at end of file diff --git a/src/apis/performance-setting/index.ts b/src/apis/performance-setting/index.ts new file mode 100644 index 0000000..531e171 --- /dev/null +++ b/src/apis/performance-setting/index.ts @@ -0,0 +1,40 @@ +import http from '@/utils/http' +import type { PerformanceDimension, PerformanceRule, DimensionQuery, RuleQuery } from './type' + +/** 维度相关 */ +export function getDimensionList(params?: DimensionQuery) { + return http.get('/performance-dimension/list', params) +} +export function getDimensionDetail(id: string) { + return http.get(`/performance-dimension/${id}`) +} +export function addDimension(data: Partial) { + return http.post('/performance-dimension', data) +} +export function updateDimension(id: string, data: Partial) { + return http.put(`/performance-dimension/${id}`, data) +} +export function deleteDimension(id: string) { + return http.del(`/performance-dimension/${id}`) +} + +/** 细则相关 */ +export function getRuleList(params?: RuleQuery) { + return http.get('/performance-rule/list', params) +} +export function getRuleDetail(id: string) { + return http.get(`/performance-rule/${id}`) +} +export function addRule(data: Partial) { + return http.post('/performance-rule', data) +} +export function updateRule(id: string, data: Partial) { + return http.put(`/performance-rule/${id}`, data) +} +export function deleteRule(id: string) { + return http.del(`/performance-rule/${id}`) +} +// 我的绩效 +export function getMyEvaluation() { + return http.get('/performance-evaluation/my') + } \ No newline at end of file diff --git a/src/apis/performance-setting/type.ts b/src/apis/performance-setting/type.ts new file mode 100644 index 0000000..c0ad66a --- /dev/null +++ b/src/apis/performance-setting/type.ts @@ -0,0 +1,39 @@ +/** 绩效维度 */ +export interface PerformanceDimension { + dimensionId: string + dimensionName: string + description?: string + deptName: string + status: 0 | 1 + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string + } + + /** 绩效细则 */ + export interface PerformanceRule { + ruleId: string + ruleName: string + description?: string + dimensionName: string + bonus?: string + score?: number + weight?: number + status: 0 | 1 + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string + } + + /** 查询参数 */ + export interface DimensionQuery { + dimensionName?: string + status?: 0 | 1 + } + export interface RuleQuery { + dimensionName?: string + ruleName?: string + status?: 0 | 1 + } \ No newline at end of file diff --git a/src/components/TurbineGrid/index.vue b/src/components/TurbineGrid/index.vue new file mode 100644 index 0000000..feabd72 --- /dev/null +++ b/src/components/TurbineGrid/index.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/src/router/route.ts b/src/router/route.ts index dcec581..f1a454d 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -73,7 +73,7 @@ export const systemRoutes: RouteRecordRaw[] = [ { path: '/organization/hr/performance/dimention', name: 'Dimention', - component: () => import('@/views/performance/dimension.vue'), + component: () => import('@/views/performance/setting/index.vue'), meta: { title: '绩效维度', icon: 'performance', hidden: false }, }, @@ -1144,7 +1144,7 @@ export const systemRoutes: RouteRecordRaw[] = [ { path: '/', - redirect: '/project-management/contract/revenue-contract3', + redirect: '/project-management/project-template/project-aproval', meta: { hidden: true }, }, { diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts index 6a35f3a..369aad4 100644 --- a/src/types/auto-imports.d.ts +++ b/src/types/auto-imports.d.ts @@ -57,6 +57,7 @@ declare global { const useCssVars: typeof import('vue')['useCssVars'] const useId: typeof import('vue')['useId'] const useLink: typeof import('vue-router')['useLink'] + const useModel: typeof import('vue')['useModel'] const useRoute: typeof import('vue-router')['useRoute'] const useRouter: typeof import('vue-router')['useRouter'] const useSlots: typeof import('vue')['useSlots'] @@ -69,6 +70,6 @@ declare global { // for type re-export declare global { // @ts-ignore - export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' import('vue') } diff --git a/src/types/components.d.ts b/src/types/components.d.ts index 92efec9..19a4246 100644 --- a/src/types/components.d.ts +++ b/src/types/components.d.ts @@ -61,6 +61,7 @@ declare module 'vue' { SecondForm: typeof import('./../components/GenCron/CronForm/component/second-form.vue')['default'] SplitPanel: typeof import('./../components/SplitPanel/index.vue')['default'] TextCopy: typeof import('./../components/TextCopy/index.vue')['default'] + TurbineGrid: typeof import('./../components/TurbineGrid/index.vue')['default'] UserSelect: typeof import('./../components/UserSelect/index.vue')['default'] Verify: typeof import('./../components/Verify/index.vue')['default'] VerifyPoints: typeof import('./../components/Verify/Verify/VerifyPoints.vue')['default'] diff --git a/src/views/default/error/components/ErrorPage.vue b/src/views/default/error/components/ErrorPage.vue index a4dea79..8c8dfa3 100644 --- a/src/views/default/error/components/ErrorPage.vue +++ b/src/views/default/error/components/ErrorPage.vue @@ -38,7 +38,7 @@ const IconMap: Record = { const router = useRouter() // 返回首页 const back = () => { - router.replace({ path: '/project-management/bidding/tender-documents' }) + router.replace({ path: '/asset-management/intellectual-property' }) } @@ -58,6 +58,7 @@ const back = () => { flex-direction: column; align-items: center; } + &__img { width: 100%; position: relative; @@ -66,14 +67,17 @@ const back = () => { justify-content: center; align-items: center; } + &__icon { max-width: 90%; height: 50vh; } + &__tip { display: flex; flex-direction: column; align-items: center; + &--a { margin-bottom: 20px; font-size: 32px; @@ -85,6 +89,7 @@ const back = () => { animation-duration: 0.5s; animation-fill-mode: forwards; } + &--b { margin-bottom: 10px; font-size: 20px; @@ -97,6 +102,7 @@ const back = () => { animation-delay: 0.1s; animation-fill-mode: forwards; } + &--c { padding: 0 30px; margin-bottom: 20px; @@ -112,11 +118,13 @@ const back = () => { } } } + @keyframes slideUp { 0% { opacity: 0; transform: translateY(60px); } + 100% { opacity: 1; transform: translateY(0); diff --git a/src/views/hr/attendance-record/index.vue b/src/views/hr/attendance-record/index.vue new file mode 100644 index 0000000..30bcb99 --- /dev/null +++ b/src/views/hr/attendance-record/index.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/views/login/components/account/index.vue b/src/views/login/components/account/index.vue index 561b0c9..53f7ba5 100644 --- a/src/views/login/components/account/index.vue +++ b/src/views/login/components/account/index.vue @@ -1,13 +1,6 @@