From b8edd410b52672ac45748862562d069a5c1bd9d0 Mon Sep 17 00:00:00 2001 From: spylecym <1262965753@qq.com> Date: Wed, 2 Aug 2023 15:25:16 +0800 Subject: [PATCH 01/12] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E5=BA=95?= =?UTF-8?q?=E9=83=A8=E5=A4=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/site/css/common.css | 670 +++++++++++++++++++++++----------- public/site/css/rem.css | 3 + public/site/en/about.html | 8 +- public/site/en/download.html | 8 +- public/site/en/help.html | 11 +- public/site/en/index.html | 8 +- public/site/en/log.html | 8 +- public/site/en/price.html | 8 +- public/site/en/product.html | 8 +- public/site/en/solutions.html | 8 +- public/site/img/beian.png | Bin 0 -> 1286 bytes public/site/zh/about.html | 8 +- public/site/zh/download.html | 8 +- public/site/zh/help.html | 8 +- public/site/zh/index.html | 8 +- public/site/zh/log.html | 8 +- public/site/zh/price.html | 8 +- public/site/zh/product.html | 8 +- public/site/zh/solutions.html | 8 +- 19 files changed, 555 insertions(+), 249 deletions(-) create mode 100644 public/site/img/beian.png diff --git a/public/site/css/common.css b/public/site/css/common.css index c0aa56d53..53b08bc60 100644 --- a/public/site/css/common.css +++ b/public/site/css/common.css @@ -6,225 +6,272 @@ body { font-style: normal; font-size: 16px; } + * { margin: 0; padding: 0; } -ul,ol{ + +ul, +ol { list-style: none; } -i{ + +i { font-style: normal; } -a{ + +a { color: var(--text-color); text-decoration: none; cursor: pointer; } + img { max-width: 100%; height: auto; display: block; } -.theme_dark{ + +.theme_dark { display: none; } -.theme_light{ + +.theme_light { display: block; } + /* 字体样式 */ -.txt-4001416{ +.txt-4001416 { font-weight: 400; font-size: 14px; line-height: 16px; } -.txt-4001418{ + +.txt-4001418 { font-weight: 400; font-size: 14px; line-height: 18px; } -.txt-4001516{ + +.txt-4001516 { font-weight: 400; font-size: 15px; line-height: 16px; } -.txt-4001520{ + +.txt-4001520 { font-weight: 400; font-size: 15px; line-height: 20px; } -.txt-4001524{ + +.txt-4001524 { font-weight: 400; font-size: 15px; line-height: 24px; } -.txt-4001616{ + +.txt-4001616 { font-weight: 400; font-size: 16px; line-height: 16px; } -.txt-4001620{ + +.txt-4001620 { font-weight: 400; font-size: 16px; line-height: 20px; } -.txt-4001624{ + +.txt-4001624 { font-weight: 400; font-size: 16px; line-height: 24px; } -.txt-4001630{ + +.txt-4001630 { font-weight: 400; font-size: 16px; line-height: 30px; } -.txt-4001822{ + +.txt-4001822 { font-weight: 400; font-size: 18px; line-height: 22px; } -.txt-4001824{ + +.txt-4001824 { font-weight: 400; font-size: 18px; line-height: 24px; } -.txt-4001830{ + +.txt-4001830 { font-weight: 400; font-size: 18px; line-height: 30px; } -.txt-4002025{ + +.txt-4002025 { font-weight: 400; font-size: 20px; line-height: 25px; } -.txt-4003645{ + +.txt-4003645 { font-weight: 400; font-size: 36px; line-height: 45px; } -.txt-5001616{ + +.txt-5001616 { font-weight: 500; font-size: 16px; line-height: 16px; } -.txt-5001624{ + +.txt-5001624 { font-weight: 500; font-size: 16px; line-height: 24px; } -.txt-5001528{ + +.txt-5001528 { font-weight: 500; font-size: 15px; line-height: 28px; } -.txt-5001628{ + +.txt-5001628 { font-weight: 500; font-size: 16px; line-height: 28px; } -.txt-5001822{ + +.txt-5001822 { font-weight: 500; font-size: 18px; line-height: 22px; } -.txt-5002016{ + +.txt-5002016 { font-weight: 500; font-size: 20px; line-height: 16px; } -.txt-5002024{ + +.txt-5002024 { font-weight: 500; font-size: 20px; line-height: 24px; } -.txt-5002025{ + +.txt-5002025 { font-weight: 500; font-size: 20px; line-height: 25px; } -.txt-5002228{ + +.txt-5002228 { font-weight: 500; font-size: 22px; line-height: 28px; } -.txt-5002835{ + +.txt-5002835 { font-weight: 500; font-size: 28px; line-height: 35px; } -.txt-5002430{ + +.txt-5002430 { font-weight: 500; font-size: 24px; line-height: 30px; } -.txt-5003636{ + +.txt-5003636 { font-weight: 500; font-size: 36px; line-height: 36px; } -.txt-5003645{ + +.txt-5003645 { font-weight: 500; font-size: 36px; line-height: 45px; } -.txt-5004455{ + +.txt-5004455 { font-weight: 500; font-size: 44px; line-height: 55px; } -.txt-6002025{ + +.txt-6002025 { font-weight: 600; font-size: 20px; line-height: 25px; } -.txt-6002430{ + +.txt-6002430 { font-weight: 600; font-size: 24px; line-height: 30px; } -.txt-6002835{ + +.txt-6002835 { font-weight: 600; font-size: 28px; line-height: 35px; } -.txt-6003645{ + +.txt-6003645 { font-weight: 600; font-size: 36px; line-height: 45px; } -.txt-6003652{ + +.txt-6003652 { font-weight: 600; font-size: 36px; line-height: 52px; } -.txt-6005670{ + +.txt-6005670 { font-weight: 600; font-size: 56px; line-height: 70px; } -.txt-6007290{ + +.txt-6007290 { font-weight: 600; font-size: 72px; line-height: 90px; } -.txt-7002027{ + +.txt-7002027 { font-weight: 700; font-size: 20px; line-height: 27px; } -.txt-7003240{ + +.txt-7003240 { font-weight: 700; font-size: 32px; line-height: 40px; } -.txt-7003645{ + +.txt-7003645 { font-weight: 700; font-size: 36px; line-height: 45px; } + /* button样式 */ -.btn{ +.btn { padding: 10px 16px; border-radius: 8px; border: 1px solid transparent; @@ -234,50 +281,59 @@ img { display: inline-block; white-space: nowrap; text-align: center; - transition: all .2s cubic-bezier(.645,.045,.355,1); + transition: all .2s cubic-bezier(.645, .045, .355, 1); user-select: none; touch-action: manipulation; width: 100%; font-size: 16px; line-height: 18px; } -.btn-primary{ + +.btn-primary { background-color: var(--txt-theme-color); color: #fff; } -.btn-primary:hover{ + +.btn-primary:hover { background-color: var(--btn-hover-color); } -.btn-green{ + +.btn-green { color: var(--txt-theme-color); border-color: var(--txt-theme-color); background-color: transparent; } -.btn-green:hover{ + +.btn-green:hover { color: #fff; border-color: var(--txt-theme-color); background-color: var(--txt-theme-color); } -.btn-wwg{ + +.btn-wwg { color: #fff; border-color: #fff; background-color: var(--txt-theme-color); } -.btn-default{ + +.btn-default { color: var(--txt-gray-color); border-color: var(--border-color); background-color: transparent; } -.btn-default:hover{ + +.btn-default:hover { color: var(--txt-theme-color); border-color: var(--txt-theme-color); } -.btn-gw{ + +.btn-gw { color: var(--txt-theme-color); background-color: #fff; } + /* input样式 */ -.input{ +.input { box-sizing: border-box; padding: 9px 13px; height: 44px; @@ -288,15 +344,18 @@ img { transition: all 0.2s; font-size: 15px; } -.input::placeholder{ + +.input::placeholder { color: var(--txt-gray-color) !important; opacity: .5; } + .input:focus { - outline:none; + outline: none; border: 1px solid var(--txt-theme-color); } -.textarea{ + +.textarea { box-sizing: border-box; padding: 9px 13px; color: var(--text-color); @@ -306,19 +365,23 @@ img { transition: all 0.2s; font-size: 15px; } -.textarea::placeholder{ + +.textarea::placeholder { color: var(--txt-gray-color) !important; opacity: .5; } + .textarea:focus { - outline:none; + outline: none; border: 1px solid var(--txt-theme-color); } -.search-form{ + +.search-form { display: none; position: relative; } -.search-input{ + +.search-input { box-sizing: border-box; display: flex; flex-direction: row; @@ -333,15 +396,18 @@ img { transition: all 0.2s; font-size: 15px; } -.search-input::placeholder{ + +.search-input::placeholder { color: var(--txt-gray-color) !important; opacity: .5; } + .search-input:focus { - outline:none; + outline: none; border: 1px solid var(--txt-theme-color); } -.search-icon{ + +.search-icon { display: inline-block; background: url(../img/search-icon.svg) no-repeat; width: 20px; @@ -351,14 +417,17 @@ img { left: 10px; z-index: 2; } -.from-ul{ + +.from-ul { width: 543px; } -.from-ul-item{ + +.from-ul-item { display: flex; flex-direction: column; } -.from-ul-tags{ + +.from-ul-tags { font-family: 'Lexend'; font-style: normal; font-weight: 400; @@ -366,112 +435,141 @@ img { line-height: 16px; color: var(--txt-gray-color); } -.input-txt{ + +.input-txt { padding: 10px 16px; background: var(--bg-fa-color); border: 1px solid var(--border-color); border-radius: 4px; } -.input-textArea{ + +.input-textArea { padding: 10px 16px; height: 120px; background: var(--bg-fa-color); border: 1px solid var(--border-color); border-radius: 4px; } + /* flex样式 */ -.flex-cc{ +.flex-cc { display: flex; align-items: center; justify-content: center; } -.flex-sc{ + +.flex-sc { display: flex; align-items: flex-start; justify-content: center; } + /* grid样式 */ -.grid-4{ +.grid-4 { display: grid !important; grid-template-columns: 480px 266px 266px 266px; } + /* padding样式 */ -.pl-26{ +.pl-26 { padding-left: 26px; } + /* margin样式 */ -.mb-4{ +.mb-4 { margin-bottom: 4px; } -.mb-8{ + +.mb-8 { margin-bottom: 8px; } -.mb-12{ + +.mb-12 { margin-bottom: 12px; } -.mb-16{ + +.mb-16 { margin-bottom: 16px; } -.mb-24{ + +.mb-24 { margin-bottom: 24px; } -.mb-32{ + +.mb-32 { margin-bottom: 32px; } -.mb-36{ + +.mb-36 { margin-bottom: 36px; } -.mb-40{ + +.mb-40 { margin-bottom: 40px; } -.mb-48{ + +.mb-48 { margin-bottom: 48px; } -.mb-56{ + +.mb-56 { margin-bottom: 56px; } -.mb-64{ + +.mb-64 { margin-bottom: 64px; } -.mb-80{ + +.mb-80 { margin-bottom: 80px; } -.mr-12{ + +.mr-12 { margin-right: 12px; } -.mr-16{ + +.mr-16 { margin-right: 16px; } -.mr-20{ + +.mr-20 { margin-right: 20px; } -.mr-24{ + +.mr-24 { margin-right: 24px; } -.mr-48{ + +.mr-48 { margin-right: 48px; } -.mt-16{ + +.mt-16 { margin-top: 16px; } -.mt-40{ + +.mt-40 { margin-top: 40px; } -.mt-80{ + +.mt-80 { margin-top: 80px; } + /* header布局 */ -.head{ +.head { position: relative; background-color: var(--bg-color); } -.head-con{ + +.head-con { width: 100%; max-width: 1280px; margin: 0 auto; } + /* 导航栏样式 */ -.nav{ +.nav { display: block; background-color: transparent; width: 100%; @@ -481,7 +579,8 @@ img { position: fixed; top: 0; } -.nav-layout{ + +.nav-layout { width: 100%; max-width: 1280px; margin: 0 auto; @@ -490,72 +589,88 @@ img { align-items: center; justify-content: space-between; } + .navbar-white { background-color: var(--pop-bg-color); box-shadow: 0px 4px 9px var(--box-shadow-color); } -.topics{ + +.topics { position: relative; width: 100%; } -.topics-con{ + +.topics-con { padding-top: 200px; max-width: 1280px; width: 100%; margin: 0 auto; } -.topics-layout{ + +.topics-layout { display: flex; justify-content: center; flex-direction: column; align-items: center; } -.topics-tit,.topics-btn{ +.topics-tit, +.topics-btn { opacity: 0; transform: translateY(100px); - animation: fadeSlideIn1 0.7s ease-in-out forwards; /* 应用动画效果 */ + animation: fadeSlideIn1 0.7s ease-in-out forwards; + /* 应用动画效果 */ } -.topics-h4{ + +.topics-h4 { width: 680px; color: var(--txt-gray-color); text-align: center; opacity: 0; transform: translateY(100px); - animation: fadeSlideIn1 0.7s ease-in-out forwards; /* 应用动画效果 */ + animation: fadeSlideIn1 0.7s ease-in-out forwards; + /* 应用动画效果 */ } + /* 定义动画 */ @keyframes fadeSlideIn1 { from { opacity: 0; transform: translateY(100px); } + to { opacity: 1; transform: translateY(0); } } -.topics-h1-green{ + +.topics-h1-green { color: var(--txt-theme-color); position: relative; text-align: center; } -.topics-h1{ + +.topics-h1 { color: var(--text-color); text-align: center; } -.topics-btn{ + +.topics-btn { margin-bottom: 64px; } -.topics-tit-en{ + +.topics-tit-en { width: 896px; text-align: center; } -.topics-h4-en{ + +.topics-h4-en { width: 660px; text-align: center; } -.arcs{ + +.arcs { display: inline-block; position: absolute; width: 95%; @@ -563,17 +678,20 @@ img { left: 0; top: 83px; } -.home-pic{ + +.home-pic { display: block; width: 100%; max-width: 1280px; /* height: 580px; */ } + /* 抽屉菜单 */ -.menuBtn{ +.menuBtn { display: none; cursor: pointer; } + .drawer { position: fixed; top: 0; @@ -587,87 +705,107 @@ img { transition: all 0.5s ease-in-out; z-index: 999; } -.drawer-t{ + +.drawer-t { display: flex; justify-content: space-between; align-items: center; } -.close-drawer{ + +.close-drawer { display: inline-block; margin-bottom: 10px; cursor: pointer; color: var(--txt-gray-color); font-size: 20px; } + .open-drawer { left: 0; } -.drawer-item-t{ + +.drawer-item-t { border-bottom: 1px solid var(--border-color); } -.drawer .drawer-item{ + +.drawer .drawer-item { cursor: pointer; position: relative; } -.drawer .drawer-item>a{ + +.drawer .drawer-item>a { padding: 16px; display: inline-block; width: calc(100% - 36px); } -.drawer .drawer-item>i{ + +.drawer .drawer-item>i { padding: 16px; display: flex; width: calc(100% - 36px); } -.drawer .drawer-active .drawer-item{ + +.drawer .drawer-active .drawer-item { padding: 0 36px; } -.drawer .drawer-item .txt{ + +.drawer .drawer-item .txt { color: var(--txt-gray-color); } -.drawer .drawer-item:hover{ + +.drawer .drawer-item:hover { background-color: var(--bg-hover-color); border-radius: 4px; } -.drawer .drawer-item:hover .txt{ + +.drawer .drawer-item:hover .txt { color: var(--text-color); } -.logo{ + +.logo { display: flex; align-items: center; } -.dootask{ + +.dootask { margin-left: 16px; color: var(--text-color); } -.nav-ul{ + +.nav-ul { display: flex; align-items: center; justify-content: space-between; width: 545px; } -.nav-ul-item{ + +.nav-ul-item { display: inline-block; position: relative; } -.nav-vector{ + +.nav-vector { margin-left: 5px; } -.nav-ul-item .txt{ + +.nav-ul-item .txt { padding: 7px 8px; color: var(--txt-gray-color); } -.nav-ul-item .txt:hover{ + +.nav-ul-item .txt:hover { background-color: var(--bg-hover-color); border-radius: 6px; color: var(--text-color); } -.nav-ul-item .support-active{ + +.nav-ul-item .support-active { background-color: var(--bg-hover-color); border-radius: 6px; color: var(--text-color); } -.submenu-pop{ + +.submenu-pop { position: absolute; top: 40px; left: -38px; @@ -681,53 +819,64 @@ img { width: 150px; text-align: start; } -.submenu-pop .submenu-pop-item{ + +.submenu-pop .submenu-pop-item { cursor: pointer; } -.submenu-pop .submenu-pop-item .txt-sub{ + +.submenu-pop .submenu-pop-item .txt-sub { display: inline-block; padding: 9px 16px; color: var(--txt-gray-color); } -.submenu-pop .submenu-pop-item:hover{ + +.submenu-pop .submenu-pop-item:hover { background-color: var(--bg-hover-color); } -.submenu-pop .submenu-pop-item:hover .txt-sub{ + +.submenu-pop .submenu-pop-item:hover .txt-sub { color: var(--text-color); } -.nav-r{ + +.nav-r { width: 355px; display: flex; justify-content: space-between; align-items: center; position: relative; } -.nav-support{ + +.nav-support { display: flex; align-items: center; cursor: pointer; } -.line-1{ + +.line-1 { height: 24px; border: 1px solid var(--border-color); } -.nav-r a{ + +.nav-r a { font-style: normal; font-weight: 400; font-size: 16px; line-height: 20px; color: var(--txt-gray-color); } -.nav-r-icon{ + +.nav-r-icon { height: 20px; cursor: pointer; } -.lang{ + +.lang { display: inline-block; height: 20px; cursor: pointer; } -.lang-pop{ + +.lang-pop { position: absolute; top: 40px; left: -38px; @@ -740,59 +889,72 @@ img { z-index: 99; text-align: start; } -.lang-pop .show{ + +.lang-pop .show { display: inline-block; } -.lang-pop .lang-pop-item{ + +.lang-pop .lang-pop-item { padding: 9px 16px; cursor: pointer; } -.lang-pop .lang-pop-item .lang-txt{ + +.lang-pop .lang-pop-item .lang-txt { font-weight: 400; font-size: 14px; line-height: 18px; color: var(--txt-gray-color); display: inline-block; } -.lang-pop .lang-pop-item:hover{ + +.lang-pop .lang-pop-item:hover { background-color: var(--bg-hover-color); } -.lang-pop .lang-pop-item:hover .lang-txt{ + +.lang-pop .lang-pop-item:hover .lang-txt { color: var(--text-color); } -.get-started{ + +.get-started { display: inline-block; } -.login-btn{ + +.login-btn { width: 84px; display: inline-block; } + /* 底部样式 */ -footer{ +footer { width: 100%; z-index: 2; position: relative; } -.footer-con{ + +.footer-con { width: 100%; max-width: 1280px; margin: 0 auto; } -.footer-layut{ + +.footer-layut { display: flex; justify-content: space-between; align-items: flex-start; padding-top: 46px; border-bottom: var(--border-color) solid 1px; } -#qq_group{ + +#qq_group { position: relative; width: 164px; } -#qq_group:hover .group_code{ + +#qq_group:hover .group_code { display: flex; } -.group_code{ + +.group_code { display: none; position: absolute; bottom: 25px; @@ -803,7 +965,8 @@ footer{ justify-content: center; flex-direction: column; } -.group_num{ + +.group_num { display: inline-block; color: #fff; font-weight: 400; @@ -811,7 +974,8 @@ footer{ line-height: 16px; margin-top: 10px; } -.lower_triangle{ + +.lower_triangle { position: absolute; bottom: -4px; left: 70px; @@ -821,103 +985,126 @@ footer{ border-right: 5px solid transparent; border-top: 4px solid var(--code-bg-color); } -.footer-l{ + +.footer-l { display: flex; flex-direction: column; align-items: flex-start; width: 405px; } -.footer-l .logo{ + +.footer-l .logo { height: 36px; display: flex; align-items: center; margin-bottom: 24px; } -.footer-l .txt{ + +.footer-l .txt { color: var(--txt-gray-color); } -.footer-r{ + +.footer-r { width: 625px; } -.footer-r-ul{ + +.footer-r-ul { display: flex; justify-content: space-between; padding-bottom: 48px; } -.footer-ol-item{ + +.footer-ol-item { cursor: pointer; } -.footer-ol-item .txt{ + +.footer-ol-item .txt { color: var(--txt-gray-color); } -.footer-ol-item .code-svg{ + +.footer-ol-item .code-svg { display: block; height: 125px; } -.filings{ + +.filings { text-align: center; color: var(--txt-gray-color); padding: 24px 0; } -.footer-t{ + +.footer-t { position: relative; padding: 120px 0; } -.footer-t-con{ + +.footer-t-con { width: 100%; max-width: 1280px; margin: 0 auto; } -.footer-t-layout{ + +.footer-t-layout { display: flex; justify-content: space-between; align-items: flex-start; } -.footer-t-l{ + +.footer-t-l { width: 657px; } -.footer-t-h1{ + +.footer-t-h1 { font-weight: 500; font-size: 44px; line-height: 55px; color: var(--text-color); } -.footer-t-h6{ + +.footer-t-h6 { font-weight: 400; font-size: 18px; line-height: 30px; color: var(--txt-gray-color); } -.footer-t-contact{ + +.footer-t-contact { display: flex; justify-content: flex-start; align-items: center; } -.footer-t-contact-icon{ + +.footer-t-contact-icon { display: inline-block; width: 24px; height: 24px; } -.footer-t-contact-h6{ + +.footer-t-contact-h6 { font-weight: 400; font-size: 16px; line-height: 24px; color: var(--text-color); } + /* 序号公共样式 */ -.serial-number{ +.serial-number { color: var(--txt-theme-color); } -.choose-con-item-h5{ + +.choose-con-item-h5 { color: var(--text-color); } -.choose-con-item-h6{ + +.choose-con-item-h6 { color: var(--txt-gray-color); } -.support .support-item{ + +.support .support-item { padding-bottom: 8px; } -.support .support-item .txt{ + +.support .support-item .txt { font-family: 'Lexend'; font-style: normal; font-weight: 400; @@ -925,86 +1112,137 @@ footer{ line-height: 24px; color: var(--txt-gray-color); } -.support .support-item:first-of-type{ + +.support .support-item:first-of-type { padding-bottom: 16px; } -.support .support-item:first-of-type .txt{ + +.support .support-item:first-of-type .txt { color: var(--text-color); font-weight: 500; } -.group .group-item{ + +.group .group-item { padding-bottom: 24px; } -.group .group-item .txt{ + +.group .group-item .txt { color: var(--text-color); font-weight: 500; font-size: 16px; line-height: 24px; } -.group .group-item .logo{ + +.group .group-item .logo { display: block; height: auto; } + /* 动画 style="--delay: 0s;" */ -.about-animate-box,.solutions-animate-box,.home-animate-box,.dow-animate-box{ +.about-animate-box, +.solutions-animate-box, +.home-animate-box, +.dow-animate-box { opacity: 0; transform: translateY(30%); } -.about-animate-box.animate,.price-animate-box.animate,.solutions-animate-box.animate,.home-animate-box.animate,.dow-animate-box.animate { - animation: fadeIn 0.7s cubic-bezier(0.61, -0.01, 0.57, 0.96) forwards var(--delay); /* 应用动画效果 */ + +.about-animate-box.animate, +.price-animate-box.animate, +.solutions-animate-box.animate, +.home-animate-box.animate, +.dow-animate-box.animate { + animation: fadeIn 0.7s cubic-bezier(0.61, -0.01, 0.57, 0.96) forwards var(--delay); + /* 应用动画效果 */ } + /* 定义动画 */ @keyframes fadeIn { from { opacity: 0; transform: translateY(30%); } + to { opacity: 1; transform: translateY(0); } } + #arc { animation: arcsFadeIn 2s ease-in-out; } + .arc-animate { animation: arcsFadeIn 2s ease-in-out; } + @keyframes arcsFadeIn { from { stroke-dashoffset: 600; } + to { stroke-dashoffset: 0; } } -.start_a{ - width: 100%; -} -.hide{ - display: none; -} -#cookieConsent{ - display: none; - width: 100%; - height: 180px; - background-color: rgba(0,0,0,.8); - position: fixed; - bottom: 0; - z-index: 9999; - color: #dfe4e8; - padding: 40px 50px; - box-sizing: border-box; - text-align: center; -} -#agreeButton{ - width: 130px; - position: absolute; - right: 80px; - bottom: 50px; -} -#cookie_a{ - color: #dfe4e8; - text-decoration-line: underline; + +.start_a { + width: 100%; } +.hide { + display: none; +} + +#cookieConsent { + display: none; + width: 100%; + height: 180px; + background-color: rgba(0, 0, 0, .8); + position: fixed; + bottom: 0; + z-index: 9999; + color: #dfe4e8; + padding: 40px 50px; + box-sizing: border-box; + text-align: center; +} + +#agreeButton { + width: 130px; + position: absolute; + right: 80px; + bottom: 50px; +} + +#cookie_a { + color: #dfe4e8; + text-decoration-line: underline; +} + +.footer_beian { + float: left; + height: 20px; + line-height: 20px; + margin: 0px 0px 0px 5px; + color: #939393; +} + +.footer_beian_a { + height: 20px; + line-height: 20px; + margin: 0px 0px 0px 5px; + color: #939393; + text-decoration: underline; + display: inline-block; + height: 20px; + line-height: 20px; +} + +.footer_copyright { + display: flex; + margin: 0 auto; + align-items: center; + justify-content: center; +} \ No newline at end of file diff --git a/public/site/css/rem.css b/public/site/css/rem.css index a557bdfd9..978d1d15c 100644 --- a/public/site/css/rem.css +++ b/public/site/css/rem.css @@ -788,4 +788,7 @@ .help-l-ul{ width: auto !important; } + .footer_copyright{ + flex-direction: column; + } } \ No newline at end of file diff --git a/public/site/en/about.html b/public/site/en/about.html index 5ee17e090..e041efde5 100644 --- a/public/site/en/about.html +++ b/public/site/en/about.html @@ -380,8 +380,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/en/download.html b/public/site/en/download.html index 108acb2fc..db96d373b 100644 --- a/public/site/en/download.html +++ b/public/site/en/download.html @@ -329,8 +329,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/en/help.html b/public/site/en/help.html index 8c6a53b61..57c98bf65 100644 --- a/public/site/en/help.html +++ b/public/site/en/help.html @@ -2344,9 +2344,14 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. -
+ diff --git a/public/site/en/index.html b/public/site/en/index.html index db0c75f80..f13406e1d 100644 --- a/public/site/en/index.html +++ b/public/site/en/index.html @@ -513,8 +513,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/en/log.html b/public/site/en/log.html index e9d0ca6ee..ec98d7bbe 100644 --- a/public/site/en/log.html +++ b/public/site/en/log.html @@ -280,8 +280,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/en/price.html b/public/site/en/price.html index b2527ae72..b9796ecd0 100644 --- a/public/site/en/price.html +++ b/public/site/en/price.html @@ -762,8 +762,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/en/product.html b/public/site/en/product.html index 5ee28d2fa..e0b6da362 100644 --- a/public/site/en/product.html +++ b/public/site/en/product.html @@ -625,8 +625,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/en/solutions.html b/public/site/en/solutions.html index 448279c1b..7da43fd68 100644 --- a/public/site/en/solutions.html +++ b/public/site/en/solutions.html @@ -332,8 +332,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/img/beian.png b/public/site/img/beian.png new file mode 100644 index 0000000000000000000000000000000000000000..6deb02db84c529a71c1c79531dc507613c9a5cad GIT binary patch literal 1286 zcmex=LK$;OGwtxvPE3$wY!3HV(e}F-dgF%Ergqcx^fk}{&S&;Gn5e9jnPF6-R z04V|iMkZz!RyKAHPA+bsf~^7!OpMITOf1Z-tSmsQ8Eb*^3@n1ILW+itY{G$w>`H|q zMvW5}awt1(JSZA;@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76Vi>sTvho@I?NN8Ai zL}XNQN@`kqMrKxVNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5LEM2yI#mZHiHgDOw zZTpU$yAB;ba`f2o6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+U%r0({^RE_kiUST z0`V4*#Og0Wpud<{SeRMZLH=T7DhGL7kcCyzkWI)jkUgvh0Rl`w#LUFR#LUVJ1gvbVAi&1X z1_taC|uoHMiDXuirdp`+b3}i`TPWD(Sv2eOmO%b+zk}?SB6D0o&%kZF|bF zbNhdW{^}W1)!IrJPak`#{Vx88cKVySALl;`Kc-O={GsUcZ|+B8lOIXXzRMRId&^qZ z>u}I^!Pu9Vd}Z=P)dUv0PO(W@cI=?(&&ez6j?`~&@7;1&_@VvL)w$A#>-kEfPe<&D zFJ1WRQml7jrp%+_rS2Jla>j``{Wl-dHADPv}L`cx1h-#*(JC4gzGMu>~(opdDYho|GwCX{c*bV zPrJtA!atRak9)#?-JN2-np;#~d{*P1?Z-c=72NxJ@A=LB{vX#*`_GWV%N~63AFr$3 z#@xcJTfJ|OehIkqu{Z+r(Q|jjbc>kXvYTtC$dCA&|FT=j+-|MQa zTK&yldHvLjt)9-ea_)cK`TxSdBlbD(*)xtGF8J}8|J#e@ZFhS9tXcEa?fs*l#XB7m zcJEZUeq#UTE!Z zU+H-5f5+#4GC2C5A@2Tf(|XIoR<8Qjtp250*PXxG^!fkRe0}F{;KdSOYllm@UwqZ< rm9AZ633S^l8s5N~`7`;-e}?(T=2!(?fBWU-@rjui{yg1Q|NkZc98d - diff --git a/public/site/zh/download.html b/public/site/zh/download.html index 630195557..a8219e601 100644 --- a/public/site/zh/download.html +++ b/public/site/zh/download.html @@ -327,8 +327,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/zh/help.html b/public/site/zh/help.html index 03b631b21..cd2cd26af 100644 --- a/public/site/zh/help.html +++ b/public/site/zh/help.html @@ -733,8 +733,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/zh/index.html b/public/site/zh/index.html index d5b445f2f..3b8cbf567 100644 --- a/public/site/zh/index.html +++ b/public/site/zh/index.html @@ -512,8 +512,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/zh/log.html b/public/site/zh/log.html index df00f156c..8e8e9311a 100644 --- a/public/site/zh/log.html +++ b/public/site/zh/log.html @@ -280,8 +280,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/zh/price.html b/public/site/zh/price.html index cd7aa5e9c..06f7eaf22 100644 --- a/public/site/zh/price.html +++ b/public/site/zh/price.html @@ -763,8 +763,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/zh/product.html b/public/site/zh/product.html index 7eddb3522..4bc92b162 100644 --- a/public/site/zh/product.html +++ b/public/site/zh/product.html @@ -627,8 +627,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
diff --git a/public/site/zh/solutions.html b/public/site/zh/solutions.html index ef0220f0b..8033d181b 100644 --- a/public/site/zh/solutions.html +++ b/public/site/zh/solutions.html @@ -333,8 +333,12 @@ -
- Copyright © 2022-2023 DooTask. All rights reserved. +
From b16b2140992067875763de81329c2ee665f3b6c2 Mon Sep 17 00:00:00 2001 From: spylecym <1262965753@qq.com> Date: Wed, 2 Aug 2023 18:24:08 +0800 Subject: [PATCH 02/12] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E9=A1=B5=E9=9D=A2=EF=BC=9A=E7=A6=BB=E7=BA=BF=E9=83=A8?= =?UTF-8?q?=E7=BD=B2-=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/site/en/price.html | 18 ++++++++++++++++++ public/site/zh/price.html | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/public/site/en/price.html b/public/site/en/price.html index b9796ecd0..ad004e0f2 100644 --- a/public/site/en/price.html +++ b/public/site/en/price.html @@ -365,6 +365,12 @@
Unlimited
Unlimited
+
  • +
    Offline Deployment
    +
    Support
    +
    Support
    +
    Support
    +
  • @@ -474,6 +480,10 @@
    Number of tasks
    Unlimited
    +
    +
    Offline Deployments
    +
    Support
    +
  • @@ -551,6 +561,10 @@
    Number of tasks
    Unlimited
    +
    +
    Offline Deployments
    +
    Support
    +
  • @@ -628,6 +642,10 @@
    Number of tasks
    Unlimited
    +
    +
    Offline Deployments
    +
    Support
    +
  • diff --git a/public/site/zh/price.html b/public/site/zh/price.html index 06f7eaf22..f3270de65 100644 --- a/public/site/zh/price.html +++ b/public/site/zh/price.html @@ -366,6 +366,12 @@
    无限制
    无限制
  • +
  • +
    离线部署
    +
    支持
    +
    支持
    +
    支持
    +
  • @@ -475,6 +481,10 @@
    任务数量
    无限制
    +
    +
    离线部署
    +
    支持
    +
  • @@ -552,6 +562,10 @@
    任务数量
    无限制
    +
    +
    离线部署
    +
    支持
    +
  • @@ -629,6 +643,10 @@
    任务数量
    无限制
    +
    +
    离线部署
    +
    支持
    +
  • From 7582727753cdca3297652c6ebcdbd215d1e645f8 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 2 Aug 2023 18:36:19 +0800 Subject: [PATCH 03/12] =?UTF-8?q?fix=EF=BC=9A=E5=AE=A1=E6=89=B9=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=20-=20=E6=B7=BB=E5=8A=A0loading=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/js/pages/manage/approve/index.vue | 117 +++++++++--------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/resources/assets/js/pages/manage/approve/index.vue b/resources/assets/js/pages/manage/approve/index.vue index e8f5048af..05a97863c 100644 --- a/resources/assets/js/pages/manage/approve/index.vue +++ b/resources/assets/js/pages/manage/approve/index.vue @@ -7,9 +7,9 @@

    {{$L('审批中心')}}

    - +
    - + -
    {{$L('暂无数据')}}
    +
    {{$L('暂无数据')}}
    @@ -65,7 +65,7 @@
    -
    {{$L('暂无数据')}}
    +
    {{$L('暂无数据')}}
    @@ -90,7 +90,7 @@
    -
    {{$L('暂无数据')}}
    +
    {{$L('暂无数据')}}
    @@ -105,7 +105,7 @@
    - +
    @@ -193,8 +193,8 @@ import {mapState} from 'vuex' export default { components:{list,listDetails,DrawerOverlay,ImgUpload}, name: "approve", - data(){ - return{ + data() { + return { minDate: new Date(2020, 0, 1), maxDate: new Date(2025, 10, 1), currentDate: new Date(2021, 0, 17), @@ -204,62 +204,63 @@ export default { pageSize: 250, total: 0, noText: '', - loadIng:false, + loadIng: false, + addLoadIng: false, - tabsValue:"", + tabsValue: "", // - approvalType:"all", - approvalList:[ - {value:"all",label:this.$L("全部审批")}, - {value:"请假",label:this.$L("请假")}, - {value:"加班申请",label:this.$L("加班申请")}, + approvalType: "all", + approvalList: [ + { value: "all", label: this.$L("全部审批") }, + { value: "请假", label: this.$L("请假") }, + { value: "加班申请", label: this.$L("加班申请") }, ], - searchState:"all", - searchStateList:[ - {value:"all",label:this.$L("全部状态")}, - {value:1,label:this.$L("审批中")}, - {value:2,label:this.$L("已通过")}, - {value:3,label:this.$L("已拒绝")}, - {value:4,label:this.$L("已撤回")} + searchState: "all", + searchStateList: [ + { value: "all", label: this.$L("全部状态") }, + { value: 1, label: this.$L("审批中") }, + { value: 2, label: this.$L("已通过") }, + { value: 3, label: this.$L("已拒绝") }, + { value: 4, label: this.$L("已撤回") } ], // - unreadTotal:0, + unreadTotal: 0, unreadList: [], - doneList:[], - notifyList:[], + doneList: [], + notifyList: [], initiatedList: [], // - details:{}, - detailsShow:false, + details: {}, + detailsShow: false, // - addTitle:'', - addShow:false, - startTimeOpen:false, - endTimeOpen:false, + addTitle: '', + addShow: false, + startTimeOpen: false, + endTimeOpen: false, addData: { - department_id:0, + department_id: 0, applyType: '', type: '', startTime: "2023-04-20", - startTimeHour:"09", - startTimeMinute:"00", + startTimeHour: "09", + startTimeMinute: "00", endTime: "2023-04-20", - endTimeHour:"18", - endTimeMinute:"00", - other:"" + endTimeHour: "18", + endTimeMinute: "00", + other: "" }, addRule: { - department_id:{ type: 'number',required: true, message: this.$L('请选择部门!'), trigger: 'change' }, - applyType: { type: 'string',required: true, message: this.$L('请选择申请类型!'), trigger: 'change' }, - type: { type: 'string',required: true, message: this.$L('请选择假期类型!'), trigger: 'change' }, - startTime: { type: 'string',required: true, message: this.$L('请选择开始时间!'), trigger: 'change' }, - endTime:{ type: 'string',required: true, message: this.$L('请选择结束时间!'), trigger: 'change' }, - description:{ type: 'string',required: true, message: this.$L('请输入事由!'), trigger: 'change' }, + department_id: { type: 'number', required: true, message: this.$L('请选择部门!'), trigger: 'change' }, + applyType: { type: 'string', required: true, message: this.$L('请选择申请类型!'), trigger: 'change' }, + type: { type: 'string', required: true, message: this.$L('请选择假期类型!'), trigger: 'change' }, + startTime: { type: 'string', required: true, message: this.$L('请选择开始时间!'), trigger: 'change' }, + endTime: { type: 'string', required: true, message: this.$L('请选择结束时间!'), trigger: 'change' }, + description: { type: 'string', required: true, message: this.$L('请输入事由!'), trigger: 'change' }, }, - selectTypes:["年假","事假","病假","调休","产假","陪产假","婚假","丧假","哺乳假"], + selectTypes: ["年假", "事假", "病假", "调休", "产假", "陪产假", "婚假", "丧假", "哺乳假"], // - showDateTime:false + showDateTime: false } }, computed: { @@ -320,7 +321,9 @@ export default { return; } this.__tabsClick = setTimeout(() => { this.__tabsClick =null; },time) - + if(time == 0){ + this.loadIng = true; + } this.tabsValue = val || this.tabsValue if(val!=""){ this.approvalType = this.searchState = "all" @@ -392,7 +395,7 @@ export default { }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { - this.loadIng--; + this.loadIng = false; }); }, @@ -425,7 +428,7 @@ export default { }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { - this.loadIng--; + this.loadIng = false; }); }, @@ -458,7 +461,7 @@ export default { }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { - this.loadIng--; + this.loadIng = false; }); }, @@ -492,12 +495,13 @@ export default { }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { - this.loadIng--; + this.loadIng = false; }); }, // 添加申请 addApply(){ + this.addLoadIng = true; this.$store.dispatch("call", { url: 'users/basic', data: { @@ -516,12 +520,11 @@ export default { }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { - this.loadIng--; + this.addLoadIng = false; }); }).catch(({msg}) => { + this.addLoadIng = false; $A.modalError(msg); - }).finally(_ => { - this.loadIng--; }); }, @@ -529,7 +532,7 @@ export default { onInitiate(){ this.$refs.initiateRef.validate((valid) => { if (valid) { - this.loadIng = 1; + this.loadIng = true; var obj = JSON.parse(JSON.stringify(this.addData)) obj.startTime = obj.startTime +" "+ obj.startTimeHour + ":" + obj.startTimeMinute; @@ -557,14 +560,12 @@ export default { }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { - this.loadIng--; + this.loadIng = false; }); } }); } - - - }, + } } From 6870a29ec91293c95d405641394d3a88facfac9b Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 3 Aug 2023 16:12:17 +0800 Subject: [PATCH 04/12] =?UTF-8?q?init=EF=BC=9A=E5=88=86=E4=BA=AB=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E6=8E=A5=E5=8F=A3=20-=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=86=E4=BA=AB=E6=96=87=E6=9C=AC=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 33 +++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 3bc609f1c..853058874 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -1839,6 +1839,10 @@ class UsersController extends AbstractController * @apiGroup users * @apiName share__list * + * @apiParam {String} [type] 分享类型:file-文件,text-列表 默认file + * @apiParam {Number} [pid] 父级文件id,用于获取子目录和上传到指定目录的id + * @apiParam {Number} [upload_file_id] 上传文件id + * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 @@ -1846,6 +1850,7 @@ class UsersController extends AbstractController public function share__list() { $user = User::auth(); + $type = Request::input('type', 'file'); $pid = intval(Request::input('pid', -1)); $uploadFileId = intval(Request::input('upload_file_id', -1)); // 上传文件 @@ -1857,7 +1862,7 @@ class UsersController extends AbstractController } // 获取数据 $lists = []; - if ($pid !== -1) { + if ($type == 'file' && $pid !== -1) { $fileList = (new File)->getFileList($user, $pid, 'dir', false); foreach ($fileList as $file) { if ($file['id'] != $pid) { @@ -1870,15 +1875,16 @@ class UsersController extends AbstractController ]; } } - } else { - $lists[] = [ - 'type' => 'children', - 'url' => Base::fillUrl("api/users/share/list") . "?pid=0", - 'icon' => url("images/file/light/folder.png"), - 'extend' => ['upload_file_id' => 0], - 'name' => Doo::translate('文件'), - ]; + if($type == 'file'){ + $lists[] = [ + 'type' => 'children', + 'url' => Base::fillUrl("api/users/share/list") . "?pid=0", + 'icon' => url("images/file/light/folder.png"), + 'extend' => ['upload_file_id' => 0], + 'name' => Doo::translate('文件'), + ]; + } $dialogList = (new WebSocketDialog)->getDialogList($user->userid); foreach ($dialogList['data'] as $dialog) { if ($dialog['avatar']) { @@ -1897,8 +1903,13 @@ class UsersController extends AbstractController 'type' => 'item', 'name' => $dialog['name'], 'icon' => $avatar, - 'url' => Base::fillUrl("api/dialog/msg/sendfiles"), - 'extend' => ['dialog_ids' => $dialog['id']] + 'url' => $type == "file" ? Base::fillUrl("api/dialog/msg/sendfiles") : Base::fillUrl("api/dialog/msg/sendtext"), + 'extend' => [ + 'dialog_ids' => $dialog['id'], + 'text_type' => 'text', + 'reply_id' => 0, + 'silence' => 'no' + ] ]; } } From 7147db0ef2bcc82c59f6beb35efe014fc0c45de7 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 3 Aug 2023 17:16:44 +0800 Subject: [PATCH 05/12] =?UTF-8?q?feat=EF=BC=9A=E5=8F=91=E9=80=81=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=B6=88=E6=81=AF=E6=8E=A5=E5=8F=A3=20-=20=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BE=A4=E5=8F=91=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 109 ++++++++++-------- 1 file changed, 58 insertions(+), 51 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 14287de11..586f91673 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -718,6 +718,7 @@ class DialogController extends AbstractController } // $dialog_id = intval(Request::input('dialog_id')); + $dialog_ids = trim(Request::input('dialog_ids')); $update_id = intval(Request::input('update_id')); $update_mark = !($user->bot && in_array(strtolower(trim(Request::input('update_mark'))), ['no', 'false', '0'])); $reply_id = intval(Request::input('reply_id')); @@ -725,59 +726,65 @@ class DialogController extends AbstractController $text_type = strtolower(trim(Request::input('text_type'))); $silence = in_array(strtolower(trim(Request::input('silence'))), ['yes', 'true', '1']); $markdown = in_array($text_type, ['md', 'markdown']); - // - WebSocketDialog::checkDialog($dialog_id); - // - if ($update_id > 0) { - $action = $update_mark ? "update-$update_id" : "change-$update_id"; - } elseif ($reply_id > 0) { - $action = "reply-$reply_id"; - } else { - $action = ""; - } - // - if (!$markdown) { - $text = WebSocketDialogMsg::formatMsg($text, $dialog_id); - } - $strlen = mb_strlen($text); - $noimglen = mb_strlen(preg_replace("/]*?>/i", "", $text)); - if ($strlen < 1) { - return Base::retError('消息内容不能为空'); - } - if ($noimglen > 200000) { - return Base::retError('消息内容最大不能超过200000字'); - } - if ($noimglen > 5000) { - // 内容过长转成文件发送 - $path = "uploads/chat/" . date("Ym") . "/" . $dialog_id . "/"; - Base::makeDir(public_path($path)); - $path = $path . md5($text) . ".htm"; - $file = public_path($path); - file_put_contents($file, $text); - $size = filesize(public_path($path)); - if (empty($size)) { - return Base::retError('消息发送保存失败'); + // + $result = []; + $dialogIds = $dialog_ids ? explode(',', $dialog_ids) : [$dialog_id]; + foreach($dialogIds as $dialog_id) { + // + WebSocketDialog::checkDialog($dialog_id); + // + if ($update_id > 0) { + $action = $update_mark ? "update-$update_id" : "change-$update_id"; + } elseif ($reply_id > 0) { + $action = "reply-$reply_id"; + } else { + $action = ""; } - $ext = $markdown ? 'md' : 'htm'; - $fileData = [ - 'name' => "LongText-{$strlen}.{$ext}", - 'size' => $size, - 'file' => $file, - 'path' => $path, - 'url' => Base::fillUrl($path), - 'thumb' => '', - 'width' => -1, - 'height' => -1, - 'ext' => $ext, - ]; - return WebSocketDialogMsg::sendMsg($action, $dialog_id, 'file', $fileData, $user->userid, false, false, $silence); + // + if (!$markdown) { + $text = WebSocketDialogMsg::formatMsg($text, $dialog_id); + } + $strlen = mb_strlen($text); + $noimglen = mb_strlen(preg_replace("/]*?>/i", "", $text)); + if ($strlen < 1) { + return Base::retError('消息内容不能为空'); + } + if ($noimglen > 200000) { + return Base::retError('消息内容最大不能超过200000字'); + } + if ($noimglen > 5000) { + // 内容过长转成文件发送 + $path = "uploads/chat/" . date("Ym") . "/" . $dialog_id . "/"; + Base::makeDir(public_path($path)); + $path = $path . md5($text) . ".htm"; + $file = public_path($path); + file_put_contents($file, $text); + $size = filesize(public_path($path)); + if (empty($size)) { + return Base::retError('消息发送保存失败'); + } + $ext = $markdown ? 'md' : 'htm'; + $fileData = [ + 'name' => "LongText-{$strlen}.{$ext}", + 'size' => $size, + 'file' => $file, + 'path' => $path, + 'url' => Base::fillUrl($path), + 'thumb' => '', + 'width' => -1, + 'height' => -1, + 'ext' => $ext, + ]; + $result = WebSocketDialogMsg::sendMsg($action, $dialog_id, 'file', $fileData, $user->userid, false, false, $silence); + } + // + $msgData = ['text' => $text]; + if ($markdown) { + $msgData['type'] = 'md'; + } + $result = WebSocketDialogMsg::sendMsg($action, $dialog_id, 'text', $msgData, $user->userid, false, false, $silence); } - // - $msgData = ['text' => $text]; - if ($markdown) { - $msgData['type'] = 'md'; - } - return WebSocketDialogMsg::sendMsg($action, $dialog_id, 'text', $msgData, $user->userid, false, false, $silence); + return $result; } /** From e26d75c894e8f9103093f864b610f8f6d6442280 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 3 Aug 2023 18:09:11 +0800 Subject: [PATCH 06/12] =?UTF-8?q?fiex=EF=BC=9A1.=20=E5=8A=A0=E5=BC=BA?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF=E6=8E=A5=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20,=20=202.=E8=A7=A3=E5=86=B3=E5=9C=A8?= =?UTF-8?q?=E7=BD=91=E9=A1=B5=E5=9B=BE=E7=89=87=E4=B8=8A=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=8F=B3=E9=94=AE=E5=A4=8D=E5=88=B6=E5=9B=BE=E7=89=87=EF=BC=88?= =?UTF-8?q?=E9=9D=9Ejpg=E7=9A=84=EF=BC=89=E5=90=8E=EF=BC=8C=E7=B2=98?= =?UTF-8?q?=E8=B4=B4=E5=88=B0=E6=B6=88=E6=81=AF=E6=A1=86=EF=BC=8C=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=90=8E=E5=87=BA=E7=8E=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 2 +- app/Models/WebSocketDialogMsg.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 586f91673..9c59ef6a9 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -728,7 +728,7 @@ class DialogController extends AbstractController $markdown = in_array($text_type, ['md', 'markdown']); // $result = []; - $dialogIds = $dialog_ids ? explode(',', $dialog_ids) : [$dialog_id]; + $dialogIds = $dialog_ids ? explode(',', $dialog_ids) : [$dialog_id ?: 0]; foreach($dialogIds as $dialog_id) { // WebSocketDialog::checkDialog($dialog_id); diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 51a90eea8..0ee8dd69e 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -641,7 +641,7 @@ class WebSocketDialogMsg extends AbstractModel } // 其他网络图片 $imageSaveLocal = Base::settingFind("system", "image_save_local"); - preg_match_all("/]*?src=([\"'])(.*?\.(png|jpg|jpeg|webp|gif))\\1[^>]*?>/is", $text, $matchs); + preg_match_all("/]*?src=([\"'])(.*?(png|jpg|jpeg|webp|gif).*?)\\1[^>]*?>/is", $text, $matchs); foreach ($matchs[2] as $key => $str) { if ($imageSaveLocal === 'close') { $imageSize = getimagesize($str); From 77d3ba0c3bc5c8a34c5f3266bc39aba68f011446 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Fri, 4 Aug 2023 17:14:46 +0800 Subject: [PATCH 07/12] =?UTF-8?q?feat=EF=BC=9A=E5=AE=A1=E6=89=B9=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E5=88=97=E8=A1=A8=20-=20=E6=B7=BB=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E6=8B=89=E5=8A=A0=E8=BD=BD=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E4=B8=80=E4=BA=9BloadIng=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/pages/manage/approve/details.vue | 3 +- .../assets/js/pages/manage/approve/index.vue | 224 +++++++++++++----- resources/assets/sass/pages/page-approve.scss | 16 ++ 3 files changed, 189 insertions(+), 54 deletions(-) diff --git a/resources/assets/js/pages/manage/approve/details.vue b/resources/assets/js/pages/manage/approve/details.vue index a81e8e674..4a16f77fd 100644 --- a/resources/assets/js/pages/manage/approve/details.vue +++ b/resources/assets/js/pages/manage/approve/details.vue @@ -293,6 +293,7 @@ export default { }, // 获取详情 getInfo(isScrollToBottom = false) { + this.loadIng++; this.$store.dispatch("call", { method: 'get', url: 'approve/process/detail', @@ -388,7 +389,7 @@ export default { }, // 提交评论 confirmComment(){ - this.loadIng++; + this.loadIng = 1; this.$store.dispatch("call", { method: 'post', url: 'approve/process/addGlobalComment', diff --git a/resources/assets/js/pages/manage/approve/index.vue b/resources/assets/js/pages/manage/approve/index.vue index 05a97863c..9747d6ee7 100644 --- a/resources/assets/js/pages/manage/approve/index.vue +++ b/resources/assets/js/pages/manage/approve/index.vue @@ -13,41 +13,55 @@ -
    {{$L('暂无数据')}}
    -
    -
    -
    -
    - -
    +
    +
    -
    - +
    +
    +
    {{$L('暂无数据')}}
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    {{$L('暂无数据')}}
    -
    +
    -
    +
    +
    + +
    @@ -58,20 +72,26 @@
    {{$L('暂无数据')}}
    -
    +
    -
    +
    +
    + +
    @@ -81,22 +101,28 @@ -
    {{$L('暂无数据')}}
    +
    {{$L('暂无数据')}}
    -
    +
    -
    +
    +
    + +
    @@ -195,13 +221,15 @@ export default { name: "approve", data() { return { + modalTransferIndex: window.modalTransferIndex, + minDate: new Date(2020, 0, 1), maxDate: new Date(2025, 10, 1), currentDate: new Date(2021, 0, 17), procdefList: [], page: 1, - pageSize: 250, + pageSize: 10, total: 0, noText: '', loadIng: false, @@ -224,11 +252,25 @@ export default { { value: 4, label: this.$L("已撤回") } ], // - unreadTotal: 0, unreadList: [], + unreadPage: 1, + unreadTotal: 0, + unreadLoad: false, + // doneList: [], + donePage: 1, + doneLoad: false, + doneTotal: 0, + // notifyList: [], + notifyPage: 1, + notifyLoad: false, + notifyTotal: 0, + // initiatedList: [], + initiatedPage: 1, + initiatedLoad: false, + initiatedTotal: 0, // details: {}, detailsShow: false, @@ -276,7 +318,7 @@ export default { } }, watch: { - '$route' (to, from) { + '$route' (to) { if(to.name == 'manage-approve'){ this.tabsClick() } @@ -308,6 +350,7 @@ export default { this.addData.startTime = this.addData.endTime = this.getCurrentDate(); }, methods:{ + // 获取当前时间 getCurrentDate() { const today = new Date(); const year = today.getFullYear(); @@ -315,6 +358,7 @@ export default { const date = String(today.getDate()).padStart(2, '0'); return `${year}-${month}-${date}`; }, + // tab切换事件 tabsClick(val,time= 1000){ if(!val && this.__tabsClick && time>0){ @@ -325,19 +369,35 @@ export default { this.loadIng = true; } this.tabsValue = val || this.tabsValue - if(val!=""){ + if(val){ this.approvalType = this.searchState = "all" } if(this.tabsValue == 'unread'){ + if(val === false){ + this.unreadPage = 1; + this.unreadList = []; + } this.getUnreadList(); } if(this.tabsValue == 'done'){ + if(val === false){ + this.donePage = 1; + this.doneList = []; + } this.getDoneList(); } if(this.tabsValue == 'notify'){ + if(val === false){ + this.notifyPage = 1; + this.notifyList = []; + } this.getNotifyList(); } if(this.tabsValue == 'initiated'){ + if(val === false){ + this.initiatedPage = 1; + this.initiatedList = []; + } this.getInitiatedList(); } }, @@ -363,29 +423,59 @@ export default { }) }, + // 下拉加载 + handleScroll(e){ + if (e.target.scrollTop + e.target.clientHeight >= e.target.scrollHeight) { + if(this.tabsValue == 'unread' && !this.unreadLoad && this.unreadList.length < this.unreadTotal){ + this.unreadLoad = true; + this.unreadPage = this.unreadPage + 1; + this.getUnreadList('scroll'); + } + if(this.tabsValue == 'done' && !this.doneLoad && this.doneList.length < this.doneTotal){ + this.doneLoad = true; + this.donePage = this.donePage + 1; + this.getDoneList('scroll'); + } + if(this.tabsValue == 'notify' && !this.notifyLoad && this.notifyList.length < this.notifyTotal){ + this.notifyLoad = true; + this.notifyPage = this.notifyPage + 1; + this.getNotifyList('scroll'); + } + if(this.tabsValue == 'initiated' && !this.initiatedLoad && this.initiatedList.length < this.initiatedTotal){ + this.initiatedLoad = true; + this.initiatedPage = this.initiatedPage + 1; + this.getInitiatedList('scroll'); + } + } + }, + // 获取待办列表 - getUnreadList(){ + getUnreadList(type='init'){ this.$store.dispatch("call", { method: 'get', url: 'approve/process/findTask', data: { - page:this.page, - page_size: this.pageSize, + page: type == 'scroll' ? this.unreadPage : 1, + page_size: type == 'scroll' ? this.pageSize : this.unreadPage * this.pageSize, proc_def_name: this.approvalType == 'all' ? '' : this.approvalType, } }).then(({data}) => { let activeId = 0; let activeIndex = 0; + this.unreadTotal = data.total; if( this.unreadList.length == 0 || this.unreadList.length == data.rows.length){ this.unreadList?.map((res)=>{ if(res._active) activeId = res.id }) } - this.unreadList = data.rows.map((h,index)=>{ + let lists = data.rows.map((h,index)=>{ h._active = activeId > 0 ? h.id == activeId : index == 0; if(h._active) activeIndex = index + if(type == 'scroll' && this.unreadList.map(item=>{return item.id}).indexOf(h.id) == -1 ){ + this.unreadList.push(h) + } return h; }) - if(this.approvalType == 'all'){ - this.unreadTotal = this.unreadList.length + if(type != 'scroll'){ + this.unreadList = lists; } if(this.tabsValue == 'unread'){ this.$nextTick(()=>{ @@ -396,30 +486,38 @@ export default { $A.modalError(msg); }).finally(_ => { this.loadIng = false; + this.unreadLoad = false; }); }, // 获取已办列表 - getDoneList(){ + getDoneList(type='init'){ this.$store.dispatch("call", { method: 'get', url: 'approve/procHistory/findTask', data: { - page:this.page, - page_size: this.pageSize, + page: type == 'scroll' ? this.donePage : 1, + page_size: type == 'scroll' ? this.pageSize : this.donePage * this.pageSize, proc_def_name: this.approvalType == 'all' ? '' : this.approvalType, } }).then(({data}) => { let activeId = 0; - let activeIndex = 0; - if( this.doneList.length == 0 || this.doneList.length == data.rows.length){ - this.doneList?.map((res)=>{ if(res._active) activeId = res.id }) + let activeIndex = 0; + this.doneTotal = data.total; + if( this.doneList.length == 0 || this.doneList.length == data.total){ + this.doneList?.map((res)=>{ if(res._active) activeId = res.id }) } - this.doneList = data.rows.map((h,index)=>{ + let lists = data.rows.map((h,index)=>{ h._active = activeId > 0 ? h.id == activeId : index == 0; if(h._active) activeIndex = index + if(type == 'scroll' && this.doneList.map(item=>{return item.id}).indexOf(h.id) == -1 ){ + this.doneList.push(h) + } return h; }) + if(type != 'scroll'){ + this.doneList = lists; + } if(this.tabsValue == 'done'){ this.$nextTick(()=>{ this.details = this.doneList[activeIndex] || {} @@ -429,30 +527,38 @@ export default { $A.modalError(msg); }).finally(_ => { this.loadIng = false; + this.doneLoad = false; }); }, // 获取抄送列表 - getNotifyList(){ + getNotifyList(type){ this.$store.dispatch("call", { method: 'get', url: 'approve/procHistory/findProcNotify', data: { - page:this.page, - page_size: this.pageSize, + page: type == 'scroll' ? this.notifyPage : 1, + page_size: type == 'scroll' ? this.pageSize : this.notifyPage * this.pageSize, proc_def_name: this.approvalType == 'all' ? '' : this.approvalType, } }).then(({data}) => { let activeId = 0; let activeIndex = 0; + this.notifyTotal = data.total; if( this.notifyList.length == 0 || this.notifyList.length == data.rows.length){ this.notifyList?.map((res)=>{ if(res._active) activeId = res.id }) } - this.notifyList = data.rows.map((h,index)=>{ + let lists = data.rows.map((h,index)=>{ h._active = activeId > 0 ? h.id == activeId : index == 0; if(h._active) activeIndex = index + if(type == 'scroll' && this.notifyList.map(item=>{return item.id}).indexOf(h.id) == -1 ){ + this.notifyList.push(h) + } return h; }) + if(type != 'scroll'){ + this.notifyList = lists; + } if(this.tabsValue == 'notify'){ this.$nextTick(()=>{ this.details = this.notifyList[activeIndex] || {} @@ -462,31 +568,39 @@ export default { $A.modalError(msg); }).finally(_ => { this.loadIng = false; + this.notifyLoad = false; }); }, // 获取我发起的 - getInitiatedList(){ + getInitiatedList(type){ this.$store.dispatch("call", { method: 'post', url: 'approve/process/startByMyselfAll', data: { - page: this.page, - page_size: this.pageSize, + page: type == 'scroll' ? this.initiatedPage : 1, + page_size: type == 'scroll' ? this.pageSize : this.initiatedPage * this.pageSize, proc_def_name: this.approvalType == 'all' ? '' : this.approvalType, state: this.searchState == 'all' ? '' : this.searchState } }).then(({data}) => { let activeId = 0; let activeIndex = 0; + this.initiatedTotal = data.total; if( this.initiatedList.length == 0 || this.initiatedList.length == data.rows.length){ this.initiatedList?.map((res)=>{ if(res._active) activeId = res.id }) } - this.initiatedList = data.rows.map((h,index)=>{ + let lists = data.rows.map((h,index)=>{ h._active = activeId > 0 ? h.id == activeId : index == 0; if(h._active) activeIndex = index + if(type == 'scroll' && this.initiatedList.map(item=>{return item.id}).indexOf(h.id) == -1 ){ + this.initiatedList.push(h) + } return h; }) + if(type != 'scroll'){ + this.initiatedList = lists; + } if(this.tabsValue == 'initiated'){ this.$nextTick(()=>{ this.details = this.initiatedList[activeIndex] || {} @@ -496,6 +610,7 @@ export default { $A.modalError(msg); }).finally(_ => { this.loadIng = false; + this.initiatedLoad = false; }); }, @@ -556,7 +671,10 @@ export default { $A.messageSuccess(msg); this.addShow = false; this.$refs.initiateRef.resetFields(); - this.tabsClick(); + this.tabsValue = 'initiated'; + this.$nextTick(()=>{ + this.tabsClick(); + }) }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { diff --git a/resources/assets/sass/pages/page-approve.scss b/resources/assets/sass/pages/page-approve.scss index a0b6b0449..d94fc6f7b 100644 --- a/resources/assets/sass/pages/page-approve.scss +++ b/resources/assets/sass/pages/page-approve.scss @@ -39,9 +39,21 @@ margin-bottom: 10px; > div { + display: flex; + gap: 10px; + overflow: hidden; + .ivu-select { + width: 150px; + } .ivu-dropdown { margin-right: 8px; } + .load{ + font-size: 12px; + width: 20px; + height: 32px; + overflow: hidden; + } } } @@ -70,6 +82,10 @@ max-width: 100%; } + .load{ + text-align: center; + } + .approve-main-list { display: flex; flex-direction: column; From bc5046c04db9658b24bbb487ce2dc58d42289769 Mon Sep 17 00:00:00 2001 From: zzw <2318266924@qq.com> Date: Fri, 4 Aug 2023 18:14:02 +0800 Subject: [PATCH 08/12] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E9=80=9A?= =?UTF-8?q?=E4=B9=89=E5=8D=83=E9=97=AE=E6=9C=BA=E5=99=A8=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/SystemController.php | 18 +++++++++++++++++- app/Models/UserBot.php | 1 + app/Tasks/BotReceiveMsgTask.php | 16 ++++++++++++++++ .../manage/setting/components/SystemAibot.vue | 16 ++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/SystemController.php b/app/Http/Controllers/Api/SystemController.php index 7f7efd9f1..0150f8fca 100755 --- a/app/Http/Controllers/Api/SystemController.php +++ b/app/Http/Controllers/Api/SystemController.php @@ -258,7 +258,9 @@ class SystemController extends AbstractController 'claude_agency', 'wenxin_key', 'wenxin_secret', - 'wenxin_model' + 'wenxin_model', + 'qianwen_key', + 'qianwen_model' ]; if ($type == 'save') { @@ -292,6 +294,12 @@ class SystemController extends AbstractController WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "设置成功"], $botUser->userid, true, false, true); } } + if ($backup['qianwen_key'] != $setting['qianwen_key']) { + $botUser = User::botGetOrCreate('ai-qianwen'); + if ($botUser && $dialog = WebSocketDialog::checkUserDialog($botUser, $user->userid)) { + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "设置成功"], $botUser->userid, true, false, true); + } + } } // $setting['wenxin_model'] = $setting['wenxin_model'] ?: 'ERNIE-Bot-turbo'; @@ -302,6 +310,14 @@ class SystemController extends AbstractController } } } + $setting['qianwen_model'] = $setting['qianwen_model'] ?: 'qwen-v1'; + if (env("SYSTEM_SETTING") == 'disabled') { + foreach ($keys as $item) { + if (strlen($setting[$item]) > 12) { + $setting[$item] = substr($setting[$item], 0, 4) . str_repeat('*', strlen($setting[$item]) - 8) . substr($setting[$item], -4); + } + } + } // return Base::retSuccess('success', $setting ?: json_decode('{}')); } diff --git a/app/Models/UserBot.php b/app/Models/UserBot.php index 2bfe2c626..2c8c62564 100644 --- a/app/Models/UserBot.php +++ b/app/Models/UserBot.php @@ -55,6 +55,7 @@ class UserBot extends AbstractModel 'ai-openai' => 'ChatGPT', 'ai-claude' => 'Claude', 'ai-wenxin' => 'Wenxin', + 'ai-qianwen' => 'QianWen', 'bot-manager' => '机器人管理', default => '', // 不是系统机器人时返回空(也可以拿来判断是否是系统机器人) }; diff --git a/app/Tasks/BotReceiveMsgTask.php b/app/Tasks/BotReceiveMsgTask.php index bc0061c64..aff4ab207 100644 --- a/app/Tasks/BotReceiveMsgTask.php +++ b/app/Tasks/BotReceiveMsgTask.php @@ -417,6 +417,22 @@ class BotReceiveMsgTask extends AbstractTask $error = 'The client version is low (required version ≥ v0.29.12).'; } break; + // QianWen 机器人 + case 'ai-qianwen@bot.system': + $setting = Base::setting('aibotSetting'); + $webhookUrl = "{$serverUrl}/ai/qianwen/send"; + $extras = [ + 'qianwen_key' => $setting['qianwen_key'], + 'qianwen_model' => $setting['qianwen_model'], + 'server_url' => $serverUrl, + ]; + if (empty($extras['qianwen_key'])) { + $error = 'Robot disabled.'; + } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) + && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { + $error = 'The client version is low (required version ≥ v0.29.12).'; + } + break; // 其他机器人 default: $userBot = UserBot::whereBotId($botUser->userid)->first(); diff --git a/resources/assets/js/pages/manage/setting/components/SystemAibot.vue b/resources/assets/js/pages/manage/setting/components/SystemAibot.vue index af6083208..415c7fccc 100644 --- a/resources/assets/js/pages/manage/setting/components/SystemAibot.vue +++ b/resources/assets/js/pages/manage/setting/components/SystemAibot.vue @@ -47,6 +47,22 @@
    +
    +

    {{$L('通义千问')}} (Qianwen)

    + +