vue3+ts 调用接口,数据显示

数据展示

(例:展示医院等级数据,展示医院区域数据同理。)

接口文档中,输入参数 测试一下接口,发请求 看是否能够拿到信息

获取接口,api/index.ts 

/home/index.ts
// 统一管理首页模块接口
import request from '@/utils/request.ts'
import type { HospitalLevelAndRegionResponseData } from './type'
// 通过枚举管理首页模块的接口地址
enum API {
    // 获取医院等级以及地区的接口
    HOSPITALLEVELANDREGION_URL= '/cmn/dict/findByDictCode/'
}
// 获取医院的等级或者获取医院地区的数据   <接口返回的数据类型>
export const reqHospitalLevelAndRegion = (dictCode:string)=>request.get<any,HospitalLevelAndRegionResponseData>(API.HOSPITALLEVELANDREGION_URL+dictCode);

api/type.ts 中,写 接口的 ts 类型。并在 api/index.ts 中,写明 接口返回的数据类型

api/typs.ts
// 代表医院的等级或者地区数据的ts类型
export interface HospitalLevelAndRegion {
    "id": number,
    "createTime": string,
    "updateTime": string,
    "isDeleted": number,
    "param": {},
    "parentId": number,
    "name": string,
    "value": string,
    "dictCode": string,
    "hasChildren": boolean
}
export type HospitalLevelAndRegionArr = HospitalLevelAndRegion[];
// 获得等级或者医院接口返回数据类型
export interface HospitalLevelAndRegionResponseData extends ResponseData{
    data: HospitalLevelAndRegionArr
}

数据展示(发请求-> 拿数据-> 渲染数据)

pages/level/index.vue 中,挂载完毕 就要获取数组,展示数组

用到的 ts 数据类型在 api 文件夹中

 

代码如下,

/pages/index.vue
<script lang="ts">
export default {
    name: 'Level',
};
</script>

<script setup lang='ts'>
import { reqHospitalLevelAndRegion } from '@/api/home';
import { ref, onMounted } from 'vue';
import type { HospitalLevelAndRegionResponseData, HospitalLevelAndRegionArr } from '@/api/home/type'
// 定义一个数组存储医院等级数据
let levelArr = ref<HospitalLevelAndRegionArr>([]);
// 控制医院等级高亮响应式数据
let activeFlag = ref<string>('');

// 组件挂载完毕
onMounted(()=>{
    getLevel();
});
// 获取医院等级的数组
const getLevel = async () => {
    // 发一个请求
    let result: HospitalLevelAndRegionResponseData = await reqHospitalLevelAndRegion(
        'Hostype'
    );
    console.log(result);
    // 存储医院等级的数组
    if(result.code == 200){
        levelArr.value = result.data;
        
    }
}

渲染数据

高亮问题:

设置一个控制高亮的响应式数据 activeFlag ,点谁 默认存谁 谁高亮;点击时响应式数据改变的方法,动态类名控制 调整样式

/pages/index.vue
<script setup lang='ts'>
// 控制医院等级高亮响应式数据
let activeFlag = ref<string>('');

// 点击等级的按钮回调
const changeLevel = (level:string)=>{
    // 高亮响应式数组存储level数值
    activeFlag.value = level;
    // console.log(level);
}
</script>
<template>
    <div class="level">
        <h1>医院</h1>
        <div class="content">
            <div class="left">等级:</div>
            <ul class="hospital">
                <!-- ''为全部,12345分别为后几个li -->
                <li :class="{active:activeFlag==''}" @click="changeLevel('')">全部</li>    
                <li v-for="level in levelArr" :class="{active:activeFlag==level.value}" :key="level.value" @click="changeLevel(level.value)">{{ level.name }}</li>
            </ul>
            <div class="right"></div>
        </div>
    </div>
</template>

 


根据等级和地区筛选医院展示

显示数据

子传父

// 父组件中
<script lang='ts'>
const getLevel = (level: string) => {
    // 收集参数: 等级参数
    hostype.value = level;
    // 再次发请求
    getHospitalInfo();
}
</script>
<template>
            <!-- 等级子组件 -->
            <Level @getLevel="getLevel" />
</template>


// 子组件中
<script lang='ts'>
const changeLevel = (level:string)=>{
    // 触发自定义事件:将医院等级参数回传给父组件(子传父)
    $emit('getLevel',level);
}

// 触发自定义事件 ,let $emit = defineEmits(['父组件函数']);
let $emit = defineEmits(['getLevel']);
</script>
<template>
    <li @click="changeLevel('')">全部</li>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值