File size: 9,196 Bytes
530729e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
package types

var tmpls = map[string]string{"choose": `{{define "choose"}}
    <script>
        $("select.{{.Field}}").on("select2:select", function (e) {
            if (e.params.data.text === {{.Val}} || e.params.data.id === {{.Val}}) {
                if ($("select.{{.ChooseField}}").length > 0) {
                    $("select.{{.ChooseField}}").val("{{.Value}}[0]").select2()
                } else {
                    $(".{{.ChooseField}}").val({{.Value}})
                }
            }
        })
    </script>
{{end}}`, "choose_ajax": `{{define "choose_ajax"}}
    <script>

        let {{.Field}}_updateBoxSelections = function (selectObj, new_opts) {
            selectObj.html('');
            new_opts.forEach(function (opt) {
                selectObj.append($('<option value="' + opt["id"] + '">' + opt["text"] + '</option>'));
            });
            selectObj.bootstrapDualListbox('refresh', true);
        };

        let {{.Field}}_req = function (selectObj, box, event) {
            $.ajax({
                url: "{{.Url}}",
                type: 'post',
                dataType: 'text',
                data: {
                    'value': $("select.{{.Field}}").val(),
                    {{.PassValue}}
                    'event': event
                },
                success: function (data) {
                    if (typeof (data) === "string") {
                        data = JSON.parse(data);
                    }
                    if (data.code === 0) {
                        {{if eq .ActionJS ""}}

                        if (selectObj.length > 0) {
                            if (typeof (data.data) === "object") {
                                if (box) {
                                    {{.Field}}_updateBoxSelections(selectObj, data.data)
                                } else {
                                    if (typeof (selectObj.attr("multiple")) !== "undefined") {
                                        selectObj.html("");
                                    }
                                    selectObj.select2({
                                        data: data.data
                                    });
                                }
                            } else {
                                if (box) {
                                    selectObj.val(data.data).select2()
                                } else {

                                }
                            }
                        } else {
                            $('.{{.ChooseField}}').val(data.data);
                        }

                        {{else}}

                        {{.ActionJS}}

                        {{end}}
                    } else {
                        swal(data.msg, '', 'error');
                    }
                },
                error: function () {
                    alert('error')
                }
            });
        };

        if ($("label[for='{{.Field}}']").next().find(".bootstrap-duallistbox-container").length === 0) {
            $("select.{{.Field}}").on("select2:select", function (e) {
                let id = '{{.ChooseField}}';
                let selectObj = $("select." + id);
                if (selectObj.length > 0) {
                    selectObj.val("").select2();
                    selectObj.html('<option value="" selected="selected"></option>')
                }
                {{.Field}}_req(selectObj, false, "select");
            });
            if (typeof ($("select.{{.Field}}").attr("multiple")) !== "undefined") {
                $("select.{{.Field}}").on("select2:unselect", function (e) {
                    let id = '{{.ChooseField}}';
                    let selectObj = $("select." + id);
                    if (selectObj.length > 0) {
                        selectObj.val("").select2();
                        selectObj.html('<option value="" selected="selected"></option>')
                    }
                    {{.Field}}_req(selectObj, false, "unselect");
                })
            }
        } else {
            let {{.Field}}_lastState = $(".{{.Field}}").val();

            $(".{{.Field}}").on('change', function (e) {
                var newState = $(this).val();
                if ($({{.Field}}_lastState).not(newState).get().length > 0) {
                    let id = '{{.ChooseField}}';
                    {{.Field}}_req($("." + id), true, "unselect");
                }
                if ($(newState).not({{.Field}}_lastState).get().length > 0) {
                    let id = '{{.ChooseField}}';
                    {{.Field}}_req($("." + id), true, "select");
                }
                {{.Field}}_lastState = newState;
            })
        }
    </script>
{{end}}`, "choose_custom": `{{define "choose_custom"}}
    <script>
        $("select.{{.Field}}").on("select2:select", function (e) {
            {{.JS}}
        })
    </script>
{{end}}`, "choose_disable": `{{define "choose_disable"}}
    <script>
        $("select.{{.Field}}").on("select2:select", function (e) {
            if ({{.Value}}.indexOf(e.params.data.text) !== -1 || {{.Value}}.indexOf(e.params.data.id) !== -1) {
                {{range $key, $fields := .ChooseFields}}

                $(".{{$fields}}").prop('disabled', true);

                {{end}}
            } else {
                {{range $key, $fields := .ChooseFields}}

                $(".{{$fields}}").prop('disabled', false);

                {{end}}
            }
        });
    </script>
{{end}}`, "choose_hide": `{{define "choose_hide"}}
    <script>
        $("select.{{.Field}}").on("select2:select", function (e) {
            if ({{.Value}}.indexOf(e.params.data.text) !== -1 || {{.Value}}.indexOf(e.params.data.id) !== -1) {
                {{range $key, $fields := .ChooseFields}}

                $("label[for='{{$fields}}']").parent().hide();

                {{end}}
            } else {
                {{range $key, $fields := .ChooseFields}}

                $("label[for='{{$fields}}']").parent().show();

                {{end}}
            }
        });
        $(function () {
            let {{.Field}}data = $(".{{.Field}}").select2("data");
            let {{.Field}}text = "";
            let {{.Field}}id = "";
            if ({{.Field}}data.length > 0) {
                {{.Field}}text = {{.Field}}data[0].text;
                {{.Field}}id = {{.Field}}data[0].id;
            }
            if ({{.Value}}.indexOf({{$.Field}}text) !== -1 || {{.Value}}.indexOf({{$.Field}}id) !== -1) {
                {{range $key, $fields := .ChooseFields}}

                $("label[for='{{$fields}}']").parent().hide();

                {{end}}
            }
        })
    </script>
{{end}}`, "choose_map": `{{define "choose_map"}}
    <script>
        $("select.{{.Field}}").on("select2:select", function (e) {
            {{range $val, $object := .Data}}

            {{if $object.Hide}}

            if (e.params.data.text === "{{$val}}" || e.params.data.id === "{{$val}}") {
                $("label[for='{{$object.Field}}']").parent().hide()
            } else {
                $("label[for='{{$object.Field}}']").parent().show()
            }

            {{else if $object.Disable}}

            if (e.params.data.text === "{{$val}}" || e.params.data.id === "{{$val}}") {
                $("label[for='{{$object.Field}}']").prop('disabled', true);
            } else {
                $("label[for='{{$object.Field}}']").prop('disabled', false);
            }

            {{else}}

            if (e.params.data.text === "{{$val}}" || e.params.data.id === "{{$val}}") {
                if ($("select.{{$object.Field}}").length > 0) {
                    $("select.{{$object.Field}}").val("{{$object.Value}}").select2()
                } else {
                    $("#{{$object.Field}}").val("{{$object.Value}}")
                }
            }

            {{end}}

            {{end}}
        })
    </script>
{{end}}`, "choose_show": `{{define "choose_show"}}
    <script>
        $("select.{{.Field}}").on("select2:select", function (e) {
            if ({{.Value}}.indexOf(e.params.data.text) !== -1 || {{.Value}}.indexOf(e.params.data.id) !== -1) {
                {{range $key, $fields := .ChooseFields}}

                $("label[for='{{$fields}}']").parent().show();

                {{end}}
            } else {
                {{range $key, $fields := .ChooseFields}}

                $("label[for='{{$fields}}']").parent().hide();

                {{end}}
            }
        });
        $(function () {
            let {{.Field}}data = $(".{{.Field}}").select2("data");
            let {{.Field}}text = "";
            let {{.Field}}id = "";
            if ({{.Field}}data.length > 0) {
                {{.Field}}text = {{.Field}}data[0].text;
                {{.Field}}id = {{.Field}}data[0].id;
            }
            if ({{.Value}}.indexOf({{$.Field}}text) !== -1 || {{.Value}}.indexOf({{$.Field}}id) !== -1) {
                {{range $key, $fields := .ChooseFields}}

                $("label[for='{{$fields}}']").parent().show();

                {{end}}
            }
        })
    </script>
{{end}}`}