...
|
...
|
@@ -40,7 +40,18 @@ |
40
|
40
|
<div style="display: flex; flex-direction: row-reverse">
|
41
|
41
|
<n-space>
|
42
|
42
|
<n-button type="primary" @click="handleOpenThreeEditor"> 新增 </n-button>
|
43
|
|
- <!-- <n-button disabled> 批量操作 </n-button> -->
|
|
43
|
+ <n-button v-if="list.length" @click="handleSelectAll" type="info">
|
|
44
|
+ {{ selectAllTextFlag ? '全选' : '反选' }}
|
|
45
|
+ </n-button>
|
|
46
|
+ <n-dropdown
|
|
47
|
+ v-if="list.length"
|
|
48
|
+ :disabled="isBulkOperationFlag"
|
|
49
|
+ trigger="hover"
|
|
50
|
+ :options="operationOptions"
|
|
51
|
+ @select="handleOperationSelect"
|
|
52
|
+ >
|
|
53
|
+ <n-button :disabled="isBulkOperationFlag"> 批量操作 </n-button>
|
|
54
|
+ </n-dropdown>
|
44
|
55
|
</n-space>
|
45
|
56
|
</div>
|
46
|
57
|
<n-grid style="margin-top: 16px" :x-gap="20" :y-gap="20" cols="2 s:2 m:3 l:4 xl:4 xxl:4" responsive="screen">
|
...
|
...
|
@@ -48,6 +59,7 @@ |
48
|
59
|
<div style="display: none">{{ index }}</div>
|
49
|
60
|
<project-items-card
|
50
|
61
|
:cardData="item"
|
|
62
|
+ :operationKey="operationKey"
|
51
|
63
|
@resize="resizeHandle"
|
52
|
64
|
@delete="deleteHandle(item)"
|
53
|
65
|
@release="releaseHandle(item)"
|
...
|
...
|
@@ -89,6 +101,10 @@ import { ref } from 'vue' |
89
|
101
|
import type { FormInst } from 'naive-ui'
|
90
|
102
|
import { icon } from '@/plugins'
|
91
|
103
|
import { getUUID } from '@/utils/utils'
|
|
104
|
+import { threeJsDeleteApi, putReleaseThreeJsModel } from '@/api/external/contentSave/content'
|
|
105
|
+import { ChartType } from '../..'
|
|
106
|
+import { DialogEnum } from '@/enums/pluginEnum'
|
|
107
|
+import { goDialog } from '@/utils'
|
92
|
108
|
|
93
|
109
|
const { SearchIcon, ReloadSearch } = icon.ionicons5
|
94
|
110
|
|
...
|
...
|
@@ -114,6 +130,88 @@ const statusOptions = ref([ |
114
|
130
|
}
|
115
|
131
|
])
|
116
|
132
|
|
|
133
|
+const operationKey = ref('')
|
|
134
|
+
|
|
135
|
+const operationOptions = [
|
|
136
|
+ {
|
|
137
|
+ label: '批量删除',
|
|
138
|
+ key: 'Bulk delete'
|
|
139
|
+ },
|
|
140
|
+ {
|
|
141
|
+ label: '批量发布',
|
|
142
|
+ key: 'Bulk release'
|
|
143
|
+ },
|
|
144
|
+ {
|
|
145
|
+ label: '批量取消发布',
|
|
146
|
+ key: 'Bulk un release'
|
|
147
|
+ }
|
|
148
|
+]
|
|
149
|
+
|
|
150
|
+const resetSelect = (list: ChartType[], flag: boolean) => {
|
|
151
|
+ list.forEach(item => {
|
|
152
|
+ item.checkedValue = flag
|
|
153
|
+ })
|
|
154
|
+}
|
|
155
|
+
|
|
156
|
+const releaseGoDialog = (message: string, state: number, messageText: string) => {
|
|
157
|
+ goDialog({
|
|
158
|
+ type: DialogEnum.DELETE,
|
|
159
|
+ promise: true,
|
|
160
|
+ message,
|
|
161
|
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
162
|
+ onPositiveCallback: () => {},
|
|
163
|
+ promiseResCallback: async () => {
|
|
164
|
+ console.log(list.value)
|
|
165
|
+ // eslint-disable-next-line no-case-declarations
|
|
166
|
+ const bulkDeleteIds = list.value
|
|
167
|
+ ?.filter((item: ChartType) => item.checkedValue)
|
|
168
|
+ ?.map((item: ChartType) => item.id)
|
|
169
|
+ await putReleaseThreeJsModel(state, bulkDeleteIds as unknown as string[])
|
|
170
|
+ window['$message'].success(window['$t'](messageText))
|
|
171
|
+ handleSearchClick()
|
|
172
|
+ isBulkOperationFlag.value = true
|
|
173
|
+ selectAllTextFlag.value = false
|
|
174
|
+ operationKey.value = ''
|
|
175
|
+ resetSelect(list.value, false)
|
|
176
|
+ }
|
|
177
|
+ })
|
|
178
|
+}
|
|
179
|
+
|
|
180
|
+const handleOperationSelect = async (key: string) => {
|
|
181
|
+ operationKey.value = key
|
|
182
|
+ switch (key) {
|
|
183
|
+ case 'Bulk delete':
|
|
184
|
+ goDialog({
|
|
185
|
+ type: DialogEnum.DELETE,
|
|
186
|
+ promise: true,
|
|
187
|
+ message: '是否批量删除所选数据?',
|
|
188
|
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
189
|
+ onPositiveCallback: () => {},
|
|
190
|
+ promiseResCallback: async () => {
|
|
191
|
+ console.log(list.value)
|
|
192
|
+ // eslint-disable-next-line no-case-declarations
|
|
193
|
+ const bulkDeleteIds = list.value
|
|
194
|
+ ?.filter((item: ChartType) => item.checkedValue)
|
|
195
|
+ ?.map((item: ChartType) => item.id)
|
|
196
|
+ await threeJsDeleteApi([bulkDeleteIds] as unknown as string[])
|
|
197
|
+ window['$message'].success(window['$t']('common.deleteSuccessText'))
|
|
198
|
+ handleSearchClick()
|
|
199
|
+ isBulkOperationFlag.value = true
|
|
200
|
+ selectAllTextFlag.value = false
|
|
201
|
+ operationKey.value = ''
|
|
202
|
+ resetSelect(list.value, false)
|
|
203
|
+ }
|
|
204
|
+ })
|
|
205
|
+ break
|
|
206
|
+ case 'Bulk release':
|
|
207
|
+ releaseGoDialog('是否批量发布所选数据?', 1, 'common.releaseSuccessText')
|
|
208
|
+ break
|
|
209
|
+ case 'Bulk un release':
|
|
210
|
+ releaseGoDialog('是否批量取消发布所选数据?', 0, 'common.cancelReleaseSuccessText')
|
|
211
|
+ break
|
|
212
|
+ }
|
|
213
|
+}
|
|
214
|
+
|
117
|
215
|
const {
|
118
|
216
|
loading,
|
119
|
217
|
pagination,
|
...
|
...
|
@@ -126,6 +224,23 @@ const { |
126
|
224
|
handleSearchClick
|
127
|
225
|
} = useDataListInit(formValue.value)
|
128
|
226
|
|
|
227
|
+const isBulkOperationFlag = ref(true)
|
|
228
|
+
|
|
229
|
+const selectAllTextFlag = ref(true)
|
|
230
|
+
|
|
231
|
+const handleSelectAll = () => {
|
|
232
|
+ selectAllTextFlag.value = !selectAllTextFlag.value
|
|
233
|
+ if (!selectAllTextFlag.value) {
|
|
234
|
+ resetSelect(list.value, true)
|
|
235
|
+ isBulkOperationFlag.value = false
|
|
236
|
+ operationKey.value = 'Bulk delete'
|
|
237
|
+ } else {
|
|
238
|
+ resetSelect(list.value, false)
|
|
239
|
+ isBulkOperationFlag.value = true
|
|
240
|
+ operationKey.value = ''
|
|
241
|
+ }
|
|
242
|
+}
|
|
243
|
+
|
129
|
244
|
const handleResetClick = () => {
|
130
|
245
|
formValue.value.name = ''
|
131
|
246
|
formValue.value.state = null
|
...
|
...
|
@@ -151,7 +266,7 @@ $contentHeight: 250px; |
151
|
266
|
}
|
152
|
267
|
.list-pagination {
|
153
|
268
|
position: fixed;
|
154
|
|
- bottom: 30px;
|
|
269
|
+ bottom: 10px;
|
155
|
270
|
right: 30px;
|
156
|
271
|
}
|
157
|
272
|
}
|
...
|
...
|
|