使用json 填充数据

This commit is contained in:
manchuwork
2025-10-27 01:28:03 +08:00
parent 4646d14f5a
commit 0062f5ae22
5 changed files with 137 additions and 32 deletions

View File

@@ -3,7 +3,7 @@ package com.loveerror.bested.button
enum class ActionEvent {
START_ACTION("com.loveerror.bested.START_ACTION", "去普通建档"),
FILL_ACTION("com.loveerror.bested.FILL_ACTION", "普通建档填充表单"),
FILL_ACTION("com.loveerror.bested.FILL_ACTION", "普通建档填充表单", menuWithText = listOf("json")),
SET_DATA_SOURCE("com.loveerror.bested.SET_DATA_SOURCE", "设置数据源"),
HIDE_FLOATING_BUTTON("com.loveerror.bested.HIDE_FLOATING_BUTTON", "隐藏悬浮按钮"),
PRINT_CURRENT_PAGE("com.loveerror.bested.PRINT_CURRENT_PAGE", "打印当前界面"),

View File

@@ -176,13 +176,32 @@ class DragFloatingButton(context: Context) : View(context) {
hint = menuWithText
tag = menuWithText
// 添加双击全选支持
var lastClickTime = 0L
val doubleClickThreshold = 300L // 双击时间阈值(毫秒)
setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
val currentTime = System.currentTimeMillis()
if (currentTime - lastClickTime < doubleClickThreshold) {
// 双击事件 - 全选文本
selectAll()
performClick() // 添加这行来满足 lint 要求
lastClickTime = 0L // 重置时间,避免三击等操作
} else {
lastClickTime = currentTime
}
}
false // 返回false以允许其他触摸事件继续处理
}
}
linearLayout.addView(editText)
editTexts.add(editText)
}
val dialog = AlertDialog.Builder(context)
.setTitle("请输入公司名称")
.setTitle("请输入:"+actionEvent.menuName)
.setView(linearLayout)
.setPositiveButton("确定", null) // 先设置为null稍后手动处理
.setNegativeButton("取消", null)
@@ -192,7 +211,7 @@ class DragFloatingButton(context: Context) : View(context) {
dialog.setOnShowListener {
val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
positiveButton.setOnClickListener {
val textWithTags = mutableListOf<TextWithTag>()
val textWithTags = arrayListOf<TextWithTag>()
// 遍历editText eeditTexts
for (editText in editTexts) {
val inputText = editText.text.toString().trim()

View File

@@ -1,8 +1,10 @@
package com.loveerror.bested.handler
import android.content.Intent
import android.view.accessibility.AccessibilityNodeInfo
import com.loveerror.bested.tool.AccessibilityTool
import com.loveerror.bested.tool.AccessibilityTool.Companion.performBottomSheetSelection
import com.loveerror.bested.tool.JsonTool
import com.loveerror.bested.tool.NodeToolHint
import com.loveerror.bested.tool.NodeToolText
import com.loveerror.bested.tool.RootNodeCallback
@@ -16,11 +18,11 @@ class NormalGroupCreateForm(private val rootNodeCallback: RootNodeCallback) {
var fields = arrayListOf<FieldName>()
init {
fields.add(FieldName("集团名称", "请输入集团名称", "集团abc", FieldType.TEXT))
fields.add(FieldName("证件名称", "证件名称", "jituan", FieldType.TEXT))
fields.add(FieldName("证件号码", "请输入证件号码", "44010119900101001X", FieldType.TEXT))
fields.add(FieldName("法人代表", "请输入法人姓名", "张三", FieldType.TEXT))
fields.add(FieldName("证件地址", "请输入证件地址", "北京市海淀区", FieldType.TEXT))
fields.add(FieldName("集团名称", "请输入集团名称", "", FieldType.TEXT))
fields.add(FieldName("证件名称", "证件名称", "", FieldType.TEXT))
fields.add(FieldName("证件号码", "请输入证件号码", "", FieldType.TEXT))
fields.add(FieldName("法人代表", "请输入法人姓名", "", FieldType.TEXT))
fields.add(FieldName("证件地址", "请输入证件地址", "", FieldType.TEXT))
fields.add(FieldName("联系电话", "请输入联系电话", "13266667777", FieldType.TEXT))
fields.add(FieldName("员工数", "请输入人数", "1", FieldType.TEXT))
@@ -28,30 +30,95 @@ class NormalGroupCreateForm(private val rootNodeCallback: RootNodeCallback) {
fields.add(FieldName("集团状态", "", "潜在集团", FieldType.SELECT))
fields.add(FieldName("证件有效期", "", "2056-11-23", FieldType.TIME))
fields.add(FieldName("集团等级", "", "D", FieldType.TEXT))
fields.add(FieldName("建筑物名称", "请输入搜索地址", "金牛座", FieldType.SEARCH_SELECT))
fields.add(FieldName("建筑物名称", "请输入搜索地址", "赛银国际商务", FieldType.SEARCH_SELECT))
fields.add(FieldName("细分客群", "", "其他", FieldType.SELECT))
fields.add(FieldName("网格名称", "", "余杭未来科技城网格", FieldType.SELECT))
}
// 在 JsonTool.kt 中添加方法
fun convertFieldNames(originalMap: Map<String, String>): Map<String, String> {
val fieldMapping = mapOf(
"企业名称" to "集团名称",
// "企业名称" to "证件名称",
"统一社会信用代码" to "证件号码",
"法定代表人" to "法人代表",
"电话" to "联系电话",
"注册地址" to "证件地址",
"参保人数" to "员工数"
)
val convertedMap = mutableMapOf<String, String>()
originalMap.forEach { (key, value) ->
val mappedKey = fieldMapping[key] ?: key
convertedMap[mappedKey] = value
}
convertedMap["证件名称"]= convertedMap["集团名称"].toString()
// 参保人数值如果为 eg: 8人 ->8
if (convertedMap["员工数"]?.contains("") == true) {
convertedMap["员工数"] = convertedMap["员工数"]?.replace("", "").toString()
}
return convertedMap
}
/**
* 自动填充普通集团建档表单
* @param root AccessibilityNodeInfo根节点
* @param groupName 集团名称
*/
fun autoFillForm(root: AccessibilityNodeInfo) {
fun autoFillForm(root: AccessibilityNodeInfo, intent: Intent) {
val fieldMap = mapOf<String, String>(
"集团名称" to "上海靖源科技有限公司",
"证件名称" to "上海靖源科技有限公司",
"证件号码" to "91310120MA7FFHYK15",
"法人代表" to "刘剑",
"证件地址" to "上海市奉贤区海坤路1号1幢",
"联系电话" to "13524811769",
// "证件有效期" to "9999-09-09",
"证件有效期" to "",
"员工数" to "2",
"建筑物名称" to "金牛座",
"细分客群" to "IT服务业"
)
val json = intent.getStringExtra("json")
println("json: $json")
if(json == null || json.isEmpty()){
println()
println("未找到json")
return
}
// json to map
var fieldMap = JsonTool.parseJson(json)
fieldMap = convertFieldNames(fieldMap)
/**
* {
* "企业名称": "杭州名一口腔门诊部有限公司",
* "统一社会信用代码": "91330108MA27Y6BA0T",
* "法定代表人": "伍聪聪",
* "电话": "15355431707",
* "经营状态": "开业",
* "成立日期": "2016-07-12",
* "行政区划": "浙江省杭州市滨江区",
* "注册资本": "10万(元)",
* "实缴资本": "10万(元)",
* "企业类型": "有限责任公司(自然人投资或控股)",
* "所属行业": "卫生",
* "工商注册号": "330108000291442",
* "组织机构代码": "MA27Y6BA-0",
* "纳税人识别号": "91330108MA27Y6BA0T",
* "纳税人资质": "-",
* "营业期限": "2016-07-12 至 无固定期限",
* "核准日期": "2025-07-15",
* "参保人数": "8人",
* "登记机关": "杭州高新技术产业开发区(滨江)市场监督管理局",
* "曾用名": "-",
* "注册地址": "浙江省杭州市滨江区浦沿街道伟业路483号",
* "经营范围": "许可项目:医疗服务(依法须经批准的项目,经相关部门批准后方可开展经营活动,具体经营项目以审批结果为准)。一般项目:健康咨询服务(不含诊疗服务);企业管理;第二类医疗器械销售;卫生用品和一次性使用医疗用品销售(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)。"
* }
*/
// val fieldMap = mapOf<String, String>(
// "集团名称" to "上海靖源科技有限公司",
// "证件名称" to "上海靖源科技有限公司",
// "证件号码" to "91310120MA7FFHYK15",
// "法人代表" to "刘剑",
// "证件地址" to "上海市奉贤区海坤路1号1幢",
// "联系电话" to "13524811769",
//// "证件有效期" to "9999-09-09",
// "证件有效期" to "",
// "员工数" to "2",
// "建筑物名称" to "金牛座",
// "细分客群" to "IT服务业"
// )
// 先展开分类信息区域
// expandClassificationSection(root)
@@ -118,11 +185,11 @@ class NormalGroupCreateForm(private val rootNodeCallback: RootNodeCallback) {
AccessibilityTool.fillEditText(peopleCountNode, fieldMap["员工数"] ?: "1", "员工数")
// fillEditTextByHintText(rootNew,fieldMap["员工数"] ?: "1", "员工数", "请输入人数")
clickToOpenBottomSheetAddress(
root,
"请点击此处打点",
"浙江省杭州市余杭区高顺路8号五常西溪软件园金牛座A座"
)
// clickToOpenBottomSheetAddress(
// root,
// "请点击此处打点",
// "浙江省杭州市余杭区高顺路8号五常西溪软件园金牛座A座"
// )
// 示例:点击"集团状态"触发底部选择,选择"在网集团"
// fillCompanyNameField(root, groupName)

View File

@@ -34,7 +34,7 @@ class ZjMccmCrm(private val rootNodeCallback: RootNodeCallback) {
}
ActionEvent.FILL_ACTION.event -> {
fillActionAsync()
fillActionAsync(intent)
}
ActionEvent.PRINT_CURRENT_PAGE.event -> {
@@ -105,14 +105,14 @@ class ZjMccmCrm(private val rootNodeCallback: RootNodeCallback) {
}
}
private fun fillActionAsync() {
private fun fillActionAsync(intent: Intent) {
Thread {
val root = rootInActiveWindow()
if (root == null) {
return@Thread
}
val normalGroupCreateForm = NormalGroupCreateForm(rootNodeCallback)
normalGroupCreateForm.autoFillForm(root)
normalGroupCreateForm.autoFillForm(root, intent)
}.start()
}

View File

@@ -0,0 +1,19 @@
package com.loveerror.bested.tool
import org.json.JSONObject
class JsonTool {
companion object{
fun parseJson(json: String): Map<String, String> {
val jsonObject = JSONObject(json)
val jsonMap = mutableMapOf<String, String>()
val jsonKeys = jsonObject.keys()
while (jsonKeys.hasNext()) {
val key = jsonKeys.next()
val value = jsonObject.get(key).toString()
jsonMap[key] = value
}
return jsonMap
}
}
}