@zhangqingcq/plug-r-qw
Version:
A JS lib base on Vue and View-design, you can achieve some complex functions with simple code after install this lib.
1,777 lines (1,596 loc) • 451 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("@wangeditor/editor"), require("@wangeditor/editor-for-vue"), require("@zhangqingcq/view-design-r"), require("ar-cascader"), require("axios"), require("deepmerge"), require("echarts"), require("lodash"), require("moment"), require("popper.js"), require("sweetalert"), require("vue"), require("vue-amap"), require("vue-json-viewer"), require("wangeditor"), require("xss"));
else if(typeof define === 'function' && define.amd)
define(["@wangeditor/editor", "@wangeditor/editor-for-vue", "@zhangqingcq/view-design-r", "ar-cascader", "axios", "deepmerge", "echarts", "lodash", "moment", "popper.js", "sweetalert", "vue", "vue-amap", "vue-json-viewer", "wangeditor", "xss"], factory);
else if(typeof exports === 'object')
exports["plugRQw"] = factory(require("@wangeditor/editor"), require("@wangeditor/editor-for-vue"), require("@zhangqingcq/view-design-r"), require("ar-cascader"), require("axios"), require("deepmerge"), require("echarts"), require("lodash"), require("moment"), require("popper.js"), require("sweetalert"), require("vue"), require("vue-amap"), require("vue-json-viewer"), require("wangeditor"), require("xss"));
else
root["plugRQw"] = factory(root["@wangeditor/editor"], root["@wangeditor/editor-for-vue"], root["@zhangqingcq/view-design-r"], root["ar-cascader"], root["axios"], root["deepmerge"], root["echarts"], root["lodash"], root["moment"], root["popper.js"], root["sweetalert"], root["vue"], root["vue-amap"], root["vue-json-viewer"], root["wangeditor"], root["xss"]);
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__934__, __WEBPACK_EXTERNAL_MODULE__365__, __WEBPACK_EXTERNAL_MODULE__513__, __WEBPACK_EXTERNAL_MODULE__354__, __WEBPACK_EXTERNAL_MODULE__742__, __WEBPACK_EXTERNAL_MODULE__714__, __WEBPACK_EXTERNAL_MODULE__190__, __WEBPACK_EXTERNAL_MODULE__773__, __WEBPACK_EXTERNAL_MODULE__416__, __WEBPACK_EXTERNAL_MODULE__871__, __WEBPACK_EXTERNAL_MODULE__286__, __WEBPACK_EXTERNAL_MODULE__380__, __WEBPACK_EXTERNAL_MODULE__612__, __WEBPACK_EXTERNAL_MODULE__230__, __WEBPACK_EXTERNAL_MODULE__90__, __WEBPACK_EXTERNAL_MODULE__210__) {
return /******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ 934:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__934__;
/***/ }),
/***/ 365:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__365__;
/***/ }),
/***/ 513:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__513__;
/***/ }),
/***/ 354:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__354__;
/***/ }),
/***/ 742:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__742__;
/***/ }),
/***/ 714:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__714__;
/***/ }),
/***/ 190:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__190__;
/***/ }),
/***/ 773:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__773__;
/***/ }),
/***/ 416:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__416__;
/***/ }),
/***/ 871:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__871__;
/***/ }),
/***/ 286:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__286__;
/***/ }),
/***/ 380:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__380__;
/***/ }),
/***/ 612:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__612__;
/***/ }),
/***/ 230:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__230__;
/***/ }),
/***/ 90:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__90__;
/***/ }),
/***/ 210:
/***/ (function(module) {
module.exports = __WEBPACK_EXTERNAL_MODULE__210__;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ !function() {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function() { return module['default']; } :
/******/ function() { return module; };
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ !function() {
/******/ __webpack_require__.p = "";
/******/ }();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
"default": function() { return /* binding */ entry_lib; }
});
;// CONCATENATED MODULE: ./node_modules/.pnpm/@vue+cli-service@5.0.8_5pnme6wivvd2n4h6wdhiax2xja/node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
/* eslint-disable no-var */
// This file is imported into lib/wc client bundles.
if (typeof window !== 'undefined') {
var currentScript = window.document.currentScript
if (false) { var getCurrentScript; }
var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)
if (src) {
__webpack_require__.p = src[1] // eslint-disable-line
}
}
// Indicate to webpack that this file can be concatenated
/* harmony default export */ var setPublicPath = (null);
;// CONCATENATED MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_bqabpjbmnlfwajo2cvaompf4cy/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[4]!./node_modules/.pnpm/vue-loader@15.11.1_bqabpjbmnlfwajo2cvaompf4cy/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/hello.vue?vue&type=template&id=4e2556e8
var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',[_vm._v("Greetings from Ricky.")])
}
var staticRenderFns = []
;// CONCATENATED MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_bqabpjbmnlfwajo2cvaompf4cy/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/hello.vue?vue&type=script&lang=js
/* harmony default export */ var hellovue_type_script_lang_js = ({
name: 'Hello'
});
;// CONCATENATED MODULE: ./src/components/hello.vue?vue&type=script&lang=js
/* harmony default export */ var components_hellovue_type_script_lang_js = (hellovue_type_script_lang_js);
;// CONCATENATED MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_bqabpjbmnlfwajo2cvaompf4cy/node_modules/vue-loader/lib/runtime/componentNormalizer.js
/* globals __VUE_SSR_CONTEXT__ */
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.
function normalizeComponent(
scriptExports,
render,
staticRenderFns,
functionalTemplate,
injectStyles,
scopeId,
moduleIdentifier /* server only */,
shadowMode /* vue-cli only */
) {
// Vue.extend constructor export interop
var options =
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
// render functions
if (render) {
options.render = render
options.staticRenderFns = staticRenderFns
options._compiled = true
}
// functional template
if (functionalTemplate) {
options.functional = true
}
// scopedId
if (scopeId) {
options._scopeId = 'data-v-' + scopeId
}
var hook
if (moduleIdentifier) {
// server build
hook = function (context) {
// 2.3 injection
context =
context || // cached call
(this.$vnode && this.$vnode.ssrContext) || // stateful
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
// 2.2 with runInNewContext: true
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__
}
// inject component styles
if (injectStyles) {
injectStyles.call(this, context)
}
// register component module identifier for async chunk inferrence
if (context && context._registeredComponents) {
context._registeredComponents.add(moduleIdentifier)
}
}
// used by ssr in case component is cached and beforeCreate
// never gets called
options._ssrRegister = hook
} else if (injectStyles) {
hook = shadowMode
? function () {
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
: injectStyles
}
if (hook) {
if (options.functional) {
// for template-only hot-reload because in that case the render fn doesn't
// go through the normalizer
options._injectStyles = hook
// register for functional component in vue file
var originalRender = options.render
options.render = function renderWithStyleInjection(h, context) {
hook.call(context)
return originalRender(h, context)
}
} else {
// inject component registration as beforeCreate hook
var existing = options.beforeCreate
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
}
}
return {
exports: scriptExports,
options: options
}
}
;// CONCATENATED MODULE: ./src/components/hello.vue
/* normalize component */
;
var component = normalizeComponent(
components_hellovue_type_script_lang_js,
render,
staticRenderFns,
false,
null,
null,
null
)
/* harmony default export */ var hello = (component.exports);
;// CONCATENATED MODULE: ./node_modules/.pnpm/vue-loader@15.11.1_bqabpjbmnlfwajo2cvaompf4cy/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[4]!./node_modules/.pnpm/vue-loader@15.11.1_bqabpjbmnlfwajo2cvaompf4cy/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/btTablePage/btTablePage.vue?vue&type=template&id=e28af606
var btTablePagevue_type_template_id_e28af606_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"tableBox",staticClass:"btTablePage fullHeight flexColumnBox"},[_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.showTopRow),expression:"showTopRow"}],staticClass:"topBtn"},[_vm._t("tableSetting"),_vm._t("topMsg"),_vm._t("topBtnGroup")],2),_c('div',{staticClass:"tableContainer growFlexItem"},[_c('div',{staticClass:"fullHeight relativeBox"},[_c('div',{ref:"tableContainerLOI",staticClass:"fullFlowContent"},[_c('Table',_vm._g(_vm._b({ref:"TableXXX",class:{
noBorderTable: _vm.noBorderTable,
fullHeightTable: !_vm.fixedTable,
lightHeadO: _vm.lightHead
},attrs:{"height":(_vm.fixedTable && _vm.tableContainerHeight) || null,"columns":_vm.columnsT,"data":_vm.dataS,"highlight-row":_vm.radio || _vm.highlightRow},on:{"on-select":_vm.onSelect,"on-selection-change":_vm.selectionHandle,"on-sort-change":_vm.onSortChange,"on-row-click":_vm.onRowClick}},'Table',_vm.$attrs,false),_vm.$listeners))],1)])]),_c('div',{directives:[{name:"show",rawName:"v-show",value:(!_vm.noPage),expression:"!noPage"}],staticClass:"pageContainer"},[(_vm.usePagePro)?_c('page-pro',{attrs:{"modelValue":_vm.current,"total":_vm.total,"showTotal":_vm.showTotal,"pageSize":_vm.pageSizeT,"showSizer":_vm.showSizer,"pageSizeOpts":_vm.pageSizes,"size":_vm.pageComponentSize},on:{"on-change":_vm.changePage,"on-page-size-change":_vm.pageSizeChange}}):_c('Page',{attrs:{"current":_vm.current,"total":_vm.total,"pageSize":_vm.pageSizeT,"pageSizeOpts":_vm.pageSizes,"showSizer":_vm.showSizer,"showTotal":_vm.showTotal,"showElevator":!_vm.noElevator,"size":_vm.pageComponentSize},on:{"update:current":function($event){_vm.current=$event},"on-change":_vm.changePage,"on-page-size-change":_vm.pageSizeChange}})],1)])
}
var btTablePagevue_type_template_id_e28af606_staticRenderFns = []
// EXTERNAL MODULE: external "lodash"
var external_lodash_ = __webpack_require__(773);
var external_lodash_default = /*#__PURE__*/__webpack_require__.n(external_lodash_);
// EXTERNAL MODULE: external "sweetalert"
var external_sweetalert_ = __webpack_require__(286);
var external_sweetalert_default = /*#__PURE__*/__webpack_require__.n(external_sweetalert_);
;// CONCATENATED MODULE: ./src/locale/lang/zh-CN.js
/* harmony default export */ var zh_CN = ({
r: {
locale: 'zh-CN',
testMsg: '测试国际化',
confirm: '确定',
save: '保存',
cancel: '取消',
clear: '清空',
info: {
title: '提示',
text: '确定执行该操作?'
},
http: {
403: '登录状态失效,请重新登录!',
409: '该账号已在其他地方登录,点击确定退出。'
},
pSelect: '请选择',
pInput: '请输入',
selectDate: '选择日期',
selectTime: '选择时间',
search: '搜索',
level: {
1: '一级',
2: '二级',
3: '三级'
},
unknown: '未知',
title: '标题',
required: '该项为必填',
back: '返回',
button: '按钮',
check: '查询',
adSearch: '高级查询',
all: '全选',
tabSetting: ' 列表显示设置',
delete: '删除',
fView: '全屏预览',
download: '点击下载',
file: '文件',
selectFile: '选择文件',
notImg: '文件不是图片,不可预览',
wrongFileType: '文件类型不被允许',
supportType: '支持类型:',
none: '无',
fileIsBig: '文件过大',
supportSize: '支持最大:',
uploadError: '上传出错',
uploadFail: '上传失败',
uploadLength: '最多可上传{0}个文件',
closePreview: '关闭预览',
fullImg: '该文件不支持图片形式预览',
preview: '预览',
searchFor: '当前搜索:',
noMore: '没有更多数据了',
optionLabel: '选项',
getDataError: '拉取数据出错',
add: '添加',
remove: '移除',
addAll: '全部添加',
removeAll: '全部移除',
added: '已添加',
notAdded: '未添加',
success: '成功',
failed: '失败',
error: '出错',
pageNotFound: '页面没找到',
notFoundMsg: '您访问的页面不存在,点击下面按钮返回上一个页面。',
hideMenu: '收起菜单',
showMenu: '展开菜单',
print: '打印',
close: '关闭',
help: '帮助',
printGuide: {
1: '鼠标停留在表头列右边框,出现拖动图标,按下鼠标拖动可设置列宽。',
2: '点击“列表显示设置”,可选择需要打印的列,选择完需点击“确定”按钮。',
3: '页面有A4灰色参考线,将打印内容右边缘调至参考线区间,打印机默认设置时可将表格内容铺满A4纸,表格越宽字体将越小。',
4: '将此页面地址复制到浏览器地址栏,打开的页面将不可用。',
5: '未到此线内容将无法铺满纸张',
6: '超过此线打印内容将不完整',
7: 'A4 纵向参考线',
8: 'A4 横向参考线',
9: '复制的页面无法使用该打印功能。',
10: '鼠标停留在打印内容顶部矩形条右边框,出现拖动图标,按下鼠标拖动可设置打印内容宽度。'
},
page: '条/页',
total: '共',
items: '条',
notSave: '您未保存,是否保存?',
last: '上一张',
next: '下一张'
}
});
// EXTERNAL MODULE: external "vue"
var external_vue_ = __webpack_require__(380);
var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
// EXTERNAL MODULE: external "deepmerge"
var external_deepmerge_ = __webpack_require__(714);
var external_deepmerge_default = /*#__PURE__*/__webpack_require__.n(external_deepmerge_);
;// CONCATENATED MODULE: ./src/locale/format.js
/**
* t('XXX',...arg)
* 去掉XXX中双花括号,或替换%{XXX}为arg[XXX],arg为t('XXX',...arg)中arg
* 如果XXX没有花括号,则返回XXX本身
*/
const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g
function hasOwn(obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key)
}
/* harmony default export */ function format(string, ...args) {
if (args.length === 1 && typeof args[0] === 'object') {
args = args[0]
}
if (!args || !args.hasOwnProperty) {
args = {}
}
return string.replace(RE_NARGS, (match, prefix, i, index) => {
let result
if (string[index - 1] === '{' && string[index + match.length] === '}') {
return i
} else {
result = hasOwn(args, i) ? args[i] : null
if (result === null || result === undefined) {
return ''
}
return result
}
})
}
;// CONCATENATED MODULE: ./src/locale/index.js
/**
* @description 国际化
* @author ricky zhangqingcq@foxmail.com
* @created 2020.10.14
*/
let lang = zh_CN
let merged = false
let i18nHandler = function () {
//如果vue原型上有$t方法,用该方法进行国际化翻译
const vuei18n = Object.getPrototypeOf(this || (external_vue_default())).$t
if (typeof vuei18n === 'function' && !!(external_vue_default()).locale) {
if (!merged) {
merged = true
external_vue_default().locale((external_vue_default()).config.lang, external_deepmerge_default()(lang, external_vue_default().locale((external_vue_default()).config.lang) || {}, { clone: true }))
}
return vuei18n.apply(this, arguments)
}
}
const locale_t = function (path, options) {
let value = i18nHandler.apply(this, arguments)
if (value !== null && value !== undefined) {
return value
}
//如果没有找到国际化翻译实例,则启用以下逻辑翻译
const array = path.split('.')
let current = lang
for (let i = 0, j = array.length; i < j; i++) {
const property = array[i]
value = current[property]
if (i === j - 1) {
return format(value, options)
}
if (!value) {
return ''
}
current = value
}
return ''
}
const use = function (l) {
lang = l || lang
}
const i18n = function (fn) {
i18nHandler = fn || i18nHandler
}
/* harmony default export */ var locale = ({
use,
t: locale_t,
i18n
});
;// CONCATENATED MODULE: ./src/utils/swal.js
/**
* created 2019.06.27
* @author Ricky <zhangqingcq@foxmail.com>
*/
/**
* @param {object|string|boolean} option 1.object:{title:'标题',content(or text):'内容,可以为空',type(or icon):'success(or error or
* warning)'};2.string:'标题'
* @param {string|HTMLElement} [text] 当option为object时不传此变量,当option为string时该变量为'内容'
* @param {string} [icon] 当option为object时不传此变量,当option为string时该变量为弹出框类型'success'|'error'|'warning'
* @param {boolean} closeOnClickOutside 点击外部关闭,默认:true
*/
/* harmony default export */ function swal(option, text, icon, closeOnClickOutside = true) {
const T = (...arg) => locale_t.apply(this, arg)
return new Promise((r, j) => {
switch (myTypeof(option)) {
case 'Object':
let okTxt = T('r.confirm')
let cancelTxt = T('r.cancel')
let cancelVisible = false
let okClass = 'swalConfirmBt'
let cancelClass = 'swalCancelBt'
const reg = /^HTML.*Element$/
option.type && (option.icon = option.type) && delete option.type
option.className = option.className || 'swalBoxX'
if (option.text && reg.test(myTypeof(option.text))) {
option.content = option.text
delete option.text
}
if (option.content && myTypeof(option.content) === 'String') {
option.text = option.content
delete option.content
}
if (option.button !== false) {
if (option.buttons && myTypeof(option.buttons) === 'Object') {
if (option.buttons.cancel) {
option.buttons.cancel.text && (cancelTxt = option.buttons.cancel.text) && (cancelVisible = true)
option.buttons.cancel.className && (cancelClass = option.buttons.cancel.className)
option.buttons.confirm.text && (okTxt = option.buttons.confirm.text)
option.buttons.confirm.className && (okClass = option.buttons.confirm.className)
}
} else if (option.buttons && myTypeof(option.buttons) === 'Array') {
if (option.buttons[0]) {
if (option.buttons[0] !== true) {
cancelTxt = option.buttons[0]
}
cancelVisible = true
}
if (option.buttons[1] && option.buttons[1] !== true) {
okTxt = option.buttons[1]
}
}
option.buttons = {
confirm: {
text: okTxt,
value: true,
visible: true,
className: okClass
},
cancel: {
text: cancelTxt,
value: null,
visible: cancelVisible,
className: cancelClass
}
}
}
option.closeOnClickOutside = option.closeOnClickOutside ?? true
external_sweetalert_default()(option)
.then((res) => {
if (res && myTypeof(option.onOk) === 'Function') {
option.onOk()
}
r(res)
})
.catch((err) => {
j(err)
})
break
case 'String':
let tempOption = {
title: option,
buttons: {
confirm: {
text: T('r.confirm'),
value: true,
visible: true,
className: 'swalConfirmBt',
closeModal: true
}
},
className: 'swalBoxX',
closeOnClickOutside: closeOnClickOutside
}
if (text) {
switch (myTypeof(text)) {
case 'String':
tempOption.text = text
break
case 'HTMLElement':
tempOption.content = text
break
}
}
icon && (tempOption.icon = icon)
external_sweetalert_default()(tempOption)
.then((res) => {
r(res)
})
.catch((err) => {
j(err)
})
break
case 'Boolean':
if (option === false) {
external_sweetalert_default().close()
}
break
default:
throw new TypeError('swal第一个参数类型有误,仅支持Object/String/false')
}
})
}
;// CONCATENATED MODULE: ./src/utils/spin.js
let count = 0
let loader = document.createElement('div')
loader.setAttribute('class', 'spinModal')
loader.innerHTML =
'<div class="loader"><svg class="circular" viewBox="25 25 50 50"><circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="5" stroke-miterlimit="10" /></svg></div>'
window.onload = function () {
document.getElementsByTagName('body')[0].append(loader)
}
function toggleSpin(d) {
if (d) {
loader.classList.add('show')
} else {
loader.classList.remove('show')
}
}
function counts(d) {
let t = count
if (d) {
count++
} else if (count > 0) {
count--
}
if (t !== count) {
if (count === 0) {
toggleSpin(false)
} else if (t === 0) {
toggleSpin(true)
}
}
}
;// CONCATENATED MODULE: ./src/utils/functionGroup.js
/**
* @description 公共方法集合
* @author ricky zhangqingcq@foxmail.com
* @created 2020.06.16
*/
//判断变量类型
function myTypeof(v) {
let str = Object.prototype.toString.call(v)
return str.replace(/\[object |]/g, '')
}
// 下划线转换驼峰
function toHump(name) {
return name.replace(/_(\w)/g, function (all, letter) {
return letter.toUpperCase()
})
}
// 驼峰转换下划线
function toLine(name) {
return name.replace(/([A-Z])/g, '_$1').toLowerCase()
}
/**
* 去掉对象属性前后空格
*/
function trimObj(obj) {
let p = myTypeof(obj)
if (p === 'Object') {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
let o = myTypeof(obj[key])
if (o === 'String') {
obj[key] = obj[key].trim()
} else if (o === 'Object' || o === 'Array') {
trimObj(obj[key])
}
}
}
} else if (p === 'Array') {
for (let i = 0, l = obj.length; i < l; i++) {
let t = myTypeof(obj[i])
if (t === 'String') {
obj[i] = obj[i].trim()
} else if (t === 'Array' || t === 'Object') {
trimObj(obj[i])
}
}
}
return obj
}
/**
* 清空集合
* @param {T} val 被清空的集合
* @param {Array.<string>} ignoreList 不需要清理的字段集合
* @return {T}
*/
function clearObj(val, ignoreList = []) {
if (myTypeof(val) === 'Array') {
val.forEach((item, index) => {
switch (myTypeof(item)) {
case 'Array':
case 'Object':
clearObj(item)
break
default:
val[index] = null
}
})
return val
} else if (myTypeof(val) === 'Object') {
for (let key in val) {
if (val.hasOwnProperty(key)) {
let go = true
for (let item of ignoreList) {
if (item === key) {
go = false
break
}
}
if (go) {
switch (myTypeof(val[key])) {
case 'Array':
case 'Object':
clearObj(val[key])
break
default:
val[key] = null
}
}
}
}
return val
} else {
return val
}
}
/*用浏览器内部转换器实现html转码*/
function htmlEncode(text) {
//1.首先动态创建一个容器标签元素,如DIV
let temp = document.createElement('div')
//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
temp.textContent !== undefined ? (temp.textContent = text) : (temp.innerText = text)
//3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
let output = temp.innerHTML
temp = null
return output
}
/*用浏览器内部转换器实现html解码*/
function htmlDecode(html) {
//1.首先动态创建一个容器标签元素,如DIV
let temp = document.createElement('div')
//2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
temp.innerHTML = html
//3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
let output = temp.innerText || temp.textContent
temp = null
return output
}
/*根据file文件对象获取文件地址用来预览*/
function getFileSrc(file) {
return new Promise((resolve) => {
let reader = new FileReader()
reader.readAsDataURL(file) // 读出 base64
reader.onloadend = () => {
resolve(reader.result)
}
})
}
/*获取后缀名*/
function getFileTypeByName(name) {
return name?.split('.').pop().toLocaleLowerCase() || ''
}
/*判断是否为图片(type是否包含‘image’)*/
function isImgByFile(type) {
return myTypeof(type) === 'String' && type.indexOf('image') > -1
}
/*根据文件名获取图标(上传组件用)*/
function getFileTypeIconByName(name) {
const format = getFileTypeByName(name)
let type = 'ios-document-outline'
if (['gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp'].indexOf(format) > -1) {
type = 'ios-image'
} else if (['mp4', 'm3u8', 'rmvb', 'avi', 'swf', '3gp', 'mkv', 'flv'].indexOf(format) > -1) {
type = 'ios-film'
} else if (['mp3', 'wav', 'wma', 'ogg', 'aac', 'flac'].indexOf(format) > -1) {
type = 'ios-musical-notes'
} else if (['doc', 'txt', 'docx', 'pages', 'epub', 'pdf'].indexOf(format) > -1) {
type = 'md-document'
} else if (['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1) {
type = 'ios-stats'
} else if (['keynote', 'ppt', 'pptx'].indexOf(format) > -1) {
type = 'ios-videocam'
}
return type
}
/*下载一个文件(替换容易被浏览器屏蔽的window.open方法)*/
function downloadFileReaderFile(name, href) {
let saveLink = document.createElement('a')
saveLink.href = href
saveLink.download = name
fakeALinkClick(saveLink)
}
/*模拟被点击(比如模拟用户点击链接下载东西)*/
function fakeALinkClick(obj) {
let ev = document.createEvent('MouseEvents')
ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
obj.dispatchEvent(ev)
}
/*以form-data方式提交请求数据时,$fetch的config参数值*/
const formDataHeadConfig = {
headers: {
'Content-Type': 'multipart/form-data'
}
}
/*将普通对象转换成form-data请求参数格式*/
function toFormData(data) {
let temp = new FormData()
for (let key in data) {
if (data.hasOwnProperty(key) && data[key] !== null) {
temp.append(key, data[key])
}
}
return temp
}
/**
* 按条件查找一个元素在集合中的位置(路径),返回找到的第一个符合条件的位置
* 仅适用于[{children:[{...},...],...},...]类似树结构集合(最外层也可以是一个对象)或一维数组
* @param {Array/Object} group - 集合,被查找的集合,必填
* @param {Function/String/Number/Boolean} condition - 查找条件,为常量时,将常量和集合元素直接对比,必填
* @param {String} pathKey - 查找结果(路径)元素在集合中的key,在集合为数组时,可以不填,返回index(索引)
* @param {String} childKey - 集合子元素的key,默认值'children'
* @param {Array} path - 递归用参数,逻辑内部参数,不用传
* @return {Array} 返回带有路径(层级)信息的数组
* @example group: {id:1,name:'爸爸',children:[{id:2,name:'大儿子'},{id:3,name:'二儿子'}]}
* condition: e=>e?.id === 3
* pathKey: 'name'
* childKey: 'children'
*
* 返回:['爸爸','二儿子']
*/
function findPath({ group, condition, pathKey, childKey = 'children', path = [] }) {
if (group && external_lodash_default().isObject(group)) {
if (external_lodash_default().isFunction(condition)) {
if (external_lodash_default().isPlainObject(group)) {
let item = group
let temp = external_lodash_default().cloneDeep(path)
if (condition(item)) {
if (pathKey && item[pathKey]) {
temp.push(item[pathKey])
}
return temp
} else if (item[childKey] && !external_lodash_default().isEmpty(item[childKey])) {
if (pathKey && item[pathKey]) {
temp.push(item[pathKey])
}
let rr = findPath({
group: item[childKey],
condition: condition,
pathKey: pathKey,
childKey: childKey,
path: temp
})
if (!external_lodash_default().isEmpty(rr)) {
return rr
}
}
} else if (Array.isArray(group)) {
for (let item of group) {
let temp = external_lodash_default().cloneDeep(path)
if (condition(item)) {
if (pathKey && item[pathKey]) {
temp.push(item[pathKey])
} else {
temp.push(group.indexOf(item))
}
return temp
} else if (item[childKey] && item[childKey].length > 0) {
if (pathKey && item[pathKey]) {
temp.push(item[pathKey])
} else {
temp.push(group.indexOf(item))
}
let rr = findPath({
group: item[childKey],
condition: condition,
pathKey: pathKey,
childKey: childKey,
path: temp
})
if (!external_lodash_default().isEmpty(rr)) {
return rr
}
}
}
}
} else if (Array.isArray(group)) {
//条件为常量,集合为数组,这种情况只会有一种业务场景:在一维数组中查找某个常量在数组中第一次出现的index
for (let item of group) {
let temp = external_lodash_default().cloneDeep(path)
if (item === condition) {
temp.push(group.indexOf(item))
return temp
}
}
}
}
return []
}
/**
* 在目标集合中按条件查找或直接查找,返回第一个满足条件的元素或路径
* 与findPath不同,这里的路径是完整路径(findPath省略了一些标准结构中间路径),找不到返回:false
* @param {Array|Object} group 被查找的集合
* @param {Function|String|Number|Boolean|null|undefined} condition 查找的条件或值
* @param {Boolean} getPath 是否返回路径,默认为:false,返回找到的元素
*/
function findCollection(group, condition, getPath = false) {
if (!group || !condition) {
return false
}
const isFunc = myTypeof(condition) === 'Function'
let PATH
let target = 'notFoundC'
let deepSearch = function (group, condition) {
if (myTypeof(group) === 'Array') {
if (isFunc && condition(group)) {
target = group
return []
}
for (let e of group) {
if (target !== 'notFoundC') {
break
}
if ((isFunc && condition(e)) || e === condition) {
target = e
return [group.indexOf(e)]
} else if (myTypeof(e) === 'Array' || myTypeof(e) === 'Object') {
let r = deepSearch(e, condition)
if (r !== undefined) {
return [group.indexOf(e), ...r]
}
}
}
} else if (myTypeof(group) === 'Object') {
if (isFunc && condition(group)) {
target = group
return []
}
for (let key in group) {
if (target !== 'notFoundC') {
break
}
if (group.hasOwnProperty(key)) {
if ((isFunc && condition(key)) || group[key] === condition) {
target = group[key]
return [key]
} else if (myTypeof(group[key]) === 'Object' || myTypeof(group[key]) === 'Array') {
let r = deepSearch(group[key], condition)
if (r !== undefined) {
return [key, ...r]
}
}
}
}
}
}
PATH = deepSearch(group, condition)
if (getPath) {
return PATH || false
}
return target === 'notFoundC' ? false : target
}
/*判断某个值是否在集合中*/
function oneOf(value, validList) {
for (let i = 0, l = validList.length; i < l; i++) {
if (value === validList[i]) {
return true
}
}
return false
}
/**
* 小数位数限制,超出会返回被去掉后的值
* @param val 原来的值
* @param num 小数点后的位数,默认:2
* @return {number|*}
*/
function decimalDigitsLimit(val, num = 2) {
let expStr = new RegExp(`(^-?\\d+\\.\\d{${num}})(\\d+$)`)
let valStr = (val && String(val)) || ''
if (expStr.test(valStr)) {
return Number(valStr.replace(expStr, '$1'))
}
return val
}
/*文件导出,调用后端接口以form表单提交数据下载文件*/
function downloadFileByFormSubmit(url, data = {}, method = 'get') {
let form = document.createElement('form')
let body = document.getElementsByTagName('body')[0]
body.appendChild(form)
form.setAttribute('style', 'display:none')
form.setAttribute('target', '')
form.setAttribute('method', method)
let _url = url
if (window?.g) {
/*所有特定缩写字母开头的地址,都会被改变加上config.js(public里的全局配置文件,在index.html引入,在打包后通过更改该文件用于不
同环境的部署)里配置的地址变成绝对地址,如:
config.js里配置了 window.g={mgrURL:'http://mgr.myweb.com'}
请求地址 '/mgr/file' 会被改变为 'http://mgr.myweb.com/file'
*/
let httpEnv = Object.keys(window.g)
.filter((e) => e?.indexOf('URL') > -1)
.map((e) => e?.replace('URL', ''))
for (let item of httpEnv) {
let regExp = new RegExp('^/' + item + '(?=/.*$)', 'i')
if (regExp.test(url) && window.g[item + 'URL']) {
_url = window.g[item + 'URL'] + url.replace(regExp, '')
break
}
}
}
form.setAttribute('action', _url)
if (external_lodash_default().isPlainObject(data)) {
for (let key in data) {
if (data.hasOwnProperty(key) && (data[key] || data[key] === 0 || data[key] === false || data[key] === '')) {
let input = document.createElement('input')
input.setAttribute('type', 'hidden')
input.setAttribute('name', key)
input.setAttribute('value', data[key])
form.appendChild(input)
}
}
form.submit()
let ta = setTimeout(() => {
body.removeChild(form)
clearTimeout(ta)
ta = null
}, 8000)
} else {
console.error('请求数据格式有误,无法下载文件')
}
}
/**
* 文件导出(基于fetch+Blob,支持精确蒙层控制)
* @param {string} url 导出路径
* @param {object} data 请求参数
* @param {string} method 请求方式,默认'get'
* @param {string} filename 自定义文件名(可选,不传则从响应头获取或使用默认名)
*/
async function downloadFileWithSpin(url, data = {}, method = 'get', filename) {
counts(true)
try {
let _url = url
if (window?.g) {
let httpEnv = Object.keys(window.g)
.filter((e) => e?.indexOf('URL') > -1)
.map((e) => e?.replace('URL', ''))
for (let item of httpEnv) {
let regExp = new RegExp('^/' + item + '(?=/.*$)', 'i')
if (regExp.test(url) && window.g[item + 'URL']) {
_url = window.g[item + 'URL'] + url.replace(regExp, '')
break
}
}
}
const fetchOptions = {
method: method.toUpperCase(),
credentials: 'include'
}
if (method.toLowerCase() === 'get' && Object.keys(data).length > 0) {
const params = new URLSearchParams()
for (let key in data) {
if (data.hasOwnProperty(key) && (data[key] || data[key] === 0 || data[key] === false || data[key] === '')) {
params.append(key, data[key])
}
}
_url += (_url.includes('?') ? '&' : '?') + params.toString()
}
if (['post', 'put'].includes(method.toLowerCase())) {
fetchOptions.headers = {
'Content-Type': 'application/json'
}
fetchOptions.body = JSON.stringify(data)
}
const response = await fetch(_url, fetchOptions)
if (!response.ok) {
throw new Error('下载失败')
}
let fileName = filename || 'download'
if (!filename) {
let contentDisposition = response.headers.get('Content-Disposition')
if (contentDisposition) {
contentDisposition = decodeURIComponent(contentDisposition)
const match = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/)
if (match && match[1]) {
fileName = match[1].replace(/['"]/g, '')
}
} else {
const urlPath = _url.split('?')[0]
const nameFromUrl = urlPath.substring(urlPath.lastIndexOf('/') + 1)
if (nameFromUrl && nameFromUrl.includes('.')) {
fileName = decodeURIComponent(nameFromUrl)
}
}
}
const blob = await response.blob()
const downloadUrl = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = downloadUrl
link.download = fileName
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(downloadUrl)
} catch (error) {
console.error('下载出错:', error)
} finally {
counts(false)
}
}
/**
* 文件导出功能(调用文件下载方法downloadFileByFormSubmit)
* @param url 导出路径
* @param data 参数
* @param method 请求方式,默认'get'
* @param spin 是否显示loading,默认值false
* @param filename 自定义文件名(可选,不传则从响应头获取或使用默认名)
*/
async function fileExport(url, data = {}, method = 'get', spin = false, filename) {
if (
data.hasOwnProperty('columns') &&
(data['columns'] === '' || data['columns'] === null || data['columns'] === undefined)
) {
swal.call(this, {
title: '需要导出的列不能为空',
type: 'warning'
})
return
}
if (spin) {
await downloadFileWithSpin(url, data, method, filename)
} else {
downloadFileByFormSubmit(url, data, method)
}
}
/**
* 依据列显示设置缓存获取columns的key的集合
* @param {String} sKey - 列显示设置插件的sKey
* @param {Array} columns - 表格table的columns
* @param {Boolean} returnArray - 是否返回数组,默认值false,返回String
* */
function getColumnsKeys(sKey, columns, returnArray = false) {
let temp
if (sKey && myTypeof(columns) === 'Array') {
let names = localStorage.getItem(sKey)
if (names) {
names = JSON.parse(decodeURI(names))
temp = columns.filter((e) => e?.key && names.indexOf(e?.title) !== -1).map((e) => e?.key)
} else {
temp = columns.map((e) => e?.key)
}
} else {
temp = []
}
if (!returnArray) {
temp = String(temp)
}
return temp
}
/**
* 判断一个值是否为有效值,有效值:不为空即为有效
* @param val 需要判断的值
* @returns {boolean}
*/
function isValidValue(val) {
return val !== undefined && val !== null && val !== ''
}
function isNumberValue(val) {
const reg = /^-?\d+(.\d+)?$/
return reg.test(val)
}
/**
* 手动tooltip(基于tableTooltip的高级表格内容展示,展示内容和形式更多样和合理)
* tableTooltip: 替换view-design的Table的tooltip功能,只在内容会导致换行或显示不完整时渲染tooltip
* @param {String/Array/Function} contentKey 要设置tooltip的column的key或者key组成的数组(内容按数组中key对应的内容先后拼接),
* 或获取值的自定义逻辑(Function回调,会传入params)
* @param {boolean} dash 在内容为空(null、undefined、'')时是否以'--'代替显示
* @param {String} jointMark 在内容为多个字段拼接时,各字段间连接符,默认没有
*/
function tooltipManual(contentKey, dash = false, jointMark = '') {
return function (h, params) {
let content
if (myTypeof(contentKey) === 'Array') {
let temp = []
for (let item of contentKey) {
if (isValidValue(params.row[item])) {
temp.push(params.row[item])
}
}
content = temp.join(jointMark)
} else if (myTypeof(contentKey) === 'Function') {
content = contentKey(params)
} else {
content = params.row[contentKey]
}
return h('tableTooltip', {
props: {
content: dash ? (content === '' ? '--' : (content ?? '--')) : content
}
})
}
}
/*获取字符串width*/
function getStringWidth(str, fontSize = 12) {
if (myTypeof(str) === 'String' && str.length > 0) {
let nodesH = document.createElement('span')
nodesH.style.fontSize = fontSize + 'px'
nodesH.style.fontFamily = 'inherit'
nodesH.innerHTML = str
nodesH.style.opacity = '0'
nodesH.style.position = 'fixed'
nodesH.style.top = '3000px'
document.body.append(nodesH)
const width = nodesH.clientWidth
document.body.removeChild(nodesH)
return width
}
return 0
}
/*判断集合(数组或对象)每个元素或单个变量是否是有效值*/
function isEmptyValue(data) {
if (external_lodash_default().isPlainObject(data)) {
for (let key in data) {
if (data.hasOwnProperty(key) && isValidValue(data[key])) {
return false
}
}
return true
} else if (Array.isArray(data)) {
for (let item of data) {
if (isValidValue(item)) {
return false
}
}
return true
}
return !isValidValue(data)
}
/*获取字符串长度,中文2,其他1(一般用于用户输入长度限制)*/
function stringLength(str) {
if (myTypeof(str) === 'String') {
return str.replace(/[^\x00-\xff]/g, '01').length
} else if (myTypeof(str) === 'Number') {
str += ''
return str.replace(/[^\x00-\xff]/g, '01').length
}
return 0
}
/**
* 按条件设置集合中指定字段的值
* @param {Array} group 目标集合
* @param {Function} condition 匹配条件
* @param {String} key 要设置的字段键名
* @param val 要设置的字段的值,或处理逻辑
* @param {String} childKey 子集键名
*/
function setValByOption({ group, condition, key, val, childKey = 'children' }) {
if (
myTypeof(group) !== 'Array' ||
myTypeof(condition) !== 'Function' ||
myTypeof(key) !== 'String' ||
myTypeof(childKey) !== 'String'
) {
return false
}
group.forEach((item) => {
if (condition(item)) {
if (myTypeof(val) === 'Function') {
item[key] = val(item[key])
} else {
item[key] = val
}
}
if (myTypeof(item[childKey]) === 'Array' && item[childKey].length > 0) {
setValByOption({
group: item[childKey],
condition,
key,
val,
childKey
})
}
})
}
/**
* 是否有该权限,用于权限管理
* @param {String} value 权限代码
* @returns {boolean}
*/
function hasPermission(value) {
let btnPermissions = sessionStorage.getItem('btnPermissions')
if (btnPermissions) {
return btnPermissions.split(',').indexOf(value) > -1
}
return false
}
/**
* 如果值为''则将其替换为null
* @param val 被替换的值
* @returns {*}
*/
function emptyInput(val) {
if (val === '') {
return null
}
return val
}
/**
* 判断一个变量是否是NaN
* @param v 变量
* @returns {boolean}
*/
function functionGroup_isNaN(v) {
return myTypeof(v) === 'Number' && String(v) === 'NaN'
}
/**
*过滤对象属性或者将对象转换成url的query字符串
* @param {Object} data 需要处理的对象
* @param {Boolean} toUrl 是否需要转换成url,为false时可以不传
* @param {Boolean} keepEmptyVal 是否保留空值(用于接口置空某个字段),为false时可以不传
* @returns {*}
* 注意:当toUrl=false且keepEmptyVal=true时,两个参数都传比较好
*/
function dataFilterOrToUrl(data, toUrl, keepEmptyVal) {
if (myTypeof(data) !== 'Object') {
return data
}
let _data = Object.assign(data, {})
let url = ''
for (let key in _data) {
if (_data.hasOwnProperty(key)) {
let val = _data[key]
if (
val === undefined ||
val === '' ||
(myTypeof(val) === 'String' && val.trim() === '') ||
val === null ||
functionGroup_isNaN(val)
) {
if (keepEmptyVal) {
if (toUrl) {
url += key + '=&'
} else {
_data[key] = ''
}
} else {
delete _data[key]
}
} else if (toUrl) {
url += key + '=' + val + '&'
}
}
}
if (toUrl) {
if (url.length > 0) {
return url.substr(0, url.length - 1)
}
return ''
}
return _data
}
//阻止冒泡
function stopBubbling(e) {
e = e || window.Event
if (e?.stopPropagation) {
//W3C阻止冒泡方法
e.stopPropagation()
} else {
e.cancelBubble = true //IE阻止冒泡方法
}
}
/*过滤对象或数组中无效值*/
function removeEmptyValue(data) {
let temp
if (Array.isArray(data)) {
temp = []
for (let item of data) {
if (Array.isArray(item) || external_lodash_default().isPlainObject(item)) {
temp.push(removeEmptyValue(item))
} else if (isValidValue(item)) {
temp.push(item)
}
}
} else if (external_lodash_default().isPlainObject(data)) {
temp = {}
for (let key in data) {
if (data.hasOwnProperty(key)) {
if (Array.isArray(data[key] || external_lodash_default().isPlainObject(data[key]))) {
temp[key] = removeEmptyValue(data[key])
} else if (isValidValue(data[key])) {
temp[key] = data[key]
}
}
}
}
return temp
}
/**
*打印页面,根据后端所传递的数据生成
* @param data
* @return {Promise<any>}
*/
function htmlPrint(data) {
const pwin = window.open()
pwin.document.write(data)
const tc = setTimeout(() => {
pwin.print()
window.clearTimeout(tc)
}, 10)
}
/**
* 查找dom元素所有兄弟
* @param {node} elem - 被查找的元素
*/
function siblingElems(elem) {
let nodes = []
let _elem = elem
while ((elem = elem.previousSibling)) {
if (elem.nodeType === 1) {
nodes.push(elem)
}
}
while ((_elem = _elem.nextSibling)) {
if (_elem.nodeType === 1) {
nodes.push(_elem)
}
}
return nodes
}
// EXTERNAL MODULE: external "axios"
var external_axios_ = __webpack_require__(742);
var external_axios_default = /*#__PURE__*/__webpack_require__.n(external_axios_);
// EXTERNAL MODULE: external "@zhangqingcq/view-design-r"
var view_design_r_ = __webpack_require__(513);
;// CONCATENATED MODULE: ./src/utils/messageBox.js
/** created 2019.05.24
* @author ricky email:zhangqingcq@foxmail.com
*/
let loading = false
/**
* 对话框
* @param {object} options 对话框配置
* @param {string|function} options.content 弹框内容,1.string,直接将文字插入对应位置;2.function,如:(h)=>h('div',{class:'my-class'},'123')
* @param {number} [options.height] 弹框高度,默认值130,最小值130
* @param {number} [options.width] 弹框宽度,默认值416,最小值416
* @param {string} [options.title] 弹框标题内容,默认值“提示”
* @param {callback} [options.onOk] 确定按钮回调函数
* @param {callback} [options.onCancel] 取消按钮回调函数
* @param {callback} [options.onClose] 关闭(右上角叉叉)按钮回调函数
* @param {string} [options.okText] 确定按钮文字,默认值“确定”
* @param {string} [options.cancelText] 取消按钮文字,默认值“取消”
* @param {boolean} [options.noWarnIcon] 不展示内容开头的警告图标(非字符串内容默认不展示),默认值“false”
* @param {string} [options.footerAlign] 底部对齐方式,string,默认值“center”
* @param {boolean} [options.cancelBt] 展示取消按钮,boolean,默认值“true”
* @example this.messageBox({
* content:'校验中,返回结果前,请勿关闭或刷新页面'
* })
*/
function messageBox({
height,
width = 416,
title,
content,
onOk,
onCancel,
onClose,
okText,
cancelText,
noWarnIcon,
footerAlign,
cancelBt
}) {
const T = (...arg) => locale_t.apply(this, arg)
const heightTemp = height && Number(height) - 90 > 100 ? Number(height) - 90 + 'px' : 0
const heightT = heightTemp || '100px'
content = content || T('r.info.text')
const stringContent = myTypeof(content) === 'String'
const functionContent = myTypeof(content) === 'Function'
view_design_r_.Modal.warning({
width: width,
render: (h) => {
return h(
'div',
{
class: 'customMessageBox',
style: {
height: heightT
}
},
[
h(
'div',
{
class: 'containerN'
},
[
h(
'div',
{
class: 'titleN'
},
[
h('span', title || T('r.info.title')),
h(
'Button',
{
class: 'fr closeN ivu-btn ivu-btn-text',
props: {
type: 'text'
},
on: {
click() {
view_design_r_.Modal.remove()
if (onClose && myTypeof(onClose) === 'Function') {
onClose()
}
}
}
},
[
h('i', {
class: 'ivu-icon ivu-icon-ios-close',
style: {
fontSize: '30px'
}
})
]
)
]
),
h(
'div',
{
class: 'contentN',
style: {
textAlign: stringContent ? 'center' : 'left'
}
},
[
h('i', {
class: stringContent && noWarnIcon !== true ? 'ivu-icon ivu-icon-ios-alert-outline' : 'hide',
style: {
fontSize: '60px',
color: '#f8bb86'
}
}),
h('div', { class: 'msgBoxConO' }, functionContent ? [content(h)] : content)
]
),
h(
'div',
{
class: 'footerN',
style: {
textAlign: footerAlign || 'center'
}
},
[
h(
'Button',
{
class: 'okBtN ivu-btn ivu-btn-default',
on: {
click(e) {
if (onOk && typeof onOk === 'function') {
const p = onOk()
if (p && myTypeof(p) === 'Promise') {
loading = true
const el = e?.currentTarget || e?.target
if (el) {
el.classList.add('ivu-btn-loading')
el.nextSibling.setAttribute('disabled', 'disabled')
const c = el.parentElement?.parentElement.querySelector('.titleN .closeN')
c.classList.add('disabled')
}
Promise.resolve(p)
.then(() => {
loading = false
view_design_r_.Modal.remove()
})
.catch(() => {
loading = false
view_design_r_.Modal.remove()
})
} else {
view_design_r_.Modal.remove()
}
}
}
}
},
[
h('i', {
class: 'ivu-load-loop ivu-icon ivu-icon-ios-loading'
}),
h('span', okText || T('r.confirm'))
]
),
h(
'Button',
{
class: ['cancelBtN ivu-btn ivu-btn-default', cancelBt === false && 'hide'],
on: {
click() {
view_design_r_.Modal.remove()
if (myTypeof(onCancel) === 'Function') {
onCancel()
}
}
}
},