UNPKG

zpw-vue-forms

Version:

vue 表单系统

295 lines (288 loc) 9.53 kB
var SIGN_REGEXP = /([yMdhsm])(\1*)/g; var DEFAULT_PATTERN = 'yyyy-MM-dd'; function padding(s, len) { len = len - (s + '').length; for (var i = 0; i < len; i++) { s = '0' + s; } return s; }; let utils = { /** * 格式化日期 */ formatDate: { format: function (date, pattern) { if (!date || !pattern) { return; } pattern = pattern || DEFAULT_PATTERN; return pattern.replace(SIGN_REGEXP, function ($0) { switch ($0.charAt(0)) { case 'y': return padding(date.getFullYear(), $0.length); case 'M': return padding(date.getMonth() + 1, $0.length); case 'd': return padding(date.getDate(), $0.length); case 'w': return date.getDay() + 1; case 'h': return padding(date.getHours(), $0.length); case 'm': return padding(date.getMinutes(), $0.length); case 's': return padding(date.getSeconds(), $0.length); } }); } }, /** * 格式化表单数据 * @param data */ formatFormData(data){ let keys = Object.keys(data),netData = {}; for(let i = 0;i < keys.length;i++){ let key = keys[i]; if(key.replace(/_form/gi,"")&&data[key]){ netData[key.replace(/_form/gi,"")] = data[key]; } } return netData; }, /** * 验证表单类型 * @param formData * @returns {Array} */ validFormType(formData){ const self = this,types = ["input-text","input-checkbox","input-date","input-file","input-password","select-single","textarea-single","input-radio","input-number","static","input-text-mutil"],newFormData = []; for(let i =0;i < formData.length;i++){ let type = formData[i].type; if(type && types.indexOf(type) != -1){ newFormData.push(formData[i]) }else{ console.info(formData[i]) } } return newFormData; }, /** * 获取答案 * @param allQuests * @param allAnswers * @returns {Array} */ formatAnswer(allQuests,allAnswers){ let getAnswerByQid = function(quests,qid){ for(let i = 0,flag = true;flag && i < quests.length; i++){ if(quests[i].qid == qid){ flag = false; return quests[i] } } } let questAnswers = [],exportAnswers = []; allAnswers.forEach((answers,index) => { let parts = allQuests[index]; exportAnswers.push(answers); if(parts&&answers&&!parts.isHide){ let quests = JSON.parse(parts.contentJson).parts[0].quest,keys = Object.keys(answers); keys.forEach((qid,k) => { if(qid != undefined) { let quest = getAnswerByQid(quests, qid) || {}, currAnswer = answers[qid]; let p_qid = qid.split("_"); if(quest&&quest.isSplit&&currAnswer&&p_qid.length>1){ p_qid = p_qid.slice(0,p_qid.length-1).join("_"); if(exportAnswers[index][p_qid] instanceof Array){ if(currAnswer instanceof Array){ exportAnswers[index][p_qid] = (exportAnswers[index][p_qid].concat(currAnswer)).join(",") }else{ exportAnswers[index][p_qid] = exportAnswers[index][p_qid].join(",") +","+ currAnswer } }else{ if(currAnswer instanceof Array){ exportAnswers[index][p_qid] = exportAnswers[index][p_qid] +","+currAnswer.join(","); }else{ exportAnswers[index][p_qid] = exportAnswers[index][p_qid] +","+currAnswer; } } } } }) } }) for(let i = 0;i < allAnswers.length;i++){ let answers = allAnswers[i],parts = allQuests[i]; if(parts&&answers&&!parts.isHide){ let quests = JSON.parse(parts.contentJson).parts[0].quest,keys = Object.keys(answers),questAnswer = {}; questAnswer.answers = []; questAnswer.id = parts.id; questAnswer.computeCode = parts.computeCode; questAnswer.export = {}; for(let j = 0;j < keys.length; j++){ let qid = keys[j]; if(qid != undefined){ let quest = getAnswerByQid(quests,qid)||{},answer = {},currAnswer = answers[qid]; quest.entityName = "name"+qid; if(quest&&!quest.isSplit&&currAnswer){ questAnswer.export[quest.entityName] = exportAnswers[i][qid]; answer.qid = qid; answer.name = quest.name; answer.answer = currAnswer||""; questAnswer.answers.push(answer); } } } console.info(questAnswer) questAnswers.push(questAnswer); } } return questAnswers; }, /** * 设置定时器 * @param fn * @param time */ timeOut(fn,time){ let timer = setTimeout(function(){ fn(); clearTimeout(timer); },time||1000) }, /** * 数字转中文 * @param num * @returns {*} * @constructor */ NumberToChinese(num){ var chnNumChar = ["零","一","二","三","四","五","六","七","八","九"]; var chnUnitSection = ["","万","亿","万亿","亿亿"]; var chnUnitChar = ["","十","百","千"]; function SectionToChinese(section){ var strIns = '', chnStr = ''; var unitPos = 0; var zero = true; while(section > 0){ var v = section % 10; if(v === 0){ if(!zero){ zero = true; chnStr = chnNumChar[v] + chnStr; } }else{ zero = false; strIns = chnNumChar[v]; strIns += chnUnitChar[unitPos]; chnStr = strIns + chnStr; } unitPos++; section = Math.floor(section / 10); } return chnStr; } var unitPos = 0; var strIns = '', chnStr = ''; var needZero = false; if(num === 0){ return chnNumChar[0]; } while(num > 0){ var section = num % 10000; if(needZero){ chnStr = chnNumChar[0] + chnStr; } strIns = SectionToChinese(section); strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0]; chnStr = strIns + chnStr; needZero = (section < 1000) && (section > 0); num = Math.floor(num / 10000); unitPos++; } return chnStr; }, /** * 是否是移动端 * @returns {RegExpMatchArray} */ isMobile() { let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) return flag; }, /** * 通过数组获取英文 * @param number */ getEnByNumber(number){ return ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"][number]; }, /** * 通过数组获取英文 * @param letter */ getNumberByEn(letter){ let number = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"].indexOf(letter); return number != -1?number:letter; }, /** * 通过日期计算年龄 */ getAgeByDate(t){ var e = (new Date).getFullYear(), a = (new Date).getMonth() + 1, s = (new Date).getDate() + 1, n = new Date(t).getFullYear(), r = new Date(t).getMonth() + 1, i = new Date(t).getDate() + 1, o = e - n, l = a - r, u = s - i; return l < 0 && (o -= 1, l += 12), u < 0 && (0 == l && (o -= 1, l += 12), l -= 1, u += 30), { age: (0 != o ? o + "岁" : "") + (0 != l ? l + "个月" : "") + (0 != u ? u + "天" : ""), year: o, month: l, day: u } }, /** * 通过日期计算年龄 */ getYearByDate(date){ let currYear = new Date().getFullYear(); let currMonth = new Date().getMonth()+1; let currDay = new Date().getDate()+1; let myYear = new Date(date).getFullYear(); let myMonth = new Date(date).getMonth()+1; let myDay = new Date(date).getDate()+1; if(currYear - myYear >= 0){ return currYear - myYear; } }, /** * 获取问卷缓存答案 */ getStorageAnswer(name){ const self = this; let answer = self.$storage.get(name); return answer?new Date(answer.time).getTime() - new Date().getTime() > 1000*60*10?{}:answer.answer:{}; }, //回显缓存答案 setStorageAnswer(name){ const self = this; let answer = self.$storage.get(name); return new Promise((resolve,reject) => { if(answer&& new Date().getTime() - new Date(answer.time).getTime() < 1000*60*100){ let questions = answer.answer; for(let i = 0;i < questions.length;i++){ let answers = questions[i].answers,id = questions[i].id; for(let k = 0;k < self.allQuest.length;k++){ if(self.allQuest[k].id == id){ for(let j = 0;j < answers.length;j++){ self.$refs["formInit"+k][0].forms[answers[j].qid + "_form"] = answers[j].answer; } self.allAnswer[k]= self.$util.formatFormData(self.$refs["formInit"+k][0].forms); } } } resolve(true) }else{ resolve(false) } }); } } export default utils;