Browse Source

多从表修改1215备份

RaoMeng 7 years ago
parent
commit
6425d033ac

+ 1801 - 0
app_modular/apputils/src/main/assets/bill.json

@@ -0,0 +1,1801 @@
+{
+  "data": {
+    "multidetailgrid": true,
+    "formdetail": [
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 1,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_code",
+        "fd_logictype": null,
+        "fd_id": 430301,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "单据编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 2,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_recorder",
+        "fd_logictype": null,
+        "fd_id": 430302,
+        "fd_defaultvalue": "周鼎文",
+        "mfd_isdefault": -1,
+        "fd_caption": "录入人",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 3,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "D",
+        "fd_field": "vr_recorddate",
+        "fd_logictype": null,
+        "fd_id": 430303,
+        "fd_defaultvalue": "2018-12-13 11:39:36",
+        "mfd_isdefault": -1,
+        "fd_caption": "录入时间",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 4,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_status",
+        "fd_logictype": null,
+        "fd_id": 430304,
+        "fd_defaultvalue": "在录入",
+        "mfd_isdefault": -1,
+        "fd_caption": "单据状态",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 5,
+        "fd_readonly": "F",
+        "fd_allowblank": "F",
+        "fd_type": "SF",
+        "fd_field": "vr_cuuu",
+        "fd_logictype": null,
+        "fd_id": 430305,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "客户编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "T"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 80,
+        "fd_detno": 6,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_cuname",
+        "fd_logictype": null,
+        "fd_id": 430306,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "客户名称",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 7,
+        "COMBOSTORE": [
+          {
+            "DLC_VALUE": "市场调查",
+            "DLC_DISPLAY": "市场调查",
+            "DLC_DETNO": 1
+          },
+          {
+            "DLC_VALUE": "新品推广",
+            "DLC_DISPLAY": "新品推广",
+            "DLC_DETNO": 2
+          },
+          {
+            "DLC_VALUE": "销售促进",
+            "DLC_DISPLAY": "销售促进",
+            "DLC_DETNO": 3
+          },
+          {
+            "DLC_VALUE": "客情维护",
+            "DLC_DISPLAY": "客情维护",
+            "DLC_DETNO": 4
+          },
+          {
+            "DLC_VALUE": "商机拜访",
+            "DLC_DISPLAY": "商机拜访",
+            "DLC_DETNO": 5
+          }
+        ],
+        "fd_readonly": "F",
+        "fd_allowblank": "F",
+        "fd_type": "C",
+        "fd_field": "vr_type",
+        "fd_logictype": null,
+        "fd_id": 430307,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "拜访类型",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 8,
+        "COMBOSTORE": [
+          {
+            "DLC_VALUE": "上门拜访",
+            "DLC_DISPLAY": "上门拜访",
+            "DLC_DETNO": 1
+          },
+          {
+            "DLC_VALUE": "电话拜访",
+            "DLC_DISPLAY": "电话拜访",
+            "DLC_DETNO": 2
+          }
+        ],
+        "fd_readonly": "F",
+        "fd_allowblank": "F",
+        "fd_type": "C",
+        "fd_field": "vr_way",
+        "fd_logictype": null,
+        "fd_id": 430308,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "拜访方式",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 9,
+        "fd_readonly": "F",
+        "fd_allowblank": "F",
+        "fd_type": "SS",
+        "fd_field": "vr_title",
+        "fd_logictype": null,
+        "fd_id": 430309,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "拜访主题",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 200,
+        "fd_detno": 10,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_visitplace",
+        "fd_logictype": null,
+        "fd_id": 430310,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "拜访地点",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 50,
+        "fd_detno": 12,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "SF",
+        "fd_field": "vr_nichecode",
+        "fd_logictype": null,
+        "fd_id": 430311,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "商机编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "T"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 13,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_oldstepcode",
+        "fd_logictype": null,
+        "fd_id": 430445,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "上一阶段编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 200,
+        "fd_detno": 13,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_oldstep",
+        "fd_logictype": null,
+        "fd_id": 430446,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "上一阶段",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 13,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_nichetype",
+        "fd_logictype": null,
+        "fd_id": 430315,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "商机类型",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 13,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_nichename",
+        "fd_logictype": null,
+        "fd_id": 430312,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "商机名称",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 50,
+        "fd_detno": 14,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SF",
+        "fd_field": "vr_nichestepcode",
+        "fd_logictype": null,
+        "fd_id": 430313,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "商机阶段编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "T"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 50,
+        "fd_detno": 15,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_nichestep",
+        "fd_logictype": null,
+        "fd_id": 430314,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "商机阶段",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 17,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_compstatus",
+        "fd_logictype": null,
+        "fd_id": 430316,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "完成状态",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 8000,
+        "fd_detno": 18,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "MS",
+        "fd_field": "vr_detail",
+        "fd_logictype": null,
+        "fd_id": 430317,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "拜访内容",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 19,
+        "fd_readonly": "F",
+        "fd_allowblank": "F",
+        "fd_type": "D",
+        "fd_field": "vr_visittime",
+        "fd_logictype": null,
+        "fd_id": 430318,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "拜访时间",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 2000,
+        "fd_detno": 20,
+        "fd_readonly": "F",
+        "fd_allowblank": "F",
+        "fd_type": "HOS",
+        "fd_field": "vr_group",
+        "fd_logictype": "vr_groupid",
+        "fd_id": 430319,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "可阅读者",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 21,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "DT",
+        "fd_field": "vr_visitend",
+        "fd_logictype": null,
+        "fd_id": 430320,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "结束时间",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 22,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "DT",
+        "fd_field": "vr_nexttime",
+        "fd_logictype": null,
+        "fd_id": 430321,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "下次拜访时间",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 23,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_newcuname",
+        "fd_logictype": null,
+        "fd_id": 430322,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "新客户名称",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 23,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "MS",
+        "fd_field": "vr_nexttitle",
+        "fd_logictype": null,
+        "fd_id": 430323,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "下次拜访主题",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 25,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_newtitle",
+        "fd_logictype": null,
+        "fd_id": 430324,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "主题",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 27,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_name",
+        "fd_logictype": null,
+        "fd_id": 430326,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "名称",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 27,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_newchance",
+        "fd_logictype": null,
+        "fd_id": 430325,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "新客户需求",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 28,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_statuscode",
+        "fd_logictype": null,
+        "fd_id": 430327,
+        "fd_defaultvalue": "ENTERING",
+        "mfd_isdefault": 0,
+        "fd_caption": "状态码",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 50,
+        "fd_detno": 29,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_id",
+        "fd_logictype": null,
+        "fd_id": 430328,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "ID",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 30,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_chid",
+        "fd_logictype": null,
+        "fd_id": 430329,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "推广商机ID",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 31,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_cuid",
+        "fd_logictype": null,
+        "fd_id": 430330,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "客户ID",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 32,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_othercontact",
+        "fd_logictype": null,
+        "fd_id": 430331,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "客户方其它参与人员",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 33,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_position",
+        "fd_logictype": null,
+        "fd_id": 430332,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "职务",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 33,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_purpose",
+        "fd_logictype": null,
+        "fd_id": 430333,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "拜访目的",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 34,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_tel",
+        "fd_logictype": null,
+        "fd_id": 430334,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "联系电话",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 35,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_prjassignto",
+        "fd_logictype": null,
+        "fd_id": 430335,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "项目责任人",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 36,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_wpid",
+        "fd_logictype": null,
+        "fd_id": 430336,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "拜访计划编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 79,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_class",
+        "fd_logictype": null,
+        "fd_id": 430337,
+        "fd_defaultvalue": "VisitRecord",
+        "mfd_isdefault": 0,
+        "fd_caption": "填写人员职位标识",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 2000,
+        "fd_detno": 106,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "HOS",
+        "fd_field": "vr_groupid",
+        "fd_logictype": null,
+        "fd_id": 430338,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": 0,
+        "fd_caption": "可阅读者id",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 22,
+        "fd_detno": 107,
+        "fd_readonly": "F",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_recorderid",
+        "fd_logictype": null,
+        "fd_id": 430339,
+        "fd_defaultvalue": 1021009,
+        "mfd_isdefault": 0,
+        "fd_caption": "录入人id",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 20,
+        "fd_detno": 143,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "SS",
+        "fd_field": "vr_auditor",
+        "fd_logictype": null,
+        "fd_id": 430531,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "审核人",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 7,
+        "fd_detno": 144,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "D",
+        "fd_field": "vr_audittime",
+        "fd_logictype": null,
+        "fd_id": 430532,
+        "fd_defaultvalue": "",
+        "mfd_isdefault": -1,
+        "fd_caption": "审核时间",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      },
+      {
+        "fd_render": null,
+        "fd_maxlength": 100,
+        "fd_detno": 165,
+        "fd_readonly": "T",
+        "fd_allowblank": "T",
+        "fd_type": "H",
+        "fd_field": "vr_recordercode",
+        "fd_logictype": null,
+        "fd_id": 430534,
+        "fd_defaultvalue": "U0809",
+        "mfd_isdefault": 0,
+        "fd_caption": "录入入编号",
+        "fd_group": null,
+        "fd_appwidth": 2,
+        "fd_dbfind": "F"
+      }
+    ],
+    "othergridetail": [
+      {
+        "dgtitle": "拜访人员",
+        "detailgrid": [
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282194,
+            "dg_sequence": 1,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "序号",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "pl_detno",
+            "dg_logictype": "detno"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282195,
+            "dg_sequence": 2,
+            "dg_findfunctionname": "Employee|em_name",
+            "dg_appwidth": 2,
+            "dg_caption": "姓名",
+            "dg_type": "DF",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "pl_name",
+            "dg_logictype": "necessaryField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282204,
+            "dg_sequence": 3,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "人员编号",
+            "dg_type": "S",
+            "dg_maxlength": 100,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "pl_code",
+            "dg_logictype": "necessaryField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282196,
+            "dg_sequence": 4,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "性别",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "pl_sex",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282197,
+            "dg_sequence": 5,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "年龄",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "pl_age",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282198,
+            "dg_sequence": 6,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "职务",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "pl_position",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282200,
+            "dg_sequence": 7,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "邮箱",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 200,
+            "dg_field": "pl_email",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282199,
+            "dg_sequence": 7,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "联系电话",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 150,
+            "dg_field": "pl_tel",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282201,
+            "dg_sequence": 8,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "备注",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 355,
+            "dg_field": "pl_remark",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282202,
+            "dg_sequence": 9,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "pl_id",
+            "dg_logictype": "keyField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282203,
+            "dg_sequence": 10,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "关联ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "pl_vrid",
+            "dg_logictype": "mainField"
+          }
+        ],
+        "dgcaller": "Players"
+      },
+      {
+        "dgtitle": "洽谈对象",
+        "detailgrid": [
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282205,
+            "dg_sequence": 1,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "序号",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "cup_detno",
+            "dg_logictype": "detno"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282206,
+            "dg_sequence": 2,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "姓名",
+            "dg_type": "S",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "cup_name",
+            "dg_logictype": "necessaryField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282207,
+            "dg_sequence": 3,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "性别",
+            "dg_type": "S",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "cup_sex",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282208,
+            "dg_sequence": 4,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "年龄",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "cup_age",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282209,
+            "dg_sequence": 5,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "职务",
+            "dg_type": "S",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "cup_position",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282210,
+            "dg_sequence": 6,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "联系电话",
+            "dg_type": "S",
+            "dg_maxlength": 50,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 150,
+            "dg_field": "cup_tel",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282211,
+            "dg_sequence": 7,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "邮箱",
+            "dg_type": "C",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 200,
+            "dg_field": "cup_email",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282212,
+            "dg_sequence": 8,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "备注",
+            "dg_type": "S",
+            "dg_maxlength": 200,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 355,
+            "dg_field": "cup_remark",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282213,
+            "dg_sequence": 9,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "cup_id",
+            "dg_logictype": "keyField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282214,
+            "dg_sequence": 10,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "关联ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "cup_vrid",
+            "dg_logictype": "mainField"
+          }
+        ],
+        "dgcaller": "CuPlayers"
+      },
+      {
+        "dgtitle": "费用报销",
+        "detailgrid": [
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282215,
+            "dg_sequence": 1,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "行号",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "vrd_detno",
+            "dg_logictype": "detno"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282216,
+            "dg_sequence": 2,
+            "dg_findfunctionname": "FeeCategorySet|fcs_code",
+            "dg_appwidth": 2,
+            "dg_caption": "费用编号",
+            "dg_type": "DF",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 150,
+            "dg_field": "vrd_code",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282217,
+            "dg_sequence": 3,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用类型",
+            "dg_type": "S",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 150,
+            "dg_field": "vrd_type",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282218,
+            "dg_sequence": 4,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用名称",
+            "dg_type": "S",
+            "dg_maxlength": 100,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 200,
+            "dg_field": "vrd_costname",
+            "dg_logictype": "necessaryField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282219,
+            "dg_sequence": 5,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用标准金额",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_standardamount",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282220,
+            "dg_sequence": 6,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用预算金额",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_amount",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282221,
+            "dg_sequence": 7,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "已报销金额",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_used",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282222,
+            "dg_sequence": 8,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "预算剩余金额",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_surplus",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282223,
+            "dg_sequence": 9,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "vrd_id",
+            "dg_logictype": "keyField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282224,
+            "dg_sequence": 10,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "主表ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "vrd_vrid",
+            "dg_logictype": "mainField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282215,
+            "dg_sequence": 1,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "行号",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 60,
+            "dg_field": "vrd_detno",
+            "dg_logictype": "detno"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282216,
+            "dg_sequence": 2,
+            "dg_findfunctionname": "FeeCategorySet|fcs_code",
+            "dg_appwidth": 2,
+            "dg_caption": "费用编号",
+            "dg_type": "DF",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 150,
+            "dg_field": "vrd_code",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282217,
+            "dg_sequence": 3,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用类型",
+            "dg_type": "S",
+            "dg_maxlength": 20,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 150,
+            "dg_field": "vrd_type",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282218,
+            "dg_sequence": 4,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用名称",
+            "dg_type": "S",
+            "dg_maxlength": 100,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 200,
+            "dg_field": "vrd_costname",
+            "dg_logictype": "necessaryField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282219,
+            "dg_sequence": 5,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用标准金额",
+            "dg_type": "S",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_standardamount",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282220,
+            "dg_sequence": 6,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "费用预算金额",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_amount",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282221,
+            "dg_sequence": 7,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "已报销金额",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_used",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282222,
+            "dg_sequence": 8,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "预算剩余金额",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 100,
+            "dg_field": "vrd_surplus",
+            "dg_logictype": null
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282223,
+            "dg_sequence": 9,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "vrd_id",
+            "dg_logictype": "keyField"
+          },
+          {
+            "COMBOSTORE": [
+            ],
+            "gd_id": 282224,
+            "dg_sequence": 10,
+            "dg_findfunctionname": null,
+            "dg_appwidth": 2,
+            "dg_caption": "主表ID",
+            "dg_type": "N",
+            "dg_maxlength": 0,
+            "mdg_isdefault": -1,
+            "dg_renderer": null,
+            "dg_width": 0,
+            "dg_field": "vrd_vrid",
+            "dg_logictype": "mainField"
+          }
+        ],
+        "dgcaller": "VisitRecord"
+      }
+    ],
+    "gridetail": [
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282215,
+        "dg_sequence": 1,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "行号",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 60,
+        "dg_field": "vrd_detno",
+        "dg_logictype": "detno"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282216,
+        "dg_sequence": 2,
+        "dg_findfunctionname": "FeeCategorySet|fcs_code",
+        "dg_appwidth": 2,
+        "dg_caption": "费用编号",
+        "dg_type": "DF",
+        "dg_maxlength": 20,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 150,
+        "dg_field": "vrd_code",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282217,
+        "dg_sequence": 3,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用类型",
+        "dg_type": "S",
+        "dg_maxlength": 20,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 150,
+        "dg_field": "vrd_type",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282218,
+        "dg_sequence": 4,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用名称",
+        "dg_type": "S",
+        "dg_maxlength": 100,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 200,
+        "dg_field": "vrd_costname",
+        "dg_logictype": "necessaryField"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282219,
+        "dg_sequence": 5,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用标准金额",
+        "dg_type": "S",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_standardamount",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282220,
+        "dg_sequence": 6,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用预算金额",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_amount",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282221,
+        "dg_sequence": 7,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "已报销金额",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_used",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282222,
+        "dg_sequence": 8,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "预算剩余金额",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_surplus",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282223,
+        "dg_sequence": 9,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "ID",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 0,
+        "dg_field": "vrd_id",
+        "dg_logictype": "keyField"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282224,
+        "dg_sequence": 10,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "主表ID",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 0,
+        "dg_field": "vrd_vrid",
+        "dg_logictype": "mainField"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282215,
+        "dg_sequence": 1,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "行号",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 60,
+        "dg_field": "vrd_detno",
+        "dg_logictype": "detno"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282216,
+        "dg_sequence": 2,
+        "dg_findfunctionname": "FeeCategorySet|fcs_code",
+        "dg_appwidth": 2,
+        "dg_caption": "费用编号",
+        "dg_type": "DF",
+        "dg_maxlength": 20,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 150,
+        "dg_field": "vrd_code",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282217,
+        "dg_sequence": 3,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用类型",
+        "dg_type": "S",
+        "dg_maxlength": 20,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 150,
+        "dg_field": "vrd_type",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282218,
+        "dg_sequence": 4,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用名称",
+        "dg_type": "S",
+        "dg_maxlength": 100,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 200,
+        "dg_field": "vrd_costname",
+        "dg_logictype": "necessaryField"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282219,
+        "dg_sequence": 5,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用标准金额",
+        "dg_type": "S",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_standardamount",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282220,
+        "dg_sequence": 6,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "费用预算金额",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_amount",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282221,
+        "dg_sequence": 7,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "已报销金额",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_used",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282222,
+        "dg_sequence": 8,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "预算剩余金额",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 100,
+        "dg_field": "vrd_surplus",
+        "dg_logictype": null
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282223,
+        "dg_sequence": 9,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "ID",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 0,
+        "dg_field": "vrd_id",
+        "dg_logictype": "keyField"
+      },
+      {
+        "COMBOSTORE": [
+        ],
+        "gd_id": 282224,
+        "dg_sequence": 10,
+        "dg_findfunctionname": null,
+        "dg_appwidth": 2,
+        "dg_caption": "主表ID",
+        "dg_type": "N",
+        "dg_maxlength": 0,
+        "mdg_isdefault": -1,
+        "dg_renderer": null,
+        "dg_width": 0,
+        "dg_field": "vrd_vrid",
+        "dg_logictype": "mainField"
+      }
+    ]
+  },
+  "success": true,
+  "sessionId": "8781D054E5B1C7C13B4D3A7325052D92",
+  "config": {
+    "fo_statuscodefield": "vr_statuscode",
+    "fo_keyfield": "vr_id",
+    "fo_detailmainkeyfield": "vrd_vrid",
+    "fo_statusfield": "vr_status",
+    "fo_detailkeyfield": "vrd_id"
+  }
+}

+ 132 - 28
app_modular/apputils/src/main/java/com/modular/apputils/adapter/BillAdapter.java

@@ -1,10 +1,9 @@
 package com.modular.apputils.adapter;
 
 import android.content.Context;
-import android.content.Intent;
 import android.support.annotation.LayoutRes;
 import android.support.annotation.NonNull;
-import android.support.v4.app.FragmentActivity;
+import android.support.design.widget.TabLayout;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
 import android.text.InputType;
@@ -12,24 +11,15 @@ import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-
-import com.alibaba.fastjson.JSON;
-import com.baidu.cyberplayer.utils.G;
-import com.chad.library.adapter.base.BaseViewHolder;
 import com.common.LogUtil;
 import com.common.data.ListUtils;
-import com.common.file.FileUtils;
-import com.core.model.SelectBean;
-import com.core.utils.ToastUtil;
 import com.core.widget.listener.EditChangeListener;
-import com.core.widget.view.Activity.SelectActivity;
 import com.core.widget.view.MyGridView;
 import com.me.imageloader.ImageLoaderUtil;
 import com.modular.apputils.R;
@@ -38,9 +28,7 @@ import com.modular.apputils.utils.BillTypeChangeUtils;
 import com.modular.apputils.widget.VeriftyDialog;
 
 import java.util.ArrayList;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Set;
 
 /**
  * 录入单据列表item 共2种类型
@@ -53,6 +41,9 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
     protected List<BillGroupModel> mBillGroupModels;
     protected List<BillGroupModel.BillModel> mShowBillModels;
     protected OnAdapterListener mOnAdapterListener;
+    protected int mTabIndex = -1;
+    private List<BillGroupModel> mOldTabModels;
+    private int mTabPosition;
 
     public BillAdapter(Context ct, List<BillGroupModel> mBillGroupModels, OnAdapterListener mOnAdapterListener) {
         this.ct = ct;
@@ -108,18 +99,28 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
         }
         for (int i = 0; i < mBillGroupModels.size(); i++) {
             BillGroupModel e = mBillGroupModels.get(i);
-            if (e != null && e.getShowBillFields() != null && !e.getShowBillFields().isEmpty()) {
-                if (!TextUtils.isEmpty(e.getGroup())) {
-                    BillGroupModel.BillModel mTitleBillModel = new BillGroupModel.BillModel();
-                    mTitleBillModel.setGroupIndex(i);
-                    mTitleBillModel.setType(BillGroupModel.Constants.TYPE_TITLE);
-                    mTitleBillModel.setCaption(e.getGroup());
-                    mTitleBillModel.setAllowBlank(e.isDeleteAble() ? "T" : "F");
-                    mShowBillModels.add(mTitleBillModel);
-                }
-                mShowBillModels.addAll(e.getShowBillFields());
-                if (!e.isForm() && e.isLastInType()) {
-                    mShowBillModels.add(getAddModel(i));
+            if (e != null) {
+                List<BillGroupModel.GridTab> gridTabs = e.getGridTabs();
+                if (gridTabs != null && gridTabs.size() > 0) {
+                    BillGroupModel.BillModel mTabBillModel = new BillGroupModel.BillModel();
+                    mTabBillModel.setType(BillGroupModel.Constants.TYPE_TAB);
+                    mTabBillModel.setTabList(gridTabs);
+                    mTabBillModel.setGroupIndex(i);
+                    mShowBillModels.add(mTabBillModel);
+                } else if (e.getShowBillFields() != null && !e.getShowBillFields().isEmpty()) {
+                    if (!TextUtils.isEmpty(e.getGroup())) {
+                        BillGroupModel.BillModel mTitleBillModel = new BillGroupModel.BillModel();
+                        mTitleBillModel.setGroupIndex(i);
+                        mTitleBillModel.setType(BillGroupModel.Constants.TYPE_TITLE);
+                        mTitleBillModel.setCaption(e.getGroup());
+                        mTitleBillModel.setAllowBlank(e.isDeleteAble() ? "T" : "F");
+                        mShowBillModels.add(mTitleBillModel);
+                    }
+                    mShowBillModels.addAll(e.getShowBillFields());
+
+                    if (!e.isForm() && e.isLastInType()) {
+                        mShowBillModels.add(getAddModel(i));
+                    }
                 }
             }
         }
@@ -152,7 +153,11 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
     @Override
     public int getItemViewType(int position) {
         if (mShowBillModels != null && mShowBillModels.size() > position) {
-            return BillTypeChangeUtils.getItemViewType(mShowBillModels.get(position).getType());
+            int itemViewType = BillTypeChangeUtils.getItemViewType(mShowBillModels.get(position).getType());
+            if (itemViewType == 111) {
+                mTabIndex = position;
+            }
+            return itemViewType;
         }
         return super.getItemViewType(position);
     }
@@ -174,6 +179,9 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
             case 110:
                 viewHolder = new AddViewHolder(parent, R.layout.item_bill_add);
                 break;
+            case 111:
+                viewHolder = new TabViewHolder(parent, R.layout.item_bill_tab);
+                break;
             default:
                 viewHolder = new BaseViewHolder(parent, R.layout.item_bill_title) {
                     @Override
@@ -283,6 +291,30 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
 
     }
 
+    class TabViewHolder extends BaseViewHolder {
+        TabLayout mTabLayout;
+
+        public TabViewHolder(ViewGroup parent, int layoutId) {
+            super(parent, layoutId);
+        }
+
+        @Override
+        public void initView(View view) {
+            mTabLayout = (TabLayout) view.findViewById(R.id.bill_tab_tl);
+            mTabLayout.setTabMode(TabLayout.MODE_FIXED);
+            final List<BillGroupModel.GridTab> tabList = mShowBillModels.get(mTabIndex).getTabList();
+            if (tabList != null && tabList.size() > 0) {
+                for (int i = 0; i < tabList.size(); i++) {
+                    BillGroupModel.GridTab gridTab = tabList.get(i);
+                    if (gridTab != null) {
+                        mTabLayout.addTab(mTabLayout.newTab().setText(gridTab.getTitle()));
+                    }
+                }
+            }
+        }
+
+    }
+
 
     @Override
     public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
@@ -299,6 +331,8 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
                 bindAddView((AddViewHolder) holder, model, position);
             } else if (holder instanceof EnclosureViewHolder) {
                 bindEnclosureView((EnclosureViewHolder) holder, model, position);
+            } else if (holder instanceof TabViewHolder) {
+                bindTabView((TabViewHolder) holder, model, position);
             }
         } catch (Exception e) {
             LogUtil.i("gong", position + "  e=" + e.getMessage());
@@ -306,11 +340,20 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
 
     }
 
+    private void bindTabView(TabViewHolder holder, final BillGroupModel.BillModel model, final int position) {
+        if (holder.mTabLayout.getTag() != null && holder.mTabLayout.getTag() instanceof MyTabChangeListener) {
+            holder.mTabLayout.removeOnTabSelectedListener((TabLayout.OnTabSelectedListener) holder.mTabLayout.getTag());
+        }
+        MyTabChangeListener myTabChangeListener = new MyTabChangeListener(holder.mTabLayout, position);
+        holder.mTabLayout.addOnTabSelectedListener(myTabChangeListener);
+        holder.mTabLayout.setTag(myTabChangeListener);
+    }
+
     //绑定附件字段
     private void bindEnclosureView(EnclosureViewHolder holder, BillGroupModel.BillModel model, int position) {
         if (model != null) {
             holder.captionTv.setText(model.getCaption());
-            holder.muchInputTv.setVisibility(model.getAllowBlank().equals("F") ? View.VISIBLE  :View.GONE);
+            holder.muchInputTv.setVisibility(model.getAllowBlank().equals("F") ? View.VISIBLE : View.GONE);
             EnclosureAdapter mEnclosureAdapter = null;
             if (holder.ffGv.getTag(R.id.tag_key) != null && holder.ffGv.getTag(R.id.tag_key) instanceof EnclosureAdapter) {
                 mEnclosureAdapter = (EnclosureAdapter) holder.ffGv.getTag(R.id.tag_key);
@@ -350,6 +393,11 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
                 mInputViewHolder.valuesEd.setFocusable(false);
                 mInputViewHolder.valuesEd.setClickable(true);
                 mInputViewHolder.valuesEd.setOnClickListener(null);
+                if (BillTypeChangeUtils.isSelect(model.getType())) {
+                    mInputViewHolder.valuesEd.setHint("请选择");
+                } else {
+                    mInputViewHolder.valuesEd.setHint("请输入");
+                }
             } else if (BillTypeChangeUtils.isSelect(model.getType())) {
                 //选择类型
                 mInputViewHolder.valuesEd.setHint("请选择");
@@ -432,6 +480,7 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
     protected void addGroups(int mGroupIndex) {
         BillGroupModel mBillGroupModel = mBillGroupModels.get(mGroupIndex);
         mBillGroupModel.setLastInType(false);
+
         BillGroupModel newBillGroupModel = new BillGroupModel();
         newBillGroupModel.setForm(mBillGroupModel.isForm());
         newBillGroupModel.setGroup(mBillGroupModel.getGroup());
@@ -442,6 +491,15 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
         }
         mBillGroupModels.add(mGroupIndex + 1, newBillGroupModel);
         setBillGroupModels(mBillGroupModels);
+
+        if (mTabIndex != -1) {
+            BillGroupModel.BillModel tabModel = mShowBillModels.get(mTabIndex);
+            if (tabModel != null) {
+                tabModel.getTabList().get(mTabPosition)
+                        .setBillGroupModels(mBillGroupModels.subList(mGroupIndex, mBillGroupModels.size()));
+            }
+        }
+
         notifyDataSetChanged();
     }
 
@@ -464,6 +522,53 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
     }
 
 
+    public class MyTabChangeListener implements TabLayout.OnTabSelectedListener {
+        private TabLayout mTabLayout;
+        private int mPosition;
+
+        public MyTabChangeListener(TabLayout tabLayout, int position) {
+            mTabLayout = tabLayout;
+            mPosition = position;
+        }
+
+        @Override
+        public void onTabSelected(TabLayout.Tab tab) {
+            if (this.mPosition >= 0 && mShowBillModels != null && mShowBillModels.size() > this.mPosition && mTabLayout != null) {
+                mTabPosition = tab.getPosition();
+                BillGroupModel.BillModel model = mShowBillModels.get(mPosition);
+                if (model != null) {
+                    List<BillGroupModel.GridTab> tabList = model.getTabList();
+                    int tabGroupIndex = model.getGroupIndex();
+
+                    List<BillGroupModel> newGroupModels = new ArrayList<>();
+                    List<BillGroupModel> billGroupModels = mBillGroupModels.subList(0, tabGroupIndex + 1);
+                    mOldTabModels = mBillGroupModels.subList(tabGroupIndex + 1, mBillGroupModels.size());
+
+                    newGroupModels.addAll(billGroupModels);
+                    BillGroupModel.GridTab gridTab = tabList.get(mTabPosition);
+                    if (gridTab != null) {
+                        List<BillGroupModel> tabGroupModels = gridTab.getBillGroupModels();
+
+                        newGroupModels.addAll(tabGroupModels);
+                    }
+                    setBillGroupModels(newGroupModels);
+                    notifyDataSetChanged();
+                }
+            }
+        }
+
+        @Override
+        public void onTabUnselected(TabLayout.Tab tab) {
+
+        }
+
+        @Override
+        public void onTabReselected(TabLayout.Tab tab) {
+
+        }
+    }
+
+
     private void showDeleteGroup(final int groupIndex) {
         new VeriftyDialog.Builder(ct)
                 .setTitle(ct.getString(R.string.app_name))
@@ -478,7 +583,6 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
                         }
                     }
                 });
-
     }
 
     public void deleteGroup(int groupIndex) {

+ 78 - 3
app_modular/apputils/src/main/java/com/modular/apputils/model/BillGroupModel.java

@@ -1,7 +1,5 @@
 package com.modular.apputils.model;
 
-import android.text.TextUtils;
-
 import com.common.data.StringUtil;
 
 import java.util.ArrayList;
@@ -28,6 +26,8 @@ public class BillGroupModel {
     private List<BillModel> hideBillFields;//当前组隐藏的字段列表
     private List<BillModel> showBillFields;//当前组显示的字段列表
 
+    private List<GridTab> mGridTabs;
+
     public void updateTagMap(String key, Object values) {
         if (key == null) return;
         if (this.mTagMap == null) {
@@ -134,6 +134,13 @@ public class BillGroupModel {
         this.showBillFields = showBillFields;
     }
 
+    public List<GridTab> getGridTabs() {
+        return mGridTabs;
+    }
+
+    public void setGridTabs(List<GridTab> gridTabs) {
+        mGridTabs = gridTabs;
+    }
 
     public static class BillTitleModel {
         private int groupIndex;//组索引
@@ -175,7 +182,7 @@ public class BillGroupModel {
     public static class BillModel {
         private int id;//id
         private int groupIndex;//所在组索引
-        private float detno=1000000;//序号
+        private float detno = 1000000;//序号
         private int length;//字符长度
         private int appwidth;//宽度
         private int isdefault;//是否显示
@@ -192,6 +199,7 @@ public class BillGroupModel {
         private String allowBlank;//是否允许为空(注:当作为标题的时候T:表示可以删除 F:表示不可删除)
         private List<LocalData> localDatas;//获取到的本地选择数据
         private BillJump mBillJump;//判断是否需要要跳转字段
+        private List<GridTab> mTabList;
 
         public BillModel() {
         }
@@ -214,6 +222,7 @@ public class BillGroupModel {
             this.allowBlank = e.allowBlank;
             this.findFunctionName = e.findFunctionName;
             this.mBillJump = e.mBillJump;
+            this.mTabList = e.mTabList;
         }
 
         public float getDetno() {
@@ -368,6 +377,54 @@ public class BillGroupModel {
         public void setLocalDatas(List<LocalData> localDatas) {
             this.localDatas = localDatas;
         }
+
+        public List<GridTab> getTabList() {
+            return mTabList;
+        }
+
+        public void setTabList(List<GridTab> tabList) {
+            mTabList = tabList;
+        }
+    }
+
+    public static class GridTab {
+        private String title;
+        private String caller;
+        private int position;
+        private List<BillGroupModel> mBillGroupModels;
+
+        public String getTitle() {
+            return title;
+        }
+
+        public void setTitle(String title) {
+            this.title = title;
+        }
+
+        public String getCaller() {
+            return caller;
+        }
+
+        public void setCaller(String caller) {
+            this.caller = caller;
+        }
+
+        public int getPosition() {
+            return position;
+        }
+
+        public void setPosition(int position) {
+            this.position = position;
+        }
+
+        public List<BillGroupModel> getBillGroupModels() {
+            return mBillGroupModels;
+        }
+
+        public void setBillGroupModels(List<BillGroupModel> billGroupModels) {
+            mBillGroupModels = billGroupModels;
+        }
+
     }
 
     /**
@@ -382,5 +439,23 @@ public class BillGroupModel {
     public interface Constants {
         String TYPE_TITLE = "LOCAL_TITLE";
         String TYPE_ADD = "LOCAL_ADD";
+        String TYPE_TAB = "LOCAL_TAB";
+    }
+
+    @Override
+    public String toString() {
+        return "BillGroupModel{" +
+                "isDeleteAble=" + isDeleteAble +
+                ", isForm=" + isForm +
+                ", lastInType=" + lastInType +
+                ", groupIndex=" + groupIndex +
+                ", minDetno=" + minDetno +
+                ", group='" + group + '\'' +
+                ", keyField='" + keyField + '\'' +
+                ", mTagMap=" + mTagMap +
+                ", hideBillFields=" + hideBillFields +
+                ", showBillFields=" + showBillFields +
+                ", mGridTabs=" + mGridTabs +
+                '}';
     }
 }

+ 92 - 10
app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java

@@ -8,7 +8,6 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.common.LogUtil;
-import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
@@ -58,6 +57,7 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
     private String statusCodeField;//状态码字段
     private String statusField;//状态字段
     private String detailMainKeyField;//从表
+    private boolean multidetailgrid = false;
 
     @Override
     public String getBaseUrl() {
@@ -144,11 +144,11 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
             return;
         }
 
-        String formStoreStr=JSONUtil.map2JSON(formStore);
-        String gridStoreStr=JSONUtil.map2JSON(gridStoreList);
+        String formStoreStr = JSONUtil.map2JSON(formStore);
+        String gridStoreStr = JSONUtil.map2JSON(gridStoreList);
 
-        LogUtil.i("gong","formStoreStr="+formStoreStr);
-        LogUtil.i("gong","gridStoreStr="+gridStoreStr);
+        LogUtil.i("gong", "formStoreStr=" + formStoreStr);
+        LogUtil.i("gong", "gridStoreStr=" + gridStoreStr);
         requestCompanyHttp(new Parameter.Builder()
                         .url(mId == 0 ? "mobile/oa/commonSaveAndSubmit.action" : "mobile/commonUpdate.action")
                         .addParams("caller", mCaller)
@@ -328,7 +328,8 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
         JSONObject jsonObject = JSON.parseObject(message);
         switch (what) {
             case LOAD_FORM:
-                handlerBill(jsonObject);
+//                handlerBill(jsonObject);
+                handlerBillTest();
                 break;
             case SAVE_AND_SUBMIT:
                 if (JSONUtil.getBoolean(jsonObject, "success")) {
@@ -447,12 +448,93 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
         }
     }
 
-    private final Comparator<BillGroupModel> mComparator=new Comparator<BillGroupModel>() {
+    private final Comparator<BillGroupModel> mComparator = new Comparator<BillGroupModel>() {
         @Override
         public int compare(BillGroupModel billGroupModel, BillGroupModel t1) {
-            return (billGroupModel.getMinDetno()>t1.getMinDetno())?1:-1;
+            return (billGroupModel.getMinDetno() > t1.getMinDetno()) ? 1 : -1;
         }
     };
+
+    private void handlerBillTest() {
+        String localJson = CommonUtil.getAssetsJson(ct, "bill.json");
+        LogUtil.prinlnLongMsg("billJson", localJson);
+        try {
+            JSONObject resultObject = JSON.parseObject(localJson);
+
+            List<BillGroupModel> showBillModels = new ArrayList<>();
+            JSONObject config = JSONUtil.getJSONObject(resultObject, "config");
+            detailKeyField = JSONUtil.getText(config, "fo_detailkeyfield");
+            keyField = JSONUtil.getText(config, "fo_keyfield");
+            statusCodeField = JSONUtil.getText(config, "fo_statuscodefield");
+            statusField = JSONUtil.getText(config, "fo_statusfield");
+            detailMainKeyField = JSONUtil.getText(config, "fo_detailmainkeyfield");
+            JSONObject data = JSONUtil.getJSONObject(resultObject, "data");
+            JSONArray formdetail = JSONUtil.getJSONArray(data, "formdetail");
+            Map<String, BillGroupModel> formdeMap = handlerFormdetail(formdetail);
+            if (formdeMap != null && !formdeMap.isEmpty()) {
+                for (Map.Entry<String, BillGroupModel> entry : formdeMap.entrySet()) {
+                    showBillModels.add(entry.getValue());
+                }
+                if (!ListUtils.isEmpty(showBillModels)) {
+                    Collections.sort(showBillModels, mComparator);
+                }
+            }
+            multidetailgrid = JSONUtil.getBoolean(data, "multidetailgrid");
+            if (multidetailgrid) {
+                JSONArray othergridetail = JSONUtil.getJSONArray(data, "othergridetail");
+                if (othergridetail != null && othergridetail.size() > 0) {
+                    List<BillGroupModel.GridTab> otherGridTabs = handlerGirdTabs(showBillModels.size() + 1, othergridetail);
+                    if (otherGridTabs.size() > 0) {
+                        BillGroupModel billTab = new BillGroupModel();
+                        billTab.setForm(false);
+                        billTab.setGridTabs(otherGridTabs);
+                        billTab.setGroupIndex(showBillModels.size());
+
+                        showBillModels.add(billTab);
+
+                        showBillModels.add(otherGridTabs.get(0).getBillGroupModels().get(0));
+                    }
+                }
+            } else {
+                JSONArray gridetail = JSONUtil.getJSONArray(data, "gridetail");
+                BillGroupModel mGridetailModel = handlerGridetail(showBillModels.size(), gridetail);
+                if (mGridetailModel != null) {
+                    showBillModels.add(mGridetailModel);
+                }
+            }
+            LogUtil.i("gong", "showBillModels=" + JSON.toJSONString(showBillModels));
+            iBill.setAdapter(showBillModels);
+        } catch (Exception e) {
+
+        }
+    }
+
+    private List<BillGroupModel.GridTab> handlerGirdTabs(int index, JSONArray othergridetail) {
+        List<BillGroupModel.GridTab> gridTabs = new ArrayList<>();
+        for (int i = 0; i < othergridetail.size(); i++) {
+            JSONObject otherGrid = othergridetail.getJSONObject(i);
+            if (otherGrid != null) {
+                JSONArray detailgrid = otherGrid.getJSONArray("detailgrid");
+                if (detailgrid != null && detailgrid.size() > 0) {
+                    BillGroupModel billGroupModel = handlerGridetail(index, detailgrid);
+                    if (billGroupModel != null) {
+                        BillGroupModel.GridTab gridTab = new BillGroupModel.GridTab();
+                        gridTab.setTitle(JSONUtil.getText(otherGrid, "dgtitle"));
+                        gridTab.setCaller(JSONUtil.getText(otherGrid, "dgcaller"));
+                        gridTab.setPosition(i);
+
+                        List<BillGroupModel> billGroupModels = new ArrayList<>();
+                        billGroupModels.add(billGroupModel);
+                        gridTab.setBillGroupModels(billGroupModels);
+
+                        gridTabs.add(gridTab);
+                    }
+                }
+            }
+        }
+        return gridTabs;
+    }
+
     //处理表单返回配置
     protected void handlerBill(JSONObject object) {
         LogUtil.i("gong", "object=" + object);
@@ -470,8 +552,8 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
             for (Map.Entry<String, BillGroupModel> entry : formdeMap.entrySet()) {
                 showBillModels.add(entry.getValue());
             }
-            if (!ListUtils.isEmpty(showBillModels)){
-                Collections.sort(showBillModels,mComparator);
+            if (!ListUtils.isEmpty(showBillModels)) {
+                Collections.sort(showBillModels, mComparator);
             }
         }
         JSONArray gridetail = JSONUtil.getJSONArray(data, "gridetail");

+ 2 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/BillTypeChangeUtils.java

@@ -24,6 +24,8 @@ public class BillTypeChangeUtils {
                 return 0;
             case BillGroupModel.Constants.TYPE_ADD:
                 return 110;
+            case BillGroupModel.Constants.TYPE_TAB:
+                return 111;
             case "C":
             case "SF":
             case "DF":

+ 1 - 1
app_modular/apputils/src/main/res/layout/item_bill_input_select.xml

@@ -4,7 +4,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@color/white"
-    android:minHeight="50dp"
+    android:minHeight="45dp"
     android:padding="@dimen/padding">
 
 

+ 21 - 0
app_modular/apputils/src/main/res/layout/item_bill_tab.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="50dp"
+    android:orientation="vertical">
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="8dp"
+        android:background="#f2f2f2"/>
+    <android.support.design.widget.TabLayout
+        android:id="@+id/bill_tab_tl"
+        android:layout_width="match_parent"
+        android:layout_height="42dp"
+        android:background="@color/white"
+        app:tabIndicatorColor="#33A2EE"
+        app:tabIndicatorHeight="4dp"
+        app:tabSelectedTextColor="#1084D1"
+        app:tabTextColor="#666666" />
+</LinearLayout>

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/ChangeMobileActivity.java

@@ -290,7 +290,7 @@ public class ChangeMobileActivity extends BaseActivity {
     /*补卡申请申诉*/
     private void suppleSignin(String message) {
         progressDialog.show();
-        String url = "mobile/oa/ saveAndSubmitMobileSignCard.action";
+        String url = "mobile/oa/saveAndSubmitMobileSignCard.action";
         Map<String, Object> param = new HashMap<>();
         param.put("caller", caller);
         Map<String, Object> params = new HashMap<>();