Browse Source

Merge pull request #359 from 1010309281/features/supportgidsearch

Features/supportgidsearch
pull/360/head
yedf2 4 years ago
committed by GitHub
parent
commit
796f01727b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      admin/src/api/api_dtm.ts
  2. 5
      admin/src/components.d.ts
  3. 210
      admin/src/views/Dashboard/GlobalTransactions/AllTransactions.vue
  4. 12
      dtmsvr/api_http.go

5
admin/src/api/api_dtm.ts

@ -1,7 +1,8 @@
import { AxiosResponse } from 'axios'
import {AxiosResponse} from 'axios'
import request from '/@/utils/request'
export interface IListAllTransactionsReq {
gid?: string,
limit: number
position?: string
}
@ -18,7 +19,7 @@ export function forceStopTransaction(gid: string): Promise<AxiosResponse> {
return request({
url: '/api/dtmsvr/forceStop',
method: 'post',
data: { gid },
data: {gid},
})
}

5
admin/src/components.d.ts

@ -9,6 +9,10 @@ declare module '@vue/runtime-core' {
ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb']
ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem']
AButton: typeof import('ant-design-vue/es')['Button']
ADivider: typeof import('ant-design-vue/es')['Divider']
AForm: typeof import('ant-design-vue/es')['Form']
AFormItem: typeof import('ant-design-vue/es')['FormItem']
AInput: typeof import('ant-design-vue/es')['Input']
ALayout: typeof import('ant-design-vue/es')['Layout']
ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
@ -16,6 +20,7 @@ declare module '@vue/runtime-core' {
AMenu: typeof import('ant-design-vue/es')['Menu']
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
AModal: typeof import('ant-design-vue/es')['Modal']
ASpace: typeof import('ant-design-vue/es')['Space']
ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
ATable: typeof import('ant-design-vue/es')['Table']
ATag: typeof import('ant-design-vue/es')['Tag']

210
admin/src/views/Dashboard/GlobalTransactions/AllTransactions.vue

@ -1,142 +1,178 @@
<template>
<div>
<a-table :columns="columns" :data-source="dataSource" :loading="loading" :pagination="false">
<template #bodyCell="{column, record}">
<template v-if="column.key === 'status'">
<div>
<a-form
layout="inline"
:model="{}"
@finish="searchFinish"
>
<a-form-item>
<a-input v-model:value="gid" placeholder="gid">
</a-input>
</a-form-item>
<a-form-item>
<a-button
type="primary"
html-type="submit">
搜索
</a-button>
</a-form-item>
</a-form>
</div>
<a-divider />
<div>
<a-table :columns="columns" :data-source="dataSource" :loading="loading" :pagination="false">
<template #bodyCell="{column, record}">
<template v-if="column.key === 'status'">
<span>
<a-tag :key="record.status" :color="record.status === 'succeed' ? 'green' : 'volcano'">{{ record.status }}</a-tag>
<a-tag :key="record.status"
:color="record.status === 'succeed' ? 'green' : 'volcano'">{{ record.status }}</a-tag>
</span>
</template>
<template v-else-if="column.key === 'action'">
</template>
<template v-else-if="column.key === 'action'">
<span>
<a class="mr-2 font-medium" @click="handleTransactionDetail(record.gid)">Detail</a>
<a-button danger type="link" :disabled="record.status==='failed' || record.status==='succeed'" @click="handleTransactionStop(record.gid)">ForceStop</a-button>
<!-- <a class="text-red-400 font-medium" @click="handleTransactionStop(record.gid)">ForceStop</a> -->
<a-button danger type="link" :disabled="record.status==='failed' || record.status==='succeed'"
@click="handleTransactionStop(record.gid)">ForceStop</a-button>
<!-- <a class="text-red-400 font-medium" @click="handleTransactionStop(record.gid)">ForceStop</a> -->
</span>
</template>
</template>
</a-table>
<div class="flex justify-center mt-2 text-lg pager" v-if="canPrev || canNext">
<a-button type="text" :disabled="!canPrev" @click="handlePrevPage">Previous</a-button>
<a-button type="text" :disabled="!canNext" @click="handleNextPage">Next</a-button>
</div>
<DialogTransactionDetail ref="transactionDetail" />
</template>
</template>
</a-table>
<div class="flex justify-center mt-2 text-lg pager" v-if="canPrev || canNext">
<a-button type="text" :disabled="!canPrev" @click="handlePrevPage">Previous</a-button>
<a-button type="text" :disabled="!canNext" @click="handleNextPage">Next</a-button>
</div>
<DialogTransactionDetail ref="transactionDetail"/>
</div>
</template>
<script setup lang="ts">
import { IListAllTransactionsReq, listAllTransactions, forceStopTransaction } from '/@/api/api_dtm'
import { ref, computed } from 'vue-demi'
import { usePagination } from 'vue-request'
import {forceStopTransaction, IListAllTransactionsReq, listAllTransactions} from '/@/api/api_dtm'
import {computed, ref} from 'vue-demi'
import {usePagination} from 'vue-request'
import DialogTransactionDetail from './_Components/DialogTransactionDetail.vue';
const gid = ref("")
const searchFinish = function () {
curPage.value = 1;
const params = {
gid: gid.value,
limit: pageSize.value,
}
run(params)
}
const columns = [
{
title: 'GID',
dataIndex: 'gid',
key: 'gid'
}, {
title: 'TransType',
dataIndex: 'trans_type',
key: 'trans_type'
}, {
title: 'Status',
dataIndex: 'status',
key: 'status'
}, {
title: 'Protocol',
dataIndex: 'protocol',
key: 'protocol'
}, {
title: 'CreateTime',
dataIndex: 'create_time',
key: 'create_time'
}, {
title: 'Action',
key: 'action'
}
{
title: 'GID',
dataIndex: 'gid',
key: 'gid'
}, {
title: 'TransType',
dataIndex: 'trans_type',
key: 'trans_type'
}, {
title: 'Status',
dataIndex: 'status',
key: 'status'
}, {
title: 'Protocol',
dataIndex: 'protocol',
key: 'protocol'
}, {
title: 'CreateTime',
dataIndex: 'create_time',
key: 'create_time'
}, {
title: 'Action',
key: 'action'
}
]
const pages = ref([''])
const curPage = ref(1)
const canPrev = computed(() => {
return curPage.value > 1
return curPage.value > 1
})
const canNext = computed(() => {
return data.value?.data.next_position !== ""
return data.value?.data.next_position !== ""
})
type Data = {
transactions: {
gid: string
trans_type: string
status: string
protocol: string
create_time: string
}[]
next_position: string
transactions: {
gid: string
trans_type: string
status: string
protocol: string
create_time: string
}[]
next_position: string
}
const queryData = (params: IListAllTransactionsReq) => {
return listAllTransactions<Data>(params)
return listAllTransactions<Data>(params)
}
const { data, run, current, loading, pageSize } = usePagination(queryData, {
defaultParams: [
{
limit: 10,
}
],
pagination: {
pageSizeKey: 'limit'
const {data, run, current, loading, pageSize} = usePagination(queryData, {
defaultParams: [
{
limit: 10,
}
],
pagination: {
pageSizeKey: 'limit'
}
})
const dataSource = computed(() => data.value?.data.transactions || [])
const handlePrevPage = () => {
curPage.value -= 1;
const params = {
limit: pageSize.value,
position: pages.value[curPage.value] as string
}
run(params)
curPage.value -= 1;
const params = {
limit: pageSize.value,
position: pages.value[curPage.value] as string
}
run(params)
}
const handleNextPage = () => {
curPage.value += 1;
pages.value[curPage.value] = data.value?.data.next_position as string
curPage.value += 1;
pages.value[curPage.value] = data.value?.data.next_position as string
run({
position: data.value?.data.next_position,
limit: pageSize.value,
})
run({
position: data.value?.data.next_position,
limit: pageSize.value,
})
}
const transactionDetail = ref<null | {open:(gid: string) => null}>(null)
const transactionDetail = ref<null | { open: (gid: string) => null }>(null)
const handleTransactionDetail = (gid: string) => {
transactionDetail.value?.open(gid)
transactionDetail.value?.open(gid)
}
const handleTransactionStop = async (gid: string) => {
await forceStopTransaction(gid)
run({
position: data.value?.data.next_position,
limit: pageSize.value,
})
await forceStopTransaction(gid)
run({
position: data.value?.data.next_position,
limit: pageSize.value,
})
}
</script>
<style lang="postcss" scoped>
::v-deep .ant-pagination-item {
display: none;
display: none;
}
.pager .ant-btn-text {
font-weight: 500;
}1
font-weight: 500;
}
.pager .ant-btn {
padding: 6px;
padding: 6px;
}
</style>

12
dtmsvr/api_http.go

@ -95,9 +95,19 @@ func prepareWorkflow(c *gin.Context) interface{} {
}
func all(c *gin.Context) interface{} {
gid := c.Query("gid")
position := c.Query("position")
sLimit := dtmimp.OrString(c.Query("limit"), "100")
globals := GetStore().ScanTransGlobalStores(&position, int64(dtmimp.MustAtoi(sLimit)))
var globals interface{}
if len(gid) > 0 {
find := GetStore().FindTransGlobalStore(gid)
if find != nil {
globals = []interface{}{*find}
}
} else {
globals = GetStore().ScanTransGlobalStores(&position, int64(dtmimp.MustAtoi(sLimit)))
}
return map[string]interface{}{"transactions": globals, "next_position": position}
}

Loading…
Cancel
Save