使用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 { enum class ActionEvent {
START_ACTION("com.loveerror.bested.START_ACTION", "去普通建档"), 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", "设置数据源"), SET_DATA_SOURCE("com.loveerror.bested.SET_DATA_SOURCE", "设置数据源"),
HIDE_FLOATING_BUTTON("com.loveerror.bested.HIDE_FLOATING_BUTTON", "隐藏悬浮按钮"), HIDE_FLOATING_BUTTON("com.loveerror.bested.HIDE_FLOATING_BUTTON", "隐藏悬浮按钮"),
PRINT_CURRENT_PAGE("com.loveerror.bested.PRINT_CURRENT_PAGE", "打印当前界面"), PRINT_CURRENT_PAGE("com.loveerror.bested.PRINT_CURRENT_PAGE", "打印当前界面"),

View File

@@ -176,13 +176,32 @@ class DragFloatingButton(context: Context) : View(context) {
hint = menuWithText hint = menuWithText
tag = 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) linearLayout.addView(editText)
editTexts.add(editText) editTexts.add(editText)
} }
val dialog = AlertDialog.Builder(context) val dialog = AlertDialog.Builder(context)
.setTitle("请输入公司名称") .setTitle("请输入:"+actionEvent.menuName)
.setView(linearLayout) .setView(linearLayout)
.setPositiveButton("确定", null) // 先设置为null稍后手动处理 .setPositiveButton("确定", null) // 先设置为null稍后手动处理
.setNegativeButton("取消", null) .setNegativeButton("取消", null)
@@ -192,7 +211,7 @@ class DragFloatingButton(context: Context) : View(context) {
dialog.setOnShowListener { dialog.setOnShowListener {
val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE) val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
positiveButton.setOnClickListener { positiveButton.setOnClickListener {
val textWithTags = mutableListOf<TextWithTag>() val textWithTags = arrayListOf<TextWithTag>()
// 遍历editText eeditTexts // 遍历editText eeditTexts
for (editText in editTexts) { for (editText in editTexts) {
val inputText = editText.text.toString().trim() val inputText = editText.text.toString().trim()

View File

@@ -1,8 +1,10 @@
package com.loveerror.bested.handler package com.loveerror.bested.handler
import android.content.Intent
import android.view.accessibility.AccessibilityNodeInfo import android.view.accessibility.AccessibilityNodeInfo
import com.loveerror.bested.tool.AccessibilityTool import com.loveerror.bested.tool.AccessibilityTool
import com.loveerror.bested.tool.AccessibilityTool.Companion.performBottomSheetSelection 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.NodeToolHint
import com.loveerror.bested.tool.NodeToolText import com.loveerror.bested.tool.NodeToolText
import com.loveerror.bested.tool.RootNodeCallback import com.loveerror.bested.tool.RootNodeCallback
@@ -16,11 +18,11 @@ class NormalGroupCreateForm(private val rootNodeCallback: RootNodeCallback) {
var fields = arrayListOf<FieldName>() var fields = arrayListOf<FieldName>()
init { init {
fields.add(FieldName("集团名称", "请输入集团名称", "集团abc", FieldType.TEXT)) fields.add(FieldName("集团名称", "请输入集团名称", "", FieldType.TEXT))
fields.add(FieldName("证件名称", "证件名称", "jituan", FieldType.TEXT)) fields.add(FieldName("证件名称", "证件名称", "", 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("联系电话", "请输入联系电话", "13266667777", FieldType.TEXT)) fields.add(FieldName("联系电话", "请输入联系电话", "13266667777", FieldType.TEXT))
fields.add(FieldName("员工数", "请输入人数", "1", 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("集团状态", "", "潜在集团", FieldType.SELECT))
fields.add(FieldName("证件有效期", "", "2056-11-23", FieldType.TIME)) fields.add(FieldName("证件有效期", "", "2056-11-23", FieldType.TIME))
fields.add(FieldName("集团等级", "", "D", FieldType.TEXT)) 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))
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 root AccessibilityNodeInfo根节点
* @param groupName 集团名称
*/ */
fun autoFillForm(root: AccessibilityNodeInfo) { fun autoFillForm(root: AccessibilityNodeInfo, intent: Intent) {
val fieldMap = mapOf<String, String>( val json = intent.getStringExtra("json")
"集团名称" to "上海靖源科技有限公司", println("json: $json")
"证件名称" to "上海靖源科技有限公司", if(json == null || json.isEmpty()){
"证件号码" to "91310120MA7FFHYK15", println()
"法人代表" to "刘剑", println("未找到json")
"证件地址" to "上海市奉贤区海坤路1号1幢", return
"联系电话" to "13524811769", }
// "证件有效期" to "9999-09-09", // json to map
"证件有效期" to "",
"员工数" to "2", var fieldMap = JsonTool.parseJson(json)
"建筑物名称" to "金牛座",
"细分客群" to "IT服务业" 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) // expandClassificationSection(root)
@@ -118,11 +185,11 @@ class NormalGroupCreateForm(private val rootNodeCallback: RootNodeCallback) {
AccessibilityTool.fillEditText(peopleCountNode, fieldMap["员工数"] ?: "1", "员工数") AccessibilityTool.fillEditText(peopleCountNode, fieldMap["员工数"] ?: "1", "员工数")
// fillEditTextByHintText(rootNew,fieldMap["员工数"] ?: "1", "员工数", "请输入人数") // fillEditTextByHintText(rootNew,fieldMap["员工数"] ?: "1", "员工数", "请输入人数")
clickToOpenBottomSheetAddress( // clickToOpenBottomSheetAddress(
root, // root,
"请点击此处打点", // "请点击此处打点",
"浙江省杭州市余杭区高顺路8号五常西溪软件园金牛座A座" // "浙江省杭州市余杭区高顺路8号五常西溪软件园金牛座A座"
) // )
// 示例:点击"集团状态"触发底部选择,选择"在网集团" // 示例:点击"集团状态"触发底部选择,选择"在网集团"
// fillCompanyNameField(root, groupName) // fillCompanyNameField(root, groupName)

View File

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