Parcourir la source

Merge branch 'master' of http://git.dgtis.com/zhangningning/ali_ai_learn_web

zhangningning il y a 3 semaines
Parent
commit
55be15889b

+ 1 - 0
.env.production

@@ -0,0 +1 @@
+VITE_API_BASE_URL=http://47.104.167.40/prod-api/api

+ 0 - 1
src/App.vue

@@ -251,7 +251,6 @@ provide('openLoginDialog', openLoginDialog);
   background: url('/src/assets/imgs/header-bj@2x.png') no-repeat;
   background-size: cover;
   position: fixed;
-  z-index: -1;
 }
 
 .el-footer {

+ 37 - 3
src/locales/en.js

@@ -78,7 +78,7 @@ export default {
     dictType: 'Type',
     dictTypeSecond: 'Second Type',
     go: 'Go ',
-    platform: 'Platform',
+    platform: ' Platform',
     demandStatus: 'Demand Status',
     publishTime: 'Publish Time',
     startUsing: 'Start Using',
@@ -119,6 +119,7 @@ export default {
     remainingTime:"Remaining Time",
     readAndAgree:"I have read and agree ",
     notFoundPage:"Sorry, the page you visited cannot be found!",
+    addTags: 'New Tag',
   },
   login: {
     smsLogin: 'Captcha Login',
@@ -133,7 +134,7 @@ export default {
     placeholderNewPassword: 'Please input new password',
     placeholderConfirmPassword: 'Please confirm new password',
     forgetPassword: 'Forget Password',
-    addTags: 'New Tag',
+    
     passwordMinLength:"Password length must be at least 6 characters",
     placeholderPhone:"Please input phone number",
     passwordNotSame:"Passwords do not match",
@@ -277,6 +278,9 @@ export default {
     gongdanbiaoti_placeholder:'Please enter work order title',
     gongdanneirong:'Work Order Content',
     gongdanneirong_placeholder:'Please enter work order content',
+    gongdanbianhao:'Work Order Number',
+    gongdanzhuangtai:'Work Order Status',
+    gongdanhuifu:'Work Order Reply',
     zhanghaowenti:'Account Questions',
     zhifuwenti:'Payment Questions',
     kechengwenti:'Course Questions',
@@ -340,7 +344,37 @@ export default {
     companyBank:`Company's bank of account`,
     bankAccount:'account number of the bank of deposit',
     fpttxx:'Invoice header information',
-    ttlx:'Title Type'
+    ttlx:'Title Type',
+    yijiejue:'Resolved',
+    daijiejue:'To be resolved',
+    shouxufei:'Handling fee',
+    shouxufeilv:'Handling fee rate',
+    tixianfangshi:'Withdrawal method',
+    tixianzhanghao:'Withdrawal account',
+    shenqingshijian:'Application time',
+    zhifubao:'Alipay',
+    yinhangka:'Bank Card',
+    daishenhe:'Pending',
+    yitongguo:'Approved',
+    yijujue:'Rejected',
+    weitongguo:'Not passed',
+    jujueliyou:'reason for rejection',
+    sfscggzl:'Whether to delete the workflow?',
+    sfqxbm:'Whether to cancel the sign up?',
+    zdfp:'The monthly MiCoin package for members can be allocated to your employees, and the remaining amount will be credited to your account each month.',
+    qydbtyzhxy:'Please read and agree to the conversion agreement',
+    qydbty:'Please read and agree',
+    zhxy:'Conversion Agreement',
+    txje:'Withdrawal Amount',
+    qsrtxje:'Please enter the withdrawal amount',
+    txfs:'Withdrawal Method',
+    qxztxfs:'Please select the withdrawal method',
+    txzh:'Withdrawal Account',
+    qsrtxzh:'Please enter the withdrawal account',
+    xm:'Name',
+    qsrxm:'Please enter the name',
+    txxy:'Withdrawal Agreement',
+    qydbtytxxy:'Please read and agree to the withdrawal agreement',
   },
   orderConfirm:{
     personalPay:'Personal Payment',

+ 34 - 1
src/locales/zh-CN.js

@@ -281,6 +281,9 @@ export default {
     gongdanbiaoti_placeholder:'请输入工单标题',
     gongdanneirong:'工单内容',
     gongdanneirong_placeholder:'请输入工单内容',
+    gongdanbianhao:'工单编号',
+    gongdanzhuangtai:'工单状态',
+    gongdanhuifu:'工单回复',
     zhanghaowenti:'账号问题',
     zhifuwenti:'支付问题',
     kechengwenti:'课程问题',
@@ -344,7 +347,37 @@ export default {
     companyBank:'公司开户行',
     bankAccount:'开户行账号',
     fpttxx: '发票抬头信息',
-    ttlx:'抬头类型'
+    ttlx:'抬头类型',
+    yijiejue:'已解决',
+    daijiejue:'待解决',
+    shouxufei:'手续费',
+    shouxufeilv:'手续费率',
+    tixianfangshi:'提现方式',
+    tixianzhanghao:'提现账号',
+    shenqingshijian:'申请时间',
+    zhifubao:'支付宝',
+    yinhangka:'银行卡',
+    daishenhe:'待审核',
+    yitongguo:'已通过',
+    yijujue:'已拒绝',
+    weitongguo:'未通过',
+    jujueliyou:'拒绝理由',
+    sfscggzl:'是否删除该工作流?',
+    sfqxbm:'是否取消报名?',
+    zdfp:'会员每月米币包可向您的员工分配,分配剩余的每月会到达您的账户。',
+    qydbtyzhxy:'请阅读并同意转换协议',
+    qydbty:'请阅读并同意',
+    zhxy:'转换协议',
+    txje:'提现金额',
+    qsrtxje:'请输入提现金额',
+    txfs:'提现方式',
+    qxztxfs:'请选择提现方式',
+    txzh:'提现账号',
+    qsrtxzh:'请输入提现账号',
+    xm:'姓名',
+    qsrxm:'请输入姓名',
+    txxy:'提现协议',
+    qydbtytxxy:'请阅读并同意《提现协议》',
   },
   orderConfirm:{
     personalPay:'个人支付',

+ 44 - 13
src/pages/Member.vue

@@ -14,11 +14,11 @@
           <div class="price-left">
             <span>¥</span>
             <span>{{ item.price }}</span>
-            <span>/{{ item.durationUnit }}</span>
+            <!-- <span>/{{ item.durationUnit }}</span> -->
           </div>
           <!-- <div class="price-right">¥79.00/月</div> -->
         </div>
-        <div class="btn" @click="confirmBuy({
+        <div class="btn" :class="{btns:item.memberType == 2}" @click="confirmBuy({
           callback: getList,
           appStore,
           router,
@@ -29,11 +29,16 @@
           orderType: 'member_recharge',
           payMethod: 'BMI'
         })">{{ $t('personalCenter.activate') }}{{ item.typeName }}</div>
-        <div class="line">{{ $t('personalCenter.zxqy') }}</div>
+        <div class="line">
+          <div class=""></div>
+          <div class="">{{ $t('personalCenter.zxqy') }}</div>
+          <div class=""></div>
+        </div>
         <div class="ul">
           <div v-for="(em, ind) in privilegeRes[item.memberType]" :key="ind" class="li flex-center-between">
             <div class="">{{ em.privilegeName }}</div>
-            <div class="">{{ em.privilegeValue == -1 ? $t('personalCenter.wx') : `${em.privilegeValue}${em.unit ? em.unit : ''}`  }}</div>
+            <div class="">{{ em.privilegeValue == -1 ? $t('personalCenter.wx') : `${em.privilegeValue}${em.unit ?
+              em.unit : ''}` }}</div>
           </div>
         </div>
       </li>
@@ -72,7 +77,7 @@ const getprivilegeRes = async (memberType) => {
 }
 
 const getList = async () => {
-  
+
   let privilegeRes1 = await privilege(1);
   let privilegeRes2 = await privilege(2);
   for (const key in privilegeRes.value) {
@@ -101,6 +106,7 @@ li {
 .member {
   max-width: 1246px;
   margin: 0 auto;
+  position: relative;
 }
 
 .member-head {
@@ -189,16 +195,41 @@ li {
       background: linear-gradient(270deg, #FBE8CF 0%, #F8C79D 52.05%, #FADCB9 100%);
       border-radius: 10px;
     }
+    .btns {
+      color: #FAD8B4;
+      background: #3B3843;
+    }
 
     .line {
-      width: 164px;
-      color: #8B3D22;
-      font-weight: bold;
-      font-size: 14px;
-      text-align: center;
-      background: url('/src/assets/imgs/line@2x.png') no-repeat;
-      background-size: 164px 3px;
-      background-position: center center;
+      // width: 164px;
+      display: flex;
+      align-items: center;
+      // background: url('/src/assets/imgs/line@2x.png') no-repeat;
+      // background-size: 164px 3px;
+      // background-position: center center;
+      div {
+        &:nth-child(2) {
+          color: #8B3D22;
+          font-weight: bold;
+          font-size: 14px;
+          text-align: center;
+          margin: 0 8px;
+        }
+
+        &:first-child,
+        &:last-child {
+          width: 46px;
+          height: 3px;
+         
+         
+        }
+        &:first-child {
+           background: linear-gradient(270deg, #8B3D22 0%, rgba(139, 61, 34, 0) 100%);
+        }
+        &:last-child {
+          background: linear-gradient(90deg, #8B3D22 0%, rgba(139, 61, 34, 0) 100%);
+        }
+      }
     }
 
     .ul {

+ 27 - 1
src/pages/Personal/BusinessManagement.vue

@@ -85,7 +85,7 @@
             <el-col :span="24">
               <el-form-item :label="$t('personalCenter.yuangong')" prop="userPhone">
                 <el-select v-model="formInline.userPhone" filterable remote reserve-keyword
-                  :placeholder="$t('common.placeholderInput')" :remote-method="remoteMethod">
+                  :placeholder="$t('personalCenter.qsryssdygsjh')" :remote-method="remoteMethod">
                   <el-option v-for="item in options" :key="item.userPhone" :label="item.nickName"
                     :value="item.userPhone" />
                 </el-select>
@@ -107,8 +107,28 @@
               </el-form-item>
             </el-col>
           </el-row>
+           <el-text class="mx-1" type="danger">*{{ $t('personalCenter.zdfp') }}</el-text>
         </template>
         <template v-else-if="title == 'personalCenter.fenpeimibi'">
+          <el-row :gutter="0">
+            <el-col :span="24">
+              <el-form-item :label="$t('personalCenter.bumen')" prop="deptId">
+                <el-tree-select disabled v-model="formInline.deptId" :data="dataSource" :props="defaultProps"
+                  :placeholder="$t('common.qingxuanze')" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="0">
+            <el-col :span="24">
+              <el-form-item :label="$t('personalCenter.yuangong')" prop="userPhone">
+                <el-select disabled v-model="formInline.userPhone" filterable remote reserve-keyword
+                  :placeholder="$t('common.placeholderInput')" :remote-method="remoteMethod">
+                  <el-option v-for="item in options" :key="item.userPhone" :label="item.nickName"
+                    :value="item.userPhone" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
           <el-row :gutter="0">
             <el-col :span="24">
               <el-form-item :label="$t('personalCenter.kfpmb')">
@@ -124,6 +144,8 @@
               </el-form-item>
             </el-col>
           </el-row>
+          <el-text class="mx-1" type="danger">*{{ $t('personalCenter.zdfp') }}</el-text>
+          
         </template>
         <el-row :gutter="0" v-else>
           <el-col :span="24">
@@ -212,6 +234,9 @@ const changeDialogVisible = async (txt) => {
 const changeEmployee = async (item, index, type) => {
   if (type == 1) {
     formInline.value.userId = item.userId;
+    formInline.value.points = item.points;
+    formInline.value.deptId = item.deptId;
+    formInline.value.userPhone = item.userPhone;
     changeDialogVisible('personalCenter.fenpeimibi');
   } else if (type == 2) {
     let res = await deleteSubAccount(item.userId)
@@ -257,6 +282,7 @@ const resetForm = () => {
     formInline.value.deptName = '';
     formInline.value.parentId = null;
     formInline.value.points = 0;
+    formInline.value.userPhone = '';
   }, 500)
 }
 

+ 1 - 1
src/pages/Personal/Collection.vue

@@ -79,7 +79,7 @@ const toDetail = (item: any) => {
     path: `/learning-system/detail/${item.objectId}/course/${item.objectId}`,
     query: {
       courseId: item.objectId,
-      metaTitle: '课程详情'
+      metaTitle: item.courseTitle || '课程详情'
     }
   })
 }

+ 5 - 5
src/pages/Personal/Demand.vue

@@ -230,7 +230,7 @@ const changeItem = async (item, index, type) => {
       t('personalCenter.jieshuxuqiu') + '?',
       t('common.warning'),
       {
-        confirmButtonText: 'OK',
+         confirmButtonText: t('common.confirm'),
         cancelButtonText: t('common.cancel'),
         type: 'warning',
       }
@@ -252,7 +252,7 @@ const changeItem = async (item, index, type) => {
       t('personalCenter.shifoushanchu'),
       t('common.warning'),
       {
-        confirmButtonText: 'OK',
+         confirmButtonText: t('common.confirm'),
         cancelButtonText: t('common.cancel'),
         type: 'warning',
       }
@@ -270,10 +270,10 @@ const changeItem = async (item, index, type) => {
       })
   } else if (type == 4) {
     ElMessageBox.confirm(
-      'proxy will permanently delete the file. Continue?',
-      'Warning',
+      t('personalCenter.sfqxbm'),
+      t('common.warning'),
       {
-        confirmButtonText: 'OK',
+         confirmButtonText: t('common.confirm'),
         cancelButtonText: t('common.cancel'),
         type: 'warning',
       }

+ 21 - 14
src/pages/Personal/Orders.vue

@@ -2,8 +2,8 @@
   <div class="order">
     <el-tabs v-model="form.orderStatus" class="demo-tabs" @tab-click="handleClick">
       <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="$t(tab.label)" :name="tab.name">
-        <ul class="order-list">
-          <li v-for="(item, index) in list" :key="index">
+        <div class="order-list">
+          <div v-for="(item, index) in list" :key="index" class="li" @click="toDetail(item)">
             <div class="order-list-top flex-center-between">
               <div class="order-list-top-l flex-align-center">
                 <el-tag
@@ -43,7 +43,7 @@
                   <div class="flex-center-flex-end" style="width: 300px;">
                     <template v-if="item.invoiceStatus == 0 && item.orderStatus == 1">
                       <el-tag style="margin-right: 16px;" :type=" item.shipStatus == 0 ? 'primary' : 'shipStatus'" v-if="item.orderType == 'mi_mall'">{{ item.shipStatusName }}</el-tag>
-                      <div @click="applyInvoices(item, index)" class="blue btn">
+                      <div @click.stop="applyInvoices(item, index)" class="blue btn">
                         <img src="/src/assets/imgs/my/order3@2x.png" alt="">
                         <div class="">{{ $t('common.applyInvoice') }}</div>
                       </div>
@@ -51,7 +51,7 @@
                     </template>
 
 
-                    <div class="gradient btn" v-else-if="item.orderStatus == 0" @click="pay(item)">
+                    <div class="gradient btn" v-else-if="item.orderStatus == 0" @click.stop="pay(item)">
                       <img src="/src/assets/imgs/my/order1@2x.png" alt="">
                       <div class="">{{ $t('personalCenter.lookVoucher') }}</div>
                     </div>
@@ -97,8 +97,8 @@
 
 
             </div>
-          </li>
-        </ul>
+          </div>
+        </div>
       </el-tab-pane>
     </el-tabs>
     <template v-if="list.length">
@@ -179,8 +179,8 @@
       </el-form>
       <template #footer>
         <div class="dialog-footer flex-center">
-          <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
-          <el-button class="gradient" type="primary" @click="submitForm(ruleFormRef)">{{ $t('common.confirm')
+          <el-button @click.stop.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
+          <el-button class="gradient" type="primary" @click.stop.prevent="submitForm(ruleFormRef)">{{ $t('common.confirm')
           }}</el-button>
         </div>
       </template>
@@ -264,6 +264,17 @@ const rules = reactive<FormRules<RuleForm>>({
   ],
 })
 
+// 去详情页面
+const toDetail = (item:any) => {
+  console.log(item.orderType)
+  if (['workflow_purchase', 'course_purchase'].includes(item.orderType)) {
+    router.push({ path: item.orderType == 'workflow_purchase' ? '/workflow-detail' :  `/learning-system/detail/${item.bizId}`, query: item.orderType == 'workflow_purchase' ? { publishId: item.bizId,
+      metaTitle: 'route.WorkflowDetail' } : {courseId: item.bizId,
+      metaTitle: item.description || '课程详情'} })
+  }
+ 
+}
+
 const submitForm = async (formEl: FormInstance | undefined) => {
   if (!formEl) return
   let valid = await formEl.validate();
@@ -328,17 +339,13 @@ onMounted(() => {
 
 </script>
 <style scoped lang="scss">
-ul,
-li {
-  margin: 0;
-  padding: 0;
-}
 
 .order {
   padding-bottom: 16px;
 
   .order-list {
-    li {
+    .li {
+      cursor: pointer;
       background: #FFFFFF;
       border-radius: 16rpx;
       margin-bottom: 16px;

+ 70 - 26
src/pages/Personal/Wallet.vue

@@ -34,26 +34,29 @@
               <div class="flex-center-between">
                 <el-tag
                   :type="item.applyStatus == 0 ? 'primary' : item.applyStatus == 1 ? 'success' : item.applyStatus == 2 ? 'danger' : ''">{{
-                    item.applyStatus == 0 ? '待审核' : item.applyStatus == 1 ? '已通过' : '未通过' }}</el-tag>
+                    item.applyStatus == 0 ? $t('personalCenter.daishenhe') : item.applyStatus == 1 ?
+                      $t('personalCenter.yitongguo') : $t('personalCenter.weitongguo') }}</el-tag>
 
                 <div class="price">¥{{ item.applyAmount }}</div>
               </div>
 
               <div class="flex-center-between">
-                <div class="">订单号:{{ item.applyNo }}</div>
-                <div class="">手续费:{{ item.feeAmount }}</div>
+                <div class="">{{ $t('personalCenter.dingdanhao') }}:{{ item.applyNo }}</div>
+                <div class="">{{ $t('personalCenter.shouxufei') }}:{{ item.feeAmount }}</div>
               </div>
               <div class="flex-center-between">
-                <div class="">提现方式:{{ item.settleType == 'alipay' ? '支付宝' : item.settleType == 'wechat' ? '微信' : '银行卡'
-                }}</div>
-                <div class="">提现账号:{{ item.receiveAccount }}</div>
+                <div class="">{{ $t('personalCenter.tixianfangshi') }}:{{ item.settleType == 'alipay' ?
+                  $t('personalCenter.zhifubao') : item.settleType == 'wechat' ? '微信' : $t('personalCenter.yinhangka')
+                  }}</div>
+                <div class="">{{ $t('personalCenter.tixianzhanghao') }}:{{ item.receiveAccount }}</div>
               </div>
               <div class="flex-center-between">
-                 <div class="">申请时间:{{ item.createTime }}</div>
-                
-                <el-text v-if=" item.applyStatus == 2" class="mx-1" type="danger">拒绝理由:{{ item.auditRemark }}</el-text>
+                <div class="">{{ $t('personalCenter.shenqingshijian') }}:{{ item.createTime }}</div>
+
+                <el-text v-if="item.applyStatus == 2" class="mx-1" type="danger">{{ $t('personalCenter.jujueliyou')
+                  }}:{{ item.auditRemark }}</el-text>
               </div>
-             
+
             </div>
           </div>
         </template>
@@ -93,7 +96,7 @@
               </el-form-item>
 
               <el-form-item :label="$t('common.use') + $t('common.mibi')" v-else prop="orderAmt">
-                <el-input-number v-model="walletForm.orderAmt" :min="Number(configTxt.configValue)"
+                <el-input-number v-model="walletForm.orderAmt" :min="1"
                   :max="appStore?.userInfo?.pointsBalance" :step="Number(configTxt.configValue)"
                   controls-position="right" size="large" @change="handleChange" style="width: 100%;"
                   :placeholder="$t('common.placeholderInput')" align="left" :input-style="{ fontSize: '28px' }"
@@ -109,7 +112,7 @@
           <el-col :span="24">
             <div class="input">
               <el-form-item v-if="transformationIndex"
-                :label="$t('common.available') + $t('common.mibi') + `(手续费率:${walletForm.feeRate})`">
+                :label="$t('common.available') + $t('common.mibi') + `(${$t('personalCenter.shouxufeilv')}: ${walletForm.feeRate * 100}%)`">
                 <el-input v-model="walletForm.targetAmount" :placeholder="$t('common.placeholderInput')" readonly
                   disabled :input-style="{ fontSize: '28px' }" class="inputStyle" />
               </el-form-item>
@@ -123,6 +126,13 @@
 
         <div class="" style="font-size: 14px;margin-top: 16px;"> <text style="color: #E43434;">*</text> {{
           configTxt.configName }}{{ configTxt.configValue }}</div>
+        <el-form-item prop="checked">
+          <el-checkbox v-model="walletForm.checked">
+            <template #default>
+              <div class="">{{ $t('personalCenter.qydbty') }} <span style="color: #2D71FF;font-weight: bold;">《{{  $t('personalCenter.zhxy') }}》</span> </div>
+            </template>
+          </el-checkbox>
+        </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer flex-center">
@@ -137,37 +147,44 @@
       <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
         <el-row>
           <el-col :span="24">
-            <el-form-item label="提现金额" prop="applyAmount">
+            <el-form-item :label="$t('personalCenter.txje')" prop="applyAmount">
               <el-input type="number" :min="1" :max="appStore?.userInfo?.baoMiBalance" v-model="ruleForm.applyAmount"
-                :placeholder="$t('common.placeholderInput')" />
+                :placeholder="$t('personalCenter.qsrtxje')" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="提现方式" prop="settleType">
+            <el-form-item :label="$t('personalCenter.txfs')" prop="settleType">
 
-              <el-select v-model="ruleForm.settleType" placeholder="Select" style="width: 100%">
-                <el-option label="支付宝" value="alipay" />
-                <el-option label="银行卡" value="bank_card" />
+              <el-select v-model="ruleForm.settleType" :placeholder="$t('personalCenter.qxztxfs')" style="width: 100%">
+                <el-option :label="$t('personalCenter.zhifubao')" value="alipay" />
+                <el-option :label="$t('personalCenter.yinhangka')" value="bank_card" />
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="姓名" prop="withdrawPerson">
-              <el-input v-model="ruleForm.withdrawPerson" :placeholder="$t('common.placeholderInput')" />
+            <el-form-item :label="$t('personalCenter.xm')" prop="withdrawPerson">
+              <el-input v-model="ruleForm.withdrawPerson" :placeholder="$t('personalCenter.qsrxm')" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="账号" prop="receiveAccount">
-              <el-input v-model="ruleForm.receiveAccount" :placeholder="$t('common.placeholderInput')" />
+            <el-form-item :label="$t('personalCenter.txzh')" prop="receiveAccount">
+              <el-input v-model="ruleForm.receiveAccount" :placeholder="$t('personalCenter.qsrtxzh')" />
             </el-form-item>
           </el-col>
         </el-row>
+        <el-form-item prop="checked1">
+          <el-checkbox v-model="ruleForm.checked1">
+            <template #default>
+              <div class="">{{ $t('personalCenter.qydbty') }} <span style="color: #2D71FF;font-weight: bold;">《{{  $t('personalCenter.txxy') }}》</span> </div>
+            </template>
+          </el-checkbox>
+        </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer flex-center">
@@ -228,7 +245,8 @@ const walletForm = ref({
   orderNum: null,
   orderAmt: 1,
   feeRate: 0,
-  targetAmount: 0
+  targetAmount: 0,
+  checked: false
 })
 
 const ruleFormRef = ref()
@@ -247,7 +265,8 @@ const ruleForm = ref({
   applyAmount: null,
   settleType: "alipay",
   withdrawPerson: "",
-  receiveAccount: ""
+  receiveAccount: "",
+  checked1: false
 })
 
 const ruleFormRefs = ref()
@@ -272,7 +291,22 @@ const validatePass1 = (rule: any, value: any, callback: any) => {
     callback()
   }
 }
-
+const validatePass2 = (rule: any, value: any, callback: any) => {
+  if (!value) {
+    callback(new Error(t('personalCenter.qydbtyzhxy')))
+    return
+  } else {
+    callback()
+  }
+}
+const validatePass3 = (rule: any, value: any, callback: any) => {
+  if (!value) {
+    callback(new Error(t('personalCenter.qydbtytxxy')))
+    return
+  } else {
+    callback()
+  }
+}
 const rules = ref({
   applyAmount: [
     { required: true, validator: validatePass1, trigger: 'blur' }
@@ -289,6 +323,16 @@ const rules = ref({
   orderAmt: [
     { required: true, trigger: 'blur', validator: validatePass },
   ],
+  checked: [{
+    required: true,
+   validator:validatePass2,
+    trigger: 'blur',
+  }],
+  checked1: [{
+    required: true,
+   validator:validatePass3,
+    trigger: 'blur',
+  }]
 })
 
 const submitForm = async (formEl) => {
@@ -309,7 +353,7 @@ const submitForm = async (formEl) => {
 
 // 确认转换
 const confirmTransformation = async (formEl) => {
-
+ 
   if (!formEl) return
   await formEl.validate(async (valid, fields) => {
     if (valid) {

+ 4 - 4
src/pages/Personal/Workflow.vue

@@ -106,11 +106,11 @@ const changeItem = async (item: any, index: any, type: any) => {
     })
   } else if (type == 1) {
     ElMessageBox.confirm(
-      'proxy will permanently delete the file. Continue?',
-      'Warning',
+      t('personalCenter.sfscggzl'),
+      t('common.warning'),
       {
-        confirmButtonText: 'OK',
-        cancelButtonText: 'Cancel',
+        confirmButtonText: t('common.confirm'),
+        cancelButtonText: t('common.cancel'),
         type: 'warning',
       }
     )

+ 148 - 69
src/pages/PersonalCenter.vue

@@ -12,7 +12,7 @@
               <div class="personal-username">
                 <div class="">{{ appStore?.userInfo?.nickName }}</div>
                 <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) -->
               </div>
               <div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{
@@ -32,7 +32,7 @@
 
           </div>
           <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="">
               <div class="">{{ $t('personalCenter.editProfile') }}</div>
             </div>
@@ -111,18 +111,19 @@
           <template v-if="activeName == 0">
             <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
               <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)}`"
                     :value="item.value" />
                 </el-select>
               </el-form-item>
               <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 :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>
           </template>
@@ -132,14 +133,63 @@
                 v-for="(item, index) in workList" :key="index">
                 <template #title>
                   <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>
                 </template>
                 <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>
               </el-collapse-item>
             </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-row :gutter="16">
           <el-col :span="12">
@@ -196,12 +246,12 @@
           </el-col>
           <el-col :span="12" v-if="!appStore?.userInfo?.userPhone">
             <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',
                 }">
                 <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">
                     {{ smsCountdown > 0 ? `${smsCountdown}s` : $t('login.sendCaptcha') }}
                   </el-button>
@@ -213,8 +263,8 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <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',
                 }" :disabled="appStore?.userInfo?.email ? true : false" />
             </el-form-item>
@@ -222,12 +272,12 @@
           </el-col>
           <el-col :span="12" v-if="!appStore?.userInfo?.email">
             <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',
                 }">
                 <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">
                     {{ smsCountdown > 0 ? `${smsCountdown}s` : $t('login.sendCaptcha') }}
                   </el-button>
@@ -239,11 +289,11 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <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',
                 }">
-                <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-button @click="createAi('0')" :icon="Refresh" />
                   </el-tooltip>
@@ -253,7 +303,7 @@
           </el-col>
           <el-col :span="12">
             <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="{
                   backgroundColor: 'transparent',
                 }" readonly type="password" show-password />
@@ -264,11 +314,11 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <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',
                 }">
-                <template #append>
+                <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.cozeAccount">
                   <el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenCoze')"
                     placement="top">
                     <el-button @click="createAi('1')" :icon="Refresh" />
@@ -280,8 +330,8 @@
           </el-col>
           <el-col :span="12">
             <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',
                 }" readonly type="password" show-password />
             </el-form-item>
@@ -290,11 +340,11 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <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',
                 }">
-                <template #append>
+                <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.difyAccount">
                   <el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenDify')"
                     placement="top">
                     <el-button @click="createAi('2')" :icon="Refresh" />
@@ -305,8 +355,8 @@
           </el-col>
           <el-col :span="12">
             <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',
                 }" readonly type="password" show-password />
             </el-form-item>
@@ -316,11 +366,11 @@
 
           <el-col :span="12">
             <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',
                 }">
-                <template #append>
+                <template #append v-if="appStore?.userInfo?.email && !appStore?.userInfo?.fastGptAccount">
                   <el-tooltip class="box-item" effect="dark" :content="$t('personalCenter.ceratenFastGpt')"
                     placement="top">
                     <el-button @click="createAi('3')" :icon="Refresh" />
@@ -332,8 +382,8 @@
           </el-col>
           <el-col :span="12">
             <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',
                 }" readonly type="password" show-password />
             </el-form-item>
@@ -353,7 +403,7 @@
                     <el-button :icon="Plus" />
                   </template></el-input>
                 <el-button v-else class="button-new-tag" size="small" @click="showInput">
-                  + {{ $t('login.addTags') }}
+                  + {{ $t('common.addTags') }}
                 </el-button>
               </div>
             </el-form-item>
@@ -362,7 +412,7 @@
       </el-form>
       <template #footer>
         <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)">
             {{ $t('common.confirm') }}
           </el-button>
@@ -399,7 +449,8 @@ import Pagination from '@/components/Pagination.vue'
 
 
 import type { FormInstance, FormRules } from 'element-plus'
-
+import { useLangStore } from '@/pinia/langStore'
+const langStore = useLangStore();
 interface RuleForm {
   issueCategory: string
   issueTitle: string
@@ -418,61 +469,65 @@ const route = useRoute()
 
 const router = useRouter()
 
+const getImgUrl = (path) => {
+  return new URL(`/src/assets/imgs/my/${path}`, import.meta.url).href
+}
+
 const navList = ref([
   {
     name: 'personalCenter.myWallet',
     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
   },
   {
     name: 'personalCenter.membershipInfo',
     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
   },
   {
     name: 'personalCenter.myCollection',
     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
   },
   {
     name: 'personalCenter.myDemand',
     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
   },
   {
     name: 'personalCenter.myOrders',
     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
   },
   {
     name: 'personalCenter.myInvoice',
     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
   },
   {
     name: 'personalCenter.myWorkflow',
     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
   },
   {
     name: 'personalCenter.businessManagement',
     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
   },
   // {
@@ -527,6 +582,16 @@ const workTypeList = ref([
     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>({
   issueCategory: '',
@@ -543,10 +608,10 @@ const rules = ref<FormRules<RuleForm>>({
     },
   ],
   issueTitle: [
-    { required: true, message:  t('personalCenter.gongdanbiaoti_placeholder'), trigger: 'blur' },
+    { required: true, message: t('personalCenter.gongdanbiaoti_placeholder'), trigger: 'blur' },
   ],
   issueContent: [
-    { required: true, message:  t('personalCenter.gongdanneirong_placeholder'), trigger: 'blur' },
+    { required: true, message: t('personalCenter.gongdanneirong_placeholder'), trigger: 'blur' },
   ],
   nickName: [
     {
@@ -601,7 +666,8 @@ const emailCountdown = ref(0)
 
 // 正则表达式
 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(() => {
   return PHONE_REGEX.test(passwordForm.account);
 });
@@ -622,22 +688,22 @@ const createAi = async (creatFlag) => {
 const sendSmsCode = async () => {
   let account = appStore?.userInfo?.userPhone ? userInfo.value.email : userInfo.value.userPhone
   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
   }
 
   // 验证手机号格式 
-  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
   }
 
   let res = null;
-  if (PHONE_REGEX.test(account)) {
+  if (PHONE_REGEX.test(account) && appStore?.userInfo?.email) {
     res = await getSmsCode({
       phone: account
     })
-  } else if (EMAIL_REGEX.test(account)) {
+  } else if (EMAIL_REGEX.test(account) && appStore?.userInfo?.userPhone) {
     res = await getEmailCode({
       email: account
     })
@@ -648,7 +714,7 @@ const sendSmsCode = async () => {
   }
 
   // 模拟发送验证码
- ElMessage.success(t('login.captchaSendSuccess'))
+  DGTMessage.success(t('login.captchaSendSuccess'))
 
   // 开始倒计时
   smsCountdown.value = 60
@@ -709,7 +775,7 @@ const handleConfirm = async (formEl) => {
       if (!appStore.userInfo.userPhone || !appStore.userInfo.email) {
         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({
         nickName: userInfo.value.nickName,
         userAvatar: coverImage.value.map(item => item.url).join(';'),
@@ -746,6 +812,8 @@ const getInfo = async () => {
   }
   if (res?.user?.skillTags) {
     dynamicTags.value = res.user.skillTags.split(',')
+  } else {
+    dynamicTags.value = []
   }
   userInfo.value = res.user;
   navList.value.forEach(item => {
@@ -789,6 +857,11 @@ const getCount = async () => {
   collectCount.value = res?.data?.collectCount;
 }
 
+
+const changeSHow = () => {
+  getInfo()
+  dialogVisible.value = true;
+}
 onMounted(() => {
   getInfo()
   getCount()
@@ -1044,6 +1117,12 @@ div {
   font-size: 18px;
   font-weight: bold;
   align-items: center;
+  justify-content: space-between;
+
+  .work-head-left {
+    display: flex;
+    align-items: center;
+  }
 
   img {
     width: 24px;