IT-KIMI_SHI\SINOIT.KIMI
2018-06-01 64c40fb427bff513f575f11e4c1e7bd9a1bfe3e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/**
 * 动态表单Javascript,负责读取表单元素、启动流程
 */
$(function() {
    $('.startup-process').button({
        icons: {
            primary: 'ui-icon-play'
        }
    }).click(showStartupProcessDialog);
});
 
/**
 * 打开启动流程
 */
 
function showStartupProcessDialog() {
    var $ele = $(this);
    $('<div/>', {
        'class': 'dynamic-form-dialog',
        title: '启动流程[' + $ele.parents('tr').find('.process-name').text() + ']',
        html: '<span class="ui-loading">正在读取表单……</span>'
    }).dialog({
        modal: true,
        width: 400,
        height: $.common.window.getClientHeight() / 2,
        open: function() {
            // 获取json格式的表单数据,就是流程定义中的所有field
            readFormFields.call(this, $ele.parents('tr').find('.process-id').text());
        },
        buttons: [{
            text: '启动流程',
            click: sendStartupRequest
        }]
    });
}
 
/**
 * 读取表单字段
 */
 
function readFormFields(processDefinitionId) {
    var dialog = this;
 
    // 清空对话框内容
    $('.dynamic-form-dialog').html("<form class='dynamic-form' method='post'><table class='dynamic-form-table'></table></form>");
    var $form = $('.dynamic-form');
 
    // 设置表单提交id
    $form.attr('action', ctx + '/form/dynamic/start-process/' + processDefinitionId);
 
    // 添加隐藏域
    if ($('#processType').length == 0) {
        $('<input/>', {
            'id': 'processType',
            'name': 'processType',
            'type': 'hidden'
        }).val(processType).appendTo($form);
    }
 
    // 读取启动时的表单
    $.getJSON(ctx + '/form/dynamic/get-form/start/' + processDefinitionId, function(data) {
        var trs = "";
        $.each(data.form.formProperties, function() {
            alert(JSON.stringify(data))''
            var className = this.required === true ? "required" : "";
            trs += "<tr>" + createFieldHtml(data, this, className)
            if(this.required === true) {
                trs += "<span style='color:red'>*</span>";
            }
            trs += "</td></tr>";
        });
 
        // 添加table内容
        $('.dynamic-form-table').html(trs).find('tr').hover(function() {
            $(this).addClass('ui-state-hover');
        }, function() {
            $(this).removeClass('ui-state-hover');
        });
 
        // 初始化日期组件
        $form.find('.dateISO').datepicker();
 
        // 表单验证
        $form.validate($.extend({}, $.common.plugin.validator));
    });
}
 
/**
 * form对应的string/date/long/enum/boolean类型表单组件生成器
 * fp_的意思是form paremeter
 */
var formFieldCreator = {
    string: function(formData, prop, className) {
        var result = "<td width='120'>" + prop.name + ":</td><td><input type='text' id='" + prop.id + "' name='fp_" + prop.id + "' class='" + className + "' />";
        return result;
    },
    date: function(formData, prop, className) {
        var result = "<td>" + prop.name + ":</td><td><input type='text' id='" + prop.id + "' name='fp_" + prop.id + "' class='dateISO " + className + "' />";
        return result;
    },
    'enum': function(formData, prop, className) {
        console.log(prop);
        var result = "<td width='120'>" + prop.name + ":</td>";
        if(prop.writable === true) {
            result += "<td><select id='" + prop.id + "' name='fp_" + prop.id + "' class='" + className + "'>";
            //result += "<option>" + datas + "</option>";
            
            $.each(formData['enum_' + prop.id], function(k, v) {
                result += "<option value='" + k + "'>" + v + "</option>";
            });
             
            result += "</select>";
        } else {
            result += "<td>" + prop.value;
        }
        return result;
    },
    'users': function(formData, prop, className) {
        var result = "<td width='120'>" + prop.name + ":</td><td><input type='text' id='" + prop.id + "' name='fp_" + prop.id + "' class='" + className + "' />";
        return result;
    }
};
 
/**
 * 生成一个field的html代码
 */
 
function createFieldHtml(formData, prop, className) {
    return formFieldCreator[prop.type.name](formData, prop, className);
}
 
/**
 * 发送启动流程请求
 */
 
function sendStartupRequest() {
    if($(".dynamic-form").valid()) {
        $('.dynamic-form').submit();
    }
}