更新大版本

backup_master_20231211
飘泊客 11 months ago
parent 34f18c29a1
commit 6491cb376f

@ -1,20 +1,20 @@
### ###
# @Description: # @Description:
# @Autor: 飘泊客 # @Autor: 飘泊客
# @Date: 2023-02-13 18:25:04 # @Date: 2023-02-13 18:25:04
# @LastEditors: 飘泊客 # @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
# @LastEditTime: 2023-06-21 15:15:11 # @LastEditTime: 2023-10-10 10:21:00
### ###
ENV = 'development' ENV = 'development'
# 接口地址 http://8.130.96.163:8899 # 接口地址 http://8.130.96.163:8899
VUE_APP_BASE_API = 'http://8.130.96.163:8899' # VUE_APP_BASE_API = 'https://baiyee.vip'
#VUE_APP_BASE_API = 'http://172.18.0.225:8899xy' #VUE_APP_BASE_API = 'http://172.18.0.225:8899xy'
#VUE_APP_BASE_API = 'http://172.18.0.228:8899ts' #VUE_APP_BASE_API = 'http://172.18.0.228:8899ts'
#VUE_APP_BASE_API = 'http://172.18.1.8:8899jt' # VUE_APP_BASE_API = 'http://172.18.1.8:8899jt'
# VUE_APP_BASE_API = 'http://8.130.96.163:8899' VUE_APP_BASE_API = 'http://39.100.77.21:8013'
VUE_APP_BASE_IMG = 'https://baiyee.vip' VUE_APP_BASE_IMG = 'http://39.100.77.21:8013'
VUE_APP_WS_API = 'wss://baiyee.vip' VUE_APP_WS_API = 'wss://baiyee.vip'
# 是否启用 babel-plugin-dynamic-import-node插件 # 是否启用 babel-plugin-dynamic-import-node插件
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -1,15 +1,15 @@
### ###
# @Description: # @Description:
# @Autor: 飘泊客 # @Autor: 飘泊客
# @Date: 2023-05-05 16:18:03 # @Date: 2023-05-05 16:18:03
# @LastEditors: 飘泊客 # @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
# @LastEditTime: 2023-06-05 16:05:04 # @LastEditTime: 2023-10-09 15:31:18
### ###
ENV = 'production' ENV = 'production'
# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇Nginx 配置 # 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇Nginx 配置
# 接口地址,注意协议,如果你没有配置 ssl需要将 https 改为 http # 接口地址,注意协议,如果你没有配置 ssl需要将 https 改为 http
VUE_APP_BASE_API = 'https://baiyee.vip' VUE_APP_BASE_API = 'http://39.100.77.21:8013'
VUE_APP_BASE_IMG = 'https://baiyee.vip' VUE_APP_BASE_IMG = 'http://39.100.77.21:8013'
# 如果接口是 http 形式, wss 需要改为 ws # 如果接口是 http 形式, wss 需要改为 ws
VUE_APP_WS_API = 'wss://baiyee.vip' VUE_APP_WS_API = 'wss://baiyee.vip'

@ -1,3 +1,3 @@
# byhl-scrm # byhl-scrm
太空外呼管理系统 RTA回访

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

@ -1 +0,0 @@
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/favicon.ico><x-pre-process cmd=set data="media_mix_inbound_outbound_codecs=true"><meta name=Description content=致力于为广告主搭建高效的客户触达管理系统,通过连接广告投放与广告营销数据,提升营销数据的商业价值的企业管理平台><meta name=keywords content=电销管理平台><title>太空猫电销平台</title><link href=/static/css/chunk-libs.5458ba28.css rel=stylesheet><link href=/static/css/app.d98ebdb2.css rel=stylesheet></head><body><div id=app></div><script src=/static/js/chunk-elementUI.c875aacd.js></script><script src=/static/js/chunk-libs.55752dbb.js></script><script>(function(e){function n(n){for(var r,c,o=n[0],i=n[1],f=n[2],d=0,l=[];d<o.length;d++)c=o[d],a[c]&&l.push(a[c][0]),a[c]=0;for(r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r]);h&&h(n);while(l.length)l.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,n=0;n<u.length;n++){for(var t=u[n],r=!0,c=1;c<t.length;c++){var o=t[c];0!==a[o]&&(r=!1)}r&&(u.splice(n--,1),e=i(i.s=t[0]))}return e}var r={},c={runtime:0},a={runtime:0},u=[];function o(e){return i.p+"static/js/"+({}[e]||e)+"."+{"chunk-2d0b2b28":"3583b2d5","chunk-2d0f010c":"651a35f9","chunk-32e403b6":"577f6b75","chunk-30acf8f6":"b7906c8a","chunk-11c10000":"64c19879","chunk-c441b682":"4519adc8","chunk-53d1b5c1":"59cb09f4","chunk-5bea1aac":"380fa2aa","chunk-2d230834":"95e27f1a","chunk-3ac1ee7c":"5e31b8c1","chunk-6a4daa12":"3f77dafc"}[e]+".js"}function i(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var n=[],t={"chunk-32e403b6":1,"chunk-30acf8f6":1,"chunk-11c10000":1,"chunk-c441b682":1,"chunk-53d1b5c1":1,"chunk-5bea1aac":1,"chunk-3ac1ee7c":1,"chunk-6a4daa12":1};c[e]?n.push(c[e]):0!==c[e]&&t[e]&&n.push(c[e]=new Promise((function(n,t){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-2d0b2b28":"31d6cfe0","chunk-2d0f010c":"31d6cfe0","chunk-32e403b6":"37be1f56","chunk-30acf8f6":"79c947a7","chunk-11c10000":"9246e4d4","chunk-c441b682":"d7a0e624","chunk-53d1b5c1":"1d376607","chunk-5bea1aac":"cb9d71cd","chunk-2d230834":"31d6cfe0","chunk-3ac1ee7c":"73d0e5de","chunk-6a4daa12":"de3e37a6"}[e]+".css",a=i.p+r,u=document.getElementsByTagName("link"),o=0;o<u.length;o++){var f=u[o],d=f.getAttribute("data-href")||f.getAttribute("href");if("stylesheet"===f.rel&&(d===r||d===a))return n()}var l=document.getElementsByTagName("style");for(o=0;o<l.length;o++){f=l[o],d=f.getAttribute("data-href");if(d===r||d===a)return n()}var h=document.createElement("link");h.rel="stylesheet",h.type="text/css",h.onload=n,h.onerror=function(n){var r=n&&n.target&&n.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.request=r,delete c[e],h.parentNode.removeChild(h),t(u)},h.href=a;var s=document.getElementsByTagName("head")[0];s.appendChild(h)})).then((function(){c[e]=0})));var r=a[e];if(0!==r)if(r)n.push(r[2]);else{var u=new Promise((function(n,t){r=a[e]=[n,t]}));n.push(r[2]=u);var f,d=document.createElement("script");d.charset="utf-8",d.timeout=120,i.nc&&d.setAttribute("nonce",i.nc),d.src=o(e),f=function(n){d.onerror=d.onload=null,clearTimeout(l);var t=a[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),c=n&&n.target&&n.target.src,u=new Error("Loading chunk "+e+" failed.\n("+r+": "+c+")");u.type=r,u.request=c,t[1](u)}a[e]=void 0}};var l=setTimeout((function(){f({type:"timeout",target:d})}),12e4);d.onerror=d.onload=f,document.head.appendChild(d)}return Promise.all(n)},i.m=e,i.c=r,i.d=function(e,n,t){i.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,n){if(1&n&&(e=i(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)i.d(t,r,function(n){return e[n]}.bind(null,r));return t},i.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="/",i.oe=function(e){throw console.error(e),e};var f=window["webpackJsonp"]=window["webpackJsonp"]||[],d=f.push.bind(f);f.push=n,f=f.slice();for(var l=0;l<f.length;l++)n(f[l]);var h=d;t()})([]);</script><script src=/static/js/app.4f40b29f.js></script></body></html>

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
.u-flex{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.pan-item,.u-flex{display:-webkit-box;display:-ms-flexbox;display:flex}.pan-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:18px}.pan-item .pan-label{width:90px;text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.input-new-tag{margin-left:10px;vertical-align:bottom}.avatar{width:120px;height:120px;border-radius:50%}.user-info{padding-left:0;list-style:none}.user-info li{border-bottom:1px solid #f0f3f4;padding:11px 0;font-size:13px}.user-info .user-right{float:right;width:69%;text-align:right}.user-info .user-right a{color:#317ef3}

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
.agrProp[data-v-3dbb7ed7] .el-dialog{height:70vh;overflow:auto}.agrProp[data-v-3dbb7ed7] .el-dialog__body{padding-top:0}.el-carousel__item h3[data-v-3dbb7ed7]{color:#475669;font-size:18px;opacity:.75;line-height:300px;margin:0}.login[data-v-3dbb7ed7]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;background-size:100% 100%}.left-block[data-v-3dbb7ed7]{background-color:#f7f8fa;-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;position:relative}.left-block .el-carousel[data-v-3dbb7ed7]{position:absolute;left:0;right:0;margin:auto;top:25vh}.left-block .carousel-img[data-v-3dbb7ed7]{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.right-block[data-v-3dbb7ed7]{background-color:rgba(59,130,246,.1);-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;position:relative}.right-block .kf-icon[data-v-3dbb7ed7]{width:30px;height:30px;margin-right:3px}.right-block .fk-block[data-v-3dbb7ed7]{position:absolute;right:28px;top:23px}.right-block .fkText[data-v-3dbb7ed7]{color:#606060;font-size:14px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer}.top-title[data-v-3dbb7ed7]{margin:0 auto 20px auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.top-title .title[data-v-3dbb7ed7]{color:#23272e;letter-spacing:1px}.logoImg[data-v-3dbb7ed7]{width:30px;height:30px}.login-form[data-v-3dbb7ed7]{border-radius:6px;background:#fff;width:370px;padding:25px 25px 5px 25px;position:absolute;-webkit-box-shadow:0 0 16px rgba(0,0,0,.05);box-shadow:0 0 16px rgba(0,0,0,.05);left:0;right:0;margin:auto;top:25vh}.login-form .el-input[data-v-3dbb7ed7],.login-form .el-input input[data-v-3dbb7ed7]{height:38px}.login-form .input-icon[data-v-3dbb7ed7]{height:39px;width:14px;margin-left:2px}.login-tip[data-v-3dbb7ed7]{font-size:13px;text-align:center;color:#bfbfbf}.login-code[data-v-3dbb7ed7]{width:33%;display:inline-block;height:38px;float:right}.login-code img[data-v-3dbb7ed7]{cursor:pointer;vertical-align:middle}

@ -1 +0,0 @@
.errPage-container[data-v-6b434c2e]{width:800px;max-width:100%;margin:100px auto}.errPage-container .pan-back-btn[data-v-6b434c2e]{background:#008489;color:#fff;border:none!important}.errPage-container .pan-gif[data-v-6b434c2e]{margin:0 auto;display:block}.errPage-container .pan-img[data-v-6b434c2e]{display:block;margin:0 auto;width:100%}.errPage-container .text-jumbo[data-v-6b434c2e]{font-size:60px;font-weight:700;color:#484848}.errPage-container .list-unstyled[data-v-6b434c2e]{font-size:14px}.errPage-container .list-unstyled li[data-v-6b434c2e]{padding-bottom:5px}.errPage-container .list-unstyled a[data-v-6b434c2e]{color:#008489;text-decoration:none}.errPage-container .list-unstyled a[data-v-6b434c2e]:hover{text-decoration:underline}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
.wscn-http404-container[data-v-3e2d3bdd]{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;top:40%;left:50%}.bullshit__oops[data-v-3e2d3bdd]{color:#5066e1!important}.bullshit__return-home[data-v-3e2d3bdd]{background:#5066e1!important;border-radius:.2rem!important}.wscn-http404[data-v-3e2d3bdd]{position:relative;width:1200px;padding:0 50px;overflow:hidden}.wscn-http404 .pic-404[data-v-3e2d3bdd]{position:relative;float:left;width:600px;overflow:hidden}.wscn-http404 .pic-404__parent[data-v-3e2d3bdd]{width:100%}.wscn-http404 .pic-404__child[data-v-3e2d3bdd]{position:absolute}.wscn-http404 .pic-404__child.left[data-v-3e2d3bdd]{width:80px;top:17px;left:220px;opacity:0;-webkit-animation-name:cloudLeft-data-v-3e2d3bdd;animation-name:cloudLeft-data-v-3e2d3bdd;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}.wscn-http404 .pic-404__child.mid[data-v-3e2d3bdd]{width:46px;top:10px;left:420px;opacity:0;-webkit-animation-name:cloudMid-data-v-3e2d3bdd;animation-name:cloudMid-data-v-3e2d3bdd;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1.2s;animation-delay:1.2s}.wscn-http404 .pic-404__child.right[data-v-3e2d3bdd]{width:62px;top:100px;left:500px;opacity:0;-webkit-animation-name:cloudRight-data-v-3e2d3bdd;animation-name:cloudRight-data-v-3e2d3bdd;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}@-webkit-keyframes cloudLeft-data-v-3e2d3bdd{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@keyframes cloudLeft-data-v-3e2d3bdd{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@-webkit-keyframes cloudMid-data-v-3e2d3bdd{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@keyframes cloudMid-data-v-3e2d3bdd{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@-webkit-keyframes cloudRight-data-v-3e2d3bdd{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}@keyframes cloudRight-data-v-3e2d3bdd{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}.wscn-http404 .bullshit[data-v-3e2d3bdd]{position:relative;float:left;width:300px;padding:30px 0;overflow:hidden}.wscn-http404 .bullshit__oops[data-v-3e2d3bdd]{font-size:32px;line-height:40px;color:#1482f0;margin-bottom:20px;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__headline[data-v-3e2d3bdd],.wscn-http404 .bullshit__oops[data-v-3e2d3bdd]{font-weight:700;opacity:0;-webkit-animation-name:slideUp-data-v-3e2d3bdd;animation-name:slideUp-data-v-3e2d3bdd;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__headline[data-v-3e2d3bdd]{font-size:20px;line-height:24px;color:#222;margin-bottom:10px;-webkit-animation-delay:.1s;animation-delay:.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-3e2d3bdd]{font-size:13px;line-height:21px;color:grey;margin-bottom:30px;-webkit-animation-delay:.2s;animation-delay:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-3e2d3bdd],.wscn-http404 .bullshit__return-home[data-v-3e2d3bdd]{opacity:0;-webkit-animation-name:slideUp-data-v-3e2d3bdd;animation-name:slideUp-data-v-3e2d3bdd;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__return-home[data-v-3e2d3bdd]{display:block;float:left;width:110px;height:36px;background:#1482f0;border-radius:100px;text-align:center;color:#fff;font-size:14px;line-height:36px;cursor:pointer;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes slideUp-data-v-3e2d3bdd{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes slideUp-data-v-3e2d3bdd{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

@ -1,72 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Copyright (C) 2017 by original authors @ fontello.com</metadata>
<defs>
<font id="fontello" horiz-adv-x="1000" >
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
<missing-glyph horiz-adv-x="1000" />
<glyph glyph-name="bold" unicode="&#xe800;" d="M310 1q41-18 78-18 210 0 210 187 0 64-23 101-15 24-34 41t-38 26-45 14-47 6-53 1q-40 0-56-6 0-29 0-88t-1-88q0-5 0-38t0-54 2-47 7-37z m-8 417q23-4 61-4 46 0 80 7t61 25 42 50 14 79q0 39-16 68t-45 46-60 24-69 8q-28 0-73-7 0-28 3-84t2-85q0-15 0-45t-1-44q0-26 1-38z m-302-497l1 53q9 2 48 9t59 15q4 7 7 15t4 19 4 18 1 21 0 19v36q0 548-12 572-2 5-12 8t-25 6-28 4-27 3-17 2l-2 46q55 1 190 6t208 6q13 0 38-1t38 0q39 0 76-7t72-24 60-39 41-59 16-76q0-29-9-54t-22-40-36-32-41-25-47-22q86-20 144-75t57-138q0-56-20-101t-52-72-77-48-91-27-98-8q-25 0-74 2t-74 1q-59 0-171-6t-129-7z" horiz-adv-x="785.7" />
<glyph glyph-name="italic" unicode="&#xe801;" d="M0-78l10 48q12 4 34 9t40 11 33 13q16 19 23 56 1 4 35 162t63 303 29 165v14q-13 8-30 11t-39 4-32 3l10 58q19-1 67-4t84-4 67-1q27 0 55 1t68 4 54 4q-2-22-10-50-17-6-57-16t-60-19q-5-10-8-23t-5-23-4-25-4-24q-15-82-49-234t-43-198q-1-5-7-32t-11-51-9-46-4-32l1-10q9-3 103-18-2-24-9-55-6 0-18-1t-18-1q-16 0-49 6t-48 6q-77 1-115 1-28 0-79-5t-68-7z" horiz-adv-x="571.4" />
<glyph glyph-name="thumb-tack" unicode="&#xe802;" d="M650 779q12 0 24-5 19-8 29-23t11-35v-719q0-19-11-35t-29-23q-10-4-24-4-27 0-47 18l-246 236-246-236q-20-19-46-19-13 0-25 5-18 7-29 23t-11 35v719q0 19 11 35t29 23q12 5 25 5h585z" horiz-adv-x="714.3" />
<glyph glyph-name="link" unicode="&#xe803;" d="M813 171q0 23-16 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q16 16 16 37z m-393 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 11-8 12-12 10-11q18 17 18 41z m500-394q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l115-116q46-46 46-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
<glyph glyph-name="picture-o" unicode="&#xe804;" d="M357 529q0-45-31-76t-76-32-76 32-31 76 31 76 76 31 76-31 31-76z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-7 6-13t12-5h893q7 0 13 5t5 13v678q0 8-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
<glyph glyph-name="repeat" unicode="&#xe805;" d="M857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-61-91-23-111 23-111 61-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q17 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
<glyph glyph-name="undo" unicode="&#xe806;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
<glyph glyph-name="trash-o" unicode="&#xe807;" d="M286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
<glyph glyph-name="floppy-o" unicode="&#xe808;" d="M214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-7 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z" horiz-adv-x="857.1" />
<glyph glyph-name="compress" unicode="&#xe809;" d="M429 314v-250q0-14-11-25t-25-10-25 10l-81 81-185-186q-5-5-13-5t-12 5l-64 64q-6 6-6 13t6 13l185 185-80 80q-11 11-11 25t11 25 25 11h250q14 0 25-11t11-25z m421 375q0-7-6-12l-185-186 80-80q11-11 11-25t-11-25-25-11h-250q-14 0-25 11t-10 25v250q0 14 10 25t25 10 25-10l81-80 185 185q6 5 13 5t13-5l63-64q6-5 6-13z" horiz-adv-x="857.1" />
<glyph glyph-name="eye" unicode="&#xe80a;" d="M929 314q-85 132-213 197 34-58 34-125 0-103-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 243 68 186 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
<glyph glyph-name="eye-slash" unicode="&#xe80b;" d="M310 105l43 79q-48 35-76 88t-27 114q0 67 34 125-128-65-213-197 94-144 239-209z m217 424q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m202 106q0-4 0-5-59-105-176-316t-176-316l-28-50q-5-9-15-9-7 0-75 39-9 6-9 16 0 7 25 49-80 36-147 96t-117 137q-11 17-11 38t11 39q86 131 212 207t277 76q50 0 100-10l31 54q5 9 15 9 3 0 10-3t18-9 18-10 18-10 10-7q9-5 9-15z m21-249q0-78-44-142t-117-91l157 280q4-25 4-47z m250-72q0-19-11-38-22-36-61-81-84-96-194-149t-234-53l41 74q119 10 219 76t169 171q-65 100-158 164l35 63q53-36 102-85t81-103q11-19 11-39z" horiz-adv-x="1000" />
<glyph glyph-name="question-circle" unicode="&#xe80c;" d="M500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-13 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-15-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
<glyph glyph-name="times" unicode="&#xe80d;" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
<glyph glyph-name="align-left" unicode="&#xe80f;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-714q-15 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-857q-15 0-25 11t-11 25v72q0 14 11 25t25 10h857q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-643q-15 0-25 10t-11 25v72q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="1000" />
<glyph glyph-name="align-center" unicode="&#xe810;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-500q-14 0-25 11t-11 25v71q0 15 11 25t25 11h500q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v72q0 14 11 25t25 10h786q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-358q-14 0-25 10t-10 25v72q0 14 10 25t25 11h358q14 0 25-11t10-25z" horiz-adv-x="1000" />
<glyph glyph-name="align-right" unicode="&#xe811;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 214v-71q0-15-11-25t-25-11h-714q-14 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m0 215v-72q0-14-11-25t-25-11h-857q-14 0-25 11t-11 25v72q0 14 11 25t25 10h857q15 0 25-10t11-25z m0 214v-72q0-14-11-25t-25-10h-643q-14 0-25 10t-10 25v72q0 14 10 25t25 11h643q15 0 25-11t11-25z" horiz-adv-x="1000" />
<glyph glyph-name="arrows-alt" unicode="&#xf0b2;" d="M716 548l-198-198 198-198 80 80q17 18 39 8 22-9 22-33v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 21 7 38l81 81-198 198-198-198 80-81q17-17 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l80-80 198 198-198 198-80-80q-11-11-25-11-7 0-14 3-22 9-22 33v250q0 14 11 25t25 11h250q23 0 33-23 9-21-8-38l-80-81 198-198 198 198-81 81q-17 17-7 38 9 23 32 23h250q15 0 26-11t10-25v-250q0-24-22-33-7-3-14-3-14 0-25 11z" horiz-adv-x="857.1" />
<glyph glyph-name="bars" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
<glyph glyph-name="list-ul" unicode="&#xf0ca;" d="M214 64q0-44-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m0 286q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 7 5 12t13 6h678q7 0 13-6t5-12z m-786 518q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
<glyph glyph-name="list-ol" unicode="&#xf0cb;" d="M213-54q0-45-31-70t-75-26q-60 0-96 37l31 49q28-25 60-25 16 0 28 8t12 24q0 35-59 31l-14 31q4 6 18 24t24 31 20 21v1q-9 0-27-1t-27 0v-30h-59v85h186v-49l-53-65q28-6 45-27t17-49z m1 350v-89h-202q-4 20-4 30 0 29 14 52t31 38 37 27 31 24 14 25q0 14-9 22t-22 7q-25 0-45-32l-47 33q13 28 40 44t59 16q40 0 68-23t28-63q0-28-19-51t-42-36-42-28-20-30h71v34h59z m786-178v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 8 5 13t13 5h678q7 0 13-6t5-12z m-786 502v-56h-187v56h60q0 22 0 67t1 68v7h-1q-5-10-28-30l-40 42 76 71h59v-225h60z m786-216v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
<glyph glyph-name="strikethrough" unicode="&#xf0cc;" d="M982 350q8 0 13-5t5-13v-36q0-7-5-12t-13-5h-964q-8 0-13 5t-5 12v36q0 8 5 13t13 5h964z m-712 36q-16 19-29 44-27 55-27 105 0 101 75 173 74 71 219 71 28 0 94-11 36-7 98-27 6-21 12-66 8-68 8-102 0-10-3-25l-7-2-46 4-8 1q-28 83-58 114-49 51-117 51-64 0-101-33-38-32-38-81 0-41 37-78t156-72q38-12 96-37 33-16 53-29h-414z m283-143h229q4-22 4-51 0-62-23-119-13-31-40-58-20-19-61-45-44-27-85-37-45-12-113-12-64 0-109 13l-78 23q-32 8-40 15-5 5-5 12v8q0 60-1 87 0 17 0 38l1 20v25l57 1q8-19 17-40t12-31 7-15q20-32 45-52 24-20 59-32 33-12 73-12 36 0 78 15 43 14 68 48 26 34 26 72 0 47-45 87-19 16-76 40z" horiz-adv-x="1000" />
<glyph glyph-name="underline" unicode="&#xf0cd;" d="M27 726q-21 1-25 2l-2 49q7 1 22 1 34 0 63-3 74-4 93-4 47 0 93 2 65 2 82 3 31 0 48 1l-1-8 1-36v-5q-33-5-69-5-33 0-44-14-7-7-7-73 0-7 0-18t0-15l1-127 8-157q3-69 28-112 20-33 54-52 49-26 98-26 59 0 107 16 31 10 55 28 27 20 37 36 20 31 29 63 12 41 12 128 0 44-2 72t-6 68-8 89l-2 33q-3 37-13 49-19 20-43 19l-56-1-8 2 1 48h47l114-6q43-2 110 6l10-1q3-22 3-29 0-4-2-17-25-7-47-8-41-6-44-9-8-8-8-23 0-4 0-15t1-17q5-11 13-221 3-109-9-170-8-42-23-68-21-36-62-69-42-31-102-49-61-19-142-19-93 0-159 26-66 26-99 68-34 42-47 109-9 45-9 132v186q0 105-9 119-14 20-82 22z m830-787v36q0 8-5 13t-13 5h-821q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h821q8 0 13 5t5 13z" horiz-adv-x="857.1" />
<glyph glyph-name="table" unicode="&#xf0ce;" d="M286 82v107q0 8-5 13t-13 5h-179q-7 0-12-5t-6-13v-107q0-8 6-13t12-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-12-5t-6-12v-108q0-7 6-12t12-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-12-5t-6-13v-107q0-8 6-13t12-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
<glyph glyph-name="columns" unicode="&#xf0db;" d="M89-7h340v643h-358v-625q0-7 6-13t12-5z m768 18v625h-357v-643h339q8 0 13 5t5 13z m72 678v-678q0-37-27-63t-63-27h-750q-36 0-63 27t-26 63v678q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
<glyph glyph-name="quote-left" unicode="&#xf10d;" d="M429 314v-214q0-45-32-76t-76-31h-214q-44 0-76 31t-31 76v393q0 58 23 111t61 91 91 61 111 23h35q15 0 26-11t10-25v-72q0-14-10-25t-26-10h-35q-59 0-101-42t-42-101v-18q0-22 16-38t37-16h125q45 0 76-31t32-76z m500 0v-214q0-45-32-76t-76-31h-214q-44 0-76 31t-31 76v393q0 58 23 111t61 91 91 61 111 23h35q15 0 26-11t10-25v-72q0-14-10-25t-26-10h-35q-59 0-101-42t-42-101v-18q0-22 16-38t37-16h125q45 0 76-31t32-76z" horiz-adv-x="928.6" />
<glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
<glyph glyph-name="superscript" unicode="&#xf12b;" d="M501 86v-93h-139l-89 141-13 23q-4 5-6 12h-2q0-2-1-4t-2-4-2-4q-5-11-14-25l-86-139h-144v93h71l110 162-103 152h-76v94h154l77-127q1-2 13-24 4-5 6-11h2q1 5 6 11l14 24 78 127h143v-94h-69l-103-149 114-165h61z m355 379v-115h-287l-1 15q-3 16-3 26 0 36 15 65t36 48 47 37 47 30 36 30 15 36q0 21-17 35t-39 13q-29 0-54-21-8-6-20-22l-59 52q15 20 35 37 47 36 105 36 61 0 99-33t38-89q0-31-13-57t-35-43-45-33-46-28-37-28-17-36h130v45h70z" horiz-adv-x="857.1" />
<glyph glyph-name="subscript" unicode="&#xf12c;" d="M501 86v-93h-139l-89 141-13 23q-4 5-6 12h-2q0-2-1-4t-2-4-2-4q-5-11-14-25l-86-139h-144v93h71l110 162-103 152h-76v94h154l77-127q1-2 13-24 4-5 6-11h2q1 5 6 11l14 24 78 127h143v-94h-69l-103-149 114-165h61z m356-121v-115h-287l-2 15q-2 25-2 26 0 35 15 65t36 48 47 37 47 30 36 30 15 36q0 21-17 35t-39 13q-28 0-54-21-8-6-20-22l-59 52q15 20 35 37 45 36 105 36 62 0 100-33t37-89q0-37-19-66t-47-48-55-35-49-35-23-41h130v45h70z" horiz-adv-x="857.1" />
<glyph glyph-name="header" unicode="&#xf1dc;" d="M939-79q-25 0-74 2t-75 2q-24 0-73-2t-74-2q-13 0-21 12t-7 25q0 18 9 26t22 9 29 4 25 9q18 11 18 78l0 218q0 12-1 17-7 3-28 3h-376q-22 0-29-3 0-5 0-17l-1-207q0-79 21-91 9-6 26-8t32-2 25-8 11-26q0-14-6-26t-21-13q-26 0-78 2t-77 2q-24 0-71-2t-71-2q-13 0-20 12t-7 25q0 17 9 25t20 10 26 4 24 9q18 13 18 80l-1 31v454q0 2 1 15t0 20-1 21-2 24-4 20-6 18-9 10q-8 5-25 7t-29 1-23 7-10 26q0 14 6 26t20 13q26 0 78-2t77-2q23 0 71 2t70 2q14 0 21-13t7-26q0-17-9-25t-22-8-27-2-24-7q-20-12-20-90l1-178q0-12 0-18 7-2 22-2h390q14 0 21 2 1 6 1 18l0 178q0 78-19 90-10 6-33 7t-37 7-14 28q0 14 7 26t21 13q24 0 74-2t73-2q24 0 72 2t72 2q14 0 21-13t7-26q0-17-10-25t-22-8-29-2-24-7q-20-13-20-90l1-526q0-66 19-78 9-6 25-8t30-2 23-9 10-25q0-14-6-26t-20-13z" horiz-adv-x="1000" />
<glyph glyph-name="window-maximize" unicode="&#xf2d0;" d="M143 64h714v429h-714v-429z m857 625v-678q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v678q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
</font>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d230834"],{ed32:function(e,r,n){"use strict";n.r(r);n("a481");var t,u,a={created:function(){var e=this.$route,r=e.params,n=e.query,t=r.path;this.$router.replace({path:"/"+t,query:n})},render:function(e){return e()}},c=a,o=n("2877"),p=Object(o["a"])(c,t,u,!1,null,null,null);r["default"]=p.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-3ac1ee7c"],{"18db":function(t,a,e){"use strict";e.r(a);var n=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",{staticClass:"errPage-container"},[e("el-button",{staticClass:"pan-back-btn",attrs:{icon:"arrow-left"},on:{click:t.back}},[t._v("\n 返回\n ")]),t._v(" "),e("el-row",[e("el-col",{attrs:{span:12}},[e("h1",{staticClass:"text-jumbo text-ginormous"},[t._v("\n Oops!\n ")]),t._v(" "),e("h2",[t._v("你没有权限去该页面")]),t._v(" "),e("h6",[t._v("如有不满请联系你领导")]),t._v(" "),e("ul",{staticClass:"list-unstyled"},[e("li",[t._v("或者你可以去:")]),t._v(" "),e("li",{staticClass:"link-type"},[e("router-link",{attrs:{to:"/dashboard"}},[t._v("\n 回首页\n ")])],1)])]),t._v(" "),e("el-col",{attrs:{span:12}},[e("img",{attrs:{src:t.errGif,width:"313",height:"428",alt:"Girl has dropped her ice cream."}})])],1)],1)},s=[],c=e("cc6c"),r=e.n(c),i={name:"Page401",data:function(){return{errGif:r.a+"?"+ +new Date}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/dashboard"}):this.$router.go(-1)}}},o=i,l=(e("a61f"),e("2877")),u=Object(l["a"])(o,n,s,!1,null,"6b434c2e",null);a["default"]=u.exports},a61f:function(t,a,e){"use strict";e("f8f6")},cc6c:function(t,a,e){t.exports=e.p+"static/img/401.089007e7.gif"},f8f6:function(t,a,e){}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-6a4daa12"],{"50e0":function(t,s,a){"use strict";a.r(s);var e=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),t._v(" "),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._v(" "),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),t._v(" "),a("div",{staticClass:"bullshit__info"},[t._v("请检查您输入的网址是否正确,请点击以下按钮返回主页")]),t._v(" "),t._m(1)])])])},i=[function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("div",{staticClass:"pic-404"},[e("img",{staticClass:"pic-404__parent",attrs:{src:a("eb4d"),alt:"404"}})])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",[a("a",{staticClass:"bullshit__return-home",attrs:{href:"/"}},[t._v("返回首页")])])}],n={name:"Page404",computed:{message:function(){return"网管说这个页面你不能进......"}}},c=n,l=(a("dd8e"),a("2877")),r=Object(l["a"])(c,e,i,!1,null,"3e2d3bdd",null);s["default"]=r.exports},ab2a:function(t,s,a){},dd8e:function(t,s,a){"use strict";a("ab2a")},eb4d:function(t,s,a){t.exports=a.p+"static/img/404.b0b283cb.svg"}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{ {
"name": "eladmin-web", "name": "eladmin-web",
"version": "2.6.0", "version": "2.6.0",
"description": "太空猫", "description": "RTA回访",
"author": "Zheng Jie", "author": "Zheng Jie",
"license": "Apache-2.0", "license": "Apache-2.0",
"scripts": { "scripts": {

@ -1,26 +1,26 @@
<!-- <!--
* @Description: * @Description:
* @Autor: 飘泊客 * @Autor: 飘泊客
* @Date: 2021-12-15 14:44:41 * @Date: 2021-12-15 14:44:41
* @LastEditors: 飘泊客 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2023-05-18 16:24:07 * @LastEditTime: 2023-09-11 19:49:13
--> -->
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" /> --> <!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" /> -->
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> <!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico"> -->
<X-PRE-PROCESS cmd="set" data="media_mix_inbound_outbound_codecs=true"/> <X-PRE-PROCESS cmd="set" data="media_mix_inbound_outbound_codecs=true"/>
<meta name="Description" content="致力于为广告主搭建高效的客户触达管理系统,通过连接广告投放与广告营销数据,提升营销数据的商业价值的企业管理平台"> <meta name="Description" content="致力于为广告主搭建高效的客户触达管理系统,通过连接广告投放与广告营销数据,提升营销数据的商业价值的企业管理平台">
<meta name="keywords" content="电销管理平台"> <meta name="keywords" content="电销管理平台">
<title>太空猫电销平台</title> <title>RTA回访</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
</html> </html>

@ -1,383 +1,386 @@
@import 'variables'; @import 'variables';
@import 'mixin'; @import 'mixin';
@import 'transition'; @import 'transition';
@import 'element-ui'; @import 'element-ui';
@import 'sidebar'; @import 'sidebar';
@import 'btn'; @import 'btn';
@import 'eladmin'; @import 'eladmin';
body { body {
height: 100%; height: 100%;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility; text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
} }
.el-tooltip__popper { .el-tooltip__popper {
max-width: 60%!important; // max-width: 60%!important; //
} }
label { label {
font-weight: 700; font-weight: 700;
} }
html { html {
height: 100%; height: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
#app { #app {
height: 100%; height: 100%;
} }
*, *,
*:before, *:before,
*:after { *:after {
box-sizing: inherit; box-sizing: inherit;
} }
.no-padding { .no-padding {
padding: 0 !important; padding: 0 !important;
} }
.padding-content { .padding-content {
padding: 4px 0; padding: 4px 0;
} }
a:focus, a:focus,
a:active { a:active {
outline: none; outline: none;
} }
a, a,
a:focus, a:focus,
a:hover { a:hover {
cursor: pointer; cursor: pointer;
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
} }
.color33 { .color33 {
color: #333!important; color: #333!important;
} }
div:focus { div:focus {
outline: none; outline: none;
} }
.fs-12 { .fs-12 {
font-size: 12px; font-size: 12px;
} }
.fs-14 { .fs-13 {
font-size: 14px; font-size: 13px;
} }
.fs-15 { .fs-14 {
font-size: 15px; font-size: 14px;
} }
.fs-16 { .fs-15 {
font-size: 16px!important; font-size: 15px;
} }
.fs-18 { .fs-16 {
font-size: 18px!important; font-size: 16px!important;
} }
.fs-18 {
.fr { font-size: 18px!important;
float: right; }
}
.fl { .fr {
float: left; float: right;
} }
.pr-5 { .fl {
padding-right: 5px; float: left;
} }
.pb-10{ .pr-5 {
padding-bottom: 10px!important; padding-right: 5px;
} }
.pl-5 { .pb-10{
padding-left: 5px!important; padding-bottom: 10px!important;
} }
.pl-10 { .pl-5 {
padding-left: 10px!important; padding-left: 5px!important;
} }
.mt-5{ .pl-10 {
margin-top: 5px!important; padding-left: 10px!important;
} }
.mt-10{ .mt-5{
margin-top: 10px!important; margin-top: 5px!important;
} }
.mt-15{ .mt-10{
margin-top: 15px!important; margin-top: 10px!important;
} }
.mb-5{ .mt-15{
margin-bottom: 5px; margin-top: 15px!important;
} }
.mb-10{ .mb-5{
margin-bottom: 10px; margin-bottom: 5px;
} }
.mb-15{ .mb-10{
margin-bottom: 15px!important; margin-bottom: 10px;
} }
.ml-0 { .mb-15{
margin-left: 0px!important; margin-bottom: 15px!important;
} }
.ml-5 { .ml-0 {
margin-left: 5px!important; margin-left: 0px!important;
} }
.ml-10 { .ml-5 {
margin-left: 10px!important; margin-left: 5px!important;
} }
.ml-15 { .ml-10 {
margin-left: 15px!important; margin-left: 10px!important;
} }
.mr-5 { .ml-15 {
margin-right: 5px!important; margin-left: 15px!important;
} }
.mr-10 { .mr-5 {
margin-right: 10px!important; margin-right: 5px!important;
} }
.block { .mr-10 {
display: block; margin-right: 10px!important;
} }
.inline-block { .block {
display: inline-block; display: block;
} }
.inline-flex { .inline-block {
display: inline-flex; display: inline-block;
} }
.pointer { .inline-flex {
cursor: pointer; display: inline-flex;
} }
.pointer {
.clearfix { cursor: pointer;
&:after { }
visibility: hidden;
display: block; .clearfix {
font-size: 0; &:after {
content: " "; visibility: hidden;
clear: both; display: block;
height: 0; font-size: 0;
} content: " ";
} clear: both;
height: 0;
aside { }
background: #eef1f6; }
padding: 8px 24px;
margin-bottom: 20px; aside {
border-radius: 2px; background: #eef1f6;
display: block; padding: 8px 24px;
line-height: 32px; margin-bottom: 20px;
font-size: 16px; border-radius: 2px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; display: block;
color: #2c3e50; line-height: 32px;
-webkit-font-smoothing: antialiased; font-size: 16px;
-moz-osx-font-smoothing: grayscale; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50;
a { -webkit-font-smoothing: antialiased;
color: #337ab7; -moz-osx-font-smoothing: grayscale;
cursor: pointer;
a {
&:hover { color: #337ab7;
color: rgb(32, 160, 255); cursor: pointer;
}
} &:hover {
} color: rgb(32, 160, 255);
}
//main-container }
.app-container { }
padding: 20px;
margin: 20px; //main-container
background: #fff; .app-container {
} padding: 20px;
margin: 20px;
.components-container { background: #fff;
margin: 30px 50px; }
position: relative;
} .components-container {
margin: 30px 50px;
.pagination-container { position: relative;
margin-top: 30px; }
}
.pagination-container {
.text-center { margin-top: 30px;
text-align: center }
}
.text-center {
.sub-navbar { text-align: center
height: 50px; }
line-height: 50px;
position: relative; .sub-navbar {
width: 100%; height: 50px;
text-align: right; line-height: 50px;
padding-right: 20px; position: relative;
transition: 600ms ease position; width: 100%;
background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); text-align: right;
padding-right: 20px;
.subtitle { transition: 600ms ease position;
font-size: 20px; background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
color: #fff;
} .subtitle {
font-size: 20px;
&.draft { color: #fff;
background: #d0d0d0; }
}
&.draft {
&.deleted { background: #d0d0d0;
background: #d0d0d0; }
}
} &.deleted {
background: #d0d0d0;
.link-type, }
.link-type:focus { }
color: #337ab7;
cursor: pointer; .link-type,
.link-type:focus {
&:hover { color: #337ab7;
color: rgb(32, 160, 255); cursor: pointer;
}
} &:hover {
color: rgb(32, 160, 255);
//refine vue-multiselect plugin }
.multiselect { }
line-height: 16px;
} //refine vue-multiselect plugin
.multiselect {
.multiselect--active { line-height: 16px;
z-index: 1000 !important; }
}
.multiselect--active {
.margin-auto { z-index: 1000 !important;
margin-left: auto; }
margin-right: auto;
width: max-content; .margin-auto {
} margin-left: auto;
.text-hide { margin-right: auto;
overflow: hidden; width: max-content;
text-overflow: ellipsis; }
white-space:nowrap .text-hide {
} overflow: hidden;
.text-hide-2 { text-overflow: ellipsis;
overflow: hidden; white-space:nowrap
text-overflow: ellipsis; }
display: -webkit-box; .text-hide-2 {
word-break: break-all; overflow: hidden;
-webkit-box-orient: vertical; text-overflow: ellipsis;
-webkit-line-clamp: 2; display: -webkit-box;
} word-break: break-all;
.u-flex { -webkit-box-orient: vertical;
display: flex; -webkit-line-clamp: 2;
align-items: center; }
} .u-flex {
.flex-start { display: flex;
align-items: flex-start; align-items: center;
} }
.u-flex-between { .flex-start {
justify-content: space-between; align-items: flex-start;
} }
.u-flex-center { .u-flex-between {
justify-content: center; justify-content: space-between;
} }
.u-flex-around { .u-flex-center {
justify-content: space-around; justify-content: center;
} }
.u-flex-end { .u-flex-around {
justify-content: flex-end; justify-content: space-around;
} }
.u-flex-wrap { .u-flex-end {
flex-wrap: wrap; justify-content: flex-end;
} }
.flex-1 { .u-flex-wrap {
flex: 1; flex-wrap: wrap;
} }
.flex-baseline{ .flex-1 {
align-items: baseline; flex: 1;
} }
.icon-currency { .flex-baseline{
font-size: 16px; align-items: baseline;
color: rgba(0,0,0,0.65); }
} .icon-currency {
.el-table th.el-table__cell { font-size: 16px;
background: #FAFAFA; color: rgba(0,0,0,0.65);
text-align: center; }
} .el-table th.el-table__cell {
.color0{ background: #FAFAFA;
background-color: #FEF0F0!important; text-align: center;
} }
.color1{ .color0{
background-color: #EDF4FF!important; background-color: #FEF0F0!important;
} }
.color2{ .color1{
background-color: #ECF5FF!important; background-color: #EDF4FF!important;
} }
.color3{ .color2{
background-color: #FDF6EC!important; background-color: #ECF5FF!important;
} }
.color4{ .color3{
background-color: #F0F9EB!important; background-color: #FDF6EC!important;
} }
.color5{ .color4{
background-color: #D7DEED!important; background-color: #F0F9EB!important;
} }
.color6{ .color5{
background-color: #0084FF!important; background-color: #D7DEED!important;
} }
// .color6{
.tableToplink { background-color: #0084FF!important;
background: #E6F7FF; }
height: 35px; //
line-height: 35px; .tableToplink {
font-size: 12px; background: #E6F7FF;
padding: 0 15px; height: 35px;
margin-top: 10px; line-height: 35px;
span { font-size: 12px;
color: #1890FF; padding: 0 15px;
margin: 0 8px; margin-top: 10px;
} span {
} color: #1890FF;
// margin: 0 8px;
.upload-spot { }
position: absolute; }
margin: auto; //
top: 0px; .upload-spot {
bottom: 0px; position: absolute;
left: 0; margin: auto;
width: 6px; top: 0px;
height: 6px; bottom: 0px;
background: rgba(0,0,0,0.25); left: 0;
border-radius: 50%; width: 6px;
} height: 6px;
.y-green { background: rgba(0,0,0,0.25);
background: #52C41A; border-radius: 50%;
} }
.y-red { .y-green {
background: #F5222D; background: #52C41A;
} }
.c-red { .y-red {
color: #F5222D; background: #F5222D;
} }
.y-label{ .c-red {
min-width: 80px; color: #F5222D;
float: none; }
display: inline-block; .y-label{
font-size: 14px; min-width: 80px;
color: rgba(0,0,0,0.85); float: none;
vertical-align: middle; display: inline-block;
font-weight: 500; font-size: 14px;
margin: 0 0 10px 0; color: rgba(0,0,0,0.85);
text-align: right; vertical-align: middle;
} font-weight: 500;
// margin: 0 0 10px 0;
.sim-cont{ text-align: right;
max-height: 100%; }
overflow: auto; //
} .sim-cont{
.sim-cont::-webkit-scrollbar { /*滚动条整体样式*/ max-height: 100%;
width: 5px; overflow: auto;
height: 3px; }
} .sim-cont::-webkit-scrollbar { /*滚动条整体样式*/
.sim-cont::-webkit-scrollbar-thumb { /*滚动条里面小方块样式*/ width: 5px;
border-radius: 100px; height: 3px;
-webkit-box-shadow: inset 0 0 5px rgba(151, 151, 151, 0.2); }
background:rgba(0,0,0,0.1);; .sim-cont::-webkit-scrollbar-thumb { /*滚动条里面小方块样式*/
} border-radius: 100px;
.sim-cont::-webkit-scrollbar-track { /*滚动条里面轨道样式*/ -webkit-box-shadow: inset 0 0 5px rgba(151, 151, 151, 0.2);
-webkit-box-shadow: inset 0 0 5px rgba(223, 223, 223, 0.2); background:rgba(0,0,0,0.1);;
border-radius: 100px; }
background: rgba(0,0,0,0.1); .sim-cont::-webkit-scrollbar-track { /*滚动条里面轨道样式*/
-webkit-box-shadow: inset 0 0 5px rgba(223, 223, 223, 0.2);
border-radius: 100px;
background: rgba(0,0,0,0.1);
} }

File diff suppressed because it is too large Load Diff

@ -1,94 +1,94 @@
<!-- <!--
* @Author: your name * @Author: your name
* @Date: 2021-10-15 15:48:02 * @Date: 2021-10-15 15:48:02
* @LastEditTime: 2022-12-09 15:44:13 * @LastEditTime: 2023-09-11 10:27:18
* @LastEditors: 飘泊客 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: /byhl-taomi/src/layout/components/Sidebar/Logo.vue * @FilePath: /byhl-taomi/src/layout/components/Sidebar/Logo.vue
--> -->
<template> <template>
<div class="sidebar-logo-container" :class="{'collapse':collapse}"> <div class="sidebar-logo-container" :class="{'collapse':collapse}">
<transition name="sidebarLogoFade"> <transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo"> <!-- <img v-if="logo" :src="logo" class="sidebar-logo"> -->
<h1 v-else class="sidebar-title">{{ title }} </h1> <h1 class="sidebar-title">{{ title }} </h1>
</router-link> </router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/"> <router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo"> <!-- <img v-if="logo" :src="logo" class="sidebar-logo"> -->
<h1 class="sidebar-title">{{ title }} </h1> <h1 class="sidebar-title">{{ title }} </h1>
</router-link> </router-link>
</transition> </transition>
</div> </div>
</template> </template>
<script> <script>
import Logo from '@/assets/images/logo_f_m.jpg' import Logo from '@/assets/images/logo_f_m.jpg'
export default { export default {
name: 'SidebarLogo', name: 'SidebarLogo',
props: { props: {
collapse: { collapse: {
type: Boolean, type: Boolean,
required: true required: true
} }
}, },
data() { data() {
return { return {
title: '太空猫', title: 'RTA回访',
logo: Logo logo: Logo
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.sidebarLogoFade-enter-active { .sidebarLogoFade-enter-active {
transition: opacity 1.5s; transition: opacity 1.5s;
} }
.sidebarLogoFade-enter, .sidebarLogoFade-enter,
.sidebarLogoFade-leave-to { .sidebarLogoFade-leave-to {
opacity: 0; opacity: 0;
} }
.sidebar-logo-container { .sidebar-logo-container {
position: relative; position: relative;
width: 100%; width: 100%;
height: 50px; height: 50px;
line-height: 50px; line-height: 50px;
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
box-shadow: 0 1px 4px rgb(0 21 41 / 8%); box-shadow: 0 1px 4px rgb(0 21 41 / 8%);
margin-bottom: 18px; margin-bottom: 18px;
& .sidebar-logo-link { & .sidebar-logo-link {
height: 100%; height: 100%;
width: 100%; width: 100%;
& .sidebar-logo { & .sidebar-logo {
width: 32px; width: 32px;
height: 32px; height: 32px;
vertical-align: middle; vertical-align: middle;
margin-right: 6px; margin-right: 6px;
border-radius: 50%; border-radius: 50%;
} }
& .sidebar-title { & .sidebar-title {
display: inline-block; display: inline-block;
margin: 0; margin: 0;
color: #246FDC; color: #246FDC;
font-weight: 600; font-weight: 600;
line-height: 50px; line-height: 50px;
font-size: 18px; font-size: 18px;
letter-spacing: 1px; letter-spacing: 1px;
font-family: PingFangSC-Medium, PingFang SC;; font-family: PingFangSC-Medium, PingFang SC;;
vertical-align: middle; vertical-align: middle;
} }
} }
&.collapse { &.collapse {
.sidebar-logo { .sidebar-logo {
margin-right: 0px; margin-right: 0px;
} }
} }
} }
</style> </style>

@ -1,80 +1,80 @@
<!-- <!--
* @Description: * @Description:
* @Autor: 飘泊客 * @Autor: 飘泊客
* @Date: 2021-12-15 14:44:42 * @Date: 2021-12-15 14:44:42
* @LastEditors: 飘泊客 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2023-02-03 17:01:19 * @LastEditTime: 2023-09-11 10:44:03
--> -->
<template> <template>
<div class="leftMenu" :class="{ 'has-logo': showLogo }"> <div class="leftMenu" :class="{ 'has-logo': showLogo }">
<logo v-if="showLogo" :collapse="isCollapse" /> <!-- <logo v-if="showLogo" :collapse="isCollapse" /> -->
<el-scrollbar wrap-class="scrollbar-wrapper"> <el-scrollbar wrap-class="scrollbar-wrapper">
<el-menu <el-menu
:default-active="activeMenu" :default-active="activeMenu"
:collapse="isCollapse" :collapse="isCollapse"
:background-color="variables.menuBg" :background-color="variables.menuBg"
:text-color="variables.menuText" :text-color="variables.menuText"
:unique-opened="$store.state.settings.uniqueOpened" :unique-opened="$store.state.settings.uniqueOpened"
:active-text-color="variables.menuActiveText" :active-text-color="variables.menuActiveText"
:collapse-transition="false" :collapse-transition="false"
mode="vertical" mode="vertical"
> >
<sidebar-item <sidebar-item
v-for="route in permission_routers" v-for="route in permission_routers"
:key="route.path" :key="route.path"
:item="route" :item="route"
:base-path="route.path" :base-path="route.path"
/> />
</el-menu> </el-menu>
</el-scrollbar> </el-scrollbar>
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import Logo from './Logo' import Logo from './Logo'
import SidebarItem from './SidebarItem' import SidebarItem from './SidebarItem'
import variables from '@/assets/styles/variables.scss' import variables from '@/assets/styles/variables.scss'
export default { export default {
components: { SidebarItem, Logo }, components: { SidebarItem, Logo },
computed: { computed: {
...mapGetters(['permission_routers', 'sidebar']), ...mapGetters(['permission_routers', 'sidebar']),
activeMenu() { activeMenu() {
const route = this.$route const route = this.$route
const { meta, path } = route const { meta, path } = route
// if set path, the sidebar will highlight the path you set // if set path, the sidebar will highlight the path you set
if (meta.activeMenu) { if (meta.activeMenu) {
return meta.activeMenu return meta.activeMenu
} }
return path return path
}, },
showLogo() { showLogo() {
return this.$store.state.settings.sidebarLogo return this.$store.state.settings.sidebarLogo
}, },
variables() { variables() {
return variables return variables
}, },
isCollapse() { isCollapse() {
return !this.sidebar.opened return !this.sidebar.opened
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.leftMenu ::v-deep .el-menu-item { .leftMenu ::v-deep .el-menu-item {
height: 45px; height: 45px;
line-height: 45px; line-height: 45px;
} }
.leftMenu ::v-deep .el-submenu__title { .leftMenu ::v-deep .el-submenu__title {
height: 45px; height: 45px;
line-height: 45px; line-height: 45px;
} }
.leftMenu ::v-deep .el-menu-item.is-active { .leftMenu ::v-deep .el-menu-item.is-active {
background-color: rgba($color: #246FDC, $alpha: 0.12)!important; background-color: rgba($color: #246FDC, $alpha: 0.12)!important;
} }
.leftMenu ::v-deep .menu-wrapper { .leftMenu ::v-deep .menu-wrapper {
margin: 0 10px; margin: 0 10px;
border-radius: 5px; border-radius: 5px;
} }
</style> </style>

@ -1,62 +1,63 @@
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-10-15 15:48:02 * @Date: 2021-10-15 15:48:02
* @LastEditTime: 2022-12-09 15:46:10 * @LastEditTime: 2023-09-11 14:02:05
* @LastEditors: 飘泊客 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: /byhl-taomi/src/settings.js * @FilePath: /byhl-taomi/src/settings.js
*/ */
module.exports = { module.exports = {
/** /**
* @description 网站标题 * @description 网站标题
*/ */
title: '太空猫', title: 'RTA回访',
/** /**
* @description 是否显示 tagsView * @description 是否显示 tagsView
*/ */
tagsView: true, tagsView: true,
/** /**
* @description 固定头部 * @description 固定头部
*/ */
fixedHeader: true, fixedHeader: true,
/** /**
* @description 记住密码状态下的token在Cookie中存储的天数默认1天 * @description 记住密码状态下的token在Cookie中存储的天数默认1天
*/ */
tokenCookieExpires: 1, tokenCookieExpires: 1,
/** /**
* @description 记住密码状态下的密码在Cookie中存储的天数默认1天s * @description 记住密码状态下的密码在Cookie中存储的天数默认1天s
*/ */
passCookieExpires: 1, passCookieExpires: 1,
/** /**
* @description 是否只保持一个子菜单的展开 * @description 是否只保持一个子菜单的展开
*/ */
uniqueOpened: true, uniqueOpened: true,
/** /**
* @description token key * @description token key
*/ */
TokenKey: 'EL-ADMIN-TOEKN', TokenKey: 'EL-ADMIN-TOEKN',
/** /**
* @description socket token key * @description socket token key
*/ */
socketToken: 'JWT-TOEKN', socketToken: 'JWT-TOEKN',
/** /**
* @description 请求超时时间毫秒默认2分钟 * @description 请求超时时间毫秒默认2分钟
*/ */
timeout: 1200000, timeout: 1200000,
/** /**
* @description 是否显示logo * @description 是否显示logo
*/ */
sidebarLogo: true, sidebarLogo: false,
/** /**
* 是否显示设置的底部信息 * 是否显示设置的底部信息
*/ */
showFooter: true, showFooter: true,
/** /**
* 底部文字支持html语法 * 底部文字支持html语法
*/ */
footerTxt: 'Copyright © 2022', footerTxt: 'Copyright © 2022',
/** /**
* 备案号 * 备案号
*/ */
caseNumber: '浙ICP备14006224号-9' caseNumber: ''
} // caseNumber: '浙ICP备14006224号-9'
}

@ -1,202 +1,202 @@
/* /*
* @Description: 协议 * @Description: 协议
* @Autor: 飘泊客 * @Autor: 飘泊客
* @Date: 2022-02-09 09:40:49 * @Date: 2022-02-09 09:40:49
* @LastEditors: 飘泊客 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2023-03-09 10:49:56 * @LastEditTime: 2023-09-11 10:25:13
*/ */
const agrConent = ` const agrConent = `
<div style="line-height: 1.3rem;"><h3 style="text-align:center;" >太空猫线索回跟平台服务协议</h3> <div style="line-height: 1.3rem;"><h3 style="text-align:center;" >RTA回访线索回跟平台服务协议</h3>
<p>欢迎您使用太空猫线索回跟平台及服务</p> <p>欢迎您使用RTA回访线索回跟平台及服务</p>
<p>为使用线索回跟平台以下统称本平台及服务您应当阅读并遵守太空猫线索回跟平台服务协议以下简称本协议请您务必审慎阅读充分理解各条款内容特别是免除或者限制责任的条款以及开通或使用某项服务的单独协议并选择接受或不接受限制免责条款可能以加粗形式提示您注意</p> <p>为使用线索回跟平台以下统称本平台及服务您应当阅读并遵守RTA回访线索回跟平台服务协议以下简称本协议请您务必审慎阅读充分理解各条款内容特别是免除或者限制责任的条款以及开通或使用某项服务的单独协议并选择接受或不接受限制免责条款可能以加粗形式提示您注意</p>
<p>除非您已阅读并接受本协议所有条款否则您无权下载安装或使用本软件及相关服务您的下载安装使用登录等行为即视为您已阅读并同意本协议的约束</p> <p>除非您已阅读并接受本协议所有条款否则您无权下载安装或使用本软件及相关服务您的下载安装使用登录等行为即视为您已阅读并同意本协议的约束</p>
<p>协议适用主体范围</p> <p>协议适用主体范围</p>
本协议是用户以下可称为与本平台之间关于下载安装使用登录本软件以及使用本服务所订立的协议本协议作为平台服务协议的有效组成部分与平台服务协议具有同等法律效力您与太空猫平台签订的本协议与平台服务协议有不一致的以本协议为准本协议未约定的条款以推广服务协议的约定为准<br/> 本协议是用户以下可称为与本平台之间关于下载安装使用登录本软件以及使用本服务所订立的协议本协议作为平台服务协议的有效组成部分与平台服务协议具有同等法律效力您与RTA回访平台签订的本协议与平台服务协议有不一致的以本协议为准本协议未约定的条款以推广服务协议的约定为准<br/>
<p>太空猫平台及服务</p> <p>RTA回访平台及服务</p>
2.1相关定义<br/> 2.1相关定义<br/>
1太空猫线索回跟平台是致力于为广告主搭建高效的客户触达管理系统通过连接广告投放与广告营销数据提升营销数据的商业价值的企业管理平台以下可简称为太空猫平台<br/> 1RTA回访线索回跟平台是致力于为广告主搭建高效的客户触达管理系统通过连接广告投放与广告营销数据提升营销数据的商业价值的企业管理平台以下可简称为RTA回访平台<br/>
2太空猫账号指按照太空猫平台指定方式或渠道获得本软件使用权<br/> 2RTA回访账号指按照RTA回访平台指定方式或渠道获得本软件使用权<br/>
3用户指拥有太空猫账以及使用太空猫软件及服务的使用者包括自然人法人或其他组织在本协议中称用户<br/> 3用户指拥有RTA回访账以及使用RTA回访软件及服务的使用者包括自然人法人或其他组织在本协议中称用户<br/>
2.2服务形式<br/> 2.2服务形式<br/>
您可以通过电脑移动设备等终端以客户端网页等形式使用本服务具体以太空猫平台实际可提供的版本为准同时太空猫平台会不断丰富您使用本服务的终端形式等当您使用本服务时您应选择与您的终端系统等相匹配的本软件版本否则您可能无法正常使用本服务由于软件与终端设备型号不相匹配所导致的任何问题或损害均由您自行承担<br/> 您可以通过电脑移动设备等终端以客户端网页等形式使用本服务具体以RTA回访平台实际可提供的版本为准同时RTA回访平台会不断丰富您使用本服务的终端形式等当您使用本服务时您应选择与您的终端系统等相匹配的本软件版本否则您可能无法正常使用本服务由于软件与终端设备型号不相匹配所导致的任何问题或损害均由您自行承担<br/>
2.3许可范围<br/> 2.3许可范围<br/>
太空猫平台许可您一项不可转让的非独占地和非商业的合法使用太空猫平台相关服务的权利本协议未明示授权的其他一切权利仍由太空猫平台保留您在行使该些权利前须另行获得太空猫平台的书面许可同时太空猫平台如未行使前述任何权利并不构成对该权利的放弃<br/> RTA回访平台许可您一项不可转让的非独占地和非商业的合法使用RTA回访平台相关服务的权利本协议未明示授权的其他一切权利仍由RTA回访平台保留您在行使该些权利前须另行获得RTA回访平台的书面许可同时RTA回访平台如未行使前述任何权利并不构成对该权利的放弃<br/>
<p>软件的安装与卸载</p> <p>软件的安装与卸载</p>
3.1 太空猫平台可能为不同的终端系统等开发了不同的软件版本您应当根据实际情况选择下载合适的版本进行安装<br/> 3.1 RTA回访平台可能为不同的终端系统等开发了不同的软件版本您应当根据实际情况选择下载合适的版本进行安装<br/>
3.2 下载安装程序后您需要按照该程序提示的步骤正确安装<br/> 3.2 下载安装程序后您需要按照该程序提示的步骤正确安装<br/>
3.3 为提供更加优质安全的服务在本软件安装时太空猫平台可能推荐您安装其他软件您可以选择安装或不安装<br/> 3.3 为提供更加优质安全的服务在本软件安装时RTA回访平台可能推荐您安装其他软件您可以选择安装或不安装<br/>
<p>软件的更新</p> <p>软件的更新</p>
4.1 为了增进用户体验完善服务内容太空猫平台将不断努力开发新的服务并为您不时提供软件更新这些更新可能会采取软件替换修改功能强化版本升级等形式<br/> 4.1 为了增进用户体验完善服务内容RTA回访平台将不断努力开发新的服务并为您不时提供软件更新这些更新可能会采取软件替换修改功能强化版本升级等形式<br/>
4.2 为了改善用户体验并保证服务的安全性和功能的一致性太空猫平台有权不经向您特别通知而对软件进行更新或者对软件的部分功能效果进行改变或限制<br/> 4.2 为了改善用户体验并保证服务的安全性和功能的一致性RTA回访平台有权不经向您特别通知而对软件进行更新或者对软件的部分功能效果进行改变或限制<br/>
4.3 本软件新版本发布后旧版本的软件可能无法使用太空猫平台不保证旧版本软件继续可用及相应的客户服务请您随时核对并下载最新版本<br/> 4.3 本软件新版本发布后旧版本的软件可能无法使用RTA回访平台不保证旧版本软件继续可用及相应的客户服务请您随时核对并下载最新版本<br/>
<p>个人信息保护</p> <p>个人信息保护</p>
5.1 保护用户个人信息是太空猫平台的一项基本原则太空猫平台将会采取合理的措施保护用户的个人信息除法律法规规定的情形外未经用户许可太空猫平台不会向第三方公开透露用户个人信息在您使用本产品的过程中我们可能会收集您在使用服务时提供或因为使用服务而产生的信息目的是为了向您提供服务优化我们的服务以及保障您的账号安全等太空猫平台对相关信息采用专业加密存储与传输方式保障用户个人信息的安全<br/> 5.1 保护用户个人信息是RTA回访平台的一项基本原则RTA回访平台将会采取合理的措施保护用户的个人信息除法律法规规定的情形外未经用户许可RTA回访平台不会向第三方公开透露用户个人信息在您使用本产品的过程中我们可能会收集您在使用服务时提供或因为使用服务而产生的信息目的是为了向您提供服务优化我们的服务以及保障您的账号安全等RTA回访平台对相关信息采用专业加密存储与传输方式保障用户个人信息的安全<br/>
5.2 一般情况下您可随时浏览修改自己提交的信息但出于安全性和身份识别如号码申诉服务等的考虑您可能无法修改注册时提供的初始注册信息及其他验证信息<br/> 5.2 一般情况下您可随时浏览修改自己提交的信息但出于安全性和身份识别如号码申诉服务等的考虑您可能无法修改注册时提供的初始注册信息及其他验证信息<br/>
5.3 太空猫平台将运用各种安全技术和程序建立完善的管理制度来保护您的个人信息以免遭受未经授权的访问使用或披露<br/> 5.3 RTA回访平台将运用各种安全技术和程序建立完善的管理制度来保护您的个人信息以免遭受未经授权的访问使用或披露<br/>
5.4 您应当建立信息安全保护机制并对您指定的账号管理人或有权限使用您的太空猫账号的代理人进行信息安全培训包括但不限于将管理权限交予适当的人选合理设定相关人员的管理权限<br/> 5.4 您应当建立信息安全保护机制并对您指定的账号管理人或有权限使用您的RTA回访账号的代理人进行信息安全培训包括但不限于将管理权限交予适当的人选合理设定相关人员的管理权限<br/>
5.5 同时您应注意信息安全和账号安全防止账号被他人盗用而导致的信息泄露妥善保管注册账号及密码的安全您需要对您的太空猫账号的使用行为承担法律责任如因您对账号及密码信息管理不善或将账号权限授权给第三方由此产生的法律后果由您承担且平台有权据此免于承担任何法律责任<br/> 5.5 同时您应注意信息安全和账号安全防止账号被他人盗用而导致的信息泄露妥善保管注册账号及密码的安全您需要对您的RTA回访账号的使用行为承担法律责任如因您对账号及密码信息管理不善或将账号权限授权给第三方由此产生的法律后果由您承担且平台有权据此免于承担任何法律责任<br/>
5.6 您应对通过本服务了解接收或可接触到的包括但不限于个人网络用户在内的任何人的个人信息予以充分尊重您不应搜集复制存储传播或以其他任何方式使用其他用户的个人信息对于违反本条约定而产生的一切后果由您自行承担<br/> 5.6 您应对通过本服务了解接收或可接触到的包括但不限于个人网络用户在内的任何人的个人信息予以充分尊重您不应搜集复制存储传播或以其他任何方式使用其他用户的个人信息对于违反本条约定而产生的一切后果由您自行承担<br/>
<p>用户行为规范</p> <p>用户行为规范</p>
6.1用户注意事项<br/> 6.1用户注意事项<br/>
6.1.1 您充分理解并同意某些特定服务可能还需同意单独的协议规则等您在使用该项服务前请仔细阅读前述相关协议规则<br/> 6.1.1 您充分理解并同意某些特定服务可能还需同意单独的协议规则等您在使用该项服务前请仔细阅读前述相关协议规则<br/>
6.1.2 太空猫平台有权在本服务中或通过本服务向您展现各种信息包括但不限于广告信息新闻信息及宣传信息等该信息可能以系统消息或弹出窗口等形式出现<br/> 6.1.2 RTA回访平台有权在本服务中或通过本服务向您展现各种信息包括但不限于广告信息新闻信息及宣传信息等该信息可能以系统消息或弹出窗口等形式出现<br/>
6.1.3 您可以选择不向太空猫平台提供您的某些信息或者根据产品设置取消太空猫平台收集某些信息但因此可能会导致相关服务功能无法实现<br/> 6.1.3 您可以选择不向RTA回访平台提供您的某些信息或者根据产品设置取消RTA回访平台收集某些信息但因此可能会导致相关服务功能无法实现<br/>
6.1.4 如果您停止使用本软件及服务或服务被终止或取消太空猫平台可以从服务器上永久地删除您的数据您的服务停止终止或取消后太空猫平台无法也没有义务向您返还任何数据<br/> 6.1.4 如果您停止使用本软件及服务或服务被终止或取消RTA回访平台可以从服务器上永久地删除您的数据您的服务停止终止或取消后RTA回访平台无法也没有义务向您返还任何数据<br/>
6.2用户禁止行为<br/> 6.2用户禁止行为<br/>
您在使用本服务或本软件的过程中应遵守相关法规政策服务协议规则规范等不得从事包括但不限于以下任何行为也不得为以下任何行为提供便利<br/> 您在使用本服务或本软件的过程中应遵守相关法规政策服务协议规则规范等不得从事包括但不限于以下任何行为也不得为以下任何行为提供便利<br/>
6.2.1 法律法规禁止行为<br/> 6.2.1 法律法规禁止行为<br/>
不得从事包括但不限于以下任何行为也不得为以下任何行为提供便利<br/> 不得从事包括但不限于以下任何行为也不得为以下任何行为提供便利<br/>
1反对宪法所确定的基本原则的<br/> 1反对宪法所确定的基本原则的<br/>
2危害国家安全泄露国家秘密颠覆国家政权破坏国家统一的<br/> 2危害国家安全泄露国家秘密颠覆国家政权破坏国家统一的<br/>
3损害国家荣誉和利益的<br/> 3损害国家荣誉和利益的<br/>
4煽动民族仇恨民族歧视破坏民族团结的<br/> 4煽动民族仇恨民族歧视破坏民族团结的<br/>
5破坏国家宗教政策宣扬邪教和封建迷信的<br/> 5破坏国家宗教政策宣扬邪教和封建迷信的<br/>
6散布谣言扰乱社会秩序破坏社会稳定的<br/> 6散布谣言扰乱社会秩序破坏社会稳定的<br/>
7散布淫秽色情赌博暴力凶杀恐怖或者教唆犯罪的<br/> 7散布淫秽色情赌博暴力凶杀恐怖或者教唆犯罪的<br/>
8宣传贩卖军火毒品违禁药品的<br/> 8宣传贩卖军火毒品违禁药品的<br/>
9侮辱或者诽谤他人侵害他人合法权益的<br/> 9侮辱或者诽谤他人侵害他人合法权益的<br/>
10传播代孕售卖个人信息代开发票办证刻章等不当行为的<br/> 10传播代孕售卖个人信息代开发票办证刻章等不当行为的<br/>
11含有法律行政法规禁止的其他行为或内容的<br/> 11含有法律行政法规禁止的其他行为或内容的<br/>
6.2.2 软件不当使用<br/> 6.2.2 软件不当使用<br/>
除非法 律允许或太空猫平台书面许可您不得从事下列行为<br/> 除非法 律允许或RTA回访平台书面许可您不得从事下列行为<br/>
1删除本软件及其副本上关于著作权的信息<br/> 1删除本软件及其副本上关于著作权的信息<br/>
2对本软件进行反向工程反向汇编反向编译或者以其他方式尝试发现本软件的源代码<br/> 2对本软件进行反向工程反向汇编反向编译或者以其他方式尝试发现本软件的源代码<br/>
3太空猫平台拥有知识产权的内容进行使用出租出借复制修改链接转载汇编发表出版建立镜像站点等<br/> 3RTA回访平台拥有知识产权的内容进行使用出租出借复制修改链接转载汇编发表出版建立镜像站点等<br/>
4对本软件或者本软件运行过程中释放到任何终端内存中的数据软件运行过程中客户端与服务器端的交互数据以及本软件运行所必需的系统数据进行复制修改增加删除挂接运行或创作任何衍生作品形式包括但不限于使用插件外挂或非太空猫平台经授权的第三方工具/服务接入本软件和相关系统<br/> 4对本软件或者本软件运行过程中释放到任何终端内存中的数据软件运行过程中客户端与服务器端的交互数据以及本软件运行所必需的系统数据进行复制修改增加删除挂接运行或创作任何衍生作品形式包括但不限于使用插件外挂或非RTA回访平台经授权的第三方工具/服务接入本软件和相关系统<br/>
5通过修改或伪造软件运行中的指令数据增加删减变动软件的功能或运行效果或者将用于上述用途的软件方法进行运营或向公众传播无论这些行为是否为商业目的<br/> 5通过修改或伪造软件运行中的指令数据增加删减变动软件的功能或运行效果或者将用于上述用途的软件方法进行运营或向公众传播无论这些行为是否为商业目的<br/>
6通过非太空猫平台开发授权的第三方软件插件外挂系统登录或使用本软件及服务或制作发布传播上述工具<br/> 6通过非RTA回访平台开发授权的第三方软件插件外挂系统登录或使用本软件及服务或制作发布传播上述工具<br/>
7自行授权他人或利用第三方软件对本软件及其组件模块数据等进行干扰<br/> 7自行授权他人或利用第三方软件对本软件及其组件模块数据等进行干扰<br/>
8其他可能影响干扰软件正常运行的行为<br/> 8其他可能影响干扰软件正常运行的行为<br/>
6.2.3 危害平台安全内容<br/> 6.2.3 危害平台安全内容<br/>
1以虚假身份或冒用他人身份误导欺骗其他用户<br/> 1以虚假身份或冒用他人身份误导欺骗其他用户<br/>
2传播虚假中奖信息钓鱼欺诈信息非法或虚假理财信息等非法诈骗信息可能诱使用户上当受骗蒙受损失<br/> 2传播虚假中奖信息钓鱼欺诈信息非法或虚假理财信息等非法诈骗信息可能诱使用户上当受骗蒙受损失<br/>
3传播包含病毒木马等的文件程序或相应制作教程等的内容信息<br/> 3传播包含病毒木马等的文件程序或相应制作教程等的内容信息<br/>
6.2.4 其他禁止行为<br/> 6.2.4 其他禁止行为<br/>
1您使用本软件或服务应在从事合法的单位内部员工沟通管理及对外商务沟通管理的范围之内不得从事任何您单位无权开展的任何业务商务活动等包括但不限于通过本软件发送超出您单位经营范围之外的任何信息或从事任何超出您单位经营范围之外的行为等<br/> 1您使用本软件或服务应在从事合法的单位内部员工沟通管理及对外商务沟通管理的范围之内不得从事任何您单位无权开展的任何业务商务活动等包括但不限于通过本软件发送超出您单位经营范围之外的任何信息或从事任何超出您单位经营范围之外的行为等<br/>
2在未经太空猫平台书面授权的情况下您不应以太空猫平台太空猫平台代理商太空猫平台合作伙伴经太空猫平台官方认证等名义进行对外沟通或从事相应的行为<br/> 2在未经RTA回访平台书面授权的情况下您不应以RTA回访平台RTA回访平台代理商RTA回访平台合作伙伴经RTA回访平台官方认证等名义进行对外沟通或从事相应的行为<br/>
3未经太空猫平台许可您不得销售太空猫账号<br/> 3未经RTA回访平台许可您不得销售RTA回访账号<br/>
4您不应将本产品的使用权向他人出借出租转让转售等<br/> 4您不应将本产品的使用权向他人出借出租转让转售等<br/>
5其他未经太空猫平台明示授权许可或违反本协议及相关协议规则的行为<br/> 5其他未经RTA回访平台明示授权许可或违反本协议及相关协议规则的行为<br/>
6.3对账号安全及账号操作行为负责<br/> 6.3对账号安全及账号操作行为负责<br/>
您充分了解并同意您必须为您太空猫帐号下的一切行为负责包括您所发表的任何内容以及由此产生的任何后果您应对使用本服务时接触到的内容自行加以判断并承担因使用内容而引起的所有风险包括因对内容的正确性完整性或实用性的依赖而产生的风险太空猫平台无法且不会对您因前述风险而导致的任何损失或损害承担责任<br/> 您充分了解并同意您必须为您RTA回访帐号下的一切行为负责包括您所发表的任何内容以及由此产生的任何后果您应对使用本服务时接触到的内容自行加以判断并承担因使用内容而引起的所有风险包括因对内容的正确性完整性或实用性的依赖而产生的风险RTA回访平台无法且不会对您因前述风险而导致的任何损失或损害承担责任<br/>
6.4 违约处理<br/> 6.4 违约处理<br/>
您理解并同意为维护互联网安全及秩序保护网络用户合法权益太空猫平台发现或收到他人举报您有违反相关约定本协议或相关法规政策等太空猫平台有权根据自己的判断随时单方根据相应情形采取以下一项或多项措施具体措施的时间长短由太空猫平台根据您的违法违约情节相应情况确定由此导致或产生的任何损失或第三方主张的任何索赔要求等由您自行承担<br/> 您理解并同意为维护互联网安全及秩序保护网络用户合法权益RTA回访平台发现或收到他人举报您有违反相关约定本协议或相关法规政策等RTA回访平台有权根据自己的判断随时单方根据相应情形采取以下一项或多项措施具体措施的时间长短由RTA回访平台根据您的违法违约情节相应情况确定由此导致或产生的任何损失或第三方主张的任何索赔要求等由您自行承担<br/>
1 对您进行警告<br/> 1 对您进行警告<br/>
2 限制暂停终止使用本软件或本服务部分或全部功能<br/> 2 限制暂停终止使用本软件或本服务部分或全部功能<br/>
3 删除屏蔽相关内容或断开链接<br/> 3 删除屏蔽相关内容或断开链接<br/>
4 中止终止您的太空猫账号的使用(简称封号)<br/> 4 中止终止您的RTA回访账号的使用(简称封号)<br/>
5 如您受到有权机关调查或被第三方投诉或您投诉第三方太空猫平台有权将争议中相关方的主体资料联系方式投诉相关内容等必要信息包括但不限于名称电话证照等提供给相关方或主管部门以便及时解决投诉纠纷保护各方合法权益<br/> 5 如您受到有权机关调查或被第三方投诉或您投诉第三方RTA回访平台有权将争议中相关方的主体资料联系方式投诉相关内容等必要信息包括但不限于名称电话证照等提供给相关方或主管部门以便及时解决投诉纠纷保护各方合法权益<br/>
6依法追究您的法律责任<br/> 6依法追究您的法律责任<br/>
6.5 对损害的处理<br/> 6.5 对损害的处理<br/>
您违反约定太空猫平台依约采取相应措施导致您或任何第三方损害的您应当自行承担相应后果太空猫平台因此遭受损失的您也应当一并赔偿<br/> 您违反约定RTA回访平台依约采取相应措施导致您或任何第三方损害的您应当自行承担相应后果RTA回访平台因此遭受损失的您也应当一并赔偿<br/>
6.6 对账号封停处理的申诉<br/> 6.6 对账号封停处理的申诉<br/>
您如果对您的账号被太空猫平台封号有异议的可以通过申诉流程向太空猫平台提出申诉具体申诉的流程条件要求等您可以通过登陆首页-快速帮助-问题反馈了解并进行操作<br/> 您如果对您的账号被RTA回访平台封号有异议的可以通过申诉流程向RTA回访平台提出申诉具体申诉的流程条件要求等您可以通过登陆首页-快速帮助-问题反馈了解并进行操作<br/>
<p>第三方提供的产品或服务</p> <p>第三方提供的产品或服务</p>
您在太空猫平台上使用第三方提供的产品或服务时除遵守本协议约定外还应遵守第三方的服务协议规则规范等太空猫平台和第三方对可能出现的纠纷在法律规定和约定的范围内各自承担责任<br/> 您在RTA回访平台上使用第三方提供的产品或服务时除遵守本协议约定外还应遵守第三方的服务协议规则规范等RTA回访平台和第三方对可能出现的纠纷在法律规定和约定的范围内各自承担责任<br/>
您使用本软件或要求太空猫平台提供特定服务时本软件可能会调用第三方系统或者通过第三方支持您的使用或访问使用或访问的结果由该第三方提供太空猫平台无法保证第三方提供服务及内容的安全性准确性有效性<br/> 您使用本软件或要求RTA回访平台提供特定服务时本软件可能会调用第三方系统或者通过第三方支持您的使用或访问使用或访问的结果由该第三方提供RTA回访平台无法保证第三方提供服务及内容的安全性准确性有效性<br/>
<p>知识产权声明</p> <p>知识产权声明</p>
8.1 本平台及相关权利主体是本软件的知识产权权利人本软件的著作权商标权专利权商业秘密等知识产权以及与本软件相关的所有信息内容包括但不限于文字图片音频视频图表界面设计版面框架有关数据或电子文档等均受中华人民共和国法律法规和相应的国际条约保护太空猫公司依法享有上述相关知识产权但相关权利人依照法律规定应享有的权利除外<br/> 8.1 本平台及相关权利主体是本软件的知识产权权利人本软件的著作权商标权专利权商业秘密等知识产权以及与本软件相关的所有信息内容包括但不限于文字图片音频视频图表界面设计版面框架有关数据或电子文档等均受中华人民共和国法律法规和相应的国际条约保护RTA回访公司依法享有上述相关知识产权但相关权利人依照法律规定应享有的权利除外<br/>
8.2 未经本平台或相关权利人书面同意您不得为任何商业或非商业目的自行或许可任何第三方实施利用转让上述知识产权<br/> 8.2 未经本平台或相关权利人书面同意您不得为任何商业或非商业目的自行或许可任何第三方实施利用转让上述知识产权<br/>
<p>您授予的许可使用权</p> <p>您授予的许可使用权</p>
您完全理解并同意不可撤销地授予本平台及其关联公司下列权利<br/> 您完全理解并同意不可撤销地授予本平台及其关联公司下列权利<br/>
9.1 本平台在本软件中提供的内容包括但不限于网页文字图片音频视频图表等的知识产权归本平台及其关联公司所有用户在使用本服务中所产生的内容的知识产权归用户或相关权利人所有<br/> 9.1 本平台在本软件中提供的内容包括但不限于网页文字图片音频视频图表等的知识产权归本平台及其关联公司所有用户在使用本服务中所产生的内容的知识产权归用户或相关权利人所有<br/>
9.2 对于您提供的资料及您使用本产品所涉及的使用场景包括但不限于网页软件或其他布置与本软件功能相关联的线上或线下承载平台您授予本平台及其关联公司有权对您的资料进行商业分析和统计时使用<br/> 9.2 对于您提供的资料及您使用本产品所涉及的使用场景包括但不限于网页软件或其他布置与本软件功能相关联的线上或线下承载平台您授予本平台及其关联公司有权对您的资料进行商业分析和统计时使用<br/>
9.3 上述及其他任何本服务包含的内容的知识产权均受到法律保护未经太空猫公司用户或相关权利人书面许可任何人不得以任何形式进行使用或创造相关衍生作品<br/> 9.3 上述及其他任何本服务包含的内容的知识产权均受到法律保护未经RTA回访公司用户或相关权利人书面许可任何人不得以任何形式进行使用或创造相关衍生作品<br/>
<p>终端安全责任</p> <p>终端安全责任</p>
10.1 您理解并同意本软件或本服务同大多数互联网软件服务一样可能会受多种因素影响包括但不限于用户原因网络服务质量社会环境等也可能会受各种安全问题的侵扰包括但不限于他人非法利用用户资料进行现实中的骚扰您下载安装的其他软件或访问的其他网站中可能含有病毒木马程序或其他恶意程序威胁您终端的信息和数据的安全继而影响本软件本服务的正常使用等因此您应加强信息安全及个人信息的保护意识注意账号及密码保护和管理以免遭受损失<br/> 10.1 您理解并同意本软件或本服务同大多数互联网软件服务一样可能会受多种因素影响包括但不限于用户原因网络服务质量社会环境等也可能会受各种安全问题的侵扰包括但不限于他人非法利用用户资料进行现实中的骚扰您下载安装的其他软件或访问的其他网站中可能含有病毒木马程序或其他恶意程序威胁您终端的信息和数据的安全继而影响本软件本服务的正常使用等因此您应加强信息安全及个人信息的保护意识注意账号及密码保护和管理以免遭受损失<br/>
如您的账号丢失或账号安全遇到威胁您可通过向销售或运营人员进行反馈<br/> 如您的账号丢失或账号安全遇到威胁您可通过向销售或运营人员进行反馈<br/>
10.2 您不得制作发布使用传播用于太空猫帐号及他人个人信息财产的恶意程序<br/> 10.2 您不得制作发布使用传播用于RTA回访帐号及他人个人信息财产的恶意程序<br/>
10.3 维护软件安全与正常使用是太空猫平台和您的共同责任太空猫平台将按照行业标准合理审慎地采取必要技术措施保护您的终端信息和数据安全<br/> 10.3 维护软件安全与正常使用是RTA回访平台和您的共同责任RTA回访平台将按照行业标准合理审慎地采取必要技术措施保护您的终端信息和数据安全<br/>
<p>十一第三方软件或技术</p> <p>十一第三方软件或技术</p>
11.1 本软件可能会使用第三方软件或技术包括本软件可能使用的开源代码和公共领域代码等下同这种使用已经获得合法授权<br/> 11.1 本软件可能会使用第三方软件或技术包括本软件可能使用的开源代码和公共领域代码等下同这种使用已经获得合法授权<br/>
11.2 本软件如果使用了第三方的软件或技术百业平台将按照相关法规或约定对相关的协议或其他文件可能通过本协议附件在本软件安装包特定文件夹中打包等形式进行展示它们可能会以软件使用许可协议授权协议开源代码许可证或其他形式来表达前述通过各种形式展现的相关协议或其他文件均是本协议不可分割的组成部分与本协议具有同等的法律效力您应当遵守这些要求如果您没有遵守这些要求该第三方或者国家机关可能会对您提起诉讼罚款或采取其他制裁措施并要求太空猫平台给予协助您应当自行承担法律责任<br/> 11.2 本软件如果使用了第三方的软件或技术百业平台将按照相关法规或约定对相关的协议或其他文件可能通过本协议附件在本软件安装包特定文件夹中打包等形式进行展示它们可能会以软件使用许可协议授权协议开源代码许可证或其他形式来表达前述通过各种形式展现的相关协议或其他文件均是本协议不可分割的组成部分与本协议具有同等的法律效力您应当遵守这些要求如果您没有遵守这些要求该第三方或者国家机关可能会对您提起诉讼罚款或采取其他制裁措施并要求RTA回访平台给予协助您应当自行承担法律责任<br/>
<p>十二其他</p> <p>十二其他</p>
12.1 您使用本软件或本服务即视为您已阅读并同意受本协议的约束太空猫平台有权在必要时修改本协议条款您可以在本软件本服务的最新版本中查阅相关协议条款本协议条款变更后如果您继续使用本软件本服务即视为您已接受修改后的协议如果您不接受修改后的协议应当停止使用本软件<br/> 12.1 您使用本软件或本服务即视为您已阅读并同意受本协议的约束RTA回访平台有权在必要时修改本协议条款您可以在本软件本服务的最新版本中查阅相关协议条款本协议条款变更后如果您继续使用本软件本服务即视为您已接受修改后的协议如果您不接受修改后的协议应当停止使用本软件<br/>
12.2 本协议签订地为中华人民共和国杭州市上城区<br/> 12.2 本协议签订地为中华人民共和国杭州市上城区<br/>
12.3 本协议的成立生效履行解释及纠纷解决适用中华人民共和国大陆地区法律不包括冲突法<br/> 12.3 本协议的成立生效履行解释及纠纷解决适用中华人民共和国大陆地区法律不包括冲突法<br/>
12.4 若您和太空猫平台之间发生任何纠纷或争议首先应友好协商解决协商不成的您同意将纠纷或争议提交杭州市上城区人民法院管辖<br/> 12.4 若您和RTA回访平台之间发生任何纠纷或争议首先应友好协商解决协商不成的您同意将纠纷或争议提交杭州市上城区人民法院管辖<br/>
12.5 本协议所有条款的标题仅为阅读方便本身并无实际涵义不能作为本协议涵义解释的依据<br/> 12.5 本协议所有条款的标题仅为阅读方便本身并无实际涵义不能作为本协议涵义解释的依据<br/>
12.6 本协议条款无论因何种原因部分无效或不可执行其余条款仍有效对双方具有约束力<br/></div> 12.6 本协议条款无论因何种原因部分无效或不可执行其余条款仍有效对双方具有约束力<br/></div>
` `
export default agrConent export default agrConent

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,409 +1,409 @@
<template> <template>
<div class="login"> <div class="login">
<!-- <el-image :src="logoImg" fit="fill" class="logoImg" /> --> <!-- <el-image :src="logoImg" fit="fill" class="logoImg" /> -->
<div class="left-block"> <div class="left-block">
<el-carousel :interval="3000" arrow="hover" height="510px"> <el-carousel :interval="3000" arrow="hover" height="510px">
<el-carousel-item v-for="(item, index) in carousel" :key="index"> <el-carousel-item v-for="(item, index) in carousel" :key="index">
<div class="carousel-img"> <div class="carousel-img">
<el-image style="width: 400px;" :src="item" fit="fit" /> <el-image style="width: 400px;" :src="item" fit="fit" />
</div> </div>
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
</div> </div>
<div class="right-block"> <div class="right-block">
<!-- <div class="fk-block"> <!-- <div class="fk-block">
<el-popover <el-popover
placement="left" placement="left"
width="150" width="150"
trigger="hover" trigger="hover"
> >
<div class="text-center"> <div class="text-center">
<div>企微扫码</div> <div>企微扫码</div>
<el-image style="width: 120px" :src="wxLog" fit="fit" /> <el-image style="width: 120px" :src="wxLog" fit="fit" />
</div> </div>
<div slot="reference" class="fkText"> <div slot="reference" class="fkText">
<svg-icon icon-class="kefu-log" class="kf-icon" />联系客服 <svg-icon icon-class="kefu-log" class="kf-icon" />联系客服
</div> </div>
</el-popover> </el-popover>
</div> --> </div> -->
<el-form <el-form
ref="loginForm" ref="loginForm"
:model="loginForm" :model="loginForm"
:rules="loginRules" :rules="loginRules"
label-position="left" label-position="left"
label-width="0px" label-width="0px"
class="login-form" class="login-form"
> >
<div class="u-flex top-title"> <div class="u-flex top-title">
<img :src="logoImg" class="logoImg"> <!-- <img :src="logoImg" class="logoImg"> -->
<h3 class="title">太空猫登录</h3> <h3 class="title">RTA回访登录</h3>
</div> </div>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input
v-model="loginForm.username" v-model="loginForm.username"
type="text" type="text"
auto-complete="off" auto-complete="off"
placeholder="账号" placeholder="账号"
> >
<svg-icon <svg-icon
slot="prefix" slot="prefix"
icon-class="user" icon-class="user"
class="el-input__icon input-icon" class="el-input__icon input-icon"
/> />
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input
v-model="loginForm.password" v-model="loginForm.password"
type="password" type="password"
auto-complete="off" auto-complete="off"
placeholder="密码" placeholder="密码"
@keyup.enter.native="handleLogin" @keyup.enter.native="handleLogin"
> >
<svg-icon <svg-icon
slot="prefix" slot="prefix"
icon-class="password" icon-class="password"
class="el-input__icon input-icon" class="el-input__icon input-icon"
/> />
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="code"> <el-form-item prop="code">
<el-input <el-input
v-model="loginForm.code" v-model="loginForm.code"
auto-complete="off" auto-complete="off"
placeholder="验证码" placeholder="验证码"
style="width: 63%" style="width: 63%"
@keyup.enter.native="handleLogin" @keyup.enter.native="handleLogin"
> >
<svg-icon <svg-icon
slot="prefix" slot="prefix"
icon-class="validCode" icon-class="validCode"
class="el-input__icon input-icon" class="el-input__icon input-icon"
/> />
</el-input> </el-input>
<div class="login-code"> <div class="login-code">
<img :src="codeUrl" @click="getCode"> <img :src="codeUrl" @click="getCode">
</div> </div>
</el-form-item> </el-form-item>
<!-- <el-checkbox v-model="loginForm.rememberMe" style="margin: 0 0 10px 0"> <!-- <el-checkbox v-model="loginForm.rememberMe" style="margin: 0 0 10px 0">
记住我 记住我
</el-checkbox> --> </el-checkbox> -->
<div class="u-flex" style="margin: 0 0 20px 0"> <div class="u-flex" style="margin: 0 0 20px 0">
<el-checkbox v-model="agrChecked"> <el-checkbox v-model="agrChecked">
阅读并同意 阅读并同意
</el-checkbox> </el-checkbox>
<el-link type="danger" @click="openagr = true">用户协议</el-link> <el-link type="danger" @click="openagr = true">用户协议</el-link>
</div> </div>
<el-form-item style="width: 100%;margin-top: 40px;"> <el-form-item style="width: 100%;margin-top: 40px;">
<el-button <el-button
:loading="loading" :loading="loading"
size="medium" size="medium"
type="primary" type="primary"
style="width: 100%" style="width: 100%"
@click.native.prevent="handleLogin" @click.native.prevent="handleLogin"
> >
<span v-if="!loading"> </span> <span v-if="!loading"> </span>
<span v-else> ...</span> <span v-else> ...</span>
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<!-- 底部 --> <!-- 底部 -->
<div v-if="$store.state.settings.showFooter" id="el-login-footer"> <div v-if="$store.state.settings.showFooter" id="el-login-footer">
<a href="https://beian.miit.gov.cn" target="_blank"> <a href="https://beian.miit.gov.cn" target="_blank">
<span v-html="$store.state.settings.footerTxt" /> <span v-html="$store.state.settings.footerTxt" />
</a> </a>
<span> </span> <span> </span>
<a href="https://beian.miit.gov.cn" target="_blank">{{ <a href="https://beian.miit.gov.cn" target="_blank">{{
$store.state.settings.caseNumber $store.state.settings.caseNumber
}}</a> }}</a>
</div> </div>
<el-dialog <el-dialog
append-to-body append-to-body
:close-on-press-escape="false" :close-on-press-escape="false"
:visible.sync="openagr" :visible.sync="openagr"
title="入驻协议" title="入驻协议"
width="720px" width="720px"
class="agrProp" class="agrProp"
> >
<div v-html="agreementCon" /> <div v-html="agreementCon" />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { encrypt } from '@/utils/rsaEncrypt' import { encrypt } from '@/utils/rsaEncrypt'
import Config from '@/settings' import Config from '@/settings'
import { getCodeImg } from '@/api/login' import { getCodeImg } from '@/api/login'
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import { initWebSocket } from '@/utils/websocket' import { initWebSocket } from '@/utils/websocket'
import agreement from '@/utils/agreement' import agreement from '@/utils/agreement'
// import Background from '@/assets/images/background.jpg' // import Background from '@/assets/images/background.jpg'
import kfcode from '@/assets/images/h5-code.png' import kfcode from '@/assets/images/h5-code.png'
import logo from '@/assets/images/log-login.png' import logo from '@/assets/images/log-login.png'
import wxLog from '@/assets/images/wx-log.png' import wxLog from '@/assets/images/wx-log.png'
import poster1 from '@/assets/images/1-png.png' import poster1 from '@/assets/images/1-png.png'
import poster2 from '@/assets/images/2-png.png' import poster2 from '@/assets/images/2-png.png'
import poster3 from '@/assets/images/3-png.png' import poster3 from '@/assets/images/3-png.png'
export default { export default {
name: 'Login', name: 'Login',
data() { data() {
return { return {
carousel: [poster1, poster2, poster3], carousel: [poster1, poster2, poster3],
// Background: Background, // Background: Background,
codeUrl: '', codeUrl: '',
cookiePass: '', cookiePass: '',
logoImg: logo, logoImg: logo,
wxLog: wxLog, wxLog: wxLog,
kfcodeImg: kfcode, kfcodeImg: kfcode,
openagr: false, openagr: false,
agreementCon: agreement, agreementCon: agreement,
agrChecked: true, agrChecked: true,
loginForm: { loginForm: {
username: '', username: '',
password: '', password: '',
rememberMe: false, rememberMe: false,
code: '', code: '',
uuid: '' uuid: ''
}, },
loginRules: { loginRules: {
username: [ username: [
{ required: true, trigger: 'blur', message: '用户名不能为空' } { required: true, trigger: 'blur', message: '用户名不能为空' }
], ],
password: [ password: [
{ required: true, trigger: 'blur', message: '密码不能为空' } { required: true, trigger: 'blur', message: '密码不能为空' }
], ],
code: [ code: [
{ required: true, trigger: 'change', message: '验证码不能为空' } { required: true, trigger: 'change', message: '验证码不能为空' }
] ]
}, },
loading: false, loading: false,
redirect: undefined redirect: undefined
} }
}, },
watch: { watch: {
$route: { $route: {
handler: function(route) { handler: function(route) {
this.redirect = route.query && route.query.redirect this.redirect = route.query && route.query.redirect
}, },
immediate: true immediate: true
} }
}, },
created() { created() {
// //
this.getCode() this.getCode()
// Cookie // Cookie
this.getCookie() this.getCookie()
// token // token
this.point() this.point()
// 使 // 使
// setToken('res.token== Bearer eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiIzY2I1YzhkN2UxMmY0NTM3OWVjNGMxZTU3NzAxMWVkNCIsImF1dGgiOiJhZG1pbiIsInN1YiI6ImFkbWluIn0.skcUgrQox9fcxe5ssLLvGSneR5HWRyRqrIplGhlmSoeg9KVZV8ZdKdQYLzitoDEw_nDfdrGd_isDohSbjbh1Rg', false) // setToken('res.token== Bearer eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiIzY2I1YzhkN2UxMmY0NTM3OWVjNGMxZTU3NzAxMWVkNCIsImF1dGgiOiJhZG1pbiIsInN1YiI6ImFkbWluIn0.skcUgrQox9fcxe5ssLLvGSneR5HWRyRqrIplGhlmSoeg9KVZV8ZdKdQYLzitoDEw_nDfdrGd_isDohSbjbh1Rg', false)
}, },
methods: { methods: {
getCode() { getCode() {
getCodeImg().then((res) => { getCodeImg().then((res) => {
this.codeUrl = res.img this.codeUrl = res.img
this.loginForm.uuid = res.uuid this.loginForm.uuid = res.uuid
}) })
}, },
getCookie() { getCookie() {
const username = Cookies.get('username') const username = Cookies.get('username')
let password = Cookies.get('password') let password = Cookies.get('password')
const rememberMe = Cookies.get('rememberMe') const rememberMe = Cookies.get('rememberMe')
// cookie // cookie
this.cookiePass = password === undefined ? '' : password this.cookiePass = password === undefined ? '' : password
password = password === undefined ? this.loginForm.password : password password = password === undefined ? this.loginForm.password : password
this.loginForm = { this.loginForm = {
username: username === undefined ? this.loginForm.username : username, username: username === undefined ? this.loginForm.username : username,
password: password, password: password,
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
code: '' code: ''
} }
}, },
handleLogin() { handleLogin() {
this.$refs.loginForm.validate(async(valid) => { this.$refs.loginForm.validate(async(valid) => {
const user = { const user = {
username: this.loginForm.username, username: this.loginForm.username,
password: this.loginForm.password, password: this.loginForm.password,
rememberMe: this.loginForm.rememberMe, rememberMe: this.loginForm.rememberMe,
code: this.loginForm.code, code: this.loginForm.code,
uuid: this.loginForm.uuid uuid: this.loginForm.uuid
} }
if (user.password !== this.cookiePass) { if (user.password !== this.cookiePass) {
user.password = encrypt(user.password) user.password = encrypt(user.password)
} }
if (valid) { if (valid) {
if (this.agrChecked) { if (this.agrChecked) {
this.loading = true this.loading = true
if (user.rememberMe) { if (user.rememberMe) {
Cookies.set('username', user.username, { Cookies.set('username', user.username, {
expires: Config.passCookieExpires expires: Config.passCookieExpires
}) })
Cookies.set('password', user.password, { Cookies.set('password', user.password, {
expires: Config.passCookieExpires expires: Config.passCookieExpires
}) })
Cookies.set('rememberMe', user.rememberMe, { Cookies.set('rememberMe', user.rememberMe, {
expires: Config.passCookieExpires expires: Config.passCookieExpires
}) })
} else { } else {
Cookies.remove('username') Cookies.remove('username')
Cookies.remove('password') Cookies.remove('password')
Cookies.remove('rememberMe') Cookies.remove('rememberMe')
} }
await this.$store await this.$store
.dispatch('Login', user) .dispatch('Login', user)
.then((res) => { .then((res) => {
this.loading = false this.loading = false
// initWebSocket() // initWebSocket()
this.$router.push({ path: '/' }) this.$router.push({ path: '/' })
}) })
.catch(() => { .catch(() => {
this.loading = false this.loading = false
this.getCode() this.getCode()
}) })
// await this.$store // await this.$store
// .dispatch('message/getMsg') // .dispatch('message/getMsg')
// .then((res) => {}) // .then((res) => {})
// .catch(() => {}) // .catch(() => {})
} else { } else {
this.$message.warning('请先阅读并勾选协议') this.$message.warning('请先阅读并勾选协议')
} }
} else { } else {
console.log('error submit!!') console.log('error submit!!')
return false return false
} }
}) })
}, },
point() { point() {
const point = Cookies.get('point') !== undefined const point = Cookies.get('point') !== undefined
if (point) { if (point) {
this.$notify({ this.$notify({
title: '提示', title: '提示',
message: '当前登录状态已过期,请重新登录!', message: '当前登录状态已过期,请重新登录!',
type: 'warning', type: 'warning',
duration: 5000 duration: 5000
}) })
Cookies.remove('point') Cookies.remove('point')
} }
} }
} }
} }
</script> </script>
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
.agrProp ::v-deep .el-dialog { .agrProp ::v-deep .el-dialog {
height: 70vh; height: 70vh;
overflow: auto; overflow: auto;
} }
.agrProp ::v-deep .el-dialog__body { .agrProp ::v-deep .el-dialog__body {
padding-top: 0; padding-top: 0;
} }
.el-carousel__item h3 { .el-carousel__item h3 {
color: #475669; color: #475669;
font-size: 18px; font-size: 18px;
opacity: 0.75; opacity: 0.75;
line-height: 300px; line-height: 300px;
margin: 0; margin: 0;
} }
.login { .login {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
height: 100%; height: 100%;
background-size: 100% 100%; background-size: 100% 100%;
} }
.left-block { .left-block {
background-color: #F7F8FA; background-color: #F7F8FA;
flex: 1; flex: 1;
height: 100%; height: 100%;
position: relative; position: relative;
.el-carousel { .el-carousel {
position: absolute; position: absolute;
left: 0; left: 0;
right: 0; right: 0;
margin: auto; margin: auto;
top: 25vh; top: 25vh;
} }
.carousel-img { .carousel-img {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
} }
.right-block { .right-block {
background-color: rgba(59,130,246,0.1); background-color: rgba(59,130,246,0.1);
flex: 1; flex: 1;
height: 100%; height: 100%;
position: relative; position: relative;
.kf-icon { .kf-icon {
width: 30px; width: 30px;
height: 30px; height: 30px;
margin-right: 3px; margin-right: 3px;
} }
.fk-block { .fk-block {
position: absolute; position: absolute;
right: 28px; right: 28px;
top: 23px; top: 23px;
} }
.fkText { .fkText {
color: #606060; color: #606060;
font-size: 14px; font-size: 14px;
display: flex; display: flex;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
} }
} }
.top-title { .top-title {
margin: 0 auto 20px auto; margin: 0 auto 20px auto;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
.title { .title {
color: #23272e; color: #23272e;
letter-spacing: 1px; letter-spacing: 1px;
} }
} }
.logoImg { .logoImg {
width: 30px; width: 30px;
height: 30px; height: 30px;
} }
.login-form { .login-form {
border-radius: 6px; border-radius: 6px;
background: #ffffff; background: #ffffff;
width: 370px; width: 370px;
padding: 25px 25px 5px 25px; padding: 25px 25px 5px 25px;
position: absolute; position: absolute;
box-shadow: 0 0 16px rgb(0 0 0 / 5%); box-shadow: 0 0 16px rgb(0 0 0 / 5%);
left: 0; left: 0;
right: 0; right: 0;
margin: auto; margin: auto;
top: 25vh; top: 25vh;
.el-input { .el-input {
height: 38px; height: 38px;
input { input {
height: 38px; height: 38px;
} }
} }
.input-icon { .input-icon {
height: 39px; height: 39px;
width: 14px; width: 14px;
margin-left: 2px; margin-left: 2px;
} }
} }
.login-tip { .login-tip {
font-size: 13px; font-size: 13px;
text-align: center; text-align: center;
color: #bfbfbf; color: #bfbfbf;
} }
.login-code { .login-code {
width: 33%; width: 33%;
display: inline-block; display: inline-block;
height: 38px; height: 38px;
float: right; float: right;
img { img {
cursor: pointer; cursor: pointer;
vertical-align: middle; vertical-align: middle;
} }
} }
</style> </style>

@ -1,238 +1,256 @@
<!-- <!--
* @Description: 投流下载 * @Description: 投流下载
* @Autor: 飘泊客 * @Autor: 飘泊客
* @Date: 2022-01-13 15:43:13 * @Date: 2022-01-13 15:43:13
* @LastEditors: 飘泊客 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2023-03-15 15:19:29 * @LastEditTime: 2023-10-09 14:30:05
--> -->
<template> <template>
<div class="app-container"> <div class="app-container">
<el-row :gutter="20"> <el-row :gutter="20">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div> <div>
<!-- 搜索 --> <!-- 搜索 -->
<date-range-picker v-model="query.createTime" class="date-item" /> <date-range-picker v-model="query.createTime" class="date-item" />
<rrOperation /> <rrOperation />
</div> </div>
<div> <div>
<el-button class="filter-item" size="mini" type="primary" icon="el-icon-plus" @click="resourcesDialog = true">上传文件</el-button> <el-button class="filter-item" size="mini" type="primary" icon="el-icon-plus" @click="resourcesDialog = true">上传文件</el-button>
</div> </div>
</div> </div>
<!--表格渲染--> <!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" :header-cell-style="{'text-align':'left'}" style="width: 100%;"> <el-table ref="table" v-loading="crud.loading" :data="crud.data" :header-cell-style="{'text-align':'left'}" style="width: 100%;">
<el-table-column :show-overflow-tooltip="true" prop="companyName" label="公司名称" /> <el-table-column :show-overflow-tooltip="true" prop="companyName" label="公司名称" />
<el-table-column :show-overflow-tooltip="true" prop="taskName" label="任务名称" /> <el-table-column :show-overflow-tooltip="true" prop="taskName" label="任务名称" />
<el-table-column :show-overflow-tooltip="true" prop="clueNum" label="资源条数" /> <el-table-column :show-overflow-tooltip="true" prop="clueNum" label="资源条数" />
<el-table-column :show-overflow-tooltip="true" prop="createTime" width="135" label="创建日期"> <el-table-column :show-overflow-tooltip="true" prop="createTime" width="135" label="创建日期">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column :show-overflow-tooltip="true" prop="status" label="下载状态"> <!-- <el-table-column :show-overflow-tooltip="true" prop="status" label="下载状态">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="scope.row.status == 0 ? 'danger' : 'success'">{{ scope.row.status == 0 ? '未下载' : '已下载' }}</el-tag> <el-tag :type="scope.row.status == 0 ? 'danger' : 'success'">{{ scope.row.status == 0 ? '未下载' : '已下载' }}</el-tag>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column <el-table-column
label="操作" label="操作"
width="300" width="300"
align="center" align="center"
fixed="right" fixed="right"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.type === 1 && scope.row.clueNum >= 100" @click="sendEmail(scope.row.id)"></el-button> <el-button v-if="scope.row.type === 1 && scope.row.clueNum >= 100" @click="sendEmail(scope.row.id)"></el-button>
<el-button v-if="scope.row.status === 1" type="primary" @click="downloadUrl('email', scope.row)"></el-button> <el-button v-if="scope.row.status === 1" type="primary" @click="downloadUrl('email', scope.row)"></el-button>
<el-button v-if="scope.row.type === 2 || (scope.row.type === 1 && scope.row.clueNum < 100)" type="success" @click="downloadUrl('excel', scope.row)">excel</el-button> <el-button v-if="scope.row.type === 2 || (scope.row.type === 1 && scope.row.clueNum < 100)" type="success" @click="downloadUrl('excel', scope.row)">excel</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-row> </el-row>
<!--追加资源--> <!--追加资源-->
<el-dialog <el-dialog
append-to-body append-to-body
:close-on-click-modal="false" :close-on-click-modal="false"
:visible.sync="resourcesDialog" :visible.sync="resourcesDialog"
:before-close="colseFileDialog" :before-close="colseFileDialog"
title="上传文件" title="上传文件"
width="520px" width="520px"
class="import-dialog" class="import-dialog"
> >
<div div class="u-flex"> <div div class="u-flex">
<div class="label">任务名</div> <div class="label">任务名</div>
<el-input v-model="taskName" placeholder="请设置任务名" style="width: 360px" /> <el-input v-model="taskName" placeholder="请设置任务名" style="width: 360px" />
</div> </div>
<div class="margin-auto">
<el-upload <div class="u-flex" style="margin-top:8px">
ref="updaatefiles" <div class="label">上传方式</div>
action="" <el-select
accept=".xlsx,.xls" v-model="uploadType"
drag clearable
multiple size="small"
:limit="5" placeholder="请选择"
class="mt-10 text-center" class="filter-item"
:file-list="fileList" style="width: 360px"
:auto-upload="false" >
:on-remove="handleRemove" <el-option :key="0" label="方式一" :value="0" />
:on-exceed="handleExceed" <el-option :key="1" label="方式二" :value="1" />
:http-request="updtaFils" </el-select>
> </div>
<i class="el-icon-upload" />
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div> <div class="margin-auto">
<div slot="tip" class="el-upload__tip">只能上传.xls.xlsx.csv文件且不超过100M</div> <el-upload
</el-upload> ref="updaatefiles"
<div class="line-text margin-auto"> action=""
1请导入 xlsxlsx.csv 格式的文件<br> accept=".xlsx,.xls"
2必须填写表头方便后续匹配也可点击下载 模板帮助您快速完成导入<br> drag
3多文件导入请统一提交<br> multiple
4一次最多支持导入 5 份文件<br> :limit="5"
</div> class="mt-10 text-center"
</div> :file-list="fileList"
<div slot="footer" class="dialog-footer"> :auto-upload="false"
<el-button type="text" @click="colseFileDialog"></el-button> :on-remove="handleRemove"
<el-button :on-exceed="handleExceed"
:loading="uploading" :http-request="updtaFils"
type="primary" >
@click="submitUpload" <i class="el-icon-upload" />
>上传资源</el-button> <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
</div> <div slot="tip" class="el-upload__tip">只能上传.xls.xlsx.csv文件且不超过100M</div>
</el-dialog> </el-upload>
</div> <div class="line-text margin-auto">
</template> 1请导入 xlsxlsx.csv 格式的文件<br>
2必须填写表头方便后续匹配也可点击下载 模板帮助您快速完成导入<br>
<script> 3多文件导入请统一提交<br>
import CRUD, { presenter, header, form, crud } from '@crud/crud' 4一次最多支持导入 5 份文件<br>
import rrOperation from '@crud/RR.operation' </div>
import pagination from '@crud/Pagination' </div>
import DateRangePicker from '@/components/DateRangePicker' <div slot="footer" class="dialog-footer">
import { uploadFiles, sendEmail } from '@/api/index' <el-button type="text" @click="colseFileDialog"></el-button>
import { mapGetters } from 'vuex' <el-button
import '@riophae/vue-treeselect/dist/vue-treeselect.css' :loading="uploading"
const defaultForm = { } type="primary"
export default { @click="submitUpload"
name: 'CurrentDownload', >上传资源</el-button>
components: { rrOperation, pagination, DateRangePicker }, </div>
cruds() { </el-dialog>
return CRUD({ title: '投流下载', url: 'api-management/api/down/record' }) </div>
}, </template>
mixins: [presenter(), header(), form(defaultForm), crud()],
data() { <script>
return { import CRUD, { presenter, header, form, crud } from '@crud/crud'
height: document.documentElement.clientHeight - 180 + 'px;', import rrOperation from '@crud/RR.operation'
uploading: false, import pagination from '@crud/Pagination'
resourcesDialog: false, import DateRangePicker from '@/components/DateRangePicker'
taskName: '', // import { uploadFiles, sendEmail } from '@/api/index'
fileList: [], // files import { mapGetters } from 'vuex'
permission: { import '@riophae/vue-treeselect/dist/vue-treeselect.css'
add: ['admin', 'user:add'], const defaultForm = { }
edit: ['admin', 'user:edit'], export default {
del: ['admin', 'user:del'], name: 'CurrentDownload',
download: ['admin', 'user:download'] components: { rrOperation, pagination, DateRangePicker },
} cruds() {
} return CRUD({ title: '投流下载', url: 'api-management/api/down/record' })
}, },
computed: { mixins: [presenter(), header(), form(defaultForm), crud()],
...mapGetters([ data() {
'user' return {
]) height: document.documentElement.clientHeight - 180 + 'px;',
}, uploading: false,
created() {}, resourcesDialog: false,
mounted: function() { uploadType: 0,
const that = this taskName: '', //
window.onresize = function temp() { fileList: [], // files
that.height = document.documentElement.clientHeight - 180 + 'px;' permission: {
} add: ['admin', 'user:add'],
}, edit: ['admin', 'user:edit'],
methods: { del: ['admin', 'user:del'],
downloadUrl(type, data) { download: ['admin', 'user:download']
const a = document.createElement('a') }
a.style.display = 'none' }
if (type === 'email') { },
a.href = data.emailFilePath computed: {
} ...mapGetters([
if (type === 'excel') { 'user'
a.href = data.filePath ])
} },
document.body.appendChild(a) created() {},
a.click() mounted: function() {
document.body.removeChild(a) const that = this
}, window.onresize = function temp() {
sendEmail(id) { that.height = document.documentElement.clientHeight - 180 + 'px;'
sendEmail({ id: id }).then(res => { }
this.$message.success('发送成功') },
}) methods: {
}, downloadUrl(type, data) {
colseFileDialog() { const a = document.createElement('a')
this.fileList = [] a.style.display = 'none'
this.taskName = '' if (type === 'email') {
this.resourcesDialog = false a.href = data.emailFilePath
}, }
// if (type === 'excel') {
updtaFils(file) { a.href = data.filePath
this.fileData.append('file', file.file) }
}, document.body.appendChild(a)
// a.click()
handleRemove(file, fileList) { document.body.removeChild(a)
this.fileList = fileList },
}, sendEmail(id) {
// sendEmail({ id: id }).then(res => {
handleExceed(files, fileList) { this.$message.success('发送成功')
this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`) })
}, },
submitUpload() { colseFileDialog() {
// this.fileList = []
const isLt100M = this.fileList.every(file => file.size / 1024 / 1024 < 100) this.taskName = ''
if (!isLt100M) { this.resourcesDialog = false
this.$message.warning('请检查上传文件大小不能超过100MB!') },
} else { //
this.fileData = new FormData() // new formData updtaFils(file) {
this.$refs['updaatefiles'].submit() this.fileData.append('file', file.file)
if (!this.fileData.get('file')) { },
this.$message({ //
message: '请先选择文件', handleRemove(file, fileList) {
type: 'warning' this.fileList = fileList
}) },
return false //
} handleExceed(files, fileList) {
this.fileData.append('taskName', this.taskName) this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
this.uploading = true },
uploadFiles(this.fileData).then((res) => { submitUpload() {
this.$message({ //
message: '操作成功,文件上传中', const isLt100M = this.fileList.every(file => file.size / 1024 / 1024 < 100)
type: 'success' if (!isLt100M) {
}) this.$message.warning('请检查上传文件大小不能超过100MB!')
this.fileList = [] } else {
setTimeout(() => { this.fileData = new FormData() // new formData
this.colseFileDialog() this.$refs['updaatefiles'].submit()
this.crud.toQuery() if (!this.fileData.get('file')) {
this.uploading = false this.$message({
}, 3000) message: '请先选择文件',
}).catch(() => { type: 'warning'
this.uploading = false })
}) return false
} }
} this.fileData.append('taskName', this.taskName)
} this.fileData.append('uploadType', this.uploadType)
} this.uploading = true
</script> uploadFiles(this.fileData).then((res) => {
this.$message({
<style rel="stylesheet/scss" lang="scss" scoped> message: '操作成功,文件上传中',
::v-deep .vue-treeselect__control,::v-deep .vue-treeselect__placeholder,::v-deep .vue-treeselect__single-value { type: 'success'
height: 30px; })
line-height: 30px; this.fileList = []
} setTimeout(() => {
.label{ this.colseFileDialog()
min-width: 60px; this.crud.toQuery()
line-height: 32px; this.uploading = false
float: none; }, 3000)
display: inline-block; }).catch(() => {
font-size: 14px; this.uploading = false
color: #606266; })
text-align: left; }
vertical-align: middle; }
font-weight: 700; }
// padding: 0 20px 0 0; }
} </script>
</style>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .vue-treeselect__control,::v-deep .vue-treeselect__placeholder,::v-deep .vue-treeselect__single-value {
height: 30px;
line-height: 30px;
}
.label{
min-width: 60px;
line-height: 32px;
float: none;
display: inline-block;
font-size: 14px;
color: #606266;
text-align: left;
vertical-align: middle;
font-weight: 700;
// padding: 0 20px 0 0;
}
</style>

@ -0,0 +1,133 @@
<!--
* @Description: 投流下载
* @Autor: 飘泊客
* @Date: 2022-01-13 15:43:13
* @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2023-10-13 11:29:17
-->
<template>
<div class="app-container">
<el-row :gutter="20">
<!--工具栏-->
<div class="head-container">
<div>
<!-- 搜索 -->
<date-range-picker v-model="query.createTime" class="date-item" />
<rrOperation />
</div>
<!-- 拓展菜单 -->
</div>
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" :header-cell-style="{'text-align':'left'}" style="width: 100%;">
<el-table-column :show-overflow-tooltip="true" prop="companyName" label="公司名称" />
<el-table-column :show-overflow-tooltip="true" prop="taskName" label="任务名称" />
<el-table-column :show-overflow-tooltip="true" prop="clueNum" label="资源条数" />
<el-table-column :show-overflow-tooltip="true" prop="createTime" width="135" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column :show-overflow-tooltip="true" prop="status" label="下载状态">
<template slot-scope="scope">
<el-tag :type="scope.row.status == 0 ? 'danger' : 'success'">{{ scope.row.status == 0 ? '未下载' : '已下载' }}</el-tag>
</template>
</el-table-column> -->
<el-table-column
label="操作"
width="300"
align="center"
fixed="right"
>
<template slot-scope="scope">
<el-button v-if="scope.row.type === 1 && scope.row.clueNum >= 100" @click="sendEmail(scope.row.id)"></el-button>
<el-button v-if="scope.row.status === 1" type="primary" @click="downloadUrl('email', scope.row)"></el-button>
<el-button v-if="scope.row.type === 2 || (scope.row.type === 1 && scope.row.clueNum < 100)" type="success" @click="downloadUrl('excel', scope.row)">excel</el-button>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</el-row>
</div>
</template>
<script>
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
import DateRangePicker from '@/components/DateRangePicker'
import { sendEmail } from '@/api/index'
import { mapGetters } from 'vuex'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
const defaultForm = { }
export default {
name: 'CurrentDownload',
components: { rrOperation, pagination, DateRangePicker },
cruds() {
return CRUD({ title: '三方下载', url: 'api-management/api/down/record' })
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
height: document.documentElement.clientHeight - 180 + 'px;',
permission: {
add: ['admin', 'user:add'],
edit: ['admin', 'user:edit'],
del: ['admin', 'user:del'],
download: ['admin', 'user:download']
}
}
},
computed: {
...mapGetters([
'user'
])
},
created() {},
mounted: function() {
const that = this
window.onresize = function temp() {
that.height = document.documentElement.clientHeight - 180 + 'px;'
}
},
methods: {
downloadUrl(type, data) {
const a = document.createElement('a')
a.style.display = 'none'
if (type === 'email') {
a.href = data.emailFilePath
}
if (type === 'excel') {
a.href = data.filePath
}
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
},
sendEmail(id) {
sendEmail({ id: id }).then(res => {
this.$message.success('发送成功')
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .vue-treeselect__control,::v-deep .vue-treeselect__placeholder,::v-deep .vue-treeselect__single-value {
height: 30px;
line-height: 30px;
}
.label{
min-width: 60px;
line-height: 32px;
float: none;
display: inline-block;
font-size: 14px;
color: #606266;
text-align: left;
vertical-align: middle;
font-weight: 700;
// padding: 0 20px 0 0;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,135 +1,139 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div class="u-flex u-flex-wrap"> <div class="u-flex u-flex-wrap">
<!-- 搜索 --> <!-- 搜索 -->
<div> <div>
<label class="y-label">线索类型</label> <label class="y-label">线索类型</label>
<el-select <el-select
v-model="query.clueType" v-model="query.clueType"
clearable clearable
size="small" size="small"
placeholder="请选择" placeholder="请选择"
class="filter-item" class="filter-item"
style="width: 170px" style="width: 170px"
@change="crud.toQuery" @change="crud.toQuery"
> >
<el-option key="4" label="投流DMP" value="4" /> <el-option key="4" label="投流DMP" value="4" />
<el-option key="5" label="自主拓客" value="5" /> <el-option key="5" label="自主拓客" value="5" />
</el-select> </el-select>
</div> </div>
<div> <div>
<label class="y-label">日期</label> <label class="y-label">日期</label>
<date-range-picker v-model="query.createTime" class="date-item" /> <date-range-picker v-model="query.createTime" class="date-item" />
</div> </div>
<rrOperation :reset-current="true" style="margin-left: 5px;" /> <rrOperation :reset-current="true" style="margin-left: 5px;" />
</div> </div>
<el-button size="mini" type="primary" :disabled="multipleSelection.length == 0" @click="displaceClue({ type: 'multiple' })">批量赔付</el-button> <el-button size="mini" type="primary" :disabled="multipleSelection.length == 0" @click="displaceClue({ type: 'multiple' })">批量赔付</el-button>
</div> </div>
<!--表格渲染--> <!-- 描述 -->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" :header-cell-style="{'text-align':'left'}" @selection-change="handleSelectionChange"> <div class="fs-12 mb-5">
<el-table-column type="selection" width="55" /> <span>赔付标准<span class="c-red">满足拨打赔付条件的DMP线索会显示在该页面您可以自主选择点击进行数量赔付数量会在赔付后充入您的账户</span></span>
<el-table-column :show-overflow-tooltip="true" prop="clueId" label="线索ID" /> </div>
<el-table-column :show-overflow-tooltip="true" prop="clueType" label="线索类型" width="160"> <!--表格渲染-->
<template slot-scope="scope"> <el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" :header-cell-style="{'text-align':'left'}" @selection-change="handleSelectionChange">
{{ scope.row.clueType == 4 ? '投流DMP' : '自主拓客' }} <el-table-column type="selection" width="55" />
</template> <el-table-column :show-overflow-tooltip="true" prop="clueId" label="线索ID" />
</el-table-column> <el-table-column :show-overflow-tooltip="true" prop="clueType" label="线索类型" width="160">
<el-table-column :show-overflow-tooltip="true" prop="createTime" width="135" label="创建日期"> <template slot-scope="scope">
<template slot-scope="scope"> {{ scope.row.clueType == 4 ? '投流DMP' : '自主拓客' }}
<span>{{ parseTime(scope.row.createTime) }}</span> </template>
</template> </el-table-column>
</el-table-column> <el-table-column :show-overflow-tooltip="true" prop="createTime" width="135" label="创建日期">
<el-table-column <template slot-scope="scope">
label="操作" <span>{{ parseTime(scope.row.createTime) }}</span>
width="100" </template>
fixed="right" </el-table-column>
> <el-table-column
<template slot-scope="scope"> label="操作"
<el-button width="100"
slot="reference" fixed="right"
size="mini" >
type="text" <template slot-scope="scope">
@click.stop="displaceClue({ type: 'single', id: scope.row.id })" <el-button
>赔付</el-button> slot="reference"
</template> size="mini"
</el-table-column> type="text"
<template #empty> @click.stop="displaceClue({ type: 'single', id: scope.row.id })"
<div style="width: 100%; height: 450px;display: flex; flex-direction: column; justify-content: center;align-items: center"> >赔付</el-button>
<img src="@/assets/images/zanwu.png" alt=""> </template>
<div>暂无数据</div> </el-table-column>
</div> <template #empty>
</template> <div style="width: 100%; height: 450px;display: flex; flex-direction: column; justify-content: center;align-items: center">
</el-table> <img src="@/assets/images/zanwu.png" alt="">
<!--分页组件--> <div>暂无数据</div>
<pagination /> </div>
</div> </template>
</template> </el-table>
<script> <!--分页组件-->
import CRUD, { presenter, header, form, crud } from '@crud/crud' <pagination />
import pagination from '@crud/Pagination' </div>
import rrOperation from '@crud/RR.operation' </template>
import DateRangePicker from '@/components/DateRangePicker' <script>
import { boostCompensate } from '@/api/index' import CRUD, { presenter, header, form, crud } from '@crud/crud'
const defaultForm = {} import pagination from '@crud/Pagination'
export default { import rrOperation from '@crud/RR.operation'
name: 'CompensationDMP', import DateRangePicker from '@/components/DateRangePicker'
components: { import { boostCompensate } from '@/api/index'
pagination, const defaultForm = {}
rrOperation, export default {
DateRangePicker name: 'CompensationDMP',
}, components: {
cruds() { pagination,
return CRUD({ rrOperation,
title: 'DMP赔付', DateRangePicker
url: 'api-management/api/boost/queryAll', },
optShow: { cruds() {
add: true, return CRUD({
edit: false, title: 'DMP赔付',
del: true, url: 'api-management/api/boost/queryAll',
download: false, optShow: {
reset: true add: true,
}, edit: false,
query: {} del: true,
}) download: false,
}, reset: true
mixins: [presenter(), header(), form(defaultForm), crud()], },
data() { query: {}
return { })
multipleSelection: [] },
mixins: [presenter(), header(), form(defaultForm), crud()],
} data() {
}, return {
methods: { multipleSelection: []
//
displaceClue(params) { }
const { type, id } = params },
let arr = [] methods: {
if (type === 'single') { //
arr = [id] displaceClue(params) {
} const { type, id } = params
if (type === 'multiple') { let arr = []
arr = this.multipleSelection.map(item => item.id) if (type === 'single') {
} arr = [id]
this.$confirm('确定要执行此操作吗?赔付后该线索将会被冻结', '提示', { }
confirmButtonText: '确定', if (type === 'multiple') {
cancelButtonText: '取消', arr = this.multipleSelection.map(item => item.id)
type: 'warning' }
}).then(() => { this.$confirm('确定要执行此操作吗?赔付后该线索将会被冻结', '提示', {
boostCompensate(arr).then(res => { confirmButtonText: '确定',
this.$message.success('操作成功') cancelButtonText: '取消',
this.crud.toQuery() type: 'warning'
}) }).then(() => {
}).catch(() => {}) boostCompensate(arr).then(res => {
}, this.$message.success('操作成功')
// this.crud.toQuery()
updateDistribution() { })
}).catch(() => {})
}, },
handleSelectionChange(val) { //
this.multipleSelection = val updateDistribution() {
}
} },
} handleSelectionChange(val) {
</script> this.multipleSelection = val
}
}
}
</script>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save