const uploadFileType = ['jpg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'pdf'] const docType = ['doc', 'docx', 'xls', 'xlsx', 'pdf'] const FILE_UPLOAD_ADDRESS = '/file_server/uploadFile' const FILE_DELETE_ADDRESS = '/file_server/deleteFile' const FILE_STREAM_PREVIEW_ADDRESS = '/file_server/fileStreamPreview' Vue.component('m-page-loading', httpVueLoader('/components/mobile/common/MLoading.vue')) Vue.component('m-table-loading', httpVueLoader('/components/mobile/common/MTableLoading.vue')) Vue.component('m-card', httpVueLoader('/components/mobile/common/MCard.vue')) Vue.component('vant-file-upload', httpVueLoader('/components/plugins/VantFileUpload.vue')) const GetQueryString = (name) => { const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); const r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return ""; } const removeHTMLTag = (str) => { str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML tag str = str.replace(/[ | ]*\n/g, '\n'); //去除行尾空白 str = str.replace(/\n[\s| | ]*\r/g, '\n'); //去除多余空行 str = str.replace(/ /ig, '');//去掉  return str; } const CREATE_PREVIEW_URL = (val) => { return FILE_STREAM_PREVIEW_ADDRESS + "?id=" + val } const clone = (val) => { return JSON.parse(JSON.stringify(val)) } // H5 页面按需注册弹框同步回调;全站只保留一个 popstate 监听,弹框按后进先出关闭。 const mobilePopupHistory = { owner: null, token: null, stack: [], pending: null, register(sync) { this.owner = sync this.token = String(Date.now()) + Math.random() this.stack = [] return this }, open(key) { if (!this.owner || this.pending || this.stack.includes(key)) return this.stack.push(key) window.history.pushState(Object.assign({}, window.history.state, { mobilePopupDepth: this.stack.length, mobilePopupOwner: this.token }), '', window.location.href) this.owner(key, true) }, // 返回 Promise,关闭确认框后再提交,避免回退尚未完成便清理父级弹框。 close() { if (this.pending) return this.pending.promise if (!this.stack.length) return Promise.resolve() return this.back(1) }, back(count) { let complete const promise = new Promise(resolve => { complete = resolve }) this.pending = {promise, complete} window.history.go(-count) return promise }, clear() { if (this.pending) return this.pending.promise.then(() => this.clear()) return this.stack.length ? this.back(this.stack.length) : Promise.resolve() }, unregister(sync) { if (this.owner !== sync) return this.owner = null this.stack = [] }, onPop(event) { if (!this.owner) return const depth = event.state && event.state.mobilePopupOwner === this.token ? event.state.mobilePopupDepth : 0 // 弹框回退由本管理器消费,避免 PJAX 同时将其识别为业务页面切换。 if (this.stack.length > depth || this.pending) event.stopImmediatePropagation() while (this.stack.length > depth) { this.owner(this.stack.pop(), false) } if (this.pending) { const complete = this.pending.complete this.pending = null complete() } } } window.addEventListener('popstate', event => mobilePopupHistory.onPop(event), true) const toChinesNum = (num) => { let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; let unit = ["", "十", "百", "千", "万"]; num = parseInt(num); let getWan = (temp) => { let strArr = temp.toString().split("").reverse(); let newNum = ""; for (let i = 0; i < strArr.length; i++) { newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum; } return newNum; } let overWan = Math.floor(num / 10000); let noWan = num % 10000; if (noWan.toString().length < 4) { noWan = "0" + noWan; } return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num); } const loc = () => { return location.href.replace(location.search, "").replace(location.hash, "") } const modal = { // 消息提示 msg(content) { vant.Toast(content) }, // 错误消息 msgError(content) { vant.Toast.fail(content) }, // 成功消息 msgSuccess(content) { vant.Toast.success(content) }, // 弹出提示 alert(content) { vant.Dialog.alert({ title: '提示', message: content }).then(() => { // on close }); }, // 确认窗体 confirm(content) { return new Promise((resolve, reject) => { vant.Dialog.confirm({ title: '提示', message: content, }).then(() => { resolve() }).catch(() => { // reject() }) }) }, // 提示信息 showToast(option) { if (typeof option === "object") { vant.Toast(option) } else { vant.Toast.loading({ message: option, forbidClick: true, loadingType: 'spinner', duration: 2500 }); } }, // 打开遮罩层 loading(content) { vant.Toast.loading({ message: content, forbidClick: true, overlay: true, duration: 0 }); }, // 关闭遮罩层 closeLoading() { vant.Toast.clear(); } } Vue.prototype.$modal = modal const nation = [ '汉族', '蒙古族', '回族', '藏族', '维吾尔族', '苗族', '彝族', '壮族', '布依族', '朝鲜族', '满族', '侗族', '瑶族', '白族', '土家族', '哈尼族', '哈萨克族', '傣族', '黎族', '傈僳族', '佤族', '畲族', '高山族', '拉祜族', '水族', '东乡族', '纳西族', '景颇族', '柯尔克孜族', '土族', '达翰尔族', '么佬族', '羌族', '布朗族', '撒拉族', '毛南族', '仡佬族', '锡伯族', '阿昌族', '普米族', '塔吉克族', '怒族', '乌孜别克族', '俄罗斯族', '鄂温克族', '德昂族', '保安族', '裕固族', '京族', '塔塔尔族', '独龙族', '鄂伦春族', '赫哲族', '门巴族', '珞巴族', '基诺族' ];