Commit a405b059b52ef2252bb75386fbcb1b2d790bb6ac
1 parent
6824f231
fix:[DEFECT-312,DEFECT-317,DEFECT-319,DEFECT-311],fix:修复设备分配删除问题,转换脚本启用删除问题,消息模板启用时删除问题,设备配置删除缓存问题
Showing
6 changed files
with
203 additions
and
74 deletions
@@ -74,7 +74,7 @@ export const deviceConfigDelete = (ids: string[]) => { | @@ -74,7 +74,7 @@ export const deviceConfigDelete = (ids: string[]) => { | ||
74 | return defHttp.delete({ | 74 | return defHttp.delete({ |
75 | url: EDeviceConfigApi.DEVICE_CONFIG_DELETE, | 75 | url: EDeviceConfigApi.DEVICE_CONFIG_DELETE, |
76 | data: { | 76 | data: { |
77 | - ids: ids, | 77 | + ids, |
78 | }, | 78 | }, |
79 | }); | 79 | }); |
80 | }; | 80 | }; |
@@ -7,9 +7,9 @@ | @@ -7,9 +7,9 @@ | ||
7 | ref="organizationIdTreeRef" | 7 | ref="organizationIdTreeRef" |
8 | /> | 8 | /> |
9 | <BasicTable | 9 | <BasicTable |
10 | - @selection-change="useSelectionChange" | ||
11 | @register="registerTable" | 10 | @register="registerTable" |
12 | :searchInfo="searchInfo" | 11 | :searchInfo="searchInfo" |
12 | + @selection-change="useSelectionChange" | ||
13 | :rowSelection="{ type: 'checkbox' }" | 13 | :rowSelection="{ type: 'checkbox' }" |
14 | class="w-3/4 xl:w-4/5" | 14 | class="w-3/4 xl:w-4/5" |
15 | > | 15 | > |
@@ -95,7 +95,7 @@ | @@ -95,7 +95,7 @@ | ||
95 | const searchInfo = reactive<Recordable>({}); | 95 | const searchInfo = reactive<Recordable>({}); |
96 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); | 96 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); |
97 | // 表格hooks | 97 | // 表格hooks |
98 | - const [registerTable, { reload, getSelectRows }] = useTable({ | 98 | + const [registerTable, { reload, getSelectRows, getSelectRowKeys }] = useTable({ |
99 | title: '告警配置列表', | 99 | title: '告警配置列表', |
100 | api: queryAlarmConfig, | 100 | api: queryAlarmConfig, |
101 | columns, | 101 | columns, |
@@ -140,6 +140,10 @@ | @@ -140,6 +140,10 @@ | ||
140 | } | 140 | } |
141 | }; | 141 | }; |
142 | const useSelectionChange = () => { | 142 | const useSelectionChange = () => { |
143 | + selectArray = getSelectRowKeys(); | ||
144 | + if (selectArray.length > 0) { | ||
145 | + hasBatchDelete.value = false; | ||
146 | + } | ||
143 | let getRows = getSelectRows(); | 147 | let getRows = getSelectRows(); |
144 | const isJudge = getRows.map((m) => m.status); | 148 | const isJudge = getRows.map((m) => m.status); |
145 | if (isJudge.length === 0) { | 149 | if (isJudge.length === 0) { |
@@ -152,7 +156,6 @@ | @@ -152,7 +156,6 @@ | ||
152 | } else if (!isJudge.includes(1) && isJudge.includes(0)) { | 156 | } else if (!isJudge.includes(1) && isJudge.includes(0)) { |
153 | hasBatchDelete.value = false; | 157 | hasBatchDelete.value = false; |
154 | } | 158 | } |
155 | - selectArray = getRows.filter((f) => f.status !== 1).map((m) => m.id); | ||
156 | }; | 159 | }; |
157 | // 删除或批量删除 | 160 | // 删除或批量删除 |
158 | const handleDeleteOrBatchDelete = async (record: Recordable | null) => { | 161 | const handleDeleteOrBatchDelete = async (record: Recordable | null) => { |
@@ -6,14 +6,19 @@ | @@ -6,14 +6,19 @@ | ||
6 | @select="handleSelect" | 6 | @select="handleSelect" |
7 | ref="organizationIdTreeRef" | 7 | ref="organizationIdTreeRef" |
8 | /> | 8 | /> |
9 | - <BasicTable @register="registerTable" class="w-5/6 xl:w-4/5"> | 9 | + <BasicTable |
10 | + @selection-change="useSelectionChange" | ||
11 | + :rowSelection="{ type: 'checkbox' }" | ||
12 | + @register="registerTable" | ||
13 | + class="w-5/6 xl:w-4/5" | ||
14 | + > | ||
10 | <template #toolbar> | 15 | <template #toolbar> |
11 | <a-button type="primary" @click="handleCreate" v-if="authBtn(role)"> 新增设备 </a-button> | 16 | <a-button type="primary" @click="handleCreate" v-if="authBtn(role)"> 新增设备 </a-button> |
12 | <a-button | 17 | <a-button |
13 | color="error" | 18 | color="error" |
14 | v-if="authBtn(role)" | 19 | v-if="authBtn(role)" |
15 | @click="handleDeleteOrBatchDelete(null)" | 20 | @click="handleDeleteOrBatchDelete(null)" |
16 | - :disabled="hasBatchDelete" | 21 | + :disabled="disabled" |
17 | > | 22 | > |
18 | 批量删除 | 23 | 批量删除 |
19 | </a-button> | 24 | </a-button> |
@@ -121,7 +126,7 @@ | @@ -121,7 +126,7 @@ | ||
121 | </div> | 126 | </div> |
122 | </template> | 127 | </template> |
123 | <script lang="ts"> | 128 | <script lang="ts"> |
124 | - import { defineComponent, reactive } from 'vue'; | 129 | + import { defineComponent, reactive, ref } from 'vue'; |
125 | import { DeviceState, DeviceTypeEnum } from '/@/api/device/model/deviceModel'; | 130 | import { DeviceState, DeviceTypeEnum } from '/@/api/device/model/deviceModel'; |
126 | import { BasicTable, useTable, TableAction, TableImg } from '/@/components/Table'; | 131 | import { BasicTable, useTable, TableAction, TableImg } from '/@/components/Table'; |
127 | import { columns, searchFormSchema } from './config/device.data'; | 132 | import { columns, searchFormSchema } from './config/device.data'; |
@@ -137,16 +142,14 @@ | @@ -137,16 +142,14 @@ | ||
137 | import { PageWrapper } from '/@/components/Page'; | 142 | import { PageWrapper } from '/@/components/Page'; |
138 | import { useModal } from '/@/components/Modal'; | 143 | import { useModal } from '/@/components/Modal'; |
139 | import { OrganizationIdTree, useResetOrganizationTree } from '/@/views/common/organizationIdTree'; | 144 | import { OrganizationIdTree, useResetOrganizationTree } from '/@/views/common/organizationIdTree'; |
140 | - | ||
141 | import DeviceModal from './cpns/modal/DeviceModal.vue'; | 145 | import DeviceModal from './cpns/modal/DeviceModal.vue'; |
142 | import { useDrawer } from '/@/components/Drawer'; | 146 | import { useDrawer } from '/@/components/Drawer'; |
143 | import DeviceDetailDrawer from './cpns/modal/DeviceDetailDrawer.vue'; | 147 | import DeviceDetailDrawer from './cpns/modal/DeviceDetailDrawer.vue'; |
144 | import CustomerModal from './cpns/modal/CustomerModal.vue'; | 148 | import CustomerModal from './cpns/modal/CustomerModal.vue'; |
145 | - | 149 | + import { useMessage } from '/@/hooks/web/useMessage'; |
146 | import { USER_INFO_KEY } from '/@/enums/cacheEnum'; | 150 | import { USER_INFO_KEY } from '/@/enums/cacheEnum'; |
147 | import { getAuthCache } from '/@/utils/auth'; | 151 | import { getAuthCache } from '/@/utils/auth'; |
148 | import { authBtn } from '/@/enums/roleEnum'; | 152 | import { authBtn } from '/@/enums/roleEnum'; |
149 | - import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | ||
150 | 153 | ||
151 | export default defineComponent({ | 154 | export default defineComponent({ |
152 | name: 'DeviceManagement', | 155 | name: 'DeviceManagement', |
@@ -162,17 +165,16 @@ | @@ -162,17 +165,16 @@ | ||
162 | TableImg, | 165 | TableImg, |
163 | }, | 166 | }, |
164 | setup(_) { | 167 | setup(_) { |
168 | + const { createMessage } = useMessage(); | ||
169 | + let selectedRowKeys: any = []; | ||
170 | + const disabled = ref(true); | ||
165 | const go = useGo(); | 171 | const go = useGo(); |
166 | - const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete( | ||
167 | - deleteDevice, | ||
168 | - handleSuccess | ||
169 | - ); | ||
170 | const searchInfo = reactive<Recordable>({}); | 172 | const searchInfo = reactive<Recordable>({}); |
171 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); | 173 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); |
172 | const [registerModal, { openModal }] = useModal(); | 174 | const [registerModal, { openModal }] = useModal(); |
173 | const [registerCustomerModal, { openModal: openCustomerModal }] = useModal(); | 175 | const [registerCustomerModal, { openModal: openCustomerModal }] = useModal(); |
174 | const [registerDetailDrawer, { openDrawer }] = useDrawer(); | 176 | const [registerDetailDrawer, { openDrawer }] = useDrawer(); |
175 | - const [registerTable, { reload }] = useTable({ | 177 | + const [registerTable, { reload, getSelectRows, getSelectRowKeys }] = useTable({ |
176 | title: '设备列表', | 178 | title: '设备列表', |
177 | api: devicePage, | 179 | api: devicePage, |
178 | columns, | 180 | columns, |
@@ -185,6 +187,7 @@ | @@ -185,6 +187,7 @@ | ||
185 | showTableSetting: true, | 187 | showTableSetting: true, |
186 | bordered: true, | 188 | bordered: true, |
187 | showIndexColumn: false, | 189 | showIndexColumn: false, |
190 | + rowKey: 'id', | ||
188 | searchInfo: searchInfo, | 191 | searchInfo: searchInfo, |
189 | actionColumn: { | 192 | actionColumn: { |
190 | width: 300, | 193 | width: 300, |
@@ -192,7 +195,6 @@ | @@ -192,7 +195,6 @@ | ||
192 | slots: { customRender: 'action' }, | 195 | slots: { customRender: 'action' }, |
193 | fixed: 'right', | 196 | fixed: 'right', |
194 | }, | 197 | }, |
195 | - ...selectionOptions, | ||
196 | }); | 198 | }); |
197 | 199 | ||
198 | const userInfo: any = getAuthCache(USER_INFO_KEY); | 200 | const userInfo: any = getAuthCache(USER_INFO_KEY); |
@@ -241,6 +243,44 @@ | @@ -241,6 +243,44 @@ | ||
241 | function goDeviceProfile(e) { | 243 | function goDeviceProfile(e) { |
242 | go(PageEnum.DEVICE_PROFILE + '?name=' + String(e)); | 244 | go(PageEnum.DEVICE_PROFILE + '?name=' + String(e)); |
243 | } | 245 | } |
246 | + const useSelectionChange = () => { | ||
247 | + selectedRowKeys = getSelectRowKeys(); | ||
248 | + if (selectedRowKeys.length > 0) { | ||
249 | + disabled.value = false; | ||
250 | + } | ||
251 | + const isJudge = getSelectRows().map((m) => { | ||
252 | + return { | ||
253 | + status: m.customerId, | ||
254 | + id: m.id, | ||
255 | + }; | ||
256 | + }); | ||
257 | + isJudge.some((s) => { | ||
258 | + if (s.status != undefined) { | ||
259 | + disabled.value = true; | ||
260 | + } | ||
261 | + }); | ||
262 | + }; | ||
263 | + // 删除或批量删除 | ||
264 | + const handleDeleteOrBatchDelete = async (record: Recordable | null) => { | ||
265 | + if (record) { | ||
266 | + try { | ||
267 | + await deleteDevice([record.id]); | ||
268 | + createMessage.success('删除成功'); | ||
269 | + handleSuccess(); | ||
270 | + } catch (e: any) {} | ||
271 | + } else { | ||
272 | + try { | ||
273 | + await deleteDevice(selectedRowKeys); | ||
274 | + createMessage.success('批量删除成功'); | ||
275 | + handleSuccess(); | ||
276 | + selectedRowKeys.length = 0; | ||
277 | + } catch (e: any) { | ||
278 | + selectedRowKeys.length = 0; | ||
279 | + } finally { | ||
280 | + selectedRowKeys.length = 0; | ||
281 | + } | ||
282 | + } | ||
283 | + }; | ||
244 | 284 | ||
245 | return { | 285 | return { |
246 | registerTable, | 286 | registerTable, |
@@ -262,7 +302,8 @@ | @@ -262,7 +302,8 @@ | ||
262 | authBtn, | 302 | authBtn, |
263 | role, | 303 | role, |
264 | handleDeleteOrBatchDelete, | 304 | handleDeleteOrBatchDelete, |
265 | - hasBatchDelete, | 305 | + disabled, |
306 | + useSelectionChange, | ||
266 | }; | 307 | }; |
267 | }, | 308 | }, |
268 | }); | 309 | }); |
@@ -2,8 +2,8 @@ | @@ -2,8 +2,8 @@ | ||
2 | <div> | 2 | <div> |
3 | <BasicTable | 3 | <BasicTable |
4 | class="devide-profiles" | 4 | class="devide-profiles" |
5 | - @selection-change="useSelectionChange" | ||
6 | @register="registerTable" | 5 | @register="registerTable" |
6 | + @selection-change="useSelectionChange" | ||
7 | :rowSelection="{ type: 'checkbox' }" | 7 | :rowSelection="{ type: 'checkbox' }" |
8 | > | 8 | > |
9 | <template #toolbar> | 9 | <template #toolbar> |
@@ -74,7 +74,7 @@ | @@ -74,7 +74,7 @@ | ||
74 | </div> | 74 | </div> |
75 | </template> | 75 | </template> |
76 | <script lang="ts"> | 76 | <script lang="ts"> |
77 | - import { defineComponent, ref, nextTick, onUnmounted, reactive } from 'vue'; | 77 | + import { defineComponent, ref, nextTick, onUnmounted } from 'vue'; |
78 | import { BasicTable, TableImg, useTable, TableAction, BasicColumn } from '/@/components/Table'; | 78 | import { BasicTable, TableImg, useTable, TableAction, BasicColumn } from '/@/components/Table'; |
79 | import { columns, searchFormSchema } from './device.profile.data'; | 79 | import { columns, searchFormSchema } from './device.profile.data'; |
80 | import { useMessage } from '/@/hooks/web/useMessage'; | 80 | import { useMessage } from '/@/hooks/web/useMessage'; |
@@ -92,8 +92,8 @@ | @@ -92,8 +92,8 @@ | ||
92 | name: 'DeviceProfileManagement', | 92 | name: 'DeviceProfileManagement', |
93 | components: { BasicTable, DeviceProfileModal, TableAction, ImpExcel, TableImg }, | 93 | components: { BasicTable, DeviceProfileModal, TableAction, ImpExcel, TableImg }, |
94 | setup() { | 94 | setup() { |
95 | + let selectedRowKeys: any = []; | ||
95 | const deviceDetailRef = ref(null); | 96 | const deviceDetailRef = ref(null); |
96 | - let selectedRowKeys: any = reactive([]); | ||
97 | const getPathUrl = ref(''); | 97 | const getPathUrl = ref(''); |
98 | const getPathUrlName = ref(''); | 98 | const getPathUrlName = ref(''); |
99 | const disabled = ref(true); | 99 | const disabled = ref(true); |
@@ -103,29 +103,30 @@ | @@ -103,29 +103,30 @@ | ||
103 | const { createMessage } = useMessage(); | 103 | const { createMessage } = useMessage(); |
104 | const [registerModal, { openModal }] = useModal(); | 104 | const [registerModal, { openModal }] = useModal(); |
105 | const [registerModalDetail] = useModal(); | 105 | const [registerModalDetail] = useModal(); |
106 | - const [registerTable, { reload, getSelectRows, setTableData, getForm }] = useTable({ | ||
107 | - title: '设备配置列表', | ||
108 | - clickToRowSelect: false, | ||
109 | - api: deviceConfigGetQuery, | ||
110 | - immediate: immediateStatus.value, | ||
111 | - columns, | ||
112 | - formConfig: { | ||
113 | - labelWidth: 120, | ||
114 | - schemas: searchFormSchema, | ||
115 | - }, | ||
116 | - rowKey: 'id', | ||
117 | - useSearchForm: true, | ||
118 | - showTableSetting: true, | ||
119 | - bordered: true, | ||
120 | - showIndexColumn: false, | ||
121 | - actionColumn: { | ||
122 | - width: 240, | ||
123 | - title: '操作', | ||
124 | - dataIndex: 'action', | ||
125 | - slots: { customRender: 'action' }, | ||
126 | - fixed: 'right', | ||
127 | - }, | ||
128 | - }); | 106 | + const [registerTable, { reload, getSelectRows, setTableData, getForm, getSelectRowKeys }] = |
107 | + useTable({ | ||
108 | + title: '设备配置列表', | ||
109 | + clickToRowSelect: false, | ||
110 | + api: deviceConfigGetQuery, | ||
111 | + immediate: immediateStatus.value, | ||
112 | + columns, | ||
113 | + formConfig: { | ||
114 | + labelWidth: 120, | ||
115 | + schemas: searchFormSchema, | ||
116 | + }, | ||
117 | + rowKey: 'id', | ||
118 | + useSearchForm: true, | ||
119 | + showTableSetting: true, | ||
120 | + bordered: true, | ||
121 | + showIndexColumn: false, | ||
122 | + actionColumn: { | ||
123 | + width: 240, | ||
124 | + title: '操作', | ||
125 | + dataIndex: 'action', | ||
126 | + slots: { customRender: 'action' }, | ||
127 | + fixed: 'right', | ||
128 | + }, | ||
129 | + }); | ||
129 | 130 | ||
130 | /** | 131 | /** |
131 | *@param url,name | 132 | *@param url,name |
@@ -227,8 +228,11 @@ | @@ -227,8 +228,11 @@ | ||
227 | }, 10); | 228 | }, 10); |
228 | } | 229 | } |
229 | const useSelectionChange = () => { | 230 | const useSelectionChange = () => { |
230 | - let getRows = getSelectRows(); | ||
231 | - const isJudge = getRows.map((m) => m.default); | 231 | + selectedRowKeys = getSelectRowKeys(); |
232 | + if (selectedRowKeys.length > 0) { | ||
233 | + disabled.value = false; | ||
234 | + } | ||
235 | + const isJudge = getSelectRows().map((m) => m.default); | ||
232 | if (isJudge.includes(true)) { | 236 | if (isJudge.includes(true)) { |
233 | disabled.value = true; | 237 | disabled.value = true; |
234 | } else { | 238 | } else { |
@@ -237,19 +241,18 @@ | @@ -237,19 +241,18 @@ | ||
237 | if (isJudge.length === 0) { | 241 | if (isJudge.length === 0) { |
238 | disabled.value = true; | 242 | disabled.value = true; |
239 | } | 243 | } |
240 | - selectedRowKeys.length = 0; | ||
241 | - selectedRowKeys = getRows.filter((f) => f.default !== true).map((m) => m.id); | ||
242 | }; | 244 | }; |
243 | const handleTableDel = () => { | 245 | const handleTableDel = () => { |
244 | deviceConfigDelete(selectedRowKeys) | 246 | deviceConfigDelete(selectedRowKeys) |
245 | - .then((res) => { | ||
246 | - createMessage.success('删除成功'); | ||
247 | - selectedRowKeys.length = 0; | 247 | + .then(() => { |
248 | + createMessage.success('删除设备配置成功'); | ||
248 | handleSuccess(); | 249 | handleSuccess(); |
250 | + selectedRowKeys.length = 0; | ||
249 | }) | 251 | }) |
250 | - .catch((e) => { | 252 | + .catch(() => { |
251 | selectedRowKeys.length = 0; | 253 | selectedRowKeys.length = 0; |
252 | }); | 254 | }); |
255 | + selectedRowKeys.length = 0; | ||
253 | }; | 256 | }; |
254 | 257 | ||
255 | function handleDelete(record: Recordable) { | 258 | function handleDelete(record: Recordable) { |
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | - <BasicTable @register="registerTable"> | 3 | + <BasicTable |
4 | + @selection-change="useSelectionChange" | ||
5 | + :rowSelection="{ type: 'checkbox' }" | ||
6 | + @register="registerTable" | ||
7 | + > | ||
4 | <template #toolbar> | 8 | <template #toolbar> |
5 | <a-button type="primary" @click="handleCreate"> 新增消息配置 </a-button> | 9 | <a-button type="primary" @click="handleCreate"> 新增消息配置 </a-button> |
6 | - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete"> | 10 | + <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="disabled"> |
7 | 批量删除 | 11 | 批量删除 |
8 | </a-button> | 12 | </a-button> |
9 | </template> | 13 | </template> |
@@ -36,8 +40,7 @@ | @@ -36,8 +40,7 @@ | ||
36 | </div> | 40 | </div> |
37 | </template> | 41 | </template> |
38 | <script lang="ts"> | 42 | <script lang="ts"> |
39 | - import { defineComponent, h } from 'vue'; | ||
40 | - | 43 | + import { defineComponent, h, ref } from 'vue'; |
41 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 44 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
42 | import { messageConfigPage, deleteMessageConfig } from '/@/api/message/config'; | 45 | import { messageConfigPage, deleteMessageConfig } from '/@/api/message/config'; |
43 | import { useDrawer } from '/@/components/Drawer'; | 46 | import { useDrawer } from '/@/components/Drawer'; |
@@ -45,17 +48,18 @@ | @@ -45,17 +48,18 @@ | ||
45 | import { columns, searchFormSchema } from './config.data'; | 48 | import { columns, searchFormSchema } from './config.data'; |
46 | import { Modal } from 'ant-design-vue'; | 49 | import { Modal } from 'ant-design-vue'; |
47 | import { JsonPreview } from '/@/components/CodeEditor'; | 50 | import { JsonPreview } from '/@/components/CodeEditor'; |
48 | - import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | 51 | + import { useMessage } from '/@/hooks/web/useMessage'; |
52 | + | ||
49 | export default defineComponent({ | 53 | export default defineComponent({ |
50 | name: 'MessageConfigManagement', | 54 | name: 'MessageConfigManagement', |
51 | components: { BasicTable, ConfigDrawer, TableAction }, | 55 | components: { BasicTable, ConfigDrawer, TableAction }, |
52 | setup() { | 56 | setup() { |
57 | + let selectedRowKeys: any = []; | ||
58 | + const disabled = ref(true); | ||
59 | + const { createMessage } = useMessage(); | ||
60 | + | ||
53 | const [registerDrawer, { openDrawer }] = useDrawer(); | 61 | const [registerDrawer, { openDrawer }] = useDrawer(); |
54 | - const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete( | ||
55 | - deleteMessageConfig, | ||
56 | - handleSuccess | ||
57 | - ); | ||
58 | - const [registerTable, { reload }] = useTable({ | 62 | + const [registerTable, { reload, getSelectRows, getSelectRowKeys }] = useTable({ |
59 | title: '消息配置列表', | 63 | title: '消息配置列表', |
60 | api: messageConfigPage, | 64 | api: messageConfigPage, |
61 | columns, | 65 | columns, |
@@ -64,6 +68,7 @@ | @@ -64,6 +68,7 @@ | ||
64 | schemas: searchFormSchema, | 68 | schemas: searchFormSchema, |
65 | }, | 69 | }, |
66 | useSearchForm: true, | 70 | useSearchForm: true, |
71 | + rowKey: 'id', | ||
67 | showTableSetting: true, | 72 | showTableSetting: true, |
68 | bordered: true, | 73 | bordered: true, |
69 | showIndexColumn: false, | 74 | showIndexColumn: false, |
@@ -74,7 +79,6 @@ | @@ -74,7 +79,6 @@ | ||
74 | slots: { customRender: 'action' }, | 79 | slots: { customRender: 'action' }, |
75 | fixed: 'right', | 80 | fixed: 'right', |
76 | }, | 81 | }, |
77 | - ...selectionOptions, | ||
78 | }); | 82 | }); |
79 | 83 | ||
80 | function handleCreate() { | 84 | function handleCreate() { |
@@ -100,6 +104,43 @@ | @@ -100,6 +104,43 @@ | ||
100 | content: h(JsonPreview, { data: JSON.parse(JSON.stringify(record.config)) }), | 104 | content: h(JsonPreview, { data: JSON.parse(JSON.stringify(record.config)) }), |
101 | }); | 105 | }); |
102 | } | 106 | } |
107 | + | ||
108 | + const useSelectionChange = () => { | ||
109 | + selectedRowKeys = getSelectRowKeys(); | ||
110 | + if (selectedRowKeys.length > 0) { | ||
111 | + disabled.value = false; | ||
112 | + } | ||
113 | + const isJudge = getSelectRows().map((m) => m.status); | ||
114 | + if (isJudge.includes(1)) { | ||
115 | + disabled.value = true; | ||
116 | + } else { | ||
117 | + disabled.value = false; | ||
118 | + } | ||
119 | + if (isJudge.length === 0) { | ||
120 | + disabled.value = true; | ||
121 | + } | ||
122 | + }; | ||
123 | + // 删除或批量删除 | ||
124 | + const handleDeleteOrBatchDelete = async (record: Recordable | null) => { | ||
125 | + if (record) { | ||
126 | + try { | ||
127 | + await deleteMessageConfig([record.id]); | ||
128 | + createMessage.success('删除成功'); | ||
129 | + handleSuccess(); | ||
130 | + } catch (e: any) {} | ||
131 | + } else { | ||
132 | + try { | ||
133 | + await deleteMessageConfig(selectedRowKeys); | ||
134 | + createMessage.success('批量删除成功'); | ||
135 | + handleSuccess(); | ||
136 | + selectedRowKeys.length = 0; | ||
137 | + } catch (e: any) { | ||
138 | + selectedRowKeys.length = 0; | ||
139 | + } finally { | ||
140 | + selectedRowKeys.length = 0; | ||
141 | + } | ||
142 | + } | ||
143 | + }; | ||
103 | return { | 144 | return { |
104 | registerTable, | 145 | registerTable, |
105 | registerDrawer, | 146 | registerDrawer, |
@@ -107,8 +148,9 @@ | @@ -107,8 +148,9 @@ | ||
107 | handleCreate, | 148 | handleCreate, |
108 | handleEdit, | 149 | handleEdit, |
109 | handleSuccess, | 150 | handleSuccess, |
110 | - hasBatchDelete, | 151 | + disabled, |
111 | handleDeleteOrBatchDelete, | 152 | handleDeleteOrBatchDelete, |
153 | + useSelectionChange, | ||
112 | }; | 154 | }; |
113 | }, | 155 | }, |
114 | }); | 156 | }); |
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | - <BasicTable @register="registerTable" v-show="isStatus === 0"> | 3 | + <BasicTable |
4 | + @selection-change="useSelectionChange" | ||
5 | + :rowSelection="{ type: 'checkbox' }" | ||
6 | + @register="registerTable" | ||
7 | + v-show="isStatus === 0" | ||
8 | + > | ||
4 | <template #toolbar> | 9 | <template #toolbar> |
5 | <a-button type="primary" @click="handleCreate"> 新增转换脚本 </a-button> | 10 | <a-button type="primary" @click="handleCreate"> 新增转换脚本 </a-button> |
6 | - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete"> | 11 | + <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="disabled"> |
7 | 批量删除 | 12 | 批量删除 |
8 | </a-button> | 13 | </a-button> |
9 | </template> | 14 | </template> |
@@ -43,20 +48,20 @@ | @@ -43,20 +48,20 @@ | ||
43 | <script lang="ts" setup> | 48 | <script lang="ts" setup> |
44 | import { ref } from 'vue'; | 49 | import { ref } from 'vue'; |
45 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 50 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
46 | - import { columns, searchFormSchema } from './config/config.data.ts'; | 51 | + import { columns, searchFormSchema } from './config/config.data'; |
47 | import { getConvertApi, deleteTransformApi } from '/@/api/device/TransformScriptApi'; | 52 | import { getConvertApi, deleteTransformApi } from '/@/api/device/TransformScriptApi'; |
48 | - import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | ||
49 | import { useDrawer } from '/@/components/Drawer/index'; | 53 | import { useDrawer } from '/@/components/Drawer/index'; |
50 | import ScriptDrawer from './cpns/ScriptDrawer.vue'; | 54 | import ScriptDrawer from './cpns/ScriptDrawer.vue'; |
51 | import TestScript from './cpns/TestScript.vue'; | 55 | import TestScript from './cpns/TestScript.vue'; |
56 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
57 | + | ||
52 | const handleSuccess = () => { | 58 | const handleSuccess = () => { |
53 | reload(); | 59 | reload(); |
54 | }; | 60 | }; |
55 | - const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete( | ||
56 | - deleteTransformApi, | ||
57 | - handleSuccess | ||
58 | - ); | ||
59 | - const [registerTable, { reload }] = useTable({ | 61 | + const { createMessage } = useMessage(); |
62 | + let selectedRowKeys: any = []; | ||
63 | + const disabled = ref(true); | ||
64 | + const [registerTable, { reload, getSelectRowKeys, getSelectRows }] = useTable({ | ||
60 | api: getConvertApi, | 65 | api: getConvertApi, |
61 | title: '转换脚本列表', | 66 | title: '转换脚本列表', |
62 | columns, | 67 | columns, |
@@ -68,6 +73,7 @@ | @@ -68,6 +73,7 @@ | ||
68 | labelWidth: 100, | 73 | labelWidth: 100, |
69 | schemas: searchFormSchema, | 74 | schemas: searchFormSchema, |
70 | }, | 75 | }, |
76 | + rowKey: 'id', | ||
71 | actionColumn: { | 77 | actionColumn: { |
72 | width: 180, | 78 | width: 180, |
73 | title: '操作', | 79 | title: '操作', |
@@ -75,9 +81,8 @@ | @@ -75,9 +81,8 @@ | ||
75 | slots: { customRender: 'action' }, | 81 | slots: { customRender: 'action' }, |
76 | fixed: 'right', | 82 | fixed: 'right', |
77 | }, | 83 | }, |
78 | - ...selectionOptions, | ||
79 | }); | 84 | }); |
80 | - const [registerDrawer, { openDrawer }] = useDrawer({}); | 85 | + const [registerDrawer, { openDrawer }] = useDrawer(); |
81 | 86 | ||
82 | const isStatus = ref(0); | 87 | const isStatus = ref(0); |
83 | const testScriptRef = ref(); | 88 | const testScriptRef = ref(); |
@@ -102,4 +107,39 @@ | @@ -102,4 +107,39 @@ | ||
102 | const handleEdit = (record: Recordable) => { | 107 | const handleEdit = (record: Recordable) => { |
103 | openDrawer(true, { isUpdate: true, record }); | 108 | openDrawer(true, { isUpdate: true, record }); |
104 | }; | 109 | }; |
110 | + const useSelectionChange = () => { | ||
111 | + selectedRowKeys = getSelectRowKeys(); | ||
112 | + if (selectedRowKeys.length > 0) { | ||
113 | + disabled.value = false; | ||
114 | + } | ||
115 | + let getRows = getSelectRows(); | ||
116 | + const isJudge = getRows.map((m) => m.status); | ||
117 | + if (isJudge.length === 0) { | ||
118 | + disabled.value = true; | ||
119 | + } | ||
120 | + if (isJudge.includes(1)) { | ||
121 | + disabled.value = true; | ||
122 | + } | ||
123 | + }; | ||
124 | + // 删除或批量删除 | ||
125 | + const handleDeleteOrBatchDelete = async (record: Recordable | null) => { | ||
126 | + if (record) { | ||
127 | + try { | ||
128 | + await deleteTransformApi([record.id]); | ||
129 | + createMessage.success('删除成功'); | ||
130 | + handleSuccess(); | ||
131 | + } catch (e: any) {} | ||
132 | + } else { | ||
133 | + try { | ||
134 | + await deleteTransformApi(selectedRowKeys); | ||
135 | + createMessage.success('批量删除成功'); | ||
136 | + handleSuccess(); | ||
137 | + selectedRowKeys.length = 0; | ||
138 | + } catch (e: any) { | ||
139 | + selectedRowKeys.length = 0; | ||
140 | + } finally { | ||
141 | + selectedRowKeys.length = 0; | ||
142 | + } | ||
143 | + } | ||
144 | + }; | ||
105 | </script> | 145 | </script> |