ソースを参照

feat(component): 客户信息更新

laiqi 1 年間 前
コミット
df4efd1a1e

+ 106 - 12
src/pages-sub/user/index.vue

@@ -93,7 +93,7 @@
               clearable
               v-model="model.userscontactphone"
               placeholder="请输入联系手机号"
-              :rules="[{ required: false, pattern: /^1[3-9]\d{9}$/, message: '手机号格式不正确' }]"
+              :rules="[{ required: false, validator: validatorPhone, message: '手机号格式不正确' }]"
             />
             <wd-input
               label="联系邮箱"
@@ -172,15 +172,21 @@
             show-word-limit
           />
         </wd-cell-group>
-        <view class="footer">
-          <wd-button type="primary" size="large" @click="handleSubmit" block>提交</wd-button>
-        </view>
       </wd-form>
     </view>
+    <view class="footer">
+      <wd-button type="primary" size="large" @click="handleSubmit" block :loading="submitLoading">
+        提交
+      </wd-button>
+    </view>
   </view>
 </template>
 
 <script lang="ts" setup>
+import { useAppStore } from '@/store/app'
+import { useUserStore } from '@/store/user'
+import { useToast } from 'wot-design-uni'
+
 /** 客户信息 */
 // CREATE TABLE `users` (
 //   `usersid` varchar(50) NOT NULL COMMENT '用户id',
@@ -236,35 +242,123 @@ const model = reactive({
   userscz: '',
   usersbz: '',
 })
-
+const appStore = useAppStore()
+const userStore = useUserStore()
+const toast = useToast()
+// 用户类型
 const typeOptions = ['个人', '企业']
-
+const submitLoading = ref(false)
+// 用户详情
 const form = ref()
+const validatorPhone = (val: string) => {
+  if (!val) {
+    return Promise.resolve()
+  }
+  if (/^1[3-9]\d{9}$/.test(val)) {
+    return Promise.resolve()
+  } else {
+    return Promise.reject(new Error('手机号格式不正确'))
+  }
+}
 
+// 提交
 function handleSubmit() {
   form.value
     .validate()
-    .then(({ valid, errors }) => {
+    .then(async ({ valid, errors }) => {
       if (valid) {
-        // showSuccess({
-        //   msg: '校验通过',
-        // })
+        submitLoading.value = true
+        const userid = appStore.appInfo.userid
+        const res = await userStore.updateUser({
+          usersid: userid,
+          ...model,
+        })
+
+        if (res.Status === 0) {
+          toast.success({
+            msg: '保存成功!',
+            duration: 2000,
+            closed: () => {
+              submitLoading.value = false
+              uni.navigateBack()
+            },
+          })
+        } else {
+          toast.error(res.Message)
+        }
+        submitLoading.value = false
       }
     })
     .catch((error) => {
+      submitLoading.value = false
       console.log(error, 'error')
     })
 }
+
+const getUserDetail = async () => {
+  const { Data, Status } = await userStore.getUserInfo()
+  if (Status === 0) {
+    // usersname: '',
+    // userstype: '个人',
+    // usersidcardnumber: '',
+    // usersbankname: '',
+    // usersbanknumber: '',
+    // usersphone: '',
+    // usersemail: '',
+    // usersaddress: '',
+    // userscontactphone: '',
+    // userscontactemail: '',
+    // userscontactaddress: '',
+    // usersopenid: '',
+    // usersfrdbdh: '',
+    // usersfrdbsjh: '',
+    // usersshtyxydm: '',
+    // userszcd: '',
+    // userscz: '',
+    // usersbz: '',
+    model.usersname = Data.usersname
+    model.userstype = Data.userstype
+    model.usersidcardnumber = Data.usersidcardnumber
+    model.usersbankname = Data.usersbankname
+    model.usersbanknumber = Data.usersbanknumber
+    model.usersphone = Data.usersphone
+    model.usersemail = Data.usersemail
+    model.usersaddress = Data.usersaddress
+    model.userscontactphone = Data.userscontactphone
+    model.userscontactemail = Data.userscontactemail
+    model.userscontactaddress = Data.userscontactaddress
+    model.usersopenid = Data.usersopenid
+    model.usersfrdbdh = Data.usersfrdbdh
+    model.usersfrdbsjh = Data.usersfrdbsjh
+    model.usersshtyxydm = Data.usersshtyxydm
+    model.userszcd = Data.userszcd
+    model.userscz = Data.userscz
+    model.usersbz = Data.usersbz
+  }
+}
+
+onMounted(() => {
+  getUserDetail()
+})
 </script>
 
 <style lang="scss" scoped>
 .user-edit-page {
+  padding-bottom: 80px; // 为固定底部按钮留出空间
+
   .user-info {
     background-color: #fff;
   }
+
   .footer {
-    padding: 0 16px;
-    margin-top: 20px;
+    position: fixed;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 99;
+    padding: 16px;
+    background-color: #fff;
+    // box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06);
   }
 }
 </style>

+ 0 - 67
src/pages/mine/components/request.vue

@@ -1,67 +0,0 @@
-<route lang="json5">
-{
-  layout: 'demo',
-  style: {
-    navigationBarTitleText: '请求',
-  },
-}
-</route>
-
-<template>
-  <view class="p-6 text-center">
-    <view class="my-2">使用的是 laf 云后台</view>
-    <view class="text-green-400">我的推荐码,可以获得佣金</view>
-
-    <!-- #ifdef H5 -->
-    <view class="my-2">
-      <a class="my-2" :href="recommendUrl" target="_blank">{{ recommendUrl }}</a>
-    </view>
-    <!-- #endif -->
-
-    <!-- #ifndef H5 -->
-    <view class="my-2 text-left text-sm">{{ recommendUrl }}</view>
-    <!-- #endif -->
-
-    <!-- http://localhost:9000/#/pages/index/request -->
-    <wd-button @click="run" class="my-6">发送请求</wd-button>
-    <view class="h-16">
-      <view v-if="loading">loading...</view>
-      <block v-else>
-        <view class="text-xl">请求数据如下</view>
-        <view class="text-green leading-8">{{ JSON.stringify(data) }}</view>
-      </block>
-    </view>
-    <wd-button type="error" @click="reset" class="my-6" :disabled="!data">重置数据</wd-button>
-  </view>
-</template>
-
-<script lang="ts" setup>
-import { getFooAPI, postFooAPI, IFooItem } from '@/service/index/foo'
-import { findPetsByStatusQueryOptions } from '@/service/app'
-import { useQuery } from '@tanstack/vue-query'
-
-const recommendUrl = ref('http://laf.run/signup?code=ohaOgIX')
-
-// const initialData = {
-//   name: 'initialData',
-//   id: '1234',
-// }
-const initialData = undefined
-// 适合少部分全局性的接口————多个页面都需要的请求接口,额外编写一个 Service 层
-const { loading, error, data, run } = useRequest<IFooItem>(() => getFooAPI('菲鸽'), {
-  immediate: true,
-  initialData,
-})
-
-// 使用 vue-query 的 useQuery 来请求数据,只做参考,是否使用请根据实际情况而定
-const {
-  data: data2,
-  error: error2,
-  isLoading: isLoading2,
-  refetch,
-} = useQuery(findPetsByStatusQueryOptions({ params: { status: ['available'] } }))
-
-const reset = () => {
-  data.value = initialData
-}
-</script>

+ 0 - 30
src/pages/mine/components/upload.vue

@@ -1,30 +0,0 @@
-<route lang="json5" type="page">
-{
-  layout: 'default',
-  style: {
-    navigationBarTitleText: '上传-状态一体化',
-  },
-}
-</route>
-
-<template>
-  <view class="p-4 text-center">
-    <wd-button @click="run">选择图片并上传</wd-button>
-    <view v-if="loading" class="text-blue h-10">上传...</view>
-    <template v-else>
-      <view class="m-2">上传后返回的接口数据:</view>
-      <view class="m-2">{{ data }}</view>
-      <view class="h-80 w-full">
-        <image v-if="data" :src="data || data" mode="scaleToFill" />
-      </view>
-    </template>
-  </view>
-</template>
-
-<script lang="ts" setup>
-const { loading, data, run } = useUpload({ user: '菲鸽' })
-</script>
-
-<style lang="scss" scoped>
-//
-</style>

+ 11 - 12
src/pages/mine/index.vue

@@ -11,19 +11,22 @@
     <!-- 顶部用户信息区域 -->
     <view class="bg-blue-400 pt-12 pb-8 px-4 relative">
       <view class="flex items-center">
-        <view v-if="userInfo.avatarUrl" class="w-16 h-16">
+        <view class="w-10 h-10 flex items-center justify-center bg-white rounded-full">
+          <wd-icon name="user-avatar" size="25" class="text-gray-5" />
+        </view>
+        <!-- <view v-if="userDetail.avatarUrl" class="w-16 h-16">
           <image
-            :src="userInfo.avatarUrl"
+            :src="userDetail.avatarUrl"
             class="w-full h-full rounded-full bg-white"
             mode="aspectFill"
           />
         </view>
         <view v-else class="w-10 h-10 flex items-center justify-center bg-white rounded-full">
           <wd-icon name="user-avatar" size="30" class="text-gray-100" />
-        </view>
+        </view> -->
         <view class="ml-4 text-white">
           <view class="text-xl font-bold">
-            {{ isLogin ? userInfo.nickName : '未登录' }}
+            {{ isLogin ? userDetail.usersname : '未登录' }}
           </view>
           <view class="text-sm mt-1 opacity-90" v-if="!isLogin">当前游客身份</view>
         </view>
@@ -33,7 +36,7 @@
     <!-- 菜单列表 -->
     <view class="px-4 py-2">
       <!-- 我的资料 -->
-      <view class="menu-item" @click="handleNavigate('/pages/settings/index')">
+      <view class="menu-item" @click="handleNavigate('/pages-sub/user/index')">
         <view class="flex items-center">
           <wd-icon name="user" class="text-gray-500" />
           <text class="ml-3">我的资料</text>
@@ -93,22 +96,18 @@
 import { ref, computed } from 'vue'
 import { useUserStore } from '@/store/user'
 import { useAppStore } from '@/store/app'
+import type { UserType } from '@/types/user'
 
 const userStore = useUserStore()
 const appStore = useAppStore()
 
 // 用户信息
-const userInfo = ref<Partial<IUserInfo>>({
-  avatarUrl: '',
-  nickName: '',
-})
+const userDetail = ref<Partial<UserType>>({})
 
 const isLogin = computed(() => appStore.isLogined)
 
 onMounted(() => {
-  userInfo.value = userStore.userInfo
-
-  console.log('userInfo:', userInfo.value)
+  userDetail.value = userStore.userDetail
 })
 
 // 页面跳转

+ 8 - 0
src/service/user/index.ts

@@ -23,3 +23,11 @@ export const getUserDetailApi = (id: string) => {
     },
   )
 }
+
+/** 更新用户信息 */
+export const updateUserApi = (data: Partial<UserType> & { usersid: string }) => {
+  return http.get<UserType>('/api/up?pagevalue=57', {
+    ...data,
+    'usersid.value': data.usersid,
+  })
+}

+ 12 - 1
src/store/user.ts

@@ -1,6 +1,6 @@
 import { defineStore } from 'pinia'
 import { ref } from 'vue'
-import { getUserDetailApi } from '@/service/user'
+import { getUserDetailApi, updateUserApi } from '@/service/user'
 import { useAppStore } from '@/store/app'
 import type { UserType } from '@/types/user'
 
@@ -47,6 +47,16 @@ export const useUserStore = defineStore(
       userDetail.value = val
     }
 
+    const updateUser = async (data: Partial<UserType> & { usersid: string }) => {
+      const { Data, Message, Status } = await updateUserApi(data)
+
+      if (Status === 0) {
+        // 更新用户信息
+        userDetail.value = Object.assign(userDetail.value, data)
+      }
+      return { Data, Message, Status }
+    }
+
     return {
       userInfo,
       setUserInfo,
@@ -56,6 +66,7 @@ export const useUserStore = defineStore(
       userDetail,
       setUserDetail,
       isAuthComplete,
+      updateUser,
     }
   },
   {