@jiangood/open-admin 2.3.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/.umi-production/appData.json +49 -49
- package/src/pages/system/dict/index.jsx +214 -94
package/package.json
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"dev": "umi dev",
|
|
39
39
|
"build": "umi build"
|
|
40
40
|
},
|
|
41
|
-
"version": "2.3.
|
|
41
|
+
"version": "2.3.2"
|
|
42
42
|
},
|
|
43
43
|
"pkgPath": "/home/runner/work/open-admin/open-admin/web/package.json",
|
|
44
44
|
"plugins": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"config": {},
|
|
52
52
|
"time": {
|
|
53
53
|
"hooks": {},
|
|
54
|
-
"register":
|
|
54
|
+
"register": 0
|
|
55
55
|
},
|
|
56
56
|
"enableBy": "register"
|
|
57
57
|
},
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
0
|
|
82
82
|
]
|
|
83
83
|
},
|
|
84
|
-
"register":
|
|
84
|
+
"register": 3
|
|
85
85
|
},
|
|
86
86
|
"enableBy": "register"
|
|
87
87
|
},
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"time": {
|
|
96
96
|
"hooks": {
|
|
97
97
|
"onStart": [
|
|
98
|
-
|
|
98
|
+
1
|
|
99
99
|
]
|
|
100
100
|
},
|
|
101
101
|
"register": 2
|
|
@@ -142,10 +142,10 @@
|
|
|
142
142
|
"time": {
|
|
143
143
|
"hooks": {
|
|
144
144
|
"modifyAppData": [
|
|
145
|
-
|
|
145
|
+
63
|
|
146
146
|
]
|
|
147
147
|
},
|
|
148
|
-
"register":
|
|
148
|
+
"register": 22
|
|
149
149
|
},
|
|
150
150
|
"enableBy": "register"
|
|
151
151
|
},
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"config": {},
|
|
159
159
|
"time": {
|
|
160
160
|
"hooks": {},
|
|
161
|
-
"register":
|
|
161
|
+
"register": 0
|
|
162
162
|
},
|
|
163
163
|
"enableBy": "register"
|
|
164
164
|
},
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
0
|
|
176
176
|
],
|
|
177
177
|
"onCheck": [
|
|
178
|
-
|
|
178
|
+
1
|
|
179
179
|
]
|
|
180
180
|
},
|
|
181
181
|
"register": 1
|
|
@@ -195,7 +195,7 @@
|
|
|
195
195
|
0
|
|
196
196
|
]
|
|
197
197
|
},
|
|
198
|
-
"register":
|
|
198
|
+
"register": 1
|
|
199
199
|
},
|
|
200
200
|
"enableBy": "register"
|
|
201
201
|
},
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
"config": {},
|
|
209
209
|
"time": {
|
|
210
210
|
"hooks": {},
|
|
211
|
-
"register":
|
|
211
|
+
"register": 0
|
|
212
212
|
},
|
|
213
213
|
"enableBy": "config"
|
|
214
214
|
},
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
0
|
|
226
226
|
]
|
|
227
227
|
},
|
|
228
|
-
"register":
|
|
228
|
+
"register": 6
|
|
229
229
|
},
|
|
230
230
|
"enableBy": "register"
|
|
231
231
|
},
|
|
@@ -1077,7 +1077,7 @@
|
|
|
1077
1077
|
"config": {},
|
|
1078
1078
|
"time": {
|
|
1079
1079
|
"hooks": {},
|
|
1080
|
-
"register":
|
|
1080
|
+
"register": 1
|
|
1081
1081
|
},
|
|
1082
1082
|
"enableBy": "config"
|
|
1083
1083
|
},
|
|
@@ -1094,7 +1094,7 @@
|
|
|
1094
1094
|
1
|
|
1095
1095
|
]
|
|
1096
1096
|
},
|
|
1097
|
-
"register":
|
|
1097
|
+
"register": 1
|
|
1098
1098
|
},
|
|
1099
1099
|
"enableBy": "register"
|
|
1100
1100
|
},
|
|
@@ -1107,7 +1107,7 @@
|
|
|
1107
1107
|
"config": {},
|
|
1108
1108
|
"time": {
|
|
1109
1109
|
"hooks": {},
|
|
1110
|
-
"register":
|
|
1110
|
+
"register": 0
|
|
1111
1111
|
},
|
|
1112
1112
|
"enableBy": "register"
|
|
1113
1113
|
},
|
|
@@ -1120,7 +1120,7 @@
|
|
|
1120
1120
|
"config": {},
|
|
1121
1121
|
"time": {
|
|
1122
1122
|
"hooks": {},
|
|
1123
|
-
"register":
|
|
1123
|
+
"register": 101
|
|
1124
1124
|
},
|
|
1125
1125
|
"enableBy": "register"
|
|
1126
1126
|
},
|
|
@@ -1133,7 +1133,7 @@
|
|
|
1133
1133
|
"config": {},
|
|
1134
1134
|
"time": {
|
|
1135
1135
|
"hooks": {},
|
|
1136
|
-
"register":
|
|
1136
|
+
"register": 29
|
|
1137
1137
|
},
|
|
1138
1138
|
"enableBy": "config"
|
|
1139
1139
|
},
|
|
@@ -1146,7 +1146,7 @@
|
|
|
1146
1146
|
"config": {},
|
|
1147
1147
|
"time": {
|
|
1148
1148
|
"hooks": {},
|
|
1149
|
-
"register":
|
|
1149
|
+
"register": 8
|
|
1150
1150
|
},
|
|
1151
1151
|
"enableBy": "config"
|
|
1152
1152
|
},
|
|
@@ -1160,10 +1160,10 @@
|
|
|
1160
1160
|
"time": {
|
|
1161
1161
|
"hooks": {
|
|
1162
1162
|
"modifyAppData": [
|
|
1163
|
-
|
|
1163
|
+
0
|
|
1164
1164
|
]
|
|
1165
1165
|
},
|
|
1166
|
-
"register":
|
|
1166
|
+
"register": 1
|
|
1167
1167
|
},
|
|
1168
1168
|
"enableBy": "register"
|
|
1169
1169
|
},
|
|
@@ -1176,7 +1176,7 @@
|
|
|
1176
1176
|
"config": {},
|
|
1177
1177
|
"time": {
|
|
1178
1178
|
"hooks": {},
|
|
1179
|
-
"register":
|
|
1179
|
+
"register": 0
|
|
1180
1180
|
},
|
|
1181
1181
|
"enableBy": "register"
|
|
1182
1182
|
},
|
|
@@ -1189,7 +1189,7 @@
|
|
|
1189
1189
|
"config": {},
|
|
1190
1190
|
"time": {
|
|
1191
1191
|
"hooks": {},
|
|
1192
|
-
"register":
|
|
1192
|
+
"register": 2
|
|
1193
1193
|
},
|
|
1194
1194
|
"enableBy": "config"
|
|
1195
1195
|
},
|
|
@@ -1202,7 +1202,7 @@
|
|
|
1202
1202
|
"config": {},
|
|
1203
1203
|
"time": {
|
|
1204
1204
|
"hooks": {},
|
|
1205
|
-
"register":
|
|
1205
|
+
"register": 32
|
|
1206
1206
|
}
|
|
1207
1207
|
},
|
|
1208
1208
|
"./node_modules/@umijs/preset-umi/dist/features/mpa/mpa": {
|
|
@@ -1227,7 +1227,7 @@
|
|
|
1227
1227
|
"config": {},
|
|
1228
1228
|
"time": {
|
|
1229
1229
|
"hooks": {},
|
|
1230
|
-
"register":
|
|
1230
|
+
"register": 0
|
|
1231
1231
|
}
|
|
1232
1232
|
},
|
|
1233
1233
|
"./node_modules/@umijs/preset-umi/dist/features/overrides/overrides": {
|
|
@@ -1239,7 +1239,7 @@
|
|
|
1239
1239
|
"config": {},
|
|
1240
1240
|
"time": {
|
|
1241
1241
|
"hooks": {},
|
|
1242
|
-
"register":
|
|
1242
|
+
"register": 1
|
|
1243
1243
|
},
|
|
1244
1244
|
"enableBy": "register"
|
|
1245
1245
|
},
|
|
@@ -1252,7 +1252,7 @@
|
|
|
1252
1252
|
"config": {},
|
|
1253
1253
|
"time": {
|
|
1254
1254
|
"hooks": {},
|
|
1255
|
-
"register":
|
|
1255
|
+
"register": 0
|
|
1256
1256
|
},
|
|
1257
1257
|
"enableBy": "config"
|
|
1258
1258
|
},
|
|
@@ -1266,7 +1266,7 @@
|
|
|
1266
1266
|
"time": {
|
|
1267
1267
|
"hooks": {
|
|
1268
1268
|
"modifyConfig": [
|
|
1269
|
-
|
|
1269
|
+
1
|
|
1270
1270
|
]
|
|
1271
1271
|
},
|
|
1272
1272
|
"register": 1
|
|
@@ -1474,7 +1474,7 @@
|
|
|
1474
1474
|
"config": {},
|
|
1475
1475
|
"time": {
|
|
1476
1476
|
"hooks": {},
|
|
1477
|
-
"register":
|
|
1477
|
+
"register": 1
|
|
1478
1478
|
}
|
|
1479
1479
|
},
|
|
1480
1480
|
"./node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent": {
|
|
@@ -1540,7 +1540,7 @@
|
|
|
1540
1540
|
0
|
|
1541
1541
|
]
|
|
1542
1542
|
},
|
|
1543
|
-
"register":
|
|
1543
|
+
"register": 0
|
|
1544
1544
|
},
|
|
1545
1545
|
"enableBy": "register"
|
|
1546
1546
|
},
|
|
@@ -1553,7 +1553,7 @@
|
|
|
1553
1553
|
"config": {},
|
|
1554
1554
|
"time": {
|
|
1555
1555
|
"hooks": {},
|
|
1556
|
-
"register":
|
|
1556
|
+
"register": 3
|
|
1557
1557
|
}
|
|
1558
1558
|
},
|
|
1559
1559
|
"./node_modules/@umijs/preset-umi/dist/features/mako/mako": {
|
|
@@ -1565,7 +1565,7 @@
|
|
|
1565
1565
|
"config": {},
|
|
1566
1566
|
"time": {
|
|
1567
1567
|
"hooks": {},
|
|
1568
|
-
"register":
|
|
1568
|
+
"register": 0
|
|
1569
1569
|
},
|
|
1570
1570
|
"enableBy": "config"
|
|
1571
1571
|
},
|
|
@@ -1614,7 +1614,7 @@
|
|
|
1614
1614
|
"config": {},
|
|
1615
1615
|
"time": {
|
|
1616
1616
|
"hooks": {},
|
|
1617
|
-
"register":
|
|
1617
|
+
"register": 2
|
|
1618
1618
|
},
|
|
1619
1619
|
"enableBy": "config"
|
|
1620
1620
|
},
|
|
@@ -1640,7 +1640,7 @@
|
|
|
1640
1640
|
"config": {},
|
|
1641
1641
|
"time": {
|
|
1642
1642
|
"hooks": {},
|
|
1643
|
-
"register":
|
|
1643
|
+
"register": 4
|
|
1644
1644
|
},
|
|
1645
1645
|
"enableBy": "register"
|
|
1646
1646
|
},
|
|
@@ -1653,7 +1653,7 @@
|
|
|
1653
1653
|
"config": {},
|
|
1654
1654
|
"time": {
|
|
1655
1655
|
"hooks": {},
|
|
1656
|
-
"register":
|
|
1656
|
+
"register": 46
|
|
1657
1657
|
},
|
|
1658
1658
|
"enableBy": "register"
|
|
1659
1659
|
},
|
|
@@ -1666,7 +1666,7 @@
|
|
|
1666
1666
|
"config": {},
|
|
1667
1667
|
"time": {
|
|
1668
1668
|
"hooks": {},
|
|
1669
|
-
"register":
|
|
1669
|
+
"register": 17
|
|
1670
1670
|
}
|
|
1671
1671
|
},
|
|
1672
1672
|
"./node_modules/@umijs/preset-umi/dist/commands/help": {
|
|
@@ -1678,7 +1678,7 @@
|
|
|
1678
1678
|
"config": {},
|
|
1679
1679
|
"time": {
|
|
1680
1680
|
"hooks": {},
|
|
1681
|
-
"register":
|
|
1681
|
+
"register": 0
|
|
1682
1682
|
},
|
|
1683
1683
|
"enableBy": "register"
|
|
1684
1684
|
},
|
|
@@ -1691,7 +1691,7 @@
|
|
|
1691
1691
|
"config": {},
|
|
1692
1692
|
"time": {
|
|
1693
1693
|
"hooks": {},
|
|
1694
|
-
"register":
|
|
1694
|
+
"register": 1
|
|
1695
1695
|
},
|
|
1696
1696
|
"enableBy": "register"
|
|
1697
1697
|
},
|
|
@@ -1743,7 +1743,7 @@
|
|
|
1743
1743
|
"config": {},
|
|
1744
1744
|
"time": {
|
|
1745
1745
|
"hooks": {},
|
|
1746
|
-
"register":
|
|
1746
|
+
"register": 2
|
|
1747
1747
|
},
|
|
1748
1748
|
"enableBy": "register"
|
|
1749
1749
|
},
|
|
@@ -1769,7 +1769,7 @@
|
|
|
1769
1769
|
"config": {},
|
|
1770
1770
|
"time": {
|
|
1771
1771
|
"hooks": {},
|
|
1772
|
-
"register":
|
|
1772
|
+
"register": 0
|
|
1773
1773
|
},
|
|
1774
1774
|
"enableBy": "register"
|
|
1775
1775
|
},
|
|
@@ -1782,7 +1782,7 @@
|
|
|
1782
1782
|
"config": {},
|
|
1783
1783
|
"time": {
|
|
1784
1784
|
"hooks": {},
|
|
1785
|
-
"register":
|
|
1785
|
+
"register": 1
|
|
1786
1786
|
},
|
|
1787
1787
|
"enableBy": "register"
|
|
1788
1788
|
},
|
|
@@ -1795,7 +1795,7 @@
|
|
|
1795
1795
|
"config": {},
|
|
1796
1796
|
"time": {
|
|
1797
1797
|
"hooks": {},
|
|
1798
|
-
"register":
|
|
1798
|
+
"register": 0
|
|
1799
1799
|
},
|
|
1800
1800
|
"enableBy": "register"
|
|
1801
1801
|
},
|
|
@@ -1808,7 +1808,7 @@
|
|
|
1808
1808
|
"config": {},
|
|
1809
1809
|
"time": {
|
|
1810
1810
|
"hooks": {},
|
|
1811
|
-
"register":
|
|
1811
|
+
"register": 1
|
|
1812
1812
|
},
|
|
1813
1813
|
"enableBy": "register"
|
|
1814
1814
|
},
|
|
@@ -1834,7 +1834,7 @@
|
|
|
1834
1834
|
"config": {},
|
|
1835
1835
|
"time": {
|
|
1836
1836
|
"hooks": {},
|
|
1837
|
-
"register":
|
|
1837
|
+
"register": 0
|
|
1838
1838
|
},
|
|
1839
1839
|
"enableBy": "register"
|
|
1840
1840
|
},
|
|
@@ -1847,7 +1847,7 @@
|
|
|
1847
1847
|
"config": {},
|
|
1848
1848
|
"time": {
|
|
1849
1849
|
"hooks": {},
|
|
1850
|
-
"register":
|
|
1850
|
+
"register": 1
|
|
1851
1851
|
},
|
|
1852
1852
|
"enableBy": "register"
|
|
1853
1853
|
},
|
|
@@ -1860,7 +1860,7 @@
|
|
|
1860
1860
|
"config": {},
|
|
1861
1861
|
"time": {
|
|
1862
1862
|
"hooks": {},
|
|
1863
|
-
"register":
|
|
1863
|
+
"register": 0
|
|
1864
1864
|
},
|
|
1865
1865
|
"enableBy": "register"
|
|
1866
1866
|
},
|
|
@@ -1873,7 +1873,7 @@
|
|
|
1873
1873
|
"config": {},
|
|
1874
1874
|
"time": {
|
|
1875
1875
|
"hooks": {},
|
|
1876
|
-
"register":
|
|
1876
|
+
"register": 1
|
|
1877
1877
|
},
|
|
1878
1878
|
"enableBy": "register"
|
|
1879
1879
|
},
|
|
@@ -1912,7 +1912,7 @@
|
|
|
1912
1912
|
"config": {},
|
|
1913
1913
|
"time": {
|
|
1914
1914
|
"hooks": {},
|
|
1915
|
-
"register":
|
|
1915
|
+
"register": 22
|
|
1916
1916
|
},
|
|
1917
1917
|
"enableBy": "register"
|
|
1918
1918
|
},
|
|
@@ -1938,7 +1938,7 @@
|
|
|
1938
1938
|
"config": {},
|
|
1939
1939
|
"time": {
|
|
1940
1940
|
"hooks": {},
|
|
1941
|
-
"register":
|
|
1941
|
+
"register": 2
|
|
1942
1942
|
},
|
|
1943
1943
|
"enableBy": "register"
|
|
1944
1944
|
},
|
|
@@ -1968,7 +1968,7 @@
|
|
|
1968
1968
|
0
|
|
1969
1969
|
]
|
|
1970
1970
|
},
|
|
1971
|
-
"register":
|
|
1971
|
+
"register": 7
|
|
1972
1972
|
},
|
|
1973
1973
|
"enableBy": "register"
|
|
1974
1974
|
}
|
|
@@ -2085,7 +2085,7 @@
|
|
|
2085
2085
|
"parentId": "@@/global-layout",
|
|
2086
2086
|
"file": "system/dict/index.jsx",
|
|
2087
2087
|
"absPath": "/system/dict",
|
|
2088
|
-
"__content": "import React from \"react\";\nimport {Button, Form, Input, InputNumber, Modal, Popconfirm, Splitter, Tag, Tree, Typography} from \"antd\";\nimport {PlusOutlined} from \"@ant-design/icons\";\n\nimport {\n ButtonList,\n FieldBoolean, FieldDictSelect, FieldRemoteSelect,\n HttpUtils,\n Page,\n ProTable,\n ViewBooleanEnableDisable, ViewText\n} from \"../../../framework\";\n\nexport default class extends React.Component {\n\n state = {\n formValues: {},\n formOpen: false\n }\n\n formRef = React.createRef()\n tableRef = React.createRef()\n\n\n\n\n handleAdd = () => {\n this.setState({formOpen: true, formValues: {}})\n }\n\n handleEdit = record => {\n this.setState({formOpen: true, formValues: record})\n }\n\n onFinish = values => {\n const isNew = !values.id;\n const url = isNew ? 'admin/dict/create' : 'admin/dict/update';\n HttpUtils.post(url, values).then(rs => {\n this.setState({formOpen: false})\n this.tableRef.current.reload()\n })\n }\n\n handleDelete = row => {\n HttpUtils.post('admin/dict/delete', row).then(rs => {\n this.tableRef.current.reload()\n })\n }\n\n columns = [\n {\n title: '类型标签',\n dataIndex: 'typeLabel',\n },\n {\n title: '类型编码',\n dataIndex: 'typeCode',\n },\n {\n title: '标签',\n dataIndex: 'label',\n },\n {\n title: '编码',\n dataIndex: 'code',\n },\n\n {\n title: '启用',\n dataIndex: 'enabled',\n render(v) {\n return <ViewBooleanEnableDisable value={v}/>\n }\n\n },\n {\n title: '显示颜色',\n dataIndex: 'color',\n render(v) {\n if (v) {\n return <Tag color={v.toLowerCase()}>{v}</Tag>\n }\n\n }\n },\n\n {\n title: '序号',\n dataIndex: 'seq',\n },\n {\n title: '操作',\n dataIndex: 'option',\n render: (_, record) => {\n return (\n <ButtonList>\n <Button size='small' perm='sys-dict:update'\n onClick={() => this.handleEdit(record)}> 编辑 </Button>\n <Popconfirm perm='sys-dict:delete' title='是否确定删除字典项'\n onConfirm={() => this.handleDelete(record)}>\n <Button size='small'>删除</Button>\n </Popconfirm>\n </ButtonList>\n );\n },\n },\n ]\n\n render() {\n return <Page>\n <ProTable\n rowKey='uid'\n actionRef={this.tableRef}\n toolBarRender={() => {\n return <ButtonList>\n <Button perm='sys-dict:create' type='primary' onClick={this.handleAdd} >\n <PlusOutlined/> 新增\n </Button>\n </ButtonList>\n }}\n request={(params) => {\n params.typeCode = this.state.typeCode\n return HttpUtils.get('admin/dict/page', params);\n }}\n columns={this.columns}\n showToolbarSearch={true}\n />\n <Modal\n title='编辑数据字典项'\n open={this.state.formOpen}\n onOk={() => this.formRef.current.submit()}\n onCancel={() => this.setState({formOpen: false})}\n destroyOnHidden\n >\n\n <Form ref={this.formRef} labelCol={{flex: '100px'}}\n initialValues={this.state.formValues}\n onFinish={this.onFinish}>\n <Form.Item name='id' noStyle></Form.Item>\n <Form.Item label='类型' name='color' rules={[{required: true}]} >\n <ViewText />\n </Form.Item>\n <Form.Item label='类型' name='typeCode' rules={[{required: true}]} >\n <FieldRemoteSelect url='/admin/dict/type-options' />\n </Form.Item>\n <Form.Item label='编码' name='code' rules={[{required: true}]}>\n <Input/>\n </Form.Item>\n <Form.Item label='标签' name='label' rules={[{required: true}]} help='显示文本'>\n <Input/>\n </Form.Item>\n <Form.Item label='颜色' name='color' rules={[{required: true}]}>\n <FieldDictSelect typeCode='statusColor' />\n </Form.Item>\n <Form.Item label='序号' name='seq' rules={[{required: true}]}>\n <InputNumber/>\n </Form.Item>\n\n <Form.Item label='启用' name='enabled' rules={[{required: true}]}>\n <FieldBoolean/>\n </Form.Item>\n\n </Form>\n </Modal>\n </Page>\n\n\n }\n\n\n}\n",
|
|
2088
|
+
"__content": "import {DeleteOutlined, EditOutlined, PlusOutlined, SyncOutlined} from '@ant-design/icons';\nimport {Button, Card, Empty, Form, Input, InputNumber, Modal, Popconfirm, Space, Splitter, Tree, Tag, TreeSelect} from 'antd';\nimport React from 'react';\nimport {\n ButtonList,\n FieldBoolean,\n FieldDictSelect,\n Gap,\n HttpUtils,\n Page,\n ProTable,\n ViewBooleanEnableDisable,\n} from \"../../../framework\";\n\nexport default class extends React.Component {\n\n state = {\n typeTree: [],\n treeLoading: false,\n selectedType: null,\n selectedTypeCode: null,\n\n formOpen: false,\n formValues: {},\n typeFormOpen: false,\n typeFormValues: {},\n }\n\n formRef = React.createRef();\n typeFormRef = React.createRef();\n tableRef = React.createRef();\n\n componentDidMount() {\n this.loadTree()\n }\n\n loadTree = () => {\n this.setState({treeLoading: true})\n HttpUtils.get('admin/dict/type-tree').then(rs => {\n this.setState({typeTree: rs})\n }).finally(() => {\n this.setState({treeLoading: false})\n })\n }\n\n handleTypeAdd = () => {\n this.setState({\n typeFormOpen: true,\n typeFormValues: {pid: this.state.selectedType?.id, enabled: true},\n })\n }\n\n handleTypeEdit = () => {\n const {selectedType} = this.state\n if (!selectedType) return\n this.setState({typeFormOpen: true, typeFormValues: {...selectedType}})\n }\n\n handleTypeDelete = () => {\n const {selectedType} = this.state\n if (!selectedType) return\n HttpUtils.post('admin/dict/type-delete', {id: selectedType.id}).then(() => {\n this.setState({selectedType: null, selectedTypeCode: null})\n this.loadTree()\n })\n }\n\n handleTypeFormFinish = values => {\n const isNew = !values.id\n const url = isNew ? 'admin/dict/type-create' : 'admin/dict/type-update'\n HttpUtils.post(url, values).then(rs => {\n this.setState({typeFormOpen: false})\n this.loadTree()\n })\n }\n\n onTreeSelect = (selectedKeys) => {\n if (selectedKeys.length === 0) {\n this.setState({selectedType: null, selectedTypeCode: null})\n return\n }\n const findNode = (nodes, key) => {\n for (const n of nodes) {\n if (n.id === key) return n\n if (n.children) {\n const found = findNode(n.children, key)\n if (found) return found\n }\n }\n return null\n }\n const node = findNode(this.state.typeTree, selectedKeys[0])\n this.setState({\n selectedType: node,\n selectedTypeCode: node?.typeCode || null\n },()=>this.tableRef.current.reload())\n }\n\n handleItemAdd = () => {\n this.setState({formOpen: true, formValues: {typeCode: this.state.selectedTypeCode}})\n }\n\n handleItemEdit = record => {\n this.setState({formOpen: true, formValues: record})\n }\n\n handleItemDelete = row => {\n HttpUtils.post('admin/dict/delete', row).then(rs => {\n this.tableRef.current.reload()\n })\n }\n\n onItemFormFinish = values => {\n const isNew = !values.id\n const url = isNew ? 'admin/dict/create' : 'admin/dict/update'\n HttpUtils.post(url, values).then(rs => {\n this.setState({formOpen: false})\n this.tableRef.current.reload()\n })\n }\n\n columns = [\n {title: '编码', dataIndex: 'code'},\n {title: '标签', dataIndex: 'label'},\n {\n title: '颜色', dataIndex: 'color',\n render(v) {\n if (v) return <Tag color={v.toLowerCase()}>{v}</Tag>\n }\n },\n {\n title: '启用', dataIndex: 'enabled',\n render(v) {\n return <ViewBooleanEnableDisable value={v}/>\n }\n },\n {title: '序号', dataIndex: 'seq'},\n {\n title: '操作', dataIndex: 'option',\n render: (_, record) => {\n return (\n <ButtonList>\n <Button size='small' perm='sys-dict:update'\n onClick={() => this.handleItemEdit(record)}>编辑</Button>\n <Popconfirm perm='sys-dict:delete' title='是否确定删除字典项'\n onConfirm={() => this.handleItemDelete(record)}>\n <Button size='small'>删除</Button>\n </Popconfirm>\n </ButtonList>\n );\n },\n },\n ]\n\n render() {\n const {selectedType, selectedTypeCode} = this.state\n const hasTypeSelected = selectedType != null && selectedTypeCode != null\n\n return <Page>\n <Splitter>\n <Splitter.Panel defaultSize={300}>\n <Card loading={this.state.treeLoading}\n title='字典类型'\n extra={<Space>\n <Button size='small' shape='round' icon={<SyncOutlined/>}\n onClick={this.loadTree}/>\n </Space>}\n >\n <ButtonList>\n <Button type='primary' size='small' onClick={this.handleTypeAdd}>\n <PlusOutlined/> 新增类型\n </Button>\n <Button size='small' disabled={!selectedType} onClick={this.handleTypeEdit}>\n <EditOutlined/> 编辑\n </Button>\n <Popconfirm title='是否确定删除此类型及其所有子类型和字典项?'\n disabled={!selectedType}\n onConfirm={this.handleTypeDelete}>\n <Button size='small' disabled={!selectedType}>\n <DeleteOutlined/> 删除\n </Button>\n </Popconfirm>\n </ButtonList>\n <Gap/>\n <Tree\n treeData={this.state.typeTree}\n onSelect={this.onTreeSelect}\n fieldNames={{title: 'typeLabel', key: 'id'}}\n showLine\n defaultExpandAll\n blockNode\n />\n {this.state.typeTree.length === 0 && <Empty/>}\n\n\n </Card>\n </Splitter.Panel>\n\n <Splitter.Panel>\n <Card title={hasTypeSelected ? `${selectedType.typeLabel} 的字典项` : '字典项'}\n extra={\n hasTypeSelected\n ? <Button type='primary' onClick={this.handleItemAdd}>\n <PlusOutlined/> 新增\n </Button>\n : null\n }\n >\n {!hasTypeSelected\n ? <Empty description='请在左侧选择一个字典类型'/>\n : <ProTable\n rowKey='uid'\n actionRef={this.tableRef}\n request={(params) => {\n params.typeCode = selectedTypeCode\n return HttpUtils.get('admin/dict/page', params)\n }}\n columns={this.columns}\n showToolbarSearch\n />\n }\n </Card>\n </Splitter.Panel>\n </Splitter>\n\n <Modal title={this.state.typeFormValues?.id ? '编辑字典类型' : '新增字典类型'}\n open={this.state.typeFormOpen}\n onOk={() => this.typeFormRef.current.submit()}\n onCancel={() => this.setState({typeFormOpen: false})}\n destroyOnClose\n >\n <Form ref={this.typeFormRef} labelCol={{flex: '100px'}}\n initialValues={this.state.typeFormValues}\n onFinish={this.handleTypeFormFinish}\n >\n <Form.Item name='id' noStyle/>\n <Form.Item label='父类型' name='pid'>\n <TreeSelect treeData={this.state.typeTree}\n fieldNames={{label: 'typeLabel', value: 'id'}}\n allowClear\n />\n </Form.Item>\n <Form.Item label='类型编码' name='typeCode' rules={[{required: true}]}>\n <Input placeholder='举例: orderStatus'/>\n </Form.Item>\n <Form.Item label='类型名称' name='typeLabel' rules={[{required: true}]}>\n <Input placeholder='举例: 订单状态'/>\n </Form.Item>\n <Form.Item label='启用' name='enabled' rules={[{required: true}]}>\n <FieldBoolean/>\n </Form.Item>\n <Form.Item label='序号' name='seq'>\n <InputNumber/>\n </Form.Item>\n </Form>\n </Modal>\n\n <Modal title='编辑字典项'\n open={this.state.formOpen}\n onOk={() => this.formRef.current.submit()}\n onCancel={() => this.setState({formOpen: false})}\n destroyOnClose\n >\n <Form ref={this.formRef} labelCol={{flex: '100px'}}\n initialValues={this.state.formValues}\n onFinish={this.onItemFormFinish}\n >\n <Form.Item name='id' noStyle/>\n <Form.Item label='类型编码' name='typeCode'>\n <Input disabled/>\n </Form.Item>\n <Form.Item label='编码' name='code' rules={[{required: true}]}>\n <Input/>\n </Form.Item>\n <Form.Item label='标签' name='label' rules={[{required: true}]} help='显示文本'>\n <Input/>\n </Form.Item>\n <Form.Item label='颜色' name='color'>\n <FieldDictSelect typeCode='statusColor'/>\n </Form.Item>\n <Form.Item label='序号' name='seq'>\n <InputNumber/>\n </Form.Item>\n <Form.Item label='启用' name='enabled' rules={[{required: true}]}>\n <FieldBoolean/>\n </Form.Item>\n </Form>\n </Modal>\n </Page>\n }\n}\n",
|
|
2089
2089
|
"__isJSFile": true,
|
|
2090
2090
|
"__absFile": "/home/runner/work/open-admin/open-admin/web/src/pages/system/dict/index.jsx"
|
|
2091
2091
|
},
|
|
@@ -1,103 +1,149 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {Button, Form, Input, InputNumber, Modal, Popconfirm,
|
|
3
|
-
import
|
|
4
|
-
|
|
1
|
+
import {DeleteOutlined, EditOutlined, PlusOutlined, SyncOutlined} from '@ant-design/icons';
|
|
2
|
+
import {Button, Card, Empty, Form, Input, InputNumber, Modal, Popconfirm, Space, Splitter, Tree, Tag, TreeSelect} from 'antd';
|
|
3
|
+
import React from 'react';
|
|
5
4
|
import {
|
|
6
5
|
ButtonList,
|
|
7
|
-
FieldBoolean,
|
|
6
|
+
FieldBoolean,
|
|
7
|
+
FieldDictSelect,
|
|
8
|
+
Gap,
|
|
8
9
|
HttpUtils,
|
|
9
10
|
Page,
|
|
10
11
|
ProTable,
|
|
11
|
-
ViewBooleanEnableDisable,
|
|
12
|
+
ViewBooleanEnableDisable,
|
|
12
13
|
} from "../../../framework";
|
|
13
14
|
|
|
14
15
|
export default class extends React.Component {
|
|
15
16
|
|
|
16
17
|
state = {
|
|
18
|
+
typeTree: [],
|
|
19
|
+
treeLoading: false,
|
|
20
|
+
selectedType: null,
|
|
21
|
+
selectedTypeCode: null,
|
|
22
|
+
|
|
23
|
+
formOpen: false,
|
|
17
24
|
formValues: {},
|
|
18
|
-
|
|
25
|
+
typeFormOpen: false,
|
|
26
|
+
typeFormValues: {},
|
|
19
27
|
}
|
|
20
28
|
|
|
21
|
-
formRef = React.createRef()
|
|
22
|
-
|
|
29
|
+
formRef = React.createRef();
|
|
30
|
+
typeFormRef = React.createRef();
|
|
31
|
+
tableRef = React.createRef();
|
|
23
32
|
|
|
33
|
+
componentDidMount() {
|
|
34
|
+
this.loadTree()
|
|
35
|
+
}
|
|
24
36
|
|
|
37
|
+
loadTree = () => {
|
|
38
|
+
this.setState({treeLoading: true})
|
|
39
|
+
HttpUtils.get('admin/dict/type-tree').then(rs => {
|
|
40
|
+
this.setState({typeTree: rs})
|
|
41
|
+
}).finally(() => {
|
|
42
|
+
this.setState({treeLoading: false})
|
|
43
|
+
})
|
|
44
|
+
}
|
|
25
45
|
|
|
46
|
+
handleTypeAdd = () => {
|
|
47
|
+
this.setState({
|
|
48
|
+
typeFormOpen: true,
|
|
49
|
+
typeFormValues: {pid: this.state.selectedType?.id, enabled: true},
|
|
50
|
+
})
|
|
51
|
+
}
|
|
26
52
|
|
|
27
|
-
|
|
28
|
-
|
|
53
|
+
handleTypeEdit = () => {
|
|
54
|
+
const {selectedType} = this.state
|
|
55
|
+
if (!selectedType) return
|
|
56
|
+
this.setState({typeFormOpen: true, typeFormValues: {...selectedType}})
|
|
29
57
|
}
|
|
30
58
|
|
|
31
|
-
|
|
32
|
-
|
|
59
|
+
handleTypeDelete = () => {
|
|
60
|
+
const {selectedType} = this.state
|
|
61
|
+
if (!selectedType) return
|
|
62
|
+
HttpUtils.post('admin/dict/type-delete', {id: selectedType.id}).then(() => {
|
|
63
|
+
this.setState({selectedType: null, selectedTypeCode: null})
|
|
64
|
+
this.loadTree()
|
|
65
|
+
})
|
|
33
66
|
}
|
|
34
67
|
|
|
35
|
-
|
|
36
|
-
const isNew = !values.id
|
|
37
|
-
const url = isNew ? 'admin/dict/create' : 'admin/dict/update'
|
|
68
|
+
handleTypeFormFinish = values => {
|
|
69
|
+
const isNew = !values.id
|
|
70
|
+
const url = isNew ? 'admin/dict/type-create' : 'admin/dict/type-update'
|
|
38
71
|
HttpUtils.post(url, values).then(rs => {
|
|
39
|
-
this.setState({
|
|
40
|
-
this.
|
|
72
|
+
this.setState({typeFormOpen: false})
|
|
73
|
+
this.loadTree()
|
|
41
74
|
})
|
|
42
75
|
}
|
|
43
76
|
|
|
44
|
-
|
|
77
|
+
onTreeSelect = (selectedKeys) => {
|
|
78
|
+
if (selectedKeys.length === 0) {
|
|
79
|
+
this.setState({selectedType: null, selectedTypeCode: null})
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
const findNode = (nodes, key) => {
|
|
83
|
+
for (const n of nodes) {
|
|
84
|
+
if (n.id === key) return n
|
|
85
|
+
if (n.children) {
|
|
86
|
+
const found = findNode(n.children, key)
|
|
87
|
+
if (found) return found
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return null
|
|
91
|
+
}
|
|
92
|
+
const node = findNode(this.state.typeTree, selectedKeys[0])
|
|
93
|
+
this.setState({
|
|
94
|
+
selectedType: node,
|
|
95
|
+
selectedTypeCode: node?.typeCode || null
|
|
96
|
+
},()=>this.tableRef.current.reload())
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
handleItemAdd = () => {
|
|
100
|
+
this.setState({formOpen: true, formValues: {typeCode: this.state.selectedTypeCode}})
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
handleItemEdit = record => {
|
|
104
|
+
this.setState({formOpen: true, formValues: record})
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
handleItemDelete = row => {
|
|
45
108
|
HttpUtils.post('admin/dict/delete', row).then(rs => {
|
|
46
109
|
this.tableRef.current.reload()
|
|
47
110
|
})
|
|
48
111
|
}
|
|
49
112
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
title: '标签',
|
|
61
|
-
dataIndex: 'label',
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
title: '编码',
|
|
65
|
-
dataIndex: 'code',
|
|
66
|
-
},
|
|
113
|
+
onItemFormFinish = values => {
|
|
114
|
+
const isNew = !values.id
|
|
115
|
+
const url = isNew ? 'admin/dict/create' : 'admin/dict/update'
|
|
116
|
+
HttpUtils.post(url, values).then(rs => {
|
|
117
|
+
this.setState({formOpen: false})
|
|
118
|
+
this.tableRef.current.reload()
|
|
119
|
+
})
|
|
120
|
+
}
|
|
67
121
|
|
|
122
|
+
columns = [
|
|
123
|
+
{title: '编码', dataIndex: 'code'},
|
|
124
|
+
{title: '标签', dataIndex: 'label'},
|
|
68
125
|
{
|
|
69
|
-
title: '
|
|
70
|
-
dataIndex: 'enabled',
|
|
126
|
+
title: '颜色', dataIndex: 'color',
|
|
71
127
|
render(v) {
|
|
72
|
-
return <
|
|
128
|
+
if (v) return <Tag color={v.toLowerCase()}>{v}</Tag>
|
|
73
129
|
}
|
|
74
|
-
|
|
75
130
|
},
|
|
76
131
|
{
|
|
77
|
-
title: '
|
|
78
|
-
dataIndex: 'color',
|
|
132
|
+
title: '启用', dataIndex: 'enabled',
|
|
79
133
|
render(v) {
|
|
80
|
-
|
|
81
|
-
return <Tag color={v.toLowerCase()}>{v}</Tag>
|
|
82
|
-
}
|
|
83
|
-
|
|
134
|
+
return <ViewBooleanEnableDisable value={v}/>
|
|
84
135
|
}
|
|
85
136
|
},
|
|
86
|
-
|
|
87
|
-
{
|
|
88
|
-
title: '序号',
|
|
89
|
-
dataIndex: 'seq',
|
|
90
|
-
},
|
|
137
|
+
{title: '序号', dataIndex: 'seq'},
|
|
91
138
|
{
|
|
92
|
-
title: '操作',
|
|
93
|
-
dataIndex: 'option',
|
|
139
|
+
title: '操作', dataIndex: 'option',
|
|
94
140
|
render: (_, record) => {
|
|
95
141
|
return (
|
|
96
142
|
<ButtonList>
|
|
97
143
|
<Button size='small' perm='sys-dict:update'
|
|
98
|
-
onClick={() => this.
|
|
144
|
+
onClick={() => this.handleItemEdit(record)}>编辑</Button>
|
|
99
145
|
<Popconfirm perm='sys-dict:delete' title='是否确定删除字典项'
|
|
100
|
-
onConfirm={() => this.
|
|
146
|
+
onConfirm={() => this.handleItemDelete(record)}>
|
|
101
147
|
<Button size='small'>删除</Button>
|
|
102
148
|
</Popconfirm>
|
|
103
149
|
</ButtonList>
|
|
@@ -107,41 +153,121 @@ export default class extends React.Component {
|
|
|
107
153
|
]
|
|
108
154
|
|
|
109
155
|
render() {
|
|
156
|
+
const {selectedType, selectedTypeCode} = this.state
|
|
157
|
+
const hasTypeSelected = selectedType != null && selectedTypeCode != null
|
|
158
|
+
|
|
110
159
|
return <Page>
|
|
111
|
-
<
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
160
|
+
<Splitter>
|
|
161
|
+
<Splitter.Panel defaultSize={300}>
|
|
162
|
+
<Card loading={this.state.treeLoading}
|
|
163
|
+
title='字典类型'
|
|
164
|
+
extra={<Space>
|
|
165
|
+
<Button size='small' shape='round' icon={<SyncOutlined/>}
|
|
166
|
+
onClick={this.loadTree}/>
|
|
167
|
+
</Space>}
|
|
168
|
+
>
|
|
169
|
+
<ButtonList>
|
|
170
|
+
<Button type='primary' size='small' onClick={this.handleTypeAdd}>
|
|
171
|
+
<PlusOutlined/> 新增类型
|
|
172
|
+
</Button>
|
|
173
|
+
<Button size='small' disabled={!selectedType} onClick={this.handleTypeEdit}>
|
|
174
|
+
<EditOutlined/> 编辑
|
|
175
|
+
</Button>
|
|
176
|
+
<Popconfirm title='是否确定删除此类型及其所有子类型和字典项?'
|
|
177
|
+
disabled={!selectedType}
|
|
178
|
+
onConfirm={this.handleTypeDelete}>
|
|
179
|
+
<Button size='small' disabled={!selectedType}>
|
|
180
|
+
<DeleteOutlined/> 删除
|
|
181
|
+
</Button>
|
|
182
|
+
</Popconfirm>
|
|
183
|
+
</ButtonList>
|
|
184
|
+
<Gap/>
|
|
185
|
+
<Tree
|
|
186
|
+
treeData={this.state.typeTree}
|
|
187
|
+
onSelect={this.onTreeSelect}
|
|
188
|
+
fieldNames={{title: 'typeLabel', key: 'id'}}
|
|
189
|
+
showLine
|
|
190
|
+
defaultExpandAll
|
|
191
|
+
blockNode
|
|
192
|
+
/>
|
|
193
|
+
{this.state.typeTree.length === 0 && <Empty/>}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
</Card>
|
|
197
|
+
</Splitter.Panel>
|
|
198
|
+
|
|
199
|
+
<Splitter.Panel>
|
|
200
|
+
<Card title={hasTypeSelected ? `${selectedType.typeLabel} 的字典项` : '字典项'}
|
|
201
|
+
extra={
|
|
202
|
+
hasTypeSelected
|
|
203
|
+
? <Button type='primary' onClick={this.handleItemAdd}>
|
|
204
|
+
<PlusOutlined/> 新增
|
|
205
|
+
</Button>
|
|
206
|
+
: null
|
|
207
|
+
}
|
|
208
|
+
>
|
|
209
|
+
{!hasTypeSelected
|
|
210
|
+
? <Empty description='请在左侧选择一个字典类型'/>
|
|
211
|
+
: <ProTable
|
|
212
|
+
rowKey='uid'
|
|
213
|
+
actionRef={this.tableRef}
|
|
214
|
+
request={(params) => {
|
|
215
|
+
params.typeCode = selectedTypeCode
|
|
216
|
+
return HttpUtils.get('admin/dict/page', params)
|
|
217
|
+
}}
|
|
218
|
+
columns={this.columns}
|
|
219
|
+
showToolbarSearch
|
|
220
|
+
/>
|
|
221
|
+
}
|
|
222
|
+
</Card>
|
|
223
|
+
</Splitter.Panel>
|
|
224
|
+
</Splitter>
|
|
225
|
+
|
|
226
|
+
<Modal title={this.state.typeFormValues?.id ? '编辑字典类型' : '新增字典类型'}
|
|
227
|
+
open={this.state.typeFormOpen}
|
|
228
|
+
onOk={() => this.typeFormRef.current.submit()}
|
|
229
|
+
onCancel={() => this.setState({typeFormOpen: false})}
|
|
230
|
+
destroyOnClose
|
|
134
231
|
>
|
|
232
|
+
<Form ref={this.typeFormRef} labelCol={{flex: '100px'}}
|
|
233
|
+
initialValues={this.state.typeFormValues}
|
|
234
|
+
onFinish={this.handleTypeFormFinish}
|
|
235
|
+
>
|
|
236
|
+
<Form.Item name='id' noStyle/>
|
|
237
|
+
<Form.Item label='父类型' name='pid'>
|
|
238
|
+
<TreeSelect treeData={this.state.typeTree}
|
|
239
|
+
fieldNames={{label: 'typeLabel', value: 'id'}}
|
|
240
|
+
allowClear
|
|
241
|
+
/>
|
|
242
|
+
</Form.Item>
|
|
243
|
+
<Form.Item label='类型编码' name='typeCode' rules={[{required: true}]}>
|
|
244
|
+
<Input placeholder='举例: orderStatus'/>
|
|
245
|
+
</Form.Item>
|
|
246
|
+
<Form.Item label='类型名称' name='typeLabel' rules={[{required: true}]}>
|
|
247
|
+
<Input placeholder='举例: 订单状态'/>
|
|
248
|
+
</Form.Item>
|
|
249
|
+
<Form.Item label='启用' name='enabled' rules={[{required: true}]}>
|
|
250
|
+
<FieldBoolean/>
|
|
251
|
+
</Form.Item>
|
|
252
|
+
<Form.Item label='序号' name='seq'>
|
|
253
|
+
<InputNumber/>
|
|
254
|
+
</Form.Item>
|
|
255
|
+
</Form>
|
|
256
|
+
</Modal>
|
|
135
257
|
|
|
258
|
+
<Modal title='编辑字典项'
|
|
259
|
+
open={this.state.formOpen}
|
|
260
|
+
onOk={() => this.formRef.current.submit()}
|
|
261
|
+
onCancel={() => this.setState({formOpen: false})}
|
|
262
|
+
destroyOnClose
|
|
263
|
+
>
|
|
136
264
|
<Form ref={this.formRef} labelCol={{flex: '100px'}}
|
|
137
265
|
initialValues={this.state.formValues}
|
|
138
|
-
onFinish={this.
|
|
139
|
-
|
|
140
|
-
<Form.Item
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
<Form.Item label='类型' name='typeCode' rules={[{required: true}]} >
|
|
144
|
-
<FieldRemoteSelect url='/admin/dict/type-options' />
|
|
266
|
+
onFinish={this.onItemFormFinish}
|
|
267
|
+
>
|
|
268
|
+
<Form.Item name='id' noStyle/>
|
|
269
|
+
<Form.Item label='类型编码' name='typeCode'>
|
|
270
|
+
<Input disabled/>
|
|
145
271
|
</Form.Item>
|
|
146
272
|
<Form.Item label='编码' name='code' rules={[{required: true}]}>
|
|
147
273
|
<Input/>
|
|
@@ -149,23 +275,17 @@ export default class extends React.Component {
|
|
|
149
275
|
<Form.Item label='标签' name='label' rules={[{required: true}]} help='显示文本'>
|
|
150
276
|
<Input/>
|
|
151
277
|
</Form.Item>
|
|
152
|
-
<Form.Item label='颜色' name='color'
|
|
153
|
-
<FieldDictSelect typeCode='statusColor'
|
|
278
|
+
<Form.Item label='颜色' name='color'>
|
|
279
|
+
<FieldDictSelect typeCode='statusColor'/>
|
|
154
280
|
</Form.Item>
|
|
155
|
-
<Form.Item label='序号' name='seq'
|
|
281
|
+
<Form.Item label='序号' name='seq'>
|
|
156
282
|
<InputNumber/>
|
|
157
283
|
</Form.Item>
|
|
158
|
-
|
|
159
284
|
<Form.Item label='启用' name='enabled' rules={[{required: true}]}>
|
|
160
285
|
<FieldBoolean/>
|
|
161
286
|
</Form.Item>
|
|
162
|
-
|
|
163
287
|
</Form>
|
|
164
288
|
</Modal>
|
|
165
289
|
</Page>
|
|
166
|
-
|
|
167
|
-
|
|
168
290
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
291
|
}
|