index.html 9.0 KB
<link rel="stylesheet" href="__CDN__/assets/addons/groupon/libs/element/element.css">
<link rel="stylesheet" href="__CDN__/assets/addons/groupon/libs/common.css">
<style>
    #categoryIndex {
        color: #444;
        background: #fff;
        padding: 0 0 20px;
    }
    .el-tree-node__content {
        height: 44px;
    }

    .expanded.el-tree-node__expand-icon.el-icon-caret-right,
    .el-tree-node__expand-icon.el-icon-caret-right {
        display: none;
    }

    .custom-tabs-body {
        padding: 0 20px;
    }

    .custom-tree-header {
        height: 40px;
        background: #F9F9F9;
        border: 1px solid #e6e6e6;
    }

    .expanded-icon {
        width: 40px;
        color: #7438D5;
    }

    .expanded-width-input {
        width: 405px;
        padding-left: 14px;
    }

    .expanded-width-operation {
        padding-left: 14px;
    }

    .expanded-label {
        width: 180px;
        margin-right: 14px;
    }

    .expanded-add {
        color: #7438D5;
        cursor: pointer;
        width: 91px;
    }

    .expanded-add-1 {
        margin-right: 80px;
    }

    .expanded-add-2 {
        margin-right: 40px;
    }

    .expanded-add-3 {
        margin-right: 0px;
        color: rgba(0, 0, 0, 0);
    }

    .expanded-width-image,
    .expanded-width-sort {
        width: 100px;
    }

    .expanded-image {
        width: 32px;
        height: 32px;
        border: 1px dashed #E6E6E6;
        box-sizing: border-box;
        border-radius: 2px;
        font-size: 13px;
        color: #E6E6E6;
        position: relative;
    }

    .operation-text {
        margin-left: 14px;
    }

    .tab-icons {
        margin-left: 6px;
        width: 12px;
        height: 12px;
    }

    .expanded-width-id {
        width: 80px;
    }

    .el-tree-node__content {
        padding-left: 0 !important;
    }

    .level-2 {
        padding-left: 40px;
    }

    .level-3 {
        padding-left: 80px;
    }

    .process-item {
        border-top: #7438D5 2px solid;
    }

    .drag-item {
        width: 100%;
        height: 100%;
        border: 1px solid #e6e6e6;
        border-top: none;
    }

    .custom-tabs-line {
        height: 1px;
        background: #e6e6e6;
        width: 100%
    }

    .custom-tabs-items {
        display: flex;
        align-items: center;
        padding: 0 20px;
        width: 100%;
        height: 50px;
    }

    .expanded-weigh {
        width: 70px;
    }

    .expanded-weigh .el-input__inner {
        text-align: center;
    }

    .table-delete-operation {
        color: #7438D5;
    }

    .style-button {
        color: #7438D5;
        border-color: #7438D5;
    }

    .category-style-tip {
        margin-left: 6px;
        color: #DDDDDD;
    }

    .image-slot {
        width: 100%;
        height: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .common-button-container {
        margin: 0 0 14px;
        justify-content: space-between;
    }

    [v-cloak] {
        display: none
    }
</style>
<script src="__CDN__/assets/addons/groupon/libs/vue.js"></script>
<script src="__CDN__/assets/addons/groupon/libs/element/element.js"></script>
<script src="__CDN__/assets/addons/groupon/libs/moment.js"></script>
<div id="categoryIndex" v-cloak v-loading="isAjax">
    <div class="common-tabs-container">
        <el-tabs v-if="tabsData.length>0" v-model="activeName" @tab-click="handleClick">
            <el-tab-pane :name="tab.name" v-for="tab in tabsData">
                <span slot="label">{{tab.name}}</span>
            </el-tab-pane>
        </el-tabs>
    </div>
    <div class="custom-tabs-body">
        <div class="common-button-container">
            <div class="display-flex">
                <div class="common-refresh-button" @click="getData(activeId)">
                    <i class="el-icon-refresh"></i>
                </div>
                <div class="common-button common-add-button" @click="operation('add')">
                    <i class="el-icon-plus"></i>
                    <span>添加分类</span>
                </div>
            </div>
            <div class="display-flex">
                <div class="common-button common-reset-button" @click="operation('reset')">
                    重置
                </div>
                <div class="common-button common-add-button" @click="operation('update')">
                    <span>保存&更新</span>
                </div>
            </div>
        </div>
        <div class="custom-tree-header display-flex">
            <div class="expanded-width-id display-flex-c">ID</div>
            <div class="expanded-width-input">分类名称</div>
            <div class="expanded-width-image display-flex-c">分类图片</div>
            <div class="expanded-width-sort display-flex-c">分类描述</div>
            <div class="expanded-width-sort display-flex-c">排序
                <el-popover placement="bottom" title="" width="190" trigger="hover">
                    <div class="popover-container">
                        权重以倒序排列,默认值为0,相同权重则以ID优先
                    </div>
                    <i class="category-style-tip el-icon-question" slot="reference"></i>
                </el-popover>
            </div>
            <div class="flex-1 expanded-width-operation">操作</div>
        </div>
        <el-tree :data="data[activeIndex]" node-key="id" default-expand-all :expand-on-click-node="false"
            :props="defaultProps" empty-text="无分类,快去添加吧">
            <div class="display-flex drag-item" slot-scope="{ node, data }" v-if="!(data.deleted && data.deleted==1)"
                :class="(processId !='' && processId !=null && processId==data.id)?'process-item':''">
                <div class="expanded-width-id display-flex-c">
                    <span v-if="(data.id+'').indexOf('add')==-1">{{data.id}}</span>
                </div>
                <div class="display-flex" :class="operation('filter',node.level)">
                    <div class="expanded-icon display-flex-c" v-if="">
                        <div v-if="data.children && data.children.length>0">
                            <i class="el-icon-minus" v-if="node.expanded && level>node.level "
                                @click="() => isexpanded(node)"></i>
                            <i class="el-icon-plus" v-if="!node.expanded && level>node.level"
                                @click="() => isexpanded(node)"></i>
                        </div>
                    </div>
                    <div class="display-flex">
                        <el-input class="expanded-label" v-model="data.name" placeholder="请输入内容" size="small">
                        </el-input>
                        <span class="expanded-add expanded-add-1" v-if="node.level==1">
                        </span>
                        <span class="expanded-add expanded-add-2" v-if="node.level==2">
                        </span>
                        <span class="expanded-add expanded-add-3" v-if="node.level==3">
                        </span>
                    </div>
                </div>
                <div class="expanded-width-image display-flex-c">
                    <el-popover placement="bottom" width="200" trigger="hover">
                        <div>
                            <div v-if="node.level==1">建议尺寸:广告图504X150</div>
                        </div>
                        <div v-if="!(level==3 && node.level==2)" slot="reference" class="expanded-image display-flex-c"
                            @click="()=>addImage(data)">
                            <el-image v-if="data.image" :src="Fast.api.cdnurl(data.image)" fit="contain">
                                <div slot="error" class="image-slot">
                                    <i class="el-icon-picture-outline"></i>
                                </div>
                            </el-image>
                            <i v-if="!data.image" class="el-icon-plus"></i>
                        </div>
                    </el-popover>
                </div>
                <div class="expanded-width-sort display-flex-c">
                    <el-input class="expanded-weigh" v-model="data.description" placeholder="描述" maxlength="4" size="small">
                    </el-input>
                </div>
                <div class="expanded-width-sort display-flex-c">
                    <el-input class="expanded-weigh" type="number" v-model="data.weigh" placeholder="权重" size="small">
                    </el-input>
                </div>
                <div class="display-flex">
                    <span class="operation-text table-delete-operation" @click="() => hiddenShow(node, data)">
                        <span v-if="data.status=='normal'" style="color: #999;">隐藏</span>
                        <span v-else>显示</span>
                    </span>
                    <span class="operation-text table-delete-text" @click="() => remove(node, data)">删除</span>
                </div>
            </div>
        </el-tree>
    </div>
</div>