register.js 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. register = function () {
  2. let _noteScrollTop = 0;
  3. let linePicUrl = null;
  4. let lineBase64Data = null;
  5. let customBase64Data = null;
  6. let finalase64Data = null;
  7. let registerAlert = "";
  8. let registerData = {
  9. healthAction: null,
  10. healthTopic: null,
  11. healthStatus: null,
  12. healthAdapt: null,
  13. healthThought: null,
  14. healthAge: null,
  15. healthNickname: null,
  16. healthGender: null,
  17. headSticker: null,
  18. healthGenderRole: null
  19. }
  20. let userData;
  21. //private methods
  22. function init() {
  23. console.log('register is loaded.');
  24. selectImage();
  25. // 換大頭照點擊
  26. $(".photo__icon-1").on("click", function(){
  27. $("#fileInput1").click();
  28. });
  29. // 多選題選中添加checked樣式
  30. $(".register .form__options__item input[type='checkbox']").change(function(){
  31. if($(this).prop("checked")) {
  32. $(this).parents(".form__options__item").addClass("checked");
  33. }else {
  34. $(this).parents(".form__options__item").removeClass("checked");
  35. }
  36. });
  37. // 單選題選中添加checked樣式
  38. $(".register .form__options__item input[type='radio']").change(function(){
  39. if($(this).prop("checked")) {
  40. $(this).parents(".form__options").children(".form__options__item").removeClass("checked");
  41. $(this).parents(".form__options__item").addClass("checked");
  42. }
  43. });
  44. // 多選限制複選數
  45. $('.register .form__item-healthThought .form__options__item').click(function() {
  46. // console.log("healthThought click")
  47. $(".form__item-healthThought .form__options__item input[type=checkbox]").attr('disabled', true);
  48. if ($(".form__item-healthThought .form__options__item input[type=checkbox]:checked").length >= 2) {
  49. $(".form__item-healthThought .form__options__item input[type=checkbox]:checked").attr('disabled', false);
  50. } else {
  51. $('.form__item-healthThought .form__options__item input[type=checkbox]').attr('disabled', false);
  52. }
  53. });
  54. // 點擊資料表單"下一步"
  55. $(".register .form-submit").on("click", function(){
  56. // console.log("form-submit click");
  57. $(this).addClass("disable");
  58. $(".form-submit p").text("傳送中...");
  59. if(checkRegister()) {
  60. sendRegister();
  61. }else {
  62. base.myAlert(registerAlert);
  63. $(this).removeClass("disable");
  64. $(".form-submit p").text("下一步");
  65. }
  66. });
  67. }
  68. // Line大頭貼
  69. function LinePicHandler(url) {
  70. linePicUrl = url;
  71. $(".photo__img").html("");
  72. $(".photo__img").append(`
  73. <img src="${linePicUrl}"/>
  74. `);
  75. const imageURL = linePicUrl;
  76. if(imageURL.trim() !== '') {
  77. const img = new Image();
  78. img.src = imageURL;
  79. const canvas = document.createElement("canvas");
  80. const ctx = canvas.getContext("2d");
  81. img.crossOrigin = 'Anonymous';
  82. img.onload = function() {
  83. canvas.width = img.width;
  84. canvas.height = img.height;
  85. ctx.drawImage(img, 0, 0);
  86. // 將圖片轉換為 Base64
  87. lineBase64Data = canvas.toDataURL('image/jpeg')
  88. finalase64Data = lineBase64Data;
  89. // console.log(finalase64Data)
  90. }
  91. }
  92. }
  93. // 選照片
  94. function selectImage() {
  95. const fileInputs = document.querySelectorAll('.fileInput');
  96. const imagePreview = $('.photo__img');
  97. // console.log(fileInput.id)
  98. var templeteHelper = new photoHelper();
  99. fileInputs.forEach((fileInput)=> {
  100. // 當選擇圖片後,顯示圖片的預覽
  101. fileInput.addEventListener("change", function(e){
  102. console.log(fileInput.id)
  103. $(".photo .load-wrapp ").show();
  104. const selectedFile = fileInput.files[0];
  105. if(selectedFile) {
  106. if(fileInput.id == 'fileInput1') {
  107. templeteHelper.loadFile('#fileInput1',function (_photoData) {
  108. console.log('fileInput1 has loaded.');
  109. templateData = _photoData;
  110. finalase64Data = templateData;
  111. // console.log(finalase64Data)
  112. const img = new Image();
  113. img.src = templateData;
  114. imagePreview.html("");
  115. imagePreview.append(img);
  116. // $('.templete_output').attr('src', templateData);
  117. $(".photo .load-wrapp ").hide();
  118. });
  119. }
  120. if(fileInput.id == 'fileInput2') {
  121. templeteHelper.loadFile('#fileInput2',function (_photoData) {
  122. console.log('fileInput2 has loaded.');
  123. templateData = _photoData;
  124. finalase64Data = templateData;
  125. // console.log(finalase64Data)
  126. const img = new Image();
  127. img.src = templateData;
  128. imagePreview.html("");
  129. imagePreview.append(img);
  130. // $('.templete_output').attr('src', templateData);
  131. $(".photo .load-wrapp ").hide();
  132. setTimeout(()=>{
  133. // console.log(finalase64Data)
  134. sendBase64DataToApi(finalase64Data);
  135. }, 200);
  136. });
  137. }
  138. }else {
  139. imagePreview.html("");
  140. imagePreview.append(`<img src=${finalase64Data} />`);
  141. $(".photo .load-wrapp ").hide();
  142. }
  143. });
  144. });
  145. }
  146. // 送出圖片
  147. function sendBase64DataToApi(finalase64Data) {
  148. GameService.getInstanse().userUpdatePhoto(finalase64Data).then(res => {
  149. console.log('userUpdatePhoto:', res);
  150. // base.myAlert('成功上傳。');
  151. });
  152. }
  153. function insertFromData(data) {
  154. resetRegister();
  155. let formData = data.filler_content;
  156. // console.log(formData)
  157. // 健康行動
  158. formData.healthAction.forEach((val)=>{
  159. $(`.form__item-healthAction input[value=${val}]`).prop("checked", true);
  160. $(`.form__item-healthAction input[value=${val}]`).parents(".form__options__item").addClass("checked");
  161. });
  162. // 對什麼健康話題有興趣
  163. formData.healthTopic.forEach((val)=>{
  164. $(`.form__item-healthTopic input[value=${val}]`).prop("checked", true);
  165. $(`.form__item-healthTopic input[value=${val}]`).parents(".form__options__item").addClass("checked");
  166. });
  167. // 身體狀況如何
  168. $(`input[value=${formData.healthStatus}]`).prop("checked",true);
  169. $(`input[value=${formData.healthStatus}]`).parents(".form__options__item").addClass("checked");
  170. // 最符合你的應對
  171. $(`input[value=${formData.healthAdapt}]`).prop("checked",true);
  172. $(`input[value=${formData.healthAdapt}]`).parents(".form__options__item").addClass("checked");
  173. // 符合你的想法
  174. formData.healthThought.forEach((val)=>{
  175. $(`.form__item-healthThought input[value=${val}]`).prop("checked", true);
  176. $(`.form__item-healthThought input[value=${val}]`).parents(".form__options__item").addClass("checked");
  177. });
  178. // 你的年齡
  179. $(`input[value=${formData.healthAge}]`).prop("checked",true);
  180. $(`input[value=${formData.healthAge}]`).parents(".form__options__item").addClass("checked");
  181. // 暱稱
  182. $(`input[id="nickName"]`).val(data.nickname);
  183. // 性別
  184. $(`select[id="gender"]`).val(formData.healthGender);
  185. // 頭貼
  186. $(".register .photo__img").append(`
  187. <img src=${data.head_sticker} />
  188. `);
  189. }
  190. // 取得選取的checkbox
  191. function getCheckboxVal(name) {
  192. let vals = $(".register input[type=checkbox][name="+name+"]:checked").map(function() {
  193. return $(this).val();
  194. }).get();
  195. return vals;
  196. }
  197. // 取得選取的radio
  198. function getRadioVal(name){
  199. return $("input[name="+name+"]:checked").val();
  200. }
  201. // 確認註冊表單
  202. function checkRegister(){
  203. let isComplete = true;
  204. registerAlert = "";
  205. if(getCheckboxVal("healthAction").length > 0) {
  206. registerData.healthAction = getCheckboxVal("healthAction");
  207. }else {
  208. isComplete = false;
  209. }
  210. if(getCheckboxVal("healthTopic").length > 0) {
  211. registerData.healthTopic = getCheckboxVal("healthTopic");
  212. }else {
  213. isComplete = false;
  214. }
  215. if(getRadioVal("healthStatus") !== "" && getRadioVal("healthStatus") !== undefined ) {
  216. registerData.healthStatus = getRadioVal("healthStatus");
  217. }else {
  218. isComplete = false;
  219. }
  220. if(getRadioVal("healthAdapt") !== "" && getRadioVal("healthAdapt") !== undefined ) {
  221. registerData.healthAdapt = getRadioVal("healthAdapt");
  222. }else {
  223. isComplete = false;
  224. }
  225. if(getCheckboxVal("healthThought").length > 0) {
  226. registerData.healthThought = getCheckboxVal("healthThought");
  227. }else {
  228. isComplete = false;
  229. }
  230. if(getRadioVal("healthAge") !== "" && getRadioVal("healthAge") !== undefined ) {
  231. registerData.healthAge = getRadioVal("healthAge");
  232. }else {
  233. isComplete = false;
  234. }
  235. if($("#nickName").val().trim() !== "") {
  236. registerData.healthNickname = $("#nickName").val().trim();
  237. }else {
  238. isComplete = false;
  239. }
  240. if($("#gender").val() !== "") {
  241. registerData.healthGender = $("#gender").val();
  242. if($("#gender").val() === "tag-8HwqQuQ43") {
  243. registerData.healthGenderRole = "female"
  244. } else if($("#gender").val() === "tag-F8Me8-UGg") {
  245. registerData.healthGenderRole = "male"
  246. }else {
  247. registerData.healthGenderRole = "";
  248. }
  249. }else {
  250. isComplete = false;
  251. }
  252. if(!isComplete) {
  253. registerAlert = "請確認問題皆已作答";
  254. }
  255. if(getCheckboxVal("methodsAgree").length == 0) {
  256. registerAlert == "" ? registerAlert = "請勾選'我同意個人資料使用方法'" : registerAlert+="<br>請勾選'我同意個人資料使用方法'";
  257. isComplete = false;
  258. }
  259. if(isComplete) {
  260. registerData.headSticker = $(".register .photo__img img").attr("src");
  261. console.log(registerData)
  262. }
  263. return isComplete;
  264. }
  265. // 送出表單
  266. function sendRegister() {
  267. // 測試用
  268. // base.sectionFadeOut(".register");
  269. // base.sectionFadeIn(".passport");
  270. // $(".register .form-submit").removeClass("disable");
  271. // $(".register .form-submit p").text("下一步");
  272. // 正式用
  273. GameService.getInstanse().userRegister(registerData)
  274. .then(_res => {
  275. console.log(_res);
  276. if(_res.result === 'successed') {
  277. $(".register .form-submit").removeClass("disable");
  278. $(".register .form-submit p").text("下一步");
  279. // 清除表單
  280. resetRegister();
  281. // 再次載入取得資料
  282. GameService.getInstanse().userLogin().then(_res => {
  283. console.log("_res: ",_res);
  284. userData = GameService.getInstanse().getUserData();
  285. console.log("userData: ",userData)
  286. base.sectionFadeOut(".register");
  287. base.sectionFadeIn(".passport");
  288. passport.buildPassportHandler(userData)
  289. GameService.getInstanse().sendCompleteMessage();
  290. })
  291. }
  292. })
  293. .catch(_err => {
  294. console.log(_err);
  295. // let msg = err.message.replaceAll("Error:", "");
  296. base.myAlert(_err);
  297. $(".register .form-submit").removeClass("disable");
  298. $(".register .form-submit p").text("下一步");
  299. })
  300. }
  301. // 重設表單
  302. function resetRegister() {
  303. $('.register .form input[type=checkbox], .register .form input[type=radio]').prop('checked', false);
  304. $(".register .form__options__item").removeClass("checked");
  305. $('.register .form input[type=text], .register .form select').val('');
  306. }
  307. //constructor
  308. {
  309. $(document).ready(function () {
  310. init();
  311. });
  312. }
  313. //public
  314. return {
  315. LinePicHandler: function(url) {
  316. LinePicHandler(url);
  317. },
  318. getCheckboxVal: function(name) {
  319. return getCheckboxVal(name)
  320. },
  321. getRadioVal: function(name) {
  322. return getRadioVal(name)
  323. },
  324. selectImage: function() {
  325. selectImage();
  326. },
  327. insertFromData: function(data) {
  328. insertFromData(data);
  329. }
  330. };
  331. };
  332. var register = new register();