浏览代码

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

zhangningning 1 月之前
父节点
当前提交
0ac295319c

+ 6 - 0
src/api/my.js

@@ -50,6 +50,12 @@ export function orderList(data = {}) {
 export function invoiceList(data = {}) {
   return request.get('/invoice/list',data)
 }
+// 申请发票
+export function applyInvoice(data = {}) {
+  return request.post('/invoice/apply',data)
+}
+
+
 
 // 查看登录用户发布的工作流
 export function userPublishList(data = {}) {

二进制
src/assets/imgs/my/arrow-left-right-fill@2x.png


+ 2 - 1
src/locales/en.js

@@ -226,6 +226,7 @@ export default {
     yue: 'Balance',
     shenqingtixian: 'Apply for Withdrawal',
     zhuanghuanmibi: 'Convert Mibit',
-    zhuanhuanbaomibi:'Convert Boom Mibit'
+    zhuanhuanbaomibi:'Convert Boom Mibit',
+    orderNumber: 'Order Number',
   }
 }

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

@@ -229,7 +229,8 @@ export default {
     yue: '余额',
     shenqingtixian: '申请提现',
     zhuanghuanmibi: '转换米币',
-    zhuanhuanbaomibi:'转换暴米币'
+    zhuanhuanbaomibi:'转换暴米币',
+    orderNumber: '订单编号',
   }
 
 }

+ 36 - 3
src/pages/Member.vue

@@ -18,7 +18,17 @@
           </div>
           <div class="price-right">¥79.00/月</div>
         </div>
-        <div class="btn">开通月卡</div>
+        <div class="btn" @click="confirmBuy({
+                callback:getList,
+                appStore,
+                router,
+                type:'baoMiBalance',
+                price:item.price,
+                t,
+                productId:item.typeId,
+                orderType:'member_recharge',
+                payMethod:'BMI'
+              })">开通{{ item.typeName }}</div>
         <div class="line">尊享权益</div>
         <div class="ul">
           <div v-for="(item, index) in 4" :key="index" class="li flex-center-between">
@@ -31,13 +41,36 @@
   </div>
 </template>
 <script setup lang="ts">
-import { vipList } from '@/api/my.js';
+
+
+
 import { ref, onMounted } from 'vue';
+
+
+import { useRouter } from 'vue-router'
+
+import { useAppStore } from '@/pinia/appStore'
+
+import { vipList } from '@/api/my.js';
+
+import { confirmBuy } from '@/utils/util.js'
+
+import { useI18n } from 'vue-i18n' 
+
+const { t } = useI18n() 
+
+const appStore = useAppStore()
+
+const router = useRouter()
+
 const list = ref([])
 
+const openCard = async (item) => {
+  confirmBuy(item, res.data);
+}
+
 const getList = async () => {
   let res = await vipList();
-  console.log(res.data)
   list.value = res.data;
 }
 

+ 6 - 3
src/pages/Personal/Invoice.vue

@@ -7,12 +7,12 @@
     <ul class="invoice-list">
       <li v-for="(item, index) in list" :key="index">
         <div class="invoice-list-t flex-center-between">
-          <div class="">这是订单名称</div>
-          <div class="">¥5000.00</div>
+          <div class="">{{ item.content.name }}</div>
+          <div class="">¥{{ item.content.price }}</div>
         </div>
         <div class="flex-center-between invoice-list-c">
           <div class="">{{ $t('personalCenter.orderNumber') }}:</div>
-          <div class="">20251024001</div>
+          <div class="">{{ item.orderNo }}</div>
         </div>
         <div class="flex-center-between invoice-list-time">
           <div class="">{{ $t('common.orderCreateTime') }}:</div>
@@ -50,6 +50,9 @@ const form = ref({
 const getList = async () => {
   let res = await invoiceList(form.value)
   console.log(res.rows)
+  res.rows.forEach(element => {
+     element.content = JSON.parse(element.content)
+  });
   list.value = res.rows || [];
   form.value.total = res.total;
 }

+ 11 - 7
src/pages/Personal/MemberDetails.vue

@@ -7,12 +7,12 @@
     <ul class="member-details-list">
       <li v-for="(item, index) in list" :key="index">
         <div class="member-details-list-t flex-center-between">
-          <div class="">{{ $t('personalCenter.goumaishichang') }}:1个月</div>
-          <div class="">¥99.99</div>
+          <div class="">{{ $t('personalCenter.goumaishichang') }}:{{ item.orderNum }}个月 {{ item.description }}</div>
+          <div class="">¥{{ item.amount }}</div>
         </div>
         <div class="member-details-list-b flex-center-between">
-          <div class="">{{ $t('personalCenter.youxiaoqi') }}:2026-01-01至2026-02-01</div>
-          <div class="">{{ $t('personalCenter.zhifushijian') }}:2026-01-01 16:11:11</div>
+          <!-- <div class="">{{ $t('personalCenter.youxiaoqi') }}:2026-01-01至2026-02-01</div> -->
+          <div class="">{{ $t('personalCenter.zhifushijian') }}:{{ item.createTime }}</div>
         </div>
       </li>
     </ul>
@@ -26,17 +26,21 @@
 <script setup lang="ts">
 import Pagination from '@/components/Pagination.vue'
 import { ref, onMounted } from 'vue'
-import { collectList } from '@/api/my.js'
+import { orderList } from '@/api/my.js'
 const form = ref({
   pageNum: 1,
   pageSize: 10,
-  total: 0
+  total: 0,
+  orderTypeMenu:2,
+  orderType:'member_recharge',
+  isAsc:'desc',
+  orderByColumn:'orderId'
 })
 
 const list = ref([])
 
 const getList = async () => {
-  let res = await collectList(form.value);
+  let res = await orderList(form.value);
   console.log(res);
   form.value.total = res.total;
   list.value = res.rows

+ 193 - 36
src/pages/Personal/Orders.vue

@@ -6,9 +6,9 @@
           <li v-for="(item, index) in list" :key="index">
             <div class="order-list-top flex-center-between">
               <div class="order-list-top-l flex-align-center">
-                <el-tag :type="index == 0 ? 'primary' : index == 1 ? 'success' : 'danger'">{{ index == 0 ?
-                  $t('personalCenter.daifukuan') : index == 1 ? $t('personalCenter.yiwancheng') :
-                    $t('personalCenter.yiquxiao') }}</el-tag>
+                <el-tag :type="item.orderStatus == 0 ? 'primary' : item.orderStatus == 1 ? 'success' : item.orderStatus == 3 ? 'danger' : ''">{{ item.orderStatus == 0 ?
+                  $t('personalCenter.daifukuan') : item.orderStatus == 1 ? $t('personalCenter.yiwancheng') : item.orderStatus == 3 ?
+                    $t('personalCenter.yiquxiao') : '' }}</el-tag>
                 <div class="">{{ $t('personalCenter.dingdanhao') }}: {{ item.orderNo }}</div>
               </div>
               <div class="order-list-top-r">{{ $t('common.orderTime') }}: {{ item.createTime }}</div>
@@ -18,47 +18,55 @@
                 src="https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png" alt="">
               <div class="order-list-con flex-center-between flex_1">
                 <div class="">
-                  <div class="title">UI界面设计教程</div>
+                  <div class="title">{{ item.orderTypeName }}</div>
                   <div class="">
                     <el-button type="primary" size="small" plain>技能标签</el-button>
                     <el-button type="primary" size="small" plain>技能标签</el-button>
                   </div>
                 </div>
                 <div class="mi_price">
-                  <div class="">29900</div>
-                  <div class="">{{ $t('common.mibi') }}</div>
+                  <div class="">{{ item.amount }}</div>
+                  <div class="">{{ item.payMethod == 'BMI' ? $t('common.baomibi') : $t('common.mibi') }}</div>
                 </div>
                 <div class="mi_price price">
-                  <div class="">¥239.20</div>
+                  <div class="">¥{{ item.discountAmount || 0 }}</div>
                   <div class="">{{ $t('common.actualAmount') }}</div>
                 </div>
-                <div class="">
-                  <template v-if="index == 0">
-                    <div class="gradient btn">
-                      <img src="/src/assets/imgs/my/order1@2x.png" alt="">
-                      <div class="">{{ $t('common.goPay') }}</div>
-                    </div>
-                    <div class="blue btn mt8">
-                      <img src="/src/assets/imgs/my/order2@2x.png" alt="">
-                      <div class="">{{ $t('common.cancelOrder') }}</div>
-                    </div>
-                  </template>
-                  <template v-else-if="index == 1">
-                    <div class="blue btn">
-                      <img src="/src/assets/imgs/my/order3@2x.png" alt="">
-                      <div class="">{{ $t('common.applyInvoice') }}</div>
-                    </div>
-                    <div class="red btn mt8">
-                      <img src="/src/assets/imgs/my/order4@2x.png" alt="">
-                      <div class="">{{ $t('common.applyRefund') }}</div>
-                    </div>
-                  </template>
-                  <template v-else-if="index == 2">
-                    <div class="btn gradient">
-                      <img src="/src/assets/imgs/my/order5@2x.png" alt="">
-                      <div class="">{{ $t('common.reorder') }}</div>
-                    </div>
+                <div class="" >
+                  <div v-if="item.invoiceStatus == 0" @click="applyInvoices(item, index)" class="blue btn">
+                    <img src="/src/assets/imgs/my/order3@2x.png" alt="">
+                    <div class="">{{ $t('common.applyInvoice') }}</div>
+                  </div>
+                  <div class="btn_kong" v-else></div>
+                  <template v-if="false">
+                    <template v-if="index == 0">
+                      <div class="gradient btn">
+                        <img src="/src/assets/imgs/my/order1@2x.png" alt="">
+                        <div class="">{{ $t('common.goPay') }}</div>
+                      </div>
+                      <div class="blue btn mt8">
+                        <img src="/src/assets/imgs/my/order2@2x.png" alt="">
+                        <div class="">{{ $t('common.cancelOrder') }}</div>
+                      </div>
+                    </template>
+                    <template v-else-if="index == 1">
+                      <div class="blue btn">
+                        <img src="/src/assets/imgs/my/order3@2x.png" alt="">
+                        <div class="">{{ $t('common.applyInvoice') }}</div>
+                      </div>
+                      <div class="red btn mt8">
+                        <img src="/src/assets/imgs/my/order4@2x.png" alt="">
+                        <div class="">{{ $t('common.applyRefund') }}</div>
+                      </div>
+                    </template>
+                    <template v-else-if="index == 2">
+                      <div class="btn gradient">
+                        <img src="/src/assets/imgs/my/order5@2x.png" alt="">
+                        <div class="">{{ $t('common.reorder') }}</div>
+                      </div>
+                    </template>
                   </template>
+
                 </div>
               </div>
             </div>
@@ -71,14 +79,84 @@
         @page-change="handlePageChange" />
     </template>
     <el-empty v-else :description="$t('common.empty')" />
+    <el-dialog v-model="dialogVisible" title="申请开票" width="784" :before-close="handleClose">
+      <div class="dialog_title">发票抬头信息</div>
+      <el-form :model="invoiceData" class="demo-form-inline" label-position="top" :rules="rules" ref="ruleFormRef">
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="抬头类型">
+              <el-radio-group v-model="invoiceData.invoiceType">
+                <el-radio value="0" size="large">个人</el-radio>
+                <el-radio value="1" size="large">企业单位</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="购方名称" prop="invoiceTitle">
+              <el-input v-model="invoiceData.invoiceTitle" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="购方税号" prop="taxNumber">
+              <el-input v-model="invoiceData.taxNumber" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="公司地址">
+              <el-input v-model="invoiceData.otherInfo.address" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="公司电话">
+              <el-input v-model="invoiceData.otherInfo.mobile" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="公司开户行">
+              <el-input v-model="invoiceData.otherInfo.bank" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="开户行账号">
+              <el-input v-model="invoiceData.otherInfo.account" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+        <el-row :gutter="16" v-if="false">
+          <el-col :span="12">
+            <el-form-item label="电子邮箱">
+              <el-input v-model="invoiceData.user" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系电话">
+              <el-input v-model="invoiceData.user" placeholder="请输入" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 <script lang="ts" setup>
-import { ref, onMounted } from 'vue'
+import { ref, onMounted, reactive } from 'vue'
 
 import type { TabsPaneContext } from 'element-plus'
 import Pagination from '@/components/Pagination.vue'
-import { orderList } from '@/api/my.js'
+import { orderList, applyInvoice } from '@/api/my.js'
 
 const tabs = ref([
   { label: 'personalCenter.allOrders', name: 'first' },
@@ -89,19 +167,89 @@ const tabs = ref([
 
 const activeName = ref('first')
 const list = ref([]);
+
+import type { FormInstance, FormRules } from 'element-plus'
+
+interface RuleForm {
+  invoiceTitle: string
+  taxNumber: string
+}
 const form = ref({
   pageNum: 1,
   pageSize: 10,
   total: 0,
-  activeName: 0
+  activeName: 0,
+  orderTypeMenu: 2
+})
+const dialogVisible = ref(false)
+const ruleFormRef = ref<FormInstance>()
+const invoiceData = ref({
+  invoiceType: '0',//发票类型(0-个人 1-企业)
+  orderNo: '',//订单号
+  orderId: null,
+  invoiceTitle: '',//发票抬头
+  taxNumber: '',//税号
+  otherInfo: {
+    address: '',
+    mobile: '',//
+    bank: '',//开户行
+    account: '',//账号
+  },
+  remark: '',//备注
+})
+
+const rules = reactive<FormRules<RuleForm>>({
+  invoiceTitle: [
+    { required: true, message: '请输入购方名称', trigger: 'blur' }
+  ],
+  taxNumber: [
+    { required: true, message: '请输入购方税号', trigger: 'blur' }
+  ],
 })
 
+const submitForm = async (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  let valid = await formEl.validate();
+  console.log(valid)
+  if (valid) {
+
+    let { invoiceType,
+      orderNo,
+      orderId,
+      invoiceTitle,
+      taxNumber, remark } = invoiceData.value
+    let res = await applyInvoice({
+      invoiceType,
+      orderNo,
+      orderId,
+      invoiceTitle,
+      taxNumber,
+      remark,
+      otherInfo: JSON.stringify(invoiceData.value.otherInfo)
+    });
+    console.log(res)
+    if (res.code === 200) {
+      getList()
+    }
+    dialogVisible.value = false;
+  }
+}
+
 const handleClick = (tab: TabsPaneContext) => {
   list.value = []
   form.value.pageNum = 1;
   form.value.activeName = tab.props.name;
   getList()
 }
+
+
+// 申请开票
+const applyInvoices = (item, index) => {
+  // await invoiceApply();
+  invoiceData.value.orderId = item.orderId;
+  dialogVisible.value = true;
+}
+
 // 获取我的订单
 const getList = async () => {
   let res = await orderList(form.value);
@@ -218,6 +366,9 @@ onMounted(() => {
             color: #FFFFFF;
           }
         }
+        .btn_kong {
+          width: 106px;
+        }
 
 
 
@@ -240,4 +391,10 @@ onMounted(() => {
     }
   }
 }
+.dialog_title {
+  color: #3D3D3D;
+  font-weight: bold;
+  font-size: 16px;
+  margin-bottom: 16px;
+}
 </style>

+ 93 - 27
src/pages/Personal/Wallet.vue

@@ -4,7 +4,7 @@
       <li class="gradient flex-center-between" v-for="(item, index) in 2" :key="index">
         <div class="wallet-list-li-left">
           <div class="">{{ index == 0 ? $t('common.mibi') : $t('common.baomibi') }}{{ $t('personalCenter.yue') }}</div>
-          <div class="">{{ index == 0 ? 12 || 0 : userInfo.baoMiBalance || 0 }}</div>
+          <div class="">{{ index == 0 ? userInfo.pointsBalance || 0 || 0 : userInfo.baoMiBalance || 0 }}</div>
         </div>
         <div class="wallet-list-li-right flex-align-center">
           <div class="flex-align-center btn" v-if="index == 1">
@@ -42,38 +42,49 @@
     </template>
     <el-empty v-else :description="$t('common.empty')" />
 
-    <el-dialog v-model="dialogVisible" title="Tips" width="784" :before-close="handleClose">
+    <el-dialog v-model="dialogVisible"
+      :title="`${transformationIndex == 0 ? $t('personalCenter.zhuanhuanbaomibi') : $t('personalCenter.zhuanghuanmibi')}`"
+      width="523" :before-close="handleClose">
       <el-form :model="walletForm" label-width="auto" label-position="top">
-        <el-row :gutter="16">
-          <el-col :span="12">
-            <el-form-item label="Activity name">
-              <el-input v-model="walletForm.name" />
+        <el-row :gutter="16" v-if="transformationIndex">
+          <el-col :span="24">
+            <el-form-item :label="$t('common.baomibi')">
+              
+              <el-input-number v-model="walletForm.orderAmt" :min="1" controls-position="right" size="large"
+                @change="handleChange" style="width: 100%;" />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="Activity name">
-              <el-input v-model="walletForm.name" />
+          <el-col :span="24">
+            <el-form-item :label="$t('common.mibi')">
+              <el-input v-model="walletForm.targetAmount" placeholder="请输入" readonly disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="手续费率">
+              <el-input v-model="walletForm.feeRate" placeholder="请输入" readonly disabled />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="16">
+        <el-row :gutter="16" v-else>
           <el-col :span="12">
-            <el-form-item label="Activity name">
-              <el-input v-model="walletForm.name" />
+            <el-form-item :label="$t('common.mibi')">
+              <el-input-number v-model="walletForm.orderAmt" :min="configTxt.configValue" :step="configTxt.configValue" controls-position="right" size="large"
+                @change="handleChange" style="width: 100%;" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="Activity name">
-              <el-input v-model="walletForm.name" />
+            <el-form-item :label="$t('common.baomibi')">
+              <el-input v-model="walletForm.targetAmount" placeholder="请输入" readonly disabled />
             </el-form-item>
           </el-col>
         </el-row>
+        <div class="">{{ configTxt.configName }}{{ configTxt.configValue }}</div>
       </el-form>
       <template #footer>
-        <div class="dialog-footer">
-          <el-button @click="dialogVisible = false">Cancel</el-button>
-          <el-button type="primary" @click="dialogVisible = false">
-            Confirm
+        <div class="dialog-footer flex-center">
+          <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
+          <el-button class="gradient" type="primary" @click="confirmTransformation">
+            {{ $t('common.confirm') }}
           </el-button>
         </div>
       </template>
@@ -88,9 +99,19 @@ import type { TabsPaneContext } from 'element-plus'
 import Pagination from '@/components/Pagination.vue'
 import { getUserInfo } from '@/api/auth'
 
-import { payConfigDearch,calRate } from '@/api/order'
+import { payConfigDearch, calRate } from '@/api/order'
+import { createOrder } from '@/api/order.js'
+
+import { useAppStore } from '@/pinia/appStore'
+
+import DGTMessage from '@/utils/message'
+
+import { useI18n } from 'vue-i18n' 
+
+const { t } = useI18n() 
+
+const appStore = useAppStore();
 
-const activeName = ref('first')
 const tabs = ref([
   { label: 'personalCenter.incomeDetails', name: 0 },
   { label: 'personalCenter.usageRecord', name: 1 }
@@ -104,22 +125,67 @@ const form = ref({
 })
 
 const walletForm = ref({
-
+  payMethod: '',
+  orderType: '',
+  productId: '',
+  orderNum: null,
+  orderAmt: 1,
+  feeRate: 0,
+  targetAmount:0
 })
+const configTxt = ref({})
 
 const userInfo = ref({})//用户信息
 
 const dialogVisible = ref(false);
+const transformationIndex = ref(0)
 
-// 米币暴米币转换
-const changeTransformation = () => {
-  calRate({
-    orderType:'exchange_mi',
-    orderNum:100
+// 确认转换
+const confirmTransformation = async () =>{
+  let res = await createOrder({
+    payMethod: walletForm.value.payMethod,
+    orderType: walletForm.value.orderType,
+    productId: '',
+    orderNum: walletForm.value.targetAmount,
+    orderAmt: walletForm.value.orderAmt
   })
+  console.log(res);
+  if (res.code === 200) {
+    if (res.data.paySuccess) {
+      dialogVisible.value = false;
+      appStore.USERINFO();
+      DGTMessage.success(`  ${ transformationIndex.value ? t('common.zhuanhuanbaomibi') : t('common.zhuanghuanmibi')}${t('common.success')}`)
+    }
+  }
+}
+
+// 米币暴米币转换
+const changeTransformation = async (index:any) => {
+  transformationIndex.value = index;
+  walletForm.value.payMethod = index ? 'BMI' : 'MI';
+  walletForm.value.orderType = index ? 'exchange_mi' : 'exchange_bmi';
+  let { data } = await payConfigDearch({ id: '03' });
+
+  let result = data.filter((item:any) => item.configCode == 'bmb_to_mb_rate')
+  if (result.length) {
+    configTxt.value = result[0]
+  }
+  walletForm.value.orderAmt = index == 0 ?  configTxt.value.configValue : 1 
+  handleChange()
   dialogVisible.value = true;
 }
 
+const handleChange = async () => {
+  let res = await calRate({
+    orderType:walletForm.value.orderType,
+    orderNum:walletForm.value.orderAmt
+  });
+  walletForm.value.feeRate = res.data.feeRate
+  walletForm.value.targetAmount = res.data.targetAmount
+  
+  console.log(res);
+}
+
 const handleClick = (tab: TabsPaneContext) => {
   list.value = []
   form.value.pageNum = 1;
@@ -139,7 +205,7 @@ const handlePageChange = (newPage: number) => {
 const getInfo = async () => {
   let res = await getUserInfo();
   userInfo.value = res.user;
-  let result = await payConfigDearch({id:'03'})
+
 }
 
 onMounted(() => {

+ 159 - 14
src/pages/PersonalCenter.vue

@@ -6,38 +6,40 @@
         <el-avatar :size="100" :src="appStore.avatarDefault" />
         <div class="personal-user-info">
           <div class="personal-username">
-            <div class="">{{ userInfo.nickName }}</div>
+            <div class="">{{ appStore.userInfo.nickName }}</div>
             <img src="/src/assets/imgs/my/vip@2x.png" alt="">
+            <!-- memberType  会员类型memberType 会员类型分为企业会员(2)和个人会员(1)、免费会员(0) -->
           </div>
-          <div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{ userInfo.userPhone }}</div>
-          <div class="gap10 mt4">
-            <el-button type="primary" size="large" plain>技能标签</el-button>
+          <div class="personal-user-phone mt4">{{ $t('personalCenter.phoneNumber') }}:{{ appStore.userInfo.userPhone }}
+          </div>
+          <div class="gap10 mt4" v-if="appStore.userInfo.skillTags">
+            <el-button type="primary" size="large" plain>{{ appStore.userInfo.skillTags }}</el-button>
           </div>
           <div class="personal-user-list">
             <div class="personal-user-li">
-              <span>0</span>
+              <span>{{ appStore.userInfo.pointsBalance }}</span>
               <span>{{ $t('common.mibi') }}</span>
             </div>
             <div class="personal-user-line"></div>
             <div class="personal-user-li">
-              <span>{{ userInfo.baoMiBalance }}</span>
+              <span>{{ appStore.userInfo.baoMiBalance }}</span>
               <span>{{ $t('common.baomibi') }}</span>
             </div>
             <div class="personal-user-line"></div>
             <div class="personal-user-li">
               <span>0</span>
-              <span>{{ $t('personalCenter.follow') }}</span>
+              <span>{{ $t('common.collect') }}</span>
             </div>
           </div>
         </div>
 
       </div>
       <div class="personal-head-right">
-        <div class="personal-head-right-li">
+        <div @click="dialogVisible = true" class="personal-head-right-li">
           <img src="/src/assets/imgs/my/bianji@2x.png" alt="">
           <div class="">{{ $t('personalCenter.editProfile') }}</div>
         </div>
-        <div @click="router.push({path:'/member'})" class="personal-head-right-li">
+        <div @click="router.push({ path: '/member' })" class="personal-head-right-li">
           <img src="/src/assets/imgs/my/huiyuan@2x.png" alt="">
           <div class="">{{ $t('personalCenter.openMembership') }}</div>
         </div>
@@ -65,20 +67,123 @@
 
       </div>
     </div>
+
+    <el-dialog v-model="dialogVisible" title="编辑资料" width="784">
+      <el-form :model="userInfo" label-width="auto" label-position="top">
+
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="上传头像">
+              <!-- 图片类型 -->
+            <FileUploader
+              ref="fileUploader"
+              accept="image/*"
+              :multiple="false"
+              :limit="1"
+              :auto-upload="true"
+              list-type="picture-card"
+              :data="{ directory: 'workflow' }"
+              buttonText=""
+              v-model="coverImage"
+              tip=""
+            />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="昵称">
+              <el-input v-model="userInfo.nickName" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系电话">
+              <el-input v-model="userInfo.userPhone" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="n8n账号">
+              <el-input v-model="userInfo.name" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="Coze账号">
+              <el-input v-model="userInfo.name" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="Dify账号">
+              <el-input v-model="userInfo.name" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="FastGpt账号">
+              <el-input v-model="userInfo.name" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="技能标签">
+              <div class="flex tags flex_1">
+                <el-tag v-for="tag in dynamicTags" :key="tag" closable @close="handleClose(tag)">
+                  {{ tag }}
+                </el-tag>
+                <el-input v-if="inputVisible" ref="InputRef" v-model="inputValue" class="w-20" size="small"
+                  @keyup.enter="handleInputConfirm" @blur="handleInputConfirm" />
+                <el-button v-else class="button-new-tag" size="small" @click="showInput">
+                  + New Tag
+                </el-button>
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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="dialogVisible = false">
+            {{ $t('common.confirm') }}
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
+
   </div>
 </template>
 <script setup lang="ts">
+
 import { useAppStore } from '@/pinia/appStore'
 
-import { ref, onMounted,computed } from 'vue';
+import { ref, onMounted, computed, nextTick } from 'vue';
+
+
+import type { InputInstance } from 'element-plus'
+
 import { useRoute, useRouter } from 'vue-router'
 
 import { getUserInfo } from '@/api/auth.js'
+
 import { checkIn } from '@/api/my.js'
 
+import DGTMessage from '@/utils/message'
+
+import { useI18n } from 'vue-i18n'
+
+import FileUploader from '@/components/FileUploader.vue'
+
+const { t } = useI18n()
+
 const appStore = useAppStore();
+
 const route = useRoute()
+
 const router = useRouter()
+
 const navList = ref([
   {
     name: 'personalCenter.myWallet',
@@ -123,7 +228,10 @@ const navList = ref([
     iconActive: '/src/assets/imgs/my/icon7a@2x.png'
   }
 ])
-const navIndex = computed(()=>{
+
+const dialogVisible = ref(false)
+
+const navIndex = computed(() => {
   switch (route.name) {
     case 'Wallet':
       return 0
@@ -143,7 +251,7 @@ const navIndex = computed(()=>{
     case 'Orders':
       return 4
       break;
-     case 'Invoice':
+    case 'Invoice':
       return 5
       break;
     case 'Workflow':
@@ -157,6 +265,8 @@ const navIndex = computed(()=>{
 
 const userInfo = ref({})//用户信息
 
+const images = ref([]);
+
 const toPath = (item: any, index: number) => {
   if (item.path) {
     router.push(item.path);
@@ -165,14 +275,45 @@ const toPath = (item: any, index: number) => {
 // 签到
 const signIn = async () => {
   let res = await checkIn({ actionType: 1 });
-  console.log(res);
+  if (res.code === 200) {
+    appStore.USERINFO();
+    DGTMessage.success(`${t('common.checkIn')}${t('common.success')}`)
+  }
 }
 // 获取用户信息
 const getInfo = async () => {
   let res = await getUserInfo();
   userInfo.value = res.user;
-  console.log(res.user);
 }
+
+
+const inputValue = ref('')
+
+const dynamicTags = ref([])
+
+const inputVisible = ref(false)
+
+const InputRef = ref<InputInstance>()
+
+const handleClose = (tag: string) => {
+  dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1)
+}
+
+const showInput = () => {
+  inputVisible.value = true
+  nextTick(() => {
+    InputRef.value!.input!.focus()
+  })
+}
+
+const handleInputConfirm = () => {
+  if (inputValue.value) {
+    dynamicTags.value.push(inputValue.value)
+  }
+  inputVisible.value = false
+  inputValue.value = ''
+}
+
 onMounted(() => {
   getInfo()
 })
@@ -358,4 +499,8 @@ div {
     }
   }
 }
+.tags {
+  flex-wrap: wrap;
+  gap: 16px;
+}
 </style>