Android+Jquery Mobile学习系列(7)-保险人信息

[保险人管理]是这个APP最重要的功能,用于保存保险客户的数据,给后面的功能提供数据支撑。

 

简单说说[保险人管理]功能:主要就是增、删、改、查四个功能,在新增和修改的时候不仅可以保存保险人的姓名、身份证等基本信息,还可以保存保险人购买的保险信息(保险名称、保险公司、保险期限等)。(上传图片文件功能还没实现,这个正在想办法)

 

  • 数据库设计

所有数据库初始化语句还是在DBHelper的onUpgrade中完成。

主表是insurer_info(保险人基本信息)、从表insurances(保险人保单信息,与主表保持多对一的关系)。

Java代码   收藏代码
  1. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  2. ......  
  3.   
  4.         if(oldVersion < 4 && newVersion >= 4){  
  5.             StringBuilder insurer_info = new StringBuilder();  
  6.             insurer_info.append("CREATE TABLE IF NOT EXISTS \"insurer_info\" (");  
  7.             insurer_info.append("\"id\" INTEGER NOT NULL,");  
  8.             insurer_info.append("\"name\"  varchar(99),");  
  9.             insurer_info.append("\"sex\"  INTEGER,");  
  10.             insurer_info.append("\"birthday\"  varchar(32),");  
  11.             insurer_info.append("\"id_number\"  varchart(99),");  
  12.             insurer_info.append("\"mobile_phone\"  varchar(32),");  
  13.             insurer_info.append("\"email\"  varchar(99),");  
  14.             insurer_info.append("\"fax\"  varchar(99),");  
  15.             insurer_info.append("\"address\"  varchart(999),");  
  16.             insurer_info.append("\"marital_status\"  INTEGER,");  
  17.             insurer_info.append("\"education\"  INTEGER,");  
  18.             insurer_info.append("\"delete_flag\"  INTEGER,");  
  19.             insurer_info.append("\"update_time\"  varchart(99),");  
  20.             insurer_info.append("PRIMARY KEY (\"id\")");  
  21.             insurer_info.append(");");  
  22.             db.execSQL(insurer_info.toString());  
  23.               
  24.             StringBuilder image_info = new StringBuilder();  
  25.             image_info.append("CREATE TABLE IF NOT EXISTS \"image_info\" (");  
  26.             image_info.append("\"id\" INTEGER NOT NULL,");  
  27.             image_info.append("\"table_name\"  varchart(99),");  
  28.             image_info.append("\"table_id\"  INTEGER,");  
  29.             image_info.append("\"image_type\"  INTEGER,");  
  30.             image_info.append("\"image_value\"  varchart(3000),");  
  31.             image_info.append("\"image_index\"  INTEGER,");  
  32.             image_info.append("PRIMARY KEY (\"id\")");  
  33.             image_info.append(");");  
  34.             db.execSQL(image_info.toString());  
  35.               
  36.             StringBuilder insurances = new StringBuilder();  
  37.             insurances.append("CREATE TABLE IF NOT EXISTS \"insurances\" (");  
  38.             insurances.append("\"id\" INTEGER NOT NULL,");  
  39.             insurances.append("\"insurer_info_id\" INTEGER NOT NULL,");  
  40.             insurances.append("\"insurance_name\"  varchart(99),");  
  41.             insurances.append("\"insurance_company\"  varchart(99),");  
  42.             insurances.append("\"insurance_date\"  varchart(99),");  
  43.             insurances.append("\"year_period\"  INTEGER,");  
  44.             insurances.append("\"year_cost\"  varchart(99),");  
  45.             insurances.append("\"insurance_comment\"  varchart(3000),");  
  46.             insurances.append("\"delete_flag\"  INTEGER,");  
  47.             insurances.append("\"update_time\"  varchart(99),");  
  48.             insurances.append("\"remind_time\"  varchart(99),");  
  49.             insurances.append("PRIMARY KEY (\"id\")");  
  50.             insurances.append(");");  
  51.             db.execSQL(insurances.toString());  
  52.         }  
  53.         if(oldVersion < 5 && newVersion >= 5){  
  54.             db.execSQL("ALTER TABLE insurer_info ADD qq_number varchart(99)");  
  55.         }  
  56.         if(oldVersion < 6 && newVersion >= 6){  
  57.             StringBuilder insurance_company = new StringBuilder();  
  58.             insurance_company.append("CREATE TABLE IF NOT EXISTS \"insurance_company\" (");  
  59.             insurance_company.append("\"id\" INTEGER NOT NULL,");  
  60.             insurance_company.append("\"name\" varchart(99),");  
  61.             insurance_company.append("\"delete_flag\"  INTEGER,");  
  62.             insurance_company.append("\"index_sort\"  INTEGER,");  
  63.             insurance_company.append("\"comment\"  varchart(3000),");  
  64.             insurance_company.append("PRIMARY KEY (\"id\")");  
  65.             insurance_company.append(");");  
  66.             db.execSQL(insurance_company.toString());  
  67.         }  
  68.         if(oldVersion < 7 && newVersion >= 7){  
  69.             String initSQL = "INSERT INTO insurance_company(id,name,delete_flag,index_sort,comment) VALUES('1','未知','"+Enums.DeleteEnum.AVAILABLE.getKey()+"','1','初始化设置');";  
  70.             String updateSQL = "UPDATE insurances SET insurance_company='1'";  
  71.             db.execSQL(initSQL);  
  72.             db.execSQL(updateSQL);  
  73.         }  
  74.         if(oldVersion < 8 && newVersion >= 8){  
  75.             db.execSQL("ALTER TABLE insurances ADD end_date varchart(99)");  
  76.             db.execSQL("ALTER TABLE insurances ADD remind_type INTEGER");  
  77.             db.execSQL("ALTER TABLE insurer_info ADD remind_time varchart(99)");  
  78.         }  
  79.   
  80. ......  
  81. }  

中间有很多版本变化,因为是在开发过程中不断完善的。 

 

下面是用到的表对应的JavaBean。

Java代码   收藏代码
  1. public class InsurerInfo extends BasePO {  
  2.     private static final long serialVersionUID = 6953325446546926866L;  
  3.       
  4.     private Long id;  
  5.     private String name;  
  6.     private Integer sex;  
  7.     private String birthday;  
  8.     private String id_number;  
  9.     private String mobile_phone;  
  10.     private String qq_number;  
  11.     private String email;  
  12.     private String fax;  
  13.     private String address;  
  14.     private Integer marital_status;  
  15.     private Integer education;  
  16.     private Integer delete_flag;  
  17.     private String update_time;  
  18.     private String remind_time;  
  19.   
  20. ......  
  21. }  

 

Java代码   收藏代码
  1. public class Insurances extends BasePO {  
  2.     private static final long serialVersionUID = 3329436852215192933L;  
  3.     private Long id;  
  4.     private Long insurer_info_id;     //外键关联保险人基础信息表  
  5.     private String insurance_name;    //保险名称  
  6.     private String insurance_company; //保险单位  
  7.     private String insurance_date;    //投保日期  
  8.     private String end_date;          //结束日期  
  9.     private String year_period;       //年期  
  10.     private String year_cost;         //年保费  
  11.     private String insurance_comment; //备注说明  
  12.     private Integer delete_flag;      //删除标识  
  13.     private String update_time;       //更新时间  
  14.     private int remind_type;          //是否提醒  
  15.     private String remind_time;       //上次提醒时间  
  16. ......  
  17. }  

 

 

  • 开发过程

------>新增/修改页面

这个页面效果图如下。

默认加载[基本信息]页签,可以录入保险人的个人基本资料


[投保信息]页签记录保险人购买的保险,结构是上半部分为已购买保险列表,下半部分为已购保险新增和修改。

 


 点击保险列表某一项即可自动回填在下方表单内,支持删除修改操作。

(PS:投保信息页面我承认设计很失败,应该用dialog来录入保险信息的,主要原因是最初我不知道怎么动态调用dialog,- -||)

 

下面是整个页面的HTML代码,[基本信息]和[投保信息]的代码都在同一个页面,通过javascript动态隐藏、显示对应模块。

Html代码   收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  5.     <meta name="viewport" content="width=device-width, initial-scale=1">  
  6.     <title>  
  7.     </title>  
  8.   </head>  
  9.   <body>  
  10.     <div data-role="page" id="insurer_edit_page">  
  11.       <div data-theme="b" data-role="header" data-position="fixed">  
  12.         <data-role="button" data-rel="back" href="#" class="ui-btn-left" data-icon="back">  
  13.           返回  
  14.         </a>  
  15.         <h3>  
  16.           保险人信息  
  17.         </h3>  
  18.         <data-role="button" data-theme="b" href="#" id="a_save" data-icon="check" data-iconpos="left" class="ui-btn-right">  
  19.           保存  
  20.         </a>  
  21.       </div>  
  22.         
  23.       <div data-role="navbar" data-iconpos="top">  
  24.             <ul>  
  25.                 <li>  
  26.                     <href="#" data-transition="slide" id="a_basic_info" class="ui-btn-active">  
  27.                         基本信息  
  28.                     </a>  
  29.                 </li>  
  30.                 <li>  
  31.                     <href="#" data-transition="slide" id="a_insure_info">  
  32.                         投保信息  
  33.                     </a>  
  34.                 </li>  
  35.             </ul>  
  36.       </div>  
  37.         
  38.       <div data-role="content">  
  39.         <div style="color:red" id="msg"></div>  
  40.         <input type="hidden" id="id" name="id" >  
  41.         <div id="div_basic_info">  
  42.         <div class="ui-field-contain" data-controltype="textinput">  
  43.             <label for="name">  
  44.                 姓名  
  45.             </label>  
  46.             <input name="name" id="name" value="" type="text">  
  47.         </div>  
  48.           
  49.         <div id="sex" class="ui-field-contain" data-controltype="radiobuttons">  
  50.             <fieldset data-role="controlgroup" data-type="horizontal">  
  51.                 <legend>  
  52.                     性别  
  53.                 </legend>  
  54.                 <input id="mail" name="sex" value="1" type="radio" checked="checked">  
  55.                 <label for="mail">  
  56.                     男  
  57.                 </label>  
  58.                 <input id="femail" name="sex" value="2" type="radio">  
  59.                 <label for="femail">  
  60.                     女  
  61.                 </label>  
  62.             </fieldset>  
  63.         </div>  
  64.           
  65.         <div class="ui-field-contain" data-controltype="dateinput">  
  66.             <label for="birthday">  
  67.                 生日  
  68.             </label>  
  69.             <input name="birthday" id="birthday" placeholder="出生日期..." value=""  
  70.             type="date">  
  71.         </div>  
  72.         <div class="ui-field-contain" data-controltype="textinput">  
  73.             <label for="id_number">  
  74.                 身份证号  
  75.             </label>  
  76.             <input name="id_number" id="id_number" placeholder="身份证号码..." value=""  
  77.             type="text">  
  78.         </div>  
  79.         <div class="ui-field-contain" data-controltype="textinput">  
  80.             <label for="mobile_phone">  
  81.                 移动电话  
  82.             </label>  
  83.             <input name="mobile_phone" id="mobile_phone" placeholder="手机号码..." value=""  
  84.             type="tel">  
  85.         </div>  
  86.         <div class="ui-field-contain" data-controltype="textinput">  
  87.             <label for="email">  
  88.                 电子邮箱  
  89.             </label>  
  90.             <input name="email" id="email" placeholder="E-Mail地址..." value="" type="email">  
  91.         </div>  
  92.         <div class="ui-field-contain" data-controltype="textinput">  
  93.             <label for="qq_number">  
  94.                 QQ  
  95.             </label>  
  96.             <input name="qq_number" id="qq_number" placeholder="QQ号码..." value=""  
  97.             type="text">  
  98.         </div>  
  99.         <div class="ui-field-contain" data-controltype="textinput">  
  100.             <label for="fax">  
  101.                 传真  
  102.             </label>  
  103.             <input name="fax" id="fax" placeholder="传真号码..." value=""  
  104.             type="text">  
  105.         </div>  
  106.         <div class="ui-field-contain" data-controltype="textarea">  
  107.             <label for="address">  
  108.                 联系地址  
  109.             </label>  
  110.             <textarea name="address" id="address" placeholder="你的直接联系地址..."></textarea>  
  111.         </div>  
  112.           
  113.         <div id="marital_status" class="ui-field-contain" data-controltype="radiobuttons">  
  114.             <fieldset data-role="controlgroup" data-type="horizontal">  
  115.                 <legend>  
  116.                     婚姻状况  
  117.                 </legend>  
  118.                 <input id="unmarried" name="marital_status" value="1" type="radio" checked="checked">  
  119.                 <label for="unmarried">  
  120.                     未婚  
  121.                 </label>  
  122.                 <input id="married" name="marital_status" value="2" type="radio">  
  123.                 <label for="married">  
  124.                     已婚  
  125.                 </label>  
  126.                 <input id="divorce" name="marital_status" value="3" type="radio">  
  127.                 <label for="divorce">  
  128.                     离婚  
  129.                 </label>  
  130.             </fieldset>  
  131.         </div>  
  132.           
  133.         <div class="ui-field-contain" data-controltype="selectmenu">  
  134.             <label for="education">  
  135.                 学历  
  136.             </label>  
  137.             <select id="education" name="education">  
  138.                 <option value="2">  
  139.                     高中及以下  
  140.                 </option>  
  141.                 <option value="3">  
  142.                     专科  
  143.                 </option>  
  144.                 <option value="4">  
  145.                     本科  
  146.                 </option>  
  147.                 <option value="5">  
  148.                     硕士  
  149.                 </option>  
  150.                 <option value="6">  
  151.                     博士  
  152.                 </option>  
  153.             </select>  
  154.         </div>  
  155.           
  156.         <div class="ui-field-contain" data-controltype="fileinput">  
  157.             <label for="images">  
  158.                 图片  
  159.             </label>  
  160.             <input type="file" name="images" id="images">  
  161.         </div>  
  162.         </div>  
  163.          
  164.         <div id="div_insure_info">  
  165.           
  166.             <div data-role="collapsible" id="collapsible" data-collapsed="false">  
  167.             <h3 class="h3">已保存保单列表</h3>  
  168.             <ul data-role='listview' id="collapsible_listview">  
  169.             </ul>  
  170.             </div>  
  171.           
  172.         <hr>  
  173.         <h4>新增或修改保单信息</h4>  
  174.         <div style="color:red" id="insurance_error"></div>  
  175.         <input type="hidden" name="insurance_id">  
  176.         <div class="ui-field-contain" data-controltype="textinput">  
  177.             <label for="insurance_name">  
  178.                 险种  
  179.             </label>  
  180.             <input name="insurance_name" value="" type="text">  
  181.             </div>  
  182.           
  183.         <div class="ui-field-contain" data-controltype="selectmenu">  
  184.             <label for="insurance_company">  
  185.                 投保公司  
  186.             </label>  
  187.             <select id="insurance_company" name="insurance_company">  
  188.             </select>  
  189.         </div>  
  190.         <div class="ui-field-contain" data-controltype="dateinput">  
  191.             <label for="insurance_date">  
  192.                 投保日期  
  193.             </label>  
  194.             <input name="insurance_date" value="" type="date">  
  195.         </div>  
  196.         <div class="ui-field-contain" data-controltype="textinput">  
  197.             <label for="insurance_year">  
  198.                 年期(年)  
  199.             </label>  
  200.             <input name="year_period" value="" type="number">  
  201.         </div>  
  202.         <div class="ui-field-contain" data-controltype="textinput">  
  203.             <label for="insurance_cost">  
  204.                 年保费(元)  
  205.             </label>  
  206.             <input name="year_cost" value="" type="number">  
  207.         </div>  
  208.         <div class="ui-field-contain" data-controltype="textarea">  
  209.             <label for="insurance_comment">  
  210.                 备注  
  211.             </label>  
  212.             <textarea name="insurance_comment"  placeholder=""></textarea>  
  213.         </div>  
  214.           
  215.         <href="javascript:void(0);" data-role="button" id="btn_insurance_save" data-inline="true" data-theme="e">新增</a>  
  216.         <href="javascript:void(0);" data-role="button" style="display:none" id="btn_insurance_delete" data-inline="true" data-theme="b">删除</a>  
  217.         <href="javascript:void(0);" data-role="button" id="btn_insurance_cancel" data-inline="true">取消</a>  
  218.           
  219.         </div><!-- end of div_insure_info -->  
  220.           
  221.       </div><!-- end of content -->  
  222.       
  223.     </div>  
  224.   
  225. </body>  
  226. </html>  

 

页签切换时执行的事件:

Js代码   收藏代码
  1. $(document).on("pageinit", "#insurer_edit_page", function() {  
  2.     $("#insurer_edit_page").find("#div_basic_info").show();  
  3.     $("#insurer_edit_page").find("#div_insure_info").hide();  
  4.   
  5.     $("#insurer_edit_page").find("#a_basic_info").click(function(){  
  6.         $("#insurer_edit_page").find("#div_basic_info").show();  
  7.         $("#insurer_edit_page").find("#div_insure_info").hide();  
  8.     });  
  9.           
  10.     $("#insurer_edit_page").find("#a_insure_info").click(function(){  
  11.         $("#insurer_edit_page").find("#div_basic_info").hide();  
  12.         $("#insurer_edit_page").find("#div_insure_info").show();  
  13.     });  
  14. ......  
  15. });  

 

[投保信息]页面新增、删除、取消三个按钮点击事件处理逻辑如下。

最重要的是新增操作,它会提取录入的数据并且放到上方的ListView中,保存前还通过js做了一些输入有效性验证。

删除操作只是从ListView中临时删除那条数据,如果不点击右上方的[保存]按钮的话,不会生效。

Js代码   收藏代码
  1. function init_div_insure_info_event(){  
  2.     $("#insurer_edit_page").find("#btn_insurance_save").unbind("click").bind("click",function(){  
  3.         var DOM = $("#insurer_edit_page").find("#div_insure_info");  
  4.           
  5.         var isNew = false;  
  6.         var insurance_id = DOM.find("input[name='insurance_id']").val();  
  7.         if( $.isNull(insurance_id) ){  
  8.             insurance_id = javascriptUser.getUUID();  
  9.             isNew = true;  
  10.         }  
  11.         var insurance_name = DOM.find("input[name='insurance_name']").val();  
  12.         if($.isNull(insurance_name)){  
  13.             DOM.find("#insurance_error").html("险种不能为空");  
  14.             return;  
  15.         }  
  16.         var insurance_company = DOM.find("select[name='insurance_company']").val();  
  17.         var insurance_date = DOM.find("input[name='insurance_date']").val();  
  18.         if(!$.isNull(insurance_date)){  
  19.             if(!$.isDate(insurance_date)){  
  20.                 DOM.find("#insurance_error").html("投保日期不是正确的日期格式:年-月-日");  
  21.                 return;  
  22.             }  
  23.         }  
  24.         var year_period = DOM.find("input[name='year_period']").val();  
  25.         if(!$.isNull(year_period)){  
  26.             if(!$.isNumber(year_period)){  
  27.                 DOM.find("#insurance_error").html("年期不是数字类型");  
  28.                 return;  
  29.             }  
  30.         }  
  31.         var year_cost = DOM.find("input[name='year_cost']").val();  
  32.         if(!$.isNull(year_cost)){  
  33.             if(!$.isNumber(year_cost)){  
  34.                 DOM.find("#insurance_error").html("年保费不是数字类型");  
  35.                 return;  
  36.             }  
  37.         }  
  38.         var insurance_comment = DOM.find("textarea[name='insurance_comment']").val();  
  39.         DOM.find("#insurance_error").html("&nbsp;");//清空错误提示  
  40.           
  41.         if(isNew){  
  42.             var html = "<li name=\"views\" id=\""+insurance_id+"\">";  
  43.             html += "<input type=\"hidden\" name=\"h_id\" value=\""+insurance_id+"\" >";  
  44.             html += "<input type=\"hidden\" name=\"h_isNew\" value=\""+isNew+"\" >";  
  45.             html += "<input type=\"hidden\" name=\"h_insurance_name\" value=\""+insurance_name+"\" >";  
  46.             html += "<input type=\"hidden\" name=\"h_insurance_date\" value=\""+insurance_date+"\" >";  
  47.             html += "<input type=\"hidden\" name=\"h_insurance_company\" value=\""+insurance_company+"\" >";  
  48.             html += "<input type=\"hidden\" name=\"h_year_period\" value=\""+year_period+"\" >";  
  49.             html += "<input type=\"hidden\" name=\"h_year_cost\" value=\""+year_cost+"\" >";  
  50.             html += "<input type=\"hidden\" name=\"h_insurance_comment\" value=\""+insurance_comment+"\" >";  
  51.             html += "<input type=\"hidden\" name=\"h_remind_time\" value=\"0\" >";  
  52.             html += "<a href=\"#\" οnclick=\"init_div_insure_info_form('"+insurance_id+"')\" >";  
  53.               
  54.             html += ("<p name=\"p_insurance_name\">"+insurance_name+"<p>");  
  55.             html += ("<p name=\"p_insurance_company\">"+$.parseJSON(javascriptUser.getCompanyById(insurance_company)).name+"<p>");  
  56.             html += ("<p name=\"p_insurance_date\">"+insurance_date+"<p>");  
  57.             html += ("<p name=\"p_year_period\">"+year_period+"年&nbsp;&nbsp;"+year_cost+"元/年<p>");  
  58.             html += ("<p name=\"p_insurance_comment\">"+insurance_comment+"<p>");  
  59.             html += "</a>";  
  60.             html += "</li>";  
  61.             DOM.find("#collapsible_listview").prepend(html);  
  62.         }//end of isNew  
  63.         else{  
  64.             DOM.find("#"+insurance_id).find("input[name='h_insurance_name']").val(insurance_name);  
  65.             DOM.find("#"+insurance_id).find("input[name='h_insurance_company']").val(insurance_company);  
  66.             DOM.find("#"+insurance_id).find("input[name='h_insurance_date']").val(insurance_date);  
  67.             DOM.find("#"+insurance_id).find("input[name='h_year_period']").val(year_period);  
  68.             DOM.find("#"+insurance_id).find("input[name='h_year_cost']").val(year_cost);  
  69.             DOM.find("#"+insurance_id).find("input[name='h_insurance_comment']").val(insurance_comment);  
  70.               
  71.             DOM.find("#"+insurance_id).find("p[name='p_insurance_name']").html(insurance_name);  
  72.             DOM.find("#"+insurance_id).find("p[name='p_insurance_company']").html($.parseJSON(javascriptUser.getCompanyById(insurance_company)).name);  
  73.             DOM.find("#"+insurance_id).find("p[name='p_insurance_date']").html(insurance_date);  
  74.             DOM.find("#"+insurance_id).find("p[name='p_year_period']").html(year_period+"年&nbsp;&nbsp;"+year_cost+"元/年");  
  75.             DOM.find("#"+insurance_id).find("p[name='p_insurance_comment']").html(insurance_comment);  
  76.         }  
  77.         reset_div_insure_info_form();  
  78.         DOM.find("#collapsible_listview").listview("refresh");  
  79.         DOM.find("#collapsible_listview").focus();  
  80.     });//end of click  
  81.       
  82.     /** 
  83.      * 取消 
  84.      */  
  85.     $("#insurer_edit_page").find("#btn_insurance_cancel").unbind("click").bind("click",function(){  
  86.         reset_div_insure_info_form();  
  87.     });  
  88.       
  89.     /** 
  90.      * 删除 
  91.      */  
  92.     $("#insurer_edit_page").find("#btn_insurance_delete").unbind("click").bind("click",function(){  
  93.         if(confirm("确定临时删除保单吗?(保存后会完全删除)")){  
  94.             var id = $("#insurer_edit_page").find("#div_insure_info").find("input[name='insurance_id']").val();  
  95.             $("#insurer_edit_page").find("#collapsible_listview").find("#"+id).remove();  
  96.             $("#insurer_edit_page").find("#collapsible_listview").listview("refresh");  
  97.             $("#insurer_edit_page").find("#collapsible_listview").focus();  
  98.             reset_div_insure_info_form();  
  99.         }  
  100.     });  
  101.       
  102. }  

  

右上角[保存]按钮执行最终的保存操作。

因为保单信息可以是多条ListView,而调用Android后台方法是不能传List的,所以我是将数据转换成字符串,在后台通过split转回成数组。

Js代码   收藏代码
  1. $(document).on("pageinit", "#insurer_edit_page", function() {  
  2. ......  
  3. $("#insurer_edit_page").find("#a_save").unbind("click").bind("click",insurer_edit_save);  
  4. ......  
  5. });  
  6.   
  7. function insurer_edit_save(){  
  8.     var DOM = $("#insurer_edit_page");  
  9.       
  10.     var insurerInfo = new Object();  
  11.     insurerInfo.id = DOM.find("#id").val();  
  12.     insurerInfo.name = DOM.find("#name").val();  
  13.     insurerInfo.sex = DOM.find('input[name="sex"]:checked').val();  
  14.     insurerInfo.birthday = DOM.find("#birthday").val();  
  15.     insurerInfo.id_number = DOM.find("#id_number").val();  
  16.     insurerInfo.mobile_phone = DOM.find("#mobile_phone").val();  
  17.     insurerInfo.email = DOM.find("#email").val();  
  18.     insurerInfo.qq_number = DOM.find("#qq_number").val();  
  19.     insurerInfo.fax = DOM.find("#fax").val();  
  20.     insurerInfo.address = DOM.find("#address").val();  
  21.     insurerInfo.marital_status = DOM.find('input[name="marital_status"]:checked').val();  
  22.     insurerInfo.education = DOM.find("#education").val();  
  23.       
  24.     var insurancesString = "";  
  25.     var listView = DOM.find("#collapsible_listview").children();  
  26.     if(listView != undefined && listView.length > 0){  
  27.         listView.each(function(i,n){  
  28.             var view = $(n)  
  29.             var insurances = new Object();  
  30.             insurances.id = view.find("input[name='h_id']").val();  
  31.             insurances.insurance_name = view.find("input[name='h_insurance_name']").val();  
  32.             insurances.insurance_date = view.find("input[name='h_insurance_date']").val();  
  33.             insurances.insurance_company = view.find("input[name='h_insurance_company']").val();  
  34.             insurances.year_period = view.find("input[name='h_year_period']").val();  
  35.             insurances.year_cost = view.find("input[name='h_year_cost']").val();  
  36.             insurances.insurance_comment = view.find("input[name='h_insurance_comment']").val();  
  37.             if(!$.isNull(view.find("input[name='h_update_time']").val())){  
  38.                 insurances.update_time = view.find("input[name='h_update_time']").val();  
  39.             }  
  40.             insurances.remind_time = view.find("input[name='h_remind_time']").val();  
  41.             insurances.isNew = view.find("input[name='h_isNew']").val();  
  42.             insurancesString += $.objectToString(insurances)+"#LIST#"  
  43.         });  
  44.     }  
  45.       
  46.       
  47.       
  48.     var imageInfo = new Object();  
  49.       
  50.     var result = javascriptUser.saveOrUpdateInsurer($.objectToString(insurerInfo),insurancesString,$.objectToString(imageInfo));  
  51.     if(result == "true"){  
  52.         $.mobile.changePage("insurer_list.html",{transition: "slide"});  
  53.     }else{  
  54.         $("#msg").html(result);  
  55.     }  
  56. }  

 

Android后台执行保存操作,这里主要是接收参数,验证输入有效性,封装成对象,最后调用Manager方法执行最终入库逻辑。

Java代码   收藏代码
  1. public String saveOrUpdateInsurer(String insurerInfoString,String insurancesString,String imageInfoString){  
  2.     Map<String, String> insurerInfoMap = this.getParams(insurerInfoString);  
  3.     String id = insurerInfoMap.get("id");  
  4.     String name = insurerInfoMap.get("name");  
  5.     String sex = insurerInfoMap.get("sex");  
  6.     String birthday = insurerInfoMap.get("birthday");  
  7.     String id_number = insurerInfoMap.get("id_number");  
  8.     String mobile_phone = insurerInfoMap.get("mobile_phone");  
  9.     String email = insurerInfoMap.get("email");  
  10.     String qq_number = insurerInfoMap.get("qq_number");  
  11.     String fax = insurerInfoMap.get("fax");  
  12.     String address = insurerInfoMap.get("address");  
  13.     String marital_status = insurerInfoMap.get("marital_status");  
  14.     String education = insurerInfoMap.get("education");  
  15.       
  16.     List<Validator> list = new ArrayList<Validator>();  
  17.     list.add( new Validator(ValidateUtils.ValidateEnum.EMPTY, "姓名", new Object[]{name}) );  
  18.     list.add( new Validator(ValidateUtils.ValidateEnum.CHARACTERS, "姓名", new Object[]{name.trim(),"<>'\""}) );  
  19.     if(StringUtils.isNotBlank(birthday)){  
  20.         list.add( new Validator(ValidateUtils.ValidateEnum.DATE, "生日", new Object[]{birthday,"yyyy-MM-dd"}) );  
  21.     }  
  22.     if(StringUtils.isNotBlank(mobile_phone)){  
  23.         list.add( new Validator(ValidateUtils.ValidateEnum.NUMBER, "移动电话", new Object[]{mobile_phone}) );  
  24.     }  
  25.     if(StringUtils.isNotBlank(qq_number)){  
  26.         list.add( new Validator(ValidateUtils.ValidateEnum.NUMBER, "QQ号码", new Object[]{qq_number}) );  
  27.     }  
  28.     if(StringUtils.isNotBlank(email)){  
  29.         list.add( new Validator(ValidateUtils.ValidateEnum.EMAIL, "E-Mail", new Object[]{email}) );  
  30.     }  
  31.     String check = ValidateUtils.validateList(list);  
  32.     if(StringUtils.isNotBlank(check)){  
  33.         return check;  
  34.     }  
  35.     boolean isEdit = false;  
  36.     if(StringUtils.isNotBlank(id)){  
  37.         isEdit = true;  
  38.     }  
  39.       
  40.     Integer delete_flag = Enums.DeleteEnum.AVAILABLE.getKey();  
  41.     String update_time = DateUtil.date2string(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss);  
  42.     //保险人基本信息  
  43.     InsurerInfo insurerInfo = new InsurerInfo( (StringUtils.isNotBlank(id) ? Long.valueOf(id) : InsurerInfo.uuid() ) , name, Integer.valueOf(sex), birthday, id_number, mobile_phone,qq_number,email, fax, address, Integer.valueOf(marital_status), Integer.valueOf(education), delete_flag, update_time);  
  44.       
  45.     //保险单信息:分新建和更新两种  
  46.     List<Insurances> newInsurancesList = new ArrayList<Insurances>();  
  47.     List<Insurances> oldInsurancesList = new ArrayList<Insurances>();  
  48.     if(StringUtils.isNotBlank(insurancesString)){  
  49.         String[] insurancesArr = insurancesString.split("#LIST#");  
  50.         for (String string : insurancesArr) {  
  51.             Map<String, String> insurancesMap = null;  
  52.             Insurances insurances = null;  
  53.             if(StringUtils.isNotBlank(string)){  
  54.                 insurancesMap = this.getParams(string);  
  55.                 insurances = new Insurances();  
  56.                 insurances.setId(Long.valueOf(insurancesMap.get("id")));  
  57.                 insurances.setDelete_flag(Enums.DeleteEnum.AVAILABLE.getKey());  
  58.                 insurances.setInsurance_comment(insurancesMap.get("insurance_comment"));  
  59.                 insurances.setInsurance_company(insurancesMap.get("insurance_company"));  
  60.                 insurances.setInsurance_date(insurancesMap.get("insurance_date"));  
  61.                 insurances.setInsurance_name(insurancesMap.get("insurance_name"));  
  62.                 insurances.setInsurer_info_id(insurerInfo.getId());  
  63.                 insurances.setRemind_time(insurancesMap.get("remind_time"));  
  64.                 insurances.setUpdate_time(insurancesMap.containsKey("update_time")?insurancesMap.get("update_time"):DateUtil.date2string(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss));  
  65.                 insurances.setYear_cost(insurancesMap.get("year_cost"));  
  66.                 insurances.setYear_period(insurancesMap.get("year_period"));  
  67.                 insurances.setRemind_type(Enums.RemindTypeEnum.ON.getKey());  
  68.                 if(StringUtils.isNotEmpty(insurances.getInsurance_date()) && StringUtils.isNotEmpty(insurances.getYear_period())){  
  69.                     try {  
  70.                         Date start = DateUtil.string2date(insurances.getInsurance_date(),DateUtil.yyyy_MM_dd);  
  71.                         Date end = DateUtil.addYear(start, Integer.valueOf(insurances.getYear_period()));  
  72.                         insurances.setEnd_date(DateUtil.date2string(end, DateUtil.yyyy_MM_dd));  
  73.                     } catch (ParseException e) {  
  74.                         Log.e("common", "日期时间转换错误:"+insurances.getInsurance_date(), e);  
  75.                     }  
  76.                 }  
  77.                 if("true".equals(insurancesMap.get("isNew"))){  
  78.                     newInsurancesList.add(insurances);  
  79.                 }else{  
  80.                     oldInsurancesList.add(insurances);  
  81.                 }  
  82.             }  
  83.         }  
  84.     }  
  85.       
  86.     //图片附件功能未做  
  87.     Map<String, String> imageInfoMap = this.getParams(imageInfoString);  
  88.     try {  
  89.         if(isEdit){  
  90.             insurerInfoManager.update(insurerInfo, newInsurancesList,oldInsurancesList, null);  
  91.         }else{  
  92.             insurerInfoManager.save(insurerInfo, newInsurancesList, null);  
  93.         }  
  94.     } catch (Exception e) {  
  95.         Log.e(Enums.LogTagEnum.COMMON.getKey(), "保存保险人信息失败", e);  
  96.         return e.getMessage();  
  97.     }  
  98.     return "true";  
  99. }  

最终执行新增、修改操作的是InsurerInfoManager,因为涉及多张表操作,所以这里我做了事务处理,保持数据的一致性。

Java代码   收藏代码
  1. public void update(InsurerInfo insurerInfo,List<Insurances> newInsurancesList,List<Insurances> oldInsurancesList,List<ImageInfo> imageInfoList){  
  2.     //开启事务  
  3.     dbHelper.getWritableDatabase().beginTransaction();  
  4.     try {  
  5.         //更新保险人基本信息  
  6.         super.update(insurerInfo);  
  7.           
  8.         //删除不存在的保险单信息  
  9.         if(!ObjectUtils.isEmpty(oldInsurancesList)){  
  10.             String ids = "";  
  11.             for (Insurances insurances: oldInsurancesList) {  
  12.                 //更新已存在的保险单  
  13.                 insurancesManager.update(insurances);  
  14.                 ids += insurances.getId().toString()+",";  
  15.             }  
  16.             String delSql = "DELETE FROM insurances WHERE id NOT IN ("+ObjectUtils.removeLastChar(ids, ",")+") AND insurer_info_id = ?";  
  17.             super.updateBySql(delSql, new Object[]{insurerInfo.getId()});  
  18.         }else{  
  19.             String delSql = "DELETE FROM insurances WHERE insurer_info_id = ?";  
  20.             super.updateBySql(delSql, new Object[]{insurerInfo.getId()});  
  21.         }  
  22.         if(!ObjectUtils.isEmpty(newInsurancesList)){  
  23.             for (Insurances insurances: newInsurancesList) {  
  24.                 //添加新建的保险单  
  25.                 insurancesManager.save(insurances);  
  26.             }  
  27.         }  
  28.         //提交事务  
  29.         dbHelper.getWritableDatabase().setTransactionSuccessful();  
  30.     } catch (Exception e) {  
  31.         Log.e(Enums.LogTagEnum.COMMON.getKey(), "保存保险人信息异常!", e);  
  32.     }finally{  
  33.         //结束事务  
  34.         dbHelper.getWritableDatabase().endTransaction();  
  35.     }  
  36. }  

 

Java代码   收藏代码
  1. public void save(InsurerInfo insurerInfo,List<Insurances> insurancesList,List<ImageInfo> imageInfoList){  
  2.     dbHelper.getWritableDatabase().beginTransaction();  
  3.     try {  
  4.         super.save(insurerInfo);  
  5.         if(!ObjectUtils.isEmpty(insurancesList)){  
  6.             for (Insurances insurances: insurancesList) {  
  7.                 insurancesManager.save(insurances);  
  8.             }  
  9.         }  
  10.         dbHelper.getWritableDatabase().setTransactionSuccessful();  
  11.     } catch (Exception e) {  
  12.         Log.e(Enums.LogTagEnum.COMMON.getKey(), "保存保险人信息异常!", e);  
  13.     }finally{  
  14.         dbHelper.getWritableDatabase().endTransaction();  
  15.     }  
  16. }  

 

 

------>保险人列表

执行保存操作后,会跳转到保险人列表页面。这个页面主要由两个控件组成:查询输入框和ListView列表组件,ListView用于显示所有保险人信息的,查询输入框可根据保险人姓名进行即时条件查询。


这是全部保险人列表



这是根据条件即时查询的保险人列表

 

HTML页面代码非常简单:

Html代码   收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  5.     <meta name="viewport" content="width=device-width, initial-scale=1">  
  6.     <title>  
  7.     </title>  
  8.   </head>  
  9.   <body>  
  10.     <div data-role="page" id="insurer_list_page">  
  11.       <div data-theme="b" data-role="header" data-position="fixed">  
  12.         <data-role="button" data-rel="back" href="#" class="ui-btn-left" data-icon="back">  
  13.           返回  
  14.         </a>  
  15.         <h3>  
  16.           (准)保险人列表  
  17.         </h3>  
  18.         <id="a_add" href="#" data-transition="slide" data-role="button" data-theme="b" data-icon="add" data-iconpos="left" class="ui-btn-right">  
  19.           新增  
  20.         </a>  
  21.       </div>  
  22.       <div data-role="content">  
  23.         <div role="main" class="ui-content">  
  24.         <div class="ui-field-contain" data-controltype="searchinput">  
  25.             <input name="searchinput" id="searchinput" placeholder="根据保险人姓名搜索..." value="" type="search" data-clear-btn="true">  
  26.         </div>  
  27.         <ul data-role="listview" data-inset="true" id="listview">  
  28.               
  29.         </ul>  
  30.         </div>  
  31.       </div>  
  32. </div>  
  33.   
  34. </body>  
  35. </html>  

 

保险人列表页面的pageinit事件主要做两件事:①调用initInsurerListPage()初始化ListView显示全部的保险人;②绑定[新增]按钮和即时查询控件事件。

Js代码   收藏代码
  1. $(document).on("pageinit", "#insurer_list_page", function() {  
  2.     initInsurerListPage("");  
  3.     $("#insurer_list_page").find("#a_add").unbind("click").bind("click",function(){  
  4.         $.changePageInitData("insurer_edit.html");  
  5.     });  
  6.     $("#insurer_list_page").find("#searchinput").bind('input propertychange', function(){    
  7.         initInsurerListPage($("#insurer_list_page").find("#searchinput").val());  
  8.     });  
  9. });  

 

Js代码   收藏代码
  1. function initInsurerListPage(_name){  
  2.     var json = javascriptUser.findAllInsurer(_name);  
  3.     var DOM = $("#insurer_list_page").find("#listview");  
  4.     if(!$.isNull(json)){  
  5.         DOM.empty();  
  6.         var list = $.parseJSON(json);  
  7.         for(var i=0 ; i< list.length ; i++){  
  8.             var insurerInfo_ = list[i];  
  9.             var li = "<li><a href=\"#\" οnclick=\"goToInsurerDetailById('"+insurerInfo_.id+"')\">";  
  10.             li += "<h3>"+insurerInfo_.name + "&nbsp;&nbsp;&nbsp;" + (insurerInfo_.sex==1?"男":"女") + "&nbsp;&nbsp;&nbsp;" + insurerInfo_.birthday+"</h3>";  
  11.             li += "<p>"+insurerInfo_.mobile_phone+"</p>";  
  12.             li += "</a></li>";  
  13.             DOM.append(li);  
  14.         }  
  15.         DOM.listview("refresh");  
  16.     }else{  
  17.         DOM.empty();  
  18.         DOM.listview("refresh");  
  19.     }  
  20. }  

 

Android后台执行的条件查询操作:

Java代码   收藏代码
  1. public String findAllInsurer(String name){  
  2.     List<InsurerInfo> infoList = null;  
  3.     try {  
  4.         infoList = this.insurerInfoManager.findInsurerInfoByCondition(name);  
  5.     } catch (Exception e) {  
  6.         Log.e("common", "条件查询异常", e);  
  7.     }  
  8.       
  9.     if(!ObjectUtils.isEmpty(infoList)){  
  10.         StringBuilder json = new StringBuilder();  
  11.         json.append("[");  
  12.         json.append(infoList.get(0).toJSON());  
  13.         for (int i = 1; i < infoList.size(); i++) {  
  14.             json.append(",").append(infoList.get(i).toJSON());  
  15.         }  
  16.         json.append("]");  
  17.         return json.toString();  
  18.     }  
  19.     return "";  
  20. }  

 

Java代码   收藏代码
  1. public List<InsurerInfo> findInsurerInfoByCondition(String name){  
  2.     StringBuilder sql = new StringBuilder("SELECT * FROM insurer_info WHERE delete_flag="+Enums.DeleteEnum.AVAILABLE.getKey());  
  3.     String[] params = null;  
  4.     if(StringUtils.isNotBlank(name)){  
  5.         sql.append(" AND name LIKE ?");  
  6.         params = new String[]{"%"+name.trim()+"%"};  
  7.     }  
  8.     sql.append(" ORDER BY update_time DESC");  
  9.       
  10.     return super.findBySql(sql.toString(), params, 0, 0);  
  11. }  

 特别需要注意的是SQLite中LIKE语句的写法和参数传递方式。

 

 

------>保险人详细信息

在保险人列表页面点击某一个ListView即可进入该保险人的详细信息页面,这个页面显示该保险人所有信息和购买的保险内容,通过最上方的删除操作可以永久删除保险人,也可通过[编辑]操作进入修改页面。


 

保险人详细信息页面的HTML代码如下:

Html代码   收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  5.     <meta name="viewport" content="width=device-width, initial-scale=1">  
  6.     <title>  
  7.     </title>  
  8.   </head>  
  9.   <body>  
  10.     <div data-role="page" id="insurer_detail_page">  
  11.       <div data-theme="b" data-role="header" data-position="fixed">  
  12.         <data-role="button" data-rel="back" href="#" class="ui-btn-left" data-icon="back">  
  13.           返回  
  14.         </a>  
  15.         <h3>  
  16.           保险人信息  
  17.         </h3>  
  18.       </div>  
  19.         
  20.       <div data-role="navbar" data-iconpos="top">  
  21.             <ul>  
  22.                 <li>  
  23.                     <href="#" id="a_delete" data-transition="slide" data-icon="delete">  
  24.                         删除  
  25.                     </a>  
  26.                 </li>  
  27.                 <li>  
  28.                     <href="#" id="a_edit" data-transition="slide" data-icon="edit">  
  29.                         修改  
  30.                     </a>  
  31.                 </li>  
  32.             </ul>  
  33.       </div>  
  34.         
  35.       <div data-role="content" id="insurer_detail_content">  
  36.       </div>  
  37.     </div>  
  38. </body>  
  39. </html>  

 
 在[保险人列表]点击ListView时会触发onclick事件,这时会调用进入保险人详细信息页面的逻辑代码。

onclick事件是在[保险人列表]创建ListView时就定义好的,注意看代码var li = "<li><a href=\"#\" οnclick=\"goToInsurerDetailById('"+insurerInfo_.id+"')\">";

Js代码   收藏代码
  1. function initInsurerListPage(_name){  
  2.     var json = javascriptUser.findAllInsurer(_name);  
  3.     var DOM = $("#insurer_list_page").find("#listview");  
  4.     if(!$.isNull(json)){  
  5.         DOM.empty();  
  6.         var list = $.parseJSON(json);  
  7.         for(var i=0 ; i< list.length ; i++){  
  8.             var insurerInfo_ = list[i];  
  9.             var li = "<li><a href=\"#\" οnclick=\"goToInsurerDetailById('"+insurerInfo_.id+"')\">";  
  10.             li += "<h3>"+insurerInfo_.name + "&nbsp;&nbsp;&nbsp;" + (insurerInfo_.sex==1?"男":"女") + "&nbsp;&nbsp;&nbsp;" + insurerInfo_.birthday+"</h3>";  
  11.             li += "<p>"+insurerInfo_.mobile_phone+"</p>";  
  12.             li += "</a></li>";  
  13.             DOM.append(li);  
  14.         }  
  15.         DOM.listview("refresh");  
  16.     }else{  
  17.         DOM.empty();  
  18.         DOM.listview("refresh");  
  19.     }  
  20. }  
  21.   
  22. function goToInsurerDetailById(id,url){  
  23.     var html = $.isNull(url)?"insurer_detail.html":url;  
  24.     $.changePageInitData(html,"insurer_detail_page",function(page, data, params){  
  25.         if(id != null){  
  26.             var json = javascriptUser.getInsurerById(id);  
  27.             if($.isNull(json)){  
  28.                 alert("该条数据已不存在!");  
  29.                 $.mobile.changePage("insurer_list.html",{transition: "slide"});  
  30.             }else{  
  31.                 var info = $.parseJSON(json);  
  32.                 page.find("#a_edit").unbind("click").bind("click",function(){goToInsurerEditById(info.id)});  
  33.                 page.find("#a_delete").unbind("click").bind("click",function(){  
  34.                     if(confirm("确认永久删除该条数据?")){  
  35.                         javascriptUser.deleteInsurer(info.id);  
  36.                         $.mobile.changePage("insurer_list.html",{transition: "slide"});  
  37.                     }  
  38.                 });  
  39.                 var content = page.find("#insurer_detail_content");  
  40.                 content.append("<input name='id' id='id' type='hidden' value='"+info.id+"'>");  
  41.                 content.append("<p>姓名:"+info.name+"</p>");  
  42.                 content.append("<p>性别:"+(info.sex==1 ? "男":"女")+"</p>");  
  43.                 content.append("<p>生日:"+info.birthday+"</p>");  
  44.                 content.append("<p>身份证号:"+info.id_number+"</p>");  
  45.                 content.append("<p>移动电话:"+info.mobile_phone+ call_phone_icon(info.mobile_phone,info.name + (info.sex==1 ? "先生":"女士") ) +"</p>");  
  46.                 content.append("<p>QQ号:"+info.qq_number+"</p>");  
  47.                 content.append("<p>电子邮箱:"+info.email+"</p>");  
  48.                 content.append("<p>传真:"+info.fax+"</p>");  
  49.                 content.append("<p>联系地址:"+info.address+"</p>");  
  50.                 content.append("<p>婚姻状况:"+ return_marital_status(info.marital_status) +"</p>");  
  51.                 content.append("<p>学历:"+return_education(info.education)+"</p>");  
  52.                   
  53.                 var insurancesJSON = javascriptUser.getInsurancesByInsurerId(id);  
  54.                 if(!$.isNull(insurancesJSON)){  
  55.                     content.append("<hr>");  
  56.                     content.append("<ul id=\"detail_listview\" >");  
  57.                     var insurancesList = $.parseJSON(insurancesJSON);  
  58.                     for(var i=0;i<insurancesList.length;i++){  
  59.                         var insurances = insurancesList[i];  
  60.                         var html = "<li>";  
  61.                         html += ("<p name=\"p_insurance_name\"><h3>"+insurances.insurance_name+"</h3><p>");  
  62.                         html += ("<p name=\"p_insurance_company\">"+$.parseJSON(javascriptUser.getCompanyById(insurances.insurance_company)).name+"<p>");  
  63.                         html += ("<p name=\"p_insurance_date\">"+insurances.insurance_date+"<p>");  
  64.                         html += ("<p name=\"p_year_period\">"+insurances.year_period+"年&nbsp;&nbsp;"+insurances.year_cost+"元/年<p>");  
  65.                         html += ("<p name=\"p_insurance_comment\">"+insurances.insurance_comment+"<p>");  
  66.                         html += "</li>";  
  67.                         content.append(html);  
  68.                     }  
  69.                     content.append("</ul>");  
  70.                     //page.find("#detail_listview").listview("refresh");  
  71.                 }//end of isNull  
  72.             }  
  73.         }  
  74.     });  
  75. }  

 
 

------>详细到编辑页面

在初始化保险人详细列表时就绑定了[编辑]按钮的事件:

Js代码   收藏代码
  1. page.find("#a_edit").unbind("click").bind("click",function(){goToInsurerEditById(info.id)});  

 

Js代码   收藏代码
  1. function goToInsurerEditById(id){  
  2.     $.changePageInitData("insurer_edit.html","insurer_edit_page",function(page, data, params){  
  3.         if(id != null){  
  4.             var json = javascriptUser.getInsurerById(id);  
  5.             if($.isNull(json)){  
  6.                 alert("该条数据已不存在!");  
  7.                 $.mobile.changePage("insurer_list.html",{transition: "slide"});  
  8.             }else{  
  9.                 var info = $.parseJSON(json);  
  10.                 page.find("#id").val(info.id);  
  11.                 page.find("#name").val(info.name);  
  12.                 $.radioChecked(page.find("input[name='sex']"),info.sex);  
  13.                 page.find("#birthday").val(info.birthday);  
  14.                 page.find("#id_number").val(info.id_number);  
  15.                 page.find("#mobile_phone").val(info.mobile_phone);  
  16.                 page.find("#email").val(info.email);  
  17.                 page.find("#qq_number").val(info.qq_number);  
  18.                 page.find("#fax").val(info.fax);  
  19.                 page.find("#address").html(info.address);  
  20.                 $.radioChecked(page.find("input[name='marital_status']"),info.sex);  
  21.                 page.find("#education").val(info.education).selectmenu("refresh");  
  22.                 var insurancesJSON = javascriptUser.getInsurancesByInsurerId(id);  
  23.                 if(!$.isNull(insurancesJSON)){  
  24.                     var insurancesList = $.parseJSON(insurancesJSON);  
  25.                     for(var i=0;i<insurancesList.length;i++){  
  26.                     var insurances = insurancesList[i];  
  27.                     //保单ListView  
  28.                     var html = "<li name=\"views\" id=\""+insurances.id+"\">";  
  29.                     html += "<input type=\"hidden\" name=\"h_id\" value=\""+insurances.id+"\" >";  
  30.                     html += "<input type=\"hidden\" name=\"h_isNew\" value=\"false\" >";  
  31.                     html += "<input type=\"hidden\" name=\"h_insurance_name\" value=\""+insurances.insurance_name+"\" >";  
  32.                     html += "<input type=\"hidden\" name=\"h_insurance_date\" value=\""+insurances.insurance_date+"\" >";  
  33.                     html += "<input type=\"hidden\" name=\"h_insurance_company\" value=\""+insurances.insurance_company+"\" >";  
  34.                     html += "<input type=\"hidden\" name=\"h_year_period\" value=\""+insurances.year_period+"\" >";  
  35.                     html += "<input type=\"hidden\" name=\"h_year_cost\" value=\""+insurances.year_cost+"\" >";  
  36.                     html += "<input type=\"hidden\" name=\"h_insurance_comment\" value=\""+insurances.insurance_comment+"\" >";  
  37.                     html += "<input type=\"hidden\" name=\"h_remind_time\" value=\""+insurances.remind_time+"\" >";  
  38.                     html += "<a href=\"#\" οnclick=\"init_div_insure_info_form('"+insurances.id+"')\" >";  
  39.                       
  40.                     html += ("<p name=\"p_insurance_name\">"+insurances.insurance_name+"<p>");  
  41.                     html += ("<p name=\"p_insurance_company\">"+$.parseJSON(javascriptUser.getCompanyById(insurances.insurance_company)).name+"<p>");  
  42.                     html += ("<p name=\"p_insurance_date\">"+insurances.insurance_date+"<p>");  
  43.                     html += ("<p name=\"p_year_period\">"+insurances.year_period+"年&nbsp;&nbsp;"+insurances.year_cost+"元/年<p>");  
  44.                     html += ("<p name=\"p_insurance_comment\">"+insurances.insurance_comment+"<p>");  
  45.                     html += "</a>";  
  46.                     html += "</li>";  
  47.                     page.find("#collapsible_listview").append(html);  
  48.                     }//end of for  
  49.                     page.find("#collapsible_listview").listview("refresh");  
  50.                 }  
  51.             }  
  52.         }  
  53.     });  
  54. }  

 

至于[保险人详细页面]的删除操作非常简单,这里就不多说了。

 

 

  •  注意事项

1、SQLite的Like语句规范稍有特点:SQL语句不能写成"xx like '%?%'",也不能写成"xx like %?%",只能写成"xx like ?",而"%"符号必须以参数的形式传递过去:Cursor cursor = db.rawQuery(sql, new String[]{"%张%"});。这个在[学习系列(5)-SQLite数据库]---[常见问题]中也有说明。

 

2、监听即时查询框输入变化的事件是input和propertychange,这个是网上找到的,经过测试是有效的。

Js代码   收藏代码
  1. $("#insurer_list_page").find("#searchinput").bind('input propertychange', function(){    
  2.         initInsurerListPage($("#insurer_list_page").find("#searchinput").val());  
  3.     });  

 

 3、与其它事务处理不同的是,SQLite的事务没有rollback方法,Sqlite会判定,在beginTransaction和endTransaction中若没有setTransactionSuccessful方法则表示回滚。而且不论事务成功与否,都必须调用entTransaction关闭事务。

Java代码   收藏代码
  1. dbHelper.getWritableDatabase().beginTransaction();  
  2. try {  
  3.     //---CUD事务操作  
  4.     dbHelper.getWritableDatabase().setTransactionSuccessful();  
  5. catch (Exception e) {  
  6.     //---异常处理  
  7. }finally{  
  8.     dbHelper.getWritableDatabase().endTransaction();  
  9. }  

 

4、javascript的List参数想传到Android后台,似乎不能直接以List形式传递,所以我是将List转换成某种格式的字符串,在后台再通过splite转换回来。这种方式其实蛮不规范的,我的建议是最好以JSON的形式进行前后台交互,因为很偷懒,我没有研究怎么用JSON的形式实现代码,这个大家可以自行研究。

 

 5、新增、修改保险人页面的[保单信息]下面的保险公司是从数据库中取的实时数据,我专门做了一个保险公司录入管理功能,无非是增删改查,非常简单,所以就不做详细介绍。这里要说的是在新增、修改页面中的保险公司是一个<select>标签,如果动态录入标签值的话一定要刷新select组件,否则不会有jquerymobile样式效果:

Js代码   收藏代码
    1. var companyJSON = javascriptUser.findAllCompany();  
    2.     if(!$.isNull(companyJSON)){  
    3.         var company = $.parseJSON(companyJSON);  
    4.         var selectDOM = $("#insurer_edit_page").find("#insurance_company");  
    5.         for(var i=0;i<company.length;i++){  
    6.             selectDOM.append("<option value='"+company[i].id+"'>"+company[i].name+"</option>");  
    7.         }  
    8.         selectDOM.selectmenu("refresh");  
    9.     } 

转载于:https://www.cnblogs.com/Free-Thinker/p/7382045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值