zizhujiandang.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. //姓名
  2. var $nameInput = $("#name"),
  3. // 医保卡号
  4. $sscInput = $("#ybcard").find("input"),
  5. // 手机号码
  6. $mobileInput = $("#phonenum").find("input"),
  7. // 出生日期
  8. $Birthday = $("#Birthday").find("input"),
  9. // 户口所在地
  10. $address = $("#address").find("input"),
  11. //所属社区
  12. $committee = $("#committee"),
  13. //现住址
  14. $Present_Address = $('#Present_Address').find('input'),
  15. // 表单的ul容器
  16. $infoList = $("#info_list"),
  17. // 下一步按钮
  18. $nextStep = $('#next_step');
  19. var nation, blood, marryed;
  20. var nationObj = {},
  21. marryedObj = {},
  22. bloodObj = {};
  23. var self,docInfo;
  24. var state;//状态
  25. var encryKey;
  26. mui.plusReady(function(){
  27. //获取公钥
  28. sendPost('login/public_key', {},null, function(res) {
  29. if (res.status==200) {
  30. var mod = res.data.modulus;
  31. var exp = res.data.exponent;
  32. encryKey = RSAUtils.getKeyPair(exp, "", mod);
  33. }else{
  34. mui.toast('获取公钥失败')
  35. }
  36. },'GET')
  37. //返回事件
  38. mui.back = function(){
  39. backAction();
  40. }
  41. var self = plus.webview.currentWebview();
  42. state = self.state;
  43. $('#name').text(self.name)
  44. $('#idcard').val(self.idCard)
  45. //身份证提取信息
  46. var idStr;
  47. var dd = self.idCard;
  48. if(dd.length == 18){
  49. idStr = dd.substring(6,10)+'-'+dd.substring(10,12)+'-'+dd.substring(12,14)
  50. if(dd.substring(16,17)%2==0){
  51. $('#sex').attr('data-code','2')
  52. }else{
  53. $('#sex').attr('data-code','1')
  54. }
  55. }else if(dd.length == 15){
  56. idStr = '19'+dd.substring(6,8)+'-'+dd.substring(8,10)+'-'+dd.substring(10,12)
  57. if(dd.substring(14,15)%2==0){
  58. $('#sex').attr('data-code','2')
  59. }else{
  60. $('#sex').attr('data-code','1')
  61. }
  62. }
  63. $Birthday.val(idStr)
  64. // 获取血型、婚姻、民族字典
  65. sendPost('/doctor/patient/getNationDict', {}, getPublicDataFailed, function(res) {
  66. if (res.status==200) {
  67. nationObj = res.data
  68. addOneContent1(nationObj);
  69. }else{
  70. mui.toast('获取民族字典数据失败')
  71. }
  72. },'GET')
  73. sendPost('/doctor/patient/getMarryDict', {}, getPublicDataFailed, function(res) {
  74. if (res.status ==200) {
  75. marryedObj = res.data
  76. addOneContent2(marryedObj);
  77. }else{
  78. mui.toast('获取婚姻字典数据失败')
  79. }
  80. },'GET')
  81. sendPost('/doctor/patient/getBloodDict', {}, getPublicDataFailed, function(res) {
  82. if (res.status==200) {
  83. bloodObj = res.data
  84. addOneContent3(bloodObj);
  85. }else{
  86. mui.toast('获取血型字典数据失败')
  87. }
  88. },'GET')
  89. $Birthday.mobiscroll().date({
  90. theme: "ios",
  91. lang: "zh",
  92. display: "bottom",
  93. dateFormat: "yy-mm-dd",
  94. onSelect: function(valueText, inst) {
  95. }
  96. })
  97. addOneContent4([{'code':'1','name':'男'},{'code':'2','name':'女'}])
  98. // 弹出框生成民族内容
  99. function addOneContent1(arr) {
  100. var len = arr.length;
  101. var html = "<option disabled selected></option>";
  102. for(var i = 0; i < len; i++) {
  103. html += '<option value="'+arr[i].NATION_CODE+'">' + arr[i].NATION_NAME + '</option>'
  104. }
  105. $('#nation').html(html)
  106. $('#nation').mobiscroll().select({
  107. theme: "ios",
  108. lang: "zh",
  109. placeholder:'请选择民族',
  110. display: "bottom",
  111. onSelect: function(valueText, inst) {
  112. $('#national').attr('data-code',inst._tempValue)
  113. $('#national').attr('data-name',valueText)
  114. }
  115. })
  116. }
  117. // 弹出框生成婚姻内容
  118. function addOneContent2(arr) {
  119. var len = arr.length;
  120. var html = "<option disabled selected></option>";
  121. for(var i = 0; i < len; i++) {
  122. html += '<option value="'+arr[i].code+'">' + arr[i].value + '</option>'
  123. }
  124. $('#marryed').html(html)
  125. $('#marryed').mobiscroll().select({
  126. theme: "ios",
  127. lang: "zh",
  128. placeholder:'请选择婚姻情况',
  129. display: "bottom",
  130. onSelect: function(valueText, inst) {
  131. $('#marry').attr('data-code',inst._tempValue)
  132. $('#marry').attr('data-name',valueText)
  133. }
  134. })
  135. }
  136. // 弹出框生成血型内容
  137. function addOneContent3(arr) {
  138. var len = arr.length;
  139. var html = "<option disabled selected></option>";
  140. for(var i = 0; i < len; i++) {
  141. html += '<option value="'+arr[i].code+'">' + arr[i].value + '</option>'
  142. }
  143. $('#Bloodtype').html(html)
  144. $('#Bloodtype').mobiscroll().select({
  145. theme: "ios",
  146. lang: "zh",
  147. placeholder:'请选择血型',
  148. display: "bottom",
  149. onSelect: function(valueText,inst) {
  150. $('#Blood_type').attr('data-code',inst._tempValue)
  151. $('#Blood_type').attr('data-name',valueText)
  152. }
  153. })
  154. }
  155. // 弹出框生成性别
  156. function addOneContent4(arr) {
  157. var len = arr.length;
  158. var html = "<option disabled selected></option>";
  159. for(var i = 0; i < len; i++) {
  160. if(arr[i].code == $('#sex').attr('data-code')){
  161. html += '<option selected value="'+arr[i].code+'">' + arr[i].name + '</option>'
  162. }else{
  163. html += '<option value="'+arr[i].code+'">' + arr[i].name + '</option>'
  164. }
  165. }
  166. $('#sexs').html(html)
  167. $('#sexs').mobiscroll().select({
  168. theme: "ios",
  169. lang: "zh",
  170. placeholder:'请选择性别',
  171. display: "bottom",
  172. onSelect: function(valueText, inst) {
  173. $('#sex').attr('data-code',inst._tempValue)
  174. }
  175. })
  176. }
  177. initExpressAddr();
  178. //初始化户口所在地选择下拉框数据
  179. function initExpressAddr(){
  180. picker = new mui.PopPicker({
  181. layer: 2,
  182. layerNames: ["省","市"]
  183. });
  184. //获取省份信息
  185. getDistrict(1, '', 0);
  186. bindPickerEvent();
  187. }
  188. //绑定picker的事件
  189. function bindPickerEvent(){
  190. $(picker.pickers[0].holder).on('change', function(event) {
  191. var eventData = event.originalEvent.detail || {},
  192. item = eventData.item;
  193. if(!item || !item.value) {
  194. return ;
  195. }
  196. //获取市信息
  197. getDistrict(2, item.value, 1);
  198. });
  199. }
  200. /**
  201. * 获得省市区数据
  202. * @param {number} type 1-省,2-市,3-区
  203. * @param {string} code 省市对应的code
  204. * @param {number} level 对应下拉框对应的列 0-省,1-市,2-区
  205. */
  206. function getDistrict(type, code, level){
  207. var url = 'common/district',
  208. params = {type: type, code: code};
  209. sendPost(url,params,getPublicDataFailed,function(res){
  210. if(res.status == 200){
  211. var data = _.map(res.list, function(o){
  212. return {
  213. value: o.code,
  214. text: o.name
  215. }
  216. });
  217. picker.pickers[level].setItems(data);
  218. }else{
  219. getPublicDataFailed(res);
  220. }
  221. },'POST','',true)
  222. }
  223. //选择地址下拉框
  224. $("#address").on('click', function(){
  225. picker.show(function(selected){
  226. var text = selected[0].text+selected[1].text;
  227. $("#address .select-input").val(text);
  228. $("#address .select-input").attr('data-code',selected[1].value);
  229. })
  230. })
  231. // 获取填写的数据
  232. var getInputs = function() {
  233. var data = {
  234. name: $nameInput.text().trim(), // 姓名
  235. sex:$('#sex').attr('data-code'),//性别
  236. sexName:$('#sex').attr('data-code')=='1'?'男':'女',
  237. ssc: $sscInput.val().trim().toUpperCase(), // 医保卡号
  238. mobile: $mobileInput.val().trim(), // 手机号码
  239. Birthday: $Birthday.val(), // 出生日期
  240. address: $address.val(), // 户口所在地
  241. addressCode: $address.attr('data-code'), // 户口所在地
  242. national: $('#national').attr('data-code'), // 民族
  243. nationalName: $('#national').attr('data-name'),
  244. marry: $('#marry').attr('data-code'), // 婚姻情况
  245. marryName: $('#marry').attr('data-name'),
  246. Blood_type: $('#Blood_type').attr('data-code'), // 血型
  247. Blood_typeName: $('#Blood_type').attr('data-name'),
  248. countryCode: $committee.attr('data-jwcode'), //居委会
  249. countryName: $committee.val(),
  250. Present_Address: $Present_Address.val().trim(), //现住址
  251. idcard:RSAUtils.encryStr(encryKey, $('#idcard').val().trim()),
  252. idcardAll:$('#idcard').val().trim(),
  253. }
  254. return data;
  255. },
  256. // 必输验证
  257. validRequired = function(data) {
  258. var fieldsStr = "ssc,mobile,Birthday,address,national,marry,Blood_type,countryCode,Present_Address",
  259. fieldMap = {
  260. ssc: "医保卡号",
  261. mobile: "手机号码",
  262. Birthday: "出生日期",
  263. address: "户口所在地",
  264. national: "民族",
  265. marry: "婚姻情况",
  266. Blood_type: "血型",
  267. countryCode: "居委会",
  268. Present_Address: "现住址"
  269. },
  270. fields = fieldsStr.split(","),
  271. invalidField;
  272. // 某个字段为""、null、undefined,则该字段不能通过必输校验
  273. invalidField = _.find(fields, function(key) {
  274. return !data[key] && data[key] !== 0;
  275. });
  276. if(invalidField) {
  277. mui.toast(fieldMap[invalidField] + '不能为空');
  278. return false;
  279. } else {
  280. return true;
  281. }
  282. },
  283. // 校验医保卡号格式
  284. validSSC = function(ssc, isshow) {
  285. var sscReg = /^([a-zA-Z]{1}[a-zA-Z0-9]{8}|[0-9]{12})$/;
  286. if(!ssc) return;
  287. if(!sscReg.test(ssc)) {
  288. $sscInput.css("color", "red")
  289. if(isshow != false) {
  290. mui.toast("请填写有效的医保卡卡号");
  291. }
  292. return false;
  293. }
  294. $sscInput.css("color", "");
  295. return true;
  296. },
  297. // 校验手机号格式
  298. validMobile = function(mobile) {
  299. var mobileReg = /^[1][3578][0-9]{9}$/;
  300. if(!mobile) return;
  301. if(!mobileReg.test(mobile)) {
  302. $mobileInput.css("color", "red");
  303. mui.toast("请填写有效的手机号码");
  304. return false;
  305. }
  306. $mobileInput.css("color", "");
  307. return true;
  308. },
  309. // 输入格式验证
  310. validFormat = function(data) {
  311. return validSSC(data.ssc) && (!data.mobile || validMobile(data.mobile))
  312. },
  313. // 所有输入验证
  314. validInputsPromise = function(fun) {
  315. // 表单数据
  316. var data = getInputs();
  317. return Promise.resolve()
  318. .then(function() {
  319. if(!validRequired(data)) throw new Error("必输校验失败");
  320. })
  321. .then(function() {
  322. if(!validFormat(data)) throw new Error("格式校验失败");
  323. })
  324. .then(function() {
  325. return fun&&fun.call(this,data);
  326. })
  327. .then(function(flag) {
  328. if(!flag) throw new Error("数据有效性校验失败");
  329. })
  330. .then(function() {
  331. // 所有校验成功
  332. $infoList.find('input').css("color", "");
  333. return data;
  334. });
  335. },
  336. bindEvents = function() {
  337. //选择居委会
  338. selectCommittee()
  339. // 预览
  340. $nextStep.on('tap', function() {
  341. validInputsPromise(function(data){
  342. plus.storage.setItem("jiandangCase1",JSON.stringify(data))
  343. mui.openWindow({
  344. id: "xinxiqueren",
  345. url: "xinxiqueren.html",
  346. createNew:true,
  347. extras: {
  348. state:state
  349. }
  350. })
  351. })
  352. })
  353. //详细信息
  354. $(".detail").on('tap', function() {
  355. validInputsPromise(function(data){
  356. plus.storage.setItem("jiandangCase1",JSON.stringify(data))
  357. mui.openWindow({
  358. id: "xinxicaiji",
  359. url: "xinxicaiji.html",
  360. extras: {
  361. state:state
  362. }
  363. })
  364. })
  365. })
  366. // 获取焦点时恢复输入的字体颜色
  367. $('input').on('focus',function() {
  368. $(this).css("color", "");
  369. })
  370. $sscInput.on('blur', function() {
  371. validSSC($(this).val().trim());
  372. })
  373. $mobileInput.on('blur', function() {
  374. validMobile($(this).val().trim());
  375. })
  376. }
  377. bindEvents()
  378. //返回重置
  379. function backAction(){
  380. if(plus.storage.getItem("jiandangCase1")){
  381. dialog({
  382. content: '是否退出自助建档?',
  383. okValue: '继续编辑',
  384. cancelValue: '确定退出',
  385. cancel: function () {
  386. plus.storage.removeItem("jiandangCase1")
  387. plus.storage.removeItem("jiandangCase2")
  388. closePage()
  389. },
  390. ok: function() {
  391. return
  392. }
  393. }).showModal();
  394. }else{
  395. closePage()
  396. }
  397. function closePage(){
  398. var zzjd = plus.webview.getWebviewById('zizhujiandang');
  399. var xxcj = plus.webview.getWebviewById('xinxicaiji');
  400. var xxqr = plus.webview.getWebviewById('xinxiqueren');
  401. var dljd = plus.webview.getWebviewById('dailijiandang');
  402. if(xxqr){xxqr.close('none')}
  403. if(dljd){dljd.close('none')}
  404. if(xxcj){xxcj.close('none')}
  405. zzjd.close()
  406. }
  407. }
  408. })
  409. function getPublicDataFailed(res) {
  410. mui.toast("请求失败")
  411. }