mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-15 11:18:12 +00:00
Merge branch 'develop' of ssh://git.gezi.vip:6006/gx/dootask
# Conflicts: # public/css/app.css # public/js/hash
This commit is contained in:
commit
b6598a2b40
@ -7,6 +7,7 @@ use App\Models\Meeting;
|
||||
use App\Models\Project;
|
||||
use App\Models\UmengAlias;
|
||||
use App\Models\User;
|
||||
use App\Models\UserDelete;
|
||||
use App\Models\UserEmailVerification;
|
||||
use App\Models\UserTransfer;
|
||||
use App\Models\WebSocket;
|
||||
@ -983,4 +984,150 @@ class UsersController extends AbstractController
|
||||
$data['msgs'] = $msgs;
|
||||
return Base::retSuccess('发送邀请成功', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/users/email/send 18. 发送邮箱验证码
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName email__send
|
||||
*
|
||||
* @apiParam {Number} type 邮件类型
|
||||
* @apiParam {String} email 邮箱地址
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
*/
|
||||
public function email__send()
|
||||
{
|
||||
$user = User::auth();
|
||||
//
|
||||
$type = Request::input('type', 2);
|
||||
$email = Request::input('email');
|
||||
if (!$email) {
|
||||
return Base::retError('请输入新邮箱地址');
|
||||
}
|
||||
if (!Base::isEmail($email)) {
|
||||
return Base::retError('邮箱地址错误');
|
||||
}
|
||||
if ($user->email == $email && $type == 2) {
|
||||
return Base::retError('不能与旧邮箱一致');
|
||||
}
|
||||
if ($user->email != $email && $type == 3) {
|
||||
return Base::retError('与当前登录邮箱不一致');
|
||||
}
|
||||
if (User::where('userid', '<>', $user->userid)->whereEmail($email)->exists()) {
|
||||
return Base::retError('邮箱地址已存在');
|
||||
}
|
||||
UserEmailVerification::userEmailSend($user, $type, $email);
|
||||
return Base::retSuccess('发送成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/users/email/edit 19. 修改邮箱
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName edit__email
|
||||
*
|
||||
* @apiParam {String} newEmail 新邮箱地址
|
||||
* @apiParam {String} code 邮箱验证码
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
*/
|
||||
public function email__edit()
|
||||
{
|
||||
$user = User::auth();
|
||||
//
|
||||
$user->checkSystem();
|
||||
//
|
||||
$newEmail = trim(Request::input('newEmail'));
|
||||
$code = trim(Request::input('code'));
|
||||
if (!$newEmail) {
|
||||
return Base::retError('请输入新邮箱地址');
|
||||
}
|
||||
if (!Base::isEmail($newEmail)) {
|
||||
return Base::retError('邮箱地址错误');
|
||||
}
|
||||
|
||||
$isRegVerify = Base::settingFind('emailSetting', 'reg_verify') === 'open';
|
||||
if ($isRegVerify) {
|
||||
UserEmailVerification::verify($newEmail, $code, 2);
|
||||
}
|
||||
|
||||
$user->email = $newEmail;
|
||||
$user->save();
|
||||
User::token($user);
|
||||
return Base::retSuccess('修改成功', $user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/users/delete/account 20. 删除账户
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName delete__account
|
||||
*
|
||||
* @apiParam {String} email 帐号邮箱
|
||||
* @apiParam {String} code 邮箱验证码
|
||||
* @apiParam {String} reason 注销理由
|
||||
* @apiParam {String} password 登录密码
|
||||
* @apiParam {Number} type 类型
|
||||
* - warning: 提交校验
|
||||
* - confirm: 确认删除
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
*/
|
||||
public function delete__account()
|
||||
{
|
||||
$email = Request::input('email');
|
||||
$code = Request::input('code');
|
||||
$reason = Request::input('reason');
|
||||
$password = Request::input('password');
|
||||
$type = Request::input('type');
|
||||
$user = User::auth();
|
||||
if (!$email) {
|
||||
return Base::retError('请输入新邮箱地址');
|
||||
}
|
||||
if (!Base::isEmail($email)) {
|
||||
return Base::retError('邮箱地址错误');
|
||||
}
|
||||
if ($user->email != $email) {
|
||||
return Base::retError('与当前登录邮箱不一致');
|
||||
}
|
||||
|
||||
$isRegVerify = Base::settingFind('emailSetting', 'reg_verify') === 'open';
|
||||
if ($isRegVerify) {
|
||||
UserEmailVerification::verify($email, $code, 3);
|
||||
} else {
|
||||
if (!$password) {
|
||||
return Base::retError('请输入登录密码');
|
||||
}
|
||||
if ($user->password != Base::md52($password, $user->encrypt)) {
|
||||
return Base::retError('密码错误');
|
||||
}
|
||||
}
|
||||
if ($type == 'confirm') {
|
||||
$deleteArr = [
|
||||
'userid' => $user->userid,
|
||||
'email' => $user->email,
|
||||
'reason' => $reason
|
||||
];
|
||||
$userDelete = UserDelete::createInstance($deleteArr);
|
||||
if ($userDelete->save() && $user->deleteUser()) {
|
||||
return Base::retSuccess('删除成功', $user);
|
||||
} else {
|
||||
return Base::retError('删除失败');
|
||||
}
|
||||
}
|
||||
return Base::retSuccess('success', $user);
|
||||
}
|
||||
}
|
||||
|
||||
30
app/Models/UserDelete.php
Normal file
30
app/Models/UserDelete.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
|
||||
/**
|
||||
* App\Models\UserDelete
|
||||
*
|
||||
* @property int $id
|
||||
* @property int|null $userid 用户id
|
||||
* @property string|null $email 邮箱帐号
|
||||
* @property string|null $reason 注销原因
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete whereEmail($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete whereReason($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserDelete whereUserid($value)
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class UserDelete extends AbstractModel
|
||||
{
|
||||
|
||||
}
|
||||
@ -16,6 +16,7 @@ use Guanguans\Notify\Messages\EmailMessage;
|
||||
* @property string|null $code 验证参数
|
||||
* @property string|null $email 电子邮箱
|
||||
* @property int|null $status 0-未验证,1-已验证
|
||||
* @property int|null $type 邮件类型:1-邮箱认证,2-修改邮箱
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification newModelQuery()
|
||||
@ -26,6 +27,7 @@ use Guanguans\Notify\Messages\EmailMessage;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification whereEmail($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification whereStatus($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification whereType($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|UserEmailVerification whereUserid($value)
|
||||
* @mixin \Eloquent
|
||||
@ -36,39 +38,53 @@ class UserEmailVerification extends AbstractModel
|
||||
/**
|
||||
* 发验证邮箱
|
||||
* @param User $user
|
||||
* @param int $type
|
||||
* @param null $email
|
||||
*/
|
||||
public static function userEmailSend(User $user)
|
||||
public static function userEmailSend(User $user, $type = 1, $email = null)
|
||||
{
|
||||
$res = self::whereUserid($user->userid)->where('created_at', '>', Carbon::now()->subMinutes(30))->first();
|
||||
$email = $type == 1 ? $user->email : $email;
|
||||
$res = self::whereEmail($email)->where('created_at', '>', Carbon::now()->subMinutes(30))->whereType($type)->first();
|
||||
if ($res) return;
|
||||
//删除
|
||||
self::whereUserid($user->userid)->delete();
|
||||
$userEmailVerification = self::createInstance([
|
||||
self::whereUserid($email)->delete();
|
||||
$code = $type == 1 ? Base::generatePassword(64) : rand(100000, 999999);
|
||||
$row = self::createInstance([
|
||||
'userid' => $user->userid,
|
||||
'email' => $user->email,
|
||||
'code' => Base::generatePassword(64),
|
||||
'email' => $email,
|
||||
'code' => $code,
|
||||
'status' => 0,
|
||||
'type' => $type
|
||||
]);
|
||||
$userEmailVerification->save();
|
||||
|
||||
$row->save();
|
||||
$setting = Base::setting('emailSetting');
|
||||
$url = Base::fillUrl('single/valid/email') . '?code=' . $userEmailVerification->code;
|
||||
try {
|
||||
if (!Base::isEmail($user->email)) {
|
||||
throw new \Exception("User email '{$user->email}' address error");
|
||||
if (!Base::isEmail($email)) {
|
||||
throw new \Exception("User email '{$email}' address error");
|
||||
}
|
||||
$subject = env('APP_NAME') . " 绑定邮箱验证";
|
||||
$content = "<p>{$user->nickname} 您好,您正在绑定 " . env('APP_NAME') . " 的邮箱,请于30分钟之内点击以下链接完成验证 :</p><p style='display: flex; justify-content: center;'><a href='{$url}' target='_blank'>{$url}</a></p>";
|
||||
Setting::validateAddr($user->email, function ($to) use ($content, $subject, $setting) {
|
||||
Factory::mailer()
|
||||
->setDsn("smtp://{$setting['account']}:{$setting['password']}@{$setting['smtp_server']}:{$setting['port']}?verify_peer=0")
|
||||
->setMessage(EmailMessage::create()
|
||||
->from(env('APP_NAME', 'Task') . " <{$setting['account']}>")
|
||||
->to($to)
|
||||
->subject($subject)
|
||||
->html($content))
|
||||
->send();
|
||||
});
|
||||
switch ($type) {
|
||||
case 2:
|
||||
$subject = env('APP_NAME') . "修改邮箱验证";
|
||||
$content = "<p>{$user->nickname} 您好,您正在修改 " . env('APP_NAME') . " 的邮箱,验证码如下。请在30分钟内输入验证码</p><p style='color: #0000DD;'><u>$code</u></p><p>如果不是本人操作,您的帐号可能存在风险,请及时修改密码!</p>";
|
||||
break;
|
||||
case 3:
|
||||
$subject = env('APP_NAME') . "注销帐号验证";
|
||||
$content = "<p>{$user->nickname} 您好,您正在注销 " . env('APP_NAME') . " 的帐号,验证码如下。请在30分钟内输入验证码</p><p style='color: #0000DD;'><u>$code</u></p><p>如果不是本人操作,您的帐号可能存在风险,请及时修改密码!</p>";
|
||||
break;
|
||||
default:
|
||||
$url = Base::fillUrl('single/valid/email') . '?code=' . $row->code;
|
||||
$subject = env('APP_NAME') . "绑定邮箱验证";
|
||||
$content = "<p>{$user->nickname} 您好,您正在绑定 " . env('APP_NAME') . " 的邮箱,请于30分钟之内点击以下链接完成验证 :</p><p style='display: flex; justify-content: center;'><a href='{$url}' target='_blank'>{$url}</a></p>";
|
||||
break;
|
||||
}
|
||||
Factory::mailer()
|
||||
->setDsn("smtp://{$setting['account']}:{$setting['password']}@{$setting['smtp_server']}:{$setting['port']}?verify_peer=0")
|
||||
->setMessage(EmailMessage::create()
|
||||
->from(env('APP_NAME', 'Task') . " <{$setting['account']}>")
|
||||
->to($email)
|
||||
->subject($subject)
|
||||
->html($content))
|
||||
->send();
|
||||
} catch (\Throwable $e) {
|
||||
if (str_contains($e->getMessage(), "Timed Out")) {
|
||||
throw new ApiException("language.TimedOut");
|
||||
@ -79,4 +95,39 @@ class UserEmailVerification extends AbstractModel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验验证码
|
||||
* @param $email
|
||||
* @param $code
|
||||
* @param int $type
|
||||
* @return bool
|
||||
*/
|
||||
public static function verify($email, $code, $type = 1)
|
||||
{
|
||||
if (!$code) {
|
||||
throw new ApiException('请输入验证码');
|
||||
}
|
||||
/** @var UserEmailVerification $emailVerify */
|
||||
$emailVerify = self::whereEmail($email)->whereCode($code)->whereType($type)->orderByDesc('id')->first();
|
||||
|
||||
if (empty($emailVerify)) {
|
||||
throw new ApiException('验证码错误');
|
||||
}
|
||||
|
||||
$oldTime = Carbon::parse($emailVerify->created_at)->timestamp;
|
||||
$time = Base::Time();
|
||||
|
||||
// 30分钟失效
|
||||
if (abs($time - $oldTime) > 1800) {
|
||||
throw new ApiException('验证码已失效');
|
||||
}
|
||||
|
||||
self::whereEmail($email)->whereCode($code)->whereType($type)->update([
|
||||
'status' => 1
|
||||
]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddTypeToUserEmailVerificationsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('user_email_verifications', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('user_email_verifications', 'type')) {
|
||||
$table->tinyInteger('type')->nullable()->default(1)->after('status')->comment('邮件类型:1-邮箱认证,2-修改邮箱');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('user_email_verifications', function (Blueprint $table) {
|
||||
$table->dropColumn("type");
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateUserDeletesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('user_deletes', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->bigInteger('userid')->nullable()->default(0)->comment('用户id');
|
||||
$table->string('email', 100)->nullable()->default('')->comment('邮箱帐号');
|
||||
$table->text('reason')->nullable()->comment('注销原因');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('user_deletes');
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "DooTask",
|
||||
"version": "0.19.26",
|
||||
"version": "0.19.40",
|
||||
"description": "DooTask is task management system.",
|
||||
"scripts": {
|
||||
"start": "./cmd dev",
|
||||
|
||||
2
public/css/app.css
vendored
2
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
6
public/docs/assets/main.bundle.js
vendored
6
public/docs/assets/main.bundle.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/app.js
vendored
2
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
1
public/js/build/259.js
vendored
Normal file
1
public/js/build/259.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"use strict";(self.webpackChunkDooTask=self.webpackChunkDooTask||[]).push([[259],{79259:(t,e,n)=>{n.r(e),n.d(e,{default:()=>s});const a={data:function(){var t=this;return{loadIng:0,formDatum:{newEmail:"",code:""},ruleDatum:{newEmail:[{validator:function(e,n,a){""===n.trim()?a(new Error(t.$L("请输入新邮箱地址!"))):$A.isEmail(n.trim())?a():a(new Error(t.$L("请输入正确的邮箱地址!")))},required:!0,trigger:"change"}]},count:0,isSendButtonShow:!0,isRegVerify:0,sendBtnText:this.$L("发送验证码")}},mounted:function(){this.getRegVerify()},methods:{sendEmailCode:function(){var t=this;this.$store.dispatch("call",{url:"users/email/send",data:{type:2,email:this.formDatum.newEmail},spinner:!0}).then((function(e){t.isSendButtonShow=!1,t.count=120,t.sendBtnText=t.count+" 秒";var n=setInterval((function(){t.count--,t.sendBtnText=t.count+" 秒",t.count<=0&&(t.sendBtnText=t.$L("发送验证码"),clearInterval(n))}),1e3)})).catch((function(t){var e=t.msg;$A.messageError(e)}))},submitForm:function(){var t=this;this.$refs.formDatum.validate((function(e){e&&(t.loadIng++,t.$store.dispatch("call",{url:"users/email/edit",data:t.formDatum}).then((function(e){var n=e.data;$A.messageSuccess("修改成功"),t.$store.dispatch("saveUserInfo",n),t.$refs.formDatum.resetFields(),t.isSendButtonShow=!0})).catch((function(t){var e=t.msg;$A.modalError(e)})).finally((function(e){t.loadIng--})))}))},resetForm:function(){this.$refs.formDatum.resetFields()},getRegVerify:function(){var t=this;this.$store.dispatch("call",{url:"system/setting/email"}).then((function(e){var n=e.data;t.isRegVerify="open"===n.reg_verify}))}}};const s=(0,n(51900).Z)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"setting-item submit"},[n("Form",{ref:"formDatum",attrs:{model:t.formDatum,rules:t.ruleDatum,"label-width":"auto"},nativeOn:{submit:function(t){t.preventDefault()}}},[n("FormItem",{attrs:{label:t.$L("新邮箱地址"),prop:"newEmail"}},[n("div",{staticClass:"setting-email"},[1==t.isRegVerify?n("Input",{class:t.count>0?"setting-send-input":"setting-input",attrs:{search:"","enter-button":t.$L(t.sendBtnText),placeholder:t.$L("输入新邮箱地址")},on:{"on-search":t.sendEmailCode},model:{value:t.formDatum.newEmail,callback:function(e){t.$set(t.formDatum,"newEmail",e)},expression:"formDatum.newEmail"}}):n("Input",{staticClass:"setting-input",attrs:{placeholder:t.$L("输入新邮箱地址")},model:{value:t.formDatum.newEmail,callback:function(e){t.$set(t.formDatum,"newEmail",e)},expression:"formDatum.newEmail"}})],1)]),t._v(" "),1==t.isRegVerify?n("FormItem",{attrs:{label:t.$L("验证码"),prop:"code"}},[n("Input",{attrs:{placeholder:t.$L("输入邮箱验证码")},model:{value:t.formDatum.code,callback:function(e){t.$set(t.formDatum,"code",e)},expression:"formDatum.code"}})],1):t._e()],1),t._v(" "),n("div",{staticClass:"setting-footer"},[n("Button",{attrs:{loading:t.loadIng>0,type:"primary"},on:{click:t.submitForm}},[t._v(t._s(t.$L("提交")))]),t._v(" "),n("Button",{staticStyle:{"margin-left":"8px"},attrs:{loading:t.loadIng>0},on:{click:t.resetForm}},[t._v(t._s(t.$L("重置")))])],1)],1)}),[],!1,null,null,null).exports}}]);
|
||||
File diff suppressed because one or more lines are too long
1
public/js/build/38.js
vendored
1
public/js/build/38.js
vendored
@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunkDooTask=self.webpackChunkDooTask||[]).push([[38],{89038:(t,e,n)=>{n.r(e),n.d(e,{default:()=>p});var a=n(20629),i=n(80641),s=n(9669),o=n.n(s);function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function c(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){u(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function u(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const l={data:function(){return{version:window.systemInfo.version}},mounted:function(){},computed:c(c({},(0,a.rn)(["userInfo","userIsAdmin","clientNewVersion"])),{},{routeName:function(){return this.$route.name},show768Menu:function(){return"manage-setting"===this.routeName},menu:function(){var t=[{path:"personal",name:"个人设置"},{path:"language",name:"语言设置"},{path:"password",name:"密码设置"}];return["127.0.0.1:2222","t.hitosea.com","dootask.com","www.dootask.com"].includes($A.getDomain($A.apiUrl("../")))&&this.$isEEUiApp&&t.push({path:"privacy",name:"隐私政策"}),this.windowSmall&&t.push({path:"clearCache",name:"清除缓存"}),this.userIsAdmin?t.push.apply(t,[{path:"system",name:"系统设置",divided:!0},{path:"logout",name:"退出登录"}]):t.push.apply(t,[{path:"logout",name:"退出登录",divided:!0}]),t},titleNameRoute:function(){var t=this.routeName,e=this.menu,n="";return e.some((function(e){if(t==="manage-setting-".concat(e.path))return n=e.name,!0})),n||"设置"}}),watch:{routeName:{handler:function(t){"manage-setting"===t&&this.windowLarge&&this.goForward({name:"manage-setting-personal"},!0)},immediate:!0}},methods:{toggleRoute:function(t){var e=this;switch(t){case"clearCache":this.$store.dispatch("handleClearCache",null).then((function(){$A.setStorage("clearCache",$A.randomString(6)),$A.reloadUrl()})).catch((function(){$A.reloadUrl()}));break;case"logout":$A.modalConfirm({title:"退出登录",content:"你确定要登出系统?",onOk:function(){e.$store.dispatch("logout",!1)}});break;case"version":i.Store.set("updateNotification",null);break;case"privacy":this.openPrivacy();break;case"index":this.goForward({name:"manage-setting"});break;default:this.goForward({name:"manage-setting-"+t})}},openPrivacy:function(){var t=$A.apiUrl("../privacy.html");this.$isEEUiApp?$A.eeuiAppOpenPage({pageType:"app",pageTitle:" ",url:"web.js",params:{url:t,browser:!0,showProgress:!0}}):window.open(t)},classNameRoute:function(t,e){return{active:this.windowLarge&&this.routeName==="manage-setting-".concat(t),divided:!!e}},onVersion:function(){var t=this;this.$Electron&&o().get($A.apiUrl("system/version")).then((function(e){var n=e.status,a=e.data;if(200===n){var i="".concat(t.$L("服务器"),": ").concat($A.getDomain($A.apiUrl("../")));i+="<br/>".concat(t.$L("服务器版本"),": v").concat(a.version),i+="<br/>".concat(t.$L("客户端版本"),": v").concat(t.version),$A.modalInfo({content:i})}})).catch((function(t){}))}}};const p=(0,n(51900).Z)(l,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"page-setting"},[n("PageTitle",{attrs:{title:t.$L(t.titleNameRoute)}}),t._v(" "),n("div",{staticClass:"setting-head"},[n("div",{staticClass:"setting-titbox"},[n("div",{staticClass:"setting-title"},[n("h1",[t._v(t._s(t.$L("设置")))]),t._v(" "),t.show768Menu?t._e():n("div",{staticClass:"setting-more",on:{click:function(e){return t.toggleRoute("index")}}},[n("Icon",{attrs:{type:"md-close"}})],1)])])]),t._v(" "),n("div",{staticClass:"setting-box"},[n("div",{staticClass:"setting-menu",class:{"show768-menu":t.show768Menu}},[n("ul",[t._l(t.menu,(function(e,a){return n("li",{key:a,class:t.classNameRoute(e.path,e.divided),on:{click:function(n){return t.toggleRoute(e.path)}}},[t._v(t._s(t.$L(e.name)))])})),t._v(" "),t.clientNewVersion?n("li",{class:t.classNameRoute("version",!0),on:{click:function(e){return t.toggleRoute("version")}}},[n("AutoTip",{attrs:{disabled:""}},[t._v(t._s(t.$L("版本"))+": "+t._s(t.version))]),t._v(" "),n("Badge",{attrs:{text:t.clientNewVersion}})],1):n("li",{staticClass:"version divided",on:{click:t.onVersion}},[n("AutoTip",[t._v(t._s(t.$L("版本"))+": "+t._s(t.version))])],1)],2)]),t._v(" "),n("div",{staticClass:"setting-content"},[n("div",{staticClass:"setting-content-title"},[t._v(t._s(t.$L(t.titleNameRoute)))]),t._v(" "),n("div",{staticClass:"setting-content-view"},[n("router-view",{staticClass:"setting-router-view"})],1)])])],1)}),[],!1,null,null,null).exports}}]);
|
||||
File diff suppressed because one or more lines are too long
1
public/js/build/571.js
vendored
Normal file
1
public/js/build/571.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
public/js/build/710.js
vendored
2
public/js/build/710.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/769.js
vendored
2
public/js/build/769.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/771.js
vendored
2
public/js/build/771.js
vendored
File diff suppressed because one or more lines are too long
1
public/js/build/957.js
vendored
Normal file
1
public/js/build/957.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"use strict";(self.webpackChunkDooTask=self.webpackChunkDooTask||[]).push([[957],{1957:(t,e,n)=>{n.r(e),n.d(e,{default:()=>d});var a=n(20629),i=n(80641),s=n(9669),o=n.n(s);function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function c(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){u(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function u(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const l={data:function(){return{version:window.systemInfo.version}},mounted:function(){},computed:c(c({},(0,a.rn)(["userInfo","userIsAdmin","clientNewVersion"])),{},{routeName:function(){return this.$route.name},show768Menu:function(){return"manage-setting"===this.routeName},menu:function(){var t=[{path:"personal",name:"个人设置"},{path:"language",name:"语言设置"},{path:"password",name:"密码设置"},{path:"email",name:"修改邮箱"}];return["127.0.0.1:2222","t.hitosea.com","dootask.com","www.dootask.com"].includes($A.getDomain($A.apiUrl("../")))&&this.$isEEUiApp&&t.push({path:"privacy",name:"隐私政策"}),this.windowSmall&&t.push({path:"clearCache",name:"清除缓存"}),this.userIsAdmin?t.push.apply(t,[{path:"system",name:"系统设置",divided:!0},{path:"logout",name:"退出登录"},{path:"delete",name:"删除账户",divided:!0}]):t.push.apply(t,[{path:"logout",name:"退出登录",divided:!0},{path:"delete",name:"删除账户",divided:!0}]),t},titleNameRoute:function(){var t=this.routeName,e=this.menu,n="";return e.some((function(e){if(t==="manage-setting-".concat(e.path))return n=e.name,!0})),n||"设置"}}),watch:{routeName:{handler:function(t){"manage-setting"===t&&this.windowLarge&&this.goForward({name:"manage-setting-personal"},!0)},immediate:!0}},methods:{toggleRoute:function(t){var e=this;switch(t){case"clearCache":this.$store.dispatch("handleClearCache",null).then((function(){$A.setStorage("clearCache",$A.randomString(6)),$A.reloadUrl()})).catch((function(){$A.reloadUrl()}));break;case"logout":$A.modalConfirm({title:"退出登录",content:"你确定要登出系统?",onOk:function(){e.$store.dispatch("logout",!1)}});break;case"version":i.Store.set("updateNotification",null);break;case"privacy":this.openPrivacy();break;case"index":this.goForward({name:"manage-setting"});break;default:this.goForward({name:"manage-setting-"+t})}},openPrivacy:function(){var t=$A.apiUrl("../privacy.html");this.$isEEUiApp?$A.eeuiAppOpenPage({pageType:"app",pageTitle:" ",url:"web.js",params:{url:t,browser:!0,showProgress:!0}}):window.open(t)},classNameRoute:function(t,e){return{active:this.windowLarge&&this.routeName==="manage-setting-".concat(t),divided:!!e}},onVersion:function(){var t=this;this.$Electron&&o().get($A.apiUrl("system/version")).then((function(e){var n=e.status,a=e.data;if(200===n){var i="".concat(t.$L("服务器"),": ").concat($A.getDomain($A.apiUrl("../")));i+="<br/>".concat(t.$L("服务器版本"),": v").concat(a.version),i+="<br/>".concat(t.$L("客户端版本"),": v").concat(t.version),$A.modalInfo({content:i})}})).catch((function(t){}))}}};const d=(0,n(51900).Z)(l,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"page-setting"},[n("PageTitle",{attrs:{title:t.$L(t.titleNameRoute)}}),t._v(" "),n("div",{staticClass:"setting-head"},[n("div",{staticClass:"setting-titbox"},[n("div",{staticClass:"setting-title"},[n("h1",[t._v(t._s(t.$L("设置")))]),t._v(" "),t.show768Menu?t._e():n("div",{staticClass:"setting-more",on:{click:function(e){return t.toggleRoute("index")}}},[n("Icon",{attrs:{type:"md-close"}})],1)])])]),t._v(" "),n("div",{staticClass:"setting-box"},[n("div",{staticClass:"setting-menu",class:{"show768-menu":t.show768Menu}},[n("ul",[t._l(t.menu,(function(e,a){return n("li",{key:a,class:t.classNameRoute(e.path,e.divided),on:{click:function(n){return t.toggleRoute(e.path)}}},[t._v(t._s(t.$L(e.name)))])})),t._v(" "),t.clientNewVersion?n("li",{class:t.classNameRoute("version",!0),on:{click:function(e){return t.toggleRoute("version")}}},[n("AutoTip",{attrs:{disabled:""}},[t._v(t._s(t.$L("版本"))+": "+t._s(t.version))]),t._v(" "),n("Badge",{attrs:{text:t.clientNewVersion}})],1):n("li",{staticClass:"version divided",on:{click:t.onVersion}},[n("AutoTip",[t._v(t._s(t.$L("版本"))+": "+t._s(t.version))])],1)],2)]),t._v(" "),n("div",{staticClass:"setting-content"},[n("div",{staticClass:"setting-content-title"},[t._v(t._s(t.$L(t.titleNameRoute)))]),t._v(" "),n("div",{staticClass:"setting-content-view"},[n("router-view",{staticClass:"setting-router-view"})],1)])])],1)}),[],!1,null,null,null).exports}}]);
|
||||
@ -1 +1 @@
|
||||
6586745bdc12b0bd
|
||||
e93ea29a9d688c12
|
||||
|
||||
30
public/js/language.all.js
vendored
30
public/js/language.all.js
vendored
@ -500,5 +500,35 @@
|
||||
{"CN": "邀请码:注册时需填写下方邀请码。","EN": "Invitation code: You need to fill in the following invitation code when registering.","TC": "邀請碼:註冊時需填寫下方邀請碼。","KM": "លេខកូដលិខិតអញ្ជើញ: អ្នកត្រូវបំពេញលេខកូដលិខិតអញ្ជើញខាងក្រោមនៅពេលចុះឈ្មោះ។","TH": "รหัสเชิญ: คุณต้องกรอกรหัสคำเชิญต่อไปนี้เมื่อลงทะเบียน","KO": "초대 코드 : 등록 할 때 다음 초대 코드를 입력해야합니다.","JA": "招待コード:登録時に次の招待コードを入力する必要があります。"},
|
||||
{"CN": "添加模板","EN": "Add template","TC": "添加模板","KM": "បន្ថែមគំរូ","TH": "เพิ่มเทมเพลต","KO": "템플릿을 추가하십시오","JA": "テンプレートを追加します"},
|
||||
{"CN": "版本","EN": "Version","TC": "版本","KM": "កមបុរក្នា","TH": "รุ่น","KO": "버전","JA": "バージョン"},
|
||||
{"CN": "请输入新邮箱地址","EN": "Please enter the new mailbox address","TC": "請輸入新郵箱地址","KM": "សូមបញ្ចូលអាសយដ្ឋានប្រអប់សំបុត្រថ្មី","TH": "โปรดป้อนที่อยู่กล่องจดหมายใหม่","KO": "새 사서함 주소를 입력하십시오","JA": "新しいメールボックスアドレスを入力してください"},
|
||||
{"CN": "邮箱地址错误","EN": "Email address error","TC": "郵箱地址錯誤","KM": "កំហុសអាសយដ្ឋានអ៊ីមែល","TH": "ข้อผิดพลาดที่อยู่อีเมล","KO": "이메일 주소 오류","JA": "メールアドレスエラー"},
|
||||
{"CN": "不能与旧邮箱一致","EN": "Can't be consistent with the old mailbox","TC": "不能與舊郵箱一致","KM": "មិនអាចត្រូវបានស្របជាមួយនឹងប្រអប់សំបុត្រចាស់","TH": "ไม่สามารถสอดคล้องกับกล่องจดหมายเก่า","KO": "이전 사서함과 일치 할 수 없습니다","JA": "古いメールボックスと一致することはできません"},
|
||||
{"CN": "验证码错误","EN": "Verification code error","TC": "驗證碼錯誤","KM": "កំហុសក្នុងការផ្ទៀងផ្ទាត់លេខកូដ","TH": "ข้อผิดพลาดของรหัสการตรวจสอบ","KO": "Verifin 코드 오류","JA": "検証コードエラー"},
|
||||
{"CN": "验证码已失效","EN": "The verification code has failed","TC": "驗證碼已失效","KM": "លេខកូដផ្ទៀងផ្ទាត់បានបរាជ័យ","TH": "รหัสการยืนยันล้มเหลว","KO": "검증 코드가 실패했습니다","JA": "検証コードは失敗しました"},
|
||||
{"CN": "发送验证码","EN": "Send the verification code","TC": "發送驗證碼","KM": "ផ្ញើកូដផ្ទៀងផ្ទាត់","TH": "ส่งรหัสการยืนยัน","KO": "확인 코드를 보냅니다","JA": "確認コードを送信します"},
|
||||
{"CN": "秒","EN": "Second","TC": "秒","KM": "ដេលរេបីរយចហើយ","TH": "ที่สอง","KO": "섹스","JA": "2番目"},
|
||||
{"CN": "输入邮箱验证码","EN": "Enter the mailbox verification code","TC": "輸入郵箱驗證碼","KM": "បញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ប្រអប់សំបុត្រ","TH": "ป้อนรหัสการยืนยันกล่องจดหมาย","KO": "사서함 확인 코드를 입력하십시오","JA": "メールボックス検証コードを入力します"},
|
||||
{"CN": "新邮箱地址","EN": "New mailbox address","TC": "新郵箱地址","KM": "អាសយដ្ឋានប្រអប់សំបុត្រថ្មី","TH": "ที่อยู่กล่องจดหมายใหม่","KO": "새로운 사서함 주소","JA": "新しいメールボックスアドレス"},
|
||||
{"CN": "请输入新邮箱地址!","EN": "Please enter the new mailbox address!","TC": "請輸入新郵箱地址!","KM": "សូមបញ្ចូលអាសយដ្ឋានប្រអប់សំបុត្រថ្មី!","TH": "กรุณากรอกที่อยู่กล่องจดหมายใหม่!","KO": "새 사서함 주소를 입력하십시오!","JA": "新しいメールボックスアドレスを入力してください!"},
|
||||
{"CN": "请输入正确的邮箱地址!","EN": "Please input the correct email address!","TC": "請輸入正確的郵箱地址!","KM": "សូមបញ្ចូលអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវ!","TH": "กรุณาป้อนที่อยู่อีเมลที่ถูกต้อง!","KO": "thecorct 이메일 주소를 입력하십시오!","JA": "正しいメールアドレスを入力してください!"},
|
||||
{"CN": "验证码","EN": "Verification code","TC": "驗證碼","KM": "កូដផ្ទៀងផ្ទាត់","TH": "รหัสการตรวจสอบ","KO": "Verifin 코드","JA": "検証コード"},
|
||||
{"CN": "修改邮箱","EN": "Modify the mailbox","TC": "修改郵箱","KM": "កែប្រែប្រអប់សំបុត្រ","TH": "แก้ไขกล่องจดหมาย","KO": "사서함을 수정하십시오","JA": "メールボックスを変更します"},
|
||||
{"CN": "删除账户","EN": "Delete account","TC": "刪除賬戶","KM": "លុបគណនី","TH": "ลบบัญชี","KO": "계정 삭제","JA": "アカウントを削除する"},
|
||||
{"CN": "请输入邮箱账号","EN": "Please enter the mailbox account","TC": "請輸入郵箱賬號","KM": "សូមបញ្ចូលគណនីប្រអប់សំបុត្រ","TH": "กรุณากรอกบัญชีกล่องจดหมาย","KO": "사서함 계정을 입력하십시오","JA": "メールボックスアカウントを入力してください"},
|
||||
{"CN": "邮箱验证码","EN": "E-mail verification code","TC": "郵箱驗證碼","KM": "លេខកូដផ្ទៀងផ្ទាត់អ៊ីមែល","TH": "รหัสตรวจสอบอีเมล","KO": "이메일 Verofice 코드","JA": "電子メール検証コード"},
|
||||
{"CN": "请输入邮箱验证码","EN": "Please enter the mailbox verification code","TC": "請輸入郵箱驗證碼","KM": "សូមបញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ប្រអប់សំបុត្រ","TH": "โปรดป้อนรหัสการยืนยันกล่องจดหมาย","KO": "사서함 확인 코드를 입력하십시오","JA": "メールボックス検証コードを入力してください"},
|
||||
{"CN": "请输入登录密码","EN": "Please enter your password","TC": "請輸入登錄密碼","KM": "សូមបញ្ចូលពាក្យសម្ងាត់របស់អ្នក","TH": "กรุณาใส่รหัสผ่านของคุณ","KO": "비밀번호를 입력하십시오","JA": "パスワードを入力してください"},
|
||||
{"CN": "登录密码","EN": "Login password","TC": "登錄密碼","KM": "បង្អួចបង្អួចចូល","TH": "รหัสผ่านในการเข้าสู่ระบบ","KO": "로그인 비밀번호","JA": "ログインパスワード"},
|
||||
{"CN": "删除原因","EN": "Delete","TC": "刪除原因","KM": "របៅបេលរសច","TH": "ลบ","KO": "삭제","JA": "消去"},
|
||||
{"CN": "请输入注销原因","EN": "Please enter the reason for cancellation","TC": "請輸入註銷原因","KM": "សូមបញ្ចូលហេតុផលសម្រាប់ការលុបចោល","TH": "โปรดป้อนเหตุผลในการยกเลิก","KO": "취소 이유를 입력하십시오","JA": "キャンセルの理由を入力してください"},
|
||||
{"CN": "删除DooTask账号","EN": "Delete Dootask account","TC": "刪除DooTask賬號","KM": "លុបគណនី dootask","TH": "ลบบัญชี dootask","KO": "Dootask 계정을 삭제하십시오","JA": "Dootaskアカウントを削除します"},
|
||||
{"CN": "账号删除后,该账号将无法正常登录且无法恢复,账号下的所有数据也将被删除。'","EN": "After the account is deleted, the account will not be able to log in normally and cannot be restored, and all the data under the account will be deleted. '","TC": "賬號刪除後,該賬號將無法正常登錄且無法恢復,賬號下的所有數據也將被刪除。 '","KM": "បន្ទាប់ពីគណនីត្រូវបានលុបគណនីនឹងមិនអាចចូលជាធម្មតាទេហើយមិនអាចស្តារឡើងវិញបានទេហើយទិន្នន័យទាំងអស់ដែលនៅក្រោមគណនីនឹងត្រូវបានលុបចោល។ ផាប","TH": "หลังจากลบบัญชีบัญชีจะไม่สามารถเข้าสู่ระบบได้ตามปกติและไม่สามารถกู้คืนได้และข้อมูลทั้งหมดภายใต้บัญชีจะถูกลบ '","KO": "계정이 삭제되면 계정은 정상적으로 로그인 할 수없고 복원 할 수 없으며 계정의 모든 데이터가 삭제됩니다. '","JA": "アカウントが削除された後、アカウントは正常にログインできず、復元できず、アカウントのすべてのデータが削除されます。 '"},
|
||||
{"CN": "注销前,请确认一下事项:","EN": "Before canceling, please confirm the matters:","TC": "註銷前,請確認一下事項:","KM": "មុនពេលបោះបង់សូមបញ្ជាក់ពីបញ្ហា:","TH": "ก่อนยกเลิกโปรดยืนยันเรื่อง:","KO": "Canceeling 전에 문제를 확인하십시오.","JA": "キャンセルする前に、問題を確認してください:"},
|
||||
{"CN": "1、您将无法查看该账号内的任何信息,包括账号信息、文件记录、聊天记录、项目信息、团队成员信息等。","EN": "1. You will not be able to view any information in this account, including account information, file records, chat records, project information, team member information, etc.","TC": "1、您將無法查看該賬號內的任何信息,包括賬號信息、文件記錄、聊天記錄、項目信息、團隊成員信息等。","KM": "1. អ្នកនឹងមិនអាចមើលព័ត៌មានណាមួយនៅក្នុងគណនីនេះរួមមានព័ត៌មានគណនីកំណត់ត្រាឯកសារកំណត់ត្រាជជែកឯកសារព័ត៌មានគម្រោងព័ត៌មានសមាជិកក្រុមព័ត៌មានក្រុម។ ល។","TH": "1. คุณจะไม่สามารถดูข้อมูลใด ๆ ในบัญชีนี้รวมถึงข้อมูลบัญชีบันทึกไฟล์บันทึกการแชทข้อมูลโครงการข้อมูลสมาชิกในทีม ฯลฯ","KO": "1. 계정 정보, 파일 기록, 프로세스 정보, 팀 메시지 정보 등을 포함 하여이 계정의 정보를 볼 수 없습니다.","JA": "1.アカウント情報、ファイルレコード、チャットレコード、プロジェクト情報、チームメンバー情報など、このアカウントで情報を表示できません。"},
|
||||
{"CN": "2、若你是团队的所有者,请在注销您的账户前转移所有权。例如该账户所创建的项目(可将项目移交他人或删除项目)以及文件夹。","EN": "2. If you are the owner of the team, please transfer ownership before cancel your account. For example, the project created by the account (which can be transferred to others or deleted items) and folders.","TC": "2、若你是團隊的所有者,請在註銷您的賬戶前轉移所有權。例如該賬戶所創建的項目(可將項目移交他人或刪除項目)以及文件夾。","KM": "ប្រសិនបើអ្នកជាម្ចាស់ក្រុមសូមផ្ទេរកម្មឯកមុនពេលបោះបង់គណនីរបស់អ្នក។ ឧទាហរណ៍គម្រោងដែលបង្កើតដោយគណនី (ដែលអាចផ្ទេរទៅឱ្យអ្នកដទៃឬធាតុដែលបានលុប) និងថតឯកសារ។","TH": "2. หากคุณเป็นเจ้าของทีมโปรดถ่ายโอนความเป็นเจ้าของก่อนยกเลิกบัญชีของคุณ ตัวอย่างเช่นโครงการที่สร้างขึ้นโดยบัญชี (ซึ่งสามารถถ่ายโอนไปยังผู้อื่นหรือรายการที่ถูกลบ) และโฟลเดอร์","KO": "2. 팀의 소유자 인 경우 계정을 취소하기 전에 소유권을 전송하십시오. 예를 들어, 계정에서 만든 프로젝트 (다른 사람 또는 삭제 된 품목으로 전송할 수 있음) 및 폴더.","JA": "2.チームの所有者である場合は、アカウントをキャンセルする前に所有権を譲渡してください。たとえば、アカウントによって作成されたプロジェクト(他の人または削除されたアイテムに転送できます)およびフォルダー。"},
|
||||
{"CN": "3、您将退出所有群聊,无法查到过往消息和人员。","EN": "3. You will exit all group chats and cannot find past news and personnel.","TC": "3、您將退出所有群聊,無法查到過往消息和人員。","KM": "3. អ្នកនឹងចាកចេញពីការជជែកជាក្រុមទាំងអស់ហើយមិនអាចរកព័ត៌មាននិងបុគ្គលិកពីមុនបានទេ។","TH": "3. คุณจะออกจากการแชทกลุ่มทั้งหมดและไม่พบข่าวและบุคลากรที่ผ่านมา","KO": "3. 모든 그룹 채팅을 종료하고 과거 뉴스와 인사를 찾을 수 없습니다.","JA": "3.すべてのグループチャットを終了し、過去のニュースや人員を見つけることができません。"},
|
||||
{"CN": "4、请保证账号未被暂停使用。","EN": "4. Please ensure that the account is not suspended.","TC": "4、請保證賬號未被暫停使用。","KM": "សូមប្រាកដថាគណនីមិនត្រូវបានផ្អាក។","TH": "4. โปรดตรวจสอบให้แน่ใจว่าบัญชีจะไม่ถูกระงับ","KO": "4. 계정이 해결되지 않았는지 확인하십시오.","JA": "4.アカウントが停止されていないことを確認してください。"},
|
||||
{"CN": "已清楚风险,确定注销","EN": "Clear risk, determine cancellation","TC": "已清楚風險,確定註銷","KM": "ប្រថុយប្រថុយកំណត់ការលុបចោលការលុបចោល","TH": "ความเสี่ยงที่ชัดเจนกำหนดการยกเลิก","KO": "명확한 위험, 취소를 결정하십시오","JA": "明確なリスク、キャンセルを決定します"},
|
||||
{"CN": "账号删除后,该账号将无法正常登录且无法恢复,账号下的所有数据也将被删除。","EN": "After the account is deleted, the account will not be able to log in normally and cannot be restored, and all the data under the account will be deleted.","TC": "賬號刪除後,該賬號將無法正常登錄且無法恢復,賬號下的所有數據也將被刪除。","KM": "បន្ទាប់ពីគណនីត្រូវបានលុបគណនីនឹងមិនអាចចូលជាធម្មតាទេហើយមិនអាចស្តារឡើងវិញបានទេហើយទិន្នន័យទាំងអស់ដែលនៅក្រោមគណនីនឹងត្រូវបានលុបចោល។","TH": "หลังจากลบบัญชีบัญชีจะไม่สามารถเข้าสู่ระบบได้ตามปกติและไม่สามารถกู้คืนได้และข้อมูลทั้งหมดภายใต้บัญชีจะถูกลบ","KO": "계정이 삭제되면 계정은 정상적으로 로그인 할 수없고 복원 할 수 없으며 계정의 모든 데이터가 삭제됩니다.","JA": "アカウントが削除された後、アカウントは正常にログインできず、復元できず、アカウントのすべてのデータが削除されます。"},
|
||||
]
|
||||
})(window)
|
||||
|
||||
@ -62,8 +62,8 @@
|
||||
</ul>
|
||||
</div>
|
||||
<!--等待-->
|
||||
<div v-else-if="msgData.type === 'loading'" class="content-loading">
|
||||
<Loading/>
|
||||
<div v-else-if="msgData.type === 'loading'" class="content-text no-dark-content">
|
||||
......
|
||||
</div>
|
||||
<!--未知-->
|
||||
<div v-else class="content-unknown">{{$L("未知的消息类型")}}</div>
|
||||
|
||||
@ -317,7 +317,9 @@ export default {
|
||||
this.$refs[`meeting_${this.localUser.uid}`].play('video')
|
||||
}
|
||||
// 将本地视频曲目播放到本地浏览器、将本地音频和视频发布到频道。
|
||||
await this.agoraClient.publish(localTracks);
|
||||
if (localTracks.length > 0) {
|
||||
await this.agoraClient.publish(localTracks);
|
||||
}
|
||||
//
|
||||
this.loadIng--;
|
||||
this.addShow = false;
|
||||
|
||||
@ -29,7 +29,11 @@
|
||||
<Radio label="open">{{ $L('开启') }}</Radio>
|
||||
<Radio label="close">{{ $L('关闭') }}</Radio>
|
||||
</RadioGroup>
|
||||
<div v-if="formData.reg_verify == 'open'" class="form-tip">{{$L('开启后帐号需验证通过才可登录')}}</div>
|
||||
<div v-if="formData.reg_verify == 'open'" class="form-tip">
|
||||
{{$L('开启后:')}}<br/>
|
||||
{{$L('① 帐号需验证通过才可登录')}}<br/>
|
||||
{{$L('② 修改邮箱和删除帐号需要邮箱验证码')}}
|
||||
</div>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('任务提醒')" prop="notice">
|
||||
<RadioGroup v-model="formData.notice">
|
||||
|
||||
170
resources/assets/js/pages/manage/setting/delete.vue
Normal file
170
resources/assets/js/pages/manage/setting/delete.vue
Normal file
@ -0,0 +1,170 @@
|
||||
<template>
|
||||
<div class="setting-item submit">
|
||||
<Form ref="formDatum" :model="formDatum" :rules="ruleDatum" label-width="auto" @submit.native.prevent>
|
||||
<FormItem :label="$L('帐号')" prop="email">
|
||||
<div class="setting-email">
|
||||
<Input v-if="isRegVerify == 1" v-model="formDatum.email"
|
||||
:class="count > 0 ? 'setting-send-input':'setting-input'" search @on-search="sendEmailCode"
|
||||
:enter-button="$L(sendBtnText)" :placeholder="$L('请输入邮箱')"/>
|
||||
<Input v-else class="setting-input" v-model="formDatum.email" :placeholder="$L('请输入邮箱帐号')"/>
|
||||
</div>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('邮箱验证码')" prop="code" v-if="isRegVerify == 1">
|
||||
<Input v-model="formDatum.code" :placeholder="$L('请输入邮箱验证码')"/>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('登录密码')" prop="code" v-else>
|
||||
<Input v-model="formDatum.password" type="password" :placeholder="$L('请输入登录密码')"/>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('删除原因')">
|
||||
<Input v-model="formDatum.reason" type="textarea" :autosize="{minRows: 4,maxRows: 8}"
|
||||
:placeholder="$L('请输入注销原因')"></Input>
|
||||
</FormItem>
|
||||
</Form>
|
||||
<div class="setting-footer">
|
||||
<Button :loading="loadIng > 0" type="primary" @click="submitForm('warning')">{{ $L('提交') }}</Button>
|
||||
<Button :loading="loadIng > 0" @click="resetForm" style="margin-left: 8px">{{ $L('重置') }}</Button>
|
||||
</div>
|
||||
<Modal
|
||||
v-model="warningShow"
|
||||
:title="$L(`删除${appTitle}帐号`)"
|
||||
class="page-setting-delete-box">
|
||||
<div class="big-text">{{ $L('帐号删除后,该帐号将无法正常登录且无法恢复,帐号下的所有数据也将被删除。') }}</div>
|
||||
<div class="small-text">
|
||||
<div>{{ $L('注销前,请确认一下事项:') }}</div>
|
||||
<div>{{ $L('1、您将无法查看该帐号内的任何信息,包括帐号信息、文件记录、聊天记录、项目信息、团队成员信息等。') }}</div>
|
||||
<div>{{ $L('2、若你是团队的所有者,请在注销您的账户前转移所有权。例如该账户所创建的项目(可将项目移交他人或删除项目)以及文件夹。') }}</div>
|
||||
<div>{{ $L('3、您将退出所有群聊,无法查到过往消息和人员。') }}</div>
|
||||
<div>{{ $L('4、请保证帐号未被暂停使用。') }}</div>
|
||||
</div>
|
||||
<div slot="footer" class="button-box">
|
||||
<Button type="primary" :loading="loadIng > 0" @click="submitForm('confirm')">{{ $L('已清楚风险,确定注销') }}
|
||||
</Button>
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from "vuex";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loadIng: 0,
|
||||
|
||||
formDatum: {
|
||||
email: '',
|
||||
code: '',
|
||||
reason: '',
|
||||
password: '',
|
||||
},
|
||||
ruleDatum: {
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value.trim() === '') {
|
||||
callback(new Error(this.$L('请输入邮箱帐号!')));
|
||||
} else if (!$A.isEmail(value.trim())) {
|
||||
callback(new Error(this.$L('请输入正确邮箱帐号!')));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
required: true,
|
||||
trigger: 'change'
|
||||
},
|
||||
],
|
||||
},
|
||||
count: 0,
|
||||
isSendButtonShow: true,
|
||||
codeShow: false,
|
||||
isRegVerify: 0,
|
||||
warningShow: false,
|
||||
sendBtnText: this.$L('发送验证码')
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.formDatum.email = this.userInfo.email
|
||||
this.getRegVerify();
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapState(['userInfo']),
|
||||
|
||||
appTitle() {
|
||||
return window.systemInfo.title || "DooTask";
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
sendEmailCode() {
|
||||
if (this.count > 0) {
|
||||
return
|
||||
}
|
||||
this.$store.dispatch("call", {
|
||||
url: 'users/email/send',
|
||||
data: {
|
||||
type: 3,
|
||||
email: this.formDatum.email
|
||||
},
|
||||
spinner: true
|
||||
}).then(_ => {
|
||||
this.isSendButtonShow = false;
|
||||
this.count = 120; //赋值120秒
|
||||
this.sendBtnText = this.count + ' 秒';
|
||||
let times = setInterval(() => {
|
||||
this.count--; //递减
|
||||
this.sendBtnText = this.count + ' 秒';
|
||||
if (this.count <= 0) {
|
||||
this.sendBtnText = this.$L('发送验证码')
|
||||
clearInterval(times);
|
||||
}
|
||||
}, 1000); //1000毫秒后执行
|
||||
}).catch(({msg}) => {
|
||||
$A.messageError(msg);
|
||||
})
|
||||
},
|
||||
|
||||
submitForm(type) {
|
||||
this.$refs.formDatum.validate((valid) => {
|
||||
if (valid) {
|
||||
this.loadIng++;
|
||||
this.formDatum.type = type;
|
||||
this.$store.dispatch("call", {
|
||||
url: 'users/delete/account',
|
||||
data: this.formDatum,
|
||||
}).then(({data}) => {
|
||||
if (type === 'warning') {
|
||||
this.warningShow = true;
|
||||
} else {
|
||||
$A.messageSuccess('删除成功');
|
||||
this.warningShow = false;
|
||||
this.$store.dispatch("saveUserInfo", data);
|
||||
this.isSendButtonShow = true;
|
||||
this.$refs.formDatum.resetFields();
|
||||
}
|
||||
}).catch(({msg}) => {
|
||||
$A.modalError(msg);
|
||||
}).finally(_ => {
|
||||
this.loadIng--;
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
resetForm() {
|
||||
this.$refs.formDatum.resetFields();
|
||||
},
|
||||
|
||||
getRegVerify() {
|
||||
this.$store.dispatch("call", {
|
||||
url: 'system/setting/email',
|
||||
}).then(({data}) => {
|
||||
this.isRegVerify = data.reg_verify === 'open';
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
122
resources/assets/js/pages/manage/setting/email.vue
Normal file
122
resources/assets/js/pages/manage/setting/email.vue
Normal file
@ -0,0 +1,122 @@
|
||||
<template>
|
||||
<div class="setting-item submit">
|
||||
<Form ref="formDatum" :model="formDatum" :rules="ruleDatum" label-width="auto" @submit.native.prevent>
|
||||
<FormItem :label="$L('新邮箱地址')" prop="newEmail">
|
||||
<div class="setting-email">
|
||||
<Input v-if="isRegVerify == 1" v-model="formDatum.newEmail"
|
||||
:class="count > 0 ? 'setting-send-input':'setting-input'" search @on-search="sendEmailCode"
|
||||
:enter-button="$L(sendBtnText)" :placeholder="$L('输入新邮箱地址')"/>
|
||||
<Input v-else class="setting-input" v-model="formDatum.newEmail" :placeholder="$L('输入新邮箱地址')"/>
|
||||
</div>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('验证码')" prop="code" v-if="isRegVerify == 1">
|
||||
<Input v-model="formDatum.code" :placeholder="$L('输入邮箱验证码')"/>
|
||||
</FormItem>
|
||||
</Form>
|
||||
<div class="setting-footer">
|
||||
<Button :loading="loadIng > 0" type="primary" @click="submitForm">{{ $L('提交') }}</Button>
|
||||
<Button :loading="loadIng > 0" @click="resetForm" style="margin-left: 8px">{{ $L('重置') }}</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loadIng: 0,
|
||||
|
||||
formDatum: {
|
||||
newEmail: '',
|
||||
code: '',
|
||||
},
|
||||
ruleDatum: {
|
||||
newEmail: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value.trim() === '') {
|
||||
callback(new Error(this.$L('请输入新邮箱地址!')));
|
||||
} else if (!$A.isEmail(value.trim())) {
|
||||
callback(new Error(this.$L('请输入正确的邮箱地址!')));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
required: true,
|
||||
trigger: 'change'
|
||||
},
|
||||
],
|
||||
},
|
||||
count: 0,
|
||||
isSendButtonShow: true,
|
||||
isRegVerify: 0,
|
||||
sendBtnText: this.$L('发送验证码')
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.getRegVerify();
|
||||
},
|
||||
|
||||
methods: {
|
||||
sendEmailCode() {
|
||||
this.$store.dispatch("call", {
|
||||
url: 'users/email/send',
|
||||
data: {
|
||||
type: 2,
|
||||
email: this.formDatum.newEmail
|
||||
},
|
||||
spinner: true
|
||||
}).then(_ => {
|
||||
this.isSendButtonShow = false;
|
||||
this.count = 120; //赋值120秒
|
||||
this.sendBtnText = this.count + ' 秒';
|
||||
let times = setInterval(() => {
|
||||
this.count--; //递减
|
||||
this.sendBtnText = this.count + ' 秒';
|
||||
if (this.count <= 0) {
|
||||
this.sendBtnText = this.$L('发送验证码')
|
||||
clearInterval(times);
|
||||
}
|
||||
}, 1000); //1000毫秒后执行
|
||||
}).catch(({msg}) => {
|
||||
$A.messageError(msg);
|
||||
})
|
||||
},
|
||||
|
||||
submitForm() {
|
||||
this.$refs.formDatum.validate((valid) => {
|
||||
if (valid) {
|
||||
this.loadIng++;
|
||||
this.$store.dispatch("call", {
|
||||
url: 'users/email/edit',
|
||||
data: this.formDatum,
|
||||
}).then(({data}) => {
|
||||
$A.messageSuccess('修改成功');
|
||||
this.$store.dispatch("saveUserInfo", data);
|
||||
this.$refs.formDatum.resetFields();
|
||||
this.isSendButtonShow = true;
|
||||
}).catch(({msg}) => {
|
||||
$A.modalError(msg);
|
||||
}).finally(_ => {
|
||||
this.loadIng--;
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
resetForm() {
|
||||
this.$refs.formDatum.resetFields();
|
||||
},
|
||||
|
||||
getRegVerify() {
|
||||
this.$store.dispatch("call", {
|
||||
url: 'system/setting/email',
|
||||
}).then(({data}) => {
|
||||
this.isRegVerify = data.reg_verify === 'open';
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -73,6 +73,7 @@ export default {
|
||||
{path: 'personal', name: '个人设置'},
|
||||
{path: 'language', name: '语言设置'},
|
||||
{path: 'password', name: '密码设置'},
|
||||
{path: 'email', name: '修改邮箱'},
|
||||
]
|
||||
if ([
|
||||
'127.0.0.1:2222',
|
||||
@ -89,10 +90,12 @@ export default {
|
||||
menu.push(...[
|
||||
{path: 'system', name: '系统设置', divided: true},
|
||||
{path: 'logout', name: '退出登录'},
|
||||
{path: 'delete', name: '删除账户', divided: true},
|
||||
])
|
||||
} else {
|
||||
menu.push(...[
|
||||
{path: 'logout', name: '退出登录', divided: true},
|
||||
{path: 'delete', name: '删除账户', divided: true},
|
||||
])
|
||||
}
|
||||
return menu;
|
||||
|
||||
@ -72,7 +72,7 @@
|
||||
<div class="plans-table-info-desc">{{$L('拥有最新版本所有功能')}}</div>
|
||||
<div class="plans-table-info-desc">{{$L('无限制')}}</div>
|
||||
<div class="plans-table-info-btn">
|
||||
<Tooltip :content="$L('账号:%、密码:%', 'admin', '123456')" transfer>
|
||||
<Tooltip :content="$L('帐号:%、密码:%', 'admin', '123456')" transfer>
|
||||
<a href="https://www.dootask.com" class="btn" target="_blank">{{$L('体验DEMO')}}</a>
|
||||
</Tooltip>
|
||||
</div>
|
||||
@ -247,7 +247,7 @@
|
||||
<div class="plans-table-td"><span> - </span></div>
|
||||
<div class="plans-table-td"><span> - </span></div>
|
||||
<div class="plans-table-info-btn">
|
||||
<Tooltip :content="$L('账号:%、密码:%', 'admin', '123456')" transfer>
|
||||
<Tooltip :content="$L('帐号:%、密码:%', 'admin', '123456')" transfer>
|
||||
<a href="https://www.dootask.com" class="btn" target="_blank">{{$L('体验DEMO')}}</a>
|
||||
</Tooltip>
|
||||
</div>
|
||||
|
||||
10
resources/assets/js/routes.js
vendored
10
resources/assets/js/routes.js
vendored
@ -49,11 +49,21 @@ export default [
|
||||
path: 'password',
|
||||
component: () => import('./pages/manage/setting/password.vue'),
|
||||
},
|
||||
{
|
||||
name: 'manage-setting-email',
|
||||
path: 'email',
|
||||
component: () => import('./pages/manage/setting/email.vue'),
|
||||
},
|
||||
{
|
||||
name: 'manage-setting-system',
|
||||
path: 'system',
|
||||
component: () => import('./pages/manage/setting/system.vue'),
|
||||
},
|
||||
{
|
||||
name: 'manage-setting-delete',
|
||||
path: 'delete',
|
||||
component: () => import('./pages/manage/setting/delete.vue'),
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@ -740,16 +740,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.content-loading {
|
||||
display: flex;
|
||||
|
||||
.common-loading {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.content-unknown {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@ -787,7 +777,7 @@
|
||||
bottom: 6px;
|
||||
width: 1px;
|
||||
transform: scaleX(0.5);
|
||||
background-color: rgba(#818181, 0.7);
|
||||
background-color: rgba(#818181, 0.5);
|
||||
}
|
||||
> ul {
|
||||
display: flex;
|
||||
@ -999,7 +989,7 @@
|
||||
}
|
||||
.emoji-users {
|
||||
&:before {
|
||||
background-color: rgba(#ffffff, 0.7);
|
||||
background-color: rgba(#ffffff, 0.5);
|
||||
}
|
||||
> ul {
|
||||
> li {
|
||||
@ -1556,7 +1546,7 @@
|
||||
.dialog-item {
|
||||
.dialog-view {
|
||||
&.text {
|
||||
max-width: calc(100% - 38px);
|
||||
max-width: calc(100% - 52px);
|
||||
}
|
||||
.dialog-head {
|
||||
.dialog-content {
|
||||
|
||||
@ -3,6 +3,7 @@ body {
|
||||
&.meeting-manager {
|
||||
.ivu-modal {
|
||||
.ivu-modal-content {
|
||||
border-radius: 0;
|
||||
.ivu-modal-body {
|
||||
padding: 16px 24px 0;
|
||||
> ul {
|
||||
|
||||
44
resources/assets/sass/pages/page-setting.scss
vendored
44
resources/assets/sass/pages/page-setting.scss
vendored
@ -260,10 +260,54 @@
|
||||
padding: 16px 24px 0;
|
||||
border-top: 1px solid #F4F4F5;
|
||||
}
|
||||
|
||||
.setting-email {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.setting-input {
|
||||
max-width: 460px;
|
||||
}
|
||||
|
||||
.setting-send-input {
|
||||
max-width: 460px;
|
||||
|
||||
.ivu-input-group-append {
|
||||
background-color: #EDEDED !important;
|
||||
border: 1px solid #EDEDED !important;
|
||||
color: #999 !important;
|
||||
|
||||
&:before {
|
||||
background: #EDEDED;
|
||||
}
|
||||
}
|
||||
}
|
||||
.setting-button {
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-setting-delete-box {
|
||||
.big-text {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.small-text {
|
||||
margin-top: 15px;
|
||||
|
||||
> div {
|
||||
margin: 10px 0;
|
||||
}
|
||||
}
|
||||
.button-box {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.page-setting {
|
||||
.setting-head {
|
||||
|
||||
@ -500,5 +500,35 @@
|
||||
{"CN": "邀请码:注册时需填写下方邀请码。","EN": "Invitation code: You need to fill in the following invitation code when registering.","TC": "邀請碼:註冊時需填寫下方邀請碼。","KM": "លេខកូដលិខិតអញ្ជើញ: អ្នកត្រូវបំពេញលេខកូដលិខិតអញ្ជើញខាងក្រោមនៅពេលចុះឈ្មោះ។","TH": "รหัสเชิญ: คุณต้องกรอกรหัสคำเชิญต่อไปนี้เมื่อลงทะเบียน","KO": "초대 코드 : 등록 할 때 다음 초대 코드를 입력해야합니다.","JA": "招待コード:登録時に次の招待コードを入力する必要があります。"},
|
||||
{"CN": "添加模板","EN": "Add template","TC": "添加模板","KM": "បន្ថែមគំរូ","TH": "เพิ่มเทมเพลต","KO": "템플릿을 추가하십시오","JA": "テンプレートを追加します"},
|
||||
{"CN": "版本","EN": "Version","TC": "版本","KM": "កមបុរក្នា","TH": "รุ่น","KO": "버전","JA": "バージョン"},
|
||||
{"CN": "请输入新邮箱地址","EN": "Please enter the new mailbox address","TC": "請輸入新郵箱地址","KM": "សូមបញ្ចូលអាសយដ្ឋានប្រអប់សំបុត្រថ្មី","TH": "โปรดป้อนที่อยู่กล่องจดหมายใหม่","KO": "새 사서함 주소를 입력하십시오","JA": "新しいメールボックスアドレスを入力してください"},
|
||||
{"CN": "邮箱地址错误","EN": "Email address error","TC": "郵箱地址錯誤","KM": "កំហុសអាសយដ្ឋានអ៊ីមែល","TH": "ข้อผิดพลาดที่อยู่อีเมล","KO": "이메일 주소 오류","JA": "メールアドレスエラー"},
|
||||
{"CN": "不能与旧邮箱一致","EN": "Can't be consistent with the old mailbox","TC": "不能與舊郵箱一致","KM": "មិនអាចត្រូវបានស្របជាមួយនឹងប្រអប់សំបុត្រចាស់","TH": "ไม่สามารถสอดคล้องกับกล่องจดหมายเก่า","KO": "이전 사서함과 일치 할 수 없습니다","JA": "古いメールボックスと一致することはできません"},
|
||||
{"CN": "验证码错误","EN": "Verification code error","TC": "驗證碼錯誤","KM": "កំហុសក្នុងការផ្ទៀងផ្ទាត់លេខកូដ","TH": "ข้อผิดพลาดของรหัสการตรวจสอบ","KO": "Verifin 코드 오류","JA": "検証コードエラー"},
|
||||
{"CN": "验证码已失效","EN": "The verification code has failed","TC": "驗證碼已失效","KM": "លេខកូដផ្ទៀងផ្ទាត់បានបរាជ័យ","TH": "รหัสการยืนยันล้มเหลว","KO": "검증 코드가 실패했습니다","JA": "検証コードは失敗しました"},
|
||||
{"CN": "发送验证码","EN": "Send the verification code","TC": "發送驗證碼","KM": "ផ្ញើកូដផ្ទៀងផ្ទាត់","TH": "ส่งรหัสการยืนยัน","KO": "확인 코드를 보냅니다","JA": "確認コードを送信します"},
|
||||
{"CN": "秒","EN": "Second","TC": "秒","KM": "ដេលរេបីរយចហើយ","TH": "ที่สอง","KO": "섹스","JA": "2番目"},
|
||||
{"CN": "输入邮箱验证码","EN": "Enter the mailbox verification code","TC": "輸入郵箱驗證碼","KM": "បញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ប្រអប់សំបុត្រ","TH": "ป้อนรหัสการยืนยันกล่องจดหมาย","KO": "사서함 확인 코드를 입력하십시오","JA": "メールボックス検証コードを入力します"},
|
||||
{"CN": "新邮箱地址","EN": "New mailbox address","TC": "新郵箱地址","KM": "អាសយដ្ឋានប្រអប់សំបុត្រថ្មី","TH": "ที่อยู่กล่องจดหมายใหม่","KO": "새로운 사서함 주소","JA": "新しいメールボックスアドレス"},
|
||||
{"CN": "请输入新邮箱地址!","EN": "Please enter the new mailbox address!","TC": "請輸入新郵箱地址!","KM": "សូមបញ្ចូលអាសយដ្ឋានប្រអប់សំបុត្រថ្មី!","TH": "กรุณากรอกที่อยู่กล่องจดหมายใหม่!","KO": "새 사서함 주소를 입력하십시오!","JA": "新しいメールボックスアドレスを入力してください!"},
|
||||
{"CN": "请输入正确的邮箱地址!","EN": "Please input the correct email address!","TC": "請輸入正確的郵箱地址!","KM": "សូមបញ្ចូលអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវ!","TH": "กรุณาป้อนที่อยู่อีเมลที่ถูกต้อง!","KO": "thecorct 이메일 주소를 입력하십시오!","JA": "正しいメールアドレスを入力してください!"},
|
||||
{"CN": "验证码","EN": "Verification code","TC": "驗證碼","KM": "កូដផ្ទៀងផ្ទាត់","TH": "รหัสการตรวจสอบ","KO": "Verifin 코드","JA": "検証コード"},
|
||||
{"CN": "修改邮箱","EN": "Modify the mailbox","TC": "修改郵箱","KM": "កែប្រែប្រអប់សំបុត្រ","TH": "แก้ไขกล่องจดหมาย","KO": "사서함을 수정하십시오","JA": "メールボックスを変更します"},
|
||||
{"CN": "删除账户","EN": "Delete account","TC": "刪除賬戶","KM": "លុបគណនី","TH": "ลบบัญชี","KO": "계정 삭제","JA": "アカウントを削除する"},
|
||||
{"CN": "请输入邮箱账号","EN": "Please enter the mailbox account","TC": "請輸入郵箱賬號","KM": "សូមបញ្ចូលគណនីប្រអប់សំបុត្រ","TH": "กรุณากรอกบัญชีกล่องจดหมาย","KO": "사서함 계정을 입력하십시오","JA": "メールボックスアカウントを入力してください"},
|
||||
{"CN": "邮箱验证码","EN": "E-mail verification code","TC": "郵箱驗證碼","KM": "លេខកូដផ្ទៀងផ្ទាត់អ៊ីមែល","TH": "รหัสตรวจสอบอีเมล","KO": "이메일 Verofice 코드","JA": "電子メール検証コード"},
|
||||
{"CN": "请输入邮箱验证码","EN": "Please enter the mailbox verification code","TC": "請輸入郵箱驗證碼","KM": "សូមបញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ប្រអប់សំបុត្រ","TH": "โปรดป้อนรหัสการยืนยันกล่องจดหมาย","KO": "사서함 확인 코드를 입력하십시오","JA": "メールボックス検証コードを入力してください"},
|
||||
{"CN": "请输入登录密码","EN": "Please enter your password","TC": "請輸入登錄密碼","KM": "សូមបញ្ចូលពាក្យសម្ងាត់របស់អ្នក","TH": "กรุณาใส่รหัสผ่านของคุณ","KO": "비밀번호를 입력하십시오","JA": "パスワードを入力してください"},
|
||||
{"CN": "登录密码","EN": "Login password","TC": "登錄密碼","KM": "បង្អួចបង្អួចចូល","TH": "รหัสผ่านในการเข้าสู่ระบบ","KO": "로그인 비밀번호","JA": "ログインパスワード"},
|
||||
{"CN": "删除原因","EN": "Delete","TC": "刪除原因","KM": "របៅបេលរសច","TH": "ลบ","KO": "삭제","JA": "消去"},
|
||||
{"CN": "请输入注销原因","EN": "Please enter the reason for cancellation","TC": "請輸入註銷原因","KM": "សូមបញ្ចូលហេតុផលសម្រាប់ការលុបចោល","TH": "โปรดป้อนเหตุผลในการยกเลิก","KO": "취소 이유를 입력하십시오","JA": "キャンセルの理由を入力してください"},
|
||||
{"CN": "删除DooTask账号","EN": "Delete Dootask account","TC": "刪除DooTask賬號","KM": "លុបគណនី dootask","TH": "ลบบัญชี dootask","KO": "Dootask 계정을 삭제하십시오","JA": "Dootaskアカウントを削除します"},
|
||||
{"CN": "账号删除后,该账号将无法正常登录且无法恢复,账号下的所有数据也将被删除。'","EN": "After the account is deleted, the account will not be able to log in normally and cannot be restored, and all the data under the account will be deleted. '","TC": "賬號刪除後,該賬號將無法正常登錄且無法恢復,賬號下的所有數據也將被刪除。 '","KM": "បន្ទាប់ពីគណនីត្រូវបានលុបគណនីនឹងមិនអាចចូលជាធម្មតាទេហើយមិនអាចស្តារឡើងវិញបានទេហើយទិន្នន័យទាំងអស់ដែលនៅក្រោមគណនីនឹងត្រូវបានលុបចោល។ ផាប","TH": "หลังจากลบบัญชีบัญชีจะไม่สามารถเข้าสู่ระบบได้ตามปกติและไม่สามารถกู้คืนได้และข้อมูลทั้งหมดภายใต้บัญชีจะถูกลบ '","KO": "계정이 삭제되면 계정은 정상적으로 로그인 할 수없고 복원 할 수 없으며 계정의 모든 데이터가 삭제됩니다. '","JA": "アカウントが削除された後、アカウントは正常にログインできず、復元できず、アカウントのすべてのデータが削除されます。 '"},
|
||||
{"CN": "注销前,请确认一下事项:","EN": "Before canceling, please confirm the matters:","TC": "註銷前,請確認一下事項:","KM": "មុនពេលបោះបង់សូមបញ្ជាក់ពីបញ្ហា:","TH": "ก่อนยกเลิกโปรดยืนยันเรื่อง:","KO": "Canceeling 전에 문제를 확인하십시오.","JA": "キャンセルする前に、問題を確認してください:"},
|
||||
{"CN": "1、您将无法查看该账号内的任何信息,包括账号信息、文件记录、聊天记录、项目信息、团队成员信息等。","EN": "1. You will not be able to view any information in this account, including account information, file records, chat records, project information, team member information, etc.","TC": "1、您將無法查看該賬號內的任何信息,包括賬號信息、文件記錄、聊天記錄、項目信息、團隊成員信息等。","KM": "1. អ្នកនឹងមិនអាចមើលព័ត៌មានណាមួយនៅក្នុងគណនីនេះរួមមានព័ត៌មានគណនីកំណត់ត្រាឯកសារកំណត់ត្រាជជែកឯកសារព័ត៌មានគម្រោងព័ត៌មានសមាជិកក្រុមព័ត៌មានក្រុម។ ល។","TH": "1. คุณจะไม่สามารถดูข้อมูลใด ๆ ในบัญชีนี้รวมถึงข้อมูลบัญชีบันทึกไฟล์บันทึกการแชทข้อมูลโครงการข้อมูลสมาชิกในทีม ฯลฯ","KO": "1. 계정 정보, 파일 기록, 프로세스 정보, 팀 메시지 정보 등을 포함 하여이 계정의 정보를 볼 수 없습니다.","JA": "1.アカウント情報、ファイルレコード、チャットレコード、プロジェクト情報、チームメンバー情報など、このアカウントで情報を表示できません。"},
|
||||
{"CN": "2、若你是团队的所有者,请在注销您的账户前转移所有权。例如该账户所创建的项目(可将项目移交他人或删除项目)以及文件夹。","EN": "2. If you are the owner of the team, please transfer ownership before cancel your account. For example, the project created by the account (which can be transferred to others or deleted items) and folders.","TC": "2、若你是團隊的所有者,請在註銷您的賬戶前轉移所有權。例如該賬戶所創建的項目(可將項目移交他人或刪除項目)以及文件夾。","KM": "ប្រសិនបើអ្នកជាម្ចាស់ក្រុមសូមផ្ទេរកម្មឯកមុនពេលបោះបង់គណនីរបស់អ្នក។ ឧទាហរណ៍គម្រោងដែលបង្កើតដោយគណនី (ដែលអាចផ្ទេរទៅឱ្យអ្នកដទៃឬធាតុដែលបានលុប) និងថតឯកសារ។","TH": "2. หากคุณเป็นเจ้าของทีมโปรดถ่ายโอนความเป็นเจ้าของก่อนยกเลิกบัญชีของคุณ ตัวอย่างเช่นโครงการที่สร้างขึ้นโดยบัญชี (ซึ่งสามารถถ่ายโอนไปยังผู้อื่นหรือรายการที่ถูกลบ) และโฟลเดอร์","KO": "2. 팀의 소유자 인 경우 계정을 취소하기 전에 소유권을 전송하십시오. 예를 들어, 계정에서 만든 프로젝트 (다른 사람 또는 삭제 된 품목으로 전송할 수 있음) 및 폴더.","JA": "2.チームの所有者である場合は、アカウントをキャンセルする前に所有権を譲渡してください。たとえば、アカウントによって作成されたプロジェクト(他の人または削除されたアイテムに転送できます)およびフォルダー。"},
|
||||
{"CN": "3、您将退出所有群聊,无法查到过往消息和人员。","EN": "3. You will exit all group chats and cannot find past news and personnel.","TC": "3、您將退出所有群聊,無法查到過往消息和人員。","KM": "3. អ្នកនឹងចាកចេញពីការជជែកជាក្រុមទាំងអស់ហើយមិនអាចរកព័ត៌មាននិងបុគ្គលិកពីមុនបានទេ។","TH": "3. คุณจะออกจากการแชทกลุ่มทั้งหมดและไม่พบข่าวและบุคลากรที่ผ่านมา","KO": "3. 모든 그룹 채팅을 종료하고 과거 뉴스와 인사를 찾을 수 없습니다.","JA": "3.すべてのグループチャットを終了し、過去のニュースや人員を見つけることができません。"},
|
||||
{"CN": "4、请保证账号未被暂停使用。","EN": "4. Please ensure that the account is not suspended.","TC": "4、請保證賬號未被暫停使用。","KM": "សូមប្រាកដថាគណនីមិនត្រូវបានផ្អាក។","TH": "4. โปรดตรวจสอบให้แน่ใจว่าบัญชีจะไม่ถูกระงับ","KO": "4. 계정이 해결되지 않았는지 확인하십시오.","JA": "4.アカウントが停止されていないことを確認してください。"},
|
||||
{"CN": "已清楚风险,确定注销","EN": "Clear risk, determine cancellation","TC": "已清楚風險,確定註銷","KM": "ប្រថុយប្រថុយកំណត់ការលុបចោលការលុបចោល","TH": "ความเสี่ยงที่ชัดเจนกำหนดการยกเลิก","KO": "명확한 위험, 취소를 결정하십시오","JA": "明確なリスク、キャンセルを決定します"},
|
||||
{"CN": "账号删除后,该账号将无法正常登录且无法恢复,账号下的所有数据也将被删除。","EN": "After the account is deleted, the account will not be able to log in normally and cannot be restored, and all the data under the account will be deleted.","TC": "賬號刪除後,該賬號將無法正常登錄且無法恢復,賬號下的所有數據也將被刪除。","KM": "បន្ទាប់ពីគណនីត្រូវបានលុបគណនីនឹងមិនអាចចូលជាធម្មតាទេហើយមិនអាចស្តារឡើងវិញបានទេហើយទិន្នន័យទាំងអស់ដែលនៅក្រោមគណនីនឹងត្រូវបានលុបចោល។","TH": "หลังจากลบบัญชีบัญชีจะไม่สามารถเข้าสู่ระบบได้ตามปกติและไม่สามารถกู้คืนได้และข้อมูลทั้งหมดภายใต้บัญชีจะถูกลบ","KO": "계정이 삭제되면 계정은 정상적으로 로그인 할 수없고 복원 할 수 없으며 계정의 모든 데이터가 삭제됩니다.","JA": "アカウントが削除された後、アカウントは正常にログインできず、復元できず、アカウントのすべてのデータが削除されます。"},
|
||||
]
|
||||
})(window)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user