提交 6391203f 作者: 毛细亚

合并分支 'release' 到 'master'

合并 6.8 代码到 master

查看合并请求 !18
.DS_Store .DS_Store
node_modules node_modules
/dist /dist
/company_app /company_app/
# local env files # local env files
......
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/><title>企微侧边栏</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/runtime.2425ceee.js"></script><script defer="defer" src="static/js/chunk-elementUI.d0bcf3c3.js"></script><script defer="defer" src="static/js/chunk-libs.c6681081.js"></script><script defer="defer" src="static/js/app.e6abe9ca.js"></script><link href="static/css/chunk-elementUI.dd5abb38.css" rel="stylesheet"><link href="static/css/app.d9cea248.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50px" height="50px" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>已通过</title>
<g id="游戏" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="我的任务-撤销页" transform="translate(-404, -935)" fill-rule="nonzero">
<g id="编组-4备份-5" transform="translate(132, 885.96)">
<g id="已通过" transform="translate(272, 49.04)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="50" height="50"></rect>
<path d="M48.9604167,18.1563095 L41.587381,6.53083335 C40.9435714,5.51708335 39.5982143,5.21714287 38.5814286,5.85535713 L1.78476191,29.1335714 C0.770773828,29.777381 0.471071436,31.1227381 1.10791665,32.1336905 L8.48095239,43.7606548 C9.12482144,44.7718453 10.470119,45.0715477 11.4841667,44.4333929 L48.2822024,21.1567857 C49.2989881,20.512619 49.6044643,19.1689286 48.9604167,18.1563095 Z M47.4918452,19.907381 L10.6938095,43.1870238 C10.3683333,43.3920833 9.94232144,43.2960714 9.73726191,42.9719643 L2.36422617,31.3450595 C2.15910713,31.0195238 2.25517856,30.5949405 2.58065479,30.3870833 L39.380119,7.10886904 C39.7058929,6.90517856 40.1332143,7.00142856 40.3352976,7.32553569 L47.711369,18.9522619 C47.9092262,19.2707738 47.8117857,19.6981548 47.4918452,19.907381 Z M15.7707738,12.5301786 L16.3818452,13.9957143 L17.1735714,12.6204167 L18.7553571,12.4927381 L17.6897619,11.313869 L18.0526786,9.77208335 L16.6069048,10.4219643 L15.2488095,9.6 L15.4208333,11.1790476 L14.2161905,12.2060714 L15.7707738,12.5301786 L15.7707738,12.5301786 Z M25.1401786,8.16726191 L24.3800595,6.77196431 L23.73625,8.22470239 L22.1730357,8.52303569 L23.3532738,9.58142856 L23.1495833,11.1546429 L24.5263095,10.3586905 L25.9620833,11.04 L25.6307738,9.48541665 L26.7191667,8.33232144 L25.1401786,8.16726191 Z M39.4247619,31.540119 L38.1668452,30.5733333 L38.16125,32.1581548 L36.8475595,33.0489286 L38.3605357,33.5479762 L38.8064881,35.0695238 L39.7444643,33.7888095 L41.3320833,33.8332738 L40.3999405,32.5455357 L40.9377381,31.0581548 L39.4247619,31.540119 L39.4247619,31.540119 Z M34.2903571,37.8589286 L33.6909524,36.3889881 L32.8861905,37.75875 L31.3057738,37.8734524 L32.361369,39.0580357 L31.9855952,40.5982143 L33.4397619,39.9629762 L34.7923214,40.8032738 L34.6330357,39.2228571 L35.8376786,38.1974405 L34.2903571,37.8589286 L34.2903571,37.8589286 Z M24.884881,42.1558333 L25.6380357,43.5569643 L26.294881,42.1083929 L27.8580952,41.8289286 L26.6848214,40.758869 L26.900119,39.1870833 L25.5175595,39.9688095 L24.0889881,39.2775595 L24.4073214,40.8291071 L23.3030952,41.9780357 L24.884881,42.1558333 L24.884881,42.1558333 Z M10.7956548,18.6727381 L12.046369,19.655119 L12.0649405,18.0689286 L13.3844643,17.1825595 L11.879881,16.6733333 L11.4452976,15.1445833 L10.4959524,16.4166667 L8.90833335,16.3592262 L9.82767856,17.6529167 L9.27964287,19.1445238 L10.7956548,18.6727381 L10.7956548,18.6727381 Z M5.20952383,25.5207738 C5.04327383,18.8059524 8.30892861,12.1672024 14.3926786,8.31934521 C20.4777976,4.47142856 27.8752976,4.36238091 33.8844048,7.37720239 L35.3357738,6.45922617 C33.5575,5.46541665 31.6443453,4.73815474 29.6294048,4.28636904 C26.9373214,3.68113096 24.1952977,3.60529761 21.4845833,4.05130952 C18.6779167,4.51583335 16.0247024,5.52845239 13.6009524,7.06446431 C11.178631,8.6004167 9.12482144,10.562381 7.50416665,12.900119 C5.93517856,15.1545833 4.83238096,17.6659524 4.22571431,20.3535714 C3.77392861,22.3655357 3.61327383,24.4049405 3.75392856,26.437381 L5.20952383,25.5207738 Z M44.7254167,24.4939881 C44.898869,31.2088095 41.6332143,37.8475595 35.5494643,41.6940476 C29.4657143,45.546131 22.0669048,45.652381 16.0591071,42.637619 L14.6049405,43.5569643 C16.3832143,44.5479167 18.2977381,45.2767262 20.3129762,45.7283929 C23.0047619,46.333631 25.7468452,46.4125 28.4575,45.9634524 C31.2641667,45.498869 33.9174405,44.4876786 36.3397619,42.9516667 C38.7620833,41.4156547 40.8158929,39.4536905 42.4379167,37.117381 C44.001131,34.860119 45.1039286,32.3503571 45.7091667,29.6641071 C46.1623214,27.6505357 46.3202381,25.6097619 46.1795238,23.577381 L44.7254167,24.4939881 Z M18.781131,15.243631 C20.485,14.1680357 22.3593453,13.5941667 24.2410714,13.4795238 L26.4869048,12.0595833 C23.5195238,11.7096429 20.5480357,12.3780953 17.9838095,13.9973214 C15.4266071,15.6149405 13.5520833,18.0172619 12.6013095,20.8453571 L14.8457738,19.4256548 C15.7579762,17.7675596 17.0789286,16.3220238 18.781131,15.243631 Z M31.1595238,34.7697619 C29.4556548,35.8483929 27.5827381,36.4220238 25.7010119,36.5366667 L23.4564881,37.9566071 C26.4225,38.3065476 29.392619,37.6366667 31.9582143,36.0174405 C34.5154167,34.40125 36.3899405,31.9975 37.3392857,29.1694048 L35.0961905,30.5921429 C34.1841071,32.2427977 32.8617857,33.6941667 31.1595238,34.7697619 Z" id="形状" fill="#00BF8A"></path>
<path d="M13.4734524,27.2072619 L13.526369,26.4886905 L14.6629167,26.5584524 L14.434881,27.1040476 C15.4719048,28.7209524 16.1698214,29.776369 16.5285714,30.2683333 L16.0015476,30.9486905 L15.612619,30.3423214 L9.83339287,34.0489881 L12.0890476,37.5658929 C12.335119,38.0168453 12.7229167,38.0533333 13.2515476,37.6760119 L18.7122024,34.173631 C19.2757143,33.8505357 19.4574405,33.467381 19.2592857,33.0239881 C19.0604762,32.5810714 18.7345238,31.9725595 18.2809524,31.1981548 L18.5084524,31.0522619 C19.39,32.4266667 20.0756548,32.9950595 20.5651786,32.7569643 C20.6032738,33.4172024 20.2102381,33.9731548 19.3873214,34.4252381 L13.0621429,38.4821429 C12.4420833,38.9173214 11.9229762,38.7760714 11.503869,38.0552381 C9.72380952,35.2799405 8.67964287,33.6864286 8.37303569,33.2740476 L9.65303569,32.9666667 L9.47047617,33.4830952 L9.67785713,33.8065476 L15.4570833,30.0998214 L13.72,27.3914881 L8.48684521,30.7479762 C8.09226187,31.0010714 7.75410713,31.2750595 7.4725,31.5697024 L6.82964287,31.4685714 L13.4734524,27.2072619 Z" id="路径" fill="#00BF8A"></path>
<path d="M12.4036905,39.0260119 C11.9542857,39.0260119 11.566131,38.7517262 11.2499405,38.2106548 C9.48863096,35.4646429 8.44023809,33.8633333 8.13416665,33.4516667 L7.86523809,33.0899405 L10.1161905,32.5494048 L9.83160713,33.3542857 L15.0458333,30.009881 L13.630119,27.802619 L8.6475,30.9983929 C8.27482144,31.2374405 7.95184521,31.49875 7.68761904,31.7752381 L7.58005952,31.8877976 L6.00958335,31.6410119 L13.1875595,27.0370833 L13.251131,26.173631 L15.098869,26.2870238 L14.7696429,27.0747024 C15.7556548,28.6102976 16.4280953,29.6254167 16.7689881,30.0929762 L16.9007738,30.2736905 L15.978631,31.4641667 L15.5227976,30.7535119 L10.2446429,34.138869 L12.3503571,37.4233333 C12.4666071,37.6364286 12.5717857,37.6364286 12.6166667,37.6364286 C12.6979762,37.6364286 12.8441071,37.60125 13.0786905,37.4338095 L13.0909524,37.4254762 L18.5642857,33.9154167 C19.1752381,33.565119 19.0485714,33.2816667 18.9876786,33.1453571 C18.7941071,32.7141071 18.469881,32.1094047 18.0242857,31.3484524 L17.8798214,31.1017857 L18.5984524,30.6409524 L18.7591071,30.8914881 C19.6972023,32.3540476 20.1741667,32.5119643 20.3357143,32.5119643 C20.3716667,32.5119643 20.4032738,32.5047619 20.435119,32.4892262 L20.8367262,32.293869 L20.8624405,32.7397024 C20.9073214,33.5183929 20.4623214,34.1715476 19.5397619,34.6810119 L13.2278571,38.7293452 C12.9458333,38.9261904 12.6685714,39.0260119 12.4036905,39.0260119 Z M8.86791665,33.46125 C9.34922617,34.1672024 10.3166667,35.6529762 11.7543452,37.8945238 L11.761131,37.9055952 C11.96375,38.2540476 12.1799405,38.4307143 12.4036905,38.4307143 C12.5454167,38.4307143 12.7094643,38.3660119 12.8911905,38.2385119 L12.9014881,38.2316071 L13.057619,38.1314286 C12.903631,38.1985714 12.7575595,38.2316667 12.6166667,38.2316667 C12.38875,38.2316667 12.068631,38.1422619 11.8331548,37.7182143 L9.14130952,33.521131 L9.18976191,33.3839286 L8.86791665,33.46125 L8.86791665,33.46125 Z M19.4280357,32.6814881 C19.4633017,32.7545588 19.4975904,32.8280971 19.5308929,32.9020833 C19.659881,33.1908929 19.7622024,33.7025 19.2197619,34.1791667 L19.2441071,34.1644048 C19.813631,33.8514881 20.1422619,33.5016072 20.2394643,33.1019643 C19.9854167,33.0741072 19.7174405,32.9361905 19.4280357,32.6814881 L19.4280357,32.6814881 Z M15.8682738,30.1896429 L16.0244643,30.4331548 L16.1575595,30.26125 C15.7708333,29.7120833 15.122381,28.7272619 14.1843452,27.2647024 L14.1000595,27.1333333 L14.2268452,26.8298214 L13.8015476,26.80375 L13.7875,26.9945238 L13.8098214,26.9802381 L15.8682738,30.1896429 L15.8682738,30.1896429 Z" id="形状" fill="#00BF8A"></path>
<path d="M17.8620833,23.9360119 L17.9013095,23.7967857 C18.4469047,23.7133928 18.9092857,23.6833333 19.2881548,23.7060714 C19.6666667,23.7298214 19.9172024,23.8357143 20.0379167,24.0239286 C20.1590476,24.2127976 20.1972023,24.4067262 20.1540476,24.6055357 C20.1102976,24.8048809 20.0581547,24.9238095 19.9976786,24.9625595 C19.876131,25.0405357 19.7073214,24.9776786 19.4913095,24.7739286 C19.1758333,24.4822619 18.6325,24.2030952 17.8620833,23.9360119 L17.8620833,23.9360119 Z M23.6352976,29.532619 C24.1456547,29.6617262 24.7254762,29.6802381 25.3727381,29.5878571 C26.0203571,29.496131 27.0089286,29.0519047 28.3395833,28.2554762 C29.6695238,27.4595238 31.1025,26.4549405 32.6369643,25.2425 L32.7406548,25.4042262 C32.2197024,25.9281547 32.0872619,26.3554167 32.3426786,26.686369 C30.916369,27.6011905 29.7385714,28.3182143 28.8096429,28.8382738 C27.8797024,29.3580953 27.0782738,29.7107738 26.4050595,29.8956548 C25.7307143,30.0803572 25.123869,30.1183333 24.5830357,30.0088095 C24.0115476,29.9189286 23.6542262,29.9296429 23.51125,30.0400595 C23.3680357,30.1515476 23.2371429,30.4636905 23.1170238,30.9775595 C22.997381,31.4920238 22.9475595,31.9322619 22.9691667,32.2990476 L21.9494643,32.21125 C22.1452977,31.5152381 22.527381,30.7763095 23.0956548,29.9927976 L20.9177976,26.5972619 L20.5992262,26.8015476 C20.2045833,27.0546428 19.8664286,27.328631 19.584881,27.6233929 L18.9419643,27.5222619 L20.7166667,26.3839881 L20.7304167,25.8046429 L21.7695833,25.8227381 L21.5870833,26.3392857 L23.6352976,29.532619 Z M28.7970833,26.165 C29.2994048,25.8810714 29.6719643,25.6608333 29.915119,25.504881 C30.1575595,25.3493453 30.2102976,25.1639286 30.0717857,24.9480357 L29.2680357,23.694881 L27.1292262,25.0666667 L28.2959524,26.8857738 L27.86,27.5076786 L26.5376786,25.4460714 L24.5354167,26.7302976 L25.779881,28.6705952 L25.2983929,29.3217262 C24.8615477,28.575 24.2464881,27.5815476 23.45125,26.3416667 C22.656369,25.1025 22.0444048,24.1827381 21.6167857,23.5816667 L22.6497024,23.4897024 L24.6064286,22.2347024 C24.2689881,21.8431548 23.6783333,21.6889286 22.833869,21.7741071 L22.8471429,21.5945238 C23.4144643,21.3447024 24.0276786,21.1992262 24.6858929,21.1567857 L25.42875,19.3110119 L22.379881,21.2665476 C21.9546429,21.5392857 21.6016667,21.8227381 21.32,22.1175 L20.6770833,22.0163095 L25.3186905,19.0392857 L25.4949405,18.4128571 L26.8066071,18.6555357 C26.3039286,18.9404762 25.6684523,19.7849405 24.900119,21.1905357 C24.9648214,21.2256547 25.032381,21.2964881 25.10125,21.403869 C25.1879167,21.5390476 25.1895833,21.7091071 25.1070833,21.913631 L27.1548214,20.6002381 L27.2140476,19.9917262 L28.1818452,19.998631 L28.0447619,20.4858333 L30.7930357,24.7707143 C31.1169643,25.2100595 31.0364286,25.7181548 30.5506548,26.2953571 C30.2782738,25.9379762 29.7280953,25.9485119 28.9008333,26.3266071 L28.7970833,26.165 L28.7970833,26.165 Z M22.66875,23.819881 L23.4464881,25.0325595 L25.44875,23.7483333 L24.6710119,22.5356548 L22.66875,23.819881 L22.66875,23.819881 Z M23.6020833,25.2750595 L24.379881,26.4877976 L26.3821429,25.2035714 L25.6043452,23.9908333 L23.6020833,25.2750595 L23.6020833,25.2750595 Z M25.2625595,22.15625 L26.0402976,23.3689286 L28.1791071,21.9971429 L27.4013095,20.7844643 L25.2625595,22.15625 Z M26.1958929,23.6114286 L26.9736905,24.8241667 L29.1125,23.452381 L28.3347024,22.2396429 L26.1958929,23.6114286 L26.1958929,23.6114286 Z" id="形状" fill="#00BF8A"></path>
<path d="M23.2864286,32.6251786 L21.5655357,32.4770238 L21.6629762,32.1307738 C21.8531547,31.454881 22.2139881,30.7335119 22.7365476,29.9843452 L20.8279167,27.0085714 L20.759881,27.0522024 C20.3871429,27.2913095 20.0641667,27.552619 19.8000595,27.8291071 L19.6924405,27.9417262 L18.1220238,27.6947024 L20.4228571,26.2189881 L20.4399405,25.5020238 L22.1878571,25.5324405 L21.9161905,26.30125 L23.8205357,29.2703571 C24.0623809,29.3219643 24.3235119,29.3481547 24.59875,29.3481548 L24.5988095,29.3481548 C24.7157143,29.3481548 24.8364881,29.3434524 24.9602976,29.3340476 C24.52625,28.5988095 23.934881,27.6472619 23.2006548,26.5025 C22.4181548,25.2825595 21.803631,24.3579762 21.3741667,23.7544048 L21.0732143,23.3314286 L22.5503571,23.1999405 L24.093869,22.21 C23.80375,22.0644048 23.388869,22.0174405 22.8635714,22.0704167 L22.5107738,22.1060119 L22.5549405,21.5079762 L22.5403571,21.5172619 C22.1372619,21.7758333 21.7989881,22.0469643 21.535,22.3233333 L21.427381,22.4359524 L19.8570238,22.1888095 L25.0625595,18.8500595 L25.2817857,18.0710119 L27.6639881,18.5117857 L26.9531548,18.9147024 C26.6552977,19.0835119 26.1252977,19.6077381 25.2724405,21.1320833 C25.2991667,21.1657738 25.3255357,21.2028572 25.3514881,21.2433929 C25.373631,21.2779167 25.3950595,21.3179762 25.4132738,21.3636905 L26.872381,20.4278571 L26.9439286,19.692381 L28.57375,19.7039881 L28.3672619,20.4379167 L31.0383929,24.602619 C31.271131,24.9228571 31.4341667,25.414881 31.0770833,26.0597024 C31.5413782,25.7173121 31.9998563,25.3671034 32.4523214,25.0092262 L32.7100595,24.8055952 L33.12,25.4449405 L32.9516071,25.6143452 C32.5553571,26.0127976 32.4297023,26.3124404 32.5782143,26.5048214 L32.7766071,26.7618452 L32.5032738,26.9371429 C31.0830357,27.8480953 29.8891667,28.5752381 28.9549405,29.0982738 C28.007381,29.6279167 27.1760119,29.9927977 26.48375,30.1829167 C25.7688095,30.3786905 25.1124405,30.4186905 24.5304762,30.3021429 C24.2940476,30.2651786 24.0967857,30.2464286 23.9442262,30.2464286 C23.7472619,30.2464286 23.6898214,30.2782738 23.6892262,30.2785714 C23.6885714,30.2794048 23.561131,30.3848214 23.4066667,31.0455952 C23.29375,31.53125 23.2464286,31.9472619 23.2660714,32.2819048 L23.2864286,32.6251786 Z M24.9466667,26.820119 L26.1411905,28.6825595 L25.7651786,29.191131 C26.3595833,29.0070238 27.1710119,28.6080953 28.1868452,28.000119 C28.8855357,27.5819643 29.6188095,27.101369 30.3803571,26.5628571 L30.3139881,26.4757738 C30.2671429,26.4142857 30.1791667,26.3325595 29.9571429,26.3325595 C29.7226786,26.3325595 29.4089286,26.4216667 29.0246429,26.5973214 L28.7898214,26.7046429 L28.3767262,26.0608333 L28.6507738,25.9059524 C29.1420833,25.6282738 29.5133929,25.4090476 29.7545833,25.2544048 C29.8333333,25.2038691 29.848631,25.1714286 29.85,25.1684524 C29.8494048,25.1683333 29.8469643,25.1485714 29.8214286,25.10875 L29.1783333,24.106131 L27.5404762,25.1565476 L28.6542857,26.8931548 L27.8490476,28.0418452 L26.4479167,25.8573214 L24.9466667,26.820119 L24.9466667,26.820119 Z M24.0132738,25.3649405 L24.4697024,26.0766071 L25.9708929,25.1136905 L25.5144048,24.4020238 L24.0132738,25.3649405 Z M23.0799405,23.9097024 L23.5363095,24.621369 L25.0375,23.6585119 L24.581131,22.9468452 L23.0799405,23.9097024 L23.0799405,23.9097024 Z M26.6070833,23.70125 L27.0635714,24.4129762 L28.7013095,23.3625595 L28.2448214,22.6508333 L26.6070833,23.70125 Z M25.67375,22.2460714 L26.1301786,22.9577381 L27.7679167,21.9073214 L27.3114881,21.1956548 L25.67375,22.2460714 Z M24.8044048,20.0650595 L23.0422619,21.1952976 C23.4942262,21.0298214 23.9754167,20.9224405 24.4785119,20.8748214 L24.8044048,20.0650595 L24.8044048,20.0650595 Z M19.8858333,25.2925009 C19.6984524,25.2925009 19.5025595,25.193631 19.2870238,24.9902976 C19.0060119,24.7305357 18.4930357,24.4697619 17.7645833,24.2172024 L17.4995238,24.1253571 L17.6667857,23.5315476 L17.8563095,23.502619 C18.4195833,23.4165476 18.9066667,23.385119 19.3058929,23.4089881 C19.7840477,23.4389881 20.1143453,23.5918452 20.2883929,23.8632738 C20.452619,24.1192857 20.5052381,24.3902381 20.4448214,24.6685714 C20.3801786,24.9630357 20.2945238,25.1256548 20.1583333,25.2129762 C20.0770096,25.2650763 19.9824147,25.292682 19.8858333,25.2925009 L19.8858333,25.2925009 Z" id="形状" fill="#00BF8A"></path>
<path d="M29.6220833,16.33625 L29.6353571,16.1566071 C30.3369643,16.048869 30.8735119,16.0185714 31.24625,16.0647024 C31.6183929,16.1113095 31.8617857,16.2404762 31.9765476,16.4521429 C32.0904762,16.6642857 32.1208333,16.8445238 32.0667262,16.9933333 C32.0119047,17.1425595 31.9546428,17.236369 31.8942857,17.275119 C31.7726786,17.3530952 31.5473809,17.2693452 31.2190476,17.0235119 C30.7905952,16.6904167 30.2582738,16.4613095 29.6220833,16.33625 L29.6220833,16.33625 Z M35.5250595,22.135 C36.0314881,22.1908333 36.5653571,22.1719643 37.126131,22.0779167 C37.6867262,21.9849405 38.3444643,21.7244047 39.0985119,21.2979167 C39.8525,20.8713095 40.5175,20.4733333 41.0941071,20.1035119 C41.518631,19.8313095 41.9879167,19.5115476 42.5016071,19.14375 C43.015,18.7769643 43.6190476,18.3325 44.3123214,17.8111905 L44.4160119,17.9729167 C43.877619,18.4697023 43.7132738,18.88 43.9207143,19.2033929 C42.5380953,20.0518453 41.386131,20.7434524 40.4657738,21.2767857 C39.5446429,21.8104762 38.7785119,22.1682143 38.1682143,22.3510119 C37.5568453,22.533631 36.9751786,22.59375 36.4207738,22.5304167 C35.8667262,22.4676786 35.5213095,22.4798214 35.3847619,22.567381 C35.2482738,22.6549405 35.1230357,22.9447024 35.010119,23.4352381 C34.8969047,23.9268452 34.8394047,24.4379762 34.8391667,24.9711905 L33.8391667,24.813869 C34.1870299,24.0563693 34.5366142,23.299661 34.8879167,22.54375 L32.7619048,19.2289881 L32.3978571,19.4625 C32.0032143,19.7155952 31.6650595,19.9895238 31.3834524,20.2842262 L30.7405952,20.1831548 L32.4698214,19.0740476 L32.6851786,18.3083333 L33.6852381,18.4656548 L33.5026786,18.9820833 L35.5250595,22.135 L35.5250595,22.135 Z M37.3416667,13.952381 C36.5813095,12.7669048 36.0556547,11.9817262 35.7664881,11.5966071 L37.0982738,11.37 L36.9416667,11.9268452 L37.97875,13.54375 L38.9798214,12.9016667 L39.2343452,11.9967262 L40.5460714,12.2394048 L38.1342262,13.7863095 L40.9343452,18.1520238 C41.1247023,18.448869 41.2031547,18.7213095 41.1703571,18.9705357 C41.1375,19.2197619 41.00375,19.4963095 40.7697619,19.7979762 C40.3114881,19.4839881 39.596369,19.505 38.62625,19.8605952 L38.5225595,19.698869 C39.3935714,19.2543452 39.9200595,18.9736905 40.1020238,18.8569643 C40.2840477,18.7401786 40.3061905,18.5744643 40.1676786,18.3584524 L37.4972024,14.194881 L34.3573214,16.20875 C34.1141667,16.3647619 33.8521429,16.5898214 33.5704762,16.8845833 L32.9275595,16.7834524 L37.3416667,13.952381 Z M34.4795833,17.1003571 L34.4927976,16.9206548 C35.3720833,16.8897024 36.0223214,16.9193453 36.4444643,17.0095833 C36.8663691,17.1009524 37.1305357,17.2452977 37.236369,17.4431548 C37.3417857,17.6419643 37.3721429,17.8223214 37.3265476,17.9842857 C37.2807143,18.1475 37.2275,18.247619 37.1670238,18.286369 C37.0454167,18.3643452 36.8116072,18.267381 36.4659524,17.9942857 C35.9727976,17.6259523 35.3104762,17.3286905 34.4795833,17.1003571 Z" id="形状" fill="#00BF8A"></path>
<path d="M35.1366667,25.3191071 L33.4047024,25.0466071 L33.56875,24.6894643 C33.8940824,23.981146 34.2208887,23.2735056 34.5491667,22.5665476 L32.6721429,19.6400595 L32.558631,19.7128571 C32.1857738,19.9519643 31.8628571,20.2133333 31.5986905,20.4897024 L31.491131,20.6022619 L29.9207143,20.3553571 L32.2139881,18.8844048 L32.4703571,17.9730357 L34.0852381,18.2270833 L33.8318452,18.94375 L35.6974405,21.8524405 C36.1357143,21.8877381 36.597619,21.8647024 37.0769643,21.7842857 C37.6000595,21.6975 38.2307738,21.4467262 38.9520238,21.03875 C39.56375,20.6926786 40.1219048,20.3622024 40.6163095,20.0535119 L40.6016071,20.0434524 C40.2320833,19.7902381 39.5891071,19.8245833 38.72875,20.14 L38.5046429,20.2221429 L38.0947619,19.5830357 L38.3873214,19.43375 C39.4560714,18.8883333 39.8223214,18.6827976 39.941369,18.6064286 C39.946474,18.6031964 39.9514202,18.5997202 39.9561905,18.5960119 C39.9516071,18.5816667 39.941131,18.5564881 39.9171429,18.5191071 L37.407381,14.6060714 L34.5179762,16.4592262 C34.4362013,16.5121817 34.3571708,16.5692593 34.2811905,16.6302381 L34.4822619,16.6231548 C34.7092262,16.6151786 34.9243453,16.611131 35.1215476,16.611131 C35.7155952,16.611131 36.1686905,16.64625 36.5066071,16.7184524 C37.0241071,16.8305357 37.3484523,17.0216072 37.49875,17.3026786 C37.6414286,17.5717262 37.6797024,17.8278571 37.6129167,18.064881 C37.5454762,18.3051786 37.4548214,18.4552381 37.327619,18.5367857 C37.2519643,18.5852976 37.1649405,18.6099405 37.0689881,18.6099405 C36.8595238,18.6099405 36.6175595,18.4928571 36.2845833,18.2302976 C35.8255357,17.8883333 35.1917262,17.6046428 34.4006548,17.3872619 L34.1648214,17.3224405 L34.2114286,16.6872619 C34.0758333,16.8008333 33.9334524,16.9354762 33.7856548,17.0902381 L33.6780357,17.2027976 L32.3742262,16.9976786 C32.3672634,17.0307589 32.3579541,17.0633015 32.346369,17.0950595 C32.2664286,17.3126786 32.1739881,17.4491667 32.0549405,17.5255357 C31.9769048,17.5755952 31.8872024,17.6008928 31.7882143,17.6008929 C31.5871429,17.6008929 31.3495833,17.4930953 31.0405357,17.2617262 C30.6469643,16.9557143 30.1517857,16.743631 29.5645833,16.6282143 L29.3057738,16.5773214 L29.3558929,15.8983333 L29.590119,15.862381 C30.0923214,15.7852381 30.5211905,15.746131 30.8647619,15.746131 C31.0182143,15.746131 31.1588095,15.7539286 31.2827381,15.7692857 C31.7542857,15.8283333 32.0755357,16.0103571 32.2380952,16.3102381 C32.32625,16.4744047 32.3761309,16.6300595 32.3877381,16.7760119 L36.9301786,13.8625595 C36.2664286,12.8322024 35.7952976,12.1305952 35.5283929,11.7751786 L35.2354762,11.3849405 L37.5120833,10.9975595 L37.2642857,11.878631 L38.0685714,13.1324405 L38.7239286,12.7120833 L39.0214286,11.6545833 L41.3401786,12.0835714 L38.5454762,13.8760714 L41.1849405,17.99125 C41.4131548,18.3471429 41.5075595,18.6895833 41.4654762,19.0092857 C41.4380952,19.2173809 41.3558928,19.4372023 41.2203571,19.6660714 C41.5646428,19.43875 41.9360119,19.1825595 42.3283929,18.9016071 C42.8390477,18.5368452 43.44625,18.0899405 44.1335119,17.5732143 L44.3898214,17.3804762 L44.801369,18.0222619 L44.6179167,18.1915476 C44.3850595,18.406369 44.017381,18.8026786 44.1713095,19.042619 L44.3351786,19.2981548 L44.0764286,19.4569643 C42.6896429,20.3079762 41.525119,21.0068453 40.6150595,21.5341667 C39.6798214,22.0760714 38.8852976,22.4467857 38.2536905,22.6359524 C37.6052976,22.8295833 36.977619,22.8933333 36.3870833,22.8259524 C36.167619,22.801131 35.9817857,22.7885119 35.8350595,22.7885119 C35.6397024,22.7885119 35.5652976,22.8108333 35.5466071,22.8179167 C35.5258333,22.839881 35.422381,22.971131 35.3002381,23.5018452 C35.1920238,23.9715476 35.1370833,24.4658928 35.1368452,24.9711905 L35.1366667,25.3191071 L35.1366667,25.3191071 Z" id="形状" fill="#00BF8A"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunkcompany_app"] = self["webpackChunkcompany_app"] || []).push([["src_views_login_vue"],{
/***/ "./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=script&lang=js":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=script&lang=js ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _wecom_jssdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wecom/jssdk */ \"./node_modules/.pnpm/@wecom+jssdk@2.3.1/node_modules/@wecom/jssdk/dist/wecom.js\");\n/* harmony import */ var _api_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/user */ \"./src/api/user.js\");\n/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! js-cookie */ \"./node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.mjs\");\n/* harmony import */ var _utils_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/utils/index */ \"./src/utils/index.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ \"./node_modules/.pnpm/vuex@3.6.2_vue@2.7.16/node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/auth */ \"./src/utils/auth.js\");\n/* harmony import */ var _utils_jsApiList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/jsApiList */ \"./src/utils/jsApiList.js\");\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n data() {\n return {\n wecomUserInfo: null,\n // 企微用户信息\n dingUserInfo: null,\n // 钉钉用户信息\n signData: null,\n // 企微签名数据\n orgList: [],\n urlParams: {},\n currentOrg: {},\n showOrgDialog: false,\n hoveredOrg: null,\n showRefresh: false,\n // 控制刷新按钮显示\n qrLoading: false,\n // 控制二维码 loading\n redirectUri: false ? 0 : 'https://companywx.zwwlkj03.top/api/api/sidebar_login/ding',\n DDTestUrl: '',\n token: (0,_utils_auth__WEBPACK_IMPORTED_MODULE_4__.getToken)()\n };\n },\n async mounted() {\n this.$nextTick(() => {\n this.initLogin();\n });\n },\n computed: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapState)('user', ['corp_id'])\n },\n methods: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapMutations)('user', ['set_corp_id', 'set_userid', 'set_userInfo', 'set_token', 'set_cser_info', 'set_signData', 'set_cser_id', 'set_cser_name', 'set_external_userid']),\n async initLogin() {\n await this.initOrganization();\n const urlParams = (0,_utils_index__WEBPACK_IMPORTED_MODULE_3__.getParams)();\n const userid = js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('userid');\n // 如果是钉钉扫码回调页面\n if (urlParams.type && urlParams.type === 'ding') {\n // 钉钉回调\n console.log(1);\n this.handleDingCallback();\n } else if (this.token) {\n // 已经钉钉扫码过 重新获取授权 获取签名 注册企微js-sdk\n console.log(2);\n await this.getSignature();\n } else {\n console.log(3);\n if (!userid) {\n //没有企微授权过 并且 钉钉扫码成功 开始微信授权\n console.log(4);\n await this.startWeComSilentAuth();\n } else {\n console.log(5);\n this.initDingTalkLogin(); // 始化钉钉扫码\n }\n }\n // 每次进入页面都缓存corp_id\n if (urlParams.corp_id) {\n this.cacheCorp_id(urlParams.corp_id); // 缓存 corp_id\n }\n },\n // 设置缓存\n cacheCorp_id(corp_id) {\n js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set('corp_id', corp_id, {\n expires: 7\n });\n this.set_corp_id(corp_id);\n },\n cacheuserid(userid) {\n js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set('userid', userid, {\n expires: 7\n });\n this.set_userid(userid);\n },\n cacheWx_userinfo(userinfo) {\n js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set('wx_userinfo', JSON.stringify(userinfo), {\n expires: 7\n });\n this.set_userInfo(userinfo);\n },\n cacheCser(cser_id, cser_name) {\n js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set('cser_id', cser_id, {\n expires: 7\n });\n js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set('cser_name', cser_name, {\n expires: 7\n });\n this.set_cser_info({\n cser_id: cser_id,\n cser_name: cser_name\n });\n this.set_cser_id(cser_id);\n this.set_cser_name(cser_name);\n },\n cacheSignData(signData) {\n js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set('signData', JSON.stringify(signData), {\n expires: 7\n });\n this.set_signData(signData);\n },\n // 进入的页面地址是 https://companywx.jianshuwenhua.com/company_app/index.html?corp_id=wweaefe716636df3d1\n // 1. 企微静默授权\n async startWeComSilentAuth() {\n this.urlParams = (0,_utils_index__WEBPACK_IMPORTED_MODULE_3__.getParams)();\n const corp_id = js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('corp_id');\n // 确定是第一次进入页面 没有 code 和 state\n if (!this.urlParams.code && !this.urlParams.state) {\n // 跳转企微静默授权\n const redirectUri = encodeURIComponent(window.location.href);\n const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${corp_id}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;\n window.location.href = authUrl;\n return;\n }\n // 用code\n const res = await (0,_api_user__WEBPACK_IMPORTED_MODULE_1__.getAuthUser)({\n code: this.urlParams.code,\n url: window.location.href,\n corp_id: corp_id\n });\n if (res.status_code === 1) {\n // this.cacheWx_userinfo(res.data)\n this.cacheuserid(res.data.userid);\n this.initDingTalkLogin(); // 初始化钉钉扫码\n } else {\n console.log('获取useid失败', res);\n // 错误处理\n }\n },\n async getSignature() {\n console.log('获取签名', window.location.href);\n const corp_id = js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('corp_id');\n try {\n const res = await (0,_api_user__WEBPACK_IMPORTED_MODULE_1__.getSignature)({\n corp_id: corp_id,\n path: window.location.href\n });\n if (res.status_code === 1) {\n this.signData = res.data;\n this.cacheSignData(res.data);\n try {\n this.registerWeComSDK();\n } catch (err) {\n console.log(err, '初始化sdk 失败');\n }\n }\n } catch (err) {\n console.log(err, '获取签名失败');\n window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=signerror';\n }\n },\n getCurExternalContact() {\n _wecom_jssdk__WEBPACK_IMPORTED_MODULE_0__.getCurExternalContact({\n success: res => {\n if (res.err_msg === \"getCurExternalContact:ok\") {\n console.log(res, '重新进入获取企微外部联系人');\n this.set_external_userid(res.userId);\n // 确保 Vuex 状态更新后再跳转\n this.$nextTick(() => {\n this.$router.replace('/');\n console.log(window.location.href, 'window.location.hrefuserInfo');\n });\n }\n },\n fail: err => {\n console.log(err, '获取企微外部联系人失败');\n // 错误处理\n }\n });\n },\n // 2. 注册企微JS-SDK\n registerWeComSDK() {\n console.log('删除企业签名', 1231);\n _wecom_jssdk__WEBPACK_IMPORTED_MODULE_0__.register({\n corpId: js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('corp_id'),\n agentId: this.signData.agent_id,\n jsApiList: _utils_jsApiList__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n // getConfigSignature: () => Promise.resolve({\n // nonceStr: this.signData.nonce_str,\n // timestamp: this.signData.signature_time,\n // signature: this.signData.corp_signature,\n // }),\n // 只用到应用的 api 可以只进行应用的签名\n getAgentConfigSignature: () => Promise.resolve({\n nonceStr: this.signData.nonce_str,\n timestamp: this.signData.signature_time,\n signature: this.signData.agent_signature\n }),\n onAgentConfigSuccess: res => {\n console.log('注册成功可以调用企微 js-sdk', res);\n // 注册成功后不立即获取外部联系人,等钉钉扫码后再获取\n this.getCurExternalContact();\n },\n onAgentConfigFail: err => {\n console.log('注册失败不能使用企微js-sdk', err);\n // 错误处理123\n }\n });\n },\n // 3. 获取组织列表并选取默认组织\n async initOrganization() {\n const res = await (0,_api_user__WEBPACK_IMPORTED_MODULE_1__.getOrganization)();\n if (res.data.status_code === 1) {\n this.orgList = res.data.data.data;\n // 默认组织逻辑:可根据业务自定义\n this.initCurrentApp();\n }\n },\n initCurrentApp() {\n const currentApp = this.orgList.find(item => item.app_key === \"dingjigp0ksn9nbljdli\");\n this.$set(this, \"currentOrg\", currentApp);\n },\n // 4. 初始化钉钉扫码\n initDingTalkLogin() {\n this.qrLoading = true;\n console.log('进入初始化钉钉', this.currentOrg);\n if (!this.currentOrg.app_key) return;\n const appid = this.currentOrg.app_key;\n // 清空二维码容器,防止切换组织后二维码不刷新\n const container = document.getElementById('dingTalkLoginContainer');\n if (container) container.innerHTML = '';\n DDLogin({\n id: 'dingTalkLoginContainer',\n goto: encodeURIComponent(`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${this.redirectUri}`),\n style: 'border:none;background-color:#FFFFFF;margin:0',\n width: '210',\n height: '250'\n });\n // 二维码生成后,短暂延迟后隐藏 loading(二维码生成是同步的,但页面渲染有延迟)\n this.$nextTick(() => {\n setTimeout(() => {\n this.qrLoading = false;\n }, 1000); // 500ms 平滑过渡\n });\n window.addEventListener('message', this.handleDingTalkLogin, false);\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener('message', this.handleDingTalkLogin, false);\n } else if (typeof window.attachEvent !== 'undefined') {\n window.attachEvent('onmessage', this.handleDingTalkLogin);\n }\n },\n // https://companywx.jianshuwenhua.com/company_app/login?code=success&cser_id=4090&cser_name=%E6%AF%9B%E7%BB%86%E4%BA%9A&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOjQwOTAsImRhdGEiOnsiY3Nlcl9pZCI6NDA5MCwiY3Nlcl9uYW1lIjoi5q-b57uG5LqaIn0sImlhdCI6MTc0Nzk5MDM0MiwiZXhwIjoxNzUwNTgyMzQyLCJuYmYiOjE3NDc5OTAzNDIsInN1YiI6InRva2Vu6K6k6K-BIiwianRpIjoiYzYzYTM4NGYzMTFmODVlMGQ2Nzg2ZmJiMTdhNjQzN2EifQ.5ADPtqISjxOqbrDOzlKkCpfTr78Sv0Sdi-_Y1RRiMH0&type=ding\n\n // 5. 切换组织\n switchOrg(org) {\n if (org.app_key === this.currentOrg.app_key) return; // 已是当前组织不处理\n this.currentOrg = org;\n this.showOrgDialog = false;\n this.initDingTalkLogin();\n },\n // 6. 钉钉扫码回调\n async handleDingTalkLogin(event) {\n console.log('收到扫码回调');\n const corp_id = js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('corp_id');\n const userid = js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('userid');\n if (event.origin !== 'https://login.dingtalk.com') return;\n const loginTmpCode = event.data;\n // 跳转到后端,后端用loginTmpCode换取钉钉用户信息\n const appid = this.currentOrg.app_key;\n const state = encodeURIComponent(`${this.currentOrg.app_key}$${this.currentOrg.template_code}$${corp_id}$${userid}`);\n const url = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=${state}&redirect_uri=${this.redirectUri}&loginTmpCode=${loginTmpCode}`;\n console.log(url, '回调 url');\n this.DDTestUrl = url;\n window.location.href = url;\n },\n // 7. 钉钉扫码回调页面处理\n async handleDingCallback() {\n // 在这里处理钉钉扫码成功的回调\n console.log('扫码成功');\n const ddParams = (0,_utils_index__WEBPACK_IMPORTED_MODULE_3__.getParams)();\n const corp_id = js_cookie__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get('corp_id');\n if (ddParams.code == 'error' && ddParams.msg) {\n this.$message.error(ddParams.msg);\n return;\n }\n if (ddParams.token && ddParams.token != 'undefined') {\n (0,_utils_auth__WEBPACK_IMPORTED_MODULE_4__.setToken)(ddParams.token);\n this.set_token(ddParams.token);\n // 获取签名\n await this.getSignature();\n } else {\n console.log('没有token');\n window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=notoken';\n }\n if (ddParams.cser_id) {\n this.cacheCser(ddParams.cser_id, ddParams.cser_name);\n }\n },\n refreshDingTalkQRCode() {\n this.initDingTalkLogin();\n }\n }\n});\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
/***/ "./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true ***!
\*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; },\n/* harmony export */ staticRenderFns: function() { return /* binding */ staticRenderFns; }\n/* harmony export */ });\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"loginContent\"\n }, [!_vm.token ? _c(\"div\", [_c(\"div\", [_vm._v(\" 当前组织:\"), _c(\"span\", {\n staticClass: \"current-org\"\n }, [_vm._v(_vm._s(_vm.currentOrg.name))]), _c(\"el-button\", {\n attrs: {\n type: \"text\"\n },\n on: {\n click: function ($event) {\n _vm.showOrgDialog = true;\n }\n }\n }, [_vm._v(\"切换组织\")])], 1), _c(\"div\", {\n staticClass: \"qr-contain\"\n }, [_c(\"div\", {\n attrs: {\n id: \"dingTalkLoginContainer\"\n }\n }), _c(\"div\", {\n staticClass: \"refresh\"\n }, [_c(\"i\", {\n staticClass: \"el-icon-refresh-right\",\n on: {\n click: _vm.refreshDingTalkQRCode\n }\n })]), _vm.qrLoading ? _c(\"div\", {\n staticClass: \"loading\"\n }, [_c(\"span\", {\n staticClass: \"loading-spinner\"\n })]) : _vm._e()]), _c(\"el-dialog\", {\n attrs: {\n visible: _vm.showOrgDialog,\n width: \"300px\",\n title: \"选择组织\"\n },\n on: {\n \"update:visible\": function ($event) {\n _vm.showOrgDialog = $event;\n }\n }\n }, [_c(\"ul\", {\n staticStyle: {\n \"list-style\": \"none\",\n padding: \"0\",\n \"margin-top\": \"-20px\"\n }\n }, _vm._l(_vm.orgList, function (org) {\n return _c(\"li\", {\n key: org.app_key,\n style: {\n padding: \"8px 16px\",\n cursor: \"pointer\",\n background: org.app_key === _vm.currentOrg.app_key ? \"#e6f7ff\" : \"\",\n color: org.app_key === _vm.currentOrg.app_key ? \"#1890ff\" : \"\",\n fontWeight: org.app_key === _vm.currentOrg.app_key ? \"bold\" : \"normal\",\n borderRadius: \"4px\",\n marginBottom: \"4px\",\n transition: \"background 0.2s\"\n },\n on: {\n click: function ($event) {\n return _vm.switchOrg(org);\n },\n mouseover: function ($event) {\n _vm.hoveredOrg = org.app_key;\n },\n mouseleave: function ($event) {\n _vm.hoveredOrg = null;\n }\n }\n }, [_vm._v(\" \" + _vm._s(org.name) + \" \"), org.app_key === _vm.currentOrg.app_key ? _c(\"span\", {\n staticStyle: {\n \"margin-left\": \"8px\"\n }\n }, [_vm._v(\"(当前)\")]) : _vm._e()]);\n }), 0)])], 1) : _vm._e()]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
/***/ "./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true":
/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true ***!
\***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"[data-v-7589b93f]:export {\\n menuText: #606266;\\n menuActiveText: #00BF8A;\\n subMenuActiveText: #00BF8A;\\n menuBg: #ffffff;\\n menuHover: #E1FFF0;\\n subMenuBg: #ffffff;\\n themeColor: #00BF8A;\\n sidebarWidthOpen: 190px;\\n sidebarWidthClosed: 56px;\\n navbarHeight: 50px;\\n subMenuHover: #E1FFF0;\\n sideBarWidth: 190px;\\n}\\n.current-org[data-v-7589b93f] {\\n font-weight: bold;\\n margin-right: 5px;\\n}\\n.loginContent[data-v-7589b93f] {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n}\\n.qr-contain[data-v-7589b93f] {\\n margin: 0 auto;\\n /* margin-top: 20px; */\\n width: 260px;\\n height: 260px;\\n position: relative;\\n overflow: hidden;\\n}\\n.qr-contain #dingTalkLoginContainer[data-v-7589b93f] {\\n padding: 15px;\\n position: absolute;\\n left: 10px;\\n bottom: 0;\\n}\\n.qr-contain .refresh[data-v-7589b93f] {\\n display: none;\\n text-align: center;\\n position: absolute;\\n width: 40px;\\n background: #fff;\\n height: 40px;\\n transform: translate(-50%, -50%);\\n left: 50%;\\n top: 50%;\\n}\\n.qr-contain .refresh i[data-v-7589b93f] {\\n line-height: 40px;\\n font-size: 26px;\\n color: #00BF8A;\\n cursor: pointer;\\n}\\n.qr-contain:hover .refresh[data-v-7589b93f] {\\n display: block;\\n}\\n.loading[data-v-7589b93f] {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 100%;\\n height: 100%;\\n background: rgba(255, 255, 255, 0.7);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 20;\\n transition: opacity 0.3s;\\n}\\n.loading-spinner[data-v-7589b93f] {\\n width: 40px;\\n height: 40px;\\n border: 4px solid #e0e0e0;\\n border-top: 4px solid #00BF8A;\\n border-radius: 50%;\\n animation: spin-7589b93f 1s linear infinite;\\n}\\n@keyframes spin-7589b93f {\\n0% {\\n transform: rotate(0deg);\\n}\\n100% {\\n transform: rotate(360deg);\\n}\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
/***/ "./node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true":
/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true ***!
\***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !!../../node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true */ \"./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(/*! !../../node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/lib/addStylesClient.js */ \"./node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/lib/addStylesClient.js\")[\"default\"])\nvar update = add(\"41267b0a\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(false) {}\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?./node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/index.js??clonedRuleSet-22.use%5B0%5D!./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
/***/ "./src/utils/jsApiList.js":
/*!********************************!*\
!*** ./src/utils/jsApiList.js ***!
\********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nconst jsApiList = ['getCurExternalContact'];\n/* harmony default export */ __webpack_exports__[\"default\"] = (jsApiList);\n\n//# sourceURL=webpack://company_app/./src/utils/jsApiList.js?");
/***/ }),
/***/ "./src/views/login.vue":
/*!*****************************!*\
!*** ./src/views/login.vue ***!
\*****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _login_vue_vue_type_template_id_7589b93f_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./login.vue?vue&type=template&id=7589b93f&scoped=true */ \"./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true\");\n/* harmony import */ var _login_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./login.vue?vue&type=script&lang=js */ \"./src/views/login.vue?vue&type=script&lang=js\");\n/* harmony import */ var _login_vue_vue_type_style_index_0_id_7589b93f_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true */ \"./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true\");\n/* harmony import */ var _node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _login_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _login_vue_vue_type_template_id_7589b93f_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,\n _login_vue_vue_type_template_id_7589b93f_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"7589b93f\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/views/login.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?");
/***/ }),
/***/ "./src/views/login.vue?vue&type=script&lang=js":
/*!*****************************************************!*\
!*** ./src/views/login.vue?vue&type=script&lang=js ***!
\*****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=js */ \"./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=script&lang=js\");\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n//# sourceURL=webpack://company_app/./src/views/login.vue?");
/***/ }),
/***/ "./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true":
/*!**************************************************************************************!*\
!*** ./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true ***!
\**************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_pnpm_vue_style_loader_4_1_3_node_modules_vue_style_loader_index_js_clonedRuleSet_22_use_0_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_pnpm_postcss_loader_6_2_1_postcss_8_5_3_webpack_5_99_8_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_pnpm_sass_loader_16_0_5_node_sass_4_14_1_sass_1_89_0_webpack_5_99_8_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_7589b93f_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!../../node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true */ \"./node_modules/.pnpm/vue-style-loader@4.1.3/node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/.pnpm/css-loader@6.11.0_webpack@5.99.8/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.5.3_webpack@5.99.8/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/.pnpm/sass-loader@16.0.5_node-sass@4.14.1_sass@1.89.0_webpack@5.99.8/node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=style&index=0&id=7589b93f&lang=scss&scoped=true\");\n/* harmony import */ var _node_modules_pnpm_vue_style_loader_4_1_3_node_modules_vue_style_loader_index_js_clonedRuleSet_22_use_0_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_pnpm_postcss_loader_6_2_1_postcss_8_5_3_webpack_5_99_8_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_pnpm_sass_loader_16_0_5_node_sass_4_14_1_sass_1_89_0_webpack_5_99_8_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_7589b93f_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_pnpm_vue_style_loader_4_1_3_node_modules_vue_style_loader_index_js_clonedRuleSet_22_use_0_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_pnpm_postcss_loader_6_2_1_postcss_8_5_3_webpack_5_99_8_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_pnpm_sass_loader_16_0_5_node_sass_4_14_1_sass_1_89_0_webpack_5_99_8_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_7589b93f_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_pnpm_vue_style_loader_4_1_3_node_modules_vue_style_loader_index_js_clonedRuleSet_22_use_0_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_pnpm_postcss_loader_6_2_1_postcss_8_5_3_webpack_5_99_8_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_pnpm_sass_loader_16_0_5_node_sass_4_14_1_sass_1_89_0_webpack_5_99_8_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_7589b93f_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _node_modules_pnpm_vue_style_loader_4_1_3_node_modules_vue_style_loader_index_js_clonedRuleSet_22_use_0_node_modules_pnpm_css_loader_6_11_0_webpack_5_99_8_node_modules_css_loader_dist_cjs_js_clonedRuleSet_22_use_1_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_pnpm_postcss_loader_6_2_1_postcss_8_5_3_webpack_5_99_8_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_22_use_2_node_modules_pnpm_sass_loader_16_0_5_node_sass_4_14_1_sass_1_89_0_webpack_5_99_8_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_22_use_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_7589b93f_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?");
/***/ }),
/***/ "./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true":
/*!***********************************************************************!*\
!*** ./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true ***!
\***********************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_template_id_7589b93f_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; },\n/* harmony export */ staticRenderFns: function() { return /* reexport safe */ _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_template_id_7589b93f_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_template_id_7589b93f_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=template&id=7589b93f&scoped=true */ \"./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/login.vue?vue&type=template&id=7589b93f&scoped=true\");\n\n\n//# sourceURL=webpack://company_app/./src/views/login.vue?");
/***/ })
}]);
\ No newline at end of file
"use strict";
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunkcompany_app"] = self["webpackChunkcompany_app"] || []).push([["src_views_testWx_vue"],{
/***/ "./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/testWx.vue?vue&type=script&lang=js":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/testWx.vue?vue&type=script&lang=js ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _wecom_jssdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wecom/jssdk */ \"./node_modules/.pnpm/@wecom+jssdk@2.3.1/node_modules/@wecom/jssdk/dist/wecom.js\");\n/* harmony import */ var _api_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/user */ \"./src/api/user.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'testWx',\n data() {\n return {\n signData: {}\n };\n },\n mounted() {\n this.getSignature();\n console.log(window.location.href, 'window.location.href');\n },\n methods: {\n async getSignature() {\n console.log('获取签名', window.location.href);\n const res = await (0,_api_user__WEBPACK_IMPORTED_MODULE_1__.getSignature)({\n corp_id: 'wweaefe716636df3d1',\n path: window.location.href\n });\n if (res.status_code === 1) {\n this.signData = res.data;\n try {\n this.registerWeComSDK();\n } catch (err) {\n console.log(err, '初始化sdk 失败');\n }\n }\n },\n registerWeComSDK() {\n _wecom_jssdk__WEBPACK_IMPORTED_MODULE_0__.register({\n corpId: 'wweaefe716636df3d1',\n agentId: this.signData.agent_id,\n jsApiList: ['getExternalUserInfo'],\n getConfigSignature: () => Promise.resolve({\n nonceStr: this.signData.nonce_str,\n timestamp: this.signData.signature_time,\n signature: this.signData.corp_signature\n }),\n // 只用到应用的 api 可以只进行应用的签名\n getAgentConfigSignature: () => Promise.resolve({\n nonceStr: this.signData.nonce_str,\n timestamp: this.signData.signature_time,\n signature: this.signData.agent_signature\n }),\n onAgentConfigSuccess: res => {\n console.log('注册成功可以调用企微 js-sdk', res);\n this.getCurExternalContact();\n // 注册成功后不立即获取外部联系人,等钉钉扫码后再获取\n },\n onAgentConfigFail: err => {\n console.log('注册失败不能使用企微js-sdk', err);\n // 错误处理\n }\n });\n },\n getCurExternalContact() {\n _wecom_jssdk__WEBPACK_IMPORTED_MODULE_0__.getCurExternalContact({\n success: res => {\n if (res.err_msg === \"getCurExternalContact:ok\") {\n console.log(res, '获取企微外部联系人');\n }\n },\n fail: err => {\n console.log(err, '获取企微外部联系人失败');\n // 错误处理\n }\n });\n }\n }\n});\n\n//# sourceURL=webpack://company_app/./src/views/testWx.vue?./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
/***/ "./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/testWx.vue?vue&type=template&id=1471e82d":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/testWx.vue?vue&type=template&id=1471e82d ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; },\n/* harmony export */ staticRenderFns: function() { return /* binding */ staticRenderFns; }\n/* harmony export */ });\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"h1\", [_vm._v(\"1231312312312312321\")]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://company_app/./src/views/testWx.vue?./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
/***/ "./src/views/testWx.vue":
/*!******************************!*\
!*** ./src/views/testWx.vue ***!
\******************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _testWx_vue_vue_type_template_id_1471e82d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./testWx.vue?vue&type=template&id=1471e82d */ \"./src/views/testWx.vue?vue&type=template&id=1471e82d\");\n/* harmony import */ var _testWx_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./testWx.vue?vue&type=script&lang=js */ \"./src/views/testWx.vue?vue&type=script&lang=js\");\n/* harmony import */ var _node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _testWx_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _testWx_vue_vue_type_template_id_1471e82d__WEBPACK_IMPORTED_MODULE_0__.render,\n _testWx_vue_vue_type_template_id_1471e82d__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/views/testWx.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n//# sourceURL=webpack://company_app/./src/views/testWx.vue?");
/***/ }),
/***/ "./src/views/testWx.vue?vue&type=script&lang=js":
/*!******************************************************!*\
!*** ./src/views/testWx.vue?vue&type=script&lang=js ***!
\******************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_testWx_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./testWx.vue?vue&type=script&lang=js */ \"./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/testWx.vue?vue&type=script&lang=js\");\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_testWx_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n//# sourceURL=webpack://company_app/./src/views/testWx.vue?");
/***/ }),
/***/ "./src/views/testWx.vue?vue&type=template&id=1471e82d":
/*!************************************************************!*\
!*** ./src/views/testWx.vue?vue&type=template&id=1471e82d ***!
\************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_testWx_vue_vue_type_template_id_1471e82d__WEBPACK_IMPORTED_MODULE_0__.render; },\n/* harmony export */ staticRenderFns: function() { return /* reexport safe */ _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_testWx_vue_vue_type_template_id_1471e82d__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_pnpm_babel_loader_8_4_1_babel_core_7_27_1_webpack_5_99_8_node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_pnpm_vue_loader_15_11_1_vue_compiler_sfc_3_5_14_css_loader_6_11_0_webpack_5_99_8_lodash_4_898f46ed7f437ee9a834018c670400fe_node_modules_vue_loader_lib_index_js_vue_loader_options_testWx_vue_vue_type_template_id_1471e82d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./testWx.vue?vue&type=template&id=1471e82d */ \"./node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/testWx.vue?vue&type=template&id=1471e82d\");\n\n\n//# sourceURL=webpack://company_app/./src/views/testWx.vue?");
/***/ })
}]);
\ No newline at end of file
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
"vconsole": "^3.15.1", "vconsole": "^3.15.1",
"vue": "^2.6.14", "vue": "^2.6.14",
"vue-router": "^3.5.1", "vue-router": "^3.5.1",
"autoprefixer": "^10.4.0",
"tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.17",
"vuex": "^3.6.2" "vuex": "^3.6.2"
}, },
"devDependencies": { "devDependencies": {
......
...@@ -14,6 +14,9 @@ importers: ...@@ -14,6 +14,9 @@ importers:
'@wecom/jssdk': '@wecom/jssdk':
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.3.1 version: 2.3.1
autoprefixer:
specifier: ^10.4.0
version: 10.4.21(postcss@7.0.39)
axios: axios:
specifier: ^1.9.0 specifier: ^1.9.0
version: 1.9.0 version: 1.9.0
...@@ -68,6 +71,9 @@ importers: ...@@ -68,6 +71,9 @@ importers:
sass-loader: sass-loader:
specifier: ^16.0.5 specifier: ^16.0.5
version: 16.0.5(node-sass@4.14.1)(sass@1.89.0)(webpack@5.99.8) version: 16.0.5(node-sass@4.14.1)(sass@1.89.0)(webpack@5.99.8)
tailwindcss:
specifier: npm:@tailwindcss/postcss7-compat@^2.2.17
version: '@tailwindcss/postcss7-compat@2.2.17'
vconsole: vconsole:
specifier: ^3.15.1 specifier: ^3.15.1
version: 3.15.1 version: 3.15.1
...@@ -840,6 +846,11 @@ packages: ...@@ -840,6 +846,11 @@ packages:
'@stagewise/toolbar@0.4.8': '@stagewise/toolbar@0.4.8':
resolution: {integrity: sha512-0ByvC4hYdHHf3rK5M+xSR9mipHYr8naNn2OgDBtv4DE0SoSCr08KfQtZ6VpsBNbOW/Mh1Y4c/AoWcyCTOc2ocA==} resolution: {integrity: sha512-0ByvC4hYdHHf3rK5M+xSR9mipHYr8naNn2OgDBtv4DE0SoSCr08KfQtZ6VpsBNbOW/Mh1Y4c/AoWcyCTOc2ocA==}
'@tailwindcss/postcss7-compat@2.2.17':
resolution: {integrity: sha512-3h2svqQAqYHxRZ1KjsJjZOVTQ04m29LjfrLjXyZZEJuvUuJN+BCIF9GI8vhE1s0plS0mogd6E6YLg6mu4Wv/Vw==}
engines: {node: '>=12.13.0'}
hasBin: true
'@trysound/sax@0.2.0': '@trysound/sax@0.2.0':
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
...@@ -1158,10 +1169,22 @@ packages: ...@@ -1158,10 +1169,22 @@ packages:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
acorn-node@1.8.2:
resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
acorn-walk@7.2.0:
resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
engines: {node: '>=0.4.0'}
acorn-walk@8.3.4: acorn-walk@8.3.4:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
acorn@7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
hasBin: true
acorn@8.14.1: acorn@8.14.1:
resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
...@@ -1265,6 +1288,9 @@ packages: ...@@ -1265,6 +1288,9 @@ packages:
resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==}
deprecated: This package is no longer supported. deprecated: This package is no longer supported.
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@1.0.10: argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
...@@ -1350,6 +1376,10 @@ packages: ...@@ -1350,6 +1376,10 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.1.0 postcss: ^8.1.0
autoprefixer@9.8.8:
resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==}
hasBin: true
available-typed-arrays@1.0.7: available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -1558,6 +1588,10 @@ packages: ...@@ -1558,6 +1588,10 @@ packages:
camel-case@4.1.2: camel-case@4.1.2:
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
camelcase-keys@2.1.0: camelcase-keys@2.1.0:
resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==} resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
...@@ -1697,6 +1731,13 @@ packages: ...@@ -1697,6 +1731,13 @@ packages:
color-name@1.1.4: color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
color-string@1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
color@4.2.3:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
colord@2.9.3: colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
...@@ -1995,6 +2036,9 @@ packages: ...@@ -1995,6 +2036,9 @@ packages:
crypto-js@4.2.0: crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
css-color-names@0.0.4:
resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==}
css-declaration-sorter@6.4.1: css-declaration-sorter@6.4.1:
resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
...@@ -2060,6 +2104,9 @@ packages: ...@@ -2060,6 +2104,9 @@ packages:
resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
css-unit-converter@1.1.2:
resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==}
css-url-regex@1.1.0: css-url-regex@1.1.0:
resolution: {integrity: sha512-hLKuvifwoKvwqpctblTp0BovBuOXzxof8JgkA8zeqxxL+vcynHQjtIqqlFfQI1gEAZAjbqKm9gFTa88fxTAX4g==} resolution: {integrity: sha512-hLKuvifwoKvwqpctblTp0BovBuOXzxof8JgkA8zeqxxL+vcynHQjtIqqlFfQI1gEAZAjbqKm9gFTa88fxTAX4g==}
...@@ -2243,6 +2290,9 @@ packages: ...@@ -2243,6 +2290,9 @@ packages:
resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
defined@1.0.1:
resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
delayed-stream@1.0.0: delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
...@@ -2276,6 +2326,14 @@ packages: ...@@ -2276,6 +2326,14 @@ packages:
detect-node@2.1.0: detect-node@2.1.0:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
detective@5.2.1:
resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
engines: {node: '>=0.8.0'}
hasBin: true
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
digest-header@1.1.0: digest-header@1.1.0:
resolution: {integrity: sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==} resolution: {integrity: sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==}
engines: {node: '>= 8.0.0'} engines: {node: '>= 8.0.0'}
...@@ -2287,6 +2345,9 @@ packages: ...@@ -2287,6 +2345,9 @@ packages:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'} engines: {node: '>=8'}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dns-packet@5.6.1: dns-packet@5.6.1:
resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
engines: {node: '>=6'} engines: {node: '>=6'}
...@@ -2749,6 +2810,10 @@ packages: ...@@ -2749,6 +2810,10 @@ packages:
fs-constants@1.0.0: fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
fs-extra@9.1.0: fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
...@@ -2996,6 +3061,9 @@ packages: ...@@ -2996,6 +3061,9 @@ packages:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true hasBin: true
hex-color-regex@1.1.0:
resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==}
highlight.js@10.7.3: highlight.js@10.7.3:
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
...@@ -3005,6 +3073,12 @@ packages: ...@@ -3005,6 +3073,12 @@ packages:
hpack.js@2.1.6: hpack.js@2.1.6:
resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
hsl-regex@1.0.0:
resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==}
hsla-regex@1.0.0:
resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==}
html-entities@2.6.0: html-entities@2.6.0:
resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
...@@ -3025,6 +3099,10 @@ packages: ...@@ -3025,6 +3099,10 @@ packages:
resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==} resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==}
engines: {node: '>=4'} engines: {node: '>=4'}
html-tags@3.3.1:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
engines: {node: '>=8'}
html-webpack-plugin@3.2.0: html-webpack-plugin@3.2.0:
resolution: {integrity: sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==} resolution: {integrity: sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==}
engines: {node: '>=6.9'} engines: {node: '>=6.9'}
...@@ -3219,6 +3297,9 @@ packages: ...@@ -3219,6 +3297,9 @@ packages:
is-arrayish@0.2.1: is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-arrayish@0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
is-async-function@2.1.1: is-async-function@2.1.1:
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -3245,6 +3326,9 @@ packages: ...@@ -3245,6 +3326,9 @@ packages:
is-class-hotfix@0.0.6: is-class-hotfix@0.0.6:
resolution: {integrity: sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==} resolution: {integrity: sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==}
is-color-stop@1.1.0:
resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==}
is-core-module@2.16.1: is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -3647,6 +3731,9 @@ packages: ...@@ -3647,6 +3731,9 @@ packages:
lodash.memoize@4.1.2: lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
lodash.topath@4.5.2:
resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==}
lodash.uniq@4.5.0: lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
...@@ -3850,6 +3937,10 @@ packages: ...@@ -3850,6 +3937,10 @@ packages:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true hasBin: true
modern-normalize@1.1.0:
resolution: {integrity: sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==}
engines: {node: '>=6'}
module-alias@2.2.3: module-alias@2.2.3:
resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==} resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==}
...@@ -3916,6 +4007,9 @@ packages: ...@@ -3916,6 +4007,9 @@ packages:
node-addon-api@7.1.1: node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
node-emoji@1.11.0:
resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
node-fetch@2.7.0: node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0} engines: {node: 4.x || >=6.0.0}
...@@ -3995,6 +4089,9 @@ packages: ...@@ -3995,6 +4089,9 @@ packages:
nth-check@2.1.1: nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
num2fraction@1.2.2:
resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==}
number-is-nan@1.0.1: number-is-nan@1.0.1:
resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
...@@ -4010,6 +4107,10 @@ packages: ...@@ -4010,6 +4107,10 @@ packages:
resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
object-hash@2.2.0:
resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
engines: {node: '>= 6'}
object-inspect@1.13.4: object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -4369,6 +4470,24 @@ packages: ...@@ -4369,6 +4470,24 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.2.15 postcss: ^8.2.15
postcss-functions@3.0.0:
resolution: {integrity: sha512-N5yWXWKA+uhpLQ9ZhBRl2bIAdM6oVJYpDojuI1nF2SzXBimJcdjFwiAouBVbO5VuOF3qA6BSFWFc3wXbbj72XQ==}
postcss-js@2.0.3:
resolution: {integrity: sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==}
postcss-load-config@3.1.4:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
engines: {node: '>= 10'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
postcss-loader@6.2.1: postcss-loader@6.2.1:
resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==}
engines: {node: '>= 12.13.0'} engines: {node: '>= 12.13.0'}
...@@ -4436,6 +4555,9 @@ packages: ...@@ -4436,6 +4555,9 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.1.0 postcss: ^8.1.0
postcss-nested@4.2.3:
resolution: {integrity: sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==}
postcss-normalize-charset@5.1.0: postcss-normalize-charset@5.1.0:
resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
engines: {node: ^10 || ^12 || >=14.0} engines: {node: ^10 || ^12 || >=14.0}
...@@ -4536,6 +4658,9 @@ packages: ...@@ -4536,6 +4658,9 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.2.15 postcss: ^8.2.15
postcss-value-parser@3.3.1:
resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==}
postcss-value-parser@4.2.0: postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
...@@ -4543,6 +4668,10 @@ packages: ...@@ -4543,6 +4668,10 @@ packages:
resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
postcss@6.0.23:
resolution: {integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==}
engines: {node: '>=4.0.0'}
postcss@7.0.39: postcss@7.0.39:
resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
...@@ -4587,6 +4716,10 @@ packages: ...@@ -4587,6 +4716,10 @@ packages:
pretty-error@4.0.0: pretty-error@4.0.0:
resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
pretty-hrtime@1.0.3:
resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==}
engines: {node: '>= 0.8'}
process-nextick-args@2.0.1: process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
...@@ -4622,6 +4755,10 @@ packages: ...@@ -4622,6 +4755,10 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'} engines: {node: '>=6'}
purgecss@4.1.3:
resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==}
hasBin: true
q@1.5.1: q@1.5.1:
resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'} engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
...@@ -4658,6 +4795,10 @@ packages: ...@@ -4658,6 +4795,10 @@ packages:
queue-microtask@1.2.3: queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quick-lru@5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
quill-delta@3.6.3: quill-delta@3.6.3:
resolution: {integrity: sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==} resolution: {integrity: sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==}
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
...@@ -4719,6 +4860,9 @@ packages: ...@@ -4719,6 +4860,9 @@ packages:
resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
reduce-css-calc@2.1.8:
resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==}
reflect.getprototypeof@1.0.10: reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -4836,6 +4980,12 @@ packages: ...@@ -4836,6 +4980,12 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'} engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rgb-regex@1.0.1:
resolution: {integrity: sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==}
rgba-regex@1.0.0:
resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==}
rimraf@2.7.1: rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
deprecated: Rimraf versions prior to v4 are no longer supported deprecated: Rimraf versions prior to v4 are no longer supported
...@@ -5064,6 +5214,9 @@ packages: ...@@ -5064,6 +5214,9 @@ packages:
signal-exit@3.0.7: signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
sirv@2.0.4: sirv@2.0.4:
resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
...@@ -5420,6 +5573,10 @@ packages: ...@@ -5420,6 +5573,10 @@ packages:
tiny-emitter@2.1.0: tiny-emitter@2.1.0:
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
tmp@0.2.5:
resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
engines: {node: '>=14.14'}
to-arraybuffer@1.0.1: to-arraybuffer@1.0.1:
resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
...@@ -6795,6 +6952,46 @@ snapshots: ...@@ -6795,6 +6952,46 @@ snapshots:
'@stagewise/toolbar@0.4.8': {} '@stagewise/toolbar@0.4.8': {}
'@tailwindcss/postcss7-compat@2.2.17':
dependencies:
arg: 5.0.2
autoprefixer: 9.8.8
bytes: 3.1.2
chalk: 4.1.2
chokidar: 3.6.0
color: 4.2.3
cosmiconfig: 7.1.0
detective: 5.2.1
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.3
fs-extra: 10.1.0
glob-parent: 6.0.2
html-tags: 3.3.1
is-color-stop: 1.1.0
is-glob: 4.0.3
lodash: 4.17.21
lodash.topath: 4.5.2
modern-normalize: 1.1.0
node-emoji: 1.11.0
normalize-path: 3.0.0
object-hash: 2.2.0
postcss: 7.0.39
postcss-functions: 3.0.0
postcss-js: 2.0.3
postcss-load-config: 3.1.4(postcss@7.0.39)
postcss-nested: 4.2.3
postcss-selector-parser: 6.1.2
postcss-value-parser: 4.2.0
pretty-hrtime: 1.0.3
purgecss: 4.1.3
quick-lru: 5.1.1
reduce-css-calc: 2.1.8
resolve: 1.22.10
tmp: 0.2.5
transitivePeerDependencies:
- ts-node
'@trysound/sax@0.2.0': {} '@trysound/sax@0.2.0': {}
'@types/body-parser@1.19.5': '@types/body-parser@1.19.5':
...@@ -7427,10 +7624,20 @@ snapshots: ...@@ -7427,10 +7624,20 @@ snapshots:
mime-types: 2.1.35 mime-types: 2.1.35
negotiator: 0.6.3 negotiator: 0.6.3
acorn-node@1.8.2:
dependencies:
acorn: 7.4.1
acorn-walk: 7.2.0
xtend: 4.0.2
acorn-walk@7.2.0: {}
acorn-walk@8.3.4: acorn-walk@8.3.4:
dependencies: dependencies:
acorn: 8.14.1 acorn: 8.14.1
acorn@7.4.1: {}
acorn@8.14.1: {} acorn@8.14.1: {}
address@1.2.2: {} address@1.2.2: {}
...@@ -7546,6 +7753,8 @@ snapshots: ...@@ -7546,6 +7753,8 @@ snapshots:
readable-stream: 2.3.8 readable-stream: 2.3.8
optional: true optional: true
arg@5.0.2: {}
argparse@1.0.10: argparse@1.0.10:
dependencies: dependencies:
sprintf-js: 1.0.3 sprintf-js: 1.0.3
...@@ -7618,6 +7827,16 @@ snapshots: ...@@ -7618,6 +7827,16 @@ snapshots:
atob@2.1.2: {} atob@2.1.2: {}
autoprefixer@10.4.21(postcss@7.0.39):
dependencies:
browserslist: 4.24.5
caniuse-lite: 1.0.30001718
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 7.0.39
postcss-value-parser: 4.2.0
autoprefixer@10.4.21(postcss@8.5.3): autoprefixer@10.4.21(postcss@8.5.3):
dependencies: dependencies:
browserslist: 4.24.5 browserslist: 4.24.5
...@@ -7628,6 +7847,16 @@ snapshots: ...@@ -7628,6 +7847,16 @@ snapshots:
postcss: 8.5.3 postcss: 8.5.3
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
autoprefixer@9.8.8:
dependencies:
browserslist: 4.24.5
caniuse-lite: 1.0.30001718
normalize-range: 0.1.2
num2fraction: 1.2.2
picocolors: 0.2.1
postcss: 7.0.39
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7: available-typed-arrays@1.0.7:
dependencies: dependencies:
possible-typed-array-names: 1.1.0 possible-typed-array-names: 1.1.0
...@@ -7964,6 +8193,8 @@ snapshots: ...@@ -7964,6 +8193,8 @@ snapshots:
pascal-case: 3.1.2 pascal-case: 3.1.2
tslib: 2.8.1 tslib: 2.8.1
camelcase-css@2.0.1: {}
camelcase-keys@2.1.0: camelcase-keys@2.1.0:
dependencies: dependencies:
camelcase: 2.1.1 camelcase: 2.1.1
...@@ -8139,6 +8370,16 @@ snapshots: ...@@ -8139,6 +8370,16 @@ snapshots:
color-name@1.1.4: {} color-name@1.1.4: {}
color-string@1.9.1:
dependencies:
color-name: 1.1.4
simple-swizzle: 0.2.2
color@4.2.3:
dependencies:
color-convert: 2.0.1
color-string: 1.9.1
colord@2.9.3: {} colord@2.9.3: {}
colorette@2.0.20: {} colorette@2.0.20: {}
...@@ -8281,6 +8522,8 @@ snapshots: ...@@ -8281,6 +8522,8 @@ snapshots:
crypto-js@4.2.0: {} crypto-js@4.2.0: {}
css-color-names@0.0.4: {}
css-declaration-sorter@6.4.1(postcss@8.5.3): css-declaration-sorter@6.4.1(postcss@8.5.3):
dependencies: dependencies:
postcss: 8.5.3 postcss: 8.5.3
...@@ -8350,6 +8593,8 @@ snapshots: ...@@ -8350,6 +8593,8 @@ snapshots:
mdn-data: 2.0.14 mdn-data: 2.0.14
source-map: 0.6.1 source-map: 0.6.1
css-unit-converter@1.1.2: {}
css-url-regex@1.1.0: {} css-url-regex@1.1.0: {}
css-what@3.4.2: {} css-what@3.4.2: {}
...@@ -8570,6 +8815,8 @@ snapshots: ...@@ -8570,6 +8815,8 @@ snapshots:
is-descriptor: 1.0.3 is-descriptor: 1.0.3
isobject: 3.0.1 isobject: 3.0.1
defined@1.0.1: {}
delayed-stream@1.0.0: {} delayed-stream@1.0.0: {}
delegate@3.2.0: {} delegate@3.2.0: {}
...@@ -8590,6 +8837,14 @@ snapshots: ...@@ -8590,6 +8837,14 @@ snapshots:
detect-node@2.1.0: {} detect-node@2.1.0: {}
detective@5.2.1:
dependencies:
acorn-node: 1.8.2
defined: 1.0.1
minimist: 1.2.8
didyoumean@1.2.2: {}
digest-header@1.1.0: {} digest-header@1.1.0: {}
dingtalk-jsapi@3.1.0: dingtalk-jsapi@3.1.0:
...@@ -8600,6 +8855,8 @@ snapshots: ...@@ -8600,6 +8855,8 @@ snapshots:
dependencies: dependencies:
path-type: 4.0.0 path-type: 4.0.0
dlv@1.1.3: {}
dns-packet@5.6.1: dns-packet@5.6.1:
dependencies: dependencies:
'@leichtgewicht/ip-codec': 2.0.5 '@leichtgewicht/ip-codec': 2.0.5
...@@ -9214,6 +9471,12 @@ snapshots: ...@@ -9214,6 +9471,12 @@ snapshots:
fs-constants@1.0.0: fs-constants@1.0.0:
optional: true optional: true
fs-extra@10.1.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 6.1.0
universalify: 2.0.1
fs-extra@9.1.0: fs-extra@9.1.0:
dependencies: dependencies:
at-least-node: 1.0.0 at-least-node: 1.0.0
...@@ -9531,6 +9794,8 @@ snapshots: ...@@ -9531,6 +9794,8 @@ snapshots:
he@1.2.0: {} he@1.2.0: {}
hex-color-regex@1.1.0: {}
highlight.js@10.7.3: {} highlight.js@10.7.3: {}
hosted-git-info@2.8.9: {} hosted-git-info@2.8.9: {}
...@@ -9542,6 +9807,10 @@ snapshots: ...@@ -9542,6 +9807,10 @@ snapshots:
readable-stream: 2.3.8 readable-stream: 2.3.8
wbuf: 1.7.3 wbuf: 1.7.3
hsl-regex@1.0.0: {}
hsla-regex@1.0.0: {}
html-entities@2.6.0: {} html-entities@2.6.0: {}
html-escaper@2.0.2: {} html-escaper@2.0.2: {}
...@@ -9568,6 +9837,8 @@ snapshots: ...@@ -9568,6 +9837,8 @@ snapshots:
html-tags@2.0.0: {} html-tags@2.0.0: {}
html-tags@3.3.1: {}
html-webpack-plugin@3.2.0(webpack@5.99.8): html-webpack-plugin@3.2.0(webpack@5.99.8):
dependencies: dependencies:
html-minifier: 3.5.21 html-minifier: 3.5.21
...@@ -9814,6 +10085,8 @@ snapshots: ...@@ -9814,6 +10085,8 @@ snapshots:
is-arrayish@0.2.1: {} is-arrayish@0.2.1: {}
is-arrayish@0.3.2: {}
is-async-function@2.1.1: is-async-function@2.1.1:
dependencies: dependencies:
async-function: 1.0.0 async-function: 1.0.0
...@@ -9841,6 +10114,15 @@ snapshots: ...@@ -9841,6 +10114,15 @@ snapshots:
is-class-hotfix@0.0.6: {} is-class-hotfix@0.0.6: {}
is-color-stop@1.1.0:
dependencies:
css-color-names: 0.0.4
hex-color-regex: 1.1.0
hsl-regex: 1.0.0
hsla-regex: 1.0.0
rgb-regex: 1.0.1
rgba-regex: 1.0.0
is-core-module@2.16.1: is-core-module@2.16.1:
dependencies: dependencies:
hasown: 2.0.2 hasown: 2.0.2
...@@ -10216,6 +10498,8 @@ snapshots: ...@@ -10216,6 +10498,8 @@ snapshots:
lodash.memoize@4.1.2: {} lodash.memoize@4.1.2: {}
lodash.topath@4.5.2: {}
lodash.uniq@4.5.0: {} lodash.uniq@4.5.0: {}
lodash@4.17.21: {} lodash@4.17.21: {}
...@@ -10424,6 +10708,8 @@ snapshots: ...@@ -10424,6 +10708,8 @@ snapshots:
dependencies: dependencies:
minimist: 1.2.8 minimist: 1.2.8
modern-normalize@1.1.0: {}
module-alias@2.2.3: {} module-alias@2.2.3: {}
moment@2.30.1: {} moment@2.30.1: {}
...@@ -10495,6 +10781,10 @@ snapshots: ...@@ -10495,6 +10781,10 @@ snapshots:
node-addon-api@7.1.1: node-addon-api@7.1.1:
optional: true optional: true
node-emoji@1.11.0:
dependencies:
lodash: 4.17.21
node-fetch@2.7.0: node-fetch@2.7.0:
dependencies: dependencies:
whatwg-url: 5.0.0 whatwg-url: 5.0.0
...@@ -10599,6 +10889,8 @@ snapshots: ...@@ -10599,6 +10889,8 @@ snapshots:
dependencies: dependencies:
boolbase: 1.0.0 boolbase: 1.0.0
num2fraction@1.2.2: {}
number-is-nan@1.0.1: number-is-nan@1.0.1:
optional: true optional: true
...@@ -10613,6 +10905,8 @@ snapshots: ...@@ -10613,6 +10905,8 @@ snapshots:
define-property: 0.2.5 define-property: 0.2.5
kind-of: 3.2.2 kind-of: 3.2.2
object-hash@2.2.0: {}
object-inspect@1.13.4: {} object-inspect@1.13.4: {}
object-is@1.1.6: object-is@1.1.6:
...@@ -10974,6 +11268,25 @@ snapshots: ...@@ -10974,6 +11268,25 @@ snapshots:
dependencies: dependencies:
postcss: 8.5.3 postcss: 8.5.3
postcss-functions@3.0.0:
dependencies:
glob: 7.2.3
object-assign: 4.1.1
postcss: 6.0.23
postcss-value-parser: 3.3.1
postcss-js@2.0.3:
dependencies:
camelcase-css: 2.0.1
postcss: 7.0.39
postcss-load-config@3.1.4(postcss@7.0.39):
dependencies:
lilconfig: 2.1.0
yaml: 1.10.2
optionalDependencies:
postcss: 7.0.39
postcss-loader@6.2.1(postcss@8.5.3)(webpack@5.99.8): postcss-loader@6.2.1(postcss@8.5.3)(webpack@5.99.8):
dependencies: dependencies:
cosmiconfig: 7.1.0 cosmiconfig: 7.1.0
...@@ -11041,6 +11354,11 @@ snapshots: ...@@ -11041,6 +11354,11 @@ snapshots:
icss-utils: 5.1.0(postcss@8.5.3) icss-utils: 5.1.0(postcss@8.5.3)
postcss: 8.5.3 postcss: 8.5.3
postcss-nested@4.2.3:
dependencies:
postcss: 7.0.39
postcss-selector-parser: 6.1.2
postcss-normalize-charset@5.1.0(postcss@8.5.3): postcss-normalize-charset@5.1.0(postcss@8.5.3):
dependencies: dependencies:
postcss: 8.5.3 postcss: 8.5.3
...@@ -11133,6 +11451,8 @@ snapshots: ...@@ -11133,6 +11451,8 @@ snapshots:
postcss: 8.5.3 postcss: 8.5.3
postcss-selector-parser: 6.1.2 postcss-selector-parser: 6.1.2
postcss-value-parser@3.3.1: {}
postcss-value-parser@4.2.0: {} postcss-value-parser@4.2.0: {}
postcss@5.2.18: postcss@5.2.18:
...@@ -11142,6 +11462,12 @@ snapshots: ...@@ -11142,6 +11462,12 @@ snapshots:
source-map: 0.5.7 source-map: 0.5.7
supports-color: 3.2.3 supports-color: 3.2.3
postcss@6.0.23:
dependencies:
chalk: 2.4.2
source-map: 0.6.1
supports-color: 5.5.0
postcss@7.0.39: postcss@7.0.39:
dependencies: dependencies:
picocolors: 0.2.1 picocolors: 0.2.1
...@@ -11194,6 +11520,8 @@ snapshots: ...@@ -11194,6 +11520,8 @@ snapshots:
lodash: 4.17.21 lodash: 4.17.21
renderkid: 3.0.0 renderkid: 3.0.0
pretty-hrtime@1.0.3: {}
process-nextick-args@2.0.1: {} process-nextick-args@2.0.1: {}
progress-webpack-plugin@1.0.16(webpack@5.99.8): progress-webpack-plugin@1.0.16(webpack@5.99.8):
...@@ -11229,6 +11557,13 @@ snapshots: ...@@ -11229,6 +11557,13 @@ snapshots:
punycode@2.3.1: {} punycode@2.3.1: {}
purgecss@4.1.3:
dependencies:
commander: 8.3.0
glob: 7.2.3
postcss: 8.5.3
postcss-selector-parser: 6.1.2
q@1.5.1: {} q@1.5.1: {}
qrcode.vue@1.7.0(vue@2.7.16): qrcode.vue@1.7.0(vue@2.7.16):
...@@ -11260,6 +11595,8 @@ snapshots: ...@@ -11260,6 +11595,8 @@ snapshots:
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
quick-lru@5.1.1: {}
quill-delta@3.6.3: quill-delta@3.6.3:
dependencies: dependencies:
deep-equal: 1.1.2 deep-equal: 1.1.2
...@@ -11355,6 +11692,11 @@ snapshots: ...@@ -11355,6 +11692,11 @@ snapshots:
strip-indent: 1.0.1 strip-indent: 1.0.1
optional: true optional: true
reduce-css-calc@2.1.8:
dependencies:
css-unit-converter: 1.1.2
postcss-value-parser: 3.3.1
reflect.getprototypeof@1.0.10: reflect.getprototypeof@1.0.10:
dependencies: dependencies:
call-bind: 1.0.8 call-bind: 1.0.8
...@@ -11498,6 +11840,10 @@ snapshots: ...@@ -11498,6 +11840,10 @@ snapshots:
reusify@1.1.0: {} reusify@1.1.0: {}
rgb-regex@1.0.1: {}
rgba-regex@1.0.0: {}
rimraf@2.7.1: rimraf@2.7.1:
dependencies: dependencies:
glob: 7.2.3 glob: 7.2.3
...@@ -11790,6 +12136,10 @@ snapshots: ...@@ -11790,6 +12136,10 @@ snapshots:
signal-exit@3.0.7: {} signal-exit@3.0.7: {}
simple-swizzle@0.2.2:
dependencies:
is-arrayish: 0.3.2
sirv@2.0.4: sirv@2.0.4:
dependencies: dependencies:
'@polka/url': 1.0.0-next.29 '@polka/url': 1.0.0-next.29
...@@ -12256,6 +12606,8 @@ snapshots: ...@@ -12256,6 +12606,8 @@ snapshots:
tiny-emitter@2.1.0: {} tiny-emitter@2.1.0: {}
tmp@0.2.5: {}
to-arraybuffer@1.0.1: {} to-arraybuffer@1.0.1: {}
to-buffer@1.1.1: to-buffer@1.1.1:
......
/*
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-08-30 10:58:38
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-08-30 10:58:43
* @FilePath: /company_app/postcss.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
module.exports = {
plugins: [
require('tailwindcss'),
require('autoprefixer')
]
}
\ No newline at end of file
import request from '@/utils/request' import request from '@/utils/request';
import store from '@/store/index' import store from '@/store/index';
import Cookies from 'js-cookie' import Cookies from 'js-cookie';
// 获取用户ID的函数,避免在模块加载时访问可能未初始化的 store // 获取用户ID的函数,避免在模块加载时访问可能未初始化的 store
function getZwUserId() { function getZwUserId() {
return Cookies.get('cser_id') || return (
(store.state?.user?.userInfo?.id) || Cookies.get('cser_id') ||
(store.state?.user?.cser_id) store.state?.user?.userInfo?.id ||
store.state?.user?.cser_id
);
} }
// 游戏业务所属的接口信息 // 游戏业务所属的接口信息
// 所属分组下拉 // 所属分组下拉
function returnApi(api){ function returnApi(api) {
return '/sidebar' + api return '/sidebar' + api;
} }
export function cross_systemRequest(data) { export function cross_systemRequest(data) {
!data.noApi ? data.api = '/api' + data.api : '' !data.noApi ? (data.api = '/api' + data.api) : '';
return request({ return request({
url: '/sidebar/cross_system/request', url: '/sidebar/cross_system/request',
method: 'post', method: 'post',
data data,
}) });
} }
// 请求角色详情 // 请求角色详情
export function memberView(data) { export function memberView(data) {
...@@ -27,11 +29,11 @@ export function memberView(data) { ...@@ -27,11 +29,11 @@ export function memberView(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/view', api: '/member/view',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 修改手机号 // 修改手机号
...@@ -40,11 +42,11 @@ export function bindMobile(data) { ...@@ -40,11 +42,11 @@ export function bindMobile(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/bindMobile', api: '/member/bindMobile',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 角色列表 // 角色列表
...@@ -53,11 +55,11 @@ export function roleList(data) { ...@@ -53,11 +55,11 @@ export function roleList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/getList', api: '/role/getList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 绑定掌游账号 // 绑定掌游账号
...@@ -65,8 +67,8 @@ export function zyouBind(data) { ...@@ -65,8 +67,8 @@ export function zyouBind(data) {
return request({ return request({
url: returnApi('/external_user/zyouBind'), url: returnApi('/external_user/zyouBind'),
method: 'post', method: 'post',
data data,
}) });
} }
// 订单列表 // 订单列表
...@@ -75,11 +77,11 @@ export function orderList(data) { ...@@ -75,11 +77,11 @@ export function orderList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/order/list', api: '/order/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 订单金额 // 订单金额
export function todayOrder(data) { export function todayOrder(data) {
...@@ -87,11 +89,11 @@ export function todayOrder(data) { ...@@ -87,11 +89,11 @@ export function todayOrder(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/todayOrder', api: '/member/todayOrder',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 补单和补回调 // 补单和补回调
export function completionOrder(data) { export function completionOrder(data) {
...@@ -99,11 +101,11 @@ export function completionOrder(data) { ...@@ -99,11 +101,11 @@ export function completionOrder(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/order/completionOrder', api: '/order/completionOrder',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 退款提交申请 // 退款提交申请
export function refundRequest(data) { export function refundRequest(data) {
...@@ -111,11 +113,11 @@ export function refundRequest(data) { ...@@ -111,11 +113,11 @@ export function refundRequest(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/order/addRefundRequest', api: '/order/addRefundRequest',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 退款申请记录 // 退款申请记录
export function refundRecord(data) { export function refundRecord(data) {
...@@ -123,11 +125,11 @@ export function refundRecord(data) { ...@@ -123,11 +125,11 @@ export function refundRecord(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/order/getRefundRequestList', api: '/order/getRefundRequestList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 退款详情 // 退款详情
export function refundRequestLog(data) { export function refundRequestLog(data) {
...@@ -135,11 +137,11 @@ export function refundRequestLog(data) { ...@@ -135,11 +137,11 @@ export function refundRequestLog(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/order/refundRequestProcess', api: '/order/refundRequestProcess',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 下拉请求 // 下拉请求
export function selectSearch(data) { export function selectSearch(data) {
...@@ -147,11 +149,11 @@ export function selectSearch(data) { ...@@ -147,11 +149,11 @@ export function selectSearch(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/searchcondition/search', api: '/searchcondition/search',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 账号维度推广游戏列表 // 账号维度推广游戏列表
...@@ -160,11 +162,11 @@ export function memberExtensionGameList(data) { ...@@ -160,11 +162,11 @@ export function memberExtensionGameList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/memberExtensionGameList', api: '/member/memberExtensionGameList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 充值 // 充值
// 账号维度推广游戏列表 // 账号维度推广游戏列表
...@@ -173,11 +175,11 @@ export function getAmountByTime(data) { ...@@ -173,11 +175,11 @@ export function getAmountByTime(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getAmountByTime', api: '/member/getAmountByTime',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 违规记录 // 违规记录
...@@ -186,11 +188,11 @@ export function violationList(data) { ...@@ -186,11 +188,11 @@ export function violationList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/violationList', api: '/member/violationList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 重置密码 // 重置密码
export function autoResetPassword(data) { export function autoResetPassword(data) {
...@@ -198,19 +200,19 @@ export function autoResetPassword(data) { ...@@ -198,19 +200,19 @@ export function autoResetPassword(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/autoResetPassword', api: '/member/autoResetPassword',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 重置密码加密 // 重置密码加密
export function passwardEncryption(data) { export function passwardEncryption(data) {
return request({ return request({
url: '/sidebar/session/zyouAutoResetPassword', url: '/sidebar/session/zyouAutoResetPassword',
method: 'post', method: 'post',
data data,
}) });
} }
// VIP自助工具 // VIP自助工具
...@@ -219,11 +221,11 @@ export function createVipUrl(data) { ...@@ -219,11 +221,11 @@ export function createVipUrl(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/createVipUrl', api: '/member/createVipUrl',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 活动类型 // 活动类型
...@@ -232,11 +234,11 @@ export function giftTypeList(data) { ...@@ -232,11 +234,11 @@ export function giftTypeList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/searchcondition/search', api: '/searchcondition/search',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 充值活动列表 // 充值活动列表
export function activeList(data) { export function activeList(data) {
...@@ -244,11 +246,11 @@ export function activeList(data) { ...@@ -244,11 +246,11 @@ export function activeList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getVipBagCodeRuleListByRole', api: '/member/getVipBagCodeRuleListByRole',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 活动详情 // 活动详情
export function giftDetailsData(data) { export function giftDetailsData(data) {
...@@ -256,11 +258,11 @@ export function giftDetailsData(data) { ...@@ -256,11 +258,11 @@ export function giftDetailsData(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getRoleConditionByRuleAndRole', api: '/member/getRoleConditionByRuleAndRole',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 申请礼包 // 申请礼包
...@@ -269,11 +271,11 @@ export function giftBagApply(data) { ...@@ -269,11 +271,11 @@ export function giftBagApply(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/giftBagApply', api: '/member/giftBagApply',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 礼包检测 // 礼包检测
export function checkRoleReceivedBag(data) { export function checkRoleReceivedBag(data) {
...@@ -281,11 +283,11 @@ export function checkRoleReceivedBag(data) { ...@@ -281,11 +283,11 @@ export function checkRoleReceivedBag(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role_gift_bag/checkRoleReceivedBag', api: '/role_gift_bag/checkRoleReceivedBag',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 礼包列表 // 礼包列表
export function emailGiftList(data) { export function emailGiftList(data) {
...@@ -293,11 +295,11 @@ export function emailGiftList(data) { ...@@ -293,11 +295,11 @@ export function emailGiftList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/giftBagApplyIndex', api: '/member/giftBagApplyIndex',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 易主标签查询 // 易主标签查询
...@@ -306,11 +308,11 @@ export function getMemberLabel(data) { ...@@ -306,11 +308,11 @@ export function getMemberLabel(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getMemberLabel', api: '/member/getMemberLabel',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 修改易主标签 // 修改易主标签
export function editMemberLabel(data) { export function editMemberLabel(data) {
...@@ -318,11 +320,11 @@ export function editMemberLabel(data) { ...@@ -318,11 +320,11 @@ export function editMemberLabel(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/editMemberLabel', api: '/member/editMemberLabel',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// // 转端接口 // // 转端接口
// export function getMemberLink(data) { // export function getMemberLink(data) {
...@@ -343,11 +345,11 @@ export function getMemberLink(data) { ...@@ -343,11 +345,11 @@ export function getMemberLink(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getMemberLink', api: '/member/getMemberLink',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转游接口 // 转游接口
export function getLandingPageMemberLink(data) { export function getLandingPageMemberLink(data) {
...@@ -355,11 +357,11 @@ export function getLandingPageMemberLink(data) { ...@@ -355,11 +357,11 @@ export function getLandingPageMemberLink(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getLandingPageMemberLink', api: '/member/getLandingPageMemberLink',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转游接口 // 转游接口
export function getLandingPageConfig(data) { export function getLandingPageConfig(data) {
...@@ -367,11 +369,11 @@ export function getLandingPageConfig(data) { ...@@ -367,11 +369,11 @@ export function getLandingPageConfig(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/getLandingPageConfig', api: '/member/getLandingPageConfig',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 渠道列表单独渠道KEY // 渠道列表单独渠道KEY
...@@ -380,850 +382,959 @@ export function channelList(data) { ...@@ -380,850 +382,959 @@ export function channelList(data) {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/channel/channelList', api: '/channel/channelList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 工单 // 工单
// 任务列表 // 任务列表
export function taskIndex(data) { export function taskIndex(data) {
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/index', api: '/operator_task/index',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 任务详情 // 任务详情
export function taskDetails(data) { export function taskDetails(data) {
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/info', api: '/operator_task/info',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 分配 // 分配
export function taskAssign(data) { export function taskAssign(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/assign', api: '/operator_task/assign',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 完成任务 // 完成任务
export function taskTrack(data) { export function taskTrack(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/track', api: '/operator_task/track',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 结果列表 // 结果列表
export function taskRecord(data) { export function taskRecord(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/logs', api: '/operator_task/logs',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 备注 // 备注
export function logsSave(data) { export function logsSave(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task_log/save', api: '/operator_task_log/save',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 角色累充 // 角色累充
export function RoleTodayOrder(data) { export function RoleTodayOrder(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/todayOrder', api: '/role/todayOrder',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 用户充值 // 用户充值
export function memberOrder(data) { export function memberOrder(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member/memberOrder', api: '/member/memberOrder',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 下拉加载 // 下拉加载
export function searchcondition(data) { export function searchcondition(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/searchcondition/search', api: '/searchcondition/search',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 误操作列表 // 误操作列表
export function misoperationIndex(data) { export function misoperationIndex(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/mistake_operation_request/list', api: '/mistake_operation_request/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 添加误操作 // 添加误操作
export function addErrorHandle(data) { export function addErrorHandle(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/mistake_operation_request/add', api: '/mistake_operation_request/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
export function updateErrorHandle(data) { export function updateErrorHandle(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/misoperation/update', api: '/misoperation/update',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 操作数量 // 操作数量
export function numErrorHandle(data) { export function numErrorHandle(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/misoperation/num', api: '/misoperation/num',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 操作数量新 // 操作数量新
export function operationCount(data) { export function operationCount(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/mistake_operation_request/operationCount', api: '/mistake_operation_request/operationCount',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 任务消息读取 // 任务消息读取
export function taskRead(data) { export function taskRead(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/read', api: '/operator_task/read',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 任务消息状态 // 任务消息状态
export function taskReadStatus(data) { export function taskReadStatus(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/readStatus', api: '/operator_task/readStatus',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 撤回消息 // 撤回消息
export function cancelRefundRequest(data) { export function cancelRefundRequest(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/order/cancelRefundRequest', api: '/order/cancelRefundRequest',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 举报列表 // 举报列表
export function reportIndex(data) { export function reportIndex(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/admin/report_request/list', api: '/admin/report_request/list',
params: data, params: data,
noApi: true noApi: true,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 玩家举报 // 玩家举报
export function playerReport(data) { export function playerReport(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/report_request/waitList', api: '/api/report_request/waitList',
params: data, params: data,
noApi: true noApi: true,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 审批记录 // 审批记录
export function reportProcess(data) { export function reportProcess(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/report_request/process', api: '/report_request/process',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 撤销举报 // 撤销举报
export function reportCancel(data) { export function reportCancel(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/report_request/cancel', api: '/report_request/cancel',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 新增举报 // 新增举报
export function reportAdd(data) { export function reportAdd(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/report_request/add', api: '/report_request/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 申诉列表 // 申诉列表
export function appealList(data) { export function appealList(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/appeal_request/list', api: '/appeal_request/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 新增申诉 // 新增申诉
export function appealAdd(data) { export function appealAdd(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/appeal_request/add', api: '/appeal_request/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 撤销申诉 // 撤销申诉
export function appealCancel(data) { export function appealCancel(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/appeal_request/cancel', api: '/appeal_request/cancel',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 申诉记录 // 申诉记录
export function appealProcess(data) { export function appealProcess(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/appeal_request/process', api: '/appeal_request/process',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 玩家举报审批记录 // 玩家举报审批记录
export function gamerReportProcess(data) { export function gamerReportProcess(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/report_request/process', api: '/api/report_request/process',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 角色列表Holo 实时性较高 // 角色列表Holo 实时性较高
export function getRoleHoLo(data) { export function getRoleHoLo(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/getListHoLo', api: '/role/getListHoLo',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 角色列表 待请求 // 角色列表 待请求
export function memberTaskStatus(data) { export function memberTaskStatus(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/operator_task/memberTaskStatus', api: '/operator_task/memberTaskStatus',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 举报申请列表 // 举报申请列表
export function report_request_list(data) { export function report_request_list(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/report_request/list', api: '/api/report_request/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 举报申请驳回或者通过 // 举报申请驳回或者通过
export function report_request_approval(data) { export function report_request_approval(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/report_request/approval', api: '/api/report_request/approval',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 游戏类型下的游戏列表 游戏类型:安卓 h5 ios // 游戏类型下的游戏列表 游戏类型:安卓 h5 ios
export function getTransferRecallGameList(data) { export function getTransferRecallGameList(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member/getTransferRecallGameList', api: '/api/member/getTransferRecallGameList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转端和召回 游戏类型列表 // 转端和召回 游戏类型列表
export function getGameConfig(data) { export function getGameConfig(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/game/getGameConfig', api: '/api/game/getGameConfig',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 召回的时候染色 // 召回的时候染色
export function recallChannelSeq(data) { export function recallChannelSeq(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/channel/recallChannelSeq', api: '/api/channel/recallChannelSeq',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 获取游戏信息 // 获取游戏信息
export function getGameInfo(data) { export function getGameInfo(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/game/info', api: '/api/game/info',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 新增渠道 // 新增渠道
export function addChannel(data) { export function addChannel(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/channel/addDistributorChannelByZm', api: '/api/channel/addDistributorChannelByZm',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 一键发送召回渠道链接 // 一键发送召回渠道链接
export function quickRecallChannelLink(data) { export function quickRecallChannelLink(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/channel/quickRecallChannelLink', api: '/api/channel/quickRecallChannelLink',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转端发送落地页 // 转端发送落地页
export function getLandingPageTransfer(data) { export function getLandingPageTransfer(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member/getLandingPageTransfer', api: '/api/member/getLandingPageTransfer',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 工作台关联客服 // 工作台关联客服
export function bindUserSelfAdd(data) { export function bindUserSelfAdd(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_bind_cser/selfAdd', api: '/api/member_bind_cser/selfAdd',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 关联客服列表 // 关联客服列表
export function bindUserList(data) { export function bindUserList(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_bind_cser/list', api: '/api/member_bind_cser/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 新增关联客服 // 新增关联客服
export function bindUserAdd(data) { export function bindUserAdd(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_bind_cser/add', api: '/api/member_bind_cser/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 删除关联客服 // 删除关联客服
export function bindUserDelete(data) { export function bindUserDelete(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_bind_cser/delete', api: '/api/member_bind_cser/delete',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 调用掌游的日志中心 // 调用掌游的日志中心
export function getSystemModelLog(data) { export function getSystemModelLog(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_bind_cser/getSystemModelLog', api: '/api/member_bind_cser/getSystemModelLog',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
export function getMemberTransStatus(data) { export function getMemberTransStatus(data) {
// 转端文档 获取W账号的转端状态 如果状态是 false 表示不允许转端 在工作台 发送游戏 里面转端里 点开发送的时候 提示 当前w账号不满足转端要求,请联系组长处理 // 转端文档 获取W账号的转端状态 如果状态是 false 表示不允许转端 在工作台 发送游戏 里面转端里 点开发送的时候 提示 当前w账号不满足转端要求,请联系组长处理
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member/getMemberTransStatus', api: '/api/member/getMemberTransStatus',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
export function getTaskTracer(data) { export function getTaskTracer(data) {
// 获取运营任务的跟进人 参数 member_id // 获取运营任务的跟进人 参数 member_id
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/operator_task/getTaskTracer', api: '/api/operator_task/getTaskTracer',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 用户触达 发送客服号添加消息的日志 // 用户触达 发送客服号添加消息的日志
export function getTaskTracerTouch(data) { export function getTaskTracerTouch(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/operator_task_log/touch', api: '/api/operator_task_log/touch',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 添加一条任务跟进记录 // 添加一条任务跟进记录
export function getTaskTracerTouchAdd(data) { export function getTaskTracerTouchAdd(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/operator_task_log/add', api: '/api/operator_task_log/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 审批组流程下拉 // 审批组流程下拉
export function approval_group_flow_list(data) { export function approval_group_flow_list(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/approval_group_flow/options', api: '/api/approval_group_flow/options',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 审批人员表格 // 审批人员表格
export function approval_group_flow_user(data) { export function approval_group_flow_user(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/approval_group_flow/users', api: '/api/approval_group_flow/users',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 保存转端提交 // 保存转端提交
export function approval_group_flow_add(data) { export function approval_group_flow_add(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_trans_request/add', api: '/api/member_trans_request/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转端申请列表 // 转端申请列表
export function member_trans_request_list(data) { export function member_trans_request_list(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_trans_request/list', api: '/api/member_trans_request/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转端申请审批记录 // 转端申请审批记录
export function member_trans_request_process(data) { export function member_trans_request_process(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/member_trans_request/process', api: '/api/member_trans_request/process',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转区列表 // 转区列表
export function transfer_server_request_list(data) { export function transfer_server_request_list(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/transfer_server_request/list', api: '/api/transfer_server_request/list',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转区申请 // 转区申请
export function transfer_server_request_add(data) { export function transfer_server_request_add(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/transfer_server_request/add', api: '/api/transfer_server_request/add',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 转区申请节点 // 转区申请节点
export function transfer_server_request_process(data) { export function transfer_server_request_process(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/transfer_server_request/process', api: '/api/transfer_server_request/process',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
export function getMainGameInfo(data) { export function getMainGameInfo(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/service_wechat/getMainGameInfo', api: '/api/service_wechat/getMainGameInfo',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 掌游标签搜索 // 掌游标签搜索
export function roleLabelSearch(data) { export function roleLabelSearch(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/labelSearch', api: '/role/labelSearch',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 掌游标签列表 // 掌游标签列表
export function roleGetRoleLabel(data) { export function roleGetRoleLabel(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/getRoleLabel', api: '/role/getRoleLabel',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 编辑角色标签 // 编辑角色标签
export function editRoleLabel(data) { export function editRoleLabel(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/editRoleLabel', api: '/role/editRoleLabel',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 编辑角色标签 // 编辑角色标签
export function getRoleLabelCreate(data) { export function getRoleLabelCreate(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/role/getRoleLabelCreate', api: '/role/getRoleLabelCreate',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
export function ruleList(data) { export function ruleList(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/member_trans_request/ruleList', api: '/member_trans_request/ruleList',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
}) });
}) });
} }
// 查询客服未完成任务 // 查询客服未完成任务
export function getTaskTotal(data) { export function getTaskTotal(data) {
data.zw_user_id = getZwUserId() data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => { return new Promise((resovle, reject) => {
cross_systemRequest({ cross_systemRequest({
system: 'zhangyou', system: 'zhangyou',
api: '/api/operator_task/getTaskTotal', api: '/api/operator_task/getTaskTotal',
params: data params: data,
}).then((res) => { }).then((res) => {
resovle(res) resovle(res);
});
});
}
/**
* 当前w账号充值金额最靠前的有未推送的近期要开首条数据
* @param {{member_id}} data
* @returns
*/
export function getRoleRecentActivityOneApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityOne',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 角色近期要开活动编辑
* @param {Object} data - 请求参数对象
* @param {string} data.role_id - 角色ID
* @param {string} data.open_activity_time - 活动开启时间
* @param {string} data.activity_rule_id - 活动规则ID
* @param {string} data.is_push - 是否推送(2=已推送,只能传2)
* @param {number} data.type - 操作类型(1=更新推送,2=更新备注)
* @param {string} data.remark - 备注信息
* @param {number} data.user_id - 操作人ID
* @param {string} data.user_name - 操作人姓名
* @returns {Promise} 返回Promise对象,包含请求结果
*/
export function getRoleRecentActivityEditApi(data) {
console.log(data, '===123123123123123===');
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityEdit',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 角色近期要开列表
* @param {{role_id}} data
* @returns
*/
export function getRoleRecentActivityListApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityList',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 角色近期活动列表
* @param {{role_id}} data
* @returns
*/
export function getRecentActivityListApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/recentActivityList',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 账号近期要开活动数
* @param {{member_id}} data
* @returns
*/
export function getRoleRecentActivityNotPushNumApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityNotPushNum',
params: data,
}) })
.then((res) => {
resovle(res);
}) })
.catch((error) => {
reject(error);
});
});
} }
import request from '@/utils/request' import request from '@/utils/request';
import store from '@/store/index' import store from '@/store/index';
// 所属分组下拉 // 所属分组下拉
function returnApi(api){ function returnApi(api) {
return '/sidebar' + api return '/sidebar' + api;
} }
export function procedure_group(data) { export function procedure_group(data) {
return request({ return request({
url: returnApi('/procedure_group/index'), url: returnApi('/procedure_group/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 话术列表 // 话术列表
export function procedureList(data) { export function procedureList(data) {
return request({ return request({
url: returnApi('/procedure/index'), url: returnApi('/procedure/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 删除话术 // 删除话术
...@@ -25,8 +25,8 @@ export function proceduredel(data) { ...@@ -25,8 +25,8 @@ export function proceduredel(data) {
return request({ return request({
url: returnApi('/procedure/del'), url: returnApi('/procedure/del'),
method: 'post', method: 'post',
data data,
}) });
} }
// 批量移动 // 批量移动
...@@ -34,8 +34,8 @@ export function proceduremove(data) { ...@@ -34,8 +34,8 @@ export function proceduremove(data) {
return request({ return request({
url: returnApi('/procedure/move'), url: returnApi('/procedure/move'),
method: 'post', method: 'post',
data data,
}) });
} }
// 新增话术 // 新增话术
...@@ -43,8 +43,8 @@ export function procedureadd(data) { ...@@ -43,8 +43,8 @@ export function procedureadd(data) {
return request({ return request({
url: returnApi('/procedure/add'), url: returnApi('/procedure/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 分组添加/修改 // 分组添加/修改
...@@ -52,8 +52,8 @@ export function procedure_groupAdd(data) { ...@@ -52,8 +52,8 @@ export function procedure_groupAdd(data) {
return request({ return request({
url: returnApi('/procedure_group/add'), url: returnApi('/procedure_group/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 分组删除 // 分组删除
...@@ -61,8 +61,8 @@ export function procedure_groupDel(data) { ...@@ -61,8 +61,8 @@ export function procedure_groupDel(data) {
return request({ return request({
url: returnApi('/procedure_group/del'), url: returnApi('/procedure_group/del'),
method: 'post', method: 'post',
data data,
}) });
} }
// 个人话术移到企业库 // 个人话术移到企业库
...@@ -70,8 +70,8 @@ export function addCompany(data) { ...@@ -70,8 +70,8 @@ export function addCompany(data) {
return request({ return request({
url: returnApi('/procedure/addCompany'), url: returnApi('/procedure/addCompany'),
method: 'post', method: 'post',
data data,
}) });
} }
// 个人话术详情 // 个人话术详情
...@@ -79,8 +79,8 @@ export function procedureInfo(data) { ...@@ -79,8 +79,8 @@ export function procedureInfo(data) {
return request({ return request({
url: returnApi('/procedure/info'), url: returnApi('/procedure/info'),
method: 'post', method: 'post',
data data,
}) });
} }
// 个人话术排序 // 个人话术排序
...@@ -88,8 +88,8 @@ export function procedureSort(data) { ...@@ -88,8 +88,8 @@ export function procedureSort(data) {
return request({ return request({
url: returnApi('/procedure/sort'), url: returnApi('/procedure/sort'),
method: 'post', method: 'post',
data data,
}) });
} }
// 个人话术租排序 // 个人话术租排序
...@@ -97,8 +97,8 @@ export function procedureGroupSort(data) { ...@@ -97,8 +97,8 @@ export function procedureGroupSort(data) {
return request({ return request({
url: returnApi('/procedure_group/sort'), url: returnApi('/procedure_group/sort'),
method: 'post', method: 'post',
data data,
}) });
} }
// 企业话术增至个人 // 企业话术增至个人
...@@ -106,8 +106,8 @@ export function addToPersonal(data) { ...@@ -106,8 +106,8 @@ export function addToPersonal(data) {
return request({ return request({
url: returnApi('/procedure/addToPersonal'), url: returnApi('/procedure/addToPersonal'),
method: 'post', method: 'post',
data data,
}) });
} }
// 话术使用次数 // 话术使用次数
...@@ -115,8 +115,8 @@ export function skillQuote(data) { ...@@ -115,8 +115,8 @@ export function skillQuote(data) {
return request({ return request({
url: '/admin/procedure/quote', url: '/admin/procedure/quote',
method: 'post', method: 'post',
data data,
}) });
} }
/* ----------- 知识库的接口 ---------- */ /* ----------- 知识库的接口 ---------- */
...@@ -125,16 +125,16 @@ export function groupList(data) { ...@@ -125,16 +125,16 @@ export function groupList(data) {
return request({ return request({
url: returnApi('/knowledge_group/index'), url: returnApi('/knowledge_group/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 知识库分组下拉 // 知识库分组下拉
export function libraryIndex(data) { export function libraryIndex(data) {
return request({ return request({
url: returnApi('/knowledge_base/index'), url: returnApi('/knowledge_base/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 新增和编辑 // 新增和编辑
...@@ -142,8 +142,8 @@ export function groupHandle(data) { ...@@ -142,8 +142,8 @@ export function groupHandle(data) {
return request({ return request({
url: returnApi('/knowledge_group/add'), url: returnApi('/knowledge_group/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 删除分组 // 删除分组
...@@ -151,63 +151,63 @@ export function groupDel(data) { ...@@ -151,63 +151,63 @@ export function groupDel(data) {
return request({ return request({
url: returnApi('/knowledge_group/del'), url: returnApi('/knowledge_group/del'),
method: 'post', method: 'post',
data data,
}) });
} }
// 新增知识库任务 // 新增知识库任务
export function addLibraryTask(data) { export function addLibraryTask(data) {
return request({ return request({
url: returnApi('/knowledge_base/add'), url: returnApi('/knowledge_base/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 详情 // 详情
export function libraryTaskView(data) { export function libraryTaskView(data) {
return request({ return request({
url: returnApi('/knowledge_base/view'), url: returnApi('/knowledge_base/view'),
method: 'post', method: 'post',
data data,
}) });
} }
// 编辑 // 编辑
export function libraryTaskEdit(data) { export function libraryTaskEdit(data) {
return request({ return request({
url: returnApi('/knowledge_base/edit'), url: returnApi('/knowledge_base/edit'),
method: 'post', method: 'post',
data data,
}) });
} }
// 删除 // 删除
export function libraryTaskDel(data) { export function libraryTaskDel(data) {
return request({ return request({
url: returnApi('/knowledge_base/del'), url: returnApi('/knowledge_base/del'),
method: 'post', method: 'post',
data data,
}) });
} }
// 批量删除 // 批量删除
export function multipleDel(data) { export function multipleDel(data) {
return request({ return request({
url: returnApi('/knowledge_base/batchDel'), url: returnApi('/knowledge_base/batchDel'),
method: 'post', method: 'post',
data data,
}) });
} // 导入 } // 导入
export function importData(data) { export function importData(data) {
return request({ return request({
url: returnApi('/knowledge_base/importKnowledgeBase'), url: returnApi('/knowledge_base/importKnowledgeBase'),
method: 'post', method: 'post',
data data,
}) });
} }
// 知识库计数 // 知识库计数
export function logClickTime(data) { export function logClickTime(data) {
return request({ return request({
url: returnApi('/knowledge_base/logClickTime'), url: returnApi('/knowledge_base/logClickTime'),
method: 'post', method: 'post',
data data,
}) });
} }
// 问答模块 // 问答模块
...@@ -215,18 +215,17 @@ export function Aihistory(data) { ...@@ -215,18 +215,17 @@ export function Aihistory(data) {
return request({ return request({
url: returnApi('/corp_beta_question_log/history'), url: returnApi('/corp_beta_question_log/history'),
method: 'post', method: 'post',
data data,
}) });
} }
// 同步知识库 // 同步知识库
export function asyncKnowledge(data) { export function asyncKnowledge(data) {
return request({ return request({
url: returnApi('/knowledge_base/syncToCorp'), url: returnApi('/knowledge_base/syncToCorp'),
method: 'post', method: 'post',
data data,
}) });
} }
/* -------------------- 机器人知识库 ----------------------- */ /* -------------------- 机器人知识库 ----------------------- */
...@@ -235,8 +234,8 @@ export function corp_robot_knowledge_add(data) { ...@@ -235,8 +234,8 @@ export function corp_robot_knowledge_add(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/add'), url: returnApi('/corp_robot_knowledge_base/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 机器人知识库列表 // 机器人知识库列表
...@@ -244,48 +243,48 @@ export function corp_robot_knowledge_list(data) { ...@@ -244,48 +243,48 @@ export function corp_robot_knowledge_list(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/index'), url: returnApi('/corp_robot_knowledge_base/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 机器人知识库编辑 // 机器人知识库编辑
export function corp_robot_knowledge_edit(data) { export function corp_robot_knowledge_edit(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/edit'), url: returnApi('/corp_robot_knowledge_base/edit'),
method: 'post', method: 'post',
data data,
}) });
} }
// 机器人知识库详情 // 机器人知识库详情
export function corp_robot_knowledge_view(data) { export function corp_robot_knowledge_view(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/view'), url: returnApi('/corp_robot_knowledge_base/view'),
method: 'post', method: 'post',
data data,
}) });
} }
// 机器人知识库删除 // 机器人知识库删除
export function corp_robot_knowledge_del(data) { export function corp_robot_knowledge_del(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/delete'), url: returnApi('/corp_robot_knowledge_base/delete'),
method: 'post', method: 'post',
data data,
}) });
} }
// 机器人知识库批量删除 // 机器人知识库批量删除
export function corp_robot_knowledge_batchDelete(data) { export function corp_robot_knowledge_batchDelete(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/batchDelete'), url: returnApi('/corp_robot_knowledge_base/batchDelete'),
method: 'post', method: 'post',
data data,
}) });
} }
// 机器人知识库批量导入 // 机器人知识库批量导入
export function corp_robot_knowledge_import(data) { export function corp_robot_knowledge_import(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_base/import'), url: returnApi('/corp_robot_knowledge_base/import'),
method: 'post', method: 'post',
data data,
}) });
} }
/* --------------------机器人知识库分组-----------------------*/ /* --------------------机器人知识库分组-----------------------*/
// 知识库分组列表 // 知识库分组列表
...@@ -293,32 +292,32 @@ export function corp_robot_knowledge_group_index(data) { ...@@ -293,32 +292,32 @@ export function corp_robot_knowledge_group_index(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_group/index'), url: returnApi('/corp_robot_knowledge_group/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 知识库分组新增 // 知识库分组新增
export function corp_robot_knowledge_group_add(data) { export function corp_robot_knowledge_group_add(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_group/add'), url: returnApi('/corp_robot_knowledge_group/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 知识库分组编辑 // 知识库分组编辑
export function corp_robot_knowledge_group_edit(data) { export function corp_robot_knowledge_group_edit(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_group/edit'), url: returnApi('/corp_robot_knowledge_group/edit'),
method: 'post', method: 'post',
data data,
}) });
} }
// 知识库分组删除 // 知识库分组删除
export function corp_robot_knowledge_group_del(data) { export function corp_robot_knowledge_group_del(data) {
return request({ return request({
url: returnApi('/corp_robot_knowledge_group/delete'), url: returnApi('/corp_robot_knowledge_group/delete'),
method: 'post', method: 'post',
data data,
}) });
} }
// AI问答对列表 // AI问答对列表
...@@ -326,8 +325,8 @@ export function AI_list(data) { ...@@ -326,8 +325,8 @@ export function AI_list(data) {
return request({ return request({
url: returnApi('/corp_ai_question_answer/index'), url: returnApi('/corp_ai_question_answer/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 业务下拉 // 业务下拉
...@@ -335,8 +334,8 @@ export function search_condition(data) { ...@@ -335,8 +334,8 @@ export function search_condition(data) {
return request({ return request({
url: '/admin/search_condition', url: '/admin/search_condition',
method: 'post', method: 'post',
data data,
}) });
} }
// 智能体列表 // 智能体列表
...@@ -344,8 +343,8 @@ export function corp_beta_config(data) { ...@@ -344,8 +343,8 @@ export function corp_beta_config(data) {
return request({ return request({
url: '/admin/corp_beta_config/index', url: '/admin/corp_beta_config/index',
method: 'post', method: 'post',
data data,
}) });
} }
// 标记有用/无用 // 标记有用/无用
...@@ -353,22 +352,30 @@ export function markUseful(data) { ...@@ -353,22 +352,30 @@ export function markUseful(data) {
return request({ return request({
url: returnApi('/corp_ai_question_answer/markUseful'), url: returnApi('/corp_ai_question_answer/markUseful'),
method: 'post', method: 'post',
data data,
}) });
} }
// 跨主体分组列表 // 跨主体分组列表
export function cross_corp_robot_knowledge_group_index(data) { export function cross_corp_robot_knowledge_group_index(data) {
return request({ return request({
url: returnApi('/corp_cross_knowledge_group/index'), url: returnApi('/corp_cross_knowledge_group/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 跨主体知识库分组列表 // 跨主体知识库分组列表
export function cross_corp_robot_knowledge_group_getList(data) { export function cross_corp_robot_knowledge_group_getList(data) {
return request({ return request({
url: returnApi('/corp_cross_knowledge_base/getList'), url: returnApi('/corp_cross_knowledge_base/getList'),
method: 'post', method: 'post',
data data,
}) });
}
// 营销面板-话术生成
export function getGenerateProcedureApi(data) {
return request({
url: returnApi('/corp_activity_procedure/generateProcedure'),
method: 'post',
data,
});
} }
// 客户绑定掌游账号列表 // 客户绑定掌游账号列表
import request from '@/utils/request' import request from '@/utils/request';
function returnApi(api) { function returnApi(api) {
return '/sidebar' + api return '/sidebar' + api;
} }
// w 账号绑定列表 // w 账号绑定列表
export function zyouBindMember(data) { export function zyouBindMember(data) {
return request({ return request({
url: returnApi('/external_user/zyouBindMember'), url: returnApi('/external_user/zyouBindMember'),
method: 'post', method: 'post',
data data,
}) });
} }
// 检查账号绑定 // 检查账号绑定
export function checkZyouBind(data) { export function checkZyouBind(data) {
return request({ return request({
url: returnApi('/external_user/checkZyouBind'), url: returnApi('/external_user/checkZyouBind'),
method: 'post', method: 'post',
data data,
}) });
} }
// 绑定掌游账号 // 绑定掌游账号
// 绑定掌游账号 // 绑定掌游账号
...@@ -27,68 +27,67 @@ export function zyouBind(data) { ...@@ -27,68 +27,67 @@ export function zyouBind(data) {
return request({ return request({
url: returnApi('/external_user/zyouBind'), url: returnApi('/external_user/zyouBind'),
method: 'post', method: 'post',
data data,
}) });
} }
export function detailsInfoRequest(data) { export function detailsInfoRequest(data) {
return request({ return request({
url: returnApi('/external_user/info'), url: returnApi('/external_user/info'),
method: 'post', method: 'post',
data data,
}) });
} }
// 是否转端 // 是否转端
export function toTransfer(data) { export function toTransfer(data) {
return request({ return request({
url: returnApi('/external_user/toTransfer'), url: returnApi('/external_user/toTransfer'),
method: 'post', method: 'post',
data data,
}) });
} }
// 同步智能标签 // 同步智能标签
export function syncSessionIntelTag(data) { export function syncSessionIntelTag(data) {
return request({ return request({
url: '/sidebar/group_tag_detail/syncSessionIntelTag', url: '/sidebar/group_tag_detail/syncSessionIntelTag',
method: 'post', method: 'post',
data data,
}) });
} }
// 关联客服 // 关联客服
export function memberBindCser(data) { export function memberBindCser(data) {
return request({ return request({
url: returnApi('/external_user/memberBindCser'), url: returnApi('/external_user/memberBindCser'),
method: 'post', method: 'post',
data data,
}) });
} }
// 修改用户信息 // 修改用户信息
export function editUser(data) { export function editUser(data) {
return request({ return request({
url: returnApi('/external_user/edit'), url: returnApi('/external_user/edit'),
method: 'post', method: 'post',
data data,
}) });
} }
// 修改共享信息 // 修改共享信息
export function shareInfoUpsert(data) { export function shareInfoUpsert(data) {
return request({ return request({
url: returnApi('/external_user/shareInfoUpsert'), url: returnApi('/external_user/shareInfoUpsert'),
method: 'post', method: 'post',
data data,
}) });
} }
// 解绑掌游账号 // 解绑掌游账号
export function zyouUnBind(data) { export function zyouUnBind(data) {
return request({ return request({
url: returnApi('/external_user/zyouUnBind'), url: returnApi('/external_user/zyouUnBind'),
method: 'post', method: 'post',
data data,
}) });
} }
// 获取礼包码列表 // 获取礼包码列表
...@@ -96,16 +95,16 @@ export function getSendingCodeList(data) { ...@@ -96,16 +95,16 @@ export function getSendingCodeList(data) {
return request({ return request({
url: returnApi('/corp_gift_package_list/getSendingCodeList'), url: returnApi('/corp_gift_package_list/getSendingCodeList'),
method: 'post', method: 'post',
data data,
}) });
} }
// 标签 // 标签
export function searchTags(data) { export function searchTags(data) {
return request({ return request({
url: returnApi('/tag/index'), url: returnApi('/tag/index'),
method: 'post', method: 'post',
data data,
}) });
} }
// 通讯录 // 通讯录
...@@ -113,32 +112,32 @@ export function externalUserList(data) { ...@@ -113,32 +112,32 @@ export function externalUserList(data) {
return request({ return request({
url: returnApi('/corp_user/externalUserList'), url: returnApi('/corp_user/externalUserList'),
method: 'post', method: 'post',
data data,
}) });
} }
// 获取图片id // 获取图片id
export function getMediaId(data) { export function getMediaId(data) {
return request({ return request({
url: returnApi('/common/getMedia'), url: returnApi('/common/getMedia'),
method: 'post', method: 'post',
data data,
}) });
} }
// 通讯录红点 // 通讯录红点
export function mailRedTip(data) { export function mailRedTip(data) {
return request({ return request({
url: returnApi('/external_user/redTip'), url: returnApi('/external_user/redTip'),
method: 'post', method: 'post',
data data,
}) });
} }
// 同步通讯录 // 同步通讯录
export function refreshBindMail(data) { export function refreshBindMail(data) {
return request({ return request({
url: returnApi('/external_user/refreshBind'), url: returnApi('/external_user/refreshBind'),
method: 'post', method: 'post',
data data,
}) });
} }
// 搜索客户 // 搜索客户
...@@ -147,24 +146,24 @@ export function remarkSearchSelect(data) { ...@@ -147,24 +146,24 @@ export function remarkSearchSelect(data) {
return request({ return request({
url: returnApi('/follow_user/preview'), url: returnApi('/follow_user/preview'),
method: 'post', method: 'post',
data data,
}) });
} }
// 礼包可发送礼包 // 礼包可发送礼包
export function giftCodeList(data) { export function giftCodeList(data) {
return request({ return request({
url: returnApi('/corp_gift_package_list/getCanSendPackage'), url: returnApi('/corp_gift_package_list/getCanSendPackage'),
method: 'post', method: 'post',
data data,
}) });
} }
// 礼包码发送 // 礼包码发送
export function sendGiftCode(data) { export function sendGiftCode(data) {
return request({ return request({
url: returnApi('/corp_gift_package_list/sendGiftCode'), url: returnApi('/corp_gift_package_list/sendGiftCode'),
method: 'post', method: 'post',
data data,
}) });
} }
// 获取举报授权链接地址 // 获取举报授权链接地址
...@@ -172,8 +171,8 @@ export function getZyouAuthLink(data) { ...@@ -172,8 +171,8 @@ export function getZyouAuthLink(data) {
return request({ return request({
url: returnApi('/corp_zyou_bind/getZyouAuthLink'), url: returnApi('/corp_zyou_bind/getZyouAuthLink'),
method: 'post', method: 'post',
data data,
}) });
} }
// 转游最近发送的记录 5 条 // 转游最近发送的记录 5 条
...@@ -181,32 +180,32 @@ export function getRecentSendLog(data) { ...@@ -181,32 +180,32 @@ export function getRecentSendLog(data) {
return request({ return request({
url: returnApi('/corp_zyou_game_send_log/getRecentSendLog'), url: returnApi('/corp_zyou_game_send_log/getRecentSendLog'),
method: 'post', method: 'post',
data data,
}) });
} }
// 标记转端 // 标记转端
export function markTransScene(data) { export function markTransScene(data) {
return request({ return request({
url: returnApi('/external_user/markTransScene'), url: returnApi('/external_user/markTransScene'),
method: 'post', method: 'post',
data data,
}) });
} }
// 根据用户 id 获取掌权分组 // 根据用户 id 获取掌权分组
export function getZqCserGroup(data) { export function getZqCserGroup(data) {
return request({ return request({
url: returnApi('/common/getZqCserGroup'), url: returnApi('/common/getZqCserGroup'),
method: 'post', method: 'post',
data data,
}) });
} }
// 根据用户 id 获取掌权项目 // 根据用户 id 获取掌权项目
export function getZqCserWxBelong(data) { export function getZqCserWxBelong(data) {
return request({ return request({
url: returnApi('/common/getZqCserWxBelong'), url: returnApi('/common/getZqCserWxBelong'),
method: 'post', method: 'post',
data data,
}) });
} }
// 记录转游发送记录 // 记录转游发送记录
...@@ -214,16 +213,16 @@ export function send_log_add(data) { ...@@ -214,16 +213,16 @@ export function send_log_add(data) {
return request({ return request({
url: returnApi('/corp_zyou_game_send_log/add'), url: returnApi('/corp_zyou_game_send_log/add'),
method: 'post', method: 'post',
data data,
}) });
} }
// 发送渠道密码加密 // 发送渠道密码加密
export function zyouGetMemberLink(data) { export function zyouGetMemberLink(data) {
return request({ return request({
url: returnApi('/session/zyouGetMemberLink'), url: returnApi('/session/zyouGetMemberLink'),
method: 'post', method: 'post',
data data,
}) });
} }
// 我的任务获取红点数组 // 我的任务获取红点数组
...@@ -231,8 +230,8 @@ export function getTaskUnReadData(data) { ...@@ -231,8 +230,8 @@ export function getTaskUnReadData(data) {
return request({ return request({
url: returnApi('/corp_zyou_bind/getTaskUnReadData'), url: returnApi('/corp_zyou_bind/getTaskUnReadData'),
method: 'post', method: 'post',
data data,
}) });
} }
// 我的任务小时红点数字 // 我的任务小时红点数字
...@@ -240,24 +239,24 @@ export function clearTaskUnReadData(data) { ...@@ -240,24 +239,24 @@ export function clearTaskUnReadData(data) {
return request({ return request({
url: returnApi('/corp_zyou_bind/clearTaskUnReadData'), url: returnApi('/corp_zyou_bind/clearTaskUnReadData'),
method: 'post', method: 'post',
data data,
}) });
} }
// w账号绑定客户列表 // w账号绑定客户列表
export function memberBindExternalUser(data) { export function memberBindExternalUser(data) {
return request({ return request({
url: returnApi('/cser_receipt/memberBindExternalUser'), url: returnApi('/cser_receipt/memberBindExternalUser'),
method: 'post', method: 'post',
data data,
}) });
} }
// 删除共享信息 // 删除共享信息
export function shareInfoDel(data) { export function shareInfoDel(data) {
return request({ return request({
url: returnApi('/external_user/shareInfoDel'), url: returnApi('/external_user/shareInfoDel'),
method: 'post', method: 'post',
data data,
}) });
} }
// 跟进总结列表 // 跟进总结列表
...@@ -266,6 +265,14 @@ export function corp_follow_up_summary_index(data) { ...@@ -266,6 +265,14 @@ export function corp_follow_up_summary_index(data) {
return request({ return request({
url: returnApi('/corp_follow_up_summary/index'), url: returnApi('/corp_follow_up_summary/index'),
method: 'post', method: 'post',
data data,
}) });
}
// 话术生成复制
export function corp_activity_procedure_copyUsed(data) {
return request({
url: returnApi('/corp_activity_procedure/copyUsed'),
method: 'post',
data,
});
} }
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 60.1 (88133) - https://sketch.com -->
<title>编辑</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="工作台" transform="translate(-1881.000000, -278.000000)" fill-rule="nonzero">
<g id="编辑" transform="translate(1880.000000, 277.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="20" height="20"></rect>
<path d="M18.0820312,8.68359375 C17.8125,8.68359375 17.59375,8.90234375 17.59375,9.171875 L17.59375,15.5546875 C17.59375,16.9003906 16.4980469,17.9960938 15.1523438,17.9960938 L4.7734375,17.9960938 C3.42773438,17.9960938 2.33203125,16.9003906 2.33203125,15.5546875 L2.33203125,4.67773438 C2.33203125,3.33203125 3.42773438,2.23632812 4.7734375,2.23632812 L11.15625,2.23632812 C11.4257813,2.23632812 11.6445313,2.01757812 11.6445313,1.74804688 C11.6445313,1.47851562 11.4257813,1.25976562 11.15625,1.25976562 L4.7734375,1.25976562 C2.88867188,1.25976562 1.35546875,2.79296875 1.35546875,4.67773438 L1.35546875,15.5527344 C1.35546875,17.4375 2.88867188,18.9707031 4.7734375,18.9707031 L15.1523438,18.9707031 C17.0371094,18.9707031 18.5703125,17.4375 18.5703125,15.5527344 L18.5703125,9.171875 C18.5703125,8.90234375 18.3515625,8.68359375 18.0820312,8.68359375 Z M18.6816406,3.65429687 L16.3417969,1.3984375 C16.2480469,1.30859375 16.1230469,1.25976562 15.9941406,1.26166234 C15.8652344,1.26367187 15.7421875,1.31835937 15.6523438,1.41015625 L14.359375,2.75195312 C14.3515625,2.7578125 14.3457031,2.765625 14.3378906,2.7734375 L6.95898438,10.421875 C6.9296875,10.453125 6.90429688,10.4863281 6.88476563,10.5214844 C6.85742188,10.5605469 6.8359375,10.6035156 6.82226563,10.6484375 L5.66015625,14.2382812 C5.6015625,14.4179687 5.65234375,14.6152344 5.7890625,14.7441406 C5.88085938,14.8300781 6.00195313,14.8769531 6.12304688,14.8769531 C6.18359375,14.8769531 6.24414063,14.8652344 6.30078125,14.84375 L9.73828125,13.4980469 C9.83398438,13.4804687 9.92773438,13.4335937 10,13.3574219 L17.3085937,5.78125 C17.3164062,5.77539062 17.3222656,5.76757812 17.3300781,5.76171875 L18.6953125,4.34570312 C18.8828125,4.15039062 18.8769531,3.84179687 18.6816406,3.65429687 Z M14.6484375,3.85546875 L16.2851562,5.43554688 L9.63671875,12.3300781 L8,10.75 L14.6484375,3.85546875 Z M6.90625,13.5585938 L7.51367188,11.6816406 L8.74609375,12.8378906 L6.90625,13.5585938 Z M17.0175781,4.67773438 L15.3808594,3.09765625 L16.0175781,2.4375 L17.6542969,4.01757813 L17.0175781,4.67773438 Z" id="形状" fill="#666666"></path>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<template>
<div class="expand_image">
<el-image ref="previewImage" class="image" v-if="url" v-bind="$attrs" style="height: 100%;width: 100%;" :src="url"
:preview-src-list="[url]">
<!-- 透传所有普通插槽 -->
<template v-for="(_, name) in $slots" v-slot:[name]>
<slot :name="name" />
</template>
</el-image>
<div class="expand_image_icon">
<div @click="handleLook">
<slot name="icon"></slot>
</div>
</div>
</div>
</template>
<script type="text/javascript">
export default {
name: 'ExpandImage',
inheritAttrs: false,
props:{
/**
* 图片的 URL 地址
* @type {string}
* @default ''
*/
url: {
type: String,
default: ''
},
},
data() {
return {
}
},
methods: {
handleLook() {
this.$nextTick(() => {
this.$refs.previewImage.clickHandler();
});
}
},
created() {
console.log(this.url,'++++++++++++++++');
},
}
</script>
<style lang="scss" scoped>
.expand_image {
position: relative;
&:hover::after {
content: '';
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000;
opacity: .3;
cursor: pointer;
}
.expand_image_icon {
visibility: hidden;
position: absolute;
display: flex;
top: 0;
left: 0;
width: 100%;
height: 100%;
justify-content: center;
align-items: center;
z-index: 1;
}
&:hover .expand_image_icon {
visibility: visible;
cursor: pointer;
}
}
</style>
\ No newline at end of file
<!--
# getRoleList 传入 member_id 获取角色列表
-->
<template>
<el-select v-model="selectedValue" placeholder="请选择" clearable size="small" :style="{ width: width || '100%' }"
v-bind="$attrs" :clearable="false" filterable remote :remote-method="remoteMethod" @clear="handleClear"
v-on="$listeners" @change="handleChange" @visible-change="handleVisibleChange">
<div class="select-dropdown" @scroll="handleScroll">
<el-option v-for="item in RuleList" :key="item.value" :label="item.label" :value="item.value"></el-option>
<div v-if="loading" v-loading="true" class="loading-more">
加载中...
</div>
</div>
</el-select>
</template>
<script lang="jsx">
import { getRoleHoLo } from '@/api/game'
import { debounce } from '@/utils'
export default {
name: 'getRoleList',
props: {
member_id: {
type: [String, Number],
default: ''
},
value: {
type: [String, Number],
default: ''
},
width: {
type: [String, Number],
default: ''
}
},
data() {
return {
RuleList: [],
loading: false,
currentPage: 1,
hasMore: true,
searchQuery: '',
selectedValue: this.value,
_debouncedRemote: null
}
},
watch: {
value(newVal) {
this.selectedValue = newVal
},
member_id(newVal) {
this.getRuleList()
}
},
created() {
this.getRuleList()
},
methods: {
async getRuleList(isLoadMore = false, query) {
// 仅在加载更多时受 hasMore 限制;新检索应始终允许
if (this.loading || (isLoadMore && !this.hasMore)) return
try {
this.loading = true
const keyword = typeof query === 'string' ? query : this.searchQuery
if (!isLoadMore) {
// 新检索时记录关键字
this.searchQuery = keyword || ''
}
const res = await getRoleHoLo({
page: isLoadMore ? this.currentPage + 1 : 1,
page_size: 20,
role_name: keyword,
search_type: 'list',
member_id: this.member_id
})
if (res.status_code === 1 && res.data && res.data.data) {
res.data.data.forEach(item => {
item.server_name ? item.label = `${item.role_name} - ${item.server_name}` : item.label = item.role_name
item.value = item.role_id
})
if (isLoadMore) {
this.RuleList = [...this.RuleList, ...res.data.data]
this.currentPage++
} else {
this.RuleList = res.data.data
this.currentPage = 1
}
this.hasMore = res.data.data.length >= 20
} else {
this.$message.warning(res.data.msg)
}
} catch (error) {
this.$message.error('获取数据失败')
} finally {
this.loading = false
}
},
handleScroll(e) {
const { scrollTop, scrollHeight, clientHeight } = e.target
if (scrollHeight - scrollTop - clientHeight < 50 && this.hasMore) {
this.getRuleList(true, this.searchQuery)
}
},
handleClear() {
this.selectedValue = ''
this.searchQuery = ''
this.$emit('clear')
},
handleChange() {
const roleInfo = this.RuleList.find(item => item.value === this.selectedValue)
this.$emit('selectChange', roleInfo)
},
handleVisibleChange(visible) {
// if (visible) {
// this.getRuleList()
// }
},
remoteMethod(query) {
if (!this._debouncedRemote) {
this._debouncedRemote = debounce((q) => {
this.getRuleList(false, q)
}, 300)
}
this._debouncedRemote(query)
}
}
}
</script>
<style lang="scss" scoped>
.select-dropdown {
max-height: 300px;
overflow-y: auto;
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-thumb {
background-color: #e4e7ed;
border-radius: 3px;
}
}
.loading-more {
text-align: center;
padding: 5px 0;
}
</style>
\ No newline at end of file
...@@ -13,6 +13,7 @@ Vue.use(ElementUI); ...@@ -13,6 +13,7 @@ Vue.use(ElementUI);
// import '@/styles/element-theme-colors.css'; // import '@/styles/element-theme-colors.css';
import '@/styles/index.scss'; import '@/styles/index.scss';
import moment from 'moment' import moment from 'moment'
import '@/styles/tailwind.css'
import VConsole from 'vconsole'; import VConsole from 'vconsole';
import uploading from '@/utils/cos-upload' import uploading from '@/utils/cos-upload'
import errorHandle from '@/utils/errorHandle' import errorHandle from '@/utils/errorHandle'
......
...@@ -852,3 +852,8 @@ li { ...@@ -852,3 +852,8 @@ li {
.el-input__icon{ .el-input__icon{
line-height: 1; line-height: 1;
} }
//弹框内容超出显示滚动
.el-message-box__message {
max-height: 500px !important;
overflow-y: auto !important;
}
\ No newline at end of file
@tailwind base;
@tailwind components;
@tailwind utilities;
<template> <template>
<div class="violationRecord"> <div class="violationRecord">
<el-form <el-form v-loading="loading" class="violationRecordContent" label-width="90px">
v-loading="loading"
class="violationRecordContent"
label-width="90px"
>
<div v-if="violationList.length > 0"> <div v-if="violationList.length > 0">
<div <div v-for="(item, index) in violationList" :key="index" class="contentItem">
v-for="(item, index) in violationList"
:key="index"
class="contentItem"
>
<el-form-item label="违规时间:"> <el-form-item label="违规时间:">
<p>{{ item.violation_time }}</p> <p>{{ item.violation_time }}</p>
</el-form-item> </el-form-item>
...@@ -31,15 +23,9 @@ ...@@ -31,15 +23,9 @@
<el-form-item label="是否允许申诉:"> <el-form-item label="是否允许申诉:">
<p class="error">{{ item.appeal_name }}</p> <p class="error">{{ item.appeal_name }}</p>
</el-form-item> </el-form-item>
<el-form-item <el-form-item v-if="item.remake != ''" label="详情:">
v-if="item.remake != ''"
label="详情:"
>
<!-- AI自动封禁 --> <!-- AI自动封禁 -->
<div <div v-if="item.information_type === 6" class="remarkType">
v-if="item.information_type === 6"
class="remarkType"
>
<p> <p>
<span class="label">所属项目:</span><span>{{ item.newRemake.project || "" }}</span> <span class="label">所属项目:</span><span>{{ item.newRemake.project || "" }}</span>
</p> </p>
...@@ -66,29 +52,16 @@ ...@@ -66,29 +52,16 @@
</p> </p>
</div> </div>
<!-- 其他类型 --> <!-- 其他类型 -->
<div <div v-else class="remarkType">
v-else <div v-if="item.remake.indexOf('src=') !== -1" class="remakeImage">
class="remarkType"
>
<div
v-if="item.remake.indexOf('src=') !== -1"
class="remakeImage"
>
<p class="watchDetails"> <p class="watchDetails">
<el-button <el-button type="text" icon="el-icon-view" size="medium"
type="text"
icon="el-icon-view"
size="medium"
style="z-index: 1; position: relative; margin-left: 5px" style="z-index: 1; position: relative; margin-left: 5px"
@click="showRemake(item.remake)" @click="showRemake(item.remake)">查看大图</el-button>
>查看大图</el-button>
</p> </p>
<p class="remakeDetails" v-html="item.remake"></p> <p class="remakeDetails" v-html="item.remake"></p>
</div> </div>
<div <div v-else class="remakeImage">
v-else
class="remakeImage"
>
<p class="remakeDetails" v-html="item.remake"></p> <p class="remakeDetails" v-html="item.remake"></p>
</div> </div>
</div> </div>
...@@ -96,38 +69,14 @@ ...@@ -96,38 +69,14 @@
<!-- 命中统计表格 --> <!-- 命中统计表格 -->
<div v-if="item && item.newRemake && item.newRemake.hit"> <div v-if="item && item.newRemake && item.newRemake.hit">
<div <div class="title" style="font-weight: 600; margin-bottom: 10px">
class="title"
style="font-weight: 600; margin-bottom: 10px"
>
命中统计 命中统计
</div> </div>
<el-table <el-table :data="item.newRemake.hit" size="medium" style="width: 100%" class="hit-statistics-table">
:data="item.newRemake.hit" <el-table-column prop="content" label="文本内容" show-overflow-tooltip />
size="medium" <el-table-column prop="type" label="命中类型" width="120" />
style="width: 100%" <el-table-column prop="key" label="关键字" width="120" show-overflow-tooltip />
class="hit-statistics-table" <el-table-column label="时间" width="180">
>
<el-table-column
prop="content"
label="文本内容"
show-overflow-tooltip
/>
<el-table-column
prop="type"
label="命中类型"
width="120"
/>
<el-table-column
prop="key"
label="关键字"
width="120"
show-overflow-tooltip
/>
<el-table-column
label="时间"
width="180"
>
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<span>{{ $moment(row.time).format("YYYY-MM-DD HH:mm:ss") }}</span> <span>{{ $moment(row.time).format("YYYY-MM-DD HH:mm:ss") }}</span>
</template> </template>
...@@ -138,27 +87,14 @@ ...@@ -138,27 +87,14 @@
</div> </div>
<!-- 无数据状态 --> <!-- 无数据状态 -->
<div <div v-if="!loading && violationList.length == 0" class="noContent rowFlex allCenter">
v-if="!loading && violationList.length == 0"
class="noContent rowFlex allCenter"
>
<noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" /> <noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" />
</div> </div>
</el-form> </el-form>
<!-- 查看大图弹窗 --> <!-- 查看大图弹窗 -->
<el-dialog <el-dialog title="查看大图" :visible.sync="imageLayer" width="320px" center append-to-body @close="imageLayer = false">
title="查看大图" <div v-html="imageSrc" class="layerImage"></div>
:visible.sync="imageLayer"
width="320px"
center
append-to-body
@close="imageLayer = false"
>
<div
v-html="imageSrc"
class="layerImage"
></div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
...@@ -274,7 +210,8 @@ export default { ...@@ -274,7 +210,8 @@ export default {
border-bottom: 1px dashed #ebeef5; border-bottom: 1px dashed #ebeef5;
margin-bottom: 20px; margin-bottom: 20px;
padding-bottom: 20px; padding-bottom: 20px;
::v-deep .el-form-item__label{
::v-deep .el-form-item__label {
line-height: 40px; line-height: 40px;
} }
...@@ -362,6 +299,7 @@ export default { ...@@ -362,6 +299,7 @@ export default {
.remakeDetails { .remakeDetails {
word-break: break-all; word-break: break-all;
::v-deep img { ::v-deep img {
max-width: 200px; max-width: 200px;
max-height: 200px; max-height: 200px;
......
<!--
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-06-25 16:46:39
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-09-02 15:38:31
* @FilePath: /company_app/src/views/applyRecord.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template> <template>
<div class="gift-tab-container-errorHanledle"> <div class="gift-tab-container-errorHanledle">
<el-tabs v-model="activeTab"> <el-tabs v-model="activeTab">
<el-tab-pane label="举报记录" name="report">
<report v-if="activeTab === 'report'" />
</el-tab-pane>
<el-tab-pane label="误操作" name="errorHandle"> <el-tab-pane label="误操作" name="errorHandle">
<errorHandle v-if="activeTab=='errorHandle'"></errorHandle> <errorHandle v-if="activeTab == 'errorHandle'"></errorHandle>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="转区申请" name="serve"> <el-tab-pane label="转区申请" name="serve">
<AreaTransferApply v-if="activeTab=='serve'" /> <AreaTransferApply v-if="activeTab == 'serve'" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="转端申请" name="terminal"> <el-tab-pane label="转端申请" name="terminal">
<TerminalTransfer v-if="activeTab=='terminal'" /> <TerminalTransfer v-if="activeTab == 'terminal'" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
...@@ -17,43 +28,51 @@ ...@@ -17,43 +28,51 @@
import AreaTransferApply from './components/ApplyRecords/AreaTransferApply.vue' import AreaTransferApply from './components/ApplyRecords/AreaTransferApply.vue'
import errorHandle from './components/ApplyRecords/errorHandle.vue' import errorHandle from './components/ApplyRecords/errorHandle.vue'
import TerminalTransfer from './components/ApplyRecords/TerminaTranfer.vue' import TerminalTransfer from './components/ApplyRecords/TerminaTranfer.vue'
import report from './components/roleInfo/report.vue'
export default { export default {
name: 'applyRecord', name: 'applyRecord',
components: { components: {
AreaTransferApply, AreaTransferApply,
errorHandle, errorHandle,
TerminalTransfer TerminalTransfer,
report
}, },
data() { data() {
return { return {
activeTab: 'errorHandle' activeTab: 'report'
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.gift-tab-container-errorHanledle { .gift-tab-container-errorHanledle {
//padding: 20px; //padding: 20px;
width: 100%; width: 100%;
height: 100%; height: 100%;
padding-top: 10px; padding-top: 10px;
background: #fff; background: #fff;
::v-deep .el-tabs{
::v-deep .el-tabs {
height: calc(100% - 40px); height: calc(100% - 40px);
} }
::v-deep .el-tabs__content{
::v-deep .el-tabs__content {
height: 100%; height: 100%;
} }
::v-deep .el-tab-pane{
::v-deep .el-tab-pane {
height: 100%; height: 100%;
} }
::v-deep .el-tabs .el-tabs__header{
::v-deep .el-tabs .el-tabs__header {
margin: 0; margin: 0;
// height: 60px; // height: 60px;
} }
::v-deep .el-tabs__nav-next, ::v-deep .el-tabs__nav-prev{
::v-deep .el-tabs__nav-next,
::v-deep .el-tabs__nav-prev {
line-height: 50px; line-height: 50px;
} }
} }
</style> </style>
\ No newline at end of file \ No newline at end of file
...@@ -37,11 +37,12 @@ ...@@ -37,11 +37,12 @@
<div class="terminaItemRight columnFlex columnCenter"> <div class="terminaItemRight columnFlex columnCenter">
<el-button v-if="item.approval_status == 4 && item.related_request_id == 0" type="primary" size="mini" <el-button v-if="item.approval_status == 4 && item.related_request_id == 0" type="primary" size="mini"
style="margin-bottom:15px;" @click.stop="resubmitApproval(item)">重新提交</el-button> style="margin-bottom:15px;" @click.stop="resubmitApproval(item)">重新提交</el-button>
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" /> <!-- 改成 svg-icon 图标 -->
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" /> <svg-icon v-if="item.approval_status == 1" icon-class="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" /> <svg-icon v-else-if="item.approval_status == 2" icon-class="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" /> <svg-icon v-else-if="item.approval_status == 3" icon-class="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" /> <svg-icon v-else-if="item.approval_status == 4" icon-class="shenpi4" class="icon" />
<svg-icon v-else-if="item.approval_status == 5" icon-class="shenpi5" class="icon" />
</div> </div>
</div> </div>
<!-- 审批进度 --> <!-- 审批进度 -->
......
<template> <template>
<el-drawer <el-drawer title="新增关联账号" :visible="show" size="360px" :append-to-body="true" @close="close">
title="新增关联账号"
:visible="show"
size="360px"
:append-to-body="true"
@close="close"
>
<div class="content"> <div class="content">
<el-form <el-form ref="form" :model="form" label-position="top" :rules="rules" label-width="120px">
ref="form"
:model="form"
label-position="top"
:rules="rules"
label-width="120px"
>
<div class="inputContent"> <div class="inputContent">
<el-form-item <el-form-item label="请输入w账号" prop="username">
label="请输入w账号" <el-input v-model.trim="form.username" placeholder="请输入w账号" class="input-with-select">
prop="username"
>
<el-input
v-model.trim="form.username"
placeholder="请输入w账号"
class="input-with-select"
>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="请输入主游戏名" prop="main_game_id">
label="请输入主游戏名" <el-select v-model="form.main_game_id" filterable remote clearable reserve-keyword placeholder="请输入主游戏名"
prop="main_game_id" style="width: 100%;" :remote-method="remoteMethod" :loading="loading" @focus="gameNameList = optionsList">
> <el-option v-for="item in gameNameList" :key="item.value" :label="item.label" :value="item.value">
<el-select
v-model="form.main_game_id"
filterable
remote
clearable
reserve-keyword
placeholder="请输入主游戏名"
style="width: 100%;"
:remote-method="remoteMethod"
:loading="loading"
@focus="gameNameList=optionsList"
>
<el-option
v-for="item in gameNameList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="请输入区服" prop="server_info">
label="请输入区服" <el-select v-model.trim="form.server_info" filterable remote :disabled="form.main_game_id == ''" clearable
prop="server_info" style="width: 100%;" reserve-keyword placeholder="请先选择主游戏" :remote-method="remoteMethodServer"
> :loading="loading">
<el-select <el-option v-for="item in serverNameList" :key="item.id" :label="item.label" :value="item.value">
v-model.trim="form.server_info"
filterable
remote
:disabled="form.main_game_id==''"
clearable
style="width: 100%;"
reserve-keyword
placeholder="请先选择主游戏"
:remote-method="remoteMethodServer"
:loading="loading"
>
<el-option
v-for="item in serverNameList"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="请输入角色名" prop="role_name">
label="请输入角色名" <el-input v-model.trim="form.role_name" placeholder="请输入角色" class="input-with-select">
prop="role_name"
>
<el-input
v-model.trim="form.role_name"
placeholder="请输入角色"
class="input-with-select"
>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" size="small" @click="onSubmit">搜索</el-button>
type="primary"
size="small"
@click="onSubmit"
>搜索</el-button>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
...@@ -100,24 +35,16 @@ ...@@ -100,24 +35,16 @@
<div class="bind-account-title"> <div class="bind-account-title">
账号列表 账号列表
</div> </div>
<userTable <userTable :list="tableList" @checkedTag="checkedTag" />
:list="tableList"
@checkedTag="checkedTag"
/>
</div> </div>
<!-- <div class="line"></div> w92865226508--> <!-- <div class="line"></div> w92865226508-->
<div <div v-if="userDetails.username" class="account_select_userInfo">
v-if="userDetails.username"
class="account_select_userInfo"
>
<div class="bind-account-title" style="margin-top: 20px;"> <div class="bind-account-title" style="margin-top: 20px;">
账号详情 账号详情
</div> </div>
<div class="item rowFlex columnCenter"><span class="label">账号</span> <div class="item rowFlex columnCenter"><span class="label">账号</span>
<p class="text">{{ userDetails.username }}</p> <span <p class="text">{{ userDetails.username }}</p> <span v-if="userDetails.account_type == 2"
v-if="userDetails.account_type==2" class="account_type"></span>
class="account_type"
></span>
</div> </div>
<div class="item rowFlex columnCenter"><span class="label">获客渠道</span> <div class="item rowFlex columnCenter"><span class="label">获客渠道</span>
<p class="text">{{ userDetails.channel_name }}</p> <p class="text">{{ userDetails.channel_name }}</p>
...@@ -141,10 +68,10 @@ ...@@ -141,10 +68,10 @@
<p class="text">{{ userDetails.mobile }}</p> <p class="text">{{ userDetails.mobile }}</p>
</div> </div>
<div class="item rowFlex columnCenter"><span class="label">染色时间</span> <div class="item rowFlex columnCenter"><span class="label">染色时间</span>
<p class="text">{{ moment( userDetails.seq_time * 1000).format('YYYY-MM-DD') }}</p> <p class="text">{{ moment(userDetails.seq_time * 1000).format('YYYY-MM-DD') }}</p>
</div> </div>
<div class="item rowFlex columnCenter"><span class="label">注册时间</span> <div class="item rowFlex columnCenter"><span class="label">注册时间</span>
<p class="text">{{ moment( userDetails.reg_time * 1000).format('YYYY-MM-DD') }}</p> <p class="text">{{ moment(userDetails.reg_time * 1000).format('YYYY-MM-DD') }}</p>
</div> </div>
<div class="item rowFlex columnCenter"><span class="label">登录系统</span> <div class="item rowFlex columnCenter"><span class="label">登录系统</span>
<p class="text">{{ userDetails.last_login_os }}</p> <p class="text">{{ userDetails.last_login_os }}</p>
...@@ -157,29 +84,16 @@ ...@@ -157,29 +84,16 @@
</div> </div>
</div> </div>
</div> </div>
<page <page class="pageInfo" :page-info="pageInfo" @requestNextPage="requestNextPage" />
class="pageInfo"
:page-info="pageInfo"
@requestNextPage="requestNextPage"
/>
<span class="dialog-footer rowFlex"> <span class="dialog-footer rowFlex">
<el-button <el-button class="btn" type="primary" size="small" :disabled="!userDetails.id" @click="confirmSubmit">
class="btn" </el-button>
type="primary" <el-button class="btn" size="small" @click="close">取 消</el-button>
size="small"
:disabled="!userDetails.id"
@click="confirmSubmit"
>确 定</el-button>
<el-button
class="btn"
size="small"
@click="close"
>取 消</el-button>
</span> </span>
</el-drawer> </el-drawer>
</template> </template>
<script type="text/javascript"> <script type="text/javascript">
import moment from 'moment' import moment from 'moment'
import userTable from './userTable.vue' import userTable from './userTable.vue'
import { getRoleHoLo, memberView, selectSearch } from '@/api/game' import { getRoleHoLo, memberView, selectSearch } from '@/api/game'
...@@ -419,32 +333,37 @@ ...@@ -419,32 +333,37 @@
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-drawer { ::v-deep .el-drawer {
height: 100%; height: 100%;
overflow: auto; overflow: auto;
} }
.bind-account-title{
.bind-account-title {
font-size: 16px; font-size: 16px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
text-align: left; text-align: left;
margin-bottom: 10px; margin-bottom: 10px;
} }
.content {
.content {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
padding-bottom: 200px; padding-bottom: 200px;
padding: 0 10px; padding: 0 10px;
.inputContent { .inputContent {
width: 100%; width: 100%;
} }
.info { .info {
width: 100%; width: 100%;
margin-top: 30px; margin-top: 30px;
overflow: auto; overflow: auto;
.table { .table {
width: 100%; width: 100%;
min-width: 500px; min-width: 500px;
...@@ -460,15 +379,18 @@ ...@@ -460,15 +379,18 @@
height: 70%; height: 70%;
border-right: 1px dashed #e0e0e0; border-right: 1px dashed #e0e0e0;
} }
.account_select_userInfo { .account_select_userInfo {
width: 100%; width: 100%;
height: auto; height: auto;
padding-left: 20px; padding-left: 20px;
margin-top: -20px; margin-top: -20px;
margin-bottom: 150px; margin-bottom: 150px;
.item { .item {
width: 100%; width: 100%;
margin-top: 20px; margin-top: 20px;
.label { .label {
width: 30%; width: 30%;
font-size: 14px; font-size: 14px;
...@@ -478,6 +400,7 @@ ...@@ -478,6 +400,7 @@
text-align: left; text-align: left;
margin-right: 20px; margin-right: 20px;
} }
.text { .text {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -488,29 +411,33 @@ ...@@ -488,29 +411,33 @@
} }
} }
} }
.account_table{
.account_table {
width: 100%; width: 100%;
height: auto; height: auto;
overflow: auto; overflow: auto;
} }
.account_type {
.account_type {
color: #f56c6c; color: #f56c6c;
font-weight: bold; font-weight: bold;
margin-left: 5px; margin-left: 5px;
background: #f7eded; background: #f7eded;
padding: 2px 5px; padding: 2px 5px;
border-radius: 3px; border-radius: 3px;
} }
.pageInfo {
.pageInfo {
width: calc(100% - 20px); width: calc(100% - 20px);
height: 82px; height: 82px;
position: absolute; position: absolute;
right: 20px; right: 20px;
bottom: 60px; bottom: 60px;
background: #fff; background: #fff;
} }
.dialog-footer {
.dialog-footer {
width: calc(100% - 20px); width: calc(100% - 20px);
position: absolute; position: absolute;
right: 20px; right: 20px;
...@@ -521,16 +448,15 @@ ...@@ -521,16 +448,15 @@
justify-content: flex-end; justify-content: flex-end;
background: #fff; background: #fff;
z-index: 10; z-index: 10;
.btn { .btn {
width: 84px; width: 84px;
height: 32px; height: 32px;
} }
} }
</style> </style>
<style> <style>
::v-deep .el-select-dropdown { ::v-deep .el-select-dropdown {
min-width: 210px !important; min-width: 210px !important;
} }
</style> </style>
\ No newline at end of file
\ No newline at end of file
...@@ -3,10 +3,14 @@ ...@@ -3,10 +3,14 @@
<div ref="giftList" class="gift-list" @scroll="handleScroll"> <div ref="giftList" class="gift-list" @scroll="handleScroll">
<div v-for="item in giftList" :key="item._id" class="gift-item"> <div v-for="item in giftList" :key="item._id" class="gift-item">
<div class="gift-info"> <div class="gift-info">
<div v-if="item.gift_package_group_name ">分组: {{ item.gift_package_group_name }}</div> <div v-if="item.gift_package_group_name">分组: {{ item.gift_package_group_name }}</div>
<div>礼包名称: {{ item.gift_package_name }}</div> <div>礼包名称: {{ item.gift_package_name }}</div>
<div>发送时间: {{ item.send_time }}</div> <div>发送时间: {{ item.send_time }}</div>
<div>礼包码: {{ item.code }}</div> <div>礼包码: {{ item.code }}</div>
<div>领取角色: <span v-if="item.role_name && item.role_name != 0">{{ item.role_name }}</span> <span
v-else>-</span>
</div>
<div>W 账号: {{ item.username || '-' }}</div>
<div class="rowFlex spaceBetween columnCenter gift-sender"> <div class="rowFlex spaceBetween columnCenter gift-sender">
<div>发送客服: {{ item.cser_name }}</div> <div>发送客服: {{ item.cser_name }}</div>
<i class="el-icon-document-copy" style="cursor: pointer;" @click="handleCopy(item.code)"></i> <i class="el-icon-document-copy" style="cursor: pointer;" @click="handleCopy(item.code)"></i>
...@@ -16,18 +20,17 @@ ...@@ -16,18 +20,17 @@
<div v-if="loading" class="loading-more">加载中...</div> <div v-if="loading" class="loading-more">加载中...</div>
<div v-if="!hasMore && giftList.length > 0" class="no-more">没有更多数据了</div> <div v-if="!hasMore && giftList.length > 0" class="no-more">没有更多数据了</div>
<div v-if="giftList.length == 0" class="noContent rowFlex allCenter"> <div v-if="giftList.length == 0" class="noContent rowFlex allCenter">
<noContent/> <noContent />
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script>
<script>
import Clipboard from 'clipboard' import Clipboard from 'clipboard'
import { getSendingCodeList } from '@/api/works' import { getSendingCodeList } from '@/api/works'
import { debounce,copyText,sendChatMessage } from '@/utils/index' import { debounce, copyText, sendChatMessage } from '@/utils/index'
import { mapState } from 'vuex' import { mapState } from 'vuex'
export default { export default {
name: 'wxGift', name: 'wxGift',
data() { data() {
return { return {
...@@ -69,7 +72,7 @@ import Clipboard from 'clipboard' ...@@ -69,7 +72,7 @@ import Clipboard from 'clipboard'
this.loading = false this.loading = false
} }
}, },
handleScroll: debounce(function(e) { handleScroll: debounce(function (e) {
const { scrollHeight, scrollTop, clientHeight } = e.target const { scrollHeight, scrollTop, clientHeight } = e.target
if (scrollHeight - scrollTop - clientHeight < 50) { if (scrollHeight - scrollTop - clientHeight < 50) {
this.fetchGiftList() this.fetchGiftList()
...@@ -87,11 +90,11 @@ import Clipboard from 'clipboard' ...@@ -87,11 +90,11 @@ import Clipboard from 'clipboard'
// }) // })
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wx-gift-container { .wx-gift-container {
height: 100%; height: 100%;
width: 100%; width: 100%;
background-color: #fff; background-color: #fff;
...@@ -106,11 +109,13 @@ import Clipboard from 'clipboard' ...@@ -106,11 +109,13 @@ import Clipboard from 'clipboard'
background: #F7F8FA; background: #F7F8FA;
border-radius: 12px; border-radius: 12px;
border: 1px solid #E5E6EB; border: 1px solid #E5E6EB;
margin-bottom:12px; margin-bottom: 12px;
.gift-info { .gift-info {
div{ div {
line-height: 26px; line-height: 26px;
} }
.gift-name { .gift-name {
font-weight: 400; font-weight: 400;
font-size: 14px; font-size: 14px;
...@@ -118,6 +123,7 @@ import Clipboard from 'clipboard' ...@@ -118,6 +123,7 @@ import Clipboard from 'clipboard'
text-align: left; text-align: left;
font-style: normal; font-style: normal;
} }
.gift-code { .gift-code {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -129,6 +135,7 @@ import Clipboard from 'clipboard' ...@@ -129,6 +135,7 @@ import Clipboard from 'clipboard'
color: #323335; color: #323335;
text-align: justify; text-align: justify;
font-style: normal; font-style: normal;
span { span {
color: #323335; color: #323335;
font-size: 14px; font-size: 14px;
...@@ -158,7 +165,8 @@ import Clipboard from 'clipboard' ...@@ -158,7 +165,8 @@ import Clipboard from 'clipboard'
line-height: 18px; line-height: 18px;
text-align: justify; text-align: justify;
font-style: normal; font-style: normal;
i{
i {
color: #00BF8A; color: #00BF8A;
font-size: 14px; font-size: 14px;
} }
...@@ -175,5 +183,5 @@ import Clipboard from 'clipboard' ...@@ -175,5 +183,5 @@ import Clipboard from 'clipboard'
font-size: 13px; font-size: 13px;
} }
} }
} }
</style> </style>
\ No newline at end of file \ No newline at end of file
<template> <template>
<el-select <el-select v-model="resulte" v-loadmore="loadMoreList" filterable remote :disabled="disabled"
v-model="resulte" :remote-method="remoteMethod" :placeholder="placeholder" :clearable='false' reserve-keyword :loading="loading"
v-loadmore="loadMoreList" @change="selectChange">
filterable <el-option v-for="(item, index) in searchUserOption" :key="index" :value="item?.role_id || item.id"
remote :label="item.role_name" style="height:50px;">
:disabled="disabled"
:remote-method="remoteMethod"
:placeholder="placeholder"
:clearable='false'
reserve-keyword
:loading="loading"
@change="selectChange"
>
<el-option
v-for="(item,index) in searchUserOption"
:key="index"
:value="item.role_id || item.id"
:label="item.role_name"
style="height:50px;"
>
<div class="rowFlex columnCenter selectItem"> <div class="rowFlex columnCenter selectItem">
<!-- 没有头像 --> <!-- 没有头像 -->
<!-- <el-image v-if="item.avata" fit="fill" :src="item.avatar" class="tableImage "></el-image> --> <!-- <el-image v-if="item.avata" fit="fill" :src="item.avatar" class="tableImage "></el-image> -->
<div class="infoSpan columnFlex rowCenter"> <div class="infoSpan columnFlex rowCenter">
<p class="hidden">{{ item.role_name &&item.role_name!=''?item.game_name+' - '+item.server_name+' - '+item.role_name:'' }}</p> <p class="hidden">
<p class="rowFlex columnCenter">角色名:<label class="hidden" style="max-width:120px;">{{ item.role_name }}</label></p> {{ item.role_name && item.role_name != '' ? item.game_name + ' - ' + item.server_name + ' -
'+item.role_name:'' }}
</p>
<p class="rowFlex columnCenter">角色名:<label class="hidden" style="max-width:120px;">
{{ item.role_name }}
</label>
</p>
</div> </div>
</div> </div>
</el-option> </el-option>
</el-select> </el-select>
</template> </template>
<script> <script>
import { roleList } from '@/api/game' import { roleList } from '@/api/game'
import { mapState } from 'vuex' import { mapState } from 'vuex'
export default { export default {
...@@ -128,28 +119,33 @@ ...@@ -128,28 +119,33 @@
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.selectItem{ .selectItem {
height: 50px; height: 50px;
} }
.infoSpan{
.infoSpan {
font-size: 12px; font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
max-width: 250px; max-width: 250px;
height: 50px; height: 50px;
p{
font-size:12px;max-width:100%; p {
font-size: 12px;
max-width: 100%;
line-height: 20px; line-height: 20px;
} }
span{
color:#FFA81D; span {
} color: #FFA81D;
} }
.tableImage{ }
width:30px;height:30px;
.tableImage {
width: 30px;
height: 30px;
border-radius: 30px; border-radius: 30px;
margin-right: 10px; margin-right: 10px;
} }
</style> </style>
\ No newline at end of file
\ No newline at end of file
<!--
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-08-28 15:59:46
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-09-02 09:51:24
* @FilePath: /company_wx_frontend/src/views/works/component/chat/giftCodeDialog.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<el-dialog title="请确认发放的角色" :visible="dialogVisible" class="giftCodeDialogForm" width="360px" @close="closeDialog">
<p class="font12 mb-[10px] mt-[-10px]">即将发送召回礼包<span v-if="gameName" style="color: #00BF8A;"> ({{ gameName
}})</span>,发送后可在礼包记录中查看</p>
<el-form :model="form" ref="giftCodeDialogForm" label-width="80px" :rules="rules">
<el-form-item label="账号ID:" prop="member_id">
<el-select style="width: 320px;" :clearable="false" @change="handleMemberIdChange"
v-model="form.member_id" placeholder="请选择账号ID">
<el-option v-for="item in bindGameUserList" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="角色ID:" prop="role_id">
<getRoleList v-model="form.role_id" width="320px" placeholder="请选择角色" :member_id="form.member_id"
@selectChange="handleSelectionChange" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="closeDialog">取消</el-button>
<el-button type="primary" size="mini" @click="getGiftCodeSubmit('send')">确定</el-button>
<el-button type="text" size="mini" @click="getGiftCodeSubmit('copy')">仅复制</el-button>
</div>
</el-dialog>
</template>
<script>
import getRoleList from '@/components/getRoleList.vue'
import { getRoleHoLo } from '@/api/game'
import { mapState } from 'vuex'
export default {
props: {
dialogVisible: {
type: Boolean,
default: false
},
gameName: {
type: String,
default: ''
}
},
components: {
getRoleList
},
data() {
return {
form: {
member_id: '',
username: '',
role_id: '',
role_name: '',
},
rules: {
member_id: [{ required: true, message: '请选择账号ID', trigger: 'change' }],
role_id: [{ required: true, message: '请选择角色ID', trigger: 'change' }]
},
getRoleHoLo: getRoleHoLo,
gift_code: [],
roleList: [],
pageInfo: {
page: 1,
page_size: 10
},
loading: false
}
},
mounted() {
this.form.member_id = this.accountSelect
this.form.username = this.bindGameUserList.find(item => item.member_id === this.accountSelect).username
},
computed: {
...mapState('game', ['accountSelect', 'bindGameUserList'])
},
methods: {
handleMemberIdChange(value) {
this.form.role_id = ''
this.form.role_name = ''
const userInfo = this.bindGameUserList.find(item => item.value === value)
this.form.username = userInfo.label || userInfo.username
this.form.member_id = value
},
handleSelectionChange(roleInfo) {
console.log(roleInfo, 'roleInfo')
this.form.role_name = roleInfo.label || ''
},
closeDialog() {
this.$emit('update:dialogVisible', false)
},
getGiftCodeSubmit(type) {
this.$refs.giftCodeDialogForm.validate((valid) => {
if (valid) {
this.$emit('update:dialogVisible', false)
this.$emit('result', this.form, type)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.giftCodeDialogForm {
.dialog-footer {
border: none;
padding: 0;
}
::v-deep .el-input__inner {
font-size: 14px;
width: 240px;
}
::v-deep .el-form-item__label {
line-height: 40px;
}
}
</style>
\ No newline at end of file
...@@ -12,14 +12,15 @@ ...@@ -12,14 +12,15 @@
<!-- 转端 --> <!-- 转端 -->
<el-collapse v-if="activeName == '1' && conversionGameList.length > 0" :disabled="disabled" <el-collapse v-if="activeName == '1' && conversionGameList.length > 0" :disabled="disabled"
@change="conversionChangeOld"> @change="conversionChangeOld">
<el-collapse-item v-for="(item, index) in conversionGameList" :key="index" :name="item.game_type"> <el-collapse-item class="mb-[10px]" v-for="(item, index) in conversionGameList" :key="index"
:name="item.game_type">
<template slot="title"> <template slot="title">
<div class="title-with-icon"> <div class="title-with-icon">
<img v-if="item.game_type == 1" src="@/assets/icon/svg/wxgame.svg" class="game-icon" alt="微信小游戏"> <svg-icon v-if="item.game_type == 1" icon-class="wxgame" class="game-icon" />
<img v-else-if="item.game_type == 5" src="@/assets/icon/svg/douyin.svg" class="game-icon" alt="抖音小游戏"> <svg-icon v-else-if="item.game_type == 5" icon-class="douyin" class="game-icon" />
<img v-else-if="item.game_type == 3" src="@/assets/icon/svg/Android.svg" class="game-icon" alt="安卓游戏"> <svg-icon v-else-if="item.game_type == 3" icon-class="Android" class="game-icon" />
<img v-else-if="item.game_type == 4" src="@/assets/icon/svg/IOS.svg" class="game-icon" alt="IOS游戏"> <svg-icon v-else-if="item.game_type == 4" icon-class="IOS" class="game-icon" />
<img v-else-if="item.game_type == 2" src="@/assets/icon/svg/H5.svg" class="game-icon" alt="H5游戏"> <svg-icon v-else-if="item.game_type == 2" icon-class="H5" class="game-icon" />
{{ item.game_text }} {{ item.game_text }}
</div> </div>
</template> </template>
...@@ -62,11 +63,11 @@ ...@@ -62,11 +63,11 @@
<el-collapse-item v-for="(item, index) in recallGameList" :key="index" :name="item.game_type"> <el-collapse-item v-for="(item, index) in recallGameList" :key="index" :name="item.game_type">
<template slot="title"> <template slot="title">
<div class="title-with-icon"> <div class="title-with-icon">
<img v-if="item.game_type == 1" src="@/assets/icon/svg/wxgame.svg" class="game-icon" alt="微信小游戏"> <svg-icon v-if="item.game_type == 1" icon-class="wxgame" class="game-icon" />
<img v-else-if="item.game_type == 5" src="@/assets/icon/svg/douyin.svg" class="game-icon" alt="抖音小游戏"> <svg-icon v-else-if="item.game_type == 5" icon-class="douyin" class="game-icon" />
<img v-else-if="item.game_type == 3" src="@/assets/icon/svg/Android.svg" class="game-icon" alt="安卓游戏"> <svg-icon v-else-if="item.game_type == 3" icon-class="Android" class="game-icon" />
<img v-else-if="item.game_type == 4" src="@/assets/icon/svg/IOS.svg" class="game-icon" alt="IOS游戏"> <svg-icon v-else-if="item.game_type == 4" icon-class="IOS" class="game-icon" />
<img v-else-if="item.game_type == 2" src="@/assets/icon/svg/H5.svg" class="game-icon" alt="H5游戏"> <svg-icon v-else-if="item.game_type == 2" icon-class="H5" class="game-icon" />
{{ item.game_text }} {{ item.game_text }}
</div> </div>
</template> </template>
...@@ -106,17 +107,14 @@ ...@@ -106,17 +107,14 @@
<el-collapse-item v-for="(item, index) in regGameList" :key="index" :name="item.label"> <el-collapse-item v-for="(item, index) in regGameList" :key="index" :name="item.label">
<template slot="title"> <template slot="title">
<div class="title-with-icon"> <div class="title-with-icon">
<img v-if="item.label.includes('微信')" src="@/assets/icon/svg/wxgame.svg" class="game-icon" <svg-icon v-if="item.label.includes('微信')" icon-class="wxgame" class="game-icon" />
alt="微信小游戏"> <svg-icon v-else-if="item.label.includes('抖音')" icon-class="douyin" class="game-icon" />
<img v-else-if="item.label.includes('抖音')" src="@/assets/icon/svg/douyin.svg" class="game-icon" <svg-icon v-else-if="item.label.includes('安卓')" icon-class="Android" class="game-icon" />
alt="抖音小游戏"> <svg-icon
<img v-else-if="item.label.includes('安卓')" src="@/assets/icon/svg/Android.svg" class="game-icon"
alt="安卓游戏">
<img
v-else-if="item.label.includes('IOS') || item.label.includes('iOS') || item.label.includes('ios')" v-else-if="item.label.includes('IOS') || item.label.includes('iOS') || item.label.includes('ios')"
src="@/assets/icon/svg/IOS.svg" class="game-icon" alt="IOS游戏"> icon-class="IOS" class="game-icon" />
<img v-else-if="item.label.includes('H5') || item.label.includes('h5')" src="@/assets/icon/svg/H5.svg" <svg-icon v-else-if="item.label.includes('H5') || item.label.includes('h5')" icon-class="H5"
class="game-icon" alt="H5游戏"> class="game-icon" />
{{ item.label }} {{ item.label }}
</div> </div>
</template> </template>
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</el-popover> </el-popover>
</p> </p>
<el-button size="mini" type="primary" :loading="loading" <el-button size="mini" type="primary" :loading="loading"
@click="sendGameCode(items)">发送礼包码</el-button> @click="sendGameCodeCopyDialog(items)">发送礼包码</el-button>
</div> </div>
</div> </div>
</div> </div>
...@@ -58,12 +58,15 @@ ...@@ -58,12 +58,15 @@
</el-collapse> </el-collapse>
</el-collapse-transition> </el-collapse-transition>
</div> </div>
<giftCodeDialog v-if="dialogVisible" :game-name="game_name" :dialogVisible.sync="dialogVisible"
@result="getGiftCodeSubmit" />
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapMutations } from 'vuex' import { mapState, mapMutations } from 'vuex'
import { passwardEncryption, createVipUrl } from '@/api/game' import { passwardEncryption, createVipUrl } from '@/api/game'
import { giftCodeList, sendGiftCode, getZyouAuthLink } from '@/api/works' import { giftCodeList, sendGiftCode, getZyouAuthLink } from '@/api/works'
import giftCodeDialog from './giftCodeDialog.vue'
export default { export default {
name: 'vipTools', name: 'vipTools',
data() { data() {
...@@ -71,12 +74,33 @@ export default { ...@@ -71,12 +74,33 @@ export default {
disabled: true, disabled: true,
showGameCode: false, showGameCode: false,
giftCodeGame: [], giftCodeGame: [],
dialogVisible: false,
game_name: '',
giftCodeForm: {
member_id: '',
username: '',
role_name: '',
role_id: '',
gift_package_id: '',
},
loading: false loading: false
} }
}, },
components: {
giftCodeDialog
},
mounted() { mounted() {
this.requestGiftCode() this.requestGiftCode()
}, },
destroyed() {
this.giftCodeForm = {
member_id: '',
username: '',
role_name: '',
role_id: '',
gift_package_id: ''
}
},
computed: { computed: {
...mapState('game', ['accountSelect', 'bindGameUserList', 'chatUserInfo']), ...mapState('game', ['accountSelect', 'bindGameUserList', 'chatUserInfo']),
...mapState('user', ['userid']), ...mapState('user', ['userid']),
...@@ -94,6 +118,16 @@ export default { ...@@ -94,6 +118,16 @@ export default {
} }
}, },
methods: { methods: {
initGiftCodeForm() {
const username = this.bindGameUserList.find(item => item.member_id === this.accountSelect).username
this.giftCodeForm = {
member_id: this.accountSelect,
username: username,
role_name: '',
role_id: '',
gift_package_id: '',
}
},
sendVipGift() { sendVipGift() {
if (this.bindGameUserList.length > 0) { if (this.bindGameUserList.length > 0) {
createVipUrl({ member_id: this.accountSelect }).then(res => { createVipUrl({ member_id: this.accountSelect }).then(res => {
...@@ -107,6 +141,7 @@ export default { ...@@ -107,6 +141,7 @@ export default {
this.$message.warning('请先关联游戏账号') this.$message.warning('请先关联游戏账号')
} }
}, },
sendChatMessage(content, type) { sendChatMessage(content, type) {
let message = {} let message = {}
if (type == 'text') { if (type == 'text') {
...@@ -192,14 +227,36 @@ export default { ...@@ -192,14 +227,36 @@ export default {
item.group_name = item.gift_package_group_name item.group_name = item.gift_package_group_name
}) })
}, },
// 发送渠道 // 确定提交
getGiftCodeSubmit(form) {
const { member_id, role_id, username, role_name } = form
this.giftCodeForm.username = username
this.giftCodeForm.role_name = role_name
this.giftCodeForm.member_id = member_id
this.giftCodeForm.role_id = role_id
this.sendGameCode()
},
sendGameCodeCopyDialog(items) {
this.game_name = items.name
this.initGiftCodeForm()
this.giftCodeForm.gift_package_id = items.id
if (items.package_type == 3) {
this.dialogVisible = true
} else {
this.sendGameCode()
}
},
// 发送礼包码
async sendGameCode(items) { async sendGameCode(items) {
this.loading = true this.loading = true
const data = { const data = {
userid: this.chatUserInfo.userid, userid: this.chatUserInfo.userid,
external_userid: this.chatUserInfo.external_userid, external_userid: this.chatUserInfo.external_userid,
member_id: this.accountSelect, member_id: this.giftCodeForm.member_id,
gift_package_id: items.id, username: this.giftCodeForm.username,
role_name: this.giftCodeForm.role_name,
role_id: this.giftCodeForm.role_id,
gift_package_id: this.giftCodeForm.gift_package_id,
user_type: 1 user_type: 1
} }
const res = await sendGiftCode(data) const res = await sendGiftCode(data)
......
...@@ -75,11 +75,11 @@ ...@@ -75,11 +75,11 @@
size="mini" style="margin-bottom:15px;" @click.stop="handleReport(item)">撤销</el-button> size="mini" style="margin-bottom:15px;" @click.stop="handleReport(item)">撤销</el-button>
<el-button v-else-if="item.approval_status == 4" type="primary" size="mini" style="margin-bottom:15px;" <el-button v-else-if="item.approval_status == 4" type="primary" size="mini" style="margin-bottom:15px;"
@click.stop="resubmitApproval(item)">重新提交</el-button> @click.stop="resubmitApproval(item)">重新提交</el-button>
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" /> <svg-icon v-if="item.approval_status == 1" icon-class="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" /> <svg-icon v-else-if="item.approval_status == 2" icon-class="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" /> <svg-icon v-else-if="item.approval_status == 3" icon-class="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" /> <svg-icon v-else-if="item.approval_status == 4" icon-class="shenpi4" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" /> <svg-icon v-else-if="item.approval_status == 5" icon-class="shenpi5" class="icon" />
</div> </div>
</div> </div>
<!-- 审批进度 --> <!-- 审批进度 -->
......
<template> <template>
<div class="reportList"> <div class="reportList" v-scroll="paperScroll">
<el-form ref="taskForm" :model="reportForm" class="taskForm" label-position="top" label-width="85px"> <el-form
ref="taskForm"
:model="reportForm"
class="taskForm"
label-position="top"
label-width="85px"
>
<el-form-item label="角色名称"> <el-form-item label="角色名称">
<el-input v-model="reportForm.role_name" clearable placeholder="请输入角色名称" @change="filterChange"> <el-input
v-model="reportForm.role_name"
clearable
placeholder="请输入角色名称"
@change="filterChange"
>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="审批状态"> <el-form-item label="审批状态">
<el-select v-model="reportForm.approval_status" style="width:100%;" clearable placeholder="请选择审批状态" <el-select
@change="filterChange"> v-model="reportForm.approval_status"
<el-option v-for="item in approvalList" :key="item.value" :label="item.label" :value="item.value"> style="width: 100%"
clearable
placeholder="请选择审批状态"
@change="filterChange"
>
<el-option
v-for="item in approvalList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="申请方式"> <el-form-item label="申请方式">
<el-select v-model="reportForm.register_type" style="width:100%;" clearable placeholder="请选择申请方式" <el-select
@change="filterChange"> v-model="reportForm.register_type"
<el-option v-for="item in register_type_list" :key="item.value" :label="item.label" :value="item.value"> style="width: 100%"
clearable
placeholder="请选择申请方式"
@change="filterChange"
>
<el-option
v-for="item in register_type_list"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-infinite-scroll="paperScroll" :infinite-scroll-disabled="!isMoreRecord" :infinite-scroll-immediate="false" <div
class="mailListScroll"> :infinite-scroll-disabled="!isMoreRecord"
:infinite-scroll-immediate="false"
class="mailListScroll"
>
<!-- 举报申请 --> <!-- 举报申请 -->
<div class="scrollMain" v-if="reportList.length > 0"> <div class="scrollMain" v-if="reportList.length > 0">
<div v-for="(item, index) in reportList" :key="index" class="reportContent" @click="reportProcess(item, index)"> <div
v-for="(item, index) in reportList"
:key="index"
class="reportContent"
@click="reportProcess(item, index)"
>
<div class="reportItem rowFlex spaceBetween columnCenter"> <div class="reportItem rowFlex spaceBetween columnCenter">
<div class="reportItemLeft"> <div class="reportItemLeft">
<p><span class="label">角色名称:</span><span class="value">{{ item.role_name }}</span></p>
<p> <p>
<span class="label">累计充值:</span><span class="value">{{ formatNumber(item.recharge_total_amount) }} <span class="label">角色名称:</span
</span> ><span class="value">{{ item.role_name }}</span>
</p> </p>
<p> <p>
<span class="label">近一周充值:</span><span class="value">{{ formatNumber(item.recharge_week_amount) <span class="label">累计充值:</span
}}</span> ><span class="value"
>{{ formatNumber(item.recharge_total_amount) }}</span
>
</p>
<p>
<span class="label">近一周充值:</span
><span class="value"
>{{ formatNumber(item.recharge_week_amount) }}</span
>
</p>
<p>
<span class="label">违规操作:</span
><span class="value">{{ item.violation_type_text }}</span>
</p> </p>
<p><span class="label">违规操作:</span><span class="value">{{ item.violation_type_text }}</span></p>
</div> </div>
<div class="reportItemRight columnFlex columnCenter"> <div class="reportItemRight columnFlex columnCenter">
<!-- 撤销 当item.create_user_id == zq_user_id 的时候才可以撤销 只能撤销自己提交的审批 --> <!-- 撤销 当item.create_user_id == zq_user_id 的时候才可以撤销 只能撤销自己提交的审批 -->
<el-button v-if="item.approval_status == 1 && (item.create_user_id == cser_id)" type="primary" size="mini" <el-button
@click.stop="handleReport(item)">撤销</el-button> v-if="
item.approval_status == 1 && item.create_user_id == cser_id
"
type="primary"
size="mini"
@click.stop="handleReport(item)"
>撤销</el-button
>
<!-- 审批 只有待审批状态可以并且申请方式是玩家登记的时候才有这个 --> <!-- 审批 只有待审批状态可以并且申请方式是玩家登记的时候才有这个 -->
<el-button <el-button
v-if="item.approval_status == 1 && reportForm.register_type == 2 && (item.customer_id == userInfo.id)" v-if="
type="primary" size="mini" @click.stop="resubmitReportApproval(item)">审批</el-button> item.approval_status == 1 &&
reportForm.register_type == 2 &&
item.customer_id == userInfo.id
"
type="primary"
size="mini"
@click.stop="resubmitReportApproval(item)"
>审批</el-button
>
<!-- 重新提交 --> <!-- 重新提交 -->
<el-button v-else-if="item.approval_status == 4" type="primary" size="mini" <el-button
@click.stop="resubmitReport(item)">重新提交</el-button> v-else-if="item.approval_status == 4"
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" /> type="primary"
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" /> size="mini"
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" /> @click.stop="resubmitReport(item)"
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" /> >重新提交</el-button
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" /> >
<!-- 换成 svg-icon 组件 -->
<svg-icon
v-if="item.approval_status == 1"
icon-class="shenpi1"
class="icon"
/>
<svg-icon
v-else-if="item.approval_status == 2"
icon-class="shenpi2"
class="icon"
/>
<svg-icon
v-else-if="item.approval_status == 3"
icon-class="shenpi3"
class="icon"
/>
<svg-icon
v-else-if="item.approval_status == 4"
icon-class="shenpi4"
class="icon"
/>
<svg-icon
v-else-if="item.approval_status == 5"
icon-class="shenpi5"
class="icon"
/>
</div> </div>
</div> </div>
<!-- 审批进度 --> <!-- 审批进度 -->
<el-collapse-transition> <el-collapse-transition>
<div v-if="item.showStep" class="reportProcessList"> <div v-if="item.showStep" class="reportProcessList">
<el-steps direction="vertical" :active="item.current" finish-status="success"> <el-steps
<el-step v-for="(items, indexs) in item.reportProcessList" :key="'trans_item_' + indexs" direction="vertical"
:title="items.node_name"> :active="item.current"
finish-status="success"
>
<el-step
v-for="(items, indexs) in item.reportProcessList"
:key="'trans_item_' + indexs"
:title="items.node_name"
>
<template slot="description"> <template slot="description">
<div v-if="items" class="trans-follow-1 card-style"> <div v-if="items" class="trans-follow-1 card-style">
<div class="follow-item"> <div class="follow-item">
...@@ -69,34 +166,77 @@ ...@@ -69,34 +166,77 @@
{{ items.node_sort !== '0' ? '审批人:' : '登记人:' }} {{ items.node_sort !== '0' ? '审批人:' : '登记人:' }}
</span> </span>
<span class="info-value value-font"> <span class="info-value value-font">
{{ Array.isArray(items.user_name) ? items.user_name[0] : items.user_name }} {{
Array.isArray(items.user_name)
? items.user_name[0]
: items.user_name
}}
</span> </span>
<el-tooltip v-if="Array.isArray(items.user_name) && items.user_name.length > 1" class="item" <el-tooltip
effect="dark" :content="items.user_name.slice(1).join('、')" placement="top"> v-if="
Array.isArray(items.user_name) &&
items.user_name.length > 1
"
class="item"
effect="dark"
:content="items.user_name.slice(1).join('、')"
placement="top"
>
<span class="info-value value-font info-value-color"> <span class="info-value value-font info-value-color">
{{ `+${items.user_name.length - 1}` }} {{ `+${items.user_name.length - 1}` }}
</span> </span>
</el-tooltip> </el-tooltip>
</div> </div>
<div v-if="items.node_sort !== '0' || items.node_name === '系统'" class="follow-item"> <div
v-if="
items.node_sort !== '0' || items.node_name === '系统'
"
class="follow-item"
>
<span class="follow-info-label label-font"> <span class="follow-info-label label-font">
审批结果: 审批结果:
</span> </span>
<span class="info-value value-font" <span
:class="[items.current < indexs ? '' : switchStateTag(items.approval_result)]"> class="info-value value-font"
{{ items.current < indexs ? '' : items.approval_result_text }} </span> :class="[
items.current < indexs
? ''
: switchStateTag(items.approval_result),
]"
>
{{
items.current < indexs
? ''
: items.approval_result_text
}}
</span>
</div> </div>
<div class="follow-item"> <div class="follow-item">
<span class="follow-info-label label-font"> <span class="follow-info-label label-font">
{{ items.node_sort !== '0' || items.node_name === '系统' ? '审批时间:' : '登记时间:' }} {{
items.node_sort !== '0' ||
items.node_name === '系统'
? '审批时间:'
: '登记时间:'
}}
</span> </span>
<span class="info-value value-font"> <span class="info-value value-font">
{{ items.node_sort === '0' ? items.create_time : items.update_time }} {{
items.node_sort === '0'
? items.create_time
: items.update_time
}}
</span> </span>
</div> </div>
<div v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result === '2'" <div
class="follow-item"> v-if="
(items.node_sort !== '0' ||
items.node_name === '系统') &&
items.approval_result === '2'
"
class="follow-item"
>
<span class="follow-info-label label-font"> <span class="follow-info-label label-font">
驳回原因: 驳回原因:
</span> </span>
...@@ -106,8 +246,17 @@ ...@@ -106,8 +246,17 @@
</div> </div>
<div <div
v-if="items.node_sort === item.reportProcessList[item.reportProcessList.length - 1].node_sort + '' && items.approval_result === '1' && items.node_sort !== '0'" v-if="
class="follow-item-remark follow-item"> items.node_sort ===
item.reportProcessList[
item.reportProcessList.length - 1
].node_sort +
'' &&
items.approval_result === '1' &&
items.node_sort !== '0'
"
class="follow-item-remark follow-item"
>
<span class="follow-info-label label-font"> <span class="follow-info-label label-font">
处理结果: 处理结果:
</span> </span>
...@@ -115,17 +264,35 @@ ...@@ -115,17 +264,35 @@
{{ items.extra_attribution.banned_text }} {{ items.extra_attribution.banned_text }}
</span> </span>
</div> </div>
<div v-if="items.node_sort === '0' && items.node_name !== '系统'" class="info-item-remark"> <div
<div style="display: flex;"> v-if="
items.node_sort === '0' && items.node_name !== '系统'
"
class="info-item-remark"
>
<div style="display: flex">
<span class="info-label remark-label">详情:</span> <span class="info-label remark-label">详情:</span>
<span class="preview-btn" @click.stop="previewRemark(items.extra_attribution.remark)"> <span
class="preview-btn"
@click.stop="
previewRemark(items.extra_attribution.remark)
"
>
<i class="el-icon-view"></i> <i class="el-icon-view"></i>
点击查看大图 点击查看大图
</span> </span>
</div> </div>
<div class="remark-value" <div
v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')"> class="remark-value"
</div> v-html="
formatImg(
items.extra_attribution &&
items.extra_attribution.remark
? items.extra_attribution.remark
: ''
)
"
></div>
</div> </div>
</div> </div>
</template> </template>
...@@ -139,49 +306,67 @@ ...@@ -139,49 +306,67 @@
<noContent /> <noContent />
</div> </div>
</div> </div>
<el-dialog :visible.sync="dialogRemarkVisible" append-to-body title="查看大图" custom-class="remake-dialog"> <el-dialog
:visible.sync="dialogRemarkVisible"
append-to-body
title="查看大图"
custom-class="remake-dialog"
>
<div class="remake-box"> <div class="remake-box">
<div v-html="dialogRemake"></div> <div v-html="dialogRemake"></div>
</div> </div>
</el-dialog> </el-dialog>
<!-- 重新提交 --> <!-- 重新提交 -->
<resubmitReport v-if="showResubmitReport" :report-info="reportInfo" :show.sync="showResubmitReport" <resubmitReport
@updateReportList="filterChange" /> v-if="showResubmitReport"
:report-info="reportInfo"
:show.sync="showResubmitReport"
@updateReportList="filterChange"
/>
<!-- 审批 --> <!-- 审批 -->
<approvalTask v-if="isApproval" :show.sync="isApproval" :report-info="reportInfo" <approvalTask
@updateReportList="filterChange" /> v-if="isApproval"
:show.sync="isApproval"
:report-info="reportInfo"
@updateReportList="filterChange"
/>
</div> </div>
</template> </template>
<script> <script>
import { searchcondition, reportIndex, reportCancel, reportProcess } from '@/api/game' import {
import { mapState, mapMutations } from 'vuex' searchcondition,
import { removeDp, formatNumber, debounce } from '@/utils/index' reportIndex,
import resubmitReport from './layer/report.vue' reportCancel,
import approvalTask from './layer/approvalTask.vue' reportProcess,
} from '@/api/game';
import { mapState, mapMutations } from 'vuex';
import { removeDp, formatNumber, debounce } from '@/utils/index';
import resubmitReport from './layer/report.vue';
import approvalTask from './layer/approvalTask.vue';
// 导入审批状态图标 // 导入审批状态图标
import shenpi1 from '@/assets/icon/svg/shenpi1.svg' import shenpi1 from '@/assets/icon/svg/shenpi1.svg';
import shenpi2 from '@/assets/icon/svg/shenpi2.svg' import shenpi2 from '@/assets/icon/svg/shenpi2.svg';
import shenpi3 from '@/assets/icon/svg/shenpi3.svg' import shenpi3 from '@/assets/icon/svg/shenpi3.svg';
import shenpi4 from '@/assets/icon/svg/shenpi4.svg' import shenpi4 from '@/assets/icon/svg/shenpi4.svg';
import shenpi5 from '@/assets/icon/svg/shenpi5.svg' import shenpi5 from '@/assets/icon/svg/shenpi5.svg';
import noContent from '@/components/noContent.vue' import noContent from '@/components/noContent.vue';
export default { export default {
name: 'report', name: 'report',
computed: { computed: {
...mapState('game', ['accountSelect']), ...mapState('game', ['accountSelect']),
...mapState('user', ['cser_id', 'cser_name']) ...mapState('user', ['cser_id', 'cser_name']),
}, },
watch: { watch: {
accountSelect(newVal, oldVal) { accountSelect(newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) { if (newVal && newVal !== '' && newVal !== oldVal) {
this.filterChange() this.filterChange();
}
} }
}, },
},
components: { components: {
resubmitReport, resubmitReport,
approvalTask, approvalTask,
noContent noContent,
}, },
data() { data() {
return { return {
...@@ -198,17 +383,17 @@ export default { ...@@ -198,17 +383,17 @@ export default {
username: '', username: '',
role_name: '', role_name: '',
register_type: 1, register_type: 1,
approval_status: '' approval_status: '',
}, },
isApproval: false, isApproval: false,
register_type_list: [ register_type_list: [
{ value: 2, label: '玩家登记' }, { value: 2, label: '玩家登记' },
{ value: 1, label: '客服登记' } { value: 1, label: '客服登记' },
], ],
reportInfo: {}, reportInfo: {},
pageInfo: { pageInfo: {
page: 1, page: 1,
page_size: 20 page_size: 20,
}, },
showResubmitReport: false, showResubmitReport: false,
reportList: [], reportList: [],
...@@ -217,148 +402,154 @@ export default { ...@@ -217,148 +402,154 @@ export default {
dialogRemarkVisible: false, dialogRemarkVisible: false,
dialogRemake: '', dialogRemake: '',
formatNumber: formatNumber, formatNumber: formatNumber,
taskTypeList: [] taskTypeList: [],
} };
}, },
mounted() { mounted() {
// this.request_register_type() // this.request_register_type()
this.requstApprovalList() this.requstApprovalList();
this.filterChange() this.filterChange();
}, },
methods: { methods: {
resubmitReport(item) { resubmitReport(item) {
this.reportInfo = item this.reportInfo = item;
this.showResubmitReport = true this.showResubmitReport = true;
}, },
// 审批 // 审批
resubmitReportApproval(item) { resubmitReportApproval(item) {
this.reportInfo = item this.reportInfo = item;
this.isApproval = true this.isApproval = true;
}, },
filterChange() { filterChange() {
this.pageInfo.page = 1 this.pageInfo.page = 1;
this.reportList = [] this.reportList = [];
this.isMoreRecord = true this.isMoreRecord = true;
this.reportIndex() this.reportIndex();
}, },
async requstApprovalList() { async requstApprovalList() {
const data = { const data = {
type: 'dictionaries', type: 'dictionaries',
table_name: 'zs_refund_request', table_name: 'zs_refund_request',
field_name: 'approval_status' field_name: 'approval_status',
} };
const res = await searchcondition(data) const res = await searchcondition(data);
if (res.status_code === 1) { if (res.status_code === 1) {
this.approvalList = res.data.data this.approvalList = res.data.data;
} }
}, },
async request_register_type() { async request_register_type() {
const data = { const data = {
type: 'dictionaries', type: 'dictionaries',
table_name: 'zs_report_request', table_name: 'zs_report_request',
field_name: 'register_type' field_name: 'register_type',
} };
const res = await searchcondition(data) const res = await searchcondition(data);
if (res.status_code === 1) { if (res.status_code === 1) {
this.register_type_list = res.data.data this.register_type_list = res.data.data;
} }
}, },
previewRemark(remark) { previewRemark(remark) {
this.dialogRemake = remark this.dialogRemake = remark;
this.dialogRemarkVisible = true this.dialogRemarkVisible = true;
}, },
async reportProcess(item, index) { async reportProcess(item, index) {
console.log(item.current, 'item') console.log(item.current, 'item');
item.showStep = !item.showStep item.showStep = !item.showStep;
if (item.reportProcessList.length === 0) { if (item.reportProcessList.length === 0) {
const res = await reportProcess({ id: item.id }) const res = await reportProcess({ id: item.id });
item.reportProcessList = res.data.data item.reportProcessList = res.data.data;
res.data.data.map((items) => { res.data.data.map((items) => {
if (items.approval_result !== '0' && items.approval_result !== '2') { if (items.approval_result !== '0' && items.approval_result !== '2') {
item.current += 1 item.current += 1;
} }
}) });
this.$forceUpdate() this.$forceUpdate();
} }
this.$forceUpdate() this.$forceUpdate();
}, },
paperScroll() { paperScroll() {
this.requestNextPage() console.log('开始滚动了');
if (!this.isMoreRecord) {
console.log('没有更多数据了');
return false;
}
this.requestNextPage();
}, },
requestNextPage(pageInfo) { requestNextPage(pageInfo) {
this.pageInfo.page++ this.pageInfo.page++;
this.reportIndex() this.reportIndex();
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
this.pageInfo.page = val this.pageInfo.page = val;
}, },
switchStateTag(status) { switchStateTag(status) {
switch (status) { switch (status) {
case '0': case '0':
return 'unhandle' return 'unhandle';
case '1': case '1':
return 'handled' return 'handled';
case '2': case '2':
return 'sendFail' return 'sendFail';
} }
}, },
formatImg(html) { formatImg(html) {
if (html) { if (html) {
return html.replaceAll(/<img/g, '<img style="max-width:100px;"') return html.replaceAll(/<img/g, '<img style="max-width:100px;"');
} }
return html return html;
}, },
switchStateText(status) { switchStateText(status) {
switch (status) { switch (status) {
case '0': case '0':
return '待审批' return '待审批';
case '1': case '1':
return '通过' return '通过';
case '2': case '2':
return '驳回' return '驳回';
} }
}, },
handleReport(item) { handleReport(item) {
this.$confirm('确定要撤销该申请么?', '确认提示', { this.$confirm('确定要撤销该申请么?', '确认提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning',
}) })
.then(() => { .then(() => {
console.log(1231) console.log(1231);
const data = { const data = {
id: item.id, id: item.id,
user_id: this.userInfo.id, user_id: this.userInfo.id,
user_name: this.userInfo.username user_name: this.userInfo.username,
} };
reportCancel(data).then(res => { reportCancel(data).then((res) => {
if (res.status_code === 1) { if (res.status_code === 1) {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '撤销成功!' message: '撤销成功!',
}) });
this.filterChange() this.filterChange();
} }
}) });
}) })
.catch(() => { .catch(() => {
this.$message({ this.$message({
type: 'info', type: 'info',
message: '已取消' message: '已取消',
}) });
}) });
}, },
// 举报列表 // 举报列表
async reportIndex() { async reportIndex() {
if (this.accountSelect === '') { if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!') this.$message.warning('暂无关联的账号,请先去关联账号!');
return false return false;
} }
if (this.pageInfo.page == 1) { if (this.pageInfo.page == 1) {
this.reportList = [] this.reportList = [];
} }
const { username, role_name, approval_status, register_type } = this.reportForm const { username, role_name, approval_status, register_type } =
this.reportForm;
// const { id } = this.userInfo // const { id } = this.userInfo
const data = { const data = {
username, username,
...@@ -367,36 +558,31 @@ export default { ...@@ -367,36 +558,31 @@ export default {
// customer_id: id, // customer_id: id,
member_id: this.accountSelect, member_id: this.accountSelect,
register_type, register_type,
...this.pageInfo ...this.pageInfo,
} };
const res = await reportIndex(data) const res = await reportIndex(data);
if (this.pageInfo.page == 1) { if (this.pageInfo.page == 1) {
this.reportList = res.data.data this.reportList = res.data.data;
} else { } else {
this.reportList = removeDp(this.reportList, res.data.data, 'id') this.reportList = removeDp(this.reportList, res.data.data, 'id');
} }
if (this.reportList.length > 0) { if (this.reportList.length > 0) {
this.reportList.map((item) => { this.reportList.map((item) => {
item.showStep = false item.showStep = false;
item.current = 0 item.current = 0;
item.reportProcessList = [] item.reportProcessList = [];
}) });
} else { } else {
this.reportList = [] this.reportList = [];
} }
if (res.data.data.length < 20) { if (res.data.data.length < 20) {
this.isMoreRecord = false this.isMoreRecord = false;
} else { } else {
this.isMoreRecord = true this.isMoreRecord = true;
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
} }
} },
} },
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -438,7 +624,7 @@ export default { ...@@ -438,7 +624,7 @@ export default {
font-size: 12px; font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
color: #3491FA; color: #3491fa;
border: none; border: none;
} }
...@@ -564,30 +750,30 @@ export default { ...@@ -564,30 +750,30 @@ export default {
width: 1px; width: 1px;
} }
::v-deep .el-step>.is-success { ::v-deep .el-step > .is-success {
color: #3491FA; color: #3491fa;
border-color: #3491FA; border-color: #3491fa;
.el-step__line { .el-step__line {
background-color: #e5e6eb; background-color: #e5e6eb;
} }
} }
::v-deep .el-step__main>.is-success { ::v-deep .el-step__main > .is-success {
color: #3491FA; color: #3491fa;
} }
::v-deep .el-step>.is-process { ::v-deep .el-step > .is-process {
color: #3491FA; color: #3491fa;
border-color: #3491FA; border-color: #3491fa;
.el-step__line { .el-step__line {
background-color: #e5e6eb; background-color: #e5e6eb;
} }
} }
::v-deep .el-step__main>.is-process { ::v-deep .el-step__main > .is-process {
color: #3491FA; color: #3491fa;
} }
.form-item-btn { .form-item-btn {
...@@ -608,7 +794,7 @@ export default { ...@@ -608,7 +794,7 @@ export default {
.preview-btn { .preview-btn {
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 14px;
color: #3491FA; color: #3491fa;
margin: 0 0 0 10px; margin: 0 0 0 10px;
i { i {
...@@ -712,7 +898,7 @@ export default { ...@@ -712,7 +898,7 @@ export default {
height: 80px; height: 80px;
} }
&:hover>.preview-pic { &:hover > .preview-pic {
z-index: 100; z-index: 100;
} }
} }
...@@ -764,7 +950,7 @@ export default { ...@@ -764,7 +950,7 @@ export default {
} }
.info-value-color { .info-value-color {
color: #3491FA; color: #3491fa;
margin-left: 5px; margin-left: 5px;
} }
} }
......
<template> <template>
<div class="details-user-info-role columnFlex"> <div class="details-user-info-role columnFlex">
<div <div v-loading="loading" class="detailsContent">
v-loading="loading" <div v-if="roleList.length > 0">
class="detailsContent" <div class="flex items-cente mb-[10px] justify-between">
> <p class="textInfo">
<div v-if="roleList.length>0"> 角色充值金额信息会有5-10分钟延迟,请以订单信息为准
<p class="textInfo">角色充值金额信息会有5-10分钟延迟,请以订单信息为准</p> </p>
<el-collapse <el-button type="primary" size="small" class="h-[30px]" @click.stop="appealLayer()">申诉</el-button>
v-model="collapseActive" </div>
@change="handleChange" <el-collapse v-model="collapseActive" @change="handleChange">
> <div v-for="(items, indexs) in roleList" :key="indexs" class="contentItem mb-[10px]">
<div
v-for="(items,indexs) in roleList"
:key="indexs"
class="contentItem"
>
<div class="title"></div> <div class="title"></div>
<el-collapse-item :name="items.id"> <el-collapse-item :name="items.id">
<template slot="title"> <template slot="title">
<div class="collapseTitle rowFlex columnCenter spaceBetween"> <!-- <div class="collapseTitle rowFlex columnCenter spaceBetween">
<p class="hidden"> <p class="hidden">
{{ items.role_name }} - {{ items.server_name }} - {{ items.recharge_total?items.recharge_total+'元':'0元' }} {{ items.role_name }} - {{ items.server_name }} - {{
items.recharge_total ? items.recharge_total + '元' : '0元' }}
</p> </p>
<el-button <el-button type="primary" size="mini" class="collapseTitleBtn"
type="primary" @click.stop="appealLayer(items)">申诉</el-button>
size="mini" </div> -->
class="collapseTitleBtn" <div class="flex w-[100%] justify-between">
@click.stop="appealLayer(items)" <div class="py-[10px]">
>申诉</el-button> <div class="leading-[25px]">
<span>角色名:</span><span>{{ items.role_name }}</span>
</div>
<div class="leading-[25px]">
<span>区服:</span><span>{{ items.server_name }}</span>
</div>
<div class="leading-[25px]">
<span>充值金额:</span><span>{{
items.recharge_total
? items.recharge_total + '元'
: '0元'
}}</span>
</div>
</div>
<div class="flex-1 h-0 flex justify-end items-start pt-[10px]">
<el-badge :value="getNumRoleIdList(items.role_id)" class="text-center leading-[0] ml-[8px]">
<el-button type="primary" size="mini" @click.stop="
() =>
recentActivitiesPopupInstance.instance.open(
items.role_id,
`${items.role_name}-${items.server_name}-${items.recharge_total}元`
)
">
近期要开</el-button>
</el-badge>
</div>
</div> </div>
</template> </template>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
...@@ -81,13 +102,25 @@ ...@@ -81,13 +102,25 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">最近活跃时间:</span> <span class="label">最近活跃时间:</span>
<p class="text">{{ $moment( items.last_login_time * 1000).format('YYYY-MM-DD HH:mm:ss') }}</p> <p class="text">
{{
$moment(items.last_login_time * 1000).format(
'YYYY-MM-DD HH:mm:ss'
)
}}
</p>
</div> </div>
</div> </div>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">创建时间:</span> <span class="label">创建时间:</span>
<p class="text">{{ $moment( items.create_time * 1000).format('YYYY-MM-DD HH:mm:ss') }}</p> <p class="text">
{{
$moment(items.create_time * 1000).format(
'YYYY-MM-DD HH:mm:ss'
)
}}
</p>
</div> </div>
</div> </div>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
...@@ -100,32 +133,27 @@ ...@@ -100,32 +133,27 @@
</div> </div>
</el-collapse> </el-collapse>
</div> </div>
<div <div v-else-if="!loading && roleList.length == 0" class="noContent rowFlex allCenter">
v-else-if="!loading && roleList.length==0"
class="noContent rowFlex allCenter"
>
<noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" /> <noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" />
</div> </div>
</div> </div>
<appeal <appeal v-if="showAppeal" :show.sync="showAppeal" :appeal-info="appealInfo" />
v-if="showAppeal"
:show.sync="showAppeal"
:appeal-info="appealInfo"
/>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapMutations, mapActions } from 'vuex' import { mapState, mapMutations, mapActions } from 'vuex';
import { getRoleHoLo } from '@/api/game' import { getRoleHoLo } from '@/api/game';
import noContent from '@/components/noContent.vue' import noContent from '@/components/noContent.vue';
import appeal from './layer/appeal.vue' import appeal from './layer/appeal.vue';
import watchMember from '@/mixins/watchMember' import watchMember from '@/mixins/watchMember';
export default { import { createDetails } from '@/views/popup/RecentActivitiesPopup/index.js';
import { createRoleRecentActivityNotPushNum } from '@/views/hooks/useGetCount.js';
export default {
name: 'roleInfo', name: 'roleInfo',
components: { components: {
noContent, noContent,
appeal appeal,
}, },
data() { data() {
return { return {
...@@ -138,66 +166,99 @@ ...@@ -138,66 +166,99 @@
pageInfo: { pageInfo: {
page_size: 100, page_size: 100,
page: 1, page: 1,
total: 0 total: 0,
}, },
infoList: [] infoList: [],
} recentActivitiesPopupInstance: null, //近期要开模块弹框
roleRecentActivityNotPushNumInstance: null, //侧边栏计数弹框
numRoleIdList: [],
};
}, },
computed: { computed: {
...mapState('game', ['accountSelect']) ...mapState('game', ['accountSelect']),
}, },
mixins: [watchMember], mixins: [watchMember],
mounted() { mounted() {
this.requestRoleList() this.requestRoleList();
this.nowTime = new Date().getTime() this.nowTime = new Date().getTime();
// 初始化创建角色最近活动未推送数量
this.initInstance();
}, },
methods: { methods: {
handleChange() { getNumRoleIdList(role_id) {
return (
this.numRoleIdList.find((item) => item.role_id == role_id)?.num || null
);
},
//初始化创建模块
async initInstance() {
this.recentActivitiesPopupInstance = createDetails();
this.roleRecentActivityNotPushNumInstance =
await createRoleRecentActivityNotPushNum(this.accountSelect);
this.numRoleIdList =
this.roleRecentActivityNotPushNumInstance.getRoleNum();
this.roleRecentActivityNotPushNumInstance.roleRecentActivitySubscription(
(v) => {
this.numRoleIdList = v.roleNum;
}, },
this
);
},
handleChange() { },
memberChange() { memberChange() {
this.requestRoleList() this.requestRoleList();
}, },
// 申诉 // 申诉
appealLayer(item) { appealLayer(item) {
this.appealInfo = item this.appealInfo = item;
this.showAppeal = true this.showAppeal = true;
}, },
requestRoleList() { requestRoleList() {
if (this.accountSelect === '') { if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!') this.$message.warning('暂无关联的账号,请先去关联账号!');
return false return false;
} }
this.loading = true this.loading = true;
const data = { const data = {
api_search_name: '', api_search_name: '',
member_id: this.accountSelect, member_id: this.accountSelect,
search_type: 'list', search_type: 'list',
...this.pageInfo ...this.pageInfo,
} };
getRoleHoLo(data).then(res => { getRoleHoLo(data).then(
this.loading = false (res) => {
this.loading = false;
if (res.status_code == 1) { if (res.status_code == 1) {
if (res.data.data.length > 0) { if (res.data.data.length > 0) {
this.roleList = res.data.data.sort((a, b) => { return Number(b.recharge_total) - Number(a.recharge_total) }) this.roleList = res.data.data.sort((a, b) => {
return Number(b.recharge_total) - Number(a.recharge_total);
});
} else { } else {
this.roleList = [] this.roleList = [];
}
}
}, err => {
this.loading = false
})
} }
} }
},
(err) => {
this.loading = false;
} }
</script> );
<style lang="scss" scoped> },
.details-user-info-role { },
beforeDestroy() {
this.recentActivitiesPopupInstance.destroy();
this.roleRecentActivityNotPushNumInstance?.destroy();
},
};
</script>
<style lang="scss" scoped>
.details-user-info-role {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
margin-left: 2px; margin-left: 2px;
overflow: auto; overflow: auto;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 10px; padding: 0 10px;
...@@ -208,14 +269,17 @@ ...@@ -208,14 +269,17 @@
color: #333333; color: #333333;
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;
border-left: 1px solid #ebeef5; border-left: 1px solid #ebeef5;
p { p {
color: #333333; color: #333333;
} }
} }
.detailsContent { .detailsContent {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
.textInfo { .textInfo {
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
...@@ -224,8 +288,10 @@ ...@@ -224,8 +288,10 @@
margin-bottom: 10px; margin-bottom: 10px;
margin-top: 10px; margin-top: 10px;
} }
.contentItem { .contentItem {
position: relative; position: relative;
.title { .title {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -233,10 +299,12 @@ ...@@ -233,10 +299,12 @@
font-size: 14px; font-size: 14px;
color: #999999; color: #999999;
} }
.collapseTitle { .collapseTitle {
width: 90%; width: 90%;
} }
} }
.item { .item {
width: 100%; width: 100%;
height: auto; height: auto;
...@@ -248,33 +316,40 @@ ...@@ -248,33 +316,40 @@
position: relative; position: relative;
padding-left: 10px; padding-left: 10px;
cursor: pointer; cursor: pointer;
.tableImage { .tableImage {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: 10px; margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
} }
.text { .text {
color: #333333; color: #333333;
margin-left: 10px; margin-left: 10px;
word-break: break-all; word-break: break-all;
max-width: 80%; max-width: 80%;
} }
.icon { .icon {
display: none; display: none;
position: absolute; position: absolute;
right: 0; right: 0;
top: 12px; top: 12px;
} }
.tags { .tags {
width: 300px; width: 300px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: 300px; width: 300px;
} }
.tag { .tag {
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
...@@ -291,10 +366,48 @@ ...@@ -291,10 +366,48 @@
} }
} }
} }
.item:hover .icon { .item:hover .icon {
display: block; display: block;
} }
} }
/* 已移除局部 el-collapse 样式,使用全局样式 */
::v-deep .el-collapse-item {
margin-bottom: 20px;
}
::v-deep .el-collapse-item__content {
padding-bottom: 10px;
} }
</style>
\ No newline at end of file ::v-deep .el-collapse {
border: none;
}
::v-deep .el-collapse-item__header {
width: 100%;
height: auto;
background: #f9faff;
color: #333333;
padding-left: 10px;
font-size: 14px;
font-weight: 400;
}
::v-deep .el-collapse .el-collapse-item__header .el-collapse-item__arrow {
color: #4e5969;
}
::v-deep .el-badge__content.is-fixed {
top: 0;
}
::v-deep .el-card__header,
::v-deep .el-collapse,
::v-deep .el-collapse-item__header {
border: 0 !important;
}
/* 已移除局部 el-collapse 样式,使用全局样式 */
}
</style>
...@@ -4,24 +4,30 @@ ...@@ -4,24 +4,30 @@
<!-- 标签 --> <!-- 标签 -->
<el-collapse-transition> <el-collapse-transition>
<div v-if="groupList.length > 0" class="tagList columnFlex"> <div v-if="groupList.length > 0" class="tagList columnFlex">
<div v-for="(item, index) in groupList" :key="index" class="tagItem columnCenter" :draggable="false" :class="groupActive == item.value ? 'tagItemActiveText' : ''" @dragstart="handleDragStart($event, item, index)" @dragover.prevent="handleDragOver($event, item)" @dragenter="handleDragEnter($event, item, 'group')" @dragend="handleDragEnd($event, item, 'group')"> <div v-for="(item, index) in groupList" :key="index" class="tagItem columnCenter" :draggable="false"
:class="groupActive == item.value ? 'tagItemActiveText' : ''"
@dragstart="handleDragStart($event, item, index)" @dragover.prevent="handleDragOver($event, item)"
@dragenter="handleDragEnter($event, item, 'group')" @dragend="handleDragEnd($event, item, 'group')">
<div class="rowFlex columnCenter spaceBetween tagItemGroup" @click="groupFilter(item, index)"> <div class="rowFlex columnCenter spaceBetween tagItemGroup" @click="groupFilter(item, index)">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<i class="el-icon-rank icon" style="cursor: move"></i> <el-tooltip effect="dark" placement="top" :content="item.name" v-if="item.name.length >= 6">
<p class="text hidden">{{ item.name }}</p> <p class="text hidden">{{ item.name }}</p>
</el-tooltip>
<p v-else class="text hidden">{{ item.name }}</p>
</div> </div>
<i class="el-icon-caret-right rotageIcon" :class="groupActive == item.value ? 'rotage' : ''"></i> <i class="el-icon-caret-right rotageIcon" :class="groupActive == item.value ? 'rotage' : ''"></i>
</div> </div>
<!-- 二级分组 --> <!-- 二级分组 -->
<div v-if="item.child.length > 0 && groupActive == item.value" class="childGroup"> <div v-if="item.child.length > 0 && groupActive == item.value" class="childGroup">
<div v-for="child in item.child" :key="child._id" class="childGroupText" :class="[groupActiveChild == child._id ? 'tagItemActive' : '']" @click.stop="groupFilterChild(child)"> <div v-for="child in item.child" :key="child._id" class="childGroupText"
:class="[groupActiveChild == child._id ? 'tagItemActive' : '']" @click.stop="groupFilterChild(child)">
<p class="text hidden">{{ child.name }}</p> <p class="text hidden">{{ child.name }}</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div v-else class="noContent rowFlex allCenter"> <div v-else class="noContent rowFlex allCenter">
<noContent/> <noContent />
</div> </div>
</el-collapse-transition> </el-collapse-transition>
<!-- 话术 --> <!-- 话术 -->
...@@ -34,7 +40,8 @@ ...@@ -34,7 +40,8 @@
<div ref="skillLibrary" v-loading="skillLoading" @scroll="paperScroll" class="scrollList"> <div ref="skillLibrary" v-loading="skillLoading" @scroll="paperScroll" class="scrollList">
<div v-for="(items, indexs) in groupDataList" :key="indexs" class="answerContent"> <div v-for="(items, indexs) in groupDataList" :key="indexs" class="answerContent">
<div class="question"><span class="title">Q:</span>{{ items.question }}</div> <div class="question"><span class="title">Q:</span>{{ items.question }}</div>
<div v-for="(answer, answerIndex) in items.answer" :key="answerIndex" class="answerItem" style="width: 100%"> <div v-for="(answer, answerIndex) in items.answer" :key="answerIndex" class="answerItem"
style="width: 100%">
<!-- <span class="question">{{ answerIndex + 1 }}: {{ answer }}</span> --> <!-- <span class="question">{{ answerIndex + 1 }}: {{ answer }}</span> -->
<div v-if="answer.msgtype == 'text'" class="answerText rowFlex spaceBetween"> <div v-if="answer.msgtype == 'text'" class="answerText rowFlex spaceBetween">
<span class="title rowFlex">A{{ answerIndex + 1 }}:</span> <span class="title rowFlex">A{{ answerIndex + 1 }}:</span>
...@@ -45,7 +52,8 @@ ...@@ -45,7 +52,8 @@
</div> </div>
<div v-else-if="answer.msgtype == 'image'" class="answerText rowFlex"> <div v-else-if="answer.msgtype == 'image'" class="answerText rowFlex">
<span class="title rowFlex">A{{ answerIndex + 1 }}:</span> <span class="title rowFlex">A{{ answerIndex + 1 }}:</span>
<el-image style="max-width: 200px" :src="answer.image.picurl" @click="sendMessageImage(answer, items._id)" :preview-src-list="[answer.image.picurl]" > </el-image> <el-image style="max-width: 200px" :src="answer.image.picurl"
@click="sendMessageImage(answer, items._id)" :preview-src-list="[answer.image.picurl]"> </el-image>
</div> </div>
</div> </div>
</div> </div>
...@@ -53,15 +61,15 @@ ...@@ -53,15 +61,15 @@
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
// procedure_group, procedureList, procedureSort, procedureGroupSort, skillQuote, // procedure_group, procedureList, procedureSort, procedureGroupSort, skillQuote,
import { cross_corp_robot_knowledge_group_index, cross_corp_robot_knowledge_group_getList} from '@/api/skill' import { cross_corp_robot_knowledge_group_index, cross_corp_robot_knowledge_group_getList } from '@/api/skill'
import { mapState, mapMutations, mapActions } from 'vuex' import { mapState, mapMutations, mapActions } from 'vuex'
import { throttle, debounce, copyToClipboard,sendChatMessage } from '@/utils/index' import { throttle, debounce, copyToClipboard, sendChatMessage } from '@/utils/index'
import noContent from '@/components/noContent.vue' import noContent from '@/components/noContent.vue'
export default { export default {
name: 'skillLibrary', name: 'skillLibrary',
components: { components: {
noContent noContent
...@@ -110,7 +118,7 @@ ...@@ -110,7 +118,7 @@
} }
}, },
computed: { computed: {
...mapState('game', ['accountSelect','chatUserInfo']), ...mapState('game', ['accountSelect', 'chatUserInfo']),
}, },
watch: { watch: {
accountSelect(newVal, oldVal) { accountSelect(newVal, oldVal) {
...@@ -133,7 +141,7 @@ ...@@ -133,7 +141,7 @@
this.requestLibraryData() this.requestLibraryData()
}, },
methods: { methods: {
sendMessage: throttle(function(item, id) { sendMessage: throttle(function (item, id) {
console.log(item, id) console.log(item, id)
// this.skillQuote(id, item.length) // this.skillQuote(id, item.length)
}, 500), }, 500),
...@@ -141,14 +149,14 @@ ...@@ -141,14 +149,14 @@
this.sortID._id = item._id this.sortID._id = item._id
this.dragging = item this.dragging = item
}, },
paperScroll:debounce(function(){ paperScroll: debounce(function () {
const el = this.$refs.skillLibrary const el = this.$refs.skillLibrary
if (el.offsetHeight + el.scrollTop + 10 >= el.scrollHeight) { if (el.offsetHeight + el.scrollTop + 10 >= el.scrollHeight) {
console.log('下一页') console.log('下一页')
this.pageInfo.page++ this.pageInfo.page++
this.searchTable() this.searchTable()
} }
},500), }, 500),
skillQuote(id, num) { skillQuote(id, num) {
const data = { const data = {
type: this.activeName, type: this.activeName,
...@@ -186,7 +194,7 @@ ...@@ -186,7 +194,7 @@
this.sendChatMessage(item.text.content || '', 'text') this.sendChatMessage(item.text.content || '', 'text')
}, },
sendMessageImage(item){ sendMessageImage(item) {
console.log(item, 'item') console.log(item, 'item')
this.sendChatMessage(item.image.picurl || '', 'image') this.sendChatMessage(item.image.picurl || '', 'image')
}, },
...@@ -256,7 +264,7 @@ ...@@ -256,7 +264,7 @@
this.groupLastDataList = this.groupDataList this.groupLastDataList = this.groupDataList
}) })
}, },
handleChange() {}, handleChange() { },
// 重置select // 重置select
resizeSelect() { resizeSelect() {
this.groupActive = '0' this.groupActive = '0'
...@@ -268,21 +276,23 @@ ...@@ -268,21 +276,23 @@
this.isResize = false this.isResize = false
}, 2000) }, 2000)
}, },
sendChatMessage(content, type){ sendChatMessage(content, type) {
sendChatMessage(content, type) sendChatMessage(content, type)
}, },
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.skillLibrary { .skillLibrary {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
.noContent { .noContent {
font-size: 200px; font-size: 200px;
} }
.contentItemTitle { .contentItemTitle {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -293,9 +303,11 @@ ...@@ -293,9 +303,11 @@
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 2; /* 这里是超出几行省略 */ -webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden; overflow: hidden;
} }
.titleFixed { .titleFixed {
position: absolute; position: absolute;
right: 0px; right: 0px;
...@@ -303,6 +315,7 @@ ...@@ -303,6 +315,7 @@
margin-left: 15px; margin-left: 15px;
margin-right: 25px; margin-right: 25px;
z-index: 10; z-index: 10;
.num { .num {
width: auto; width: auto;
font-size: 14px; font-size: 14px;
...@@ -311,6 +324,7 @@ ...@@ -311,6 +324,7 @@
color: #409EFF; color: #409EFF;
margin-right: 10px; margin-right: 10px;
} }
.button { .button {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -334,6 +348,7 @@ ...@@ -334,6 +348,7 @@
height: auto; height: auto;
margin: 20px 0; margin: 20px 0;
padding-left: 10px; padding-left: 10px;
.text { .text {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -343,6 +358,7 @@ ...@@ -343,6 +358,7 @@
word-wrap: break-word; word-wrap: break-word;
line-height: 18px; line-height: 18px;
} }
.sendButton { .sendButton {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -354,12 +370,14 @@ ...@@ -354,12 +370,14 @@
color: #333333; color: #333333;
padding: 0; padding: 0;
} }
.image { .image {
max-width: 25%; max-width: 25%;
border-radius: 5px; border-radius: 5px;
} }
} }
} }
.item { .item {
width: 100%; width: 100%;
height: auto; height: auto;
...@@ -371,33 +389,40 @@ ...@@ -371,33 +389,40 @@
position: relative; position: relative;
padding-left: 10px; padding-left: 10px;
cursor: move; cursor: move;
.tableImage { .tableImage {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: 10px; margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
} }
.text { .text {
color: #333333; color: #333333;
margin-left: 10px; margin-left: 10px;
word-break: break-all; word-break: break-all;
max-width: 80%; max-width: 80%;
} }
.icon { .icon {
display: none; display: none;
position: absolute; position: absolute;
right: 0; right: 0;
top: 12px; top: 12px;
} }
.tags { .tags {
width: 300px; width: 300px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: 300px; width: 300px;
} }
.tag { .tag {
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
...@@ -414,31 +439,38 @@ ...@@ -414,31 +439,38 @@
} }
} }
} }
.item:hover .icon { .item:hover .icon {
display: block; display: block;
} }
} }
::v-deep .el-tabs--border-card .is-active {
::v-deep .el-tabs--border-card .is-active {
border: none !important; border: none !important;
} }
::v-deep .is-active {
::v-deep .is-active {
border: none; border: none;
} }
/* 已移除局部 el-collapse 样式,使用全局样式 */
.inputContent { /* 已移除局部 el-collapse 样式,使用全局样式 */
.inputContent {
width: 100%; width: 100%;
margin-bottom: 20px; margin-bottom: 20px;
margin-left: 20px; margin-left: 20px;
::v-deep .el-input { ::v-deep .el-input {
width: 90%; width: 90%;
} }
} }
.skillBox {
.skillBox {
width: 100%; width: 100%;
height: calc(100% - 20px); height: calc(100% - 20px);
} }
.tagList {
.tagList {
width: 200px; width: 200px;
height: 100%; height: 100%;
position: relative; position: relative;
...@@ -455,15 +487,18 @@ ...@@ -455,15 +487,18 @@
color: #333333; color: #333333;
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: 90px; max-width: 90px;
margin-left: 5px; margin-left: 5px;
} }
.tagItemGroup { .tagItemGroup {
height: 36px; height: 36px;
padding-right: 10px; padding-right: 10px;
} }
} }
.iconFont { .iconFont {
font-size: 20px; font-size: 20px;
color: #999999; color: #999999;
...@@ -471,47 +506,57 @@ ...@@ -471,47 +506,57 @@
right: 0; right: 0;
top: 20px; top: 20px;
cursor: pointer; cursor: pointer;
.upIcon { .upIcon {
transform: rotate(90deg); transform: rotate(90deg);
} }
} }
.tagItemActive { .tagItemActive {
color: #409EFF !important; color: #409EFF !important;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
background: #e4fff1; background: #e4fff1;
} }
.tagItemActiveText { .tagItemActiveText {
color: #409EFF; color: #409EFF;
} }
} }
.libraryListContent{
.libraryListContent {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.rotageIcon {
.rotageIcon {
cursor: pointer; cursor: pointer;
transition: all 0.5s; transition: all 0.5s;
transform: rotate(0deg); transform: rotate(0deg);
font-size: 12px; font-size: 12px;
} }
.rotage {
.rotage {
transform: rotate(90deg); transform: rotate(90deg);
} }
.childGroup {
.childGroup {
p { p {
margin-left: 15px !important; margin-left: 15px !important;
} }
.childGroupText { .childGroupText {
height: 36px; height: 36px;
line-height: 36px; line-height: 36px;
color: #333333; color: #333333;
} }
} }
.scrollList {
.scrollList {
width: 100%; width: 100%;
height: 100%; height: 100%;
padding-left: 20px; padding-left: 20px;
.answerContent { .answerContent {
width: 100%; width: 100%;
background: #f7f8fa; background: #f7f8fa;
...@@ -519,15 +564,18 @@ ...@@ -519,15 +564,18 @@
border: 1px solid #e5e6eb; border: 1px solid #e5e6eb;
padding: 10px; padding: 10px;
margin-bottom: 20px; margin-bottom: 20px;
.title { .title {
width: 30px; width: 30px;
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
margin-right: 10px; margin-right: 10px;
} }
.answerItem { .answerItem {
margin-bottom: 10px; margin-bottom: 10px;
} }
.question { .question {
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
...@@ -536,6 +584,7 @@ ...@@ -536,6 +584,7 @@
text-align: left; text-align: left;
margin-bottom: 10px; margin-bottom: 10px;
} }
.answerText { .answerText {
width: 100%; width: 100%;
font-family: PingFangSC, PingFang SC; font-family: PingFangSC, PingFang SC;
...@@ -544,15 +593,18 @@ ...@@ -544,15 +593,18 @@
color: #333333; color: #333333;
text-align: justify; text-align: justify;
font-style: normal; font-style: normal;
.answerTextTitle { .answerTextTitle {
width: 30px; width: 30px;
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
} }
.textAnswer { .textAnswer {
word-wrap: break-word; word-wrap: break-word;
font-size: 13px; font-size: 13px;
} }
.copyIcon { .copyIcon {
width: 20px; width: 20px;
color: #409EFF; color: #409EFF;
...@@ -564,55 +616,70 @@ ...@@ -564,55 +616,70 @@
} }
} }
} }
} }
.scrollList::-webkit-scrollbar {display:none}
.container { .scrollList::-webkit-scrollbar {
display: none
}
.container {
// margin-top: -20px; // margin-top: -20px;
} }
::v-deep .el-tabs,
.el-tabs__content, ::v-deep .el-tabs,
.el-tab-pane { .el-tabs__content,
.el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
::v-deep .el-tabs__content {
::v-deep .el-tabs__content {
width: 100%; width: 100%;
height: calc(100% - 50px); height: calc(100% - 50px);
} }
::v-deep .el-tab-pane {
::v-deep .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.scrollList {
.scrollList {
width: 100%; width: 100%;
height: calc(100% - 40px); height: calc(100% - 40px);
overflow: auto; overflow: auto;
} }
.draggable {
.draggable {
position: relative; position: relative;
transition: all 0.3s; transition: all 0.3s;
.icon { .icon {
position: absolute; position: absolute;
left: 10px; left: 10px;
top: 15px; top: 15px;
z-index: 10; z-index: 10;
} }
} }
.textAnswer {
.textAnswer {
word-wrap: break-word; word-wrap: break-word;
display: inline; display: inline;
} }
.img_drop {
.img_drop {
width: 200px; width: 200px;
height: 200px; height: 200px;
background: rgba(0, 0, 0, 0.36); background: rgba(0, 0, 0, 0.36);
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
} }
.skillLibrary::-webkit-scrollbar {display:none}
::v-deep .el-icon-circle-close {
color: #fff;
}
</style>
.skillLibrary::-webkit-scrollbar {
display: none
}
::v-deep .el-icon-circle-close {
color: #fff;
}
</style>
\ No newline at end of file
...@@ -9,9 +9,15 @@ ...@@ -9,9 +9,15 @@
<!-- 标签 --> <!-- 标签 -->
<el-collapse-transition> <el-collapse-transition>
<div v-if="groupList.length > 0" class="tagList columnFlex"> <div v-if="groupList.length > 0" class="tagList columnFlex">
<div v-for="(item, index) in groupList" :key="index" class="tagItem rowFlex columnCenter" :draggable="activeName == 'personal' ? true : false" :class="groupActive == item.value ? 'tagItemActive' : ''" @dragstart="handleDragStart($event, item, index)" @dragover.prevent="handleDragOver($event, item)" @dragenter="handleDragEnter($event, item, 'group')" @dragend="handleDragEnd($event, item, 'group')"> <div v-for="(item, index) in groupList" :key="index" class="tagItem rowFlex columnCenter"
<i class="el-icon-rank icon" style="cursor: move"></i> :draggable="activeName == 'personal' ? true : false"
:class="groupActive == item.value ? 'tagItemActive' : ''" @dragstart="handleDragStart($event, item, index)"
@dragover.prevent="handleDragOver($event, item)" @dragenter="handleDragEnter($event, item, 'group')"
@dragend="handleDragEnd($event, item, 'group')">
<el-tooltip effect="dark" placement="top" :content="item.group_name" v-if="item.group_name.length >= 6">
<p class="text hidden" @click="groupFilter(item, index)">{{ item.group_name }}</p> <p class="text hidden" @click="groupFilter(item, index)">{{ item.group_name }}</p>
</el-tooltip>
<p v-else class="text hidden" @click="groupFilter(item, index)">{{ item.group_name }}</p>
</div> </div>
</div> </div>
<div v-else>暂无话术内容</div> <div v-else>暂无话术内容</div>
...@@ -20,14 +26,19 @@ ...@@ -20,14 +26,19 @@
<div v-loading="skillLoading" class="scrollList"> <div v-loading="skillLoading" class="scrollList">
<el-collapse v-model="collapseActive" @change="handleChange"> <el-collapse v-model="collapseActive" @change="handleChange">
<transition-group v-if="groupDataList.length > 0" tag="div" class="container"> <transition-group v-if="groupDataList.length > 0" tag="div" class="container">
<div v-for="(items, indexs) in groupDataList" :key="indexs" :draggable="activeName == 'personal' ? true : false" class="draggable" @dragstart="handleDragStart($event, items, indexs)" @dragover.prevent="handleDragOver($event, items)" @dragenter="handleDragEnter($event, items, 'item')" @dragend="handleDragEnd($event, items, 'item')"> <div v-for="(items, indexs) in groupDataList" :key="indexs"
:draggable="activeName == 'personal' ? true : false" class="draggable"
@dragstart="handleDragStart($event, items, indexs)" @dragover.prevent="handleDragOver($event, items)"
@dragenter="handleDragEnter($event, items, 'item')" @dragend="handleDragEnd($event, items, 'item')">
<el-popover placement="top" width="300" trigger="hover"> <el-popover placement="top" width="300" trigger="hover">
<p>{{ items.title }}</p> <p>{{ items.title }}</p>
<div slot="reference" class="contentItemTitle allCenter" :style="{ top: items.title.length > 8 ? '5px' : '13px' }">{{ items.title }}</div> <div slot="reference" class="contentItemTitle allCenter"
:style="{ top: items.title.length > 8 ? '5px' : '13px' }">{{ items.title }}</div>
</el-popover> </el-popover>
<div class="rowFlex titleFixed columnCenter"> <div class="rowFlex titleFixed columnCenter">
<div class="num">{{items.message && items.message.attachments && items.message.attachments.length > 1 ? `+${items.message.attachments.length - 1}条` : '' }}</div> <div class="num">{{ items.message && items.message.attachments && items.message.attachments.length > 1 ?
`+${items.message.attachments.length - 1}条` : '' }}</div>
</div> </div>
<el-collapse-item title="" :name="items._id" class="contentItem"> <el-collapse-item title="" :name="items._id" class="contentItem">
...@@ -35,11 +46,14 @@ ...@@ -35,11 +46,14 @@
<div> <div>
<div v-if="i.msgtype == 'text'" class="contentItemDetails rowFlex spaceBetween columnCenter"> <div v-if="i.msgtype == 'text'" class="contentItemDetails rowFlex spaceBetween columnCenter">
<div class="text">{{ i.text.content }}</div> <div class="text">{{ i.text.content }}</div>
<el-button class="sendButton rowFlex allCenter" @click.stop="sendMessageEdit(i, items._id)">发送</el-button> <el-button class="sendButton rowFlex allCenter"
@click.stop="sendMessageEdit(i, items._id)">发送</el-button>
</div> </div>
<div v-if="i.msgtype == 'image'" class="contentItemDetails rowFlex spaceBetween columnCenter"> <div v-if="i.msgtype == 'image'" class="contentItemDetails rowFlex spaceBetween columnCenter">
<el-image class="image" :src="i.image.picurl" :preview-src-list="[i.image.picurl]" fit="contain"></el-image> <el-image class="image" :src="i.image.picurl" :preview-src-list="[i.image.picurl]"
<el-button class="sendButton rowFlex allCenter" @click.stop="sendMessageEdit(i, items._id)">发送</el-button> fit="contain"></el-image>
<el-button class="sendButton rowFlex allCenter"
@click.stop="sendMessageEdit(i, items._id)">发送</el-button>
</div> </div>
</div> </div>
</div> </div>
...@@ -56,7 +70,7 @@ ...@@ -56,7 +70,7 @@
import { procedure_group, procedureList, procedureSort, procedureGroupSort, skillQuote } from '@/api/skill' import { procedure_group, procedureList, procedureSort, procedureGroupSort, skillQuote } from '@/api/skill'
import { mapState, mapMutations, mapActions } from 'vuex' import { mapState, mapMutations, mapActions } from 'vuex'
import { throttle, copyToClipboard } from '@/utils/index' import { throttle, copyToClipboard } from '@/utils/index'
import {getMediaId} from '@/api/works' import { getMediaId } from '@/api/works'
export default { export default {
name: 'skillCompany', name: 'skillCompany',
components: {}, components: {},
...@@ -215,7 +229,7 @@ export default { ...@@ -215,7 +229,7 @@ export default {
// 发送语音的时候 先编辑再发送 // 发送语音的时候 先编辑再发送
sendMessageEdit(item, id) { sendMessageEdit(item, id) {
// 复制内容到粘贴板 // 复制内容到粘贴板
if(item.msgtype == 'text'){ if (item.msgtype == 'text') {
if (item && item.text && item.text.content) { if (item && item.text && item.text.content) {
// copyToClipboard( // copyToClipboard(
// item.text.content, // item.text.content,
...@@ -224,15 +238,15 @@ export default { ...@@ -224,15 +238,15 @@ export default {
// ) // )
this.sendChatMessage(item.text.content) this.sendChatMessage(item.text.content)
} }
}else if(item.msgtype == 'image' && item.image.picurl){ } else if (item.msgtype == 'image' && item.image.picurl) {
this.sendMessageImage(item) this.sendMessageImage(item)
} }
}, },
async sendMessageImage(item, id){ async sendMessageImage(item, id) {
// 发送图片作为链接消息 // 发送图片作为链接消息
if (item.image && item.image.picurl) { if (item.image && item.image.picurl) {
const res = await getMediaId({url: item.image.picurl}) const res = await getMediaId({ url: item.image.picurl })
if(res.status_code == 1){ if (res.status_code == 1) {
this.sendImageAsMedia(res.data.media_id) this.sendImageAsMedia(res.data.media_id)
} }
} else { } else {
...@@ -260,7 +274,7 @@ export default { ...@@ -260,7 +274,7 @@ export default {
}, },
// 发送文本消息 // 发送文本消息
sendChatMessage(text){ sendChatMessage(text) {
this.$ww.sendChatMessage({ this.$ww.sendChatMessage({
msgtype: 'text', msgtype: 'text',
text: { text: {
...@@ -335,7 +349,7 @@ export default { ...@@ -335,7 +349,7 @@ export default {
this.groupLastDataList = this.groupDataList this.groupLastDataList = this.groupDataList
}) })
}, },
handleChange() {}, handleChange() { },
// 重置select // 重置select
resizeSelect() { resizeSelect() {
this.groupActive = '0' this.groupActive = '0'
...@@ -360,6 +374,7 @@ export default { ...@@ -360,6 +374,7 @@ export default {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 10px; padding: 0 10px;
...@@ -370,15 +385,18 @@ export default { ...@@ -370,15 +385,18 @@ export default {
color: #333333; color: #333333;
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;
border-left: 1px solid #ebeef5; border-left: 1px solid #ebeef5;
p { p {
color: #333333; color: #333333;
} }
} }
.content { .content {
width: 100%; width: 100%;
padding: 10px; padding: 10px;
height: 100%; height: 100%;
background: red; background: red;
.contentItemTitle { .contentItemTitle {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -389,9 +407,11 @@ export default { ...@@ -389,9 +407,11 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 2; /* 这里是超出几行省略 */ -webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden; overflow: hidden;
} }
.titleFixed { .titleFixed {
position: absolute; position: absolute;
right: 0px; right: 0px;
...@@ -399,6 +419,7 @@ export default { ...@@ -399,6 +419,7 @@ export default {
margin-left: 15px; margin-left: 15px;
margin-right: 25px; margin-right: 25px;
z-index: 10; z-index: 10;
.num { .num {
width: auto; width: auto;
font-size: 14px; font-size: 14px;
...@@ -407,6 +428,7 @@ export default { ...@@ -407,6 +428,7 @@ export default {
color: #409EFF; color: #409EFF;
margin-right: 10px; margin-right: 10px;
} }
.button { .button {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -430,6 +452,7 @@ export default { ...@@ -430,6 +452,7 @@ export default {
height: auto; height: auto;
margin: 20px 0; margin: 20px 0;
padding-left: 10px; padding-left: 10px;
.text { .text {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -439,6 +462,7 @@ export default { ...@@ -439,6 +462,7 @@ export default {
line-height: 18px; line-height: 18px;
max-width: calc(100% - 60px); max-width: calc(100% - 60px);
} }
.sendButton { .sendButton {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -450,12 +474,14 @@ export default { ...@@ -450,12 +474,14 @@ export default {
color: #333333; color: #333333;
padding: 0; padding: 0;
} }
.image { .image {
max-width: 25%; max-width: 25%;
border-radius: 5px; border-radius: 5px;
} }
} }
} }
.item { .item {
width: 100%; width: 100%;
height: auto; height: auto;
...@@ -467,33 +493,40 @@ export default { ...@@ -467,33 +493,40 @@ export default {
position: relative; position: relative;
padding-left: 10px; padding-left: 10px;
cursor: move; cursor: move;
.tableImage { .tableImage {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: 10px; margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
} }
.text { .text {
color: #333333; color: #333333;
margin-left: 10px; margin-left: 10px;
word-break: break-all; word-break: break-all;
max-width: 80%; max-width: 80%;
} }
.icon { .icon {
display: none; display: none;
position: absolute; position: absolute;
right: 0; right: 0;
top: 12px; top: 12px;
} }
.tags { .tags {
width:250px; width: 250px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: 250px; width: 250px;
} }
.tag { .tag {
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
...@@ -510,34 +543,42 @@ export default { ...@@ -510,34 +543,42 @@ export default {
} }
} }
} }
.item:hover .icon { .item:hover .icon {
display: block; display: block;
} }
} }
::v-deep .el-tabs--border-card .is-active { ::v-deep .el-tabs--border-card .is-active {
border: none !important; border: none !important;
} }
::v-deep .is-active { ::v-deep .is-active {
border: none; border: none;
} }
/* 已移除局部 el-collapse 样式,使用全局样式 */ /* 已移除局部 el-collapse 样式,使用全局样式 */
.inputContent { .inputContent {
width: 100%; width: 100%;
::v-deep .el-input { ::v-deep .el-input {
width: 80%; width: 80%;
} }
} }
.skillBox { .skillBox {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
margin-top: 20px; margin-top: 20px;
} }
.tagList { .tagList {
width: 150px; width: 150px;
height: 100%; height: 100%;
position: relative; position: relative;
border-right: 1px solid #e0e0e0; border-right: 1px solid #e0e0e0;
.tagItem { .tagItem {
width: 100px; width: 100px;
height: 36px; height: 36px;
...@@ -550,11 +591,12 @@ export default { ...@@ -550,11 +591,12 @@ export default {
padding-left: 10px; padding-left: 10px;
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: 100px; max-width: 100px;
margin-left: 10px;
} }
} }
.iconFont { .iconFont {
font-size: 20px; font-size: 20px;
color: #999999; color: #999999;
...@@ -562,10 +604,12 @@ export default { ...@@ -562,10 +604,12 @@ export default {
right: 0; right: 0;
top: 20px; top: 20px;
cursor: pointer; cursor: pointer;
.upIcon { .upIcon {
transform: rotate(90deg); transform: rotate(90deg);
} }
} }
.tagItemActive { .tagItemActive {
color: #409EFF; color: #409EFF;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -573,35 +617,43 @@ export default { ...@@ -573,35 +617,43 @@ export default {
background: #e4fff1; background: #e4fff1;
} }
} }
.scrollList { .scrollList {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.container { .container {
// margin-top: -20px; // margin-top: -20px;
} }
::v-deep .el-tabs, ::v-deep .el-tabs,
.el-tabs__content, .el-tabs__content,
.el-tab-pane { .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
::v-deep .el-tabs__content { ::v-deep .el-tabs__content {
width: 100%; width: 100%;
height: calc(100% - 50px); height: calc(100% - 50px);
} }
::v-deep .el-tab-pane { ::v-deep .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.scrollList { .scrollList {
width: 100%; width: 100%;
height: calc(100% - 40px); height: calc(100% - 40px);
overflow: auto; overflow: auto;
} }
.draggable { .draggable {
position: relative; position: relative;
transition: all 0.3s; transition: all 0.3s;
.icon { .icon {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -609,10 +661,12 @@ export default { ...@@ -609,10 +661,12 @@ export default {
z-index: 10; z-index: 10;
} }
} }
::v-deep .el-icon-circle-close { ::v-deep .el-icon-circle-close {
color: #fff; color: #fff;
} }
} }
.skillTab { .skillTab {
width: 100%; width: 100%;
height: calc(100% - 60px); height: calc(100% - 60px);
......
...@@ -4,24 +4,30 @@ ...@@ -4,24 +4,30 @@
<!-- 标签 --> <!-- 标签 -->
<el-collapse-transition> <el-collapse-transition>
<div v-if="groupList.length > 0" class="tagList columnFlex"> <div v-if="groupList.length > 0" class="tagList columnFlex">
<div v-for="(item, index) in groupList" :key="index" class="tagItem columnCenter" :draggable="false" :class="groupActive == item.value ? 'tagItemActiveText' : ''" @dragstart="handleDragStart($event, item, index)" @dragover.prevent="handleDragOver($event, item)" @dragenter="handleDragEnter($event, item, 'group')" @dragend="handleDragEnd($event, item, 'group')"> <div v-for="(item, index) in groupList" :key="index" class="tagItem columnCenter" :draggable="false"
:class="groupActive == item.value ? 'tagItemActiveText' : ''"
@dragstart="handleDragStart($event, item, index)" @dragover.prevent="handleDragOver($event, item)"
@dragenter="handleDragEnter($event, item, 'group')" @dragend="handleDragEnd($event, item, 'group')">
<div class="rowFlex columnCenter spaceBetween tagItemGroup" @click="groupFilter(item, index)"> <div class="rowFlex columnCenter spaceBetween tagItemGroup" @click="groupFilter(item, index)">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<i class="el-icon-rank icon" style="cursor: move"></i> <el-tooltip effect="dark" placement="top" :content="item.name" v-if="item.name.length >= 6">
<p class="text hidden">{{ item.name }}</p> <p class="text hidden" @click="groupFilter(item, index)">{{ item.name }}</p>
</el-tooltip>
<p v-else class="text hidden" @click="groupFilter(item, index)">{{ item.name }}</p>
</div> </div>
<i class="el-icon-caret-right rotageIcon" :class="groupActive == item.value ? 'rotage' : ''"></i> <i class="el-icon-caret-right rotageIcon" :class="groupActive == item.value ? 'rotage' : ''"></i>
</div> </div>
<!-- 二级分组 --> <!-- 二级分组 -->
<div v-if="item.child.length > 0 && groupActive == item.value" class="childGroup"> <div v-if="item.child.length > 0 && groupActive == item.value" class="childGroup">
<div v-for="child in item.child" :key="child._id" class="childGroupText" :class="[groupActiveChild == child._id ? 'tagItemActive' : '']" @click.stop="groupFilterChild(child)"> <div v-for="child in item.child" :key="child._id" class="childGroupText"
:class="[groupActiveChild == child._id ? 'tagItemActive' : '']" @click.stop="groupFilterChild(child)">
<p class="text hidden">{{ child.name }}</p> <p class="text hidden">{{ child.name }}</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div v-else class="noContent rowFlex allCenter"> <div v-else class="noContent rowFlex allCenter">
<noContent/> <noContent />
</div> </div>
</el-collapse-transition> </el-collapse-transition>
<!-- 话术 --> <!-- 话术 -->
...@@ -34,7 +40,8 @@ ...@@ -34,7 +40,8 @@
<div ref="skillLibrary" v-loading="skillLoading" @scroll="paperScroll" class="scrollList"> <div ref="skillLibrary" v-loading="skillLoading" @scroll="paperScroll" class="scrollList">
<div v-for="(items, indexs) in groupDataList" :key="indexs" class="answerContent"> <div v-for="(items, indexs) in groupDataList" :key="indexs" class="answerContent">
<div class="question"><span class="title">Q:</span>{{ items.name }}</div> <div class="question"><span class="title">Q:</span>{{ items.name }}</div>
<div v-for="(answer, answerIndex) in items.answer" :key="answerIndex" class="answerItem" style="width: 100%"> <div v-for="(answer, answerIndex) in items.answer" :key="answerIndex" class="answerItem"
style="width: 100%">
<!-- <span class="question">{{ answerIndex + 1 }}: {{ answer }}</span> --> <!-- <span class="question">{{ answerIndex + 1 }}: {{ answer }}</span> -->
<div v-if="answer.msgtype == 'text'" class="answerText rowFlex spaceBetween"> <div v-if="answer.msgtype == 'text'" class="answerText rowFlex spaceBetween">
<span class="title rowFlex">A{{ answerIndex + 1 }}:</span> <span class="title rowFlex">A{{ answerIndex + 1 }}:</span>
...@@ -45,7 +52,8 @@ ...@@ -45,7 +52,8 @@
</div> </div>
<div v-else-if="answer.msgtype == 'image'" class="answerText rowFlex"> <div v-else-if="answer.msgtype == 'image'" class="answerText rowFlex">
<span class="title rowFlex">A{{ answerIndex + 1 }}:</span> <span class="title rowFlex">A{{ answerIndex + 1 }}:</span>
<el-image style="max-width: 200px" :src="answer.image.picurl" @click="sendMessageImage(answer, items._id)" :preview-src-list="[answer.image.picurl]" > </el-image> <el-image style="max-width: 200px" :src="answer.image.picurl"
@click="sendMessageImage(answer, items._id)" :preview-src-list="[answer.image.picurl]"> </el-image>
</div> </div>
</div> </div>
</div> </div>
...@@ -59,7 +67,7 @@ ...@@ -59,7 +67,7 @@
// procedure_group, procedureList, procedureSort, procedureGroupSort, skillQuote, // procedure_group, procedureList, procedureSort, procedureGroupSort, skillQuote,
import { groupList, libraryIndex, logClickTime } from '@/api/skill' import { groupList, libraryIndex, logClickTime } from '@/api/skill'
import { mapState, mapMutations, mapActions } from 'vuex' import { mapState, mapMutations, mapActions } from 'vuex'
import { throttle, debounce, copyToClipboard,sendChatMessage } from '@/utils/index' import { throttle, debounce, copyToClipboard, sendChatMessage } from '@/utils/index'
import noContent from '@/components/noContent.vue' import noContent from '@/components/noContent.vue'
export default { export default {
name: 'skillLibrary', name: 'skillLibrary',
...@@ -110,7 +118,7 @@ export default { ...@@ -110,7 +118,7 @@ export default {
} }
}, },
computed: { computed: {
...mapState('game', ['accountSelect','chatUserInfo']), ...mapState('game', ['accountSelect', 'chatUserInfo']),
}, },
watch: { watch: {
accountSelect(newVal, oldVal) { accountSelect(newVal, oldVal) {
...@@ -133,7 +141,7 @@ export default { ...@@ -133,7 +141,7 @@ export default {
this.requestLibraryData() this.requestLibraryData()
}, },
methods: { methods: {
sendMessage: throttle(function(item, id) { sendMessage: throttle(function (item, id) {
console.log(item, id) console.log(item, id)
// this.skillQuote(id, item.length) // this.skillQuote(id, item.length)
}, 500), }, 500),
...@@ -141,14 +149,14 @@ export default { ...@@ -141,14 +149,14 @@ export default {
this.sortID._id = item._id this.sortID._id = item._id
this.dragging = item this.dragging = item
}, },
paperScroll:debounce(function(){ paperScroll: debounce(function () {
const el = this.$refs.skillLibrary const el = this.$refs.skillLibrary
if (el.offsetHeight + el.scrollTop + 10 >= el.scrollHeight) { if (el.offsetHeight + el.scrollTop + 10 >= el.scrollHeight) {
console.log('下一页') console.log('下一页')
this.pageInfo.page++ this.pageInfo.page++
this.searchTable() this.searchTable()
} }
},500), }, 500),
skillQuote(id, num) { skillQuote(id, num) {
const data = { const data = {
type: this.activeName, type: this.activeName,
...@@ -186,7 +194,7 @@ export default { ...@@ -186,7 +194,7 @@ export default {
this.sendChatMessage(item.text.content || '', 'text') this.sendChatMessage(item.text.content || '', 'text')
}, },
sendMessageImage(item){ sendMessageImage(item) {
console.log(item, 'item') console.log(item, 'item')
this.sendChatMessage(item.image.picurl || '', 'image') this.sendChatMessage(item.image.picurl || '', 'image')
}, },
...@@ -256,7 +264,7 @@ export default { ...@@ -256,7 +264,7 @@ export default {
this.groupLastDataList = this.groupDataList this.groupLastDataList = this.groupDataList
}) })
}, },
handleChange() {}, handleChange() { },
// 重置select // 重置select
resizeSelect() { resizeSelect() {
this.groupActive = '0' this.groupActive = '0'
...@@ -268,7 +276,7 @@ export default { ...@@ -268,7 +276,7 @@ export default {
this.isResize = false this.isResize = false
}, 2000) }, 2000)
}, },
sendChatMessage(content, type){ sendChatMessage(content, type) {
sendChatMessage(content, type) sendChatMessage(content, type)
}, },
} }
...@@ -280,9 +288,11 @@ export default { ...@@ -280,9 +288,11 @@ export default {
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
.noContent { .noContent {
font-size: 200px; font-size: 200px;
} }
.contentItemTitle { .contentItemTitle {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -293,9 +303,11 @@ export default { ...@@ -293,9 +303,11 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 2; /* 这里是超出几行省略 */ -webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden; overflow: hidden;
} }
.titleFixed { .titleFixed {
position: absolute; position: absolute;
right: 0px; right: 0px;
...@@ -303,6 +315,7 @@ export default { ...@@ -303,6 +315,7 @@ export default {
margin-left: 15px; margin-left: 15px;
margin-right: 25px; margin-right: 25px;
z-index: 10; z-index: 10;
.num { .num {
width: auto; width: auto;
font-size: 14px; font-size: 14px;
...@@ -311,6 +324,7 @@ export default { ...@@ -311,6 +324,7 @@ export default {
color: #409EFF; color: #409EFF;
margin-right: 10px; margin-right: 10px;
} }
.button { .button {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -334,6 +348,7 @@ export default { ...@@ -334,6 +348,7 @@ export default {
height: auto; height: auto;
margin: 20px 0; margin: 20px 0;
padding-left: 10px; padding-left: 10px;
.text { .text {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -343,6 +358,7 @@ export default { ...@@ -343,6 +358,7 @@ export default {
word-wrap: break-word; word-wrap: break-word;
line-height: 18px; line-height: 18px;
} }
.sendButton { .sendButton {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -354,12 +370,14 @@ export default { ...@@ -354,12 +370,14 @@ export default {
color: #333333; color: #333333;
padding: 0; padding: 0;
} }
.image { .image {
max-width: 25%; max-width: 25%;
border-radius: 5px; border-radius: 5px;
} }
} }
} }
.item { .item {
width: 100%; width: 100%;
height: auto; height: auto;
...@@ -371,33 +389,40 @@ export default { ...@@ -371,33 +389,40 @@ export default {
position: relative; position: relative;
padding-left: 10px; padding-left: 10px;
cursor: move; cursor: move;
.tableImage { .tableImage {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: 10px; margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
} }
.text { .text {
color: #333333; color: #333333;
margin-left: 10px; margin-left: 10px;
word-break: break-all; word-break: break-all;
max-width: 80%; max-width: 80%;
} }
.icon { .icon {
display: none; display: none;
position: absolute; position: absolute;
right: 0; right: 0;
top: 12px; top: 12px;
} }
.tags { .tags {
width: 300px; width: 300px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: 300px; width: 300px;
} }
.tag { .tag {
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
...@@ -414,30 +439,37 @@ export default { ...@@ -414,30 +439,37 @@ export default {
} }
} }
} }
.item:hover .icon { .item:hover .icon {
display: block; display: block;
} }
} }
::v-deep .el-tabs--border-card .is-active { ::v-deep .el-tabs--border-card .is-active {
border: none !important; border: none !important;
} }
::v-deep .is-active { ::v-deep .is-active {
border: none; border: none;
} }
/* 已移除局部 el-collapse 样式,使用全局样式 */ /* 已移除局部 el-collapse 样式,使用全局样式 */
.inputContent { .inputContent {
width: 100%; width: 100%;
margin-bottom: 20px; margin-bottom: 20px;
margin-left: 20px; margin-left: 20px;
::v-deep .el-input { ::v-deep .el-input {
width: 90%; width: 90%;
} }
} }
.skillBox { .skillBox {
width: 100%; width: 100%;
height: calc(100% - 20px); height: calc(100% - 20px);
} }
.tagList { .tagList {
width: 200px; width: 200px;
height: 100%; height: 100%;
...@@ -455,15 +487,18 @@ export default { ...@@ -455,15 +487,18 @@ export default {
color: #333333; color: #333333;
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: 90px; max-width: 90px;
margin-left: 5px; margin-left: 5px;
} }
.tagItemGroup { .tagItemGroup {
height: 36px; height: 36px;
padding-right: 10px; padding-right: 10px;
} }
} }
.iconFont { .iconFont {
font-size: 20px; font-size: 20px;
color: #999999; color: #999999;
...@@ -471,47 +506,57 @@ export default { ...@@ -471,47 +506,57 @@ export default {
right: 0; right: 0;
top: 20px; top: 20px;
cursor: pointer; cursor: pointer;
.upIcon { .upIcon {
transform: rotate(90deg); transform: rotate(90deg);
} }
} }
.tagItemActive { .tagItemActive {
color: #409EFF !important; color: #409EFF !important;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
background: #e4fff1; background: #e4fff1;
} }
.tagItemActiveText { .tagItemActiveText {
color: #409EFF; color: #409EFF;
} }
} }
.libraryListContent{
.libraryListContent {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.rotageIcon { .rotageIcon {
cursor: pointer; cursor: pointer;
transition: all 0.5s; transition: all 0.5s;
transform: rotate(0deg); transform: rotate(0deg);
font-size: 12px; font-size: 12px;
} }
.rotage { .rotage {
transform: rotate(90deg); transform: rotate(90deg);
} }
.childGroup { .childGroup {
p { p {
margin-left: 15px !important; margin-left: 15px !important;
} }
.childGroupText { .childGroupText {
height: 36px; height: 36px;
line-height: 36px; line-height: 36px;
color: #333333; color: #333333;
} }
} }
.scrollList { .scrollList {
width: 100%; width: 100%;
height: 100%; height: 100%;
padding-left: 20px; padding-left: 20px;
.answerContent { .answerContent {
width: 100%; width: 100%;
background: #f7f8fa; background: #f7f8fa;
...@@ -519,15 +564,18 @@ export default { ...@@ -519,15 +564,18 @@ export default {
border: 1px solid #e5e6eb; border: 1px solid #e5e6eb;
padding: 10px; padding: 10px;
margin-bottom: 20px; margin-bottom: 20px;
.title { .title {
width: 30px; width: 30px;
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
margin-right: 10px; margin-right: 10px;
} }
.answerItem { .answerItem {
margin-bottom: 10px; margin-bottom: 10px;
} }
.question { .question {
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
...@@ -536,6 +584,7 @@ export default { ...@@ -536,6 +584,7 @@ export default {
text-align: left; text-align: left;
margin-bottom: 10px; margin-bottom: 10px;
} }
.answerText { .answerText {
width: 100%; width: 100%;
font-family: PingFangSC, PingFang SC; font-family: PingFangSC, PingFang SC;
...@@ -544,15 +593,18 @@ export default { ...@@ -544,15 +593,18 @@ export default {
color: #333333; color: #333333;
text-align: justify; text-align: justify;
font-style: normal; font-style: normal;
.answerTextTitle { .answerTextTitle {
width: 30px; width: 30px;
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
} }
.textAnswer { .textAnswer {
word-wrap: break-word; word-wrap: break-word;
font-size: 13px; font-size: 13px;
} }
.copyIcon { .copyIcon {
width: 20px; width: 20px;
color: #409EFF; color: #409EFF;
...@@ -565,32 +617,42 @@ export default { ...@@ -565,32 +617,42 @@ export default {
} }
} }
} }
.scrollList::-webkit-scrollbar {display:none}
.scrollList::-webkit-scrollbar {
display: none
}
.container { .container {
// margin-top: -20px; // margin-top: -20px;
} }
::v-deep .el-tabs, ::v-deep .el-tabs,
.el-tabs__content, .el-tabs__content,
.el-tab-pane { .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
::v-deep .el-tabs__content { ::v-deep .el-tabs__content {
width: 100%; width: 100%;
height: calc(100% - 50px); height: calc(100% - 50px);
} }
::v-deep .el-tab-pane { ::v-deep .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.scrollList { .scrollList {
width: 100%; width: 100%;
height: calc(100% - 40px); height: calc(100% - 40px);
overflow: auto; overflow: auto;
} }
.draggable { .draggable {
position: relative; position: relative;
transition: all 0.3s; transition: all 0.3s;
.icon { .icon {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -598,10 +660,12 @@ export default { ...@@ -598,10 +660,12 @@ export default {
z-index: 10; z-index: 10;
} }
} }
.textAnswer { .textAnswer {
word-wrap: break-word; word-wrap: break-word;
display: inline; display: inline;
} }
.img_drop { .img_drop {
width: 200px; width: 200px;
height: 200px; height: 200px;
...@@ -610,7 +674,11 @@ export default { ...@@ -610,7 +674,11 @@ export default {
left: 0; left: 0;
top: 0; top: 0;
} }
.skillLibrary::-webkit-scrollbar {display:none}
.skillLibrary::-webkit-scrollbar {
display: none
}
::v-deep .el-icon-circle-close { ::v-deep .el-icon-circle-close {
color: #fff; color: #fff;
} }
......
...@@ -9,9 +9,15 @@ ...@@ -9,9 +9,15 @@
<!-- 标签 --> <!-- 标签 -->
<el-collapse-transition> <el-collapse-transition>
<div v-if="groupList.length > 0" class="tagList columnFlex"> <div v-if="groupList.length > 0" class="tagList columnFlex">
<div v-for="(item, index) in groupList" :key="index" class="tagItem rowFlex columnCenter" :draggable="activeName == 'personal' ? true : false" :class="groupActive == item.value ? 'tagItemActive' : ''" @dragstart="handleDragStart($event, item, index)" @dragover.prevent="handleDragOver($event, item)" @dragenter="handleDragEnter($event, item, 'group')" @dragend="handleDragEnd($event, item, 'group')"> <div v-for="(item, index) in groupList" :key="index" class="tagItem rowFlex columnCenter"
<i class="el-icon-rank icon" v-if="activeName == 'personal'" style="cursor: move"></i> :draggable="activeName == 'personal' ? true : false"
:class="groupActive == item.value ? 'tagItemActive' : ''" @dragstart="handleDragStart($event, item, index)"
@dragover.prevent="handleDragOver($event, item)" @dragenter="handleDragEnter($event, item, 'group')"
@dragend="handleDragEnd($event, item, 'group')">
<el-tooltip effect="dark" placement="top" :content="item.group_name" v-if="item.group_name.length >= 6">
<p class="text hidden" @click="groupFilter(item, index)">{{ item.group_name }}</p> <p class="text hidden" @click="groupFilter(item, index)">{{ item.group_name }}</p>
</el-tooltip>
<p v-else class="text hidden" @click="groupFilter(item, index)">{{ item.group_name }}</p>
</div> </div>
</div> </div>
<div v-else>暂无话术内容</div> <div v-else>暂无话术内容</div>
...@@ -20,14 +26,19 @@ ...@@ -20,14 +26,19 @@
<div v-loading="skillLoading" class="scrollList"> <div v-loading="skillLoading" class="scrollList">
<el-collapse v-model="collapseActive" @change="handleChange"> <el-collapse v-model="collapseActive" @change="handleChange">
<transition-group v-if="groupDataList.length > 0" tag="div" class="container"> <transition-group v-if="groupDataList.length > 0" tag="div" class="container">
<div v-for="(items, indexs) in groupDataList" :key="indexs" :draggable="activeName == 'personal' ? true : false" class="draggable" @dragstart="handleDragStart($event, items, indexs)" @dragover.prevent="handleDragOver($event, items)" @dragenter="handleDragEnter($event, items, 'item')" @dragend="handleDragEnd($event, items, 'item')"> <div v-for="(items, indexs) in groupDataList" :key="indexs"
:draggable="activeName == 'personal' ? true : false" class="draggable"
@dragstart="handleDragStart($event, items, indexs)" @dragover.prevent="handleDragOver($event, items)"
@dragenter="handleDragEnter($event, items, 'item')" @dragend="handleDragEnd($event, items, 'item')">
<el-popover placement="top" width="300" trigger="hover"> <el-popover placement="top" width="300" trigger="hover">
<p>{{ items.title }}</p> <p>{{ items.title }}</p>
<div slot="reference" class="contentItemTitle allCenter" :style="{ top: items.title.length > 8 ? '5px' : '13px' }">{{ items.title }}</div> <div slot="reference" class="contentItemTitle allCenter"
:style="{ top: items.title.length > 8 ? '5px' : '13px' }">{{ items.title }}</div>
</el-popover> </el-popover>
<div class="rowFlex titleFixed columnCenter"> <div class="rowFlex titleFixed columnCenter">
<div class="num">{{ items.message.attachments.length > 1 ? `+${items.message.attachments.length - 1}条` : '' }}</div> <div class="num">{{ items.message.attachments.length > 1 ? `+${items.message.attachments.length - 1}条` :
'' }}</div>
<!-- <el-button class="button rowFlex allCenter" @click.stop="sendMessage(items.message.attachments, items._id)">发送</el-button> --> <!-- <el-button class="button rowFlex allCenter" @click.stop="sendMessage(items.message.attachments, items._id)">发送</el-button> -->
</div> </div>
<el-collapse-item title="" :name="items._id" class="contentItem"> <el-collapse-item title="" :name="items._id" class="contentItem">
...@@ -35,11 +46,14 @@ ...@@ -35,11 +46,14 @@
<div> <div>
<div v-if="i.msgtype == 'text'" class="contentItemDetails rowFlex spaceBetween columnCenter"> <div v-if="i.msgtype == 'text'" class="contentItemDetails rowFlex spaceBetween columnCenter">
<div class="text">{{ i.text.content }}</div> <div class="text">{{ i.text.content }}</div>
<el-button class="sendButton rowFlex allCenter" @click.stop="sendMessageEdit(i, items._id)">发送</el-button> <el-button class="sendButton rowFlex allCenter"
@click.stop="sendMessageEdit(i, items._id)">发送</el-button>
</div> </div>
<div v-if="i.msgtype == 'image'" class="contentItemDetails rowFlex spaceBetween columnCenter"> <div v-if="i.msgtype == 'image'" class="contentItemDetails rowFlex spaceBetween columnCenter">
<el-image class="image" :src="i.image.picurl" :preview-src-list="[i.image.picurl]" fit="contain"></el-image> <el-image class="image" :src="i.image.picurl" :preview-src-list="[i.image.picurl]"
<el-button class="sendButton rowFlex allCenter" @click.stop="sendMessageEdit(i, items._id)">发送</el-button> fit="contain"></el-image>
<el-button class="sendButton rowFlex allCenter"
@click.stop="sendMessageEdit(i, items._id)">发送</el-button>
</div> </div>
</div> </div>
</div> </div>
...@@ -54,7 +68,7 @@ ...@@ -54,7 +68,7 @@
</template> </template>
<script> <script>
import { procedure_group, procedureList, procedureSort, procedureGroupSort } from '@/api/skill' import { procedure_group, procedureList, procedureSort, procedureGroupSort } from '@/api/skill'
import {getMediaId} from '@/api/works' import { getMediaId } from '@/api/works'
import { mapState, mapMutations, mapActions } from 'vuex' import { mapState, mapMutations, mapActions } from 'vuex'
import { debounce, copyToClipboard } from '@/utils/index' import { debounce, copyToClipboard } from '@/utils/index'
export default { export default {
...@@ -103,7 +117,7 @@ export default { ...@@ -103,7 +117,7 @@ export default {
}, },
computed: { computed: {
...mapState('game', ['accountSelect']), ...mapState('game', ['accountSelect']),
...mapState('user', ['userid','external_userid']), ...mapState('user', ['userid', 'external_userid']),
}, },
watch: { watch: {
accountSelect(newVal, oldVal) { accountSelect(newVal, oldVal) {
...@@ -127,14 +141,14 @@ export default { ...@@ -127,14 +141,14 @@ export default {
}, },
methods: { methods: {
// ...mapMutations('common', ['set_sendSkillMessage', 'set_isEditSkill']), // ...mapMutations('common', ['set_sendSkillMessage', 'set_isEditSkill']),
sendMessage: debounce(function(item, id) { sendMessage: debounce(function (item, id) {
console.log(item, id, 'sendMessage') console.log(item, id, 'sendMessage')
}, 500), }, 500),
// 发送语音的时候 先编辑再发送 // 发送语音的时候 先编辑再发送
sendMessageEdit(item, id) { sendMessageEdit(item, id) {
console.log(item) console.log(item)
// 复制内容到粘贴板 // 复制内容到粘贴板
if(item.msgtype == 'text'){ if (item.msgtype == 'text') {
if (item && item.text && item.text.content) { if (item && item.text && item.text.content) {
// copyToClipboard( // copyToClipboard(
// item.text.content, // item.text.content,
...@@ -143,15 +157,15 @@ export default { ...@@ -143,15 +157,15 @@ export default {
// ) // )
this.sendChatMessage(item.text.content) this.sendChatMessage(item.text.content)
} }
}else if(item.msgtype == 'image' && item.image.picurl){ } else if (item.msgtype == 'image' && item.image.picurl) {
this.sendMessageImage(item) this.sendMessageImage(item)
} }
}, },
async sendMessageImage(item, id){ async sendMessageImage(item, id) {
// 发送图片作为链接消息 // 发送图片作为链接消息
if (item.image && item.image.picurl) { if (item.image && item.image.picurl) {
const res = await getMediaId({url: item.image.picurl}) const res = await getMediaId({ url: item.image.picurl })
if(res.status_code == 1){ if (res.status_code == 1) {
this.sendImageAsMedia(res.data.media_id) this.sendImageAsMedia(res.data.media_id)
} }
} else { } else {
...@@ -178,7 +192,7 @@ export default { ...@@ -178,7 +192,7 @@ export default {
}, },
// 发送文本消息 // 发送文本消息
sendChatMessage(text){ sendChatMessage(text) {
this.$ww.sendChatMessage({ this.$ww.sendChatMessage({
msgtype: 'text', msgtype: 'text',
text: { text: {
...@@ -332,7 +346,7 @@ export default { ...@@ -332,7 +346,7 @@ export default {
this.groupLastDataList = this.groupDataList this.groupLastDataList = this.groupDataList
}) })
}, },
handleChange() {}, handleChange() { },
// 重置select // 重置select
resizeSelect() { resizeSelect() {
this.groupActive = '0' this.groupActive = '0'
...@@ -357,6 +371,7 @@ export default { ...@@ -357,6 +371,7 @@ export default {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 10px; padding: 0 10px;
...@@ -367,15 +382,18 @@ export default { ...@@ -367,15 +382,18 @@ export default {
color: #333333; color: #333333;
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;
border-left: 1px solid #ebeef5; border-left: 1px solid #ebeef5;
p { p {
color: #333333; color: #333333;
} }
} }
.content { .content {
width: 100%; width: 100%;
padding: 10px; padding: 10px;
height: 100%; height: 100%;
background: red; background: red;
.contentItemTitle { .contentItemTitle {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -386,9 +404,11 @@ export default { ...@@ -386,9 +404,11 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 2; /* 这里是超出几行省略 */ -webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden; overflow: hidden;
} }
.titleFixed { .titleFixed {
position: absolute; position: absolute;
right: 0px; right: 0px;
...@@ -396,6 +416,7 @@ export default { ...@@ -396,6 +416,7 @@ export default {
margin-left: 15px; margin-left: 15px;
margin-right: 25px; margin-right: 25px;
z-index: 10; z-index: 10;
.num { .num {
width: auto; width: auto;
font-size: 14px; font-size: 14px;
...@@ -404,6 +425,7 @@ export default { ...@@ -404,6 +425,7 @@ export default {
color: #409EFF; color: #409EFF;
margin-right: 10px; margin-right: 10px;
} }
.button { .button {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -427,6 +449,7 @@ export default { ...@@ -427,6 +449,7 @@ export default {
height: auto; height: auto;
margin: 20px 0; margin: 20px 0;
padding-left: 10px; padding-left: 10px;
.text { .text {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -436,6 +459,7 @@ export default { ...@@ -436,6 +459,7 @@ export default {
line-height: 18px; line-height: 18px;
max-width: calc(100% - 60px); max-width: calc(100% - 60px);
} }
.sendButton { .sendButton {
width: 50px; width: 50px;
height: 24px; height: 24px;
...@@ -447,12 +471,14 @@ export default { ...@@ -447,12 +471,14 @@ export default {
color: #333333; color: #333333;
padding: 0; padding: 0;
} }
.image { .image {
max-width: 25%; max-width: 25%;
border-radius: 5px; border-radius: 5px;
} }
} }
} }
.item { .item {
width: 100%; width: 100%;
height: auto; height: auto;
...@@ -464,33 +490,40 @@ export default { ...@@ -464,33 +490,40 @@ export default {
position: relative; position: relative;
padding-left: 10px; padding-left: 10px;
cursor: move; cursor: move;
.tableImage { .tableImage {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: 10px; margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
} }
.text { .text {
color: #333333; color: #333333;
margin-left: 10px; margin-left: 10px;
word-break: break-all; word-break: break-all;
max-width: 80%; max-width: 80%;
} }
.icon { .icon {
display: none; display: none;
position: absolute; position: absolute;
right: 0; right: 0;
top: 12px; top: 12px;
} }
.tags { .tags {
width:260px; width: 260px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: 260px; width: 260px;
} }
.tag { .tag {
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
...@@ -507,34 +540,42 @@ export default { ...@@ -507,34 +540,42 @@ export default {
} }
} }
} }
.item:hover .icon { .item:hover .icon {
display: block; display: block;
} }
} }
::v-deep .el-tabs--border-card .is-active { ::v-deep .el-tabs--border-card .is-active {
border: none !important; border: none !important;
} }
::v-deep .is-active { ::v-deep .is-active {
border: none; border: none;
} }
/* 已移除局部 el-collapse 样式,使用全局样式 */ /* 已移除局部 el-collapse 样式,使用全局样式 */
.inputContent { .inputContent {
width: 100%; width: 100%;
::v-deep .el-input { ::v-deep .el-input {
width: 80%; width: 80%;
} }
} }
.skillBox { .skillBox {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
margin-top: 20px; margin-top: 20px;
} }
.tagList { .tagList {
width: 140px; width: 140px;
height: 100%; height: 100%;
position: relative; position: relative;
border-right: 1px solid #e0e0e0; border-right: 1px solid #e0e0e0;
.tagItem { .tagItem {
width: 100px; width: 100px;
height: 36px; height: 36px;
...@@ -547,11 +588,12 @@ export default { ...@@ -547,11 +588,12 @@ export default {
padding-left: 10px; padding-left: 10px;
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: 90px; max-width: 90px;
margin-left: 10px;
} }
} }
.iconFont { .iconFont {
font-size: 20px; font-size: 20px;
color: #999999; color: #999999;
...@@ -559,10 +601,12 @@ export default { ...@@ -559,10 +601,12 @@ export default {
right: 0; right: 0;
top: 20px; top: 20px;
cursor: pointer; cursor: pointer;
.upIcon { .upIcon {
transform: rotate(90deg); transform: rotate(90deg);
} }
} }
.tagItemActive { .tagItemActive {
color: #409EFF; color: #409EFF;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -570,35 +614,43 @@ export default { ...@@ -570,35 +614,43 @@ export default {
background: #e4fff1; background: #e4fff1;
} }
} }
.scrollList { .scrollList {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.container { .container {
// margin-top: -20px; // margin-top: -20px;
} }
::v-deep .el-tabs, ::v-deep .el-tabs,
.el-tabs__content, .el-tabs__content,
.el-tab-pane { .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
::v-deep .el-tabs__content { ::v-deep .el-tabs__content {
width: 100%; width: 100%;
height: calc(100% - 50px); height: calc(100% - 50px);
} }
::v-deep .el-tab-pane { ::v-deep .el-tab-pane {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.scrollList { .scrollList {
width: 100%; width: 100%;
height: calc(100% - 40px); height: calc(100% - 40px);
overflow: auto; overflow: auto;
} }
.draggable { .draggable {
position: relative; position: relative;
transition: all 0.3s; transition: all 0.3s;
.icon { .icon {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -606,10 +658,12 @@ export default { ...@@ -606,10 +658,12 @@ export default {
z-index: 10; z-index: 10;
} }
} }
::v-deep .el-icon-circle-close { ::v-deep .el-icon-circle-close {
color: #fff; color: #fff;
} }
} }
.skillTab { .skillTab {
width: 100%; width: 100%;
height: calc(100% - 60px); height: calc(100% - 60px);
...@@ -640,6 +694,7 @@ export default { ...@@ -640,6 +694,7 @@ export default {
.tagList { .tagList {
.tagItem { .tagItem {
transition: all 0.3s ease; transition: all 0.3s ease;
&:hover { &:hover {
background-color: #f5f7fa; background-color: #f5f7fa;
} }
......
...@@ -5,178 +5,96 @@ ...@@ -5,178 +5,96 @@
</div> --> </div> -->
<div class="account-task-container-content" v-scroll="requestOrderList"> <div class="account-task-container-content" v-scroll="requestOrderList">
<!-- 运营任务 和 用户任务 --> <!-- 运营任务 和 用户任务 -->
<div <div class="orderDetailsScroll" v-loading="loading">
class="orderDetailsScroll"
v-loading="loading"
>
<div v-if="orderList.length > 0"> <div v-if="orderList.length > 0">
<div <div v-for="(item, index) in orderList" :key="index" class="orderDetails">
v-for="(item, index) in orderList"
:key="index"
class="orderDetails"
>
<div class="orderDetailsList"> <div class="orderDetailsList">
<el-collapse <el-collapse v-model="collapseValue" @change="handleChange(item, $event)">
v-model="collapseValue" <el-collapse-item :name="item?.order_id || '--'">
@change="handleChange(item,$event)"
>
<el-collapse-item :name="item.order_id || '--'">
<template slot="title"> <template slot="title">
<div class="orderDetailsTitle"> <div class="orderDetailsTitle">
<div class="money rowFlex spaceBetween"> <div class="money rowFlex spaceBetween">
<p class="text">{{ item.role_name }} - {{ item.server_name }} - ¥{{ item.recharge_total }}</p> <p class="text">{{ item.role_name }} - {{ item.server_name }} - ¥{{ item.recharge_total }}</p>
<div class="btns"> <div class="btns">
<span style="color: #0988f2">{{ taskTypeList.find((items) => items.value == item.plan_type) && taskTypeList.find((items) => items.value == item.plan_type).label?taskTypeList.find((items) => items.value == item.plan_type).label:'' }}</span> <span style="color: #0988f2">{{taskTypeList.find((items) => items.value == item.plan_type) &&
<span taskTypeList.find((items) => items.value == item.plan_type).label ? taskTypeList.find((items)
v-if="item.status_name" => items.value == item.plan_type).label:'' }}</span>
class="btn" <span v-if="item.status_name" class="btn"
:class="[item.status_name == '待跟进' ? 'noSend' : '', item.status_name == '已跟进' ? 'sended' : '', item.status_name == '已完成' ? 'sended' : '', item.status_name == '跟进中' ? 'noSend' : '']" :class="[item.status_name == '待跟进' ? 'noSend' : '', item.status_name == '已跟进' ? 'sended' : '', item.status_name == '已完成' ? 'sended' : '', item.status_name == '跟进中' ? 'noSend' : '']">{{
>{{ item.status_name }}</span> item.status_name }}</span>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<div class="editLayer"> <div class="editLayer">
<el-form <el-form :model="webForm" label-width="100px">
:model="webForm" <el-form-item label="跟进客服:">
label-width="100px"
>
<el-form-item
label="跟进客服:"
>
<p class="text" style="margin-left: 10px;">{{ item.tracer_name || '--' }}</p> <p class="text" style="margin-left: 10px;">{{ item.tracer_name || '--' }}</p>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="待维护日期:">
label="待维护日期:"
>
<p class="text" style="margin-left: 10px;">{{ item.assignment_time }}</p> <p class="text" style="margin-left: 10px;">{{ item.assignment_time }}</p>
</el-form-item> </el-form-item>
<!-- 新增异常原因筛选 当 plan_type==5 5:为大R异跟进异常时 新增异常原因筛选 --> <!-- 新增异常原因筛选 当 plan_type==5 5:为大R异跟进异常时 新增异常原因筛选 -->
<el-form-item <el-form-item v-if="taskInfo.plan_type && taskInfo.plan_type == 5" label="异常原因"
v-if="taskInfo.plan_type && taskInfo.plan_type==5" prop="abnormal_types">
label="异常原因" <el-select v-model="webForm.abnormal_types" placeholder="请选择" multiple
prop="abnormal_types" style="margin-left: 10px;" collapse-tags>
> <el-option v-for="item in errorTypeList" :key="item.value" :label="item.label"
<el-select :value="item.value">
v-model="webForm.abnormal_types"
placeholder="请选择"
multiple
style="margin-left: 10px;"
collapse-tags
>
<el-option
v-for="item in errorTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="跟进结果:" prop="trace_result">
label="跟进结果:" <el-select v-model="webForm.trace_result" placeholder="请选择" style="margin-left: 10px;">
prop="trace_result" <el-option v-for="item in traceList" :key="item.value" :label="item.label"
> :value="item.value"> </el-option>
<el-select
v-model="webForm.trace_result"
placeholder="请选择"
style="margin-left: 10px;"
>
<el-option
v-for="item in traceList"
:key="item.value"
:label="item.label"
:value="item.value"
> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item v-if="activeType == 'user_task'" label="免打扰:" prop="no_trouble"
v-if="activeType == 'user_task'" style="margin-left: 10px;">
label="免打扰:"
prop="no_trouble"
style="margin-left: 10px;"
>
<div class="noDisturb"> <div class="noDisturb">
<el-checkbox <el-checkbox v-model="webForm.no_trouble" class="noDisturb rowFlex " :true-label="1"
v-model="webForm.no_trouble" :false-label="0">免打扰(勾选后该用户不会再被分配任务)</el-checkbox>
class="noDisturb rowFlex "
:true-label="1"
:false-label="0"
>免打扰(勾选后该用户不会再被分配任务)</el-checkbox>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div <div v-for="(remark, indexs) in item.remarks" :key="indexs"
v-for="(remark, indexs) in item.remarks" class="item rowFlex columnCenter spaceBetween">
:key="indexs" <div class="rowFlex spaceBetween remarkItem" style="width: 100%;">
class="item rowFlex columnCenter spaceBetween" <span style="margin-left: 40px;color: #999999;">备注:</span>
>
<div
class="rowFlex spaceBetween remarkItem"
style="width: 100%;"
>
<span
style="margin-left: 40px;color: #999999;"
>备注:</span>
<div class="remarkTxext rowFlex remark flex1"> <div class="remarkTxext rowFlex remark flex1">
<textEditor <textEditor :remark.sync="remark.remark" :domid="'taskRemark' + indexs" style="width: 100%;"
:remark.sync="remark.remark" :contenteditable="!Boolean(remark.id)" @resultReamrk="resultReamrk" />
:domid="'taskRemark' + indexs"
style="width: 100%;"
:contenteditable="!Boolean(remark.id)"
@resultReamrk="resultReamrk"
/>
</div> </div>
<i <i v-if="indexs == 0" class="el-icon-circle-plus-outline remarkHandle" type="primary"
v-if="indexs == 0" @click="addRemark(index)"></i>
class="el-icon-circle-plus-outline remarkHandle" <i v-else-if="indexs != 0 && !remark.id" class="el-icon-remove-outline remarkHandle"
type="primary" type="primary" @click="removeRemark(index, indexs)"></i>
@click="addRemark(index)"
></i>
<i
v-else-if="indexs != 0 && !remark.id"
class="el-icon-remove-outline remarkHandle"
type="primary"
@click="removeRemark(index, indexs)"
></i>
</div> </div>
</div> </div>
<div <div class="btns rowFlex allCenter" style="margin-top: 20px">
class="btns rowFlex allCenter" <el-button :disabled="item.status == 3" :loading="remarkLoading"
style="margin-top: 20px" @click="saveRemak(item, index)">保存</el-button>
> <el-button type="primary" :disabled="item.status == 3" :loading="taskLoading"
<el-button @click="completeTask(item, index)">保存并完成任务</el-button>
:disabled="item.status==3"
:loading="remarkLoading"
@click="saveRemak(item, index)"
>保存</el-button>
<el-button
type="primary"
:disabled="item.status==3"
:loading="taskLoading"
@click="completeTask(item, index)"
>保存并完成任务</el-button>
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</div> </div>
</div> </div>
</div> </div>
<div <div v-else-if="!loading && orderList.length == 0" style="margin-top: 100px;"
v-else-if="!loading && orderList.length == 0" class="noContent rowFlex allCenter">
style="margin-top: 100px;"
class="noContent rowFlex allCenter"
>
<noContent /> <noContent />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { taskTrack, taskRecord, logsSave, searchcondition } from '@/api/game' import { taskTrack, taskRecord, logsSave, searchcondition } from '@/api/game'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import textEditor from '@/components/textEditor.vue' import textEditor from '@/components/textEditor.vue'
...@@ -444,16 +362,18 @@ ...@@ -444,16 +362,18 @@
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.task-info-container { .task-info-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
::v-deep .el-form-item__content{
::v-deep .el-form-item__content {
line-height: 32px; line-height: 32px;
} }
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 10px; padding: 0 10px;
...@@ -464,10 +384,12 @@ ...@@ -464,10 +384,12 @@
color: #333333; color: #333333;
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;
border-left: 1px solid #ebeef5; border-left: 1px solid #ebeef5;
p { p {
color: #333333; color: #333333;
} }
} }
.account-task-container-content { .account-task-container-content {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -475,8 +397,10 @@ ...@@ -475,8 +397,10 @@
overflow-x: hidden; overflow-x: hidden;
padding: 20px 0; padding: 20px 0;
padding-top: 0px; padding-top: 0px;
.contentItem { .contentItem {
position: relative; position: relative;
.title { .title {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -485,6 +409,7 @@ ...@@ -485,6 +409,7 @@
color: #999999; color: #999999;
} }
} }
.taskItem { .taskItem {
width: 100%; width: 100%;
height: auto; height: auto;
...@@ -493,36 +418,43 @@ ...@@ -493,36 +418,43 @@
color: #333333; color: #333333;
transition: all 0.5s; transition: all 0.5s;
position: relative; position: relative;
div { div {
width: 100%; width: 100%;
margin-bottom: 5px; margin-bottom: 5px;
} }
.remark { .remark {
::v-deep .el-textarea__inner { ::v-deep .el-textarea__inner {
height: 80px; height: 80px;
} }
} }
.tableImage { .tableImage {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: 10px; margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
} }
.text { .text {
color: #333333; color: #333333;
margin-left: 10px; margin-left: 10px;
word-break: break-all; word-break: break-all;
max-width: 75%; max-width: 75%;
} }
.icon { .icon {
display: none; display: none;
position: absolute; position: absolute;
right: 0; right: 0;
top: 12px; top: 12px;
} }
.dianFail { .dianFail {
display: inline-block; display: inline-block;
width: 8px; width: 8px;
...@@ -530,6 +462,7 @@ ...@@ -530,6 +462,7 @@
background: #f45454; background: #f45454;
border-radius: 5px; border-radius: 5px;
} }
.dian { .dian {
display: inline-block; display: inline-block;
width: 8px; width: 8px;
...@@ -537,6 +470,7 @@ ...@@ -537,6 +470,7 @@
background: #00bf8a; background: #00bf8a;
border-radius: 5px; border-radius: 5px;
} }
.dian2 { .dian2 {
display: inline-block; display: inline-block;
width: 8px; width: 8px;
...@@ -551,51 +485,62 @@ ...@@ -551,51 +485,62 @@
height: 80px; height: 80px;
// margin-left: -20px; // margin-left: -20px;
padding: 10px 0; padding: 10px 0;
.orderMoneyItem { .orderMoneyItem {
width: 50%; width: 50%;
text-align: center; text-align: center;
margin-top: 5px; margin-top: 5px;
span { span {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500; font-weight: 500;
color: #333333; color: #333333;
} }
p { p {
font-size: 22px; font-size: 22px;
color: #00bf8a; color: #00bf8a;
} }
} }
} }
.filterList { .filterList {
margin-bottom: 10px; margin-bottom: 10px;
.filterListInput { .filterListInput {
width: 60%; width: 60%;
margin-left: 15px; margin-left: 15px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.filterListDate { .filterListDate {
width: 150px; width: 150px;
margin-bottom: 10px; margin-bottom: 10px;
} }
::v-deep .search-item .item-label { ::v-deep .search-item .item-label {
margin-right: 20px; margin-right: 20px;
} }
} }
.orderDetailsScroll { .orderDetailsScroll {
width: 100%; width: 100%;
} }
.orderDetails { .orderDetails {
width: 100%; width: 100%;
height: auto; height: auto;
margin-top: 20px; margin-top: 20px;
position: relative; position: relative;
.bridgeMain { .bridgeMain {
position: absolute; position: absolute;
top: 0px; top: 0px;
right: 0px; right: 0px;
width: 50px; width: 50px;
height: 50px; height: 50px;
.text { .text {
font-size: 8px; font-size: 8px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -609,6 +554,7 @@ ...@@ -609,6 +554,7 @@
width: 50px; width: 50px;
text-align: center; text-align: center;
} }
.bridge { .bridge {
font-size: 50px; font-size: 50px;
position: absolute; position: absolute;
...@@ -620,12 +566,15 @@ ...@@ -620,12 +566,15 @@
.orderDetailsTitle { .orderDetailsTitle {
width: 100%; width: 100%;
background: #f9faff; background: #f9faff;
.money { .money {
width: 100%; width: 100%;
height: auto; height: auto;
.btns { .btns {
margin-right: 20px; margin-right: 20px;
} }
.btn { .btn {
background: #fff; background: #fff;
border-radius: 4px; border-radius: 4px;
...@@ -635,6 +584,7 @@ ...@@ -635,6 +584,7 @@
color: #333333; color: #333333;
cursor: pointer; cursor: pointer;
} }
.btnnot { .btnnot {
background: #ffdddd; background: #ffdddd;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -642,6 +592,7 @@ ...@@ -642,6 +592,7 @@
color: #f56c6c; color: #f56c6c;
border: none; border: none;
} }
.btnsuccess { .btnsuccess {
background: #e1fff0; background: #e1fff0;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -649,6 +600,7 @@ ...@@ -649,6 +600,7 @@
color: #00bf8a; color: #00bf8a;
border: none; border: none;
} }
.sended { .sended {
padding: 0 8px; padding: 0 8px;
height: 20px; height: 20px;
...@@ -660,6 +612,7 @@ ...@@ -660,6 +612,7 @@
font-weight: 400; font-weight: 400;
color: #00bf8a; color: #00bf8a;
} }
.noSend { .noSend {
padding: 0 8px; padding: 0 8px;
height: 20px; height: 20px;
...@@ -672,6 +625,7 @@ ...@@ -672,6 +625,7 @@
color: #ffa81d; color: #ffa81d;
} }
} }
.text { .text {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
...@@ -679,16 +633,20 @@ ...@@ -679,16 +633,20 @@
color: #333333; color: #333333;
max-width: 200px; max-width: 200px;
overflow: hidden; overflow: hidden;
white-space: nowrap; /* 防止文字换行 */ white-space: nowrap;
text-overflow: ellipsis; /* 超出部分显示省略号 */ /* 防止文字换行 */
text-overflow: ellipsis;
/* 超出部分显示省略号 */
} }
} }
.orderDetailsList { .orderDetailsList {
width: 100%; width: 100%;
height: auto; height: auto;
background: #ffffff; background: #ffffff;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
position: relative; position: relative;
.titleFix { .titleFix {
position: absolute; position: absolute;
left: 10px; left: 10px;
...@@ -698,31 +656,37 @@ ...@@ -698,31 +656,37 @@
} }
} }
} }
.remarkHandle { .remarkHandle {
font-size: 20px; font-size: 20px;
color: #0ac358; color: #0ac358;
cursor: pointer; cursor: pointer;
margin-right: 5px; margin-right: 5px;
position:absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
} }
::v-deep .el-tabs__item { ::v-deep .el-tabs__item {
line-height: 26px; line-height: 26px;
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
} }
.remarkTxext{
.remarkTxext {
width: calc(100% - 120px); width: calc(100% - 120px);
margin-left: 10px; margin-left: 10px;
} }
.remarkItem{
.remarkItem {
margin-left: 40px; margin-left: 40px;
position: relative; position: relative;
} }
::v-deep .el-collapse { ::v-deep .el-collapse {
border: none; border: none;
} }
::v-deep .el-collapse-item__header { ::v-deep .el-collapse-item__header {
width: 100%; width: 100%;
color: #333333; color: #333333;
...@@ -734,33 +698,39 @@ ...@@ -734,33 +698,39 @@
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
::v-deep .el-collapse-item__arrow { ::v-deep .el-collapse-item__arrow {
position: absolute; position: absolute;
right: 5px; right: 5px;
} }
::v-deep .el-collapse-item__content{
::v-deep .el-collapse-item__content {
padding: 10px; padding: 10px;
} }
.editLayer { .editLayer {
padding: 10px 0; padding: 10px 0;
.noDisturb { .noDisturb {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 4px; margin-top: 4px;
} }
::v-deep .el-form-item__label { ::v-deep .el-form-item__label {
font-weight: normal; font-weight: normal;
color: #999999; color: #999999;
padding-right: 8px; padding-right: 8px;
} }
::v-deep .el-form-item { ::v-deep .el-form-item {
margin-bottom: 14px; margin-bottom: 14px;
} }
::v-deep .el-select, ::v-deep .el-checkbox {
::v-deep .el-select,
::v-deep .el-checkbox {
width: 100%; width: 100%;
} }
} }
} }
</style>
</style> \ No newline at end of file
\ No newline at end of file
import { getRoleRecentActivityNotPushNumApi } from '@/api/game';
// 账号近期要开活动数
let roleRecentActivityNotPushNum = null;
let cacheMemberId = null; //缓存请求id
const computedMap = new Map([]); //观察者列表
// 观察者收集
export function roleRecentActivitySubscription(fn, key) {
computedMap.set(key, fn);
}
//通知所有观察者
function roleRecentActivityRelease() {
computedMap.forEach((fn) => {
fn(roleRecentActivityNotPushNum);
});
}
function setCacheMemberId(member_id) {
cacheMemberId = member_id;
}
//获取数据
export async function queryRoleRecentActivityNotPushNum(
member_id = cacheMemberId
) {
const { data } = await getRoleRecentActivityNotPushNumApi({
member_id: member_id,
});
roleRecentActivityNotPushNum = data.data;
roleRecentActivityRelease();
}
function validate(v) {
if (!roleRecentActivityNotPushNum)
console.log(new Error(`执行${v},但是数据为空`));
}
//获取总数量
export function getTotalNum() {
validate('getTotalNum');
return roleRecentActivityNotPushNum?.totalNum || null;
}
//获取列表
export function getRoleNum() {
validate('getRoleNum');
return roleRecentActivityNotPushNum?.roleNum;
}
//销毁
export function destroy() {
roleRecentActivityNotPushNum = null;
cacheMemberId = null;
computedMap.clear();
}
//初始化
export async function createRoleRecentActivityNotPushNum(member_id) {
if (member_id && member_id !== cacheMemberId) {
setCacheMemberId(member_id);
await queryRoleRecentActivityNotPushNum(member_id);
}
return {
roleRecentActivitySubscription,
queryRoleRecentActivityNotPushNum,
getTotalNum,
getRoleNum,
destroy,
};
}
...@@ -5,27 +5,44 @@ ...@@ -5,27 +5,44 @@
<p class="loginContentTitle">选择客服:</p> <p class="loginContentTitle">选择客服:</p>
<div class="loginContentInput rowFlex alignCenter"> <div class="loginContentInput rowFlex alignCenter">
<el-select v-model="cser_user_id" filterable placeholder="请选择客服"> <el-select v-model="cser_user_id" filterable placeholder="请选择客服">
<el-option v-for="item in userList" :key="item.zq_user_id" clearable :label="item.name" :value="item.zq_user_id"> <el-option
v-for="item in userList"
:key="item.zq_user_id"
clearable
:label="item.name"
:value="item.zq_user_id"
>
</el-option> </el-option>
</el-select> </el-select>
<el-button type="primary" style="margin-left: 10px;" size="small" @click="loginConfirm">点击登录</el-button> <el-button
type="primary"
style="margin-left: 10px"
size="small"
@click="loginConfirm"
>点击登录</el-button
>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import * as ww from '@wecom/jssdk' import * as ww from '@wecom/jssdk';
import { getOrganization, getAuthUser, getSignature,getUserList,cserSelected } from '@/api/user' import {
import Cookies from 'js-cookie' getOrganization,
import { getParams } from '@/utils/index' getAuthUser,
import { mapMutations, mapState } from 'vuex' getSignature,
import { getToken, setToken } from '@/utils/auth' getUserList,
import jsApiList from '@/utils/jsApiList' cserSelected,
} from '@/api/user';
import Cookies from 'js-cookie';
import { getParams } from '@/utils/index';
import { mapMutations, mapState } from 'vuex';
import { getToken, setToken } from '@/utils/auth';
import jsApiList from '@/utils/jsApiList';
export default { export default {
name: 'login', name: 'login',
components: { components: {},
},
data() { data() {
return { return {
wecomUserInfo: null, // 企微用户信息 wecomUserInfo: null, // 企微用户信息
...@@ -39,120 +56,155 @@ export default { ...@@ -39,120 +56,155 @@ export default {
hoveredOrg: null, hoveredOrg: null,
showRefresh: false, // 控制刷新按钮显示 showRefresh: false, // 控制刷新按钮显示
qrLoading: false, // 控制二维码 loading qrLoading: false, // 控制二维码 loading
redirectUri: process.env.NODE_ENV === 'production' ? 'https://companywx.zwnet.cn/api/api/sidebar_login/ding' : 'https://companywx.zwwlkj03.top/api/api/sidebar_login/ding', redirectUri:
process.env.NODE_ENV === 'production'
? 'https://companywx.zwnet.cn/api/api/sidebar_login/ding'
: 'https://companywx.zwwlkj03.top/api/api/sidebar_login/ding',
DDTestUrl: '', DDTestUrl: '',
token: getToken(), token: getToken(),
userList: [], userList: [],
cser_user_id: null, cser_user_id: null,
} };
}, },
async mounted() { async mounted() {
this.$nextTick(() => { this.$nextTick(() => {
this.initLogin() this.initLogin();
}) });
}, },
computed: { computed: {
...mapState('user', ['corp_id']) ...mapState('user', ['corp_id']),
}, },
methods: { methods: {
...mapMutations('user', ['set_corp_id', 'set_userid', 'set_userInfo', 'set_token', 'set_cser_info', 'set_signData', 'set_cser_id', 'set_cser_name', 'set_external_userid']), ...mapMutations('user', [
'set_corp_id',
'set_userid',
'set_userInfo',
'set_token',
'set_cser_info',
'set_signData',
'set_cser_id',
'set_cser_name',
'set_external_userid',
]),
async initLogin() { async initLogin() {
const urlParams = getParams(); const urlParams = getParams();
const userid = Cookies.get('userid'); const userid = Cookies.get('userid');
if (this.token && userid) { // 已经钉钉扫码过 重新获取授权 获取签名 注册企微js-sdk if (this.token && userid) {
this.getUserList(userid) // 已经钉钉扫码过 重新获取授权 获取签名 注册企微js-sdk
this.getUserList(userid);
await this.getSignature(); await this.getSignature();
} else if(!userid) { } else if (!userid) {
await this.startWeComSilentAuth(); await this.startWeComSilentAuth();
}else if(!this.token){ } else if (!this.token) {
this.getUserList(userid) this.getUserList(userid);
} }
}, },
async getUserList(userid) { async getUserList(userid) {
this.urlParams = getParams(); this.urlParams = getParams();
const corp_id = Cookies.get('corp_id') || this.urlParams.corp_id const corp_id = Cookies.get('corp_id') || this.urlParams.corp_id;
const res = await getUserList({ userid: userid,corp_id:corp_id }); const res = await getUserList({ userid: userid, corp_id: corp_id });
this.userList = res.data this.userList = res.data;
}, },
async userStartLogin(){ async userStartLogin() {
if(!this.cser_user_id){ if (!this.cser_user_id) {
this.$message.error('请选择客服人员') this.$message.error('请选择客服人员');
return return;
} }
const cser_user = this.userList.find(item => item.zq_user_id === this.cser_user_id) const cser_user = this.userList.find(
const corp_id = Cookies.get('corp_id') (item) => item.zq_user_id === this.cser_user_id
const userid = Cookies.get('userid') );
this.cacheCser(cser_user.zq_user_id, cser_user.name) const corp_id = Cookies.get('corp_id');
const userid = Cookies.get('userid');
this.cacheCser(cser_user.zq_user_id, cser_user.name);
try { try {
const res = await cserSelected({ cser_id: cser_user.zq_user_id, corp_id: corp_id,userid:userid }); const res = await cserSelected({
console.log(res, '选择客服人员登录') cser_id: cser_user.zq_user_id,
if(res.status_code === 1 && res.data.tokens ){ corp_id: corp_id,
userid: userid,
});
console.log(res, '选择客服人员登录');
if (res.status_code === 1 && res.data.tokens) {
this.$message({ this.$message({
type: 'warning', type: 'warning',
message: `当前【${cser_user.name}】已上线,下班后请记得点击下线哦~`, message: `当前【${cser_user.name}】已上线,下班后请记得点击下线哦~`,
duration: 3 * 1000 duration: 3 * 1000,
}) });
setTimeout(() => { setTimeout(() => {
this.handleDingCallback(res.data.tokens ) this.handleDingCallback(res.data.tokens);
}, 2000) }, 2000);
}else{ } else {
this.$message.error(res.msg) this.$message.error(res.msg);
setTimeout(() => { setTimeout(() => {
window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=cser_error' window.location.href =
}, 5000) window.location.origin +
'/company_app/index.html?corp_id=' +
corp_id +
'&msg=cser_error';
}, 5000);
} }
} catch (error) { } catch (error) {
console.log(error, '选择客服人员登录失败') console.log(error, '选择客服人员登录失败');
this.$message.error(error.msg) this.$message.error(error.msg);
setTimeout(() => { setTimeout(() => {
window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=cser_error' window.location.href =
}, 5000) window.location.origin +
'/company_app/index.html?corp_id=' +
corp_id +
'&msg=cser_error';
}, 5000);
} }
}, },
loginConfirm(){ loginConfirm() {
const cser_user = this.userList.find(item => item.zq_user_id === this.cser_user_id) const cser_user = this.userList.find(
this.$confirm(`确认登录上线吗,上线后所有会话都会归属到客服【${cser_user.name}】`, '提示', { (item) => item.zq_user_id === this.cser_user_id
);
this.$confirm(
`确认登录上线吗,上线后所有会话都会归属到客服【${cser_user.name}】`,
'提示',
{
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning',
}).then(() => { }
this.userStartLogin() )
}).catch(() => { .then(() => {
this.$message.info('已取消登录') this.userStartLogin();
}) })
.catch(() => {
this.$message.info('已取消登录');
});
}, },
// 设置缓存 // 设置缓存
cacheCorp_id(corp_id) { cacheCorp_id(corp_id) {
Cookies.set('corp_id', corp_id, { expires: 7 }) Cookies.set('corp_id', corp_id, { expires: 30 });
this.set_corp_id(corp_id) this.set_corp_id(corp_id);
}, },
cacheuserid(userid) { cacheuserid(userid) {
Cookies.set('userid', userid, { expires: 7 }) Cookies.set('userid', userid, { expires: 30 });
this.set_userid(userid) this.set_userid(userid);
}, },
cacheCser(cser_id, cser_name) { cacheCser(cser_id, cser_name) {
Cookies.set('cser_id', cser_id, { expires: 7 }) Cookies.set('cser_id', cser_id, { expires: 30 });
Cookies.set('cser_name', cser_name, { expires: 7 }) Cookies.set('cser_name', cser_name, { expires: 30 });
this.set_cser_info({ this.set_cser_info({
cser_id: cser_id, cser_id: cser_id,
cser_name: cser_name cser_name: cser_name,
}) });
this.set_cser_id(cser_id) this.set_cser_id(cser_id);
this.set_cser_name(cser_name) this.set_cser_name(cser_name);
}, },
cacheSignData(signData) { cacheSignData(signData) {
Cookies.set('signData', JSON.stringify(signData), { expires: 7 }) Cookies.set('signData', JSON.stringify(signData), { expires: 30 });
this.set_signData(signData) this.set_signData(signData);
}, },
// 进入的页面地址是 https://companywx.jianshuwenhua.com/company_app/index.html?corp_id=wweaefe716636df3d1 // 进入的页面地址是 https://companywx.jianshuwenhua.com/company_app/index.html?corp_id=wweaefe716636df3d1
// 1. 企微静默授权 // 1. 企微静默授权
async startWeComSilentAuth() { async startWeComSilentAuth() {
this.urlParams = getParams(); this.urlParams = getParams();
const corp_id = Cookies.get('corp_id') || this.urlParams.corp_id const corp_id = Cookies.get('corp_id') || this.urlParams.corp_id;
if (!corp_id) { if (!corp_id) {
this.$message.error('当前客服号信息异常,请切换会话后重试') this.$message.error('当前客服号信息异常,请切换会话后重试');
return return;
} }
// 确定是第一次进入页面 没有 code 和 state // 确定是第一次进入页面 没有 code 和 state
if (!this.urlParams.code && !this.urlParams.state) { if (!this.urlParams.code && !this.urlParams.state) {
...@@ -163,61 +215,72 @@ export default { ...@@ -163,61 +215,72 @@ export default {
return; return;
} }
// 用code // 用code
const res = await getAuthUser({ code: this.urlParams.code, url: window.location.href, corp_id: corp_id }); const res = await getAuthUser({
code: this.urlParams.code,
url: window.location.href,
corp_id: corp_id,
});
if (res.status_code === 1) { if (res.status_code === 1) {
if(res.data.userid){ if (res.data.userid) {
this.cacheuserid(res.data.userid) this.cacheuserid(res.data.userid);
this.getUserList(res.data.userid) this.getUserList(res.data.userid);
}else{ } else {
this.$message.error('获取用户id失败') this.$message.error('获取用户id失败');
return return;
} }
} else { } else {
console.log('获取useid失败', res) console.log('获取useid失败', res);
// 错误处理 // 错误处理
} }
}, },
async getSignature() { async getSignature() {
console.log('获取签名', window.location.href) console.log('获取签名', window.location.href);
const corp_id = Cookies.get('corp_id') const corp_id = Cookies.get('corp_id');
try { try {
const res = await getSignature({ corp_id: corp_id, path: window.location.href }); const res = await getSignature({
corp_id: corp_id,
path: window.location.href,
});
if (res.status_code === 1) { if (res.status_code === 1) {
this.signData = res.data this.signData = res.data;
this.cacheSignData(res.data) this.cacheSignData(res.data);
try { try {
this.registerWeComSDK(); this.registerWeComSDK();
} catch (err) { } catch (err) {
console.log(err, '初始化sdk 失败') console.log(err, '初始化sdk 失败');
} }
} }
} catch (err) { } catch (err) {
console.log(err, '获取签名失败') console.log(err, '获取签名失败');
window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=signerror' window.location.href =
window.location.origin +
'/company_app/index.html?corp_id=' +
corp_id +
'&msg=signerror';
} }
}, },
getCurExternalContact() { getCurExternalContact() {
this.$ww.getCurExternalContact({ this.$ww.getCurExternalContact({
success: (res) => { success: (res) => {
if (res.err_msg === "getCurExternalContact:ok") { if (res.err_msg === 'getCurExternalContact:ok') {
console.log(res, '重新进入获取企微外部联系人') console.log(res, '重新进入获取企微外部联系人');
this.set_external_userid(res.userId) this.set_external_userid(res.userId);
// 确保 Vuex 状态更新后再跳转 // 确保 Vuex 状态更新后再跳转
this.$nextTick(() => { this.$nextTick(() => {
this.$router.replace('/') this.$router.replace('/');
console.log(window.location.href, 'window.location.hrefuserInfo') console.log(window.location.href, 'window.location.hrefuserInfo');
}) });
} }
}, },
fail: (err) => { fail: (err) => {
console.log(err, '获取企微外部联系人失败') console.log(err, '获取企微外部联系人失败');
// 错误处理 // 错误处理
} },
}); });
}, },
// 2. 注册企微JS-SDK // 2. 注册企微JS-SDK
registerWeComSDK() { registerWeComSDK() {
console.log('删除企业签名', 1231) console.log('删除企业签名', 1231);
this.$ww.register({ this.$ww.register({
corpId: Cookies.get('corp_id'), corpId: Cookies.get('corp_id'),
agentId: this.signData.agent_id, agentId: this.signData.agent_id,
...@@ -228,58 +291,60 @@ export default { ...@@ -228,58 +291,60 @@ export default {
// signature: this.signData.corp_signature, // signature: this.signData.corp_signature,
// }), // }),
// 只用到应用的 api 可以只进行应用的签名 // 只用到应用的 api 可以只进行应用的签名
getAgentConfigSignature: () => Promise.resolve({ getAgentConfigSignature: () =>
Promise.resolve({
nonceStr: this.signData.nonce_str, nonceStr: this.signData.nonce_str,
timestamp: this.signData.signature_time, timestamp: this.signData.signature_time,
signature: this.signData.agent_signature, signature: this.signData.agent_signature,
}), }),
onAgentConfigSuccess: (res) => { onAgentConfigSuccess: (res) => {
console.log('注册成功可以调用企微 js-sdk', res) console.log('注册成功可以调用企微 js-sdk', res);
// 注册成功后不立即获取外部联系人,等钉钉扫码后再获取 // 注册成功后不立即获取外部联系人,等钉钉扫码后再获取
this.getCurExternalContact() this.getCurExternalContact();
}, },
onAgentConfigFail: (err) => { onAgentConfigFail: (err) => {
console.log('注册失败不能使用企微js-sdk', err) console.log('注册失败不能使用企微js-sdk', err);
// 错误处理123 // 错误处理123
} },
}); });
}, },
// 3. 获取组织列表并选取默认组织 // 3. 获取组织列表并选取默认组织
async initOrganization() { async initOrganization() {
const res = await getOrganization(); const res = await getOrganization();
if (res.data.status_code === 1) { if (res.data.status_code === 1) {
this.orgList = res.data.data.data.filter(item => item.id <= this.organizationNum) this.orgList = res.data.data.data.filter(
(item) => item.id <= this.organizationNum
);
// 默认组织逻辑:可根据业务自定义 // 默认组织逻辑:可根据业务自定义
this.initCurrentApp(); this.initCurrentApp();
} }
}, },
initCurrentApp() { initCurrentApp() {
const currentApp = this.orgList.find( const currentApp = this.orgList.find(
(item) => item.app_key === "dingjigp0ksn9nbljdli" (item) => item.app_key === 'dingjigp0ksn9nbljdli'
); );
this.$set(this, "currentOrg", currentApp); this.$set(this, 'currentOrg', currentApp);
}, },
// 7. 钉钉扫码回调页面处理 // 7. 钉钉扫码回调页面处理
async handleDingCallback(token) { async handleDingCallback(token) {
// 在这里处理钉钉扫码成功的回调 // 在这里处理钉钉扫码成功的回调
const corp_id = Cookies.get('corp_id') const corp_id = Cookies.get('corp_id');
if (token && token != 'undefined') { if (token && token != 'undefined') {
setToken(token) setToken(token);
this.set_token(token) this.set_token(token);
// 获取签名 // 获取签名
await this.getSignature(); await this.getSignature();
} else { } else {
window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=notoken' window.location.href =
window.location.origin +
'/company_app/index.html?corp_id=' +
corp_id +
'&msg=notoken';
} }
}, },
}, },
};
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -294,12 +359,14 @@ export default { ...@@ -294,12 +359,14 @@ export default {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.loginContentTitle{
.loginContentTitle {
font-size: 14px; font-size: 14px;
line-height: 32px; line-height: 32px;
margin-right: 10px; margin-right: 10px;
text-align: left; text-align: left;
} }
.qr-contain { .qr-contain {
margin: 0 auto; margin: 0 auto;
/* margin-top: 20px; */ /* margin-top: 20px; */
...@@ -329,7 +396,7 @@ export default { ...@@ -329,7 +396,7 @@ export default {
i { i {
line-height: 40px; line-height: 40px;
font-size: 26px; font-size: 26px;
color: #3491FA; color: #3491fa;
cursor: pointer; cursor: pointer;
} }
} }
...@@ -359,7 +426,7 @@ export default { ...@@ -359,7 +426,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border: 4px solid #e0e0e0; border: 4px solid #e0e0e0;
border-top: 4px solid #3491FA; border-top: 4px solid #3491fa;
border-radius: 50%; border-radius: 50%;
animation: spin 1s linear infinite; animation: spin 1s linear infinite;
} }
......
<template>
<div v-loading="loading">
<div class="px-[20px] h-full space-y-[8px] rounded-[4px] overflow-y-auto">
<template v-if="list.length">
<div
class="bg-[#F7F8FA] min-h-[99px] p-[8px]"
v-for="item in list"
:key="item.id"
>
<div
class="text-[#131920] pb-[8px] text-[14px] border-b-[1px] border-solid border-[#E5E5E6]"
>
<div>{{ item.name }}活动</div>
<div class="text-[#86909C] text-[12px]">
主服 {{ item.main_server_day }} 天开启
</div>
</div>
<div class="text-[13px] flex pt-[8px]">
<!-- <div class="text-[#6D7176] mr-[16px] flex-shrink-0">活动详情</div> -->
<div class="text-[#131920]">{{ item.detail }}</div>
</div>
</div>
</template>
<svg-icon v-else icon-class="noContent" class="text-[280px]" />
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { getRecentActivityListApi } from '@/api/game';
export default {
name: 'ActivityConfigurationList',
components: {},
props: ['role_id'],
data() {
return {
list: [],
loading: false,
};
},
computed: {
...mapState('game', ['gameUserInfo']),
},
methods: {
async getRecentActivityList() {
try {
this.loading = true;
const { data } = await getRecentActivityListApi({
role_id: this.role_id,
main_game_id: this.gameUserInfo.main_game_id,
weixin_blongs_id: this.gameUserInfo.weixin_blongs_id,
});
this.list = data.data;
} catch (error) {
} finally {
this.loading = false;
}
},
},
created() {
this.getRecentActivityList();
},
};
</script>
<style lang="scss" scoped></style>
<!--
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-09-03 14:05:20
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-09-05 16:35:19
* @FilePath: /company_app/src/views/popup/RecentActivitiesPopup/components/RecentActivitiesList.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div v-loading="loading">
<div class="px-[20px] h-full gap-y-[8px] overflow-y-auto">
<template v-if="list.length">
<RecentActivities @handleUpdate="query" :item="item" v-for="item in list" :key="item.activity_rule_id" />
</template>
<svg-icon v-else icon-class="noContent" class="text-[280px]" />
</div>
</div>
</template>
<script>
import RecentActivities from '@/views/popup/RecentActivitiesPopup/templates/RecentActivities.vue';
import { getRoleRecentActivityListApi } from '@/api/game';
export default {
name: 'RecentActivitiesList',
components: { RecentActivities },
props: ['role_id'],
data() {
return {
list: [],
loading: false,
};
},
methods: {
async query() {
try {
this.loading = true;
const { data } = await getRoleRecentActivityListApi({
role_id: this.role_id,
});
this.list = data.data.reverse()
} catch (error) {
} finally {
this.loading = false;
}
},
},
created() {
this.query();
},
};
</script>
<style lang="scss" scoped></style>
// utils/componentHelper.js 或 useCreatePlayerDetails.js
import Vue from 'vue'
import RecentActivitiesPopup from './index.vue'
import store from '@/store' // 导入你的 Vuex store
export function createDetails(propsData = {}) {
const ComponentConstructor = Vue.extend(RecentActivitiesPopup)
const instance = new ComponentConstructor({
propsData,
// 手动注入 store
store
})
const mountNode = document.createElement('div')
document.querySelector('#recentActivitiesPopup').appendChild(mountNode)
instance.$mount(mountNode)
return {
instance,
destroy: () => {
instance.$destroy()
if (instance.$el && instance.$el.parentNode) {
instance.$el.parentNode.removeChild(instance.$el)
}
}
}
}
\ No newline at end of file
<template>
<div class="absolute z-10 top-0 left-0 h-full w-full bg-white" v-if="show">
<div
class="h-[60px] relative px-[18px] flex items-center border-b-[1px] border-solid border-[#e5e6eb]"
>
<i
class="el-icon-arrow-left text-[25px] hover:cursor-pointer"
@click="close"
></i>
<span
class="absolute left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 text-[#323335] font-bold"
>{{ title }}</span
>
</div>
<el-tabs class="h-[40px]" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="近期要开" name="0"> </el-tab-pane>
<el-tab-pane label="活动配置" name="1"> </el-tab-pane>
</el-tabs>
<RecentActivitiesList v-if="activeName === '0'" :role_id="role_id" />
<ActivityConfigurationList v-if="activeName === '1'" :role_id="role_id" />
</div>
</template>
<script>
import RecentActivitiesList from './components/RecentActivitiesList.vue';
import ActivityConfigurationList from './components/ActivityConfigurationList.vue';
export default {
name: 'RecentActivitiesPopup',
components: { RecentActivitiesList, ActivityConfigurationList },
data() {
return {
show: false,
activeName: '0',
role_id: '',
title: '',
};
},
methods: {
open(role_id, title) {
this.show = true;
this.role_id = role_id;
this.title = title;
},
handleClick() {},
close() {
this.show = false;
this.activeName = '0';
},
},
created() {},
};
</script>
<style lang="scss" scoped>
::v-deep .el-tabs__item {
padding: 0 20px !important;
}
</style>
<template>
<div
class="space-y-[12px] mt-[10px] !p-[8px] bg-[#F7F8FA] rounded-[4px] item"
>
<div>
<span class="label">近期要开:</span>
<el-popover
placement="top-start"
width="250"
trigger="hover"
:content="item.activity_rule_detail"
>
<span slot="reference">{{ item.activity_rule_name }}</span>
</el-popover>
</div>
<div>
<span class="label">开启时间:</span
><span>{{ item.open_activity_time }}</span>
</div>
<div>
<span class="label">关联客服:</span><span>{{ item.cser_name }}</span>
</div>
<div class="group flex items-center">
<span class="label flex-shrink-0">备注:</span
><span v-show="!editShow">{{ item.remark }}</span>
<el-input
@blur="updated"
v-show="editShow"
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model.trim="textarea"
>
</el-input>
<svg-icon
icon-class="edit"
class="icon invisible group-hover:visible"
style="font-size: 14px"
@click="editRemark"
/>
</div>
<div class="flex items-center">
<span class="label flex-shrink-0">推送状态:</span>
<span v-if="item.is_push === '2'">已推送</span>
<el-select
v-else
class="w-[70px]"
:clearable="false"
:value="item.is_push"
@change="handleChange"
>
<el-option label="未推送" value="1"> </el-option>
<el-option label="已推送" value="2"> </el-option>
</el-select>
</div>
<div class="flex items-center">
<span class="label flex-shrink-0">推送话术:</span>
<span
class="group flex-1 w-0 flex items-center"
v-if="pushLanguageTechnique"
>
<el-popover
placement="bottom"
class="flex-1 flex w-0 speak"
width="250"
trigger="click"
>
<p class="max-h-[300px] overflow-y-auto">
{{ pushLanguageTechnique }}
</p>
<span class="truncate flex-1" slot="reference">{{
pushLanguageTechnique
}}</span>
</el-popover>
<i
class="el-icon-refresh mr-[8px] refreshList invisible group-hover:visible"
:class="isRefresh ? 'refreshListActive' : ''"
@click="refreshTag"
></i>
<svg-icon
icon-class="fuzhi"
class="icon invisible group-hover:visible"
style="font-size: 14px"
@click="copyText"
/>
</span>
<el-button
v-else
size="mini"
@click="queryGenerateProcedure(0)"
:loading="isRefresh"
>生成话术</el-button
>
</div>
<slot></slot>
</div>
</template>
<script>
import { getRoleRecentActivityEditApi } from '@/api/game.js';
import { getGenerateProcedureApi } from '@/api/skill';
import { mapState } from 'vuex';
import { queryRoleRecentActivityNotPushNum } from '@/views/hooks/useGetCount';
import { corp_activity_procedure_copyUsed } from '@/api/works';
const UpdateType = {
PUSH: 1, //修改推送
REMARK: 2, //修改备注
};
export default {
name: 'RecentActivitiesTemplate',
emits: ['handleUpdate'],
components: {},
props: ['item'],
data() {
return {
editShow: false,
textarea: '',
isRefresh: false,
pushLanguageTechnique: '', //推送话术
};
},
computed: {
...mapState('user', ['cser_id', 'cser_name']),
...mapState('game', ['accountSelect', 'bindGameUserList']),
nowGameUserInfo() {
return {
member_id: this.accountSelect,
username: this.bindGameUserList.find(
(item) => item.member_id == this.accountSelect
)?.username,
};
},
},
methods: {
editRemark() {
this.editShow = true;
this.textarea = this.item.remark;
},
async updated() {
this.editShow = false;
if (this.textarea === this.item.remark) return;
this.edit(UpdateType.REMARK);
},
handleChange() {
this.edit(UpdateType.PUSH);
},
async edit(type) {
try {
await getRoleRecentActivityEditApi({
type,
role_id: this.item.role_id,
open_activity_time: this.item.open_activity_time,
remark: this.textarea,
activity_rule_id: this.item.activity_rule_id,
is_push: 2,
user_id: this.cser_id,
user_name: this.cser_name,
});
this.$message.success('修改成功');
queryRoleRecentActivityNotPushNum(this.accountSelect);
this.$emit('handleUpdate');
} catch (error) {
this.$message.error(error);
}
},
async queryGenerateProcedure(is_regenerate) {
try {
this.isRefresh = true;
const { data } = await getGenerateProcedureApi({
...this.item,
...this.nowGameUserInfo,
is_regenerate,
});
this.pushLanguageTechnique = data.content;
this._id = data._id;
} catch (error) {
} finally {
this.isRefresh = false;
}
},
async copyText() {
try {
corp_activity_procedure_copyUsed({ _id: this._id });
await navigator.clipboard.writeText(this.pushLanguageTechnique);
this.$message.success('复制成功');
} catch (err) {
console.error('复制失败:', err);
}
},
refreshTag() {
this.queryGenerateProcedure(1);
},
},
created() {
console.log(this.nowGameUserInfo, 1111111);
},
};
</script>
<style lang="scss" scoped>
.item {
width: 100%;
height: auto;
font-size: 14px;
font-weight: 400;
color: #333333;
transition: all 0.5s;
position: relative;
cursor: pointer;
.label {
font-size: 14px;
color: #999999;
font-weight: 500;
margin-right: 8px;
}
.tag-icon {
cursor: pointer;
font-size: 14px;
color: #333333;
margin-right: 8px;
}
}
.refreshListActive {
animation: rotate 0.5s linear infinite;
}
.refreshList {
color: #3491fa;
cursor: pointer;
font-size: 18px;
}
::v-deep .el-input__inner {
background-color: transparent;
border: 0;
box-shadow: none;
padding: 0;
}
::v-deep .el-select .el-input.is-focus .el-input__inner {
border-color: transparent !important;
box-shadow: none;
}
::v-deep .speak .el-popover__reference-wrapper {
display: flex;
flex: 1;
width: 0;
}
</style>
<!--
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-06-25 16:46:39
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-09-02 14:16:38
* @FilePath: /company_app/src/views/roleInfo.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template> <template>
<div class="roleTab"> <div class="roleTab">
<el-tabs v-model="roleActive"> <el-tabs v-model="roleActive">
<el-tab-pane label="角色信息" name="roleInfo"> <el-tab-pane label="角色信息" name="roleInfo">
<roleInfoPanel v-if="roleActive === 'roleInfo'" :chatUserDetails="chatUserInfo" /> <roleInfoPanel
</el-tab-pane> v-if="roleActive === 'roleInfo'"
<el-tab-pane label="举报信息" name="report"> :chatUserDetails="chatUserInfo"
<report v-if="roleActive === 'report'" /> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="申诉记录" name="approval"> <el-tab-pane label="申诉记录" name="approval">
<approval v-if="roleActive === 'approval'" /> <approval v-if="roleActive === 'approval'" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="违规记录" name="violation">
<violationRecord v-if="roleActive === 'violation'" />
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
<script> <script>
import roleInfoPanel from './components/roleInfo/roleInfoPanel.vue' import roleInfoPanel from './components/roleInfo/roleInfoPanel.vue';
import report from './components/roleInfo/report.vue' import approval from './components/roleInfo/approval.vue';
import approval from './components/roleInfo/approval.vue' import { mapState } from 'vuex';
import { mapState } from 'vuex' import violationRecord from '@/views/ViolationRecord.vue';
export default { export default {
name: 'roleInfo', name: 'roleInfo',
components: { components: {
roleInfoPanel, roleInfoPanel,
approval, approval,
report violationRecord,
}, },
computed: { computed: {
...mapState('game', ['chatUserInfo']) ...mapState('game', ['chatUserInfo']),
}, },
props: { props: {
// report_is_send: { // report_is_send: {
...@@ -37,16 +49,13 @@ export default { ...@@ -37,16 +49,13 @@ export default {
}, },
data() { data() {
return { return {
roleActive: 'roleInfo' roleActive: 'roleInfo',
};
}
}, },
methods: { methods: {
handleClick(value) { handleClick(value) {},
},
} };
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.roleTab { .roleTab {
...@@ -70,12 +79,12 @@ export default { ...@@ -70,12 +79,12 @@ export default {
color: #333333; color: #333333;
&.is-active { &.is-active {
color: #3491FA; color: #3491fa;
} }
} }
.el-tabs__active-bar { .el-tabs__active-bar {
background-color: #3491FA; background-color: #3491fa;
height: 3px; height: 3px;
border-radius: 1.5px; border-radius: 1.5px;
} }
...@@ -92,7 +101,7 @@ export default { ...@@ -92,7 +101,7 @@ export default {
.el-tabs__content { .el-tabs__content {
height: calc(100% - 40px); height: calc(100% - 40px);
padding: 15px; padding: 0 5px 5px;
} }
} }
} }
......
<template>
<!-- 营销面板组件 -->
<div class="item">
<div class="rowFlex columnCenter">
<span class="label">营销面板:</span>
<i
v-if="recentInfo.role_id"
:class="['el-icon-arrow-' + (active ? 'down' : 'right'), 'tag-icon']"
@click="handleClick"
></i>
</div>
<RecentActivities
v-if="recentInfo.role_id"
:item="recentInfo"
v-show="active"
@handleUpdate="getRoleData"
>
<el-button
type="text"
size="mini"
@click="
() =>
recentActivitiesPopupInstance.instance.open(
recentInfo.role_id,
popupTitle
)
"
>
查看更多 >
</el-button>
</RecentActivities>
</div>
</template>
<script>
import RecentActivities from '@/views/popup/RecentActivitiesPopup/templates/RecentActivities.vue';
import { createDetails } from '@/views/popup/RecentActivitiesPopup/index.js';
import { getRoleRecentActivityOneApi } from '@/api/game';
import { getRoleHoLo } from '@/api/game';
import { mapState } from 'vuex';
export default {
name: 'MarketingPanel',
components: { RecentActivities },
data() {
return {
active: true,
recentActivitiesPopupInstance: null, //近期要开模块弹框
recentInfo: {},
roleInfoList: [],
};
},
computed: {
...mapState('game', ['accountSelect']),
popupTitle() {
const findItem = this.roleInfoList.find(
(item) => item.role_id == this.recentInfo.role_id
);
if (findItem) {
return `${findItem.role_name}-${findItem.server_name}-${findItem.recharge_total}元`;
}
return;
},
},
methods: {
async queryGetRoleHoLo() {
const { data } = await getRoleHoLo({
page_size: 100,
page: 1,
member_id: this.accountSelect,
search_type: 'list',
});
this.roleInfoList = data.data;
},
handleClick() {
this.active = !this.active;
},
async getRoleData() {
const { data } = await getRoleRecentActivityOneApi({
member_id: this.accountSelect,
});
this.recentInfo = data.data;
},
},
created() {
this.getRoleData();
this.queryGetRoleHoLo();
},
mounted() {
this.recentActivitiesPopupInstance = createDetails({
gameUserInfoInject: this.gameUserInfoInject,
});
},
beforeDestroy() {
this.recentActivitiesPopupInstance.destroy();
},
};
</script>
<style lang="scss" scoped>
.item {
width: 100%;
height: auto;
font-size: 14px;
padding: 16px;
font-weight: 400;
color: #333333;
padding: 10px 0;
transition: all 0.5s;
position: relative;
cursor: pointer;
.label {
font-size: 14px;
color: #999999;
font-weight: 500;
margin-right: 8px;
}
.tag-icon {
cursor: pointer;
font-size: 14px;
color: #333333;
margin-right: 8px;
}
}
.refreshListActive {
animation: rotate 0.5s linear infinite;
}
.refreshList {
color: #3491fa;
cursor: pointer;
font-size: 18px;
}
</style>
...@@ -3,9 +3,14 @@ ...@@ -3,9 +3,14 @@
<!-- 智能标签 --> <!-- 智能标签 -->
<div class="item rowFlex columnCenter"> <div class="item rowFlex columnCenter">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label" style="min-width:60px;">智能标签:</span> <span class="label" style="min-width: 60px">智能标签:</span>
<p class="text"> <p class="text">
<el-tag v-for="(item,index) in chatUserDetails.intelligence_tag_group" :key="index" style="margin-right:5px;margin-bottom:5px;">{{ item.name }} </el-tag> <el-tag
v-for="(item, index) in chatUserDetails.intelligence_tag_group"
:key="index"
style="margin-right: 5px; margin-bottom: 5px"
>{{ item.name }}
</el-tag>
</p> </p>
</div> </div>
<el-popover <el-popover
...@@ -16,19 +21,24 @@ ...@@ -16,19 +21,24 @@
<i <i
slot="reference" slot="reference"
class="el-icon-refresh refreshList" class="el-icon-refresh refreshList"
:class="isRefresh?'refreshListActive':''" :class="isRefresh ? 'refreshListActive' : ''"
@click="refreshTag" @click="refreshTag"
></i> ></i>
</el-popover> </el-popover>
</div> </div>
<ZyouTag :game-user-info="gameUserInfo" :account-select="accountSelect" /> <ZyouTag :game-user-info="gameUserInfo" :account-select="accountSelect" />
<div v-if="accountSelect && accountSelect!=='' && gameUserInfo.username"> <div v-if="accountSelect && accountSelect !== '' && gameUserInfo.username">
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">账号:</span> <span class="label">账号:</span>
<p class="text">{{ gameUserInfo.username }}</p> <span v-if="gameUserInfo.account_type==2" class="account_type"></span> <p class="text">{{ gameUserInfo.username }}</p>
<span v-if="gameUserInfo.account_type == 2" class="account_type"
></span
>
</div> </div>
</div> </div>
<!-- 营销面板 -->
<MarketingPanel />
<!-- 充值金额 --> <!-- 充值金额 -->
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
...@@ -39,7 +49,7 @@ ...@@ -39,7 +49,7 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">是否易主:</span> <span class="label">是否易主:</span>
<p class="text">{{ change_user==1?'是':'否' }}</p> <p class="text">{{ change_user == 1 ? '是' : '否' }}</p>
<el-popconfirm <el-popconfirm
confirm-button-text="确定" confirm-button-text="确定"
cancel-button-text="取消" cancel-button-text="取消"
...@@ -62,7 +72,7 @@ ...@@ -62,7 +72,7 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">白名单:</span> <span class="label">白名单:</span>
<p class="text">{{ change_name==1?'是':'否' }}</p> <p class="text">{{ change_name == 1 ? '是' : '否' }}</p>
<el-popconfirm <el-popconfirm
confirm-button-text="确定" confirm-button-text="确定"
cancel-button-text="取消" cancel-button-text="取消"
...@@ -84,7 +94,7 @@ ...@@ -84,7 +94,7 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">异常账号:</span> <span class="label">异常账号:</span>
<p class="text">{{ change_risk==1?'是':'否' }}</p> <p class="text">{{ change_risk == 1 ? '是' : '否' }}</p>
<el-popconfirm <el-popconfirm
confirm-button-text="确定" confirm-button-text="确定"
cancel-button-text="取消" cancel-button-text="取消"
...@@ -92,7 +102,11 @@ ...@@ -92,7 +102,11 @@
title="是否切换账号异常状态" title="是否切换账号异常状态"
@confirm="changeRiskFn" @confirm="changeRiskFn"
> >
<div v-if="change_risk==0" slot="reference" class="rowFlex columnCenter changeUser"> <div
v-if="change_risk == 0"
slot="reference"
class="rowFlex columnCenter changeUser"
>
<p> <p>
<i class="el-icon-sort-down"></i> <i class="el-icon-sort-down"></i>
</p> </p>
...@@ -103,22 +117,33 @@ ...@@ -103,22 +117,33 @@
</el-popconfirm> </el-popconfirm>
</div> </div>
</div> </div>
<div v-if="gameUserInfo.role_info && gameUserInfo.role_info.role_level " class="item rowFlex columnCenter spaceBetween"> <div
v-if="gameUserInfo.role_info && gameUserInfo.role_info.role_level"
class="item rowFlex columnCenter spaceBetween"
>
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">等级:</span> <span class="label">等级:</span>
<p class="text">{{ gameUserInfo.role_info.role_level }}</p> <p class="text">{{ gameUserInfo.role_info.role_level }}</p>
</div> </div>
</div> </div>
<div v-if="gameUserInfo.role_info && gameUserInfo.role_info.trans_check_status_text " class="item rowFlex columnCenter spaceBetween"> <div
v-if="
gameUserInfo.role_info &&
gameUserInfo.role_info.trans_check_status_text
"
class="item rowFlex columnCenter spaceBetween"
>
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">转端审核:</span> <span class="label">转端审核:</span>
<p class="text">{{ gameUserInfo.role_info.trans_check_status_text }}</p> <p class="text">
{{ gameUserInfo.role_info.trans_check_status_text }}
</p>
</div> </div>
</div> </div>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">近期是否被封禁:</span> <span class="label">近期是否被封禁:</span>
<p class="text">{{ gameUserInfo.is_banned==1?'是':'否' }}</p> <p class="text">{{ gameUserInfo.is_banned == 1 ? '是' : '否' }}</p>
</div> </div>
</div> </div>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
...@@ -130,14 +155,22 @@ ...@@ -130,14 +155,22 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">CP角色ID:</span> <span class="label">CP角色ID:</span>
<p v-if="gameUserInfo.role_info && gameUserInfo.role_info.cp_role_id" class="text">{{ gameUserInfo.role_info.cp_role_id }}</p> <p
v-if="gameUserInfo.role_info && gameUserInfo.role_info.cp_role_id"
class="text"
>
{{ gameUserInfo.role_info.cp_role_id }}
</p>
</div> </div>
</div> </div>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">是否愿意转端:</span> <span class="label">是否愿意转端:</span>
<p class="text"> <p class="text">
<el-radio-group v-model="chatUserDetails.transferred" @change="toTransfer"> <el-radio-group
v-model="chatUserDetails.transferred"
@change="toTransfer"
>
<el-radio :label="0"></el-radio> <el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
...@@ -149,9 +182,19 @@ ...@@ -149,9 +182,19 @@
<span class="label">手机号:</span> <span class="label">手机号:</span>
<p v-if="!showUserMobile" class="text">{{ gameUserInfo.mobile }}</p> <p v-if="!showUserMobile" class="text">{{ gameUserInfo.mobile }}</p>
</div> </div>
<el-input v-if="showUserMobile" v-model="newMobileValue" style="width: 120px; margin-left: 10px" @change="changeUserMobile" @blur="showUserMobile = false"></el-input> <el-input
v-if="showUserMobile"
v-model="newMobileValue"
style="width: 120px; margin-left: 10px"
@change="changeUserMobile"
@blur="showUserMobile = false"
></el-input>
<!-- 暂时禁止用户修改手机号 --> <!-- 暂时禁止用户修改手机号 -->
<i class="el-icon-edit icon" style="font-size: 14px" @click="editUserMobile"></i> <i
class="el-icon-edit icon"
style="font-size: 14px"
@click="editUserMobile"
></i>
</div> </div>
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
...@@ -171,33 +214,75 @@ ...@@ -171,33 +214,75 @@
<p class="text">{{ gameUserInfo.last_login_os }}</p> <p class="text">{{ gameUserInfo.last_login_os }}</p>
</div> </div>
</div> </div>
<div v-if="gameUserInfo.service_wechat_number_info && gameUserInfo.service_wechat_number_info.length>0" class="item rowFlex columnCenter spaceBetween"> <div
<div class="rowFlex columnCenter" style="width:100%;"> v-if="
gameUserInfo.service_wechat_number_info &&
gameUserInfo.service_wechat_number_info.length > 0
"
class="item rowFlex columnCenter spaceBetween"
>
<div class="rowFlex columnCenter" style="width: 100%">
<span class="label">客服微信号:</span> <span class="label">客服微信号:</span>
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<!-- 显示第一个微信号 --> <!-- 显示第一个微信号 -->
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<p class="hidden wxName">{{ gameUserInfo.service_wechat_number_info[0].service_wechat_number_name }}({{ gameUserInfo.service_wechat_number_info[0].service_type_name }})</p> <p class="hidden wxName">
<span class="bradge">{{ gameUserInfo.service_wechat_number_info[0].type_name }}</span> {{
<div class="colorStatus rowFlex columnCenter" style="margin-left: 10px;"> gameUserInfo.service_wechat_number_info[0]
<span v-if="gameUserInfo.service_wechat_number_info[0].loss_status==1" class="fail">{{ gameUserInfo.service_wechat_number_info[0].loss_status_text }}</span> .service_wechat_number_name
}}({{
gameUserInfo.service_wechat_number_info[0].service_type_name
}})
</p>
<span class="bradge">{{
gameUserInfo.service_wechat_number_info[0].type_name
}}</span>
<div
class="colorStatus rowFlex columnCenter"
style="margin-left: 10px"
>
<span
v-if="
gameUserInfo.service_wechat_number_info[0].loss_status == 1
"
class="fail"
>{{
gameUserInfo.service_wechat_number_info[0].loss_status_text
}}</span
>
</div> </div>
</div> </div>
<!-- 如果有多个,显示 +n --> <!-- 如果有多个,显示 +n -->
<div v-if="gameUserInfo.service_wechat_number_info.length > 1"> <div v-if="gameUserInfo.service_wechat_number_info.length > 1">
<el-popover <el-popover placement="top" trigger="hover" width="300">
placement="top" <div
trigger="hover" v-for="(
width="300" item, index
) in gameUserInfo.service_wechat_number_info.slice(1)"
:key="index"
class="rowFlex columnCenter"
style="margin-bottom: 10px"
> >
<div v-for="(item,index) in gameUserInfo.service_wechat_number_info.slice(1)" :key="index" class="rowFlex columnCenter" style="margin-bottom:10px;"> <p class="hidden wxName">
<p class="hidden wxName">{{ item.service_wechat_number_name }}({{ item.service_type_name }})</p> {{ item.service_wechat_number_name }}({{
item.service_type_name
}})
</p>
<span class="bradge">{{ item.type_name }}</span> <span class="bradge">{{ item.type_name }}</span>
<div class="colorStatus rowFlex columnCenter" style="margin-left: 10px;"> <div
<span v-if="item.loss_status==1" class="fail">{{ item.loss_status_text }}</span> class="colorStatus rowFlex columnCenter"
style="margin-left: 10px"
>
<span v-if="item.loss_status == 1" class="fail">{{
item.loss_status_text
}}</span>
</div> </div>
</div> </div>
<el-button slot="reference" type="text" style="font-size: 14px;">+{{ gameUserInfo.service_wechat_number_info.length - 1 }}</el-button> <el-button slot="reference" type="text" style="font-size: 14px"
>+{{
gameUserInfo.service_wechat_number_info.length - 1
}}</el-button
>
</el-popover> </el-popover>
</div> </div>
</div> </div>
...@@ -206,23 +291,27 @@ ...@@ -206,23 +291,27 @@
<div class="item rowFlex columnCenter spaceBetween"> <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<span class="label">注册时间:</span> <span class="label">注册时间:</span>
<p class="text">{{ moment(gameUserInfo.reg_time * 1000).format('YYYY-MM-DD') }}</p> <p class="text">
{{ moment(gameUserInfo.reg_time * 1000).format('YYYY-MM-DD') }}
</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { bindMobile, getMemberLabel, editMemberLabel } from '@/api/game' import { bindMobile, getMemberLabel, editMemberLabel } from '@/api/game';
import { mapState, mapMutations } from 'vuex' import { mapState, mapMutations } from 'vuex';
import { toTransfer, syncSessionIntelTag } from '@/api/works' import { toTransfer, syncSessionIntelTag } from '@/api/works';
import moment from 'moment' import MarketingPanel from './MarketingPanel.vue';
import ZyouTag from './ZyouTag.vue' import moment from 'moment';
import { debounce } from '@/utils' import ZyouTag from './ZyouTag.vue';
export default { import { debounce } from '@/utils';
export default {
name: 'gameUserInfo', name: 'gameUserInfo',
components: { components: {
ZyouTag ZyouTag,
MarketingPanel,
}, },
props: ['gameUserInfo', 'chatUserDetails'], props: ['gameUserInfo', 'chatUserDetails'],
data() { data() {
...@@ -235,54 +324,62 @@ import { debounce } from '@/utils' ...@@ -235,54 +324,62 @@ import { debounce } from '@/utils'
change_appraisal: 0, change_appraisal: 0,
newMobileValue: '', newMobileValue: '',
isRefresh: false, isRefresh: false,
showWxNumber: true showWxNumber: true,
} };
}, },
computed: { computed: {
...mapState('game', ['accountSelect']) ...mapState('game', ['accountSelect']),
}, },
watch: { watch: {
accountSelect: { accountSelect: {
handler:debounce(function(newVal, oldVal) { handler: debounce(function (newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) { if (newVal && newVal !== '' && newVal !== oldVal) {
this.getMemberLabel() this.getMemberLabel();
}
},200),
immediate: false
} }
}, 200),
immediate: false,
},
}, },
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
if (this.accountSelect && this.accountSelect !== '') { if (this.accountSelect && this.accountSelect !== '') {
this.getMemberLabel() this.getMemberLabel();
} }
}) });
}, },
methods: { methods: {
getMemberLabel() { getMemberLabel() {
const data = { const data = {
member_id: this.accountSelect, member_id: this.accountSelect,
label_type: [2, 3, 4, 6] label_type: [2, 3, 4, 6],
} };
getMemberLabel(data).then(res => { getMemberLabel(data).then((res) => {
if (res?.data?.data?.length > 0) { if (res?.data?.data?.length > 0) {
const change_user = res.data.data.find(item => item.label_type == 2) const change_user = res.data.data.find(
const change_name = res.data.data.find(item => item.label_type == 3) (item) => item.label_type == 2
const change_risk = res.data.data.find(item => item.label_type == 4)// 风险用户 );
const change_appraisal = res.data.data.find(item => item.label_type == 6)// 石锤用户 const change_name = res.data.data.find(
this.change_user = change_user.label_value (item) => item.label_type == 3
this.change_name = change_name.label_value );
this.change_risk = change_risk.label_value const change_risk = res.data.data.find(
this.change_appraisal = change_appraisal.label_value (item) => item.label_type == 4
this.$emit('changeAppraisal', this.change_appraisal) ); // 风险用户
const change_appraisal = res.data.data.find(
(item) => item.label_type == 6
); // 石锤用户
this.change_user = change_user.label_value;
this.change_name = change_name.label_value;
this.change_risk = change_risk.label_value;
this.change_appraisal = change_appraisal.label_value;
this.$emit('changeAppraisal', this.change_appraisal);
} else { } else {
this.change_user = 0 this.change_user = 0;
this.change_name = 0 this.change_name = 0;
this.change_risk = 0 this.change_risk = 0;
this.change_appraisal = 0 this.change_appraisal = 0;
this.$emit('changeAppraisal', this.change_appraisal) this.$emit('changeAppraisal', this.change_appraisal);
} }
}) });
}, },
// 白名单 // 白名单
changeNameFn() { changeNameFn() {
...@@ -290,15 +387,17 @@ import { debounce } from '@/utils' ...@@ -290,15 +387,17 @@ import { debounce } from '@/utils'
member_id: this.accountSelect, member_id: this.accountSelect,
create_user: this.cser_name, create_user: this.cser_name,
label_type: 3, label_type: 3,
label_value: this.change_name == 1 ? 0 : 1 label_value: this.change_name == 1 ? 0 : 1,
} };
editMemberLabel(data).then((res) => { editMemberLabel(data).then((res) => {
if (res.status_code == 1) { if (res.status_code == 1) {
this.$message.success(res.msg) this.$message.success(res.msg);
this.change_name == 1 ? this.change_name = 0 : this.change_name = 1 this.change_name == 1
? (this.change_name = 0)
: (this.change_name = 1);
} }
this.$emit('update:show', false) this.$emit('update:show', false);
}) });
}, },
// 异常账号 // 异常账号
changeRiskFn() { changeRiskFn() {
...@@ -306,100 +405,115 @@ import { debounce } from '@/utils' ...@@ -306,100 +405,115 @@ import { debounce } from '@/utils'
member_id: this.accountSelect, member_id: this.accountSelect,
create_user: this.cser_name, create_user: this.cser_name,
label_type: 4, label_type: 4,
label_value: this.change_risk == 0 ? 1 : 0 label_value: this.change_risk == 0 ? 1 : 0,
} };
editMemberLabel(data).then((res) => { editMemberLabel(data).then((res) => {
if (res.status_code == 1) { if (res.status_code == 1) {
this.$message.success(res.msg) this.$message.success(res.msg);
this.change_risk == 1 ? this.change_risk = 0 : this.change_risk = 1 this.change_risk == 1
? (this.change_risk = 0)
: (this.change_risk = 1);
} }
this.$emit('update:show', false) this.$emit('update:show', false);
}) });
}, },
changeUserFn() { changeUserFn() {
const data = { const data = {
member_id: this.accountSelect, member_id: this.accountSelect,
create_user: this.cser_name, create_user: this.cser_name,
label_type: 2, label_type: 2,
label_value: this.change_user == 1 ? 0 : 1 label_value: this.change_user == 1 ? 0 : 1,
} };
editMemberLabel(data).then((res) => { editMemberLabel(data).then((res) => {
if (res.status_code == 1) { if (res.status_code == 1) {
this.$message.success(res.msg) this.$message.success(res.msg);
this.change_user == 1 ? this.change_user = 0 : this.change_user = 1 this.change_user == 1
? (this.change_user = 0)
: (this.change_user = 1);
} }
this.$emit('update:show', false) this.$emit('update:show', false);
}) });
}, },
toTransfer() { toTransfer() {
const data = { const data = {
external_userid: this.chatUserDetails.external_userid, external_userid: this.chatUserDetails.external_userid,
userid: this.chatUserDetails.userid, userid: this.chatUserDetails.userid,
transferred: this.chatUserDetails.transferred transferred: this.chatUserDetails.transferred,
} };
toTransfer(data).then(res => { toTransfer(data).then((res) => {
if (res.status_code == 1) { if (res.status_code == 1) {
this.$message.success(res.msg) this.$message.success(res.msg);
} }
}) });
}, },
// 修改用户手机号 // 修改用户手机号
changeUserMobile() { changeUserMobile() {
if (!/^1((3[0-9])|(4[1579])|(5[0-9])|(6[6])|(7[0-9])|(8[0-9])|(9[0-9]))\d{8}$/.test(this.newMobileValue)) { if (
this.$message.warning('请填写正确的手机号') !/^1((3[0-9])|(4[1579])|(5[0-9])|(6[6])|(7[0-9])|(8[0-9])|(9[0-9]))\d{8}$/.test(
return false this.newMobileValue
} )
this.gameUserInfo.mobile = this.newMobileValue.substr(0, 3) + '****' + this.newMobileValue.substr(7) ) {
this.showUserMobile = false this.$message.warning('请填写正确的手机号');
return false;
}
this.gameUserInfo.mobile =
this.newMobileValue.substr(0, 3) +
'****' +
this.newMobileValue.substr(7);
this.showUserMobile = false;
const data = { const data = {
member_id: this.accountSelect, member_id: this.accountSelect,
mobile: this.newMobileValue mobile: this.newMobileValue,
} };
bindMobile(data).then((res) => { bindMobile(data).then((res) => {
if (res.status_code == 1) { if (res.status_code == 1) {
this.$message.success(res.msg) this.$message.success(res.msg);
} }
}) });
}, },
editUserMobile() { editUserMobile() {
this.showUserMobile = true this.showUserMobile = true;
}, },
async refreshTag() { async refreshTag() {
this.isRefresh = true this.isRefresh = true;
const data = { const data = {
corp_id: this.chatUserDetails.corp_id, corp_id: this.chatUserDetails.corp_id,
userid: this.chatUserDetails.userid, userid: this.chatUserDetails.userid,
external_userid: this.chatUserDetails.external_userid external_userid: this.chatUserDetails.external_userid,
} };
try { try {
const res = await syncSessionIntelTag(data) const res = await syncSessionIntelTag(data);
if (res.status_code === 1) { if (res.status_code === 1) {
if (res.data.is_can_sync == 1) { if (res.data.is_can_sync == 1) {
this.$message.success(res.msg) this.$message.success(res.msg);
this.$set(this.chatUserDetails, 'intelligence_tag_group', res.data.intel_tag) this.$set(
this.chatUserDetails,
'intelligence_tag_group',
res.data.intel_tag
);
} else { } else {
this.$message.warning('每个用户半个小时仅能更新一次') this.$message.warning('每个用户半个小时仅能更新一次');
} }
} }
} catch (error) { } catch (error) {
this.isRefresh = false this.isRefresh = false;
} finally { } finally {
this.isRefresh = false this.isRefresh = false;
} }
} },
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.gameUserDetails { .gameUserDetails {
width: 100%; width: 100%;
.changeUser{ .changeUser {
font-size: 18px; font-size: 18px;
transform: rotate(90deg); transform: rotate(90deg);
color: #3491FA ; color: #3491fa;
margin-left: 10px; margin-left: 10px;
margin-top: -5px; margin-top: -5px;
:first-child{ :first-child {
margin-right: -5px; margin-right: -5px;
} }
} }
...@@ -419,10 +533,10 @@ import { debounce } from '@/utils' ...@@ -419,10 +533,10 @@ import { debounce } from '@/utils'
border-radius: 6px; border-radius: 6px;
margin-right: 5px; margin-right: 5px;
} }
.wxName{ .wxName {
max-width: 80%; max-width: 80%;
} }
.bradge{ .bradge {
padding: 2px 5px; padding: 2px 5px;
border-radius: 3px; border-radius: 3px;
background: #f4f4f5; background: #f4f4f5;
...@@ -434,7 +548,7 @@ import { debounce } from '@/utils' ...@@ -434,7 +548,7 @@ import { debounce } from '@/utils'
margin-left: 10px; margin-left: 10px;
} }
.label { .label {
color: #86909C; color: #86909c;
font-size: 14px; font-size: 14px;
} }
.text { .text {
...@@ -453,11 +567,11 @@ import { debounce } from '@/utils' ...@@ -453,11 +567,11 @@ import { debounce } from '@/utils'
width: 44px; width: 44px;
height: 22px; height: 22px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #3491FA ; border: 1px solid #3491fa;
font-size: 12px; font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
color: #3491FA ; color: #3491fa;
margin-left: 30px; margin-left: 30px;
cursor: pointer; cursor: pointer;
} }
...@@ -486,38 +600,37 @@ import { debounce } from '@/utils' ...@@ -486,38 +600,37 @@ import { debounce } from '@/utils'
.item:hover .icon { .item:hover .icon {
display: block; display: block;
} }
.el-icon-sort-up{ .el-icon-sort-up {
font-size: 16px; font-size: 16px;
} }
} }
.refreshList { .refreshList {
color: #3491FA ; color: #3491fa;
cursor: pointer; cursor: pointer;
font-size: 18px; font-size: 18px;
margin-left: 20px; margin-left: 20px;
} }
.refreshListActive{ .refreshListActive {
animation:rotate 0.5s linear infinite ; animation: rotate 0.5s linear infinite;
} }
@keyframes rotate { @keyframes rotate {
0%{ 0% {
transform: rotate(0deg); transform: rotate(0deg);
} }
100%{ 100% {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
</style> </style>
<style> <style>
.wxName{ .wxName {
max-width: 80%; max-width: 80%;
} }
.bradge{ .bradge {
padding: 2px 5px; padding: 2px 5px;
border-radius: 3px; border-radius: 3px;
background: #f4f4f5; background: #f4f4f5;
color: #909399; color: #909399;
margin-left: 10px; margin-left: 10px;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="userInfo-content"> <div class="userInfo-content relative" id="recentActivitiesPopup">
<el-tabs v-model="activeTab" class="user-tabs"> <el-tabs v-model="activeTab" class="user-tabs">
<el-tab-pane label="客户信息" name="info"> <el-tab-pane label="客户信息" name="info">
<Info :chatUserDetails="chatUserInfo"/> <Info :chatUserDetails="chatUserInfo" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="角色信息" name="role"> <el-tab-pane label="角色信息" name="role">
<template #label v-if="totalNum">
<el-badge :value="totalNum" class="text-center">
<p>角色信息</p>
</el-badge>
</template>
<roleInfo v-if="activeTab === 'role'" /> <roleInfo v-if="activeTab === 'role'" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="订单信息" name="order"> <el-tab-pane label="订单信息" name="order">
<orderList v-if="activeTab === 'order'" /> <orderList v-if="activeTab === 'order'" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="违规记录" name="violation">
<violationRecord v-if="activeTab === 'violation'" />
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
<script> <script>
import Info from './components/Info.vue' import Info from './components/Info.vue';
import roleInfo from '@/views/roleInfo.vue' import roleInfo from '@/views/roleInfo.vue';
import orderList from '@/views/orderList.vue' import orderList from '@/views/orderList.vue';
import violationRecord from '@/views/ViolationRecord.vue' import { mapState, mapMutations } from 'vuex';
import { mapState, mapMutations } from 'vuex' import { createRoleRecentActivityNotPushNum } from '@/views/hooks/useGetCount';
import Cookies from 'js-cookie' import Cookies from 'js-cookie';
export default { export default {
name: 'userInfo', name: 'userInfo',
components: { components: {
Info, Info,
roleInfo, roleInfo,
orderList, orderList,
violationRecord
}, },
mounted() { watch: {
async accountSelect(newVal) {
await this.initInstance();
},
}, },
data() { data() {
return { return {
activeTab: 'info' activeTab: 'info',
} instance: null,
totalNum: 0,
};
}, },
computed: { computed: {
...mapState('game', ['chatUserInfo']), ...mapState('game', ['chatUserInfo', 'accountSelect']),
}, },
created() { created() {
// 初始化 vuex 中的值 // 初始化 vuex 中的值
this.initInstance();
}, },
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
this.initVuexValue() this.initVuexValue();
}) });
}, },
methods: { methods: {
...mapMutations('user', ['set_userInfo']), ...mapMutations('user', ['set_userInfo']),
initVuexValue(){ async initInstance() {
this.instance = await createRoleRecentActivityNotPushNum(
this.accountSelect
);
this.totalNum = this.instance.getTotalNum();
this.instance.roleRecentActivitySubscription(() => {
this.totalNum = this.instance.getTotalNum();
}, this);
},
initVuexValue() {
const userinfo = { const userinfo = {
cser_id: Cookies.get('cser_id'), cser_id: Cookies.get('cser_id'),
cser_name: Cookies.get('cser_name'), cser_name: Cookies.get('cser_name'),
username: Cookies.get('cser_name'), username: Cookies.get('cser_name'),
id: Cookies.get('cser_id'), id: Cookies.get('cser_id'),
} };
this.set_userInfo(userinfo) this.set_userInfo(userinfo);
} },
},
} beforeDestroy() {
} this.instance && this.instance.destroy();
},
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -99,4 +118,9 @@ export default { ...@@ -99,4 +118,9 @@ export default {
} }
} }
} }
::v-deep .el-badge__content.is-fixed {
top: 8px;
right: 6px;
}
</style> </style>
/*
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-08-30 10:54:21
* @LastEditors: maoxiya 937667504@qq.com
* @LastEditTime: 2025-08-30 10:54:29
* @FilePath: /company_app/tailwind.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
module.exports = {
mode: 'jit', // 关键配置
purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
darkMode: false,
theme: {
extend: {}
},
variants: {
extend: {}
},
plugins: [
function({ addUtilities }) {
const newUtilities = {
'.truncate-2': {
display: '-webkit-box',
'-webkit-box-orient': 'vertical',
'-webkit-line-clamp': '2',
'overflow': 'hidden',
'text-overflow': 'ellipsis',
'word-wrap': 'break-word',
'word-break': 'break-word',
},
'.truncate-3': {
display: '-webkit-box',
'-webkit-box-orient': 'vertical',
'-webkit-line-clamp': '3',
'overflow': 'hidden',
'text-overflow': 'ellipsis',
'word-wrap': 'break-word',
'word-break': 'break-word',
}
}
addUtilities(newUtilities, ['responsive', 'hover'])
}
],
corePlugins: {
container: false // 禁用默认的 container
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论