提交 83aaf48f 作者: 毛细亚

6.7 版本开发完成

上级 b6ea9b5b
<!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>company_app</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/chunk-vendors.b6398f5b.js"></script><script defer="defer" src="static/js/app.b0e4c001.js"></script><link href="static/css/chunk-vendors.8e901099.css" rel="stylesheet"><link href="static/css/app.885abbc1.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
<!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.0">
<link rel="icon" href="favicon.ico">
<!-- HTTP 1.1 -->
<meta http-equiv="pragma" content="no-cache">
<!-- HTTP 1.0 -->
<meta http-equiv="cache-control" content="no-cache">
<!-- Prevent caching at the proxy server -->
<meta http-equiv="expires" content="0">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<!-- <title>company_app</title> -->
<title>企微侧边栏</title>
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0,shrink-to-fit=no,user-scalable=no"> -->
<script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
<script defer src="static/js/chunk-vendors.js"></script><script defer src="static/js/app.js"></script></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>
......@@ -44,6 +44,11 @@
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"element-theme-chalk": "^2.15.14",
"html-webpack-plugin": "3.2.0",
"script-ext-html-webpack-plugin": "2.1.3",
"serve-static": "1.13.2",
"svg-sprite-loader": "6.0.9",
"svgo": "1.2.2",
"vue-template-compiler": "^2.6.14"
}
}
......@@ -108,6 +108,21 @@ importers:
element-theme-chalk:
specifier: ^2.15.14
version: 2.15.14
html-webpack-plugin:
specifier: 3.2.0
version: 3.2.0(webpack@5.99.8)
script-ext-html-webpack-plugin:
specifier: 2.1.3
version: 2.1.3(html-webpack-plugin@3.2.0(webpack@5.99.8))(webpack@5.99.8)
serve-static:
specifier: 1.13.2
version: 1.13.2
svg-sprite-loader:
specifier: 6.0.9
version: 6.0.9
svgo:
specifier: 1.2.2
version: 1.2.2
vue-template-compiler:
specifier: ^2.6.14
version: 2.7.16
......@@ -1253,6 +1268,18 @@ packages:
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
arr-diff@4.0.0:
resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
engines: {node: '>=0.10.0'}
arr-flatten@1.1.0:
resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
engines: {node: '>=0.10.0'}
arr-union@3.1.0:
resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
engines: {node: '>=0.10.0'}
array-buffer-byte-length@1.0.2:
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines: {node: '>= 0.4'}
......@@ -1268,6 +1295,10 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
array-unique@0.3.2:
resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
engines: {node: '>=0.10.0'}
array.prototype.reduce@1.0.8:
resolution: {integrity: sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==}
engines: {node: '>= 0.4'}
......@@ -1283,6 +1314,10 @@ packages:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
engines: {node: '>=0.8'}
assign-symbols@1.0.0:
resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
engines: {node: '>=0.10.0'}
async-foreach@0.1.3:
resolution: {integrity: sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==}
......@@ -1303,6 +1338,11 @@ packages:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
atob@2.1.2:
resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
engines: {node: '>= 4.5.0'}
hasBin: true
autoprefixer@10.4.21:
resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
engines: {node: ^10 || ^12 || >=14}
......@@ -1371,6 +1411,10 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
base@0.11.2:
resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
engines: {node: '>=0.10.0'}
batch@0.6.1:
resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
......@@ -1385,6 +1429,9 @@ packages:
bi-element-ui@1.5.2:
resolution: {integrity: sha512-vNwyQFT7++RI1KFrJhmL2u2gX7I8HAleRfUxRFt3lOBAFO0/wo4h2j42lP4r+6h6zDaLxByDrMiyCBOj3WRZlw==}
big.js@3.2.0:
resolution: {integrity: sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==}
big.js@5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
......@@ -1444,6 +1491,10 @@ packages:
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
braces@2.3.2:
resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
engines: {node: '>=0.10.0'}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
......@@ -1478,6 +1529,10 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
cache-base@1.0.1:
resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
engines: {node: '>=0.10.0'}
cacheable-request@2.1.4:
resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==}
......@@ -1497,6 +1552,9 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
camel-case@3.0.0:
resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
camel-case@4.1.2:
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
......@@ -1557,6 +1615,14 @@ packages:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
class-utils@0.3.6:
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
engines: {node: '>=0.10.0'}
clean-css@4.2.4:
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
engines: {node: '>= 4.0'}
clean-css@5.3.3:
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
engines: {node: '>= 10.0'}
......@@ -1614,6 +1680,10 @@ packages:
resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
engines: {node: '>=0.10.0'}
collection-visit@1.0.0:
resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==}
engines: {node: '>=0.10.0'}
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
......@@ -1637,6 +1707,12 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
commander@2.17.1:
resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==}
commander@2.19.0:
resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
......@@ -1651,6 +1727,9 @@ packages:
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
component-emitter@1.3.1:
resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
compressible@2.0.18:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'}
......@@ -1859,6 +1938,10 @@ packages:
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
engines: {node: '>= 0.6'}
copy-descriptor@0.1.1:
resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
engines: {node: '>=0.10.0'}
copy-text-to-clipboard@3.2.0:
resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==}
engines: {node: '>=12'}
......@@ -1961,6 +2044,14 @@ packages:
css-select@4.3.0:
resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
css-tree@1.0.0-alpha.28:
resolution: {integrity: sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==}
engines: {node: '>=0.10.0'}
css-tree@1.0.0-alpha.29:
resolution: {integrity: sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==}
engines: {node: '>=0.10.0'}
css-tree@1.0.0-alpha.37:
resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==}
engines: {node: '>=8.0.0'}
......@@ -1969,6 +2060,9 @@ packages:
resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
engines: {node: '>=8.0.0'}
css-url-regex@1.1.0:
resolution: {integrity: sha512-hLKuvifwoKvwqpctblTp0BovBuOXzxof8JgkA8zeqxxL+vcynHQjtIqqlFfQI1gEAZAjbqKm9gFTa88fxTAX4g==}
css-what@3.4.2:
resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==}
engines: {node: '>= 6'}
......@@ -2000,6 +2094,10 @@ packages:
peerDependencies:
postcss: ^8.2.15
csso@3.5.1:
resolution: {integrity: sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==}
engines: {node: '>=0.10.0'}
csso@4.2.0:
resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
engines: {node: '>=8.0.0'}
......@@ -2102,6 +2200,10 @@ packages:
resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==}
engines: {node: '>= 0.4'}
deepmerge@1.3.2:
resolution: {integrity: sha512-qjMjTrk+RKv/sp4RPDpV5CnKhxjFI9p+GkLBOls5A8EEElldYWCWA9zceAkmfd0xIo2aU1nxiaLFoiya2sb6Cg==}
engines: {node: '>=0.10.0'}
deepmerge@1.5.2:
resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==}
engines: {node: '>=0.10.0'}
......@@ -2129,6 +2231,18 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
define-property@0.2.5:
resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
engines: {node: '>=0.10.0'}
define-property@1.0.0:
resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==}
engines: {node: '>=0.10.0'}
define-property@2.0.2:
resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
engines: {node: '>=0.10.0'}
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
......@@ -2147,6 +2261,9 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
destroy@1.0.4:
resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
destroy@1.2.0:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
......@@ -2189,6 +2306,9 @@ packages:
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
domhandler@2.4.2:
resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==}
domhandler@4.3.1:
resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
engines: {node: '>= 4'}
......@@ -2196,6 +2316,9 @@ packages:
dompurify@3.2.5:
resolution: {integrity: sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==}
domready@1.0.8:
resolution: {integrity: sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==}
domutils@1.7.0:
resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
......@@ -2257,6 +2380,10 @@ packages:
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emojis-list@2.1.0:
resolution: {integrity: sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==}
engines: {node: '>= 0.10'}
emojis-list@3.0.0:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
engines: {node: '>= 4'}
......@@ -2280,6 +2407,9 @@ packages:
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
engines: {node: '>=10.13.0'}
entities@1.1.2:
resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
......@@ -2411,6 +2541,10 @@ packages:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
expand-brackets@2.1.4:
resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
engines: {node: '>=0.10.0'}
express@4.21.2:
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
engines: {node: '>= 0.10.0'}
......@@ -2427,9 +2561,17 @@ packages:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
extend-shallow@3.0.2:
resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
engines: {node: '>=0.10.0'}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
extglob@2.0.4:
resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
engines: {node: '>=0.10.0'}
extsprintf@1.3.0:
resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
engines: {'0': node >=0.6.0}
......@@ -2515,6 +2657,10 @@ packages:
resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==}
engines: {node: '>=4'}
fill-range@4.0.0:
resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
engines: {node: '>=0.10.0'}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
......@@ -2564,6 +2710,10 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
for-in@1.0.2:
resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
engines: {node: '>=0.10.0'}
forever-agent@0.6.1:
resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
......@@ -2585,6 +2735,10 @@ packages:
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
fragment-cache@0.2.1:
resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
engines: {node: '>=0.10.0'}
fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
......@@ -2683,6 +2837,10 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
get-value@2.0.6:
resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
engines: {node: '>=0.10.0'}
getpass@0.1.7:
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
......@@ -2808,6 +2966,22 @@ packages:
has-unicode@2.0.1:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
has-value@0.3.1:
resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
engines: {node: '>=0.10.0'}
has-value@1.0.0:
resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==}
engines: {node: '>=0.10.0'}
has-values@0.1.4:
resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
engines: {node: '>=0.10.0'}
has-values@1.0.0:
resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
engines: {node: '>=0.10.0'}
hash-sum@1.0.2:
resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==}
......@@ -2842,10 +3016,22 @@ packages:
engines: {node: '>=12'}
hasBin: true
html-minifier@3.5.21:
resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==}
engines: {node: '>=4'}
hasBin: true
html-tags@2.0.0:
resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==}
engines: {node: '>=4'}
html-webpack-plugin@3.2.0:
resolution: {integrity: sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==}
engines: {node: '>=6.9'}
deprecated: 3.x is no longer supported
peerDependencies:
webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
html-webpack-plugin@5.6.3:
resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==}
engines: {node: '>=10.13.0'}
......@@ -2862,6 +3048,9 @@ packages:
resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==}
engines: {node: '>=8.0.0'}
htmlparser2@3.10.1:
resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
htmlparser2@6.1.0:
resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
......@@ -2927,6 +3116,11 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
image-size@0.5.5:
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
engines: {node: '>=0.10.0'}
hasBin: true
image-webpack-loader@6.0.0:
resolution: {integrity: sha512-H5qZ+DH88A4mW9CPJpa7VH8B2dxLbzqiMH+BQYtMw8v2jaFwZPQOS/NfkSaJMz76dsi/uw+0LY4uHR1iK6hq8g==}
......@@ -3010,6 +3204,10 @@ packages:
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
engines: {node: '>= 10'}
is-accessor-descriptor@1.0.1:
resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
engines: {node: '>= 0.10'}
is-arguments@1.2.0:
resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
engines: {node: '>= 0.4'}
......@@ -3037,6 +3235,9 @@ packages:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
is-buffer@1.1.6:
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
......@@ -3051,6 +3252,10 @@ packages:
is-cwebp-readable@2.0.1:
resolution: {integrity: sha512-VdCK1HN5F9vURT3GTLBViE/o/eRv2Z08q6bARfp8L6aFemIHMHPSYR9jOZpM2MvOSEYDtZWsiNovsqwsTLk5TA==}
is-data-descriptor@1.0.1:
resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==}
engines: {node: '>= 0.4'}
is-data-view@1.0.2:
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
engines: {node: '>= 0.4'}
......@@ -3059,6 +3264,14 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
is-descriptor@0.1.7:
resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==}
engines: {node: '>= 0.4'}
is-descriptor@1.0.3:
resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==}
engines: {node: '>= 0.4'}
is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
......@@ -3068,6 +3281,10 @@ packages:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
is-extendable@1.0.1:
resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
engines: {node: '>=0.10.0'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
......@@ -3126,6 +3343,10 @@ packages:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
is-number@3.0.0:
resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
engines: {node: '>=0.10.0'}
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
......@@ -3214,6 +3435,10 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
is-wsl@2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
......@@ -3227,6 +3452,10 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
isobject@2.1.0:
resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
engines: {node: '>=0.10.0'}
isobject@3.0.1:
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
engines: {node: '>=0.10.0'}
......@@ -3300,6 +3529,10 @@ packages:
json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
json5@0.5.1:
resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==}
hasBin: true
json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
......@@ -3326,6 +3559,18 @@ packages:
keyv@3.0.0:
resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==}
kind-of@3.2.2:
resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
engines: {node: '>=0.10.0'}
kind-of@4.0.0:
resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==}
engines: {node: '>=0.10.0'}
kind-of@5.1.0:
resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==}
engines: {node: '>=0.10.0'}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
......@@ -3358,6 +3603,9 @@ packages:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
loader-utils@0.2.17:
resolution: {integrity: sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==}
loader-utils@1.4.2:
resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
engines: {node: '>=4.0.0'}
......@@ -3425,6 +3673,9 @@ packages:
resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==}
engines: {node: '>=0.10.0'}
lower-case@1.1.4:
resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
......@@ -3462,14 +3713,25 @@ packages:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
map-cache@0.2.2:
resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
engines: {node: '>=0.10.0'}
map-obj@1.0.1:
resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
engines: {node: '>=0.10.0'}
map-visit@1.0.0:
resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
engines: {node: '>=0.10.0'}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
mdn-data@1.1.4:
resolution: {integrity: sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==}
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
......@@ -3491,6 +3753,10 @@ packages:
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
merge-options@1.0.1:
resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
engines: {node: '>=4'}
merge-source-map@1.1.0:
resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==}
......@@ -3505,6 +3771,10 @@ packages:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
micromatch@3.1.0:
resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==}
engines: {node: '>=0.10.0'}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
......@@ -3521,6 +3791,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
mime@1.4.1:
resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==}
hasBin: true
mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
......@@ -3565,6 +3839,13 @@ packages:
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
mitt@1.1.2:
resolution: {integrity: sha512-3btxP0O9iGADGWAkteQ8mzDtEspZqu4I32y4GZYCV5BrwtzdcRpF4dQgNdJadCrbBx7Lu6Sq9AVrerMHR0Hkmw==}
mixin-deep@1.3.2:
resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
engines: {node: '>=0.10.0'}
mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
......@@ -3608,6 +3889,10 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanomatch@1.2.13:
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
engines: {node: '>=0.10.0'}
negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
......@@ -3622,6 +3907,9 @@ packages:
nice-try@1.0.5:
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
no-case@2.3.2:
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
......@@ -3718,6 +4006,10 @@ packages:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-copy@0.1.0:
resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
engines: {node: '>=0.10.0'}
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
......@@ -3730,6 +4022,10 @@ packages:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
object-visit@1.0.1:
resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
engines: {node: '>=0.10.0'}
object.assign@4.1.7:
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines: {node: '>= 0.4'}
......@@ -3738,6 +4034,10 @@ packages:
resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==}
engines: {node: '>= 0.8'}
object.pick@1.3.0:
resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
engines: {node: '>=0.10.0'}
object.values@1.2.1:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
......@@ -3745,6 +4045,10 @@ packages:
obuf@1.1.2:
resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
......@@ -3879,6 +4183,9 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
param-case@2.1.1:
resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
param-case@3.0.4:
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
......@@ -3916,6 +4223,10 @@ packages:
pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
pascalcase@0.1.1:
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
engines: {node: '>=0.10.0'}
path-exists@2.1.0:
resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
engines: {node: '>=0.10.0'}
......@@ -4009,6 +4320,10 @@ packages:
resolution: {integrity: sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==}
engines: {node: '>= 10.12'}
posix-character-classes@0.1.1:
resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
engines: {node: '>=0.10.0'}
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
......@@ -4184,6 +4499,11 @@ packages:
postcss-plugin-px2rem@0.8.1:
resolution: {integrity: sha512-gNxhrnR57pnGrPLLqVNWY9+BWgj46kYkphw+0gpRJf9tjgwI7/tLqQPK7KdlksB2SSAddOb11otDVwri8b8mXw==}
postcss-prefix-selector@1.16.1:
resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==}
peerDependencies:
postcss: '>4 <9'
postcss-reduce-initial@5.1.2:
resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==}
engines: {node: ^10 || ^12 || >=14.0}
......@@ -4231,6 +4551,23 @@ packages:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
posthtml-parser@0.2.1:
resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
posthtml-rename-id@1.0.12:
resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==}
posthtml-render@1.4.0:
resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==}
engines: {node: '>=10'}
posthtml-svg-mode@1.0.3:
resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==}
posthtml@0.9.2:
resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==}
engines: {node: '>=0.10.0'}
prepend-http@1.0.4:
resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==}
engines: {node: '>=0.10.0'}
......@@ -4244,6 +4581,9 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
pretty-error@2.1.2:
resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==}
pretty-error@4.0.0:
resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
......@@ -4307,6 +4647,10 @@ packages:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
engines: {node: '>=0.6'}
query-string@4.3.4:
resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==}
engines: {node: '>=0.10.0'}
query-string@5.1.1:
resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==}
engines: {node: '>=0.10.0'}
......@@ -4389,6 +4733,10 @@ packages:
regenerator-runtime@0.11.1:
resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==}
regex-not@1.0.2:
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
engines: {node: '>=0.10.0'}
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
......@@ -4408,9 +4756,20 @@ packages:
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
engines: {node: '>= 0.10'}
renderkid@2.0.7:
resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==}
renderkid@3.0.0:
resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
repeat-element@1.1.4:
resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
engines: {node: '>=0.10.0'}
repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
repeating@2.0.1:
resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==}
engines: {node: '>=0.10.0'}
......@@ -4445,6 +4804,10 @@ packages:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
resolve-url@0.2.1:
resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
deprecated: https://github.com/lydell/resolve-url#deprecated
resolve@1.22.10:
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
engines: {node: '>= 0.4'}
......@@ -4461,6 +4824,10 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
ret@0.1.15:
resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
engines: {node: '>=0.12'}
retry@0.13.1:
resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
engines: {node: '>= 4'}
......@@ -4500,6 +4867,9 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
safe-regex@1.1.0:
resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
......@@ -4551,6 +4921,13 @@ packages:
resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
engines: {node: '>= 10.13.0'}
script-ext-html-webpack-plugin@2.1.3:
resolution: {integrity: sha512-a/gqxJFw2IAs8LK/ZFBKv1YoeFysbntdiLBVdNfgHgMKWW1mMcRGY6Hm3aihSaY9tqqhcaXuQJ4nn19loNbkuQ==}
engines: {node: '>=6.11.5'}
peerDependencies:
html-webpack-plugin: ^3.0.0 || ^4.0.0
webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
scss-tokenizer@0.2.3:
resolution: {integrity: sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q==}
......@@ -4596,6 +4973,10 @@ packages:
engines: {node: '>=10'}
hasBin: true
send@0.16.2:
resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==}
engines: {node: '>= 0.8.0'}
send@0.19.0:
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
engines: {node: '>= 0.8.0'}
......@@ -4607,6 +4988,10 @@ packages:
resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
engines: {node: '>= 0.8.0'}
serve-static@1.13.2:
resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==}
engines: {node: '>= 0.8.0'}
serve-static@1.16.2:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
......@@ -4626,6 +5011,10 @@ packages:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines: {node: '>= 0.4'}
set-value@2.0.1:
resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
engines: {node: '>=0.10.0'}
setprototypeof@1.1.0:
resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
......@@ -4683,6 +5072,18 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
snapdragon-node@2.1.1:
resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
engines: {node: '>=0.10.0'}
snapdragon-util@3.0.1:
resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
engines: {node: '>=0.10.0'}
snapdragon@0.8.2:
resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
engines: {node: '>=0.10.0'}
sockjs@0.3.24:
resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
......@@ -4705,9 +5106,17 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
source-map-resolve@0.5.3:
resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
source-map-url@0.4.1:
resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
deprecated: See https://github.com/lydell/source-map-url#deprecated
source-map@0.4.4:
resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==}
engines: {node: '>=0.8.0'}
......@@ -4739,6 +5148,10 @@ packages:
resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
engines: {node: '>=6.0.0'}
split-string@3.1.0:
resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
engines: {node: '>=0.10.0'}
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
......@@ -4762,6 +5175,14 @@ packages:
stackframe@1.3.4:
resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
static-extend@0.1.2:
resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
engines: {node: '>=0.10.0'}
statuses@1.4.0:
resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==}
engines: {node: '>= 0.6'}
statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
......@@ -4891,9 +5312,25 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
svg-baker-runtime@1.4.7:
resolution: {integrity: sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==}
svg-baker@1.7.0:
resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==}
svg-sprite-loader@6.0.9:
resolution: {integrity: sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==}
engines: {node: '>=6'}
svg-tags@1.0.0:
resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
svgo@1.2.2:
resolution: {integrity: sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==}
engines: {node: '>=4.0.0'}
deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x.
hasBin: true
svgo@1.3.2:
resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==}
engines: {node: '>=4.0.0'}
......@@ -4905,6 +5342,10 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
tapable@1.1.3:
resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
engines: {node: '>=6'}
tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
......@@ -4989,14 +5430,29 @@ packages:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
to-object-path@0.3.0:
resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
engines: {node: '>=0.10.0'}
to-regex-range@2.1.1:
resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
engines: {node: '>=0.10.0'}
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
to-regex@3.0.2:
resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
engines: {node: '>=0.10.0'}
toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
toposort@1.0.7:
resolution: {integrity: sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==}
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
......@@ -5008,6 +5464,10 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
traverse@0.6.11:
resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==}
engines: {node: '>= 0.4'}
trim-newlines@1.0.0:
resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==}
engines: {node: '>=0.10.0'}
......@@ -5060,6 +5520,15 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
typedarray.prototype.slice@1.0.5:
resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==}
engines: {node: '>= 0.4'}
uglify-js@3.4.10:
resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==}
engines: {node: '>=0.8.0'}
hasBin: true
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
......@@ -5090,6 +5559,14 @@ packages:
resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
engines: {node: '>=4'}
unidecode@0.1.8:
resolution: {integrity: sha512-SdoZNxCWpN2tXTCrGkPF/0rL2HEq+i2gwRG1ReBvx8/0yTzC3enHfugOf8A9JBShVwwrRIkLX0YcDUGbzjbVCA==}
engines: {node: '>= 0.4.12'}
union-value@1.0.1:
resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
engines: {node: '>=0.10.0'}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
......@@ -5101,15 +5578,26 @@ packages:
unquote@1.1.1:
resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==}
unset-value@1.0.0:
resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
engines: {node: '>=0.10.0'}
update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
upper-case@1.1.3:
resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
urix@0.1.0:
resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
deprecated: Please see https://github.com/lydell/urix#deprecated
url-parse-lax@1.0.0:
resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==}
engines: {node: '>=0.10.0'}
......@@ -5118,6 +5606,9 @@ packages:
resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==}
engines: {node: '>=4'}
url-slug@2.0.0:
resolution: {integrity: sha512-aiNmSsVgrjCiJ2+KWPferjT46YFKoE8i0YX04BlMVDue022Xwhg/zYlnZ6V9/mP3p8Wj7LEp0myiTkC/p6sxew==}
url-to-options@1.0.1:
resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==}
engines: {node: '>= 4'}
......@@ -5131,9 +5622,16 @@ packages:
proxy-agent:
optional: true
use@3.1.1:
resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
engines: {node: '>=0.10.0'}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
util.promisify@1.0.0:
resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==}
util.promisify@1.0.1:
resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==}
......@@ -6388,8 +6886,7 @@ snapshots:
'@types/parse-json@4.0.2': {}
'@types/q@1.5.8':
optional: true
'@types/q@1.5.8': {}
'@types/qs@6.14.0': {}
......@@ -7052,13 +7549,17 @@ snapshots:
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
optional: true
arr-diff@4.0.0: {}
arr-flatten@1.1.0: {}
arr-union@3.1.0: {}
array-buffer-byte-length@1.0.2:
dependencies:
call-bound: 1.0.4
is-array-buffer: 3.0.5
optional: true
array-find-index@1.0.2:
optional: true
......@@ -7067,6 +7568,8 @@ snapshots:
array-union@2.1.0: {}
array-unique@0.3.2: {}
array.prototype.reduce@1.0.8:
dependencies:
call-bind: 1.0.8
......@@ -7077,7 +7580,6 @@ snapshots:
es-errors: 1.3.0
es-object-atoms: 1.1.1
is-string: 1.1.1
optional: true
arraybuffer.prototype.slice@1.0.4:
dependencies:
......@@ -7088,7 +7590,6 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
optional: true
asn1@0.2.6:
dependencies:
......@@ -7098,11 +7599,12 @@ snapshots:
assert-plus@1.0.0:
optional: true
assign-symbols@1.0.0: {}
async-foreach@0.1.3:
optional: true
async-function@1.0.0:
optional: true
async-function@1.0.0: {}
async-validator@1.8.5:
dependencies:
......@@ -7114,6 +7616,8 @@ snapshots:
at-least-node@1.0.0: {}
atob@2.1.2: {}
autoprefixer@10.4.21(postcss@8.5.3):
dependencies:
browserslist: 4.24.5
......@@ -7127,7 +7631,6 @@ snapshots:
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
optional: true
aws-sign2@0.7.0:
optional: true
......@@ -7203,6 +7706,16 @@ snapshots:
base64-js@1.5.1: {}
base@0.11.2:
dependencies:
cache-base: 1.0.1
class-utils: 0.3.6
component-emitter: 1.3.1
define-property: 1.0.0
isobject: 3.0.1
mixin-deep: 1.3.2
pascalcase: 0.1.1
batch@0.6.1: {}
bcrypt-pbkdf@1.0.2:
......@@ -7247,6 +7760,8 @@ snapshots:
- proxy-agent
- supports-color
big.js@3.2.0: {}
big.js@5.2.2: {}
bin-build@3.0.0:
......@@ -7345,6 +7860,21 @@ snapshots:
concat-map: 0.0.1
optional: true
braces@2.3.2:
dependencies:
arr-flatten: 1.1.0
array-unique: 0.3.2
extend-shallow: 2.0.1
fill-range: 4.0.0
isobject: 3.0.1
repeat-element: 1.1.4
snapdragon: 0.8.2
snapdragon-node: 2.1.1
split-string: 3.1.0
to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
braces@3.0.3:
dependencies:
fill-range: 7.1.1
......@@ -7382,6 +7912,18 @@ snapshots:
bytes@3.1.2: {}
cache-base@1.0.1:
dependencies:
collection-visit: 1.0.0
component-emitter: 1.3.1
get-value: 2.0.6
has-value: 1.0.0
isobject: 3.0.1
set-value: 2.0.1
to-object-path: 0.3.0
union-value: 1.0.1
unset-value: 1.0.0
cacheable-request@2.1.4:
dependencies:
clone-response: 1.0.2
......@@ -7412,6 +7954,11 @@ snapshots:
callsites@3.1.0: {}
camel-case@3.0.0:
dependencies:
no-case: 2.3.2
upper-case: 1.1.3
camel-case@4.1.2:
dependencies:
pascal-case: 3.1.2
......@@ -7492,13 +8039,24 @@ snapshots:
chrome-trace-event@1.0.4: {}
clean-css@5.3.3:
class-utils@0.3.6:
dependencies:
source-map: 0.6.1
arr-union: 3.1.0
define-property: 0.2.5
isobject: 3.0.1
static-extend: 0.1.2
cli-cursor@2.1.0:
clean-css@4.2.4:
dependencies:
restore-cursor: 2.0.0
source-map: 0.6.1
clean-css@5.3.3:
dependencies:
source-map: 0.6.1
cli-cursor@2.1.0:
dependencies:
restore-cursor: 2.0.0
cli-cursor@3.1.0:
dependencies:
......@@ -7560,11 +8118,15 @@ snapshots:
'@types/q': 1.5.8
chalk: 2.4.2
q: 1.5.1
optional: true
code-point-at@1.1.0:
optional: true
collection-visit@1.0.0:
dependencies:
map-visit: 1.0.0
object-visit: 1.0.1
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
......@@ -7585,6 +8147,10 @@ snapshots:
dependencies:
delayed-stream: 1.0.0
commander@2.17.1: {}
commander@2.19.0: {}
commander@2.20.3: {}
commander@7.2.0: {}
......@@ -7593,6 +8159,8 @@ snapshots:
commondir@1.0.1: {}
component-emitter@1.3.1: {}
compressible@2.0.18:
dependencies:
mime-db: 1.54.0
......@@ -7643,6 +8211,8 @@ snapshots:
cookie@0.7.1: {}
copy-descriptor@0.1.1: {}
copy-text-to-clipboard@3.2.0: {}
copy-to@2.0.1: {}
......@@ -7742,8 +8312,7 @@ snapshots:
source-map: 0.6.1
webpack: 5.99.8
css-select-base-adapter@0.1.1:
optional: true
css-select-base-adapter@0.1.1: {}
css-select@2.1.0:
dependencies:
......@@ -7751,7 +8320,6 @@ snapshots:
css-what: 3.4.2
domutils: 1.7.0
nth-check: 1.0.2
optional: true
css-select@4.3.0:
dependencies:
......@@ -7761,6 +8329,16 @@ snapshots:
domutils: 2.8.0
nth-check: 2.1.1
css-tree@1.0.0-alpha.28:
dependencies:
mdn-data: 1.1.4
source-map: 0.5.7
css-tree@1.0.0-alpha.29:
dependencies:
mdn-data: 1.1.4
source-map: 0.5.7
css-tree@1.0.0-alpha.37:
dependencies:
mdn-data: 2.0.4
......@@ -7772,8 +8350,9 @@ snapshots:
mdn-data: 2.0.14
source-map: 0.6.1
css-what@3.4.2:
optional: true
css-url-regex@1.1.0: {}
css-what@3.4.2: {}
css-what@6.1.0: {}
......@@ -7823,6 +8402,10 @@ snapshots:
postcss: 8.5.3
yaml: 1.10.2
csso@3.5.1:
dependencies:
css-tree: 1.0.0-alpha.29
csso@4.2.0:
dependencies:
css-tree: 1.1.3
......@@ -7851,21 +8434,18 @@ snapshots:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
optional: true
data-view-byte-length@1.0.2:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
optional: true
data-view-byte-offset@1.0.1:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
optional: true
dateformat@2.2.0: {}
......@@ -7888,8 +8468,7 @@ snapshots:
decamelize@1.2.0:
optional: true
decode-uri-component@0.2.2:
optional: true
decode-uri-component@0.2.2: {}
decompress-response@3.3.0:
dependencies:
......@@ -7948,6 +8527,8 @@ snapshots:
object-keys: 1.1.1
regexp.prototype.flags: 1.5.4
deepmerge@1.3.2: {}
deepmerge@1.5.2: {}
default-gateway@6.0.3:
......@@ -7976,6 +8557,19 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
define-property@0.2.5:
dependencies:
is-descriptor: 0.1.7
define-property@1.0.0:
dependencies:
is-descriptor: 1.0.3
define-property@2.0.2:
dependencies:
is-descriptor: 1.0.3
isobject: 3.0.1
delayed-stream@1.0.0: {}
delegate@3.2.0: {}
......@@ -7987,6 +8581,8 @@ snapshots:
depd@2.0.0: {}
destroy@1.0.4: {}
destroy@1.2.0: {}
detect-libc@1.0.3:
......@@ -8016,7 +8612,6 @@ snapshots:
dependencies:
domelementtype: 2.3.0
entities: 2.2.0
optional: true
dom-serializer@1.4.1:
dependencies:
......@@ -8024,11 +8619,14 @@ snapshots:
domhandler: 4.3.1
entities: 2.2.0
domelementtype@1.3.1:
optional: true
domelementtype@1.3.1: {}
domelementtype@2.3.0: {}
domhandler@2.4.2:
dependencies:
domelementtype: 1.3.1
domhandler@4.3.1:
dependencies:
domelementtype: 2.3.0
......@@ -8037,11 +8635,12 @@ snapshots:
optionalDependencies:
'@types/trusted-types': 2.0.7
domready@1.0.8: {}
domutils@1.7.0:
dependencies:
dom-serializer: 0.2.2
domelementtype: 1.3.1
optional: true
domutils@2.8.0:
dependencies:
......@@ -8129,6 +8728,8 @@ snapshots:
emoji-regex@8.0.0: {}
emojis-list@2.1.0: {}
emojis-list@3.0.0: {}
encodeurl@1.0.2: {}
......@@ -8146,6 +8747,8 @@ snapshots:
graceful-fs: 4.2.11
tapable: 2.2.1
entities@1.1.2: {}
entities@2.2.0: {}
entities@4.5.0: {}
......@@ -8211,10 +8814,8 @@ snapshots:
typed-array-length: 1.0.7
unbox-primitive: 1.1.0
which-typed-array: 1.1.19
optional: true
es-array-method-boxes-properly@1.0.0:
optional: true
es-array-method-boxes-properly@1.0.0: {}
es-define-property@1.0.1: {}
......@@ -8238,7 +8839,6 @@ snapshots:
is-callable: 1.2.7
is-date-object: 1.1.0
is-symbol: 1.1.1
optional: true
escalade@3.2.0: {}
......@@ -8253,8 +8853,7 @@ snapshots:
esrecurse: 4.3.0
estraverse: 4.3.0
esprima@4.0.1:
optional: true
esprima@4.0.1: {}
esrecurse@4.3.0:
dependencies:
......@@ -8338,6 +8937,18 @@ snapshots:
pify: 2.3.0
optional: true
expand-brackets@2.1.4:
dependencies:
debug: 2.6.9
define-property: 0.2.5
extend-shallow: 2.0.1
posix-character-classes: 0.1.1
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
express@4.21.2:
dependencies:
accepts: 1.3.8
......@@ -8389,8 +9000,26 @@ snapshots:
dependencies:
is-extendable: 0.1.1
extend-shallow@3.0.2:
dependencies:
assign-symbols: 1.0.0
is-extendable: 1.0.1
extend@3.0.2: {}
extglob@2.0.4:
dependencies:
array-unique: 0.3.2
define-property: 1.0.0
expand-brackets: 2.1.4
extend-shallow: 2.0.1
fragment-cache: 0.2.1
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
extsprintf@1.3.0:
optional: true
......@@ -8474,6 +9103,13 @@ snapshots:
trim-repeated: 1.0.0
optional: true
fill-range@4.0.0:
dependencies:
extend-shallow: 2.0.1
is-number: 3.0.0
repeat-string: 1.6.1
to-regex-range: 2.1.1
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
......@@ -8532,7 +9168,8 @@ snapshots:
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
optional: true
for-in@1.0.2: {}
forever-agent@0.6.1:
optional: true
......@@ -8562,6 +9199,10 @@ snapshots:
fraction.js@4.3.7: {}
fragment-cache@0.2.1:
dependencies:
map-cache: 0.2.2
fresh@0.5.2: {}
from2@2.3.0:
......@@ -8605,7 +9246,6 @@ snapshots:
functions-have-names: 1.2.3
hasown: 2.0.2
is-callable: 1.2.7
optional: true
functions-have-names@1.2.3: {}
......@@ -8680,7 +9320,8 @@ snapshots:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
optional: true
get-value@2.0.6: {}
getpass@0.1.7:
dependencies:
......@@ -8710,7 +9351,7 @@ snapshots:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.0.8
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
optional: true
......@@ -8730,7 +9371,6 @@ snapshots:
dependencies:
define-properties: 1.2.1
gopd: 1.2.0
optional: true
globby@10.0.2:
dependencies:
......@@ -8829,8 +9469,7 @@ snapshots:
dependencies:
ansi-regex: 2.1.1
has-bigints@1.1.0:
optional: true
has-bigints@1.1.0: {}
has-flag@1.0.0: {}
......@@ -8845,7 +9484,6 @@ snapshots:
has-proto@1.2.0:
dependencies:
dunder-proto: 1.0.1
optional: true
has-symbol-support-x@1.4.2:
optional: true
......@@ -8864,6 +9502,25 @@ snapshots:
has-unicode@2.0.1:
optional: true
has-value@0.3.1:
dependencies:
get-value: 2.0.6
has-values: 0.1.4
isobject: 2.1.0
has-value@1.0.0:
dependencies:
get-value: 2.0.6
has-values: 1.0.0
isobject: 3.0.1
has-values@0.1.4: {}
has-values@1.0.0:
dependencies:
is-number: 3.0.0
kind-of: 4.0.0
hash-sum@1.0.2: {}
hash-sum@2.0.0: {}
......@@ -8899,8 +9556,29 @@ snapshots:
relateurl: 0.2.7
terser: 5.39.2
html-minifier@3.5.21:
dependencies:
camel-case: 3.0.0
clean-css: 4.2.4
commander: 2.17.1
he: 1.2.0
param-case: 2.1.1
relateurl: 0.2.7
uglify-js: 3.4.10
html-tags@2.0.0: {}
html-webpack-plugin@3.2.0(webpack@5.99.8):
dependencies:
html-minifier: 3.5.21
loader-utils: 0.2.17
lodash: 4.17.21
pretty-error: 2.1.2
tapable: 1.1.3
toposort: 1.0.7
util.promisify: 1.0.0
webpack: 5.99.8
html-webpack-plugin@5.6.3(webpack@5.99.8):
dependencies:
'@types/html-minifier-terser': 6.1.0
......@@ -8916,6 +9594,15 @@ snapshots:
css-line-break: 2.1.0
text-segmentation: 1.0.3
htmlparser2@3.10.1:
dependencies:
domelementtype: 1.3.1
domhandler: 2.4.2
domutils: 1.7.0
entities: 1.1.2
inherits: 2.0.4
readable-stream: 3.6.2
htmlparser2@6.1.0:
dependencies:
domelementtype: 2.3.0
......@@ -8994,6 +9681,8 @@ snapshots:
ignore@5.3.2: {}
image-size@0.5.5: {}
image-webpack-loader@6.0.0:
dependencies:
imagemin: 7.0.1
......@@ -9097,7 +9786,6 @@ snapshots:
es-errors: 1.3.0
hasown: 2.0.2
side-channel: 1.1.0
optional: true
into-stream@3.1.0:
dependencies:
......@@ -9109,6 +9797,10 @@ snapshots:
ipaddr.js@2.2.0: {}
is-accessor-descriptor@1.0.1:
dependencies:
hasown: 2.0.2
is-arguments@1.2.0:
dependencies:
call-bound: 1.0.4
......@@ -9119,7 +9811,6 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
get-intrinsic: 1.3.0
optional: true
is-arrayish@0.2.1: {}
......@@ -9130,12 +9821,10 @@ snapshots:
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
optional: true
is-bigint@1.1.0:
dependencies:
has-bigints: 1.1.0
optional: true
is-binary-path@2.1.0:
dependencies:
......@@ -9145,10 +9834,10 @@ snapshots:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
optional: true
is-callable@1.2.7:
optional: true
is-buffer@1.1.6: {}
is-callable@1.2.7: {}
is-class-hotfix@0.0.6: {}
......@@ -9161,22 +9850,39 @@ snapshots:
file-type: 4.4.0
optional: true
is-data-descriptor@1.0.1:
dependencies:
hasown: 2.0.2
is-data-view@1.0.2:
dependencies:
call-bound: 1.0.4
get-intrinsic: 1.3.0
is-typed-array: 1.1.15
optional: true
is-date-object@1.1.0:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
is-descriptor@0.1.7:
dependencies:
is-accessor-descriptor: 1.0.1
is-data-descriptor: 1.0.1
is-descriptor@1.0.3:
dependencies:
is-accessor-descriptor: 1.0.1
is-data-descriptor: 1.0.1
is-docker@2.2.1: {}
is-extendable@0.1.1: {}
is-extendable@1.0.1:
dependencies:
is-plain-object: 2.0.4
is-extglob@2.1.1: {}
is-file-esm@1.0.0:
......@@ -9186,7 +9892,6 @@ snapshots:
is-finalizationregistry@1.1.1:
dependencies:
call-bound: 1.0.4
optional: true
is-finite@1.1.0:
optional: true
......@@ -9206,7 +9911,6 @@ snapshots:
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
optional: true
is-gif@3.0.0:
dependencies:
......@@ -9222,8 +9926,7 @@ snapshots:
is-jpg@2.0.0:
optional: true
is-map@2.0.3:
optional: true
is-map@2.0.3: {}
is-natural-number@4.0.1:
optional: true
......@@ -9232,15 +9935,17 @@ snapshots:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
optional: true
is-number@3.0.0:
dependencies:
kind-of: 3.2.2
is-number@7.0.0: {}
is-object@1.0.2:
optional: true
is-plain-obj@1.1.0:
optional: true
is-plain-obj@1.1.0: {}
is-plain-obj@3.0.0: {}
......@@ -9261,13 +9966,11 @@ snapshots:
is-retry-allowed@1.2.0:
optional: true
is-set@2.0.3:
optional: true
is-set@2.0.3: {}
is-shared-array-buffer@1.0.4:
dependencies:
call-bound: 1.0.4
optional: true
is-stream@1.1.0: {}
......@@ -9277,7 +9980,6 @@ snapshots:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
optional: true
is-svg@4.4.0:
dependencies:
......@@ -9289,7 +9991,6 @@ snapshots:
call-bound: 1.0.4
has-symbols: 1.1.0
safe-regex-test: 1.1.0
optional: true
is-type-of@1.4.0:
dependencies:
......@@ -9300,7 +10001,6 @@ snapshots:
is-typed-array@1.1.15:
dependencies:
which-typed-array: 1.1.19
optional: true
is-typedarray@1.0.0:
optional: true
......@@ -9310,19 +10010,18 @@ snapshots:
is-utf8@0.2.1:
optional: true
is-weakmap@2.0.2:
optional: true
is-weakmap@2.0.2: {}
is-weakref@1.1.1:
dependencies:
call-bound: 1.0.4
optional: true
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.4
get-intrinsic: 1.3.0
optional: true
is-windows@1.0.2: {}
is-wsl@2.2.0:
dependencies:
......@@ -9330,11 +10029,14 @@ snapshots:
isarray@1.0.0: {}
isarray@2.0.5:
optional: true
isarray@2.0.5: {}
isexe@2.0.0: {}
isobject@2.1.0:
dependencies:
isarray: 1.0.0
isobject@3.0.1: {}
isstream@0.1.2: {}
......@@ -9373,7 +10075,6 @@ snapshots:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
optional: true
jsbn@0.1.1:
optional: true
......@@ -9399,6 +10100,8 @@ snapshots:
json-stringify-safe@5.0.1:
optional: true
json5@0.5.1: {}
json5@1.0.2:
dependencies:
minimist: 1.2.8
......@@ -9428,6 +10131,16 @@ snapshots:
json-buffer: 3.0.0
optional: true
kind-of@3.2.2:
dependencies:
is-buffer: 1.1.6
kind-of@4.0.0:
dependencies:
is-buffer: 1.1.6
kind-of@5.1.0: {}
kind-of@6.0.3: {}
klona@2.0.6: {}
......@@ -9458,6 +10171,13 @@ snapshots:
loader-runner@4.3.0: {}
loader-utils@0.2.17:
dependencies:
big.js: 3.2.0
emojis-list: 2.1.0
json5: 0.5.1
object-assign: 4.1.1
loader-utils@1.4.2:
dependencies:
big.js: 5.2.2
......@@ -9526,6 +10246,8 @@ snapshots:
signal-exit: 3.0.7
optional: true
lower-case@1.1.4: {}
lower-case@2.0.2:
dependencies:
tslib: 2.8.1
......@@ -9570,11 +10292,19 @@ snapshots:
dependencies:
semver: 6.3.1
map-cache@0.2.2: {}
map-obj@1.0.1:
optional: true
map-visit@1.0.0:
dependencies:
object-visit: 1.0.1
math-intrinsics@1.1.0: {}
mdn-data@1.1.4: {}
mdn-data@2.0.14: {}
mdn-data@2.0.4:
......@@ -9602,6 +10332,10 @@ snapshots:
merge-descriptors@1.0.3: {}
merge-options@1.0.1:
dependencies:
is-plain-obj: 1.1.0
merge-source-map@1.1.0:
dependencies:
source-map: 0.6.1
......@@ -9612,6 +10346,24 @@ snapshots:
methods@1.1.2: {}
micromatch@3.1.0:
dependencies:
arr-diff: 4.0.0
array-unique: 0.3.2
braces: 2.3.2
define-property: 1.0.0
extend-shallow: 2.0.1
extglob: 2.0.4
fragment-cache: 0.2.1
kind-of: 5.1.0
nanomatch: 1.2.13
object.pick: 1.3.0
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
micromatch@4.0.8:
dependencies:
braces: 3.0.3
......@@ -9625,6 +10377,8 @@ snapshots:
dependencies:
mime-db: 1.52.0
mime@1.4.1: {}
mime@1.6.0: {}
mime@2.6.0: {}
......@@ -9659,6 +10413,13 @@ snapshots:
dependencies:
yallist: 4.0.0
mitt@1.1.2: {}
mixin-deep@1.3.2:
dependencies:
for-in: 1.0.2
is-extendable: 1.0.1
mkdirp@0.5.6:
dependencies:
minimist: 1.2.8
......@@ -9698,6 +10459,22 @@ snapshots:
nanoid@3.3.11: {}
nanomatch@1.2.13:
dependencies:
arr-diff: 4.0.0
array-unique: 0.3.2
define-property: 2.0.2
extend-shallow: 3.0.2
fragment-cache: 0.2.1
is-windows: 1.0.2
kind-of: 6.0.3
object.pick: 1.3.0
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
negotiator@0.6.3: {}
negotiator@0.6.4: {}
......@@ -9706,6 +10483,10 @@ snapshots:
nice-try@1.0.5: {}
no-case@2.3.2:
dependencies:
lower-case: 1.1.4
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
......@@ -9813,7 +10594,6 @@ snapshots:
nth-check@1.0.2:
dependencies:
boolbase: 1.0.0
optional: true
nth-check@2.1.1:
dependencies:
......@@ -9827,6 +10607,12 @@ snapshots:
object-assign@4.1.1: {}
object-copy@0.1.0:
dependencies:
copy-descriptor: 0.1.1
define-property: 0.2.5
kind-of: 3.2.2
object-inspect@1.13.4: {}
object-is@1.1.6:
......@@ -9836,6 +10622,10 @@ snapshots:
object-keys@1.1.1: {}
object-visit@1.0.1:
dependencies:
isobject: 3.0.1
object.assign@4.1.7:
dependencies:
call-bind: 1.0.8
......@@ -9854,7 +10644,10 @@ snapshots:
es-object-atoms: 1.1.1
gopd: 1.2.0
safe-array-concat: 1.1.3
optional: true
object.pick@1.3.0:
dependencies:
isobject: 3.0.1
object.values@1.2.1:
dependencies:
......@@ -9862,10 +10655,13 @@ snapshots:
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
optional: true
obuf@1.1.2: {}
on-finished@2.3.0:
dependencies:
ee-first: 1.1.1
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
......@@ -9947,7 +10743,6 @@ snapshots:
get-intrinsic: 1.3.0
object-keys: 1.1.1
safe-push-apply: 1.0.0
optional: true
p-cancelable@0.3.0:
optional: true
......@@ -10010,6 +10805,10 @@ snapshots:
p-try@2.2.0: {}
param-case@2.1.1:
dependencies:
no-case: 2.3.2
param-case@3.0.4:
dependencies:
dot-case: 3.0.4
......@@ -10050,6 +10849,8 @@ snapshots:
no-case: 3.0.4
tslib: 2.8.1
pascalcase@0.1.1: {}
path-exists@2.1.0:
dependencies:
pinkie-promise: 2.0.1
......@@ -10133,8 +10934,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
possible-typed-array-names@1.1.0:
optional: true
posix-character-classes@0.1.1: {}
possible-typed-array-names@1.1.0: {}
postcss-calc@8.2.4(postcss@8.5.3):
dependencies:
......@@ -10295,6 +11097,10 @@ snapshots:
dependencies:
postcss: 5.2.18
postcss-prefix-selector@1.16.1(postcss@5.2.18):
dependencies:
postcss: 5.2.18
postcss-reduce-initial@5.1.2(postcss@8.5.3):
dependencies:
browserslist: 4.24.5
......@@ -10347,6 +11153,29 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
posthtml-parser@0.2.1:
dependencies:
htmlparser2: 3.10.1
isobject: 2.1.0
posthtml-rename-id@1.0.12:
dependencies:
escape-string-regexp: 1.0.5
posthtml-render@1.4.0: {}
posthtml-svg-mode@1.0.3:
dependencies:
merge-options: 1.0.1
posthtml: 0.9.2
posthtml-parser: 0.2.1
posthtml-render: 1.4.0
posthtml@0.9.2:
dependencies:
posthtml-parser: 0.2.1
posthtml-render: 1.4.0
prepend-http@1.0.4:
optional: true
......@@ -10355,6 +11184,11 @@ snapshots:
prettier@2.8.8: {}
pretty-error@2.1.2:
dependencies:
lodash: 4.17.21
renderkid: 2.0.7
pretty-error@4.0.0:
dependencies:
lodash: 4.17.21
......@@ -10395,8 +11229,7 @@ snapshots:
punycode@2.3.1: {}
q@1.5.1:
optional: true
q@1.5.1: {}
qrcode.vue@1.7.0(vue@2.7.16):
dependencies:
......@@ -10413,6 +11246,11 @@ snapshots:
qs@6.5.3:
optional: true
query-string@4.3.4:
dependencies:
object-assign: 4.1.1
strict-uri-encode: 1.1.0
query-string@5.1.1:
dependencies:
decode-uri-component: 0.2.2
......@@ -10527,7 +11365,6 @@ snapshots:
get-intrinsic: 1.3.0
get-proto: 1.0.1
which-builtin-type: 1.2.1
optional: true
regenerate-unicode-properties@10.2.0:
dependencies:
......@@ -10537,6 +11374,11 @@ snapshots:
regenerator-runtime@0.11.1: {}
regex-not@1.0.2:
dependencies:
extend-shallow: 3.0.2
safe-regex: 1.1.0
regexp.prototype.flags@1.5.4:
dependencies:
call-bind: 1.0.8
......@@ -10563,6 +11405,14 @@ snapshots:
relateurl@0.2.7: {}
renderkid@2.0.7:
dependencies:
css-select: 4.3.0
dom-converter: 0.2.0
htmlparser2: 6.1.0
lodash: 4.17.21
strip-ansi: 3.0.1
renderkid@3.0.0:
dependencies:
css-select: 4.3.0
......@@ -10571,6 +11421,10 @@ snapshots:
lodash: 4.17.21
strip-ansi: 6.0.1
repeat-element@1.1.4: {}
repeat-string@1.6.1: {}
repeating@2.0.1:
dependencies:
is-finite: 1.1.0
......@@ -10615,6 +11469,8 @@ snapshots:
resolve-from@4.0.0: {}
resolve-url@0.2.1: {}
resolve@1.22.10:
dependencies:
is-core-module: 2.16.1
......@@ -10636,6 +11492,8 @@ snapshots:
onetime: 5.1.2
signal-exit: 3.0.7
ret@0.1.15: {}
retry@0.13.1: {}
reusify@1.1.0: {}
......@@ -10660,7 +11518,6 @@ snapshots:
get-intrinsic: 1.3.0
has-symbols: 1.1.0
isarray: 2.0.5
optional: true
safe-buffer@5.1.2: {}
......@@ -10670,14 +11527,16 @@ snapshots:
dependencies:
es-errors: 1.3.0
isarray: 2.0.5
optional: true
safe-regex-test@1.1.0:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
is-regex: 1.2.1
optional: true
safe-regex@1.1.0:
dependencies:
ret: 0.1.15
safer-buffer@2.1.2: {}
......@@ -10705,8 +11564,7 @@ snapshots:
optionalDependencies:
'@parcel/watcher': 2.5.1
sax@1.2.4:
optional: true
sax@1.2.4: {}
sax@1.4.1: {}
......@@ -10729,6 +11587,14 @@ snapshots:
ajv-formats: 2.1.1(ajv@8.17.1)
ajv-keywords: 5.1.0(ajv@8.17.1)
script-ext-html-webpack-plugin@2.1.3(html-webpack-plugin@3.2.0(webpack@5.99.8))(webpack@5.99.8):
dependencies:
debug: 4.4.1
html-webpack-plugin: 3.2.0(webpack@5.99.8)
webpack: 5.99.8
transitivePeerDependencies:
- supports-color
scss-tokenizer@0.2.3:
dependencies:
js-base64: 2.6.4
......@@ -10770,6 +11636,24 @@ snapshots:
semver@7.7.2: {}
send@0.16.2:
dependencies:
debug: 2.6.9
depd: 1.1.2
destroy: 1.0.4
encodeurl: 1.0.2
escape-html: 1.0.3
etag: 1.8.1
fresh: 0.5.2
http-errors: 1.6.3
mime: 1.4.1
ms: 2.0.0
on-finished: 2.3.0
range-parser: 1.2.1
statuses: 1.4.0
transitivePeerDependencies:
- supports-color
send@0.19.0:
dependencies:
debug: 2.6.9
......@@ -10804,6 +11688,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
serve-static@1.13.2:
dependencies:
encodeurl: 1.0.2
escape-html: 1.0.3
parseurl: 1.3.3
send: 0.16.2
transitivePeerDependencies:
- supports-color
serve-static@1.16.2:
dependencies:
encodeurl: 2.0.0
......@@ -10837,7 +11730,13 @@ snapshots:
dunder-proto: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
optional: true
set-value@2.0.1:
dependencies:
extend-shallow: 2.0.1
is-extendable: 0.1.1
is-plain-object: 2.0.4
split-string: 3.1.0
setprototypeof@1.1.0: {}
......@@ -10899,6 +11798,29 @@ snapshots:
slash@3.0.0: {}
snapdragon-node@2.1.1:
dependencies:
define-property: 1.0.0
isobject: 3.0.1
snapdragon-util: 3.0.1
snapdragon-util@3.0.1:
dependencies:
kind-of: 3.2.2
snapdragon@0.8.2:
dependencies:
base: 0.11.2
debug: 2.6.9
define-property: 0.2.5
extend-shallow: 2.0.1
map-cache: 0.2.2
source-map: 0.5.7
source-map-resolve: 0.5.3
use: 3.1.1
transitivePeerDependencies:
- supports-color
sockjs@0.3.24:
dependencies:
faye-websocket: 0.11.4
......@@ -10924,11 +11846,21 @@ snapshots:
source-map-js@1.2.1: {}
source-map-resolve@0.5.3:
dependencies:
atob: 2.1.2
decode-uri-component: 0.2.2
resolve-url: 0.2.1
source-map-url: 0.4.1
urix: 0.1.0
source-map-support@0.5.21:
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
source-map-url@0.4.1: {}
source-map@0.4.4:
dependencies:
amdefine: 1.0.1
......@@ -10973,8 +11905,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
sprintf-js@1.0.3:
optional: true
split-string@3.1.0:
dependencies:
extend-shallow: 3.0.2
sprintf-js@1.0.3: {}
squeak@1.3.0:
dependencies:
......@@ -11004,6 +11939,13 @@ snapshots:
stackframe@1.3.4: {}
static-extend@0.1.2:
dependencies:
define-property: 0.2.5
object-copy: 0.1.0
statuses@1.4.0: {}
statuses@1.5.0: {}
statuses@2.0.1: {}
......@@ -11023,8 +11965,7 @@ snapshots:
stream-wormhole@1.1.0: {}
strict-uri-encode@1.1.0:
optional: true
strict-uri-encode@1.1.0: {}
string-width@1.0.2:
dependencies:
......@@ -11060,7 +12001,6 @@ snapshots:
es-abstract: 1.23.9
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
optional: true
string.prototype.trimend@1.0.9:
dependencies:
......@@ -11068,14 +12008,12 @@ snapshots:
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
optional: true
string.prototype.trimstart@1.0.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-object-atoms: 1.1.1
optional: true
string_decoder@1.1.1:
dependencies:
......@@ -11154,8 +12092,64 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
svg-baker-runtime@1.4.7:
dependencies:
deepmerge: 1.3.2
mitt: 1.1.2
svg-baker: 1.7.0
transitivePeerDependencies:
- supports-color
svg-baker@1.7.0:
dependencies:
bluebird: 3.7.2
clone: 2.1.2
he: 1.2.0
image-size: 0.5.5
loader-utils: 1.4.2
merge-options: 1.0.1
micromatch: 3.1.0
postcss: 5.2.18
postcss-prefix-selector: 1.16.1(postcss@5.2.18)
posthtml-rename-id: 1.0.12
posthtml-svg-mode: 1.0.3
query-string: 4.3.4
traverse: 0.6.11
transitivePeerDependencies:
- supports-color
svg-sprite-loader@6.0.9:
dependencies:
bluebird: 3.7.2
deepmerge: 1.3.2
domready: 1.0.8
escape-string-regexp: 1.0.5
loader-utils: 1.4.2
svg-baker: 1.7.0
svg-baker-runtime: 1.4.7
url-slug: 2.0.0
transitivePeerDependencies:
- supports-color
svg-tags@1.0.0: {}
svgo@1.2.2:
dependencies:
chalk: 2.4.2
coa: 2.0.2
css-select: 2.1.0
css-select-base-adapter: 0.1.1
css-tree: 1.0.0-alpha.28
css-url-regex: 1.1.0
csso: 3.5.1
js-yaml: 3.14.1
mkdirp: 0.5.6
object.values: 1.2.1
sax: 1.2.4
stable: 0.1.8
unquote: 1.1.1
util.promisify: 1.0.1
svgo@1.3.2:
dependencies:
chalk: 2.4.2
......@@ -11183,6 +12177,8 @@ snapshots:
picocolors: 1.1.1
stable: 0.1.8
tapable@1.1.3: {}
tapable@2.2.1: {}
tar-stream@1.6.2:
......@@ -11267,12 +12263,30 @@ snapshots:
to-fast-properties@2.0.0: {}
to-object-path@0.3.0:
dependencies:
kind-of: 3.2.2
to-regex-range@2.1.1:
dependencies:
is-number: 3.0.0
repeat-string: 1.6.1
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
to-regex@3.0.2:
dependencies:
define-property: 2.0.2
extend-shallow: 3.0.2
regex-not: 1.0.2
safe-regex: 1.1.0
toidentifier@1.0.1: {}
toposort@1.0.7: {}
totalist@3.0.1: {}
tough-cookie@2.5.0:
......@@ -11283,6 +12297,12 @@ snapshots:
tr46@0.0.3: {}
traverse@0.6.11:
dependencies:
gopd: 1.2.0
typedarray.prototype.slice: 1.0.5
which-typed-array: 1.1.19
trim-newlines@1.0.0:
optional: true
......@@ -11323,7 +12343,6 @@ snapshots:
call-bound: 1.0.4
es-errors: 1.3.0
is-typed-array: 1.1.15
optional: true
typed-array-byte-length@1.0.3:
dependencies:
......@@ -11332,7 +12351,6 @@ snapshots:
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
optional: true
typed-array-byte-offset@1.0.4:
dependencies:
......@@ -11343,7 +12361,6 @@ snapshots:
has-proto: 1.2.0
is-typed-array: 1.1.15
reflect.getprototypeof: 1.0.10
optional: true
typed-array-length@1.0.7:
dependencies:
......@@ -11353,7 +12370,22 @@ snapshots:
is-typed-array: 1.1.15
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
optional: true
typedarray.prototype.slice@1.0.5:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
get-proto: 1.0.1
math-intrinsics: 1.1.0
typed-array-buffer: 1.0.3
typed-array-byte-offset: 1.0.4
uglify-js@3.4.10:
dependencies:
commander: 2.19.0
source-map: 0.6.1
unbox-primitive@1.1.0:
dependencies:
......@@ -11361,7 +12393,6 @@ snapshots:
has-bigints: 1.1.0
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
optional: true
unbzip2-stream@1.4.3:
dependencies:
......@@ -11386,12 +12417,25 @@ snapshots:
unicode-property-aliases-ecmascript@2.1.0: {}
unidecode@0.1.8: {}
union-value@1.0.1:
dependencies:
arr-union: 3.1.0
get-value: 2.0.6
is-extendable: 0.1.1
set-value: 2.0.1
universalify@2.0.1: {}
unpipe@1.0.0: {}
unquote@1.1.1:
optional: true
unquote@1.1.1: {}
unset-value@1.0.0:
dependencies:
has-value: 0.3.1
isobject: 3.0.1
update-browserslist-db@1.1.3(browserslist@4.24.5):
dependencies:
......@@ -11399,10 +12443,14 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
upper-case@1.1.3: {}
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
urix@0.1.0: {}
url-parse-lax@1.0.0:
dependencies:
prepend-http: 1.0.4
......@@ -11413,6 +12461,10 @@ snapshots:
prepend-http: 2.0.0
optional: true
url-slug@2.0.0:
dependencies:
unidecode: 0.1.8
url-to-options@1.0.1:
optional: true
......@@ -11431,15 +12483,21 @@ snapshots:
statuses: 1.5.0
utility: 1.18.0
use@3.1.1: {}
util-deprecate@1.0.2: {}
util.promisify@1.0.0:
dependencies:
define-properties: 1.2.1
object.getownpropertydescriptors: 2.1.8
util.promisify@1.0.1:
dependencies:
define-properties: 1.2.1
es-abstract: 1.23.9
has-symbols: 1.1.0
object.getownpropertydescriptors: 2.1.8
optional: true
utila@0.4.0: {}
......@@ -11746,7 +12804,6 @@ snapshots:
is-number-object: 1.1.1
is-string: 1.1.1
is-symbol: 1.1.1
optional: true
which-builtin-type@1.2.1:
dependencies:
......@@ -11763,7 +12820,6 @@ snapshots:
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
which-typed-array: 1.1.19
optional: true
which-collection@1.0.2:
dependencies:
......@@ -11771,7 +12827,6 @@ snapshots:
is-set: 2.0.3
is-weakmap: 2.0.2
is-weakset: 2.0.4
optional: true
which-module@2.0.1:
optional: true
......@@ -11785,7 +12840,6 @@ snapshots:
get-proto: 1.0.1
gopd: 1.2.0
has-tostringtag: 1.0.2
optional: true
which@1.3.1:
dependencies:
......@@ -11797,7 +12851,7 @@ snapshots:
wide-align@1.1.5:
dependencies:
string-width: 1.0.2
string-width: 4.2.3
optional: true
wildcard@2.0.1: {}
......
No preview for this file type
......@@ -101,7 +101,7 @@ export default {
},
{
label: '微言助手',
path: '/summaryList'
path: '/aiChat'
},
// {
// label: '通讯录',
......
import request from '@/utils/request'
// 清除上下文
export function corp_beta_question_session_clearTag(data) {
return request({
url: '/sidebar/corp_beta_question_session/clearTag',
method: 'post',
data
})
}
// 侧边栏-重试
export function retry(data) {
return request({
url: '/sidebar/corp_beta_question_log/retry',
method: 'post',
data
})
}
// 聊天记录
export function corp_beta_question_log_index(data) {
return request({
url: '/sidebar/corp_beta_question_log/index',
method: 'post',
data
})
}
// 发送欢迎语
export function welcomemsg(data) {
return request({
url: '/sidebar/corp_beta_question_session/welcome',
method: 'post',
data
})
}
// 配置-聊天
export function corp_beta_question_log_chat(data) {
return request({
url: '/sidebar/corp_beta_question_log/chat',
method: 'post',
data
})
}
// 配置-列表
export function corp_beta_question_config(data) {
return request({
url: '/sidebar/corp_beta_question_config/index',
method: 'post',
data
})
}
// 问答模块
export function getAiResponse(data) {
return request({
url: '/sidebar/corp_beta_question_log/chat',
method: 'post',
data
})
}
// 赞同模块
export function answerComment(data) {
return request({
url: '/sidebar/corp_beta_question_log/answerComment',
method: 'post',
data
})
}
......@@ -210,24 +210,6 @@ export function logClickTime(data) {
})
}
// 大模型 ai
export function getCorpBetaConfig(data) {
return request({
url: '/admin/corp_beta_config/getCorpBetaConfig',
method: 'post',
data
})
}
// 问答模块
export function getAiResponse(data) {
return request({
url: returnApi('/corp_beta_question_log/getAiResponse'),
method: 'post',
data
})
}
// 问答模块
export function Aihistory(data) {
return request({
......@@ -236,31 +218,8 @@ export function Aihistory(data) {
data
})
}
// 赞同模块
export function answerComment(data) {
return request({
url: returnApi('/corp_beta_question_log/answerComment'),
method: 'post',
data
})
}
// 复制次数统计
export function calAnswerClickTime(data) {
return request({
url: returnApi('/corp_beta_question_log/calAnswerClickTime'),
method: 'post',
data
})
}
// 获取来源
export function getQuoteData(data) {
return request({
url: returnApi('/corp_beta_question_log/getQuoteData'),
method: 'post',
data
})
}
// 同步知识库
export function asyncKnowledge(data) {
return request({
......@@ -269,7 +228,6 @@ export function asyncKnowledge(data) {
data
})
}
/* -------------------- 机器人知识库 ----------------------- */
// 新增机器人知识库任务
......
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><defs><linearGradient id="a" y2="75.742%" x2="89.14%" y1="0%" x1="17.97%"><stop offset="0%" stop-color="#00EEAC"/><stop offset="53.553%" stop-color="#A9DD00"/><stop offset="100%" stop-color="#F7B500"/></linearGradient></defs><path fill="url(#a)" d="M10.673 5.201a2.604 2.604 0 0 1-2.6-2.6C8.072 1.167 9.238 0 10.672 0c1.434 0 2.6 1.167 2.6 2.6 0 1.434-1.166 2.601-2.6 2.601ZM5.137 7.266A2.378 2.378 0 0 1 2.76 4.89a2.378 2.378 0 0 1 2.376-2.376A2.378 2.378 0 0 1 7.512 4.89a2.378 2.378 0 0 1-2.375 2.376ZM2.784 12.64A2.097 2.097 0 0 1 .69 10.545 2.097 2.097 0 0 1 2.784 8.45a2.097 2.097 0 0 1 2.094 2.095 2.097 2.097 0 0 1-2.094 2.095Zm2.353 5.324a1.778 1.778 0 0 1-1.776-1.776 1.779 1.779 0 0 1 1.776-1.776c.98.001 1.774.796 1.776 1.776 0 .98-.797 1.776-1.776 1.776ZM10.673 20a1.553 1.553 0 0 1-1.552-1.552c0-.856.697-1.551 1.552-1.551.857 0 1.55.695 1.551 1.551 0 .856-.695 1.552-1.551 1.552Zm5.62-2.623a1.254 1.254 0 0 1-1.252-1.252c0-.692.56-1.252 1.252-1.253a1.254 1.254 0 0 1 0 2.505Zm2.302-5.795a1.029 1.029 0 0 1 0-2.055c.567 0 1.027.46 1.028 1.027a1.03 1.03 0 0 1-1.028 1.028Zm-3.1-6.615a.797.797 0 1 0 1.596 0 .797.797 0 0 0-1.595 0Z" fill-rule="nonzero"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>发送备份</title>
<defs>
<linearGradient x1="14.2586009%" y1="0%" x2="93.6750771%" y2="75.7420422%" id="linearGradient-1">
<stop stop-color="#00EEAC" offset="0%"></stop>
<stop stop-color="#A9DD00" offset="53.5526729%"></stop>
<stop stop-color="#F7B500" offset="100%"></stop>
</linearGradient>
</defs>
<g id="游戏" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="游戏-快捷回复AI" transform="translate(-1727, -981)" fill-rule="nonzero">
<g id="编组-4备份-2" transform="translate(1378, 169.68)">
<g id="4.数据展示/10.Popover气泡卡片/⬅️右上备份-16" transform="translate(0, 798.32)">
<g id="发送备份" transform="translate(349, 13)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="20" height="20"></rect>
<polygon id="路径" fill="url(#linearGradient-1)" points="0 20 2.08 10.74 13.58 10.02 2.08 9.24 0 0 20 10"></polygon>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?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(-1093.000000, -386.000000)" fill-rule="nonzero">
<g id="编组-6" transform="translate(1086.000000, 379.000000)">
<g id="复制" transform="translate(6.000000, 6.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="20" height="20"></rect>
<path d="M13,4.375 L4.00976562,4.375 C2.80273438,4.375 1.82226562,5.35546875 1.82226562,6.5625 L1.82226562,16.5625 C1.82226562,17.7695312 2.80273438,18.75 4.00976562,18.75 L13,18.75 C14.2070312,18.75 15.1875,17.7695312 15.1875,16.5625 L15.1875,6.5625 C15.1875,5.35546875 14.2070312,4.375 13,4.375 Z M13.9375,16.5625 C13.9375,17.0800781 13.5175781,17.5 13,17.5 L4.00976562,17.5 C3.4921875,17.5 3.07226562,17.0800781 3.07226562,16.5625 L3.07226562,6.5625 C3.07226562,6.04492188 3.4921875,5.625 4.00976562,5.625 L13,5.625 C13.5175781,5.625 13.9375,6.04492188 13.9375,6.5625 L13.9375,16.5625 Z M16.0292969,1.25 L5.88476562,1.25 C4.67773438,1.25 3.69726562,2.23046875 3.69726562,3.4375 L4.94726562,3.4375 C4.94726562,2.91992188 5.3671875,2.5 5.88476562,2.5 L16.0292969,2.5 C16.546875,2.5 16.9667969,2.91992188 16.9667969,3.4375 L16.9667969,14.6875 C16.9667969,15.2050781 16.546875,15.625 16.0292969,15.625 L16.0292969,16.875 C17.2363281,16.875 18.2167969,15.8945312 18.2167969,14.6875 L18.2167969,3.4375 C18.2167969,2.23046875 17.2363281,1.25 16.0292969,1.25 Z M4.75585938,7.8125 L12.2558594,7.8125 L12.2558594,9.0625 L4.75585938,9.0625 L4.75585938,7.8125 Z M4.75585938,10.9375 L12.2558594,10.9375 L12.2558594,12.1875 L4.75585938,12.1875 L4.75585938,10.9375 Z M4.75585937,14.0625 L9.57617188,14.0625 L9.57617188,15.3125 L4.75585937,15.3125 L4.75585937,14.0625 Z" id="形状" fill="#8CA4BA"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" 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="游戏-快捷回复AI" transform="translate(-1476, -617)" fill-rule="nonzero">
<g id="编组-4备份-2" transform="translate(1378, 169.68)">
<g id="不点赞" transform="translate(106, 455.32) scale(-1, 1) rotate(180) translate(-106, -455.32)translate(98, 447.32)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
<path d="M13.395,5.3905 L9.257,5.3905 C9.4535,4.699 9.553,4.0845 9.553,3.5435 C9.553,2.316 8.431,1.1405 7.357,1.2965 C6.41,1.434 5.958,2.2325 5.958,3.258 L5.958,4.1845 C5.958,5.373 5.0485,6.3865 3.892,6.498 L2.0525,6.495 C1.4712203,6.495 1,6.9662203 1,7.5475 L1,13.625 C1,14.2065 1.471,14.6775 2.0525,14.6775 L12.243,14.6775 C13.0141535,14.6775 13.6763396,14.1291539 13.82,13.3715 L14.972,7.294 C15.0608892,6.82439182 14.9358631,6.3395998 14.6309458,5.97155283 C14.3260285,5.60350586 13.8729468,5.39049941 13.395,5.3905 Z M2,13.625 L2,7.5475 C2,7.5185 2.0235,7.495 2.0525,7.495 L3.25,7.495 L3.25,13.6775 L2.0525,13.6775 C2.02350505,13.6775 2,13.6539949 2,13.625 L2,13.625 Z M13.9895,7.108 L12.8375,13.1855 C12.7832202,13.4709991 12.5336132,13.6775 12.243,13.6775 L4.25,13.6775 L4.25,7.451 C5.8188449,7.15150285 6.95470437,5.78117313 6.958,4.184 L6.958,3.258 C6.958,2.671 7.1465,2.3375 7.5005,2.2865 C7.923,2.225 8.553,2.8855 8.553,3.544 C8.553,4.127 8.4045,4.8565 8.102,5.727 C8.04891415,5.87989332 8.07311785,6.0490253 8.16695458,6.1808932 C8.2607913,6.31276111 8.41265293,6.39105216 8.5745,6.391 L13.395,6.391 C13.5750607,6.3910127 13.7457587,6.47122841 13.8606881,6.60983965 C13.9756175,6.74845089 14.0228335,6.93105165 13.9895,7.108 Z" id="形状" fill="#8CA4BA"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" 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="游戏-快捷回复AI" transform="translate(-1528, -617)" fill-rule="nonzero">
<g id="编组-4备份-2" transform="translate(1378, 169.68)">
<g id="不够好" transform="translate(158, 455.32) scale(-1, 1) rotate(180) translate(-158, -455.32)translate(150, 447.32)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
<path d="M1,7.5475 L1,13.625 C1,14.2065 1.471,14.6775 2.0525,14.6775 L3,14.6775 L3,6.505 L2.0525,6.495 C1.4712203,6.495 1,6.9662203 1,7.5475 Z M13.395,5.3905 L9.2105,5.417 C9.407,4.7255 9.5065,4.111 9.5065,3.57 C9.5065,2.3425 8.431,1.1405 7.357,1.2965 C6.41,1.434 6.306,2.2525 6.306,3.278 L6.306,4.204 C6.306,5.3925 5.3085,6.405 4.152,6.5165 L4,6.515 L4,14.6775 L12.243,14.6775 C13.0141535,14.6775 13.6763396,14.1291539 13.82,13.3715 L14.972,7.294 C15.0608892,6.82439182 14.9358631,6.3395998 14.6309458,5.97155283 C14.3260285,5.60350586 13.8729468,5.39049941 13.395,5.3905 L13.395,5.3905 Z" id="形状" fill="#8CA4BA"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>点赞</title>
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
<path d="M13.395,5.3905 L9.257,5.3905 C9.4535,4.699 9.553,4.0845 9.553,3.5435 C9.553,2.316 8.431,1.1405 7.357,1.2965 C6.41,1.434 5.958,2.2325 5.958,3.258 L5.958,4.1845 C5.958,5.373 5.0485,6.3865 3.892,6.498 L2.0525,6.495 C1.4712203,6.495 1,6.9662203 1,7.5475 L1,13.625 C1,14.2065 1.471,14.6775 2.0525,14.6775 L12.243,14.6775 C13.0141535,14.6775 13.6763396,14.1291539 13.82,13.3715 L14.972,7.294 C15.0608892,6.82439182 14.9358631,6.3395998 14.6309458,5.97155283 C14.3260285,5.60350586 13.8729468,5.39049941 13.395,5.3905 Z M2,13.625 L2,7.5475 C2,7.5185 2.0235,7.495 2.0525,7.495 L3.25,7.495 L3.25,13.6775 L2.0525,13.6775 C2.02350505,13.6775 2,13.6539949 2,13.625 L2,13.625 Z M13.9895,7.108 L12.8375,13.1855 C12.7832202,13.4709991 12.5336132,13.6775 12.243,13.6775 L4.25,13.6775 L4.25,7.451 C5.8188449,7.15150285 6.95470437,5.78117313 6.958,4.184 L6.958,3.258 C6.958,2.671 7.1465,2.3375 7.5005,2.2865 C7.923,2.225 8.553,2.8855 8.553,3.544 C8.553,4.127 8.4045,4.8565 8.102,5.727 C8.04891415,5.87989332 8.07311785,6.0490253 8.16695458,6.1808932 C8.2607913,6.31276111 8.41265293,6.39105216 8.5745,6.391 L13.395,6.391 C13.5750607,6.3910127 13.7457587,6.47122841 13.8606881,6.60983965 C13.9756175,6.74845089 14.0228335,6.93105165 13.9895,7.108 Z" id="形状" fill="#8CA4BA"></path>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" 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="游戏-快捷回复AI" transform="translate(-1502, -617)" fill-rule="nonzero">
<g id="编组-4备份-2" transform="translate(1378, 169.68)">
<g id="已点赞" transform="translate(124, 447.32)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
<path d="M1,7.5475 L1,13.625 C1,14.2065 1.471,14.6775 2.0525,14.6775 L3,14.6775 L3,6.505 L2.0525,6.495 C1.4712203,6.495 1,6.9662203 1,7.5475 Z M13.395,5.3905 L9.2105,5.417 C9.407,4.7255 9.5065,4.111 9.5065,3.57 C9.5065,2.3425 8.431,1.1405 7.357,1.2965 C6.41,1.434 6.306,2.2525 6.306,3.278 L6.306,4.204 C6.306,5.3925 5.3085,6.405 4.152,6.5165 L4,6.515 L4,14.6775 L12.243,14.6775 C13.0141535,14.6775 13.6763396,14.1291539 13.82,13.3715 L14.972,7.294 C15.0608892,6.82439182 14.9358631,6.3395998 14.6309458,5.97155283 C14.3260285,5.60350586 13.8729468,5.39049941 13.395,5.3905 L13.395,5.3905 Z" id="形状" fill="#8CA4BA"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14px" height="14px" viewBox="0 0 14 14" 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(-1147.000000, -762.000000)" fill-rule="nonzero">
<g id="4.数据展示/10.Popover气泡卡片/上左⬇️" transform="translate(1136.000000, 649.000000)">
<g id="怒" transform="translate(11.000000, 113.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="14" height="14"></rect>
<path d="M12.768,4.83 C12.8986667,5.166 12.9966667,5.51366667 13.062,5.873 C13.1273333,6.23233333 13.16,6.608 13.16,7 C13.16,7.84 12.999,8.63333333 12.677,9.38 C12.355,10.1266667 11.9163333,10.7753333 11.361,11.326 C10.8056667,11.8766667 10.157,12.313 9.415,12.635 C8.673,12.957 7.87733333,13.118 7.028,13.118 C6.188,13.118 5.39466667,12.957 4.648,12.635 C3.90133333,12.313 3.25266667,11.8766667 2.702,11.326 C2.15133333,10.7753333 1.715,10.1266667 1.393,9.38 C1.071,8.63333333 0.91,7.84 0.91,7 C0.91,6.61733333 0.942666667,6.24633333 1.008,5.887 C1.07333333,5.52766667 1.17133333,5.18 1.302,4.844 C1.302,4.77138003 1.80645408,3.67280698 2.058,3.416 C2.618,2.64133333 3.32966667,2.023 4.193,1.561 C5.05633333,1.099 6.00133333,0.868 7.028,0.868 C8.05466667,0.868 8.99733333,1.09666667 9.856,1.554 C10.7146667,2.01133333 11.424,2.62266667 11.984,3.388 C12.1504838,3.56624497 12.768,4.80553547 12.768,4.83 Z" id="形状" fill="#FFD840"></path>
<path d="M3.416,3.752 C3.53733333,4.15333333 3.668,4.51733333 3.808,4.844 C3.92933333,5.124 4.06466667,5.39466667 4.214,5.656 C4.36333333,5.91733333 4.51733333,6.09 4.676,6.174 C4.83466667,6.258 5.00266667,6.26266667 5.18,6.188 C5.35733333,6.11333333 5.52066667,6.01533333 5.67,5.894 C5.838,5.754 6.01066667,5.58133333 6.188,5.376 L3.416,3.752 Z" id="路径" fill="#873618"></path>
<path d="M9.9100167,10.630065 C9.97364586,10.6075526 10.0233561,10.5775361 10.0591476,10.5400154 C10.094939,10.5024948 10.1187999,10.4612221 10.1307304,10.4161973 C10.1426608,10.3711726 10.1486261,10.3298999 10.1486261,10.2923792 C10.1486261,10.2548586 10.1446492,10.2248421 10.1366956,10.2023297 C10.1207883,10.164809 10.1088578,10.1385446 10.1009042,10.1235363 C10.0929505,10.1085281 10.0889737,10.0935198 10.0889737,10.0785116 C9.89808623,9.66578455 9.53818376,9.33185086 9.00926632,9.07671052 C8.48034888,8.82157017 7.85002246,8.694 7.11828706,8.694 C6.75241936,8.694 6.40444736,8.73152064 6.07437106,8.80656192 C5.74429476,8.88160319 5.44802146,8.98478495 5.18555115,9.11610719 C4.92308085,9.24742942 4.69839035,9.40501611 4.51147968,9.58886724 C4.32456901,9.77271837 4.19532226,9.96970172 4.12373945,10.1798173 C4.12373945,10.1873214 4.11976263,10.1948256 4.11180898,10.2023297 C4.09590169,10.2473545 4.09987852,10.3242718 4.12373945,10.4330816 C4.14760039,10.5418915 4.2191832,10.6075526 4.33848789,10.630065 C4.52142174,10.4199494 4.74412382,10.2285941 5.00659413,10.0559992 C5.23724985,9.90591664 5.5235811,9.77084234 5.86558786,9.65077629 C6.20759463,9.53071025 6.61720738,9.47067723 7.09442612,9.47067723 C7.57164486,9.47067723 7.98722285,9.53071025 8.34116008,9.65077629 C8.69509732,9.77084234 8.9873938,9.90591664 9.21804952,10.0559992 C9.48847348,10.2285941 9.7191292,10.4199494 9.9100167,10.630065 L9.9100167,10.630065 Z" id="路径" fill="#873618"></path>
<path d="M9.338,6.174 C9.49666667,6.09 9.65066667,5.91733333 9.8,5.656 C9.94933333,5.39466667 10.0846667,5.124 10.206,4.844 C10.346,4.51733333 10.4766667,4.15333333 10.598,3.752 L7.826,5.376 C8.00333333,5.58133333 8.176,5.754 8.344,5.894 C8.49333333,6.01533333 8.65666667,6.11333333 8.834,6.188 C9.01133333,6.26266667 9.17933333,6.258 9.338,6.174 L9.338,6.174 Z" id="路径" fill="#873618"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>开始</title>
<desc>Start icon</desc>
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<circle cx="8" cy="8" r="6" fill="#00bf8a" opacity="0.8"></circle>
<circle cx="8" cy="8" r="3" fill="#00bf8a"></circle>
</g>
</svg>
\ No newline at end of file
import Vue from 'vue'
import SvgIcon from '@/components/svgIcon'// svg component
// register globally
Vue.component('svg-icon', SvgIcon)
// 只批量导入,交由 svg-sprite-loader 处理生成与注入 sprite
const req = require.context('./icon/svg', false, /\.svg$/)
req.keys().forEach(req)
<template>
<div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
<svg v-else :class="svgClass" aria-hidden="true" :style="{ display: iconClass || svgName ? '' : 'none' }"
v-on="$listeners">
<use :xlink:href="iconName" />
</svg>
</template>
<script lang="jsx">
// doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
import { isExternal } from '@/utils/validate'
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
default: ''
},
svgName: {
type: String,
default: ''
},
className: {
type: String,
default: ''
}
},
computed: {
isExternal() {
return isExternal(this.iconClass)
},
iconName() {
if (this.svgName) {
return `#${this.svgName}`
}
return `#icon-${this.iconClass}`
},
svgClass() {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
},
styleExternalIcon() {
return {
mask: `url(${this.iconClass}) no-repeat 50% 50%`,
'-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
}
}
}
}
</script>
<style scoped>
.svg-icon {
width: 1em;
height: 1em;
/* vertical-align: -0.15em; */
fill: currentColor;
overflow: hidden;
}
.svg-external-icon {
background-color: currentColor;
mask-size: cover !important;
display: inline-block;
}
</style>
......@@ -7,6 +7,8 @@ import _ from 'lodash';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import 'lib-flexible/flexible.js'
// 引入 SVG 图标系统
import '@/assets/index.js'
Vue.use(ElementUI);
// import '@/styles/element-theme-colors.css';
import '@/styles/index.scss';
......
......@@ -94,6 +94,7 @@ const routes = [
name: 'login',
component: () => import('../views/newLogin.vue')
},
]
const router = new VueRouter({
/* 这里用 hash 模式 因为本项目是在企微 服务器下的一个二级页面 如果用 history 模式 需要修改 nginx 配置 在 nginx 配置中 需要添加 location /company_app/ {
......
......@@ -71,11 +71,16 @@ service.interceptors.response.use(
// cancelPending(response.config)
// 如果状态码不是成功,则判断为错误
if (res.status_code !== STATUS_CODE_SUCCESS) {
// 如果请求参数中 有 noMessage 则不显示错误信息
if (response.config.data && JSON.parse(response.config.data) && JSON.parse(response.config.data).noMessage) {
return res
}else{
Message({
message: res.msg || 'Error',
type: 'error',
duration: 2 * 1000
})
}
if (res.status_code === -100) {
// 登录 过期 重新去登录
setTimeout(() => {
......
/**
* @param {string} str
* @returns {Boolean}
*/
export function isExternal(str) {
return /^(https?:|mailto:|tel:)/.test(str)
}
/**
* @param {string} str
* @returns {Boolean}
*/
export function validUsername(str) {
const valid_map = ['admin', 'editor']
return valid_map.indexOf(str.trim()) >= 0
}
/**
* @param {string} url
* @returns {Boolean}
*/
export function validURL(url) {
const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
return reg.test(url)
}
/**
* @param {string} str
* @returns {Boolean}
*/
export function validLowerCase(str) {
const reg = /^[a-z]+$/
return reg.test(str)
}
/**
* @param {string} str
* @returns {Boolean}
*/
export function validUpperCase(str) {
const reg = /^[A-Z]+$/
return reg.test(str)
}
/**
* @param {string} str
* @returns {Boolean}
*/
export function validAlphabets(str) {
const reg = /^[A-Za-z]+$/
return reg.test(str)
}
/**
* @param {string} email
* @returns {Boolean}
*/
export function validEmail(email) {
const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
return reg.test(email)
}
/**
* @param {string} str
* @returns {Boolean}
*/
export function isString(str) {
if (typeof str === 'string' || str instanceof String) {
return true
}
return false
}
/**
* @param {Array} arg
* @returns {Boolean}
*/
export function isArray(arg) {
if (typeof Array.isArray === 'undefined') {
return Object.prototype.toString.call(arg) === '[object Array]'
}
return Array.isArray(arg)
}
......@@ -2,123 +2,56 @@
<div class="terminaListArea" v-scroll="paperScroll">
<div class="addApply rowFlex spaceBetween">
<span></span>
<el-button
type="primary"
size="small"
icon="el-icon-plus"
@click="showaddAreaTransfer = true,areaTransferItem = {}"
>新增转区申请</el-button>
<el-button type="primary" size="small" icon="el-icon-plus"
@click="showaddAreaTransfer = true, areaTransferItem = {}">新增转区申请</el-button>
</div>
<el-form
ref="taskForm"
:model="terminaForm"
class="taskForm"
label-position="top"
label-width="85px"
>
<el-form ref="taskForm" :model="terminaForm" class="taskForm" label-position="top" label-width="85px">
<el-form-item label="审批状态">
<el-select
v-model="terminaForm.approval_status"
style="width:95%;"
clearable
placeholder="请选择审批状态"
@change="filterChange"
>
<el-option
v-for="item in approvalList"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select v-model="terminaForm.approval_status" style="width:95%;" clearable placeholder="请选择审批状态"
@change="filterChange">
<el-option v-for="item in approvalList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<selectDate
:default-value="dateValue"
:type="true"
:no-clearable="true"
style="width: 95%"
@result="createResult"
/>
<selectDate :default-value="dateValue" :type="true" :no-clearable="true" style="width: 95%"
@result="createResult" />
</el-form-item>
</el-form>
<div
class="terminaListAreaList"
>
<div class="terminaListAreaList">
<!-- 举报申请 -->
<div class="scrollMain" v-if="terminaList.length > 0">
<div
v-for="(item, index) in terminaList"
:key="item.id || index"
class="terminaContent"
@click="terminaProcess(item, index)"
>
<div v-for="(item, index) in terminaList" :key="item.id || index" class="terminaContent"
@click="terminaProcess(item, index)">
<div class="terminaItem rowFlex spaceBetween columnCenter">
<i :class=" item.showStep?'el-icon-arrow-down':'el-icon-arrow-right'" class="svgicon"></i>
<i :class="item.showStep ? 'el-icon-arrow-down' : 'el-icon-arrow-right'" class="svgicon"></i>
<div class="terminaItemLeft">
<p><span class="label">新区角色:</span><span class="value">{{ item.role_name }}({{ item.server_name }})</span></p>
<p><span class="label">老区角色:</span><span class="value">{{ item.old_role_name }} ({{ item.old_server_name }}) </span></p>
<p><span class="label">新区角色:</span><span class="value">{{ item.role_name }}({{ item.server_name }})</span>
</p>
<p><span class="label">老区角色:</span><span class="value">{{ item.old_role_name }} ({{ item.old_server_name
}}) </span></p>
<p>
<span class="label">登记时间:</span><span class="value">{{ item.create_time || '' }}</span>
</p>
</div>
<div class="terminaItemRight columnFlex columnCenter">
<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>
<img
v-if="item.approval_status == 1"
:src="shenpi1"
class="icon"
/>
<img
v-else-if="item.approval_status == 2"
:src="shenpi2"
class="icon"
/>
<img
v-else-if="item.approval_status == 3"
:src="shenpi3"
class="icon"
/>
<img
v-else-if="item.approval_status == 4"
:src="shenpi4"
class="icon"
/>
<img
v-else-if="item.approval_status == 5"
:src="shenpi5"
class="icon"
/>
<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>
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" />
</div>
</div>
<!-- 审批进度 -->
<el-collapse-transition>
<div
v-if="item.showStep"
class="terminaProcessList"
>
<el-steps
direction="vertical"
:active="item.current"
finish-status="success"
>
<el-step
v-for="(items, indexs) in item.terminaProcessList"
:key="'trans_item_' + indexs"
:title="items.node_name"
>
<div v-if="item.showStep" class="terminaProcessList">
<el-steps direction="vertical" :active="item.current" finish-status="success">
<el-step v-for="(items, indexs) in item.terminaProcessList" :key="'trans_item_' + indexs"
:title="items.node_name">
<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">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' ? '审批人:' : '登记人:' }}
......@@ -126,32 +59,21 @@
<span class="info-value value-font">
{{ Array.isArray(items.user_name) ? items.user_name[0] : items.user_name }}
</span>
<el-tooltip
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"
>
<el-tooltip 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">
{{ `+${items.user_name.length - 1}` }}
</span>
</el-tooltip>
</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>
<span
class="info-value value-font"
:class="items.current < indexs ? '' : switchStateTag(items.approval_result)"
>
{{ items.current < indexs ? '' : items.approval_result_text }}
</span>
<span class="info-value value-font"
:class="items.current < indexs ? '' : switchStateTag(items.approval_result)">
{{ items.current < indexs ? '' : items.approval_result_text }} </span>
</div>
<div class="follow-item">
<span class="follow-info-label label-font">
......@@ -161,10 +83,8 @@
{{ items.node_sort === '0' ? items.create_time : items.update_time }}
</span>
</div>
<div
v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result === '2'"
class="follow-item"
>
<div v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result === '2'"
class="follow-item">
<span class="follow-info-label label-font">
驳回原因:
</span>
......@@ -173,8 +93,7 @@
</div>
<div
v-if="items.node_sort === item.terminaProcessList[item.terminaProcessList.length - 1].node_sort + '' && items.approval_result === '1' && items.node_sort !== '0'"
class="follow-item-remark follow-item"
>
class="follow-item-remark follow-item">
<span class="follow-info-label label-font">
处理结果:
</span>
......@@ -182,24 +101,17 @@
{{ items.extra_attribution.banned_text }}
</span>
</div>
<div
v-if="items.node_name !== '系统' && items.extra_attribution && items.extra_attribution.remark"
class="info-item-remark"
>
<div v-if="items.node_name !== '系统' && items.extra_attribution && items.extra_attribution.remark"
class="info-item-remark">
<div style="display: flex;">
<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>
点击查看大图
</span>
</div>
<div
class="remark-value"
v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')"
>
<div class="remark-value"
v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')">
</div>
</div>
</div>
......@@ -212,23 +124,14 @@
</div>
<noContent v-else />
</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 v-html="dialogRemake"></div>
</div>
</el-dialog>
<!-- 编辑误操作 -->
<AreaTransferDialog
v-if="showaddAreaTransfer"
:visible.sync="showaddAreaTransfer"
:area-transfer-item="areaTransferItem"
@updateList="updateList"
/>
<AreaTransferDialog v-if="showaddAreaTransfer" :visible.sync="showaddAreaTransfer"
:area-transfer-item="areaTransferItem" @updateList="updateList" />
</div>
</template>
<script>
......@@ -238,11 +141,11 @@ import { removeDp, formatNumber, debounce } from '@/utils/index'
import AreaTransferDialog from './AreaTransferDialog.vue'
import selectDate from '@/components/selectDate.vue'
// 导入审批状态图标
import shenpi1 from '@/assets/icon/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi3 from '@/assets/icon/shenpi3.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
import shenpi1 from '@/assets/icon/svg/shenpi1.svg'
import shenpi2 from '@/assets/icon/svg/shenpi2.svg'
import shenpi3 from '@/assets/icon/svg/shenpi3.svg'
import shenpi4 from '@/assets/icon/svg/shenpi4.svg'
import shenpi5 from '@/assets/icon/svg/shenpi5.svg'
import noContent from '@/components/noContent.vue'
export default {
name: 'AreaTransferApply',
......@@ -291,9 +194,9 @@ export default {
shenpi5
}
},
watch:{
watch: {
accountSelect(newVal, oldVal) {
console.log(newVal,'newVal')
console.log(newVal, 'newVal')
if (newVal && newVal !== '') {
this.pageInfo = {
page: 0,
......@@ -463,9 +366,11 @@ export default {
height: 100%;
overflow: auto;
overflow-x: hidden;
::v-deep .el-form-item__label{
::v-deep .el-form-item__label {
font-weight: 400;
}
.addApply {
margin-top: 15px;
}
......@@ -524,6 +429,7 @@ export default {
.terminaListAreaList {
width: 100%;
.scrollMain {
width: 100%;
height: auto;
......@@ -533,7 +439,8 @@ export default {
width: calc(100% - 20px);
margin-left: 10px;
position: relative;
.svgicon{
.svgicon {
position: absolute;
bottom: 12px;
right: 2px;
......@@ -635,7 +542,7 @@ export default {
width: 1px;
}
::v-deep .el-step > .is-success {
::v-deep .el-step>.is-success {
color: #409EFF;
border-color: #409EFF;
......@@ -644,11 +551,11 @@ export default {
}
}
::v-deep .el-step__main > .is-success {
::v-deep .el-step__main>.is-success {
color: #409EFF;
}
::v-deep .el-step > .is-process {
::v-deep .el-step>.is-process {
color: #409EFF;
border-color: #409EFF;
......@@ -657,7 +564,7 @@ export default {
}
}
::v-deep .el-step__main > .is-process {
::v-deep .el-step__main>.is-process {
color: #409EFF;
}
......@@ -783,7 +690,7 @@ export default {
height: 80px;
}
&:hover > .preview-pic {
&:hover>.preview-pic {
z-index: 100;
}
}
......
......@@ -2,58 +2,26 @@
<div class="terminaListContent" v-scroll="paperScroll">
<div class="addApply rowFlex spaceBetween">
<span></span>
<el-button
type="primary"
icon="el-icon-plus"
size="small"
@click="(showaddAreaTransfer = true,areaTransferItem = {})"
>新增转端申请</el-button>
<el-button type="primary" icon="el-icon-plus" size="small"
@click="(showaddAreaTransfer = true, areaTransferItem = {})">新增转端申请</el-button>
</div>
<el-form
ref="taskForm"
:model="terminaForm"
label-position="top"
class="terminaListForm"
label-width="85px"
>
<el-form ref="taskForm" :model="terminaForm" label-position="top" class="terminaListForm" label-width="85px">
<el-form-item label="审批状态">
<el-select
v-model="terminaForm.approval_status"
style="width:95%;"
clearable
placeholder="请选择审批状态"
@change="filterChange"
>
<el-option
v-for="item in approvalList"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select v-model="terminaForm.approval_status" style="width:95%;" clearable placeholder="请选择审批状态"
@change="filterChange">
<el-option v-for="item in approvalList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<selectDate
:default-value="dateValue"
:type="true"
style="width: 95%"
@result="createResult"
/>
<selectDate :default-value="dateValue" :type="true" style="width: 95%" @result="createResult" />
</el-form-item>
</el-form>
<div
class="terminaListContentList"
>
<div class="terminaListContentList">
<!-- 举报申请 -->
<div v-if="terminaList.length>0" class="scrollMain">
<div
v-for="(item, index) in terminaList"
:key="index"
class="terminaContent"
@click="terminaProcess(item, index)"
>
<div v-if="terminaList.length > 0" class="scrollMain">
<div v-for="(item, index) in terminaList" :key="index" class="terminaContent"
@click="terminaProcess(item, index)">
<div class="terminaItem rowFlex spaceBetween columnCenter">
<div class="terminaItemLeft">
<p><span class="label">角色名称:</span><span class="value">{{ item.role_name }}</span></p>
......@@ -64,7 +32,8 @@
<p>
<span class="label">登记时间:</span><span class="value">{{ item.create_time || '' }}</span>
</p>
<p><span class="label">转端状态:</span><span class="value">{{ item.trans_check_status_text || '-' }}</span></p>
<p><span class="label">转端状态:</span><span class="value">{{ item.trans_check_status_text || '-' }}</span>
</p>
</div>
<!-- 审批进度 -->
<el-collapse-transition>
......@@ -171,11 +140,11 @@ import { removeDp, formatNumber, debounce } from '@/utils/index'
import TerminalTransferDialog from './TerminalTransferDialog.vue'
import selectDate from '@/components/selectDate.vue'
// 导入审批状态图标
import shenpi1 from '@/assets/icon/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
import shenpi6 from '@/assets/icon/shenpi6.svg'
import shenpi1 from '@/assets/icon/svg/shenpi1.svg'
import shenpi2 from '@/assets/icon/svg/shenpi2.svg'
import shenpi4 from '@/assets/icon/svg/shenpi4.svg'
import shenpi5 from '@/assets/icon/svg/shenpi5.svg'
import shenpi6 from '@/assets/icon/svg/shenpi6.svg'
import noContent from '@/components/noContent.vue'
export default {
name: 'terminaTranfer',
......@@ -392,12 +361,14 @@ export default {
.terminaListContent {
width: 100%;
height: 100%;
.TerminaTranferContent{
.TerminaTranferContent {
width: 100%;
height: 100%;
overflow: auto;
overflow-x: hidden;
}
.terminaListForm {
::v-deep .el-form-item__label {
font-weight: 400;
......@@ -462,6 +433,7 @@ export default {
.terminaListContentList {
width: 100%;
.scrollMain {
width: 100%;
height: auto;
......
<template>
<div>
<h1>AI 微言</h1>
<div class="AiLibrary">
<div class="aiLibraryHeader">
<div class="aiLibraryHeader_content columnFlex">
<div class="rowFlex rowCenter spaceBetween">
<p class="aiLibraryHeader_content_tag_title">当前知识库:
<el-popover placement="top" style="width: auto;" title="当前知识库:" trigger="click"
content="这是一段内容">
<div class="aiLibraryHeader_content_tag columnFlex">
<p v-for="(name, index) in knowledge_search_list" style="margin-bottom:10px;"
:key="index">
<el-tag size="mini">{{ name
}}</el-tag>
</p>
</div>
<el-button type="text" size="medium" slot="reference">{{ knowledge_search_list.length
}}</el-button>
</el-popover>
</p>
<el-button type="text" @click="clearContext" class="clearContext">清除上下文</el-button>
</div>
</div>
</div>
<div class="AiChatList">
<!-- v-loadingChat="loading" -->
<div ref="ai-box" v-debounce="paperScroll" class="msg-box columnFlex flex1">
<div>
<div v-if="!isHistory" class="rowFlex rowCenter linkStyle">
<div class="rowFlex columnCenter">
<div class="line"></div>
<svg-icon icon-class="start" style="margin-left:5px;" />
</div>
<el-link type="primary" class="moreLink" @click="Aihistory">加载更多问答记录</el-link>
<div class="rowFlex columnCenter">
<svg-icon icon-class="start" />
<div class="line"></div>
</div>
</div>
<div v-for="(i, index) in recordMessage" :key="i._id" class="item">
<div class="msgBoxItem">
<div v-if="i._id && i.message" class="msg rowFlex columnCenter"
:style="i.send_type == 1 ? 'flex-direction:row-reverse' : ''">
<div class="columnFlex userHead">
<div class="user-head columnFlex">
<el-image class="image" fit="fill"
:src="i.send_type == 2 ? i.from.robot.avatar : i.from.cser.avatar"></el-image>
</div>
</div>
<div class="user-msg columnFlex"
:style="i.send_type == 1 ? 'margin-right:10px;' : 'margin-left:10px;'">
<p class="time" :style="i.send_type == 1 ? 'text-align: right;' : ' '">
{{ i.create_time }}
<el-popover v-if="i._id && i.quote_list.length > 0" placement="top" width="300"
trigger="click">
<div class="comeIngText" style="max-height:500px;overflow:auto">
<div v-for="(item, index) in i.quote_list" :key="index"
style="margin-bottom:15px;">
<span style="color:#000;font-weight:bold">来源{{ index + 1 }}:</span>
<p>问题:{{ item.question }}</p>
<p>答案:{{ item.answer }}</p>
</div>
</div>
<el-button slot="reference" type="text">回答来源</el-button>
</el-popover>
</p>
<!-- 文字 -->
<div class="rowFlex resizeBtn chatItemBox"
:class="i.send_type == 1 ? 'rowEnd' : 'rowStart'">
<!-- 客服发的消息 -->
<div v-if="i.message.msgtype == 'text' && i.message.text && i.message.text.content && !i.loading"
class="chatItem" :style="i.send_type == 1 ? 'float: right;' : ''"
:class="[i.send_type == 1 ? 'right' : 'left chatItemleft chatItemWidth']"
v-html="i.message.text && i.message.text.content ? i.message.text.content.trim() : '不识别的消息类型'">
</div>
<!-- 图片 -->
<div v-else-if="i.message.msgtype == 'image' && i.message.image && i.message.image.picurl && !i.loading"
class="chatItem" :style="i.send_type == 1 ? 'float: right;' : ''"
:class="[i.send_type == 1 ? 'right' : 'left chatItemleft chatItemWidth']">
<el-image class="aiImage" fit="contain" :src="i.message.image.picurl"
@click="watchImage(i)"></el-image>
</div>
<!-- 加在 loading -->
<div v-else-if="i.loading" class="chatItem"
:style="i.send_type == 1 ? 'float: right;' : ''"
:class="[i.send_type == 1 ? 'right' : 'left chatItemWidth']">
<div class="rowFlex columnCenter chatItemLoading">
<svg-icon icon-class="answer" class="loadingRotage" />
<i class="loadingRotage"></i>
<p style="margin-left:5px;">答案整理中....</p>
</div>
</div>
<!-- 复制客户的消息 -->
<div class="likeBtn rowFlex " v-if="i.send_type == 2">
<svg-icon v-if="i.like_status == 0" class="copy likeIcon" icon-class="like"
@click.stop="likeAnswer(i, 1, index)" />
<svg-icon v-else-if="i.like_status == 1" class="copy likeIcon"
icon-class="likeActive" />
<svg-icon v-if="i.like_status == 0" class="copy likeIcon" icon-class="hate"
@click.stop="likeAnswer(i, 2, index)" />
<svg-icon v-else-if="i.like_status == 2" class="copy likeIcon"
icon-class="hateActive" />
<i class="el-icon-refresh-right copy likeIcon"
v-if="i._id && !i.is_msg && !i.loading"
:class="i.is_retry ? 'loadingRotageReply' : ''"
@click.stop="retryAnswer(i, index)"></i>
<svg-icon v-if="i.message.msgtype == 'text' && !i.loading && !i.is_msg"
class="copy copyIcon" :data-clipboard-text="i.message.text.content"
icon-class="fuzhi" @click="copyText(i, index)" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<el-input v-model="aiText" class="aiText" placeholder="请输入你的问题" @keydown.enter.native="submitEntry">
<svg-icon slot="suffix" icon-class="fasong" class="addIcon"
:class="aiText.length == 0 ? 'addIconOpcity' : ''" @click="submitEntry" />
</el-input>
<el-dialog :visible.sync="dialogRemarkVisible" append-to-body title="查看大图" custom-class="remake-dialog">
<div class="remake-box">
<el-image :src="watchImageUrl" style="max-width:600px;" fit="contain">
</el-image>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapState } from 'vuex'
import Clipboard from 'clipboard'
import debounce from '@/directive/debounce/index'
import { corp_beta_question_config, corp_beta_question_session_clearTag, corp_beta_question_log_chat, corp_beta_question_log_index, answerComment, welcomemsg, retry } from '@/api/aiChat'
export default {
name: 'aiArgenChat'
name: 'AiLibrary',
directives: {
debounce,
},
props: {
messageSource: {
type: String,
default: ''
},
},
computed: {
...mapState('game', ['chatUserInfo']),
...mapState('user', ['userInfo', 'userid'])
},
data() {
return {
loading: false,
answerLoading: false,
dialogRemarkVisible: false,
watchImageUrl: '',
session_id: '',
recordMessage: [],
aiText: '',
aiAnswer: {},
isHistory: false,
knowledge_search_list: [],
answerItem: {
session_id: '',
create_time: '',
quote_list: [],
fail_msg: '',
from: {
robot: {
avatar: 'https://companywx-1300623068.cos.ap-nanjing.myqcloud.com/zhangsheng/service/avatars/20240530/YMYZyis7hKP7tDEznsk5dhKzjkDctMa81717052051104.png',
name: '机器人',
robot_id: ''
},
cser: {
avatar: '',
name: '',
zq_user_id: ''
}
},
to: {
robot: {
avatar: 'https://companywx-1300623068.cos.ap-nanjing.myqcloud.com/zhangsheng/service/avatars/20240530/YMYZyis7hKP7tDEznsk5dhKzjkDctMa81717052051104.png',
name: '机器人',
robot_id: ''
},
cser: {
avatar: '',
name: '',
zq_user_id: ''
}
},
message: {
msgtype: 'text',
text: {
content: ''
}
},
send_type: '',
_id: ''
}
}
},
mounted() {
this.getAiArgenInfo()
this.getWelcomeMsg()
console.log(this.chatUserInfo, 'this.chatUserInfo')
this.initanswerItem()
},
methods: {
async getWelcomeMsg() {
const user = {
userid: this.chatUserInfo.userid,
session_type: 3
}
const res = await welcomemsg({ user: user, noMessage: true })
if (res.status_code === 1) {
this.welcomeMsg = res.data.msg
const welcomeItem = JSON.parse(JSON.stringify(this.answerItem))
welcomeItem.send_type = 2
welcomeItem.message.text.content = res.data
welcomeItem.loading = false
welcomeItem.create_time = this.$moment().format('YYYY-MM-DD HH:mm:ss')
welcomeItem._id = this.$moment() + ''
welcomeItem.is_msg = true
welcomeItem.quote_list = []
welcomeItem.is_retry = false
this.recordMessage.unshift(welcomeItem)
}
},
async clearContext() {
this.$confirm('确定清除上下文吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
const res = await corp_beta_question_session_clearTag()
if (res.status_code === 1) {
this.$message.success('清除上下文成功')
}
} catch (error) {
this.$message.error('清除上下文失败')
}
}).catch(() => {
this.$message.info('取消清除上下文')
})
},
async getAiArgenInfo() {
const res = await corp_beta_question_config({ userid: this.chatUserInfo.userid, page: 1, page_size: 10 })
console.log(res, '123')
if (res.status_code === 1 && res?.data?.data?.length > 0) {
this.knowledge_search_list = res?.data?.data[0]?.knowledge_search?.doc_name || []
}
},
initanswerItem() {
this.answerItem.to.cser.avatar = this.chatUserInfo.avatar
this.answerItem.to.cser.name = this.userInfo.cser_name
this.answerItem.to.cser.zq_user_id = this.userInfo.cser_id
this.answerItem.zq_user_id = this.userInfo.cser_id
this.answerItem.from.cser = this.answerItem.to.cser
},
watchImage(i) {
this.watchImageUrl = i.message.image.picurl
this.dialogRemarkVisible = true
},
async retryAnswer(i, index) {
if (i.is_retry) {
return false
}
const data = {
_id: i._id,
user: {
userid: this.chatUserInfo.userid,
session_type: 3
},
question: i.message.question
}
try {
this.$set(this.recordMessage[index], 'is_retry', true)
const res = await retry(data)
if (res.status_code === 1) {
this.$message.success(res.msg)
this.$set(this.recordMessage[index], 'message', res.data.message)
this.$set(this.recordMessage[index], 'is_retry', false)
this.$set(this.recordMessage[index], 'quote_list', res.data.quote_list || [])
this.$set(this.recordMessage[index], 'request_id', res.data.request_id)
this.$set(this.recordMessage[index], 'session_id', this.aiAnswer.session_id)
this.$set(this.recordMessage[index], 'create_time', this.aiAnswer.create_time)
}
} catch (error) {
this.$set(this.recordMessage[index], 'is_retry', false)
}
},
async Aihistory() {
this.recordMessage = []
const data = {
cser_id: this.userInfo.cser_id,
page: 1,
page_size: 20
}
const res = await corp_beta_question_log_index(data)
if (res.status_code === 1 && res?.data?.data?.length > 0) {
res.data.data.forEach(item => {
console.log(item, 'item')
item.to = {
cser: {
avatar: this.chatUserInfo.avatar,
name: this.userInfo.cser_name,
zq_user_id: this.userInfo.cser_id
},
robot: {
avatar: 'https://companywx-1300623068.cos.ap-nanjing.myqcloud.com/zhangsheng/service/avatars/20240530/YMYZyis7hKP7tDEznsk5dhKzjkDctMa81717052051104.png',
name: '机器人',
robot_id: ''
},
}
item.from = item.to
item.loading = false
item.is_retry = false
})
this.isHistory = true
this.recordMessage = res.data.data.reverse().concat(this.recordMessage)
this.scrollBottm()
}
},
// 复制消息
copyText(i, index) {
const clipboard = new Clipboard('.copy')
clipboard.on('success', e => {
this.$message.success('复制成功')
// 释放内存
clipboard.destroy()
})
},
async rqeustSource(i, index) {
},
// 赞
async likeAnswer(i, type, index) {
const data = {
_id: i._id,
like_status: type
}
const res = await answerComment(data)
if (res.status_code === 1) {
this.$message.success(res.msg)
this.$set(this.recordMessage[index], 'like_status', type)
}
},
submitEntry() {
if (this.answerLoading) {
this.$message({
type: 'warning',
message: '请等待AI回复'
})
return
}
if (this.aiText.trim() === '') {
this.$message({
type: 'warning',
message: '请输入问题'
})
return
}
this.requestAiAnswer()
},
async requestAiAnswer() {
this.answerLoading = true
const question = this.aiText
this.addMessageList()
try {
const res = await corp_beta_question_log_chat({
question: question,
user: {
userid: this.chatUserInfo.userid,
session_type: 3
}
})
if (res.status_code === 1) {
this.answerLoading = false
this.aiAnswer = res.data
this.session_id = res.data.session_id
this.$set(this.recordMessage[this.recordMessage.length - 1], 'loading', false)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'quote_list', res.data.quote_list || [])
this.$set(this.recordMessage[this.recordMessage.length - 1], '_id', res.data._id)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'like_status', 0)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'is_used_knowledge', res.data.is_used_knowledge)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'message', res.data.message)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'request_id', res.data.request_id)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'session_id', this.aiAnswer.session_id)
this.$set(this.recordMessage[this.recordMessage.length - 1], 'create_time', this.aiAnswer.create_time)
}
} catch (error) {
this.answerLoading = false
}
},
addMessageList() {
this.answerItem.session_id = this.session_id
this.answerItem.message.text.content = this.aiText
this.answerItem.create_time = this.$moment().format('YYYY-MM-DD HH:mm:ss')
this.answerItem._id = this.$moment() + ''
const questionItem = JSON.parse(JSON.stringify(this.answerItem))
const answerItem = JSON.parse(JSON.stringify(this.answerItem))
questionItem.send_type = 1
answerItem.send_type = 2
answerItem._id = answerItem._id + '123'
answerItem.loading = true
this.recordMessage.push(questionItem)
this.recordMessage.push(answerItem)
this.scrollBottm()
this.aiText = ''
},
scrollBottm() {
this.$nextTick(() => {
const el = this.$refs['ai-box']
if (el) {
el.scrollTo({
top: el.scrollHeight,
behavior: 'smooth'
})
}
})
},
paperScroll() {
// 监听滚动事件
const el = this.$refs['ai-box']
if (el.scrollTop <= 5 && this.isMoreRecord) {
this.messageList()
} else if (!this.isMoreRecord) {
// this.$message({
// type: 'error',
// message: '没有更多数据了'
// })
}
}
}
}
</script>
<style lang="scss" scoped>
.AiLibrary {
width: 100%;
height: 100%;
padding: 10px;
margin-top: -20px;
.AiChatList {
width: 100%;
height: calc(100% - 120px);
overflow: auto;
}
.aiLibraryHeader {
width: 100%;
position: relative;
margin-bottom: 10px;
.aiLibraryHeader_content {
&_tag {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
&_tag_title {
font-size: 16px;
font-weight: 500;
color: #333333;
}
}
}
.msg-box {
height: calc(100% - 10px);
width: 100%;
overflow-y: auto;
overflow-x: hidden;
padding: 10px 0;
.linkStyle {
.line {
width: 70px;
height: 1px;
border: 1px solid #f2f3f5;
}
}
.moreLink {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 12px;
color: #3a88f6;
line-height: 18px;
text-align: left;
font-style: normal;
text-decoration-line: underline;
margin: 0 5px;
}
.msg {
width: 100%;
min-height: 2.5rem;
display: flex;
margin-top: 40px;
justify-content: flex-start !important;
.user-head {
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
.image {
width: 40px;
height: 40px;
border-radius: 40px;
}
}
.chatItemBox {
border-radius: 10px;
position: relative;
width: 100%;
}
.user-msg {
width: 100%;
word-break: break-all;
font-size: 14px;
line-height: 20px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
position: relative;
top: -15px;
.time {
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
}
.chatItem {
display: inline-block;
padding: 5px 10px;
border-radius: 5px;
margin-top: 5px;
font-size: 14px;
}
.chatItemLoading {
width: 100%;
font-size: 14px;
}
.chatItemleft {
padding-bottom: 25px;
}
.left {
background: #ffffff;
border: 1px solid transparent;
border-radius: 6px;
border: 1px solid #00bf8a;
background-origin: border-box;
background-clip: content-box, border-box;
float: left;
}
.right {
background: linear-gradient(135deg,
#6ee7e9 0%,
#9ff2cd 48%,
#e3fdb2 100%,
#e3fdb2 100%);
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
animation: toright 0.5s ease both 1;
min-width: 50px;
display: inline-block;
}
@keyframes toLeft {
0% {
opacity: 0;
transform: translateX(-10px);
}
100% {
opacity: 1;
transform: translateX(0px);
}
}
@keyframes toright {
0% {
opacity: 0;
transform: translateX(10px);
}
100% {
opacity: 1;
transform: translateX(0px);
}
}
}
}
}
.aiImage {
max-width: 200px;
border-radius: 5px;
cursor: pointer;
}
.aiText {
::v-deep .el-input__inner {
width: 100%;
height: 46px !important;
background: #ffffff;
box-shadow: 0px 3px 9px 0px rgba(0, 0, 0, 0.12);
border-radius: 46px;
}
.addIcon {
font-size: 18px;
margin-top: 15px;
margin-right: 10px;
cursor: pointer;
}
.addIconOpcity {
opacity: 0.3;
}
}
.loadingRotage {
cursor: pointer;
font-size: 20px;
animation: rotage linear 1s infinite;
}
.loadingRotageReply {
height: 20px;
animation: rotage linear 0.5s infinite;
}
.copyIcon {
cursor: pointer;
font-size: 18px;
z-index: 10;
margin-right: 5px;
}
.likeIcon {
cursor: pointer;
font-size: 18px;
z-index: 10;
margin-right: 5px;
color: #8CA4BA;
}
.likeBtn {
display: flex;
flex-direction: row-reverse;
position: relative;
top: 15px;
margin-left: 10px;
margin-bottom: 10px;
}
}
@keyframes rotage {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</script>
\ No newline at end of file
</style>
\ No newline at end of file
......@@ -15,11 +15,11 @@
<el-collapse-item v-for="(item, index) in conversionGameList" :key="index" :name="item.game_type">
<template slot="title">
<div class="title-with-icon">
<img v-if="item.game_type == 1" src="@/assets/icon/wxgame.svg" class="game-icon" alt="微信小游戏">
<img v-else-if="item.game_type == 5" src="@/assets/icon/douyin.svg" class="game-icon" alt="抖音小游戏">
<img v-else-if="item.game_type == 3" src="@/assets/icon/Android.svg" class="game-icon" alt="安卓游戏">
<img v-else-if="item.game_type == 4" src="@/assets/icon/IOS.svg" class="game-icon" alt="IOS游戏">
<img v-else-if="item.game_type == 2" src="@/assets/icon/H5.svg" class="game-icon" alt="H5游戏">
<img v-if="item.game_type == 1" src="@/assets/icon/svg/wxgame.svg" class="game-icon" alt="微信小游戏">
<img v-else-if="item.game_type == 5" src="@/assets/icon/svg/douyin.svg" class="game-icon" alt="抖音小游戏">
<img v-else-if="item.game_type == 3" src="@/assets/icon/svg/Android.svg" class="game-icon" alt="安卓游戏">
<img v-else-if="item.game_type == 4" src="@/assets/icon/svg/IOS.svg" class="game-icon" alt="IOS游戏">
<img v-else-if="item.game_type == 2" src="@/assets/icon/svg/H5.svg" class="game-icon" alt="H5游戏">
{{ item.game_text }}
</div>
</template>
......@@ -62,11 +62,11 @@
<el-collapse-item v-for="(item, index) in recallGameList" :key="index" :name="item.game_type">
<template slot="title">
<div class="title-with-icon">
<img v-if="item.game_type == 1" src="@/assets/icon/wxgame.svg" class="game-icon" alt="微信小游戏">
<img v-else-if="item.game_type == 5" src="@/assets/icon/douyin.svg" class="game-icon" alt="抖音小游戏">
<img v-else-if="item.game_type == 3" src="@/assets/icon/Android.svg" class="game-icon" alt="安卓游戏">
<img v-else-if="item.game_type == 4" src="@/assets/icon/IOS.svg" class="game-icon" alt="IOS游戏">
<img v-else-if="item.game_type == 2" src="@/assets/icon/H5.svg" class="game-icon" alt="H5游戏">
<img v-if="item.game_type == 1" src="@/assets/icon/svg/wxgame.svg" class="game-icon" alt="微信小游戏">
<img v-else-if="item.game_type == 5" src="@/assets/icon/svg/douyin.svg" class="game-icon" alt="抖音小游戏">
<img v-else-if="item.game_type == 3" src="@/assets/icon/svg/Android.svg" class="game-icon" alt="安卓游戏">
<img v-else-if="item.game_type == 4" src="@/assets/icon/svg/IOS.svg" class="game-icon" alt="IOS游戏">
<img v-else-if="item.game_type == 2" src="@/assets/icon/svg/H5.svg" class="game-icon" alt="H5游戏">
{{ item.game_text }}
</div>
</template>
......@@ -106,11 +106,17 @@
<el-collapse-item v-for="(item, index) in regGameList" :key="index" :name="item.label">
<template slot="title">
<div class="title-with-icon">
<img v-if="item.label.includes('微信')" src="@/assets/icon/wxgame.svg" class="game-icon" alt="微信小游戏">
<img v-else-if="item.label.includes('抖音')" src="@/assets/icon/douyin.svg" class="game-icon" alt="抖音小游戏">
<img v-else-if="item.label.includes('安卓')" src="@/assets/icon/Android.svg" class="game-icon" alt="安卓游戏">
<img v-else-if="item.label.includes('IOS') || item.label.includes('iOS') || item.label.includes('ios')" src="@/assets/icon/IOS.svg" class="game-icon" alt="IOS游戏">
<img v-else-if="item.label.includes('H5') || item.label.includes('h5')" src="@/assets/icon/H5.svg" class="game-icon" alt="H5游戏">
<img v-if="item.label.includes('微信')" src="@/assets/icon/svg/wxgame.svg" class="game-icon"
alt="微信小游戏">
<img v-else-if="item.label.includes('抖音')" src="@/assets/icon/svg/douyin.svg" class="game-icon"
alt="抖音小游戏">
<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')"
src="@/assets/icon/svg/IOS.svg" class="game-icon" alt="IOS游戏">
<img v-else-if="item.label.includes('H5') || item.label.includes('h5')" src="@/assets/icon/svg/H5.svg"
class="game-icon" alt="H5游戏">
{{ item.label }}
</div>
</template>
......@@ -431,7 +437,7 @@ export default {
channelList(data).then((res) => {
if (res?.data?.data?.data?.length > 0) {
// 只有一个的时候自动发送渠道链接
this.channelInfoList = {
this.channelInfoList = {
game_id: items.game_id || items.id,
use_type: this.activeName,
sendType: this.sendType,
......@@ -528,7 +534,7 @@ export default {
if (item.game_type === 3 && item.children && item.children.length > 0) {
// 过滤掉 game_name 为"破日开天"的数据
const filteredChildren = item.children.filter(child => {
return child.game_name !== '破日开天' && child.game_name !== '英雄霸业' && child.game_id !== '741' && child.game_id !== '912'
return child.game_name !== '破日开天' && child.game_name !== '英雄霸业' && child.game_id !== '741' && child.game_id !== '912'
})
this.$set(this.conversionGameList[index], 'children', filteredChildren)
}
......@@ -1111,6 +1117,7 @@ export default {
height: 100%;
overflow: auto;
margin-top: -10px;
.createChannel {
font-size: 14px;
margin-top: 16px;
......@@ -1126,7 +1133,7 @@ export default {
.title-with-icon {
display: flex;
align-items: center;
.game-icon {
width: 20px;
height: 20px;
......@@ -1149,17 +1156,18 @@ export default {
display: flex;
margin: 12px 16px;
width: calc(100% - 32px);
.radio-group {
width: 100%;
::v-deep .el-radio-group {
width: 100%;
display: flex;
}
::v-deep .el-radio-button {
flex: 1;
&__inner {
width: 100%;
height: 100%;
......@@ -1268,7 +1276,7 @@ export default {
}
/* 当转端按钮处于激活状态时保持自定义样式 */
::v-deep .el-radio-button.is-active{
::v-deep .el-radio-button.is-active {
.el-radio-button__inner {
background: #E8F7FF;
border-color: #3491FA;
......@@ -1277,11 +1285,11 @@ export default {
box-shadow: none;
}
}
/* 统一collapse样式 */
::v-deep .el-collapse-item__header {
background-color: #F7F8FA;
.el-collapse-item__arrow {
color: #3491FA;
}
......
<template>
<div class="vipToolsContent">
<div class="gameList">
<!-- VIP 自助工具 暂时不显示 -->
<div class="gameListItemApp rowFlex columnCenter spaceBetween" v-if="false">
<p class="rowFlex columnCenter">
<img src="@/assets/icon/vipIcon.svg" alt="vipIcon" style="width: 16px;height: 16px;margin-right: 5px;">
VIP自助工具</p>
<el-button
size="mini"
:disabled="accountSelect==''"
@click="sendVipGift"
>发送</el-button>
</div>
<!-- 自助链接(举报、申诉、礼包申请) -->
<div class="gameListItemApp rowFlex columnCenter spaceBetween">
<p class="rowFlex columnCenter">
<i class="el-icon-s-operation" style="font-size:16px;margin-right:5px;"></i>
自助链接(举报、申诉、礼包申请)</p>
<el-button
size="mini"
:disabled="accountSelect==''"
@click="sendReportLink"
>发送</el-button>
</div>
<div
class="rowFlex columnCenter spaceBetween gameCodeTitle"
@click="showGameCode = !showGameCode"
>
<p class="rowFlex columnCenter spaceBetween">
<img src="@/assets/icon/gift.svg" alt="gift" style="width: 16px;height: 16px;margin-right: 5px;margin-top: -2px;">
<span class="giftCode">礼包码</span>
</p>
<i :class="showGameCode?'el-icon-arrow-right':'el-icon-arrow-down'"></i>
</div>
<el-collapse-transition>
<el-collapse
v-show="showGameCode"
v-if="giftCodeGame.length>0"
:disabled="disabled"
class="giftGameCollapse"
>
<el-collapse-item
v-for="(item,index) in giftCodeGame"
:key="index"
:title="item.label"
style="margin-bottom: 10px;"
>
<div v-if="giftCodeGame.length>0">
<div
v-for="(items,indexs) in item.children"
:key="indexs"
class="gameListItemChange"
>
<div class="gameListItemApp gameListItemAppAC" >
<p v-if="items.gift_package_group_name" class="gameName">{{ items.gift_package_group_name }}</p>
<div class="rowFlex columnCenter spaceBetween" style="margin-left: 20px;">
<div class="vipToolsContent">
<div class="gameList">
<!-- VIP 自助工具 暂时不显示 -->
<div class="gameListItemApp rowFlex columnCenter spaceBetween" v-if="false">
<p class="rowFlex columnCenter">
<img src="@/assets/icon/svg/vipIcon.svg" alt="vipIcon" style="width: 16px;height: 16px;margin-right: 5px;">
VIP自助工具
</p>
<el-button size="mini" :disabled="accountSelect == ''" @click="sendVipGift">发送</el-button>
</div>
<!-- 自助链接(举报、申诉、礼包申请) -->
<div class="gameListItemApp rowFlex columnCenter spaceBetween">
<p class="rowFlex columnCenter">
<i class="el-icon-s-operation" style="font-size:16px;margin-right:5px;"></i>
自助链接(举报、申诉、礼包申请)
</p>
<el-button size="mini" :disabled="accountSelect == ''" @click="sendReportLink">发送</el-button>
</div>
<div class="rowFlex columnCenter spaceBetween gameCodeTitle" @click="showGameCode = !showGameCode">
<p class="rowFlex columnCenter spaceBetween">
<img src="@/assets/icon/svg/gift.svg" alt="gift"
style="width: 16px;height: 16px;margin-right: 5px;margin-top: -2px;">
<span class="giftCode">礼包码</span>
</p>
<i :class="showGameCode ? 'el-icon-arrow-right' : 'el-icon-arrow-down'"></i>
</div>
<el-collapse-transition>
<el-collapse v-show="showGameCode" v-if="giftCodeGame.length > 0" :disabled="disabled" class="giftGameCollapse">
<el-collapse-item v-for="(item, index) in giftCodeGame" :key="index" :title="item.label"
style="margin-bottom: 10px;">
<div v-if="giftCodeGame.length > 0">
<div v-for="(items, indexs) in item.children" :key="indexs" class="gameListItemChange">
<div class="gameListItemApp gameListItemAppAC">
<p v-if="items.gift_package_group_name" class="gameName">{{ items.gift_package_group_name }}</p>
<div class="rowFlex columnCenter spaceBetween" style="margin-left: 20px;">
<p class="rowFlex columnCenter spaceBetween">
<el-popover
placement="top"
width="300"
trigger="hover"
>
<el-popover placement="top" width="300" trigger="hover">
<div>{{ items.name }}</div>
<div slot="reference" class="gameName">{{ items.name }}</div>
</el-popover>
<el-popover
placement="top"
trigger="hover"
>
<div
class="contentPopover"
v-html="items.content"
>
<el-popover placement="top" trigger="hover">
<div class="contentPopover" v-html="items.content">
</div>
<el-button
slot="reference"
type="text"
size="medium"
style="margin-right: 10px;"
>礼包内容</el-button>
<el-button slot="reference" type="text" size="medium"
style="margin-right: 10px;">礼包内容</el-button>
</el-popover>
</p>
<el-button
size="mini"
type="primary"
:loading="loading"
@click="sendGameCode(items)"
>发送礼包码</el-button>
<el-button size="mini" type="primary" :loading="loading"
@click="sendGameCode(items)">发送礼包码</el-button>
</div>
</div>
</div>
</div>
<div
v-else
class="rowFlex allCenter"
>
暂无游戏
</div>
</el-collapse-item>
</el-collapse>
</el-collapse-transition>
</div>
</div>
</div>
<div v-else class="rowFlex allCenter">
暂无游戏
</div>
</el-collapse-item>
</el-collapse>
</el-collapse-transition>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
import { passwardEncryption,createVipUrl } from '@/api/game'
import { giftCodeList, sendGiftCode, getZyouAuthLink } from '@/api/works'
export default {
name: 'vipTools',
data() {
return {
disabled: true,
showGameCode: false,
giftCodeGame: [],
loading: false
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
import { passwardEncryption, createVipUrl } from '@/api/game'
import { giftCodeList, sendGiftCode, getZyouAuthLink } from '@/api/works'
export default {
name: 'vipTools',
data() {
return {
disabled: true,
showGameCode: false,
giftCodeGame: [],
loading: false
}
},
mounted() {
this.requestGiftCode()
},
computed: {
...mapState('game', ['accountSelect', 'bindGameUserList', 'chatUserInfo']),
...mapState('user', ['userid']),
},
props: {
},
watch: {
accountSelect(newVal, oldVal) {
if (newVal && newVal !== '' && this.bindGameUserList.length > 0) {
this.disabled = false
} else {
this.disabled = true
}
},
mounted() {
this.requestGiftCode()
},
computed: {
...mapState('game', ['accountSelect', 'bindGameUserList','chatUserInfo']),
...mapState('user', ['userid']),
},
props: {
},
watch: {
accountSelect(newVal, oldVal) {
if (newVal && newVal !== '' && this.bindGameUserList.length > 0) {
this.disabled = false
} else {
this.disabled = true
}
}
},
methods: {
sendVipGift() {
if (this.bindGameUserList.length > 0) {
createVipUrl({ member_id: this.accountSelect }).then(res => {
if (res.data.url && res.data.url != '') {
this.sendChatMessage(res.data.url, 'text')
} else {
this.$message.warning('暂无vip链接')
}
})
} else {
this.$message.warning('请先关联游戏账号')
}
},
methods: {
sendVipGift() {
if (this.bindGameUserList.length > 0) {
createVipUrl({ member_id: this.accountSelect }).then(res => {
if (res.data.url && res.data.url != '') {
this.sendChatMessage(res.data.url,'text')
} else {
this.$message.warning('暂无vip链接')
}
})
} else {
this.$message.warning('请先关联游戏账号')
}
},
sendChatMessage(content,type){
let message = {}
if(type == 'text'){
message = {
msgtype: 'text',
text: {
content: content
},
success: (res) => {
console.log(res, '发送文本成功')
},
fail: (err) => {
console.log(err, '发送文本失败')
}
}
}else if(type == 'link'){
message = {
msgtype: 'news',
news: content,
success: (res) => {
console.log(res, '发送 news 成功')
},
fail: (err) => {
console.log(err, '发送 news 失败')
}
}
}else if(type == 'image'){
message = {
msgtype: 'image',
image: {
mediaid: content
},
success: (res) => {
console.log(res, '发送 image 成功')
},
fail: (err) => {
console.log(err, '发送 image 失败')
}
}
}
console.log(message,'1231')
this.$ww.sendChatMessage(message)
},
// 发送举报申诉自助链接
async sendReportLink() {
const res = await getZyouAuthLink()
if (res.status_code == 1) {
const link = {
title: '服务中心',
imgUrl: 'https://companywxcdn.zwnet.cn/company_wx/service/avatars/20250308/t3zztJ5FMMSnSXRtG3K8X5HaxsZMdk8W1741420608159.jpg',
desc: '点击此处提交申请',
link: res.data.url
sendChatMessage(content, type) {
let message = {}
if (type == 'text') {
message = {
msgtype: 'text',
text: {
content: content
},
success: (res) => {
console.log(res, '发送文本成功')
},
fail: (err) => {
console.log(err, '发送文本失败')
}
this.sendChatMessage(link,'link')
} else {
this.$message.warning('暂无申诉自助链接')
}
},
async requestGiftCode() {
this.giftCodeGame = []
// 1 企微 2 微信
const data = {
userid: this.userid,
user_type:1
} else if (type == 'link') {
message = {
msgtype: 'news',
news: content,
success: (res) => {
console.log(res, '发送 news 成功')
},
fail: (err) => {
console.log(err, '发送 news 失败')
}
}
const res = await giftCodeList(data)
if (res.status_code == 1 && res.data.length > 0) {
// this.giftCodeGame = res.data
this.handleChildren(res.data)
this.giftCodeGame = res.data
} else {
this.giftCodeGame = {
label: '礼包码',
children: []
} else if (type == 'image') {
message = {
msgtype: 'image',
image: {
mediaid: content
},
success: (res) => {
console.log(res, '发送 image 成功')
},
fail: (err) => {
console.log(err, '发送 image 失败')
}
}
},
handleChildren(list) {
list.map(item => {
item.label = item.main_game_name + '/' + item.main_game_id
item.value = item.main_game_id
item.children = item.gift_package_list
item.group_name = item.gift_package_group_name
})
},
// 发送渠道
async sendGameCode(items) {
this.loading = true
const data = {
userid: this.chatUserInfo.userid,
external_userid: this.chatUserInfo.external_userid,
member_id: this.accountSelect,
gift_package_id: items.id,
user_type: 1
}
console.log(message, '1231')
this.$ww.sendChatMessage(message)
},
// 发送举报申诉自助链接
async sendReportLink() {
const res = await getZyouAuthLink()
if (res.status_code == 1) {
const link = {
title: '服务中心',
imgUrl: 'https://companywxcdn.zwnet.cn/company_wx/service/avatars/20250308/t3zztJ5FMMSnSXRtG3K8X5HaxsZMdk8W1741420608159.jpg',
desc: '点击此处提交申请',
link: res.data.url
}
const res = await sendGiftCode(data)
if (res.status_code === 1) {
this.$message.success('发送成功')
this.sendChatMessage(res.data,'text')
} else {
this.$message.error(res.msg || '发送失败')
this.sendChatMessage(link, 'link')
} else {
this.$message.warning('暂无申诉自助链接')
}
},
async requestGiftCode() {
this.giftCodeGame = []
// 1 企微 2 微信
const data = {
userid: this.userid,
user_type: 1
}
const res = await giftCodeList(data)
if (res.status_code == 1 && res.data.length > 0) {
// this.giftCodeGame = res.data
this.handleChildren(res.data)
this.giftCodeGame = res.data
} else {
this.giftCodeGame = {
label: '礼包码',
children: []
}
this.loading = false
},
handleAccount() {
if (this.bindGameUserList.length > 0) {
const account = this.bindGameUserList.find(item => item.member_id == this.accountSelect)
if (account) {
return true
} else {
return false
}
}
},
handleChildren(list) {
list.map(item => {
item.label = item.main_game_name + '/' + item.main_game_id
item.value = item.main_game_id
item.children = item.gift_package_list
item.group_name = item.gift_package_group_name
})
},
// 发送渠道
async sendGameCode(items) {
this.loading = true
const data = {
userid: this.chatUserInfo.userid,
external_userid: this.chatUserInfo.external_userid,
member_id: this.accountSelect,
gift_package_id: items.id,
user_type: 1
}
const res = await sendGiftCode(data)
if (res.status_code === 1) {
this.$message.success('发送成功')
this.sendChatMessage(res.data, 'text')
} else {
this.$message.error(res.msg || '发送失败')
}
this.loading = false
},
handleAccount() {
if (this.bindGameUserList.length > 0) {
const account = this.bindGameUserList.find(item => item.member_id == this.accountSelect)
if (account) {
return true
} else {
return false
}
},
sendMessage(item, type) {
const result = this.handleAccount()
if (!result) {
this.$message.warning('请稍后再试')
return false
}
let str = ''
if (type == 2) {
str = '网页游戏链接:'
} else if (type == 3) {
str = '安卓游戏链接:'
} else if (type == 4) {
str = 'IOS游戏链接:'
} else {
}
const username = this.bindGameUserList.find(item => item.member_id == this.accountSelect).username
passwardEncryption({ member_id: this.accountSelect }).then(res => {
this.sendChatMessage(`${str}${item.url} \n账号:${username} \n密码:${res.data.password}`, 'text')
}).catch(err => {
this.sendChatMessage(`${str}${item.url} \n账号:${username}`, 'text')
console.log(err)
})
},
showPopover() {
} else {
return false
}
},
sendMessage(item, type) {
const result = this.handleAccount()
if (!result) {
this.$message.warning('请稍后再试')
return false
}
let str = ''
if (type == 2) {
str = '网页游戏链接:'
} else if (type == 3) {
str = '安卓游戏链接:'
} else if (type == 4) {
str = 'IOS游戏链接:'
} else {
}
const username = this.bindGameUserList.find(item => item.member_id == this.accountSelect).username
passwardEncryption({ member_id: this.accountSelect }).then(res => {
this.sendChatMessage(`${str}${item.url} \n账号:${username} \n密码:${res.data.password}`, 'text')
}).catch(err => {
this.sendChatMessage(`${str}${item.url} \n账号:${username}`, 'text')
console.log(err)
})
},
showPopover() {
}
}
</script>
<style lang="scss" scoped>
.vipToolsContent{
width: 100%;
height: 100%;
overflow: auto;
}
</script>
<style lang="scss" scoped>
.vipToolsContent {
width: 100%;
height: 100%;
overflow: auto;
.sendLink {
width: 150px;
height: 25px;
cursor: pointer;
}
.sendLink:hover {
color: #409EFF;
}
.giftGameCollapse {
width: 100%;
height: auto;
}
.btntab {
width: 100%;
display: flex;
......@@ -321,71 +283,83 @@
position: absolute;
left: 0;
top: 0;
.btn {
flex: 1;
display: flex;
cursor: pointer;
}
.btn:first-child {
border-right: 1px solid #ccc;
}
.btnActive {
background: #409EFF;
color: #fff;
}
}
.gameList {
width: 100%;
height: auto;
overflow: auto;
::v-deep .el-tabs__item {
width: 70px;
}
.giftCode {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
.gameCodeTitle {
cursor: pointer;
margin: 10px 0 10px 0;
}
.gameListItemApp {
width: 100%;
padding-left: 20px;
.gameName{
.gameName {
max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 5px;
}
p {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
.icon {
font-size: 14px;
cursor: pointer;
}
}
.gameListItemAppAC {
background: #f7f8fa;
}
}
}
</style>
<style>
.contentPopover {
max-width: 400px;
word-wrap: break-word;
word-break: break-all;
}
.contentPopover img {
max-width: 250px;
}
</style>
\ No newline at end of file
</style>
<style>
.contentPopover {
max-width: 400px;
word-wrap: break-word;
word-break: break-all;
}
.contentPopover img {
max-width: 250px;
}
</style>
\ No newline at end of file
<template>
<div class="approval-role-list columnFlex">
<el-form ref="taskForm" :model="reportForm" label-position="top" class="taskForm" label-width="85px">
<el-form-item label="角色名称">
<el-input
v-model="reportForm.role_name"
clearable
placeholder="请输入角色名称"
@change="filterChange"
>
</el-input>
</el-form-item>
<el-form-item label="审批状态">
<el-select
v-model="reportForm.approval_status"
clearable
style="width: 100%;"
placeholder="请选择审批状态"
@change="filterChange"
>
<el-option v-for="item in approvalList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="申请方式">
<el-select
v-model="reportForm.register_type"
clearable
style="width: 100%;"
placeholder="请选择申请方式"
@change="filterChange"
>
<el-option
v-for="item in register_type_list"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="时间范围">
<div class="approval-role-list columnFlex">
<el-form ref="taskForm" :model="reportForm" label-position="top" class="taskForm" label-width="85px">
<el-form-item label="角色名称">
<el-input v-model="reportForm.role_name" clearable placeholder="请输入角色名称" @change="filterChange">
</el-input>
</el-form-item>
<el-form-item label="审批状态">
<el-select v-model="reportForm.approval_status" clearable style="width: 100%;" placeholder="请选择审批状态"
@change="filterChange">
<el-option v-for="item in approvalList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="申请方式">
<el-select v-model="reportForm.register_type" clearable style="width: 100%;" placeholder="请选择申请方式"
@change="filterChange">
<el-option v-for="item in register_type_list" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="时间范围">
<BiDatePicker
v-model="reportForm.create_time"
style="width: 95%"
......@@ -55,140 +35,103 @@
@change="createResult"
/>
</el-form-item> -->
<el-form-item label="开始时间">
<el-date-picker
v-model="reportForm.create_time_start"
type="datetime"
style="width: 100%;"
value-format="yyyy-MM-dd HH:mm:ss"
@change="createResult"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker
v-model="reportForm.create_time_end"
type="datetime"
style="width: 100%;"
@change="endResult"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="filterChange">搜索</el-button>
<el-button size="mini" @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
<div
v-infinite-scroll="paperScroll"
:infinite-scroll-disabled="!isMoreRecord"
:infinite-scroll-immediate="false"
class="approvalScroll"
>
<!-- 举报申请 -->
<div class="scrollMain" v-if="reportList.length > 0">
<div v-for="(item, index) in reportList" :key="index" class="reportContent" @click="appealProcess(item, index)">
<div class="reportItem rowFlex columnCenter spaceBetween">
<div class="reportItemLeft">
<p><span class="label">角色名称:</span><span class="value">{{ item.role_name }}</span></p>
<div class="rowFlex spaceBetween columnCenter">
<p>
<span class="label">累计充值:</span><span class="value">{{ formatNumber(item.recharge_total_amount) }}
</span>
</p>
</div>
<el-form-item label="开始时间">
<el-date-picker v-model="reportForm.create_time_start" type="datetime" style="width: 100%;"
value-format="yyyy-MM-dd HH:mm:ss" @change="createResult" placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker v-model="reportForm.create_time_end" type="datetime" style="width: 100%;" @change="endResult"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="filterChange">搜索</el-button>
<el-button size="mini" @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
<div v-infinite-scroll="paperScroll" :infinite-scroll-disabled="!isMoreRecord" :infinite-scroll-immediate="false"
class="approvalScroll">
<!-- 举报申请 -->
<div class="scrollMain" v-if="reportList.length > 0">
<div v-for="(item, index) in reportList" :key="index" class="reportContent" @click="appealProcess(item, index)">
<div class="reportItem rowFlex columnCenter spaceBetween">
<div class="reportItemLeft">
<p><span class="label">角色名称:</span><span class="value">{{ item.role_name }}</span></p>
<div class="rowFlex spaceBetween columnCenter">
<p>
<span class="label">近一周充值:</span><span class="value">{{ formatNumber(item.recharge_week_amount)
}}</span>
<span class="label">累计充值:</span><span class="value">{{ formatNumber(item.recharge_total_amount) }}
</span>
</p>
<p><span class="label">违规操作:</span><span class="value">{{ item.appeal_type_text }}</span></p>
</div>
<div class="reportItemRight columnFlex columnCenter">
<el-button
v-if="item.approval_status == 1 && (item.customer_id == userInfo.id)"
type="primary"
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;"
@click.stop="resubmitApproval(item)"
>重新提交</el-button>
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" />
</div>
<p>
<span class="label">近一周充值:</span><span class="value">{{ formatNumber(item.recharge_week_amount)
}}</span>
</p>
<p><span class="label">违规操作:</span><span class="value">{{ item.appeal_type_text }}</span></p>
</div>
<!-- 审批进度 -->
<el-collapse-transition>
<div v-if="item.showStep" class="appealProcessList">
<el-steps direction="vertical" :active="item.current" finish-status="success">
<el-step
v-for="(items, indexs) in item.appealProcessList"
:key="'trans_item_' + indexs"
:title="items.node_name"
>
<template slot="description">
<div v-if="items" class="trans-follow-1 card-style">
<div class="follow-item">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' ? '审批人:' : '登记人:' }}
</span>
<span class="info-value value-font">
{{ Array.isArray(items.user_name) ? items.user_name[0] : items.user_name }}
</span>
<el-tooltip
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">
{{ `+${items.user_name.length - 1}` }}
</span>
</el-tooltip>
</div>
<div v-if="items.node_sort !== '0' || item.node_name === '系统'" class="follow-item">
<span class="follow-info-label label-font">
审批结果:
</span>
<span
class="info-value value-font"
:class="[items.current < indexs ? '' : switchStateTag(items.approval_result)]"
>
{{ items.current < indexs ? '' : items.approval_result_text }}
</span>
</div>
<div class="follow-item">
<span class="follow-info-label label-font">
{{ (items.node_sort !== '0' || items.node_name === '系统') ? '审批时间:' : '登记时间:' }}
</span>
<span class="info-value value-font">
{{ items.node_sort === '0' ? items.create_time : items.update_time }}
</span>
</div>
<div
v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result==='2'"
class="follow-item"
>
<span class="follow-info-label label-font">
驳回原因:
</span>
<span class="info-value value-font">
{{ items.extra_attribution.remark }}
<div class="reportItemRight columnFlex columnCenter">
<el-button v-if="item.approval_status == 1 && (item.customer_id == userInfo.id)" type="primary"
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;"
@click.stop="resubmitApproval(item)">重新提交</el-button>
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" />
</div>
</div>
<!-- 审批进度 -->
<el-collapse-transition>
<div v-if="item.showStep" class="appealProcessList">
<el-steps direction="vertical" :active="item.current" finish-status="success">
<el-step v-for="(items, indexs) in item.appealProcessList" :key="'trans_item_' + indexs"
:title="items.node_name">
<template slot="description">
<div v-if="items" class="trans-follow-1 card-style">
<div class="follow-item">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' ? '审批人:' : '登记人:' }}
</span>
<span class="info-value value-font">
{{ Array.isArray(items.user_name) ? items.user_name[0] : items.user_name }}
</span>
<el-tooltip 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">
{{ `+${items.user_name.length - 1}` }}
</span>
</div>
<!-- <div
</el-tooltip>
</div>
<div v-if="items.node_sort !== '0' || item.node_name === '系统'" class="follow-item">
<span class="follow-info-label label-font">
审批结果:
</span>
<span class="info-value value-font"
:class="[items.current < indexs ? '' : switchStateTag(items.approval_result)]">
{{ items.current < indexs ? '' : items.approval_result_text }} </span>
</div>
<div class="follow-item">
<span class="follow-info-label label-font">
{{ (items.node_sort !== '0' || items.node_name === '系统') ? '审批时间:' : '登记时间:' }}
</span>
<span class="info-value value-font">
{{ items.node_sort === '0' ? items.create_time : items.update_time }}
</span>
</div>
<div v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result === '2'"
class="follow-item">
<span class="follow-info-label label-font">
驳回原因:
</span>
<span class="info-value value-font">
{{ items.extra_attribution.remark }}
</span>
</div>
<!-- <div
v-if="items.node_sort === item.appealProcessList[item.appealProcessList.length - 1 ].node_sort+ '' && items.approval_result === '1' && items.node_sort !== '0'"
class="follow-item-remark follow-item"
>
......@@ -199,740 +142,738 @@
{{ items.extra_attribution.banned_text }}
</span>
</div> -->
<!-- 同步掌游的内容 -->
<div
v-if="(items.node_sort === '0' || (items.extra_attribution && items.extra_attribution.remark)) && items.node_name !== '系统'"
class="info-item-remark"
>
<div style="display: flex;">
<span class="info-label remark-label">详情:</span>
<span class="preview-btn" @click.stop="previewRemark(items.extra_attribution.remark)">
<i class="el-icon-view"></i>
点击查看大图
</span>
</div>
<div class="remark-value" v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')"></div>
<!-- 同步掌游的内容 -->
<div
v-if="(items.node_sort === '0' || (items.extra_attribution && items.extra_attribution.remark)) && items.node_name !== '系统'"
class="info-item-remark">
<div style="display: flex;">
<span class="info-label remark-label">详情:</span>
<span class="preview-btn" @click.stop="previewRemark(items.extra_attribution.remark)">
<i class="el-icon-view"></i>
点击查看大图
</span>
</div>
<div class="remark-value"
v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')">
</div>
</div>
</template>
</el-step>
</el-steps>
</div>
</el-collapse-transition>
</div>
</div>
<div v-else class="noContent">
<noContent />
</div>
</template>
</el-step>
</el-steps>
</div>
</el-collapse-transition>
</div>
</div>
<el-dialog :visible.sync="dialogRemarkVisible" top="50%" center append-to-body title="查看大图" custom-class="remake-dialog">
<div class="remake-box">
<div v-html="dialogRemake"></div>
</div>
</el-dialog>
<resubmitApproval
v-if="showResubmitApproval"
:show.sync="showResubmitApproval"
:appeal-info="appealInfo"
@updateReportList="filterChange"
/>
<div v-else class="noContent">
<noContent />
</div>
</div>
</template>
<script>
import { searchcondition, appealList, appealCancel, appealProcess } from '@/api/game'
import { mapState, mapMutations } from 'vuex'
import { removeDp, formatNumber,debounce } from '@/utils/index'
import resubmitApproval from './layer/appeal.vue'
// 导入审批状态图标
import shenpi1 from '@/assets/icon/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi3 from '@/assets/icon/shenpi3.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
import noContent from "@/components/noContent.vue";
import watchMember from '@/mixins/watchMember'
export default {
name: 'approval',
computed: {
...mapState('game', ['accountSelect']),
...mapState('user', ['userInfo'])
<el-dialog :visible.sync="dialogRemarkVisible" top="50%" center append-to-body title="查看大图"
custom-class="remake-dialog">
<div class="remake-box">
<div v-html="dialogRemake"></div>
</div>
</el-dialog>
<resubmitApproval v-if="showResubmitApproval" :show.sync="showResubmitApproval" :appeal-info="appealInfo"
@updateReportList="filterChange" />
</div>
</template>
<script>
import { searchcondition, appealList, appealCancel, appealProcess } from '@/api/game'
import { mapState, mapMutations } from 'vuex'
import { removeDp, formatNumber, debounce } from '@/utils/index'
import resubmitApproval from './layer/appeal.vue'
// 导入审批状态图标
import shenpi1 from '@/assets/icon/svg/shenpi1.svg'
import shenpi2 from '@/assets/icon/svg/shenpi2.svg'
import shenpi3 from '@/assets/icon/svg/shenpi3.svg'
import shenpi4 from '@/assets/icon/svg/shenpi4.svg'
import shenpi5 from '@/assets/icon/svg/shenpi5.svg'
import noContent from "@/components/noContent.vue";
import watchMember from '@/mixins/watchMember'
export default {
name: 'approval',
computed: {
...mapState('game', ['accountSelect']),
...mapState('user', ['userInfo'])
},
watch: {
accountSelect: {
handler: debounce(function (newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) {
this.filterChange()
}
}, 200),
immediate: false
}
},
components: {
resubmitApproval,
noContent
},
mixins: [watchMember],
data() {
return {
// 审批状态图标
shenpi1,
shenpi2,
shenpi3,
shenpi4,
shenpi5,
pickerOptions: {
disabledDate(time) {
const curDate = (new Date()).getTime()
const three = 90 * 24 * 3600 * 1000
const threeMonths = curDate - three
return time.getTime() > Date.now() || time.getTime() < threeMonths
}
},
reportForm: {
customer_id: '',
member_id: '',
role_id: '',
username: '',
role_name: '',
register_type: 1,
approval_status: '',
create_time_start: '',
create_time_end: ''
},
appealInfo: {},
showResubmitApproval: false,
pageInfo: {
page: 1,
page_size: 20
},
reportList: [],
isMoreRecord: false,
approvalList: [],
register_type_list: [],
dialogRemarkVisible: false,
dialogRemake: '',
formatNumber: formatNumber,
taskTypeList: []
}
},
mounted() {
this.reportForm.create_time_start = this.$moment().subtract(3, 'months').format('YYYY-MM-DD HH:mm:ss')
this.reportForm.create_time_end = this.$moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
this.requstApprovalList()
this.request_register_type()
this.filterChange()
},
methods: {
resetForm() {
this.reportForm = {
customer_id: '',
member_id: '',
role_id: '',
username: '',
role_name: '',
register_type: 1,
approval_status: '',
create_time_start: this.$moment().subtract(3, 'months').format('YYYY-MM-DD HH:mm:ss'),
create_time_end: this.$moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
}
},
watch: {
accountSelect: {
handler:debounce(function(newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) {
this.filterChange()
}
},200),
immediate: false
memberChange() {
this.filterChange()
},
filterChange() {
if (this.$moment(this.reportForm.create_time_start).isAfter(this.$moment(this.reportForm.create_time_end))) {
this.$message.warning('开始时间不能大于结束时间')
return
}
this.pageInfo.page = 1
this.reportList = []
this.isMoreRecord = true
this.appealList()
},
createResult(data) {
this.reportForm.create_time_start = data
},
endResult(data) {
this.reportForm.create_time_end = data
},
async requstApprovalList() {
const data = {
type: 'dictionaries',
table_name: 'zs_refund_request',
field_name: 'approval_status'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.approvalList = res.data.data
}
},
components: {
resubmitApproval,
noContent
previewRemark(remark) {
this.dialogRemake = remark
this.dialogRemarkVisible = true
},
mixins: [watchMember],
data() {
return {
// 审批状态图标
shenpi1,
shenpi2,
shenpi3,
shenpi4,
shenpi5,
pickerOptions: {
disabledDate(time) {
const curDate = (new Date()).getTime()
const three = 90 * 24 * 3600 * 1000
const threeMonths = curDate - three
return time.getTime() > Date.now() || time.getTime() < threeMonths
async appealProcess(item, index) {
console.log(item.current, 'item')
item.showStep = !item.showStep
if (item.appealProcessList.length === 0) {
const res = await appealProcess({ id: item.id })
item.appealProcessList = res.data.data
res.data.data.map((items) => {
if (items.approval_result !== '0' && items.approval_result !== '2') {
item.current += 1
}
},
reportForm: {
customer_id: '',
member_id: '',
role_id: '',
username: '',
role_name: '',
register_type: 1,
approval_status: '',
create_time_start: '',
create_time_end: ''
},
appealInfo: {},
showResubmitApproval: false,
pageInfo: {
page: 1,
page_size: 20
},
reportList: [],
isMoreRecord: false,
approvalList: [],
register_type_list: [],
dialogRemarkVisible: false,
dialogRemake: '',
formatNumber: formatNumber,
taskTypeList: []
})
this.$forceUpdate()
}
this.$forceUpdate()
},
mounted() {
this.reportForm.create_time_start = this.$moment().subtract(3, 'months').format('YYYY-MM-DD HH:mm:ss')
this.reportForm.create_time_end = this.$moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
this.requstApprovalList()
this.request_register_type()
this.filterChange()
async request_register_type() {
const data = {
type: 'dictionaries',
table_name: 'zs_report_request',
field_name: 'register_type'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.register_type_list = res.data.data
}
},
methods: {
resetForm(){
this.reportForm={
customer_id: '',
member_id: '',
role_id: '',
username: '',
role_name: '',
register_type: 1,
approval_status: '',
create_time_start: this.$moment().subtract(3, 'months').format('YYYY-MM-DD HH:mm:ss') ,
create_time_end: this.$moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
}
},
memberChange() {
this.filterChange()
},
filterChange() {
if (this.$moment(this.reportForm.create_time_start).isAfter(this.$moment(this.reportForm.create_time_end))) {
this.$message.warning('开始时间不能大于结束时间')
return
}
this.pageInfo.page = 1
this.reportList = []
this.isMoreRecord = true
this.appealList()
},
createResult(data) {
this.reportForm.create_time_start = data
},
endResult(data){
this.reportForm.create_time_end = data
},
async requstApprovalList() {
const data = {
type: 'dictionaries',
table_name: 'zs_refund_request',
field_name: 'approval_status'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.approvalList = res.data.data
}
},
previewRemark(remark) {
this.dialogRemake = remark
this.dialogRemarkVisible = true
},
async appealProcess(item, index) {
console.log(item.current, 'item')
item.showStep = !item.showStep
if (item.appealProcessList.length === 0) {
const res = await appealProcess({ id: item.id })
item.appealProcessList = res.data.data
res.data.data.map((items) => {
if (items.approval_result !== '0' && items.approval_result !== '2') {
item.current += 1
paperScroll() {
this.requestNextPage()
},
requestNextPage(pageInfo) {
this.pageInfo.page++
this.appealList()
},
handleCurrentChange(val) {
this.pageInfo.page = val
},
switchStateTag(status) {
switch (status) {
case '0':
return 'unhandle'
case '1':
return 'handled'
case '2':
return 'sendFail'
}
},
formatImg(html) {
if (html) {
return html.replaceAll(/<img/g, '<img style="max-width:100px;"')
}
return html
},
switchStateText(status) {
switch (status) {
case '0':
return '待审批'
case '1':
return '通过'
case '2':
return '驳回'
}
},
// 重新提交
resubmitApproval(item) {
this.appealInfo = item
this.showResubmitApproval = true
},
handleReport(item) {
this.$confirm('确定要撤销该申请么?', '确认提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
const data = {
id: item.id,
user_id: this.userInfo.id,
user_name: this.userInfo.username
}
appealCancel(data).then(res => {
if (res.status_code === 1) {
this.$message({
type: 'success',
message: '撤销成功!'
})
this.filterChange()
}
})
this.$forceUpdate()
}
this.$forceUpdate()
},
async request_register_type() {
const data = {
type: 'dictionaries',
table_name: 'zs_report_request',
field_name: 'register_type'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.register_type_list = res.data.data
}
},
paperScroll() {
this.requestNextPage()
},
requestNextPage(pageInfo) {
this.pageInfo.page++
this.appealList()
},
handleCurrentChange(val) {
this.pageInfo.page = val
},
switchStateTag(status) {
switch (status) {
case '0':
return 'unhandle'
case '1':
return 'handled'
case '2':
return 'sendFail'
}
},
formatImg(html) {
if (html) {
return html.replaceAll(/<img/g, '<img style="max-width:100px;"')
}
return html
},
switchStateText(status) {
switch (status) {
case '0':
return '待审批'
case '1':
return '通过'
case '2':
return '驳回'
}
},
// 重新提交
resubmitApproval(item) {
this.appealInfo = item
this.showResubmitApproval = true
},
handleReport(item) {
this.$confirm('确定要撤销该申请么?', '确认提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
const data = {
id: item.id,
user_id: this.userInfo.id,
user_name: this.userInfo.username
}
appealCancel(data).then(res => {
if (res.status_code === 1) {
this.$message({
type: 'success',
message: '撤销成功!'
})
this.filterChange()
}
})
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
},
// 申诉列表
async appealList() {
if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!')
return false
}
if (this.pageInfo.page == 1) {
this.reportList = []
}
const { username, role_name, approval_status, register_type, create_time_start, create_time_end } = this.reportForm
// const { id } = this.userInfo
const data = {
username,
role_name,
approval_status,
register_type,
create_time_start,
create_time_end,
member_id: this.accountSelect,
// customer_id: id,
...this.pageInfo
}
const res = await appealList(data)
if (this.pageInfo.page == 1) {
this.reportList = res.data.data
} else {
this.reportList = removeDp(this.reportList, res.data.data, 'id')
}
if (this.reportList.length > 0) {
this.reportList.map((item) => {
item.showStep = false
item.current = 0
item.appealProcessList = []
})
} else {
this.reportList = []
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
})
},
// 申诉列表
async appealList() {
if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!')
return false
}
if (this.pageInfo.page == 1) {
this.reportList = []
}
const { username, role_name, approval_status, register_type, create_time_start, create_time_end } = this.reportForm
// const { id } = this.userInfo
const data = {
username,
role_name,
approval_status,
register_type,
create_time_start,
create_time_end,
member_id: this.accountSelect,
// customer_id: id,
...this.pageInfo
}
const res = await appealList(data)
if (this.pageInfo.page == 1) {
this.reportList = res.data.data
} else {
this.reportList = removeDp(this.reportList, res.data.data, 'id')
}
if (this.reportList.length > 0) {
this.reportList.map((item) => {
item.showStep = false
item.current = 0
item.appealProcessList = []
})
} else {
this.reportList = []
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
}
}
</script>
<style lang="scss" scoped>
.approval-role-list {
}
</script>
<style lang="scss" scoped>
.approval-role-list {
width: 100%;
height: 100%;
padding-top: 10px;
overflow: auto;
.taskForm {
::v-deep .el-form-item {
margin-bottom: 10px;
}
}
// 会话筛选
.filterChat {
width: 100%;
height: 100%;
padding-top: 10px;
overflow: auto;
.taskForm {
::v-deep .el-form-item {
margin-bottom: 10px;
}
margin-top: 20px;
::v-deep .el-button {
margin-left: 6px;
margin-right: 0 !important;
}
.btnListScroll {
margin-bottom: 10px;
}
.chatIcon {
font-size: 20px;
margin-left: 5px;
margin-top: 10px;
cursor: pointer;
}
.itemActive {
background: #e1fff0;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3491FA;
border: none;
}
// 会话筛选
.filterChat {
.btnList {
width: 100%;
margin-top: 20px;
::v-deep .el-button {
margin-left: 6px;
margin-right: 0 !important;
}
.btnListScroll {
margin-bottom: 10px;
}
.chatIcon {
font-size: 20px;
margin-left: 5px;
margin-top: 10px;
cursor: pointer;
}
.itemActive {
background: #e1fff0;
margin-bottom: 10px;
overflow: auto;
.btnItem {
border: none;
background: #eef0f4;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3491FA ;
border: none;
}
.btnList {
width: 100%;
margin-bottom: 10px;
overflow: auto;
.btnItem {
border: none;
background: #eef0f4;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #6e7073;
}
color: #6e7073;
}
}
.approvalScroll {
}
.approvalScroll {
width: 100%;
height: auto;
.scrollMain {
width: 100%;
height: auto;
.scrollMain {
width: 100%;
height: auto;
margin-bottom: 40px;
.reportContent {
width: calc(100% - 10px);
}
//举报申请
.reportItem {
padding: 10px;
background: #f7f8fa;
margin-bottom: 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
p {
line-height: 25px;
}
.reportItemLeft {
width: 100%;
.label {
font-weight: 500;
font-size: 14px;
color: #86909c;
line-height: 20px;
margin-right: 10px;
}
.value {
font-weight: 500;
font-size: 14px;
color: #333333;
line-height: 20px;
text-align: left;
}
}
.reportItemRight {
height: 100%;
.icon {
font-size: 50px;
}
}
margin-bottom: 40px;
.reportContent {
width: calc(100% - 10px);
}
//举报申请
.reportItem {
padding: 10px;
background: #f7f8fa;
margin-bottom: 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
p {
line-height: 25px;
}
.chatListItem {
.reportItemLeft {
width: 100%;
height: 68px;
padding: 3px 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
.left {
color: #333333;
font-size: 14px;
.label {
font-weight: 500;
}
.info,
.top {
font-size: 14px;
font-weight: 400;
color: #86909c;
line-height: 20px;
margin-right: 10px;
}
.bottom {
.value {
font-weight: 500;
font-size: 14px;
color: #999999;
color: #333333;
line-height: 20px;
text-align: left;
}
.right {
font-size: 12px;
font-weight: 400;
}
.reportItemRight {
height: 100%;
.icon {
font-size: 50px;
}
}
}
.chatListItemActive {
background: #e4fff1 !important;
}
.chatListItem:hover {
background: #e4fff1 !important;
.chatListItem {
width: 100%;
height: 68px;
padding: 3px 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
.left {
color: #333333;
font-size: 14px;
font-weight: 500;
}
.info,
.top {
font-size: 14px;
font-weight: 400;
}
.bottom {
font-size: 14px;
color: #999999;
}
.right {
font-size: 12px;
font-weight: 400;
}
}
}
}
// 掌游的样式
::v-deep.el-step .el-step__line {
width: 1px;
}
::v-deep .el-step>.is-success {
color: #3491FA ;
border-color: #3491FA ;
.el-step__line {
background-color: #e5e6eb;
.chatListItemActive {
background: #e4fff1 !important;
}
}
::v-deep .el-step__main>.is-success {
color: #3491FA ;
}
::v-deep .el-step>.is-process {
color: #3491FA ;
border-color: #3491FA ;
.el-step__line {
background-color: #e5e6eb;
.chatListItem:hover {
background: #e4fff1 !important;
}
}
::v-deep .el-step__main>.is-process {
color: #3491FA ;
}
.form-item-btn {
margin: 0 0 0 20px;
}
.audit-label {
font-size: 14px;
font-weight: 800;
margin: 0 0 10px 0;
}
.remark-label {
color: #949fb0;
font-size: 14px;
}
.preview-btn {
cursor: pointer;
font-size: 14px;
color: #3491FA ;
margin: 0 0 0 10px;
i {
margin: 0 5px 0 0;
}
}
.remark-value {
min-height: 100px;
margin: 10px 0 0 40px;
padding: 6px 12px;
border: 1px solid #d9d9d9;
border-radius: 4px;
cursor: not-allowed;
color: #333;
}
.flex-box {
display: flex;
.remark-lebel {
width: 50px;
text-align: right;
}
}
// 掌游的样式
::v-deep.el-step .el-step__line {
width: 1px;
}
::v-deep .el-step>.is-success {
color: #3491FA;
border-color: #3491FA;
.el-step__line {
background-color: #e5e6eb;
}
.refund-flow-drawer {
position: fixed;
top: 0;
right: 700px;
}
::v-deep .el-step__main>.is-success {
color: #3491FA;
}
::v-deep .el-step>.is-process {
color: #3491FA;
border-color: #3491FA;
.el-step__line {
background-color: #e5e6eb;
}
.btm-btn-box {
position: fixed;
bottom: 20px;
width: 560px;
height: 32px;
}
::v-deep .el-step__main>.is-process {
color: #3491FA;
}
.form-item-btn {
margin: 0 0 0 20px;
}
.audit-label {
font-size: 14px;
font-weight: 800;
margin: 0 0 10px 0;
}
.remark-label {
color: #949fb0;
font-size: 14px;
}
.preview-btn {
cursor: pointer;
font-size: 14px;
color: #3491FA;
margin: 0 0 0 10px;
i {
margin: 0 5px 0 0;
}
.audit-state {
}
.remark-value {
min-height: 100px;
margin: 10px 0 0 40px;
padding: 6px 12px;
border: 1px solid #d9d9d9;
border-radius: 4px;
cursor: not-allowed;
color: #333;
}
.flex-box {
display: flex;
.remark-lebel {
width: 50px;
height: 50px;
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
z-index: 100;
.audit-state-stamp {
font-size: 50px;
}
text-align: right;
}
.info-item {
width: 45%;
display: flex;
height: 18px;
margin: 0 0 12px 0;
}
.refund-flow-drawer {
position: fixed;
top: 0;
right: 700px;
}
.btm-btn-box {
position: fixed;
bottom: 20px;
width: 560px;
height: 32px;
}
.audit-state {
width: 50px;
height: 50px;
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
z-index: 100;
.audit-state-stamp {
font-size: 50px;
}
.info-item-pic {
width: 100%;
min-height: 96px;
max-height: 192px;
}
.info-item {
width: 45%;
display: flex;
height: 18px;
margin: 0 0 12px 0;
}
.info-item-pic {
width: 100%;
min-height: 96px;
max-height: 192px;
display: flex;
.img-list {
width: 464px;
display: flex;
.img-list {
width: 464px;
display: flex;
flex-wrap: wrap;
&-item {
flex-wrap: wrap;
&-item {
width: 80px;
height: 80px;
border-radius: 4px;
overflow: hidden;
margin: 0 10px 10px 0;
position: relative;
.preview-pic {
width: 80px;
height: 80px;
border-radius: 4px;
overflow: hidden;
margin: 0 10px 10px 0;
position: relative;
.preview-pic {
width: 80px;
height: 80px;
background: rgba(0, 0, 0, 0.5);
position: absolute;
top: 0;
left: 0;
z-index: -1;
text-align: center;
line-height: 80px;
.preview-icon {
font-size: 16px;
color: #fff;
cursor: pointer;
}
}
.screenshot {
object-fit: center;
width: 80px;
height: 80px;
}
&:hover>.preview-pic {
z-index: 100;
background: rgba(0, 0, 0, 0.5);
position: absolute;
top: 0;
left: 0;
z-index: -1;
text-align: center;
line-height: 80px;
.preview-icon {
font-size: 16px;
color: #fff;
cursor: pointer;
}
}
.screenshot {
object-fit: center;
width: 80px;
height: 80px;
}
&:hover>.preview-pic {
z-index: 100;
}
}
}
.flex-btn {
display: flex;
justify-content: space-between;
}
.info-label {
// width: 90px;
// text-align: right;
display: block;
margin: 0 10px 0 0;
font-size: 14px;
color: #949fb0;
}
.info-value {
display: block;
font-size: 14px;
color: #333;
}
.card-style {
background: #f2f2f7;
border-radius: 4px;
}
.trans-follow-1 {
width: 300px;
min-height: fit-content;
margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px;
position: relative;
.collapse-btn {
position: absolute;
top: 20px;
right: 15px;
}
.follow-item-remark {
width: 100%;
line-height: 20px;
margin: 0 0 12px 0;
}
.info-value-color {
color: #3491FA ;
margin-left: 5px;
}
}
.flex-btn {
display: flex;
justify-content: space-between;
}
.info-label {
// width: 90px;
// text-align: right;
display: block;
margin: 0 10px 0 0;
font-size: 14px;
color: #949fb0;
}
.info-value {
display: block;
font-size: 14px;
color: #333;
}
.card-style {
background: #f2f2f7;
border-radius: 4px;
}
.trans-follow-1 {
width: 300px;
min-height: fit-content;
margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px;
position: relative;
.collapse-btn {
position: absolute;
top: 20px;
right: 15px;
}
.follow-item {
min-height: 20px;
.follow-item-remark {
width: 100%;
line-height: 20px;
margin: 0 0 12px 0;
display: flex;
.label-left {
width: 90px;
text-align: right;
}
}
.left-label {
width: 60px;
}
.follow-info-label {
width: fit-content;
text-align: left;
display: inline-block;
margin: 0 10px 0 0;
.info-value-color {
color: #3491FA;
margin-left: 5px;
}
.info-value {
font-size: 14px;
color: #333;
}
.label-font {
font-size: 14px;
color: #949fb0;
}
.follow-item {
min-height: 20px;
line-height: 20px;
margin: 0 0 12px 0;
display: flex;
.label-left {
width: 90px;
text-align: right;
}
.info-item-remark {
width: 100%;
padding: 0 0 12px 0;
line-height: 20px;
.info-label {
display: block;
}
.info-value {
display: block;
width: 440px;
}
}
.left-label {
width: 60px;
}
.follow-info-label {
width: fit-content;
text-align: left;
display: inline-block;
margin: 0 10px 0 0;
}
.info-value {
font-size: 14px;
color: #333;
}
.label-font {
font-size: 14px;
color: #949fb0;
}
.info-item-remark {
width: 100%;
padding: 0 0 12px 0;
line-height: 20px;
.info-label {
display: block;
}
.appealProcessList {
margin-bottom: 20px;
margin-top: 20px;
.info-value {
display: block;
width: 440px;
}
</style>
\ No newline at end of file
}
.appealProcessList {
margin-bottom: 20px;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<div class="reportList">
<el-form
ref="taskForm"
:model="reportForm"
class="taskForm"
label-position="top"
label-width="85px"
>
<el-form-item label="角色名称">
<el-input
v-model="reportForm.role_name"
clearable
placeholder="请输入角色名称"
@change="filterChange"
>
</el-input>
</el-form-item>
<el-form-item label="审批状态">
<el-select
v-model="reportForm.approval_status"
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-select>
</el-form-item>
<el-form-item label="申请方式">
<el-select
v-model="reportForm.register_type"
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-select>
</el-form-item>
</el-form>
<div
v-infinite-scroll="paperScroll"
:infinite-scroll-disabled="!isMoreRecord"
:infinite-scroll-immediate="false"
class="mailListScroll"
>
<!-- 举报申请 -->
<div class="scrollMain" v-if="reportList.length > 0">
<div
v-for="(item, index) in reportList"
:key="index"
class="reportContent"
@click="reportProcess(item, index)"
>
<div class="reportItem rowFlex spaceBetween columnCenter">
<div class="reportItemLeft">
<p><span class="label">角色名称:</span><span class="value">{{ item.role_name }}</span></p>
<p>
<span class="label">累计充值:</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>
</div>
<div class="reportItemRight columnFlex columnCenter">
<!-- 撤销 当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"
@click.stop="handleReport(item)"
>撤销</el-button>
<!-- 审批 只有待审批状态可以并且申请方式是玩家登记的时候才有这个 -->
<el-button
v-if="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"
@click.stop="resubmitReport(item)"
>重新提交</el-button>
<img
v-if="item.approval_status == 1"
:src="shenpi1"
class="icon"
/>
<img
v-else-if="item.approval_status == 2"
:src="shenpi2"
class="icon"
/>
<img
v-else-if="item.approval_status == 3"
:src="shenpi3"
class="icon"
/>
<img
v-else-if="item.approval_status == 4"
:src="shenpi4"
class="icon"
/>
<img
v-else-if="item.approval_status == 5"
:src="shenpi5"
class="icon"
/>
</div>
<div class="reportList">
<el-form ref="taskForm" :model="reportForm" class="taskForm" label-position="top" label-width="85px">
<el-form-item label="角色名称">
<el-input v-model="reportForm.role_name" clearable placeholder="请输入角色名称" @change="filterChange">
</el-input>
</el-form-item>
<el-form-item label="审批状态">
<el-select v-model="reportForm.approval_status" 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-select>
</el-form-item>
<el-form-item label="申请方式">
<el-select v-model="reportForm.register_type" 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-select>
</el-form-item>
</el-form>
<div v-infinite-scroll="paperScroll" :infinite-scroll-disabled="!isMoreRecord" :infinite-scroll-immediate="false"
class="mailListScroll">
<!-- 举报申请 -->
<div class="scrollMain" v-if="reportList.length > 0">
<div v-for="(item, index) in reportList" :key="index" class="reportContent" @click="reportProcess(item, index)">
<div class="reportItem rowFlex spaceBetween columnCenter">
<div class="reportItemLeft">
<p><span class="label">角色名称:</span><span class="value">{{ item.role_name }}</span></p>
<p>
<span class="label">累计充值:</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>
</div>
<!-- 审批进度 -->
<el-collapse-transition>
<div
v-if="item.showStep"
class="reportProcessList"
>
<el-steps
direction="vertical"
: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">
<div
v-if="items"
class="trans-follow-1 card-style"
>
<div class="follow-item">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' ? '审批人:' : '登记人:' }}
</span>
<span class="info-value value-font">
{{ Array.isArray(items.user_name) ? items.user_name[0] : items.user_name }}
</span>
<el-tooltip
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">
{{ `+${items.user_name.length - 1}` }}
</span>
</el-tooltip>
</div>
<div
v-if="items.node_sort !== '0' || items.node_name === '系统'"
class="follow-item"
>
<span class="follow-info-label label-font">
审批结果:
</span>
<span
class="info-value value-font"
:class="[items.current < indexs? '' : switchStateTag(items.approval_result)]"
>
{{ items.current < indexs ? '' : items.approval_result_text }}
</span>
</div>
<div class="follow-item">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' || items.node_name === '系统' ? '审批时间:' : '登记时间:' }}
</span>
<span class="info-value value-font">
{{ items.node_sort === '0' ? items.create_time : items.update_time }}
</span>
</div>
<div
v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result==='2'"
class="follow-item"
>
<span class="follow-info-label label-font">
驳回原因:
</span>
<span class="info-value value-font">
{{ items.extra_attribution.remark }}
</span>
</div>
<div
v-if="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">
处理结果:
<div class="reportItemRight columnFlex columnCenter">
<!-- 撤销 当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"
@click.stop="handleReport(item)">撤销</el-button>
<!-- 审批 只有待审批状态可以并且申请方式是玩家登记的时候才有这个 -->
<el-button
v-if="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"
@click.stop="resubmitReport(item)">重新提交</el-button>
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" />
</div>
</div>
<!-- 审批进度 -->
<el-collapse-transition>
<div v-if="item.showStep" class="reportProcessList">
<el-steps direction="vertical" :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">
<div v-if="items" class="trans-follow-1 card-style">
<div class="follow-item">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' ? '审批人:' : '登记人:' }}
</span>
<span class="info-value value-font">
{{ Array.isArray(items.user_name) ? items.user_name[0] : items.user_name }}
</span>
<el-tooltip 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">
{{ `+${items.user_name.length - 1}` }}
</span>
<span class="info-value value-font">
{{ items.extra_attribution.banned_text }}
</el-tooltip>
</div>
<div v-if="items.node_sort !== '0' || items.node_name === '系统'" class="follow-item">
<span class="follow-info-label label-font">
审批结果:
</span>
<span class="info-value value-font"
:class="[items.current < indexs ? '' : switchStateTag(items.approval_result)]">
{{ items.current < indexs ? '' : items.approval_result_text }} </span>
</div>
<div class="follow-item">
<span class="follow-info-label label-font">
{{ items.node_sort !== '0' || items.node_name === '系统' ? '审批时间:' : '登记时间:' }}
</span>
<span class="info-value value-font">
{{ items.node_sort === '0' ? items.create_time : items.update_time }}
</span>
</div>
<div v-if="(items.node_sort !== '0' || items.node_name === '系统') && items.approval_result === '2'"
class="follow-item">
<span class="follow-info-label label-font">
驳回原因:
</span>
<span class="info-value value-font">
{{ items.extra_attribution.remark }}
</span>
</div>
<div
v-if="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>
<span class="info-value value-font">
{{ items.extra_attribution.banned_text }}
</span>
</div>
<div 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="preview-btn" @click.stop="previewRemark(items.extra_attribution.remark)">
<i class="el-icon-view"></i>
点击查看大图
</span>
</div>
<div
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="preview-btn"
@click.stop="previewRemark(items.extra_attribution.remark)"
>
<i class="el-icon-view"></i>
点击查看大图
</span>
</div>
<div
class="remark-value"
v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')"
></div>
<div class="remark-value"
v-html="formatImg(items.extra_attribution && items.extra_attribution.remark ? items.extra_attribution.remark : '')">
</div>
</div>
</template>
</el-step>
</el-steps>
</div>
</el-collapse-transition>
</div>
</div>
<div v-else class="noContent">
<noContent />
</div>
</template>
</el-step>
</el-steps>
</div>
</el-collapse-transition>
</div>
</div>
<el-dialog
:visible.sync="dialogRemarkVisible"
append-to-body
title="查看大图"
custom-class="remake-dialog"
>
<div class="remake-box">
<div v-html="dialogRemake"></div>
</div>
</el-dialog>
<!-- 重新提交 -->
<resubmitReport
v-if="showResubmitReport"
:report-info="reportInfo"
:show.sync="showResubmitReport"
@updateReportList="filterChange"
/>
<!-- 审批 -->
<approvalTask
v-if="isApproval"
:show.sync="isApproval"
:report-info="reportInfo"
@updateReportList="filterChange"
/>
<div v-else class="noContent">
<noContent />
</div>
</div>
</template>
<script>
import { searchcondition, reportIndex, reportCancel, 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/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi3 from '@/assets/icon/shenpi3.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
import noContent from '@/components/noContent.vue'
export default {
name: 'report',
computed: {
...mapState('game', ['accountSelect']),
...mapState('user', ['cser_id','cser_name'])
<el-dialog :visible.sync="dialogRemarkVisible" append-to-body title="查看大图" custom-class="remake-dialog">
<div class="remake-box">
<div v-html="dialogRemake"></div>
</div>
</el-dialog>
<!-- 重新提交 -->
<resubmitReport v-if="showResubmitReport" :report-info="reportInfo" :show.sync="showResubmitReport"
@updateReportList="filterChange" />
<!-- 审批 -->
<approvalTask v-if="isApproval" :show.sync="isApproval" :report-info="reportInfo"
@updateReportList="filterChange" />
</div>
</template>
<script>
import { searchcondition, reportIndex, reportCancel, 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 shenpi2 from '@/assets/icon/svg/shenpi2.svg'
import shenpi3 from '@/assets/icon/svg/shenpi3.svg'
import shenpi4 from '@/assets/icon/svg/shenpi4.svg'
import shenpi5 from '@/assets/icon/svg/shenpi5.svg'
import noContent from '@/components/noContent.vue'
export default {
name: 'report',
computed: {
...mapState('game', ['accountSelect']),
...mapState('user', ['cser_id', 'cser_name'])
},
watch: {
accountSelect(newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) {
this.filterChange()
}
}
},
components: {
resubmitReport,
approvalTask,
noContent
},
data() {
return {
// 审批状态图标
shenpi1,
shenpi2,
shenpi3,
shenpi4,
shenpi5,
reportForm: {
customer_id: '',
member_id: '',
role_id: '',
username: '',
role_name: '',
register_type: 1,
approval_status: ''
},
isApproval: false,
register_type_list: [
{ value: 2, label: '玩家登记' },
{ value: 1, label: '客服登记' }
],
reportInfo: {},
pageInfo: {
page: 1,
page_size: 20
},
showResubmitReport: false,
reportList: [],
isMoreRecord: false,
approvalList: [],
dialogRemarkVisible: false,
dialogRemake: '',
formatNumber: formatNumber,
taskTypeList: []
}
},
mounted() {
// this.request_register_type()
this.requstApprovalList()
this.filterChange()
},
methods: {
resubmitReport(item) {
this.reportInfo = item
this.showResubmitReport = true
},
// 审批
resubmitReportApproval(item) {
this.reportInfo = item
this.isApproval = true
},
filterChange() {
this.pageInfo.page = 1
this.reportList = []
this.isMoreRecord = true
this.reportIndex()
},
async requstApprovalList() {
const data = {
type: 'dictionaries',
table_name: 'zs_refund_request',
field_name: 'approval_status'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.approvalList = res.data.data
}
},
watch: {
accountSelect(newVal,oldVal){
if (newVal && newVal !== "" && newVal !== oldVal) {
this.filterChange()
async request_register_type() {
const data = {
type: 'dictionaries',
table_name: 'zs_report_request',
field_name: 'register_type'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.register_type_list = res.data.data
}
},
previewRemark(remark) {
this.dialogRemake = remark
this.dialogRemarkVisible = true
},
async reportProcess(item, index) {
console.log(item.current, 'item')
item.showStep = !item.showStep
if (item.reportProcessList.length === 0) {
const res = await reportProcess({ id: item.id })
item.reportProcessList = res.data.data
res.data.data.map((items) => {
if (items.approval_result !== '0' && items.approval_result !== '2') {
item.current += 1
}
})
this.$forceUpdate()
}
this.$forceUpdate()
},
paperScroll() {
this.requestNextPage()
},
components: {
resubmitReport,
approvalTask,
noContent
requestNextPage(pageInfo) {
this.pageInfo.page++
this.reportIndex()
},
data() {
return {
// 审批状态图标
shenpi1,
shenpi2,
shenpi3,
shenpi4,
shenpi5,
reportForm: {
customer_id: '',
member_id: '',
role_id: '',
username: '',
role_name: '',
register_type: 1,
approval_status: ''
},
isApproval: false,
register_type_list: [
{ value: 2, label: '玩家登记' },
{ value: 1, label: '客服登记' }
],
reportInfo: {},
pageInfo: {
page: 1,
page_size: 20
},
showResubmitReport: false,
reportList: [],
isMoreRecord: false,
approvalList: [],
dialogRemarkVisible: false,
dialogRemake: '',
formatNumber: formatNumber,
taskTypeList: []
handleCurrentChange(val) {
this.pageInfo.page = val
},
switchStateTag(status) {
switch (status) {
case '0':
return 'unhandle'
case '1':
return 'handled'
case '2':
return 'sendFail'
}
},
mounted() {
// this.request_register_type()
this.requstApprovalList()
this.filterChange()
formatImg(html) {
if (html) {
return html.replaceAll(/<img/g, '<img style="max-width:100px;"')
}
return html
},
methods: {
resubmitReport(item) {
this.reportInfo = item
this.showResubmitReport = true
},
// 审批
resubmitReportApproval(item) {
this.reportInfo = item
this.isApproval = true
},
filterChange() {
this.pageInfo.page = 1
this.reportList = []
this.isMoreRecord = true
this.reportIndex()
},
async requstApprovalList() {
const data = {
type: 'dictionaries',
table_name: 'zs_refund_request',
field_name: 'approval_status'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.approvalList = res.data.data
}
},
async request_register_type() {
const data = {
type: 'dictionaries',
table_name: 'zs_report_request',
field_name: 'register_type'
}
const res = await searchcondition(data)
if (res.status_code === 1) {
this.register_type_list = res.data.data
}
},
previewRemark(remark) {
this.dialogRemake = remark
this.dialogRemarkVisible = true
},
async reportProcess(item, index) {
console.log(item.current, 'item')
item.showStep = !item.showStep
if (item.reportProcessList.length === 0) {
const res = await reportProcess({ id: item.id })
item.reportProcessList = res.data.data
res.data.data.map((items) => {
if (items.approval_result !== '0' && items.approval_result !== '2') {
item.current += 1
switchStateText(status) {
switch (status) {
case '0':
return '待审批'
case '1':
return '通过'
case '2':
return '驳回'
}
},
handleReport(item) {
this.$confirm('确定要撤销该申请么?', '确认提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
console.log(1231)
const data = {
id: item.id,
user_id: this.userInfo.id,
user_name: this.userInfo.username
}
reportCancel(data).then(res => {
if (res.status_code === 1) {
this.$message({
type: 'success',
message: '撤销成功!'
})
this.filterChange()
}
})
this.$forceUpdate()
}
this.$forceUpdate()
},
paperScroll() {
this.requestNextPage()
},
requestNextPage(pageInfo) {
this.pageInfo.page++
this.reportIndex()
},
handleCurrentChange(val) {
this.pageInfo.page = val
},
switchStateTag(status) {
switch (status) {
case '0':
return 'unhandle'
case '1':
return 'handled'
case '2':
return 'sendFail'
}
},
formatImg(html) {
if (html) {
return html.replaceAll(/<img/g, '<img style="max-width:100px;"')
}
return html
},
switchStateText(status) {
switch (status) {
case '0':
return '待审批'
case '1':
return '通过'
case '2':
return '驳回'
}
},
handleReport(item) {
this.$confirm('确定要撤销该申请么?', '确认提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
console.log(1231)
const data = {
id: item.id,
user_id: this.userInfo.id,
user_name: this.userInfo.username
}
reportCancel(data).then(res => {
if (res.status_code === 1) {
this.$message({
type: 'success',
message: '撤销成功!'
})
this.filterChange()
}
})
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
})
},
// 举报列表
async reportIndex() {
if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!')
return false
}
if (this.pageInfo.page == 1) {
this.reportList = []
}
const { username, role_name, approval_status, register_type } = this.reportForm
// const { id } = this.userInfo
const data = {
username,
role_name,
approval_status,
// customer_id: id,
member_id: this.accountSelect,
register_type,
...this.pageInfo
}
const res = await reportIndex(data)
if (this.pageInfo.page == 1) {
this.reportList = res.data.data
} else {
this.reportList = removeDp(this.reportList, res.data.data, 'id')
}
if (this.reportList.length > 0) {
this.reportList.map((item) => {
item.showStep = false
item.current = 0
item.reportProcessList = []
.catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
} else {
this.reportList = []
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
})
},
// 举报列表
async reportIndex() {
if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!')
return false
}
if (this.pageInfo.page == 1) {
this.reportList = []
}
const { username, role_name, approval_status, register_type } = this.reportForm
// const { id } = this.userInfo
const data = {
username,
role_name,
approval_status,
// customer_id: id,
member_id: this.accountSelect,
register_type,
...this.pageInfo
}
const res = await reportIndex(data)
if (this.pageInfo.page == 1) {
this.reportList = res.data.data
} else {
this.reportList = removeDp(this.reportList, res.data.data, 'id')
}
if (this.reportList.length > 0) {
this.reportList.map((item) => {
item.showStep = false
item.current = 0
item.reportProcessList = []
})
} else {
this.reportList = []
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
if (res.data.data.length < 20) {
this.isMoreRecord = false
} else {
this.isMoreRecord = true
}
}
}
</script>
<style lang="scss" scoped>
.reportList {
}
</script>
<style lang="scss" scoped>
.reportList {
width: 100%;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
.taskForm {
::v-deep .el-form-item {
margin-bottom: 10px;
}
}
// 会话筛选
.filterChat {
width: 100%;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
.taskForm {
::v-deep .el-form-item {
margin-bottom: 10px;
}
margin-top: 20px;
::v-deep .el-button {
margin-left: 6px;
margin-right: 0 !important;
}
.btnListScroll {
margin-bottom: 10px;
}
.chatIcon {
font-size: 20px;
margin-left: 5px;
margin-top: 10px;
cursor: pointer;
}
// 会话筛选
.filterChat {
.itemActive {
background: #e1fff0;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3491FA;
border: none;
}
.btnList {
width: 100%;
margin-top: 20px;
::v-deep .el-button {
margin-left: 6px;
margin-right: 0 !important;
}
.btnListScroll {
margin-bottom: 10px;
}
.chatIcon {
font-size: 20px;
margin-left: 5px;
margin-top: 10px;
cursor: pointer;
}
.itemActive {
background: #e1fff0;
margin-bottom: 10px;
overflow: auto;
.btnItem {
border: none;
background: #eef0f4;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3491FA ;
border: none;
}
.btnList {
width: 100%;
margin-bottom: 10px;
overflow: auto;
.btnItem {
border: none;
background: #eef0f4;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #6e7073;
}
color: #6e7073;
}
}
.mailListScroll {
}
.mailListScroll {
width: 100%;
height: auto;
.scrollMain {
width: 100%;
height: auto;
.scrollMain {
width: 100%;
height: auto;
margin-bottom: 40px;
.reportContent {
width: calc(100% - 10px);
}
//举报申请
.reportItem {
padding: 10px;
background: #f7f8fa;
margin-bottom: 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
p {
line-height: 25px;
}
.reportItemLeft {
width: 100%;
.label {
font-weight: 400;
font-size: 14px;
color: #86909c;
line-height: 20px;
margin-right: 10px;
}
.value {
font-weight: 400;
font-size: 14px;
color: #333333;
line-height: 20px;
text-align: left;
}
}
.reportItemRight {
height: 100%;
.icon {
font-size: 50px;
}
}
margin-bottom: 40px;
.reportContent {
width: calc(100% - 10px);
}
//举报申请
.reportItem {
padding: 10px;
background: #f7f8fa;
margin-bottom: 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
p {
line-height: 25px;
}
.chatListItem {
.reportItemLeft {
width: 100%;
height: 68px;
padding: 3px 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
.left {
color: #333333;
.label {
font-weight: 400;
font-size: 14px;
font-weight: 500;
color: #86909c;
line-height: 20px;
margin-right: 10px;
}
.info,
.top {
font-size: 14px;
.value {
font-weight: 400;
}
.bottom {
font-size: 14px;
color: #999999;
color: #333333;
line-height: 20px;
text-align: left;
}
.right {
font-size: 12px;
font-weight: 400;
}
.reportItemRight {
height: 100%;
.icon {
font-size: 50px;
}
}
}
.chatListItemActive {
background: #e4fff1 !important;
}
.chatListItem:hover {
background: #e4fff1 !important;
.chatListItem {
width: 100%;
height: 68px;
padding: 3px 10px;
position: relative;
cursor: pointer;
color: #333333;
font-size: 14px;
font-weight: 500;
.left {
color: #333333;
font-size: 14px;
font-weight: 500;
}
.info,
.top {
font-size: 14px;
font-weight: 400;
}
.bottom {
font-size: 14px;
color: #999999;
}
.right {
font-size: 12px;
font-weight: 400;
}
}
}
}
// 掌游的样式
::v-deep.el-step .el-step__line {
width: 1px;
}
::v-deep .el-step > .is-success {
color: #3491FA ;
border-color: #3491FA ;
.el-step__line {
background-color: #e5e6eb;
}
}
::v-deep .el-step__main > .is-success {
color: #3491FA ;
}
::v-deep .el-step > .is-process {
color: #3491FA ;
border-color: #3491FA ;
.el-step__line {
background-color: #e5e6eb;
.chatListItemActive {
background: #e4fff1 !important;
}
}
::v-deep .el-step__main > .is-process {
color: #3491FA ;
}
.form-item-btn {
margin: 0 0 0 20px;
}
.audit-label {
font-size: 14px;
font-weight: 800;
margin: 0 0 10px 0;
}
.remark-label {
color: #949fb0;
font-size: 14px;
}
.preview-btn {
cursor: pointer;
font-size: 14px;
color: #3491FA ;
margin: 0 0 0 10px;
i {
margin: 0 5px 0 0;
.chatListItem:hover {
background: #e4fff1 !important;
}
}
.remark-value {
min-height: 100px;
margin: 10px 0 0 40px;
padding: 6px 12px;
border: 1px solid #d9d9d9;
border-radius: 4px;
cursor: not-allowed;
color: #333;
}
.flex-box {
display: flex;
.remark-lebel {
width: 50px;
text-align: right;
}
}
// 掌游的样式
::v-deep.el-step .el-step__line {
width: 1px;
}
::v-deep .el-step>.is-success {
color: #3491FA;
border-color: #3491FA;
.el-step__line {
background-color: #e5e6eb;
}
.refund-flow-drawer {
position: fixed;
top: 0;
right: 700px;
}
::v-deep .el-step__main>.is-success {
color: #3491FA;
}
::v-deep .el-step>.is-process {
color: #3491FA;
border-color: #3491FA;
.el-step__line {
background-color: #e5e6eb;
}
.btm-btn-box {
position: fixed;
bottom: 20px;
width: 560px;
height: 32px;
}
::v-deep .el-step__main>.is-process {
color: #3491FA;
}
.form-item-btn {
margin: 0 0 0 20px;
}
.audit-label {
font-size: 14px;
font-weight: 800;
margin: 0 0 10px 0;
}
.remark-label {
color: #949fb0;
font-size: 14px;
}
.preview-btn {
cursor: pointer;
font-size: 14px;
color: #3491FA;
margin: 0 0 0 10px;
i {
margin: 0 5px 0 0;
}
.audit-state {
}
.remark-value {
min-height: 100px;
margin: 10px 0 0 40px;
padding: 6px 12px;
border: 1px solid #d9d9d9;
border-radius: 4px;
cursor: not-allowed;
color: #333;
}
.flex-box {
display: flex;
.remark-lebel {
width: 50px;
height: 50px;
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
z-index: 100;
.audit-state-stamp {
font-size: 50px;
}
text-align: right;
}
.info-item {
width: 45%;
display: flex;
height: 18px;
margin: 0 0 12px 0;
}
.refund-flow-drawer {
position: fixed;
top: 0;
right: 700px;
}
.btm-btn-box {
position: fixed;
bottom: 20px;
width: 560px;
height: 32px;
}
.audit-state {
width: 50px;
height: 50px;
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
z-index: 100;
.audit-state-stamp {
font-size: 50px;
}
.info-item-pic {
width: 100%;
min-height: 96px;
max-height: 192px;
}
.info-item {
width: 45%;
display: flex;
height: 18px;
margin: 0 0 12px 0;
}
.info-item-pic {
width: 100%;
min-height: 96px;
max-height: 192px;
display: flex;
.img-list {
width: 464px;
display: flex;
.img-list {
width: 464px;
display: flex;
flex-wrap: wrap;
&-item {
flex-wrap: wrap;
&-item {
width: 80px;
height: 80px;
border-radius: 4px;
overflow: hidden;
margin: 0 10px 10px 0;
position: relative;
.preview-pic {
width: 80px;
height: 80px;
border-radius: 4px;
overflow: hidden;
margin: 0 10px 10px 0;
position: relative;
.preview-pic {
width: 80px;
height: 80px;
background: rgba(0, 0, 0, 0.5);
position: absolute;
top: 0;
left: 0;
z-index: -1;
text-align: center;
line-height: 80px;
.preview-icon {
font-size: 16px;
color: #fff;
cursor: pointer;
}
}
.screenshot {
object-fit: center;
width: 80px;
height: 80px;
}
&:hover > .preview-pic {
z-index: 100;
background: rgba(0, 0, 0, 0.5);
position: absolute;
top: 0;
left: 0;
z-index: -1;
text-align: center;
line-height: 80px;
.preview-icon {
font-size: 16px;
color: #fff;
cursor: pointer;
}
}
.screenshot {
object-fit: center;
width: 80px;
height: 80px;
}
&:hover>.preview-pic {
z-index: 100;
}
}
}
.flex-btn {
display: flex;
justify-content: space-between;
}
.info-label {
// width: 90px;
// text-align: right;
display: block;
margin: 0 10px 0 0;
font-size: 14px;
color: #949fb0;
}
.info-value {
display: block;
font-size: 14px;
color: #333;
}
.card-style {
background: #f2f2f7;
border-radius: 4px;
}
.trans-follow-1 {
width: 300px;
min-height: fit-content;
margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px;
position: relative;
.collapse-btn {
position: absolute;
top: 20px;
right: 15px;
}
.follow-item-remark {
width: 100%;
line-height: 20px;
margin: 0 0 12px 0;
}
.info-value-color {
color: #3491FA ;
margin-left: 5px;
}
}
.flex-btn {
display: flex;
justify-content: space-between;
}
.info-label {
// width: 90px;
// text-align: right;
display: block;
margin: 0 10px 0 0;
font-size: 14px;
color: #949fb0;
}
.info-value {
display: block;
font-size: 14px;
color: #333;
}
.card-style {
background: #f2f2f7;
border-radius: 4px;
}
.trans-follow-1 {
width: 300px;
min-height: fit-content;
margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px;
position: relative;
.collapse-btn {
position: absolute;
top: 20px;
right: 15px;
}
.follow-item {
min-height: 20px;
.follow-item-remark {
width: 100%;
line-height: 20px;
margin: 0 0 12px 0;
display: flex;
.label-left {
width: 90px;
text-align: right;
}
}
.left-label {
width: 60px;
}
.follow-info-label {
white-space: nowrap;
text-align: left;
margin: 0 10px 0 0;
}
.info-value {
font-size: 14px;
color: #333;
.info-value-color {
color: #3491FA;
margin-left: 5px;
}
.label-font {
font-size: 14px;
color: #949fb0;
}
.follow-item {
min-height: 20px;
line-height: 20px;
margin: 0 0 12px 0;
display: flex;
.label-left {
width: 90px;
text-align: right;
}
.info-item-remark {
width: 100%;
padding: 0 0 12px 0;
line-height: 20px;
.info-label {
display: block;
}
.info-value {
display: block;
width: 440px;
}
}
.left-label {
width: 60px;
}
.follow-info-label {
white-space: nowrap;
text-align: left;
margin: 0 10px 0 0;
}
.info-value {
font-size: 14px;
color: #333;
}
.label-font {
font-size: 14px;
color: #949fb0;
}
.info-item-remark {
width: 100%;
padding: 0 0 12px 0;
line-height: 20px;
.info-label {
display: block;
}
.reportProcessList {
margin-bottom: 20px;
margin-top: 20px;
.info-value {
display: block;
width: 440px;
}
</style>
\ No newline at end of file
}
.reportProcessList {
margin-bottom: 20px;
margin-top: 20px;
}
</style>
\ No newline at end of file
......@@ -3,162 +3,162 @@
<div class="content">
<el-tabs v-model="activeTypeStr" @tab-click="handleTabClick" class="order-tabs">
<el-tab-pane v-for="(item, index) in orderTypeList" :key="index" :label="item.label" :name="String(item.value)">
</el-tab-pane>
</el-tabs>
<!-- 订单的一些信息 -->
<div v-show="activeType !== 3" class="order-info-content" v-scroll="requestOrderList">
<div class="orderMoney rowFlex flexWarp">
<div class="orderMoneyItem rowFlex columnCenter" style="margin-right:20px;">
<span>总支付金额:</span>
<p>¥{{ orderInfo.total_amount }}</p>
</div>
<div class="orderMoneyItem rowFlex columnCenter" style="margin-right:20px;">
<span>实际充值金额:</span>
<p>¥{{ orderInfo.total_real_amount || 0 }}</p>
</div>
<div class="orderMoneyItem rowFlex columnCenter" style="margin-right:20px;">
<span>退款金额:</span>
<p>¥{{ orderInfo.total_refund_amount || 0 }}</p>
</div>
<div class="orderMoneyItem rowFlex columnCenter">
<span>订单总数:</span>
<p>{{ orderInfo.total }}</p>
</div>
<!-- 王鑫说先隐藏 -->
<div v-if="false" class="orderMoneyItem rowFlex columnCenter">
<span>今天支付金额:</span>
<p>¥{{ totalOrder.total }}</p>
</div>
<div v-if="false" class="orderMoneyItem rowFlex columnCenter">
<span>订单数:</span>
<p>{{ totalOrder.num }}</p>
<!-- 订单的一些信息 -->
<div v-show="activeType !== 3" class="order-info-content" v-scroll="requestOrderList">
<div class="orderMoney rowFlex flexWarp">
<div class="orderMoneyItem rowFlex columnCenter" style="margin-right:20px;">
<span>总支付金额:</span>
<p>¥{{ orderInfo.total_amount }}</p>
</div>
<div class="orderMoneyItem rowFlex columnCenter" style="margin-right:20px;">
<span>实际充值金额:</span>
<p>¥{{ orderInfo.total_real_amount || 0 }}</p>
</div>
<div class="orderMoneyItem rowFlex columnCenter" style="margin-right:20px;">
<span>退款金额:</span>
<p>¥{{ orderInfo.total_refund_amount || 0 }}</p>
</div>
<div class="orderMoneyItem rowFlex columnCenter">
<span>订单总数:</span>
<p>{{ orderInfo.total }}</p>
</div>
<!-- 王鑫说先隐藏 -->
<div v-if="false" class="orderMoneyItem rowFlex columnCenter">
<span>今天支付金额:</span>
<p>¥{{ totalOrder.total }}</p>
</div>
<div v-if="false" class="orderMoneyItem rowFlex columnCenter">
<span>订单数:</span>
<p>{{ totalOrder.num }}</p>
</div>
</div>
<div class="filterList">
<el-form class="filterList" label-position="top">
<el-form-item label="订单号:">
<el-input v-model="inputValue" placeholder="请输入订单号/交易单号" prefix-icon="el-icon-search" style="width: 100%"
clearable @change="searchInput"></el-input>
</el-form-item>
<el-form-item label="支付方式:">
<el-select v-model="pay_type" collapse-tags multiple clearable placeholder="请选择支付方式"
style="width: 100%; margin-bottom: 10px" @change="payTypeResult">
<el-option v-for="item in payList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="下单时间:">
<selectDate :width="'100%'" :defaultValue="searchDate" @result="dateResult" />
</el-form-item>
<el-form-item label="角色名称:">
<searchSelect style="width: 100%" placeholder="请输入角色名称" @result="selectResult" />
</el-form-item>
</el-form>
</div>
<div class="orderDetailsScroll">
<div v-if="orderList.length > 0">
<div v-for="(item, index) in orderList" :key="index" class="orderDetails">
<div class="bridgeMain">
<p class="text">{{ item.pay_type_text || item.pay_type }}</p>
<img :src="sanjiaoxing" class="bridge" />
</div>
</div>
<div class="filterList">
<el-form class="filterList" label-position="top">
<el-form-item label="订单号:">
<el-input v-model="inputValue" placeholder="请输入订单号/交易单号" prefix-icon="el-icon-search"
style="width: 100%" clearable @change="searchInput"></el-input>
</el-form-item>
<el-form-item label="支付方式:">
<el-select v-model="pay_type" collapse-tags multiple clearable placeholder="请选择支付方式"
style="width: 100%; margin-bottom: 10px" @change="payTypeResult">
<el-option v-for="item in payList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="下单时间:">
<selectDate :width="'100%'" :defaultValue="searchDate" @result="dateResult" />
</el-form-item>
<el-form-item label="角色名称:">
<searchSelect style="width: 100%" placeholder="请输入角色名称" @result="selectResult" />
</el-form-item>
</el-form>
</div>
<div class="orderDetailsScroll">
<div v-if="orderList.length > 0">
<div v-for="(item, index) in orderList" :key="index" class="orderDetails">
<div class="bridgeMain">
<p class="text">{{ item.pay_type_text || item.pay_type }}</p>
<img :src="sanjiaoxing" class="bridge" />
</div>
<div class="orderDetailsTitle">
<!-- || item.pay_type=='抖音支付'去掉抖音支付补单操作 -->
<div class="money rowFlex spaceBetween">
<p class="text">订单金额:{{ item.amount }}</p>
<div class="btns">
<span class="btn"
:class="[item.status == '已支付' ? 'btnsuccess' : '', item.status == '待支付' ? 'btnnot' : '']">{{
item.status }}</span>
<span
v-if="item.status == '待支付' && (item.pay_type == '米大师支付' || item.pay_type === '应用宝米大师支付') && !item.is_request"
class="btn btnsuccess" @click="completionOrder(1, item.order_id, item)">补单</span>
<span v-if="item.callback_status.indexOf('失败') != -1 && !item.is_request" class="btn"
@click="completionOrder(2, item.order_id, item)">补回调</span>
<span v-if="!item.is_request" class="btn btnRefund" @click="refundMoney(item)">退款申请</span>
</div>
</div>
<p class="text">下单时间:{{ item.order_time }}</p>
</div>
<div class="orderDetailsList">
<el-collapse v-model="collapseValue" @change="handleChange">
<el-collapse-item :name="item.order_id">
<template slot="title">
<p>订单号:{{ item.order_id }}</p>
<!-- <el-popover placement="top" trigger="hover" :content="item.order_id">
<el-button slot="reference" type="text" @click.stop="">复制</el-button>
</el-popover> -->
</template>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">交易单号:</span>
<p class="text">{{ item.trad_no }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">订单号:</span>
<p class="text">{{ item.order_id }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">游戏名称:</span>
<p class="text">{{ item.game_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">区服:</span>
<p class="text">{{ item.server_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">角色名:</span>
<p class="text">{{ item.role_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">商品名称:</span>
<p class="text">{{ item.product_name || '' }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">支付方式:</span>
<p class="text">{{ item.pay_type }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">回调状态:</span>
<p v-if="item.callback_status == 1" class="text"><span class="dian2"></span>待回调</p>
<p v-if="item.callback_status == 2" class="text"><span class="dian"></span>回调成功</p>
<p v-if="item.callback_status == 3" class="text"><span class="dianFail"></span>通知CP方回调失败</p>
</div>
</div>
</el-collapse-item>
</el-collapse>
<div class="orderDetailsTitle">
<!-- || item.pay_type=='抖音支付'去掉抖音支付补单操作 -->
<div class="money rowFlex spaceBetween">
<p class="text">订单金额:{{ item.amount }}</p>
<div class="btns">
<span class="btn"
:class="[item.status == '已支付' ? 'btnsuccess' : '', item.status == '待支付' ? 'btnnot' : '']">{{
item.status }}</span>
<span
v-if="item.status == '待支付' && (item.pay_type == '米大师支付' || item.pay_type === '应用宝米大师支付') && !item.is_request"
class="btn btnsuccess" @click="completionOrder(1, item.order_id, item)">补单</span>
<span v-if="item.callback_status.indexOf('失败') != -1 && !item.is_request" class="btn"
@click="completionOrder(2, item.order_id, item)">补回调</span>
<span v-if="!item.is_request" class="btn btnRefund" @click="refundMoney(item)">退款申请</span>
</div>
</div>
<p class="text">下单时间:{{ item.order_time }}</p>
</div>
<div v-else-if="!loading && orderList.length == 0" class="noContent rowFlex allCenter">
<noContent />
<div class="orderDetailsList">
<el-collapse v-model="collapseValue" @change="handleChange">
<el-collapse-item :name="item.order_id">
<template slot="title">
<p>订单号:{{ item.order_id }}</p>
<!-- <el-popover placement="top" trigger="hover" :content="item.order_id">
<el-button slot="reference" type="text" @click.stop="">复制</el-button>
</el-popover> -->
</template>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">交易单号:</span>
<p class="text">{{ item.trad_no }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">订单号:</span>
<p class="text">{{ item.order_id }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">游戏名称:</span>
<p class="text">{{ item.game_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">区服:</span>
<p class="text">{{ item.server_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">角色名:</span>
<p class="text">{{ item.role_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">商品名称:</span>
<p class="text">{{ item.product_name || '' }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">支付方式:</span>
<p class="text">{{ item.pay_type }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">回调状态:</span>
<p v-if="item.callback_status == 1" class="text"><span class="dian2"></span>待回调</p>
<p v-if="item.callback_status == 2" class="text"><span class="dian"></span>回调成功</p>
<p v-if="item.callback_status == 3" class="text"><span class="dianFail"></span>通知CP方回调失败</p>
</div>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
</div>
<!-- 退款记录的搜做 -->
<div v-if="activeType == 3" class="refundLog">
<refundLog v-if="activeType == 3" :active-type="activeType" />
<div v-else-if="!loading && orderList.length == 0" class="noContent rowFlex allCenter">
<noContent />
</div>
<!-- 订单列表 -->
</div>
</div>
<!-- 退款记录的搜做 -->
<div v-if="activeType == 3" class="refundLog">
<refundLog v-if="activeType == 3" :active-type="activeType" />
</div>
<!-- 订单列表 -->
</div>
<!-- 退款订单的申请 -->
......@@ -174,7 +174,7 @@ import searchSelect from './components/order/searchUser.vue'
import orderRefund from './components/order/orderRefund.vue'
import refundLog from './components/order/refundLog.vue'
import { throttle } from '@/utils'
import sanjiaoxing from '@/assets/icon/sanjiaoxing.svg'
import sanjiaoxing from '@/assets/icon/svg/sanjiaoxing.svg'
import noContent from '@/components/noContent.vue'
export default {
name: 'orderList',
......@@ -402,7 +402,7 @@ export default {
})
},
requestOrderList: throttle(function (msg) {
console.log(12313, '开始展示',this.isloadMore)
console.log(12313, '开始展示', this.isloadMore)
if (this.accountSelect == '') {
this.$message.warning('暂无关联的账号,请先去关联账号!')
return false
......@@ -489,16 +489,19 @@ export default {
height: 100%;
overflow: auto;
overflow-x: hidden;
::v-deep .el-tabs{
::v-deep .el-tabs {
height: auto;
}
::v-deep .el-tab-pane{
::v-deep .el-tab-pane {
height: auto;
}
::v-deep .el-tabs__content{
::v-deep .el-tabs__content {
height: auto !important;
}
.order-info-content {
width: 100%;
height: calc(100% - 60px);
......@@ -775,7 +778,7 @@ export default {
margin-bottom: 15px;
}
::v-deep .el-tabs__item {
height: 40px;
......
......@@ -18,7 +18,8 @@
</el-tab-pane>
</el-tabs>
<!-- 运营任务 -->
<div class="taskListContent" v-if="taskForm.type !== 'user_task' && taskForm.type !== 'account_task'" v-scroll="paperScroll" >
<div class="taskListContent" v-if="taskForm.type !== 'user_task' && taskForm.type !== 'account_task'"
v-scroll="paperScroll">
<el-form ref="taskForm" :model="taskForm" class="taskForm" label-position="top" label-width="85px">
<!-- 运营任务 -->
<div v-if="taskForm.type == 1" class="taskFormItem">
......@@ -116,14 +117,14 @@
</span>
</p>
</div>
<div class="taskListScroll" v-loading="loading"
:class="taskForm.type != 1 ? 'taskListScrollActive' : ''">
<div class="taskListScroll" v-loading="loading" :class="taskForm.type != 1 ? 'taskListScrollActive' : ''">
<!-- 运营任务 -->
<div v-if="taskForm.type == 1" class="scrollMain">
<div v-for="(item, index) in taskList" :key="index" class="chatListItem columnCenter spaceBetween"
:class="item.id === taskDetails.id ? 'chatListItemActive' : ''" @click="selectTaskItem(item)">
<div class="top rowFlex spaceBetween">
<div v-if="item.username && item.username.split('\n') && item.username.split('\n').length > 0" class="value">
<div v-if="item.username && item.username.split('\n') && item.username.split('\n').length > 0"
class="value">
<div v-if="item.username.split('\n').length <= 1" class="rowFlex columnCenter">
<div v-for="(items, indexs) in item.username.split('\n')" :key="indexs"
class="rowFlex columnCenter userInfoStyle">
......@@ -139,7 +140,9 @@
<span class="textHidden" style="max-width:150px;">{{ items }}</span>
</p>
</div>
<el-button slot="reference" type="text">{{ item.username && item.username.split("\n") && item.username.split("\n").length?item.username.split("\n").length : 0
<el-button slot="reference" type="text">{{ item.username &&
item.username.split("\n") &&
item.username.split("\n").length ?item.username.split("\n").length : 0
}}个</el-button>
</el-popover>
</div>
......@@ -156,8 +159,8 @@
k.value
==
item.plan_type).label ? taskTypeList.find((k) => k.value == item.plan_type).label :
""
}}</span>
""
}}</span>
</p>
<div class="right">¥{{ formatNumber(item.member_recharge) }}</div>
</div>
......@@ -168,9 +171,9 @@
<noContent v-if="taskList.length == 0" />
</div>
<!-- 用户任务 和 运营任务 -->
<div class="taskListContent" v-else-if="taskForm.type == 'user_task' || taskForm.type == 'account_task'">
<userTask :taskForm="taskForm" :activeType="taskForm.type" />
</div>
<div class="taskListContent" v-else-if="taskForm.type == 'user_task' || taskForm.type == 'account_task'">
<userTask :taskForm="taskForm" :activeType="taskForm.type" />
</div>
<taskDetails v-if="showTaskDetails" :show.sync="showTaskDetails" />
</div>
</template>
......@@ -188,17 +191,17 @@ import mainGameSelect from '@/components/mainGame.vue'
import { removeDp } from '@/utils/index'
import selectDate from '@/components/selectDate.vue'
import { formatNumber } from '@/utils/index'
import shenpi1 from '@/assets/icon/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi3 from '@/assets/icon/shenpi3.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
import shenpi1 from '@/assets/icon/svg/shenpi1.svg'
import shenpi2 from '@/assets/icon/svg/shenpi2.svg'
import shenpi3 from '@/assets/icon/svg/shenpi3.svg'
import shenpi4 from '@/assets/icon/svg/shenpi4.svg'
import shenpi5 from '@/assets/icon/svg/shenpi5.svg'
import noContent from '@/components/noContent.vue'
import userTask from './components/taskList/uesrTask.vue'
import taskDetails from './components/taskList/taskDetails.vue'
export default {
props: {
},
watch: {
accountSelect(newVal, oldVal) {
......@@ -387,7 +390,7 @@ export default {
} catch (error) {
console.error('❌ 企业微信 SDK 初始化失败:', error)
}
},
},
// 刷新任务数据
async refreshTaskData() {
try {
......@@ -415,13 +418,13 @@ export default {
this.typeList.forEach(item => {
// 重置红点数量
item.redNum = 0
// 根据任务类型设置红点数量
if (taskNum[item.type] && taskNum[item.type] > 0) {
item.redNum = taskNum[item.type]
}
})
this.$forceUpdate()
},
iconSort(type) {
......@@ -665,14 +668,17 @@ export default {
::v-deep .el-tabs {
height: auto;
}
.taskListContent {
width: 100%;
height: calc(100% - 40px);
overflow-y: auto;
}
.taskFormItem {
margin-top: 10px;
}
.taskForm {
::v-deep .el-form-item {
margin-bottom: 5px;
......@@ -754,11 +760,13 @@ export default {
.taskListScroll {
width: 100%;
.scrollMain {
width: 100%;
height: auto;
margin-bottom: 50px;
padding: 0 10px;
//举报申请
.reportItem {
padding: 10px;
......@@ -863,7 +871,7 @@ export default {
top: 12px !important;
right: -2px !important;
}
::v-deep .el-badge__content.is-dot {
top: 10px !important;
right: -2px !important;
......
......@@ -74,5 +74,58 @@ module.exports = defineConfig({
// }
}
}
},
chainWebpack(config) {
// set svg-sprite-loader
config.module.rule('svg').exclude.add(resolve('src/assets/icon/svg')).end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/assets/icon/svg'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
config.when(process.env.NODE_ENV !== 'development', (config) => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [
{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}
])
.end()
config.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
// https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
config.optimization.runtimeChunk('single')
})
}
})
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论