hookehuyr

✨ feat(我的页面): 新增实名认证页面和新增儿童页面

...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
13 "lodash": "^4.17.21", 13 "lodash": "^4.17.21",
14 "moment": "^2.29.1", 14 "moment": "^2.29.1",
15 "mui-player": "^1.6.0", 15 "mui-player": "^1.6.0",
16 + "uuid": "^8.3.2",
16 "vant": "^4.0.0-alpha.0", 17 "vant": "^4.0.0-alpha.0",
17 "vue": "^3.2.31", 18 "vue": "^3.2.31",
18 "weixin-js-sdk": "^1.6.0" 19 "weixin-js-sdk": "^1.6.0"
...@@ -1578,6 +1579,14 @@ ...@@ -1578,6 +1579,14 @@
1578 "base64-arraybuffer": "^1.0.2" 1579 "base64-arraybuffer": "^1.0.2"
1579 } 1580 }
1580 }, 1581 },
1582 + "node_modules/uuid": {
1583 + "version": "8.3.2",
1584 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
1585 + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
1586 + "bin": {
1587 + "uuid": "dist/bin/uuid"
1588 + }
1589 + },
1581 "node_modules/vant": { 1590 "node_modules/vant": {
1582 "version": "4.0.0-alpha.0", 1591 "version": "4.0.0-alpha.0",
1583 "resolved": "https://registry.npmjs.org/vant/-/vant-4.0.0-alpha.0.tgz", 1592 "resolved": "https://registry.npmjs.org/vant/-/vant-4.0.0-alpha.0.tgz",
...@@ -2847,6 +2856,11 @@ ...@@ -2847,6 +2856,11 @@
2847 "base64-arraybuffer": "^1.0.2" 2856 "base64-arraybuffer": "^1.0.2"
2848 } 2857 }
2849 }, 2858 },
2859 + "uuid": {
2860 + "version": "8.3.2",
2861 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
2862 + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
2863 + },
2850 "vant": { 2864 "vant": {
2851 "version": "4.0.0-alpha.0", 2865 "version": "4.0.0-alpha.0",
2852 "resolved": "https://registry.npmjs.org/vant/-/vant-4.0.0-alpha.0.tgz", 2866 "resolved": "https://registry.npmjs.org/vant/-/vant-4.0.0-alpha.0.tgz",
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
14 "lodash": "^4.17.21", 14 "lodash": "^4.17.21",
15 "moment": "^2.29.1", 15 "moment": "^2.29.1",
16 "mui-player": "^1.6.0", 16 "mui-player": "^1.6.0",
17 + "uuid": "^8.3.2",
17 "vant": "^4.0.0-alpha.0", 18 "vant": "^4.0.0-alpha.0",
18 "vue": "^3.2.31", 19 "vue": "^3.2.31",
19 "weixin-js-sdk": "^1.6.0" 20 "weixin-js-sdk": "^1.6.0"
......
...@@ -117,6 +117,14 @@ export default [{ ...@@ -117,6 +117,14 @@ export default [{
117 }, 117 },
118 children: [] 118 children: []
119 }, { 119 }, {
120 + path: '/me/addUser',
121 + name: '新增儿童',
122 + component: () => import('./views/me/addUser.vue'),
123 + meta: {
124 + title: '新增儿童'
125 + },
126 + children: []
127 +}, {
120 path: '/image', 128 path: '/image',
121 name: 'html转图片', 129 name: 'html转图片',
122 component: () => import('./views/html2canvas.vue'), 130 component: () => import('./views/html2canvas.vue'),
......
1 +<template>
2 + <div class="add-user-page">
3 + <p style="color: #713610; font-size: 1.25rem; padding: 1rem; text-align: center; font-weight: bold;">请录入儿童的信息</p>
4 + <div style="">
5 + <van-config-provider :theme-vars="themeVars">
6 + <van-form @submit="onSubmit">
7 + <van-cell-group inset>
8 + <van-field v-model="user_info.kindergarten" name="幼儿园" label="幼儿园" placeholder="" disabled />
9 + <van-field v-model="user_info.job" name="儿童姓名" label="儿童姓名" placeholder="请输入儿童姓名" />
10 + <van-row style="padding: 2vh 0;">
11 + <van-col span="7"><span style="font-size: 14px; color: #323233; margin-left: 2vh;">儿童头像</span></van-col>
12 + <van-col span="17"><span style="font-size: 12px; color: #B0B0B0;">请上传一张清晰的儿童照片</span></van-col>
13 + </van-row>
14 + <van-row style="padding-bottom: 2vh;">
15 + <van-col span="16" offset="8">
16 + <van-uploader v-model="fileList" :after-read="afterRead" :before-delete="beforeDelete" :max-count="1" />
17 + </van-col>
18 + </van-row>
19 + </van-cell-group>
20 + <div style="margin: 2vh;">
21 + <van-button v-if="lock_btn" loading type="primary" loading-text="上传中..." style="width: 100%;" round></van-button>
22 + <van-button v-else @click="saveInfo" :disabled="lock_btn" type="primary" native-type="submit" style="width: 100%;" round>保存</van-button>
23 + </div>
24 + </van-form>
25 + </van-config-provider>
26 + </div>
27 + </div>
28 +</template>
29 +
30 +<script setup>
31 +import { v4 as uuidv4 } from 'uuid';
32 +import { ref, reactive, onMounted } from 'vue'
33 +import { useRoute, useRouter } from 'vue-router'
34 +import axios from '@/utils/axios';
35 +import qs from 'Qs'
36 +import $ from 'jquery'
37 +import { Toast } from 'vant';
38 +const $route = useRoute();
39 +const $router = useRouter();
40 +
41 +const themeVars = {
42 + buttonPrimaryBackground: '#F9D95C',
43 + buttonPrimaryBorderColor: '#F9D95C',
44 + buttonPrimaryColor: '#713610',
45 +};
46 +
47 +const onSubmit = (values) => {
48 + // console.log('submit', values);
49 +};
50 +
51 +// const uuid = () => {
52 +// let s = [];
53 +// let hexDigits = '0123456789abcdef';
54 +// for (var i = 0; i < 36; i++) {
55 +// s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
56 +// }
57 +// s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010
58 +// s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
59 +// s[8] = s[13] = s[18] = s[23] = '-';
60 +
61 +// var uuid = s.join('');
62 +// return uuid;
63 +// }
64 +
65 +// 图片模块
66 +let lock_btn = ref(false); // 保存按钮锁
67 +let fileList = ref([]);
68 +let upload_image = reactive({ meta_id: '' });
69 +const afterRead = (res) => {
70 + lock_btn.value = true; // 上传开始, 不能保存
71 + let affix = uuidv4();
72 + // let affix = uuid();
73 + // 此时可以自行将文件上传至服务器
74 + let dataURL = res.content;
75 + let base64url = dataURL.slice(dataURL.indexOf(',') + 1); // 截取前缀的base64 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnoAAAJeCAYAA.......
76 + // 获取七牛token
77 + axios.post('/srv/?f=shzl_comment&a=upload',
78 + qs.stringify({
79 + filename: `${affix}_${res.file.name}`,
80 + file: base64url
81 + }))
82 + .then(res => {
83 + if (res.statusText === 'OK') {
84 + let config = {
85 + headers: {
86 + 'Content-Type': 'application/octet-stream',
87 + 'Authorization': 'UpToken ' + res.data.token, // UpToken后必须有一个 ' '(空格)
88 + }
89 + }
90 + // 上传七牛服务器
91 + axios.post('http://upload.qiniup.com/putb64/-1/key/' + res.data.key, base64url, config)
92 + .then(res => {
93 + if (res.data.filekey) {
94 + let info = res.data;
95 + axios.post('/srv/?f=shzl_comment&a=upload&t=save_file',
96 + qs.stringify({
97 + format: info.image_info.format,
98 + hash: info.hash,
99 + height: info.image_info.height,
100 + width: info.image_info.width,
101 + filekey: info.filekey,
102 + }))
103 + .then(res => {
104 + upload_image.meta_id = res.data.data.meta_id;
105 + lock_btn.value = false; // 头像上传完成, 打开锁
106 + })
107 + .catch(err => {
108 + console.error(err);
109 + })
110 + } else {
111 + console.warn(res);
112 + Toast({
113 + icon: 'close',
114 + message: res.data.msg
115 + });
116 + }
117 + })
118 + .catch(err => {
119 + console.error(err);
120 + Toast({
121 + icon: 'close',
122 + message: res.data.msg
123 + });
124 + })
125 + } else {
126 + console.warn(res);
127 + }
128 + })
129 + .catch(err => {
130 + console.error(err);
131 + })
132 +};
133 +const beforeDelete = () => { // 删除图片回调
134 + user_info.meta_id = '';
135 + upload_image.meta_id = '';
136 + return true;
137 +}
138 +
139 +let user_info = reactive({
140 + kindergarten: '杨浦民办科技幼稚园',
141 + name: '',
142 + meta_id: ''
143 +});
144 +
145 +onMounted(() => {
146 + //
147 + $('.content-section').height($(document).height() - $('.title-section').height());
148 +})
149 +
150 +// 保存用户信息
151 +const saveInfo = () => {
152 + axios.post('/srv/?f=shzl_comment&a=user&t=edit',
153 + qs.stringify({
154 + kindergarten: user_info.kindergarten,
155 + name: user_info.name,
156 + meta_id: upload_image.meta_id ? upload_image.meta_id : user_info.meta_id,
157 + }))
158 + .then(res => {
159 + if (res.data.code === 1) {
160 + Toast.success({
161 + message: '保存成功',
162 + duration: 1000,
163 + onClose: () => {
164 + goBack();
165 + }
166 + });
167 + } else {
168 + console.warn(res);
169 + Toast({
170 + icon: 'close',
171 + message: res.data.msg
172 + });
173 + }
174 + })
175 + .catch(err => {
176 + console.error(err);
177 + })
178 +}
179 +</script>
180 +
181 +<script>
182 +import mixin from 'common/mixin';
183 +
184 +export default {
185 + mixins: [mixin.init],
186 + data () {
187 + return {
188 +
189 + }
190 + },
191 + mounted () {
192 +
193 + },
194 + methods: {
195 +
196 + }
197 +}
198 +</script>
199 +
200 +<style lang="less" scoped>
201 +.add-user-page {
202 + padding: 1rem;
203 +}
204 +</style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
47 <my-button type="custom" :custom-style="styleObject1" @on-click="goTo('/me/verifyUser')">实名认证</my-button> 47 <my-button type="custom" :custom-style="styleObject1" @on-click="goTo('/me/verifyUser')">实名认证</my-button>
48 </div> 48 </div>
49 <div> 49 <div>
50 - <my-button type="custom" :custom-style="styleObject2" @on-click="">新增儿童</my-button> 50 + <my-button type="custom" :custom-style="styleObject2" @on-click="goTo('/me/addUser')">新增儿童</my-button>
51 </div> 51 </div>
52 </div> 52 </div>
53 53
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
40 40
41 <script setup> 41 <script setup>
42 import MyButton from '@/components/MyButton/index.vue' 42 import MyButton from '@/components/MyButton/index.vue'
43 +
43 import { wxInfo } from '@/utils/tools'; 44 import { wxInfo } from '@/utils/tools';
44 import qs from 'Qs' 45 import qs from 'Qs'
45 import { ref, reactive, onMounted } from 'vue' 46 import { ref, reactive, onMounted } from 'vue'
......
...@@ -939,6 +939,11 @@ ...@@ -939,6 +939,11 @@
939 dependencies: 939 dependencies:
940 "base64-arraybuffer" "^1.0.2" 940 "base64-arraybuffer" "^1.0.2"
941 941
942 +"uuid@^8.3.2":
943 + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
944 + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
945 + "version" "8.3.2"
946 +
942 "vant@^4.0.0-alpha.0": 947 "vant@^4.0.0-alpha.0":
943 "integrity" "sha512-D1J0YZBZmVx8Ft2phhJ4x88sxPGylsyMmJJvWT5GDyusC5kU1ik8qe77Dwtp3fiaZSxs8Fb5Hv4LQmjeqxtMLQ==" 948 "integrity" "sha512-D1J0YZBZmVx8Ft2phhJ4x88sxPGylsyMmJJvWT5GDyusC5kU1ik8qe77Dwtp3fiaZSxs8Fb5Hv4LQmjeqxtMLQ=="
944 "resolved" "https://registry.npmjs.org/vant/-/vant-4.0.0-alpha.0.tgz" 949 "resolved" "https://registry.npmjs.org/vant/-/vant-4.0.0-alpha.0.tgz"
......