吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 689|回复: 7
收起左侧

[学习记录] 【零基础实战AI编程】AutoJS 车险佣金计算器全AI流程开发

  [复制链接]
ByCool1 发表于 2025-3-21 23:38
0 基础也能玩转 APP 开发的核心秘诀
作为完全零基础的开发者,我通过「精准指令 + 文档投喂」模式,成功用 AutoJS 完成了车险佣金计算器的开发。本文将毫无保留分享:
与 AI 高效沟通的 3 个黄金法则
处理多版本语法差异的实战策略
完整无删减的项目源码解析
一、AI 协作开发三板斧(附对话示例)
1. 指令精准化:从模糊到专业的进化
初级:"在在 var currentVersion ="V1.0.0"; 下面设置版本号"
专业:"在 var currentVersion ="V1.0.0"; 下方,将 id 为 current_version 的 TextView 标签 text 属性赋值为 currentVersion"
2.语义纠正技巧:
当 AI 误判变量 / 标签时(如将 XML 标签识别为 JS 变量):
即时反馈:"current_version 是 XML 标签 id,需修改 ui.layout 中的 text 属性"
升级指令:"在版本检测逻辑中,通过 ui.current_version.setText (currentVersion) 更新标签"
3.版本兼容方案:文档学习法
问题场景:开发工具旧版  vs 新版 差异
版本声明:"当前使用 AutoJS6,参考这个版本的文档:[链接]"

二、成果展示与优化方向
前功能:
基础保费 × 佣金比例计算
数据格式化(保留两位小数)
多版本APP获取车辆信息
支持新增、管理和删除佣金套餐。

三、开发者说:0 基础的突围之道
" 不要害怕提问,要学会「训练」AI:
每次沟通保留上下文
建立项目专属术语表(如:' 标签 ' 特指 XML 控件)
重要代码段添加版本注释
定期整理《AI 协作错题集》"

结语:
从 "Hello World" 到完整应用,我用了 上千 次与 AI 的深度对话。记住:不是 AI 在帮你写代码,而是你在训练一个专属的开发助手。保持精准沟通,善用文档武器,零基础也能创造无限可能!



下面是代码分享:
[JavaScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
// 在代码开始处添加获取最新版本号的逻辑
//console.show();
var r = http.get("https://wwth.lanzouw.com/b00u43sfg", {
    headers: {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'
    }
});
 
// 添加逻辑来提取版本号
var htmlContent = r.body.string();
var versionMatch = htmlContent.match(/<span id="filename">(.*?)<\/span>/);
var versionNumber = versionMatch ? versionMatch[1].trim() : "未知版本";
log("版本号 = " + versionNumber);
 
// 添加版本号变量并进行对比
var currentVersion = "V1.0.0"; // 假设当前软件版本号为 1.0.0
var shouldShowMainPanel = true; // 添加: 控制主界面是否显示的标志变量
 
var versionArray = versionNumber.split('-');
if (!versionArray.includes(currentVersion)) {
    shouldShowMainPanel = false; // 添加: 设置标志变量为 false
    dialogs.build({
        title: "版本更新",
        content: "发现新版本: " + versionArray[versionArray.length - 1],
        positive: "确定",
        positiveColor: "#007bff"
    }).on("positive", function() {
        app.openUrl("https://wwth.lanzouw.com/b00u43sfg");
         
        exit(); // 添加: 退出软件
    }).show();
} else {
    log("当前已是最新版本: " + currentVersion);
    // 添加: 版本号不等于最后一个成员时的处理逻辑
    if (currentVersion !== versionArray[versionArray.length - 1]) {
        shouldShowMainPanel = false; // 设置标志变量为 false
        dialogs.build({
            title: "版本更新",
            content: "当前版本号: " + currentVersion + "\n发现新版本: " + versionArray[versionArray.length - 1],
            negative: "取消",
            positive: "确定",
            negativeColor: "#FF4444",
            positiveColor: "#007bff"
        }).on("negative", function () {
            shouldShowMainPanel = true; // 设置标志变量为 true
            w.mainPanel.setVisibility(android.view.View.VISIBLE); // 添加: 显示主界面
        }).on("positive", function () {
            app.openUrl("https://wwth.lanzouw.com/b00u43sfg");
            exit(); // 退出软件
        }).show();
    }
}
 
 
log("代码开始执行");
 
 
// 使用 storages 模块来存储和读取配置
var storage = storages.create("vehicle_commission_calculator");
 
// 读取复选框状态配置
var taxCheckboxState = storage.get("taxCheckboxState", true);
var textCheckboxState = storage.get("textCheckboxState", true);
var backupCheckboxState = storage.get("backupCheckboxState", true);
 
// 原有的悬浮窗代码
var w = floaty.window(
    <frame gravity="right|top">
        <vertical id="mainPanel" gravity="right|top" w="wrap_content" h="wrap_content" bg="#00000000">
            <vertical id="expandPanel" gravity="right|top" w="200" h="wrap_content" bg="#FFFFFF" visible="true" alpha="0.9">
                <horizontal gravity="left" w="match_parent">
                    <text id="apptitle" text="佣金计算器" gravity="left" w="wrap_content" h="wrap_content" padding="10" alpha="0.8" />
                    <horizontal gravity="right|top" w="match_parent">
                        <button id="minimizeBtn" bg="#4CAF50" radius="15" w="30" h="40" text="—" alpha="0.8" />
                        <button id="menuBtn" bg="#2196F3" radius="15" w="30" h="40" text="&#9776;" alpha="0.8" />
                        <button id="closeBtn" bg="#FF4444" radius="15" w="30" h="40" text="X" alpha="0.8" />
                    </horizontal>
                </horizontal>
                <horizontal gravity="left" w="match_parent">
                    <input id="input1" hint="交强保费" inputType="numberDecimal" w="80" h="wrap_content" />
                    <input id="input2" hint="费用" inputType="numberDecimal" w="50" h="wrap_content" />
                    <text id="jqyjText" text="0.00" w="wrap_content" h="wrap_content" padding="10" />
                </horizontal>
                <horizontal gravity="left" w="match_parent">
                    <input id="input3" hint="车船税费" inputType="numberDecimal" w="80" h="wrap_content" />
                    <input id="input4" hint="费用" inputType="numberDecimal" w="50" h="wrap_content" />
                    <text id="syjyText" text="0.00" w="wrap_content" h="wrap_content" padding="10" />
                </horizontal>
                <horizontal gravity="left" w="match_parent">
                    <input id="input5" hint="商业保费" inputType="numberDecimal" w="80" h="wrap_content" />
                    <input id="input6" hint="费用" inputType="numberDecimal" w="50" h="wrap_content" />
                    <text id="sybxjyText" text="0.00" w="wrap_content" h="wrap_content" padding="10" />
                </horizontal>
                <horizontal gravity="left" w="match_parent">
                    <input id="input7" hint="驾乘保费" inputType="numberDecimal" w="80" h="wrap_content" />
                    <input id="input8" hint="费用" inputType="numberDecimal" w="50" h="wrap_content" />
                    <text id="jcyjText" text="0.00" w="wrap_content" h="wrap_content" padding="10" />
                </horizontal>
                <horizontal gravity="left" w="match_parent">
                    <checkbox id="taxCheckbox" text="除税" checked="{{ taxCheckboxState }}" />
                    <checkbox id="textCheckbox" text="文本" checked="{{ textCheckboxState }}" />
                    <checkbox id="backupCheckbox" text="清空" checked="{{ backupCheckboxState }}" />
                </horizontal>
                <text id="summaryText" text="" w="match_parent"  padding="10" />
                <button id="getVehicleInfoBtn" text="获取车辆信息" w="match_parent" h="wrap_content" />
                <button id="selectPlanBtn" text="选择费用套餐" w="match_parent" h="wrap_content" />
                <button id="calculateBtn" text="计算佣金" w="match_parent" h="wrap_content" />
            </vertical>
            <img id="iconBtn" radius="20" w="40" h="40" alpha="0.8" visibility="gone" src="@drawable/ic_exposure_black_48dp" />
        </vertical>
    </frame>
);
 
 
function centerWindow() {
    var screenWidth = device.width;
    var screenHeight = device.height;
    var windowWidth = w.getWidth();
    var windowHeight = w.getHeight();
    var centerX = (screenWidth - windowWidth) / 4;
    var centerY = (screenHeight - windowHeight) / 4;
    w.setPosition(centerX, centerY);
}
w.summaryText.setText("总保费: {总保费} 净: {净}\n佣金: {佣金}");
// 获取按钮和展开面板元素
var expandPanel = w.expandPanel;
var closeBtn = w.closeBtn; // 获取关闭按钮元素
var menuBtn = w.menuBtn;
var minimizeBtn = w.minimizeBtn;
var iconBtn = w.iconBtn;
 
// 获取 apptitle 元素
var apptitle = w.apptitle;
 
// 添加 apptitle 点击事件监听器
apptitle.click(function () {
    // 切换调整标识的显示状态
    w.setAdjustEnabled(!w.isAdjustEnabled());
});
 
// 检查悬浮窗是否可见
if (w.mainPanel.getVisibility() === android.view.View.GONE) {
    w.mainPanel.setVisibility(android.view.View.VISIBLE);
    log("确保悬浮窗可见");
}
 
// 获取输入框元素
var inputs = [
    w.input1, w.input2, w.input3, w.input4,
    w.input5, w.input6, w.input7, w.input8
];
 
// 为每个输入框添加 click 事件监听器
inputs.forEach(function(input) {
    input.on("touch_down", function() {
        w.requestFocus();
        input.requestFocus();
    });
});
 
// 添加最小化按钮点击事件监听器
minimizeBtn.click(function () {
    if (savedX === 0 && savedY === 0) {
        var screenWidth = device.width;
        var currentY = w.getY();
        w.setPosition(screenWidth - w.getWidth() + 85, currentY);
 
    }
    if (savedX !== 0 || savedY !== 0) {
        w.setPosition(savedX, savedY);
        log("悬浮窗移动到保存的位置");
    }
    expandPanel.setVisibility(android.view.View.GONE);
    iconBtn.setVisibility(android.view.View.VISIBLE);
    log("主界面设置为不可见,iconBtn显示");
    w.disableFocus(); // 添加调用
});
 
// 添加小图标按钮点击事件监听器
iconBtn.click(function () {
    log("iconBtn clicked"); // 添加调试信息
    iconBtn.setVisibility(android.view.View.GONE);
    expandPanel.setVisibility(android.view.View.VISIBLE);
    // 将悬浮窗移动到屏幕中央
    centerWindow();
    log("iconBtn隐藏,主界面显示");
    w.disableFocus(); // 添加调用
});
 
// 获取复选框元素
var backupCheckbox = w.backupCheckbox;
var taxCheckbox = w.taxCheckbox; // 获取 taxCheckbox 元素
var textCheckbox = w.textCheckbox; // 获取 textCheckbox 元素
 
// 保存复选框状态配置
function saveCheckboxStates() {
    storage.put("taxCheckboxState", taxCheckbox.isChecked());
    storage.put("textCheckboxState", textCheckbox.isChecked());
    storage.put("backupCheckboxState", backupCheckbox.isChecked());
}
 
// 添加 backupCheckbox 点击事件监听器
backupCheckbox.click(function () {
    // 确保 backupCheckbox 始终保持勾选状态
    backupCheckbox.setChecked(true);
    saveCheckboxStates();
 
    // 清空 input1 到 input8 的内容
    inputs.forEach(function(input) {
        input.setText("");
    });
    w.disableFocus();
    // 重置 summaryText 的内容
    w.summaryText.setText("总保费: {总保费} 净: {净}\n佣金: {佣金}");
 
    // 将四个结果标签内容改为“0.00”
    w.jqyjText.setText("0.00");
    w.syjyText.setText("0.00");
    w.sybxjyText.setText("0.00");
    w.jcyjText.setText("0.00");
});
 
// 添加 taxCheckbox 点击事件监听器
taxCheckbox.click(function () {
    saveCheckboxStates();
});
 
// 添加 textCheckbox 点击事件监听器
textCheckbox.click(function () {
    saveCheckboxStates();
});
 
 
 
 
 
// 初始化车牌号、车主姓名和投保人姓名变量
var plateNumber = "";
var ownerName = "";
var insuredName = "";
 
// 封装清空输入框并禁用焦点的函数
function clearInputsAndDisableFocus() {
    w.input1.setText("");
    w.input3.setText("");
    w.input5.setText("");
    w.input7.setText("");
    w.disableFocus();
}
 
// 封装函数:根据文本标签查找控件并将文本设置到指定输入框
function setTextToInputByLabel(labelText, inputField, containsLabel) {
    threads.start(function () {
        // 查找控件文本包含 labelText 的控件
        var targetText = containsLabel ? textContains(labelText).findOne(500) : text(labelText).findOne(500);
        if (targetText) {
            // 找到其父控件
            var parent = targetText.parent();
            if (parent) {
                // 在其父控件下面找到 indexInParent(1) 的子控件
                var targetValueText = parent.child(1);
                if (targetValueText) {
                    // 获取该控件文本
                    var value = targetValueText.text();
                    log(labelText + " 值: " + value);
                    // 使用正则表达式提取数值
                    var numericValue = value.match(/\d+(\.\d+)?/);
                    if (numericValue) {
                        value = numericValue[0];
                    } else {
                        value = "";
                    }
                    // 更新 UI 需要在 UI 线程中执行
                    ui.run(function () {
                        inputField.setText(value);
                    });
                }
            }
        }
    });
}
 
// 封装函数:根据车牌号查找控件并将文本设置到指定输入框
function fetchVehicleInfo(plateLabel, callback) {
    threads.start(function () {
        // 找到文本为“车牌号”的控件
        var plateNumberText = text(plateLabel).findOne(500);
        if (plateNumberText) {
            // 获取后一个兄弟控件
            var nextSibling = plateNumberText.nextSibling();
            if (nextSibling) {
                // 获取该控件的子控件内容
                var childCount = nextSibling.childCount();
                for (var i = 0; i < childCount; i++) {
                    var child = nextSibling.child(i);
                    if (child) {
                        var childText = child.text();
                        log(plateLabel + " 后一个兄弟控件的子控件内容: " + childText);
                        callback(childText); // 返回 childText 的值
                        return;
                    }
                }
            }
        }
        callback(""); // 如果没有找到,返回空字符串
    });
}
 
// 添加获取车辆信息按钮点击事件监听器
w.getVehicleInfoBtn.click(function () {
    // 检测无障碍操作是否开启
    if (!auto.service) {
        toast("请先开启无障碍操作。选择[车险佣金计算器]", 'long'); /* 显示消息框 3.5 秒钟. */
        app.startActivity({
            action: "android.settings.ACCESSIBILITY_SETTINGS"
        });
        return;
    }
 
    clearInputsAndDisableFocus(); // 清空input,取消焦点
 
    // 调用封装函数获取交强险保费并设置到 input1
    setTextToInputByLabel("交强险", w.input1);
 
    // 调用封装函数获取车船税信息并设置到 input3
    setTextToInputByLabel("车船税", w.input3);
 
    // 调用封装函数获取商业险信息并设置到 input5
    setTextToInputByLabel("商业险", w.input5, true);
 
    // 调用封装函数获取驾乘险信息并设置到 input7
    setTextToInputByLabel("驾乘", w.input7, true);
 
    // 调用封装函数获取车辆信息
    fetchVehicleInfo("车牌号", function(childText) {
        plateNumber = childText;
        log("车牌号: " + plateNumber);
 
        fetchVehicleInfo("车主姓名", function(childText) {
            ownerName = childText;
            log("车主姓名: " + ownerName);
 
            fetchVehicleInfo("投保人姓名", function(childText) {
                insuredName = childText;
                log("投保人姓名: " + insuredName);
            });
        });
    });
});
 
// 读取费用套餐配置
var commissionPlans = storage.get("commissionPlans", ["4/0/4/20/燃油车"]);
 
// 保存费用套餐配置
function saveCommissionPlans() {
    storage.put("commissionPlans", commissionPlans);
}
 
// 添加选择费用套餐按钮点击事件监听器
w.selectPlanBtn.click(function () {
    w.disableFocus(); // 添加调用
    // 先点击缩小按钮
    minimizeBtn.callOnClick();
    dialogs.select("请选择费用套餐", commissionPlans.map(plan => plan.split('/').slice(0, 4).join('/') + (plan.split('/').length > 4 ? ' (' + plan.split('/')[4] + ')' : '')))
        .then(i => {
            if (i == -1) {
                //toast("取消");
                iconBtn.callOnClick();
            } else {
                var selectedPlan = commissionPlans[i];
                log("被点击的套餐内容: " + selectedPlan); // 调试输出被点击的套餐内容
                 
                // 点击小图标按钮恢复界面
                iconBtn.callOnClick();
                 
                // 将选中的菜单选项内容以“/”分割为4份,分别填写到 input2, input4, input6, input8 中
                var parts = selectedPlan.split('/');
                if (parts.length >= 4) {
                    w.input2.setText(parts[0]);
                    w.input4.setText(parts[1]);
                    w.input6.setText(parts[2]);
                    w.input8.setText(parts[3]);
                } else {
                    toast("佣金套餐格式不正确");
                }
                saveCommissionPlans(); // 保存费用套餐
            }
        });
});
 
// 添加计算佣金按钮点击事件监听器
w.calculateBtn.click(function () {
    w.disableFocus(); // 添加调用
    //toast("计算佣金按钮点击");
    // 在这里添加计算佣金的逻辑
    var input1 = parseFloat(w.input1.getText()) || 0;
    var input2 = parseFloat(w.input2.getText()) || 0;
    var input3 = parseFloat(w.input3.getText()) || 0;
    var input4 = parseFloat(w.input4.getText()) || 0;
    var input5 = parseFloat(w.input5.getText()) || 0;
    var input6 = parseFloat(w.input6.getText()) || 0;
    var input7 = parseFloat(w.input7.getText()) || 0;
    var input8 = parseFloat(w.input8.getText()) || 0;
 
    // 获取“除税”勾选框的状态
    var isTaxChecked = w.taxCheckbox.isChecked();
 
    // 计算第一行
    var result1 = isTaxChecked ? (input1 / 1.06 * input2 / 100) : (input1 * input2 / 100);
    w.jqyjText.setText(result1.toFixed(2));
 
    // 计算第二行
    var result2 = input3 * input4 / 100; // 删除: var result2 = isTaxChecked ? (input3 / 1.06 * input4 / 100) : (input3 * input4 / 100);
    w.syjyText.setText(result2.toFixed(2));
 
    // 计算第三行
    var result3 = isTaxChecked ? (input5 / 1.06 * input6 / 100) : (input5 * input6 / 100);
    w.sybxjyText.setText(result3.toFixed(2));
 
    // 计算第四行
    var result4 = isTaxChecked ? (input7 / 1.06 * input8 / 100) : (input7 * input8 / 100);
    w.jcyjText.setText(result4.toFixed(2));
 
    // 计算总保费、佣金和净保费
    var totalPremium = input1 + input3 + input5 + input7;
    var totalCommission = result1 + result2 + result3 + result4;
    var netPremium = totalPremium - totalCommission;
 
    // 更新 summaryText
    var summaryTextContent = "总保费: " + totalPremium.toFixed(2) + " 净: " + netPremium.toFixed(2) + "\n佣金: " + totalCommission.toFixed(2);
    w.summaryText.setText(summaryTextContent); // 确保 summaryText 的内容被正确设置
 
    // 获取“文本”复选框的状态
    var isTextChecked = w.textCheckbox.isChecked();
 
    if (isTextChecked) {
        var textContent = "";
 
        // 判断车牌号是否为空
        if (plateNumber) {
            textContent += "车牌号: " + plateNumber + "\n";
        }
 
        // 判断车主是否为空
        if (ownerName) {
            textContent += "车主: " + ownerName + "\n";
        }
 
        if (insuredName) { // 判断投保人是否为空
            textContent += "投保人: " + insuredName + "\n";
        }
 
        // 判断 input1 和 input3 的值
        if (input1 === 0 && input3 === 0) {
            // 不添加该行
        } else if (input1 === 0) {
            textContent += "交: " + input3 + "\n";
        } else if (input3 === 0) {
            textContent += "交: " + input1 + "\n";
        } else {
            textContent += "交: " + input1 + "+" + input3 + "\n";
        }
 
        // 判断 input5 和 input7 的值
        if (input5 === 0 && input7 === 0) {
            // 不添加该行
        } else if (input5 === 0) {
            textContent += "驾乘: " + input7 + "\n";
        } else if (input7 === 0) {
            textContent += "商: " + input5 + "\n";
        } else {
            textContent += "商: " + input5 + " 驾乘:" + input7 + "\n";
        }
 
        // 根据 input1 是否为空来决定是否添加 input2
        var variable1 = input1 === 0 ? "" : input2 + "/";
 
        // 根据 input3 或 input4 是否为空来决定是否添加 input4
        var variable2 = (input3 === 0 || input4 === 0) ? "" : input4 + "/";
 
        // 根据 input5 是否为空来决定是否添加 input6
        var variable3 = input5 === 0 ? "" : input6 + "/";
 
        // 根据 input7 是否为空来决定是否添加 input8
        var variable4 = input7 === 0 ? "" : input8 + "/";
 
        // 合并所有变量到一个临时变量
        var combinedVariables = variable1 + variable2 + variable3 + variable4;
 
        // 去除 combinedVariables 的最后一个斜杠
        if (combinedVariables.endsWith("/")) {
            combinedVariables = combinedVariables.slice(0, -1);
        }
        // 新增逻辑:如果 input2, input4, input6, input8 都为 0,则将 combinedVariables 赋值为“零费”
        if (input2 === 0 && input4 === 0 && input6 === 0 && input8 === 0) {
            combinedVariables = "零费";
        }
 
        // 合并 summaryTextContent 和 combinedVariables
        textContent += summaryTextContent + "\n";
        textContent += combinedVariables;
 
        setClip(textContent); // 将合并后的内容复制到剪贴板
        toast("已复制文本"); // 添加提示
    }
 
    // 清空车牌号、车主、投保人三个变量
    plateNumber = "";
    ownerName = "";
    insuredName = "";
});
 
// 添加变量来记录悬浮窗的位置
var savedX = 0;
var savedY = 0;
 
// 直接在iconBtn上设置触摸监听器
iconBtn.setOnTouchListener(function (view, event) {
    switch (event.getAction()) {
        case event.ACTION_DOWN:
            initialX = w.getX();
            initialY = w.getY();
            initialTouchX = event.getRawX();
            initialTouchY = event.getRawY();
            return true;
        case event.ACTION_MOVE:
            var x = initialX + (event.getRawX() - initialTouchX);
            var y = initialY + (event.getRawY() - initialTouchY);
            w.setPosition(x, y);
            // 记录悬浮窗的位置
            savedX = x;
            savedY = y;
            return true;
        case event.ACTION_UP:
            // 计算移动距离
            var moveX = Math.abs(event.getRawX() - initialTouchX);
            var moveY = Math.abs(event.getRawY() - initialTouchY);
            if (moveX < 10 && moveY < 10) {
                // 如果移动距离很小,认为是点击事件
                iconBtn.callOnClick(); // 触发点击事件
            } else {
                // 获取屏幕宽度
                var screenWidth = device.width;
                // 获取悬浮窗当前X坐标
                var currentX = w.getX();
                // 判断吸附到左边还是右边
                if (savedX === 0 && savedY === 0) {
                    w.setPosition(screenWidth - w.getWidth() + 85, currentY);
                    savedX = screenWidth - w.getWidth() + 85;
                    savedY = currentY;
                } else if (currentX < screenWidth / 2) {
                    w.setPosition(0, w.getY());
                    savedX = 0;
                    savedY = w.getY();
                } else {
                    w.setPosition(screenWidth - w.getWidth() + 85, w.getY());
                    savedX = screenWidth - w.getWidth() + 85;
                    savedY = w.getY();
                }
            }
            return true;
    }
    return false;
});
 
// 添加关闭按钮点击事件监听器
closeBtn.click(function () {
    w.disableFocus(); // 添加调用
    toast("退出软件");
    exit();
});
 
// 添加菜单按钮点击事件监听器
menuBtn.click(function () {
    w.disableFocus(); // 添加调用
    // 先点击缩小按钮
    minimizeBtn.callOnClick();
    dialogs.select("菜单", ["新增佣金套餐", "佣金套餐管理", "分享给朋友", "建议和意见", "关于本软件"])
        .then(i => {
            if (i == -1) {
                //toast("取消");
                iconBtn.callOnClick(); // 点击小图标按钮恢复界面
            } else if (i == 0) {
                rawInput("新增佣金套餐", "4/0/4/20/备注") // 设置默认文本为 "4/0/4/20/备注"
                    .then(newPlan => {
                        if (newPlan) {
                            // 解析输入内容为佣金套餐和备注
                            var parts = newPlan.split('/');
                            log("解析后的 parts 数组:", parts); // 调试信息: 输出解析后的 parts 数组
                            if (parts.length < 4) { // 修改: 至少需要4个部分
                                log("parts 数组长度不足:", parts.length); // 调试信息: 输出 parts 数组长度
                                toast("佣金套餐格式不正确,必须包含至少4个成员");
                            } else {
                                var plan = parts.slice(0, 4).join('/');
                                var note = parts.slice(4).join('/'); // 修正: 直接拼接剩余部分作为备注
                                var fullPlan = note ? plan + '/' + note : plan;
                                if (commissionPlans.indexOf(fullPlan) >= 0) {
                                    log("fullPlan 已存在:", fullPlan); // 调试信息: 输出 fullPlan 的值
                                    toast("该佣金套餐已存在");
                                } else {
                                    commissionPlans.push(fullPlan);
                                    alert("新增套餐: " + fullPlan); // 使用 alert 替代 toast 和 log
                                    saveCommissionPlans(); // 保存费用套餐
                                }
                            }
                        }
                        iconBtn.callOnClick(); // 点击小图标按钮恢复界面
                    });
            } else if (i == 1) {
                // 佣金套餐管理
                rawInput("佣金套餐管理", commissionPlans.join(", ")) // 弹出对话框,内容为 commissionPlans 数组内容
                    .then(updatedPlans => {
                        if (updatedPlans) {
                            commissionPlans = updatedPlans.split(',').map(plan => plan.trim()); // 解析输入内容为数组并更新 commissionPlans
                            alert("佣金套餐已更新: " + commissionPlans.join(", "));
                            log("当前佣金套餐数组: " + commissionPlans.join(", ")); // 调试输出数组
                            saveCommissionPlans(); // 保存费用套餐
                        }
                        iconBtn.callOnClick(); // 点击小图标按钮恢复界面
                    });
            } else if (i == 2) {
                // 分享给朋友
                setClip("佣金计算零失误,支持将[车辆信息][保费信息][计算结果]复制到剪贴板,这个车险计算器太好用了!你也试试吧。https://wwth.lanzouw.com/b00u43sfg");
                toast("已复制分享文本到剪贴板");
                iconBtn.callOnClick(); // 点击小图标按钮恢复界面
            } else if (i == 3) {
                // 建议和意见
                app.openUrl("https://f.wps.cn/g/DciB0UPV");
                iconBtn.callOnClick(); // 点击小图标按钮恢复界面
            } else if (i == 4) {
                // 关于本软件
                dialogs.build({
                    title: "关于本软件",
                    content: "纯属个人爱好,如有bug或建议,欢迎反馈。\n[获取车辆信息]\n目前仅支持以下APP:\n大家财险:畅销保/搭伙APP",
                    positive: "确定",
                    positiveColor: "#007bff"
                }).on("positive", function () {
                    iconBtn.callOnClick(); // 点击小图标按钮恢复界面
                }).show();
            }
        });
});
 
// 在窗口创建完毕后,根据标志变量决定是否显示主界面
if (!shouldShowMainPanel) {
    w.mainPanel.setVisibility(android.view.View.GONE); // 添加: 隐藏主界面
}
 
// 将悬浮窗移动到屏幕中央
centerWindow();
// 保持脚本运行,避免立即退出
setInterval(function () { }, 1000);

免费评分

参与人数 3吾爱币 +1 热心值 +2 收起 理由
wjsty111 + 1 我很赞同!
Spector + 1 谢谢@Thanks!
Hameel + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhengzhenhui945 发表于 2025-3-22 01:18
我是用代码片段的投喂,后面搞个日志输出调试一下
baishuihao 发表于 2025-3-22 08:34
小小学生 发表于 2025-3-22 10:17
reody 发表于 2025-3-22 11:33
对于真正的0基础,问不了你的精准指令。。
walykyy 发表于 2025-3-22 12:37
reody 发表于 2025-3-22 11:33
对于真正的0基础,问不了你的精准指令。。

纯0基础的,ai帮你写出来你也需要自己调试,最起码还需要懂一点基础的,不然错了都不知道哪里错了
b15517313524 发表于 2025-3-22 12:40
某保险在职
 楼主| ByCool1 发表于 2025-3-22 17:18

哈哈,自己写的符合自己要求,网上找的都不好使
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-3 07:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表