import Vue from 'vue' import moment from 'moment'//日期格式化插件 import utils from '@/utils/utils.js' import form from '@/api/form.js' import i18n from '@/lang/index.js' import {Base64} from 'js-base64' import req from '@/request' Vue.filter('dateformat', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { if (dataStr) { return moment(dataStr).format(pattern) } else { return '' } }) //VUE页面使用:{{ newsinfo.add_time | dateformat('YYYY-MM-DD HH:mm:ss')}} Vue.filter('timeLag', function(difference) { var r = '', ////计算出相差天数 days = Math.floor(difference / (24 * 3600 * 1000)), //计算出小时数 leave1 = difference % (24 * 3600 * 1000), //计算天数后剩余的毫秒数 hours = Math.floor(leave1 / (3600 * 1000)), //计算相差分钟数 leave2 = leave1 % (3600 * 1000), //计算小时数后剩余的毫秒数 minutes = Math.floor(leave2 / (60 * 1000)), //计算相差秒数 leave3 = leave2 % (60 * 1000), //计算分钟数后剩余的毫秒数 seconds = Math.round(leave3 / 1000) if (days > 0) r += days + '天' if (hours > 0) r += hours + '小时' if (minutes > 0) r += minutes + '分钟' if (seconds > 0) r += seconds + '秒' return r }) Vue.filter('numFilter', function(value, type) { if (type == 'thousandBit') { return utils.thousandBit(value) } else if (type == 'currency') { return utils.convertCurrency(value) } else { return value } }) const backendValidate = { validate: (value, args) => { let url = args.url let submitFormData = args.submitFormData || false return new Promise((resolve, reject) => { form.backendValidate({url: url, param: value, submitFormData: submitFormData}, res => { resolve(res) }) }) }, options: { hasTarget: false, immediate: true }, paramNames: ['url', 'submitFormData'] } const frontJSValidate = { validate: (value, args) => { return new Promise((resolve, reject) => { let jsScript = args.jsScript jsScript = Base64.decode(jsScript) let formElementAry = document.getElementsByName('online-form') let data = {} if (formElementAry && formElementAry.length == 1) { let frmInst = formElementAry[0].__vue__ data = JSON.parse(JSON.stringify(frmInst.data)) } function evil() { let Fn = Function('value', 'data', 'i18n', jsScript) //一个变量指向Function,防止有些前端编译工具报错 let result = Fn(value, data, i18n) return result } resolve(evil()) }) }, options: { hasTarget: false, immediate: true }, paramNames: ['jsScript'] } // 只能在rules 对象下添加校验规则 let rules = { isExist: { validate: (value, args) => { if (args.isTrue) { return true } if (!value || !args) { return true } else { let url = args.requestUrl if (url) { return new Promise((resolve, reject) => { req.get(url + value).then(resp => { let data = resp.data let isValid = false if (!data || (data.constructor == Array && data.length == 0) || (data.constructor == Object && ((data.state && !data.value) || JSON.stringify(data) == '{}'))) { isValid = true } resolve({valid: isValid}) }) }) } else { return {valid: true} } } }, options: { hasTarget: false, immediate: false }, paramNames: ['requestUrl', 'isTrue'] }, time: { validate: (value, args) => { if (!value) { return true } else { let dateVal = '' if (value.constructor == String) { dateVal = value } else if (typeof value == 'object') { dateVal = value.value if (!dateVal || value.constructor == Date || (dateVal && dateVal.constructor == Date)) { return true } } var re = /^(?:[01]?\d|2[0-3])(?::[0-5]?\d){2}$/g.test(dateVal.trim()) return re } }, options: { hasTarget: false, immediate: true }, paramNames: [] }, date: { validate: (value, args) => { if (!value) { return true } else { let dateVal = '' if (value.constructor == String) { dateVal = value } else if (typeof value == 'object') { dateVal = value.value if (!dateVal || value.constructor == Date || (dateVal && dateVal.constructor == Date)) { return true } } var re = /^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))/g .test(dateVal.trim()) return re } }, options: { hasTarget: false, immediate: true }, paramNames: [] } } rules.backendValidate = backendValidate rules.frontJSValidate = frontJSValidate export default rules