多单位版国产化地质资料管理系统
zs
2025-12-18 4f0d9bde31a80f6279e26466250da7716eec627f
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
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
/**
 * 添加子表行
 * @param subTabName
 * @param rowData
 */
function addSubTabRow(subTabName, rowData) {
    //获取对应的子表
    var elementName = "#subtable\\|" + subTabName;
    var subTab = $(elementName);
    if (subTab.length = 0) {
        return;
    }
 
    //获取模板列变量
    var templateHtml = window["templateHtml_" + subTabName];
    if (!templateHtml) {
        return;
    }
 
    var newRow = $(templateHtml);
    var index = $(elementName + " tr.datarow").length + 1;
 
    //把行数据放到元素的数据中去
    newRow.data("rowData", rowData);
 
    //如果有序号字段,则生成序号
    if (newRow.children("td.serial")) {
        newRow.children("td.serial").html(index);
    }
 
    if (rowData) {
        var props = Object.getOwnPropertyNames(rowData);
        for (var i = 0; i < props.length; i++) {
            var prop = props[i];
            var elmName = "subtable|" + subTabName + "|" + prop;
            var elms = $(newRow).find("[name='" + elmName + "']");
            if (elms.length > 0) {
                $(elms[0]).val(rowData[prop]);
            }
 
            //查找是否有标签
            var elmLabelName = "subtable|" + subTabName + "|" + prop + "|label";
            var elmLabels = $(newRow).find("[name='" + elmLabelName + "']");
            if (elmLabels.length > 0) {
                $(elmLabels[0]).html(rowData[prop]);
            }
        }
    }
 
    //将新行添加到子表中
    newRow.appendTo(elementName + " tbody");
 
    //解析新添加的行
    $.parser.parse(elementName);
}
 
function updateSubTabRowDatas(subTabName, newRowDatas, keyField) {
    //读取原有的rowDatas
    var rowDatas = getSubTabRowDatas(subTabName);
 
    //循环新数据,看是否需要添加进来
    for (var index in newRowDatas) {
        var isExists = false;
        for (var n = 0; n < rowDatas.length; n++) {
            if (rowDatas[n] && rowDatas[n][keyField] != "" && rowDatas[n][keyField] == newRowDatas[index][keyField]) {
                isExists = true;
                break;
            }
        }
 
        if (!isExists) {
            addSubTabRow(subTabName, newRowDatas[index]);
        }
    }
 
    //循环老数据,看是否需要删除
    for (var n = rowDatas.length - 1; n >= 0; n--) {
        var isExists = false;
        if (rowDatas[n]) {
            for (var index in newRowDatas) {
                if (rowDatas[n][keyField] != "" && rowDatas[n][keyField] == newRowDatas[index][keyField]) {
                    isExists = true;
                    break;
                }
            }
        }
 
        if (!isExists) {
            removeSubTabRowByIndex(subTabName, n);
        }
    }
}
 
//获取子表数据行的原始数据
function getSubTabRowDatas(subTabName) {
    var rowDatas = [];
 
    //获取对应的子表
    var elementName = "#subtable\\|" + subTabName;
    var subTab = $(elementName);
    if (subTab.length = 0) {
        return rowDatas;
    }
 
    var trs = $(elementName + " tr.datarow");
    for (var i = 0; i < trs.length; i++) {
        var tr = trs[i];
        var rowData = $(tr).data("rowData");
 
        //如果没有数据,则从字段中去读取
        if (!rowData) {
            var inputs = $(tr).find("input");
            if (inputs.length > 0) {
                rowData = new Object();
                for (var n = 0; n < inputs.length; n++) {
                    var input = inputs[n];
 
                    var inputName = $(input).attr("name");
                    if (inputName) {
                        var nameArr = inputName.split("|");
                        if (nameArr.length == 3) {
                            rowData[nameArr[2]] = $(input).val();
                        }
                    }
                }
            }
        }
 
        rowDatas.push(rowData);
    }
 
    return rowDatas;
}
 
function removeSubTabRowByIndex(subTabName, index) {
    //获取对应的子表
    var elementName = "#subtable\\|" + subTabName;
 
    var tr = $(elementName + " tr.datarow:eq(" + index + ")");
 
    if (tr.length > 0) {
        removeSubTabRow(tr[0]);
    }
}
 
/**
 * 删除子表行
 * @param obj
 */
function removeSubTabRow(obj) {
    var tr = $(obj).closest("tr");
    var table = $(obj).closest("table");
    if (tr.length == 0 && table.length == 0) {
        return;
    }
 
    //判断是否有ID,有ID则说明在数据库中,需要添加到待删除列表
    var tableIdName = $(table).attr("id");
    var idElemName = tableIdName + "|id";
    var idElem = $(tr).find("[name='" + idElemName + "']");
    if (idElem.length > 0) {
        id = $(idElem[0]).val();
        if (id != "") {
            var waitDeleteIdsElem = $("[name='" + tableIdName + "|waitDeleteIds'");
            if (waitDeleteIdsElem.length > 0) {
                var waitDeleteIds = $(waitDeleteIdsElem[0]).val();
                if (waitDeleteIds != "") {
                    waitDeleteIds += ",";
                }
 
                waitDeleteIds += id;
                $(waitDeleteIdsElem[0]).val(waitDeleteIds);
            }
        }
    }
 
    //删除行
    $(tr).remove();
 
    //如果有序号行,则重新生成序号
    var serialCols = $(table).find("td.serial");
    if (serialCols.length > 0) {
        $(serialCols).each(function (index, val) {
            $(val).html(index + 1);
        });
    }
}
 
/**
 * 处理表单数据中的子表数据(将子表数据转换为对象)
 * @param formData
 */
function dealSubTabData(formData) {
    var propertys = Object.getOwnPropertyNames(formData);
    for (var i = 0, len = propertys.length; i < len; i++) {
        var prop = propertys[i];
        if (prop.indexOf("subtable|") == 0) {
 
            var parts = prop.split('|');
            if (parts.length == 3) {
                var subTabName = parts[1];
                var fieldName = parts[2];
 
                if (!formData.hasOwnProperty("subTabItems")) {
                    formData.subTabItems = new Object();
                }
 
                if (!formData.subTabItems.hasOwnProperty(subTabName)) {
                    formData.subTabItems[subTabName] = new Object();
                    formData.subTabItems[subTabName].items = new Array();
                    formData.subTabItems[subTabName].waitDeleteIds = "";
                }
 
                if (fieldName == "waitDeleteIds") {
                    formData.subTabItems[subTabName].waitDeleteIds = formData[prop];
                } else {
                    if (Array.isArray(formData[prop])) {
                        for (var j = 0, n = formData[prop].length; j < n; j++) {
                            if (!formData.subTabItems[subTabName].items[j]) {
                                formData.subTabItems[subTabName].items[j] = new Object();
                            }
 
                            formData.subTabItems[subTabName].items[j][fieldName] = formData[prop][j];
                        }
                    } else {
                        if (!formData.subTabItems[subTabName].items[0]) {
                            formData.subTabItems[subTabName].items[0] = new Object();
                        }
 
                        formData.subTabItems[subTabName].items[0][fieldName] = formData[prop];
                    }
                }
            }
 
            delete formData[prop];
        }
    }
 
    //清理所有字段都为空的数据
    if (formData.hasOwnProperty("subTabItems")) {
        var subTabNames = Object.getOwnPropertyNames(formData.subTabItems);
        for (var n = 0, len = subTabNames.length; n < len; n++) {
            var subTabName = subTabNames[n];
 
            //倒序清理,因为要删除数组元素
            for (var p = formData.subTabItems[subTabName].items.length - 1; p >= 0; p--) {
                var item = formData.subTabItems[subTabName].items[p];
                var isEmpty = true;
 
                var propertys = Object.getOwnPropertyNames(item);
                for (j = 0; j < propertys.length; j++) {
                    var prop = propertys[j];
 
                    //如果有一个属性不为空,则跳出
                    if (item[prop] && item[prop] != "") {
                        isEmpty = false;
                        break;
                    }
                }
 
                //如果都为空,则删除该条数据
                if (isEmpty) {
                    delete formData.subTabItems[subTabName].items.splice(p, 1);
                }
            }
 
            //如果该子表没有有效数据,且没有删除的数据,则把该子表信息一起删除
            if (formData.subTabItems[subTabName].items.length == 0 && formData.subTabItems[subTabName].waitDeleteIds == "") {
                delete formData.subTabItems[subTabName];
            }
        }
    }
}