form预览

This commit is contained in:
yubaolee 2018-03-02 16:34:38 +08:00
parent 413e8d9b87
commit e87eb3c822
10 changed files with 562 additions and 301 deletions

View File

@ -36,5 +36,10 @@ namespace OpenAuth.App
} }
public Form FindSingle(string id)
{
return Repository.FindSingle(u => u.Id == id);
}
} }
} }

492
OpenAuth.App/FormUtil.cs Normal file
View File

@ -0,0 +1,492 @@
using System;
using System.Collections.Generic;
using System.Text;
using Infrastructure;
using Newtonsoft.Json.Linq;
using OpenAuth.Repository.Domain;
namespace OpenAuth.App
{
public class FormUtil {
/**
* view
*/
private static string temp_view = "<div style=\"{0}\"/>{1}</div>";
/**
*
* : html
*/
public static string GetHtml(Form form, string action){
//action=action!=null && !""==(action)?action:"view";
var tableData =new Dictionary<string, Object>();//表单数据
string html = form.ContentParse;
foreach (var json in form.ContentData.ToList<JObject>())
{
string name = "";
string leipiplugins = json.GetValue("leipiplugins").ToString();
if ("checkboxs" == (leipiplugins))
name = json.GetValue("parse_name").ToString();
else
name = json.GetValue("name").ToString();
string temp_html = "";
switch (leipiplugins)
{
case "text":
temp_html = GetTextBox(json, tableData, action);
break;
case "textarea":
temp_html = GetTextArea(json, tableData, action);
break;
case "radios":
temp_html = GetRadios(json, tableData, action);
break;
case "select":
temp_html = GetSelect(json, tableData, action);
break;
case "checkboxs":
temp_html = GetCheckboxs(json, tableData, action);
break;
case "qrcode"://二维码
temp_html = GetQrcode(json, tableData, action);
break;
case "progressbar"://进度条 (未做处理)
/*temp_html = GetProgressbar(json, tableData, action);*/
break;
default:
temp_html = json.GetValue("content").ToString();
break;
}
html = html.Replace("{" + name + "}", temp_html);
}
return html;
}
//text
private static string GetTextBox(JObject item, Dictionary<string,Object> formData,string action)
{
string temp = "<input type=\"text\" value=\"{0}\" name=\"{1}\" style=\"{2}\"/>";
string name = item.GetValue("name").ToString();
string value = formData.ContainsKey(name)?formData[name].ToString():null;
if (value == null)
value = item.GetValue("value") == null ? "" : item.GetValue("value").ToString();
string style =item.GetValue("style") == null ? "" : item.GetValue("style").ToString();
string temp_html = string.Format(temp, value, name, style);
if("view"==(action))
return string.Format(temp_view,style,value);
else
return temp_html;
}
//TextArea
private static string GetTextArea(JObject item, Dictionary<string,Object> formData,string action)
{
string script = "";
if (item.GetValue("orgrich") != null && "1"==(item.GetValue("orgrich").ToString()))
script = "orgrich=\"true\" ";
string name = item.GetValue("name").ToString();
string value = formData.ContainsKey(name)?formData[name].ToString():null;
if (value == null)
value = item.GetValue("value")== null ? "" : item.GetValue("value").ToString();
string style = item.GetValue("style") == null ? "" : item.GetValue("style").ToString();
string temp = "<textarea name=\"{0}\" id=\"{1}\" style=\"{2}\" {3}>{4}</textarea>";
string temp_html = string.Format(temp, name, name, style, script, value);
if("view"==(action))
return string.Format(temp_view,style,value);
else
return temp_html;
}
//Radios
private static string GetRadios(JObject item, Dictionary<string,Object> formData,string action)
{
var radiosOptions = JArray.Parse(item.GetValue("options").ToString());
//JArray radiosOptions = item["options"] as JArray;
string temp = "<input type=\"radio\" name=\"{0}\" value=\"{1}\" {2}>{3}&nbsp;";
string temp_html = "";
string name = item.GetValue("name").ToString();
string value = formData.ContainsKey(name)?formData[name].ToString():null;
string cvalue_="";
foreach (var json in radiosOptions)
{
string cvalue = json["value"].ToString();
string Ischecked = "";
if (value == null)
{
string check = (json["checked"] != null) ? json["checked"].ToString() : "";
if ("checked" == (check) || "true" == (check))
{
Ischecked = " checked=\"checked\" ";
cvalue_ = cvalue;
}
}
temp_html += string.Format(temp, name, cvalue, Ischecked, cvalue);
}
if("view"==(action))
return string.Format(temp_view,"&nbsp;",cvalue_);
else
return temp_html;
}
//Checkboxs
private static string GetCheckboxs(JObject item, Dictionary<string,Object> formData,string action){
string temp_html = "";
string temp = "<input type=\"checkbox\" name=\"{0}\" value=\"{1}\" {2}>{3}&nbsp;";
string view_value="";//view 查看值
var checkOptions = JArray.Parse(item.GetValue("options").ToString());
foreach (var json in checkOptions)
{
string name = json["name"].ToString();
string value = formData.ContainsKey(name) ? formData[name].ToString() : null;
string cvalue = json["value"].ToString();
string Ischecked = "";
if (value == null)
{
string check = (json["checked"] != null) ? json["checked"].ToString() : "";
if (check == ("checked") || check == ("true"))
{
Ischecked = " checked=\"checked\" ";
view_value += cvalue + "&nbsp";//view 查看值
}
}
else if (value != null && value == (cvalue))
{
Ischecked = " checked=\"checked\" ";
view_value += cvalue + "&nbsp";//view 查看值
}
temp_html += string.Format(temp, name, cvalue, Ischecked, cvalue);
}
if("view"==(action))
return string.Format(temp_view,"&nbsp;",view_value);
else
return temp_html;
}
//Select(比较特殊)
private static string GetSelect(JObject item, Dictionary<string,Object> formData, string action)
{
string name = item.GetValue("name").ToString();
string value = formData.ContainsKey(name)?formData[name].ToString():null;
string temp_html =item.GetValue("content").ToString();
if (value != null)//用户设置过值
{
temp_html = temp_html.Replace("selected=\"selected\"", "");
value = "value=\"" + value + "\"";
string r = value + " selected=\"selected\"";
temp_html = temp_html.Replace(value, r);
}
return temp_html;
}
//Qrcode 二维码
private static string GetQrcode(JObject item, Dictionary<string,Object> formData, string action)
{
string name = item.GetValue("name").ToString();
string value = formData.ContainsKey(name)?formData[name].ToString():null;
string temp_html = "";
string temp = "";
string orgType = item.GetValue("orgtype").ToString();
string style = item.GetValue("style").ToString();
if ("text"==(orgType))
{
orgType = "文本";
}
else if ("url"==(orgType))
{
orgType = "超链接";
}
else if ("tel"==(orgType))
{
orgType = "电话";
}
string qrcode_value = "";
if (item.GetValue("value")!= null)
qrcode_value = item.GetValue("value").ToString();
//print_R($qrcode_value);exit; //array(value,qrcode_url)
if ( "edit"==(action))
{
temp = orgType + "二维码 <input type=\"text\" name=\"{0}\" value=\"{1}\"/>";
temp_html = string.Format(temp, name, value);
}
else if ("view"==(action))
{
//可以采用 http://qrcode.leipi.org/
style = "";
if (item.GetValue("orgwidth") != null)
{
style = "width:" + item.GetValue("orgwidth").ToString() + "px;";
}
if (item.GetValue("orgheight") != null)
{
style += "height:" + item.GetValue("orgheight").ToString() + "px;";
}
temp = "<img src=\"{0}\" title=\"{1}\" style=\"{2}\"/>";
temp_html = string.Format(temp_html, name, value, style);
}
else if ( "preview"==(action))
{
style = "";
if (item.GetValue("orgwidth")!= null)
{
style = "width:" + item.GetValue("orgwidth").ToString() + "px;";
}
if (item.GetValue("orgheight")!= null)
{
style += "height:" + item.GetValue("orgheight").ToString() + "px;";
}
temp = "<img src=\"{0}\" title=\"{1}\" style=\"{2}\"/>";
temp_html = string.Format(temp_html, name, value, style);
}
return temp_html;
}
////Listctrl
//private static string GetListctrl(JObject item, Dictionary<string,Object> formData, string action)
// {
// string valuetest = "{\"data_110\":[\"1\",\"2\"],\"data_111\":[\"21\",\"22\",\"22\"]}";
// string name = item.GetValue("name").ToString();
// string value = formData.ContainsKey(name)?formData[name].ToString():null;
// string temp_html = "";
// string orgSum =item.GetValue("orgsum").ToString();
// string orgUnit =item.GetValue("orgunit").ToString();
// string orgTitle =item.GetValue("orgtitle").ToString();
// string title =item.GetValue("title").ToString();
// string style =item.GetValue("style").ToString();
// string orgcolvalue =item.GetValue("orgcolvalue").ToString();
// string orgcoltype =item.GetValue("orgcoltype").ToString();
// List<string> listTitle = Arrays.asList(orgTitle.split("`"));
// List<string> listSum = Arrays.asList(orgSum.split("`"));
// List<string> listUnit = Arrays.asList(orgUnit.split("`"));
// List<string> listValue =Arrays.asList(orgcolvalue.split("`"));
// List<string> listType =Arrays.asList(orgcoltype.split("`"));
// int tdCount = listTitle.size();
// string temp = "<table id=\"" + name + "_table\" bindTable=\"true\" cellspacing=\"0\" class=\"table table-bordered table-condensed\" style=\"" + style + "\"><thead>{0}</thead><tbody>{1}</tbody>{2}</table>";
// string btnAdd = "<span class=\"pull-right\"><button class=\"btn btn-small btn-success listAdd\" type=\"button\" tbname=\"" + name + "\">添加一行</button></span>"; //添加按钮
// string theader = "<tr><th colspan=\"{0}\">{1}{2}</th></tr>{3}";//头部模版
// string trTitle = "";//标题
// for (int i = 0; i < tdCount; i++)
// {
// if (i == tdCount - 1)
// listTitle.set(i, "操作");
// if ("view"==(action) && i == tdCount - 1) continue;//如果是查看最后一列不显示
// trTitle += string.Format("<th>{0}</th>", listTitle.get(i));
// }
// trTitle = "<tr>" + trTitle + "</tr>";
// JObject dataValue=JObject.fromObject(valuetest);
// int rowCount = dataValue != null ? dataValue.size() : 1;
// stringBuilder sbTr = new stringBuilder();
// string tdSum = "";//如果有统计增加一行
// TreeMap<Integer, Float> SumValueDic = new TreeMap<Integer, Float>();
// for (int row = 0; row < rowCount; row++)
// {
// JSONArray rowValue = (dataValue != null && dataValue.has(name + row)) ? dataValue.getJSONArray(name + row): null;
// string tr = "";//默认一行
// for (int i = 0; i < tdCount; i++)
// {
// string tdname = name + "[" + i + "]";
// string sum = "1"==(listSum.get(i)) ? "sum=\"" + tdname + "\"" : "";//是否参与统计
// string tdValue =( rowValue != null && rowValue.size() > i) ? rowValue.GetValue(i).ToString(): listValue.get(i);
// string type = listType.get(i);//类型
// if (sum != "")//一次循环计算该列的值
// {
// //region 计算统计值
// float tempTdValue = 0;
// if (SumValueDic.containsKey(i))
// tempTdValue = SumValueDic.get(i);
// try
// {
// float resultTdTemp = 0;
// resultTdTemp=Float.parseFloat(tdValue);
// //float.TryParse(tdValue, out resultTdTemp);
// tempTdValue += resultTdTemp;
// }
// catch (Exception e)
// {
// tdValue = "0";
// }
// if (SumValueDic.containsKey(i))
// SumValueDic.subMap(i, (int) tempTdValue);
// else
// SumValueDic.put(i, tempTdValue);
// //endregion
// }
// if (i == tdCount - 1)//最后一列不显示
// {
// if ("view"==(action)) continue;
// //tr += "<td></td>";
// else
// tr += "<td><a href=\"javascript:void(0);\" class=\"delrow \">删除</a></td>";
// //tr += string.Format("<td><a href=\"javascript:void(0);\" class=\"delrow {0}\">删除</a></td>", dataValue != null ? "" : "hide");
// }
// else
// {
// if ("view"==(action))
// {
// tr += string.Format("<td>{0}</td>", tdValue);
// }
// else
// {
// if ("text"==(type))
// tr += string.Format("<td><input class=\"input-medium\" type=\"text\" value=\"{0}\" name=\"{1}[]\" {2}></td>", tdValue, tdname, sum);
// else if ("int"==(type))
// tr += string.Format("<td><input class=\"input-medium\" type=\"text\" value=\"{0}\" name=\"{1}[]\" {2}></td>", tdValue, tdname, sum);
// else if ("textarea"==(type))
// tr += string.Format("<td><textarea class=\"input-medium\" name=\"{0}\" >{1}</textarea></td>", tdname, tdValue, sum);
// else if ("calc"==(type))
// tr += string.Format("<td><input class=\"input-medium\" type=\"text\" value=\"{0}\" name=\"{1}[]\" {2}></td>", tdValue, tdname, sum);
// }
// }
// if (row == 0)//统计的行只有一行
// {
// //region
// if (sum != "")
// {
// if ("view"==(action))
// tdSum += string.Format("<td>合计value{0}{1}</td>", i, listUnit.get(i));
// else
// tdSum += string.Format("<td>合计:<input class=\"input-small\" type=\"text\" value=\"value{0}\" name=\"{1}[total]\" {2}\">{3}</td>", i, tdname, sum, listUnit.get(i));
// }
// else
// {
// tdSum += "<td></td>";
// }
// //endregion
// }
// }
// sbTr.append(string.Format("<tr class=\"template\">{0}</tr>", tr) );
// }
// /*if(!stringUtils.isBlank(tdSum)){
// }*/
// if (!stringUtils.isBlank(tdSum)){
// for (Integer i : SumValueDic.keySet()) {
// tdSum = tdSum.Replace("value" + i, SumValueDic.get(i).ToString());
// tdSum = string.Format("<tbody class=\"sum\"><tr>{0}</tr></tbody>", tdSum);
// }
// }
// if ("view"==(action))
// theader = string.Format(theader, tdCount, title, "", trTitle);
// else
// theader = string.Format(theader, tdCount, title, btnAdd, trTitle);
// temp_html = string.Format(temp, theader, sbTr.ToString(), tdSum);
// return temp_html;
// }
/**
* : sql
*/
public static string GetSql(Form form,JObject JObject){
// 获取字段并处理
var jsonArray = JArray.Parse(JObject.GetValue("data").ToString());
// 数据库名称
string data_name="`from_data_"+ form.Id+"`";
// 创建数据表
StringBuilder sql =new StringBuilder("CREATE TABLE "+data_name+ " (`id` int(64) NOT NULL COMMENT '主键' ,") ;
string sqlDefault = "";
foreach (var json in jsonArray)
{
string name = json["name"].ToString();
string type = json["leipiplugins"].ToString();
sql.Append("`" + name + "` " + field_type_sql(type));//字段拼接
if ("checkboxs" == (type))
sqlDefault += field_type_sql_default(data_name, name, "0");
else
sqlDefault += field_type_sql_default(data_name, name, "''");
}
sql.Append("PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1 ROW_FORMAT=COMPACT;");
return sql.ToString()+sqlDefault;
}
//获取控件字段类型 的sql
private static string field_type_sql(string leipiplugins)
{
if ("textarea"==(leipiplugins) || "listctrl"==(leipiplugins))
{
return " text NULL ,";
}
else if ("checkboxs"==(leipiplugins))
{
return " tinyint NOT NULL ,";
}
else
{
return " varchar(255) NULL ,";
}
}
private static string field_type_sql_default(string tablename, string field, string defaultValue)
{
return "alter table "+tablename+" alter column `"+field+"` set default "+defaultValue+";";
}
}
}

View File

@ -156,7 +156,9 @@
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup>
<Compile Include="FormUtil.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -20,11 +20,23 @@ namespace OpenAuth.Mvc.Controllers
return View(); return View();
} }
public ActionResult Builder() public ActionResult Preview()
{ {
return View(); return View();
} }
/// <summary>
/// 预览表单
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>System.String.</returns>
public string PreviewData(string id)
{
var form = App.FindSingle(id);
return FormUtil.GetHtml(form, "");
}
//添加或修改 //添加或修改
[System.Web.Mvc.HttpPost] [System.Web.Mvc.HttpPost]
[ValidateInput(false)] [ValidateInput(false)]

View File

@ -603,7 +603,7 @@
<Content Include="json\userface.json" /> <Content Include="json\userface.json" />
<Content Include="js\ueditor\formdesign\textfield.html.ajax.bak" /> <Content Include="js\ueditor\formdesign\textfield.html.ajax.bak" />
<None Include="Properties\PublishProfiles\default.pubxml" /> <None Include="Properties\PublishProfiles\default.pubxml" />
<Content Include="userJs\formBuilder.js" /> <Content Include="userJs\preview.js" />
<Content Include="userJs\forms.js" /> <Content Include="userJs\forms.js" />
<Content Include="Views\Home\git.cshtml" /> <Content Include="Views\Home\git.cshtml" />
<Content Include="Web.config"> <Content Include="Web.config">
@ -627,7 +627,7 @@
<Content Include="Views\ModuleManager\Assign.cshtml" /> <Content Include="Views\ModuleManager\Assign.cshtml" />
<Content Include="Views\RoleManager\Index.cshtml" /> <Content Include="Views\RoleManager\Index.cshtml" />
<Content Include="Views\Forms\index.cshtml" /> <Content Include="Views\Forms\index.cshtml" />
<Content Include="Views\Forms\builder.cshtml" /> <Content Include="Views\Forms\Preview.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Areas\FlowManage\Models\" /> <Folder Include="Areas\FlowManage\Models\" />

View File

@ -0,0 +1,19 @@

@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Preview</title>
</head>
<body>
<div id="content"></div>
</body>
</html>
<script type="text/javascript" src="/layui/layui.js"></script>
<script type="text/javascript" src="/userJs/preview.js"></script>

View File

@ -1,17 +0,0 @@
@section header
{
<link rel="stylesheet" href="/css/main.css" media="all" />
}
<form method="post" id="saveform" name="saveform" action="">
</form>
<button class="layui-btn layui-btn-normal" id="btnSubmit">提交</button>
<script type="text/javascript" charset="utf-8" src="/js/ueditor/ueditor.config.js?2023"></script>
<script type="text/javascript" charset="utf-8" src="/js/ueditor/ueditor.all.js?2023"> </script>
<script type="text/javascript" charset="utf-8" src="/js/ueditor/lang/zh-cn/zh-cn.js?2023"></script>
<script type="text/javascript" charset="utf-8" src="/js/ueditor/formdesign/leipi.formdesign.v4.js?2023"></script>
<script type="text/javascript" src="/layui/layui.js"></script>
<script src="/userJs/formBuilder.js?v=23"></script>

View File

@ -1,279 +0,0 @@
layui.config({
base: "/js/"
}).use(['form', 'vue', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'openauth'], function () {
var form = layui.form,
//layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
layer = layui.layer,
$ = layui.jquery;
var leipiEditor = UE.getEditor('myFormDesign', {
//allowDivTransToP: false,//阻止转换div 为p
toolleipi: true,//是否显示,设计器的 toolbars
textarea: 'design_content',
//这里可以选择自己需要的工具按钮名称,此处仅选择如下五个
toolbars: [[
'fullscreen', 'source', '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', '|', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'link', 'unlink', '|', 'horizontal', 'spechars', 'wordimage', '|', 'inserttable', 'deletetable', 'mergecells', 'splittocells']],
//focus时自动清空初始化时的内容
//autoClearinitialContent:true,
//关闭字数统计
wordCount: false,
//关闭elementPath
elementPathEnabled: false,
//默认的编辑区域高度
initialFrameHeight: 300
///,iframeCssUrl:"css/bootstrap/css/bootstrap.css" //引入自身 css使编辑器兼容你网站css
//更多其他参数请参考ueditor.config.js中的配置项
});
leipiFormDesign = {
/*执行控件*/
exec: function (method) {
leipiEditor.execCommand(method);
},
/*
Javascript 解析表单
template 表单设计器里的Html内容
fields 字段总数
*/
parse_form: function (template, fields) {
//正则 radios|checkboxs|select 匹配的边界 |--| 因为当使用 {} 时js报错
var preg = /(\|-<span(((?!<span).)*leipiplugins=\"(radios|checkboxs|select)\".*?)>(.*?)<\/span>-\||<(img|input|textarea|select).*?(<\/select>|<\/textarea>|\/>))/gi, preg_attr = /(\w+)=\"(.?|.+?)\"/gi, preg_group = /<input.*?\/>/gi;
if (!fields) fields = 0;
var template_parse = template, template_data = new Array(), add_fields = new Object(), checkboxs = 0;
var pno = 0;
template.replace(preg, function (plugin, p1, p2, p3, p4, p5, p6) {
var parse_attr = new Array(), attr_arr_all = new Object(), name = '', select_dot = '', is_new = false;
var p0 = plugin;
var tag = p6 ? p6 : p4;
//alert(tag + " \n- t1 - "+p1 +" \n-2- " +p2+" \n-3- " +p3+" \n-4- " +p4+" \n-5- " +p5+" \n-6- " +p6);
if (tag == 'radios' || tag == 'checkboxs') {
plugin = p2;
} else if (tag == 'select') {
plugin = plugin.replace('|-', '');
plugin = plugin.replace('-|', '');
}
plugin.replace(preg_attr, function (str0, attr, val) {
if (attr == 'name') {
if (val == 'leipiNewField') {
is_new = true;
fields++;
val = 'data_' + fields;
}
name = val;
}
if (tag == 'select' && attr == 'value') {
if (!attr_arr_all[attr]) attr_arr_all[attr] = '';
attr_arr_all[attr] += select_dot + val;
select_dot = ',';
} else {
attr_arr_all[attr] = val;
}
var oField = new Object();
oField[attr] = val;
parse_attr.push(oField);
})
/*alert(JSON.stringify(parse_attr));return;*/
if (tag == 'checkboxs') /*复选组 多个字段 */ {
plugin = p0;
plugin = plugin.replace('|-', '');
plugin = plugin.replace('-|', '');
var name = 'checkboxs_' + checkboxs;
attr_arr_all['parse_name'] = name;
attr_arr_all['name'] = '';
attr_arr_all['value'] = '';
attr_arr_all['content'] = '<span leipiplugins="checkboxs" title="' + attr_arr_all['title'] + '">';
var dot_name = '', dot_value = '';
p5.replace(preg_group, function (parse_group) {
var is_new = false, option = new Object();
parse_group.replace(preg_attr, function (str0, k, val) {
if (k == 'name') {
if (val == 'leipiNewField') {
is_new = true;
fields++;
val = 'data_' + fields;
}
attr_arr_all['name'] += dot_name + val;
dot_name = ',';
}
else if (k == 'value') {
attr_arr_all['value'] += dot_value + val;
dot_value = ',';
}
option[k] = val;
});
if (!attr_arr_all['options']) attr_arr_all['options'] = new Array();
attr_arr_all['options'].push(option);
//if(!option['checked']) option['checked'] = '';
var checked = option['checked'] != undefined ? 'checked="checked"' : '';
attr_arr_all['content'] += '<input type="checkbox" name="' + option['name'] + '" value="' + option['value'] + '" ' + checked + '/>' + option['value'] + '&nbsp;';
if (is_new) {
var arr = new Object();
arr['name'] = option['name'];
arr['leipiplugins'] = attr_arr_all['leipiplugins'];
add_fields[option['name']] = arr;
}
});
attr_arr_all['content'] += '</span>';
//parse
template = template.replace(plugin, attr_arr_all['content']);
template_parse = template_parse.replace(plugin, '{' + name + '}');
template_parse = template_parse.replace('{|-', '');
template_parse = template_parse.replace('-|}', '');
template_data[pno] = attr_arr_all;
checkboxs++;
} else if (name) {
if (tag == 'radios') /*单选组 一个字段*/ {
plugin = p0;
plugin = plugin.replace('|-', '');
plugin = plugin.replace('-|', '');
attr_arr_all['value'] = '';
attr_arr_all['content'] = '<span leipiplugins="radios" name="' + attr_arr_all['name'] + '" title="' + attr_arr_all['title'] + '">';
var dot = '';
p5.replace(preg_group, function (parse_group) {
var option = new Object();
parse_group.replace(preg_attr, function (str0, k, val) {
if (k == 'value') {
attr_arr_all['value'] += dot + val;
dot = ',';
}
option[k] = val;
});
option['name'] = attr_arr_all['name'];
if (!attr_arr_all['options']) attr_arr_all['options'] = new Array();
attr_arr_all['options'].push(option);
//if(!option['checked']) option['checked'] = '';
var checked = option['checked'] != undefined ? 'checked="checked"' : '';
attr_arr_all['content'] += '<input type="radio" name="' + attr_arr_all['name'] + '" value="' + option['value'] + '" ' + checked + '/>' + option['value'] + '&nbsp;';
});
attr_arr_all['content'] += '</span>';
} else {
attr_arr_all['content'] = is_new ? plugin.replace(/leipiNewField/, name) : plugin;
}
//attr_arr_all['itemid'] = fields;
//attr_arr_all['tag'] = tag;
template = template.replace(plugin, attr_arr_all['content']);
template_parse = template_parse.replace(plugin, '{' + name + '}');
template_parse = template_parse.replace('{|-', '');
template_parse = template_parse.replace('-|}', '');
if (is_new) {
var arr = new Object();
arr['name'] = name;
arr['leipiplugins'] = attr_arr_all['leipiplugins'];
add_fields[arr['name']] = arr;
}
template_data[pno] = attr_arr_all;
}
pno++;
})
var parse_form = new Object({
'fields': fields,//总字段数
'template': template,//完整html
'parse': template_parse,//控件替换为{data_1}的html
'data': template_data,//控件属性
'add_fields': add_fields//新增控件
});
return JSON.stringify(parse_form);
},
/*type = save 保存设计 versions 保存版本 close关闭 */
fnCheckForm: function (type) {
if (leipiEditor.queryCommandState('source'))
leipiEditor.execCommand('source');//切换到编辑模式才提交否则有bug
if (leipiEditor.hasContents()) {
leipiEditor.sync();/*同步内容*/
// return false;
//--------------以下仅参考-----------------------------------------------------------------------------------------------------
var type_value = '', formid = 0, fields = $("#fields").val(), formeditor = '';
if (typeof type !== 'undefined') {
type_value = type;
}
//获取表单设计器里的内容
formeditor = leipiEditor.getContent();
//解析表单设计器控件
var parse_form = this.parse_form(formeditor, fields);
//alert(parse_form);
//异步提交数据
$.ajax({
type: 'POST',
url: '/Forms/AddOrUpdate',
//dataType : 'json',
data: { 'type': type_value, 'formid': formid, 'parse_form': parse_form },
success: function (data) {
if (confirm('查看js解析后提交到服务器的数据请临时允许弹窗')) {
win_parse = window.open('', '', 'width=800,height=600');
//这里临时查看,所以替换一下,实际情况下不需要替换
data = data.replace(/<\/+textarea/, '&lt;textarea');
win_parse.document.write('<textarea style="width:100%;height:100%">' + data + '</textarea>');
win_parse.focus();
}
/*
if(data.success==1){
alert('保存成功');
$('#submitbtn').button('reset');
}else{
alert('保存失败!');
}*/
}
});
} else {
alert('表单内容不能为空!')
$('#submitbtn').button('reset');
return false;
}
},
/*预览表单*/
fnReview: function () {
if (leipiEditor.queryCommandState('source'))
leipiEditor.execCommand('source');/*切换到编辑模式才提交否则部分浏览器有bug*/
if (leipiEditor.hasContents()) {
leipiEditor.sync(); /*同步内容*/
alert("你点击了预览,请自行处理....");
return false;
//--------------以下仅参考-------------------------------------------------------------------
/*设计form的target 然后提交至一个新的窗口进行预览*/
document.saveform.target = "mywin";
window.open('', 'mywin', "menubar=0,toolbar=0,status=0,resizable=1,left=0,top=0,scrollbars=1,width=" + (screen.availWidth - 10) + ",height=" + (screen.availHeight - 50) + "\"");
document.saveform.action = "/index.php?s=/index/preview.html";
document.saveform.submit(); //提交表单
} else {
alert('表单内容不能为空!');
return false;
}
}
};
$("#btnSubmit").click(function() {
leipiFormDesign.fnCheckForm("save");
});
})

View File

@ -396,7 +396,20 @@
} }
editDlg.update(data[0]); editDlg.update(data[0]);
} }
, btnPreview:function() {
var checkStatus = table.checkStatus('mainList')
, data = checkStatus.data;
if (data.length != 1) {
layer.msg("请选择要预览的行,且同时只能编辑一行");
return;
}
layer.open({
type: 2,
area: ["800px", "700px"],
content: '/forms/preview?id=' + data[0].Id
});
}
, search: function () { //搜索 , search: function () { //搜索
mainList({ key: $('#key').val() }); mainList({ key: $('#key').val() });
} }

View File

@ -0,0 +1,14 @@
layui.config({
base: "/js/"
}).use(['form','vue', 'layer', 'jquery', 'table','droptree','queryString'], function () {
var form = layui.form,
element = layui.element,
//layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
layer = layui.layer,
$ = layui.jquery;
var id = $.getUrlParam("id");
$.get("/forms/previewdata?id=" + id, function (data) {
$("#content").html(data);
});
})