| 
 
| 为FastAdmin“文明随手拍”插件增加提交手机号方法 
 插件名称:文明随手拍
 功能介绍:
 一款拍照上传系统,基于FastAdmin + ThinkPHP + Uniapp开发,代码简洁,UI清爽,上报不文明,审核,积分奖励,积分商城等功能
 插件市场:https://www.fastadmin.net/store/keesuishoupai.html
 版本号:2.0.0
 
 方法与步骤:一、修改数据库文件1.给“fa_keesuishoupai_report”数据表添加字段。
 打开“fa_keesuishoupai_report”数据表,新增一个“username”字段,参数如下:
 字段名:username
 类型:VARCHAR
 长度值:32
 默认:null
 排序规则:utf8_general_ci
 属性:空
 注释:用户名
 移动字段:空
 
 再新增一个“mobile”字段,参数如下:
 字段名:mobile
 类型:VARCHAR
 长度值:11
 默认:null
 排序规则:utf8_general_ci
 属性:空
 注释:手机号
 移动字段:空
 
 二、修改微信小程序端文件
 1.修改微信小程序前端页面文件。
 修改插件中的uniapp目录内的 submit.vue 文件。
 
 用 “HBuilder X”编辑器, 打开 web根目录/addons/keesuishoupai/uniapp/pages/report/submit.vue 文件。
 在相应位置添加姓名和手机号输入框,添加后代码如下:
 复制代码<template>
        <view>
                <u-form :model="form" ref="uForm">
                        <view class="u-p-50">
                                <view class="u-font-40 c-font-bold">个人信息</view>
                                <view class="u-m-t-20">为了便于我们更好的对具体情况进行核实并答复,请填写您的真实姓名和联系方式,我们对投诉人的信息严格保密!</view>
                                <u-form-item label="姓名" :border-bottom="false" required label-width="140" prop="username">
                                        <u-input placeholder="请输入姓名" v-model="form.username" />
                                </u-form-item>
                                <u-line></u-line>
                                <u-form-item label="手机号" :border-bottom="false" required label-width="140" prop="mobile">
                                        <u-input placeholder="请输入手机号" v-model="form.mobile" />
                                </u-form-item>
                                <u-line></u-line>
                                <u-gap height="50" bgColor="transparent"></u-gap>
                                <view class="u-font-40 c-font-bold">事件上报</view>
                                <view class="u-m-t-20">为推动问题的合适解决,请您的上报的信息保持真实、客观、明确!</view>
                                <u-form-item label="事件描述" required label-position="top" prop="content">
                                        <u-input v-model="form.content" type="textarea" />
                                </u-form-item>
                                <u-form-item label="事件标签" required label-position="top" prop="labels">
                                        <u-radio-group shape="square" v-model="form.labels">
                                                <u-radio v-for="(item, index) in vuex_config.labels" :key="index" :name="item">
                                                        {{item}}
                                                </u-radio>
                                        </u-radio-group>
                                </u-form-item>
                                <u-form-item label="发生地点" required label-position="top" prop="address">
                                        <u-cell-item class="u-p-0" :border-bottom="false" icon="map-fill"
                                                :title="form.address ? form.address :'点击选择地点'" @click="chooseDizhi" value=""></u-cell-item>
                                </u-form-item>
                                <u-form-item label="添加图片" required label-position="top" prop="images">
                                        <u-upload ref="uUpload" :action="vuex_config.upload.uploadurl" :file-list="imageList"
                                                :header="header" :form-data="formdata" @on-uploaded="successUpload" @on-error="errorUpload"
                                                @on-remove="removeUpload" :max-count="9"></u-upload>
                                </u-form-item>
                                <u-cell-item class="u-p-l-0 u-p-r-0" hover-class="none" icon="eye" :arrow="false" title="是否公开">
                                        <u-switch slot="right-icon" size="40" v-model="form.isopen"></u-switch>
                                </u-cell-item>
                                <view class="u-p-t-50 u-p-b-50">
                                        <u-button type="success" shape="circle" :ripple="true" @click="submit">提交</u-button>
                                </view>
                        </view>
                </u-form>
        </view>
</template>
 然后修改对应的js代码,适当位置插入姓名和手机和位数判断,添加后代码如下:
 
 复制代码<script>
        export default {
                data() {
                        return {
                                form: {
                                        username: '',
                                        mobile: '',
                                        content: '',
                                        labels: '',
                                        address: '',
                                        lat: 0,
                                        lng: 0,
                                        images: null,
                                        isopen: false
                                },
                                imageList: [],
                                header: {},
                                formdata: {},
                                rules: {
                                        username: [{
                                                required: true,
                                                min: 2,
                                                message: '姓名不应低于2个字',
                                                trigger: 'blur,change'
                                        }],
                                        mobile: [{
                                                        required: true,
                                                        message: '请输入手机号',
                                                        trigger: ['change', 'blur'],
                                                },
                                                {
                                                        // 自定义验证函数,见上说明
                                                        validator: (rule, value, callback) => {
                                                                // 上面有说,返回true表示校验通过,返回false表示不通过
                                                                // uni.$u.test.mobile()就是返回true或者false的
                                                                return uni.$u.test.mobile(value);
                                                        },
                                                        message: '手机号码不正确',
                                                        // 触发器可以同时用blur和change
                                                        trigger: ['change', 'blur'],
                                                }
                                        ],
                                        content: [{
                                                required: true,
                                                min: 10,
                                                message: '事件描述不少于10个字',
                                                trigger: 'blur,change'
                                        }],
                                        labels: [{
                                                required: true,
                                                message: '请选择事件标签',
                                                trigger: 'blur,change'
                                        }],
                                        address: [{
                                                required: true,
                                                message: '请选择地理位置',
                                                trigger: 'blur,change'
                                        }],
                                        images: [{
                                                required: true,
                                                message: '请上传图片',
                                                trigger: 'blur,change'
                                        }]
                                },
                        };
                },
                // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
                onReady() {
                        this.$refs.uForm.setRules(this.rules);
                        this.header = {
                                token: this.vuex_token || '',
                                uid: this.vuex_user.id || 0
                        }
                        let isObj = this.$u.test.object(this.vuex_config.upload.multipart)
                        if (isObj) {
                                this.formdata = this.vuex_config.upload.multipart;
                        }
                },
                methods: {
                        submit() {
                                this.$refs.uForm.validate(valid => {
                                        if (valid) {
                                                this.$refs.uUpload.upload();
                                                this.$u.api.submitReport(this.form).then(res => {
                                                        this.$u.toast(res.msg);
                                                        if (res.code) {
                                                                setTimeout(() => {
                                                                        this.$u.route({
                                                                                type: 'redirectTo',
                                                                                url: '/pages/user/report/list'
                                                                        })
                                                                }, 1500);
                                                        }
                                                });
                                        }
                                });
                        },
                        chooseDizhi() {
                                let that = this;
                                uni.chooseLocation({
                                        success: function(res) {
                                                that.form['address'] = res.address;
                                                that.form['lat'] = res.latitude;
                                                that.form['lng'] = res.longitude;
                                        },
                                        fail: function(res) {
                                                uni.getSetting({
                                                        success(setting) {
                                                                if (setting.authSetting != undefined && !setting.authSetting[
                                                                                'scope.userLocation']) {
                                                                        uni.showModal({
                                                                                content: "检测到您没打开获取位置权限,是否去设置打开?",
                                                                                confirmText: "确认",
                                                                                cancelText: "取消",
                                                                                success: (modal) => {
                                                                                        if (modal.confirm) {
                                                                                                uni.openSetting()
                                                                                        }
                                                                                }
                                                                        })
                                                                }
                                                        }
                                                })
                                        }
                                })
                        },
                        successUpload(e) {
                                this.uploadChanges(e)
                        },
                        removeUpload(index, lists, name) {
                                this.uploadChanges(lists)
                        },
                        errorUpload(e) {
                                this.$u.toast('上传失败了!');
                        },
                        uploadChanges(e) {
                                let urls = [];
                                e.map(item => {
                                        //编辑时,已存在的,response不存在
                                        if (!item.response) {
                                                urls.push(item.url)
                                        } else if (item.response.code) {
                                                urls.push(item.response.data.url);
                                        }
                                });
                                let value = urls.join(',');
                                this.form.images = value;
                        },
                }
        };
</script>
修改好后,最后发布微信小程序,生成新成小程序代码。
 
 三、修改服务器端文件
 共需要修改如下4个文件:
 /public/assets/js/backend/keesuishoupai/report.js  后端“事件上报”栏目表格顶端增加“手机号”列
 /application/admin/controller/keesuishoupai/Report.php  后端“事件上报”栏目表格中“手机号”列能显示手机号
 /application/admin/view/keesuishoupai/report/show.html  后端“事件上报”栏目“查看”操作能显示“手机号”
 /application/admin/lang/zh-cn/keesuishoupai/report.php  后端“事件上报”栏目表格顶端的“mobile”英文列名显示为中文“手机号”
 
 1.修改web后端report.js文件。
 用 “HBuilder X”编辑器, 打开 web根目录/public/assets/js/backend/keesuishoupai/report.js文件。
 
 在相应位置添加如下代码:
 在表格中增加“username”和“mobile”两显示列。复制代码{field: 'username', title: __('Username'), operate: 'LIKE'},
{field: 'mobile', title: __('Mobile'), operate: 'LIKE'},
 2.修改web后端Report.php文件。
 用 “HBuilder X”编辑器, 打开 web根目录/application/admin/controller/keesuishoupai/Report.php文件。查找如下代码:
 
 复制代码$row->visible(['id','user_id','level','content','images','isopen','address','status','solvetime']);
此段代码修改为:
 复制代码 $row->visible(['id','user_id','level','username','mobile','content','images','isopen','address','status','solvetime']);
3.修改web后端show.html 文件。
 用 “HBuilder X”编辑器, 打开 web根目录/application/admin/view/keesuishoupai/report/show.html 文件。
 在相应位置添加如下代码:
 复制代码<tr>
<td>姓名</td>
<td> {$row.username|htmlentities}</td>
</tr>
<tr>
<td>手机号</td>
<td> {$row.mobile|htmlentities}</td>
</tr>
4.修改web后端report.php文件。
 用 “HBuilder X”编辑器, 打开 web根目录/application/admin/lang/zh-cn/keesuishoupai/report.php文件。
 在相应位置添加如下代码:
 复制代码 'Username'       => '姓名',
 'Mobile'         => '手机号',
 
 
 
 
 | 
 |