|
|
@@ -3,7 +3,8 @@
|
|
|
<Breadcrumb />
|
|
|
<div class="personal-head">
|
|
|
<div class="personal-head-left">
|
|
|
- <el-avatar :size="100" :src="appStore?.userInfo?.userAvatar ? appStore.userInfo.userAvatar : appStore.avatarDefault" />
|
|
|
+ <el-avatar :size="100"
|
|
|
+ :src="appStore?.userInfo?.userAvatar ? appStore.userInfo.userAvatar : appStore.avatarDefault" />
|
|
|
<div class="personal-user-info">
|
|
|
<div class="personal-username">
|
|
|
<div class="">{{ appStore?.userInfo?.nickName }}</div>
|
|
|
@@ -11,15 +12,19 @@
|
|
|
<img :src="`/src/assets/imgs/my/vip${appStore?.userInfo?.memberType}@2x.png`" alt="">
|
|
|
<!-- memberType 会员类型memberType 会员类型分为企业会员(2)和个人会员(1)、免费会员(0) -->
|
|
|
</div>
|
|
|
- <div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{ appStore?.userInfo?.userPhone }}
|
|
|
+ <div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{ appStore?.userInfo?.userPhone
|
|
|
+ }}
|
|
|
</div>
|
|
|
- <div class="">{{ $t('personalCenter.vipEndTime') }}: {{ appStore?.userInfo?.memberExpire }}</div>
|
|
|
+ <div class="" v-if="['1', '2'].includes(appStore?.userInfo?.memberType)">{{ $t('personalCenter.vipEndTime')
|
|
|
+ }}: {{
|
|
|
+ appStore?.userInfo?.memberExpire }}</div>
|
|
|
<div class="mt4" v-if="appStore?.userInfo?.skillTags">
|
|
|
- <el-button v-for="(item,index) in appStore.userInfo.skillTags.split(',')" type="primary" plain>{{ item }}</el-button>
|
|
|
+ <el-button v-for="(item, index) in appStore.userInfo.skillTags.split(',')" type="primary" plain>{{ item
|
|
|
+ }}</el-button>
|
|
|
</div>
|
|
|
<div class="personal-user-list">
|
|
|
<div class="personal-user-li">
|
|
|
- <span>{{ appStore?.userInfo?.pointsBalance || 0}}</span>
|
|
|
+ <span>{{ appStore?.userInfo?.pointsBalance || 0 }}</span>
|
|
|
<span>{{ $t('common.mibi') }}</span>
|
|
|
</div>
|
|
|
<div class="personal-user-line"></div>
|
|
|
@@ -70,6 +75,41 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
+ <!-- 工单 -->
|
|
|
+
|
|
|
+ <div class="workOrder-dot" @click="show = true">
|
|
|
+ <img src="/src/assets/imgs/my/icon9a@2x.png" alt="">
|
|
|
+ <div class="">工单</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-dialog v-model="show" title="工单" width="784">
|
|
|
+ <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
|
|
+ <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.label" :name="tab.name">
|
|
|
+ <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules">
|
|
|
+ <el-form-item label="工单类型" prop="issueCategory">
|
|
|
+ <el-input v-model="ruleForm.issueCategory" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工单标题" prop="issueTitle">
|
|
|
+ <el-input v-model="ruleForm.issueTitle" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工单内容" prop="issueContent">
|
|
|
+ <el-input v-model="ruleForm.issueContent" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ <template #footer v-if="activeName == 0">
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button @click="dialogVisible = false">Cancel</el-button>
|
|
|
+ <el-button type="primary" @click="submitForm(ruleFormRef)">
|
|
|
+ Confirm
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
<el-dialog v-model="dialogVisible" title="编辑资料" width="784">
|
|
|
<el-form :model="userInfo" label-width="auto" label-position="top">
|
|
|
|
|
|
@@ -93,13 +133,32 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="登录手机号">
|
|
|
- <el-input :readonly="userInfo.userPhone ? true : false" v-model="userInfo.userPhone"
|
|
|
+ <el-input :disabled="userInfo.userPhone ? true : false" v-model="userInfo.userPhone"
|
|
|
:placeholder="$t('common.placeholderInput')" class="inputStyle" :input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
|
}" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
+ <el-row :gutter="16">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="登录邮箱">
|
|
|
+ <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
+ :input-style="{
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ }" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="验证码" prop="verifyCode">
|
|
|
+ <el-input v-model="userInfo.verifyCode" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
+ :input-style="{
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ }" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="n8n账号">
|
|
|
@@ -109,6 +168,17 @@
|
|
|
}" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="n8n初始密码">
|
|
|
+ <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
+ :input-style="{
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ }" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="Coze账号">
|
|
|
<el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
@@ -116,6 +186,15 @@
|
|
|
backgroundColor: 'transparent',
|
|
|
}" />
|
|
|
</el-form-item>
|
|
|
+
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="Coze初始密码">
|
|
|
+ <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
+ :input-style="{
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ }" />
|
|
|
+ </el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row :gutter="16">
|
|
|
@@ -128,7 +207,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="FastGpt账号">
|
|
|
+ <el-form-item label="Dify初始密码">
|
|
|
<el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
:input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
|
@@ -137,8 +216,17 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row :gutter="16">
|
|
|
+
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="登录邮箱">
|
|
|
+ <el-form-item label="FastGpt账号">
|
|
|
+ <el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
+ :input-style="{
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ }" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="FastGpt初始密码">
|
|
|
<el-input v-model="userInfo.name" :placeholder="$t('common.placeholderInput')" class="inputStyle"
|
|
|
:input-style="{
|
|
|
backgroundColor: 'transparent',
|
|
|
@@ -146,6 +234,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
+
|
|
|
<el-row>
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="技能标签">
|
|
|
@@ -191,7 +280,7 @@ import type { InputInstance } from 'element-plus'
|
|
|
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
|
|
|
-import { getUserInfo,updateUserInfo } from '@/api/auth.js'
|
|
|
+import { getUserInfo, updateUserInfo } from '@/api/auth.js'
|
|
|
|
|
|
import { checkIn, queryCollectCount } from '@/api/my.js'
|
|
|
|
|
|
@@ -257,7 +346,7 @@ const navList = ref([
|
|
|
path: '/personal-center/business-management',
|
|
|
icon: '/src/assets/imgs/my/icon8@2x.png',
|
|
|
iconActive: '/src/assets/imgs/my/icon8a@2x.png',
|
|
|
- show:true,
|
|
|
+ show: true,
|
|
|
},
|
|
|
// {
|
|
|
// name: 'personalCenter.serviceManagement',
|
|
|
@@ -269,6 +358,39 @@ const navList = ref([
|
|
|
|
|
|
const dialogVisible = ref(false)
|
|
|
|
|
|
+const show = ref(false)
|
|
|
+
|
|
|
+const tabs = ref([
|
|
|
+ { label: '提交工单', name: 0 },
|
|
|
+ { label: '历史工单', name: 1 },
|
|
|
+ { label: '常见问题', name: 2 }
|
|
|
+])
|
|
|
+
|
|
|
+const activeName = ref(0)
|
|
|
+
|
|
|
+const ruleForm = ref({
|
|
|
+ issueCategory: '',
|
|
|
+ issueTitle: '',
|
|
|
+ issueContent: ''
|
|
|
+})
|
|
|
+
|
|
|
+const rules = ref({
|
|
|
+ issueCategory: [
|
|
|
+ {
|
|
|
+ type: 'date',
|
|
|
+ required: true,
|
|
|
+ message: '请选择工单类型',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ issueTitle: [
|
|
|
+ { required: true, message: '请输入标题', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ issueContent: [
|
|
|
+ { required: true, message: '请输入内容', trigger: 'blur' },
|
|
|
+ ]
|
|
|
+})
|
|
|
+
|
|
|
const navIndex = computed(() => {
|
|
|
switch (route.name) {
|
|
|
case 'Wallet':
|
|
|
@@ -308,17 +430,28 @@ const userInfo = ref({})//用户信息
|
|
|
|
|
|
const coverImage = ref([]);
|
|
|
|
|
|
+const ruleFormRef = ref()
|
|
|
+
|
|
|
+const submitForm = async (formEl: any) => {
|
|
|
+ if (!formEl) return
|
|
|
+ await formEl.validate(async (valid, fields) => {
|
|
|
+ if (valid) {
|
|
|
+ console.log('submit!')
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
// 更新用户信息
|
|
|
-const handleConfirm = async () =>{
|
|
|
+const handleConfirm = async () => {
|
|
|
let res = await updateUserInfo({
|
|
|
nickName: userInfo.value.nickName,
|
|
|
- userAvatar:coverImage.value.map(item => item.url).join(';'),
|
|
|
- skillTags:dynamicTags.value.join(','),
|
|
|
- userPhone:userInfo.value.userPhone,
|
|
|
+ userAvatar: coverImage.value.map(item => item.url).join(';'),
|
|
|
+ skillTags: dynamicTags.value.join(','),
|
|
|
+ userPhone: userInfo.value.userPhone,
|
|
|
})
|
|
|
if (res.code === 200) {
|
|
|
appStore.USERINFO();
|
|
|
- DGTMessage.success(`${t('common.modify')}${t('common.success')}`)
|
|
|
+ DGTMessage.success(`${t('common.modify')}${t('common.success')}`)
|
|
|
dialogVisible.value = false;
|
|
|
}
|
|
|
}
|
|
|
@@ -340,7 +473,7 @@ const signIn = async () => {
|
|
|
const getInfo = async () => {
|
|
|
let res = await getUserInfo();
|
|
|
if (res?.user?.userAvatar) {
|
|
|
- coverImage.value = [{url:res.user.userAvatar}]
|
|
|
+ coverImage.value = [{ url: res.user.userAvatar }]
|
|
|
}
|
|
|
if (res?.user?.skillTags) {
|
|
|
dynamicTags.value = res.user.skillTags.split(',')
|
|
|
@@ -580,8 +713,32 @@ div {
|
|
|
background: #F5F7FA;
|
|
|
border-radius: 4px;
|
|
|
border: 1px solid #F2F6FC;
|
|
|
+
|
|
|
::v-deep .el-input__wrapper {
|
|
|
background-color: transparent;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.workOrder-dot {
|
|
|
+ display: flex;
|
|
|
+ cursor: pointer;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-direction: column;
|
|
|
+ right: 100px;
|
|
|
+ bottom: 90px;
|
|
|
+ width: 64px;
|
|
|
+ height: 64px;
|
|
|
+ position: fixed;
|
|
|
+ color: #2D71FF;
|
|
|
+ font-size: 14px;
|
|
|
+ background: #FFFFFF;
|
|
|
+ box-shadow: 2px 2px 10px 0px rgba(45, 113, 255, 0.15);
|
|
|
+ border-radius: 50px;
|
|
|
+
|
|
|
+ img {
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|