register.js 11KB

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