From 4ef4d2f2b3e66813fdeffc1cf034c015490c61fb Mon Sep 17 00:00:00 2001 From: kgdxpr Date: Thu, 4 Jan 2024 09:32:04 +0800 Subject: [PATCH] 'commit' --- .../1392C526-7879-4BB4-ADC0-0300BA3D9456.xlsx | Bin 0 -> 15724 bytes .../9EEAEAD7-7CE7-4043-A965-B9B2791CE133.xlsx | Bin 0 -> 32683 bytes .../BFB61E21-40BA-4BFF-9E6A-8C7AA971A0A8.xlsx | Bin 0 -> 17625 bytes .../tb/form/ayq/modules/formDesignerView.js | 5292 +++++++++++++++++ .../tb/form/ayq/modules/staticFieldView.js | 308 + WebRoot/view/tb/form/report.html | 12 +- WebRoot/view/tb/form/view.html | 380 ++ WebRoot/view/tb/school/task_list.html | 22 +- 8 files changed, 6001 insertions(+), 13 deletions(-) create mode 100644 WebRoot/Excel/1392C526-7879-4BB4-ADC0-0300BA3D9456.xlsx create mode 100644 WebRoot/Excel/9EEAEAD7-7CE7-4043-A965-B9B2791CE133.xlsx create mode 100644 WebRoot/Excel/BFB61E21-40BA-4BFF-9E6A-8C7AA971A0A8.xlsx create mode 100644 WebRoot/view/tb/form/ayq/modules/formDesignerView.js create mode 100644 WebRoot/view/tb/form/ayq/modules/staticFieldView.js create mode 100644 WebRoot/view/tb/form/view.html diff --git a/WebRoot/Excel/1392C526-7879-4BB4-ADC0-0300BA3D9456.xlsx b/WebRoot/Excel/1392C526-7879-4BB4-ADC0-0300BA3D9456.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..34cc405ffbbfc188bdbd7c9e9a97e82abf9b38db GIT binary patch literal 15724 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 TwnYZQc>U$Qj`#+Sw}1Z+85wwA literal 0 HcmV?d00001 diff --git a/WebRoot/Excel/9EEAEAD7-7CE7-4043-A965-B9B2791CE133.xlsx b/WebRoot/Excel/9EEAEAD7-7CE7-4043-A965-B9B2791CE133.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2df2845d9742ef1f65c60c80d9504610d12b9112 GIT binary patch literal 32683 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 literal 0 HcmV?d00001 diff --git a/WebRoot/Excel/BFB61E21-40BA-4BFF-9E6A-8C7AA971A0A8.xlsx b/WebRoot/Excel/BFB61E21-40BA-4BFF-9E6A-8C7AA971A0A8.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4659b908848a9a95fb671de04507663ecaf2debe GIT binary patch literal 17625 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 Gxc>*N-SCD0 literal 0 HcmV?d00001 diff --git a/WebRoot/view/tb/form/ayq/modules/formDesignerView.js b/WebRoot/view/tb/form/ayq/modules/formDesignerView.js new file mode 100644 index 00000000..cabe5090 --- /dev/null +++ b/WebRoot/view/tb/form/ayq/modules/formDesignerView.js @@ -0,0 +1,5292 @@ +/** + +------------------------------------------------------------------------------------+ + + ayq-layui-form-designer(layui表单设计器) + +------------------------------------------------------------------------------------+ + + ayq-layui-form-designer v2.0.0 + * MIT License By http://116.62.237.101:8009/ + + 作者:谁家没一个小强 + + 官方: + + 时间:2022-05-23 + +------------------------------------------------------------------------------------+ + + 版权声明:该版权完全归谁家没一个小强所有,可转载使用和学习,但请务必保留版权信息 + +------------------------------------------------------------------------------------+ + + 本项目是一个基于layui表单组件的表单设计器 + + 1.本项目基于Layui、Jquery、Sortable + + 2.项目已经基本实现了拖动布局,父子布局 + + 3.项目实现了大部分基于Layui的Form表单控件布局,包括输入框、编辑器、下拉、单选、单选组、多选组、日期、滑块、评分、轮播、图片、颜色选择、图片上传、文件上传 + + 4.表单数据的获取与回显,禁用全表单 + +------------------------------------------------------------------------------------+ + */ +layui.config({ base: './ayq/modules/' }).define(["layer", 'flow', "laytpl", "element", "form", "slider", "laydate", "rate", "colorpicker", "layedit", "carousel", "upload", "formField", "staticFieldView", "numberInput", "iconPicker", "cron", "labelGeneration"] + , function (exports) { + var $ = layui.jquery + , layer = layui.layer + , laytpl = layui.laytpl + , setter = layui.cache + , element = layui.element + , slider = layui.slider + , laydate = layui.laydate + , rate = layui.rate + , colorpicker = layui.colorpicker + , carousel = layui.carousel + , form = layui.form + , upload = layui.upload + , layedit = layui.layedit + , flow = layui.flow + , formField = layui.formField + , staticField = layui.staticFieldView + , hint = layui.hint + , numberInput = layui.numberInput + , iconPicker = layui.iconPicker + , cron = layui.cron + , labelGeneration = layui.labelGeneration + , files = [] + , images = [] + , iceEditorObjects = {} + , labelGenerationObjects = {} + , signObjects = {} + //模块名称常量 + , MOD_NAME = 'formDesigner' + //外部接口 + , formDesigner = { + index: layui.formDesigner ? (layui.formDesigner.index + 10000) : 0 + //设置全局项 + , set: function (options) { + var that = this; + that.config = $.extend({} + , that.config + , options); + return that; + } + //事件监听 + , on: function (events + , callback) { + return layui.onevent.call(this + , MOD_NAME + , events + , callback); + } + } + , thisIns = function () { + var that = this + , options = that.config; + return { + reload: function (options) { + that.reload.call(that + , options); + }, getOptions: function () { + return options || null; + }, getData: function () { + return options.data || null; + }, geticeEditorObjects: function () { + return iceEditorObjects || null; + }, getImages: function () { + return images || null; + }, getFiles: function () { + return files || null; + }, getFormData: function () { + return that.getFormData() || null; + }, setFormData: function (json) { + return that.setFormData(json) || null; + }, globalDisable: function () { + return that.globalDisable() || null; + }, globalNoDisable: function () { + return that.globalNoDisable() || null; + }, + } + } + , getThisInsConfig = function (id) { + var config = thisIns.config[id]; + if (!config) { + hint.error('在表实例中找不到ID选项'); + } + return config || null; + } + , Class = function (options) { + var that = this; + that.index = ++formDesigner.index; //增加实例,index 也是要增加JSON.stringify(options.data, null, 4) + that.config = $.extend({} + , that.config + , formDesigner.config + , options); + that.render(); + }; + + + /* 组件定义 */ + Class.prototype.components = { + input: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + if (json.expression !== null && json.expression !== undefined) { + if (json.expression !== '') { + _required = _required + '|' + json.expression; + } + } + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _readonly, _disabled, _required, _disabledClass); + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'required' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + if (json.expression !== null && json.expression !== undefined) { + if (json.expression !== '') { + _required = 'required' + '|' + json.expression; + } + } + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + $label.css("width", json.labelWidth); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + } + var _html = ''; + //重绘设计区改id下的所有元素 + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _readonly, _disabled, _required, _disabledClass); + $block.append(_html); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.input)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + if (json.expression !== null && json.expression !== undefined) { + if (json.expression !== '') { + _required = _required + '|' + json.expression; + } + } + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _readonly, _disabled, _required, _disabledClass); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + blockquote: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += '
{1}
' + .format(json.id + json.tag, json.defaultValue ? json.defaultValue : '', json.width, json.colorSelection); + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + json.tag); + $block.css("width", "calc({0} - 35px)".format(json.width)); + $block.css("border-left", "5px solid {0}".format(json.colorSelection)); + $block.html(json.defaultValue); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.blockquote)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += '
{1}
' + .format(json.id + json.tag, json.defaultValue ? json.defaultValue : '', json.width, json.colorSelection); + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + spacing: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += '
' + .format(json.id + json.tag, json.whiteSpace); + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + json.tag); + $block.css("height", "{0}px".format(json.whiteSpace)); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.spacing)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += '
' + .format(json.id + json.tag, json.whiteSpace); + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + line: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += '
'.format(json.id + json.tag, json.colorSelection, json.width); + if (json.defaultValue) { + _html += '{0}'.format(json.defaultValue); + } + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + json.tag); + $block.css("width", json.width); + $block.css("border-color", json.colorSelection); + $block.empty(); + if (json.defaultValue) { + $block.append('{0}'.format(json.defaultValue)); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.line)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected, json.index); + _html += '
'.format(json.id + json.tag, json.colorSelection, json.width); + if (json.defaultValue) { + _html += '{0}'.format(json.defaultValue); + } + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + password: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'lay-verify="required"' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _readonly, _disabled, _required, _disabledClass); + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'lay-verify="required"' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + $label.css("width", json.labelWidth); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + } + var _html = ''; + //重绘设计区改id下的所有元素 + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _readonly, _disabled, _required, _disabledClass); + $block.append(_html); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.password)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'lay-verify="required"' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _readonly, _disabled, _required, _disabledClass); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + textarea: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'lay-verify="required"' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.width, _hideLabel); + _html += '
'.format(json.width); + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _disabled, _required, _disabledClass, _readonly); + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'lay-verify="required"' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + if (json.required) { + $label.append('*'); + } + $block.empty(); + $label.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + } else { + $label.css("display", "block"); + } + var _html = ''; + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _disabled, _required, _disabledClass, _readonly); + $('#' + json.id + ' .layui-input-block').append(_html); + $label.css({ width: '{0}'.format(json.width) }); + $block.css({ width: '{0}'.format(json.width) }); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.textarea)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'lay-verify="required"' : ''; + var _readonly = json.readonly ? 'readonly=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.width, _hideLabel); + _html += '
'.format(json.width); + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _disabled, _required, _disabledClass, _readonly); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + select: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.id); + } else { + _html += '
'.format(json.id, json.labelWidth); + } + _html += '' + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'required' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + var _html = ''; + _html += '' + $('#' + json.id + ' .layui-input-block').append(_html); + $label.css("width", json.labelWidth); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + form.render('select', json.id); + $('#' + json.id + ' .layui-input-block div.layui-unselect.layui-form-select').css({ width: '{0}'.format(json.width) }); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.select)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.id); + } else { + _html += '
'.format(json.id, json.labelWidth); + } + _html += '' + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + radio: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel, json.required ? '*' : ''); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled); + } else { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled); + } + } + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'required' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + $label.css("width", json.labelWidth); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + var _html = ''; + //重绘设计区改id下的所有元素 + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled); + } else { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled); + } + } + $block.append(_html); + form.render('radio'); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.radio)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled); + } else { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled); + } + } + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + checkbox: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'lay-verify="otherReq"' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled, _required); + } else { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled, _required); + } + } + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'lay-verify="otherReq"' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + var _html = ''; + //重绘设计区改id下的所有元素 + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled, _required); + } else { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled, _required); + } + } + $block.append(_html); + $label.css("width", json.labelWidth); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + } + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + form.render('checkbox'); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.checkbox)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _required = json.required ? 'lay-verify="otherReq"' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled, _required); + } else { + _html += ''.format(json.id, json.options[i].value, json.options[i].text, _disabled, _required); + } + } + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + switch: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width, json.labelWidth); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += ''.format(json.id, _disabled, _disabledClass, json.switchValue ? 'checked' : ''); + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + var _html = ''; + _html += ''.format(json.tag, _disabled, _disabledClass, json.switchValue ? 'checked' : ''); + $block.append(_html); + $label.append(json.label + ":"); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css("border", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + $label.css("width", json.labelWidth); + form.render('checkbox'); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.switch)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width, json.labelWidth); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += ''.format(json.id, _disabled, _disabledClass, json.switchValue ? 'checked' : ''); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + slider: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += '
'.format(json.tag + json.id); + _html += ''.format(json.id, json.defaultValue); + _html += '
'; + _html += '
'; + elem.append(_html); + slider.render({ + elem: '#' + json.tag + json.id, + value: json.defaultValue, //初始值 + min: json.minValue, + max: json.maxValue, + step: json.stepValue, + disabled: json.disabled, + input: json.isInput, + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $label.empty(); + $label.css("width", json.labelWidth); + $label.append(json.label + ":"); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + slider.render({ + elem: '#' + json.tag + json.id, + value: json.defaultValue, //初始值 + min: json.minValue, + max: json.maxValue, + step: json.stepValue, + disabled: json.disabled, + input: json.isInput, + }); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.slider)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += '
'.format(json.tag + json.id); + _html += ''.format(json.id, json.defaultValue); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['slider.render({', + , 'elem: "#' + json.tag + json.id + '" ,' + , 'value: ' + json.defaultValue + ',' + , 'min: ' + json.minValue + ',' + , 'max: ' + json.maxValue + ',' + , 'step: ' + json.stepValue + ',' + , 'input:' + json.isInput + ',' + , 'change: function(value){' + , '$("#' + json.id + '").find("input[name="' + json.id + '"]").val(value);' + , ' }' + , '});'].join(''); + return scriptHtmlCode; + } + }, + date: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += ''.format(json.tag + json.id, _disabledClass, _disabledStyle, _required); + _html += '
'; + _html += '
'; + elem.append(_html); + laydate.render({ + elem: '#' + json.tag + json.id, + btns: ['confirm'], + type: json.dateType, + format: json.dateFormat, + value: json.dateDefaultValue, + min: json.dataMinValue, + max: json.dataMaxValue, + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + $label.css("width", json.labelWidth); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + var _html = ''.format(json.tag + json.id, _disabledClass, _disabledStyle, _required); + $block.append(_html); + laydate.render({ + elem: '#' + json.tag + json.id, + btns: ['confirm'], + type: json.dateType, + format: json.dateFormat, + value: json.dateDefaultValue, + min: json.dataMinValue, + max: json.dataMaxValue, + }); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.date)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += ''.format(json.tag + json.id, _disabledClass, _disabledStyle, _required); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['laydate.render({' + , 'elem: "#' + json.tag + json.id + '" ,' + , 'type:"' + json.datetype + '",' + , 'format:"' + json.dateformat + '",' + , 'value:"' + json.dateDefaultValue + '",' + , 'min:"' + json.dataMinValue + '",' + , 'max:"' + json.dataMaxValue + '"});'].join(''); + return scriptHtmlCode; + } + }, + rate: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _readonly = json.readonly ? 'readonly=""' : ''; + var _required = json.required ? 'required=""' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.labelWidth, _hideLabel, json.required ? '*' : ''); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth + 30); + } + _html += '
'.format(json.tag + json.id); + _html += ''.format(json.id, json.defaultValue); + _html += '
'; + _html += '
'; + elem.append(_html); + rate.render({ + elem: '#' + json.tag + json.id, + value: json.defaultValue, + text: json.text, + length: json.rateLength, + half: json.half, + readonly: json.readonly, + theme: json.colorSelection, + choose: function (value) { + $("#" + json.id).find("input[name=" + json.id + "]").val(value); + } + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _required = json.required ? 'required' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + + $label.empty(); + + if (json.required) { + $label.append('*'); + } + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth + 30); + } + $label.append(json.label + ":"); + + rate.render({ + elem: '#' + json.tag + json.id, + value: json.defaultValue, + text: json.text, + length: json.rateLength, + half: json.half, + readonly: json.readonly, + theme: json.colorSelection, + choose: function (value) { + $("#" + json.id).find("input[name=" + json.id + "]").val(value); + } + }); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.rate)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth + 30); + } + _html += ''.format(json.tag + json.id, _disabledClass, _disabledStyle, _required); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['rate.render({' + , 'elem: "#' + json.tag + json.id + '" ,' + , 'value: ' + json.defaultValue + ',' + , 'text: ' + json.text + ',' + , 'length: ' + json.rateLength + ',' + , 'half: ' + json.half + ',' + , 'readonly: ' + json.readonly + ',' + , 'theme: ' + json.colorSelection + ',' + , 'choose: function(value){' + , '$("#' + json.id + '").find("input[name="' + json.id + '"]").val(value);' + , '}' + , '});'].join(''); + return scriptHtmlCode; + } + }, + carousel: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += '';//end for class=layui-carousel + _html += '
'; + elem.append(_html); + carousel.render({ + elem: '#' + json.tag + json.id, + width: json.width,//设置容器宽度 + height: json.height,//设置容器宽度 + arrow: json.arrow, //始终显示箭头 + index: json.startIndex, + interval: json.interval, + anim: json.anim, + autoplay: json.autoplay, + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + $('#' + json.tag + json.id).remove(); + var _html = ''; + _html += '';//end for class=layui-carousel + $('#' + json.id).append(_html); + carousel.render({ + elem: '#' + json.tag + json.id, + width: json.width,//设置容器宽度 + height: json.height,//设置容器宽度 + arrow: json.arrow, //始终显示箭头 + index: json.startIndex, + interval: json.interval, + anim: json.anim, + autoplay: json.autoplay + //anim: 'updown' //切换动画方式 + }); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.carousel)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += '';//end for class=layui-carousel + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['carousel.render({' + , 'elem: "#' + json.tag + json.id + '" ' + , ',width: "' + json.width + '"' + , ',height: "' + json.height + '"' + , ',arrow: "' + json.arrow + '"' + , ',interval: "' + json.interval + '"' + , ',anim: "' + json.anim + '"' + , ',autoplay: "' + json.autoplay + '"' + , '});'].join(''); + return scriptHtmlCode; + } + }, + colorpicker: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + if (json.disabled) { + _html += '
'; + } + _html += '
'.format(json.tag + json.id); + _html += ''.format(json.id, json.defaultValue); + _html += '
'; + _html += '
'; + elem.append(_html); + colorpicker.render({ + elem: '#' + json.tag + json.id + , color: json.defaultValue + , format: 'rgb' + , predefine: true + , alpha: true + , done: function (color) { + $("#" + json.id).find("input[name=" + json.id + "]").val(color); + } + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $label.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + } $label.css("width", json.labelWidth); + $label.append(json.label + ":"); + if (json.disabled) { + $("#" + json.id).find(".layui-input-block").append('
'); + } else { + $("#" + json.id).find(".iceEditor-disabled").remove(); + } + colorpicker.render({ + elem: '#' + json.tag + json.id + , color: json.defaultValue + , format: 'rgb' + , predefine: true + , alpha: true + , done: function (color) { + $("#" + json.id).find("input[name=" + json.id + "]").val(color); + } + }); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.colorpicker)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + if (json.disabled) { + _html += '
'; + } + _html += '
'.format(json.tag + json.id); + _html += ''.format(json.id, json.defaultValue); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['colorpicker.render({' + , 'elem: "#' + json.tag + json.id + '"' + , ',format: \'rgb\'' + , ',predefine: true' + , ',alpha: true' + , ',done: function (color) {' + , '$("#' + json.id + '").find("input[name="' + json.id + '"]").val(color);' + , '}' + , '});'].join(''); + return scriptHtmlCode; + } + }, + image: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : ''); + _html += '
'; + _html += '
'; + // _html += ''.format(json.tag + json.id); + _html += '
预览图:'; + _html += '
'.format(json.id); + _html += '
'; + _html += '
'; + _html += '
'; + _html += '
'; + _html += '
'; + elem.append(_html); + if (that.config.viewOrDesign) { + var data = { "select": json.tag + json.id, "uploadUrl": json.uploadUrl }; + images.push(data); + } + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _required = json.required ? 'required' : ''; + var $label = $('#' + json.id + ' .layui-form-label'); + $label.empty(); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.image)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label); + _html += '
'; + _html += '
'; + _html += ''.format(json.tag + json.id); + _html += '
预览图:'; + _html += '
'.format(json.id); + _html += '
'; + _html += '
'; + _html += '
'; + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['upload.render({' + , 'elem: "#' + json.tag + json.id + '" ' + , ', url: "' + json.uploadUrl + '"' + , ', multiple: true' + , ', before: function (obj) {' + , 'layer.msg("图片上传中...", {' + , 'icon: 16,' + , 'shade: 0.01,' + , 'time: 0' + , '})' + , '}' + , ', done: function (res) {' + , 'layer.close(layer.msg());' + , '$("#uploader-list-' + json.id + '").append(' + , '\'
' + , '
\'+ res.data.title+\'
' + , '
\'' + , ');' + , '}' + , '});'].join(''); + return scriptHtmlCode; + } + }, + file: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : ''); + _html += '
'; + _html += '
'; + // _html += ' '.format(json.tag + json.id); + _html += '
'; + _html += ''; + _html += ''; + _html += '
文件名大小上传进度操作
'.format(json.id); + // _html += ''.format(json.id); + _html += '
'; + _html += ''; + _html += '
'; + _html += '
'; + _html += '
'; + elem.append(_html); + if (that.config.viewOrDesign) { + var data = { "select": json.tag + json.id, "uploadUrl": json.uploadUrl }; + files.push(data); + } + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _required = json.required ? 'required' : ''; + var $label = $('#' + json.id + ' .layui-form-label'); + $label.empty(); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.file)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label); + _html += '
'; + _html += '
'; + _html += ' '.format(json.tag + json.id); + _html += '
'; + _html += ''; + _html += ''; + _html += '
文件名大小上传进度操作
'.format(json.id); + // _html += ''.format(json.id); + _html += '
'; + _html += ''; + _html += '
'; + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['upload.render({' + , 'elem: "#' + json.tag + json.id + '" ' + , ', url: "' + json.uploadUrl + '"' + , ' ,elemList: $("#list-' + json.id + '")' + , ',accept: "file"' + , ',multiple: true' + , ',number: 3' + , ',auto: false' + , ',bindAction: "#listAction-' + json.id + '"' + , ',choose: function(obj){' + , 'var that = this;' + , 'var files = this.files = obj.pushFile();' + , 'obj.preview(function(index, file, result){' + , 'var tr = $([""' + , ',""+ file.name +""' + , ',""+ (file.size/1014).toFixed(1) +"kb"' + , ',"
"' + , ',"","","",""' + , ',""].join(""));' + , 'tr.find(".demo-reload").on("click", function(){obj.upload(index, file);});' + , 'tr.find(".demo-delete").on("click", function(){delete files[index];tr.remove();uploadListIns.config.elem.next()[0].value = ""; });' + , 'that.elemList.append(tr);' + , 'element.render("progress");}' + , ',done: function(res, index, upload)' + , '{var that = this;if(res.code == 0){var tr = that.elemList.find("tr#upload-"+ index),tds = tr.children();tds.eq(3).html("");delete this.files[index];return;}this.error(index, upload);}' + , ',allDone: function(obj){console.log(obj)}' + , ',error: function(index, upload){var that = this;var tr = that.elemList.find("tr#upload-"+ index),' + , 'tds = tr.children();tds.eq(3).find(".demo-reload").removeClass("layui-hide");}' + , ',progress: function(n, elem, e, index){element.progress("progress-demo-"+ index, n + "%");}' + , '});'].join(''); + return scriptHtmlCode; + } + }, + dateRange: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += '
'; + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + _html += '
'.format(json.tag + json.id, _disabledStyle); + _html += '
'; + _html += ''.format(json.tag + json.id, _disabledClass, json.id, _required); + _html += '
'; + _html += '
-
'; + _html += '
'; + _html += ''.format(json.tag + json.id, _disabledClass, json.id, _required); + _html += '
'; + _html += '
'; + _html += '
'; + _html += '
'; + elem.append(_html); + laydate.render({ + elem: '#' + json.tag + json.id, + type: json.dateType, + format: json.dateFormat, + min: json.dataMinValue, + max: json.dataMaxValue, + range: ['#start-' + json.tag + json.id, '#end-' + json.tag + json.id] + }); + if (json.dateRangeDefaultValue !== null && json.dateRangeDefaultValue !== "" + && json.dateRangeDefaultValue !== undefined) { + var split = json.dateRangeDefaultValue.split(" - "); + $('#start-' + json.tag + json.id).val(split[0]); + $('#end-' + json.tag + json.id).val(split[1]); + } + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'; + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + _html += '
'.format(json.tag + json.id, _disabledStyle); + _html += '
'; + _html += ''.format(json.tag + json.id, _disabledClass, json.id, _required); + _html += '
'; + _html += '
-
'; + _html += '
'; + _html += ''.format(json.tag + json.id, _disabledClass, json.id, _required); + _html += '
'; + _html += '
'; + _html += '
'; + $('#' + json.id + ' .layui-inline').remove(); + $('#' + json.id).append(_html); + laydate.render({ + elem: '#' + json.tag + json.id, + type: json.dateType, + format: json.dateFormat, + //value: item.dateDefaultValue, + min: json.dataMinValue, + max: json.dataMaxValue, + range: ['#start-' + json.tag + json.id, '#end-' + json.tag + json.id] + }); + if (json.dateRangeDefaultValue !== null && json.dateRangeDefaultValue !== "" + && json.dateRangeDefaultValue !== undefined) { + var split = json.dateRangeDefaultValue.split(" - "); + $('#start-' + json.tag + json.id).val(split[0]); + $('#end-' + json.tag + json.id).val(split[1]); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.dateRange)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += '
'; + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + _html += '
'.format(json.tag + json.id, _disabledStyle); + _html += '
'; + _html += ''.format(json.tag + json.id, _disabledClass, json.id, _required); + _html += '
'; + _html += '
-
'; + _html += '
'; + _html += ''.format(json.tag + json.id, _disabledClass, json.id, _required); + _html += '
'; + _html += '
'; + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['laydate.render({' + , 'elem:"#' + json.tag + json.id + '",' + , 'type:' + json.datetype + ',' + , 'format:' + json.dateformat + '' + , 'min:' + json.dataMinValue + '' + , 'max:' + json.dataMaxValue + '' + , 'range:["#start-' + json.tag + json.id + '", "#end-' + json.tag + json.id + '"]' + , '});'].join(''); + return scriptHtmlCode; + } + }, + bottom: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _coustomCss = ""; + if (json.buttonSize === "layui-btn-lg") { + _coustomCss = "custom-lg"; + } + if (json.buttonSize === "") { + _coustomCss = "custom-zc"; + } + if (json.buttonSize === "layui-btn-sm") { + _coustomCss = "custom-sm"; + } + if (json.buttonSize === "layui-btn-xs") { + _coustomCss = "custom-xs"; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + if (!json.hideLabel) { + _html += ''.format(json.label, json.labelWidth); + } + _html += '
'; + if (json.disabled) { + _html += ''.format(json.id + json.tag, json.buttonSize, _coustomCss, json.buttonIcon, json.buttonVlaue); + } else { + _html += ''.format(json.id + json.tag, json.buttonSize, json.buttonType, _coustomCss, json.buttonIcon, json.buttonVlaue); + } + _html += '
'; + _html += '
'; + elem.append(_html); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + if (json.hideLabel) { + $label.remove(); + $block.css("margin-left", "0px"); + } else { + if ($('#' + json.id).find("label").length === 0) { + $('#' + json.id).prepend(''.format(json.label, json.labelWidth)); + } else { + $label.css("width", json.labelWidth + "px"); + } + $label.empty(); + $label.append(json.label + ":"); + } + $block.empty(); + var _html = ''; + var _coustomCss = ""; + if (json.buttonSize === "layui-btn-lg") { + _coustomCss = "custom-lg"; + } + if (json.buttonSize === "") { + _coustomCss = "custom-zc"; + } + if (json.buttonSize === "layui-btn-sm") { + _coustomCss = "custom-sm"; + } + if (json.buttonSize === "layui-btn-xs") { + _coustomCss = "custom-xs"; + } + //重绘设计区改id下的所有元素 + if (json.disabled) { + _html += ''.format(json.id + json.tag, json.buttonSize, _coustomCss, json.buttonIcon, json.buttonVlaue); + } else { + _html += ''.format(json.id + json.tag, json.buttonSize, json.buttonType, _coustomCss, json.buttonIcon, json.buttonVlaue); + } + $block.append(_html); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.bottom)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _coustomCss = ""; + if (json.buttonSize === "layui-btn-lg") { + _coustomCss = "custom-lg"; + } + if (json.buttonSize === "") { + _coustomCss = "custom-zc"; + } + if (json.buttonSize === "layui-btn-sm") { + _coustomCss = "custom-sm"; + } + if (json.buttonSize === "layui-btn-xs") { + _coustomCss = "custom-xs"; + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + if (!json.hideLabel) { + _html += ''.format(json.label, json.labelWidth); + } + _html += '
'; + if (json.disabled) { + _html += ''.format(json.id + json.tag, json.buttonSize, _coustomCss, json.buttonIcon, json.buttonVlaue); + } else { + _html += ''.format(json.id + json.tag, json.buttonSize, json.buttonType, _coustomCss, json.buttonIcon, json.buttonVlaue); + } + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + numberInput: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '0', json.width, json.placeholder, _disabled, _disabledClass, json.minValue, json.maxValue, json.stepValue, json.tag + json.id); + _html += '
'; + _html += '
'; + elem.append(_html); + //定义初始值 + numberInput.render({ + elem: '#' + json.tag + json.id + }); + var _width = json.width.replace(/[^\d]/g, ''); + if ('' != _width) { + _width = 100 - parseInt(_width); + } + $('#' + json.id + ' .layui-input-block .layui-number-input-btn').css("right", _width + "%"); + if (json.disabled) { + $('#' + json.id + ' .layui-input-block .layui-number-input-btn').css("z-index", "-1"); + } + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + $label.css("width", json.labelWidth); + $label.append(json.label + ":"); + var _html = ''; + //重绘设计区改id下的所有元素 + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '0', json.width, json.placeholder, _disabled, _disabledClass, json.minValue, json.maxValue, json.stepValue, json.tag + json.id); + $block.append(_html); + numberInput.render({ + elem: '#' + json.tag + json.id + }); + var _width = json.width.replace(/[^\d]/g, ''); + if ('' != _width) { + _width = 100 - parseInt(_width); + } + $('#' + json.id + ' .layui-input-block .layui-number-input-btn').css("right", _width + "%"); + if (json.disabled) { + $('#' + json.id + ' .layui-input-block .layui-number-input-btn').css("z-index", "-1"); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.numberInput)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '0', json.width, json.placeholder, _disabled, _disabledClass, json.minValue, json.maxValue, json.stepValue, json.tag + json.id); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += [' numberInput.render({' + , 'elem:"#' + json.tag + json.id + '"' + , '});var _width = ' + json.width.replace(/[^\d]/g, '') + ';' + , 'if(""!=_width){_width = 100 - parseInt(_width);}' + , '$("#' + json.id + ' .layui-input-block .layui-number-input-btn").css("right",_width + "%");' + , 'if (item.disabled) { $("#' + json.id + ' .layui-input-block .layui-number-input-btn").css("z-index","-1");}'].join(''); + return scriptHtmlCode; + } + }, + iconPicker: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + if (json.disabled) { + _html += '
'; + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _disabled, _disabledClass, json.tag + json.id); + _html += '
'; + _html += '
'; + elem.append(_html); + iconPicker.render({ + // 选择器,推荐使用input + elem: '#' + json.tag + json.id, + // 数据类型:fontClass/unicode,推荐使用fontClass + type: 'fontClass', + // 是否开启搜索:true/false,默认true + search: json.iconPickerSearch, + // 是否开启分页:true/false,默认true + page: json.iconPickerPage, + // 每页显示数量,默认12 + limit: json.iconPickerLimit, + // 每个图标格子的宽度:'43px'或'20%' + cellWidth: json.iconPickerCellWidth, + // 点击回调 + click: function (data) { + //console.log(data); + }, + // 渲染成功后的回调 + success: function (d) { + //console.log(d); + } + }); + iconPicker.checkIcon(json.tag + json.id, ''); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $label.empty(); + $block.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + } + $label.css("width", json.labelWidth); + $label.append(json.label + ":"); + var _html = ''; + //重绘设计区改id下的所有元素 + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _disabled, _disabledClass, json.tag + json.id); + $('#' + json.id + ' .layui-input-block').append(_html); + iconPicker.render({ + // 选择器,推荐使用input + elem: '#' + json.tag + json.id, + // 数据类型:fontClass/unicode,推荐使用fontClass + type: 'fontClass', + // 是否开启搜索:true/false,默认true + search: json.iconPickerSearch, + // 是否开启分页:true/false,默认true + page: json.iconPickerPage, + // 每页显示数量,默认12 + limit: json.iconPickerLimit, + // 每个图标格子的宽度:'43px'或'20%' + cellWidth: json.iconPickerCellWidth, + // 点击回调 + click: function (data) { + //console.log(data); + }, + // 渲染成功后的回调 + success: function (d) { + //console.log(d); + } + }); + iconPicker.checkIcon(json.tag + json.id, json.defaultValue); + if (json.disabled) { + $("#" + json.id).find(".layui-input-block").append('
'); + } else { + $("#" + json.id).find(".iceEditor-disabled").remove(); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.iconPicker)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + if (json.disabled) { + _html += '
'; + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.width, json.placeholder, _disabled, _disabledClass, json.tag + json.id); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['iconPicker.render({' + , 'elem:"#' + json.tag + json.id + '",' + , 'type:"fontClass",' + , 'search:' + json.iconPickerSearch + '' + , 'page:' + json.iconPickerPage + '' + , 'limit:' + json.iconPickerLimit + '' + , 'cellWidth:' + json.iconPickerCellWidth + '' + , ' click: function (data) {},' + , 'success: function(d) {}' + , '});' + , 'iconPicker.checkIcon(' + json.tag + json.id + ',"");'].join(''); + return scriptHtmlCode; + } + }, + cron: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _width = json.width.replace(/[^\d]/g, ''); + if ('' != _width) { + _width = 100 - parseInt(_width); + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.placeholder, _disabled, _disabledClass, json.tag + json.id, _required); + if (!json.disabled) { + _html += ''.format(json.tag + json.id); + } + _html += '
'; + _html += '
'; + elem.append(_html); + cron.render({ + elem: "#" + json.tag + json.id + "-button", // 绑定元素 + url: json.cronUrl, // 获取最近运行时间的接口 + done: function (cronStr) { + $("#" + json.tag + json.id).val(cronStr); + }, + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _required = json.required ? 'required' : ''; + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + $label.css("width", json.labelWidth); + if (json.required) { + $label.append('*'); + } + $label.append(json.label + ":"); + var _html = ''; + //重绘设计区改id下的所有元素 + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.placeholder, _disabled, _disabledClass, json.tag + json.id, _required); + if (!json.disabled) { + var _width = json.width.replace(/[^\d]/g, ''); + if ('' != _width) { + _width = 100 - parseInt(_width); + } + _html += ''.format(json.tag + json.id); + $block.append(_html); + cron.render({ + elem: "#" + json.tag + json.id + "-button", // 绑定元素 + url: json.cronUrl, // 获取最近运行时间的接口 + done: function (cronStr) { + $("#" + json.tag + json.id).val(cronStr); + }, + }); + } else { + $block.append(_html); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + var _json = JSON.parse(JSON.stringify(formField.components.cron)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _disabled = json.disabled ? 'disabled=""' : ''; + var _disabledClass = json.disabled ? ' layui-disabled' : ''; + var _required = json.required ? 'required' : ''; + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _width = json.width.replace(/[^\d]/g, ''); + if ('' != _width) { + _width = 100 - parseInt(_width); + } + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.required ? 'layui-form-required' : '', json.label, json.required ? '*' : '', json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'.format(json.width); + } else { + _html += '
'.format(json.width, json.labelWidth); + } + _html += '' + .format(json.id, json.defaultValue ? json.defaultValue : '', json.placeholder, _disabled, _disabledClass, json.tag + json.id, _required); + if (!json.disabled) { + _html += ''.format(json.tag + json.id); + } + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['cron.render({' + , 'elem:"#' + json.tag + json.id + '-button",' + , 'url:' + json.cronUrl + ',' + , 'done: function (cronStr) {' + , '$("#' + json.tag + json.id + '").val(cronStr);' + , '},' + , '});'].join(''); + return scriptHtmlCode; + } + }, + sign: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + if (json.disabled) { + _html += ''.format(json.id + json.tag, json.buttonIcon, json.buttonVlaue); + } else { + _html += ''.format(json.id + json.tag, json.buttonIcon, json.buttonVlaue); + } + if (json.data !== "") { + _html += '
'.format(json.data); + } + _html += '
'; + _html += '
'; + elem.append(_html); + $('#' + json.id + json.tag).click(function () { + layer.open({ + type: 2, + title: '手写签名', + btn: ['保存', '关闭'], //可以无限个按钮 + yes: function (index, layero) { + //do something + var iframe = window['layui-layer-iframe' + index]; + var data = iframe.getCanvasData(); + json.data = data; + that.components[json.tag].update(json, that); + layer.close(index); //如果设定了yes回调,需进行手工关闭 + }, + btn2: function (index, layero) { + layer.close(index); + }, + closeBtn: 1, //不显示关闭按钮 + shade: [0], + area: ['60%', '60%'], + offset: 'auto', //右下角弹出 + anim: 2, + content: ['./handwrittenSignature.html', 'yes'], //iframe的url,no代表不显示滚动条 + success: function (layero, index) { + } + }); + }); + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id + ' .layui-input-block'); + var $label = $('#' + json.id + ' .layui-form-label'); + $block.empty(); + $label.empty(); + if (json.hideLabel) { + $label.css("display", "none"); + $block.css("margin-left", "0px"); + $block.css({ width: 'calc({0})'.format(json.width) }); + } else { + $label.css("display", "block"); + $block.css("margin-left", json.labelWidth); + $block.css({ width: 'calc({0} - {1}px)'.format(json.width, json.labelWidth) }); + } + $label.css("width", json.labelWidth); + $label.append(json.label + ":"); + var _html = ''; + //重绘设计区改id下的所有元素 + if (json.disabled) { + _html += ''.format(json.id + json.tag, json.buttonIcon, json.buttonVlaue); + } else { + _html += ''.format(json.id + json.tag, json.buttonIcon, json.buttonVlaue); + } + if (json.data !== "") { + _html += '
'.format(json.data); + } + $block.append(_html); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.sign)); + _json.id = id; + _json.index = index; + return _json; + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + _html += ''.format(json.label, json.labelWidth, _hideLabel); + if (json.hideLabel) { + _html += '
'; + } else { + _html += '
'.format(json.labelWidth); + } + if (json.disabled) { + _html += ''.format(json.id + json.tag, json.buttonIcon, json.buttonVlaue); + } else { + _html += ''.format(json.id + json.tag, json.buttonIcon, json.buttonVlaue); + } + if (json.data !== "") { + _html += '
'.format(json.data); + } + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + return scriptHtmlCode; + } + }, + editor: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 实例对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index, json.width); + _html += ''.format(json.label, json.width, _hideLabel); + _html += '
'; + _html += '
'.format(json.tag + json.id); + _html += '
'; + _html += '
'; + elem.append(_html); + var e = new ice.editor(json.tag + json.id); + e.width = json.width; //宽度 + e.height = json.height; //高度 + e.uploadUrl = json.uploadUrl; //上传文件路径 + e.disabled = json.disabled; + e.menu = json.menu; + e.create(); + e.setValue(json.defaultValue); + if (that.config.viewOrDesign) { + iceEditorObjects[json.id] = e; + } + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $label = $('#' + json.id + ' .layui-form-label'); + $label.empty(); + $label.css("width", json.width); + $label.append(json.label + ":"); + if (json.hideLabel) { + $label.css("display", "none"); + } else { + $label.css("display", "block"); + } + if (that.config.viewOrDesign) { + var e = iceEditorObjects[json.id]; + e.setValue(json.defaultValue); + } else { + var $block = $('#' + json.id + ' .layui-input-block'); + $block.empty(); + var _html = '
'.format(json.tag + json.id); + $block.append(_html); + var e = new ice.editor(json.tag + json.id); + e.width = json.width; //宽度 + e.height = json.height; //高度 + e.uploadUrl = json.uploadUrl; //上传文件路径 + e.disabled = json.disabled; + e.menu = json.menu; + e.create(); + e.setValue(json.defaultValue); + } + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID + var _json = JSON.parse(JSON.stringify(formField.components.editor)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _hideLabel = json.hideLabel ? 'display: none;' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index, json.width); + _html += ''.format(json.label, json.width, _hideLabel); + _html += '
'; + _html += '
'.format(json.tag + json.id); + _html += '
'; + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + var scriptHtmlCode = ''; + scriptHtmlCode += ['var e = new ice.editor(' + json.tag + json.id + ');' + , 'e.width=' + json.width + '; //宽度' + , 'e.height=' + json.height + '; //高度' + , 'e.uploadUrl=' + json.uploadUrl + '; //上传文件路径' + , 'e.disabled=' + json.disabled + ';' + , 'e.menu = ' + json.menu + ';' + , 'e.create();'].join(''); + return scriptHtmlCode; + } + }, + grid: { + /** + * 根据json对象生成html对象 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} elem 表单面板jquery对象 + * @param {object} that 当前实例模块对象 + * */ + render: function (json, selected, elem, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + var colClass = 'layui-col-md6'; + if (json.columns.length == 3) { + colClass = 'layui-col-md4'; + } else if (json.columns.length == 4) { + colClass = 'layui-col-md3'; + } + for (var i = 0; i < json.columns.length; i++) { + _html += '
'.format(i, json.index, colClass, json.id); + //some html + _html += '
'; + } + _html += '
'; + elem.append(_html); + that.bindGridSortEvent(json); + + }, + /** + * 根据json对象更新html对象 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + update: function (json, that) { + var $block = $('#' + json.id); + $block.empty(); + var colClass = 'layui-col-md6'; + if (json.columns.length == 3) { + colClass = 'layui-col-md4'; + } else if (json.columns.length == 4) { + colClass = 'layui-col-md3'; + } + var _html = ''; + for (var i = 0; i < json.columns.length; i++) { + _html += '
'.format(i, json.index, colClass, json.id); + //some html + _html += '
'; + } + $block.append(_html); + that.renderForm(); + }, + /** + * 根据components组件对象获取组件属性 + * @param {object} id 所属组件id + * @param {object} index 所属对象组件索引 + * @param {object} that 实例对象 + * */ + jsonData: function (id, index, that) { + //分配一个新的ID 默认是一个一行两列的布局对象 + var _json = JSON.parse(JSON.stringify(formField.components.grid)); + _json.id = id; + _json.index = index; + return _json; + + }, + /** + * 根据 json 对象显示对应的属性 + * @param {object} json 当前组件的json属性 + * @param {object} that 实例对象 + * */ + property: function (json, that) { + that.renderCommonProperty(json); //根据 json 对象获取对应的属性的html + that.initCommonProperty(json); //初始化 json 对象获取对应的属性 + }, + /** + * 根据json对象生成html文本 + * @param {object} json 当前组件的json属性 + * @param {boolean} selected 是否被选中 + * @param {object} that 实例对象 + * */ + generateHtml: function (json, selected, that) { + if (selected === undefined) { + selected = false; + } + var _selected = selected ? 'active' : ''; + var _html = '
'.format(json.id, json.tag, _selected ? 'active' : '', json.index); + var colClass = 'layui-col-md6'; + if (json.columns.length == 3) { + colClass = 'layui-col-md4'; + } else if (json.columns.length == 4) { + colClass = 'layui-col-md3'; + } + for (var i = 0; i < json.columns.length; i++) { + _html += '
'.format(i, json.index, colClass, json.id); + //some html + _html += '
'; + } + _html += '
'; + return _html; + }, + /** + * 根据json对象生成js文本 + * @param {object} json 变更后的json属性 + * @param {object} that 实例对象 + * */ + generateScript: function (json, that) { + return ''; + } + }, + } + + /* 初始化 json 对象获取对应的属性*/ + Class.prototype.initCommonProperty = function (json) { + var that = this + , options = that.config; + for (var key in json) { + if (key === 'index') { + continue; + } + switch (key) { + case 'id': + $('#id').click(function () { + //例子2 + layer.prompt({ + formType: 0, + value: options.selectItem.id, + title: '请输入更新后的ID', + }, function (value, index, elem) { + var _checkid = that.findJsonItem(options.data, value); + if (_checkid === undefined) { + var findJsonItem = that.findJsonItem(options.data, options.selectItem.id); + findJsonItem.id = value; + that.renderForm(); + } else { + //提示层 + layer.msg('ID已经存在'); + } + layer.close(index); + }); + }); + $('#id').mouseover(function () { + layer.tips('请点击修改id', '#id',); + }); + break; + case 'labelWidth': + //定义初始值 + slider.render({ + elem: '#labelWidth', + value: json.labelWidth, //初始值 + min: 80, + max: 300, + step: 1, + input: true, + change: function (value) { + json.labelWidth = value; + that.components[json.tag].update(json, that); + } + }); + break; + case 'width': + //定义初始值 + slider.render({ + elem: '#width', + value: json.width.replace("%", ""), //初始值 + min: 20, + max: 100, + step: 1, + input: true, + change: function (value) { + json.width = value + "%"; + that.components[json.tag].update(json, that); + } + }); + break; + case 'options': + var sortable = Sortable.create(document.getElementById(options.selectItem.tag), { + group: { + name: 'propertygroup', + }, + ghostClass: "ghost", + handle: '.select-option-drag', + dataIdAttr: 'data-index', + animation: 150, + onEnd: function (evt) { + if (options.selectItem === undefined) { + return; + } + var indexArray = sortable.toArray(); + var newJson = []; + for (var i = 0; i < indexArray.length; i++) { + newJson.push(options.selectItem.options[indexArray[i]]); + } + options.selectItem.options = newJson; + var $select = $('#' + options.selectItem.tag); + $select.empty(); + that.components[options.selectItem.tag].update(options.selectItem, that); + that.components[options.selectItem.tag].property(options.selectItem, that); + form.render('select'); + form.render('radio'); + form.render('checkbox'); + } + }); + that.addOptionEvent(json); + break; + case 'dataMaxValue': + laydate.render({ + elem: '#dataMaxValue' + json.tag + json.id, + format: 'yyyy-MM-dd', + btns: ['now', 'confirm'], + value: json.dataMaxValue, + done: function (value, date, endDate) { + json.dataMaxValue = value; + that.components[json.tag].update(json, that); + } + }); + break; + case 'dataMinValue': + laydate.render({ + elem: '#dataMinValue' + json.tag + json.id, + format: 'yyyy-MM-dd', + btns: ['now', 'confirm'], + value: json.dataMinValue, + done: function (value, date, endDate) { + json.dataMinValue = value; + that.components[json.tag].update(json, that); + } + }); + break; + case 'dateDefaultValue': + laydate.render({ + elem: '#dateDefaultValue' + json.tag + json.id, + type: json.dateType, + format: json.dateFormat, + value: json.dateDefaultValue, + done: function (value, date, endDate) { + json.dateDefaultValue = value; + that.components[json.tag].update(json, that); + } + }); + break; + case 'dateRangeDefaultValue': + laydate.render({ + elem: '#dateRangeDefaultValue' + json.tag + json.id, + type: json.dateType, + format: json.dateFormat, + value: json.dateRangeDefaultValue, + range: "-", + done: function (value, date, endDate) { + json.dateRangeDefaultValue = value; + that.components[json.tag].update(json, that); + } + }); + break; + case 'buttonIcon': + iconPicker.render({ + // 选择器,推荐使用input + elem: '#' + json.tag + json.id + "property", + // 数据类型:fontClass/unicode,推荐使用fontClass + type: 'fontClass', + // 是否开启搜索:true/false,默认true + search: true, + // 是否开启分页:true/false,默认true + page: true, + // 每页显示数量,默认12 + limit: 12, + // 每个图标格子的宽度:'43px'或'20%' + cellWidth: '43px', + // 点击回调 + click: function (data) { + json.buttonIcon = data.icon; + that.components[json.tag].update(json, that); + }, + // 渲染成功后的回调 + success: function (d) { + //console.log(d); + } + }); + break; + case 'whiteSpace': + slider.render({ + elem: '#' + json.tag + json.id + "property", + value: json.whiteSpace, //初始值 + min: 30, + max: 500, + step: 1, + input: true, + change: function (value) { + json.whiteSpace = value; + that.components[json.tag].update(json, that); + } + }); + break; + case 'colorSelection': + colorpicker.render({ + elem: '#' + json.tag + json.id + "property" + , color: json.colorSelection + , format: 'rgb' + , predefine: true + , alpha: true + , done: function (color) { + json.colorSelection = color; + that.components[json.tag].update(json, that); + } + }); + break; + case 'menu': + $('#menu').click(function () { + layer.open({ + type: 2, + title: '头部菜单', + btn: ['保存', '关闭'], //可以无限个按钮 + yes: function (index, layero) { + //do something + var iframe = window['layui-layer-iframe' + index]; + var checkData = iframe.getCheckData(); + json.menu = checkData; + that.components[json.tag].update(json, that); + layer.close(index); //如果设定了yes回调,需进行手工关闭 + }, + btn2: function (index, layero) { + layer.close(index); + }, + closeBtn: 1, //不显示关闭按钮 + shade: [0], + area: ['80%', '80%'], + offset: 'auto', //右下角弹出 + anim: 2, + content: ['./editorMenu.html', 'yes'], //iframe的url,no代表不显示滚动条 + success: function (layero, index) { + var iframe = window['layui-layer-iframe' + index]; + iframe.child(staticField.iceEditMenus) + } + }); + }); + break; + default: + break; + } + } + } + + /* 添加选项事件*/ + Class.prototype.addOptionEvent = function (json) { + var that = this + , options = that.config; + $('#select-option-add').on('click', function () { + //添加html + json.options.splice(json.options.length + 1, 0, { text: 'option', value: 'value', checked: false }); + var _htmloption = ''; + _htmloption += '
'.format(json.options.length - 1); + _htmloption += '
'; + if (json.tag === 'checkbox') { + _htmloption += ' '.format(json.tag); + } else { + _htmloption += ' '.format(json.tag); + } + _htmloption += '
'; + _htmloption += '
'; + _htmloption += ' '.format(json.tag, 'option'); + _htmloption += '
'; + _htmloption += '
'; + _htmloption += ' '.format(json.tag, 'value'); + _htmloption += '
'; + _htmloption += '
'; + _htmloption += ' '; + _htmloption += ' '; + _htmloption += '
'; + _htmloption += '
'; + $('#columnProperty .select-options').last().after(_htmloption); + //更新设计区节点 + that.components[json.tag].update(json, that); + if (json.tag === 'checkbox') { + form.render('checkbox'); + } else if (json.tag === 'radio' || json.tag == 'carousel') { + form.render('radio'); + } else if (json.tag == 'select') { + form.render('select'); + form.render('radio'); + } + }); + //委托监听先关闭在增加 click + $(document).off('click', '#columnProperty .select-option-delete').on('click', '#columnProperty .select-option-delete', function (e) { + e.preventDefault(); + e.stopPropagation(); + //从数据源 options.data 中删除节点 + if (json.options.length <= 1) { + layer.msg('已达到最低选项,不能继续删除'); + return; + } + var _index = $(this).closest('.layui-form-item')[0].dataset.index; + if (_index !== undefined) { + json.options.splice(_index, 1);//删除此节点 + } + var checkedDefual = true; + for (var i = 0; i < json.options.length; i++) { + if (json.options[i].checked) { + checkedDefual = false + } + } + if (checkedDefual) { + json.options[0].checked = true; + } + $('#' + json.tag).empty(); + var _html = ''; + for (var i = 0; i < json.options.length; i++) { + _html += '
'.format(i); + _html += '
'; + if (json.tag === 'checkbox') { + if (json.options[i].checked) { + _html += ' '.format(json.tag); + } else { + _html += ' '.format(json.tag); + } + } else { + if (json.options[i].checked) { + _html += ' '.format(json.tag); + } else { + _html += ' '.format(json.tag); + } + } + _html += '
'; + _html += '
'; + _html += ' '.format(json.tag, json.options[i].text); + _html += '
'; + _html += '
'; + _html += ' '.format(json.tag, json.options[i].value); + _html += '
'; + _html += '
'; + _html += ' '; + _html += ' '; + _html += '
'; + _html += '
'; + } + $('#' + json.tag).append(_html); + //更新设计区节点 + that.components[json.tag].update(json, that); + if (json.tag === 'checkbox') { + form.render('checkbox'); + } else if (json.tag === 'radio') { + form.render('radio'); + } else if (json.tag == 'select') { + form.render('select'); + form.render('radio'); + } + }); + } + + /* 根据 json 对象获取对应的属性的html*/ + Class.prototype.renderCommonProperty = function (json) { + $('#columnProperty').empty(); + var _html = ''; + for (var key in json) { + if (key === 'index') { + continue; + } + switch (key) { + case 'tag': + case 'uploadUrl': + case 'document': + case 'interval': + case 'cronUrl': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + if (key === 'tag') { + _html += ' ' + .format(key, json[key] == undefined ? '' : json[key]); + } else { + _html += ' ' + .format(key, json[key] == undefined ? '' : json[key]); + } + _html += '
'; + _html += '
'; + break; + case 'readonly': + var yes = "只读"; + var no = "可写"; + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' '.format(json[key] ? 'checked' : '', key, yes, no); + _html += '
'; + _html += '
'; + break; + case 'disabled': + case 'hideLabel': + var yes = "隐藏"; + var no = "显示"; + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' '.format(json[key] ? 'checked' : '', key, yes, no); + _html += '
'; + _html += '
'; + break; + case 'dimension': + var yes = "是"; + var no = "否"; + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' '.format(json[key] ? 'checked' : '', key, yes, no); + _html += '
'; + _html += '
'; + break; + case 'required': + var yes = "必填"; + var no = "可选"; + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' '.format(json[key] ? 'checked' : '', key, yes, no); + _html += '
'; + _html += '
'; + break; + case 'expression': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'fieldType': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'autoplay': + case 'iconPickerSearch': + case 'iconPickerPage': + case 'isInput': + var yes = "是"; + var no = "否"; + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' '.format(json[key] ? 'checked' : '', key, yes, no); + _html += '
'; + _html += '
'; + break; + case 'defaultValue': + case 'label': + case 'height': + case 'placeholder': + case 'document': + case 'minValue': + case 'maxValue': + case 'stepValue': + case 'rateLength': + case 'iconPickerLimit': + case 'iconPickerCellWidth': + case 'buttonVlaue': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' ' + .format(key, json[key] == undefined ? '' : json[key], staticField.lang[key]); + _html += '
'; + _html += '
'; + break; + case 'width': + case 'labelWidth': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '
'.format(key); + _html += ' ' + .format(key + "-value", '', staticField.lang[key]); + _html += '
'; + _html += '
'; + break; + case 'menu': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' ' + .format(key, '', staticField.lang[key]); + _html += '
'; + _html += '
'; + break; + case 'id': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' ' + .format(key, '', json[key]); + _html += '
'; + _html += '
'; + break; + case 'switchValue': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' ' + .format(key, json[key] ? 'checked' : ''); + _html += '
'; + _html += '
'; + break; + case 'dateType': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'dateFormat': + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'contents': + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' ' + //_html += ' ' + _html += '
'; + _html += '
'; + _html += '
'.format(json.tag); + //选项 + for (var i = 0; i < json.contents.length; i++) { + _html += '
'.format(i); + + _html += '
'; + _html += ' '.format(json.tag, json.contents[i]); + _html += '
'; + _html += '
'; + _html += ' '; + _html += ' '; + _html += '
'; + _html += '
'; + //向 .option .layui-inline 添加drag事件并且必须设在 contents-option-drag 中才能拖动 + } + _html += '
'; + break; + case 'options': + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += ' ' + //_html += ' ' + _html += '
'; + _html += '
'; + _html += '
'.format(json.tag); + //选项 + for (var i = 0; i < json.options.length; i++) { + _html += '
'.format(i); + _html += '
'; + if (json.tag === 'checkbox') { + if (json.options[i].checked) { + _html += ' '.format(json.tag); + } else { + _html += ' '.format(json.tag); + } + } else { + if (json.options[i].checked) { + _html += ' '.format(json.tag); + } else { + _html += ' '.format(json.tag); + } + + } + _html += '
'; + _html += '
'; + _html += ' '.format(json.tag, json.options[i].text); + _html += '
'; + _html += '
'; + _html += ' '.format(json.tag, json.options[i].value); + _html += '
'; + _html += '
'; + _html += ' '; + _html += ' '; + _html += '
'; + _html += '
'; + //向 .option .layui-inline 添加drag事件并且必须设在 select-option-drag 中才能拖动 + } + _html += '
'; + break; + case 'anim': + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'arrow': + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'buttonType': + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'buttonSize': + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + case 'dataMaxValue': + case 'dataMinValue': + _html += '
'.format(key + json.id); + _html += ''.format(staticField.lang[key]); + _html += '
'; + _html += '
'.format(key + json.tag + json.id); + _html += '
'; + _html += '
'; + break; + case 'dateDefaultValue': + _html += '
'.format(key + json.id); + _html += ''.format(staticField.lang[key]); + _html += '
'; + _html += '
'.format(key + json.tag + json.id); + _html += '
'; + _html += '
'; + break; + case 'dateRangeDefaultValue': + _html += '
'.format(key + json.id); + _html += ''.format(staticField.lang[key]); + _html += '
'; + _html += '
'.format(key + json.tag + json.id); + _html += '
'; + _html += '
'; + break; + case 'buttonIcon': + _html += '
'.format(key + json.id); + _html += ''.format(staticField.lang[key]); + _html += '
'; + _html += '
'.format(json.tag + json.id + "property"); + _html += '
'; + _html += '
'; + break; + case 'whiteSpace': + _html += '
'.format(key + json.id); + _html += ''.format(staticField.lang[key]); + _html += '
'; + _html += '
' + .format(json.tag + json.id + "property"); + _html += '
'; + _html += '
'; + break; + case 'colorSelection': + _html += '
'.format(key + json.id); + _html += ''.format(staticField.lang[key]); + _html += '
'; + _html += '
'.format(json.tag + json.id + "property"); + _html += '
'; + _html += '
'; + break; + case 'columns': + var columnCount = 2; + columnCount = json[key].length; + //处理 + _html += '
'; + _html += ' '.format(staticField.lang[key]); + _html += '
'; + _html += '' + _html += '
'; + _html += '
'; + break; + default: + break; + } + } + $('#columnProperty').append(_html); + } + + + + /* 给字段属性绑定事件 实现双向绑定*/ + Class.prototype.bindPropertyEvent = function (_json) { + var that = this + , options = that.config; + if (options.data === undefined) { + return; + } + if (typeof (options.data) === 'string') { + options.data = JSON.parse(options.data); + } + //没有可以选择的 + if (_json === undefined) { + return; + } + //全局下拉绑定 + form.on('select', function (data) { + var _key = data.elem.name; + var _value = parseInt(data.value); + var _json = options.selectItem; + switch (_key) { + case 'columns': + var columnCount = _json[_key].length; + var nullJson = { + span: 12, + list: [] + }; + if (_value > columnCount) { + for (var i = columnCount + 1; i <= _value; i++) { + _json[_key].splice(i, 0, nullJson); + } + } else { + _json[_key].splice(_value, columnCount); + } + that.components[_json.tag].update(_json, that); + break; + case 'dateFormat': + if (_json.tag === 'date') { + var _html = '
'.format('dateDefaultValue' + _json.tag + _json.id); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').empty(); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').append(_html); + _json.dateFormat = data.value; + var dateClass = laydate.render({ + elem: '#dateDefaultValue' + _json.tag + _json.id, + type: _json.datetype, + format: _json.dateFormat, + value: new Date(), + done: function (value, date, endDate) { + _json.dateDefaultValue = value; + that.components[_json.tag].update(_json, that); + } + }); + _json.dateDefaultValue = dateClass.config.elem[0].innerText; + that.components[_json.tag].update(_json, that); + } + if (_json.tag === 'dateRange') { + var _html = '
'.format('dateDefaultValue' + _json.tag + _json.id); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').empty(); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').append(_html); + _json.dateFormat = data.value; + var _v = layui.util.toDateString(new Date(), _json.dateFormat) + " - " + layui.util.toDateString(new Date(), _json.dateFormat); + laydate.render({ + elem: '#dateRangeDefaultValue' + _json.tag + _json.id, + type: _json.dateType, + format: _json.dateFormat, + value: _v, + range: "-", + done: function (value, date, endDate) { + _json.dateRangeDefaultValue = value; + that.components[_json.tag].update(_json, that); + } + }); + _json.dateRangeDefaultValue = _v; + that.components[_json.tag].update(_json, that); + } + break; + case 'dateType': + if (_json.tag === 'date') { + var _html = '
'.format('dateDefaultValue' + _json.tag + _json.id); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').empty(); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').append(_html); + _json.dateType = data.value; + var dateClass = laydate.render({ + elem: '#dateDefaultValue' + _json.tag + _json.id, + type: _json.dateType, + format: _json.dateFormat, + value: new Date(), + done: function (value, date, endDate) { + _json.dateDefaultValue = value; + that.components[_json.tag].update(_json, that); + } + }); + _json.dateDefaultValue = dateClass.config.elem[0].innerText; + that.components[_json.tag].update(_json, that); + } + if (_json.tag === 'dateRange') { + var _html = '
'.format('dateDefaultValue' + _json.tag + _json.id); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').empty(); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').append(_html); + _json.dateType = data.value; + laydate.render({ + elem: '#dateRangeDefaultValue' + _json.tag + _json.id, + type: _json.dateType, + format: _json.dateFormat, + value: _json.dateRangeDefaultValue, + range: "-", + done: function (value, date, endDate) { + _json.dateRangeDefaultValue = value; + that.components[_json.tag].update(_json, that); + } + }); + that.components[_json.tag].update(_json, that); + } + break; + + case 'fieldType': + if (_json.tag === 'input') { + var _html = '
'.format('dateDefaultValue' + _json.tag + _json.id); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').empty(); + $('#dateDefaultValue' + _json.id + ' .layui-input-block').append(_html); + _json.fieldType = data.value; + that.components[_json.tag].update(_json, that); + } + break; + + case 'anim': + case 'arrow': + case 'buttonType': + case 'buttonSize': + _json[data.elem.name] = data.value; + that.components[_json.tag].update(_json, that); + break; + default: + break; + } + }); + //全局input框绑定 + $(document).off('keyup', '#columnProperty .layui-input').on('keyup', '#columnProperty .layui-input', function () { + var _key = $(this).attr("name"); + var _value = $(this).val(); + var _json = options.selectItem; + switch (_key) { + case 'label': + case 'width': + case 'interval': + case 'iconPickerLimit': + case 'iconPickerCellWidth': + case 'buttonVlaue': + case 'placeholder': + case 'rateLength': + case 'height': + case 'iconPickerLimit': + _json[_key] = _value; + that.components[_json.tag].update(_json, that); + break; + case 'defaultValue': + if (_json.tag === 'slider') { + var resultNumber = that.replaceNumber(_value); + _json[_key] = resultNumber; + $(this).val(resultNumber); + slider.render({ + elem: '#' + _json.tag + _json.id, + value: _json.defaultValue, //初始值 + min: _json.minValue, + max: _json.maxValue, + step: _json.stepValue, + disabled: _json.disabled + }); + } else if (_json.tag == 'numberInput') { + var resultNumber = that.replaceNumber(_value); + _json[_key] = resultNumber; + $(this).val(resultNumber); + that.components[_json.tag].update(_json, that);//局部更新 + } else { + _json[_key] = _value; + that.components[_json.tag].update(_json, that); + } + break; + case 'minValue': + case 'maxValue': + case 'stepValue': + var resultNumber = that.replaceNumber(_value); + _json[_key] = resultNumber; + $(this).val(resultNumber); + if (_json.tag === 'slider') { + slider.render({ + elem: '#' + _json.tag + _json.id, + value: _json.defaultValue, //初始值 + min: _json.minValue, + max: _json.maxValue, + step: _json.stepValue, + disabled: _json.disabled + }); + } else if (_json.tag == 'numberInput') { + that.components[_json.tag].update(_json, that);//局部更新 + } + break; + case 'carousel-text': + case 'carousel-value': + var _options = []; + $('#columnProperty .select-options').each(function () { + _options.push({ + text: $(this).find('input[name=carousel-text]').val(), + value: $(this).find('input[name=carousel-value]').val(), + checked: $(this).find('input[name=carousel]').hasAttribute("checked") + }); + }); + _json.options = JSON.parse(JSON.stringify(_options)); + that.components[_json.tag].update(_json, that);//局部更新 + break; + case 'select-text': + case 'select-value': + case 'radio-text': + case 'radio-value': + case 'checkbox-text': + case 'checkbox-value': + //找到 id=key 下的 option值 + var _index = parseInt($(this).parent().parent().attr("data-index")); + if (_key === 'select-text' || _key === 'radio-text' || _key === 'checkbox-text') { + _json.options[_index].text = $(this).val(); + } else { + _json.options[_index].value = $(this).val(); + } + that.components[_json.tag].update(_json, that);//局部更新 + break; + default: + break; + } + }); + //全局开关绑定 + form.on('switch', function (data) { + var _key = data.elem.name; + var _value = data.elem.checked ? true : false; + var _json = options.selectItem; + switch (_key) { + case 'readonly': + case 'disabled': + case 'required': + case 'dimension': + case 'half': + case 'text': + case 'switchValue': + case 'isInput': + case 'iconPickerSearch': + case 'iconPickerPage': + case 'isEnter': + case 'isLabel': + case 'autoplay': + case 'hideLabel': + _json[_key] = _value; + that.components[_json.tag].update(_json, that); + break; + default: + break; + } + }); + + form.on('radio', function (data) { + var _json = options.selectItem; + switch (_json.tag) { + case 'radio': + var _index = parseInt($("#" + _json.id + " .layui-input-block div.layui-form-radio").index(data.othis[0])); + if ($(data.othis[0]).parent().parent().parent().attr("id") === 'radio') { + _index = parseInt($(data.othis[0]).parent().parent().attr("data-index")); + } + for (var i = 0; i < _json.options.length; i++) { + if (i === _index) { + _json.options[i].checked = true; + continue; + } + _json.options[i].checked = false; + } + that.components[_json.tag].update(_json, that); + break; + case 'select': + case 'carousel': + var _index = parseInt(data.elem.closest('.layui-form-item').dataset.index); + for (var i = 0; i < _json.options.length; i++) { + if (i === _index) { + _json.options[i].checked = true; + _json.startIndex = i; + continue; + } + _json.options[i].checked = false; + } + that.components[_json.tag].update(_json, that); + break; + default: + break; + } + }); + + form.on('checkbox', function (data) { + var _json = options.selectItem; + switch (_json.tag) { + case 'checkbox': + var _index = parseInt($("#" + _json.id + " .layui-input-block div.layui-form-checkbox").index(data.othis[0])); + if ($(data.othis[0]).parent().parent().parent().attr("id") === 'checkbox') { + _index = parseInt($(data.othis[0]).parent().parent().attr("data-index")); + } + for (var i = 0; i < _json.options.length; i++) { + if (i === _index) { + _json.options[i].checked = data.elem.checked; + break; + } + } + that.components[_json.tag].update(_json, that); + break; + default: + break; + } + }); + + } + + /*--------------------------------------------------以下属于非修改内容---------------------------------------------------------*/ + /*--------------------------------------------------以下属于非修改内容---------------------------------------------------------*/ + + Class.prototype.reload = function (id + , options) { + var that = this; + options = options || {};//如果是空的话,就赋值 {} + that.render(); + } + + + //核心入口 初始化一个 regionSelect 类 + formDesigner.render = function (options) { + var ins = new Class(options); + return thisIns.call(ins); + }; + + /** + * data 表示设计区数据 + * dataSource 表示数据源即一个控件的数据来源 + * + */ + Class.prototype.config = { + version: "1.0.0" + , formName: "表单示例" + , Author: "谁家没一个小强" + , formId: "formPreviewForm" + , generateId: 0 + , data: [] + , dataSource: {} + , formData: {} + , globalDisable: false + , viewOrDesign: false + , formDefaultButton: true + , formProperty: {} + , selectItem: undefined + }; + + /* 自动生成ID 当前页面自动排序*/ + Class.prototype.autoId = function (tag) { + var that = this, + options = that.config; + options.generateId = options.generateId + 1; + return tag + '_' + options.generateId; + } + + //渲染视图 + Class.prototype.render = function () { + var that = this + , options = that.config; + if (options.viewOrDesign) { + var that = this + , options = that.config; + options.elem = $(options.elem); + options.id = options.id || options.elem.attr('id') || that.index; + options.elem.html('
'.format(options.formId)); + that.renderViewForm(); + } else { + options.elem = $(options.elem); + options.id = options.id || options.elem.attr('id') || that.index; + options.elem.html(staticField.formDesignerHtml); + /* 根据componentsLang渲染组件*/ + var componentsLangHtml = "" + $.each(formField.componentsLang + , function (index + , item) { + componentsLangHtml += '
{0}
'.format(item.name); + componentsLangHtml += '
'.format(item.component); + $.each(item.list + , function (index1 + , item1) { + componentsLangHtml += '
    {1}
'.format(item1.key + , staticField.lang[item1.key], item1.icon); + }); + componentsLangHtml += '
'; + }); + $('#components-form-list').append(componentsLangHtml); + + /* 根据templateFormList渲染组件 默认显示5条*/ + var templateFormListHtml = "" + $.each(staticField.templateFormList + , function (index + , item) { + if (index < 5) { + templateFormListHtml += '
'; + templateFormListHtml += '
'.format(item.imageUrl, index); + templateFormListHtml += '
{1}
'.format(index, item.text); + templateFormListHtml += '
'; + $('#template-form-list').append(templateFormListHtml); + } + }); + + // 加载模板事件注册 + $('body').on('click', '.button--text', function (e) { + var id = $(this).data('id'); + layer.confirm('是否加载这个模板?加载后会覆盖设计器当前表单', function (index) { + options.data = []; + Object.assign(options.data, staticField.templateFormList[id].value) + that.renderForm(); + layer.close(index); + }) + }); + //加载更多模板 + flow.load({ + elem: '#template-form-list' + , done: function (page, next) { + //模拟插入 + setTimeout(function () { + var list = []; + next(list.join(''), page < 2); //假设总页数为 6 + }, 500); + } + }); + //排序事件注册 + $.each(formField.componentsLang + , function (index + , item) { + var sortable1 = Sortable.create(document.getElementById(item.component), { + group: { + name: 'formgroup', + pull: 'clone', //克隆本区域元素到其他区域 + put: false, //禁止本区域实现拖动或拖入 + }, + ghostClass: "ghost", + sort: false, + animation: 150, + onEnd: function (evt) { + // console.log('onEnd.foo:', [evt.item, evt.from]); + // console.log(evt.oldIndex); + // console.log(evt.newIndex); + var itemEl = evt.item; + // console.log(itemEl); + } + }); + }); + //表单事件注册 + var formItemSort = Sortable.create(document.getElementById("formDesignerForm"), { + group: { + name: 'formgroup' + }, + handle: '.widget-view-drag', + ghostClass: "ghost", + animation: 200, + onAdd: function (evt) { + if (options.data === undefined) { + return; + } + if (typeof (options.data) === 'string') { + options.data = JSON.parse(options.data); + } + //注意这里的一个bug,newIndex 第一次拖动也是1 第二次拖动也是1 + if (options.data.length === 0) { + evt.newIndex = 0; + } + if (evt.item.dataset.id !== undefined) { + /*根据id的新算法 复制一份副本 删除json中的节点 再插入节点*/ + var _item = that.findJsonItem(options.data, evt.item.dataset.id); + options.selectItem = _item; + that.deleteJsonItem(options.data, evt.item.dataset.id); + options.data.splice(evt.newIndex + 1, 0, _item); + } else { + var _id = that.autoId(evt.item.dataset.tag); + /* 向现有的表单数据中增加新的数组元素 splice */ + var _newitem = that.components[evt.item.dataset.tag].jsonData(_id, evt.newIndex, that); + //如果是 grid 呢,需要知道几列 + options.selectItem = _newitem; + options.data.splice(evt.newIndex, 0, _newitem); + } + //局部更新 只要更新 designer 设计区部分 + that.renderForm(); + }, + onEnd: function (evt) { + var newIndex = evt.newIndex; + var oldIndex = evt.oldIndex; + //只有当to的目标容器是 formDesignerForm + if (evt.to.id === 'formDesignerForm') { + that.moveItem(evt.oldIndex, evt.newIndex); + } + } + }); + } + //注册预览事件 + $('.previewForm').on('click', function () { + window.localStorage.setItem('layui_form_json', JSON.stringify(options.data)); + layer.confirm('请选择你要预览页面的方式?', { + btn: ['弹窗', '新页面'] //按钮 + }, function () { + //iframe窗 + layer.open({ + type: 2, + title: '表单预览', + btn: ['关闭'], //可以无限个按钮 + btn1: function (index, layero) { + layer.close(index); + }, + closeBtn: 1, //不显示关闭按钮 + shade: [0], + area: ['100%', '100%'], + offset: 'auto', //右下角弹出 + anim: 2, + content: ['./preview.html', 'yes'], //iframe的url,no代表不显示滚动条 + end: function () { //此处用于演示 + //加载结束 + } + }); + }, function () { + window.open("./preview.html"); + }); + + }); + $('body').append(staticField.importHtml); + $('body').append(staticField.exportHtml); + //注册导入数据 + $('.importJson').on('click', function () { + document.getElementById('import-json-code').value = JSON.stringify(options.data, null, 4); + layer.open({ + type: 1 + , title: 'JSON模板数据导入' + , id: 'Lay_layer_importjsoncodeview' + , content: $('.importjsoncodeview') + , area: ['800px', '640px'] + , shade: false + , resize: false + , success: function (layero, index) { + } + , end: function () { + $('.importjsoncodeview').css("display", "none") + } + }); + }); + $('#copy-html-code').on('click', function () { + var Url2 = document.getElementById("generate-code-view"); + Url2.select(); // 选择对象 + document.execCommand("Copy"); // 执行 + layer.msg('复制成功'); + }); + $('#import-json-code').on('click', function () { + var _value = document.getElementById("import-json-code-view").value; + options.data = JSON.parse(_value); + that.renderForm(); + layer.closeAll(); + layer.msg('导入成功'); + }); + //注册导出数据 + $('.exportJson').on('click', function () { + document.getElementById('generate-code-view').value = JSON.stringify(options.data, null, 4); + + layer.open({ + type: 1 + , title: 'JSON 数据导出' + , id: 'Lay_layer_htmlcodeview' + , content: $('.htmlcodeview') + , area: ['800px', '640px'] + , shade: false + , resize: false + , success: function (layero, index) { + + } + , end: function () { + $('.htmlcodeview').css("display", "none") + } + }); + }); + + $("#formSave").on('click', function () { + if (options.data.length > 0) { + console.log(JSON.stringify(options.data)); + window.localStorage.setItem('form_json', JSON.stringify(options.data)); + layer.open({ + type: 2, + title: '重命名', + shade: 0.1, + area: ['450px', '245px'], + content: './save_form.html' + }); + } else { + layer.msg("请维护表单内容!", { + icon: 2, + time: 1500 + }); + } + }); + + $('.generateCode').on('click', function () { + var _html = $('
'); + var _script = $('
');; + that.generateHtml(options.data, _html, _script); + var _htmlCode = staticField.htmlCode.format(_html.html(), _script.html()); + document.getElementById('generate-code-view').value = style_html(_htmlCode, 4, ' ', 400); + layer.open({ + type: 1 + , title: 'HTML代码' + , id: 'Lay_layer_htmlcodeview' + , content: $('.htmlcodeview') + , area: ['800px', '640px'] + , shade: false + , resize: false + , success: function (layero, index) { + layer.style(index, { + marginLeft: -220 + }); + } + , end: function () { + $('.htmlcodeview').css("display", "none") + } + }); + + }); + that.renderForm(); + } + + //递归赋值 + Class.prototype.replaceNumber = function (value) { + value = value.replace(/[^\d]/g, ''); + if ('' != value) { + value = parseInt(value); + } + return value; + } + + /* 触发 grid 的 sortablejs 事件*/ + Class.prototype.bindGridSortEvent = function (json) { + var that = this + , options = that.config; + var objs = $('#' + json.id + ' .widget-col-list'); + //遍历他下面的节点 + for (var i = 0; i < objs.length; i++) { + var el = objs[i]; + var ops = { + group: { + name: 'formgroup' + }, + handle: '.widget-view-drag', + ghostClass: "ghost", + animation: 150, + onAdd: function (evt) { + var parentItem = JSON.parse(JSON.stringify(that.findJsonItem(options.data, evt.item.parentElement.parentElement.dataset.id))); + var index = evt.newIndex; + var colIndex = evt.item.parentElement.dataset.index; + if (evt.item.dataset.id != undefined) { + //表示从其他地方移动过来 + var _fromItem = JSON.parse(JSON.stringify(that.findJsonItem(options.data, evt.item.dataset.id))); + var _oldid = _fromItem.id; + _fromItem.id = that.autoId(_fromItem.tag); + _fromItem.index = index; + parentItem.columns[colIndex].list.splice(index + 1, 0, _fromItem); + that.findAndCopyJson(options.data, parentItem, evt.item.parentElement.parentElement.dataset.id); + that.deleteJsonItem(options.data, _oldid); + } else { + /* 向指定目标放入数据 splice */ + var tag = evt.item.dataset.tag; + _id = that.autoId(tag); + var _newitem = that.components[tag].jsonData(_id, evt.newIndex, that); + _newitem.index = index; + parentItem.columns[colIndex].list.splice(index + 1, 0, _newitem); + that.findAndCopyJson(options.data, parentItem, evt.item.parentElement.parentElement.dataset.id); + options.selectItem = _newitem; + } + that.renderForm(); + }, + //拖动结束 + onEnd: function (evt) { + //console.log(evt); + } + }; + var gridSortable = Sortable.create(el, ops); + } + }; + + /* 重新渲染视图区*/ + Class.prototype.renderViewForm = function () { + var that = this + , options = that.config; + var elem = $('#' + options.formId); + //清空 + elem.empty(); + that.renderComponents(options.data, elem); + if (options.formDefaultButton) { + elem.append(staticField.formDefaultButton); + } + that.setFormData(options.formData); + form.render();//一次性渲染表单 + } + + /* 生成 Html 代码 */ + Class.prototype.generateHtml = function (jsondata, elem, scriptHtml) { + var that = this + , options = that.config; + $.each(jsondata, function (index, item) { + elem.append(that.components[item.tag].generateHtml(item, that)); + if (item.tag === 'grid') { + $.each(item.columns, function (index2, item2) { + //获取当前的 DOM 对象 + if (item2.list.length > 0) { + var elem2 = elem.find('#' + item.id + ' .widget-col-list.column' + item.id + index2); + that.generateHtml(item2.list, elem2, scriptHtml); + } + }); + } else { + scriptHtml.append(that.components[item.tag].generateScript(item, that)); + } + }); + } + + //获取表单数据回调 + Class.prototype.setFormData = function (json) { + var that = this, + options = that.config; + //获取表单区域所有值 + for (let key in json) { + if (key.indexOf("[") != -1 && key.indexOf("]") != -1) { + var check = key.substring(0, key.indexOf("[")); + var item = that.findJsonItem(options.data, check); + if (item === undefined) { + continue; + } + that.components[item.tag].update(item, that); + continue; + } + var item = that.findJsonItem(options.data, key); + if (item === undefined) { + continue; + } + switch (item.tag) { + case 'editor': + case 'rate': + case 'slider': + case 'labelGeneration': + case 'iconPicker': + case 'cron': + case 'colorpicker': + item.defaultValue = json[key]; + that.components[item.tag].update(item, that); + break; + case 'sign': + item.data = json[key]; + that.components[item.tag].update(item, that); + break; + default: + break; + } + } + if (options.viewOrDesign) { + form.val(options.formId, json); + } else { + form.val("formPreviewForm", json); + } + options.formData = json; + return json; + } + + //获取表单数据回调 + Class.prototype.getFormData = function () { + + var that = this, + options = that.config; + + //获取表单区域所有值 + // var json = form.val(that.config.formId); + + var json = form.val(); + + + + for (let key in iceEditorObjects) { + json[key] = iceEditorObjects[key].getHTML(); + } + for (let key in labelGenerationObjects) { + json[key] = labelGenerationObjects[key].getData(); + } + for (let key in signObjects) { + json[key] = signObjects[key]; + } + delete json.file; + + return json; + } + + //递归改变禁用属性 + Class.prototype.findItemToDisable = function (jsondata) { + var that = this + , options = that.config; + $.each(jsondata, function (index, item) { + if (item.tag === 'grid') { + $.each(item.columns, function (index2, item2) { + //获取当前的 DOM 对象 + if (item2.list.length > 0) { + that.findItemToDisable(item2.list); + } + }); + } else { + item.disabled = true; + item.readonly = true; + } + }); + } + + //递归改变禁用属性 + Class.prototype.findItemToNoDisable = function (jsondata) { + var that = this + , options = that.config; + $.each(jsondata, function (index, item) { + if (item.tag === 'grid') { + $.each(item.columns, function (index2, item2) { + //获取当前的 DOM 对象 + if (item2.list.length > 0) { + that.findItemToNoDisable(item2.list); + } + }); + } else { + item.disabled = false; + item.readonly = false; + } + }); + } + + //全局禁用 + Class.prototype.globalDisable = function () { + var that = this + , options = that.config; + that.findItemToDisable(options.data); + that.renderForm(); + } + + //全局取消禁用 + Class.prototype.globalNoDisable = function () { + var that = this + , options = that.config; + that.findItemToNoDisable(options.data); + that.renderForm(); + } + + /* 重新渲染设计区*/ + Class.prototype.renderForm = function () { + var that = this + , options = that.config; + if (options.viewOrDesign) { + var that = this + , options = that.config; + options.elem = $(options.elem); + options.id = options.id || options.elem.attr('id') || that.index; + options.elem.html('
'.format(options.formId)); + // options.elem.html('
'.format(options.formId)); + that.renderViewForm(); + } else { + var elem = $('#formDesignerForm'); + //清空 + elem.empty(); + //渲染组件 + that.renderComponents(options.data, elem); + //选中的节点只有一个 + if (options.selectItem !== undefined) { + var _draghtml = '
'; + var len = $('#' + options.selectItem.id).children().length; + if ($('#widget-view-action')) {//已存在 + $('#widget-view-action').remove(); + } + $('#' + options.selectItem.id).children(len - 1).after(_draghtml); + $('#formDesignerForm .layui-form-item').removeClass('active'); + //给当前元素增加class + $('#' + options.selectItem.id).addClass('active'); + that.bindPropertyEvent(options.selectItem); + } + /* 向 节点点击添加 click 动作 */ + that.addClick(); + /* 向 拷贝 删除 按钮添加 click 动作 */ + that.addCopyDeleteClick(); + form.render(); + } + } + + /* 递归渲染组件 */ + Class.prototype.renderComponents = function (jsondata, elem) { + var that = this + , options = that.config; + $.each(jsondata, function (index, item) { + item.index = index;//设置index 仅仅为了传递给render对象,如果存在下级子节点那么 子节点的也要变动 + if (options.selectItem === undefined) { + that.components[item.tag].render(item, false, elem, that); + } else { + if (options.selectItem.id === item.id) { + that.components[item.tag].render(item, true, elem, that); + //显示当前的属性 + that.components[item.tag].property(item, that); + that.bindPropertyEvent(item); + } else { + that.components[item.tag].render(item, false, elem, that); + } + } + if (item.tag === 'grid') { + that.bindGridSortEvent(item); + $.each(item.columns, function (index2, item2) { + //获取当前的 DOM 对象 + if (item2.list.length > 0) { + var elem2 = elem.find('#' + item.id + ' .widget-col-list.column' + item.id + index2); + that.renderComponents(item2.list, elem2); + } + }); + } + }); + } + + /* 加入copy选项删除 */ + Class.prototype.addCopyDeleteClick = function () { + var that = this + , options = that.config; + if (options.data === undefined) { + return; + } + if (typeof (options.data) === 'string') { + options.data = JSON.parse(options.data); + } + //复制当前节点 + $('#formDesignerForm .layui-form-item .widget-view-action .layui-icon-file').on('click', function (e) { + e.stopPropagation(); + //在json中插入 + if (options.data === undefined) { + return; + } + if (typeof (options.data) === 'string') { + options.data = JSON.parse(options.data); + } + var _id = document.elementFromPoint(e.pageX, e.pageY).parentElement.parentElement.dataset.id; + if (_id !== undefined) { + options.selectItem = that.copyJsonAfterItem(options.data, _id); + } + that.renderForm(); + }); + $('#formDesignerForm .layui-form-item .layui-icon-delete').on('click', function (e) { + e.stopPropagation(); + //获取当前组件的组件id + var _id = document.elementFromPoint(e.pageX, e.pageY).parentElement.parentElement.dataset.id; + if (_id !== undefined) { + options.selectItem = that.deleteJsonItem(options.data, _id); + } + that.renderForm(); + }); + }; + + /* 如果是grid布局控件 就显示不一样的样式 */ + Class.prototype.addClick = function (evt) { + var that = this + , options = that.config; + $("#formDesignerForm .layui-form-item").on('click', function (e) { + //当 div 为嵌套关系的时候 阻止事件冒泡 + e.preventDefault(); + e.stopPropagation(); + var index = parseInt($(this)[0].dataset.index); + var _id = $(this)[0].dataset.id; + options.selectItem = that.findJsonItem(options.data, _id); + var tag = $(this)[0].dataset.tag; + + //显示当前的属性 + that.components[tag].property(options.selectItem, that); + that.bindPropertyEvent(); + //移除 #formDesignerForm .layui-form-item 下所有的 active + $('#formDesignerForm .layui-form-item').removeClass('active'); + //给当前元素增加class + $(this).addClass('active'); + var _draghtml = '
'; + var len = $(this).children().length; + if (len <= 12) { + //先删除元素 + $("#formDesignerForm .layui-form-item .widget-view-action").remove(); + $("#formDesignerForm .layui-form-item .widget-view-drag").remove(); + if ($('#widget-view-action')) {//已存在 + $('#widget-view-action').remove(); + } + $(this).children(len - 1).after(_draghtml); + } + /* 向 拷贝 删除 按钮添加 click 动作 */ + that.addCopyDeleteClick(); + //重新渲染 + form.render(); + }); + }; + + //移动视图 + Class.prototype.moveItem = function (oldIndex, newIndex) { + var that = this + , options = that.config; + var newData = options.data[newIndex]; + var oldData = options.data[oldIndex]; + options.data[newIndex] = oldData; + options.data[oldIndex] = newData; + } + + /* 根据id返回json中的节点*/ + Class.prototype.findJsonItem = function (json, id) { + var that = this, + options = that.config; + for (var i = 0; i < json.length; i++) { + if (json[i].id === id) { + return json[i]; + } else { + if (json[i].tag === 'grid') { + for (var j = 0; j < json[i].columns.length; j++) { + if (json[i].columns[j].list.length > 0) { + var _item = that.findJsonItem(json[i].columns[j].list, id); + if (_item) { + return _item; + } + } + } + } + } + } + return undefined; + } + + + + /* 复制json中的节点并返回上一个节点*/ + Class.prototype.copyJsonAfterItem = function (json, id) { + var that = this, + options = that.config; + for (var i = 0; i < json.length; i++) { + if (json[i].id === id) { + var _newjson = JSON.parse(JSON.stringify(json[i])); + _newjson.id = that.autoId(_newjson.tag); + json.splice(i + 1, 0, _newjson); + return json[i]; + } else { + if (json[i].tag === 'grid') { + for (var j = 0; j < json[i].columns.length; j++) { + if (json[i].columns[j].list.length > 0) { + var _item = that.copyJsonAfterItem(json[i].columns[j].list, id); + if (_item) { + return _item; + } + } + } + } + } + + } + return undefined; + }; + + /* 删除json中的节点并返回上一个节点*/ + Class.prototype.deleteJsonItem = function (json, id) { + var that = this, + options = that.config; + for (var i = 0; i < json.length; i++) { + if (json[i].id === id) { + json.splice(i, 1); + if (i > 0) { + return json[i - 1]; + } + break; + } else { + if (json[i].tag === 'grid') { + for (var j = 0; j < json[i].columns.length; j++) { + if (json[i].columns[j].list.length > 0) { + that.deleteJsonItem(json[i].columns[j].list, id); + } + } + } + } + + + } + return undefined; + }; + + /* 自动生成ID 当前页面自动排序*/ + Class.prototype.autoId = function (tag) { + var that = this, + options = that.config; + options.generateId = options.generateId + 1; + var findJsonItem = that.findJsonItem(options.data, tag + '_' + options.generateId); + if (findJsonItem != undefined) { + return that.autoId(tag); + } else { + return tag + '_' + options.generateId; + } + } + + //递归赋值 + Class.prototype.findAndCopyJson = function (json, parentItem, id) { + var that = this; + for (var i = 0; i < json.length; i++) { + if (json[i].id === id) { + json[i] = parentItem; + } else { + if (json[i].tag === 'grid') { + for (var j = 0; j < json[i].columns.length; j++) { + if (json[i].columns[j].list.length > 0) { + that.findAndCopyJson(json[i].columns[j].list, parentItem, id); + } + } + } + } + } + } + + + /* 此方法最后一道 commom.js 中 */ + String.prototype.format = function (args) { + var result = this; + if (arguments.length > 0) { + if (arguments.length == 1 && typeof (args) == "object") { + for (var key in args) { + if (args[key] != undefined) { + var reg = new RegExp("({" + key + "})" + , "g"); + result = result.replace(reg + , args[key]); + } + } + } else { + for (var i = 0; i < arguments.length; i++) { + if (arguments[i] != undefined) { + var reg = new RegExp("({[" + i + "]})" + , "g"); + result = result.replace(reg + , arguments[i]); + } + } + } + } + return result; + } + + exports('formDesignerView' + , formDesigner); + }); \ No newline at end of file diff --git a/WebRoot/view/tb/form/ayq/modules/staticFieldView.js b/WebRoot/view/tb/form/ayq/modules/staticFieldView.js new file mode 100644 index 00000000..06f157d2 --- /dev/null +++ b/WebRoot/view/tb/form/ayq/modules/staticFieldView.js @@ -0,0 +1,308 @@ +layui.define(['layer'], function (exports) { + + var staticField = { + lang: { + id: "标识", + label: "标题", + index: "序号", + tag: "表单类型", + tagIcon: '图标', + width: '宽度', + height: "高度", + span: '网格宽度', + placeholder: "placeholder", + defaultValue: "默认值", + dateDefaultValue: '默认时间', + labelWidth: "文本宽度", + clearable: "是否清楚", + prepend: "前缀", + append: "追加", + prefixIcon: '前缀图标', + suffixIcon: '后缀图标', + maxlength: "最大长度", + showWordLimit: "是否限制字符", + readonly: "只读", + disabled: "禁用", + required: "必填", + columns: "列数", + options: "选项", + switchValue: "默认值", + maxValue: "最大值", + minValue: "最小值", + dataMaxValue: "最大日期", + dataMinValue: "最小日期", + stepValue: "步长", + dateType: "日期类型", + dateFormat: "日期格式", + half: "显示半星", + theme: "皮肤", + rateLength: "星星个数", + interval: "间隔毫秒", + startIndex: "开始位置", + full: "是否全屏", + arrow: "鼠标样式", + contents: "内容", + document: '帮助文档', + input: "输入框", + select: "下拉", + checkbox: "多选组", + radio: "单选组", + date: "日期", + editor: "iceEditor编辑器", + slider: "滑块", + image: "图片", + grid: "一行多列", + colorpicker: "颜色选择器", + textarea: "多行文本", + rate: "评分控件", + switch: "开关", + password: "密码框", + carousel: "轮播", + text: "显示文本", + uploadUrl: "上传路径", + expression: "验证", + file: "文件", + autoplay: "自动切换", + anim: "切换方式", + arrow: "切换箭头", + tab: "tab选项卡", + tabHeaders: "tab标题", + isInput: "显示输入框", + dateRange: "日期范围", + dateRangeDefaultValue: "默认范围", + menu: "头部菜单", + numberInput: "排序文本框", + iconPicker: "图标选择器", + iconPickerSearch: "是否搜索", + iconPickerPage: "是否分页", + iconPickerLimit: "显示数量", + iconPickerCellWidth: "图标宽度", + cron: "Cron表达式", + cronUrl: "运行路径", + labelGeneration: "标签组件", + isEnter: "是否回车", + buttonIcon: "按钮图标", + buttonType: "按钮类型", + buttonSize: "组件尺寸", + bottom: "按钮组件", + buttonVlaue: "按钮文字", + sign: "sign签名组件", + hideLabel: "隐藏标签", + colorSelection: "颜色选择", + blockquote: "便签信息", + line: "分割线", + spacing: "间距", + whiteSpace: "组件高度", + textField: "HTML", + dimension: "是否为维度", + fieldType: "字段类型" + + }, + templateFormList: [ + + ], + fieldTypes: [{ text: '文本', value: "1" } + , { text: '数值', value: '2' } + , { text: '小数', value: '3' } + , { text: '日期', value: '4' } + ], + expressions: [{ text: '默认', value: "" } + , { text: '数字', value: 'number' } + , { text: '邮箱', value: 'email' } + , { text: '手机', value: 'phone' } + , { text: '身份证', value: 'identity' } + , { text: '日期', value: 'date' } + , { text: '网址', value: 'url' } + , { text: '密码', value: 'pass' } + ], anims: [{ text: '左右切换', value: 'default' } + , { text: '上下切换', value: 'updown' } + , { text: '渐隐渐显切换', value: 'fade' } + ], arrows: [{ text: '悬停显示', value: 'hover' } + , { text: '始终显示', value: 'always' } + , { text: '始终不显示', value: 'none' }] + , dateTypes: [{ text: '年选择器', value: 'year' } + , { text: '年月选择器', value: 'month' } + , { text: '时间选择器', value: 'time' } + , { text: '日期选择器', value: 'date' } + , { text: '日期时间选择器', value: 'datetime' }] + , buttonTypes: [{ text: '原始', value: 'layui-btn-primary' } + , { text: '默认', value: "" } + , { text: '百搭', value: 'layui-btn-normal' } + , { text: '暖色', value: 'layui-btn-warm' } + , { text: '警告', value: ' layui-btn-danger' }] + , buttonSizes: [{ text: '大型', value: 'layui-btn-lg' } + , { text: '默认', value: "" } + , { text: '小型', value: 'layui-btn-sm' } + , { text: '迷你', value: 'layui-btn-xs' }] + , dateFormats: ["yyyy年MM月", "yyyy-MM-dd", "dd/MM/yyyy", "yyyyMMdd", "yyyy-MM-dd HH:mm:ss", "yyyy年MM月dd日 HH时mm分ss秒"] + , iceEditMenus: [ + { value: 'backColor', text: '字体背景颜色' }, { value: 'fontSize', text: '字体大小' }, { value: 'foreColor', text: '字体颜色' }, { value: 'bold', text: '粗体' }, + { value: 'italic', text: '斜体' }, { value: 'underline', text: '下划线' }, { value: 'strikeThrough', text: '删除线' }, { value: 'justifyLeft', text: '左对齐' }, + { value: 'justifyCenter', text: '居中对齐' }, { value: 'justifyRight', text: '右对齐' }, { value: 'indent', text: '增加缩进' }, { value: 'outdent', text: '减少缩进' }, + { value: 'insertOrderedList', text: '有序列表' }, { value: 'insertUnorderedList', text: '无序列表' }, { value: 'superscript', text: '上标' }, { value: 'subscript', text: '下标' }, + { value: 'createLink', text: '创建连接' }, { value: 'unlink', text: '取消连接' }, { value: 'hr', text: '水平线' }, { value: 'face', text: '表情' }, { value: 'table', text: '表格' }, + { value: 'files', text: '附件' }, { value: 'music', text: '音乐' }, { value: 'video', text: '视频' }, { value: 'insertImage', text: '图片' }, + { value: 'removeFormat', text: '格式化样式' }, { value: 'code', text: '源码' }, { value: 'line', text: '菜单分割线' } + ], + formDesignerHtml: '
\n' + + '
\n' + + '
创建任务
\n' + + '
\n' + + '\n' + + '\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
    \n' + + '
  • 组件
  • \n' + + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + ' 从左侧拖拽控件到此设计区域来添加字段\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + '
    \n' + + '
  • 字段设置
  • \n' + + '
  • 表单设置
  • \n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + ' \n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + ' \n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
', + // formDefaultButton: '
\n' + + // '
\n' + + // ' \n' + + // ' \n' + + // '
\n' + + // '
', + + formDefaultButton: '', + // formDefaultButton: '
\n' + + // '
\n' + + // ' \n' + + // '
\n' + + // '
', + importHtml: '', + exportHtml: '', + htmlCode: '\n' + + '\n' + + ' \n' + + ' \n' + + ' 表单设计器代码\n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + '\n' + + '\n' + + '
\n' + + '
\n' + + ' {0}\n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '' + } + exports('staticFieldView', staticField); + +}); \ No newline at end of file diff --git a/WebRoot/view/tb/form/report.html b/WebRoot/view/tb/form/report.html index ef675543..41f9b8ce 100644 --- a/WebRoot/view/tb/form/report.html +++ b/WebRoot/view/tb/form/report.html @@ -117,8 +117,7 @@ }) } , done: function (res) { - layer.close(layer.msg());//关闭上传提示窗口 - console.log(res); + layer.close(layer.msg());//关闭上传提示窗口 //上传完毕 $('#uploader-list-' + res.input_id).append( @@ -147,8 +146,7 @@ , bindAction: '#listAction-' + filesData[i].select.substring(4) , choose: function (obj) { var that = this; - var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 - console.log(that); + var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 //读取本地文件 obj.preview(function (index, file, result) { var tr = $(['' @@ -170,22 +168,18 @@ that.elemList.append(tr); element.render('progress'); //渲染新加的进度条组件 }); - }, done: function (res, index, upload) { //成功的回调 - console.log(res); + }, done: function (res, index, upload) { //成功的回调 var that = this; - var tr = that.elemList.find('tr#upload-' + index) , tds = tr.children(); tds.eq(3).html(''); //清空操作 delete this.files[index]; //删除文件队列已经上传成功的文件 return; - //} this.error(index, upload); }, allDone: function (obj) { //多文件上传完毕后的状态回调 setTimeout(function () { reloadFiles(file_input_id); }, 700); - }, error: function (index, upload) { //错误回调 var that = this; var tr = that.elemList.find('tr#upload-' + index) diff --git a/WebRoot/view/tb/form/view.html b/WebRoot/view/tb/form/view.html new file mode 100644 index 00000000..b9060607 --- /dev/null +++ b/WebRoot/view/tb/form/view.html @@ -0,0 +1,380 @@ + + + + + + + Layui + + + + + + + + + +
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/WebRoot/view/tb/school/task_list.html b/WebRoot/view/tb/school/task_list.html index 89ac558b..60d2efb0 100644 --- a/WebRoot/view/tb/school/task_list.html +++ b/WebRoot/view/tb/school/task_list.html @@ -124,7 +124,7 @@ offset: 'r', anim: 'slideLeft', area: ['750px', '100%'], - shade: 0.1, + shade: 0.1, content: "../form/report.html?job_id=" + obj.data.job_id }); } else { @@ -143,11 +143,25 @@ } window.view = function (obj) { - var base64Url = Base64.encode('/QingLong/collect/getJobBureauFillInfo?job_id=' + obj.data.job_id + '&type_id=2'); - window.open('../exportPdf.html?url=' + base64Url, '_blank'); + if (obj.data.job_type === 1) { + layer.open({ + type: 2, + title: '填报', + offset: 'r', + anim: 'slideLeft', + area: ['750px', '100%'], + shade: 0.1, + shadeClose: true, + content: "../form/view.html?job_id=" + obj.data.job_id + }); + } else { + var base64Url = Base64.encode('/QingLong/collect/getJobBureauFillInfo?job_id=' + obj.data.job_id + '&type_id=2'); + window.open('../exportPdf.html?url=' + base64Url, '_blank'); + } + } - window.refresh = function (param) { + window.refresh = function (param) { table.reload('data-table'); }