826220679@qq.com
2025-08-07 4d6cd980c5c69e4d9d150669c89734642297e0cd
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
package dell_Fence;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.sql.SQLException;
import java.util.List;
import java.util.ResourceBundle;
import dell_Fence.Dell_Fence;
import dell_Fence.Dell_FenceType;
import targets.Fence;
import publicsWay.TableUtils;
 
@SuppressWarnings("serial")
public class FenceListPanel extends JPanel {
    private ResourceBundle messages;
    private JTable fenceTable;
    private DefaultTableModel tableModel;
    private JTextField searchField;
    
    // ×ÊÔ´¼üÖµ
    private static final String TITLE_KEY = "fence.list.title";
    private static final String SEARCH_KEY = "fence.list.search";
    private static final String EDIT_KEY = "fence.list.edit";
    private static final String DELETE_KEY = "fence.list.delete";
    private static final String REFRESH_KEY = "fence.list.refresh";
    private static final String COL_ID_KEY = "fence.list.column.id";
    private static final String COL_NAME_KEY = "fence.list.column.name";
    private static final String COL_TYPE_KEY = "fence.list.column.type";
    private static final String COL_DEPT_KEY = "fence.list.column.department";
    private static final String COL_LAYER_KEY = "fence.list.column.layer";
    private static final String COL_START_KEY = "fence.list.column.startTime";
    private static final String COL_END_KEY = "fence.list.column.endTime";
    private static final String COL_COLOR_KEY = "fence.list.column.color";
    private static final String COL_ENABLED_KEY = "fence.list.column.enabled";
    private static final String COL_COMPANY_KEY = "fence.list.column.company";
    private static final String COL_ADD_TIME_KEY = "fence.list.column.addTime";
 
    public FenceListPanel(ResourceBundle messages) {
        this.messages = messages;
        setLayout(new BorderLayout());
        initUI();
        loadFenceData();
    }
 
    private void initUI() {
        // ¶¥²¿Ãæ°å
        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.setBorder(BorderFactory.createTitledBorder(getResourceString(TITLE_KEY)));
        
        // ËÑË÷Ãæ°å
        JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
        searchField = new JTextField(20);
        searchPanel.add(new JLabel(getResourceString(COL_NAME_KEY) + ":"));
        searchPanel.add(searchField);
        
        // ËÑË÷°´Å¥
        JButton searchButton = new JButton(getResourceString(SEARCH_KEY));
        searchButton.addActionListener(e -> searchFences());
        searchPanel.add(searchButton);
        
        // ²Ù×÷°´Å¥Ãæ°å
        JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0));
        
        // ±à¼­°´Å¥
        JButton editButton = new JButton(getResourceString(EDIT_KEY));
        editButton.addActionListener(e -> showEditDialog());
        actionPanel.add(editButton);
        
        // É¾³ý°´Å¥
        JButton deleteButton = new JButton(getResourceString(DELETE_KEY));
        deleteButton.addActionListener(e -> deleteSelectedFence());
        actionPanel.add(deleteButton);
        
        // Ë¢Ð°´Å¥
        JButton refreshButton = new JButton(getResourceString(REFRESH_KEY));
        refreshButton.addActionListener(e -> refreshData());
        actionPanel.add(refreshButton);
        
        // Ìí¼Ó×é¼þµ½¶¥²¿Ãæ°å
        topPanel.add(searchPanel, BorderLayout.CENTER);
        topPanel.add(actionPanel, BorderLayout.EAST);
        add(topPanel, BorderLayout.NORTH);
        
        // ±í¸ñÁÐÃû
        String[] columnNames = {
            getResourceString(COL_ID_KEY),
            getResourceString(COL_NAME_KEY),
            getResourceString(COL_TYPE_KEY),
            getResourceString(COL_DEPT_KEY),
            getResourceString(COL_LAYER_KEY),
            getResourceString(COL_START_KEY),
            getResourceString(COL_END_KEY),
            getResourceString(COL_COLOR_KEY),
            getResourceString(COL_ENABLED_KEY),
            getResourceString(COL_COMPANY_KEY),
            getResourceString(COL_ADD_TIME_KEY)
        };
        
        // ´´½¨±í¸ñ
        fenceTable = TableUtils.createCommonTable(columnNames);
        tableModel = (DefaultTableModel) fenceTable.getModel();
        
        // Ìí¼Ó±í¸ñµ½¹ö¶¯Ãæ°å
        JScrollPane scrollPane = new JScrollPane(fenceTable);
        add(scrollPane, BorderLayout.CENTER);
    }
 
    private void loadFenceData() {
        tableModel.setRowCount(0);
        try {
            List<Fence> fences = Dell_Fence.getAllFences();
            for (Fence fence : fences) {
                Object[] row = {
                    fence.getId(),
                    fence.getFenceName(),
                    getFenceTypeName(fence.getFenceType()),
                    fence.getRelatedDepartment(),
                    fence.getLayer(),
                    fence.getEffectiveTime(),
                    fence.getExpirationTime(),
                    getColorName(fence.getColor()),
                    fence.getIsEnabled().equals("1") ? "ÊÇ" : "·ñ",
                    fence.getCompany(),
                    fence.getAddedTime()
                };
                tableModel.addRow(row);
            }
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, 
                "¼ÓÔØÎ§À¸Êý¾Ýʧ°Ü: " + e.getMessage(), 
                "´íÎó", 
                JOptionPane.ERROR_MESSAGE);
        }
    }
 
    private String getFenceTypeName(String typeCode) {
        try {
            return Dell_FenceType.getFenceTypeById(Integer.parseInt(typeCode)).getTypeName();
        } catch (Exception e) {
            return "δ֪ÀàÐÍ";
        }
    }
 
    private String getColorName(String colorCode) {
        switch (colorCode) {
            case "0": return "ºìÉ«";
            case "1": return "À¶É«";
            case "2": return "ÂÌÉ«";
            case "3": return "×ÏÉ«";
            case "4": return "ÇàÉ«";
            default: return "δ֪";
        }
    }
 
    private void searchFences() {
        String keyword = searchField.getText().trim().toLowerCase();
        tableModel.setRowCount(0);
        try {
            List<Fence> fences = Dell_Fence.getAllFences();
            for (Fence fence : fences) {
                if (fence.getFenceName().toLowerCase().contains(keyword)) {
                    Object[] row = {
                        fence.getId(),
                        fence.getFenceName(),
                        getFenceTypeName(fence.getFenceType()),
                        fence.getRelatedDepartment(),
                        fence.getLayer(),
                        fence.getEffectiveTime(),
                        fence.getExpirationTime(),
                        getColorName(fence.getColor()),
                        fence.getIsEnabled().equals("1") ? "ÊÇ" : "·ñ",
                        fence.getCompany(),
                        fence.getAddedTime()
                    };
                    tableModel.addRow(row);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, 
                "ËÑË÷ΧÀ¸Ê§°Ü: " + e.getMessage(), 
                "´íÎó", 
                JOptionPane.ERROR_MESSAGE);
        }
    }
 
    private void showEditDialog() {
        int selectedRow = fenceTable.getSelectedRow();
        if (selectedRow == -1) {
            JOptionPane.showMessageDialog(this, 
                "ÇëÏÈÑ¡ÔñÒªÐ޸ĵÄΧÀ¸", 
                "Ìáʾ", 
                JOptionPane.WARNING_MESSAGE);
            return;
        }
        
        int fenceId = Integer.parseInt(tableModel.getValueAt(selectedRow, 0).toString());
        try {
            Fence fence = Dell_Fence.getFenceById(String.valueOf(fenceId));
            if (fence != null) {
                EditFenceDialog dialog = new EditFenceDialog(
                    (JFrame) SwingUtilities.getWindowAncestor(this),
                    "ÐÞ¸ÄΧÀ¸",
                    true,
                    fence,
                    messages
                );
                dialog.setVisible(true);
                
                if (dialog.isSaved()) {
                    refreshData();
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, 
                "»ñȡΧÀ¸Êý¾Ýʧ°Ü: " + e.getMessage(), 
                "´íÎó", 
                JOptionPane.ERROR_MESSAGE);
        }
    }
 
    private void deleteSelectedFence() {
        int selectedRow = fenceTable.getSelectedRow();
        if (selectedRow == -1) {
            JOptionPane.showMessageDialog(this, 
                "ÇëÏÈÑ¡ÔñҪɾ³ýµÄΧÀ¸", 
                "Ìáʾ", 
                JOptionPane.WARNING_MESSAGE);
            return;
        }
        
        int confirm = JOptionPane.showConfirmDialog(this, 
            "È·¶¨ÒªÉ¾³ýÑ¡ÖеÄΧÀ¸Âð£¿", 
            "È·ÈÏɾ³ý", 
            JOptionPane.YES_NO_OPTION);
        
        if (confirm == JOptionPane.YES_OPTION) {
            int fenceId = Integer.parseInt(tableModel.getValueAt(selectedRow, 0).toString());
            try {
                Dell_Fence.deleteFence(String.valueOf(fenceId));
                refreshData();
            } catch (SQLException e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(this, 
                    "ɾ³ýΧÀ¸Ê§°Ü: " + e.getMessage(), 
                    "´íÎó", 
                    JOptionPane.ERROR_MESSAGE);
            }
        }
    }
 
    private void refreshData() {
        loadFenceData();
        searchField.setText("");
    }
 
    private String getResourceString(String key) {
        return messages.getString(key);
    }
}