yinxiangke пре 1 месец
родитељ
комит
034b7db334

+ 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 = {}) {

+ 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;
 }
 

+ 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

+ 133 - 28
src/pages/Personal/Orders.vue

@@ -32,33 +32,40 @@
                   <div class="">¥239.20</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="" v-if="item.invoiceStatus == 0">
+                  <div @click="applyInvoices(item, index)" class="blue btn">
+                    <img src="/src/assets/imgs/my/order3@2x.png" alt="">
+                    <div class="">{{ $t('common.applyInvoice') }}</div>
+                  </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,6 +78,78 @@
         @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="">发票抬头信息</div>
+      <el-form :model="invoiceData" class="demo-form-inline" label-position="top">
+        <el-row :gutter="16">
+          <el-col :span="12">
+            <el-form-item label="抬头类型">
+              <el-radio-group v-model="radio1">
+                <el-radio value="1" size="large">企业单位</el-radio>
+                <el-radio value="2" size="large">个人</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="购方名称">
+              <el-input v-model="invoiceData.user" placeholder="Approved by" 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.user" placeholder="Approved by" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="公司地址">
+              <el-input v-model="invoiceData.user" placeholder="Approved by" 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.user" placeholder="Approved by" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="公司开户行">
+              <el-input v-model="invoiceData.user" placeholder="Approved by" 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.user" placeholder="Approved by" 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.user" placeholder="Approved by" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系电话">
+              <el-input v-model="invoiceData.user" placeholder="Approved by" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="dialogVisible = false">Cancel</el-button>
+          <el-button type="primary" @click="dialogVisible = false">
+            Confirm
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 <script lang="ts" setup>
@@ -78,7 +157,7 @@ import { ref, onMounted } 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' },
@@ -93,7 +172,24 @@ const form = ref({
   pageNum: 1,
   pageSize: 10,
   total: 0,
-  activeName: 0
+  activeName: 0,
+  orderTypeMenu: 2
+})
+const dialogVisible = ref(false)
+const invoiceData = ref({
+  invoiceType: '1',//发票类型(0-个人 1-企业)
+  orderNo: '',//订单号
+  orderId: null,
+  invoiceTitle: '',//发票抬头
+  taxNumber: '',//税号
+  otherInfo: {
+    address: '',
+    mobile: '',//
+    bank: '',//开户行
+    account: '',//账号
+
+  },
+  remark: '',//备注
 })
 
 const handleClick = (tab: TabsPaneContext) => {
@@ -102,6 +198,15 @@ const handleClick = (tab: TabsPaneContext) => {
   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);

+ 84 - 24
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,37 +42,48 @@
     </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="784" :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="8">
+            <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="8">
+            <el-form-item :label="$t('common.mibi')">
+              <el-input v-model="walletForm.targetAmount" placeholder="请输入" readonly disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <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">
+          <el-button type="primary" @click="confirmTransformation">
             Confirm
           </el-button>
         </div>
@@ -88,9 +99,14 @@ 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 DGTMessage from '@/utils/message'
+
+import { useI18n } from 'vue-i18n' 
+const { t } = useI18n() 
 
-const activeName = ref('first')
 const tabs = ref([
   { label: 'personalCenter.incomeDetails', name: 0 },
   { label: 'personalCenter.usageRecord', name: 1 }
@@ -104,22 +120,66 @@ 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;
+      getInfo()
+    }
+  }
+}
+
+// 米币暴米币转换
+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 +199,7 @@ const handlePageChange = (newPage: number) => {
 const getInfo = async () => {
   let res = await getUserInfo();
   userInfo.value = res.user;
-  let result = await payConfigDearch({id:'03'})
+
 }
 
 onMounted(() => {

+ 5 - 4
src/pages/PersonalCenter.vue

@@ -8,14 +8,15 @@
           <div class="personal-username">
             <div class="">{{ 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="gap10 mt4" v-if="userInfo.skillTags">
+            <el-button type="primary" size="large" plain>{{ userInfo.skillTags }}</el-button>
           </div>
           <div class="personal-user-list">
             <div class="personal-user-li">
-              <span>0</span>
+              <span>{{ userInfo.pointsBalance }}</span>
               <span>{{ $t('common.mibi') }}</span>
             </div>
             <div class="personal-user-line"></div>
@@ -26,7 +27,7 @@
             <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>