|
@@ -12,7 +12,7 @@
|
|
|
<div class="personal-username">
|
|
<div class="personal-username">
|
|
|
<div class="">{{ appStore?.userInfo?.nickName }}</div>
|
|
<div class="">{{ appStore?.userInfo?.nickName }}</div>
|
|
|
<template v-if="['0', '1', '2'].includes(appStore?.userInfo?.memberType)"></template>
|
|
<template v-if="['0', '1', '2'].includes(appStore?.userInfo?.memberType)"></template>
|
|
|
- <img :src="`/src/assets/imgs/my/vip${appStore?.userInfo?.memberType}@2x.png`" alt="">
|
|
|
|
|
|
|
+ <img :src="`${ getImgUrl(`vip${appStore?.userInfo?.memberType}@2x.png`) }`" alt="">
|
|
|
<!-- memberType 会员类型memberType 会员类型分为企业会员(2)和个人会员(1)、免费会员(0) -->
|
|
<!-- memberType 会员类型memberType 会员类型分为企业会员(2)和个人会员(1)、免费会员(0) -->
|
|
|
</div>
|
|
</div>
|
|
|
<div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{
|
|
<div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{
|
|
@@ -32,7 +32,7 @@
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
<div class="personal-head-right">
|
|
<div class="personal-head-right">
|
|
|
- <div @click="dialogVisible = true" class="personal-head-right-li">
|
|
|
|
|
|
|
+ <div @click="changeSHow" class="personal-head-right-li">
|
|
|
<img src="/src/assets/imgs/my/bianji@2x.png" alt="">
|
|
<img src="/src/assets/imgs/my/bianji@2x.png" alt="">
|
|
|
<div class="">{{ $t('personalCenter.editProfile') }}</div>
|
|
<div class="">{{ $t('personalCenter.editProfile') }}</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -111,18 +111,19 @@
|
|
|
<template v-if="activeName == 0">
|
|
<template v-if="activeName == 0">
|
|
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
|
|
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
|
|
|
<el-form-item :label="`${$t('personalCenter.gongdanleixing')}`" prop="issueCategory">
|
|
<el-form-item :label="`${$t('personalCenter.gongdanleixing')}`" prop="issueCategory">
|
|
|
- <el-select v-model="ruleForm.issueCategory" :placeholder="`${$t('personalCenter.gongdanleixing_placeholder')}`"
|
|
|
|
|
- style="width: 100%">
|
|
|
|
|
|
|
+ <el-select v-model="ruleForm.issueCategory"
|
|
|
|
|
+ :placeholder="`${$t('personalCenter.gongdanleixing_placeholder')}`" style="width: 100%">
|
|
|
<el-option v-for="item in workTypeList" :key="item.value" :label="`${$t(item.label)}`"
|
|
<el-option v-for="item in workTypeList" :key="item.value" :label="`${$t(item.label)}`"
|
|
|
:value="item.value" />
|
|
:value="item.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item :label="`${$t('personalCenter.gongdanbiaoti')}`" prop="issueTitle">
|
|
<el-form-item :label="`${$t('personalCenter.gongdanbiaoti')}`" prop="issueTitle">
|
|
|
- <el-input v-model="ruleForm.issueTitle" :placeholder="`${$t('personalCenter.gongdanbiaoti_placeholder')}`" />
|
|
|
|
|
|
|
+ <el-input v-model="ruleForm.issueTitle"
|
|
|
|
|
+ :placeholder="`${$t('personalCenter.gongdanbiaoti_placeholder')}`" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item :label="`${$t('personalCenter.gongdanneirong')}`" prop="issueContent">
|
|
<el-form-item :label="`${$t('personalCenter.gongdanneirong')}`" prop="issueContent">
|
|
|
- <el-input v-model="ruleForm.issueContent" :placeholder="`${$t('personalCenter.gongdanneirong_placeholder')}`" :rows="10"
|
|
|
|
|
- type="textarea" />
|
|
|
|
|
|
|
+ <el-input v-model="ruleForm.issueContent"
|
|
|
|
|
+ :placeholder="`${$t('personalCenter.gongdanneirong_placeholder')}`" :rows="10" type="textarea" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
</template>
|
|
</template>
|
|
@@ -132,14 +133,63 @@
|
|
|
v-for="(item, index) in workList" :key="index">
|
|
v-for="(item, index) in workList" :key="index">
|
|
|
<template #title>
|
|
<template #title>
|
|
|
<div class="work-head">
|
|
<div class="work-head">
|
|
|
- <img v-if="activeName == 2" src="/src/assets/imgs/my/Q@2x.png" alt="">
|
|
|
|
|
- <div class="">{{ `${activeName == 2 ? (index + 1) + '、' : ''}` }}{{ item.issueTitle ||
|
|
|
|
|
- item.question }}</div>
|
|
|
|
|
|
|
+ <div class="work-head-left">
|
|
|
|
|
+ <img v-if="activeName == 2" src="/src/assets/imgs/my/Q@2x.png" alt="">
|
|
|
|
|
+ <div class="">{{ `${activeName == 2 ? (index + 1) + '、' : ''}` }}{{ item.issueTitle ||
|
|
|
|
|
+ item.question }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <el-tag v-if="activeName == 1" :type="item.issueStatus == 2 ? 'success' : 'primary'">{{ item.issueStatus == 0 ?
|
|
|
|
|
+ $t('personalCenter.daijiejue') : item.issueStatus == 2 ? $t('personalCenter.yijiejue') : ''
|
|
|
|
|
+ }}</el-tag>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<div class="work-content">
|
|
<div class="work-content">
|
|
|
- <img v-if="activeName == 2" src="/src/assets/imgs/my/A@2x.png" alt="">
|
|
|
|
|
- <div class="">{{ item.issueContent || item.answer }}</div>
|
|
|
|
|
|
|
+ <template v-if="activeName == 2">
|
|
|
|
|
+ <img src="/src/assets/imgs/my/A@2x.png" alt="">
|
|
|
|
|
+ <div class="">{{ item.issueContent || item.answer }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <el-descriptions style="width: 100%;" class="margin-top" :column="2" border v-else :label-width="langStore.currentLang == 'en' ? 180 : 80">
|
|
|
|
|
+ <el-descriptions-item>
|
|
|
|
|
+ <template #label>
|
|
|
|
|
+ <div class="cell-item">{{ $t('personalCenter.gongdanbianhao') }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ item.issueNo }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item>
|
|
|
|
|
+ <template #label>
|
|
|
|
|
+ <div class="cell-item">{{ $t('personalCenter.gongdanzhuangtai') }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+
|
|
|
|
|
+ <el-tag :type="item.issueStatus == 2 ? 'success' : 'primary'">{{ item.issueStatus == 0 ?
|
|
|
|
|
+ $t('personalCenter.daijiejue') : item.issueStatus == 2 ? $t('personalCenter.yijiejue') : ''
|
|
|
|
|
+ }}</el-tag>
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item>
|
|
|
|
|
+ <template #label>
|
|
|
|
|
+ <div class="cell-item">{{ $t('personalCenter.gongdanleixing') }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ $t(getName(item.issueCategory)) }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item>
|
|
|
|
|
+ <template #label>
|
|
|
|
|
+ <div class="cell-item">{{ $t('personalCenter.gongdanbiaoti') }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ item.issueTitle }}
|
|
|
|
|
+
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item :span="2">
|
|
|
|
|
+ <template #label>
|
|
|
|
|
+ <div class="cell-item">{{ $t('personalCenter.gongdanneirong') }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ item.issueContent }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item :span="2" v-if="item.issueStatus == 2">
|
|
|
|
|
+ <template #label>
|
|
|
|
|
+ <div class="cell-item">{{ $t('personalCenter.gongdanhuifu') }}</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ {{ item.remark }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ </el-descriptions>
|
|
|
</div>
|
|
</div>
|
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
|
</el-collapse>
|
|
</el-collapse>
|
|
@@ -163,7 +213,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- <el-dialog v-model="dialogVisible" :title="$t('personalCenter.editProfile')" width="784">
|
|
|
|
|
|
|
+ <el-dialog v-model="dialogVisible" :title="$t('personalCenter.editProfile')" width="784" :destroy-on-close="true">
|
|
|
<el-form ref="userFormRef" :model="userInfo" label-width="auto" label-position="top" :rules="rules">
|
|
<el-form ref="userFormRef" :model="userInfo" label-width="auto" label-position="top" :rules="rules">
|
|
|
<el-row :gutter="16">
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
@@ -196,12 +246,12 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12" v-if="!appStore?.userInfo?.userPhone">
|
|
<el-col :span="12" v-if="!appStore?.userInfo?.userPhone">
|
|
|
<el-form-item :label="$t('personalCenter.phoneCode')" prop="verifyCode">
|
|
<el-form-item :label="$t('personalCenter.phoneCode')" prop="verifyCode">
|
|
|
- <el-input v-model="userInfo.verifyCode" :placeholder="$t('login.placeholderCaptcha')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.verifyCode" maxlength="6" :placeholder="$t('login.placeholderCaptcha')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}">
|
|
}">
|
|
|
<template #append>
|
|
<template #append>
|
|
|
- <el-button :disabled="smsCountdown > 0" @click="sendSmsCode" style="width:120px" maxlength="6"
|
|
|
|
|
|
|
+ <el-button :disabled="smsCountdown > 0" @click="sendSmsCode" style="width:120px"
|
|
|
:class="{ 'countdown-btn': smsCountdown > 0 }" size="small">
|
|
:class="{ 'countdown-btn': smsCountdown > 0 }" size="small">
|
|
|
{{ smsCountdown > 0 ? `${smsCountdown}s` : $t('login.sendCaptcha') }}
|
|
{{ smsCountdown > 0 ? `${smsCountdown}s` : $t('login.sendCaptcha') }}
|
|
|
</el-button>
|
|
</el-button>
|
|
@@ -213,8 +263,8 @@
|
|
|
<el-row :gutter="16">
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.loginEmail')">
|
|
<el-form-item :label="$t('personalCenter.loginEmail')">
|
|
|
- <el-input v-model="userInfo.email" :placeholder="$t('workflowTradeAdd.placeholderEmail')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.email" :placeholder="$t('workflowTradeAdd.placeholderEmail')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}" :disabled="appStore?.userInfo?.email ? true : false" />
|
|
}" :disabled="appStore?.userInfo?.email ? true : false" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -222,12 +272,12 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12" v-if="!appStore?.userInfo?.email">
|
|
<el-col :span="12" v-if="!appStore?.userInfo?.email">
|
|
|
<el-form-item :label="$t('personalCenter.emailCode')" prop="verifyCode">
|
|
<el-form-item :label="$t('personalCenter.emailCode')" prop="verifyCode">
|
|
|
- <el-input v-model="userInfo.verifyCode" :placeholder="$t('login.placeholderCaptcha')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.verifyCode" maxlength="6" :placeholder="$t('login.placeholderCaptcha')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}">
|
|
}">
|
|
|
<template #append>
|
|
<template #append>
|
|
|
- <el-button :disabled="smsCountdown > 0" @click="sendSmsCode" style="width:120px" maxlength="6"
|
|
|
|
|
|
|
+ <el-button :disabled="smsCountdown > 0" @click="sendSmsCode" style="width:120px"
|
|
|
:class="{ 'countdown-btn': smsCountdown > 0 }" size="small">
|
|
:class="{ 'countdown-btn': smsCountdown > 0 }" size="small">
|
|
|
{{ smsCountdown > 0 ? `${smsCountdown}s` : $t('login.sendCaptcha') }}
|
|
{{ smsCountdown > 0 ? `${smsCountdown}s` : $t('login.sendCaptcha') }}
|
|
|
</el-button>
|
|
</el-button>
|
|
@@ -239,11 +289,11 @@
|
|
|
<el-row :gutter="16">
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.n8nAccout')">
|
|
<el-form-item :label="$t('personalCenter.n8nAccout')">
|
|
|
- <el-input readonly v-model="userInfo.name" :placeholder="$t('personalCenter.createN8n')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input readonly v-model="userInfo.n8nAccount" :placeholder="$t('personalCenter.createN8n')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}">
|
|
}">
|
|
|
- <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.name">
|
|
|
|
|
|
|
+ <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.n8nAccount">
|
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceraten8n')" placement="top">
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceraten8n')" placement="top">
|
|
|
<el-button @click="createAi('0')" :icon="Refresh" />
|
|
<el-button @click="createAi('0')" :icon="Refresh" />
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
@@ -253,7 +303,7 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.n8nPassword')">
|
|
<el-form-item :label="$t('personalCenter.n8nPassword')">
|
|
|
- <el-input v-model="userInfo.userPhone" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.n8nPassword" :placeholder="$t('personalCenter.createN8n')" class="inputStyle"
|
|
|
:input-style="{
|
|
:input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}" readonly type="password" show-password />
|
|
}" readonly type="password" show-password />
|
|
@@ -264,11 +314,11 @@
|
|
|
<el-row :gutter="16">
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.cozeAccout')">
|
|
<el-form-item :label="$t('personalCenter.cozeAccout')">
|
|
|
- <el-input v-model="userInfo.name" :placeholder="$t('personalCenter.createCoze')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input readonly v-model="userInfo.cozeAccount" :placeholder="$t('personalCenter.createCoze')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}">
|
|
}">
|
|
|
- <template #append>
|
|
|
|
|
|
|
+ <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.cozeAccount">
|
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenCoze')"
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenCoze')"
|
|
|
placement="top">
|
|
placement="top">
|
|
|
<el-button @click="createAi('1')" :icon="Refresh" />
|
|
<el-button @click="createAi('1')" :icon="Refresh" />
|
|
@@ -280,8 +330,8 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.cozePassword')">
|
|
<el-form-item :label="$t('personalCenter.cozePassword')">
|
|
|
- <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.cozePassword" :placeholder="$t('personalCenter.createCoze')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}" readonly type="password" show-password />
|
|
}" readonly type="password" show-password />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -290,11 +340,11 @@
|
|
|
<el-row :gutter="16">
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.difyAccout')">
|
|
<el-form-item :label="$t('personalCenter.difyAccout')">
|
|
|
- <el-input v-model="userInfo.name" :placeholder="$t('personalCenter.createDify')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input readonly v-model="userInfo.difyAccount" :placeholder="$t('personalCenter.createDify')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}">
|
|
}">
|
|
|
- <template #append>
|
|
|
|
|
|
|
+ <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.difyAccount">
|
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenDify')"
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenDify')"
|
|
|
placement="top">
|
|
placement="top">
|
|
|
<el-button @click="createAi('2')" :icon="Refresh" />
|
|
<el-button @click="createAi('2')" :icon="Refresh" />
|
|
@@ -305,8 +355,8 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.difyPassword')">
|
|
<el-form-item :label="$t('personalCenter.difyPassword')">
|
|
|
- <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.difyPassword" :placeholder="$t('personalCenter.createDify')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}" readonly type="password" show-password />
|
|
}" readonly type="password" show-password />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -316,11 +366,11 @@
|
|
|
|
|
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.fastGptAccout')">
|
|
<el-form-item :label="$t('personalCenter.fastGptAccout')">
|
|
|
- <el-input v-model="userInfo.name" :placeholder="$t('personalCenter.createFastGpt')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input readonly v-model="userInfo.fastGptAccount" :placeholder="$t('personalCenter.createFastGpt')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}">
|
|
}">
|
|
|
- <template #append>
|
|
|
|
|
|
|
+ <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.fastGptAccount">
|
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenFastGpt')"
|
|
<el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenFastGpt')"
|
|
|
placement="top">
|
|
placement="top">
|
|
|
<el-button @click="createAi('3')" :icon="Refresh" />
|
|
<el-button @click="createAi('3')" :icon="Refresh" />
|
|
@@ -332,8 +382,8 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item :label="$t('personalCenter.fastGptPassword')">
|
|
<el-form-item :label="$t('personalCenter.fastGptPassword')">
|
|
|
- <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
|
|
- :input-style="{
|
|
|
|
|
|
|
+ <el-input v-model="userInfo.fastGptPassword" :placeholder="$t('personalCenter.createFastGpt')"
|
|
|
|
|
+ class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
backgroundColor: 'transparent',
|
|
|
}" readonly type="password" show-password />
|
|
}" readonly type="password" show-password />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -353,7 +403,7 @@
|
|
|
<el-button :icon="Plus" />
|
|
<el-button :icon="Plus" />
|
|
|
</template></el-input>
|
|
</template></el-input>
|
|
|
<el-button v-else class="button-new-tag" size="small" @click="showInput">
|
|
<el-button v-else class="button-new-tag" size="small" @click="showInput">
|
|
|
- + {{ $t('login.addTags') }}
|
|
|
|
|
|
|
+ + {{ $t('common.addTags') }}
|
|
|
</el-button>
|
|
</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -362,7 +412,7 @@
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer flex-center">
|
|
<div class="dialog-footer flex-center">
|
|
|
- <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
|
|
|
|
|
|
+ <el-button @click="userInfo = {}, dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
|
|
<el-button class="gradient" type="primary" @click="handleConfirm(userFormRef)">
|
|
<el-button class="gradient" type="primary" @click="handleConfirm(userFormRef)">
|
|
|
{{ $t('common.confirm') }}
|
|
{{ $t('common.confirm') }}
|
|
|
</el-button>
|
|
</el-button>
|
|
@@ -399,7 +449,8 @@ import Pagination from '@/components/Pagination.vue'
|
|
|
|
|
|
|
|
|
|
|
|
|
import type { FormInstance, FormRules } from 'element-plus'
|
|
import type { FormInstance, FormRules } from 'element-plus'
|
|
|
-
|
|
|
|
|
|
|
+import { useLangStore } from '@/pinia/langStore'
|
|
|
|
|
+const langStore = useLangStore();
|
|
|
interface RuleForm {
|
|
interface RuleForm {
|
|
|
issueCategory: string
|
|
issueCategory: string
|
|
|
issueTitle: string
|
|
issueTitle: string
|
|
@@ -418,61 +469,65 @@ const route = useRoute()
|
|
|
|
|
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
|
|
|
|
|
|
|
+const getImgUrl = (path) => {
|
|
|
|
|
+ return new URL(`/src/assets/imgs/my/${path}`, import.meta.url).href
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const navList = ref([
|
|
const navList = ref([
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.myWallet',
|
|
name: 'personalCenter.myWallet',
|
|
|
path: '/personal-center/wallet',
|
|
path: '/personal-center/wallet',
|
|
|
- icon: '/src/assets/imgs/my/icon1@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon1a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon1@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon1a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.membershipInfo',
|
|
name: 'personalCenter.membershipInfo',
|
|
|
path: '/personal-center/member-details',
|
|
path: '/personal-center/member-details',
|
|
|
- icon: '/src/assets/imgs/my/icon2@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon2a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon2@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon2a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.myCollection',
|
|
name: 'personalCenter.myCollection',
|
|
|
path: '/personal-center/collection',
|
|
path: '/personal-center/collection',
|
|
|
- icon: '/src/assets/imgs/my/icon3@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon3a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon3@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon3a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.myDemand',
|
|
name: 'personalCenter.myDemand',
|
|
|
path: '/personal-center/demand',
|
|
path: '/personal-center/demand',
|
|
|
- icon: '/src/assets/imgs/my/icon4@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon4a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon4@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon4a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.myOrders',
|
|
name: 'personalCenter.myOrders',
|
|
|
path: '/personal-center/orders',
|
|
path: '/personal-center/orders',
|
|
|
- icon: '/src/assets/imgs/my/icon5@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon5a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon5@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon5a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.myInvoice',
|
|
name: 'personalCenter.myInvoice',
|
|
|
path: '/personal-center/invoice',
|
|
path: '/personal-center/invoice',
|
|
|
- icon: '/src/assets/imgs/my/icon6@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon6a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon6@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon6a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.myWorkflow',
|
|
name: 'personalCenter.myWorkflow',
|
|
|
path: '/personal-center/workflow',
|
|
path: '/personal-center/workflow',
|
|
|
- icon: '/src/assets/imgs/my/icon7@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon7a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon7@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon7a@2x.png'),
|
|
|
show: true
|
|
show: true
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
name: 'personalCenter.businessManagement',
|
|
name: 'personalCenter.businessManagement',
|
|
|
path: '/personal-center/business-management',
|
|
path: '/personal-center/business-management',
|
|
|
- icon: '/src/assets/imgs/my/icon8@2x.png',
|
|
|
|
|
- iconActive: '/src/assets/imgs/my/icon8a@2x.png',
|
|
|
|
|
|
|
+ icon: getImgUrl('icon8@2x.png'),
|
|
|
|
|
+ iconActive: getImgUrl('icon8a@2x.png'),
|
|
|
show: false
|
|
show: false
|
|
|
},
|
|
},
|
|
|
// {
|
|
// {
|
|
@@ -527,6 +582,16 @@ const workTypeList = ref([
|
|
|
label: 'personalCenter.qitawenti'
|
|
label: 'personalCenter.qitawenti'
|
|
|
}
|
|
}
|
|
|
])
|
|
])
|
|
|
|
|
+// 获取工单分类
|
|
|
|
|
+const getName = (value) => {
|
|
|
|
|
+ let txt = ''
|
|
|
|
|
+ workTypeList.value.forEach(item => {
|
|
|
|
|
+ if (item.value == value) {
|
|
|
|
|
+ txt = item.label
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ return txt
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
const ruleForm = ref<RuleForm>({
|
|
const ruleForm = ref<RuleForm>({
|
|
|
issueCategory: '',
|
|
issueCategory: '',
|
|
@@ -543,10 +608,10 @@ const rules = ref<FormRules<RuleForm>>({
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
|
issueTitle: [
|
|
issueTitle: [
|
|
|
- { required: true, message: t('personalCenter.gongdanbiaoti_placeholder'), trigger: 'blur' },
|
|
|
|
|
|
|
+ { required: true, message: t('personalCenter.gongdanbiaoti_placeholder'), trigger: 'blur' },
|
|
|
],
|
|
],
|
|
|
issueContent: [
|
|
issueContent: [
|
|
|
- { required: true, message: t('personalCenter.gongdanneirong_placeholder'), trigger: 'blur' },
|
|
|
|
|
|
|
+ { required: true, message: t('personalCenter.gongdanneirong_placeholder'), trigger: 'blur' },
|
|
|
],
|
|
],
|
|
|
nickName: [
|
|
nickName: [
|
|
|
{
|
|
{
|
|
@@ -601,7 +666,8 @@ const emailCountdown = ref(0)
|
|
|
|
|
|
|
|
// 正则表达式
|
|
// 正则表达式
|
|
|
const PHONE_REGEX = /^1[3-9]\d{9}$/;
|
|
const PHONE_REGEX = /^1[3-9]\d{9}$/;
|
|
|
-const EMAIL_REGEX = /^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$/;
|
|
|
|
|
|
|
+// 优化后的邮箱正则(兼顾准确性和实用性)
|
|
|
|
|
+const EMAIL_REGEX = /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/;
|
|
|
const isPasswordPhone = computed(() => {
|
|
const isPasswordPhone = computed(() => {
|
|
|
return PHONE_REGEX.test(passwordForm.account);
|
|
return PHONE_REGEX.test(passwordForm.account);
|
|
|
});
|
|
});
|
|
@@ -622,22 +688,22 @@ const createAi = async (creatFlag) => {
|
|
|
const sendSmsCode = async () => {
|
|
const sendSmsCode = async () => {
|
|
|
let account = appStore?.userInfo?.userPhone ? userInfo.value.email : userInfo.value.userPhone
|
|
let account = appStore?.userInfo?.userPhone ? userInfo.value.email : userInfo.value.userPhone
|
|
|
if (!account) {
|
|
if (!account) {
|
|
|
- DGTMessage.warning( appStore?.userInfo?.userPhone ? t('workflowTradeAdd.placeholderEmail') : t('workflowTradeAdd.placeholderPhoneNumber'))
|
|
|
|
|
|
|
+ DGTMessage.warning(appStore?.userInfo?.userPhone ? t('workflowTradeAdd.placeholderEmail') : t('workflowTradeAdd.placeholderPhoneNumber'))
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 验证手机号格式
|
|
// 验证手机号格式
|
|
|
- if (!PHONE_REGEX.test(account) && !EMAIL_REGEX.test(account)) {
|
|
|
|
|
- DGTMessage.warning( appStore?.userInfo?.userPhone ? t('common.pleaseInputRightEmail') : t('common.pleaseInputRightPhoneNumber'))
|
|
|
|
|
|
|
+ if ((!PHONE_REGEX.test(account) && appStore?.userInfo?.email) || (!EMAIL_REGEX.test(account) && appStore?.userInfo?.userPhone)) {
|
|
|
|
|
+ DGTMessage.warning(appStore?.userInfo?.userPhone ? t('common.pleaseInputRightEmail') : t('common.pleaseInputRightPhoneNumber'))
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let res = null;
|
|
let res = null;
|
|
|
- if (PHONE_REGEX.test(account)) {
|
|
|
|
|
|
|
+ if (PHONE_REGEX.test(account) && appStore?.userInfo?.email) {
|
|
|
res = await getSmsCode({
|
|
res = await getSmsCode({
|
|
|
phone: account
|
|
phone: account
|
|
|
})
|
|
})
|
|
|
- } else if (EMAIL_REGEX.test(account)) {
|
|
|
|
|
|
|
+ } else if (EMAIL_REGEX.test(account) && appStore?.userInfo?.userPhone) {
|
|
|
res = await getEmailCode({
|
|
res = await getEmailCode({
|
|
|
email: account
|
|
email: account
|
|
|
})
|
|
})
|
|
@@ -648,7 +714,7 @@ const sendSmsCode = async () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 模拟发送验证码
|
|
// 模拟发送验证码
|
|
|
- ElMessage.success(t('login.captchaSendSuccess'))
|
|
|
|
|
|
|
+ DGTMessage.success(t('login.captchaSendSuccess'))
|
|
|
|
|
|
|
|
// 开始倒计时
|
|
// 开始倒计时
|
|
|
smsCountdown.value = 60
|
|
smsCountdown.value = 60
|
|
@@ -709,7 +775,7 @@ const handleConfirm = async (formEl) => {
|
|
|
if (!appStore.userInfo.userPhone || !appStore.userInfo.email) {
|
|
if (!appStore.userInfo.userPhone || !appStore.userInfo.email) {
|
|
|
userInfo.value.bindType = appStore.userInfo.userPhone ? 'email' : 'phone'
|
|
userInfo.value.bindType = appStore.userInfo.userPhone ? 'email' : 'phone'
|
|
|
}
|
|
}
|
|
|
- let obj = !appStore.userInfo.userPhone || !appStore.userInfo.email ? { email: userInfo.value.email, bindType: userInfo.value.bindType, userPhone: userInfo.value.userPhone, verifyCode: userInfo.value.verifyCode } : {}
|
|
|
|
|
|
|
+ let obj = !appStore.userInfo.userPhone && userInfo.value.userPhone || !appStore.userInfo.email && userInfo.value.email ? { email: userInfo.value.email, bindType: userInfo.value.bindType, userPhone: userInfo.value.userPhone, verifyCode: userInfo.value.verifyCode } : {}
|
|
|
let res = await updateUserInfo({
|
|
let res = await updateUserInfo({
|
|
|
nickName: userInfo.value.nickName,
|
|
nickName: userInfo.value.nickName,
|
|
|
userAvatar: coverImage.value.map(item => item.url).join(';'),
|
|
userAvatar: coverImage.value.map(item => item.url).join(';'),
|
|
@@ -746,6 +812,8 @@ const getInfo = async () => {
|
|
|
}
|
|
}
|
|
|
if (res?.user?.skillTags) {
|
|
if (res?.user?.skillTags) {
|
|
|
dynamicTags.value = res.user.skillTags.split(',')
|
|
dynamicTags.value = res.user.skillTags.split(',')
|
|
|
|
|
+ } else {
|
|
|
|
|
+ dynamicTags.value = []
|
|
|
}
|
|
}
|
|
|
userInfo.value = res.user;
|
|
userInfo.value = res.user;
|
|
|
navList.value.forEach(item => {
|
|
navList.value.forEach(item => {
|
|
@@ -789,6 +857,11 @@ const getCount = async () => {
|
|
|
collectCount.value = res?.data?.collectCount;
|
|
collectCount.value = res?.data?.collectCount;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+const changeSHow = () => {
|
|
|
|
|
+ getInfo()
|
|
|
|
|
+ dialogVisible.value = true;
|
|
|
|
|
+}
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
getInfo()
|
|
getInfo()
|
|
|
getCount()
|
|
getCount()
|
|
@@ -1044,6 +1117,12 @@ div {
|
|
|
font-size: 18px;
|
|
font-size: 18px;
|
|
|
font-weight: bold;
|
|
font-weight: bold;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+
|
|
|
|
|
+ .work-head-left {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
img {
|
|
img {
|
|
|
width: 24px;
|
|
width: 24px;
|