yinxiangke il y a 4 semaines
Parent
commit
d0927432cd

BIN
src/assets/imgs/my/A@2x.png


BIN
src/assets/imgs/my/Q@2x.png


+ 1 - 0
src/locales/en.js

@@ -291,6 +291,7 @@ export default {
     fenpeimibi:'Assign MiBi',
     qsryfpdmbsl:'Please Enter The Employee\'s MiBi Quantity',
     lookVoucher:'View Voucher',
+    kfpmbsl:'Allocatable rice coins',
   },
   orderConfirm:{
     personalPay:'Personal Payment',

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

@@ -281,7 +281,7 @@ export default {
     fenpei:'分配',
     fenpeichenggong:'分配成功',
     wodeyuangong:'我的员工',
-    qsryssdygsjh: '请输入要搜索的员工手机号',
+    qsryssdygsjh: '请输入要搜索的员工手机号或者邮箱号',
     bumenguanli:'部门管理',
     tianjiayuangong:'添加员工',
     yuangong:'员工',
@@ -294,7 +294,8 @@ export default {
     mbsl:'米币数量',
     fenpeimibi:'分配米币',
     qsryfpdmbsl:'请输入要分配的米币数量',
-    lookVoucher:'查看凭证'
+    lookVoucher:'查看凭证',
+    kfpmb:'可分配米币',
   },
   orderConfirm:{
     personalPay:'个人支付',

+ 26 - 13
src/pages/Member.vue

@@ -30,10 +30,10 @@
           payMethod: 'BMI'
         })">开通{{ item.typeName }}</div>
         <div class="line">尊享权益</div>
-        <div class="ul" v-if="item.privilege?.length">
-          <div v-for="(em, ind) in item.privilege" :key="ind" class="li flex-center-between">
+        <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 }}{{ em.unit }}</div>
+            <div class="">{{ em.privilegeValue == -1 ? '无限' : `${em.privilegeValue}${em.unit ? em.unit : ''}`  }}</div>
           </div>
         </div>
       </li>
@@ -63,15 +63,26 @@ const appStore = useAppStore()
 
 const router = useRouter()
 
-const list = ref([])
+const list = ref([]);
+const privilegeRes = ref({ 1: [], 2: [] })
+
+const getprivilegeRes = async (memberType) => {
+  let privilegeRes = await privilege(memberType);
+  return privilegeRes.data;
+}
 
 const getList = async () => {
+  
+  let privilegeRes1 = await privilege(1);
+  let privilegeRes2 = await privilege(2);
+  for (const key in privilegeRes.value) {
+    if (key == 1) {
+      privilegeRes.value[key] = privilegeRes1.data;
+    } else {
+      privilegeRes.value[key] = privilegeRes2.data;
+    }
+  }
   let res = await vipList();
-  res.data.map(async element => {
-    let privilegeRes = await privilege(element.memberType);
-    element.privilege = privilegeRes.data;
-  });
-  console.log(res.data)
   list.value = res.data;
 }
 
@@ -81,10 +92,12 @@ onMounted(() => {
 
 </script>
 <style lang="scss">
-  ul,li {
-    margin: 0;
-    padding: 0;
-  }
+ul,
+li {
+  margin: 0;
+  padding: 0;
+}
+
 .member {
   max-width: 1246px;
   margin: 0 auto;

+ 53 - 42
src/pages/Personal/BusinessManagement.vue

@@ -32,7 +32,7 @@
       <div class="flex-center-between businessManagement-right-search">
         <div class="flex-align-center businessManagement-right-search-left">
           <img src="/src/assets/imgs/my/search@2x.png" alt="">
-          <input @input="changePhone" type="text" :placeholder="`${$t('personalCenter.qsryssdygsjh')}`" maxlength="11"
+          <input @input="changePhone" type="text" :placeholder="`${$t('personalCenter.qsryssdygsjh')}`"
             v-model="form.userPhone">
         </div>
         <div class="flex-align-center businessManagement-right-search-right">
@@ -42,13 +42,13 @@
           </div>
         </div>
       </div>
-      <ul class="list">
-        <li v-for="(item, index) in list" :key="index">
+      <div class="list">
+        <div v-for="(item, index) in list" :key="index" class="li">
           <div class="list_left">
             <el-avatar :size="52" :src="item.userAvatar" />
             <div class="list_left_con">
               <div class="">{{ item.nickName }}</div>
-              <div class="">{{ $t('common.mibi') }}:{{ item.points || 0 }}</div>
+              <div class="">{{ item.userPhone || 0 }}</div>
             </div>
           </div>
           <div class="list_right">
@@ -61,8 +61,8 @@
               <span>{{ $t('common.delete') }}</span>
             </div>
           </div>
-        </li>
-      </ul>
+        </div>
+      </div>
       <template v-if="list.length">
         <Pagination :total="form.total" :page-size="form.pageSize" :current-page="form.pageNum"
           @page-change="handlePageChange" />
@@ -71,7 +71,7 @@
     </div>
 
     <el-dialog v-model="dialogVisible" :title="$t(`${title}`)" width="600">
-      <el-form :model="formInline" :rules="rules" label-width="110px" ref="ruleFormRef">
+      <el-form :model="formInline" :rules="rules" label-width="auto" ref="ruleFormRef">
         <template v-if="title == 'personalCenter.tianjiayuangong'">
           <el-row :gutter="0">
             <el-col :span="24">
@@ -96,15 +96,16 @@
         <template v-else-if="title == 'personalCenter.fenpeimibi'">
           <el-row :gutter="0">
             <el-col :span="24">
-              <el-form-item :label="$t('common.mibi')">
-                <el-input v-model="formInline.number" :placeholder="$t('common.placeholderInput')" />
+              <el-form-item :label="$t('personalCenter.kfpmb')">
+                <el-input v-model="formInline.number" :placeholder="$t('common.placeholderInput')" disabled />
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="0">
             <el-col :span="24">
               <el-form-item :label="$t('personalCenter.mbsl')" prop="points">
-                <el-input v-model="formInline.points" :placeholder="$t('common.placeholderInput')" />
+                <el-input v-model="formInline.points" :placeholder="$t('common.placeholderInput')" type="number"
+                  :min="1" :max="formInline.number" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -117,12 +118,9 @@
           </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 @click="resetForm">{{ $t('common.cancel') }}</el-button>
           <el-button type="primary" @click="confirmSubAccount(ruleFormRef)">{{ $t('common.confirm') }}</el-button>
         </div>
       </template>
@@ -144,6 +142,10 @@ import { useI18n } from 'vue-i18n'
 
 const { t } = useI18n()
 
+import { useAppStore } from '@/pinia/appStore'
+
+const appStore = useAppStore();
+
 const list = ref([]);
 
 const dataSource = ref([])
@@ -171,8 +173,9 @@ const formInline = ref({
   deptId: '',
   userPhone: '',
   deptName: '',
-  number: 0,
-  points: 0
+  userId: null,
+  points: null,
+  number: 0
 })
 
 const options = ref([])
@@ -195,19 +198,11 @@ const changeEmployee = async (item, index, type) => {
     let res = await getAvailablePoints();
     if (res.code === 200) {
       if (res.data.points) {
+        formInline.value.number = res.data.points;
+        formInline.value.userId = item.userId;
         changeDialogVisible('personalCenter.fenpeimibi');
       }
     }
-
-    console.log(res.data.points)
-    // let result = await allocatePoints({
-    //   points: 1,
-    //   userId: item.userId
-    // })
-    // if (result.code === 200) {
-    //   DGTMessage.success(t('personalCenter.fenpeichenggong'));
-    //   getemployeeList();
-    // }
   } else if (type == 2) {
     let res = await deleteSubAccount(item.userId)
     if (res.code == 200) {
@@ -225,6 +220,9 @@ const confirmSubAccount = async (formEl) => {
       let api = title.value == 'personalCenter.tianjiayuangong' ? addSubAccount(formInline.value) : title.value == 'personalCenter.tianjiabumen' ? applyDept({
         deptName: formInline.value.deptName,
         parentId: formInline.value.deptId
+      }) : title.value == 'personalCenter.fenpeimibi' ? allocatePoints({
+        userId: formInline.value.userId,
+        points: formInline.value.points
       }) : uploadDept({
         deptName: formInline.value.deptName,
         deptId: formInline.value.deptId
@@ -233,13 +231,8 @@ const confirmSubAccount = async (formEl) => {
       if (res.code === 200) {
         DGTMessage.success(`${t('common.success')}`)
         title.value == 'personalCenter.tianjiayuangong' ? getemployeeList() : getList();
+        resetForm()
 
-        dialogVisible.value = false;
-        setTimeout(() => {
-          formInline.value.deptId = null;
-          formInline.value.deptName = '';
-          formInline.value.parentId = null;
-        }, 500)
       }
 
     }
@@ -247,9 +240,19 @@ const confirmSubAccount = async (formEl) => {
 
 }
 
+const resetForm = () => {
+  dialogVisible.value = false;
+  setTimeout(() => {
+    formInline.value.deptId = null;
+    formInline.value.deptName = '';
+    formInline.value.parentId = null;
+    formInline.value.points = null;
+  }, 500)
+}
+
 // 搜索员工
 const remoteMethod = async (query: string) => {
-  if (query && query.length == 11) {
+  if (query && query.length == 11 || isValidEmail(query)) {
     let res = await selectUserByPhone({
       userPhone: query
     });
@@ -259,10 +262,24 @@ const remoteMethod = async (query: string) => {
   }
 }
 
+const isValidEmail = (email) => {
+  // 核心正则表达式,兼顾常见邮箱格式规范
+  const emailReg = /^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.[a-zA-Z]{2,}$/;
+
+  // 先判断是否为字符串,避免非字符串类型传入导致错误
+  if (typeof email !== 'string') {
+    return false;
+  }
+
+  // 去除首尾空格后验证
+  return emailReg.test(email.trim());
+}
+
 const changePhone = (e) => {
-  if (e.target.value.length == 11 || e.target.value.length == 0) {
-    getemployeeList();
+  if (e.target.value.length == 11 || e.target.value.length == 0 || isValidEmail(e.target.value)) {
+   
   }
+   getemployeeList();
 }
 
 const handlePageChange = (pageNum) => {
@@ -328,12 +345,6 @@ onMounted(() => {
 })
 </script>
 <style lang="scss" scoped>
-ul,
-li {
-  margin: 0;
-  padding: 0;
-}
-
 .businessManagement {
   padding: 16px 0;
   display: flex;
@@ -452,7 +463,7 @@ li {
   justify-content: space-between;
   gap: 16px;
 
-  li {
+  .li {
     width: 420px;
     padding: 16px;
     display: flex;

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

@@ -49,7 +49,9 @@ const router = useRouter()
 const form = ref({
   pageNum: 1,
   pageSize: 10,
-  total: 0
+  total: 0,
+  orderByColumn: 'create_time',
+  isAsc: 'desc'
 })
 
 const list = ref([])

+ 24 - 15
src/pages/Personal/Demand.vue

@@ -3,7 +3,7 @@
     <el-tabs v-model="form.activeName" class="demo-tabs" @tab-click="handleClick">
       <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="$t(tab.label)" :name="tab.name">
         <div class="demand-list">
-          <div v-for="(item, index) in list" :key="index" @click="toDetail(item)" class="li">
+          <div v-for="(item, index) in list" :key="index" @click.stop="toDetail(item)" class="li">
             <div class="flex-center-between">
               <div class="flex-align-center">
                 <div v-if="form.activeName == 1" class="tag"
@@ -40,28 +40,28 @@
               </div>
               <div class="info-right flex-align-center">
                 <template v-if="form.activeName === 0">
-                  <div class="btn" @click="changeItem(item, index, 0)">
+                  <div class="btn" @click.stop="changeItem(item, index, 0)">
                     <img src="/src/assets/imgs/my/jilu@2x.png" alt="">
                     <div>{{ $t('personalCenter.viewSignUpRecord') }}</div>
                   </div>
                   <template v-if="item.applyStatus == 1">
-                    <div class="btn" @click="changeItem(item, index, 1)">
+                    <div class="btn" @click.stop="changeItem(item, index, 1)">
                       <img src="/src/assets/imgs/my/bianji@2x.png" alt="">
                       <div>{{ $t('common.edit') }}</div>
                     </div>
-                    <div class="btn" @click="changeItem(item, index, 2)">
+                    <div class="btn" @click.stop="changeItem(item, index, 2)">
                       <img src="/src/assets/imgs/my/guanbi@2x.png" alt="">
                       <div class="red">{{ $t('personalCenter.endActivity') }}</div>
                     </div>
                   </template>
 
-                  <div class="btn" @click="changeItem(item, index, 3)">
+                  <div class="btn" @click.stop="changeItem(item, index, 3)">
                     <img src="/src/assets/imgs/my/shanchu@2x.png" alt="">
                     <div class="red">{{ $t('common.delete') }}</div>
                   </div>
                 </template>
 
-                <div class="btn" v-else @click="changeItem(item, index, 4)">
+                <div class="btn" v-else @click.stop="changeItem(item, index, 4)">
                   <img src="/src/assets/imgs/my/quxiao@2x.png" alt="">
                   <div class="red">{{ $t('personalCenter.cancelSignUp') }}</div>
                 </div>
@@ -123,11 +123,11 @@
             <div class="detail-list-number">{{ $t('personalCenter.gongzuoliuliang') }}:{{ item.publishCount }}</div>
             <div class="flex-align-center detail-list-right">
               <template v-if="item.applyStatus == 0">
-                <div @click="changeDemand(item, index, 1)" class="lex-align-center btn green">
+                <div @click.stop="changeDemand(item, index, 1)" class="lex-align-center btn green">
                   <img src="/src/assets/imgs/my/dui@2x.png" alt="">
                   <div class="">{{ $t('common.agree') }}</div>
                 </div>
-                <div @click="changeDemand(item, index, 2)" class="lex-align-center btn red">
+                <div @click.stop="changeDemand(item, index, 2)" class="lex-align-center btn red">
                   <img src="/src/assets/imgs/my/quxiao@2x.png" alt="">
                   <div class="">{{ $t('common.reject') }}</div>
                 </div>
@@ -189,7 +189,9 @@ const form = ref({
   pageNum: 1,
   pageSize: 10,
   total: 0,
-  activeName: 0
+  activeName: 0,
+  orderByColumn: 'create_time',
+  isAsc: 'desc'
 })
 
 const itemData = ref({})
@@ -290,12 +292,18 @@ const changeItem = async (item, index, type) => {
 }
 
 const toDetail = (item) => {
-  router.push({
-    path: `/workflow-trade/workflow-trade-detail`,
-    query: {
-      id: null
-    }
-  })
+  if (item.title) {
+    router.push({
+      path: `/workflow-trade/workflow-trade-detail`,
+      query: {
+        questId: item.questId,
+        metaTitle: item.title
+      }
+    })
+  } else {
+    DGTMessage.warning('该信息已被删除,无法查看详情')
+  }
+
 }
 
 const handleClick = (tab: TabsPaneContext) => {
@@ -336,6 +344,7 @@ onMounted(() => {
   .demand-list {
     .li {
       padding: 16px;
+      cursor: pointer;
       margin-bottom: 16px;
       background: #F5F7FA;
       border-radius: 16px;

+ 0 - 1
src/pages/Personal/MemberDetails.vue

@@ -41,7 +41,6 @@ const list = ref([])
 
 const getList = async () => {
   let res = await orderList(form.value);
-  console.log(res);
   form.value.total = res.total;
   list.value = res.rows
 }

+ 2 - 18
src/pages/Personal/Orders.vue

@@ -179,12 +179,7 @@
       </template>
     </el-dialog>
 
-    <el-image-viewer
-        v-if="showPreview"
-        :url-list="srcList"
-        show-progress
-        @close="showPreview = false"
-      />
+    <el-image-viewer v-if="showPreview" :url-list="srcList" show-progress @close="showPreview = false" />
   </div>
 </template>
 <script lang="ts" setup>
@@ -298,19 +293,8 @@ const imageRef = ref()
 const showPreview = ref(false)
 const srcList = ref([])
 const pay = async (item, index) => {
-  srcList.value = [item.orderImage]
+  srcList.value = [item.transferProof]
   showPreview.value = true;
-  // confirmBuy({
-  //   callback: getList,
-  //   appStore,
-  //   router,
-  //   type: 'baoMiBalance',
-  //   price: item.amount,
-  //   t,
-  //   productId: item.orderId,
-  //   orderType: item.orderType,
-  //   payMethod: item.payMethod
-  // })
 }
 
 // 申请开票

+ 113 - 61
src/pages/Personal/Wallet.vue

@@ -4,7 +4,8 @@
       <div class="gradient flex-center-between li" 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 ? userInfo?.pointsBalance || 0 || 0 : userInfo?.baoMiBalance || 0 }}</div>
+          <div class="">{{ index == 0 ? appStore?.userInfo?.pointsBalance || 0 || 0 : appStore?.userInfo?.baoMiBalance
+            || 0 }}</div>
         </div>
         <div class="wallet-list-li-right flex-align-center">
           <div @click="show = true" class="flex-align-center btn" v-if="index == 1">
@@ -32,13 +33,18 @@
             <div class="lis" v-for="(item, index) in list" :key="index">
               <div class="flex-center-between">
                 <div class="">{{ item.applyStatus == 0 ? '待审核' : item.applyStatus == 1 ? '已通过' : '未通过' }}</div>
-                <div class="">¥{{ item.applyAmount }}</div>
+                <div class="price">¥{{ item.applyAmount }}</div>
               </div>
-              
+
               <div class="flex-center-between">
                 <div class="">订单号:{{ item.applyNo }}</div>
                 <div class="">手续费:{{ item.feeAmount }}</div>
               </div>
+              <div class="flex-center-between">
+                <div class="">提现方式:{{ item.settleType == 'alipay' ? '支付宝' : item.settleType == 'wechat' ? '微信' : '银行卡'
+                  }}</div>
+                <div class="">提现账号:{{ item.receiveAccount }}</div>
+              </div>
               <div class="">申请时间:{{ item.createTime }}</div>
             </div>
           </div>
@@ -67,20 +73,22 @@
     <el-dialog v-model="dialogVisible"
       :title="`${transformationIndex == 0 ? $t('personalCenter.zhuanhuanbaomibi') : $t('personalCenter.zhuanghuanmibi')}`"
       width="523">
-      <el-form :model="walletForm" label-width="auto" label-position="top">
+      <el-form :model="walletForm" label-width="auto" label-position="top" :rules="rules" ref="ruleFormRefs">
         <el-row>
           <el-col :span="24">
             <div class="input">
-              <el-form-item :label="$t('common.use') + $t('common.baomibi')" v-if="transformationIndex">
-                <el-input-number v-model="walletForm.orderAmt" :min="1" controls-position="right" size="large"
-                  @change="handleChange" style="width: 100%;" placeholder="请输入" align="left"
-                  :input-style="{ fontSize: '28px' }" class="inputStyle" />
+              <el-form-item :label="$t('common.use') + $t('common.baomibi')" v-if="transformationIndex" prop="orderAmt">
+                <el-input-number v-model="walletForm.orderAmt" :min="1" :max="appStore?.userInfo?.baoMiBalance"
+                  controls-position="right" size="large" @change="handleChange" style="width: 100%;"
+                  :placeholder="$t('common.placeholderInput')" align="left" :input-style="{ fontSize: '28px' }"
+                  class="inputStyle" />
               </el-form-item>
 
-              <el-form-item :label="$t('common.use') + $t('common.mibi')" v-else>
-                <el-input-number v-model="walletForm.orderAmt" :min="configTxt.configValue"
-                  :step="configTxt.configValue" controls-position="right" size="large" @change="handleChange"
-                  style="width: 100%;" placeholder="请输入" align="left" :input-style="{ fontSize: '28px' }"
+              <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)"
+                  :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' }"
                   class="inputStyle" />
               </el-form-item>
             </div>
@@ -94,12 +102,12 @@
             <div class="input">
               <el-form-item v-if="transformationIndex"
                 :label="$t('common.available') + $t('common.mibi') + `(手续费率:${walletForm.feeRate})`">
-                <el-input v-model="walletForm.targetAmount" placeholder="请输入" readonly disabled
-                  :input-style="{ fontSize: '28px' }" class="inputStyle" />
+                <el-input v-model="walletForm.targetAmount" :placeholder="$t('common.placeholderInput')" readonly
+                  disabled :input-style="{ fontSize: '28px' }" class="inputStyle" />
               </el-form-item>
               <el-form-item v-else :label="$t('common.available') + $t('common.baomibi')">
-                <el-input v-model="walletForm.targetAmount" placeholder="请输入" readonly disabled
-                  :input-style="{ fontSize: '28px' }" class="inputStyle" />
+                <el-input v-model="walletForm.targetAmount" :placeholder="$t('common.placeholderInput')" readonly
+                  disabled :input-style="{ fontSize: '28px' }" class="inputStyle" />
               </el-form-item>
             </div>
           </el-col>
@@ -111,18 +119,19 @@
       <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="confirmTransformation">
+          <el-button class="gradient" type="primary" @click="confirmTransformation(ruleFormRefs)">
             {{ $t('common.confirm') }}
           </el-button>
         </div>
       </template>
     </el-dialog>
-    <el-dialog v-model="show" title="提现申请" width="500">
+    <el-dialog v-model="show" :title="$t('personalCenter.shenqingtixian')" width="500">
       <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
         <el-row>
           <el-col :span="24">
             <el-form-item label="提现金额" prop="applyAmount">
-              <el-input v-model="ruleForm.applyAmount" :placeholder="$t('common.placeholderInput')" />
+              <el-input type="number" :min="1" :max="appStore?.userInfo?.baoMiBalance" v-model="ruleForm.applyAmount"
+                :placeholder="$t('common.placeholderInput')" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -139,7 +148,7 @@
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="名" prop="withdrawPerson">
+            <el-form-item label="名" prop="withdrawPerson">
               <el-input v-model="ruleForm.withdrawPerson" :placeholder="$t('common.placeholderInput')" />
             </el-form-item>
           </el-col>
@@ -200,6 +209,8 @@ const form = ref({
   total: 0,
   balanceType: 1,//1-米币 2-暴米币
   changeType: 1,//1-增加 2-减少
+  orderByColumn: 'create_time',
+  isAsc: 'desc'
 })
 
 const walletForm = ref({
@@ -211,6 +222,9 @@ const walletForm = ref({
   feeRate: 0,
   targetAmount: 0
 })
+
+const ruleFormRef = ref()
+
 const configTxt = ref({})
 
 const userInfo = ref({})//用户信息
@@ -228,23 +242,49 @@ const ruleForm = ref({
   receiveAccount: ""
 })
 
-const ruleFormRef = ref()
+const ruleFormRefs = ref()
+
+const validatePass = (rule: any, value: any, callback: any) => {
+  if (!value) {
+    callback(new Error(t('common.placeholderInput')))
+  } else if (Number(value) % Number(configTxt.value.configValue) !== 0 && transformationIndex.value == 0) {
+    callback(new Error(`米币数量必须为${configTxt.value.configValue}的整倍数`))
+  } else {
+    callback()
+  }
+}
+
+const validatePass1 = (rule: any, value: any, callback: any) => {
+  if (!value) {
+    callback(new Error(t('common.placeholderInput')))
+    return
+  } else if (Number(value) > appStore.userInfo.baoMiBalance) {
+    callback(new Error(`余额不足`))
+  } else {
+    callback()
+  }
+}
+
 const rules = ref({
   applyAmount: [
-    { required: true, message: 'Please input Activity name', trigger: 'blur' }
+    { required: true, validator: validatePass1, trigger: 'blur' }
   ],
   settleType: [
-    { required: true, message: 'Please input Activity name', trigger: 'blur' }
+    { required: true, message: t('common.qingxuanze'), trigger: 'blur' }
   ],
   withdrawPerson: [
-    { required: true, message: 'Please input Activity name', trigger: 'blur' }
+    { required: true, message: t('common.placeholderInput'), trigger: 'blur' }
   ],
   receiveAccount: [
-    { required: true, message: 'Please input Activity name', trigger: 'blur' }
+    { required: true, message: t('common.placeholderInput'), trigger: 'blur' }
+  ],
+  orderAmt: [
+    { required: true, trigger: 'blur', validator: validatePass },
   ],
 })
 
 const submitForm = async (formEl) => {
+  console.log(formEl)
   if (!formEl) return
   await formEl.validate(async (valid, fields) => {
     if (valid) {
@@ -252,31 +292,37 @@ const submitForm = async (formEl) => {
       if (res.code === 200) {
         show.value = false;
         appStore.USERINFO();
+        getList()
         DGTMessage.success(t('common.success'));
       }
-    } else {
-      console.log('error submit!', fields)
     }
   })
 }
 
 // 确认转换
-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 confirmTransformation = async (formEl) => {
+
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      let res = await createOrder({
+        payMethod: walletForm.value.payMethod,
+        orderType: walletForm.value.orderType,
+        productId: '',
+        orderNum: walletForm.value.targetAmount,
+        orderAmt: walletForm.value.orderAmt
+      })
+      if (res.code === 200) {
+        if (res.data.paySuccess) {
+          dialogVisible.value = false;
+          appStore.USERINFO();
+          DGTMessage.success(`${transformationIndex.value ? t('personalCenter.zhuanhuanbaomibi') : t('personalCenter.zhuanghuanmibi')}${t('common.success')}`)
+        }
+      }
     }
-  }
+  })
+
+
 }
 
 // 米币暴米币转换
@@ -290,20 +336,24 @@ const changeTransformation = async (index: any) => {
   if (result.length) {
     configTxt.value = result[0]
   }
-  walletForm.value.orderAmt = index == 0 ? configTxt.value.configValue : 1
+  walletForm.value.orderAmt = index == 0 ? Number(configTxt.value.configValue) : 1
   handleChange()
   dialogVisible.value = true;
 }
 
 const handleChange = async () => {
-  let res = await calRate({
-    orderType: walletForm.value.orderType,
-    orderNum: walletForm.value.orderAmt
-  });
-  if (res.code === 200) {
-    walletForm.value.feeRate = res.data.feeRate
-    walletForm.value.targetAmount = res.data.targetAmount
+  if (walletForm.value.orderAmt) {
+    if (transformationIndex.value == 0 && Number(walletForm.value.orderAmt) % Number(configTxt.value.configValue) !== 0) return
+    let res = await calRate({
+      orderType: walletForm.value.orderType,
+      orderNum: walletForm.value.orderAmt
+    });
+    if (res.code === 200) {
+      walletForm.value.feeRate = res.data.feeRate
+      walletForm.value.targetAmount = res.data.targetAmount
+    }
   }
+
 }
 // 米币暴米币切换
 const changeType = (index) => {
@@ -333,7 +383,6 @@ const handlePageChange = (newPage: number) => {
 const getInfo = async () => {
   let res = await getUserInfo();
   userInfo.value = res.user;
-
 }
 
 onMounted(() => {
@@ -444,16 +493,19 @@ onMounted(() => {
       }
     }
 
-    .price {
-      font-size: 16px;
-      font-weight: bold;
-      color: #F52929;
-    }
 
-    .green {
-      color: #1FB362;
-    }
   }
+
+  .price {
+    font-size: 16px;
+    font-weight: bold;
+    color: #F52929;
+  }
+
+  .green {
+    color: #1FB362;
+  }
+
   .lis {
     padding: 16px;
     border-radius: 16px;
@@ -491,7 +543,7 @@ onMounted(() => {
 
   :deep(.el-input__wrapper) {
     background-color: transparent;
-    box-shadow: none;
+    box-shadow: none !important;
     padding: 0;
   }
 
@@ -500,7 +552,7 @@ onMounted(() => {
   }
 
   :deep(.el-input-number__increase),
-  :deep(.el-input-number__decrease)  {
+  :deep(.el-input-number__decrease) {
     display: none;
   }
 }

+ 18 - 12
src/pages/Personal/Workflow.vue

@@ -76,15 +76,20 @@ const form = ref({
   categoryId1: null,
   categoryId2: null,
   categoryId3: null,
-  workflowTitle: ''
+  workflowTitle: '',
+  orderByColumn: 'create_time',
+  isAsc: 'desc',
+  pageNum: 1,
+  pageSize: 10,
+  total: 0,
 })
 
 // 去工作流详情
-const toDetail = (item:any) =>{
+const toDetail = (item: any) => {
   router.push({
     path: '/workflow-detail',
     query: {
-      publishId:item.publishId,
+      publishId: item.publishId,
       metaTitle: 'route.WorkflowDetail'
     }
   })
@@ -94,9 +99,9 @@ const toDetail = (item:any) =>{
 const changeItem = async (item: any, index: any, type: any) => {
   if (type == 0) {
     router.push({
-      path:'/workflow-add',
-      query:{
-        id:item.publishId
+      path: '/workflow-add',
+      query: {
+        id: item.publishId
       }
     })
   } else if (type == 1) {
@@ -112,7 +117,7 @@ const changeItem = async (item: any, index: any, type: any) => {
       .then(async () => {
         let res = await delectPublish(item.publishId);
         if (res.code === 200) {
-           DGTMessage.success(`${t('common.delete')} ${t('common.success')}`)
+          DGTMessage.success(`${t('common.delete')} ${t('common.success')}`)
           getList()
         }
       })
@@ -124,7 +129,6 @@ const changeItem = async (item: any, index: any, type: any) => {
 
 const getList = async () => {
   let res = await userPublishList(form.value);
-  console.log(res);
   form.value.total = res.total;
   list.value = res.rows
 }
@@ -139,10 +143,12 @@ onMounted(() => {
 
 </script>
 <style scoped lang="scss">
-  ul,li {
-    margin: 0;
-    padding: 0;
-  }
+ul,
+li {
+  margin: 0;
+  padding: 0;
+}
+
 .workflow {
   padding: 16px 0 20px;
 

+ 74 - 17
src/pages/PersonalCenter.vue

@@ -65,7 +65,7 @@
 
 
             <!-- <div class="personal-user-line"></div> -->
-            
+
           </div>
           <div class="personal-user-list">
             <div class="personal-user-li">
@@ -109,7 +109,7 @@
       <el-tabs v-model="activeName" @tab-click="handleClick">
         <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="`${$t(tab.label)}`" :name="tab.name">
           <template v-if="activeName == 0">
-            <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="160px">
+            <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('common.qingxuanze')}`"
                   style="width: 100%">
@@ -121,15 +121,25 @@
                 <el-input v-model="ruleForm.issueTitle" :placeholder="`${$t('common.placeholderInput')}`" />
               </el-form-item>
               <el-form-item :label="`${$t('personalCenter.gongdanneirong')}`" prop="issueContent">
-                <el-input v-model="ruleForm.issueContent" :placeholder="`${$t('common.placeholderInput')}`" />
+                <el-input v-model="ruleForm.issueContent" :placeholder="`${$t('common.placeholderInput')}`" :rows="2"
+                  type="textarea" />
               </el-form-item>
             </el-form>
           </template>
           <template v-else>
             <el-collapse v-model="workName" accordion>
-              <el-collapse-item :title="item.issueTitle || item.question" :name="item.id"
+              <el-collapse-item :title="item.issueTitle || `${index + 1}、${item.question}`" :name="item.id"
                 v-for="(item, index) in workList" :key="index">
-                <div>{{ item.issueContent || item.answer }}</div>
+                <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>
+                </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>
+                </div>
               </el-collapse-item>
             </el-collapse>
             <template v-if="workList && workList.length">
@@ -143,8 +153,9 @@
       </el-tabs>
       <template #footer v-if="activeName == 0">
         <div class="dialog-footer flex-center">
-          <el-button @click="show = false">{{ $t('common.cancel') }}</el-button>
-          <el-button type="primary" @click="submitForms(ruleFormRef)">{{ $t('common.confirm') }}</el-button>
+          <el-button @click="resetForm">{{ $t('common.cancel') }}</el-button>
+          <el-button class="gradient" type="primary" @click="submitForm(ruleFormRef)">{{ $t('common.confirm')
+            }}</el-button>
         </div>
       </template>
     </el-dialog>
@@ -593,16 +604,19 @@ const sendSmsCode = async () => {
 }
 
 
-const handlePageChange = () => {
-
+const handlePageChange = (page) => {
+  workForm.value.pageNum = page;
+  getList()
 }
 
 const handleClick = async (tab) => {
   activeName.value = tab.props.name
+  workForm.value.pageNum = 1;
   getList()
 }
 
 const getList = async () => {
+  if (activeName.value == 0) return;
   let api = activeName.value == 1 ? issueList(workForm.value) : faqList(workForm.value);
   let res = await api;
   workList.value = res.rows;
@@ -610,16 +624,22 @@ const getList = async () => {
 }
 
 
-const submitForms = async (formEl) => {
-  let res = await issue(ruleForm.value);
-  console.log(res);
-  if (res.code === 200) {
-    show.value = false;
+const resetForm = () => {
+  show.value = false;
+  for (const key in ruleForm.value) {
+    ruleForm.value[key] = ''
   }
+}
+
+const submitForm = async (formEl) => {
   if (!formEl) return;
-  await formEl.validate(async (valid, fields) => {
+  await formEl[0].validate(async (valid, fields) => {
     if (valid) {
-
+      let res = await issue(ruleForm.value);
+      if (res.code === 200) {
+        resetForm();
+        DGTMessage.success(`${t('common.submitSuccess')}`)
+      }
     }
   })
 }
@@ -748,9 +768,11 @@ div {
       display: flex;
 
       align-items: center;
+
       .btn {
         margin-left: 16px;
       }
+
       .personal-user-li {
         span {
           color: #333333;
@@ -777,7 +799,7 @@ div {
     display: flex;
 
     .personal-user-info {
-      
+
 
       .personal-username {
         display: flex;
@@ -950,4 +972,39 @@ div {
     height: 24px;
   }
 }
+.work-head {
+  display: flex;
+  color: #333333;
+  font-size: 18px;
+  font-weight: bold;
+  align-items: center;
+  img {
+    width: 24px;
+    height: 24px;
+    margin-right: 8px;
+  }
+}
+.work-content {
+  padding: 16px;
+  background: #F5F7FA;
+  border-radius: 16px;
+  color: #333333;
+  line-height: 24px;
+  font-size: 16px;
+  display: flex;
+  img {
+    width: 24px;
+    height: 24px;
+    margin-right: 16px;
+  }
+}
+
+:deep(.el-collapse-item__header) {
+  padding: 0 8px;
+  background-color: transparent;
+}
+
+:deep(.el-collapse-item__content) {
+  padding: 0 16px 16px;
+}
 </style>