-
vue modal props codevue 2023. 2. 8. 15:05
DataValidationPage.vue
<template> <a-card title="Non Data Validation"> <!-- <a-row :gutter="{ lg: 15, md: [15, 15] }" type="flex" align="bottom"> --> <a-row :gutter="[15, 15]" type="flex" align="bottom"> <a-col :lg="4" :md="24" :sm="24" :xs="24"> <ProjectSelect :projectId.sync="projectId" /> </a-col> <a-col :lg="4" :md="24" :sm="24" :xs="24"> <SubProjectSelect :projectId="projectId" :subProjectId.sync="subProjectId" /> </a-col> <a-col :lg="4" :md="24" :sm="24" :xs="24"> <VersionSelect :projectId="projectId" :subProjectId="subProjectId" :versionId.sync="versionId" /> </a-col> <a-col :lg="4" :md="24" :sm="24" :xs="24"> <SessionSelect :projectId="projectId" :subProjectId="subProjectId" :versionId="versionId" :sessionId.sync="sessionId" /> </a-col> </a-row> <a-divider /> <a-spin :spinning="isLoading" tip="Loading..."> <table align="right"> <tr> <a-icon type="upload" style=" font-synthesis: weight; spin: true; background-color: #ffffff; color: #f44336; font-size: 19px; margin-right: 5px; " /> <th>Last_registered_time</th> <td style="margin-left: 20px; padding-left: 10px"> {{ recentUpdateatime }} </td> </tr> </table> <a-row> <a-col :xl="24" :lg="24" :md="24" :sm="0" :xs="0"> <a-table :columns="validationDataListConfig" :dataSource="validationListData.validateLists" @change="onChangeClipPage" :pagination="pagination" rowKey="id" > <span slot="ID"> <a-icon type="inbox" class="mr-1" /> ID</span> <span slot="Name"> <a-icon type="tags" class="mr-1" /> Name</span> <span slot="Time"> <a-icon type="clock-circle" class="mr-1" /> Time</span > <span slot="start_time" slot-scope="text, record"> <template v-if="record.start_time.split('/')[1] == 'NaN'"> <div style="color: #bebebe">can not get Start Time</div> </template> <template v-else ><div>{{ record.start_time }}</div></template > </span> <span slot="end_time" slot-scope="text, record"> <template v-if="record.end_time.split('/')[1] == 'NaN'"> <div style="color: #bebebe">can not get End Time</div> </template> <template v-else ><div>{{ record.end_time }}</div></template > </span> <span slot="uploaded" slot-scope="text, record"> <template v-if="record.uploaded == 'true'"> โ </template> <template v-else ><div><b>๐จ fail</b></div></template > </span> </a-table> </a-col> <a-col :xl="0" :lg="0" :md="0"> <a-table :columns="validationDataListConfigSimple" :dataSource="validationListData.validateLists" @change="onChangeClipPage" :pagination="pagination" rowKey="id" > <span slot="ID"> <a-icon type="inbox" class="mr-1" /> ID</span> <span slot="Time"> <a-icon type="clock-circle" class="mr-1" /> Time</span > <span slot="uploaded" slot-scope="text, record"> <template v-if="record.uploaded == 'true'"> โ </template> <template v-else ><div><b>๐จ fail</b></div></template > </span> <!-- <span slot="validate_result" slot-scope="text, record"> <template v-if="record.validate_result == 'ERROR_OK'"> <div style="color: #288c28; font-weight: bold"><a-icon type="check" class="mr-1" />OK</div> </template> <template v-else ><div style="color: red; font-weight: bold">{{ record.validate_result }}</div></template > </span> --> </a-table> </a-col> </a-row> </a-spin> </a-card> </template> <script lang="ts"> import { Component, Vue, Watch } from "vue-property-decorator"; import { viewService } from "@/service/api/ViewService"; import ClipListDataModel from "@/service/model/data/clipList/ClipListDataModel"; import MetaInfoDataModel from "@/service/model/eventReview/MetaInfoDataModel"; import { RouterMenuName } from "@/enum/RouterMenuName"; import { RawLocation } from "vue-router"; import Base from "@/Base"; import { InjectModule } from "@/decorators/InjectModule"; import ReviewData from "@/store/module/ReviewData"; import PageInfo from "@/store/module/PageInfo"; import { delCookie, getCookie } from "@/util/CookieUtil"; import { CookieType } from "@/enum/CookieType"; import RouteParamsData from "@/store/module/RouteParamsData"; import EventReviewRouteParamsModel from "@/service/model/common/EventReviewRouteParamsModel"; import CliplistFilterInfoData from "@/store/module/CliplistFilterInfoData"; import { defaultErrorMsg } from "@/util/Utils"; import { loggerService } from "@/service/api/LoggerService"; import { GRAPH_BAR, GRAPH_PIE, MANEUVER_TYPE } from "@/const/ChartConstant"; import { searchService } from "@/service/api/SearchService"; import ProjectSelect from "@/components/common/select/ProjectSelect.vue"; import { ClipListMode } from "@/enum/ClipListMode"; import { epochToKSTms } from "@/util/Utils"; import { printTimestampPretty } from "@/util/Utils"; import { component } from "vue/types/umd"; import { columns } from "@/components/configuration/workerConfiguration/BrokerProperty.vue"; const validationDataListConfig = [ { slots: { title: "ID" }, dataIndex: "id", align: "center", }, { slots: { title: "Name" }, dataIndex: "name", align: "center", }, { slots: { title: "Time" }, dataIndex: "time", align: "center", }, { title: "๐ Start Time", scopedSlots: { customRender: "start_time" }, /* eslint-disable @typescript-eslint/camelcase */ dataIndex: "start_time", align: "center", }, { /* eslint-disable @typescript-eslint/camelcase */ title: "๐ End Time", scopedSlots: { customRender: "end_time" }, dataIndex: "end_time", align: "center", }, { title: "โ Uploaded", slots: { title: "Uploaded" }, dataIndex: "uploaded", scopedSlots: { customRender: "uploaded" }, align: "center", }, ]; const validationDataListConfigSimple = [ { slots: { title: "ID" }, dataIndex: "id", align: "center", }, { slots: { title: "Time" }, dataIndex: "time", align: "center", }, { title: "โ Uploaded", slots: { title: "Uploaded" }, dataIndex: "uploaded", scopedSlots: { customRender: "uploaded" }, align: "center", }, ]; const LAST_TIME_DEFAULT_STRING = "No files uploaded"; @Component({ // data: () => ({ // svgPath: FileSearchOutline.name, // }), components: { FileSearchOutline, ErrorModal: () => import("/ErrorModal.vue"), }, }) export default class DataValidationPage extends Base { @InjectModule(PageInfo) private pageInfo$!: PageInfo; @InjectModule(RouteParamsData) private routeParamsData$!: RouteParamsData; @InjectModule(CliplistFilterInfoData) private cliplistFilterInfoData$!: CliplistFilterInfoData; @InjectModule(ReviewData) private reviewData$!: ReviewData; private searchText = ""; private isClear = false; private clipId = ""; private startIndex = 1; private numberOfItems = 10; private maxNumberOfItmes = 0; private dataUrl = ""; private metaInfo = new MetaInfoDataModel(); private isLoading = false; private clipListData: ClipListData = new ClipListDataModel(); private validationListData: DataValidataionListData = { totalNumberOfValidateList: 0, validateLists: [], }; private validationDataListConfig = validationDataListConfig; private validationDataListConfigSimple = validationDataListConfigSimple; private isAndCondition = true; private eventReviewOptions!: EventReviewRouteOptions; private isSearchMode = false; private recentUpdateatime = LAST_TIME_DEFAULT_STRING; // private dataValidationDataContainResultListData: DataValidationDataContainResultListData = { // totalNumberOfValidations: 0, // dataValidationDataContainResultList: [] // } @Watch("isAndCondition") private watchIsAndCondition(): void { this.cliplistFilterInfoData$.setIsAndCondition(this.isAndCondition); } @Watch("projectId") private projectIdWatch(): void { if (this.reviewData$.clipListMode != ClipListMode.SEARCH) { this.subProjectId = "-1"; } } @Watch("subProjectId") private subProjectIdWatch(): void { if (this.reviewData$.clipListMode != ClipListMode.SEARCH) { this.versionId = "-1"; } this.onClickClearFilter(); delCookie(CookieType.EVENT_REVIEW_SIGNAL_MODAL); } @Watch("versionId") private versionIdWatch(): void { this.sessionId = "-1"; this.recentUpdateatime = LAST_TIME_DEFAULT_STRING; this.onClickClearFilter(); if (this.versionId === "-1") { this.clipListData = new ClipListDataModel(); } else { this.getValidationListData(); } } @Watch("sessionId") private sessionIdWatch(sessionId: string): void { this.metaInfo = { id: "-1", value: "-1", clipType: "-", distinctId: "-1" }; this.pageInfo$.setPage(1); if (sessionId == "-1") { this.clipListData.totalNumberOfClips = 0; this.clipListData.clips = []; } this.getValidationListData(); } private mounted(): void { this.isAndCondition = this.cliplistFilterInfoData$.isAndCondition; this.init(); this.isLoading = true; const mode = this.reviewData$.clipListMode; //dashboard์์ ์ ํํด์์จ ๊ฒฝ์ฐ maneuver ํํฐ๋ก ์ ํ๋ ํ ํด๋น ํ์ด์ง ์ด๋ // if(mode == ClipListMode.PIECHART || mode == ClipListMode.BARCHART) { // this.getValidationListData(); // }else if (mode == ClipListMode.SEARCH) { // this.getValidationListData(); // } this.getValidationListData(); } private getValidationListData(): void { this.isLoading = true; viewService .retrieveValidataionListData( this.projectId, this.subProjectId, this.versionId, this.sessionId, this.startIndex, this.numberOfItems ) .subscribe( (dataValidataionListData: DataValidataionListData) => { this.isLoading = false; this.maxNumberOfItmes = dataValidataionListData.totalNumberOfValidateList; dataValidataionListData.validateLists = dataValidataionListData.validateLists.map( (validateListsArr: any, index: number) => { if (index == 0) { this.recentUpdateatime = epochToKSTms( "" + validateListsArr.time ); } // if (validateListsArr.validate_result != "ERROR_OK") { // var div = document.querySelector("#tableid"); // } return { ...validateListsArr, uploaded: String(validateListsArr.uploaded), time: epochToKSTms("" + validateListsArr.time), /* eslint-disable @typescript-eslint/camelcase */ start_time: epochToKSTms("" + validateListsArr.startTime), /* eslint-disable @typescript-eslint/camelcase */ end_time: epochToKSTms("" + validateListsArr.endTime), }; } ); this.validationListData = dataValidataionListData; this.validationListData.validateLists = dataValidataionListData.validateLists.map((v) => { return { ...v }; }); }, (error: any) => { this.isLoading = false; loggerService.sendErrorLog("getValidationListData", error); this.$message.error(defaultErrorMsg(error)); } ); this.isLoading = false; } private onChangeClipPage(page: AntPagination): void { this.startIndex = page.current; //this.pageInfo$.setPage(page.current); this.getValidationListData(); } private get pagination(): boolean | object { return this.validationListData.validateLists.length === 0 ? false : { //total: this.dataValidationDataContainResultListData.totalNumberOfValidations, total: this.maxNumberOfItmes, // current: this.$store.state.pageInfo.curPage, current: this.startIndex, showSizeChanger: false, }; } private onClickClearFilter(): void { this.metaInfo = new MetaInfoDataModel(); this.cliplistFilterInfoData$.setClear(); this.getValidationListData(); this.isClear = true; } private init(): void { this.validationListData = { totalNumberOfValidateList: 0, validateLists: [], }; const before = getCookie(CookieType.REFERER_PAGE); const after = getCookie(CookieType.CURRENT_PAGE); if ( before != RouterMenuName.ClipEventReview || after != RouterMenuName.ClipList ) { if (this.$store.state.pageInfo.curPage != 1) { this.pageInfo$.setPage(1); } } if (after == RouterMenuName.ClipList) { if (this.cliplistFilterInfoData$.metaInfo) { this.metaInfo = this.cliplistFilterInfoData$.metaInfo; } this.getValidationListData(); } } } </script>
ErrorModal.vue
<template> <a-modal title="Error description" v-model="syncVisible" @ok="handleOk()"> <template v-if="validateErrorMsg == 'L0_E02'"> <h4>{{ validateErrorMsg }}</h4> <p>Correct logger’s folder structure ํ์ํจ.</p> </template> <template v-else-if="validateErrorMsg == ('L0_E11' || 'L0_E22')"> <h4>{{ validateErrorMsg }}</h4> <p>validation ๋ถ๊ฐ๋ฅ</p> </template> <template v-else-if="validateErrorMsg == ('L0_E5' || 'L0_E07')"> <h4>{{ validateErrorMsg }}</h4> <p>meta.json ํ์ผ๊ด๋ จ ์ค๋ฅ</p> <p> drive duration/distance์ ๋ํ MIN_VALUE๋ฅผ ์๋ก ์์ฒญํด์ผ ํจ. (์ ๊ณต ๋ฐ์ MIN_VALUE๋ ํด๋์ ์๋ ์ ์ฒด ์ฃผํ ํฉ๊ณ์ ๋ํ Threshold์) </p> </template> <template v-else-if="validateErrorMsg == 'L2_SIGNAL_E07'"> <h4>{{ validateErrorMsg }} Timestamp Jump</h4> <p> ๋ฉ์์ง ๋ง๋ค timestamp ๊ฐ๊ฒฉ์ด time_delta ๋ณด๋ค ํฐ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋์ง ์ฒดํฌํ๋ validation. </p> <p>message ๋ณ time_delta ํ์ํจ</p> </template> <template v-else-if="validateErrorMsg == 'L2_SIGNAL_E04'"> <h4>{{ validateErrorMsg }} (Signal frozen)</h4> <p>signal value์ ๋ณํ๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋์ง ์ฒดํฌํ๋ validation</p> <p> signal์ด ์๋ message ๋จ์๋ก frozen์ checkํ๋ค๋ฉด message์ list๊ฐ ํ์ </p> </template> <template v-else-if="validateErrorMsg == 'L2_SIGNAL_E08'"> <h4>{{ validateErrorMsg }} (Signal Jump)</h4> <p> Signal value๊ฐ ํน์ ์๊ฐ๋์ ๋๋ฌด ํฌ๊ฒ ๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋์ง ์ฒดํฌํ๋ validation </p> <p>signal๋ณ time_delta, value_delta ๊ฐ ํ์</p> </template> <template v-else> <h4>{{ validateErrorMsg }}</h4> <p>Error List์ ์๋ ์๋ฌ์ ๋๋ค.</p> </template> </a-modal> </template> <script lang="ts"> import { Component, Prop, PropSync, Vue } from "vue-property-decorator"; @Component export default class TeamEdit extends Vue { @PropSync("errorModalVisible") private syncVisible!: boolean; @Prop() private validateErrorMsg!: any; // @Emit("Submit") // private onClickSubmit(): void { // //console.log(11); // //edit team ์์ organization ๋ฃ๋ ํจ์ ์์ // } private onClickClose(): void { this.syncVisible = false; } private handleOk() { //console.log(e); this.syncVisible = false; } } </script> <style scoped> p { margin-left: 5px; } </style>
'vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
package.json ์ฌ์ฉ์ ์ง์ ํ๊ฒฝ๋ณ์์ ๋ฐ๋ฅธ ๋์ ์คํ (0) 2023.02.10 [classType vue] props/ ๋ชจ๋ฌ ์์ ๋์ฐ๊ธฐ (0) 2023.02.07