可信源码风险提示:保存或下载前请阅读源码和权限声明。
async function main() {
const toast = script.toast;
const contentWidth = typeof ui.getWidth === 'function' ? ui.getWidth() : 324;
const pageIndex = ui.signal(0);
const selectCategory = ui.signal(0);
const categories = [
{ id: 0, name: "时间生活" },
{ id: 1, name: "饮食厨房" },
{ id: 2, name: "运动健康" },
{ id: 3, name: "理财记账" },
{ id: 4, name: "出行旅游" },
{ id: 5, name: "学习办公" },
{ id: 6, name: "作息闹钟计划" },
{ id: 7, name: "购物消费" },
{ id: 8, name: "家庭家务" },
{ id: 9, name: "情感社交" },
{ id: 10, name: "趣味抽签测试" },
{ id: 11, name: "计量单位换算" },
{ id: 12, name: "文本笔记小工具" },
{ id: 13, name: "密码隐私安全" },
{ id: 14, name: "收纳规划" },
{ id: 15, name: "天气生活参考" },
{ id: 16, name: "育儿生活" },
{ id: 17, name: "节日农历" },
{ id: 18, name: "随身简易计算" },
{ id: 19, name: "杂项生活小工具" }
];
const toolList = [];
// 0 时间生活 50
for(let i = 0; i < 50; i++){
toolList.push({
cat:0,
name:"时间生活"+(i+1),
async handler(){
if(i === 0){
const now=new Date();
await dialog.alert({
message:`现在本地时间
${now.getFullYear()}年${now.getMonth()+1}月${now.getDate()}日
${String(now.getHours()).padStart(2,'0')}:${String(now.getMinutes()).padStart(2,'0')}:${String(now.getSeconds()).padStart(2,'0')}
时间戳秒:${Math.floor(Date.now()/1000)}`
});
}else if(i === 1){
const res=await dialog.number({title:"倒计时分钟数",value:5,min:1,max:180,decimals:0});
if(res.action!=='confirm') return;
toast(`设置${res.value}分钟提醒,脚本不要关闭`);
await new Promise(r=>setTimeout(r,res.value*60*1000));
await dialog.alert({title:"时间到!",message:`${res.value}分钟倒计时结束`});
}else if(i === 2){
const resY=await dialog.number({title:"出生年份",value:2000,min:1920,max:2030,decimals:0});
const resM=await dialog.number({title:"出生月份",value:6,min:1,max:12,decimals:0});
const resD=await dialog.number({title:"出生日子",value:15,min:1,max:31,decimals:0});
if(resY.action==='confirm'&&resM.action==='confirm'&&resD.action==='confirm'){
const birth=new Date(resY.value,resM.value-1,resD.value);
const today=new Date();
let age=today.getFullYear()-birth.getFullYear();
if((today.getMonth()*100+today.getDate()) < (birth.getMonth()*100+birth.getDate())) age--;
await dialog.alert({message:`周岁年龄:${age}岁`});
}
}else if(i === 3){
const res=await dialog.number({title:"输入天数",value:7,min:1,max:1000,decimals:0});
if(res.action==='confirm'){
const d=new Date(Date.now()+res.value*86400000);
await dialog.alert({message:`${res.value}天之后日期:\n${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()}`});
}
}else if(i === 4){
const res=await dialog.number({title:"过去N天",value:30,min:1,max:2000,decimals:0});
if(res.action==='confirm'){
const d=new Date(Date.now()-res.value*86400000);
await dialog.alert({message:`${res.value}天前日期:\n${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()}`});
}
}else if(i === 5){
const r1=await dialog.text({title:"日期A Y‑M‑D",value:"2026‑01‑01"});
const r2=await dialog.text({title:"日期B Y‑M‑D",value:"2026‑12‑31"});
if(r1.action==='confirm'&&r2.action==='confirm'){
const t1=new Date(r1.value).getTime();
const t2=new Date(r2.value).getTime();
const dayDiff=Math.round(Math.abs(t2-t1)/86400000);
await dialog.alert({message:`两个日期相差 ${dayDiff} 天`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展,可自行添加逻辑"});
}
}
});
}
//1 饮食厨房50
for(let i=0;i<50;i++){
toolList.push({
cat:1,
name:"厨房饮食"+(i+1),
async handler(){
if(i===0){
const res=await dialog.number({title:"大米克数",value:200,min:10,max:3000,decimals:0});
if(res.action==='confirm'){
const water=Math.round(res.value*1.2);
await dialog.alert({message:`煮饭参考\n米:${res.value} g\n建议加水:${water} g`});
}
}else if(i===1){
const res=await dialog.number({title:"食材重量(g)",value:500,min:10,max:10000});
const resRate=await dialog.number({title:"腌制盐比例%",value:2,min:0.1,max:10,decimals:1});
if(res.action==='confirm'&&resRate.action==='confirm'){
const salt=res.value*resRate.value/100;
await dialog.alert({message:`腌制用盐量:${salt.toFixed(1)} g`});
}
}else if(i===2){
const res=await dialog.number({title:"人数",value:3,min:1,max:20,decimals:0});
if(res.action==='confirm'){
const rice=res.value*120;
await dialog.alert({message:`${res.value}人做饭估算\n生米总重量约 ${rice} g`});
}
}else if(i===3){
await dialog.alert({title:"食品安全提示",message:"熟食室温存放不要超过2小时;剩菜尽快冷藏,建议24小时吃完"});
}else if(i===4){
const res=await dialog.number({title:"油温摄氏度",value:180,min:80,max:250,decimals:0});
if(res.action==='confirm'){
let tip="";
if(res.value<120)tip="低温,适合慢炸";
else if(res.value<180)tip="中温,煎鱼、煎肉";
else tip="高温,油炸,注意防溅油";
await dialog.alert({message:`${res.value}℃ ${tip}`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//2 运动健康50
for(let i=0;i<50;i++){
toolList.push({
cat:2,
name:"运动健康"+(i+1),
async handler(){
if(i===0){
const h=await dialog.number({title:"身高(cm)",value:170,min:100,max:230,decimals:0});
const w=await dialog.number({title:"体重(kg)",value:65,min:20,max:300});
if(h.action==='confirm'&&w.action==='confirm'){
const bmi=w.value / ((h.value/100)*(h.value/100));
let level="";
if(bmi<18.5)level="偏瘦";
else if(bmi<24)level="正常";
else if(bmi<28)level="超重";
else level="肥胖";
await dialog.alert({message:`BMI=${bmi.toFixed(2)}\n评价:${level}\n仅供参考,不能替代医生诊断`});
}
}else if(i===1){
const res=await dialog.number({title:"年龄",value:25,min:10,max:100,decimals:0});
if(res.action==='confirm'){
const maxHeart=220-res.value;
const low=Math.round(maxHeart*0.6);
const high=Math.round(maxHeart*0.8);
await dialog.alert({message:`运动心率参考\n最大心率≈${maxHeart}\n有氧区间:${low}-${high}`});
}
}else if(i===2){
const res=await dialog.number({title:"步行步数",value:8000,min:0,max:200000,decimals:0});
if(res.action==='confirm'){
const km=(res.value*0.72/1000).toFixed(2);
const kcal=Math.round(res.value*0.04);
await dialog.alert({message:`步数${res.value}\n估算距离:${km} km\n估算消耗:${kcal} 千卡`});
}
}else if(i===3){
await dialog.alert({title:"喝水提醒参考",message:"成年普通活动每日约1500‑2000ml;出汗多适当增加;肾病请遵从医嘱"});
}else if(i===4){
const min=await dialog.number({title:"运动分钟",value:40,min:1,max:300,decimals:0});
if(min.action==='confirm'){
const cal=min.value*6;
await dialog.alert({message:`中等强度运动${min.value}分钟\n大约消耗 ${cal} 千卡(估算)`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//3 理财记账50
for(let i=0;i<50;i++){
toolList.push({
cat:3,
name:"理财记账"+(i+1),
async handler(){
if(i===0){
const total=await dialog.number({title:"总金额",value:10000});
const month=await dialog.number({title:"计划月份",value:12,min:1,max:120,decimals:0});
if(total.action==='confirm'&&month.action==='confirm'){
const monthPay=(total.value/month.value).toFixed(2);
await dialog.alert({message:`分摊${month.value}个月\n每月≈ ${monthPay} 元`});
}
}else if(i===1){
const price=await dialog.number({title:"原价",value:299});
const dis=await dialog.number({title:"折扣(0‑10)",value:8});
if(price.action==='confirm'&&dis.action==='confirm'){
const final=(price.value*dis.value/10).toFixed(2);
const save=(price.value-final).toFixed(2);
await dialog.alert({message:`原价${price.value} ${dis.value}折\n实付:${final}\n省:${save}`});
}
}else if(i===2){
const salary=await dialog.number({title:"月收入",value:6000});
const saveRate=await dialog.number({title:"储蓄比例%",value:30,min:0,max:100});
if(salary.action==='confirm'&&saveRate.action==='confirm'){
const saveMoney=(salary.value*saveRate.value/100).toFixed(2);
await dialog.alert({message:`月收入${salary.value}\n每月存:${saveMoney}元`});
}
}else if(i===3){
const a=await dialog.number({title:"A账单",value:240});
const b=await dialog.number({title:"B账单",value:360});
if(a.action==='confirm'&&b.action==='confirm'){
const avg=((a.value+b.value)/2).toFixed(2);
await dialog.alert({message:`AA合计:${a.value+b.value}\n每人应付 ${avg}`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//4 出行旅游50
for(let i=0;i<50;i++){
toolList.push({
cat:4,
name:"出行旅游"+(i+1),
async handler(){
if(i===0){
const km=await dialog.number({title:"公里数",value:120});
const oil=await dialog.number({title:"油耗L/100km",value:7.5});
const oilPrice=await dialog.number({title:"油价元/L",value:7.5});
if(km.action==='confirm'&&oil.action==='confirm'&&oilPrice.action==='confirm'){
const liter=km.value*oil.value/100;
const cost=(liter*oilPrice.value).toFixed(2);
await dialog.alert({message:`${km.value}公里\n用油${liter.toFixed(2)}L\n油费${cost}元`});
}
}else if(i===1){
const days=await dialog.number({title:"出行天数",value:5,min:1,max:60,decimals:0});
const per=await dialog.number({title:"每日预算",value:300});
if(days.action==='confirm'&&per.action==='confirm'){
await dialog.alert({message:`${days.value}天旅行总预算 ${days.value*per.value}元`});
}
}else if(i===2){
await dialog.alert({title:"打包清单小提示",message:"证件、充电器、充电宝、换洗衣物、常用药、雨伞、口罩"});
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//5 学习办公50
for(let i=0;i<50;i++){
toolList.push({
cat:5,
name:"学习办公"+(i+1),
async handler(){
if(i===0){
const totalScore=await dialog.number({title:"试卷满分",value:100});
const get=await dialog.number({title:"得分",value:82});
if(totalScore.action==='confirm'&&get.action==='confirm'){
const rate=(get.value/totalScore.value*100).toFixed(1);
await dialog.alert({message:`得分率 ${rate}%`});
}
}else if(i===1){
const res=await dialog.number({title:"任务总数",value:12,min:1,max:200,decimals:0});
const done=await dialog.number({title:"已完成",value:5,min:0,max:200,decimals:0});
if(res.action==='confirm'&&done.action==='confirm'){
const pct=(done.value/res.value*100).toFixed(1);
await dialog.alert({message:`进度 ${done.value}/${res.value} = ${pct}%`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//6 作息计划50
for(let i=0;i<50;i++){
toolList.push({
cat:6,
name:"作息计划"+(i+1),
async handler(){
if(i===0){
const sleepH=await dialog.number({title:"入睡小时",value:23,min:0,max:23,decimals:0});
const sleepM=await dialog.number({title:"入睡分钟",value:0,min:0,max:59,decimals:0});
const wakeH=await dialog.number({title:"起床小时",value:7,min:0,max:23,decimals:0});
const wakeM=await dialog.number({title:"起床分钟",value:30,min:0,max:59,decimals:0});
if(sleepH.action==='confirm'&&sleepM.action==='confirm'&&wakeH.action==='confirm'&&wakeM.action==='confirm'){
let s1=sleepH.value*60+sleepM.value;
let s2=wakeH.value*60+wakeM.value;
if(s2<s1)s2+=24*60;
const totalHour=((s2-s1)/60).toFixed(1);
await dialog.alert({message:`睡眠总时长 ${totalHour} 小时`});
}
}else if(i===1){
await dialog.alert({title:"睡眠参考建议",message:"成年人推荐7‑9小时睡眠;青少年8‑10小时"});
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//7 购物消费50
for(let i=0;i<50;i++){
toolList.push({
cat:7,
name:"购物消费"+(i+1),
async handler(){
if(i===0){
const priceA=await dialog.number({title:"商品A单价",value:19.9});
const numA=await dialog.number({title:"A数量",value:2,min:0,decimals:0});
const priceB=await dialog.number({title:"商品B单价",value:29.9});
const numB=await dialog.number({title:"B数量",value:1,min:0,decimals:0});
if(priceA.action==='confirm'&&numA.action==='confirm'&&priceB.action==='confirm'&&numB.action==='confirm'){
const sum=(priceA.value*numA.value+priceB.value*numB.value).toFixed(2);
await dialog.alert({message:`购物合计 ${sum} 元`});
}
}else if(i===1){
const volume1=await dialog.number({title:"规格1容量",value:500});
const price1=await dialog.number({title:"规格1价格",value:12});
const volume2=await dialog.number({title:"规格2容量",value:1000});
const price2=await dialog.number({title:"规格2价格",value:20});
if(volume1.action==='confirm'&&price1.action==='confirm'&&volume2.action==='confirm'&&price2.action==='confirm'){
const u1=(price1.value/volume1.value*1000).toFixed(2);
const u2=(price2.value/volume2.value*1000).toFixed(2);
let tip=u1<u2?"规格1更划算":"规格2更划算";
await dialog.alert({message:`每1000单位价格\n规格1:${u1}\n规格2:${u2}\n${tip}`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//8 家庭家务50
for(let i=0;i<50;i++){
toolList.push({
cat:8,
name:"家庭家务"+(i+1),
async handler(){
if(i===0){
const room=await dialog.number({title:"房间面积㎡",value:20,min:1,max:500});
const paintPer=await dialog.number({title:"每升涂刷㎡",value:8});
if(room.action==='confirm'&&paintPer.action==='confirm'){
const liter=(room.value/paintPer.value).toFixed(2);
await dialog.alert({message:`墙面估算需要油漆 ${liter} L`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//9 情感社交50
for(let i=0;i<50;i++){
toolList.push({
cat:9,
name:"情感社交"+(i+1),
async handler(){
if(i===0){
const word=await dialog.text({title:"输入备忘短句",placeholder:"记录想说的话"});
if(word.action==='confirm'){
await script.data.set("social_note",word.value);
toast("已保存备忘");
}
}else if(i===1){
const note=await script.data.get("social_note","无记录");
await dialog.alert({message:"保存备忘:\n"+note});
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//10 抽签趣味测试50
for(let i=0;i<50;i++){
toolList.push({
cat:10,
name:"趣味抽签"+(i+1),
async handler(){
if(i===0){
const luck=["大吉","吉","中吉","小吉","平","小凶","凶","大凶"];
const rnd=luck[Math.floor(Math.random()*luck.length)];
await dialog.alert({title:"抽签结果",message:rnd+"\n仅供娱乐"});
}else if(i===1){
const yesNo=["是","否","再想想看","或许吧","大概率是","大概率否"];
const res=yesNo[Math.floor(Math.random()*yesNo.length)];
await dialog.alert({title:"Yes/No占卜",message:res+"\n仅供娱乐"});
}else if(i===2){
const res=await dialog.text({title:"输入选项逗号隔开",value:"吃饭,睡觉,逛街,看电影"});
if(res.action==='confirm'){
const arr=res.value.split(",");
const pick=arr[Math.floor(Math.random()*arr.length)];
await dialog.alert({message:"随机选中:"+pick});
}
}else {
await dialog.alert({title:this.name,message:"仅供娱乐,待扩展"});
}
}
});
}
//11 单位换算50
for(let i=0;i<50;i++){
toolList.push({
cat:11,
name:"单位换算"+(i+1),
async handler(){
if(i===0){
const cm=await dialog.number({title:"厘米",value:175});
if(cm.action==='confirm'){
const inch=(cm.value/2.54).toFixed(2);
await dialog.alert({message:`${cm.value} cm = ${inch} 英寸`});
}
}else if(i===1){
const jin=await dialog.number({title:"斤",value:2});
if(jin.action==='confirm'){
const kg=(jin.value*0.5).toFixed(2);
await dialog.alert({message:`${jin.value}斤 = ${kg} kg`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//12文本笔记小工具50
for(let i=0;i<50;i++){
toolList.push({
cat:12,
name:"文本笔记"+(i+1),
async handler(){
if(i===0){
const input=await dialog.text({title:"输入文字统计",placeholder:"粘贴文本"});
if(input.action==='confirm'){
const len=input.value.length;
const noSpace=input.value.replace(/\s/g,"").length;
await dialog.alert({message:`总字符${len},不含空格${noSpace}`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//13密码隐私安全50
for(let i=0;i<50;i++){
toolList.push({
cat:13,
name:"安全密码"+(i+1),
async handler(){
if(i===0){
const len=await dialog.number({title:"密码长度",value:14,min:6,max:64,decimals:0});
if(len.action==='confirm'){
const pool="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&*";
let pwd="";
for(let j=0;j<len.value;j++) pwd+=pool[Math.floor(Math.random()*pool.length)];
await dialog.alert({message:"生成密码:\n"+pwd+"\n请妥善保管"});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//14收纳规划50
for(let i=0;i<50;i++){
toolList.push({
cat:14,
name:"收纳规划"+(i+1),
async handler(){
if(i===0){
await dialog.alert({title:"收纳小建议",message:"常用物品放在随手可拿到位置;季节物品分类收纳,贴标签方便查找"});
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//15天气生活参考50
for(let i=0;i<50;i++){
toolList.push({
cat:15,
name:"天气生活"+(i+1),
async handler(){
if(i===0){
const temp=await dialog.number({title:"温度℃",value:22});
if(temp.action==='confirm'){
let wear="";
if(temp.value>=28) wear="短袖短裤";
else if(temp.value>=22) wear="薄长袖";
else if(temp.value>=15) wear="薄外套";
else if(temp.value>=8) wear="厚外套";
else wear="厚羽绒服";
await dialog.alert({message:`${temp.value}℃穿衣参考:${wear}`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//16育儿生活50
for(let i=0;i<50;i++){
toolList.push({
cat:16,
name:"育儿生活"+(i+1),
async handler(){
if(i===0){
const birthY=await dialog.number({title:"宝宝出生年",value:2025});
const birthM=await dialog.number({title:"宝宝出生月",value:3});
const birthD=await dialog.number({title:"宝宝出生日",value:10});
if(birthY.action==='confirm'&&birthM.action==='confirm'&&birthD.action==='confirm'){
const birth=new Date(birthY.value,birthM.value-1,birthD.value);
const now=new Date();
const diffMs=now-birth;
const day=Math.floor(diffMs/86400000);
const month=Math.floor(day/30.4375);
await dialog.alert({message:`宝宝出生距今\n天数:${day}天\n约 ${month} 个月`});
}
}else {
await dialog.alert({title:this.name,message:"仅供参考,不能替代儿科医生建议"});
}
}
});
}
//17节日农历简易50
for(let i=0;i<50;i++){
toolList.push({
cat:17,
name:"节日农历"+(i+1),
async handler(){
if(i===0){
await dialog.alert({title:"公历节日备忘",message:"元旦1‑1;清明4月;劳动节5‑1;端午农历五月初五;中秋农历八月十五;国庆10‑1;春节农历正月初一"});
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//18随身简易计算50
for(let i=0;i<50;i++){
toolList.push({
cat:18,
name:"随身计算"+(i+1),
async handler(){
if(i===0){
const a=await dialog.number({title:"数字A",value:0});
const b=await dialog.number({title:"数字B",value:0});
if(a.action==='confirm'&&b.action==='confirm'){
let divText=b.value===0?"除数为零":String((a.value/b.value).toFixed(4));
await dialog.alert({message:`A+B=${a.value+b.value}\nA-B=${a.value-b.value}\nA*B=${a.value*b.value}\nA/B=${divText}`});
}
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
//19杂项生活小工具50
for(let i=0;i<50;i++){
toolList.push({
cat:19,
name:"杂项工具"+(i+1),
async handler(){
if(i===0){
await dialog.alert({title:"防忘小技巧",message:"重要事情立刻简单记录;重复事项设置计时器提醒"});
}else {
await dialog.alert({title:this.name,message:"待扩展"});
}
}
});
}
let filterTools=[];
function refreshFilter(){
const catId=selectCategory.get();
filterTools=toolList.filter(t=>t.cat===catId);
}
refreshFilter();
const pageSize=20;
function renderUi(){
refreshFilter();
const curPage=pageIndex.get();
const totalPage=Math.ceil(filterTools.length/pageSize);
const start=curPage*pageSize;
const pageItems=filterTools.slice(start,start+pageSize);
const gridArr=pageItems.map(x=>({text:x.name}));
const catSelItems=categories.map(c=>({label:c.name,value:c.id}));
return [
ui.heading("生活全能工具箱1000项",{align:"center",lines:1}),
ui.text(`分类:${categories[selectCategory.get()].name} ${curPage+1}/${Math.max(totalPage,1)}页`,{align:"center"}),
ui.spacer(8),
ui.grid(gridArr,{columns:4,cellHeight:54}),
ui.spacer(10),
ui.buttonRow([
{text:"上一页",id:"prev",disabled:curPage<=0,onPress:()=>pageIndex.update(v=>v-1)},
{text:"下一页",id:"next",disabled:curPage>=totalPage-1,onPress:()=>pageIndex.update(v=>v+1)}
]),
ui.spacer(8),
ui.button("切换分类",async ()=>{
const res=await dialog.select({title:"选择分类",items:catSelItems,value:selectCategory.get()});
if(res.action==="confirm"){
selectCategory.set(res.value);
pageIndex.set(0);
}
},{id:"switchCat"}),
ui.button("输入序号直接打开工具",async ()=>{
const res=await dialog.number({title:"全局工具编号1‑1000",value:1,min:1,max:1000,decimals:0});
if(res.action==='confirm'){
const idx=res.value-1;
if(idx>=0&&idx<toolList.length){
await toolList[idx].handler();
}else{
toast("编号超出范围");
}
}
},{id:"jumpTool"}),
ui.spacer(12),
ui.text("点击【输入序号直接打开工具】输入1‑1000,可快速调用任意工具。部分工具仅供生活参考,不能替代专业医生、财务意见。",{size:16,color:"#888888",lines:6})
];
}
ui.render(renderUi);
pageIndex.subscribe(()=>ui.refresh());
selectCategory.subscribe(()=>{
pageIndex.set(0);
ui.refresh();
});
toast("1000项生活工具箱加载完成");
}
return main();