zoukankan      html  css  js  c++  java
  • 【angular5项目积累总结】列表多选样式框(2)

    view

    code

    list.css

    :host {
        display: flex;
        width: 100%;
        border-left: 1px solid #ccc;
        font: normal 12px/20px 5B8B4F53, Arial, Verdana, Lucida, Helvetica, simsun, sans-serif;
    }
    ul {
        margin: 0;
        padding: 0;
    }
    .version-container {
        width: 100%;
        overflow-x: hidden;
        overflow-y: auto;
        padding-bottom: 20px;
        font-family: "Microsoft YaHei",Avenir,Helvetica,Verdana,Hiragino Sans GB,STHeiti,WenQuanYi Micro Hei,Droid Sans Fallback,SimSun,sans-serif;
        position: relative;
        color: #666666;
        padding: 12px 0 0 25px;
    }
    .version-container .title {
        font-size: 20px;
        line-height: 36px;
        text-shadow: 0 0 3px #DFDFDF;   
    }
    .version-container .sub_title {
        margin-top: 11px;
        font-size: 14px;
    }
    .version-container .sub_title,
    .version-container .title {
        font-weight: bold;
        color: #666666;
    }
    .fxc-monitorchart-container .list {
        list-style: none;
        margin: 0;
        padding: 0;
    }
    .fxc-monitorchart-container li {
        line-height: 20px;
        width: 90%;
        font-size: 10px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .fxc-monitorchart-container .description {
        width: 100%;
        text-overflow: ellipsis;
        white-space: normal;
        word-wrap: break-word;
    }
    .fxc-monitorchart-container li > span.app-sec-item {
        width: 30%;
        display: inline-block;
        float: right;
        text-align: left;
    }
    .fxc-monitorchart-container li > span.app-fir-item {
        width: 45%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    .version-desc {
        padding-left: 15px;
        overflow: hidden;
        text-overflow: ellipsis;
        height: 80px;
    }
    .version-desc li {
        list-style: disc;
        width: 100%;
        white-space: normal;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .version-dot {
        font-weight: bold;
        float: left;
        margin-right: 10px;
    }
    .fxc-monitorchart-clickable {
        cursor: pointer;
    }
    .fxc-monitorchart-chart-multiple {
        height: 270px;
        max-width: 48%;
        min-width: 48%;
        float:left;
    }
    .fxc-monitorchart-chart-wrapper {
        padding: 10px;
        position: relative;
        box-sizing: border-box;
    }
    .fxc-monitorchart-chart-multiple .fxc-monitorchart-chart {
        padding: 15px;
        border: 1px solid #d6d6d6;
        box-sizing: border-box;
    }
    .fxc-monitorchart-chart {
        height: 100%;
        width: 100%;
    }
    .fxc-monitorchart-header {
        display: flex;
        display: -webkit-flex;
        -webkit-flex-flow: row nowrap;
        flex-flow: row nowrap;
        height: 47px;
        flex: none;
    }
    .fxc-monitorchart-title-container {
        -webkit-flex: 1 1 0%;
        flex: 1 1 0%;
    }
    .fxc-monitorchart-title {
        font-size: 14px;
        line-height: 17px;
        padding-bottom: 1px;
    }
    .fxc-monitorchart-subtitle, .fxc-monitorchart-title {
        margin: 0;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .fxc-monitorchart-subtitle {
        font-family: az_ea_font,wf_segoe-ui_semibold,"Segoe UI Semibold","Segoe WP Semibold","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif;
        font-size: 10px;
        line-height: 10px;
        margin-top: 3px;
    }
    .fxs-mode-light .azc-fill-text {
        fill: #252525;
    }
    .fxc-monitorchart-toolbar-item {
        height: 18px;
        width: 18px;
        padding: 5px;
        float: right;
        display: block;
    }
    .fxc-monitorchart-container {
        height:100%;
    }
    .fxs-contextMenu-small {
        width:100px;
    }
    .ext-hubs-browse-empty {
        text-align:center;
        margin-top:30px;
    }
    .ext-hubs-browse-emptytitle {
        font-size: 15px;
        line-height: 20px
    }
    .ext-hubs-browse-emptytext {
        margin-bottom: 15px;
    }
    .selected-blue-box {
        border: 1px solid #0078d7 !important;
    }
    .arrow {
        width: 0;
        height: 0;
        border-top: 18px solid transparent;
        border-bottom: 18px solid transparent;
        border-left: 18px solid #0078d7;
        transform-origin: center;
        transform: rotate(45deg);
        -webkit-transform: rotate(45deg);
        position:absolute;
        bottom:-1px;
        right:8px;
    }
    .arrow::before {
        content: '';
        display: block;
        width: 5px;
        height: 10px;
        border: solid #fff;
        border-width: 0 3px 3px 0;
        transform-origin: center;
        transform: translate(-16px, -8px) scale(.7);
        -webkit-transform: translate(-16px, -8px) scale(.7);
        -ms-transform: translate(-16px, -8px) scale(.7);
        -moz-transform: translate(-16px, -8px) scale(.7);
        -o-transform: translate(-16px, -8px) scale(.7);
    }

    list.html

    <panel-component [menuItems]="menuItems" headerTitle="{{currApp.displayName}}/{{currPkg.version}}" initWidth="600px" (closeEvent)="onClose()">
        <div class="version-container" (click)="activeContextMenu(null,false,null)" (scroll)="activeContextMenu(null,false,null)">
            <div class="main">
                <h1 class="title">{{currPkg.version}}</h1>
                <p>时间:{{currPkg.createdAt | date: 'yyyy-MM-dd hh:mm:ss'}}</p>
                <p>端口:{{currPkg.ports}}</p>
                <div class="description">
                    描述:{{currPkg.description}}
                </div>
            </div>
            <h2 class="sub_title">部署应用</h2>
            <!--列表信息-->
            <div class="fxc-monitorchart-chart-wrapper fxc-monitorchart-chart-multiple" *ngFor="let app of lstApp;let i = index;">
                <div class="fxc-monitorchart-chart" [ngClass]="{'selected-blue-box':app.isChecked}" (click)="onCheck(i)">
                    <div class="fxc-monitorchart-header">
                        <div class="fxc-monitorchart-title-container">
                            <h3 class="fxc-monitorchart-title msportalfx-tooltip-overflow">{{app.displayName}}</h3>
                            <a href="https://sflinux.china-inv.cn:19080" target="_blank" class="fxc-monitorchart-subtitle msportalfx-tooltip-overflow">https://sflinux.china-inv.cn:19080</a>
                        </div>
                        <div class="fxc-monitorchart-toolbar-container">
                            <div (click)="activeContextMenu($event,true,app.id)" class="fxc-monitorchart-toolbar-item azc-fill-text fxs-portal-hover fxc-monitorchart-toolbar-pin" role="button" title="单击以打开上下文菜单">
                                <svg height="100%" width="100%" aria-hidden="true" role="presentation" focusable="false"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#FxSymbol0-013"></use></svg>
                            </div>
                        </div>
                    </div>
                    <div class="fxc-monitorchart-container">
                        <ul>
                            <li>App Id:{{app.name}}</li>
                            <li>级别:{{getDictLabel(lstLevel,app.level)}}<span class="app-sec-item">状态:{{app.status}}</span></li>
                            <li>端口号:<span class="app-fir-item">{{getJsonValues(app.ports)}}</span><span class="app-sec-item">实例数:{{app.instanceCount}}</span></li>
                            <li>时间:{{app.createdAt | date: 'yyyy-MM-dd hh:mm:ss'}}</li>
                            <li>
                                描述:
                                <ul class="version-desc" *ngIf="app.description">
                                    <li *ngFor="let desc of app.description.split(';')"><i class="version-dot">·</i>{{desc}}</li>
                                </ul>
                            </li>
                        </ul>
                    </div>
                    <div *ngIf="app.isChecked" class="arrow"></div>
                </div>
            </div>
    
            <div class="fxs-commands-contextMenu fxs-contextMenu fxs-popup fxs-portal-bg-txt-br fxs-contextMenu-small" [ngClass]="{'fxs-contextMenu-active' : isActiveMenu}" [ngStyle]="{'top.px': menuTop,'left.px': menuLeft}">
                <ul role="menu" class="fxs-contextMenu-itemList" aria-label="上下文菜单">
                    <li role="menuitem" class="fxs-contextMenu-item fxs-portal-hover" tabindex="0" aria-posinset="1" aria-setsize="1" (click)="removeCurApp()">
                        <div class="fxs-contextMenu-text fxs-portal-text msportalfx-text-ellipsis">删除</div>
                    </li>
                    <li role="menuitem" class="fxs-contextMenu-item fxs-portal-hover" tabindex="0" aria-posinset="1" aria-setsize="1">
                        <a class="fxs-contextMenu-text fxs-portal-text msportalfx-text-ellipsis" target="_blank" href="https://sflinux.china-inv.cn:19080">管理</a>
                    </li>
                </ul>
            </div>
    
            <div *ngIf="lstApp.length<=0" class="ext-hubs-browse-empty msportalfx-font-semilight">
                <div class="ext-hubs-browse-emptyicon msportalfx-svg-disabled">
                    <svg aria-hidden="true" focusable="false" height="100%" width="100%">
                        <use xlink:href="#FxSymbol0-016" xmlns:xlink="http://www.w3.org/1999/xlink"></use>
                    </svg>
                </div>
                <h2 class="ext-hubs-browse-emptytitle">没有可显示的部署应用程序</h2>
                <div class="ext-hubs-browse-emptytext"><span>如果看不到任何内容信息,请尝试刷新操作。</span></div>
                <div class="fxc-base fxc-simplebutton" (click)="onOpenDpy()">
                    <div class="fxs-button fxt-button fxs-portal-button-primary fxs-inner-dotted-border" role="button" tabindex="0" title="创建新的应用部署">
                        <span class="fxs-button-text" data-bind="text: data.text">创建新的应用部署</span>
                    </div>
                </div>
            </div>
        </div>
    </panel-component>
    <router-outlet></router-outlet>

    list.ts

    import { Component} from '@angular/core';
    import { Router, ActivatedRoute, Params } from '@angular/router';
    import { AppStoreService } from '../service/appStoreService';
    import { CommonService } from '../../providers/commonService';
    
    @Component({
        selector: 'version-page',
        templateUrl: './version.html',
        styleUrls: ['./version.css']
    })
    
    export class VersionPage {
    
        constructor(
            private router: Router,
            private actRouter: ActivatedRoute,
            private appStoreService: AppStoreService,
            private comService: CommonService) {
            this.subscribeUpdate(comService);
        }
       
        id: string;
        pkgId: any;
        lstLevel: {} = [
            {
                "key": 0,
                "value": "高"
            },
            {
                "key": 1,
                "value": "中"
            },
            {
                "key": 2,
                "value": "低"
            }
        ];
        currApp: any = {
            displayName:''
        };
        currPkg: any = {
            description: '',
            appId: '',
            version: '',
            status: '',
            ports: '',
            createdAt:''
        };
        currId: string;
        lstApp:any[] = [];
        isActiveMenu: boolean = false;
        menuTop: any;
        menuLeft: any;
        parentUrl: string;
        menuItems: any = [
            { title: "创建新部署", icon: "#FxSymbol0-010", event: this.onOpenDpy.bind(this) },
            { title: "审核", icon: "#FxSymbol0-077", event: this.auditWebDpy.bind(this) },
            { title: "刷新部署应用", icon: "#FxSymbol0-0c4", event: this.loanDpyApp.bind(this, this.pkgId) }
        ]
        ngOnInit(): void {
            this.actRouter.params.subscribe((params: Params) => {
                this.id = params["id"] || this.id;
                this.pkgId = params["pkgId"] || this.pkgId;
                this.appStoreService.GetPkgOne(this.pkgId, (rtv) => {
                    this.currPkg = rtv;
                });
                this.appStoreService.GetAppOne(this.id, (rtv) => {
                    this.currApp = rtv;
                });
                this.parentUrl = "/webAppStore/" + this.id;
                this.loanDpyApp(this.pkgId);
            });
        }
        onClose() {
            this.router.navigate([this.parentUrl]);
        }
        onOpenDpy() {
            this.router.navigate([this.parentUrl + '/version/deploy', { id: this.id, pkgId: this.pkgId }]);
        }
        activeContextMenu(event: any, isActive: boolean, id: string) {
            this.isActiveMenu = isActive;
            if (event) {
                this.menuLeft = event.pageX - 20;
                this.menuTop = event.pageY - 10;
                event.stopPropagation();
            }
            this.currId = id;
        }
        loanDpyApp(id: string) {
            this.appStoreService.GetAppDpyList(id || this.pkgId,(rtv) => {
                this.lstApp = rtv;
            });
        }
        subscribeUpdate(comService: CommonService) {
            this.comService.notifyObservable$.subscribe(data => {
                if (data && data.action == 'refreshWebDpy') {
                    this.loanDpyApp(data.pkgId);
                }
            }, error => {
                console.log(`subscribe error:${error}`)
            })
        }
        removeCurApp() {
            let _this = this;
            this.currId && this.appStoreService.DeleteDpy(this.currId, (result) => {
                _this.loanDpyApp(_this.pkgId)
            })
        }
        getDictLabel(dict: any, key: any) {
            if (dict && dict.length > 0) {
                let curItem = dict.filter(item => { return item.key == key });
                return curItem.length > 0 ? curItem[0].value : '';
            }
        }
        getJsonValues(dict: any) {
            let jsonObject: any = dict && JSON.parse(dict) || {};
            return jsonObject.map(obj => { return obj.app }).join(',');
        }
        auditWebDpy() {
            this.router.navigate([this.parentUrl + '/version/dpyAudit', { id: this.id }]);
        }
        onCheck(index: any) {
            this.lstApp[index].isChecked = !this.lstApp[index].isChecked;
        }
    }
  • 相关阅读:
    一个小时前,美国主流媒体,头条,谷歌两位创始人突然宣布退下来,把万亿美元的帝国交给Sundar Pichai
    Fox新闻报道,帮助北朝鲜使用加密货币专家被捕
    看新闻,说墨西哥政府发起了一个军事行动,抓住了11月杀死9位美国人的三名嫌疑犯
    黑五千万不要去商场,就像打仗一样。
    Facebook 一个热搜帖,美国一个老人癌症不治最后的心愿是跟儿子喝啤酒。
    这周末又参加班里同学生日party,同学父母包场2小时花费大约1000美金左右。
    Google谷歌总部员工家庭活动
    800年没有写博客了,今天重新开始。
    iOS image processing with the accelerate framework(透明玻璃效果)
    Custom View Controller Transitions and Storyboard
  • 原文地址:https://www.cnblogs.com/sybboy/p/8386078.html
Copyright © 2011-2022 走看看