提交 f8511edd 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

zentao site admin

上级 e407781b
......@@ -39,6 +39,10 @@ type Response struct {
type PageData struct {
Result interface{} `json:"result"`
Pagination Pagination `json:"pagination"`
}
type Pagination struct {
Total int `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
......@@ -46,7 +50,8 @@ type PageData struct {
func (d *PageData) Populate(result interface{}, total int64, page, pageSize int) {
d.Result = result
d.Total = int(total)
d.Page = page
d.PageSize = pageSize
d.Pagination.Total = int(total)
d.Pagination.Page = page
d.Pagination.PageSize = pageSize
}
......@@ -4,7 +4,7 @@ import "strings"
func AddSepIfNeeded(url string) (ret string) {
ret = url
if strings.LastIndex(ret, "/") != len(ret) {
if strings.LastIndex(ret, "/") != len(ret)-1 {
ret += "/"
}
return
......
......@@ -7,7 +7,7 @@
</div>
<div class="top-project-wrapper">
<right-top-project class="top-select-project"></right-top-project>
<RightTopProject class="top-select-project"></RightTopProject>
</div>
<div class="menu-wrapper">
......
<template>
<div ref="topMenuCon" class="top-menu" style="width: 100%">
<template v-for="(item, key) in menuData">
<a-link
<ALink
:key="key"
v-if="!item.hidden"
:to="item.path"
......@@ -10,23 +10,16 @@
class="top-menu-li"
>
{{t(item.title)}}
</a-link>
</ALink>
</template>
</div>
</template>
<script lang="ts">
import {computed, ComputedRef, defineComponent, onMounted, PropType, Ref, ref, watch} from "vue";
import {useRouter} from "vue-router";
import {useStore} from "vuex";
import IconSvg from "@/components/IconSvg/index";
import {ProjectData} from "@/store/project";
import ProjectCreateForm from "@/views/component/project/create.vue";
import {createProject} from "@/services/project";
import {hideMenu} from "@/utils/dom";
import {useI18n} from "vue-i18n";
import { DownOutlined } from '@ant-design/icons-vue';
import {RoutesDataItem} from "@/utils/routes";
import ALink from "@/components/ALink/index.vue";
interface RightTopMenuSetupData {
t: (key: string | number) => string;
......@@ -34,8 +27,10 @@ interface RightTopMenuSetupData {
}
export default defineComponent({
name: 'RightTopProject',
components: {},
name: 'RightTopMenu',
components: {
ALink
},
props: {
menuData: {
type: Array as PropType<RoutesDataItem[]>,
......
......@@ -100,7 +100,7 @@ const IndexLayoutRoutes: Array<RoutesDataItem> = [
},
{
icon: '',
icon: 'sync',
title: 'empty',
path: '/site',
redirect: '/site/list',
......
......@@ -4,5 +4,3 @@ declare module '*.vue' {
export default component
}
declare module '@ckeditor/ckeditor5-vue';
declare module '@ckeditor/ckeditor5-build-decoupled-document';
......@@ -4,7 +4,7 @@ export interface WsMsg {
}
export interface QueryResult {
data: any[];
result: any[];
pagination: PaginationConfig;
}
......@@ -17,7 +17,7 @@ export interface QueryParams {
export interface PaginationConfig {
total: number;
current: number;
page: number;
pageSize: number;
showSizeChanger: boolean;
showQuickJumper: boolean;
......
import moment from "moment";
import moment, {utc} from "moment";
export function momentTimeDef(tm) {
export function momentUtcDef(tm) {
return moment.utc(tm).format("YYYY-MM-DD HH:mm:ss")
}
export function momentUnixDef(tm) {
return moment.unix(tm).format("YYYY-MM-DD HH:mm:ss")
}
export function percentDef(numb, total) {
if (total == 0) return '0%'
return Number(numb / total * 100).toFixed(2) + '%'
......
......@@ -106,7 +106,7 @@ import {useStore} from "vuex";
import {Empty, Form, message, Modal} from "ant-design-vue";
import {StateType} from "../store";
import {useRouter} from "vue-router";
import {momentTimeDef, percentDef} from "@/utils/datetime";
import {momentUnixDef, percentDef} from "@/utils/datetime";
import {execByDef} from "@/utils/testing";
import {ProjectData} from "@/store/project";
import {hideMenu} from "@/utils/dom";
......@@ -153,7 +153,7 @@ export default defineComponent({
const currProject = computed<any>(() => projectStore.state.project.currProject);
const execBy = execByDef
const momentTime = momentTimeDef
const momentTime = momentUnixDef
const percent = percentDef
const columns = [
......
......@@ -138,7 +138,7 @@ import {computed, defineComponent, onMounted, ref, Ref} from "vue";
import {useStore} from 'vuex';
import {StateType as ListStateType} from "@/views/exec/store";
import {useRouter} from "vue-router";
import {momentTimeDef, percentDef} from "@/utils/datetime";
import {momentUnixDef, percentDef} from "@/utils/datetime";
import {execByDef, resultStatusDef, testEnvDef, testTypeDef} from "@/utils/testing";
import {submitResultToZentao, submitBugToZentao} from "@/views/exec/service";
import {notification} from "ant-design-vue";
......@@ -189,7 +189,7 @@ export default defineComponent({
const { t } = useI18n();
const execBy = execByDef
const momentTime = momentTimeDef
const momentTime = momentUnixDef
const percent = percentDef
const testEnv = testEnvDef
const testType = testTypeDef
......
......@@ -109,7 +109,7 @@ import {computed, defineComponent, onMounted, reactive, Ref, ref} from "vue";
import {useStore} from 'vuex';
import {StateType as ListStateType} from "@/views/exec/store";
import {useRouter} from "vue-router";
import {momentTimeDef, percentDef} from "@/utils/datetime";
import {momentUnixDef, percentDef} from "@/utils/datetime";
import {execByDef, resultStatusDef, testEnvDef, testTypeDef} from "@/utils/testing";
import {jsonStrDef} from "@/utils/dom";
import {notification} from "ant-design-vue";
......@@ -158,7 +158,7 @@ export default defineComponent({
const { t } = useI18n();
const execBy = execByDef
const momentTime = momentTimeDef
const momentTime = momentUnixDef
const percent = percentDef
const testEnv = testEnvDef
const testType = testTypeDef
......
......@@ -39,7 +39,6 @@ const useForm = Form.useForm;
import {useStore} from "vuex";
import {StateType} from "@/views/site/store";
import _ from "lodash";
interface SiteFormSetupData {
t: (key: string | number) => string;
......
......@@ -21,7 +21,7 @@
<div>
<a-table
row-key="seq"
row-key="id"
:columns="columns"
:data-source="models"
:loading="loading"
......@@ -36,38 +36,14 @@
},
}"
>
<template #seq="{ text }">
{{ text }}
</template>
<template #execBy="{ record }">
{{ execBy(record) }}
</template>
<template #startTime="{ record }">
<span v-if="record.startTime">{{ momentTime(record.startTime) }}</span>
</template>
<template #duration="{ record }">
{{ record.duration }}
</template>
<template #result="{ record }">
<span class="t-pass t-status">
{{ record.pass }}&nbsp;
<icon-svg type="pass"></icon-svg>&nbsp;
({{ percent(record.pass, record.total) }})
</span>
<span class="t-fail t-status">
{{ record.fail }}&nbsp;
<icon-svg type="fail"></icon-svg>&nbsp;
({{ percent(record.fail, record.total) }})
</span>
<span class="t-skip t-status">
{{ record.skip }}&nbsp;
<icon-svg type="skip"></icon-svg>&nbsp;
({{ percent(record.skip, record.total) }})
</span>
<template #createdAt="{ record }">
<span v-if="record.createdAt">{{ momentUtc(record.createdAt) }}</span>
</template>
<template #action="{ record }">
<a-button @click="() => viewResult(record)" type="link" size="small">{{ t('view') }}</a-button>
<a-button @click="() => deleteExec(record)" type="link" size="small"
<a-button @click="() => edit(record.id)" type="link" size="small">{{ t('view') }}</a-button>
<a-button @click="() => record(record)" type="link" size="small"
:loading="removeLoading.includes(record.seq)">{{ t('delete') }}
</a-button>
</template>
......@@ -85,9 +61,8 @@ import {useStore} from "vuex";
import {Empty, Form, message, Modal} from "ant-design-vue";
import {StateType} from "./store";
import {useRouter} from "vue-router";
import {momentTimeDef} from "@/utils/datetime";
import {momentUtcDef} from "@/utils/datetime";
import {useI18n} from "vue-i18n";
import IconSvg from "@/components/IconSvg/index";
import {PaginationConfig, QueryParams} from "@/types/data";
import debounce from "lodash.debounce";
......@@ -110,18 +85,17 @@ interface SiteListSetupData {
remove: (item) => void;
onSearch: () => void;
momentTime: (tm) => string;
momentUtc: (tm) => string;
simpleImage: any
}
export default defineComponent({
name: 'SiteListPage',
components: {
IconSvg,
},
setup(): SiteListSetupData {
const {t} = useI18n();
const momentTime = momentTimeDef
const momentUtc = momentUtcDef
const onSearch = debounce(() => {
getList(1)
......@@ -134,7 +108,10 @@ export default defineComponent({
const columns = [
{
title: t('no'),
dataIndex: 'seq',
dataIndex: 'index',
width: 80,
customRender: ({text, index}: { text: any; index: number }) =>
(pagination.value.page - 1) * pagination.value.pageSize + index + 1,
},
{
title: t('name'),
......@@ -150,8 +127,8 @@ export default defineComponent({
},
{
title: t('create_time'),
dataIndex: 'createTime',
slots: {customRender: 'createTime'},
dataIndex: 'createdAt',
slots: {customRender: 'createdAt'},
},
{
title: t('opt'),
......@@ -177,27 +154,26 @@ export default defineComponent({
const router = useRouter();
const store = useStore<{ Site: StateType }>();
const models = computed<any[]>(() => store.state.Site.queryResult.data);
const models = computed<any[]>(() => store.state.Site.queryResult.result);
const pagination = computed<PaginationConfig>(() => store.state.Site.queryResult.pagination);
const queryParams = ref<QueryParams>({
keywords: '', enabled: '1',
page: pagination.value.current, pageSize: pagination.value.pageSize
keywords: '', enabled: '1', page: pagination.value.page, pageSize: pagination.value.pageSize
});
const loading = ref<boolean>(true);
const getList = (current: number) => {
const getList = (page: number) => {
loading.value = true;
store.dispatch('Site/list', {
keywords: queryParams.value.keywords,
enabled: queryParams.value.enabled,
pageSize: pagination.value.pageSize,
page: current});
page: page});
loading.value = false;
}
getList(1);
onMounted(() => {
console.log('onMounted')
getList(1);
})
const edit = (id) => {
......@@ -216,7 +192,7 @@ export default defineComponent({
const res: boolean = await store.dispatch('History/delete', item.seq);
if (res === true) {
message.success(t('delete_success'));
await getList(pagination.value.current);
await getList(pagination.value.page);
}
removeLoading.value = [];
}
......@@ -239,7 +215,7 @@ export default defineComponent({
remove,
onSearch,
momentTime,
momentUtc,
simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
}
}
......
......@@ -26,10 +26,10 @@ export interface ModuleType extends StoreModuleType<StateType> {
}
const initState: StateType = {
queryResult: {
data: [],
result: [],
pagination: {
total: 0,
current: 1,
page: 1,
pageSize: 10,
showSizeChanger: true,
showQuickJumper: true,
......@@ -56,9 +56,12 @@ const StoreModel: ModuleType = {
async list({ commit }, params: QueryParams ) {
try {
const response: ResponseData = await list(params);
if (response.code != 0) return;
if (response.code != 0) {
return;
}
const data = response.data;
commit('setQueryResult', data);
console.log('sdfdsf', data)
return true;
} catch (error) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册