Commit 2cb1ac83 by liangjianmin

style(menu): 格式化menu.vue文件代码风格

- 统一调整template内部标签及属性的缩进和空格风格
- 规范多处vue模板标签对齐和空格使用
- 对script部分的import语句进行格式调整,规范逗号和空格
- 修复函数体和对象字面量的格式统一
- 保持代码风格一致提高可读性和维护性
parent 6ee04525
Showing with 1384 additions and 1389 deletions
<template>
<div class="nav-box">
<div class="nav-top">
<div class="con-box clr">
<div class="logo fl">芯链系统</div>
<div class="tab-box fl" ref="scrollbox">
<!--tab 栏目-->
<div class="item-boxs row verCenter" ref="scrollboxinner">
<a class="item first row rowCenter verCenter" href="/#/" :class="{'act':$route.path=='/'}">
<font class="fl">概况</font>
</a>
<a class="item row rowCenter verCenter" :class="{'act':(JSON.stringify(item)==JSON.stringify({path: $route.path,title: $route.meta.title,query:$route.query}))}" @click="tabUrl(item)" v-for="item in tabs">
<font class="fl">{{ item.title }}</font>
<span class="icon iconfont fl" @click.stop="closetab(item.path)"></span>
</a>
</div>
</div>
<!--right-bar-->
<div class="user-box fr row verCenter">
<a class="el-icon-s-cooperation" style="font-size: 27px;" href="/#/notice" title="系统公告"></a>
<div class="line"></div>
<i class="el-icon-message-solid message-num" @click="showMsg" title="消息通知">
<el-badge class="mark" :value="not_read_count"/>
</i>
<div class="line"></div>
<a class="msgh row verCenter" href="javascript:history.go(0)" title="点击刷新">
<span class="el-icon-refresh icon"></span>
</a>
<div class="line"></div>
<a class="fl" href="/芯链系统-操作手册.pdf" target="_blank" title="点击查看芯链系统-操作手册"><span class="icon iconfont iconwendangguanli fl"></span></a>
<div class="line"></div>
<div class="login-v row verCenter">
<img :src="userinfo.avatar||'https://www.ichunt.com/v3/dist/res/home/images/headimg/boy1.png'" alt="">
<div class="namex">{{ userinfo.contacts_name || '猎芯网用户' }}</div>
<div class="lo-box-drop row verCenter">
<span class="icon iconfont"></span>
<div class="drop-box">
<a href="javascript:;" @click="changePwd()">修改密码</a>
<a href="javascript:;" @click="logout">退出登录</a>
</div>
<div class="nav-box">
<div class="nav-top">
<div class="con-box clr">
<div class="logo fl">芯链系统</div>
<div class="tab-box fl" ref="scrollbox">
<!--tab 栏目-->
<div class="item-boxs row verCenter" ref="scrollboxinner">
<a class="item first row rowCenter verCenter" href="/#/" :class="{ 'act': $route.path == '/' }">
<font class="fl">概况</font>
</a>
<a class="item row rowCenter verCenter" :class="{ 'act': (JSON.stringify(item) == JSON.stringify({ path: $route.path, title: $route.meta.title, query: $route.query })) }" @click="tabUrl(item)" v-for="item in tabs">
<font class="fl">{{ item.title }}</font>
<span class="icon iconfont fl" @click.stop="closetab(item.path)"></span>
</a>
</div>
</div>
<!--right-bar-->
<div class="user-box fr row verCenter">
<a class="el-icon-s-cooperation" style="font-size: 27px;" href="/#/notice" title="系统公告"></a>
<div class="line"></div>
<i class="el-icon-message-solid message-num" @click="showMsg" title="消息通知">
<el-badge class="mark" :value="not_read_count" />
</i>
<div class="line"></div>
<a class="msgh row verCenter" href="javascript:history.go(0)" title="点击刷新">
<span class="el-icon-refresh icon"></span>
</a>
<div class="line"></div>
<a class="fl" href="/芯链系统-操作手册.pdf" target="_blank" title="点击查看芯链系统-操作手册"><span class="icon iconfont iconwendangguanli fl"></span></a>
<div class="line"></div>
<div class="login-v row verCenter">
<img :src="userinfo.avatar || 'https://www.ichunt.com/v3/dist/res/home/images/headimg/boy1.png'" alt="">
<div class="namex">{{ userinfo.contacts_name || '猎芯网用户' }}</div>
<div class="lo-box-drop row verCenter">
<span class="icon iconfont"></span>
<div class="drop-box">
<a href="javascript:;" @click="changePwd()">修改密码</a>
<a href="javascript:;" @click="logout">退出登录</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="nav-left" v-show="!collapse">
<div class="meau-con">
<div class="zankai">
<span class="icon iconfont fr" @click="zk"></span>
</div>
<!--菜单栏-->
<el-menu class="el-menu-vertical-demo" active-text-color="#1969F9" router :default-active="$route.path" :router="true" :unique-opened="true" @open="handleOpen" @close="handleClose" @select="handleSelect">
<template v-if="Object.keys(index_home).length !== 0">
<el-menu-item :index="'/'" :class="{'indextab':isIndexTab}">
<template slot="title">
<span class="icon iconfont iconsy"></span>
<span>概况</span>
</template>
</el-menu-item>
</template>
<template v-if="menuData.length > 0">
<el-submenu :index="(index+2).toString()" v-for="(item,index) in menuData" :key="index">
<template slot="title">
<span :class="['icon', 'iconfont', item.iconfont]"></span>
<span slot="title">{{ item.name }}</span>
</template>
<el-menu-item-group>
<el-menu-item :index="v.path" v-for="(v,i) in item.children" :key="i">{{ v.name }}</el-menu-item>
</el-menu-item-group>
</el-submenu>
</template>
</el-menu>
</div>
</div>
<!--收缩图标-->
<div class="nav-icon" v-show="collapse">
<div class="zankai">
<span class="icon iconfont fr" @click="zk"></span>
</div>
<template v-if="Object.keys(index_home).length !== 0">
<div class="item" :class="{'act':tabSure==1}">
<span class="icon iconfont iconsy"></span>
</div>
</template>
<template v-if="menuData.length > 0">
<div class="item" :class="{'act':tabSure==(index+1)}" v-for="(item,index) in menuData" :key="index">
<span :class="['icon', 'iconfont', item.iconfont]"></span>
</div>
</template>
</div>
<!--修改密码弹窗-->
<el-dialog title="修改密码" :visible.sync="dialogVisible" width="500px" class="demo-ruleForm">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-form-item label="原始密码" prop="old_password">
<el-input v-model="ruleForm.old_password" type='password' placeholder='请输入原始密码'></el-input>
</el-form-item>
<el-form-item label="新密码" prop="password">
<el-input v-model="ruleForm.password" type='password' placeholder='请输入新密码'></el-input>
</el-form-item>
<el-form-item label="确认新密码" prop="repassword">
<el-input v-model="ruleForm.repassword" type='password' placeholder='请输入新密码'></el-input>
</el-form-item>
<el-form-item>
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">确 定</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!--消息通知-->
<el-dialog title="消息通知" :visible.sync="dialogNewsVisible" width="900px" class="demo-ruleForm">
<div class="tab-news row verCenter bothSide">
<div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="全部" name="all">
<div slot="label">全部
<el-badge :value="notReadCount[0]" :max="99" v-if="notReadCount[0] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="询价" name="inquiry">
<div slot="label">询价
<el-badge :value="notReadCount[6]" :max="99" v-if="notReadCount[6] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="成单" name="orderForm">
<div slot="label">成单
<el-badge :value="notReadCount[7]" :max="99" v-if="notReadCount[7] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="退货" name="returnGoods">
<div slot="label">退货
<el-badge :value="notReadCount[8]" :max="99" v-if="notReadCount[8] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="上架有效期" name="shelfLife">
<div slot="label">上架有效期
<el-badge :value="notReadCount[9]" :max="99" v-if="notReadCount[9] > 0"></el-badge>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div>
<el-button type="primary" @click="updateMsg">标记已读</el-button>
<el-button type="danger" @click="deleteMsg">删除</el-button>
<div class="nav-left" v-show="!collapse">
<div class="meau-con">
<div class="zankai">
<span class="icon iconfont fr" @click="zk"></span>
</div>
<!--菜单栏-->
<el-menu class="el-menu-vertical-demo" active-text-color="#1969F9" router :default-active="$route.path" :router="true" :unique-opened="true" @open="handleOpen" @close="handleClose" @select="handleSelect">
<template v-if="Object.keys(index_home).length !== 0">
<el-menu-item :index="'/'" :class="{ 'indextab': isIndexTab }">
<template slot="title">
<span class="icon iconfont iconsy"></span>
<span>概况</span>
</template>
</el-menu-item>
</template>
<template v-if="menuData.length > 0">
<el-submenu :index="(index + 2).toString()" v-for="(item, index) in menuData" :key="index">
<template slot="title">
<span :class="['icon', 'iconfont', item.iconfont]"></span>
<span slot="title">{{ item.name }}</span>
</template>
<el-menu-item-group>
<el-menu-item :index="v.path" v-for="(v, i) in item.children" :key="i">{{ v.name }}</el-menu-item>
</el-menu-item-group>
</el-submenu>
</template>
</el-menu>
</div>
</div>
</div>
<section>
<el-table ref="table" :data="tableData" max-height="500" @selection-change="handleSelectionChange" :show-header="false">
<el-table-column type="selection" width="50" align="left"></el-table-column>
<el-table-column prop="inquiry_sn" label="" :show-overflow-tooltip="true" align="left">
<template slot-scope="scope">
<span class="el-badge-num" v-if="scope.row.msg_status == 0"></span>
<span style="margin-right: 4px;">{{ JSON.parse(scope.row.msg_data).date }}</span>
<span style="margin-right: 4px;">{{ JSON.parse(scope.row.msg_data).title }}</span>
<template v-if="JSON.parse(scope.row.msg_data).cate_id == 6">
<a target="_blank" style="color: #409EFF" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else-if="JSON.parse(scope.row.msg_data).cate_id == 7">
<a target="_blank" style="color: #1969F9" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else-if="JSON.parse(scope.row.msg_data).cate_id == 8">
<a target="_blank" style="color: #FF870E" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else-if="JSON.parse(scope.row.msg_data).cate_id == 9">
<a target="_blank" style="color: #FF0000" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else>
<a target="_blank" style="color: #409EFF" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<!--收缩图标-->
<div class="nav-icon" v-show="collapse">
<div class="zankai">
<span class="icon iconfont fr" @click="zk"></span>
</div>
<template v-if="Object.keys(index_home).length !== 0">
<div class="item" :class="{ 'act': tabSure == 1 }">
<span class="icon iconfont iconsy"></span>
</div>
</template>
<template v-if="menuData.length > 0">
<div class="item" :class="{ 'act': tabSure == (index + 1) }" v-for="(item, index) in menuData" :key="index">
<span :class="['icon', 'iconfont', item.iconfont]"></span>
</div>
</template>
</el-table-column>
</el-table>
<div class="row verCenter bothSide" style="margin-top: 15px;">
<div style="margin-left: 13px;white-space: nowrap">
<el-checkbox @change="selectAll" v-model="checkAll" :indeterminate="isIndeterminate"></el-checkbox>
<el-button type="primary" @click="getNewsStatus(0)" style="margin-left: 10px;">未读</el-button>
<el-button type="primary" @click="getNewsStatus(1)">已读</el-button>
</div>
<el-pagination style="margin-top: 0" layout="total, sizes, prev, pager, next, jumper" :page-sizes="[10, 20, 50, 100, 200]" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"></el-pagination>
</div>
</section>
</el-dialog>
<!--系统公告-->
<el-dialog :title="noticeMsg.title" :close-on-click-modal="false" :visible.sync="dialogNoticeVisible" width="580px" custom-class="dialog-layer-notice">
<div class="notice-content" v-html="noticeMsg.content"></div>
<div class="enclosure row verCenter">
<span>附件:</span>
<a class="down" :href="noticeMsg.attachment_url ">{{ noticeMsg.attachment_name || '暂无附件' }}</a>
</div>
<div class="notice-bottom row bothSide verCenter">
<span>发件人:深圳市猎芯科技有限公司</span>
<span>{{ noticeMsg.create_time }}</span>
</div>
</el-dialog>
<!--操作手册-->
<el-dialog title="系统Q&A" :visible.sync="dialogHandbookVisible" width="800px" class="demo-ruleForm handbook-layer">
<p class="handbook-t1">
芯链系统是猎芯科技最新推出的一套连接商家与终端客户的智能操作系统,集询报价管理、订单管理、库存管理、商品管理、数据统计等于一体,可帮助商家获得更多询价商机及快捷方便管理各自的型号库存信息;
芯链商家可在芯链系统上自主管理商品上传下架及商品报价;
终端客户订单需求,猎芯销售部和采购部通过询报价系统与芯链商家对接,实现芯链商家针对客户商机信息可进行自主报价、实现订单快速高效转化的过程。
</p>
<p class="handbook-t2">以下为系统板块介绍</p>
<div class="text">
<p class="tit row verCenter">概况板块-说明:</p>
<p class="tt">概况页面主要统计贵司上传的库存型号数量以及订单转化率,并且会展示【猎芯网】热搜型号排名(前50名);</p>
</div>
<div class="text">
<p class="tit row verCenter">询报价管理板块-说明:</p>
<p class="tt">询报价管理页面主要是汇总来自【猎芯询报价】系统推送而来的询价单(订单商机),贵司可对这些询价单进行报价操作,参与到猎芯的询价单报价中;</p>
</div>
<div class="text">
<p class="tit row verCenter">订单追踪板块-说明:</p>
<p class="tt">订单追踪页面主要是展示贵司与猎芯合作的所有订单数据,包括猎芯与贵司签订的采购订单,贵司发出给猎芯的货品信息,猎芯与贵司产生的退货信息等;</p>
</div>
<div class="text">
<p class="tit row verCenter">库存管理板块-说明:</p>
<p class="tt">库存管理页面主要的功能是供贵司上传型号库存,上传后的型号库存将会自动展示在【猎芯网】进行售卖,并且将会自动参与【猎芯询报价】系统的询价单推送(商机推送);贵司上传的型号,与猎芯客户询价的型号匹配上后,该询价信息则会同步至【询报价管理】板块,贵司可对该条询价单(商机)进行报价; 贵司也可将具有优势货源的型号信息上传至【优势物料】页面,上传后的型号也将会自动参与【猎芯询报价】系统的询价单推送(商机推送);</p>
</div>
<div class="text">
<p class="tit row verCenter">数据统计板块-说明:</p>
<p class="tt">数据统计页面主要统计贵司上传的型号跟优势物料,所获得的【猎芯询报价】系统的询价单推送(商机推送)情况,及最终和猎芯成交订单的情况;</p>
</div>
<div class="text">
<p class="tit row verCenter">消息管理板块-说明:</p>
<p class="tt">消息管理页面主要展示猎芯推送给供应商的消息通知,包括芯链系统的更新通知,猎芯与供应商之间的消息公告等;</p>
</div>
</el-dialog>
<div class="welcome row rowCenter verCenter" v-if="dialogWelcome">
<img src="/welcome.png?v=20230607" alt="">
<!--修改密码弹窗-->
<el-dialog title="修改密码" :visible.sync="dialogVisible" width="500px" class="demo-ruleForm">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-form-item label="原始密码" prop="old_password">
<el-input v-model="ruleForm.old_password" type='password' placeholder='请输入原始密码'></el-input>
</el-form-item>
<el-form-item label="新密码" prop="password">
<el-input v-model="ruleForm.password" type='password' placeholder='请输入新密码'></el-input>
</el-form-item>
<el-form-item label="确认新密码" prop="repassword">
<el-input v-model="ruleForm.repassword" type='password' placeholder='请输入新密码'></el-input>
</el-form-item>
<el-form-item>
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">确 定</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!--消息通知-->
<el-dialog title="消息通知" :visible.sync="dialogNewsVisible" width="900px" class="demo-ruleForm">
<div class="tab-news row verCenter bothSide">
<div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="全部" name="all">
<div slot="label">全部
<el-badge :value="notReadCount[0]" :max="99" v-if="notReadCount[0] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="询价" name="inquiry">
<div slot="label">询价
<el-badge :value="notReadCount[6]" :max="99" v-if="notReadCount[6] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="成单" name="orderForm">
<div slot="label">成单
<el-badge :value="notReadCount[7]" :max="99" v-if="notReadCount[7] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="退货" name="returnGoods">
<div slot="label">退货
<el-badge :value="notReadCount[8]" :max="99" v-if="notReadCount[8] > 0"></el-badge>
</div>
</el-tab-pane>
<el-tab-pane label="上架有效期" name="shelfLife">
<div slot="label">上架有效期
<el-badge :value="notReadCount[9]" :max="99" v-if="notReadCount[9] > 0"></el-badge>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div>
<el-button type="primary" @click="updateMsg">标记已读</el-button>
<el-button type="danger" @click="deleteMsg">删除</el-button>
</div>
</div>
<section>
<el-table ref="table" :data="tableData" max-height="500" @selection-change="handleSelectionChange" :show-header="false">
<el-table-column type="selection" width="50" align="left"></el-table-column>
<el-table-column prop="inquiry_sn" label="" :show-overflow-tooltip="true" align="left">
<template slot-scope="scope">
<span class="el-badge-num" v-if="scope.row.msg_status == 0"></span>
<span style="margin-right: 4px;">{{ JSON.parse(scope.row.msg_data).date }}</span>
<span style="margin-right: 4px;">{{ JSON.parse(scope.row.msg_data).title }}</span>
<template v-if="JSON.parse(scope.row.msg_data).cate_id == 6">
<a target="_blank" style="color: #409EFF" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else-if="JSON.parse(scope.row.msg_data).cate_id == 7">
<a target="_blank" style="color: #1969F9" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else-if="JSON.parse(scope.row.msg_data).cate_id == 8">
<a target="_blank" style="color: #FF870E" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else-if="JSON.parse(scope.row.msg_data).cate_id == 9">
<a target="_blank" style="color: #FF0000" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
<template v-else>
<a target="_blank" style="color: #409EFF" :href="JSON.parse(scope.row.msg_data).link">{{ JSON.parse(scope.row.msg_data).title_suffix }}</a>
</template>
</template>
</el-table-column>
</el-table>
<div class="row verCenter bothSide" style="margin-top: 15px;">
<div style="margin-left: 13px;white-space: nowrap">
<el-checkbox @change="selectAll" v-model="checkAll" :indeterminate="isIndeterminate"></el-checkbox>
<el-button type="primary" @click="getNewsStatus(0)" style="margin-left: 10px;">未读</el-button>
<el-button type="primary" @click="getNewsStatus(1)">已读</el-button>
</div>
<el-pagination style="margin-top: 0" layout="total, sizes, prev, pager, next, jumper" :page-sizes="[10, 20, 50, 100, 200]" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"></el-pagination>
</div>
</section>
</el-dialog>
<!--系统公告-->
<el-dialog :title="noticeMsg.title" :close-on-click-modal="false" :visible.sync="dialogNoticeVisible" width="580px" custom-class="dialog-layer-notice">
<div class="notice-content" v-html="noticeMsg.content"></div>
<div class="enclosure row verCenter">
<span>附件:</span>
<a class="down" :href="noticeMsg.attachment_url">{{ noticeMsg.attachment_name || '暂无附件' }}</a>
</div>
<div class="notice-bottom row bothSide verCenter">
<span>发件人:深圳市猎芯科技有限公司</span>
<span>{{ noticeMsg.create_time }}</span>
</div>
</el-dialog>
<!--操作手册-->
<el-dialog title="系统Q&A" :visible.sync="dialogHandbookVisible" width="800px" class="demo-ruleForm handbook-layer">
<p class="handbook-t1">
芯链系统是猎芯科技最新推出的一套连接商家与终端客户的智能操作系统,集询报价管理、订单管理、库存管理、商品管理、数据统计等于一体,可帮助商家获得更多询价商机及快捷方便管理各自的型号库存信息;
芯链商家可在芯链系统上自主管理商品上传下架及商品报价;
终端客户订单需求,猎芯销售部和采购部通过询报价系统与芯链商家对接,实现芯链商家针对客户商机信息可进行自主报价、实现订单快速高效转化的过程。
</p>
<p class="handbook-t2">以下为系统板块介绍</p>
<div class="text">
<p class="tit row verCenter">概况板块-说明:</p>
<p class="tt">概况页面主要统计贵司上传的库存型号数量以及订单转化率,并且会展示【猎芯网】热搜型号排名(前50名);</p>
</div>
<div class="text">
<p class="tit row verCenter">询报价管理板块-说明:</p>
<p class="tt">询报价管理页面主要是汇总来自【猎芯询报价】系统推送而来的询价单(订单商机),贵司可对这些询价单进行报价操作,参与到猎芯的询价单报价中;</p>
</div>
<div class="text">
<p class="tit row verCenter">订单追踪板块-说明:</p>
<p class="tt">订单追踪页面主要是展示贵司与猎芯合作的所有订单数据,包括猎芯与贵司签订的采购订单,贵司发出给猎芯的货品信息,猎芯与贵司产生的退货信息等;</p>
</div>
<div class="text">
<p class="tit row verCenter">库存管理板块-说明:</p>
<p class="tt">库存管理页面主要的功能是供贵司上传型号库存,上传后的型号库存将会自动展示在【猎芯网】进行售卖,并且将会自动参与【猎芯询报价】系统的询价单推送(商机推送);贵司上传的型号,与猎芯客户询价的型号匹配上后,该询价信息则会同步至【询报价管理】板块,贵司可对该条询价单(商机)进行报价; 贵司也可将具有优势货源的型号信息上传至【优势物料】页面,上传后的型号也将会自动参与【猎芯询报价】系统的询价单推送(商机推送);</p>
</div>
<div class="text">
<p class="tit row verCenter">数据统计板块-说明:</p>
<p class="tt">数据统计页面主要统计贵司上传的型号跟优势物料,所获得的【猎芯询报价】系统的询价单推送(商机推送)情况,及最终和猎芯成交订单的情况;</p>
</div>
<div class="text">
<p class="tit row verCenter">消息管理板块-说明:</p>
<p class="tt">消息管理页面主要展示猎芯推送给供应商的消息通知,包括芯链系统的更新通知,猎芯与供应商之间的消息公告等;</p>
</div>
</el-dialog>
<div class="welcome row rowCenter verCenter" v-if="dialogWelcome">
<img src="/welcome.png?v=20230607" alt="">
</div>
</div>
</div>
</template>
<script>
import Vue from 'vue';
import Util from "../tool";
import axios from 'axios';
import {NODE_ENVS_MSG} from "../ajax";
import {Badge, Button, Checkbox, Dialog, Form, FormItem, Input, Menu, MenuItem, MenuItemGroup, Message, MessageBox, Notification, Pagination, Submenu, TabPane, Tabs, Tooltip} from 'element-ui'
Vue.prototype.$message = Message;
Vue.prototype.$notify = Notification;
Vue.use(Menu).use(MenuItem).use(MenuItemGroup).use(Submenu).use(Form).use(FormItem).use(Dialog).use(Button).use(Tooltip).use(Input).use(Tabs).use(TabPane).use(Badge).use(Pagination).use(Checkbox);
export default {
name: 'menus',
props: {},
data() {
var validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.ruleForm.password) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
return {
supplier_id: Number(localStorage.getItem('supplier_id')) || 0,
seconds: 60,
activeName: "all",
userinfo: {},
collapse: false,
isIndexTab: true,
tabSure: "",
tabs: "",
width: "",
dialogWelcome: false,
dialogHandbookVisible: false,
not_read_count: '',//未读消息
isIndeterminate: false,//对el-checkbox控制不完整的全选状态
checkAll: false,//标记是否全选
dialogVisible: false,//改密码
dialogNewsVisible: false,//消息通知
dialogNoticeVisible: false,//系统公告
tableData: [],
multipleSelection: [],
notReadCount: {},
msg_status: '',//消息状态,0-未读,1-已读,-4-已删除
msg_category_id: '',//消息目的地系统下的分类id, 1-关注,2-报价,3-订单,4-系统通知,5-采购提醒不传代表全部
noticeMsg: [],//系统公告消息
total: 0,
limit: 10,
page: 1,
menuData: [],//菜单数据集合
index_home: {},//概况
color_arr: [{
name: '询价',
value: '#409EFF'
}, {
name: '成单',
value: '#1969F9'
}, {
name: '退货',
value: '#FF870E'
}, {
name: '上架有效期',
value: '#FF0000'
}],
ruleForm: {
old_password: '',
password: '',
repassword: ''
},
rules: {
old_password: [{
required: true,
message: '请输入原始密码',
trigger: 'blur'
}],
password: [{
required: true,
message: '请输入新密码',
trigger: 'blur'
}],
repassword: [{
required: true,
trigger: 'blur',
validator: validatePass2
}]
}
}
},
watch: {
$route(to, from) {
let tab_arr = sessionStorage.getItem('tabs')
if (tab_arr) {
this.tabs = JSON.parse(tab_arr);
}
let app_ = document.getElementById('app');
this.collapse = false;
if (to.path == '/login') {
app_.setAttribute('style', 'padding:0');
} else {
if (this.collapse) {
app_.setAttribute('style', 'padding-left:62px');
} else {
app_.setAttribute('style', 'padding-left:226px');
}
}
}
},
created() {
var self = this
this.getData();//获取个人信息
this.tabUi();
this.getMenu();
this.getWelcome();
window.onresize = function () {
self.tabUi()
};
},
mounted() {
this.tabss(this.$route.path)
},
methods: {
/**
* 获取当前用户的权限菜单
*/
getMenu() {
this.$http('GET', "/api/subAccount/getMenu", {}).then(res => {
if (res.code === 0) {
const overviewItem = res.data.data.find(item => item.name === "概况");
const menuData = res.data.data.filter(item => item.name !== "概况");
this.index_home = overviewItem;
const filteredData = menuData.filter(item => item.checked || (item.children && item.children.some(child => child.checked))).map(item => {
if (item.children && item.children.length > 0) {
item.children = item.children.filter(child => child.checked);
import Vue from 'vue';
import Util from "../tool";
import axios from 'axios';
import { NODE_ENVS_MSG } from "../ajax";
import { Badge, Button, Checkbox, Dialog, Form, FormItem, Input, Menu, MenuItem, MenuItemGroup, Message, MessageBox, Notification, Pagination, Submenu, TabPane, Tabs, Tooltip } from 'element-ui'
Vue.prototype.$message = Message;
Vue.prototype.$notify = Notification;
Vue.use(Menu).use(MenuItem).use(MenuItemGroup).use(Submenu).use(Form).use(FormItem).use(Dialog).use(Button).use(Tooltip).use(Input).use(Tabs).use(TabPane).use(Badge).use(Pagination).use(Checkbox);
export default {
name: 'menus',
props: {},
data() {
var validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.ruleForm.password) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
return item;
});
this.menuData = filteredData;
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
})
},
/**
* 欢迎
*/
getWelcome() {
var welcome = Util.getCookie('welcome') || '';
if (!welcome) {
Util.setCookie('welcome', true, 1);
this.dialogWelcome = true;
setTimeout(() => {
this.dialogWelcome = false;
this.getLatestMsg();//获取最新消息
this.getCategoryMsgList();//获取系统公告
}, 3000)
} else {
this.dialogWelcome = false;
this.getLatestMsg();//获取最新消息
this.getCategoryMsgList();//获取系统公告
}
},
/**
* 获取系统公告
*/
getCategoryMsgList() {
var msg_notice = Util.getCookie('ad') || '';
//判断是不是最新的消息
if (msg_notice) {
return;
}
this.$http('get', "/api/system/getNoticeList", {
page: 1,
limit: 1,
}).then(res => {
if (res.code === 0) {
if (res.data.list.length > 0) {
this.dialogNoticeVisible = true;
this.noticeMsg = res.data.list[0] || [];
Util.setCookie('ad', true, 1);
}
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
})
},
/**
* 获取最新消息
*/
getLatestMsg() {
var msg_id_val = sessionStorage.getItem('msg_id') || '';
var that = this;
axios.post(NODE_ENVS_MSG + '/get_latest_msg', {
page: 1,
limit: 1,
user_id: this.supplier_id,//供应商id
sys_id: 17//芯链系统
}).then((res) => {
if (res.code === 0) {
let htmlArr = [];
if (res.data.list.length > 0) {
let data = JSON.parse(res.data.list[0].msg_data);
this.not_read_count = res.data.not_read_count;
sessionStorage.removeItem('msg_id');
sessionStorage.setItem('msg_id', res.data.list[0].id);//存储最新id
//判断是不是最新的消息
if (msg_id_val) {
if (res.data.list[0].id == msg_id_val) {
that.countDown();//开启定时轮询
return;
}
}
this.msg_id = res.data.list[0].id;//存储最新id
let has_more = data.has_more;//判断是否出现更多,样式有区别
let html = '';
let cate_id = data.cate_id;//记录tab切换id
let colorStyle = '';
//定义颜色提醒
if (cate_id) {
if (cate_id == 6) {
colorStyle = 'color:' + this.color_arr[0].value;
} else if (cate_id == 7) {
colorStyle = 'color:' + this.color_arr[1].value;
} else if (cate_id == 8) {
colorStyle = 'color:' + this.color_arr[2].value;
} else if (cate_id == 9) {
colorStyle = 'color:' + this.color_arr[3].value;
} else {
colorStyle = 'color:' + this.color_arr[0].value;
}
}
if (has_more) {
html = '<P class="notify-text"><b>' + data.date + '</b><b>' + data.title + '</b><a style="' + colorStyle + '" href="' + data.link + '">' + data.title_suffix + '</a><a style="margin-left: 8px;" class="alink" href="' + data.has_more + '">更多>>></a></P>';
} else {
html = '<P class="notify-text"><b>' + data.date + '</b><b>' + data.title + '</b><a style="' + colorStyle + '" href="' + data.link + '">' + data.title_suffix + '</a></P>';
return {
supplier_id: Number(localStorage.getItem('supplier_id')) || 0,
seconds: 60,
activeName: "all",
userinfo: {},
collapse: false,
isIndexTab: true,
tabSure: "",
tabs: "",
width: "",
dialogWelcome: false,
dialogHandbookVisible: false,
not_read_count: '',//未读消息
isIndeterminate: false,//对el-checkbox控制不完整的全选状态
checkAll: false,//标记是否全选
dialogVisible: false,//改密码
dialogNewsVisible: false,//消息通知
dialogNoticeVisible: false,//系统公告
tableData: [],
multipleSelection: [],
notReadCount: {},
msg_status: '',//消息状态,0-未读,1-已读,-4-已删除
msg_category_id: '',//消息目的地系统下的分类id, 1-关注,2-报价,3-订单,4-系统通知,5-采购提醒不传代表全部
noticeMsg: [],//系统公告消息
total: 0,
limit: 10,
page: 1,
menuData: [],//菜单数据集合
index_home: {},//概况
color_arr: [{
name: '询价',
value: '#409EFF'
}, {
name: '成单',
value: '#1969F9'
}, {
name: '退货',
value: '#FF870E'
}, {
name: '上架有效期',
value: '#FF0000'
}],
ruleForm: {
old_password: '',
password: '',
repassword: ''
},
rules: {
old_password: [{
required: true,
message: '请输入原始密码',
trigger: 'blur'
}],
password: [{
required: true,
message: '请输入新密码',
trigger: 'blur'
}],
repassword: [{
required: true,
trigger: 'blur',
validator: validatePass2
}]
}
}
if (data.content.length > 0) {
htmlArr.push(html +
'<p>' + data.content[0].name + '' + data.content[0].value + '</p>' +
'<p>' + data.content[1].name + '' + data.content[1].value + '</p>' +
'<p>' + data.content[2].name + '' + data.content[2].value + '</p>' +
'<p>' + data.content[3].name + '' + data.content[3].value + '</p>' +
'<p>' + data.content[4].name + '' + data.content[4].value + '</p>');
} else {
htmlArr.push(html + '上架有效期到期后,该型号将会从【猎芯网】下架,不再进行展示;并且不参与【猎芯询报价】系统的自动推送询价');
},
watch: {
$route(to, from) {
let tab_arr = sessionStorage.getItem('tabs')
if (tab_arr) {
this.tabs = JSON.parse(tab_arr);
}
let app_ = document.getElementById('app');
this.collapse = false;
if (to.path == '/login') {
app_.setAttribute('style', 'padding:0');
} else {
if (this.collapse) {
app_.setAttribute('style', 'padding-left:62px');
} else {
app_.setAttribute('style', 'padding-left:226px');
}
}
}
this.$notify({
title: '提示',
duration: 20000,
dangerouslyUseHTMLString: true,
message: htmlArr.join(''),
position: 'bottom-right',
onClose() {
that.countDown();//开启定时轮询
}
});
}
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
countDown() {
this.timer = setInterval(() => {
this.seconds--;
if (this.seconds <= 0) {
clearInterval(this.timer);
this.seconds = 60;
this.getLatestMsg();
}
}, 1000)
},
/**
* 获取新闻信息
*/
getNews() {
axios.post(NODE_ENVS_MSG + '/get_category_msg_list', {
page: this.page,
limit: this.limit,
msg_status: this.msg_status,
msg_category_id: this.msg_category_id,
user_id: this.supplier_id,//供应商id
sys_id: 17//芯链系统
}).then((res) => {
if (res.code === 0) {
this.tableData = res.data.list || [];
this.total = res.data.total;
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 全选
*/
selectAll() {
if (this.$refs.table.selection.length < this.tableData.length) {
this.checkAll = true;
} else {
this.checkAll = false;
}
this.$refs.table.toggleAllSelection();
},
/**
* 获取tab的数量
*/
getNotReadCount() {
axios.post(NODE_ENVS_MSG + '/get_not_read_count', {
user_id: this.supplier_id,//供应商id
sys_id: 17//芯链系统
}).then((res) => {
if (res.code === 0) {
this.notReadCount = res.data;
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 更改消息状态为已读
*/
updateMsg() {
if (this.multipleSelection.length == 0) {
this.$message({
showClose: true,
message: '请至少选择一条数据',
type: 'warning'
});
return;
}
var msg_ids = this.multipleSelection.map(obj => {
return obj.id
})
axios.post(NODE_ENVS_MSG + '/update_msg', {
user_id: this.supplier_id,//供应商id
sys_id: 17,//芯链系统
msg_ids: msg_ids.join(',')
}).then((res) => {
if (res.code === 0) {
this.getNotReadCount();
this.getNews();
this.$message({
message: '标记成功',
type: 'success'
});
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 删除信息
*/
deleteMsg() {
if (this.multipleSelection.length == 0) {
this.$message({
showClose: true,
message: '请至少选择一条数据',
type: 'warning'
});
return;
}
var msg_ids = this.multipleSelection.map(obj => {
return obj.id
})
axios.post(NODE_ENVS_MSG + '/delete_msg', {
user_id: this.supplier_id,//供应商id
sys_id: 17,//芯链系统
msg_ids: msg_ids.join(',')
}).then((res) => {
if (res.code === 0) {
this.getNotReadCount();
this.getNews();
this.$message({
message: '删除成功',
type: 'success'
});
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 操作按钮未读已读
*/
getNewsStatus(type) {
this.msg_status = type;
this.getNews();
this.getNotReadCount();
},
/**
* 获取个人信息
*/
getData() {
if (window.userInfo) {
this.userinfo = window.userInfo;
} else {
this.$http('get', "/api/user/getuserinfo").then(res => {
if (res.code == 0) {
this.userinfo = res.data;
window.userInfo = res.data
}
})
}
},
/**
* 消息通知展示
*/
showMsg() {
this.dialogNewsVisible = true;
this.getNotReadCount();
this.getNews();
},
/**
* tab切换
* @param index
*/
handleClick(tab, event) {
if (this.activeName == 'all') {
this.msg_category_id = 0;
} else if (this.activeName == 'inquiry') {
this.msg_category_id = 6;
} else if (this.activeName == 'orderForm') {
this.msg_category_id = 7;
} else if (this.activeName == 'returnGoods') {
this.msg_category_id = 8;
} else if (this.activeName == 'shelfLife') {
this.msg_category_id = 9;
}
this.page = 1;
this.msg_status = '';
this.getNotReadCount();
this.getNews();
},
/**
* chebox选择的数据
* @param val
*/
handleSelectionChange(val) {
this.multipleSelection = val;
if (val.length < this.tableData.length && val.length > 0) {
this.isIndeterminate = true;
} else if (val.length == this.tableData.length) {
this.isIndeterminate = false;
this.checkAll = true;
} else if (val.length == 0) {
this.isIndeterminate = false;
this.checkAll = false;
}
},
/**
* 分页条数切换
* @param val
*/
handleSizeChange(val) {
this.limit = val;
this.getNews();
},
/**
* 分页点击切换
* @param val
*/
handleCurrentChange(val) {
this.page = val;
this.getNews();
},
/**
* 操作手册
*/
handbook() {
this.dialogHandbookVisible = true;
},
tabUi() {
let tab_arr = JSON.parse(sessionStorage.getItem('tabs'));
if (tab_arr) {
if (tab_arr.length >= 9) {
this.$nextTick(() => {
if (this.$refs.scrollboxinner.clientWidth > this.$refs.scrollbox.clientWidth) {
document.querySelector('.tab-box').scrollLeft = 12000000;
}
})
}
}
},
tabUrl(item) {
this.$router.push({
path: item.path,
query: item.query
})
},
changePwd() {
this.dialogVisible = true;
},
tabss(lk) {
if (lk == "/") {
this.tabSure = 1;
}
if (lk == "/inquire" || lk == "/quote" || lk == '/inquire/detail') {
this.tabSure = 2;
}
if (lk == "/list" || lk == "/enter" || lk == '/listDetail') {
this.tabSure = 3;
}
if (lk == "/goods" || lk == "/brand") {
this.tabSure = 4;
}
if (lk == "/message") {
this.tabSure = 5;
}
let tab_arr = sessionStorage.getItem('tabs')
if (tab_arr) {
this.tabs = JSON.parse(tab_arr);
}
},
closetab(path) {
let tab_arr = JSON.parse(sessionStorage.getItem('tabs'))
for (var i = 0; i < tab_arr.length; i++) {
if (tab_arr[i].path == path) {
tab_arr.splice(i, 1);
sessionStorage.setItem('tabs', JSON.stringify(tab_arr));
this.tabs = tab_arr;
if (path == this.$route.path) {
if (i == 0) {
this.$router.push({
path: "/"
})
} else {
if (tab_arr[i - 1].query) {
this.$router.push({
path: tab_arr[i - 1].path,
query: tab_arr[i - 1].query
},
created() {
var self = this
this.getData();//获取个人信息
this.tabUi();
this.getMenu();
this.getWelcome();
window.onresize = function () {
self.tabUi()
};
},
mounted() {
this.tabss(this.$route.path)
},
methods: {
/**
* 获取当前用户的权限菜单
*/
getMenu() {
this.$http('GET', "/api/subAccount/getMenu", {}).then(res => {
if (res.code === 0) {
const overviewItem = res.data.data.find(item => item.name === "概况");
const menuData = res.data.data.filter(item => item.name !== "概况");
this.index_home = overviewItem;
const filteredData = menuData.filter(item => item.checked || (item.children && item.children.some(child => child.checked))).map(item => {
if (item.children && item.children.length > 0) {
item.children = item.children.filter(child => child.checked);
}
return item;
});
this.menuData = filteredData;
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
})
},
/**
* 欢迎
*/
getWelcome() {
var welcome = Util.getCookie('welcome') || '';
if (!welcome) {
Util.setCookie('welcome', true, 1);
this.dialogWelcome = true;
setTimeout(() => {
this.dialogWelcome = false;
this.getLatestMsg();//获取最新消息
this.getCategoryMsgList();//获取系统公告
}, 3000)
} else {
this.dialogWelcome = false;
this.getLatestMsg();//获取最新消息
this.getCategoryMsgList();//获取系统公告
}
},
/**
* 获取系统公告
*/
getCategoryMsgList() {
var msg_notice = Util.getCookie('ad') || '';
//判断是不是最新的消息
if (msg_notice) {
return;
}
this.$http('get', "/api/system/getNoticeList", {
page: 1,
limit: 1,
}).then(res => {
if (res.code === 0) {
if (res.data.list.length > 0) {
this.dialogNoticeVisible = true;
this.noticeMsg = res.data.list[0] || [];
Util.setCookie('ad', true, 1);
}
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
})
},
/**
* 获取最新消息
*/
getLatestMsg() {
var msg_id_val = sessionStorage.getItem('msg_id') || '';
var that = this;
axios.post(NODE_ENVS_MSG + '/get_latest_msg', {
page: 1,
limit: 1,
user_id: this.supplier_id,//供应商id
sys_id: 17//芯链系统
}).then((res) => {
if (res.code === 0) {
let htmlArr = [];
if (res.data.list.length > 0) {
let data = JSON.parse(res.data.list[0].msg_data);
this.not_read_count = res.data.not_read_count;
sessionStorage.removeItem('msg_id');
sessionStorage.setItem('msg_id', res.data.list[0].id);//存储最新id
//判断是不是最新的消息
if (msg_id_val) {
if (res.data.list[0].id == msg_id_val) {
that.countDown();//开启定时轮询
return;
}
}
this.msg_id = res.data.list[0].id;//存储最新id
let has_more = data.has_more;//判断是否出现更多,样式有区别
let html = '';
let cate_id = data.cate_id;//记录tab切换id
let colorStyle = '';
//定义颜色提醒
if (cate_id) {
if (cate_id == 6) {
colorStyle = 'color:' + this.color_arr[0].value;
} else if (cate_id == 7) {
colorStyle = 'color:' + this.color_arr[1].value;
} else if (cate_id == 8) {
colorStyle = 'color:' + this.color_arr[2].value;
} else if (cate_id == 9) {
colorStyle = 'color:' + this.color_arr[3].value;
} else {
colorStyle = 'color:' + this.color_arr[0].value;
}
}
if (has_more) {
html = '<P class="notify-text"><b>' + data.date + '</b><b>' + data.title + '</b><a style="' + colorStyle + '" href="' + data.link + '">' + data.title_suffix + '</a><a style="margin-left: 8px;" class="alink" href="' + data.has_more + '">更多>>></a></P>';
} else {
html = '<P class="notify-text"><b>' + data.date + '</b><b>' + data.title + '</b><a style="' + colorStyle + '" href="' + data.link + '">' + data.title_suffix + '</a></P>';
}
if (data.content.length > 0) {
htmlArr.push(html +
'<p>' + data.content[0].name + '' + data.content[0].value + '</p>' +
'<p>' + data.content[1].name + '' + data.content[1].value + '</p>' +
'<p>' + data.content[2].name + '' + data.content[2].value + '</p>' +
'<p>' + data.content[3].name + '' + data.content[3].value + '</p>' +
'<p>' + data.content[4].name + '' + data.content[4].value + '</p>');
} else {
htmlArr.push(html + '上架有效期到期后,该型号将会从【猎芯网】下架,不再进行展示;并且不参与【猎芯询报价】系统的自动推送询价');
}
this.$notify({
title: '提示',
duration: 20000,
dangerouslyUseHTMLString: true,
message: htmlArr.join(''),
position: 'bottom-right',
onClose() {
that.countDown();//开启定时轮询
}
});
}
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
countDown() {
this.timer = setInterval(() => {
this.seconds--;
if (this.seconds <= 0) {
clearInterval(this.timer);
this.seconds = 60;
this.getLatestMsg();
}
}, 1000)
},
/**
* 获取新闻信息
*/
getNews() {
axios.post(NODE_ENVS_MSG + '/get_category_msg_list', {
page: this.page,
limit: this.limit,
msg_status: this.msg_status,
msg_category_id: this.msg_category_id,
user_id: this.supplier_id,//供应商id
sys_id: 17//芯链系统
}).then((res) => {
if (res.code === 0) {
this.tableData = res.data.list || [];
this.total = res.data.total;
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 全选
*/
selectAll() {
if (this.$refs.table.selection.length < this.tableData.length) {
this.checkAll = true;
} else {
this.checkAll = false;
}
this.$refs.table.toggleAllSelection();
},
/**
* 获取tab的数量
*/
getNotReadCount() {
axios.post(NODE_ENVS_MSG + '/get_not_read_count', {
user_id: this.supplier_id,//供应商id
sys_id: 17//芯链系统
}).then((res) => {
if (res.code === 0) {
this.notReadCount = res.data;
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 更改消息状态为已读
*/
updateMsg() {
if (this.multipleSelection.length == 0) {
this.$message({
showClose: true,
message: '请至少选择一条数据',
type: 'warning'
});
return;
}
var msg_ids = this.multipleSelection.map(obj => {
return obj.id
})
axios.post(NODE_ENVS_MSG + '/update_msg', {
user_id: this.supplier_id,//供应商id
sys_id: 17,//芯链系统
msg_ids: msg_ids.join(',')
}).then((res) => {
if (res.code === 0) {
this.getNotReadCount();
this.getNews();
this.$message({
message: '标记成功',
type: 'success'
});
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 删除信息
*/
deleteMsg() {
if (this.multipleSelection.length == 0) {
this.$message({
showClose: true,
message: '请至少选择一条数据',
type: 'warning'
});
return;
}
var msg_ids = this.multipleSelection.map(obj => {
return obj.id
})
} else {
axios.post(NODE_ENVS_MSG + '/delete_msg', {
user_id: this.supplier_id,//供应商id
sys_id: 17,//芯链系统
msg_ids: msg_ids.join(',')
}).then((res) => {
if (res.code === 0) {
this.getNotReadCount();
this.getNews();
this.$message({
message: '删除成功',
type: 'success'
});
} else {
this.$message({
message: res.msg,
type: 'warning'
});
}
});
},
/**
* 操作按钮未读已读
*/
getNewsStatus(type) {
this.msg_status = type;
this.getNews();
this.getNotReadCount();
},
/**
* 获取个人信息
*/
getData() {
if (window.userInfo) {
this.userinfo = window.userInfo;
} else {
this.$http('get', "/api/user/getuserinfo").then(res => {
if (res.code == 0) {
this.userinfo = res.data;
window.userInfo = res.data
}
})
}
},
/**
* 消息通知展示
*/
showMsg() {
this.dialogNewsVisible = true;
this.getNotReadCount();
this.getNews();
},
/**
* tab切换
* @param index
*/
handleClick(tab, event) {
if (this.activeName == 'all') {
this.msg_category_id = 0;
} else if (this.activeName == 'inquiry') {
this.msg_category_id = 6;
} else if (this.activeName == 'orderForm') {
this.msg_category_id = 7;
} else if (this.activeName == 'returnGoods') {
this.msg_category_id = 8;
} else if (this.activeName == 'shelfLife') {
this.msg_category_id = 9;
}
this.page = 1;
this.msg_status = '';
this.getNotReadCount();
this.getNews();
},
/**
* chebox选择的数据
* @param val
*/
handleSelectionChange(val) {
this.multipleSelection = val;
if (val.length < this.tableData.length && val.length > 0) {
this.isIndeterminate = true;
} else if (val.length == this.tableData.length) {
this.isIndeterminate = false;
this.checkAll = true;
} else if (val.length == 0) {
this.isIndeterminate = false;
this.checkAll = false;
}
},
/**
* 分页条数切换
* @param val
*/
handleSizeChange(val) {
this.limit = val;
this.getNews();
},
/**
* 分页点击切换
* @param val
*/
handleCurrentChange(val) {
this.page = val;
this.getNews();
},
/**
* 操作手册
*/
handbook() {
this.dialogHandbookVisible = true;
},
tabUi() {
let tab_arr = JSON.parse(sessionStorage.getItem('tabs'));
if (tab_arr) {
if (tab_arr.length >= 9) {
this.$nextTick(() => {
if (this.$refs.scrollboxinner.clientWidth > this.$refs.scrollbox.clientWidth) {
document.querySelector('.tab-box').scrollLeft = 12000000;
}
})
}
}
},
tabUrl(item) {
this.$router.push({
path: tab_arr[i - 1].path,
path: item.path,
query: item.query
})
},
changePwd() {
this.dialogVisible = true;
},
tabss(lk) {
if (lk == "/") {
this.tabSure = 1;
}
if (lk == "/inquire" || lk == "/quote" || lk == '/inquire/detail') {
this.tabSure = 2;
}
if (lk == "/list" || lk == "/enter" || lk == '/listDetail') {
this.tabSure = 3;
}
if (lk == "/goods" || lk == "/brand") {
this.tabSure = 4;
}
if (lk == "/message") {
this.tabSure = 5;
}
let tab_arr = sessionStorage.getItem('tabs')
if (tab_arr) {
this.tabs = JSON.parse(tab_arr);
}
},
closetab(path) {
let tab_arr = JSON.parse(sessionStorage.getItem('tabs'))
for (var i = 0; i < tab_arr.length; i++) {
if (tab_arr[i].path == path) {
tab_arr.splice(i, 1);
sessionStorage.setItem('tabs', JSON.stringify(tab_arr));
this.tabs = tab_arr;
if (path == this.$route.path) {
if (i == 0) {
this.$router.push({
path: "/"
})
} else {
if (tab_arr[i - 1].query) {
this.$router.push({
path: tab_arr[i - 1].path,
query: tab_arr[i - 1].query
})
} else {
this.$router.push({
path: tab_arr[i - 1].path,
})
}
}
}
break;
}
}
},
zk() {
this.collapse = !this.collapse;
let app_ = document.getElementById('app');
if (this.collapse) {
app_.setAttribute('style', 'padding-left:62px');
} else {
app_.setAttribute('style', 'padding-left:226px');
}
},
handleOpen(key, keyPath) {
if (this.$route.path == "/") {
this.isIndexTab = false
}
},
handleClose(key, keyPath) {
if (this.$route.path == "/") {
this.isIndexTab = true
}
},
handleSelect(key, keyPath) {
this.tabss(key)
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.$http('post', "/api/user/setpasswd", this.ruleForm).then(res => {
if (res.code === 0) {
this.$message('修改成功');
setTimeout(() => {
Util.delCookie('token');
window.location.href = '/#/login';
window.userInfo = ""
history.go(0);
}, 2000)
} else {
this.$message(res.msg);
}
}).catch(err => {
console.log(err.message);
})
} else {
console.log('error submit!!');
return false;
}
});
},
logout() {
MessageBox.confirm('确定退出系统吗?', {
type: 'error'
}).then(() => {
this.$http('post', "/auth/logout").then(res => {
Util.delCookie('token');
sessionStorage.removeItem('tabs');
window.location.href = '/#/login';
window.userInfo = ""
history.go(0);
}).catch(err => {
console.log(err.message);
})
}).catch(() => {
})
}
}
}
break;
}
}
},
zk() {
this.collapse = !this.collapse;
let app_ = document.getElementById('app');
if (this.collapse) {
app_.setAttribute('style', 'padding-left:62px');
} else {
app_.setAttribute('style', 'padding-left:226px');
}
},
handleOpen(key, keyPath) {
if (this.$route.path == "/") {
this.isIndexTab = false
}
},
handleClose(key, keyPath) {
if (this.$route.path == "/") {
this.isIndexTab = true
}
},
handleSelect(key, keyPath) {
this.tabss(key)
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.$http('post', "/api/user/setpasswd", this.ruleForm).then(res => {
if (res.code === 0) {
this.$message('修改成功');
setTimeout(() => {
Util.delCookie('token');
window.location.href = '/#/login';
window.userInfo = ""
history.go(0);
}, 2000)
} else {
this.$message(res.msg);
}
}).catch(err => {
console.log(err.message);
})
} else {
console.log('error submit!!');
return false;
}
});
},
logout() {
MessageBox.confirm('确定退出系统吗?', {
type: 'error'
}).then(() => {
this.$http('post', "/auth/logout").then(res => {
Util.delCookie('token');
sessionStorage.removeItem('tabs');
window.location.href = '/#/login';
window.userInfo = ""
history.go(0);
}).catch(err => {
console.log(err.message);
})
}).catch(() => {
})
}
}
}
</script>
<style lang="less">
.kf-boxs {
width: 200px;
padding: 0 10px;
padding-bottom: 20px;
.itemg {
color: #646B78;
font-size: 14px;
height: 30px;
line-height: 30px;
font {
color: #333;
.kf-boxs {
width: 200px;
padding: 0 10px;
padding-bottom: 20px;
.itemg {
color: #646B78;
font-size: 14px;
height: 30px;
line-height: 30px;
font {
color: #333;
}
}
img {
display: block;
width: 70px;
height: 70px;
margin: 0 auto;
margin-top: 20px;
}
}
}
img {
display: block;
width: 70px;
height: 70px;
margin: 0 auto;
margin-top: 20px;
}
}
#app {
padding-left: 226px;
padding-top: 56px;
}
.kf-box {
position: fixed;
right: 0px;
width: 61px;
height: 61px;
top: 250px;
z-index: 11;
text-align: center;
.btnkf {
height: 61px;
width: 61px;
cursor: pointer;
}
}
.nav-top {
position: fixed;
left: 0px;
top: 0px;
right: 0px;
height: 56px;
z-index: 99;
.con-box {
height: 56px;
background: #fff;
box-shadow: 0px 2px 42px -8px rgba(206, 214, 219, 0.5);
.logo {
height: 56px;
width: 226px;
line-height: 56px;
font-weight: bold;
color: #fff;
text-align: center;
background: #1969F9;
box-shadow: 0px 2px 42px -8px rgba(206, 214, 219, 0.5);
font-size: 20px;
#app {
padding-left: 226px;
padding-top: 56px;
}
.tab-box {
padding: 8px 0px;
overflow-x: auto;
height: 40px;
overflow-y: hidden;
position: relative;
width: calc(100vw - 610px);
.kf-box {
position: fixed;
right: 0px;
width: 61px;
height: 61px;
top: 250px;
z-index: 11;
text-align: center;
.btnkf {
height: 61px;
width: 61px;
cursor: pointer;
}
}
.item-boxs {
position: absolute;
.nav-top {
position: fixed;
left: 0px;
}
.item {
color: #646B78;
font-size: 13px;
height: 40px;
line-height: 40px;
cursor: pointer;
transition: all 0.4s ease;
padding: 0 17px;
white-space: nowrap;
&.act {
background-color: #F1F4FA;
position: relative;
font {
color: #1969f9;
}
&::after {
content: "";
position: absolute;
top: 0;
width: 100%;
height: 2px;
background: #1969F9;
left: 0;
right: 0;
margin: 0 auto;
text-align: center;
}
&.first {
background-color: transparent;
&::after {
display: none;
top: 0px;
right: 0px;
height: 56px;
z-index: 99;
.con-box {
height: 56px;
background: #fff;
box-shadow: 0px 2px 42px -8px rgba(206, 214, 219, 0.5);
.logo {
height: 56px;
width: 226px;
line-height: 56px;
font-weight: bold;
color: #fff;
text-align: center;
background: #1969F9;
box-shadow: 0px 2px 42px -8px rgba(206, 214, 219, 0.5);
font-size: 20px;
}
}
&:hover {
.iconfont {
color: #1969f9;
.tab-box {
padding: 8px 0px;
overflow-x: auto;
height: 40px;
overflow-y: hidden;
position: relative;
width: calc(100vw - 610px);
.item-boxs {
position: absolute;
left: 0px;
}
.item {
color: #646B78;
font-size: 13px;
height: 40px;
line-height: 40px;
cursor: pointer;
transition: all 0.4s ease;
padding: 0 17px;
white-space: nowrap;
&.act {
background-color: #F1F4FA;
position: relative;
font {
color: #1969f9;
}
&::after {
content: "";
position: absolute;
top: 0;
width: 100%;
height: 2px;
background: #1969F9;
left: 0;
right: 0;
margin: 0 auto;
text-align: center;
}
&.first {
background-color: transparent;
&::after {
display: none;
}
}
&:hover {
.iconfont {
color: #1969f9;
}
}
}
&:hover {
font {
color: #1969F9;
}
}
.icon {
font-size: 13px;
margin-left: 5px;
}
}
}
}
}
&:hover {
font {
color: #1969F9;
}
.user-box {
height: 40px;
padding: 8px 0;
line-height: 40px;
color: #A1ACC1;
margin-right: 5px;
.message-num {
position: relative;
font-size: 23px;
cursor: pointer;
.el-badge {
position: absolute;
right: -11px;
top: -8px;
}
}
a {
color: #A1ACC1;
&:hover {
.icon {
color: #1969F9;
}
}
}
.icon {
font-size: 24px;
transition: all 0.5s;
&.el-icon-refresh {
animation-name: layui-rotate;
animation-duration: 1s;
animation-timing-function: linear;
}
}
.line {
width: 1px;
height: 30px;
background: #E5EBF6;
margin-left: 15px;
margin-right: 15px;
}
.msgh {
position: relative;
font {
position: absolute;
width: 19px;
height: 14px;
background: #1969F9;
border-radius: 7px;
text-align: center;
line-height: 14px;
font-size: 10px;
color: #fff;
left: 15px;
}
}
.login-v {
img {
width: 35px;
height: 35px;
object-fit: cover;
border-radius: 35px;
}
.namex {
margin-left: 10px;
margin-right: 10px;
font-size: 12px;
max-width: 100px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.lo-box-drop {
position: relative;
cursor: pointer;
.drop-box {
display: none;
position: absolute;
width: 94px;
height: 55px;
padding: 12px 0;
left: -66px;
top: 100%;
background: #FFFFFF;
box-shadow: 1px 2px 10px 0px rgba(119, 135, 145, 0.5);
&::after {
content: "";
border-style: solid;
border-color: transparent transparent #fff transparent;
border-width: 7px;
position: absolute;
top: -13px;
left: 72px;
}
a {
display: block;
width: 94px;
height: 28px;
line-height: 28px;
text-align: center;
font-size: 14px;
color: #646B78;
&:hover {
background: #E7F3FF;
}
}
}
&:hover {
.icon {
color: #1969F9;
}
.drop-box {
display: block;
}
}
}
}
}
}
.icon {
font-size: 13px;
margin-left: 5px;
}
}
}
.user-box {
height: 40px;
padding: 8px 0;
line-height: 40px;
color: #A1ACC1;
margin-right: 5px;
.message-num {
position: relative;
font-size: 23px;
cursor: pointer;
.el-badge {
position: absolute;
right: -11px;
top: -8px;
.nav-icon {
width: 62px;
background: #fff;
position: fixed;
left: 0px;
top: 56px;
bottom: 0px;
.zankai {
height: 26px;
font-size: 18px;
color: #646B78;
line-height: 26px;
padding-right: 5px;
span {
cursor: pointer;
&:hover {
color: #1969F9;
}
}
}
}
a {
color: #A1ACC1;
.item {
height: 46px;
line-height: 46px;
text-align: center;
cursor: pointer;
&.act {
background: #F1F4FA;
position: relative;
&::after {
content: "";
position: absolute;
left: 0px;
top: 7px;
width: 5px;
height: 30px;
background: #1969F9;
}
span {
color: #1969F9;
}
}
&:hover {
.icon {
color: #1969F9;
}
&:hover {
background: #F1F4FA;
}
.icon {
font-size: 20px;
color: #646B78;
}
}
}
}
.icon {
font-size: 24px;
transition: all 0.5s;
.nav-left {
width: 226px;
background: #fff;
position: fixed;
left: 0px;
top: 56px;
bottom: 0px;
&.el-icon-refresh {
animation-name: layui-rotate;
animation-duration: 1s;
animation-timing-function: linear;
}
}
.line {
width: 1px;
height: 30px;
background: #E5EBF6;
margin-left: 15px;
margin-right: 15px;
}
.msgh {
position: relative;
font {
position: absolute;
width: 19px;
height: 14px;
background: #1969F9;
border-radius: 7px;
text-align: center;
line-height: 14px;
font-size: 10px;
color: #fff;
left: 15px;
}
}
.login-v {
img {
width: 35px;
height: 35px;
object-fit: cover;
border-radius: 35px;
}
.meau-con {
width: 100%;
overflow: auto;
height: 100%;
background: #fff;
.namex {
margin-left: 10px;
margin-right: 10px;
font-size: 12px;
max-width: 100px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.el-icon-arrow-down:before {
content: "\e790";
}
.lo-box-drop {
position: relative;
cursor: pointer;
.drop-box {
display: none;
position: absolute;
width: 94px;
height: 55px;
padding: 12px 0;
left: -66px;
top: 100%;
background: #FFFFFF;
box-shadow: 1px 2px 10px 0px rgba(119, 135, 145, 0.5);
&::after {
content: "";
border-style: solid;
border-color: transparent transparent #fff transparent;
border-width: 7px;
position: absolute;
top: -13px;
left: 72px;
.zankai {
height: 26px;
font-size: 18px;
color: #646B78;
line-height: 26px;
padding-right: 17px;
span {
cursor: pointer;
transition: all 0.5s;
&:hover {
color: #1969F9;
}
}
}
a {
display: block;
width: 94px;
height: 28px;
line-height: 28px;
text-align: center;
font-size: 14px;
color: #646B78;
.el-submenu {
transition: all 0.4s ease;
position: relative;
&:hover {
&::after {
content: "";
position: absolute;
left: 0px;
top: 7px;
width: 5px;
height: 30px;
background: #1969F9;
}
}
}
&:hover {
background: #E7F3FF;
}
.el-menu-item:focus,
.el-menu-item:hover,
.el-submenu__title:hover {
background: #F1F4FA;
}
}
&:hover {
.icon {
color: #1969F9;
.el-submenu__title:hover span {
color: #1969F9;
}
.drop-box {
display: block;
.el-submenu.is-opened,
.indextab.is-active {
position: relative;
background: #F1F4FA;
span,
.iconfont {
color: #1969F9;
}
&::after {
content: "";
position: absolute;
left: 0px;
top: 7px;
width: 5px;
height: 30px;
background: #1969F9;
}
}
}
}
}
}
}
}
.nav-icon {
width: 62px;
background: #fff;
position: fixed;
left: 0px;
top: 56px;
bottom: 0px;
.zankai {
height: 26px;
font-size: 18px;
color: #646B78;
line-height: 26px;
padding-right: 5px;
span {
cursor: pointer;
&:hover {
color: #1969F9;
}
}
}
.el-menu-item {
height: 46px;
line-height: 42px;
.item {
height: 46px;
line-height: 46px;
text-align: center;
cursor: pointer;
.iconfont {
font-size: 20px;
color: #646B78;
margin-right: 14px;
}
&.act {
background: #F1F4FA;
position: relative;
a {
color: #646B78;
}
&::after {
content: "";
position: absolute;
left: 0px;
top: 7px;
width: 5px;
height: 30px;
background: #1969F9;
}
span {
color: #1969F9;
}
}
}
&:hover {
background: #F1F4FA;
}
.el-submenu__title {
height: 46px;
line-height: 42px;
padding-left: 37px;
transition: all 0.4s ease;
.iconfont {
font-size: 20px;
color: #646B78;
margin-right: 14px;
}
a {
color: #646B78;
}
}
.icon {
font-size: 20px;
color: #646B78;
}
}
}
.nav-left {
width: 226px;
background: #fff;
position: fixed;
left: 0px;
top: 56px;
bottom: 0px;
.meau-con {
width: 100%;
overflow: auto;
height: 100%;
background: #fff;
.el-icon-arrow-down:before {
content: "\e790";
}
.el-menu-item-group {
.el-menu-item-group__title {
display: none;
}
.el-menu-item {
font-size: 14px !important;
padding-left: 80px !important;
line-height: 46px !important;
height: 46px !important;
}
}
.zankai {
height: 26px;
font-size: 18px;
color: #646B78;
line-height: 26px;
padding-right: 17px;
.el-menu {
border: 0px;
span {
cursor: pointer;
transition: all 0.5s;
.el-menu-item,
.el-submenu__title {
font-size: 14px;
color: #646B78;
}
&:hover {
color: #1969F9;
}
}
}
.el-submenu {
transition: all 0.4s ease;
position: relative;
&:hover {
&::after {
content: "";
position: absolute;
left: 0px;
top: 7px;
width: 5px;
height: 30px;
background: #1969F9;
}
}
}
}
.el-menu-item:focus,
.el-menu-item:hover,
.el-submenu__title:hover {
background: #F1F4FA;
}
&::-webkit-scrollbar {
width: 10px;
}
&::-webkit-scrollbar-thumb {
border-radius: 8px;
background: #fff;
width: 10px;
-webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.2);
}
.el-submenu__title:hover span {
color: #1969F9;
&::-webkit-scrollbar-track {
border-radius: 0;
background: #D2D9E7;
}
}
}
.el-submenu.is-opened,
.indextab.is-active {
position: relative;
background: #F1F4FA;
.el-badge-num {
position: absolute;
left: -1px;
top: 14px;
width: 7px;
height: 7px;
background: #fe0000;
border-radius: 50%;
display: block;
box-sizing: border-box;
}
span,
.iconfont {
color: #1969F9;
}
.tab-news {
margin-bottom: 6px;
border-bottom: 1px solid #E4E7ED;
}
&::after {
content: "";
position: absolute;
left: 0px;
top: 7px;
width: 5px;
height: 30px;
background: #1969F9;
}
.tab-news .el-tabs__header {
margin-bottom: 0 !important;
}
.el-menu-item {
height: 46px;
line-height: 42px;
.el-tabs__nav-wrap::after {
background-color: transparent;
}
.iconfont {
font-size: 20px;
color: #646B78;
margin-right: 14px;
}
.notify-text b {
margin-right: 5px;
}
a {
color: #646B78;
}
@keyframes layui-rotate {
from {
-webkit-transform: rotate(0)
}
to {
-webkit-transform: rotate(360deg)
}
}
.el-submenu__title {
height: 46px;
line-height: 42px;
padding-left: 37px;
transition: all 0.4s ease;
.iconfont {
font-size: 20px;
color: #646B78;
margin-right: 14px;
}
a {
color: #646B78;
}
.dialog-layer-notice .el-dialog__body {
padding: 0 !important;
}
.el-menu-item-group {
.el-menu-item-group__title {
display: none;
}
.el-menu-item {
font-size: 14px !important;
padding-left: 80px !important;
line-height: 46px !important;
height: 46px !important;
}
.dialog-layer-notice .el-dialog__header {
border-bottom: 1px solid #E5EBF6;
}
.el-menu {
border: 0px;
.handbook-layer {
.el-menu-item,
.el-submenu__title {
font-size: 14px;
color: #646B78;
}
.el-dialog__body {
max-height: 600px;
overflow-y: auto;
}
.handbook-t1 {
border-bottom: 1px solid #E5EBF6;
padding-bottom: 10px;
}
}
.handbook-t2 {
font-size: 14px;
color: #409eff;
font-weight: bold;
padding: 15px 0;
}
&::-webkit-scrollbar {
width: 10px;
}
.text {
margin-bottom: 20px;
box-shadow: 0px 2px 42px -8px rgba(206, 214, 219, 0.5);
&::-webkit-scrollbar-thumb {
border-radius: 8px;
background: #fff;
width: 10px;
-webkit-box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.2);
}
.tit {
padding-left: 24px;
height: 40px;
background-color: #f1f5fa;
color: #409eff;
font-size: 14px;
}
&::-webkit-scrollbar-track {
border-radius: 0;
background: #D2D9E7;
}
}
}
.el-badge-num {
position: absolute;
left: -1px;
top: 14px;
width: 7px;
height: 7px;
background: #fe0000;
border-radius: 50%;
display: block;
box-sizing: border-box;
}
.tab-news {
margin-bottom: 6px;
border-bottom: 1px solid #E4E7ED;
}
.tab-news .el-tabs__header {
margin-bottom: 0 !important;
}
.el-tabs__nav-wrap::after {
background-color: transparent;
}
.notify-text b {
margin-right: 5px;
}
.notify-text a {
}
@keyframes layui-rotate {
from {
-webkit-transform: rotate(0)
}
to {
-webkit-transform: rotate(360deg)
}
}
.dialog-layer-notice .el-dialog__body {
padding: 0 !important;
}
.dialog-layer-notice .el-dialog__header {
border-bottom: 1px solid #E5EBF6;
}
.handbook-layer {
.el-dialog__body {
max-height: 600px;
overflow-y: auto;
}
.handbook-t1 {
border-bottom: 1px solid #E5EBF6;
padding-bottom: 10px;
}
.handbook-t2 {
font-size: 14px;
color: #409eff;
font-weight: bold;
padding: 15px 0;
}
.text {
margin-bottom: 20px;
box-shadow: 0px 2px 42px -8px rgba(206, 214, 219, 0.5);
.tit {
padding-left: 24px;
height: 40px;
background-color: #f1f5fa;
color: #409eff;
font-size: 14px;
.tt {
padding: 12px 12px 12px 24px;
font-size: 14px;
}
}
}
.tt {
padding: 12px 12px 12px 24px;
font-size: 14px;
.welcome {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 99999999999999;
background: rgba(0, 0, 0, 0.3);
img {
position: relative;
width: 614px;
height: 394px;
object-fit: cover;
z-index: 99999999999998;
}
}
}
}
.welcome {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 99999999999999;
background: rgba(0, 0, 0, 0.3);
img {
position: relative;
width: 614px;
height: 394px;
object-fit: cover;
z-index: 99999999999998;
}
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment