|
|
@@ -22,7 +22,7 @@
|
|
|
<ElButton :icon="Search" @click="table.refresh(true)" />
|
|
|
</template>
|
|
|
</ElInput>
|
|
|
- <ElButton :icon="ClearAll" @click="exportDialog">清理图片</ElButton>
|
|
|
+ <ElButton :icon="ClearAll" @click="exportDialog" v-if="onlyAdmin">清理图片</ElButton>
|
|
|
<ElButton :icon="Refresh" @click="table.refresh(true)" circle />
|
|
|
</template>
|
|
|
<ElTableColumn prop="id" label="#" width="80" />
|
|
|
@@ -71,16 +71,23 @@
|
|
|
<div v-if="row.detail" class="detail-content">
|
|
|
<div class="detail-item">
|
|
|
<div class="detail-left">
|
|
|
- <div v-for="(value, key) in JSON.parse(row.detail)" :key="key" class="detail-row">
|
|
|
- <strong class="detail-key">{{ key }}</strong>
|
|
|
- <span
|
|
|
- class="detail-address"
|
|
|
- @click="copyText(value.address)"
|
|
|
- :title="'点击复制地址: ' + value.address"
|
|
|
- >{{ value.address }}</span
|
|
|
- >
|
|
|
- <span class="detail-balance">{{ value.balance }}</span>
|
|
|
- </div>
|
|
|
+ <template v-if="isValidJson(row.detail)">
|
|
|
+ <div v-for="(value, key) in JSON.parse(row.detail)" :key="key" class="detail-row">
|
|
|
+ <strong class="detail-key">{{ key.toUpperCase() }}</strong>
|
|
|
+ <span
|
|
|
+ class="detail-address"
|
|
|
+ @click="copyText(value.address)"
|
|
|
+ :title="'点击复制地址: ' + value.address"
|
|
|
+ >{{ value.address }}</span
|
|
|
+ >
|
|
|
+ <span class="detail-balance">{{ value.balance }}</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <div class="detail-row">
|
|
|
+ <span class="text-red-500">数据格式错误</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
<div class="detail-right">
|
|
|
<ElButton
|
|
|
@@ -213,6 +220,7 @@ const model = ref({})
|
|
|
const { showEditDialog } = setupEditDialog(model)
|
|
|
const { copy } = useClipboard({ legacy: true })
|
|
|
const isAdmin = inject('isAdminAndOperator')
|
|
|
+const onlyAdmin = inject('isAdmin')
|
|
|
|
|
|
const showExportDialog = ref(false)
|
|
|
const dateValue = ref('')
|
|
|
@@ -499,6 +507,17 @@ function scrollToSelected() {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+function isValidJson(str) {
|
|
|
+ if (!str) return false
|
|
|
+ try {
|
|
|
+ const obj = JSON.parse(str)
|
|
|
+ return typeof obj === 'object' && obj !== null
|
|
|
+ } catch (e) {
|
|
|
+ console.error('JSON解析错误:', e)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
@@ -550,7 +569,7 @@ function scrollToSelected() {
|
|
|
color: white;
|
|
|
font-size: 12px;
|
|
|
white-space: nowrap;
|
|
|
- width: 45px;
|
|
|
+ width: 55px;
|
|
|
text-align: center;
|
|
|
display: inline-block;
|
|
|
}
|