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> |