首页静态页面开发
5
jsconfig.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"vueCompilerOptions": {
|
||||||
|
"globalTypesPath": "./vue-global-types.d.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -50,7 +50,7 @@
|
|||||||
"quickapp" : {},
|
"quickapp" : {},
|
||||||
/* 小程序特有相关 */
|
/* 小程序特有相关 */
|
||||||
"mp-weixin" : {
|
"mp-weixin" : {
|
||||||
"appid" : "",
|
"appid" : "wxb723fd3b6f9b1481",
|
||||||
"setting" : {
|
"setting" : {
|
||||||
"urlCheck" : false
|
"urlCheck" : false
|
||||||
},
|
},
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
{
|
{
|
||||||
"path": "pages/index/index",
|
"path": "pages/index/index",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "uni-app"
|
"navigationBarTitleText": "个人中心"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -1,7 +1,14 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
|
||||||
const a = ref("hello world")
|
const list = ref([
|
||||||
|
{ title: "病人管理", img: "/static/patient.png" },
|
||||||
|
{ title: "组员管理", img: "/static/ss.png" },
|
||||||
|
{ title: "病人康复", img: "/static/health_record.png" },
|
||||||
|
{ title: "总健详情", img: "/static/health_assessment.png" },
|
||||||
|
{ title: "档案管理", img: "/static/health_plan_overview.png" },
|
||||||
|
{ title: "数据统计", img: "/static/tongji.png" },
|
||||||
|
])
|
||||||
|
|
||||||
function change(){
|
function change(){
|
||||||
a.value = "lsp"
|
a.value = "lsp"
|
||||||
@ -10,10 +17,116 @@ function change(){
|
|||||||
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
{{ a }}
|
<!-- 头部 -->
|
||||||
<button @click="change">测试</button>
|
<view class="home">
|
||||||
<uni-badge text="1"></uni-badge>
|
<view class="header shadow">
|
||||||
<uni-badge text="2" type="success" @click="bindClick"></uni-badge>
|
<view class="img">
|
||||||
<uni-badge text="3" type="primary" :inverted="true"></uni-badge>
|
<image src="/static/hospital.png"></image>
|
||||||
|
</view>
|
||||||
|
<view class="info">
|
||||||
|
<view>南方医科大学珠江医院</view>
|
||||||
|
<view>李玉华</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 功能菜单 -->
|
||||||
|
<view class="menu">
|
||||||
|
<view v-for="item in 9" :key="value" class="item shadow">
|
||||||
|
<view>
|
||||||
|
<image :src="list[item - 1]?.img"></image>
|
||||||
|
<view>{{ list[item - 1]?.title }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 软件使用反馈 -->
|
||||||
|
<button class="feedback_btn">软件使用反馈</button>
|
||||||
|
<!-- 退出登录 -->
|
||||||
|
<button class="logout_btn" type="warn">退出登录</button>
|
||||||
|
</view>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.home{
|
||||||
|
height: 95vh;
|
||||||
|
padding: 30rpx;
|
||||||
|
background: linear-gradient(180deg, #f8fbff 0%, #f2f7ff 100%);
|
||||||
|
.shadow {
|
||||||
|
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
|
||||||
|
border: 1rpx solid #e8f2ff;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
display: flex;
|
||||||
|
gap: 25rpx;
|
||||||
|
padding: 30rpx;
|
||||||
|
.img {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: linear-gradient(135deg, #e8f2ff 0%, #f0f8ff 100%);
|
||||||
|
border: 2rpx solid #e1ecf4;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 60rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.info {
|
||||||
|
:first-child {
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1a365d;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
letter-spacing: 0.5rpx;
|
||||||
|
}
|
||||||
|
:last-child {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #64748b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.menu {
|
||||||
|
display: flex;
|
||||||
|
gap: 27rpx;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: 35rpx;
|
||||||
|
.item {
|
||||||
|
width: 30%;
|
||||||
|
text-align: center;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
&:active {
|
||||||
|
transform: translateY(2rpx);
|
||||||
|
box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.06);
|
||||||
|
}
|
||||||
|
image {
|
||||||
|
width: 60rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
}
|
||||||
|
view {
|
||||||
|
font-size: 25rpx;
|
||||||
|
color: #334155;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.feedback_btn {
|
||||||
|
margin: 35rpx 0;
|
||||||
|
font-size: 30rpx;
|
||||||
|
height: 95rpx;
|
||||||
|
line-height: 95rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.logout_btn {
|
||||||
|
font-size: 30rpx;
|
||||||
|
height: 95rpx;
|
||||||
|
line-height: 95rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
BIN
static/blood.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
static/btn-back.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
static/deviceManufacturer.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
0
static/education/README.md
Normal file
BIN
static/education/flgwhzn.jpg
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
static/education/fm.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
static/education/njsdlcbxjxgjc.jpg
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
static/education/njsshhlyd.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
static/education/ysyyzn.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
static/health_assessment.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
static/health_plan_overview.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
static/health_record.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
static/hospital.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
static/id.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
static/logo.png
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 148 KiB |
BIN
static/msg.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
static/p.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
static/patient.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
static/phone.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
static/ss.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
static/tongji.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
static/xuanjiao.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
131
vue-global-types.d.ts
vendored
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
export {};
|
||||||
|
declare global {
|
||||||
|
var __VLS_PROPS_FALLBACK: Record<string, unknown>;
|
||||||
|
|
||||||
|
const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any };
|
||||||
|
const __VLS_placeholder: any;
|
||||||
|
const __VLS_intrinsics: import('vue/jsx-runtime').JSX.IntrinsicElements;
|
||||||
|
|
||||||
|
type __VLS_Elements = __VLS_SpreadMerge<SVGElementTagNameMap, HTMLElementTagNameMap>;
|
||||||
|
type __VLS_GlobalComponents = import('vue').GlobalComponents;
|
||||||
|
type __VLS_GlobalDirectives = import('vue').GlobalDirectives;
|
||||||
|
type __VLS_IsAny<T> = 0 extends 1 & T ? true : false;
|
||||||
|
type __VLS_PickNotAny<A, B> = __VLS_IsAny<A> extends true ? B : A;
|
||||||
|
type __VLS_SpreadMerge<A, B> = Omit<A, keyof B> & B;
|
||||||
|
type __VLS_WithComponent<N0 extends string, LocalComponents, Self, N1 extends string, N2 extends string = N1, N3 extends string = N1> =
|
||||||
|
N1 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N1] } :
|
||||||
|
N2 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N2] } :
|
||||||
|
N3 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N3] } :
|
||||||
|
Self extends object ? { [K in N0]: Self } :
|
||||||
|
N1 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N1] } :
|
||||||
|
N2 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N2] } :
|
||||||
|
N3 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N3] } :
|
||||||
|
{};
|
||||||
|
type __VLS_FunctionalComponentCtx<T, K> = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny<K, {}>
|
||||||
|
? K extends { __ctx?: infer Ctx } ? NonNullable<Ctx> : never : any
|
||||||
|
, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
|
||||||
|
>;
|
||||||
|
type __VLS_FunctionalComponentProps<T, K> = '__ctx' extends keyof __VLS_PickNotAny<K, {}>
|
||||||
|
? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
|
||||||
|
: T extends (props: infer P, ...args: any) => any ? P
|
||||||
|
: {};
|
||||||
|
type __VLS_FunctionalComponent<T> = (props: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>, ctx?: any) => import('vue/jsx-runtime').JSX.Element & {
|
||||||
|
__ctx?: {
|
||||||
|
attrs?: any;
|
||||||
|
slots?: T extends { $slots: infer Slots } ? Slots : Record<string, any>;
|
||||||
|
emit?: T extends { $emit: infer Emit } ? Emit : {};
|
||||||
|
props?: typeof props;
|
||||||
|
expose?: (exposed: T) => void;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
type __VLS_IsFunction<T, K> = K extends keyof T
|
||||||
|
? __VLS_IsAny<T[K]> extends false
|
||||||
|
? unknown extends T[K]
|
||||||
|
? false
|
||||||
|
: true
|
||||||
|
: false
|
||||||
|
: false;
|
||||||
|
type __VLS_NormalizeComponentEvent<
|
||||||
|
Props,
|
||||||
|
Emits,
|
||||||
|
onEvent extends keyof Props,
|
||||||
|
Event extends keyof Emits,
|
||||||
|
CamelizedEvent extends keyof Emits,
|
||||||
|
> = __VLS_IsFunction<Props, onEvent> extends true
|
||||||
|
? Props
|
||||||
|
: __VLS_IsFunction<Emits, Event> extends true
|
||||||
|
? { [K in onEvent]?: Emits[Event] }
|
||||||
|
: __VLS_IsFunction<Emits, CamelizedEvent> extends true
|
||||||
|
? { [K in onEvent]?: Emits[CamelizedEvent] }
|
||||||
|
: Props;
|
||||||
|
// fix https://github.com/vuejs/language-tools/issues/926
|
||||||
|
type __VLS_UnionToIntersection<U> = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never;
|
||||||
|
type __VLS_OverloadUnionInner<T, U = unknown> = U & T extends (...args: infer A) => infer R
|
||||||
|
? U extends T
|
||||||
|
? never
|
||||||
|
: __VLS_OverloadUnionInner<T, Pick<T, keyof T> & U & ((...args: A) => R)> | ((...args: A) => R)
|
||||||
|
: never;
|
||||||
|
type __VLS_OverloadUnion<T> = Exclude<
|
||||||
|
__VLS_OverloadUnionInner<(() => never) & T>,
|
||||||
|
T extends () => never ? never : () => never
|
||||||
|
>;
|
||||||
|
type __VLS_ConstructorOverloads<T> = __VLS_OverloadUnion<T> extends infer F
|
||||||
|
? F extends (event: infer E, ...args: infer A) => any
|
||||||
|
? { [K in E & string]: (...args: A) => void; }
|
||||||
|
: never
|
||||||
|
: never;
|
||||||
|
type __VLS_NormalizeEmits<T> = __VLS_PrettifyGlobal<
|
||||||
|
__VLS_UnionToIntersection<
|
||||||
|
__VLS_ConstructorOverloads<T> & {
|
||||||
|
[K in keyof T]: T[K] extends any[] ? { (...args: T[K]): void } : never
|
||||||
|
}
|
||||||
|
>
|
||||||
|
>;
|
||||||
|
type __VLS_EmitsToProps<T> = __VLS_PrettifyGlobal<{
|
||||||
|
[K in string & keyof T as `on${Capitalize<K>}`]?:
|
||||||
|
(...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any;
|
||||||
|
}>;
|
||||||
|
type __VLS_ResolveEmits<
|
||||||
|
Comp,
|
||||||
|
Emits,
|
||||||
|
TypeEmits = Comp extends { __typeEmits?: infer T } ? unknown extends T ? {} : import('vue').ShortEmitsToObject<T> : {},
|
||||||
|
NormalizedEmits = __VLS_NormalizeEmits<Emits> extends infer E ? string extends keyof E ? {} : E : never,
|
||||||
|
> = __VLS_SpreadMerge<NormalizedEmits, TypeEmits>;
|
||||||
|
type __VLS_ResolveDirectives<T> = {
|
||||||
|
[K in keyof T & string as `v${Capitalize<K>}`]: T[K];
|
||||||
|
};
|
||||||
|
type __VLS_PrettifyGlobal<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
|
||||||
|
type __VLS_UseTemplateRef<T> = Readonly<import('vue').ShallowRef<T | null>>;
|
||||||
|
type __VLS_ProxyRefs<T> = import('vue').ShallowUnwrapRef<T>;
|
||||||
|
|
||||||
|
function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [
|
||||||
|
item: T extends number ? number
|
||||||
|
: T extends string ? string
|
||||||
|
: T extends any[] ? T[number]
|
||||||
|
: T extends Iterable<infer T1> ? T1
|
||||||
|
: any,
|
||||||
|
index: number,
|
||||||
|
][];
|
||||||
|
function __VLS_getVForSourceType<T>(source: T): [
|
||||||
|
item: T[keyof T],
|
||||||
|
key: keyof T,
|
||||||
|
index: number,
|
||||||
|
][];
|
||||||
|
function __VLS_getSlotParameters<S, D extends S>(slot: S, decl?: D):
|
||||||
|
D extends (...args: infer P) => any ? P : any[];
|
||||||
|
function __VLS_asFunctionalDirective<T>(dir: T): T extends import('vue').ObjectDirective
|
||||||
|
? NonNullable<T['created' | 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated' | 'beforeUnmount' | 'unmounted']>
|
||||||
|
: T extends (...args: any) => any
|
||||||
|
? T
|
||||||
|
: (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void;
|
||||||
|
function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
|
||||||
|
T extends new (...args: any) => any ? __VLS_FunctionalComponent<K>
|
||||||
|
: T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>
|
||||||
|
: T extends (...args: any) => any ? T
|
||||||
|
: __VLS_FunctionalComponent<{}>;
|
||||||
|
function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): 2 extends Parameters<T>['length'] ? [any] : [];
|
||||||
|
function __VLS_asFunctionalElement<T>(tag: T, endTag?: T): (attrs: T & Record<string, unknown>) => void;
|
||||||
|
function __VLS_asFunctionalSlot<S>(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable<S>;
|
||||||
|
function __VLS_tryAsConstant<const T>(t: T): T;
|
||||||
|
}
|
||||||