把roles/index.uvue 像 users/detail.uvue那样 使用supa 和 store,现在的使用方式幼替换，interface 需要抽出来放到 admins/admintypes.uts并引入。
参考user-management的onResize处理大小屏的切换问题。
切换到小屏，card-view的display還是none
超出界面還是需要上下滾動的


https://gitee.com/xiangyuecn/AreaCity-JsSpider-StatsGov

【在线测试和预览】省市区乡镇四级行政区划数据：支持在线生成JSON、多级联动js；
【在线测试和预览】ECharts Map四级下钻在线测试和预览+代码生成：坐标边界范围在线测试和预览；
【转换工具】AreaCity-Geo格式转换工具软件：csv文件导入数据库，坐标、边界范围转换（支持转成sql、shp、geojson）；
【查询工具】AreaCity-Query-Geometry：高性能的坐标数据、边界数据查询工具，Java开源程序、带http查询接口，内存占用低（1秒可查1万个以上坐标对应的城市信息）。
数据下载


emqx ctl admins add akoo Hexiaoniu1!


node.js + fastify + postgres + kafka 

在pages/sports的目录下创建老师和学生端的关于训练提升系统的页面，用严格的uni-app-x的android能运行的模式，使用supadb做aksupainstance完成数据交互部分。同时还需要兼顾 大屏和小屏的不同展现方式.

我们的i项目是uni-app-x，不是uni-app.目前不支持 uni-easyinput，uni-nav-bar，uni-data-select，uni-icons， uni-datetime-picker。easyinput用input 代替，uni-nav-bar先删除，uni-data-select用picker-view代替，uni-datetime-picker 用components/picker-date 或components/picker-time代替

supadb的使用方式是:
// supadb 表格组件实例引用
const rolesdb = ref<SupadbComponentPublicInstance | null>(null)
  if( rolesdb.value!=null)
  {
  	const rolesdbloaddata = rolesdb.value!!.loadData;
  	rolesdbloaddata({ clear: false })
  }

  要获取 後續數據用 emit('load', newValue) 獲取的數據;

## UTS-Android 兼容性开发规范

> 以下为 uni-app-x (UTS) Android 端开发常见注意事项与踩坑点，建议所有开发成员遵循：

Uts需要注意的几点：
  表单优先用form.
  跟template交互的变量尽量用1维的变量
  不要用foreach,不要用map,不要用safeget,只要utsjsonobject就好了
  都用utsjsonobject 了，把safeget 这些必要性不大的函数都去掉，以utsjsonobject为核心
  用for解析的数组，最好用Array<type> .不要用简写[]
  uts android不支持picker,用picker-view,或者uni.showactionsheet.一维的优先用uni.showactionsheet.
  uts android不支持undefined 
  uts 中的变量声明使用 let 和 const，不能使用 var。
  uts 对判断只接受boolean类型，所以要用 !==null之类的来判断空
  uts不支持 Intersection Type is not supported.
  uts 中，只适合转 type，不适合使用 interface。因为 interface 在 kotlin 和 swift 中另有不同。
  for 循环里面的i要指定类型为Int ,如：for (let i:Int = 0; i < byteLen; i++) 
  ||表示逻辑或，&&表示逻辑与，!表示逻辑非，??表示空值合并运算符（当左侧为null或undefined时返回右侧值）
  uts在 if里面只接受 boolean类型的值，不能是其他类型的值，否则会报错。
  Index Signature is not supported
  uts不支持undefined类型，undefined类型的变量会被当做null处理。
  uts android对map的支持不够好，用for这种方式来代替。
  uts android 对类型要求比较严格，对属性的推断也比较严格，多重推断用as ...来确认类型，
  css只支持部分属性，不能使用复杂的选择器和伪类。
  只支持display: flex;
  不支持gap;
  不支持 display:grid;
  不支持 calc();
  scroll-view 在 uni-app-x中不是用 scroll-y=true 。而是要用 direction="vertical"

  不支持table,grid,grid-template-columns；
  property value `calc(33.33% - 10px)` is not supported for `min-width` (supported values are: `number`|`pixel`)​
  ts的 为空则使用默认值的语法在uts中不能用 ||，要用 ?? 来代替，但不要直接全部替换，因为逻辑与还是 ||。
  uts android不支持!在变量前面的判断空方式，要用 != null 来代替。
 picker-view的事件 UniPickerViewChangeEvent
 css:
 [APP-ANDROID] 不支持伪类选择器
[APP-IOS] 不支持伪类选择器
[APP-ANDROID] 不支持的单位: 'vh'
[APP-IOS] 不支持的单位: 'vh'
css不支持 gap;
WARNING: `backdrop-filter` is not a standard property name (may not be supported)​
 ERROR: Selector `.login-button[disabled]` is not supported. uvue only support classname selector​
 ERROR: property value `100%` is not supported for `min-height` (supported values are: `number`|`pixel`)​
[plugin:uni:app-uvue-css] ERROR: property value `all` is not supported for `transition-property` (supported values are: `css property`)​
用 utils/utis 下的 UTSJSONObject 做类型转换
时间获取用uni_modules/lime-date-time-picker
在script里面或者uts里面要用 import { tt } from '@/utils/i18nfun.uts',
uni-app-x的 android的setup模式下，对顺序有要求， 函数必须放在调用的函数之前，否则无法找到。
一般情况下，尽可能用强类型模式，uni_modules的情况下，尽量把type定义到interface里面。
style property `white-space` is only supported on `<text>|<button>`. there is an error on `<view class="ak-charts-container chart-view">`.


教师端用户id: 7bf7378e-a027-473e-97ac-3460ed3f170a
学生端用户id:  eed3824b-bba1-4309-8048-19d17367c084
https://ak3.oulog.com/storage/v1/object/public/
设备id : ak_devices.id :12345678-1234-5678-9abc-123456789012

以下是 UTS Android 兼容性开发要求的简明版，适合 agent/开发者快速理解和执行：

1. 表单优先用 form 组件。
2. 跟 template 交互的变量尽量用一维变量（不要嵌套对象）。
3. 不要用 forEach、map、safeget，数组遍历用 for 循环，类型转换用 UTSJSONObject。
4. 数组类型建议写成 Array<Type>，不要用 Type[] 简写。
5. 不支持 undefined，变量未赋值就是 null。
6. 变量声明只能用 let 或 const，不能用 var。
7. 判断空要用 !== null，不能用 !变量。
8. 只支持 type，不建议用 interface（interface 在 kotlin/swift 下不兼容）。
9. for 循环的 i 必须写明类型：let i: Int = 0。
10. 逻辑或用 ||，空值合并用 ??，不能混用。
11. if 判断只能是 boolean 类型。
12. 不支持索引签名（Index Signature）。
13. 类型推断严格，必要时用 as Type 明确类型。
14. 不支持 Intersection Type。
15. picker 用 picker-view 或 uni.showActionSheet 替代，不支持原生 picker。
16. 样式只支持 display: flex，不支持 gap、grid、calc()、伪类选择器等复杂 CSS。
17. scroll-view 用 direction="vertical"。
18. 不支持 table、grid、vh 单位、min-width: 100% 等。
19. 组件事件如 picker-view 用 UniPickerViewChangeEvent。
20. 时间选择用 uni_modules/lime-date-time-picker。
21. 类型转换建议用 utils/utis 下的 UTSJSONObject。
22. 在uts setup的android模式下，调用的函数必须在调用之前定义

数据获取争取都用强类型方式，查询或rpc查询用supa.from.executeAs<T>()方式，返回的是result,resultdata一般可以 as Array<T>,按照这个方式处理应该简单直接。update,insert用execute()