@jiangood/open-admin 2.3.0 → 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
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": {
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
0
|
|
82
82
|
]
|
|
83
83
|
},
|
|
84
|
-
"register":
|
|
84
|
+
"register": 3
|
|
85
85
|
},
|
|
86
86
|
"enableBy": "register"
|
|
87
87
|
},
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
0
|
|
116
116
|
]
|
|
117
117
|
},
|
|
118
|
-
"register":
|
|
118
|
+
"register": 1
|
|
119
119
|
},
|
|
120
120
|
"enableBy": "register"
|
|
121
121
|
},
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"config": {},
|
|
129
129
|
"time": {
|
|
130
130
|
"hooks": {},
|
|
131
|
-
"register":
|
|
131
|
+
"register": 0
|
|
132
132
|
},
|
|
133
133
|
"enableBy": "register"
|
|
134
134
|
},
|
|
@@ -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,10 +175,10 @@
|
|
|
175
175
|
0
|
|
176
176
|
],
|
|
177
177
|
"onCheck": [
|
|
178
|
-
|
|
178
|
+
1
|
|
179
179
|
]
|
|
180
180
|
},
|
|
181
|
-
"register":
|
|
181
|
+
"register": 1
|
|
182
182
|
},
|
|
183
183
|
"enableBy": "register"
|
|
184
184
|
},
|
|
@@ -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
|
},
|
|
@@ -1091,10 +1091,10 @@
|
|
|
1091
1091
|
"time": {
|
|
1092
1092
|
"hooks": {
|
|
1093
1093
|
"onStart": [
|
|
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
|
},
|
|
@@ -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": {
|
|
@@ -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
|
},
|
|
@@ -1266,10 +1266,10 @@
|
|
|
1266
1266
|
"time": {
|
|
1267
1267
|
"hooks": {
|
|
1268
1268
|
"modifyConfig": [
|
|
1269
|
-
|
|
1269
|
+
1
|
|
1270
1270
|
]
|
|
1271
1271
|
},
|
|
1272
|
-
"register":
|
|
1272
|
+
"register": 1
|
|
1273
1273
|
}
|
|
1274
1274
|
},
|
|
1275
1275
|
"./node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill": {
|
|
@@ -1486,7 +1486,7 @@
|
|
|
1486
1486
|
"config": {},
|
|
1487
1487
|
"time": {
|
|
1488
1488
|
"hooks": {},
|
|
1489
|
-
"register":
|
|
1489
|
+
"register": 1
|
|
1490
1490
|
}
|
|
1491
1491
|
},
|
|
1492
1492
|
"./node_modules/@umijs/preset-umi/dist/features/legacy/legacy": {
|
|
@@ -1511,7 +1511,7 @@
|
|
|
1511
1511
|
"config": {},
|
|
1512
1512
|
"time": {
|
|
1513
1513
|
"hooks": {},
|
|
1514
|
-
"register":
|
|
1514
|
+
"register": 0
|
|
1515
1515
|
},
|
|
1516
1516
|
"enableBy": "config"
|
|
1517
1517
|
},
|
|
@@ -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
|
},
|
|
@@ -1627,7 +1627,7 @@
|
|
|
1627
1627
|
"config": {},
|
|
1628
1628
|
"time": {
|
|
1629
1629
|
"hooks": {},
|
|
1630
|
-
"register":
|
|
1630
|
+
"register": 1
|
|
1631
1631
|
},
|
|
1632
1632
|
"enableBy": "register"
|
|
1633
1633
|
},
|
|
@@ -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
|
},
|
|
@@ -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
|
},
|
|
@@ -1730,7 +1730,7 @@
|
|
|
1730
1730
|
"config": {},
|
|
1731
1731
|
"time": {
|
|
1732
1732
|
"hooks": {},
|
|
1733
|
-
"register":
|
|
1733
|
+
"register": 0
|
|
1734
1734
|
},
|
|
1735
1735
|
"enableBy": "register"
|
|
1736
1736
|
},
|
|
@@ -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
|
},
|
|
@@ -1821,7 +1821,7 @@
|
|
|
1821
1821
|
"config": {},
|
|
1822
1822
|
"time": {
|
|
1823
1823
|
"hooks": {},
|
|
1824
|
-
"register":
|
|
1824
|
+
"register": 0
|
|
1825
1825
|
},
|
|
1826
1826
|
"enableBy": "register"
|
|
1827
1827
|
},
|
|
@@ -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
|
},
|
|
@@ -1886,7 +1886,7 @@
|
|
|
1886
1886
|
"config": {},
|
|
1887
1887
|
"time": {
|
|
1888
1888
|
"hooks": {},
|
|
1889
|
-
"register":
|
|
1889
|
+
"register": 0
|
|
1890
1890
|
},
|
|
1891
1891
|
"enableBy": "register"
|
|
1892
1892
|
},
|
|
@@ -1899,7 +1899,7 @@
|
|
|
1899
1899
|
"config": {},
|
|
1900
1900
|
"time": {
|
|
1901
1901
|
"hooks": {},
|
|
1902
|
-
"register":
|
|
1902
|
+
"register": 1
|
|
1903
1903
|
},
|
|
1904
1904
|
"enableBy": "register"
|
|
1905
1905
|
},
|
|
@@ -1925,7 +1925,7 @@
|
|
|
1925
1925
|
"config": {},
|
|
1926
1926
|
"time": {
|
|
1927
1927
|
"hooks": {},
|
|
1928
|
-
"register":
|
|
1928
|
+
"register": 0
|
|
1929
1929
|
},
|
|
1930
1930
|
"enableBy": "register"
|
|
1931
1931
|
},
|
|
@@ -1951,7 +1951,7 @@
|
|
|
1951
1951
|
"config": {},
|
|
1952
1952
|
"time": {
|
|
1953
1953
|
"hooks": {},
|
|
1954
|
-
"register":
|
|
1954
|
+
"register": 1
|
|
1955
1955
|
},
|
|
1956
1956
|
"enableBy": "register"
|
|
1957
1957
|
},
|
|
@@ -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,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import {Modal} from 'antd';
|
|
3
|
+
import {SysUtils} from '../../utils';
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
export class ViewImage extends React.Component {
|
|
@@ -19,17 +20,18 @@ export class ViewImage extends React.Component {
|
|
|
19
20
|
for (let v of vs) {
|
|
20
21
|
const isId = v.indexOf('/') === -1;
|
|
21
22
|
const isAbsUrl = v.startsWith('http');
|
|
22
|
-
|
|
23
|
+
const isDataUrl = v.startsWith('data:');
|
|
24
|
+
if (isAbsUrl || isDataUrl) {
|
|
23
25
|
urlList.push(v);
|
|
24
26
|
continue;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
if (isId) {
|
|
28
|
-
urlList.push(
|
|
30
|
+
urlList.push(SysUtils.contextPath('/admin/sysFile/preview/' + v));
|
|
29
31
|
continue;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
urlList.push(
|
|
34
|
+
urlList.push(SysUtils.contextPath(v));
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
const imgs = urlList.map((url) => (
|
|
@@ -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
|
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import React, {ReactNode} from 'react';
|
|
2
|
-
import {Modal} from 'antd';
|
|
3
|
-
|
|
4
|
-
export interface ProModalProps {
|
|
5
|
-
title: string;
|
|
6
|
-
actionRef?: any; // 弃用,请使用ref
|
|
7
|
-
ref: any;
|
|
8
|
-
onShow?: any;
|
|
9
|
-
footer?: any;
|
|
10
|
-
width?: number;
|
|
11
|
-
children:ReactNode;
|
|
12
|
-
}
|
|
13
|
-
export class ProModal extends React.Component<ProModalProps, any> {
|
|
14
|
-
|
|
15
|
-
constructor(props:ProModalProps) {
|
|
16
|
-
super(props);
|
|
17
|
-
if (props.actionRef) {
|
|
18
|
-
props.actionRef.current = this;
|
|
19
|
-
}
|
|
20
|
-
if (props.ref) {
|
|
21
|
-
props.ref.current = this;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
state = {
|
|
28
|
-
visible: false,
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
show = () => {
|
|
32
|
-
this.setState({
|
|
33
|
-
visible: true,
|
|
34
|
-
});
|
|
35
|
-
if (this.props.onShow) {
|
|
36
|
-
this.props.onShow();
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
hide = () => {
|
|
40
|
-
this.setState({
|
|
41
|
-
visible: false,
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
open = () => {
|
|
45
|
-
this.show();
|
|
46
|
-
};
|
|
47
|
-
close = () => {
|
|
48
|
-
this.hide();
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
render() {
|
|
52
|
-
return (
|
|
53
|
-
<Modal
|
|
54
|
-
mask={{ closable: false }}
|
|
55
|
-
destroyOnHidden
|
|
56
|
-
title={this.props.title}
|
|
57
|
-
open={this.state.visible}
|
|
58
|
-
onCancel={this.hide}
|
|
59
|
-
footer={this.props.footer || null}
|
|
60
|
-
width={this.props.width || 800}
|
|
61
|
-
>
|
|
62
|
-
{this.state.visible && this.props.children}
|
|
63
|
-
</Modal>
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
}
|