wtt
2024-07-18 5e7f2da8f4a9ffa660e94056ac443c0873ab1659
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
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>委外用料单列表</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../../layuiadmin/style/admin.css" media="all">
    <script src="../../../layuiadmin/layui/layui.js"></script>
    <script src="../../../layuiadmin/layui/layui.js"></script>
    <script src="../../../layuiadmin/Scripts/json2.js"></script>
    <script src="../../../layuiadmin/Scripts/jquery-1.4.1.js"></script>
    <script src="../../../layuiadmin/Scripts/webConfig.js"></script>
    <script src="../../../layuiadmin/PubCustom.js"></script>
    <script src="../../../layuiadmin/zgqCustom/zgqCustom.js"></script>
    <script src="../../../layuiadmin/soulTable.slim.js"></script>
</head>
<body>
    <div class="layui-fluid">
        <div class="layui-col-md12">
            <div class="layui-card" style="padding: 1px">
                <div class="layui-card-body" style="padding: 1px;">
                    <form class="layui-form" action="" lay-filter="component-form-group">
                        <div class="layui-collapse">
                            <div class="layui-colla-item">
                                <div class="layui-colla-title layui-inline">
                                    <div class="layui-inline">
                                        <span>更多</span>
                                    </div>
                                </div>
                                <div class="layui-inline">
                                    <label class="layui-form-label">单据号</label>
                                    <div class="layui-input-block">
                                        <input type="text" class="layui-input ForFilteringSchemes" id="HBillNo" style="width:190px;">
                                    </div>
                                </div>
                                <div class="layui-inline">
                                    <label class="layui-form-label">日期间隔</label>
                                    <div class="layui-input-block">
                                        <select name="HInitTimeCycle" id="HInitTimeCycle" class="ForFilteringSchemes" lay-filter="HInitTimeCycle" style="width:190px;">
                                        </select>
                                    </div>
                                </div>
                                <div class="layui-inline">
                                    <label class="layui-form-label">开始日期</label>
                                    <div class="layui-input-block">
                                        <input type="date" class="layui-input ForFilteringSchemes" id="HBeginDate" style="width:190px;">
                                    </div>
                                </div>
                                <div class="layui-inline">
                                    <label class="layui-form-label">结束日期</label>
                                    <div class="layui-input-block">
                                        <input type="date" class="layui-input ForFilteringSchemes" id="HEndDate" style="width:190px;">
                                    </div>
                                </div>
                                <div class="layui-inline">
                                    <label class="layui-form-label">发料日期</label>
                                    <div class="layui-input-block">
                                        <input type="date" class="layui-input ForFilteringSchemes" id="HEndDates" style="width:190px;">
                                    </div>
                                </div>
 
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnSearch" id="btnSearch">
                                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                                </button>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnReSearch" id="btnReSearch" style="padding:0 5px">重置</button>
                                <!--显示当前过滤方案-->
                                <div class="layui-inline" style="margin-left:5px;">
                                    <div style="text-align:center;font-size:15px;font-weight:bold;color:#fc9393" id="HFilterScheme_Now"></div>
                                </div>
                                <div class="layui-colla-content">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">部门名称</label>
                                        <div class="layui-input-block">
                                            <input type="text" class="layui-input ForFilteringSchemes" id="HDepartName" style="width:190px;">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">物料代码</label>
                                        <div class="layui-input-block">
                                            <input type="text" class="layui-input ForFilteringSchemes" id="HMaterNumber" style="width:190px;">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">物料名称</label>
                                        <div class="layui-input-block">
                                            <input type="text" class="layui-input ForFilteringSchemes" id="HMaterName" style="width:190px;">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">仓库</label>
                                        <div class="layui-input-block">
                                            <input type="text" class="layui-input ForFilteringSchemes" id="HStocID" style="width:190px;">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">制单人</label>
                                        <div class="layui-input-block">
                                            <input type="text" class="layui-input ForFilteringSchemes" id="HMakerMan" style="width:190px;">
                                        </div>
                                    </div>
                                </div>
                                <div class="layui-colla-content" style="padding: 0px; margin-left: 6%;">
                                    <div class="layui-row" style="margin-top:5px">
                                        <div class="layui-inline">
                                            <label class="layui-form-label">过滤</label>
                                            <div class="layui-input-block">
                                                <select name="ColName" id="ColName" class="ForFilteringSchemes" lay-filter="ColName" style="width:190px;">
                                                </select>
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <select name="Comparator" id="Comparator" class="ForFilteringSchemes" lay-filter="Comparator" style="width:190px;">
                                                <option value="0" selected="selected"></option>
                                                <option value="=">=</option>
                                                <option value=">=">>=</option>
                                                <option value=">">></option>
                                                <option value="<="><=</option>
                                                <option value="<"><</option>
                                                <option value="<>"><></option>
                                                <option value="7">包含</option>
                                                <option value="8">左包含</option>
                                                <option value="9">右包含</option>
                                                <option value="10">不包含</option>
                                            </select>
                                        </div>
                                        <div class="layui-inline">
                                            <input type="text" class="layui-input ForFilteringSchemes" value="" name="ColContent" id="ColContent">
 
                                        </div>
 
 
                                    </div>
                                    <div class="layui-row" style="margin-top: 10px; margin-bottom: 10px ">
                                        <div class="layui-inline">
                                            <label class="layui-form-label">过滤</label>
                                            <div class="layui-input-block">
                                                <select name="ColName1" id="ColName1" class="ForFilteringSchemes" lay-filter="ColName1" style="width:190px;">
                                                </select>
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <select name="Comparator1" id="Comparator1" lay-filter="Comparator1" class="ForFilteringSchemes" style="width:190px;">
                                                <option value="0" selected="selected"></option>
                                                <option value="=">=</option>
                                                <option value=">=">>=</option>
                                                <option value=">">></option>
                                                <option value="<="><=</option>
                                                <option value="<"><</option>
                                                <option value="<>"><></option>
                                                <option value="7">包含</option>
                                                <option value="8">左包含</option>
                                                <option value="9">右包含</option>
                                                <option value="10">不包含</option>
                                            </select>
                                        </div>
                                        <div class="layui-inline">
                                            <input type="text" class="layui-input ForFilteringSchemes" value="" name="ColContent1" id="ColContent1">
                                        </div>
                                    </div>
                                    <div class="layui-row" style="margin-top: 10px; margin-bottom: 10px ">
                                        <div class="layui-inline">
                                            <label class="layui-form-label">过滤</label>
                                            <div class="layui-input-block">
                                                <select name="ColName2" id="ColName2" class="ForFilteringSchemes" lay-filter="ColName2" style="width:190px;">
                                                </select>
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <select name="Comparator2" id="Comparator2" lay-filter="Comparator2" class="ForFilteringSchemes" style="width:190px;">
                                                <option value="0" selected="selected"></option>
                                                <option value="=">=</option>
                                                <option value=">=">>=</option>
                                                <option value=">">></option>
                                                <option value="<="><=</option>
                                                <option value="<"><</option>
                                                <option value="<>"><></option>
                                                <option value="7">包含</option>
                                                <option value="8">左包含</option>
                                                <option value="9">右包含</option>
                                                <option value="10">不包含</option>
                                            </select>
                                        </div>
                                        <div class="layui-inline">
                                            <input type="text" class="layui-input ForFilteringSchemes" value="" name="ColContent2" id="ColContent2">
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <table class="" id="mainTable" lay-filter="mainTable"></table>
                        <script type="text/html" id="toolbarDemo">
                            <div class="layui-btn-container">
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-Add"><i class="layui-icon layui-icon-file-b"></i>新增</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-Edit"><i class="layui-icon layui-icon-form"></i>编辑</button>
                                <!--<button type="button" class="layui-btn layui-btn-sm" lay-event="btn-view"><i class="layui-icon layui-icon-tips"></i>预览</button>
                                 <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-print"><i class="layui-icon layui-icon-print"></i>打印</button>-->
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-audit"><i class="layui-icon layui-icon-repeat"></i>审核</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-Faudit"><i class="layui-icon layui-icon-refresh"></i>反审核</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-Delete"><i class="layui-icon layui-icon-delete"></i>删除</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="set_HideColumn"><i class="layui-icon layui-icon-form"></i>列设置</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="get_Exit"><i class="layui-icon layui-icon-logout"></i>退出</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="set_SaveScheme" id="set_SaveScheme"><i class="layui-icon layui-icon-template"></i>保存方案</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="set_ReadScheme" id="set_ReadScheme"><i class="layui-icon layui-icon-set"></i>读取方案</button>
                            </div>
                        </script>
                    </form>
                </div>
            </div>
        </div>
    </div>
 
    <script type="text/javascript">
        layui.config({
            base: '../../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index', //主入口模块
            //使用layui.use 加载模块
        }).use(['index', 'form', 'table', 'element', 'laypage', 'laydate', 'soulTable'], function () {
            //#region 公共变量
            var $ = layui.$
                , admin = layui.admin
                , layer = layui.layer           //Layer是Layui的一个独立模块,用于快速构建网页弹出层
                , table = layui.table           //Table模块是Layui用于构建表格的模块
                , form = layui.form             //Form模块提供了丰富的表单元素和表单验证功能
                , element = layui.element                   //Element模块是Layui的UI组件库
                , laypage = layui.laypage              //Laypage是Layui的分页组件
                , laydate = layui.laydate            // Laydate是Layui的日期时间选择器组件
                , util = layui.util                 //Util模块是Layui提供的一些工具方法集合,如请求数据、处理日期时间等
                , soulTable = layui.soulTable          //SoulTable是Layui的一个扩展模块,它基于Layui的Table模块进行了深度定制和扩展,提供了更加强大和灵活的表格操作功能
            //查询条件
            var sWhere = "";                             //定义一个swhere参数
            var option = [];                             //定义一个option数组
            var HModName = "WW_PPBomBillList";           //定义一个模块表单名
            //#endregion
 
            //定义一个需要隐藏的数组
            var titleData = ["单据ID", "单据类型", "HDeptID", "HUnitID", "HMaterID", "HWHID", "HSPID", "源单主内码", "源单子内码"];//不需要显示的字段 可扩展   
            //#region 【过滤方案】
 
            //过滤条件的class类
            var HClassTag = "ForFilteringSchemes";  //定义一个过滤条件class类 使其值为
            //模块名称(中文版) 每个模块页面都需要修改
            window.HModuleName = "委外用料单";   //设置模块名  创建全局对象 window 的一个属性 HModuleName,并将这个属性的值设置为字符串 "委外用料单"
            //是否已经选择了过滤方案(全局变量)
            window.HDefaultFilter = "";
            //选择的过滤方案内码(全局变量)
            window.HInterID_Choose = 0;
    
            //#endregion
 
            //#region 进入页面既加载
            set_ClearBill();
            //#endregion
 
            //#region 点击事件包括on form事件等
            //头工具栏事件
            table.on('toolbar(mainTable)', function (obj) {
                switch (obj.event) {
                    //新增按钮
                    case 'btn-Add': set_AddNew();
                        break;
                    //编辑按钮
                    case 'btn-Edit': set_ShowBill();
                        break;
                    //删除按钮
                    case 'btn-Delete': set_DeleteBill();
                        break;
                    //浏览
                    case 'btn-view': get_ViewReport();
                        break;
                    //打印
                    case 'btn-print': get_PrintReport();
                        break;
                    //审核
                    case 'btn-audit': get_Audit();
                        break;
                    //反审核
                    case 'btn-Faudit': get_FAudit();
                        break;
                    //刷新
                    case 'get_Refresh': set_Refresh();
                        break;
                    //列设置
                    case 'set_HideColumn': get_HideColumn();
                        break;
                    //退出
                    case 'get_Exit': Pub_Close(2);
                        break;
                    //保存方案
                    case 'set_SaveScheme': set_SaveScheme();
                        break;
                    //读取方案
                    case 'set_ReadScheme': set_ReadScheme();
                        break;
                };
            });
 
            //重置按钮
            form.on('submit(btnReSearch)', function (data) {
                set_ClearQuery();   //执行重置方法
            });
 
            //查询按钮
            form.on('submit(btnSearch)', function (data) {
                get_FastQuery();    //执行查询方法
            });
 
            //日期间隔下拉列表监听
            form.on('select(HInitTimeCycle)', function (data) {
                //$("#HInitTimeCycle").val() *1会将其转换为数值类型
                var HInitTimeCycle = $("#HInitTimeCycle").val() * 1;    //将获取的下拉框值*1转化为数字类型 赋值给变量HInitTimeCycle
                //若日期间隔不为 任意间隔,则禁用开始日期与结束日期的选择
                if (HInitTimeCycle != -1) {                               // 判断 hintimecycle参数 的下拉框是否为自选状态,  则执行
                    $('#HBeginDate').prop('disabled', true);              //如果为不可选 则开始时间默认为灰色
                    $('#HEndDate').prop('disabled', true);                //如果为不可选 则开始时间默认为灰色
 
                    $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * HInitTimeCycle), "yyyy-MM-dd"));      //则开始时间 ,获取当前系统时间减去需要减去的时间即为开始时间
                    $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));                                                        // 结束时间获取系统当前时间 
 
                    //执行查询方法
                    get_FastQuery();
                } else {    //如果为时间任意间隔 ,则执行
                    $('#HBeginDate').prop('disabled', false);     //选择需要查询开始时间
                    $('#HEndDate').prop('disabled', false);       //选择需要查询结束时间
                }
            });
            //#endregion
 
 
            //#region 此页面所有方法
            function set_ClearBill() {
                //初始化日期间隔、开始日期、结束日期
                setSelect_HInitTimeCycle();
                //若日期间隔不为 任意间隔,则禁用开始日期与结束日期的选择 
                var HInitTimeCycle = $("#HInitTimeCycle").val() * 1;         //将获取的下拉框值*1转化为数字类型 赋值给变量HInitTimeCycle   //从页面上获取HInitTimeCycle元素的值,并确保这个值被存储为一个数值类型的变量
                if (HInitTimeCycle != -1) {
                    $('#HBeginDate').prop('disabled', true);               //如果为不可选 则开始时间默认为灰色
                    $('#HEndDate').prop('disabled', true);        //如果为不可选 则开始时间默认为灰色
                } else {
                    $('#HBeginDate').prop('disabled', false);     //选择需要查询开始时间
                    $('#HEndDate').prop('disabled', false);      //选择需要查询结束时间
                }
 
                //根据日期间隔设置开始时间与结束时间
                $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * HInitTimeCycle), "yyyy-MM-dd"));   //获取HBeginDate的值,根据获取系统当前时间减去相应的天数即为开始时间
                $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));       // 结束时间获取系统当前时间 
                $("#HEndDates").val(Format(new Date(), "yyyy-MM-dd"));       // 发料时间获取系统当前时间 
                //初始化表格
                set_InitGrid();        //执行表格初始化方法 
                //直接执行列表筛选 加载数据到网格
                get_FastQuery();        //执行查询方法  
                
                //隐藏勾选字段
                DisPlay_HideColumn();//执行隐藏方法
 
                //任意字段过滤下拉框初始化
                ColFilter();   
 
                //查询当前登录用户有没有在当前模块设置默认过滤方案
                get_DefaultModule();  
            }
 
            //初始化表格
            function set_InitGrid() {  
                $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * 30), "yyyy-MM-dd"));   //初始化开始时间
                $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));                                          //初始化结束时间
                var columns = [                                                                                //初始化表单
                    { type: 'checkbox', fixed: 'left', totalRowText: '合计'}                                   //  初始化合计行
                    , { field: 'hmainid', title: '单据ID', width: 200, hide: true, sort: true }
                    , { field: '日期', title: '日期', width: 125, templet: "<div>{{d.日期 ==null ?'':layui.util.toDateString(d.日期, 'yyyy-MM-dd')}}</div>", sort: true }
                    , { field: '单据号', title: '单据号', width: 200, sort: true}
                    , { field: 'HBillType', title: '单据类型', width: 200, hide: true, sort: true }
                    , { field: 'HDeptID', title: 'HDeptID', width: 200, hide: true, sort: true }
                    , { field: '部门名称', title: '部门名称', width: 110, sort: true }
                    , { field: 'HUnitID', title: 'HUnitID', width: 200, hide: true, sort: true }
                    , { field: '单位', title: '单位', width: 200, sort: true }
                    , { field: '数量', title: '数量', width: 200, sort: true, totalRow: true}
                    , { field: '类型', title: '类型', width: 200, sort: true }
                    , { field: 'HMaterID', title: 'HMaterID', width: 200, hide: true, sort: true }
                    , { field: '物料代码', title: '物料代码', width: 110, sort: true }
                    , { field: '物料名称', title: '物料名称', width: 110, sort: true }
                    , { field: '发料日期', title: '发料日期', width: 125, templet: "<div>{{d.发料日期 ==null ?'':layui.util.toDateString(d.发料日期, 'yyyy-MM-dd')}}</div>", sort: true }
                    , { field: 'HWHID', title: 'HWHID', width: 200, hide: true, sort: true }
                    , { field: '仓库代码', title: '仓库代码', width: 200, sort: true }
                    , { field: '仓库', title: '仓库', width: 200, sort: true }
                    , { field: 'HSPID', title: 'HSPID', width: 200, hide: true, sort: true }
                    , { field: '仓位代码', title: '仓位代码', width: 200, sort: true }
                    , { field: '仓位', title: '仓位', width: 200, sort: true }
                    , { field: '损耗率', title: '损耗率', width: 200, sort: true }
                    , { field: '表头备注', title: '表头备注', width: 200, sort: true }
 
                    , { field: '制单人', title: '制单人', width: 200, sort: true }
             //当制单日期 d.制单日期 == null ? '' : layui.util.toDateString(...) 是一个三元运算符表达式,用于根据条件来决定返回哪个值。
                    , { field: '制单日期', title: '制单日期', width: 200, templet: "<div>{{d.制单日期 ==null ?'':layui.util.toDateString(d.制单日期, 'yyyy-MM-dd HH:mm:ss')}}</div>", sort: true }
                    , { field: '审核人', title: '审核人', width: 200, sort: true }
                    , { field: '审核日期', title: '审核日期', width: 200, templet: "<div>{{d.审核日期 ==null ? '':layui.util.toDateString(d.审核日期, 'yyyy-MM-dd HH:mm:ss')}}</div>", sort: true }
                    , { field: '修改人', title: '修改人', width: 200, sort: true }
                    , { field: '修改日期', title: '修改日期', width: 200, templet: "<div>{{d.修改日期 ==null ?'':layui.util.toDateString(d.修改日期, 'yyyy-MM-dd HH:mm:ss')}}</div>", sort: true }
                    , { field: '关闭人', title: '关闭人', width: 200, sort: true }
                    , { field: '关闭日期', title: '关闭日期', width: 200, templet: "<div>{{d.关闭日期 ==null ?'':layui.util.toDateString(d.关闭日期, 'yyyy-MM-dd HH:mm:ss')}}</div>", sort: true }
                    , { field: '作废人', title: '作废人', width: 200, sort: true }
                    , { field: '作废日期', title: '作废日期', width: 200, templet: "<div>{{d.作废日期 ==null ?'':layui.util.toDateString(d.作废日期, 'yyyy-MM-dd HH:mm:ss')}}</div>", sort: true }
                    , { field: '行关闭人', title: '行关闭人', width: 200, sort: true }
                    , { field: '关闭类型', title: '关闭类型', width: 200, sort: true }
                    , { field: '表体备注', title: '表体备注', width: 200, sort: true }
                    , { field: '源单主内码', title: '源单主内码', width: 200, hide: true, sort: true }
                    , { field: '源单子内码', title: '源单子内码', width: 200, hide: true, sort: true }
                    , { field: '源单单号', title: '源单单号', width: 200, sort: true }
                    , { field: '源单类型', title: '源单类型', width: 200, sort: true }
                    , { field: '关联数量', title: '关联数量', width: 200, sort: true }
                ];
                option = {                                  //设置参数
                    elem: '#mainTable'                               // 使用#mainTable作为表格的DOM元素 
                    , toolbar: '#toolbarDemo'                     //加载tolbardemo这个表格
                    , page: true                               // 开启分页 
                    , cellMinWidth: 120                      //页签宽度
                    , totalRow: true                          //   是否合计行
                    , limit: 50                            //页签默认显示多少行
                    , height: 'full-50'                      //   页签高度
                    , cols: [columns]                              // 列表列
                    , limits: [50, 500, 5000, 20000]          //页签选择
                    , done: function (res, curr, count) {        //  done 特定函数调用res  curr count参数 res:表示异步操作的结果 、curr:表示当前处理的元素、状态、或者是在一系列处理中当前的位置  ,count:表示已经处理或完成的元素数量
                        soulTable.render(this);             //表单渲染
                    }
                };               
            }
 
            //#endregion  监听网格表体事件
            table.on('tool(mainTable)', function (obj) {
                var data = obj.data;                    //把obj数据赋值给 data变量
 
                //单据号超链接
                //判断对象事件是否为单据号
                if (obj.event == '单据号') {                        //检查 obj.event事件 是否等于字符串 '单据号'。如果等于,则执行if循环     
                    var linterid = data.hmainid.toString();       //声明变量linterid 为 data.hmainid     把表单单据赋值给声明变量linterid
                    //if (AllowLoadData(sSubStr) != false) {      //非空验证
                    layer.open({                                //使用 layer的open打开弹出 层 
                        type: 2                                 //表示弹出层的内容是一个 iframe       类型为2
                        , area: ['100%', '100%']                //弹出层的大小是
                        , title: '编辑器具采购入库单'          //设置弹出层的名字和变量
                        , closeBtn: 1                            //显示关闭按钮
                        , shade: 0.6                            //遮罩透明度                    
                        , maxmin: true                           //允许全屏最小化
                        , anim: 0                               //0-6的动画形式,-1不开启
                        //设置 iframe 的 URL,URL 中包含了查询参数,来调用所需要的值
                        , content: '../模治具仓库管理/WW_PPBomBillEdit.html?OperationType=3&linterid=' + linterid + '&HSouceBillType=0&closeType=1'
                        , resize: false,                             //是否允许用户调整弹出大小
                        end: function () {                               //当关闭时调用
                            get_FastQuery(table, option);               //执行查询(表和选项)
                        }
                        , cancel: function () {                     //点击取消时使用回调
                            //$(".layui-btn").removeClass("layui-btn-disabled");
                        }
                    })
                }
            });
             //#endregion
 
            //加载网格
            function get_Display(sWhere) {          //加载网格调用swhere参数
                var wait = layer.load();            //遮罩    把layer.load 调用赋值给定义变量 wait
                $.ajax({                            //进入
                    url: GetWEBURL() + '/WW_PPBomBillController/Get_WW_PPBomBillList', //加载方法所在的网页
                    async: false,                                  //  这个选项指定了请求是否应该异步执行
                    type: "GET",                                  //数据请求
                    data: { "sWhere": sWhere, "user": sessionStorage["HUserName"] },        //data里一个表单属性swhere,和user属性  值取自sessionsorage的husername中
                    success: function (data1) {                                             //进入data1  // 当请求成功时,执行这个函数
                        if(data1.count == 1) {                           //判断数据统计是否唯一            判断对象 data1 中是否存在count属性且count属性是否等于1
                            var data = [];      //列字段数据
                            var col = [];       //定义应该索引数组
                            var totalArray = [];       //创建 需要合计的字段组
                            //给空的数组赋值
                            for (var key in data1.list) {               //在表单中使用key查找对应的值
                                data.push({ "id": data1.list[key].ColmCols, "name": data1.list[key].ColmCols, "Type": data1.list[key].ColmType });  //在数据库中根据  表单数据ID和数据名称和数据类型在获取 把获取到的数据赋值给data
                            }
                            //在列表左边添加勾选框
                            col.push({ type: 'checkbox', fixed: 'left', totalRowText: '合计' });  //合计行    在表单左边显示合计行
                            for (var i = 0; i < data.length; i++) {
                                // if (data[i].name == 'HInterID' || data[i].name == 'HBillType' || data[i].name == 'hmainid') {
                                if ($.inArray(data[i].name, titleData) > -1) {                                //  使用 $.inArray() 方法  查询titledata中是否有获取到的字段,有测进行下不    在找不到元素时会返回 - 1                         
                                                   // 列的数据字段名ID       列的标题  内容居中   
                                    col.push({ field: data[i].id, title: data[i].name, align: 'center', hide: true }); //隐藏id列     根据data数组中的字段ID和字段名 ID需要隐藏的字段
                                } 
                                else if ($.inArray(data[i].name, totalArray) > -1) { //计算列    // 如果 data[i].name 存在于 totalArray 中
                                               // 列的数据字段名ID       // 列的标题   //内容居中   //该列支持排序  //用于合计行计算或显示  
                                    col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, totalRow: true, width: 120 });//根据totalarry数组中的字段id和name 找到data表单中对应的数据列 进行计算合计
                                } else if (data[i].name == '单据号') {  //判断获取到的字段数据是否为单据号。
                                                 // 列的数据字段名ID       / / 列的标题   //内容居中   //该列支持排序 
                                    col.push({
                                        field: data[i].id, title: data[i].name, align: 'center', sort: true, width: 200, event: '单据号', event: '单据号', templet: function (d) {
                                            return '<span style="color: blue;">' + d.单据号 + '</span>'
                                        }, style: 'cursor: pointer;'});// event这个属性可能是自定义的,用于在列上绑定特定的事件或行为
                                } else {
                                    switch (data[i].Type) {//获取到的数 为字符串类型
                                        //int
                                        case 'DateTime':    //当它为时间时
                                        //    根据列id和列名进行选择,当为data[i].name == "行关闭日期" ? "行关闭人" : data[i].name  则  " ==''?'':layui.util.toDateString(d." + data[i].name + ", 'yyyy-MM-dd HH:mm:ss')去显示时间
                                            col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, templet: "<div>{{d." + (data[i].name == "行关闭日期" ? "行关闭人" : data[i].name) + " ==''?'':layui.util.toDateString(d." + data[i].name + ", 'yyyy-MM-dd HH:mm:ss')}}</div>", width: 200 });
                                            break;
                                        default:
                                            col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, width: 200 });
                                    }
                                }
                            }
                            //动态显示列名
                            option = {
                                elem: '#mainTable'                    // 使用#mainTable作为表格的DOM元素 
                                , toolbar: '#toolbarDemo'                //加载tolbardemo这个表格
                                , cols: [col]                            // 页面显示
                                , data: data1.data                        //  表格数据
                                , height: 800                           //表格高度为800
                                , page: true                            // 开启分页  
                                , totalRow: true                               // 是否显示合计行
                                , cellMinWidth: 90                      // 单元格最小宽度  
                                , limit: 50                               // 默认每页显示的条数  
                                , limits: [50, 500, 5000, 20000]               // 可选的每页显示条数
                                //res从服务器返回的数据  curr当前页码显示当前页码数据  count:这通常表示数据的总条数 分页控件
                                , done: function (res, curr, count) {       // 回调调用显示当前页码数据和数据总条数
                                    soulTable.render(this);              // 如果soulTable.render是用于重新渲染表格的   重新渲染表格
                                }
                            }
 
                            option.data = data1.data; //表格数据
                          //  table 指表格组件  render 方法用来配置option生产表结构  
                            table.render(option); //用于渲染或重新渲染一个表格
                            layer.close(wait);  //调用可能是为了关闭一个之前因为其他原因(如等待某些初始化操作完成)而显示的加载层
                          
                            //刷新表格数据
                            DisPlay_HideColumn();//打开 显示隐藏方法
                            //jQuery选择器$("#Comparator")找到页面上ID为Comparator的元素(通常是一个输入框、选择框等表单元素).val()方法用于获取该元素的值
                            if ($("#Comparator").val() == 0 && $("#ColContent").val() == "") {     //当用户将ID为Comparator的元素的值设置为0,并且将ID为ColContent的元素的值清空(或保持为空)时,自动调用ColFilter函数来执行某种与列相关的操作。这种逻辑通常用于表单处理或数据过滤的场景中,以便在用户没有指定某些过滤条件时自动应用一组默认的过滤规则
                                ColFilter(); //如果上述两个条件都为真,那么执行ColFilter(); 。这里ColFilter是一个自定义的函数,可能用于对表格列进行过滤、排序或其他与列相关的操作。
                            }
                        } else {
                            layer.close(wait); //调用可能是为了关闭一个之前因为其他原因(如等待某些初始化操作完成)而显示的加载层
                                                //data1表单数据code和Message属性的对象
                            layer.alert(data1.code + data1.Message, { icon: 5 });       //提示弹窗5 提示内容data1.code + data1.Message  错误提示警告
                        }
                    }, error: function () {
                        layer.close(wait);          //调用关闭 
                        layer.alert("接口请求失败!", { icon: 5 });  //弹窗提示失败
                    }
                });         
            }
            //新增
            function set_AddNew() {
                layer.open({                                 //使用 layer.open 方法打开一个新的层
                    type: 2,                                // 表示这是一个iframe层,即内容是一个外部页面
                    skin: 'layui-layer-rim',                 //加上边框
                    title: '新增器具采购入库单',             // 设置层的标题
                    closeBtn: 1,                            // 显示关闭按钮  
                    shift: 2,                               //设置层的位置
                    area: ['100%', '100%'],                 //设置层的大小
                    maxmin: true,                           //  允许层最大化和最小化
                    content: '../模治具仓库管理/WW_PPBomBillEdit.html?OperationType=1&linterid=&HSouceBillType=0&closeType=1',//设置iframe层的内容地址,即要加载的外部页面
                    end: function () {
                        //刷新页面,
                        get_FastQuery(table, option); // 调用某个函数来刷新页面或数据  
                    },
                    success: function (layero, index) {
 
                    }
                });
            }
            //编辑单据
            function set_ShowBill() {
                var checkStatus = table.checkStatus('mainTable') // 使用 table 模块的 checkStatus 方法获取表格 'mainTable' 的选中状态 
                    , data = checkStatus.data;                   // 从选中状态中提取数据,这些数据是表格中被选中的行  
                if (checkStatus.data.length === 1) {                 // 判断表单数据行被选中的行数是否为1行
                    var linterid = data[0].hmainid.toString();           //如果只有一行被选中,则获取该行数据的 hmainid 字段值,并将其转换为字符串  
                    //if (AllowLoadData(sSubStr) != false) {//非空验证
                    layer.open({                     // 使用 layer.open 方法打开一个新的 iframe 层  
                        type: 2                          // 表示这是一个iframe层,即内容是一个外部页面
                        , area: ['100%', '100%']             //设置层的大小
                        , title: '编辑器具采购入库单'          // 设置层的标题
                        , closeBtn: 1                            // 显示关闭按钮  
                        , shade: 0.6            //遮罩透明度
                        , maxmin: true      //允许全屏最小化
                        , anim: 0 //0-6的动画形式,-1不开启
                        , content: '../模治具仓库管理/WW_PPBomBillEdit.html?OperationType=3&linterid=' + linterid + '&HSouceBillType=0&closeType=1'  // 设置 iframe 层的内容地址,包含查询参数  
                        , resize: false, //禁止用户调整层的大小
                        end: function () {
                            get_FastQuery(table, option);// 用于刷新页面或数据  
                        }
                        , cancel: function () {
                            //$(".layui-btn").removeClass("layui-btn-disabled");  //调用使用CSS类选择器于选择所有class属性中包含layui-btn元素去删除需要删除的名称    //"layui-btn-disabled":这是要被移除的类的名称
                        }
                    })
                } else {
                      // 如果没有选择一行数据或选择了多行数据,则弹出提示信息  
                    layer.msg('请选择一行数据编辑!');
                }
            }
 
            //#region 点击行选中高亮
            table.on('row(mainTable)', function (obj) {
                //选中行改变颜色
                //obj.tr:获取被点击的行的jQuery对象 ,find(':checkbox:first'):在被点击的行中查找第一个复选框,prop('checked'):获取这个复选框的checked属性的值,!:对checked属性的值进行逻辑非操作var flag = ...:将逻辑非操作的结果赋值给变量flag
                var flag = !obj.tr.find(':checkbox:first').prop('checked');  //获取被点击的复选框行进行判断是否选中
               // find(':checkbox') :在被点击的行中查找所有的复选框,将所有这些复选框的checked属性设置为flag的值
                obj.tr.find(':checkbox').prop('checked', flag);  //将所有的复选框这种为flag根据第一个复选框来判断
                if (flag) {
                    obj.tr.find('.layui-form-checkbox').addClass('layui-form-checked');  //设置复选框选中样式
                    $(obj.tr.selector).attr({ "style": "background:#ceedfa;color:black" });//改变当前tr背景颜色和字体颜色
                } else {
                    obj.tr.find('.layui-form-checkbox').removeClass('layui-form-checked');//取消复选框选中样式
                    $(obj.tr.selector).attr({ "style": "background:" });//取消当前tr颜色
                }
                //mainTable 为表格ID   注意此处如果ID不正确将导致你在监听复选框时获取不到你选择的数据,前面的只是添加或删除选中未选中样式以及设置背景色,字体颜色
                layui.each(table.cache.mainTable, function (i, l) {                 
   // 代码的目的是遍历layui表格的缓存数据,找到与obj.tr所指向的行对应的缓存项,并修改其某个自定义属性(假设为LAY_CHECKED)的值 //  i是数组的索引(对于对象来说,可以认为是键),而l是当前遍历到的项的值
                    if (obj.tr.index() == l.LAY_TABLE_INDEX) {  //循环表格使每一行添加一个索引    
                        l.LAY_CHECKED = flag;//找到对应行给一个是否选中的状态
                    }
                });
            })
            //#endregion
 
            //删除
            function set_DeleteBill() {
                var checkStatus = table.checkStatus('mainTable')        // 使用 table 模块的 checkStatus 方法获取表格 'mainTable' 的选中状态 
                    , data = checkStatus.data;                   //从选中状态中提取数据,这些数据是表格中被选中的行  
                if (checkStatus.data.length === 1) {             //判断选中的列表数据行数是否为一条
                    var InterID = data[0].hmainid.toString();    //如果只有一行被选中,则获取该行数据的 hmainid 字段值,并将其转换为字符串  
                    //逻辑删除方法
                    layer.confirm("确认要删除吗,删除后不能恢复", { title: "删除确认" }, function (index) {//使用Layer库弹出一个确认对话框,询问用户是否确认删除操作。如果用户点击确认,则执行提供的回调函数。
                        var wait = layer.load(); // 显示一个加载中的提示
                        $.ajax({                 //GET请求到服务器
                            type: "GET",            // 请求的类型
                            url: GetWEBURL() + "/Sc_MouldProdInBill/set_DeleteBill", //请求的URL  方法所在页面和方法名
                          //  data属性包含了要发送到服务器的数据。这里是一个对象,包含两个属性:HInterID和user。它们的值分别来自InterID变量和sessionStorage["HUserName"](从会话存储中获取的用户名)
                            data: { "HInterID": InterID, "user": sessionStorage["HUserName"] },  // 发送到服务器的数据作为查询参数附加到URL上   //data里一个表单属性interid,和user属性
                               // 当请求成功时调用的函数 接受收一个参数result
                            success: function (result) {
                             //   在回调函数内部,首先检查服务器返回的数据中count属性的值是否等于1
                                if (result.count == 1) {    //判断对象 data1 中是否存在count属性且count属性是否等于1
                                 // { time: 1 * 1000, icon: 1 }是一个配置对象,指定了消息框的显示时间为1秒(1 * 1000毫秒),并且使用图标1(通常表示成功或积极的消息
                                    layer.msg(result.Message, { time: 1 * 1000, icon: 1 }, function () {
                                        // 得到frame索引
                                        var index = layer.getFrameIndex(window.name); //首先尝试通过window.name获取当前iframe的索引 然后赋值给参数index
                                        //关闭当前frame
                                        layer.close(index);
                                        //修改为功后刷新界面
                                        window.location.reload();
                                    });
 
                                } else {
                                    layer.alert(result.code + result.Message, { icon: 5 }); //提示弹窗5 提示内容data1.code + data1.Message  错误提示警告
                                }
                                layer.close(wait); 
                            }, error: function () {
                              //  如果AJAX请求失败
                                layer.close(wait); //则关闭加载
                                layer.alert("接口请求失败!", { icon: 5 });//提示,并显示一条错误消息
                            }
                        });
                    })
                }
                else {
                    layer.msg('请选择一行数据删除!');                        // 如果没有选择一行数据或选择了多行数据,则弹出提示信息  
                }
            }
 
            //预览
            function get_ViewReport() {
                var checkStatus = table.checkStatus('mainTable')//调用 table.checkStatus('mainTable') 方法获取名为 mainTable 的表格的选中状态
                    , data = checkStatus.data;              //从选中状态中提取数据,这些数据是表格中被选中的行  
                if (checkStatus.data.length === 1) {            //检查被选中的行数据(checkStatus.data)的长度是否等于1
                    layer.open({        //调用 layer.open 方法打开一个新的Layer层
                        type: 2         //设置层的类型为2  ,意味着新层将包含一个iframe,可以加载另一个HTML页面
                        , area: ['50%', '50%']  //设置页面大小    
                        , title: '打印模版选择'      //设置层的标题为“打印模版选择
                        , shade: 0.6 //遮罩透明度
                        , maxmin: false //允许全屏最小化
                        , anim: 0 //0-6的动画形式,-1不开启
                             //../BaseSet/SRM_OpenTmpList.html),并附加了三个查询参数(linterid、MyMsg 和 Type),它们的值都来自被选中的行数据的 hmainid 属性
                        , content: ['../../BaseSet/SRM_OpenTmpList.html?linterid=' + data[0].hmainid.toString() + '&MyMsg=' + data[0].hmainid.toString() + '&Type=HMouldProdInBill', 'yes']
                        , resize: false   //禁止用户调整层的大小
                    })
                }
                else {
                    layer.msg('请选择一行数据打印!');   //提示请选择一行数据
                }
            }
 
            //打印
            function get_PrintReport() {
                var checkStatus = table.checkStatus('mainTable')   //调用 table.checkStatus('mainTable') 方法获取名为 mainTable 的表格的选中状态
                    , data = checkStatus.data;                           //从选中状态中提取数据,这些数据是表格中被选中的行 
                if (checkStatus.data.length === 1) {                 //检查被选中的行数据(checkStatus.data)的长度是否等于1
                    layer.open({                     //调用 layer.open 方法打开一个新的Layer层
                        type: 2                     //设置层的类型为2  ,意味着新层将包含一个iframe,可以加载另一个HTML页面
                        , area: ['50%', '50%']      //设置页面大小
                        , title: '打印模版选择'         //设置层的标题为“打印模版选择
                        , shade: 0.6 //遮罩透明度
                        , maxmin: false //允许全屏最小化
                        , anim: 0 //0-6的动画形式,-1不开启
                        //并附加了三个查询参数(linterid、MyMsg 和 Type),它们的值都来自被选中的行数据的 hmainid 属性
                        , content: ['../../BaseSet/SRM_OpenTmpList.html?linterid=' + data[0].hmainid.toString() + '&MyMsg=' + data[0].hmainid.toString() + '&Type=HMouldProdInBill', 'yes']
                        , resize: false     //禁止用户调整层的大小
                    })
                }
                else {
                    layer.msg('请选择一行数据打印!'); //提示请选择一行数据
                }
            }
 
            //审核
            function get_Audit() {
                var checkStatus = table.checkStatus('mainTable')            //调用 table.checkStatus('mainTable') 方法获取名为 mainTable 的表格的选中状态
                    , data = checkStatus.data;                           //从选中状态中提取数据,这些数据是表格中被选中的行 
                if (checkStatus.data.length === 1) {                        //检查被选中的行数据(checkStatus.data)的长度是否等于1
                    var InterID = data[0].hmainid.toString();                //如果只有一行被选中,则获取该行数据的 hmainid 字段值,并将其转换为字符串  
                    $.ajax({                                                    //GET请求到服务器
                        type: "GET",                                //请求对象
                        url: GetWEBURL() + "Sc_MouldProdInHouseBill/AuditMouldProdInHouseBill", //方法所在页面和方法名
                        data: { "HInterID": InterID, "user": sessionStorage["HUserName"], "flag": 1 }, //设置随请求一起发送的数据。这里包含了三个字段:HInterID(值为InterID),user(值为sessionStorage中存储的HUserName),以及flag(值为1)
                        success: function (result) {                                // 当请求成功时,执行这个函数
                            if (result.count == 1) {   // 如果服务器返回的数据中的count字段等于1
                                layer.msg(result.Message, { time: 1 * 1000, icon: 1 }, function () {    //  使用layer库显示一个消息提示框,显示result.Message内容,设置显示时间为1秒,并设置图标为成功图标
                                    var index = layer.getFrameIndex(window.name);                   // 获取当前窗口(或iframe)的索引,这通常用于layer库中的弹出层
                                    //关闭当前frame
                                    layer.close(index);
                                    //修改为功后刷新界面
                                    window.location.reload();
                                });
 
                            } else {
                                layer.alert(result.code + result.Message, { icon: 5 });// 提示一个警告框   显示result.code和result.Message的拼接内容,并设置图标为错误  
                            }
                        }, error: function () {// 当请求失败时,执行这个函数。                            
                            layer.alert("接口请求失败!", { icon: 5 });//提示弹出警告框 ,提示“接口请求失败!
                        }
                    });
                }
                else {
                     // 如果被选中的行数据长度不等于1
                    layer.msg('请选择一行数据!');  //提示请选择一行数据
                }
            }
 
            //反审核
            function get_FAudit() {
                var checkStatus = table.checkStatus('mainTable') //调用 table.checkStatus('mainTable') 方法获取名为 mainTable 的表格的选中状态
                    , data = checkStatus.data;                              //从选择的状态中提取数据
                if (checkStatus.data.length === 1) {                       //判断选择的数据长度是否是一行
                    var InterID = data[0].hmainid.toString();               //选中的是一行数据,则获取数据的单据号字段并将去转为字符串赋值给interid
                    $.ajax({                                                //GET请求到服务器
                        type: "GET",                                               //请求对象
                        url: GetWEBURL() + "Sc_MouldProdInHouseBill/AuditMouldProdInHouseBill", //方法所在页面和方法名
                        data: { "HInterID": InterID, "user": sessionStorage["HUserName"], "flag": 2 },    // 设置随请求一起发送的数据 "HInterID" 选中的行数据的单据号,user":值为`sessionStorage`中存储的(用户名称)flag": 2用于区别不同的审核状态
                        success: function (result) {// 当请求成功时,执行这个函数
                            if (result.count == 1) {   // 如果服务器返回的数据中的`count`字段等于1,这可能表示审核操作成功执行
                                layer.msg(result.Message, { time: 1 * 1000, icon: 1 }, function () {            //使用layer库显示一个消息提示框,显示`result.Message`内容,设置显示时间为1秒,并设置图标为成功图
                                    var index = layer.getFrameIndex(window.name);    // 获取当前窗口(或iframe)的索引,这通常用于layer库中的弹出层
                                    //关闭当前frame
                                    layer.close(index);
                                    //修改为功后刷新界面
                                    window.location.reload();
                                });
 
                            } else {        // 如果审核操作没有成功执行(`result.count`不等于1)。
                                layer.alert(result.code + result.Message, { icon: 5 });// 使用layer库显示一个警告框,显示`result.code`和`result.Message`的拼接内容,并设置图标为错误图标  提示一个错误弹出框
                            }
                        }, error: function () {             //当请求失败时,执行这个函数。
                            
                            layer.alert("接口请求失败!", { icon: 5 });// 使用layer库显示一个警告框,提示“接口请求失败!”,并设置图标为错误图标   
                        }
                    });
                }
                else {
                    layer.msg('请选择一行数据!');  // 当选择的数据不为一行时,提示用户“请选择一行数据!”。
                }
            }
 
 
            //快速过滤
            function get_FastQuery() {
                var HBeginDate = $("#HBeginDate").val();//开始日期    获取开始日期的值,假设#HBeginDate是一个日期选择器或输入框的ID
                var HEndDate = $("#HEndDate").val();//结束日期          获取结束日期的值,同样假设#HEndDate是一个日期选择器或输入框的ID
                var HEndDates = $("#HEndDates").val();//发料日期
                var HBillNo = $("#HBillNo").val();          //获取单据号的值,#HBillNo是单据号输入框的ID
                var HDepartName = $("#HDepartName").val(); //获取部门名称的值,#HDepartName是部门名称输入框或选择器的ID
                var HMaterNumber = $("#HMaterNumber").val();    // 获取物料编号的值,#HMaterNumber是物料编号输入框的ID。
                var HMaterName = $("#HMaterName").val();// 获取物料名称的值,#HMaterName是物料名称输入框或选择器的ID
                var HStockID = $("#HStocID").val();     // 获取库存ID的值
                var HMakerMan = $("#HMakerMan").val();// 获取制单人(或操作人)的值,#HMakerMan是制单人输入框或选择器的ID
 
                var ColName = $("#ColName").val();//复选框获取第一个条件列的名称(可能是用于高级查询的一个字段),#ColName是选择列的复选框或下拉框的ID
                var Comparator = $("#Comparator").val();// 获取第一个条件的比较符(如等于、大于等),#Comparator是比较符选择器的ID
                var ColContent = $("#ColContent").val(); // 获取第一个条件列的内容(即要匹配的值),#ColContent是内容输入框的ID
 
                var ColName1 = $("#ColName1").val();//复选框  获取第二个条件的名称,选择下拉框
                var Comparator1 = $("#Comparator1").val();   //获取第二个条件比较符,
                var ColContent1 = $("#ColContent1").val();  //获取第二个需要匹配的值
                var ColName2 = $("#ColName2").val();//复选框  获取第三个条件的名称,选择下拉框
                var Comparator2 = $("#Comparator2").val();  //获取第三个条件比较符,
                var ColContent2 = $("#ColContent2").val(); //获取第三个需要匹配的值
 
                if (ColName != 0 && Comparator != 0) {  //检查两个变量ColName(假设代表数据库中的列名)和Comparator(假设代表用于比较的操作符             
                    var com = "";                   //声明了一个名为com的变量,并将其初始化为空字符串
                    switch (Comparator) {
                        case "7":  //当Comparator  为7时
                            com = "like'%" + ColContent + "%'";  //com为包含
                            break;
                        case "8":
                            com = "like'%" + ColContent + "'";  //com为左包含
                            break;
                        case "9":
                            com = "like'" + ColContent + "%'"; //com为右包含
                            break;
                        case "10":
                            com = "not like'%" + ColContent + "%'"; //com为不包含
                            break;
                        default:  //当能直接调用数据库的判断条件时
                            com = "" + Comparator + "'" + ColContent + "'";//com为判断条件加需要查询筛选
                            break;
                    }
                    sWhere += " and " + ColName + " " + com;    //码将构建好的条件表达式(ColName列名加上com变量中的条件)
                }
                if (ColName1 != 0 && Comparator1 != 0) {//检查两个变量ColName1(假设代表数据库中的列名)和Comparator1(假设代表用于比较的操作符    
                    var com1 = "";                      //声明了一个名为com1的变量,并将其初始化为空字符串
                    switch (Comparator1) {
                        case "7"://当Comparator1  为7时
                            com1 = "like'%" + ColContent1 + "%'";//com1为包含
                            break;
                        case "8":
                            com1 = "like'%" + ColContent1 + "'";//com1为左包含
                            break;
                        case "9":
                            com1 = "like'" + ColContent1 + "%'";//com1为右包含
                            break;
                        case "10":
                            com1 = "not like'%" + ColContent1 + "%'";//com1为不包含
                            break;
                        default:
                            com1 = "" + Comparator1 + "'" + ColContent1 + "'";  //com1为判断条件加需要查询筛选
                            break;
                    }
                    sWhere += " and " + ColName1 + " " + com1;  //码将构建好的条件表达式(ColName1列名加上com1变量中的条件)
                }
                if (ColName2 != 0 && Comparator2 != 0) {//检查两个变量ColName2(假设代表数据库中的列名)和Comparator2(假设代表用于比较的操作符
                    var com2 = "";                                          //声明了一个名为com2的变量,并将其初始化为空字符串
                    switch (Comparator2) {
                        case "7":
                            com2 = "like'%" + ColContent2 + "%'";//com2为包含
                            break;
                        case "8":
                            com2 = "like'%" + ColContent2 + "'";//com2为左包含
                            break;
                        case "9":
                            com2 = "like'" + ColContent2 + "%'";//com2为右包含
                            break;
                        case "10":
                            com2 = "not like'%" + ColContent2 + "%'";//com2为不包含
                            break;
                        default:
                            com2 = "" + Comparator2 + "'" + ColContent2 + "'";      //com2为判断条件加需要查询筛选
                            break;
                    }
                    sWhere += " and " + ColName2 + " " + com2;//码将构建好的条件表达式(ColName2列名加上com2变量中的条件)
                }
 
                if (HBeginDate) {//判断开始时间
                                            //varchar(100)类型 ,字段,时间格式
                    sWhere += " and CONVERT(varchar(100),日期, 23) >= '" + HBeginDate + "'";   //向 sWhere 字符串添加一个条件该条件要求数据库中的“日期”字段(转换为特定格式的字符串后)必须大于或等于 HBeginDate 变量指定的值
                }
                if (HEndDate) { //判断结束时间
                    sWhere += " and CONVERT(varchar(100),日期, 23) <= '" + HEndDate + "'";  //向 sWhere 字符串添加一个条件该条件要求数据库中的“日期”字段(转换为特定格式的字符串后)必须大于或等于 HBeginDate 变量指定的值
                }
                if (HEndDates) {//判断发料时间
                    sWhere += " and CONVERT(varchar(100),发料日期, 23) <= '" + HEndDates + "'";  //向 sWhere 字符串添加一个条件该条件要求数据库中的“日期”字段(转换为特定格式的字符串后)必须大于或等于 HBeginDate 变量指定的值          
                }
                if (HBillNo) {
                    sWhere += " and 单据号 like '%" + HBillNo + "%'";      //单据号搜索 如果HBillNo有值,将向sWhere字符串追加一个条件,用于搜索数据库中“单据号”字段包含HBillNo变量值的记录
                }
                if (HDepartName) {
                    sWhere += " and 部门名称 like '%" + HDepartName + "%'"; //如果HDepartName有值将向sWhere字符串追加一个条件,用于搜索数据库中“部门名称”字段包含HDepartName变量值的记录
                }
                if (HMaterNumber) {
                    sWhere += " and 物料代码 like '%" + HMaterNumber + "%'";   // 如果HMaterNumber有值,向sWhere字符串追加一个条件,用于搜索数据库中“物料代码”字段包含HMaterNumber变量值的记录
                }
                if (HMaterName) {
                    sWhere += " and 物料名称 like '%" + HMaterName + "%'";   //如果HMaterName有值,这行代码将向sWhere字符串追加一个条件,用于搜索数据库中“物料名称”字段包含HMaterName变量值的记录
                }
                if (HStockID) {
                    sWhere += " and 仓库 like '%" + HStocOut + "%'";   //如果HStockID有值,是向sWhere字符串追加一个条件,用于搜索数据库中“仓库”字段包含某个值的记录。
                }
                if (HMakerMan) {
                    sWhere += " and 制单人 like '%" + HMakerMan + "%'";  //如果HMakerMan有值,将向sWhere字符串追加一个条件,用于搜索数据库中“制单人”字段包含HMakerMan变量值的记录
                }
                var index = layer.load(0);//用了layer.load方法,通常用于显示一个加载层0作为参数可能指定了加载提示的样式或类型
                get_Display(sWhere);  //调用加载网格
                //调用接口后清空sWhere缓存
                sWhere = "";
            }
            //重置过滤条件
            function set_ClearQuery() {
                var HInitTimeCycle = $("#HInitTimeCycle").val() * 1;    //这行代码从ID为HInitTimeCycle的元素中获取值(假设是一个表示天数的整数),并将其转换为数字类型(通过乘以1实现)。这个值用于计算开始日期的偏移量
                $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * HInitTimeCycle), "yyyy-MM-dd")); //开始日期   当前日期减去HInitTimeCycle指定的天数(通过毫秒数计算得出),然后使用Format函数(这个函数在代码段中没有定义,但假设它接受一个日期和一个格式字符串,并返回格式化的日期字符串)将日期格式化为"yyyy-MM-dd"格式,最后将这个格式化的日期设置为ID为HBeginDate的元素的值
                $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));  //结束日期 获取当前日期格式化为"yyyy-MM-dd"格式
                $("#HEndDates").val(Format(new Date(), "yyyy-MM-dd"));// 发料日期 获取当前日期格式化为"yyyy-MM-dd"格式
                $("#HBillNo").val("");       //将单据号设置为空值
                $("#HDepartName").val("");     //将部门名称设置为空值
                $("#HMaterNumber").val("");     //将物料代码设空
                 $("#HMaterName").val("");      //将物料名称设空
                $("#HStocID").val("");             //将仓库名称设空
                $("#HMakerMan").val("");           //将制单人设空
                $("#ColName").val();                //复选框   获取取 ID 为 ColName 的元素的值
                $("#Comparator").val();               //尝试获取 ID 为 Comparator 的元素的值
                $("#ColContent").val();             // 尝试获取 ID 为 ColContent 的元素的值
                $("#ColName1").val();                //复选框 获取取 ID 为 ColName1 的元素的值
                $("#Comparator1").val();           //尝试获取 ID 为 Comparator1 的元素的值
                $("#ColContent1").val();            // 尝试获取 ID 为 ColContent1 的元素的值
                $("#ColName2").val();               //复选框 获取取 ID 为 ColName2的元素的值
                $("#Comparator2").val();           //复选框 获取取 ID 为 ColName2 的元素的值
                $("#ColContent2").val();            // 尝试获取 ID 为 ColContent1 的元素的值
                form.render('select');//调用了一个名为form的对象的render方法,并传递了'select'作为参数
                sWhere = "  "; //Where变量重置为一个包含两个空格的字符串
                get_Display(sWhere);  //重新显示数据
            }
            //#endregion
            //刷新
            function set_Refresh() {
                $("#btnSearch").click(); //模拟对ID为 btnSearch 的元素的点击操作 // 获取刷新控件  重新渲染界面
            }
 
            //隐藏列设置,
            function get_HideColumn() {
                var colName = "";      //定义一个空字符串 colName,用于存储需要隐藏的列名
                var contentUrl = "";    //定义一个空字符串 contentUrl,用于构建要加载的HTML页面的URL
                for (var i = 1; i < option.cols[0].length - 1; i++) { //它初始化一个名为i的变量,其初始值为1,表示从数组的第二个元素开始遍历(因为数组索引从0开始,所以索引1对应第二个元素)。循环的条件是i小于option.cols[0].length - 1
                    colName += option.cols[0][i]["title"] + ",";            //将option.cols[0]数组中除了第一个和最后一个元素之外的所有元素的title属性值以逗号分隔的方式拼接成一个字符串,并将这个字符串赋值给colName变量
                }
                var urlStr = window.document.location.pathname;//获取文件路径
                var urlLen = urlStr.split('/');     //将路径名按斜杠(/)分割成数组 urlLen
                for (var i = 0; i < urlLen.length - 4; i++) {  //环遍历 urlLen 数组,但只到倒数第四个元素
                    contentUrl += "../";       //于每个元素,向 contentUrl 添加 "../",用于向上回退到父目录  ,返回上一级
                }
                //把数组编码一个字符串转接给另一个页面再转为数组  赋值给colname
                colName = encodeURI(colName.substring(0, colName.length - 1));//对 URI 进行编码  bstring() 方法用于提取字符串中介于两个指定下标之间的字符
 
                contentUrl += '基础资料/隐藏列设置/Gy_GridView_Hide.html?HModName=' + HModName + '&colName=' + colName; //构建完整的URl
 
 
                layer.open({  //打开层
                    type: 2        //设置层的类型为2  ,意味着新层将包含一个iframe,可以加载另一个HTML页面
                    , skin: "layui-layer-rim" //加上边框
                    , title: "隐藏列设置"    //标题
                    , closeBtn: 1  //窗体右上角关闭 的 样式
                    , shift: 2 //弹出动画
                    , area: ["50%", "90%"] //窗体大小
                    , maxmin: true //设置最大最小按钮是否显示
                    , content: [contentUrl, "yes"]
                    , btn: ["确定", "取消"]     //按钮的选择
                    , btn1: function (index, laero) {//选择按钮后调用
                        //刷新表格数据
                        DisPlay_HideColumn();
                        //更新表格缓存的数据
                        layer.close(index);//关闭弹窗
                    }
                })
            }
 
            //显示列数据
            function DisPlay_HideColumn() {
                $.ajax({   //打开请求
                    url: GetWEBURL() + '/Xt_grdAlignment_WMES/grdAlignmentWMESList',//请求路径
                    type: "GET", //请求方法
                    data: { "HModName": HModName, "user": sessionStorage["HUserName"] },     //data里一个表单属性HModName,和user属性  值取自sessionsorage的husername中
                    success: function (data1) {         // 当请求成功时,执行这个函数
                        if (data1.data.length != 0) {   // 检查 data1.data 数组的长度是否不为0  
                            var dataCol = [];  //数据库查询出的列数据 
                            var titleData = ["单据ID", "单据类型", "HDeptID", "HUnitID", "HMaterID", "HWHID", "HSPID", "源单主内码","源单子内码"]; //不需要显示的字段 可扩展
                            //从 data1.data 数组的第一个元素中提取 HGridString 属性的值,将这个值(一个逗号分隔的字符串)分割成一个数组,并将这个数组赋值给 dataCol 变量
                            dataCol = data1.data[0].HGridString.split(',');  
 
                            for (var i = 0; i < option.cols[0].length - 2; i++) {  // 循环数组里减去两个长度  从 0 遍历到 option.cols[0].length - 2。注意这里减去了 2,可能是因为某些特定的列(如最后两列)不需要被处理或者 dataCol 数组的长度与 option.cols[0] 不完全对应。
                                var dataCols = dataCol[i].split('|');  //对于 dataCol 数组中的每个元素 | 分割成数组 dataCols
                                //隐藏列
                                if (dataCols[1] == 1) {
                                    option.cols[0][i + 1]["hide"] = true;  //如果 dataCols[1](即分割后的第二个值)等于 1,则将对应列的 hide 属性设置为 true,表示该列应该被隐藏
                                }
                                //设置列宽
                                if (dataCols[3] > 0) {
                                    option.cols[0][i + 1]["width"] = dataCols[3];  //如果 dataCols[3](即分割后的第四个值)大于 0,则将对应列的 width 属性设置为 dataCols[3] 的值
                                }
                                //设置内容字体大小
                                if (data1.data[0].HFontSize != 0) {//当数值里HFontSize有值时
                                    option.cols[0][i + 1]["style"] = "font-size:" + data1.data[0].HFontSize + "px;"; // data1.data[0].HFontSize 的值来设置对应列的字体大小
                                } else {
                                    option.cols[0][i + 1]["style"] = "font-size:100%"; //否则,使用默认字体大小(100 %)
                                }
                                //设置列宽
                                //if (data1.data[0].HColumnWidth != 0) {
                                //    option.cols[0][i + 1]["width"] = data1.data[0].HColumnWidth + "px;";
                                //} else {
                                //    option.cols[0][i + 1]["width"] = "";
                                //}
                                //显示列
                                if (dataCols[1] == 0 && $.inArray(option.cols[0][i + 1]["title"], titleData) == -1) {  //判断组数中的列 存在是且此列的下一个tetle不存在时运行
                                    option.cols[0][i + 1]["hide"] = false;  //前列对象的下一个列对象的 hide 属性设置为 false  设置否显示
                                }
                                //字体所在位置(左 居中 右)
                                switch (dataCols[2]) { // switch 语句根据 dataCols[2] 的值来设置列的文本对齐方式
                                    case "L":   //当为l时
                                        option.cols[0][i + 1]["align"] = "left";  //字体向左对齐
                                        break;
                                    case "M":
                                        option.cols[0][i + 1]["align"] = "center"; //字体居中对齐
                                        break;
                                    case "R":
                                        option.cols[0][i + 1]["align"] = "right"; //字体向右对齐
                                        break;
                                }
                            }
 
                            //取消冻结列
                            for (var i = 1; i < option.cols[0].length - 1; i++) {  //循环option 数组的长度  从 option.cols[0] 数组的第二个元素(索引为 1 的元素,因为索引通常从 0 开始)开始迭代循环的条件是 i < option.cols[0].length - 1,这意味着循环将一直执行,直到 i 等于 option.cols[0].length - 2(即数组倒数第二个元素的索引)。这里减去 1 可能是为了避免处理数组的最后一个元素,但通常这取决于你的具体需求
                                if (option.cols[0][i]["fixed"] != null) { //检查当前正在迭代的列(option.cols[0][i])是否有一个非空的 fixed 属性。如果 fixed 属性存在且其值不是 null 或 undefined(!= null 通常也会检查 undefined,但明确检查两者是更好的做法),则条件为真
                                    option.cols[0][i]["fixed"] = null; // 如果上面的条件为真,即当前列被冻结了,则这行代码将 fixed 属性的值设置为 null,从而取消该列的冻结状态
                                }
                                else {
                                    break;
                                }
                            }
                            //冻结列
                            if (data1.data[0].HFixCols != 0) {// 首先检查 data1.data[0].HFixCols 是否不为 0,这意味着有列需要被冻结  
                                for (var i = 0; i < data1.data[0].HFixCols; i++) {    //遍历从 0 到 data1.data[0].HFixCols-1 的索引  
                                    if ($.inArray(option.cols[0][i + 1]["title"], titleData) != -1) {//检查当前列(通过 i+1 索引,因为可能跳过了第一列或某些列未包含在内)的标题是否存在于 titleData 数组中
                                        data1.data[0].HFixCols += 1;//如果列标题在 titleData 中找到  在  data1.data[0].HFixCols 在多循环一次
                                    }
                                option.cols[0][i + 1]["fixed"] = "left";  // 无论列标题是否在 titleData 中,都将当前列(通过 i+1 索引)标记为冻结在左侧 
                                }
                            }
                            table.render(option);//渲染表格
                        } else {
                            table.render(option);//渲染表格
                        }
                    }, error: function () {
                        layer.alert("接口请求失败!", { icon: 5 });//弹出提示框  提示请求失败
                    }
                })
            }
 
            //#region 初始日期间隔 下拉列表
            function setSelect_HInitTimeCycle() {
                var valueList = [0, 1, 2, 3, 4, 5, 6, 29];           // 定义一个代表不同的时间间隔的天数数组
                var titleList = ["今天", "近两天", "近三天", "近四天", "近五天", "近六天", "近七天", "近30天"];    //定义数组与valuelist数组一样对应  且作用显示与下拉框
                 //创建一个字符串 HInitTimeCycle_ArrayList,用于构建下拉选择框的 HTML。这里首先添加了一个默认选项,其值为 - 1,文本为“任意间隔”,并且被设置为选中状态
                var HInitTimeCycle_ArrayList = '<option  value="-1" selected="selected" >任意间隔</option>';
                for (var i = 0; i < valueList.length; i++) {//遍历 valueList 数组,对于数组中的每个值,
                    //将对应的选项添加到 HInitTimeCycle_ArrayList 字符串中 每个选项的 value 属性设置为 valueList 中的值,文本设置为 titleList 中对应的名称,并且设置字体颜色为蓝色
                    HInitTimeCycle_ArrayList += '<option  style="color:blue;" value="' + valueList[i] + '">' + titleList[i] + '</option>';
                }
 
                $("#HInitTimeCycle").empty(); //清空选择的内容
                //将之前构建的包含所有选项的 HTML 字符串HInitTimeCycle_ArrayList 添加到 ID 为 HInitTimeCycle 的元素中从而创建了完整的下拉选择框
                $("#HInitTimeCycle").append(HInitTimeCycle_ArrayList);//创建可选择的下拉框显示
                form.render('select');//渲染表单显示
 
                $("#HInitTimeCycle").val("29");  //默认选择显示
            }
            //#endregion
 
            //#region 任意字段过滤:列名显示下拉框
            function ColFilter() {
                //定义了一个名为 Organization 的变量,并初始化为一个包含单个 <option> 元素的字符串。这个 <option> 元素的值 (value) 被设置为 "0",并且被标记为选中状态 (selected="selected")。它没有包含任何显示的文本(即 <option> 标签和结束标签之间是空的
                var Organization = '<option  value="0" selected="selected" ></option>';
                for (var i = 1; i < option.cols[0].length; i++) {  //循环列表数组,其中包含了列的信息。循环从索引 1 开始,可能是因为索引 0 的项被视为特殊或不希望包含在下拉列表中
                    if (option.cols[0][i].hide != true) {  //这行代码检查当前迭代的列对象(option.cols[0][i])的 hide 属性是否不等于 true。如果不等于 true(即该列未被隐藏
 
                       // 向 Organization 字符串追加一个新的 < option > 元素,将新 < option > 元素的 value 属性和显示的文本都设置为当前列的 field 属性值,并设置了字体颜色为蓝色
                        Organization += '<option  style="color:blue;" value="' + option.cols[0][i].field + '">' + option.cols[0][i].field + '</ option>';
                    }
                }
                $("#ColName").empty();  //使用 jQuery 选择器 $("#ColName") 来找到页面上 ID 为 ColName 的元素,然后,它调用 .empty() 方法来移除该元素内部的所有内容
                $("#ColName").append(Organization); //将 Organization 字符串追加到 ID 为 ColName 的 <select> 元素中
                $("#ColName1").empty(); //使用 jQuery 选择器 $("#ColName1") 来找到页面上 ID 为 ColName1 的元素,然后,它调用 .empty() 方法来移除该元素内部的所有内容
                $("#ColName1").append(Organization); //将 Organization 字符串追加到 ID 为 ColName1的 <select> 元素中
                $("#ColName2").empty();//使用 jQuery 选择器 $("#ColName2") 来找到页面上 ID 为 ColName2的元素,然后,它调用 .empty() 方法来移除该元素内部的所有内容
                $("#ColName2").append(Organization); //将 Organization 字符串追加到 ID 为 ColName2 的 <select> 元素中
                form.render('select'); //重新渲染表单
            }
            //#endregion
 
            //#region 【过滤方案】
 
            //获取当前用户的默认过滤方案
            function get_DefaultModule() {
                $.ajax({  //请求调用
                    url: GetWEBURL() + '/Xt_FastICScheme/Chooselist',//调用的url地址
                    type: "GET",  //调用的方法
                   // user": 这个属性的值是通过访问sessionStorage对象的"Czybm"键来获取的  // "HInterID": 这个属性的值被硬编码为0
                    //Type": 这个属性的值被设置为"Default"。这通常意味着该对象或数据项被配置为使用默认的类型或行为
                    data: { "user": sessionStorage["Czybm"], "HModuleName": HModuleName, "HInterID": 0, "Type": "Default" },//在Web应用程序中传递用户信息、模块名称、交互ID以及数据项的类型,以便进行进一步的处理或显示
                    success: function (data1) {     // 当请求成功时,执行这个函数  
                        if (data1.count == 1) {// 判断对象 data1 中是否存在count属性且count属性是否等于1
                            //当前用户设置有默认的过滤方案
                            var data = data1.data;
                            //当前选择的过滤方案
                            HInterID_Choose = data[0].hmainid;      //data 数组的第一个元素并从该元素中获取一个名为 hmainid 的属性赋值给HInterID_Choose 变量
                            //过滤方案内码
                            HInterID = data[0].hmainid       //data 数组的第一个元素并从该元素中获取一个名为 hmainid 的属性赋值给HInterID 变量
                            //过滤方案名称
                            HDefaultFilter = data[0].方案名称  
                            //过滤方案的备注(方案信息描述)
                            var HRemark = data[0].备注
                            //显示出当前的默认过滤方案
                            document.getElementById("HFilterScheme_Now").style.display = "block";
                            // 更新该元素的HTML内容,以显示过滤方案的名称和备注
                            document.getElementById('HFilterScheme_Now').innerHTML = "当前过滤方案:" + HDefaultFilter + '<span style="font-size: 15px; font-weight: bold; color:#7b90fb">  ' + "(" + HRemark + ")" + '</span>';
                            //把过滤条件值回写到页面上
                            for (let i = 0; i < data.length; i++) {              //循环 遍历数据集data中的每个元素  
                                $("#" + data[i].过滤字段ID).val(data[i].过滤值);  // 尝试更新页面上ID与data[i].过滤字段ID相匹配的输入框的值  
                                if (data[i].过滤标签类型 == 'SELECT') {         // 如果当前过滤条件的类型是'SELECT'(即下拉选择框)
                                     // 则找到对应的下拉选择框中的选项,其value属性与data[i].过滤值相匹配 , 并将该选项设置为选中状态  
                                    $("#" + data[i].过滤字段ID).find("option[value='" + data[i].过滤值 + "']").attr("selected", true);
                                }
                            } 
 
                            var HInitTimeCycle = $("#HInitTimeCycle").val() * 1;    // //将获取的下拉框值*1转化为数字类型 赋值给变量HInitTimeCycle
                            //若日期间隔不为 任意间隔,则禁用开始日期与结束日期的选择
                            if (HInitTimeCycle != -1) {   //判断下拉框的value值是否为—1 
                                $('#HBeginDate').prop('disabled', true); //开始时间不可选,默认灰色
                                $('#HEndDate').prop('disabled', true);//开始结束不可选,默认灰
 
                                $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * HInitTimeCycle), "yyyy-MM-dd")); //获取HBeginDate的值,根据获取系统当前时间减去相应的天数即为开始时间
                                $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));                //获取HEndDate的值,调用系统当前时间转为日期格式即为结束日期
 
 
                                //执行查询方法
                                get_FastQuery();  
                            } else {
                                $('#HBeginDate').prop('disabled', false);   //开始时间可自选
                                $('#HEndDate').prop('disabled', false);  //结束时间可自选
                            }
 
                            //执行查询方法
                            get_FastQuery()   
                            form.render("select");  //重新渲染
                        } else {
                            //当前用户没有设置默认的过滤方案
                            //隐藏显示过滤方案的标签信息
                            document.getElementById("HFilterScheme_Now").style.display = "none";//在HTML文档中找到ID为HFilterScheme_Now的元素,并设置其CSS的display属性为none
                            //执行查询方法
                            //get_FastQuery()
                            //form.render("select");
                        }
                    }, error: function () {
                        layer.alert("接口请求失败!", { icon: 5 });  //警示示  接口请求失败  警示标志为5的
                    }
                });
            }
 
            //保存方案
            function set_SaveScheme() {
                var index = layer.open()      //打开新的弹窗
                //判断用户是否点击了右上角的“叉号”关闭弹窗页面
                var HIsClose_Manual = false;  //把布尔值false赋值给声明变量
                //获取本页所有过滤条件对象(class中包含"ForFilteringSchemes"的元素)
                var Filter = document.getElementsByClassName(HClassTag);
 
                var HFilterIdList = "";//过滤条件
                var HFilterIdLists = "";//拼接多个过滤条件
                var HValue = "";//过滤值
                var HElement_type = "";//过滤标签类型
 
                for (var i = 0; i < Filter.length; i++) {    //循环数组中的字段
                    HFilterIdList = Filter[i].id;   //过滤条件ID
                    HFilterIdLists += Filter[i].id + ",";   //过滤条件ID(拼接)
                    HValue += $("#" + HFilterIdList).val() + ",";   //过滤条件中输入的值
                    HElement_type += document.getElementById(HFilterIdList).tagName + ",";//通过标签id获取标签类型
                }
 
                //去除末尾逗号  移除最后一位
                HFilterIdLists = HFilterIdLists.substring(0, HFilterIdLists.length - 1);  
                HValue = HValue.substring(0, HValue.length - 1);
                HElement_type = HElement_type.substring(0, HElement_type.length - 1);
 
                //当前页面上没有选择过滤方案,进入新增方法
                if (HDefaultFilter == "") { //判断过滤名称是否为空
                     layer.open({          //打开新的层
                        type: 2             //可以显示新界面
                        , area: ['40%', '80%']    //界面的大小
                        , title: '过滤方案'         //设置层名称
                         , shift: 0                  //弹出动画
      // 置了一个名为content的属性 表是url参数,这些查询参数通过JavaScript变量(如HModuleName、HFilterIdLists、HValue、HElement_type)动态构建,用于向目标页面传递信息
                        , content: '../../系统管理/过滤方案设置/Xt_FastICScheme.html?OperationType=1&HModuleName=' + HModuleName + '&HFilterIdLists=' + HFilterIdLists + '&HValue=' + HValue + '&HElement_type=' + HElement_type
                        , cancel: function () {
                            // 右上角关闭事件的逻辑
                            HIsClose_Manual = true; //用户点击对话框的关闭按钮时
                        }
                        , end: function () {
                            if (HIsClose_Manual != true) {//检查HIsClose_Manual变量的值,如果不是true(即对话框不是通过点击关闭按钮关闭的)
                                get_FastQuery();
                                //显示当前的过滤方案
                               // 配置一个UI组件(如对话框)的,它包含了动态构建的URL、处理关闭事件的逻辑,以及在特定条件下显示当前过滤方案信息的逻辑
                                document.getElementById("HFilterScheme_Now").style.display = "block";
                                document.getElementById('HFilterScheme_Now').innerHTML = "当前过滤方案:" + sessionStorage["HFilterSchemeName_" + sessionStorage["Czybm"]] + '<span style="font-size: 15px; font-weight: bold; color:#7b90fb">  ' + "(" + sessionStorage["HFilterSchemeRemark_" + sessionStorage["Czybm"]] + ")" + '</span>';
                            }
                        }
                    })
                    layer.close(index)   //关闭弹窗
                } else {
                    //当前页面已有过滤方案,用户选择 新增或者编辑
                    layer.confirm('当前已选择过滤方案,是否修改?请选择对应操作', { //弹窗提示是否修改
                        title: "操作提示",      //设置默认框标题
                        icon: 0,            //确认框是否显示
                        btn: ['新增方案', '保存修改当前方案', '取消']  //btn数组中的内容显示  点击调用相应的方法
                    }, function (index, layero) {
                        //新增
                        layer.open({                //打开层  
                            type: 2                 //可以打开一个新页面
                            , area: ['40%', '80%']      //设置界面大小
                            , title: '过滤方案'         //设置层标题
                            , shift: 0//弹出动画    
          // 置了一个名为content的属性 表是url参数,这些查询参数通过JavaScript变量(如HModuleName、HFilterIdLists、HValue、HElement_type)动态构建,用于向目标页面传递信息
                            , content: '../../系统管理/过滤方案设置/Xt_FastICScheme.html?OperationType=1&HModuleName=' + HModuleName + '&HFilterIdLists=' + HFilterIdLists + '&HValue=' + HValue + '&HElement_type=' + HElement_type
                            , end: function () {
                                get_FastQuery()
                                //显示当前的过滤方案
                                // 配置一个UI组件(如对话框)的,它包含了动态构建的URL、处理关闭事件的逻辑,以及在特定条件下显示当前过滤方案信息的逻辑
                                document.getElementById("HFilterScheme_Now").style.display = "block";
                                document.getElementById('HFilterScheme_Now').innerHTML = "当前过滤方案:" + sessionStorage["HFilterSchemeName_" + sessionStorage["Czybm"]] + '<span style="font-size: 15px; font-weight: bold; color:#7b90fb">  ' + "(" + sessionStorage["HFilterSchemeRemark_" + sessionStorage["Czybm"]] + ")" + '</span>';
                            }
                        })
                        layer.close(index)  //关闭弹窗
                    }, function (index) {
                        //编辑
                        var Filter_Edit = document.getElementsByClassName(HClassTag); //获取本页所有过滤条件对象(class中包含"ForFilteringSchemes"的元素)
                        HFilterIdList = "";  //过滤条件
                        HFilterIdLists = "";//拼接多个过滤条件
                        HValue = "";            //过滤值
                        HElement_type = "";        //过滤标签类型
                        for (var i = 0; i < Filter_Edit.length; i++) {  // 循环过滤对象数组
                            HFilterIdList = Filter_Edit[i].id; //过滤条件ID
                            HFilterIdLists += Filter_Edit[i].id + ",";  //过滤条件ID(拼接)
                            HValue += $("#" + HFilterIdList).val() + ","; //过滤条件中输入的值
                            HElement_type += document.getElementById(HFilterIdList).tagName + ",";//通过标签id获取标签类型
                        }
                        //去除末尾逗号
                        HFilterIdLists = HFilterIdLists.substring(0, HFilterIdLists.length - 1);
                        HValue = HValue.substring(0, HValue.length - 1);
                        HElement_type = HElement_type.substring(0, HElement_type.length - 1);
 
                        var sMainSub = HInterID_Choose + ';' + HFilterIdLists + ';' + HValue + ';' + HElement_type + ';' + sessionStorage["Czybm"] + ';' + 3;//把拼接的值赋给smainub
 
                        //修改
                        $.ajax({        //打开请求
                            type: "POST",  //请求方法
                            url: GetWEBURL() + "/Xt_FastICScheme/save", //方法所在页面和方法名
                            async: true,        // 这个选项指定了请求是否应该异步执行
                            data: { "oMain": sMainSub },    //要发送的数据
                            dataType: "json",               //datatype数据类型为json
                              // 当请求成功时调用的函数 接受收一个参数data
                            success: function (data) {
                                if (data.count == 1) { // 说明验证成功了,   判断获取数组是否存在count属性且 count是否等于1
                                    layer.msg(data.Message, { time: 1 * 1000, icon: 1 });  //设置弹窗时间
                                }
                                else {
 
                                }
                                layer.closeAll("loading")//重新调用
                            },
                            error: function (err) {
 
 
                            }
                        });
                        layer.close(index)   //关闭弹窗
                    }, function (index) {
                        //取消
                        layer.alert('取消')     //提示取消
                        layer.close(index)  //关闭弹窗
                    });
                }
 
            }
 
            //读取方案
            function set_ReadScheme() {
                var HIsClose_Manual = false;  //声明变量,储存布尔值false
                var Filter = document.getElementsByClassName(HClassTag); //获取本页所有过滤条件对象(class中包含"ForFilteringSchemes"的元素)
 
                var HFilterIdList = "";//过滤条件
                var HFilterIdLists = "";//拼接多个过滤条件
                var HValue = "";            //过滤值
                var HElement_type = ""; //过滤标签类型
                for (var i = 0; i < Filter.length; i++) {
                    HFilterIdList = Filter[i].id;   //过滤条件ID
                    HFilterIdLists += Filter[i].id + ","; //过滤条件ID(拼接)
                    HValue += $("#" + HFilterIdList).val() + ","; //过滤条件中输入的值
                    HElement_type += document.getElementById(HFilterIdList).tagName + ",";//通过标签id获取标签类型
                }
                //去除末尾逗号
                HFilterIdLists = HFilterIdLists.substring(0, HFilterIdLists.length - 1);
                HValue = HValue.substring(0, HValue.length - 1);
                HElement_type = HElement_type.substring(0, HElement_type.length - 1);
 
                layer.open({  //打开新的层
                    type: 2     //调用新页面
                    , area: ['80%', '80%']  //设置页面大小
                    , title: '过滤方案列表'   //设置层标题
                    , shift: 0//弹出动画
                    // 置了一个名为content的属性 表是url参数,这些查询参数通过JavaScript变量(如HModuleName、HFilterIdLists、HValue、HElement_type)动态构建,用于向目标页面传递信息
                    , content: '../../系统管理/过滤方案设置/Xt_FastICSchemeList.html?HType=Select&HFilterIdLists=' + HFilterIdLists + '&HValue=' + HValue + '&HElement_type=' + HElement_type + '&HModuleName=' + HModuleName
                    , cancel: function () {
                        // 右上角关闭事件的逻辑
                        HIsClose_Manual = true;  //用户点击对话框的关闭按钮
                    }
                    , end: function () {
                        if (HIsClose_Manual != true) {//检查HIsClose_Manual变量的值,如果不是true(即对话框不是通过点击关闭按钮关闭的)
                            get_FastQuery()  //执行查询方法
                            form.render("select");  //重新渲染页面
                        }
                    }
                })
            }
            //#endregion
            //以上是layui模块
        });
    </script>
</body>
</html>