首页 > 编程语言 >python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制

python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制

时间:2024-06-09 15:31:25浏览次数:9  
标签:uniapp task name 自定义 python 标签 list states color

实现效果(红框内):
在这里插入图片描述

后端api如下:

@task_api.route('/user/task/states_list', methods=['POST', 'GET'])
@visitor_token_required
def task_states(user):
    name_list = ['待接单', '设计中', '交付中', '已完成', '全部']
    data = []
    color = ['#F04864', '#F04864', '#F04864', '#19be6b', '#19be6b']
    c_n = 0
    for i in name_list:
        item = {
            'name': i,
            'badge': {
                'color': '#fff',
                'bgColor': color[c_n],
                'value': get_task_states_num(i, user, False)
            }
        }
        data.append(item)
        c_n += 1
    return reg_func(200, data, '查询成功')

输出结果:

{
  "code": 200,
  "data": [
    {
      "badge": {
        "bgColor": "#F04864",
        "color": "#fff",
        "value": 0
      },
      "name": "待接单"
    },
    {
      "badge": {
        "bgColor": "#F04864",
        "color": "#fff",
        "value": 2
      },
      "name": "设计中"
    },
    {
      "badge": {
        "bgColor": "#F04864",
        "color": "#fff",
        "value": 11
      },
      "name": "交付中"
    },
    {
      "badge": {
        "bgColor": "#19be6b",
        "color": "#fff",
        "value": 22
      },
      "name": "已完成"
    },
    {
      "badge": {
        "bgColor": "#19be6b",
        "color": "#fff",
        "value": 38
      },
      "name": "全部"
    }
  ],
  "msg": "查询成功",
  "time": "2024-06-09 15:07:47"
}

这段代码定义了一个 Flask 路由,处理用户任务状态的获取。下面是对这段代码的详细解释:

路由定义和装饰器

@task_api.route('/user/task/states_list', methods=['POST', 'GET'])
@visitor_token_required
def task_states(user):
  • @task_api.route('/user/task/states_list', methods=['POST', 'GET']):这是一个路由装饰器,用来定义访问该函数的 URL 和方法。在这里,定义了一个访问路径 /user/task/states_list,支持 POSTGET 两种请求方法。
  • @visitor_token_required:这是一个自定义的装饰器,用来验证访问该路由的用户是否拥有合法的访问权限。通常,这个装饰器会检查用户的令牌(token),确保用户是经过认证的。
  • def task_states(user):定义了一个名为 task_states 的函数,并且 user 是一个参数。user 参数一般是从 @visitor_token_required 装饰器中获取到的经过验证的用户信息。

函数内部逻辑

name_list = ['待接单', '设计中', '交付中', '已完成', '全部']
data = []
color = ['#F04864', '#F04864', '#F04864', '#19be6b', '#19be6b']
c_n = 0
  • name_list:这是一个任务状态的列表,包含了可能的任务状态名称,如“待接单”、“设计中”、“交付中”、“已完成”和“全部”。
  • data:这是一个空列表,稍后将用来存储每个任务状态对应的数据信息。
  • color:这是一个颜色代码列表,每个任务状态对应一个背景颜色,用于标识任务状态的颜色。
  • c_n:这是一个计数器变量,用来遍历 color 列表的索引。

遍历状态列表并生成数据

for i in name_list:
    item = {
        'name': i,
        'badge': {
            'color': '#fff',
            'bgColor': color[c_n],
            'value': get_task_states_num(i, user, False)
        }
    }
    data.append(item)
    c_n += 1
  • for i in name_list:遍历 name_list 列表中的每一个状态名称。
  • item:定义一个字典,存储当前任务状态的详细信息,包括状态名称 name 和一个徽章 badge
    • name:任务状态名称。
    • badge:一个包含颜色和数值信息的字典。
      • color:徽章上的文本颜色,这里固定为白色 #fff
      • bgColor:徽章的背景颜色,从 color 列表中按顺序获取。
      • value:调用 get_task_states_num 函数获取对应任务状态的数量,这个函数可能会查询数据库或其他数据源来获取 user 用户对应状态 i 的任务数量。
  • data.append(item):将构造好的 item 添加到 data 列表中。
  • c_n += 1:计数器 c_n 加 1,用于下一个任务状态的颜色获取。

返回结果

return reg_func(200, data, '查询成功')
  • reg_func:这是一个自定义函数,用来格式化 API 的返回结果。
    • 200:表示 HTTP 状态码 200,通常表示请求成功。
    • data:传入的任务状态列表数据。
    • '查询成功':消息,表示查询操作成功。

主要逻辑总结

  • 验证用户身份。
  • 生成一个任务状态列表,每个状态包含状态名称、颜色和对应任务数量。
  • 返回生成的任务状态列表数据。

代码的主要目的

这个路由用于返回用户任务的不同状态及其对应的任务数量,并为每个状态设置特定的颜色,便于前端展示。

uniapp代码如下:

<u-tabs :list="states_list" lineWidth="50" @click="click_tabs" :scrollable="false"
					itemStyle="padding:20rpx 2rpx;"></u-tabs>

这段代码是一个 Vue.js 模板中的组件调用,具体使用了一个自定义的 <u-tabs> 组件来显示标签页。下面是对这段代码的详细解释:

组件 <u-tabs>

<u-tabs> 组件是一个标签页组件,通常用于在单个页面上显示多个标签,以实现内容的切换。这个组件有几个属性和事件,用于配置和处理标签的行为。

属性解释

<u-tabs 
    :list="states_list" 
    lineWidth="50" 
    @click="click_tabs" 
    :scrollable="false"
    itemStyle="padding:20rpx 2rpx;">
</u-tabs>
1. :list="states_list"
  • :list:这是一个绑定属性,通常用于将数据传递给子组件。在 Vue 中,前缀 : 表示属性值是一个 JavaScript 表达式。
  • states_list:这是一个 Vue 实例中的数据属性,它包含了用于生成标签的数据列表。例如,states_list 可能是一个对象数组,每个对象表示一个标签。

每个对象可以包含标签名称和对应的值或其他属性,具体内容取决于 u-tabs 组件的实现。

2. lineWidth="50"
  • lineWidth:这是一个定义标签下方线条宽度的属性,单位一般是像素 (px)。
  • 50:设置线条宽度为 50 像素。
3. @click="click_tabs"
  • @click:这是一个事件绑定,表示当用户点击某个标签时,会触发 click_tabs 方法。
  • click_tabs:这是 Vue 实例中的一个方法,用于处理点击事件。
methods: {
    click_tabs(tabIndex) {
        console.log("标签点击事件,标签索引:", tabIndex);
        // 根据 tabIndex 处理标签点击后的逻辑
    }
}

点击标签时,这个方法会接收一个参数,通常是被点击标签的索引或相关信息。

4. :scrollable="false"
  • :scrollable:这是一个布尔属性,控制标签是否可以滚动。在 Vue 中,前缀 : 表示属性值是一个 JavaScript 表达式。
  • false:设置标签不可滚动,即标签不会超出容器的宽度。
5. itemStyle="padding:20rpx 2rpx"
  • itemStyle:这是一个内联样式属性,直接应用于每个标签项。
  • "padding:20rpx 2rpx":定义了每个标签的内边距,20rpx 表示上下内边距为 20 像素,2rpx 表示左右内边距为 2 像素。rpx 是一种响应式像素单位,常用于小程序开发中,可以根据屏幕宽度自适应调整。

组件的功能

  • 显示 states_list 中定义的标签,每个标签可以是一个不同的任务状态。
  • 标签的下方线条宽度为 50 像素。
  • 用户点击标签时,触发 click_tabs 方法进行处理。
  • 标签项不可滚动,标签内容宽度受限于容器宽度。
  • 每个标签项有固定的内边距,控制标签的显示样式。

应用场景

这种组件通常用于用户界面中的导航或内容切换,例如在一个任务管理系统中,用于切换显示不同状态的任务列表。

代码解释由chatGPT协助完成

标签:uniapp,task,name,自定义,python,标签,list,states,color
From: https://blog.csdn.net/weixin_40541330/article/details/139562120

相关文章

  • Python: 2d arry
     score=[[58,80,74,90,45,82],[71,70,64,85,50,86],[87,63,65,84,62,83],[91,66,67,92,65,90],[83,74,81,82,57,82]]k=0whilek<5:subavg=0a=0whilea<6:subavg......
  • 《手把手教你》系列练习篇之15-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细
    1.简介 本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手。因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙伴们或者童鞋们进行了一个登录模块的自动化测试的实例,其他的你可以照......
  • 《手把手教你》系列练习篇之14-python+ selenium自动化测试 -压台篇(详细教程)
    1.简介 本文是练习篇的最后一篇文章,虽然练习篇的文章到此就要和大家说拜拜了,但是我们的学习之路才刚刚开始。不要停下你的脚步,大步朝前走吧!比你优秀的人还在走着,我们有什么理由停下自己的脚步了,生命不止,学习亦是如此。好了,宏哥的毒鸡汤好喝吧,喝够了就开始学习吧。......
  • python-数据分析-Numpy-2
    数组对象的方法应用#-*-coding:utf-8-*-#数组对象的方法importmatplotlib.pyplotaspltimportnumpy#1、获取描述统计信息array1=numpy.random.randint(1,100,10)print(array1)#随机数组[64841052366431797]#计算总和、平均值、中位数pr......
  • C#自定义控件(自定义属性、自定义事件)
    1、创建类库项目在当前解决方案中添加新项目类库。注意选择“.NETFramework”创建完成后,删除默认的Class1类。2、添加项目图片在类库的debug中添加一个文件夹image,并复制项目需要的图片。3、把全部项目拖放到资源文件中选中所有图片,然后拖放到[资源],方法是右击类库项目......
  • python 多任务之多线程
    多线程线程是程序执行的最小单位,实际上进程只负责分配资源,而利用这些资源执行程序的是线程,也就是说进程是线程的容器,一个进程中最少有一个线程来负责执行程序,它可以与同属一个进程的其它线程共享进程所拥有的全部资源 为什么要选择线程,而不选择进程进程:就像同时和两个人......
  • python - pandas常用计算函数
    文中所用数据集有需要的可以私聊我获取学习目标 知道排序函数nlargest、nsmallest和sort_values的用法知道Pandas中求和、计数、相关性值、最小、最大、平均数、标准偏差、分位数的函数使用1排序函数导包并加载数据集importpandasaspd​#加载csv数据,返回df......
  • 超详解——python数字和运算——小白篇
    目录1.位运算2.常用内置函数/模块math模块:random模块:decimal模块:3.内置函数:总结:1.位运算位运算是对整数在内存中的二进制表示进行操作。Python支持以下常见的位运算符:按位与(&):两个二进制数对应位都为1时,结果的该位才为1。按位或(|):两个二进制数对应位有一个为1,结果......
  • 运筹学练习Python精解——指派问题
    练习8分配甲、乙、丙、丁4个人去完成A、B、C、D、E5项任务,每个人完成各项任务的时间见下表。由于任务数多于人数,故考虑:(1)任务E必须完成,其他4项中可任选3项完成;(2)其中有一人完成两项,其他每人完成一项。试分别确定最优分配方案,使完成任务的总时间为最少。人员\任务AB......
  • 【四种语言一网打尽(C\C++\Python\Golang)】L1-005 考试座位号
    L1-005考试座位号每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着......