guhongwei 2 tahun lalu
induk
melakukan
cd77e81b09

+ 25 - 24
commpents/form/index.js

@@ -15,10 +15,11 @@ Component({
      * 组件的初始数据
      */
     data: {
-        form: {},
+        form: {
+            // icon: []
+        },
         isSubmit: false,
         fileList: [],
-        columns: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
     },
 
     /**
@@ -26,10 +27,15 @@ Component({
      */
     methods: {
         toSubmit() {
-            console.log('function in ')
-            console.log(this.data.form)
+            const form = this.data.form;
+            this.triggerEvent('submit', form)
         },
-        selectChange(event) {
+        toSelected(event) {
+            const data = event?.detail;
+            const form = this.data.form;
+            const { value, model } = data;
+            form[model] = value;
+            this.setData({ form })
 
         },
         onChange(event) {
@@ -38,28 +44,23 @@ Component({
             const model = event.target?.dataset?.model;
             const value = event?.detail;
             if (!model) return;
-            console.log(data, model, value)
             data[model] = value;
             this.setData({ form: data })
         },
-        afterRead(event) {
-            const { file } = event.detail;
-            console.log(file)
-            let formdata = new FormData();
-            formdata.append('file', file, file.name);
-            const url = `${app.globalData.fileUrl}/files/newCourt/icon/upload`;
-            wx.request({
-                url,
-                method: "post",
-                data: formdata,
-                header: { 'Content-Type': 'multipart/form-data' },
-                success: (res) => {
-                    console.log(res)
-                },
-                error: (e) => {
-                    console.log(e)
-                },
-            });
+        uploadIcon(event) {
+            const data = event?.detail;
+            if (!data) return;
+            const form = this.data.form;
+            if (!form?.icon) form.icon = []
+            form.icon.push(data);
+            this.setData({ form })
         },
+        deleteImg(event) {
+            const i = event?.detail?.index;
+            if (i <= -1) return;
+            const form = this.data.form;
+            form.icon.splice(i, 1)
+            this.setData({ form })
+        }
     }
 })

+ 2 - 2
commpents/form/index.json

@@ -4,7 +4,7 @@
         "van-field": "@vant/weapp/field/index",
         "van-cell": "@vant/weapp/cell/index",
         "van-cell-group": "@vant/weapp/cell-group/index",
-        "van-button": "@vant/weapp/button/index",
-        "van-uploader": "@vant/weapp/uploader/index"
+        "f-upload": "/commpents/upload/index",
+        "f-picker": "/commpents/picker/index"
     }
 }

+ 5 - 11
commpents/form/index.wxml

@@ -2,18 +2,12 @@
 <van-cell-group>
     <view wx:for="{{fields}}" wx:for-item="f" wx:key="model">
         <view wx:if="{{f.type==='select'}}">
-            <van-field label="{{f.label}}">
-                <view slot="input">
-                    <van-picker columns="{{ columns }}" bind:change="selectChange" data-model="{{f.model}}" />
-                </view>
-            </van-field>
+            <f-picker value="{{form[f.model]}}" label="{{f.label}}" model="{{f.model}}" bind:selected="toSelected" columns="{{f.list}}">
+            </f-picker>
         </view>
         <view wx:elif="{{f.type==='upload'}}">
-            <!-- <van-field label="{{f.label}}">
-                
-            </van-field> -->
             <view style="text-align:center">
-                <van-uploader file-list="{{ fileList }}" bind:after-read="afterRead" />
+                <f-upload list="{{form[f.model]}}" bind:imgUpload="uploadIcon" bind:imgDel="deleteImg"></f-upload>
             </view>
         </view>
         <view wx:else>
@@ -23,6 +17,6 @@
     </view>
 </van-cell-group>
 
-<view style="padding:10px 0">
-    <van-button style="width:100%" round type="primary" block disabled="{{isSubmit}}" bind:click="toSubmit">注册</van-button>
+<view style="padding:10px">
+    <button style="width:100%" disabled="{{isSubmit}}" bind:tap="toSubmit">注册</button>
 </view>

+ 41 - 0
commpents/picker/index.js

@@ -0,0 +1,41 @@
+// commpents/picker/index.js
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        label: { type: String },
+        model: { type: String },
+        columns: { type: Array },
+        valueKey: { type: String, value: 'value' },
+        labelKey: { type: String, value: 'label' }
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+        text: '请选择',
+        show: false,
+    },
+
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        onChange(event) {
+            const obj = event?.detail?.value;
+            const label = obj[this.properties.labelKey]
+            const value = obj[this.properties.valueKey]
+            this.setData({ text: label })
+            this.triggerEvent('selected', { value, model: this.properties.model })
+            this.toClose();
+        },
+        toOpen() {
+            this.setData({ show: true })
+        },
+        toClose() {
+            this.setData({ show: false })
+        }
+    }
+})

+ 8 - 0
commpents/picker/index.json

@@ -0,0 +1,8 @@
+{
+    "component": true,
+    "usingComponents": {
+        "van-cell": "@vant/weapp/cell/index",
+        "van-popup": "@vant/weapp/popup/index",
+        "van-picker": "@vant/weapp/picker/index"
+    }
+}

+ 5 - 0
commpents/picker/index.wxml

@@ -0,0 +1,5 @@
+<!--commpents/picker/index.wxml-->
+<van-cell title="{{label}}" value="{{text}}" bind:click="toOpen" />
+<van-popup show="{{ show }}" bind:close="toClose" position="bottom" custom-style="height: 40%;">
+    <van-picker columns="{{ columns }}" bind:confirm="onChange" value-key="{{labelKey}}" show-toolbar="{{true}}" bind:cancel="toClose"/>
+</van-popup>

+ 1 - 0
commpents/picker/index.wxss

@@ -0,0 +1 @@
+/* commpents/picker/index.wxss */

+ 1 - 1
commpents/upload/index.js

@@ -45,7 +45,7 @@ Component({
                     } else {
                         wx.showToast({ title: `${res.errMsg}`, icon: 'fail', duration: 2000 })
                     }
-                }
+                },
             })
         },
         // 图片删除

+ 5 - 1
pages/index/index.js

@@ -23,6 +23,10 @@ Page({
         wx.redirectTo({ url: '/pages/home/index' });
         wx.login({
           success: async (arr) => {
+            if(app.globalData?.wxInfo?.openid) {
+                await this.toLogin(app.globalData?.wxInfo?.openid);
+                return;
+            }
             const { code: js_code } = arr;
             const aee = await app.$get('/wechat/api/login/app', { js_code: js_code, config: 'newCourtApp' });
             if (aee.errcode === 0 && aee.data?.openid) {
@@ -46,7 +50,7 @@ Page({
       if (!data) wx.redirectTo({ url: '/pages/register/index' });
       else {
         // 有用户,存起来,跳转
-        wx.setStorage('user', data);
+        wx.setStorageSync('user', data);
         wx.redirectTo({ url: '/pages/home/index' });
       }
     }

+ 36 - 3
pages/register/index.js

@@ -1,4 +1,6 @@
 // pages/register/index.js
+const { gender } = require('../../utils/dict')
+const app = getApp();
 Page({
     /**
      * 页面的初始数据
@@ -9,20 +11,51 @@ Page({
         fields: [
             { label: '头像', model: 'icon', type: "upload" },
             { label: '姓名', model: 'name' },
+            { label: '身份证号', model: 'card' },
             { label: '性别', model: 'gender', type: 'select' },
             { label: '手机号', model: 'phone' },
             { label: '邮箱', model: 'email' },
         ]
     },
 
-    onChange(val) {
-        console.log(val);
+    async toSubmit(e) {
+        const data = e?.detail;
+        if (!data) return;
+        const wxInfo = app.globalData.wxInfo
+        if (!wxInfo.openid) {
+            wx.showToast({
+                title: '缺少微信关联',
+                icon: 'error'
+            })
+            return
+        }
+        data.openid = wxInfo.openid;
+        const res = await app.$post('/newCourt/api/user', data)
+        if (app.$checkRes(res)) {
+            wx.showToast({
+                title: '注册成功',
+                success: () => {
+                    wx.redirectTo({ url: '/pages/index/index' });
+                }
+            })
+        } else {
+            const { errmsg = '注册失败' } = res;
+            wx.showModal({
+                title: errmsg,
+                showCancel: false
+            })
+        }
     },
 
     /**
      * 生命周期函数--监听页面加载
      */
-    onLoad(options) { },
+    onLoad(options) {
+        const fields = this.data.fields;
+        const fg = fields.find(f => f.model === 'gender')
+        if (fg) fg.list = gender
+        this.setData({ fields })
+    },
 
     /**
      * 生命周期函数--监听页面初次渲染完成

+ 1 - 8
pages/register/index.wxml

@@ -1,14 +1,7 @@
 <mobile-main frameStyle="{{frameStyle}}" bind:back="back" bind:tabPath="tabPath">
     <view slot="info" class="container main">
         <view style="width:100%">
-            <!-- <van-cell-group>
-                <van-field label="头像" value="{{ form.name }}" placeholder="请输入姓名" border="{{ true }}" bind:change="onChange" />
-                <van-field label="姓名" value="{{ form.name }}" placeholder="请输入姓名" border="{{ true }}" bind:change="onChange" />
-                <van-field label="性别" value="{{ form.gender }}" placeholder="请输入姓名" border="{{ true }}" bind:change="onChange" />
-                <van-field label="手机号" value="{{ form.phone }}" placeholder="请输入手机号" border="{{ true }}" bind:change="onChange" />
-                <van-field label="邮箱" value="{{ form.email }}" placeholder="请输入邮箱" border="{{ true }}" bind:change="onChange" />
-            </van-cell-group> -->
-            <f-form fields="{{fields}}"></f-form>
+            <f-form fields="{{fields}}" bind:submit="toSubmit"></f-form>
         </view>
     </view>
 

+ 6 - 1
utils/dict.js

@@ -19,4 +19,9 @@ export const match_status = [
 export const myBtn = [
     { title: '我的赛事', route: 'usermymatch' },
     { title: '账号设置', route: 'setting' }
-]
+]
+
+export const gender = [
+    { label: '男', value: '男' },
+    { label: '女', value: '女' },
+]