提交 71ace5c0 编写于 作者: ibizdev's avatar ibizdev

ibiz4j 发布系统代码

上级 67565fa7
因为 它太大了无法显示 源差异 。您可以改为 查看blob
@charset "UTF-8";.avue-crud .tree-ctrl,.avue-draggable{-webkit-user-select:none;-ms-user-select:none}.avue-avatar,.avue-card__item{-webkit-box-sizing:border-box;font-variant:tabular-nums;list-style:none}.avue-affix{position:fixed;z-index:10}.avue-sign{padding:5px}.avue-sign__canvas{border:1px solid #ccc}.avue-carousel--fullscreen{height:100%}.avue-carousel--fullscreen .el-carousel,.avue-carousel--fullscreen .el-carousel__container{height:90%}.avue-carousel__item{position:relative;width:100%;height:100%}.avue-carousel__item a{width:100%;height:100%;display:block}.avue-carousel__img{height:100%;background-size:cover;background-position:center center}.avue-carousel__title{z-index:1024;position:absolute;left:0;bottom:0;width:100%;height:50px;line-height:50px;font-size:16px;text-align:center;color:#fff;background-color:rgba(0,0,0,.6)}.avue-article__title{margin-bottom:15px;font-size:32px;line-height:32px;font-weight:400}.avue-article__meta{display:block;margin-bottom:20px;font-size:12px;color:#999}.avue-article__lead{color:#666;font-size:14px;line-height:22px;border:1px solid #dedede;border-radius:2px;background:#f9f9f9;padding:10px}.avue-article__body{padding-top:10px;background:#fff;font-family:Segoe UI,Lucida Grande,Helvetica,Arial,Microsoft YaHei,FreeSans,Arimo,Droid Sans,wenquanyi micro hei,Hiragino Sans GB,Hiragino Sans GB W3,FontAwesome,sans-serif;color:#333;font-size:14px}.avue-article blockquote{margin:0;font-family:Georgia,Times New Roman,Times,Kai,Kaiti SC,KaiTi,BiauKai,FontAwesome,serif;padding:1px 0 1px 15px;border-left:4px solid #ddd}.avue-avatar{font-size:14px;box-sizing:border-box;margin:0;padding:0;display:inline-block;text-align:center;background:#ccc;color:#fff;white-space:nowrap;position:relative;overflow:hidden;vertical-align:middle;width:32px;height:32px;line-height:32px;border-radius:50%}.avue-avatar__images{width:100%;height:100%}.avue-avatar__icon{font-size:18px}.avue-avatar__string{position:absolute;left:50%;-webkit-transform-origin:0 center;transform-origin:0 center}.avue-avatar--lg{width:40px;height:40px;line-height:40px;border-radius:50%;font-size:24px}.avue-avatar--sm{width:24px;height:24px;line-height:24px;border-radius:50%;font-size:14px}.avue-avatar--square{border-radius:4px}.avue-skeleton__avatar{width:40px;height:40px;line-height:40px;display:inline-block;border-radius:50%;background:#f2f2f2}.avue-skeleton__header{display:table-cell;vertical-align:top;padding-right:16px}.avue-skeleton__content{display:table-cell;vertical-align:top;width:100%}.avue-skeleton__title{margin-top:16px;height:16px;width:40%;background:#f2f2f2}.avue-skeleton__item{padding-top:16px;padding-bottom:16px;border-bottom:1px solid #e8e8e8}.avue-skeleton__item:last-child{border-bottom:none}.avue-skeleton__li{margin-bottom:10px;height:16px;background:#f2f2f2;list-style:none;width:100%}.avue-skeleton__li:last-child{width:50%}.avue-skeleton__loading{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);-webkit-animation:avue-skeleton-loading 1.4s ease infinite;animation:avue-skeleton-loading 1.4s ease infinite;background-size:400% 100%}@-webkit-keyframes avue-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes avue-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.avue-crud{margin:0 auto;width:99%}.avue-crud .el-checkbox:last-of-type{margin-right:0}.avue-crud .el-range-editor--mini{height:28px}.avue-crud__img{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-crud__img img{height:40px;margin-left:5px;-o-object-fit:contain;object-fit:contain}.avue-crud__column .el-checkbox{margin-bottom:10px;cursor:move}.avue-crud__menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:relative;width:100%;min-height:40px;height:auto;overflow:hidden;margin-bottom:5px}.avue-crud__search .el-form-item--mini.el-form-item,.avue-crud__search .el-form-item--small.el-form-item{margin-bottom:14px}.avue-crud .el-table--mini .avue-crud__color{width:20px;height:20px}.avue-crud .el-table--mini .avue-crud__icon{font-size:25px}.avue-crud .el-table--small .avue-crud__color{width:30px;height:30px}.avue-crud .el-table--small .avue-crud__icon{font-size:35px}.avue-crud th{word-break:break-word;color:rgba(0,0,0,.85);background-color:#fafafa}.avue-crud .ms-tree-title{padding-left:10px}.avue-crud .ms-tree-space{position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;line-height:1;width:15px;height:14px}.avue-crud .ms-tree-space::before{content:""}.avue-crud .processContainer{width:100%;height:100%}.avue-crud table td{line-height:26px}.avue-crud .tree-ctrl{position:relative;cursor:pointer;color:#666;margin-left:-15px;display:inline-block;width:17px;height:17px;text-align:center;line-height:14px;border:1px solid #e8e8e8;-moz-user-select:none;user-select:none;background:#fff;font-size:10px}.avue-crud .tree-ctrl i{padding-top:3px}@keyframes treeTableShow{from{opacity:0}to{opacity:1}}@-webkit-keyframes treeTableShow{from{opacity:0}to{opacity:1}}.avue-crud--indeterminate .is-indeterminate .el-checkbox__inner{background-color:#fff;border-color:#dcdfe6}.avue-crud .el-table th{word-break:break-word;color:rgba(0,0,0,.85);background-color:#fafafa}.avue-crud__color{margin:0 auto;width:40px;height:40px;border-radius:5px;display:block}.avue-crud__icon{font-size:45px}.avue-crud__icon--small{font-size:25px}.avue-crud__sortable{opacity:.2}.avue-crud__drag-handler{cursor:pointer}.avue-crud__pagination{position:relative;padding:25px 0 20px 20px;text-align:right}.avue-crud__form{padding:0 8px}.avue-crud__empty{padding:60px 0}.avue-crud__header{margin-bottom:10px}.avue-crud__header>.el-button{padding:12px 25px}.avue-crud__title{font-weight:700;margin-bottom:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:22px}.avue-crud__filter-item,.avue-crud__tip{display:-ms-flexbox;-webkit-box-align:center}.avue-crud__tip{margin:8px 0;display:-webkit-box;display:flex;-ms-flex-align:center;align-items:center;font-size:12px}.avue-crud__tip-name{margin-right:10px}.avue-crud__tip-count{font-size:16px;font-weight:600}.avue-crud__tip .el-button{margin-bottom:0}.avue-crud__filter-item{margin-bottom:12px;display:-webkit-box;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-crud__filter-menu{padding:0 5px;margin-bottom:20px}.avue-crud__filter-label{margin:0 5px;width:120px!important}.avue-crud__filter-symbol{margin:0 5px;width:80px!important}.avue-crud__filter-value{margin:0 5px;width:150px!important}.avue-crud__filter-value .el-date-editor.el-input,.avue-crud__filter-value .el-date-editor.el-input__inner{width:100%}.avue-crud__filter-icon{margin-left:10px}.avue-crud__dialog--fullscreen .el-dialog{left:0!important;top:0!important}.avue-crud__dialog__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.avue-crud__dialog__menu{padding-right:20px}.avue-crud__dialog__menu i{color:#909399;font-size:15px}.avue-crud__dialog__menu i:hover{color:#409EFF}.avue-crud__dialog .el-transfer{padding:0 20px;height:96%}.avue-crud__dialog .el-transfer-panel__body,.avue-crud__dialog .el-transfer-panel__list.is-filterable{height:100%!important}.avue-crud__dialog .el-transfer__buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-crud__dialog .el-transfer__buttons .el-button{margin:5px 0}.avue-crud__dialog .el-transfer-panel{min-width:200px;width:40%}.avue-crud__dialog .el-dialog__body{padding:20px 20px 5px 10px}.avue-crud__dialog .el-scrollbar__wrap{overflow-x:hidden}.avue-crud__dialog .avue-form__menu{padding-top:15px}.avue-card__item{margin-bottom:16px;border:1px solid #e8e8e8;background-color:#fff;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";cursor:pointer;height:200px}.avue-card__item:hover{border-color:rgba(0,0,0,.09);-webkit-box-shadow:0 2px 8px rgba(0,0,0,.09);box-shadow:0 2px 8px rgba(0,0,0,.09)}.avue-card__item--add{border:1px dashed #d9d9d9;width:100%;color:rgba(0,0,0,.45);background-color:#fff;border-radius:2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:16px}.avue-card__item--add i{margin-right:10px}.avue-card__item--add:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.avue-card__body{display:-webkit-box;display:-ms-flexbox;display:flex;padding:24px}.avue-card__detail{-webkit-box-flex:1;-ms-flex:1;flex:1}.avue-card__avatar{width:48px;height:48px;border-radius:48px;overflow:hidden;margin-right:12px}.avue-card__avatar img{width:100%;height:100%}.avue-card__title{color:rgba(0,0,0,.85);margin-bottom:12px;font-size:16px}.avue-card__title:hover{color:#1890ff}.avue-card__info,.avue-card__menu{color:rgba(0,0,0,.45);display:-webkit-box}.avue-card__info{-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;height:64px}.avue-card__menu{display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;height:50px;background:#f7f9fa;text-align:center;line-height:50px}.avue-card__menu:hover{color:#1890ff}.avue-comment{margin-bottom:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.avue-comment--reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.avue-data-display .item,.avue-flow__node,.data-box .item-info,.data-icons .item--easy{-webkit-box-orient:vertical;-webkit-box-direction:normal}.avue-comment--reverse .avue-comment__main:after,.avue-comment--reverse .avue-comment__main:before{left:auto;right:-8px;border-width:8px 0 8px 8px}.avue-comment--reverse .avue-comment__main:before{border-left-color:#dedede}.avue-comment--reverse .avue-comment__main:after{border-left-color:#f8f8f8;margin-right:1px;margin-left:auto}.avue-comment__avatar{width:48px;height:48px;border-radius:50%;border:1px solid transparent;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.avue-comment__header{padding:5px 15px;background:#f8f8f8;border-bottom:1px solid #eee;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.avue-comment__author{font-weight:700;font-size:14px;color:#999}.avue-comment__main{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0 20px;position:relative;border:1px solid #dedede;border-radius:2px}.avue-comment__main:after,.avue-comment__main:before{position:absolute;top:10px;left:-8px;right:100%;width:0;height:0;display:block;content:" ";border-color:transparent;border-style:solid solid outset;border-width:8px 8px 8px 0;pointer-events:none}.avue-comment__main:before{border-right-color:#dedede;z-index:1}.avue-comment__main:after{border-right-color:#f8f8f8;margin-left:1px;z-index:2}.avue-comment__body{padding:15px;overflow:hidden;background:#fff;font-family:Segoe UI,Lucida Grande,Helvetica,Arial,Microsoft YaHei,FreeSans,Arimo,Droid Sans,wenquanyi micro hei,Hiragino Sans GB,Hiragino Sans GB W3,FontAwesome,sans-serif;color:#333;font-size:14px}.avue-comment blockquote{margin:0;font-family:Georgia,Times New Roman,Times,Kai,Kaiti SC,KaiTi,BiauKai,FontAwesome,serif;padding:1px 0 1px 15px;border-left:4px solid #ddd}.avue-chat{-webkit-box-shadow:1px 2px 10px #eee;box-shadow:1px 2px 10px #eee;position:relative;background-color:#fcfcfc}.avue-chat li,.avue-chat ul{padding:0;margin:0}.avue-chat li{list-style:none;cursor:pointer}.avue-chat .web__content{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.avue-chat .web__main{height:calc(100% - 200px);padding:15px 15px 20px;overflow-x:hidden;overflow-y:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-chat .web__logo{background-color:#409eff;display:-webkit-box;display:-ms-flexbox;display:flex;padding:15px 12px;margin:0 auto;vertical-align:middle}.avue-chat .web__logo-img{margin-top:3px;width:35px;height:35px;border-radius:100%;-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,.1);box-shadow:0 3px 3px 0 rgba(0,0,0,.1)}.avue-chat .web__logo-info{margin-left:10px}.avue-chat .web__logo-name{position:relative;margin-top:5px;font-size:13px}.avue-chat .web__logo-dept{margin-top:1px;font-size:12px}.avue-chat .web__logo-dept,.avue-chat .web__logo-name{color:#fff;margin:0;padding:0;width:175px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.avue-chat .web__main-item{position:relative;font-size:0;margin-bottom:10px;padding-left:60px;min-height:68px}.avue-chat .web__main-text,.avue-chat .web__main-user{display:inline-block;vertical-align:top;font-size:14px}.avue-chat .web__main-user{position:absolute;left:3px}.avue-chat .web__main-user img{width:40px;height:40px;border-radius:100%}.avue-chat .web__main-user cite{position:absolute;left:60px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.avue-chat .web__main-user cite i{padding-left:15px;font-style:normal}.avue-chat .web__main-text{position:relative;line-height:22px;margin-top:25px;padding:8px 15px;background-color:#f3f3f3;border-radius:3px;border:1px solid #f0f0f0;color:#000;word-break:break-all}.avue-chat .web__main-arrow{top:6px;left:-8px;position:absolute;display:block;width:0;height:0;border-color:transparent #ebeef5 transparent transparent;border-style:solid;border-width:8px 8px 8px 0}.avue-chat .web__main-arrow::after{content:" ";top:-7px;left:1px;position:absolute;display:block;width:0;height:0;border-color:transparent #fff transparent transparent;border-style:solid;border-width:7px 7px 7px 0}.avue-chat .web__main-item--mine .web__main-text .web__main-arrow{left:auto;right:-5px;border-color:transparent transparent transparent #409eff;border-style:solid;border-width:8px 0 8px 8px}.avue-chat .web__main-item--mine .web__main-text .web__main-arrow::after{left:auto;right:-2px;border-color:transparent transparent transparent #409eff;border-style:solid;border-width:7px 0 7px 7px}.avue-chat .web__main-list{margin:10px 0}.avue-chat .web__main-list li{height:30px;color:#409eff;line-height:30px}.avue-chat .web__main-item--mine{text-align:right;padding-left:0;padding-right:60px}.avue-chat .web__main-item--mine .web__main-user{left:auto;right:3px}.avue-chat .web__main-item--mine .web__main-user cite{left:auto;right:60px;text-align:right}.avue-chat .web__main-item--mine .web__main-user cite i{padding-left:0;padding-right:15px}.avue-chat .web__main-item--mine .web__main-text{margin-left:0;text-align:left;background-color:#409eff;color:#fff}.avue-chat .web__footer{-webkit-box-shadow:0 -1px 0 0 rgba(0,0,0,.04),0 -2px 0 0 rgba(0,0,0,.01);box-shadow:0 -1px 0 0 rgba(0,0,0,.04),0 -2px 0 0 rgba(0,0,0,.01);position:absolute;left:0;bottom:0;width:100%;background-color:#fff}.avue-chat .web__msg{padding:10px;height:auto;overflow:hidden}.avue-chat .web__msg--file,.avue-chat .web__msg--img,.avue-chat .web__msg--video{position:relative;max-width:250px;min-width:200px;width:100%;margin:10px 0;border:1px solid #eee;overflow:hidden;border-radius:5px;cursor:pointer;display:block}.avue-chat .web__msg--file{height:140px;background-color:#fff}.avue-chat .web__msg--file span{-webkit-box-sizing:border-box;box-sizing:border-box;padding:3px 5px;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:calc(100% - 80px);overflow:hidden;font-size:13px;text-align:center}.avue-chat .web__msg--file h2{margin:0;width:100%;text-align:center;line-height:80px;background-color:#409EFF;color:#fff}.avue-chat .web__msg--map{height:160px}.avue-chat .web__msg-input{display:block;width:100%;height:60px;overflow-x:hidden;overflow-y:auto;-webkit-box-sizing:border-box;box-sizing:border-box;resize:none;outline:0;background-color:#fff;border:0;word-break:break-all;font-size:13px;line-height:17px;-webkit-appearance:none}.avue-chat .web__msg-submit{float:right;display:block;outline:0;cursor:pointer;text-align:center}.avue-image-preview__box,.avue-img--center{display:-webkit-box;display:-ms-flexbox;-webkit-box-align:center}.avue-chat .web__tools{padding:8px 10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-chat .web__tools i{margin-right:12px;font-size:20px;color:#888a91}.avue-chat .web__tools i:hover{color:#76b1f9}.avue-draggable{padding:10px;position:absolute;cursor:move;-webkit-tap-highlight-color:transparent;-moz-user-select:none;user-select:none}.avue-draggable__mask{width:100%;height:100%;border:0;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}.avue-draggable--active{cursor:move;border:1px dashed #09f;background-color:rgba(115,170,229,.5)}.avue-draggable--move{opacity:.6;background-color:rgba(115,170,229,.5)}.avue-draggable--click{cursor:pointer}.avue-draggable__line--left{position:absolute;border-top:1px dashed #09f;width:10000px;height:0;top:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.avue-draggable__line--top{position:absolute;border-left:1px dashed #09f;width:0;height:10000px;left:0;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.avue-draggable__line--label{top:-5px;left:-8px;position:absolute;padding:5px;-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%);color:#09f;font-size:18px;white-space:nowrap;cursor:move}.avue-draggable__menu{position:absolute;top:0;left:0;background-color:#409EFF;font-size:25px;color:#fff;z-index:9999;cursor:pointer}.avue-draggable__range{position:absolute;width:10px;height:10px;border-radius:100%;z-index:9999;background-color:#09f}.avue-draggable__range--left,.avue-draggable__range--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.avue-draggable__range--left:hover,.avue-draggable__range--right:hover{cursor:ew-resize}.avue-draggable__range--left{left:-6px}.avue-draggable__range--right{right:-6px}.avue-draggable__range--bottom,.avue-draggable__range--top{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.avue-draggable__range--bottom:hover,.avue-draggable__range--top:hover{cursor:ns-resize}.avue-draggable__range--top{top:-6px}.avue-draggable__range--bottom{bottom:-6px}.avue-draggable__range--bottom-right:hover,.avue-draggable__range--top-left:hover{cursor:nwse-resize}.avue-draggable__range--bottom-left:hover,.avue-draggable__range--top-right:hover{cursor:nesw-resize}.avue-draggable__range--top-right{top:-6px;right:-6px}.avue-draggable__range--top-left{top:-6px;left:-6px}.avue-draggable__range--bottom-right{bottom:-6px;right:-6px}.avue-draggable__range--bottom-left{bottom:-6px;left:-6px}.avue-img--center{display:flex;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-img--fullscreen .el-dialog__body{height:100%}.avue-image-preview{position:fixed;top:0;left:0;width:100%;height:100%;-webkit-transition:all .5s;transition:all .5s;z-index:9999}.avue-image-preview .el-image-viewer__close i{color:#fff}.avue-image-preview .el-image-viewer__btn{z-index:1024}.avue-image-preview img{-webkit-transition:all .5s;transition:all .5s;cursor:pointer}.avue-image-preview__mask{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:-1}.avue-image-preview__box{width:100%;height:100%;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-image-preview__box .el-carousel{width:90%;height:100%}.avue-image-preview__box .el-carousel__container{height:100%}.avue-image-preview__box .el-carousel__item{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-input-table__crud .avue-crud__pagination{padding:10px 0 2px 10px;margin:0}.amap-icon img,.amap-marker-content img{width:25px;height:34px}.avue-input-map__marker{position:absolute;top:-20px;right:-118px;color:#fff;padding:4px 10px;-webkit-box-shadow:1px 1px 1px rgba(10,10,10,.2);box-shadow:1px 1px 1px rgba(10,10,10,.2);white-space:nowrap;font-size:12px;font-family:"";background-color:#25a5f7;border-radius:3px}.avue-input-map__content-input{margin-bottom:10px}.avue-input-map__content-box{position:relative}.avue-input-map__content-container{width:100%;height:450px}.avue-input-map__content-result{display:block!important;position:absolute;top:0;right:-8px;width:250px;height:450px;overflow-y:auto}.avue-input-icon__item{text-align:center;max-width:80px;padding:20px;-webkit-transition:all .2s;transition:all .2s}.avue-input-icon__item:hover{-webkit-transform:scale(1.4);transform:scale(1.4)}.avue-input-icon__item--active{-webkit-transform:scale(1.4);transform:scale(1.4);color:#409EFF}.avue-input-icon__list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.avue-input-icon__icon{font-size:32px!important}.avue-upload--upload .el-upload,.avue-upload--upload .el-upload__tip{display:none}.avue-upload--upload .el-upload--picture-img{display:inline-block}.avue-upload--upload .el-upload-list{margin-top:-6px}.avue-upload--list .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avue-upload--list .el-upload:hover{border-color:#409eff}.avue-upload__dialog .el-dialog__header{display:none}.avue-upload__dialog .el-dialog__body{padding:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-upload__menu{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:1024}.avue-form,.avue-form__group .el-col{position:relative}.avue-upload__menu i{color:#fff;margin:0 8px;font-size:20px}.avue-upload__icon{font-size:28px;color:#8c939d;width:178px;height:178px;line-height:178px!important;text-align:center}.avue-upload__avatar{width:178px;height:178px;display:block}.avue-form{margin:0 auto;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-form__item--top .el-form-item__label{width:100%!important;text-align:left!important}.avue-form__item--top .el-form-item__content{margin-left:0!important}.avue-form__item--left .el-form-item__label{text-align:left!important}.avue-form__menu{padding:5px 10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-form__menu--center{text-align:center}.avue-form__menu--center .el-button{margin:0 5px}.avue-form__menu--left{text-align:left}.avue-form__menu--right{text-align:right}.avue-form__tabs{padding:0 10px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-form__group{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;height:auto}.avue-form__group--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.avue-form__line{display:inline-block;height:42px}.avue-form__row--block{width:100%;display:block}.avue-flow__node,.avue-flow__node-body{display:-webkit-box;display:-ms-flexbox}.avue-form__row--cursor{cursor:pointer}.avue-form__option{position:absolute;right:0;top:-10px;z-index:999}.avue-flow,.avue-flow__node,.avue-tree{position:relative}.avue-form__option i{color:#666}.avue-form__option i+i{margin-left:10px}.el-drawer .avue-form{padding:0 20px}.avue-flow .avue-draggable{padding:0}.avue-flow__node{display:flex;-ms-flex-direction:column;flex-direction:column;width:200px;height:80px;border-radius:5px;-webkit-box-shadow:'#66a6e0 0px 0px 12px 0px';box-shadow:'#66a6e0 0px 0px 12px 0px';border:1px solid #eee;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.avue-flow__node--active{border-width:2px;border-color:#f56c6c}.avue-flow__node-drag{margin:0 5px;display:inline-block}.avue-flow__node-header{-webkit-box-flex:1;-ms-flex:1;flex:1;background-color:#66a6e0}.avue-flow__node-body{display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:1.5;-ms-flex:1.5;flex:1.5;text-align:center;background:#fff}.avue-date__group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-date__radio .el-radio-button:last-child .el-radio-button__inner{border-radius:0;border-right:0}.avue-date__date{width:300px}.avue-date__date .el-date-editor{border-top-left-radius:0;border-bottom-left-radius:0}.avue-empty{margin:0 8px;font-size:14px;line-height:22px;text-align:center}.avue-checkbox .el-checkbox+.el-checkbox,.avue-radio .el-radio+.el-radio{margin-left:0}.avue-checkbox .el-checkbox,.avue-radio .el-radio{margin-right:10px}.avue-empty__image{height:100px;margin-bottom:8px}.avue-empty__image img{height:100%;vertical-align:middle;border-style:none}.avue-empty__desc{color:rgba(0,0,0,.65)}.avue-select .sortable-ghost{opacity:.8;color:#fff!important;background:#409EFF!important}.avue-select .el-tag{cursor:pointer}.avue-group .el-collapse,.avue-group .el-collapse-item__wrap{border-color:#fff}.avue-group .el-collapse-item__header{height:inherit;border:none}.avue-group .el-collapse-item__content{padding-bottom:0}.avue-group--arrow .el-collapse-item__arrow,.avue-group--header .el-collapse-item__header{display:none}.avue-group .el-collapse-item__arrow{margin-top:-25px}.avue-group--collapse .el-collapse-item__arrow,.avue-group--collapse .el-collapse-item__header{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.avue-group__header,.avue-tree__filter{display:-webkit-box;display:-ms-flexbox}.avue-group--card{padding:0 20px}.avue-group--card:last-child{margin-bottom:50px}.avue-group--card .avue-group__item{border-radius:5px;-webkit-box-shadow:2px 1px 8px rgba(0,0,0,.15);box-shadow:2px 1px 8px rgba(0,0,0,.15)}.avue-group__item{margin-bottom:10px;background-color:#fff;border-bottom:1px solid #eee;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-group__item:last-child{border-bottom:none}.avue-group__header{width:100%;margin-bottom:30px;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px;line-height:50px;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #eee}.avue-group__icon{margin-right:8px;font-size:20px;color:rgba(0,0,0,.85)}.avue-group__title{font-size:16px;font-weight:500;color:rgba(0,0,0,.85)}.avue-tree__menu{width:200px;position:fixed;z-index:1024;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:#fff}.avue-tree__item,.avue-video{position:relative;overflow:hidden}.avue-tree__dialog .el-dialog__body{padding:30px 20px 0}.avue-tree__item{height:34px;line-height:34px;outline:0;padding:0 10px;white-space:nowrap;text-overflow:ellipsis;width:100%;color:#666}.avue-tree__item:hover{cursor:pointer;color:#409eff}.avue-tree__filter{margin-bottom:15px;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-search{padding:0 20px}.avue-search__item{padding:20px 0 10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-bottom:1px dashed #e8e8e8}.avue-search__item:last-child{border-bottom:none}.avue-search__tags{padding:0 12px;margin-right:24px;margin-bottom:12px;font-size:14px;color:rgba(0,0,0,.65);cursor:pointer;white-space:nowrap;display:inline-block}.avue-search__tags:hover{color:#1890ff}.avue-search__tags--active{color:#fff;background-color:#1890ff;border-radius:5px}.avue-search__tags--active:hover{opacity:.85;color:#fff}.avue-search__title{margin:0;padding:0 20px;width:120px;font-size:14px;text-align:right;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-search__content{width:calc(100% - 190px);display:inline-block}.avue-dynamic__item,.avue-notice__item{display:-webkit-box;display:-ms-flexbox}.avue-search__content .el-tag{margin-right:10px;margin-bottom:10px}.avue-tabs{padding:20px 10px 0}.avue-video{width:500px}.avue-video__border span{position:absolute;width:30px;height:30px;border-width:4px;color:#0073eb;border-style:solid}.avue-video__border span:nth-child(1){left:15px;top:15px;border-right:0;border-bottom:0}.avue-video__border span:nth-child(2){right:15px;top:15px;border-left:0;border-bottom:0}.avue-video__border span:nth-child(3){bottom:15px;left:15px;border-right:0;border-top:0}.avue-video__border span:nth-child(4){bottom:15px;right:15px;border-left:0;border-top:0}.avue-video__img{width:100px;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.avue-video__main{width:100%}.avue-dynamic__item{margin-bottom:10px;width:100%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-dynamic__input{margin-right:8px;width:100%}.avue-dynamic__button{margin-bottom:0!important}.avue-verify__item{padding:5px 10px;display:inline-block;margin:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e1e1e1;font-size:64px;text-align:center}.avue-text-ellipsis__more{padding:0 2px}.avue-login .el-form-item{margin-bottom:18px}.avue-login .el-input-group__append{padding:0;overflow:hidden}.avue-login__send{min-width:150px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-login__send:hover{color:#C0C4CC!important;border-color:#EBEEF5!important;background-color:#F5F7FA!important}.avue-login__submit{width:100%}.avue-keyboard--default .akeyboard-keyboard{height:100%;width:100%;background:#f0f0f0;border-radius:5px;padding:9px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--default .akeyboard-keyboard-innerKeys{text-align:center}.avue-keyboard--default .akeyboard-keyboard-keys{height:40px;min-width:40px;padding:0 10px;border-radius:5px;background:#fff;display:inline-block;line-height:40px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:4px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.avue-keyboard--default .akeyboard-keyboard-keys:hover,.avue-keyboard--default .keyboard-keyboard-keys-focus{background:#1e9fff;color:#fff}.avue-keyboard--default .akeyboard-keyboard-keys-Delete,.avue-keyboard--default .akeyboard-keyboard-keys-Tab{width:80px}.avue-keyboard--default .akeyboard-keyboard-keys-Caps{width:77px}.avue-keyboard--default .akeyboard-keyboard-keys-Enter{width:90px}.avue-keyboard--default .akeyboard-keyboard-keys-Shift{width:106px}.avue-keyboard--default .akeyboard-keyboard-keys-Space{width:350px}.avue-keyboard--default .akeyboard-keyboard-fixedBottomCenter{width:100%!important;height:auto!important;position:fixed;bottom:0;left:0;border-radius:0!important}.avue-keyboard--default .akeyboard-numberKeyboard{height:100%;width:100%;background:#f0f0f0;border-radius:5px;padding:10px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--default .akeyboard-numberKeyboard-keys-Enter{height:40px;width:100px}.avue-keyboard--default .akeyboard-mobileKeyboard{height:100%;width:100%;background:#f0f0f0;border-radius:5px;padding:11px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--default .akeyboard-mobileKeyboard-keys{height:25px;min-width:25px;padding:0 10px;border-radius:3px;background:#fff;display:inline-block;line-height:25px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:3px 2px 2px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:10px}.avue-keyboard--green .akeyboard-keyboard-keys,.avue-keyboard--green .akeyboard-mobileKeyboard-keys{display:inline-block;text-align:center;cursor:pointer;-webkit-user-select:none;-ms-user-select:none}.avue-keyboard--default .akeyboard-mobileKeyboard-keys:hover{background:#1e9fff!important;color:#fff}.avue-keyboard--default .akeyboard-mobileKeyboard-keys-,.avue-keyboard--default .akeyboard-mobileKeyboard-keys-{width:25px;background-color:#999faf}.avue-keyboard--default .akeyboard-mobileKeyboard-keys-Space{height:28px;width:100px;line-height:28px;margin-left:55px}.avue-keyboard--default .akeyboard-mobileKeyboard-keys-Enter{height:28px;width:55px;line-height:28px;background:#1e9fff!important;color:#fff}.avue-keyboard--default .akeyboard-mobileKeyboard-keys-focus{background:#1e9fff!important;color:#fff}.avue-keyboard--green .akeyboard-keyboard{height:100%;width:100%;background:#030;border-radius:5px;padding:9px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--green .akeyboard-keyboard-innerKeys{text-align:center}.avue-keyboard--green .akeyboard-keyboard-keys{height:40px;min-width:40px;padding:0 10px;border-radius:5px;background:#cc9;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:4px;-moz-user-select:none;user-select:none}.avue-keyboard--green .akeyboard-keyboard-keys:hover,.avue-keyboard--green .keyboard-keyboard-keys-focus{background:#693;color:#fff}.avue-keyboard--green .akeyboard-keyboard-keys-Delete,.avue-keyboard--green .akeyboard-keyboard-keys-Tab{width:80px}.avue-keyboard--green .akeyboard-keyboard-keys-Caps{width:77px}.avue-keyboard--green .akeyboard-keyboard-keys-Enter{width:90px}.avue-keyboard--green .akeyboard-keyboard-keys-Shift{width:106px}.avue-keyboard--green .akeyboard-keyboard-keys-Space{width:350px}.avue-keyboard--green .akeyboard-keyboard-fixedBottomCenter{width:100%!important;height:auto!important;position:fixed;bottom:0;left:0;border-radius:0!important}.avue-keyboard--green .akeyboard-numberKeyboard{height:100%;width:100%;background:#030;border-radius:5px;padding:10px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--green .akeyboard-numberKeyboard-keys-Enter{height:40px;width:100px}.avue-keyboard--green .akeyboard-mobileKeyboard{height:100%;width:100%;background:#030;border-radius:5px;padding:11px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--green .akeyboard-mobileKeyboard-keys{height:25px;min-width:25px;padding:0 10px;border-radius:3px;background:#cc9;line-height:25px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:3px 2px 2px;-moz-user-select:none;user-select:none;font-size:10px}.avue-keyboard--dark .akeyboard-keyboard-keys,.avue-keyboard--dark .akeyboard-mobileKeyboard-keys{-webkit-user-select:none;-ms-user-select:none;color:#fff;display:inline-block;text-align:center;cursor:pointer}.avue-keyboard--green .akeyboard-mobileKeyboard-keys:hover{background:#693!important;color:#fff}.avue-keyboard--green .akeyboard-mobileKeyboard-keys-,.avue-keyboard--green .akeyboard-mobileKeyboard-keys-{width:25px;background-color:#999faf}.avue-keyboard--green .akeyboard-mobileKeyboard-keys-Space{height:28px;width:100px;line-height:28px;margin-left:55px}.avue-keyboard--green .akeyboard-mobileKeyboard-keys-Enter{height:28px;width:55px;line-height:28px;background:#693!important;color:#fff}.avue-keyboard--green .akeyboard-mobileKeyboard-keys-focus{background:#693!important;color:#fff}.avue-keyboard--dark .akeyboard-keyboard{height:100%;width:100%;background:#000;color:#fff;border-radius:5px;padding:9px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--dark .akeyboard-keyboard-innerKeys{text-align:center}.avue-keyboard--dark .akeyboard-keyboard-keys{height:40px;min-width:40px;padding:0 10px;border-radius:5px;background:#393d49;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:4px;-moz-user-select:none;user-select:none}.avue-keyboard--dark .akeyboard-keyboard-keys:hover,.avue-keyboard--dark .keyboard-keyboard-keys-focus{background:#1e9fff}.avue-keyboard--dark .akeyboard-keyboard-keys-Delete,.avue-keyboard--dark .akeyboard-keyboard-keys-Tab{width:80px}.avue-keyboard--dark .akeyboard-keyboard-keys-Caps{width:77px}.avue-keyboard--dark .akeyboard-keyboard-keys-Enter{width:90px}.avue-keyboard--dark .akeyboard-keyboard-keys-Shift{width:106px}.avue-keyboard--dark .akeyboard-keyboard-keys-Space{width:350px}.avue-keyboard--dark .akeyboard-keyboard-fixedBottomCenter{width:100%!important;height:auto!important;position:fixed;bottom:0;left:0;border-radius:0!important}.avue-keyboard--dark .akeyboard-numberKeyboard{height:100%;width:100%;background:#000;border-radius:5px;padding:10px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--dark .akeyboard-numberKeyboard-keys-Enter{height:40px;width:100px}.avue-keyboard--dark .akeyboard-mobileKeyboard{height:100%;width:100%;background:#000;border-radius:5px;padding:11px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--dark .akeyboard-mobileKeyboard-keys{height:25px;min-width:25px;padding:0 10px;border-radius:3px;background:#393d49;line-height:25px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:3px 2px 2px;-moz-user-select:none;user-select:none;font-size:10px}.avue-keyboard--dark .akeyboard-mobileKeyboard-keys:hover{background:#1e9fff!important;color:#fff}.avue-keyboard--dark .akeyboard-mobileKeyboard-keys-,.avue-keyboard--dark .akeyboard-mobileKeyboard-keys-{width:25px;background-color:#999faf}.avue-keyboard--dark .akeyboard-mobileKeyboard-keys-Space{height:28px;width:100px;line-height:28px;margin-left:55px}.avue-keyboard--dark .akeyboard-mobileKeyboard-keys-Enter{height:28px;width:55px;line-height:28px;background:#1e9fff!important;color:#fff}.avue-keyboard--dark .akeyboard-mobileKeyboard-keys-focus{background:#1e9fff!important;color:#fff}.avue-keyboard--classic .akeyboard-keyboard{height:100%;width:100%;background:#2f4056;border-radius:5px;padding:9px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--classic .akeyboard-keyboard-innerKeys{text-align:center}.avue-keyboard--classic .akeyboard-keyboard-keys{height:40px;min-width:40px;padding:0 10px;border-radius:5px;background:#fff;display:inline-block;line-height:40px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:4px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.avue-keyboard--classic .akeyboard-keyboard-keys:hover,.avue-keyboard--classic .keyboard-keyboard-keys-focus{background:#c2c2c2;color:#fff}.avue-keyboard--classic .akeyboard-keyboard-keys-Delete,.avue-keyboard--classic .akeyboard-keyboard-keys-Tab{width:80px}.avue-keyboard--classic .akeyboard-keyboard-keys-Caps{width:77px}.avue-keyboard--classic .akeyboard-keyboard-keys-Enter{width:90px}.avue-keyboard--classic .akeyboard-keyboard-keys-Shift{width:106px}.avue-keyboard--classic .akeyboard-keyboard-keys-Space{width:350px}.avue-keyboard--classic .akeyboard-keyboard-fixedBottomCenter{width:100%!important;height:auto!important;position:fixed;bottom:0;left:0;border-radius:0!important}.avue-keyboard--classic .akeyboard-numberKeyboard{height:100%;width:100%;background:#2f4056;border-radius:5px;padding:10px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--classic .akeyboard-numberKeyboard-keys-Enter{height:40px;width:100px}.avue-keyboard--classic .akeyboard-mobileKeyboard{height:100%;width:100%;background:#2f4056;border-radius:5px;padding:11px 5px 5px;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-keyboard--classic .akeyboard-mobileKeyboard-keys{height:25px;min-width:25px;padding:0 10px;border-radius:3px;background:#fff;display:inline-block;line-height:25px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:3px 2px 2px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:10px}.avue-keyboard--classic .akeyboard-mobileKeyboard-keys:hover{background:#c2c2c2!important;color:#fff}.avue-keyboard--classic .akeyboard-mobileKeyboard-keys-,.avue-keyboard--classic .akeyboard-mobileKeyboard-keys-{width:25px;background-color:#999faf}.avue-keyboard--classic .akeyboard-mobileKeyboard-keys-Space{height:28px;width:100px;line-height:28px;margin-left:55px}.avue-keyboard--classic .akeyboard-mobileKeyboard-keys-Enter{height:28px;width:55px;line-height:28px;background:#c2c2c2!important;color:#fff}.avue-keyboard--classic .akeyboard-mobileKeyboard-keys-focus{background:#c2c2c2!important;color:#fff}.avue-notice__item{padding:12px 24px;border-bottom:1px solid #e8eaec;cursor:pointer;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out;text-align:left;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.avue-notice__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.avue-notice__img{width:38px;height:38px;border-radius:100%;margin-top:5px;margin-right:10px;overflow:hidden}.avue-notice__img img{width:100%;height:100%}.avue-notice__name{line-height:25px}.avue-notice__title{font-size:14px;font-weight:400;line-height:22px;color:#515a6e;margin-bottom:4px}.avue-notice__tag{float:right;margin-top:2px}.avue-notice__subtitle{font-size:12px;color:#808695}.avue-notice__more{cursor:pointer;color:#2d8cf0;text-align:center;padding:10px 0}.avue-array__item{margin-bottom:5px}.ant-form-item,.ant-form-item-with-help{margin-bottom:0}.avue-array__input{display:-webkit-box;display:-ms-flexbox;display:flex}.avue-array__input .el-input{-webkit-box-flex:1;-ms-flex:1;flex:1}.avue-array__input .el-button{margin-left:5px}.ant-btn+.ant-btn{margin-left:10px}.ant-calendar-picker,.ant-time-picker{width:100%}.ant-form{padding-right:50px}.ant-form-item-control{line-height:34px}.ant-form-item{height:60px}.avue-data-tabs .item{position:relative;margin:15px;padding:12px;height:160px;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;color:#fff}.avue-data-tabs .item a{color:#fff}.avue-data-tabs .item-header{position:relative}.avue-data-tabs .item-header>p{color:#fff;margin:0;font-size:14px}.avue-data-tabs .item-header>span{position:absolute;right:0;top:0;padding:2px 8px;border-radius:4px;font-size:12px;background:rgba(255,255,255,.3)}.avue-data-tabs .item-body .h2{color:#fff;margin:0;font-size:32px;line-height:60px;font-weight:700}.avue-data-tabs .item-footer{padding-top:8px;line-height:20px}.avue-data-tabs .item-footer>span{font-size:10px}.avue-data-tabs .item-footer>p{color:#fff;margin:0;font-size:12px}.avue-data-tabs .item-tip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;width:80px;height:80px;bottom:10px;right:10px;border:2px solid #fff;border-radius:100%;font-size:48px;-webkit-transform:rotate(-40deg);transform:rotate(-40deg);opacity:.1}.data-box .item a,.data-box .item-icon{display:-webkit-box;display:-ms-flexbox}.avue-data-cardText .item{padding:20px 25px;margin:10px 20px;background:#F8F8F8;border-radius:6px;-webkit-box-shadow:2px 2px 20px #ccc;box-shadow:2px 2px 20px #ccc}.avue-data-cardText .item-header{position:relative}.avue-data-cardText .item-header i{font-size:26px;color:#009688}.avue-data-cardText .item-header a{font-size:16px;margin-left:6px;position:absolute;bottom:4px}.avue-data-cardText .item-content{margin-top:8PX;font-size:14px;line-height:22px;color:#333}.avue-data-cardText .item-footer{position:relative}.avue-data-cardText .item-footer span:nth-child(1){color:#777;font-size:12px;text-overflow:ellipsis;word-break:break-all}.avue-data-cardText .item-footer span:nth-child(2){color:#CCC;font-size:12px;line-height:24px;position:absolute;right:0}.data-box .item,.data-card .item{position:relative;overflow:hidden}.data-box .item{margin:0 auto 10px;width:96%;height:100px;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box}.data-box .item:hover .item-text{top:0}.data-box .item a{display:flex}.data-box .item-icon{width:100px;height:100px;color:#fff;text-align:center;line-height:100px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:flex}.data-box .item-icon i{font-size:48px!important}.data-box .item-info{border-radius:0 5px 5px 0;border:1px solid #eee;border-left:none;background-color:#fff;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-direction:column;flex-direction:column}.data-box .item-info .title{font-size:30px;line-height:40px;text-align:center}.data-box .item-info .info{color:#999;font-size:14px;text-align:center}.data-progress .item{margin:10px}.data-progress .item-header{margin-bottom:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.data-progress .item-count{line-height:26px;font-size:26px;color:#666}.data-progress .item-title{color:#999;font-size:14px}.data-icons .item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:90%;margin:10px 15px}.data-icons .item-icon{margin-top:3px;margin-right:0!important;text-align:center}.data-icons .item-icon>i{font-size:46px!important}.data-icons .item-info{text-align:center;padding:10px 0}.data-icons .item-info>span{display:block;padding:5px 0;color:#999;font-size:12px}.data-icons .item-info .count{font-size:20px;line-height:25px}.data-icons .item--easy{-ms-flex-direction:column;flex-direction:column}.data-icons .item--easy>.item-icon{margin:0}.data-icons .item--easy>.item-info{margin-top:-15px}.data-icons .item--easy>.item-info>span{font-size:14px}.data-card .item{margin:0 auto 50px;width:230px;height:340px;border-radius:5px;border-color:#fff;border-width:1px;border-style:solid}.data-card .item:hover .item-text{top:0}.data-card .item-img{width:100%;border-radius:5px 5px 0 0}.data-card .item-text{position:absolute;top:150px;padding:20px 15px;width:100%;height:340px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:0 0 5px 5px;opacity:.9;-webkit-transition:top .4s;transition:top .4s}.data-card .item-text>p{font-size:12px;line-height:25px;text-indent:2em}.avue-data-display .item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;margin:5px 0;text-align:center}.avue-data-display .count{display:block;margin:8px 0 15px;font-weight:700;font-size:32px;color:#15A0FF}.avue-data-display .title{line-height:32px;color:#999}.avue-data-display .splitLine{display:block;margin:0 auto;width:24px;height:1px;background:#9B9B9B}.avue-data-imgtext .item{position:relative;height:340px;width:240px;margin:10px auto 50px;border-radius:5px;-webkit-box-shadow:2px 2px 20px #ccc;box-shadow:2px 2px 20px #ccc}.avue-data-imgtext .item-header img{width:100%;height:170px;background:red;border-radius:5px 5px 0 0}.avue-data-imgtext .item-content{padding:10px 15px;color:#333!important}.avue-data-imgtext .item-content span{font-size:20px}.avue-data-imgtext .item-content:hover span{color:#1890ff}.avue-data-imgtext .item-content p{font-size:14px;height:60px;margin:6px 0;overflow:hidden}.avue-data-imgtext .item-footer{padding:10px 15px;position:relative}.avue-data-imgtext .item-footer img{height:20px;width:20px;border-radius:50%}.avue-data-imgtext .item-footer div{display:inline-block}.avue-data-imgtext .item-footer div li,.avue-data-imgtext .item-footer div ul{padding:0;margin:0 0 0 -8px;list-style:none;display:inline-block;border:2px solid #fff;border-radius:50%}.avue-data-imgtext .item-footer div:nth-child(1){font-size:14px;color:#ccc!important}.avue-data-imgtext .item-footer div:nth-child(2){position:absolute;right:15px}.avue-data-operatext .item{margin:5px 10px;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;border-radius:3px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}.avue-data-operatext .item a{color:#333}.avue-data-operatext .item-header{padding:20px 20px 60px;border-top-right-radius:3px;border-top-left-radius:3px;color:#fff;background-position:center center}.avue-data-operatext .item-title{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,.2);display:block}.avue-data-operatext .item-subtitle{font-size:14px;font-weight:400}.avue-data-operatext .item-content{border-top:1px solid #f4f4f4;padding:10px 10px 20px;background-color:#fff;border-radius:0 0 3px 3px}.avue-data-operatext .item-img{margin:-60px auto 5px;width:90px;height:90px;border-radius:100%;overflow:hidden;border:4px solid #fff}.avue-data-operatext .item-img img{width:100%;height:100%}.avue-data-operatext .item-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.avue-data-operatext .item-row{-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%;text-align:center}.avue-data-operatext .item-label{margin-bottom:5px;display:block;font-weight:600;font-size:16px}.avue-data-operatext .item-value{display:block;font-weight:300;text-transform:uppercase}.avue-data-rotate .item{margin:5px 10px;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;color:#fff;border-radius:3px}.avue-data-rotate .item-box{padding:10px 20px}.avue-data-rotate .item-count{margin-bottom:5px;font-size:38px;white-space:nowrap;font-weight:300;display:block}.avue-data-rotate .item-title{font-size:15px}.avue-data-rotate .item-icon{-webkit-transition:all .3s linear;transition:all .3s linear;position:absolute;top:20px;right:20px;font-size:65px;color:rgba(0,0,0,.15)}.avue-data-rotate .item-icon:hover{font-size:70px}.avue-data-rotate .item-more{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,.8);display:block;z-index:10;font-size:14px;letter-spacing:2px;background:rgba(0,0,0,.1);text-decoration:none}.avue-data-pay .item{margin:0 auto;padding-bottom:16px;width:80%;position:relative;border-radius:4px;background-color:#fff;min-height:670px;-webkit-box-shadow:1px 2px 10px #eee;box-shadow:1px 2px 10px #eee}.avue-data-pay .top{width:100%;height:6px;position:absolute;top:0;left:0;border-radius:4px 4px 0 0}.avue-data-pay .header{margin-bottom:40px;text-align:center}.avue-data-pay .title{text-align:center;padding:20px 0 10px;font-size:20px;font-weight:200}.avue-data-pay .money span{margin-right:5px;font-size:14px}.avue-data-pay .money .b{margin-right:2px;font-size:20px;font-weight:700}.avue-data-pay .money s{margin-right:3px;font-size:12px}.avue-data-pay .money em{font-size:14px;font-style:normal}.avue-data-pay .img{width:50px}.avue-data-pay .line{width:60%;height:1px;background:rgba(150,150,150,.1);margin:20px auto}.avue-data-pay .btn{display:block;width:120px;height:32px;line-height:32px;margin:0 auto;text-align:center;border-radius:32px;color:#fff;cursor:pointer;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.avue-data-pay .list-item{list-style:none;padding-left:20px;margin-bottom:12px;color:#666;font-size:14px}.avue-data-pay .list-item a{color:#666}.avue-data-pay .list-item-icon{color:#515a6e;margin-right:8px}.avue-data-pay .list-item--link{font-size:12px;color:#2d8cf0}.avue-data-pay .list-item--no,.avue-data-pay .list-item--no+span{color:#c5c8ce}.data-price .item{margin:0 20px;text-align:center;-webkit-box-shadow:2px 3px 15px #eee;box-shadow:2px 3px 15px #eee}.data-price .item:hover{border:1px solid #00a680}.data-price .item:hover .body{color:#fff;background-color:#00a680}.data-price .item:hover .body::after{border-top-color:#00a680}.data-price .item:hover .list{color:#00a680}.data-price .item:hover .price{color:#fff}.data-price .item .title{height:80px;line-height:80px;font-size:18px;color:#333}.data-price .item .body,.data-price .item .price{margin:0 0 50px;line-height:120px;height:120px;color:#6b6b6b}.data-price .item .price{padding:0 8px;font-size:42px}.data-price .item .append{font-size:16px}.data-price .item .body{position:relative;padding:0;background-color:#f4f4f4;font-size:42px}.data-price .item .body::before{content:"¥";font-size:16px;font-weight:400}.data-price .item .body::after{content:'';position:absolute;display:block;width:0;height:0;bottom:-15px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-color:#f4f4f4 transparent transparent;border-style:solid;border-width:20px 30px 0}.data-price .item .list{padding-bottom:30px;color:#666;font-size:14px}.avue-data-panel .item{padding:0 30px;margin:0 20px;cursor:pointer;height:108px;font-size:12px;position:relative;overflow:hidden;color:#666;background:#fff;-webkit-box-shadow:4px 4px 40px rgba(0,0,0,.05);box-shadow:4px 4px 40px rgba(0,0,0,.05);border-color:rgba(0,0,0,.05);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.avue-data-panel .item-icon{font-size:52px}.avue-data-panel .item-info{text-align:center}.avue-data-panel .item-title{line-height:18px;color:rgba(0,0,0,.45);font-size:16px;margin-bottom:12px}.avue-data-panel .item-count{font-size:20px}[class^=avue-data-] a,[class^=data-] a{text-decoration:none}@-webkit-keyframes rotating{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.avue-echart-tabs .el-select{width:100%}.avue-echart-tabs .el-input,.avue-echart-tabs .el-select,.avue-echart-tabs input{height:100%}.avue-echart-tabs .el-input{font-size:inherit}.avue-echart-tabs__list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.avue-echart-pie__title,.avue-echart-tabs__item{display:-webkit-box;display:-ms-flexbox;height:100%;width:100%}.avue-echart-tabs__icon{margin-right:10px}.avue-echart-tabs__item{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-echart-iframe iframe{border:none;width:100%;height:100%}.avue-echart-text{overflow:hidden}.avue-echart-text__box{width:100%;height:100%}.avue-echart-text__text{display:block;text-decoration:none}.avue-echart-swiper .el-carousel,.avue-echart-swiper .el-carousel__container{height:100%}.avue-echart-swiper img{width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.avue-echart-pie__title{position:absolute;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-echart-slide .swiper-container{width:100%;height:100%}.avue-echart-slide .swiper-slide{text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-echart-table__body{position:relative;overflow:hidden}.avue-echart-table__menu{position:absolute;left:0}.avue-echart-table__menu i{margin-right:20px;font-size:24px}.avue-echart-table__allview{opacity:.9}.avue-echart-table__allview .el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#333}.avue-echart-table__tr{display:-webkit-box;display:-ms-flexbox;display:flex}.avue-echart-table__tr--line{-webkit-transition:all .5s;transition:all .5s;width:100%;position:absolute}.avue-echart-table__td{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-echart-table__header{margin-bottom:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;border-bottom-width:0}.avue-echart-table__index{margin:0 auto;width:30px;height:30px;line-height:30px;text-align:center;color:#fff;background-color:#144280;border-radius:100%}.avue-echart-table__index--1{background-color:#fdd706}.avue-echart-table__index--2,.avue-echart-table__index--3{background-color:#1f94f4}.avue-echart-table__item{display:inline-block;padding:5px 10px;border-style:solid;border-width:1px}.avue-echart-table__item--active{color:#fff!important}.avue-echart-table table{width:100%;border-width:1px;border-style:solid}.avue-echart-table td,.avue-echart-table th{border-width:0 0 1px;border-style:solid;font-size:16px;font-weight:300}.avue-echart-table--line,.avue-echart-table--line td,.avue-echart-table--line th{border:none!important}.avue-echart-header{padding:10px}.avue-echart-header--center{text-align:center}.avue-echart-header--right{text-align:right}.avue-echart-header__title{margin-right:5px;font-size:18px;font-weight:400;color:#333;text-decoration:none}.avue-echart-header__info{display:inline-block}.avue-echart-progress{position:relative}.avue-echart-progress__text--circle{position:absolute;width:100%;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);text-align:center}.avue-echart-progress__text--line{margin-bottom:20px;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-echart-progress__text--line p{margin-right:5px}.avue-echart-img--rotate{-webkit-animation:rotating 0s linear infinite;animation:rotating 0s linear infinite}.avue-echart-flop .el-tooltip{width:100%}.avue-echart-flop__count{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.avue-echart-flop__item{font-family:"Microsoft Yahei";font-size:28px;font-weight:400;color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block}.avue-echart-flop__item--img{padding:0 5px;border-image-slice:10 16 15 10 fill;border-width:10px 16px 15px 10px;border-style:solid}.avue-echart-flop__item--none{padding:0!important;border-width:0!important;background-color:transparent!important}.avue-echart-map{position:relative}.avue-echart-map__bg{position:absolute;top:0;left:0}.avue-echart-map__box{position:relative}.avue-echart-map__location{position:absolute;background-color:red;width:10px;height:10px}.avue-echart-map__location:hover{background-color:green}.avue-form__mobile{padding-bottom:20px;background-color:#f0f0f0}.avue-form__mobile-menu{margin-top:30px;padding:0 5px}.avue-form__mobile .van-cell{padding:10px 15px 10px 20px}.avue-form__mobile .van-cell--required::before{top:12px}.avue-form__mobile .van-cell:not(:last-child)::after{display:none}.avue-form__mobile .van-cell-group{background-color:transparent}.avue-form__mobile .van-switch{display:block;float:right}.avue-form__mobile .van-cell__title{width:80px;-webkit-box-flex:inherit;-ms-flex:inherit;flex:inherit}.avue-form__mobile .van-cell__value{font-size:13px;color:#333}.avue-upload__mobile-upload{margin-top:-8px;width:70px;height:70px;background-color:#fbfdff;border:1px dashed #ccc;border-radius:3px;line-height:80px;text-align:center}.avue-upload__mobile-upload i{color:#666;font-size:24px}.avue-upload__mobile-list{padding:10px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.avue-upload__mobile-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;width:100%;height:100%;left:0;top:0;color:#fff;background-color:rgba(0,0,0,.2);z-index:1024;border-radius:5px}.avue--detail .el-radio,.avue--detail .el-radio .el-radio__inner,.avue-canvas{display:none}.avue-upload__mobile-menu i{margin:0 5px}.avue-upload__mobile-item{position:relative;margin-right:8px;margin-bottom:10px;width:70px;height:70px;border:1px solid #eee;border-radius:5px}.avue-upload__mobile-item img{width:100%;height:100%;border-radius:5px}body{font-family:Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}*{outline:0}.avue-ghost{opacity:.5;background:#c8ebfb}.avue--disabled{color:#ccc}.avue--detail .el-input.is-disabled .el-input__inner,.avue--detail .el-range-editor.is-disabled,.avue--detail .el-range-editor.is-disabled input,.avue--detail .el-textarea.is-disabled .el-textarea__inner{color:#606266;background-color:#fff}.avue--detail .hover-row td{background-color:#fff!important}.avue--detail .el-input-group__append,.avue--detail .el-input-group__prepend{background-color:transparent;border:none}.avue--detail .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#606266}.avue--detail .el-input__inner,.avue--detail .el-textarea__inner{border:none}.avue--detail .el-input__inner::-webkit-input-placeholder,.avue--detail .el-textarea__inner::-webkit-input-placeholder{color:transparent!important}.avue--detail .el-input__inner::-moz-placeholder,.avue--detail .el-textarea__inner::-moz-placeholder{color:transparent!important}.avue--detail .el-input__inner::-ms-input-placeholder,.avue--detail .el-textarea__inner::-ms-input-placeholder{color:transparent!important}.avue--detail .el-radio .is-disabled.is-checked,.avue--detail .el-radio.is-checked{display:inline-block;color:#606266}.avue--detail .el-radio .is-disabled.is-checked .el-radio__label,.avue--detail .el-radio.is-checked .el-radio__label{padding-left:14px;color:#606266;font-weight:400;font-size:14px}.avue--detail .el-checkbox{display:none}.avue--detail .el-checkbox .is-disabled.is-checked,.avue--detail .el-checkbox.is-checked{display:inline-block;color:#606266}.avue--detail .el-checkbox .is-disabled.is-checked .el-checkbox__label,.avue--detail .el-checkbox.is-checked .el-checkbox__label{padding-left:14px;color:#606266;font-weight:400;font-size:14px}.avue--detail .el-checkbox .el-checkbox__inner,.avue--detail .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.avue--detail .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before,.avue--detail .el-input__suffix{display:none}.avue--view .el-input.is-disabled .el-input__inner,.avue--view .el-textarea.is-disabled .el-textarea__inner{background-color:#fff;border-color:#dcdfe6;color:#606266}.avue-grid{position:absolute;top:0;left:0;width:100%;height:100%;background-size:20px 20px,20px 20px;background-image:linear-gradient(rgba(0,0,0,.1) 1px,transparent 0),linear-gradient(90deg,rgba(0,0,0,.1) 1px,transparent 0)}.avue-mask{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(55,55,55,.6);height:100%;z-index:1000}.avue--card{-webkit-box-shadow:2px 1px 8px rgba(0,0,0,.15);box-shadow:2px 1px 8px rgba(0,0,0,.15);border-radius:5px}.avue-dialog .el-dialog{border-radius:2px}.avue-dialog .el-dialog__title,.avue-dialog .el-drawer__header{color:rgba(0,0,0,.85);font-weight:500;word-wrap:break-word}.el-select-dropdown .el-tree-node__label,.el-select-dropdown__item.selected{font-weight:400}.avue-dialog .el-drawer__header{margin:0;min-height:20px;padding:16px 10px 16px 24px;border-bottom:1px solid #f0f0f0}.avue-dialog .el-drawer__body{padding:30px 10px}.avue-dialog .el-dialog__footer{padding:10px 16px;border-top:1px solid #f0f0f0}.avue-dialog .el-dialog__header{padding:16px 24px;border-bottom:1px solid #f0f0f0}.avue-dialog iframe{width:100%;height:100%;border:0;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.avue-queue--block{display:inline-block}.avuex-opacity{opacity:0}.avuex-opacity--active{opacity:1}.avue-cell{border-top:1px solid #eee;background-color:#fff}.avue-cell-group{padding-top:10px}.avue-cell--row{margin-bottom:10px;border-bottom:1px solid #eee}.avue-cell__tags{margin-right:10px}.avue-cell__tip{margin-left:10px;font-size:12px;color:#999}.avue-cell__title{margin:0;padding:5px 15px 5px 20px;font-size:14px;color:#323233;line-height:24px}.avue-cell__title+.van-cell-group{padding-left:5px}.avue-cell__title--required{position:relative}.avue-cell__title--required::before{content:'*';position:absolute;left:7px;top:7px;font-size:14px;color:#f44}.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .3s;transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.avue-input__content{position:relative}.avue-input__tip{position:absolute;bottom:5px;right:20px;color:#999}.avue-input__tip--input{top:1px;right:28px;z-index:2}.avue-crud .avue-input-number,.avue-crud .el-cascader,.avue-crud .el-date-editor.el-input,.avue-crud .el-date-editor.el-input__inner,.avue-crud .el-select,.avue-form .avue-input-number,.avue-form .el-cascader,.avue-form .el-date-editor.el-input,.avue-form .el-date-editor.el-input__inner,.avue-form .el-select{width:100%!important}.avue-crud .el-input-number .el-input__inner,.avue-form .el-input-number .el-input__inner{text-align:left}.avue-crud .avue-crud__left .el-button+.el-button,.avue-crud .avue-crud__right .el-button+.el-button,.avue-form .avue-crud__left .el-button+.el-button,.avue-form .avue-crud__right .el-button+.el-button{margin-left:0}.avue-crud .avue-crud__left .el-button,.avue-crud .avue-crud__right .el-button,.avue-form .avue-crud__left .el-button,.avue-form .avue-crud__right .el-button{margin-right:8px;margin-bottom:8px}.avue-crud .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content,.avue-form .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{color:#409EFF}.avue-crud .el-tree-node__label,.avue-form .el-tree-node__label{margin-left:8px}.avue-crud .el-input__inner,.avue-form .el-input__inner{height:38px;line-height:38px}.avue-crud .el-range-editor--small,.avue-form .el-range-editor--small{height:32px;line-height:32px}.avue-crud .el-range-editor--mini,.avue-form .el-range-editor--mini{height:28px;line-height:28px}.avue-crud .el-input--small input,.avue-form .el-input--small input{height:32px;line-height:32px}.avue-crud .el-input--mini input,.avue-form .el-input--mini input{height:28px;line-height:28px}.avue-crud .el-table--medium td,.avue-form .el-table--medium td{padding:7px 0!important}.avue-crud .el-tooltip__popper,.avue-form .el-tooltip__popper{max-width:60%}.avue-crud .el-dropdown-menu__item,.avue-form .el-dropdown-menu__item{line-height:25px}.avue-crud .el-table-filter__list,.avue-form .el-table-filter__list{width:100%;height:300px;overflow-y:auto}.el-form-item--mini .el-color-picker--mini,.el-form-item--mini .el-color-picker--mini .el-color-picker__trigger{width:23px;height:23px}.el-dropdown-menu .el-button--text{width:100%!important}.el-pagination__editor.el-input .el-input__inner{line-height:28px}.el-drawer__body{height:100%}.el-checkbox:last-of-type{margin-right:8px}.is-error .el-input-number__decrease,.is-error .el-input-number__increase,.is-success .el-input-number__decrease,.is-success .el-input-number__increase{right:25px!important}.el-input-number__decrease,.el-input-number__increase{background-color:transparent;border-left:none!important;color:#c0c4cc!important;font-size:16px!important}.el-input-number__increase{border-bottom:none!important}.el-table colgroup.gutter,.el-table th.gutter{display:table-cell!important}.el-transfer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-tree-node.is-current>.el-tree-node__content{color:#409eff;background-color:#F5F7FA}.el-transfer-panel__item{width:100%}.el-select-dropdown .el-scrollbar .el-scrollbar__view .el-select-dropdown__item{height:auto;padding:0}.el-select-dropdown .el-scrollbar .el-scrollbar__view .el-select-dropdown__item>span{padding:0 20px}.el-select-dropdown ul li>>>.el-tree .el-tree-node__content{height:auto;padding:0 20px}.el-select-dropdown .el-tree>>>.is-current .el-tree-node__label{color:#409EFF;font-weight:700}.el-select-dropdown .el-tree>>>.is-current .el-tree-node__children .el-tree-node__label{color:#606266;font-weight:400}.el-form-item.is-error .avue-dynamic{border:1px solid #F56C6C;border-radius:3px}.avue-theme--dark body{background:#000}.avue-theme--dark .el-pagination.is-background .btn-next,.avue-theme--dark .el-pagination.is-background .btn-prev,.avue-theme--dark .el-pagination.is-background .el-pager li{background-color:#151518;color:#525256;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #313135}.avue-theme--dark .el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#151518;border-color:#409EFF}.avue-theme--dark .el-cascader-menu{border-right:solid 1px #313135}.avue-theme--dark .el-select-dropdown.is-multiple .el-select-dropdown__item.selected,.avue-theme--dark .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#151518}.avue-theme--dark .el-cascader__dropdown,.avue-theme--dark .el-input__inner,.avue-theme--dark .el-range-input,.avue-theme--dark .el-select-dropdown{background-color:#151518;color:#999;border:1px solid #313135}.avue-theme--dark .el-cascader__dropdown:hover,.avue-theme--dark .el-input__inner:hover,.avue-theme--dark .el-range-input:hover,.avue-theme--dark .el-select-dropdown:hover{border-color:#409EFF}.avue-theme--dark .el-cascader__dropdown::-webkit-input-placeholder,.avue-theme--dark .el-input__inner::-webkit-input-placeholder,.avue-theme--dark .el-range-input::-webkit-input-placeholder,.avue-theme--dark .el-select-dropdown::-webkit-input-placeholder{color:#525256}.avue-theme--dark .el-cascader__dropdown::-moz-placeholder,.avue-theme--dark .el-input__inner::-moz-placeholder,.avue-theme--dark .el-range-input::-moz-placeholder,.avue-theme--dark .el-select-dropdown::-moz-placeholder{color:#525256}.avue-theme--dark .el-cascader__dropdown:-moz-placeholder,.avue-theme--dark .el-input__inner:-moz-placeholder,.avue-theme--dark .el-range-input:-moz-placeholder,.avue-theme--dark .el-select-dropdown:-moz-placeholder{color:#525256}.avue-theme--dark .el-cascader__dropdown:-ms-input-placeholder,.avue-theme--dark .el-input__inner:-ms-input-placeholder,.avue-theme--dark .el-range-input:-ms-input-placeholder,.avue-theme--dark .el-select-dropdown:-ms-input-placeholder{color:#525256}.avue-theme--dark .el-form-item__label{color:#9a9a9f}.avue-theme--dark .el-switch__core{background:#151518;border-color:#151518}.avue-theme--dark .avue-group__item{background-color:#000}.avue-theme--dark .el-table--border,.avue-theme--dark .el-table--group{border-color:#313135}.avue-theme--dark .el-table__body tr.current-row>td,.avue-theme--dark .el-table__body tr.hover-row>td{background-color:#151518}.avue-theme--dark .el-table--border td,.avue-theme--dark .el-table--border th,.avue-theme--dark .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-color:#999}.avue-theme--dark .avue-crud .el-table th,.avue-theme--dark .el-table,.avue-theme--dark .el-table th,.avue-theme--dark .el-table tr,.avue-theme--dark .el-table__fixed-footer-wrapper tbody td,.avue-theme--dark .el-table__footer-wrapper tbody td,.avue-theme--dark .el-table__header-wrapper tbody td{background-color:#151518;color:#999;border-color:#999}@media screen and (max-width:992px){.el-dialog__footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-button+.el-button{margin-left:0}.avue-upload__avatar,.avue-upload__icon,.el-upload--picture-card,.el-upload-list--picture-card .el-upload-list__item{width:100px;height:100px;line-height:100px}.avue-crud .el-form-item,.avue-crud__title .avue-date__radio,.avue-crud__title .avue-date__radio .el-radio-group .el-radio-button__inner,.avue-crud__title .avue-date__radio .el-radio-group label{width:100%}.avue-tip{display:none}.avue-crud__menu,.avue-crud__title{display:block!important}.avue-crud .el-form-item__label{-webkit-box-flex:1;-ms-flex:1;flex:1}.avue-crud .el-form-item__content{-webkit-box-flex:5;-ms-flex:5;flex:5}.avue-crud__searchMenu{text-align:center}.avue-crud__title p{margin-bottom:20px}.avue-crud__title .avue-date__group{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.avue-crud__title .avue-date__date{display:none}.avue-crud__title .avue-date__radio .el-radio-group{display:-webkit-box;display:-ms-flexbox;display:flex}.avue-crud__title .avue-date__radio .el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0;border-right:1px solid #dcdfe6}}#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #29d,0 0 5px #29d;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
\ No newline at end of file
......@@ -13,6 +13,7 @@ import { utilServiceRegister } from '@/utilservice/util-service-register';
import { entityServiceRegister } from '@/service/entity-service-register';
import { counterServiceRegister } from '@/counter/counter-service-register';
import { codeListRegister } from '@codelist/codelist-register';
import { messageServiceRegister } from '@/message/message-service-register';
import InputBox from './components/input-box/input-box.vue'
import AppKeepAlive from './components/app-keep-alive/app-keep-alive.vue'
......@@ -87,11 +88,15 @@ import ActionTimeline from './components/action-timeline/action-timeline.vue'
import CronEditor from './components/cron-editor/cron-editor.vue'
import AppMessagePopover from './components/app-message-popover/app-message-popover.vue'
import AppPanelField from './components/app-panel-field/app-panel-field.vue'
import AppPanelItem from './components/app-panel-item/app-panel-item.vue'
import AppPanelButton from './components/app-panel-button/app-panel-button.vue'
import AppDepartmentPersonnel from './components/app-department-personnel/app-department-personnel.vue'
import DiskFileUpload from './components/disk-file-upload/disk-file-upload.vue'
import AvueCustomForm from './components/avue-custom-form/avue-custom-form.vue'
import DiskImageUpload from './components/disk-image-upload/disk-image-upload.vue'
import AppFormPart from './components/app-form-part/app-form-part.vue'
import AppAlert from './components/app-alert/app-alert.vue'
import AppAlertGroup from './components/app-alert-group/app-alert-group.vue'
import AppRawItem from './components/app-rawitem/app-rawitem.vue'
// 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister;
......@@ -105,6 +110,8 @@ window['entityServiceRegister'] = entityServiceRegister;
window['counterServiceRegister'] = counterServiceRegister;
// 全局挂载代码表服务注册中心
window['codeListRegister'] = codeListRegister;
// 全局挂载视图消息服务注册中心
window['messageServiceRegister'] = messageServiceRegister;
export const AppComponents = {
install(v: any, opt: any) {
......@@ -118,7 +125,7 @@ export const AppComponents = {
v.prototype.$viewTool = ViewTool;
v.prototype.$uiActionTool = UIActionTool;
v.component('app-department-personnel',AppDepartmentPersonnel);
v.component('app-panel-item',AppPanelItem);
v.component('app-panel-button',AppPanelButton);
v.component('app-panel-field',AppPanelField);
v.component('app-full-scren',AppFullScren);
v.component('app-lock-scren',AppLockScren);
......@@ -198,5 +205,9 @@ export const AppComponents = {
v.component('disk-file-upload', DiskFileUpload);
v.component('avue-custom-form', AvueCustomForm);
v.component('disk-image-upload', DiskImageUpload);
v.component('app-form-part', AppFormPart);
v.component('app-alert', AppAlert);
v.component('app-alert-group', AppAlertGroup);
v.component('app-rawitem',AppRawItem);
},
};
\ No newline at end of file
import store from '@/store';
import EntityService from '@/service/entity-service';
/**
* 动态代码表服务类
*
* @export
* @class CodeListService
*/
export default class CodeListService {
/**
* Vue 状态管理器
*
* @private
* @type {(any | null)}
* @memberof CodeListService
*/
private $store: any;
constructor(opts: any = {}) {
this.$store = store;
}
/**
* 获取状态管理器
*
* @returns {(any | null)}
* @memberof CodeListService
*/
public getStore(): any {
return this.$store;
}
/**
* 动态代码表缓存(加载中)
*
* @type {Map<string,any>}
* @memberof CodeListService
*/
public static codelistCache:Map<string,any> = new Map();
/**
* 动态代码表缓存(已完成)
*
* @type {Map<string,any>}
* @memberof CodeListService
*/
public static codelistCached:Map<string,any> = new Map();
/**
* 数据服务基类
*
* @type {Minorentity}
* @memberof CodeListService
*/
public entityService:EntityService = new EntityService();
/**
* 获取代码表服务
*
* @protected
* @param {string} name 实体名称
* @returns {Promise<any>}
* @memberof EntityService
*/
public getService(name: string): Promise<any> {
return (window as any)['codeListRegister'].getService(name);
}
/**
* 获取静态代码表
*
* @param {string} tag 代码表标识
* @returns {Promise<any[]>}
* @memberof CodeListService
*/
public getStaticItems(tag: string):Promise<any[]>{
return new Promise((resolve:any,reject:any) =>{
const codelist = this.$store.getters.getCodeList(tag);
if (codelist) {
let items: Array<any> = [...JSON.parse(JSON.stringify(codelist.items))];
resolve(items);
}
})
}
/**
* 获取预定义代码表
*
* @param {string} tag 代码表标识
* @returns {Promise<any[]>}
* @memberof CodeListService
*/
public getPredefinedItems(tag: string,data?: any, isloading?: boolean):Promise<any[]>{
return new Promise((resolve:any,reject:any) =>{
if(CodeListService.codelistCached.get(`${tag}`)){
let items:any = CodeListService.codelistCached.get(`${tag}`).items;
if(items.length >0) resolve(items);
}
const callback:Function = (tag:string,promise:Promise<any>) =>{
promise.then((res:any) =>{
let result:any = res.data;
if(result.items && result.items.length > 0){
CodeListService.codelistCached.set(`${tag}`,{items:result.items});
return resolve(result.items);
}else{
return resolve([]);
}
}).catch((result:any) =>{
return reject(result);
})
}
// 加载中,UI又需要数据,解决连续加载同一代码表问题
if(CodeListService.codelistCache.get(`${tag}`)){
callback(tag,CodeListService.codelistCache.get(`${tag}`));
}else{
let result:Promise<any> = this.entityService.getPredefinedCodelist(tag);
CodeListService.codelistCache.set(`${tag}`,result);
callback(tag,result);
}
})
}
/**
* 获取动态代码表
*
* @param {string} tag 代码表标识
* @param {string} context
* @returns {Promise<any[]>}
* @memberof CodeListService
*/
public getItems(tag: string,context:any = {}, data?: any, isloading?: boolean): Promise<any[]> {
let _this: any = this;
if(context && context.srfsessionid){
delete context.srfsessionid;
}
return new Promise((resolve:any,reject:any) =>{
this.getService(tag).then((codelist:any) =>{
if(Object.is(codelist.predefinedType,"RUNTIME")){
this.getPredefinedItems(tag).then((res:any) =>{
resolve(res);
})
return;
}
let isEnableCache:boolean = codelist.isEnableCache;
let cacheTimeout:any = codelist.cacheTimeout;
// 启用缓存
if(isEnableCache){
const callback:Function = (context:any ={},data:any ={},tag:string,promise:Promise<any>) =>{
promise.then((result:any) =>{
if(result.length > 0){
CodeListService.codelistCached.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,{items:result});
CodeListService.codelistCache.delete(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`);
return resolve(result);
}else{
return resolve([]);
}
}).catch((result:any) =>{
return reject(result);
})
}
// 加载完成,从本地缓存获取
if(CodeListService.codelistCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
let items:any = CodeListService.codelistCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`).items;
if(items.length >0){
if(new Date().getTime() <= codelist.getExpirationTime()){
return resolve(items);
}
}
}
if (codelist) {
// 加载中,UI又需要数据,解决连续加载同一代码表问题
if(CodeListService.codelistCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
callback(context,data,tag,CodeListService.codelistCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`));
}else{
let result:Promise<any> = codelist.getItems(context,data,isloading);
CodeListService.codelistCache.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,result);
codelist.setExpirationTime(new Date().getTime() + cacheTimeout);
callback(context,data,tag,result);
}
}
}else{
if (codelist) {
codelist.getItems(context,data,isloading).then((result:any) =>{
resolve(result);
}).catch((error:any) =>{
Promise.reject([]);
})
}else{
return Promise.reject([]);
}
}
}).catch((error:any) =>{
console.warn("获取代码表异常");
return Promise.reject([]);
})
})
}
}
\ No newline at end of file
<template>
<div class="app-alert-group">
<template v-for="(item, index) in items">
<app-alert
:key="index"
:tag="item.tag"
:position="item.position"/>
</template>
</div>
</template>
<script lang="ts">
import {Vue, Component, Prop} from 'vue-property-decorator';
import ViewMessageGroupService from '@/message/view-message-group-service';
@Component({})
export default class AppAlertGroup extends Vue {
/**
* 视图消息组服务
*
* @type {any}
* @memberof AppAlertGroup
*/
public viewMessageGroupService = ViewMessageGroupService.getInstance();
/**
* 视图消息组tag
*
* @type {any}
* @memberof AppAlertGroup
*/
@Prop() infoGroup: any;
/**
* 视图消息组显示位置
*
* @type {any}
* @memberof AppAlertGroup
*/
@Prop() position: any;
/**
* 当前位置视图消息集合
*
* @type {any}
* @memberof AppAlertGroup
*/
public items: any[] = [];
/**
* Vue生命周期
*
* @memberof AppAlertGroup
*/
public created() {
if(this.infoGroup) {
this.getItems();
}
}
/**
* 获取当前位置视图消息集合
*
* @memberof AppAlertGroup
*/
public getItems() {
this.viewMessageGroupService.getViewMessageDetailsByTag(this.infoGroup).then((response: any) => {
if(response) {
response.forEach((data: any) => {
if(this.position && Object.is(this.position, data.position)) {
this.items.push(data);
}
if(Object.is('TOP', this.position) && Object.is('POPUP', data.position)) {
this.items.push(data);
}
})
}
}).catch(error => {
console.log(error);
});
}
}
</script>
\ No newline at end of file
.el-message {
.el-message__content {
.title {
padding-bottom: 10px;
}
}
}
.app-alert-group {
.el-alert {
margin: 5px 0px;
}
}
\ No newline at end of file
<template>
<div class="app-alert">
<template v-if="items && items.length > 0">
<template v-for="(item, index) in items">
<template v-if="item.hasContent && !Object.is('POPUP', item.position)">
<el-alert
:key="index"
v-show="item.showState"
:title="item.title"
:type="item.type"
:closable="item.closable"
@close="alertClose(item)">
<template slot>
<span v-html="item.content"></span>
</template>
</el-alert>
</template>
</template>
</template>
</div>
</template>
<script lang="ts">
import {Vue, Component, Prop} from 'vue-property-decorator';
import ViewMessageService from '@/message/view-message-service';
@Component({})
export default class AppAlert extends Vue {
/**
* 视图消息标识
*
* @type {any}
* @memberof AppAlert
*/
@Prop() tag: any;
/**
* 显示位置
*
* @type {any}
* @memberof AppAlert
*/
@Prop() position: any;
/**
* 视图消息对象
*
* @type {any}
* @memberof AppAlert
*/
public items: any[]= [];
/**
* 视图消息服务
*
* @type {ViewMessageService}
* @memberof AppAlert
*/
public viewMessageService = ViewMessageService.getInstance();
/**
* Vue生命周期
*
* @memberof AppAlert
*/
public created() {
this.getData().then((result:any) =>{
if(!this.items) {
return;
}
})
}
/**
* 获取视图消息对象
*
* @memberof AppAlert
*/
public async getData() {
let response: any = await this.viewMessageService.getViewMessageByTag(this.tag, null, null)
if(response && response.length > 0) {
response.forEach((item: any) => {
let tempData: any = JSON.parse(JSON.stringify(item));
if(!tempData.type) {
tempData.type = "info";
}
// 判断是否存在内容
this.handleItemHasContent(tempData);
tempData.closable = tempData.isEnableRemove;
let flag = this.handleItemCloseMode(tempData);
this.handleItemPosition(tempData, flag);
this.items.push(tempData);
});
}
}
/**
* 处理数据项是否存在内容
*
* @memberof AppAlert
*/
public handleItemHasContent(data: any) {
data.hasContent = true;
if(!data.title && !data.content) {
data.hasContent = false;
}
}
/**
* 处理数据关闭模式
*
* @memberof AppAlert
*/
public handleItemCloseMode(data: any) {
let flag = true;
data.showState = true;
if(data.closeMode || data.closeMode == 0) {
if(data.closeMode == 1) {
const id = this.$store.getters.getViewMessage(data.codename);
if(id) {
data.showState = false;
flag = false;
}
}
if(data.closeMode == 0) {
data.closable = false;
}
}
return flag;
}
/**
* 处理数据显示位置
*
* @memberof AppAlert
*/
public handleItemPosition(data: any, flag: boolean) {
if(data.position) {
if(flag && Object.is('POPUP', data.position)) {
const h = this.$createElement;
data.showState = false;
if(Object.is('HTML',data.messageType) && data.hasMessageTemp) {
setTimeout(() => {
this.$message({
customClass: data.codename+","+data.closeMode,
message: h('div',{}, [
h('p',data.title),
h('p',{domProps:{innerHTML: data.content}})
]),
type: data.type,
showClose: data.closable,
onClose: this.alertClose,
})
}, 0)
} else {
setTimeout(() => {
this.$message({
customClass: data.codename+","+data.closeMode,
message: h('div',{}, [
h('p',data.title),
h('p',data.content)
]),
type: data.type,
showClose: data.closable,
onClose: this.alertClose,
})
}, 0)
}
}
}
}
/**
* 视图消息关闭
*
* @memberof AppAlert
*/
public alertClose(data: any) {
if(data.customClass) {
let tempArr: any[] = data.customClass.toString().split(',');
if(tempArr && tempArr.length > 0) {
if(Object.is("1", tempArr[1])) {
const args = { tag: tempArr[0], id: data.customClass };
this.$store.commit('addViewMessage', args);
}
}
}
if(data.closeMode && data.closeMode == 1) {
const args = {tag: data.codename, id: data.id};
this.$store.commit('addViewMessage', args);
}
}
}
</script>
<style lang="less">
@import './app-alert.less';
</style>
\ No newline at end of file
......@@ -8,7 +8,7 @@
<script lang="ts">
import { Component, Vue, Prop, Model, Watch } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
@Component({
})
......
......@@ -48,7 +48,7 @@
<script lang="ts">
import XLSX from 'xlsx';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
import EntityService from '@/service/entity-service';
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { Environment } from '@/environments/environment';
......
......@@ -13,7 +13,7 @@
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
import { Subject } from 'rxjs';
import { Http } from '../../utils';
import CodeListService from '@/service/app/codelist-service';
import CodeListService from "@/codelist/codelist-service";
@Component({})
export default class AppDepartmentPersonnel extends Vue {
......
......@@ -6,7 +6,7 @@
<script lang="ts">
import { Vue, Component, Watch, Prop, Model } from 'vue-property-decorator';
import CodeListService from '@/service/app/codelist-service';
import CodeListService from "@/codelist/codelist-service";
@Component({
})
export default class AppDepartmentSelect extends Vue {
......
......@@ -370,7 +370,7 @@ export default class AppFormDRUIPart extends Vue {
}
}
});
this.refreshDRUIPart();
// this.refreshDRUIPart();
}
/**
......
.app-form-part {
display: block;
}
\ No newline at end of file
<template>
<div class='app-form-part' v-if="loadState">
<avue-form :option="formOption" v-model="formVal"></avue-form>
</div>
</template>
<script lang = 'ts'>
import { Vue, Component, Prop, Watch } from 'vue-property-decorator';
import { Subject, Subscription } from "rxjs";
@Component({
})
export default class AppFormPart extends Vue {
/**
* 系统名称
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public systemCodeName!: string;
/**
* 应用名称
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public appCodeName!: string;
/**
* 实体名称
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public deCodeName!: string;
/**
* 表单代码标识
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public formCodeName!: string;
/**
* 表单成员标识
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public formDetailCodeName!: string;
/**
* 当前表单项名称
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public name!: string;
/**
* 导航上下文
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public context!: any;
/**
* 导航参数
*
* @type {string}
* @memberof AppFormPart
*/
@Prop() public viewparams!: any;
/**
* 表单数据
*
* @type {any}
* @memberof AppFormPart
*/
@Prop() public data: any;
/**
* 表单状态对象
*
* @type {Subject<any>}
* @memberof AppFormPart
*/
@Prop() public formState!: Subject<any>;
/**
* 订阅对象
*
* @protected
* @type {(Subscription | undefined)}
* @memberof AppFormPart
*/
public formStateEvent: Subscription | undefined;
/**
* 远程地址
*
* @protected
* @type {(Subscription | undefined)}
* @memberof AppFormPart
*/
public remoteUrl:string =`/lite/${this.systemCodeName.toLowerCase()}-${this.appCodeName.toLowerCase()}/components/${this.formDetailCodeName.toLowerCase()}`;
/**
* 动态表单配置对象
*
* @type {*}
* @memberof AppFormPart
*/
public formOption:any;
/**
* 当前动态表单绑定值
*
* @type {*}
* @memberof AppFormPart
*/
public curFormValue:any = {};
/**
* 获取动态表单值对象
*
* @type {*}
* @memberof AppFormPart
*/
get formVal(){
return this.curFormValue;
}
/**
* 设置动态表单值对象
*
* @type {*}
* @memberof AppFormPart
*/
set formVal(data:any){
this.$emit("change",{name:this.name,value:data});
}
/**
* 加载数据状态
*
* @type {*}
* @memberof AppFormPart
*/
public loadState:boolean = false;
/**
* 初始化组件(vue生命周期)
*
* @type {Subject<any>}
* @memberof AppFormPart
*/
public created(){
if (this.formState) {
this.formStateEvent = this.formState.subscribe(({ type, data }) => {
if (Object.is("load", type)){
this.loadRemoteFormModel().then((result:any) =>{
this.initStateData(result);
})
}
});
}
}
/**
* 初始化状态数据
*
* @type {Subject<any>}
* @memberof AppFormPart
*/
public initStateData(modelData:any){
this.computedFormVal(modelData);
this.formOption = modelData;
this.loadState = true;
}
/**
* 计算动态表单绑定数据
*
* @type {Subject<any>}
* @memberof AppFormPart
*/
public computedFormVal(modelData:any){
this.curFormValue = {};
if(modelData && modelData.column && modelData.column.length > 0){
modelData.column.forEach((element:any) => {
Object.assign(this.curFormValue,{[element.prop]:null});
});
}
if(Object.keys(this.curFormValue).length > 0){
Object.keys(this.curFormValue).forEach((item:any) =>{
if(this.data && this.data[item]){
this.curFormValue[item] = this.data[item];
}
})
}
}
/**
* 加载动态表单数据模型
*
* @type {Subject<any>}
* @memberof AppFormPart
*/
public loadRemoteFormModel(){
return new Promise((resolve:any,reject:any) =>{
this.$http.get(this.remoteUrl).then((res:any) =>{
if(res.status && res.status == 200){
let result:any = res.data;
resolve(result);
}else{
console.warn("加载动态表单模型数据异常");
}
}).catch((error:any) =>{
console.warn("加载动态表单模型数据异常");
})
})
}
/**
* 销毁组件(vue生命周期)
*
* @type {Subject<any>}
* @memberof AppFormPart
*/
public destroy(){
if(this.formStateEvent){
this.formStateEvent.unsubscribe();
}
}
}
</script>
<style lang = "less">
@import './app-form-part.less';
</style>
\ No newline at end of file
......@@ -21,7 +21,7 @@
<script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
import { Subject } from 'rxjs';
import CodeListService from '@/service/app/codelist-service';
import CodeListService from "@/codelist/codelist-service";
@Component({})
export default class AppGroupSelect extends Vue {
......
.item {
.app-message-popover {
height: 24px;
line-height: 24px;
padding: 0 5px 0 0;
......
<template>
<!-- 消息弹出框绘制开始 -->
<el-badge :is-dot="showIsDot" class="item">
<el-badge :is-dot="showIsDot" class="app-message-popover">
<el-popover
placement="bottom"
trigger="click"
......
......@@ -6,7 +6,7 @@
<script lang = 'ts'>
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
import { Http } from '@/utils';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
import { observable } from 'rxjs';
@Component({})
export default class AppOrgSelect extends Vue {
......
<template>
<div class="app-panel-button">
<Button type="primary" long @click="onClick">
<i v-if="icon" :class="icon"></i>
<span v-if="showCaption" :class="lableStyle">{{caption ? caption : ''}}</span>
</Button>
</div>
</template>
<script lang="ts">
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
@Component({})
export default class AppPanelButton extends Vue {
/**
* 图标
*
* @type {string}
* @memberof AppPanelItem
*/
@Prop() public icon?: string;
/**
* 标题
*
* @type {string}
* @memberof AppPanelItem
*/
@Prop() public caption?: string;
/**
* 显示标题
*
* @type {boolean}
* @memberof AppPanelItem
*/
@Prop() public showCaption?: boolean;
/**
* 标题样式
*
* @type {boolean}
* @memberof AppPanelItem
*/
@Prop() public lableStyle?: string;
/**
* 点击按钮
*
* @param {*} $event
* @memberof AppPanelItem
*/
public onClick($event: any){
this.$emit('onClick',$event);
}
}
</script>
<style lang='less'>
</style>
\ No newline at end of file
......@@ -7,7 +7,7 @@
</template>
<script lang = 'ts'>
import { Component, Vue, Prop, Model,Watch } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
@Component({})
export default class AppRadioGroup extends Vue {
......
<template>
<div>
<span v-if="caption">{{caption}}</span>
<div :class="contentStyle" :style="sizeStyle">
<template v-if="Object.is(contentType,'RAW')">
{{rawContent ? rawContent : ''}}
</template>
<template v-else-if="Object.is(contentType,'HTML')">
{{htmlContent ? htmlContent : ''}}
</template>
<template v-else-if="Object.is(contentType,'IMAGE')">
<i :class="imageClass ? imageClass : ''"></i>
</template>
</div>
</div>
</template>
<script lang='ts'>
import { Component, Vue, Prop, Model, Watch } from "vue-property-decorator";
@Component({})
export default class AppRawItem extends Vue {
/**
* 内容类型
*
* @type {string}
* @memberof AppRawItem
*/
@Prop() public contentType!: string;
/**
* 直接内容
*
* @type {strin}
* @memberof AppRawItem
*/
@Prop() public rawContent?: string;
/**
* html内容
*
* @type {strin}
* @memberof AppRawItem
*/
@Prop() public htmlContent?: string;
/**
* html内容
*
* @type {strin}
* @memberof AppRawItem
*/
@Prop() public imageClass?: string;
/**
* 标题
*
* @type {string}
* @memberof AppRawItem
*/
@Prop() public caption?: string;
/**
* 内容样式
*
* @type {strin}
* @memberof AppRawItem
*/
@Prop() public contentStyle!: string;
/**
* 内容宽高
*
* @type {strin}
* @memberof AppRawItem
*/
@Prop() public sizeStyle!: string;
}
</script>
<style lang='less'>
</style>
\ No newline at end of file
......@@ -21,7 +21,7 @@
<script lang="ts">
import { Vue, Component, Watch, Prop, Model } from "vue-property-decorator";
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
import { ElSelect } from "element-ui/types/select";
@Component({})
......
<template>
<div v-if="formOption!=null" class="app-custom-form">
<avue-form :option="formOption" v-model="formvalue"></avue-form>
<avue-form :option="formOption" v-model="formVal"></avue-form>
</div>
</template>
<script lang="ts">
import {Vue,Component,Prop,Model,Emit,Watch,} from "vue-property-decorator";
import { Subject, Subscription } from "rxjs";
import {
Vue,
Component,
Prop,
Model,
Emit,
Watch,
} from "vue-property-decorator";
import { Subject, Subscription } from "rxjs";
@Component({})
export default class AvueCustomForm extends Vue {
/**
......@@ -16,8 +23,7 @@ export default class AvueCustomForm extends Vue {
* @type {any}
* @memberof AvueCustomForm
*/
@Prop()
public options?: any;
@Prop() public options?: any;
/**
* 是否需要转换为string类型
......@@ -25,8 +31,7 @@ export default class AvueCustomForm extends Vue {
* @type {boolean}
* @memberof AvueCustomForm
*/
@Prop()
public isParseString?: boolean;
@Prop() public isParseString?: boolean;
/**
* 远端地址
......@@ -42,7 +47,7 @@ export default class AvueCustomForm extends Vue {
* @type {any}
* @memberof AvueCustomForm
*/
@Prop() public value: any;
@Model('change') public value: any;
/**
* 是否将表单数据通过组件配置带入组件中
......@@ -52,33 +57,13 @@ export default class AvueCustomForm extends Vue {
*/
@Prop() public isFormData?: boolean;
/**
* 监听事件
*
* @param {*} newVal
* @param {*} oldVal
* @memberof AvueCustomForm
*/
@Watch("value")
public onValueChange(newVal: any, oldVal: any) {
if (newVal) {
let obj: any = {};
if (newVal && newVal != null) {
if (this.isParseString) obj = JSON.parse(newVal);
else obj = newVal;
}
if (obj) this.formvalue = JSON.parse(JSON.stringify(obj));
}
}
/**
* 表单数据
*
* @type {any}
* @memberof AvueCustomForm
*/
@Prop()
public formData: any;
@Prop() public formData: any;
/**
* 表单状态
......@@ -89,29 +74,46 @@ export default class AvueCustomForm extends Vue {
@Prop() public formState!: Subject<any>;
/**
* 视图状态事件
* 获取组件值
*
* @protected
* @type {(Subscription | undefined)}
* @return {any}
* @memberof AvueCustomForm
*/
protected formStateEvent: Subscription | undefined;
get formVal() {
let obj: any = {};
if (this.value) {
if (this.isParseString) obj = JSON.parse(this.value);
else obj = this.value;
}
return obj;
}
/**
* 当前组件配置设置属性
* 设置组件值
*
* @type {any}
* @param value
* @memberof AvueCustomForm
*/
public formOption: any = null;
set formVal(value: any) {
this.setValue(value);
}
/**
* 订阅对象
*
* @protected
* @type {(Subscription | undefined)}
* @memberof AvueCustomForm
*/
protected formStateEvent: Subscription | undefined;
/**
* avue-form绑定值
* 当前组件配置设置属性
*
* @type {any}
* @memberof AvueCustomForm
*/
public formvalue: any = {};
public formOption: any = null;
/**
* avue-form默认配置
......@@ -189,10 +191,8 @@ export default class AvueCustomForm extends Vue {
if (this.url && this.options == null) {
const get: Promise<any> = this.$http.get(this.url);
get.then((response: any) => {
if (response && response.data && response.data.view_config) {
that.formOption = JSON.parse(response.data.view_config)[
"formConfig"
];
if (response && response.data) {
that.formOption = response.data;
if (this.isFormData) that.getFormData();
}
});
......@@ -214,7 +214,7 @@ export default class AvueCustomForm extends Vue {
public getFormData() {
let that: any = this;
let obj: any;
if (this.value) obj = JSON.parse(JSON.stringify(this.value));
if (this.formVal) obj = JSON.parse(JSON.stringify(this.formVal));
else obj = {};
let recursionOption: any = function (group: any) {
group.column.forEach((gItem: any) => {
......@@ -242,5 +242,17 @@ export default class AvueCustomForm extends Vue {
if (this.isParseString) this.$emit("change", JSON.stringify(value));
else this.$emit("change", value);
}
/**
* 销毁组件(vue生命周期)
*
* @type {Subject<any>}
* @memberof AvueCustomForm
*/
public destroy(){
if(this.formStateEvent){
this.formStateEvent.unsubscribe();
}
}
}
</script>
\ No newline at end of file
......@@ -13,7 +13,7 @@
<script lang="ts">
import { Vue, Component, Prop, Model, Watch } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
@Component({})
export default class CodeList extends Vue {
......
......@@ -14,7 +14,7 @@
<script lang="ts">
import { Vue, Component, Watch, Prop, Model } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
@Component({
})
......
......@@ -24,7 +24,7 @@
<script lang="ts">
import { Vue, Component, Prop, Model } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
import { Util } from '@/utils';
@Component({
})
......
......@@ -17,8 +17,9 @@
<script lang="ts">
import { Vue, Component, Watch, Prop, Model } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
import { Util } from '@/utils';
import { Subject, Subscription } from 'rxjs';
@Component({
})
......@@ -84,6 +85,23 @@ export default class DropDownList extends Vue {
*/
@Prop() public data?: any;
/**
* 表单状态对象
*
* @type {Subject<any>}
* @memberof AppEmbedPicker
*/
@Prop() public formState!: Subject<any>
/**
* 订阅对象
*
* @protected
* @type {(Subscription | undefined)}
* @memberof SelectType
*/
protected formStateEvent: Subscription | undefined;
/**
* 监听表单数据
*
......@@ -241,6 +259,23 @@ export default class DropDownList extends Vue {
* @memberof DropDownList
*/
public created() {
if(this.formState) {
this.formStateEvent = this.formState.subscribe(({ type, data }) => {
if (Object.is('load', type)) {
this.loadData();
}
});
}else{
this.loadData();
}
}
/**
* 加载数据
*
* @memberof DropDownList
*/
public loadData(){
if(this.tag && Object.is(this.codelistType,"STATIC")){
const codelist = this.$store.getters.getCodeList(this.tag);
if (codelist) {
......@@ -372,6 +407,17 @@ export default class DropDownList extends Vue {
}
})
}
/**
* vue 生命周期
*
* @memberof DropDownList
*/
public destroyed() {
if (this.formStateEvent) {
this.formStateEvent.unsubscribe();
}
}
}
</script>
......
......@@ -17,10 +17,10 @@ export default class DataView9Engine extends DataViewEngine {
*/
public load(opts: any = {},isnotify:boolean=false): void {
if(!this.view.isformDruipart){
super.load(opts);
super.load(opts, isnotify);
}else{
if(isnotify){
super.load(opts);
super.load(opts, isnotify);
}
}
}
......
......@@ -45,10 +45,10 @@ export default class GridViewEngine extends MDViewEngine {
*/
public load(opts: any = {},isnotify:boolean=false): void {
if(!this.view.isformDruipart){
super.load(opts);
super.load(opts, isnotify);
}else{
if(isnotify){
super.load(opts);
super.load(opts, isnotify);
}
}
}
......
......@@ -17,10 +17,10 @@ export default class ListView9Engine extends ListViewEngine {
*/
public load(opts: any = {},isnotify:boolean=false): void {
if(!this.view.isformDruipart){
super.load(opts);
super.load(opts, isnotify);
}else{
if(isnotify){
super.load(opts);
super.load(opts, isnotify);
}
}
......
......@@ -78,12 +78,12 @@ export default class MDViewEngine extends ViewEngine {
* @param {*} [opts={}]
* @memberof MDViewEngine
*/
public load(opts: any = {}): void {
public load(opts: any = {}, isnotify: boolean=false): void {
super.load(opts);
if (this.getSearchForm()) {
if (this.getSearchForm() && (this.isLoadDefault || isnotify)) {
const tag = this.getSearchForm().name;
this.setViewState2({ tag: tag, action: 'loaddraft', viewdata: this.view.viewparams });
} else if (this.getMDCtrl() && this.isLoadDefault) {
} else if (this.getMDCtrl() && (this.isLoadDefault || isnotify)) {
const tag = this.getMDCtrl().name;
this.setViewState2({ tag: tag, action: 'load', viewdata: Object.assign(this.view.viewparams,opts) });
} else {
......
......@@ -29,10 +29,10 @@ export default class WFDynaExpGridViewEngine extends GridViewEngine {
return;
}
if(!this.view.isformDruipart){
super.load(opts);
super.load(opts, isnotify);
}else{
if(isnotify){
super.load(opts);
super.load(opts, isnotify);
}
}
})
......
......@@ -4,6 +4,7 @@ import { UtilServiceRegister } from '@/utilservice/util-service-register';
import { EntityServiceRegister } from '@/service/entity-service-register';
import { CounterServiceRegister } from '@/counter/counter-service-register';
import { CodeListRegister } from '@codelist/codelist-register';
import { MessageServiceRegister } from '@/message/message-service-register';
declare global {
interface Window {
uiServiceRegister: UIServiceRegister,
......@@ -11,6 +12,7 @@ declare global {
utilServiceRegister: UtilServiceRegister,
entityServiceRegister: EntityServiceRegister,
counterServiceRegister: CounterServiceRegister,
codeListRegister:CodeListRegister
codeListRegister:CodeListRegister,
messageServiceRegister:MessageServiceRegister
}
}
\ No newline at end of file
/**
* 视图消息
*
* @interface ViewMessage
*/
export interface ViewMessage {
/**
* 视图消息标识
*
* @type {string}
* @memberof ViewMessage
*/
id:string;
/**
* 视图消息名称
*
* @type {string}
* @memberof ViewMessage
*/
name:string;
/**
* 视图消息代码名称
*
* @type {string}
* @memberof ViewMessage
*/
codename:string;
/**
* 视图消息标题
*
* @type {string}
* @memberof ViewMessage
*/
title:string;
/**
* 视图消息内容
*
* @type {string}
* @memberof ViewMessage
*/
content:string;
/**
* 视图消息关闭模式
*
* @type {number}
* @memberof ViewMessage
*/
closeMode:number;
/**
* 视图消息位置
*
* @type {string}
* @memberof ViewMessage
*/
position:string;
/**
* 视图消息类型
*
* @type {string}
* @memberof ViewMessage
*/
type:string;
/**
* 视图消息是否支持删除
*
* @type {boolean}
* @memberof ViewMessage
*/
isEnableRemove:boolean;
/**
* 排序值
*
* @type {number}
* @memberof ViewMessage
*/
order:number;
/**
* 动态模式
*
* @type {string}
* @memberof ViewMessage
*/
dynamicMode:string;
/**
* 消息类型
*
* @type {string}
* @memberof ViewMessage
*/
messageType:string;
}
\ No newline at end of file
/**
* 视图消息服务注册中心
*
* @export
* @class MessageServiceRegister
*/
export class MessageServiceRegister {
/**
* 所有视图消息服务Map
*
* @protected
* @type {*}
* @memberof MessageServiceRegister
*/
protected allMessageService: Map<string, () => Promise<any>> = new Map();
/**
* 已加载视图消息服务Map缓存
*
* @protected
* @type {Map<string, any>}
* @memberof MessageServiceRegister
*/
protected serviceCache: Map<string, any> = new Map();
/**
* Creates an instance of MessageServiceRegister.
* @memberof MessageServiceRegister
*/
constructor() {
this.init();
}
/**
* 初始化
*
* @protected
* @memberof MessageServiceRegister
*/
protected init(): void {
}
/**
* 加载视图消息服务
*
* @protected
* @param {string} codeName
* @returns {Promise<any>}
* @memberof MessageServiceRegister
*/
protected async loadService(codeName: string): Promise<any> {
const service = this.allMessageService.get(codeName);
if (service) {
return service();
}
}
/**
* 获取视图消息服务
*
* @param {string} name
* @returns {Promise<any>}
* @memberof MessageServiceRegister
*/
public async getService(name: string): Promise<any> {
if (this.serviceCache.has(name)) {
return this.serviceCache.get(name);
}
const messageService: any = await this.loadService(name);
if (messageService && messageService.default) {
const instance: any = new messageService.default();
this.serviceCache.set(name, instance);
return instance;
}
}
}
export const messageServiceRegister: MessageServiceRegister = new MessageServiceRegister();
\ No newline at end of file
import { Http } from '@/utils/http/http';
/**
* 视图消息组
*
* @export
* @class ViewMessageGroupService
*/
export default class ViewMessageGroupService {
/**
* 单例变量声明
*
* @private
* @static
* @type {ViewMessageGroupService}
* @memberof ViewMessageGroupService
*/
private static ViewMessageGroup: ViewMessageGroupService;
/**
* 所有视图消息组对象
*
* @private
* @static
* @type {ViewMessageGroupService}
* @memberof ViewMessageGroupService
*/
private static allViewMessageGroup:any;
/**
* 初始化实例
*
* @memberof ViewMessageGroupService
*/
constructor(opts:any = {}){}
/**
* 获取 ViewMessageGroupService 单例对象
*
* @static
* @returns {ViewMessageGroupService}
* @memberof ViewMessageGroupService
*/
public static getInstance(): ViewMessageGroupService {
if (!ViewMessageGroupService.ViewMessageGroup) {
ViewMessageGroupService.ViewMessageGroup = new ViewMessageGroupService();
}
return this.ViewMessageGroup;
}
/**
* 获取视图消息组成员集合
*
* @returns {Promise<any></any>}
* @memberof ViewMessageGroupService
*/
public async getViewMessageDetailsByTag(tag:string):Promise<any>{
if(ViewMessageGroupService.allViewMessageGroup){
return ViewMessageGroupService.allViewMessageGroup[tag]?ViewMessageGroupService.allViewMessageGroup[tag]:[];
}else{
let result:any = await this.loadAllViewMessageGroup();
return result[tag]?result[tag]:[];
}
}
/**
* 加载应用所有视图消息组集合
*
* @returns {Promise<any></any>}
* @memberof ViewMessageGroupService
*/
public loadAllViewMessageGroup():Promise<any>{
return new Promise((resolve:any,reject:any) =>{
Http.getInstance().get('./assets/json/view-message-group.json').then((response: any) => {
if (response && response.status === 200 && response.data) {
ViewMessageGroupService.allViewMessageGroup = response.data;
resolve(response.data);
}
}).catch((error: any) => {
console.log(error);
});
})
}
}
\ No newline at end of file
import { ViewMessage } from '@/interface/message';
import EntityService from '@/service/entity-service';
/**
* 视图消息
*
* @export
* @class ViewMessage
*/
export default class ViewMessageService {
/**
* 单例变量声明
*
* @private
* @static
* @type {ViewMessageService}
* @memberof ViewMessageService
*/
private static ViewMessage: ViewMessageService;
/**
* 实体数据服务对象
*
* @protected
* @type {EntityService}
* @memberof ViewMessageService
*/
protected entityService:EntityService = new EntityService();
/**
* 视图消息标识
*
* @type {string}
* @memberof ViewMessageService
*/
public id:string ="";
/**
* 视图消息名称
*
* @type {string}
* @memberof ViewMessageService
*/
public name:string ="";
/**
* 视图消息代码名称
*
* @type {string}
* @memberof ViewMessageService
*/
public codename:string ="";
/**
* 视图消息标题
*
* @type {string}
* @memberof ViewMessageService
*/
public title:string ="";
/**
* 视图消息内容
*
* @type {string}
* @memberof ViewMessageService
*/
public content:string ="";
/**
* 视图消息关闭模式(0:无关闭,1:默认关闭,2:本次关闭)
*
* @type {number}
* @memberof ViewMessageService
*/
public closeMode:number = 0;
/**
* 视图消息位置
*
* @type {string}
* @memberof ViewMessageService
*/
public position:string ="";
/**
* 视图消息类型
*
* @type {string}
* @memberof ViewMessageService
*/
public type:string = "info";
/**
* 视图消息是否支持删除
*
* @type {boolean}
* @memberof ViewMessageService
*/
public isEnableRemove:boolean = true;
/**
* 视图消息排序值
*
* @type {boolean}
* @memberof ViewMessageService
*/
public order:number = 1;
/**
* 动态模式
*
* @type {string}
* @memberof ViewMessageService
*/
public dynamicMode:string = "STATIC";
/**
* 消息类型(可选值:TEXT/HTML)
*
* @type {string}
* @memberof ViewMessageService
*/
public messageType:string = "TEXT";
/**
* 是否含有消息模板
*
* @type {boolean}
* @memberof ViewMessageService
*/
public hasMessageTemp:boolean = false;
/**
* 视图消息缓存(加载中)
*
* @type {Map<string,any>}
* @memberof ViewMessageService
*/
public static messageCache:Map<string,any> = new Map();
/**
* 视图消息缓存(已完成)
*
* @type {Map<string,any>}
* @memberof ViewMessageService
*/
public static messageCached:Map<string,any> = new Map();
/**
* 初始化实例
*
* @memberof ViewMessageService
*/
constructor(opts: any = {}) {
this.initBasicParam();
}
/**
* 获取 ViewMessageService 单例对象
*
* @static
* @returns {ViewMessageService}
* @memberof ViewMessageService
*/
public static getInstance(): ViewMessageService {
if (!ViewMessageService.ViewMessage) {
ViewMessageService.ViewMessage = new ViewMessageService();
}
return this.ViewMessage;
}
/**
* 初始化基础参数
*
* @memberof ViewMessageService
*/
public initBasicParam(){}
/**
* 获取视图消息服务
*
* @protected
* @param {string} name 视图消息codename
* @returns {Promise<any>}
* @memberof ViewMessageService
*/
public getService(name: string): Promise<any> {
return (window as any)['messageServiceRegister'].getService(name);
}
/**
* 通过tag获取视图消息
*
* @param {tag:string} 视图消息标识
* @param {context:any} 导航上下文
* @param {viewparam:any} 导航参数
* @memberof ViewMessageService
*/
public async getViewMessageByTag(tag:string,context:any = {},viewparam:any = {}){
let messageService:any = await this.getService(tag);
if(messageService.dynamicMode && Object.is(messageService.dynamicMode,"STATIC")){
return messageService.getStaticViewMessage();
}else{
return messageService.getDynamicViewMessage(tag,messageService,context,viewparam);
}
}
/**
* 转化消息模板标题和内容
*
* @memberof ViewMessageService
*/
public translateMessageTemp(target:any,item?:any){
}
/**
* 获取动态模式(静态)类型视图消息
*
* @memberof ViewMessageService
*/
public getStaticViewMessage():Array<ViewMessage>{
let returnViewMessage:ViewMessage ={
id:this.id,
name:this.name,
codename:this.codename,
title:this.title,
content:this.content,
closeMode:this.closeMode,
position:this.position,
type:this.type,
isEnableRemove:this.isEnableRemove,
order:this.order,
dynamicMode:this.dynamicMode,
messageType:this.messageType
};
this.translateMessageTemp(returnViewMessage);
return [returnViewMessage];
}
/**
* 获取动态模式(实体数据集合)类型视图消息
*
* @param {any} tag 视图消息标识
* @param {any} messageService 消息服务
* @param {string} context
* @returns {Promise<any[]>}
* @memberof ViewMessageService
*/
public getDynamicViewMessage(tag:string,messageService: any,context:any = {}, data: any = {}, isloading?: boolean): Promise<any[]> {
if(context && context.srfsessionid){
delete context.srfsessionid;
}
return new Promise((resolve:any,reject:any) =>{
let isEnableCache:boolean = messageService.isEnableCache;
let cacheTimeout:any = messageService.cacheTimeout;
// 启用缓存
if(isEnableCache){
const callback:Function = (context:any ={},data:any ={},tag:string,promise:Promise<any>) =>{
promise.then((result:any) =>{
if(result.length > 0){
ViewMessageService.messageCached.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,{items:result});
ViewMessageService.messageCache.delete(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`);
return resolve(result);
}else{
return resolve([]);
}
}).catch((result:any) =>{
return reject(result);
})
}
// 加载完成,从本地缓存获取
if(ViewMessageService.messageCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
let items:any = ViewMessageService.messageCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`).items;
if(items.length >0){
if(new Date().getTime() <= messageService.getExpirationTime()){
return resolve(items);
}
}
}
if (messageService) {
// 加载中,UI又需要数据,解决连续加载同一代码表问题
if(ViewMessageService.messageCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
callback(context,data,tag,ViewMessageService.messageCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`));
}else{
let result:Promise<any> = messageService.getItems(context,data,isloading);
ViewMessageService.messageCache.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,result);
messageService.setExpirationTime(new Date().getTime() + cacheTimeout);
callback(context,data,tag,result);
}
}
}else{
if (messageService) {
messageService.getItems(context,data,isloading).then((result:any) =>{
resolve(result);
}).catch((error:any) =>{
Promise.reject([]);
})
}else{
return Promise.reject([]);
}
}
})
}
}
\ No newline at end of file
......@@ -33,3 +33,10 @@ mock.onGet('./assets/json/view-config.json').reply((config: any) => {
}
}];
});
// 获取视图消息分组信息
mock.onGet('./assets/json/view-message-group.json').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
return [status,{
}];
});
\ No newline at end of file
......@@ -38,6 +38,14 @@ export class FormItemModel extends FormDetailModel {
*/
public enableCond: number | 0 | 1 | 2 | 3 = 3;
/**
* 是否必填
*
* @type {boolean}
* @memberof FormItemModel
*/
public required:boolean = false;
/**
* Creates an instance of FormItemModel.
* FormItemModel 实例
......@@ -49,6 +57,7 @@ export class FormItemModel extends FormDetailModel {
super(opts);
this.disabled = opts.disabled ? true : false;
this.enableCond = opts.enableCond;
this.required = opts.required;
}
/**
......
......@@ -250,7 +250,9 @@ export default class SDFileEditViewBase extends Vue {
for(let key in this.viewparams){
delete this.viewparams[key];
}
if(typeof this.viewparams == 'string') {
Object.assign(this.viewparams, JSON.parse(this.viewparam));
}
}
}
......@@ -271,7 +273,7 @@ export default class SDFileEditViewBase extends Vue {
_this.engine.load();
});
} else if(!Object.is(newVal, oldVal) && _this.refresh() && Object.is(_this.$util.typeOf(_this.refresh()), 'function')) {
} else if(!Object.is(newVal, oldVal) && _this.refresh && _this.refresh instanceof Function) {
_this.refresh();
}
}
......@@ -439,7 +441,9 @@ export default class SDFileEditViewBase extends Vue {
Object.assign(this.context,this.$store.getters.getAppData().context);
}
if (!this.viewDefaultUsage && this.viewdata && !Object.is(this.viewdata, '')) {
if(typeof this.viewdata == 'string') {
Object.assign(this.context, JSON.parse(this.viewdata));
}
if(this.context && this.context.srfparentdename){
Object.assign(this.viewparams,{srfparentdename:this.context.srfparentdename});
}
......
......@@ -158,7 +158,7 @@ import GridViewEngine from '@engine/view/grid-view-engine';
import SDFileUIService from '@/uiservice/sdfile/sdfile-ui-service';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
@Component({
......@@ -280,7 +280,9 @@ export default class SDFileGridViewBase extends Vue {
for(let key in this.viewparams){
delete this.viewparams[key];
}
if(typeof this.viewparams == 'string') {
Object.assign(this.viewparams, JSON.parse(this.viewparam));
}
}
}
......@@ -301,7 +303,7 @@ export default class SDFileGridViewBase extends Vue {
_this.engine.load();
});
} else if(!Object.is(newVal, oldVal) && _this.refresh() && Object.is(_this.$util.typeOf(_this.refresh()), 'function')) {
} else if(!Object.is(newVal, oldVal) && _this.refresh && _this.refresh instanceof Function) {
_this.refresh();
}
}
......@@ -474,7 +476,9 @@ export default class SDFileGridViewBase extends Vue {
Object.assign(this.context,this.$store.getters.getAppData().context);
}
if (!this.viewDefaultUsage && this.viewdata && !Object.is(this.viewdata, '')) {
if(typeof this.viewdata == 'string') {
Object.assign(this.context, JSON.parse(this.viewdata));
}
if(this.context && this.context.srfparentdename){
Object.assign(this.viewparams,{srfparentdename:this.context.srfparentdename});
}
......
......@@ -5,6 +5,7 @@ import App from '@/App.vue';
import ElementUi from 'element-ui';
import ViewUI from 'view-design';
import ibizLab from 'ibiz-vue-lib';
import axios from "axios";
import { Interceptors } from '@/utils';
import {Print} from '@/utils/print';
import i18n from '@/locale'
......@@ -27,13 +28,18 @@ import { PortletComponent } from '@/portlet-register';
import store from '@/store';
import router from './router';
const win: any = window;
win.axios = axios;
Vue.config.errorHandler = function (err: any, vm: any, info: any) {
console.log(err);
}
Vue.config.productionTip = false;
Vue.use(Print);
Vue.use(ibizLab);
Vue.use(Vuex);
Vue.use(win.AVUE);
Vue.use(VueRouter);;
Vue.use(ElementUi, {
i18n: (key: any, value: any) => i18n.t(key, value)
......
......@@ -170,7 +170,9 @@ export default class SDIndexViewBase extends Vue {
for(let key in this.viewparams){
delete this.viewparams[key];
}
if(typeof this.viewparams == 'string') {
Object.assign(this.viewparams, JSON.parse(this.viewparam));
}
}
}
......@@ -191,7 +193,7 @@ export default class SDIndexViewBase extends Vue {
_this.engine.load();
});
} else if(!Object.is(newVal, oldVal) && _this.refresh() && Object.is(_this.$util.typeOf(_this.refresh()), 'function')) {
} else if(!Object.is(newVal, oldVal) && _this.refresh && _this.refresh instanceof Function) {
_this.refresh();
}
}
......@@ -307,7 +309,9 @@ export default class SDIndexViewBase extends Vue {
Object.assign(this.context,this.$store.getters.getAppData().context);
}
if (!this.viewDefaultUsage && this.viewdata && !Object.is(this.viewdata, '')) {
if(typeof this.viewdata == 'string') {
Object.assign(this.context, JSON.parse(this.viewdata));
}
if(this.context && this.context.srfparentdename){
Object.assign(this.viewparams,{srfparentdename:this.context.srfparentdename});
}
......
import { Http } from '@/utils';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
/**
* 实体服务基类
......
......@@ -47,7 +47,13 @@ export const getLocalData = (state: any) => () => {
* @param state
*/
export const getAppData = (state: any) => () => {
return state.appdata;
let result:any = JSON.parse(JSON.stringify(state.appdata));
if(state.localdata && Object.keys(state.localdata).length >0){
let copyContext:any = result.context?result.context:{};
Object.assign(copyContext,state.localdata);
result.context = copyContext;
}
return result;
}
/**
......@@ -105,3 +111,13 @@ export const getDepData = (state: any) => (srfkey: string) => {
let depData = state.depDataMap[srfkey];
return depData;
}
/**
* 获取视图信息
*
* @param state
*/
export const getViewMessage = (state: any) => (tag: string) => {
let id = state.viewMessage[tag];
return id;
}
\ No newline at end of file
......@@ -29,8 +29,8 @@ export const addCodeLists = (state: any, codelists: any) => {
* @param localdata
*/
export const addLocalData = (state: any, localdata: any = {}) => {
state.localdata = {};
Object.assign(state.localdata, localdata);
localStorage.setItem('localdata',JSON.stringify(state.localdata));
}
/**
......@@ -292,3 +292,15 @@ export const addDepData = (state: any, args: {srfkey: string,depData: any}) => {
state.depDataMap[args.srfkey] = JSON.parse(JSON.stringify(args.depData));
}
}
/**
* 添加视图信息
*
* @param state
* @param args
*/
export const addViewMessage = (state: any, args: { tag: string, id: any }) => {
if(args && args.tag && args.id) {
state.viewMessage[args.tag] = args.id;
}
}
\ No newline at end of file
......@@ -16,4 +16,5 @@ export const rootstate: any = {
viewSplit: {},
orgDataMap:{},
depDataMap:{},
viewMessage: {},
}
\ No newline at end of file
@import '../../node_modules/font-awesome/less/font-awesome.less';
@import'/assets/styles/index.css';
@import '../theme/blue.theme.less';
@import '../theme/dark-blue.theme.less';
@import '../theme/default.theme.less';
......
......@@ -13,5 +13,6 @@
</noscript>
<div id="app"></div>
<script src="./environments/environment.js"></script>
<script src="../assets/js/avue.min.js"></script>
</body>
</html>
......@@ -203,13 +203,13 @@ export default class SDFileUIServiceBase extends UIService {
}
})
for (let i = 0; i <= 1; i++) {
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? curData[this.mainStateFields[0]] : "":"";
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) {
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? curData[this.mainStateFields[1]] : ""}`:strTag;
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) {
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? curData[this.mainStateFields[2]] : ""}`:strTag2;
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
// 判断是否存在
return this.allDeMainStateMap.get(strTag3);
}
......
......@@ -41,10 +41,11 @@ export class AuthGuard {
private constructor() { }
/**
* post请求
* 获取应用数据
*
* @param {string} url url 请求路径
* @param {*} [params={}] 请求参数
* @param {*} [router] 路由对象
* @returns {Promise<any>} 请求相响应对象
* @memberof AuthGuard
*/
......@@ -65,6 +66,9 @@ export class AuthGuard {
}
data = JSON.parse(JSON.stringify(localAppData));
}
if(localStorage.getItem('localdata')){
router.app.$store.commit('addLocalData', JSON.parse(localStorage.getItem('localdata') as string));
}
router.app.$store.commit('addAppData', data);
// 提交统一资源数据
router.app.$store.dispatch('authresource/commitAuthData', data);
......
......@@ -122,6 +122,7 @@ import AppCenterService from "@service/app/app-center-service";
import SDIndexViewService from './sdindex-view-appmenu-service';
import SDIndexViewModel from './sdindex-view-appmenu-model';
import { Environment } from '@/environments/environment';
import AuthService from '@/authservice/auth-service';
@Component({
......@@ -386,6 +387,15 @@ export default class SDIndexViewBase extends Vue implements ControlInterface {
* @memberof SDIndexViewBase
*/
public counterdata: any = {};
/**
* 建构权限服务对象
*
* @type {AuthService}
* @memberof SDIndexViewBase
*/
public authService:AuthService = new AuthService({ $store: this.$store });
/**
* vue 生命周期
*
......@@ -649,7 +659,7 @@ export default class SDIndexViewBase extends Vue implements ControlInterface {
*/
public computedEffectiveMenus(inputMenus:Array<any>){
inputMenus.forEach((_item:any) =>{
if(!this.$store.getters['authresource/getAuthMenu'](_item)){
if(!this.authService.getMenusPermission(_item)){
_item.hidden = true;
if (_item.items && _item.items.length > 0) {
this.computedEffectiveMenus(_item.items);
......
import { Store } from 'vuex';
import { Util } from '@/utils/util/util';
import CodeListService from "@service/app/codelist-service";
import CodeListService from "@/codelist/codelist-service";
/**
* 部件服务基类
......
......@@ -277,6 +277,19 @@ export default class DefaultBase extends Vue implements ControlInterface {
n_filename_like: null,
};
/**
* 详情模型集合
*
* @type {*}
* @memberof DefaultBase
*/
public detailsModel: any = {
formpage1: new FormPageModel({ caption: '常规条件', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
,
n_filename_like: new FormItemModel({ caption: '名称(文本包含(%))', detailType: 'FORMITEM', name: 'n_filename_like', visible: true, isShowCaption: true, form: this,required:false, disabled: false, enableCond: 3 })
,
};
/**
* 属性值规则
*
......@@ -287,24 +300,11 @@ export default class DefaultBase extends Vue implements ControlInterface {
n_filename_like: [
{ type: 'string', message: '名称(文本包含(%)) 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '名称(文本包含(%)) 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '名称(文本包含(%)) 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '名称(文本包含(%)) 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.n_filename_like.required, type: 'string', message: '名称(文本包含(%)) 值不能为空', trigger: 'change' },
{ required: this.detailsModel.n_filename_like.required, type: 'string', message: '名称(文本包含(%)) 值不能为空', trigger: 'blur' },
],
}
/**
* 详情模型集合
*
* @type {*}
* @memberof DefaultBase
*/
public detailsModel: any = {
formpage1: new FormPageModel({ caption: '常规条件', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
,
n_filename_like: new FormItemModel({ caption: '名称(文本包含(%))', detailType: 'FORMITEM', name: 'n_filename_like', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
};
/**
* 监控表单属性 n_filename_like 值
*
......
......@@ -363,6 +363,10 @@ export default class DefaultService extends ControlService {
}else{
if(item && item.prop){
requestData[item.prop] = data[item.name];
}else{
if(item.dataType && Object.is(item.dataType,"FORMPART")){
Object.assign(requestData,data[item.name]);
}
}
}
});
......@@ -395,4 +399,40 @@ export default class DefaultService extends ControlService {
return itemName.trim();
}
/**
* 重写处理返回数据
*
* @param {string} action
* @param {*} response
* @memberof DefaultService
*/
public handleResponseData(action: string, data: any = {},isCreate?:boolean,codelistArray?:any){
let model: any = this.getMode();
if (!model && model.getDataItems instanceof Function) {
return data;
}
let item: any = {};
let dataItems: any[] = model.getDataItems();
dataItems.forEach(dataitem => {
let val = data.hasOwnProperty(dataitem.prop) ? data[dataitem.prop] : null;
if (val === null) {
val = data.hasOwnProperty(dataitem.name) ? data[dataitem.name] : null;
}
if((isCreate === undefined || isCreate === null ) && Object.is(dataitem.dataType, 'GUID') && Object.is(dataitem.name, 'srfkey') && (val && !Object.is(val, ''))){
isCreate = true;
}
item[dataitem.name] = val;
// 转化代码表
if(codelistArray && dataitem.codelist){
if(codelistArray.get(dataitem.codelist.tag) && codelistArray.get(dataitem.codelist.tag).get(val)){
item[dataitem.name] = codelistArray.get(dataitem.codelist.tag).get(val);
}
}
});
item.srfuf = data.srfuf ? data.srfuf : (isCreate ? "0" : "1");
item = Object.assign(data,item);
return item;
}
}
\ No newline at end of file
......@@ -498,6 +498,14 @@ export default class MainBase extends Vue implements ControlInterface {
*/
public oldData: any = {};
/**
* 混入表单数据对象
*
* @type {*}
* @memberof MainBase
*/
public mixinData:any = {};
/**
* 表单数据对象
*
......@@ -573,134 +581,134 @@ export default class MainBase extends Vue implements ControlInterface {
srfupdatedate: [
{ type: 'string', message: '更新时间 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '更新时间 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '更新时间 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '更新时间 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srfupdatedate.required, type: 'string', message: '更新时间 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srfupdatedate.required, type: 'string', message: '更新时间 值不能为空', trigger: 'blur' },
],
srforikey: [
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srforikey.required, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srforikey.required, type: 'string', message: ' 值不能为空', trigger: 'blur' },
],
srfkey: [
{ type: 'string', message: '标识 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '标识 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '标识 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '标识 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srfkey.required, type: 'string', message: '标识 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srfkey.required, type: 'string', message: '标识 值不能为空', trigger: 'blur' },
],
srfmajortext: [
{ type: 'string', message: '名称 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '名称 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '名称 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '名称 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srfmajortext.required, type: 'string', message: '名称 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srfmajortext.required, type: 'string', message: '名称 值不能为空', trigger: 'blur' },
],
srftempmode: [
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srftempmode.required, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srftempmode.required, type: 'string', message: ' 值不能为空', trigger: 'blur' },
],
srfuf: [
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srfuf.required, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srfuf.required, type: 'string', message: ' 值不能为空', trigger: 'blur' },
],
srfdeid: [
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srfdeid.required, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srfdeid.required, type: 'string', message: ' 值不能为空', trigger: 'blur' },
],
srfsourcekey: [
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: ' 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: ' 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.srfsourcekey.required, type: 'string', message: ' 值不能为空', trigger: 'change' },
{ required: this.detailsModel.srfsourcekey.required, type: 'string', message: ' 值不能为空', trigger: 'blur' },
],
filename: [
{ type: 'string', message: '名称 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '名称 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '名称 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '名称 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.filename.required, type: 'string', message: '名称 值不能为空', trigger: 'change' },
{ required: this.detailsModel.filename.required, type: 'string', message: '名称 值不能为空', trigger: 'blur' },
],
filepath: [
{ type: 'string', message: '路径 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '路径 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '路径 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '路径 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.filepath.required, type: 'string', message: '路径 值不能为空', trigger: 'change' },
{ required: this.detailsModel.filepath.required, type: 'string', message: '路径 值不能为空', trigger: 'blur' },
],
filesize: [
{ type: 'number', message: '文件大小 值必须为数值类型', trigger: 'change' },
{ type: 'number', message: '文件大小 值必须为数值类型', trigger: 'blur' },
{ required: false, type: 'number', message: '文件大小 值不能为空', trigger: 'change' },
{ required: false, type: 'number', message: '文件大小 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.filesize.required, type: 'number', message: '文件大小 值不能为空', trigger: 'change' },
{ required: this.detailsModel.filesize.required, type: 'number', message: '文件大小 值不能为空', trigger: 'blur' },
],
fileext: [
{ type: 'string', message: '扩展名 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '扩展名 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '扩展名 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '扩展名 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.fileext.required, type: 'string', message: '扩展名 值不能为空', trigger: 'change' },
{ required: this.detailsModel.fileext.required, type: 'string', message: '扩展名 值不能为空', trigger: 'blur' },
],
folder: [
{ type: 'string', message: '特定目录 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '特定目录 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '特定目录 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '特定目录 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.folder.required, type: 'string', message: '特定目录 值不能为空', trigger: 'change' },
{ required: this.detailsModel.folder.required, type: 'string', message: '特定目录 值不能为空', trigger: 'blur' },
],
digestcode: [
{ type: 'string', message: '签名 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '签名 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '签名 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '签名 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.digestcode.required, type: 'string', message: '签名 值不能为空', trigger: 'change' },
{ required: this.detailsModel.digestcode.required, type: 'string', message: '签名 值不能为空', trigger: 'blur' },
],
ownerid: [
{ type: 'string', message: '所属主体 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '所属主体 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '所属主体 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '所属主体 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.ownerid.required, type: 'string', message: '所属主体 值不能为空', trigger: 'change' },
{ required: this.detailsModel.ownerid.required, type: 'string', message: '所属主体 值不能为空', trigger: 'blur' },
],
ownertype: [
{ type: 'string', message: '所属类型 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '所属类型 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '所属类型 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '所属类型 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.ownertype.required, type: 'string', message: '所属类型 值不能为空', trigger: 'change' },
{ required: this.detailsModel.ownertype.required, type: 'string', message: '所属类型 值不能为空', trigger: 'blur' },
],
memo: [
{ type: 'string', message: '备注 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '备注 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '备注 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '备注 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.memo.required, type: 'string', message: '备注 值不能为空', trigger: 'change' },
{ required: this.detailsModel.memo.required, type: 'string', message: '备注 值不能为空', trigger: 'blur' },
],
createman: [
{ type: 'string', message: '创建人 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '创建人 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '创建人 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '创建人 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.createman.required, type: 'string', message: '创建人 值不能为空', trigger: 'change' },
{ required: this.detailsModel.createman.required, type: 'string', message: '创建人 值不能为空', trigger: 'blur' },
],
createdate: [
{ type: 'string', message: '创建日期 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '创建日期 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '创建日期 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '创建日期 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.createdate.required, type: 'string', message: '创建日期 值不能为空', trigger: 'change' },
{ required: this.detailsModel.createdate.required, type: 'string', message: '创建日期 值不能为空', trigger: 'blur' },
],
updateman: [
{ type: 'string', message: '更新人 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '更新人 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '更新人 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '更新人 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.updateman.required, type: 'string', message: '更新人 值不能为空', trigger: 'change' },
{ required: this.detailsModel.updateman.required, type: 'string', message: '更新人 值不能为空', trigger: 'blur' },
],
updatedate: [
{ type: 'string', message: '更新时间 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '更新时间 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '更新时间 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '更新时间 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.updatedate.required, type: 'string', message: '更新时间 值不能为空', trigger: 'change' },
{ required: this.detailsModel.updatedate.required, type: 'string', message: '更新时间 值不能为空', trigger: 'blur' },
],
fileid: [
{ type: 'string', message: '标识 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '标识 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '标识 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '标识 值不能为空', trigger: 'blur' },
{ required: this.detailsModel.fileid.required, type: 'string', message: '标识 值不能为空', trigger: 'change' },
{ required: this.detailsModel.fileid.required, type: 'string', message: '标识 值不能为空', trigger: 'blur' },
],
}
}
......@@ -794,49 +802,49 @@ export default class MainBase extends Vue implements ControlInterface {
,
formpage1: new FormPageModel({ caption: '基本信息', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this, isControlledContent: false })
,
srfupdatedate: new FormItemModel({ caption: '更新时间', detailType: 'FORMITEM', name: 'srfupdatedate', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srfupdatedate: new FormItemModel({ caption: '更新时间', detailType: 'FORMITEM', name: 'srfupdatedate', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srforikey: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srforikey', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srforikey: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srforikey', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srfkey: new FormItemModel({ caption: '标识', detailType: 'FORMITEM', name: 'srfkey', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srfkey: new FormItemModel({ caption: '标识', detailType: 'FORMITEM', name: 'srfkey', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srfmajortext: new FormItemModel({ caption: '名称', detailType: 'FORMITEM', name: 'srfmajortext', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srfmajortext: new FormItemModel({ caption: '名称', detailType: 'FORMITEM', name: 'srfmajortext', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srftempmode: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srftempmode', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srftempmode: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srftempmode', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srfuf: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfuf', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srfuf: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfuf', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srfdeid: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfdeid', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srfdeid: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfdeid', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
srfsourcekey: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfsourcekey', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
srfsourcekey: new FormItemModel({ caption: '', detailType: 'FORMITEM', name: 'srfsourcekey', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
filename: new FormItemModel({ caption: '名称', detailType: 'FORMITEM', name: 'filename', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
filename: new FormItemModel({ caption: '名称', detailType: 'FORMITEM', name: 'filename', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
filepath: new FormItemModel({ caption: '路径', detailType: 'FORMITEM', name: 'filepath', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
filepath: new FormItemModel({ caption: '路径', detailType: 'FORMITEM', name: 'filepath', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
filesize: new FormItemModel({ caption: '文件大小', detailType: 'FORMITEM', name: 'filesize', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
filesize: new FormItemModel({ caption: '文件大小', detailType: 'FORMITEM', name: 'filesize', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
fileext: new FormItemModel({ caption: '扩展名', detailType: 'FORMITEM', name: 'fileext', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
fileext: new FormItemModel({ caption: '扩展名', detailType: 'FORMITEM', name: 'fileext', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
folder: new FormItemModel({ caption: '特定目录', detailType: 'FORMITEM', name: 'folder', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
folder: new FormItemModel({ caption: '特定目录', detailType: 'FORMITEM', name: 'folder', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
digestcode: new FormItemModel({ caption: '签名', detailType: 'FORMITEM', name: 'digestcode', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
digestcode: new FormItemModel({ caption: '签名', detailType: 'FORMITEM', name: 'digestcode', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
ownerid: new FormItemModel({ caption: '所属主体', detailType: 'FORMITEM', name: 'ownerid', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
ownerid: new FormItemModel({ caption: '所属主体', detailType: 'FORMITEM', name: 'ownerid', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
ownertype: new FormItemModel({ caption: '所属类型', detailType: 'FORMITEM', name: 'ownertype', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
ownertype: new FormItemModel({ caption: '所属类型', detailType: 'FORMITEM', name: 'ownertype', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
memo: new FormItemModel({ caption: '备注', detailType: 'FORMITEM', name: 'memo', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
memo: new FormItemModel({ caption: '备注', detailType: 'FORMITEM', name: 'memo', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
createman: new FormItemModel({ caption: '创建人', detailType: 'FORMITEM', name: 'createman', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
createman: new FormItemModel({ caption: '创建人', detailType: 'FORMITEM', name: 'createman', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
createdate: new FormItemModel({ caption: '创建日期', detailType: 'FORMITEM', name: 'createdate', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
createdate: new FormItemModel({ caption: '创建日期', detailType: 'FORMITEM', name: 'createdate', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
updateman: new FormItemModel({ caption: '更新人', detailType: 'FORMITEM', name: 'updateman', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
updateman: new FormItemModel({ caption: '更新人', detailType: 'FORMITEM', name: 'updateman', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
updatedate: new FormItemModel({ caption: '更新时间', detailType: 'FORMITEM', name: 'updatedate', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
updatedate: new FormItemModel({ caption: '更新时间', detailType: 'FORMITEM', name: 'updatedate', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
fileid: new FormItemModel({ caption: '标识', detailType: 'FORMITEM', name: 'fileid', visible: true, isShowCaption: true, form: this, isControlledContent: false , disabled: false, enableCond: 3 })
fileid: new FormItemModel({ caption: '标识', detailType: 'FORMITEM', name: 'fileid', visible: true, isShowCaption: true, form: this, isControlledContent: false , required:false, disabled: false, enableCond: 3 })
,
};
......@@ -1251,6 +1259,7 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof MainBase
*/
public fillForm(_datas: any = {},action:string): void {
this.mixinData = _datas;
this.ignorefieldvaluechange = true;
Object.keys(_datas).forEach((name: string) => {
if (this.data.hasOwnProperty(name)) {
......
......@@ -37,11 +37,6 @@
git clone -b master $para2 ibzdisk/
export NODE_OPTIONS=--max-old-space-size=4096
cd ibzdisk/
mvn clean package -Papi
cd ibzdisk-provider/ibzdisk-provider-api
mvn -Papi docker:build
mvn -Papi docker:push
docker -H $para1 stack deploy --compose-file=src/main/docker/ibzdisk-provider-api.yaml ibzlab-rt --with-registry-auth
</command>
</hudson.tasks.Shell>
</builders>
......
......@@ -12,6 +12,6 @@ CMD echo "The application will start in ${IBIZ_SLEEP}s..." && \
sleep ${IBIZ_SLEEP} && \
java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /ibzdisk-provider-api.jar
EXPOSE 40006
EXPOSE 8081
ADD ibzdisk-provider-api.jar /ibzdisk-provider-api.jar
......@@ -3,22 +3,9 @@ services:
ibzdisk-provider-api:
image: registry.cn-shanghai.aliyuncs.com/ibizsys/ibzdisk-provider-api:latest
ports:
- "40006:40006"
- "8081:8081"
networks:
- agent_network
environment:
- SPRING_CLOUD_NACOS_DISCOVERY_IP=172.16.180.237
- SERVER_PORT=40006
- SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR=172.16.102.211:8848
- SPRING_REDIS_HOST=172.16.100.243
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_DATABASE=0
- SPRING_DATASOURCE_USERNAME=a_A_5d9d78509
- SPRING_DATASOURCE_PASSWORD=@6dEfb3@
- SPRING_DATASOURCE_URL=jdbc:mysql://172.16.180.232:3306/a_A_5d9d78509?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&allowMultiQueries=true
- SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.jdbc.Driver
- SPRING_DATASOURCE_DEFAULTSCHEMA=a_A_5d9d78509
- NACOS=172.16.102.211:8848
deploy:
resources:
limits:
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册