找回密码
 注册
首页 ≡≡网络技术≡≡ PHP语言 为FastAdmin“文明随手拍”插件增加提交姓名和手机号方 ...

框架 为FastAdmin“文明随手拍”插件增加提交姓名和手机号方法

灰儿 2022-5-24 10:54:54
为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 文件。
在相应位置添加姓名和手机号输入框,添加后代码如下:
  1. <template>
  2.         <view>
  3.                 <u-form :model="form" ref="uForm">
  4.                         <view class="u-p-50">
  5.                                 <view class="u-font-40 c-font-bold">个人信息</view>
  6.                                 <view class="u-m-t-20">为了便于我们更好的对具体情况进行核实并答复,请填写您的真实姓名和联系方式,我们对投诉人的信息严格保密!</view>
  7.                                 <u-form-item label="姓名" :border-bottom="false" required label-width="140" prop="username">
  8.                                         <u-input placeholder="请输入姓名" v-model="form.username" />
  9.                                 </u-form-item>
  10.                                 <u-line></u-line>
  11.                                 <u-form-item label="手机号" :border-bottom="false" required label-width="140" prop="mobile">
  12.                                         <u-input placeholder="请输入手机号" v-model="form.mobile" />
  13.                                 </u-form-item>
  14.                                 <u-line></u-line>
  15.                                 <u-gap height="50" bgColor="transparent"></u-gap>
  16.                                 <view class="u-font-40 c-font-bold">事件上报</view>
  17.                                 <view class="u-m-t-20">为推动问题的合适解决,请您的上报的信息保持真实、客观、明确!</view>

  18.                                 <u-form-item label="事件描述" required label-position="top" prop="content">
  19.                                         <u-input v-model="form.content" type="textarea" />
  20.                                 </u-form-item>
  21.                                 <u-form-item label="事件标签" required label-position="top" prop="labels">
  22.                                         <u-radio-group shape="square" v-model="form.labels">
  23.                                                 <u-radio v-for="(item, index) in vuex_config.labels" :key="index" :name="item">
  24.                                                         {{item}}
  25.                                                 </u-radio>
  26.                                         </u-radio-group>
  27.                                 </u-form-item>
  28.                                 <u-form-item label="发生地点" required label-position="top" prop="address">
  29.                                         <u-cell-item class="u-p-0" :border-bottom="false" icon="map-fill"
  30.                                                 :title="form.address ? form.address :'点击选择地点'" @click="chooseDizhi" value=""></u-cell-item>
  31.                                 </u-form-item>
  32.                                 <u-form-item label="添加图片" required label-position="top" prop="images">
  33.                                         <u-upload ref="uUpload" :action="vuex_config.upload.uploadurl" :file-list="imageList"
  34.                                                 :header="header" :form-data="formdata" @on-uploaded="successUpload" @on-error="errorUpload"
  35.                                                 @on-remove="removeUpload" :max-count="9"></u-upload>
  36.                                 </u-form-item>
  37.                                 <u-cell-item class="u-p-l-0 u-p-r-0" hover-class="none" icon="eye" :arrow="false" title="是否公开">
  38.                                         <u-switch slot="right-icon" size="40" v-model="form.isopen"></u-switch>
  39.                                 </u-cell-item>
  40.                                 <view class="u-p-t-50 u-p-b-50">
  41.                                         <u-button type="success" shape="circle" :ripple="true" @click="submit">提交</u-button>
  42.                                 </view>

  43.                         </view>
  44.                 </u-form>
  45.         </view>
  46. </template>
复制代码


然后修改对应的js代码,适当位置插入姓名和手机和位数判断,添加后代码如下:
  1. <script>
  2.         export default {
  3.                 data() {
  4.                         return {
  5.                                 form: {
  6.                                         username: '',
  7.                                         mobile: '',
  8.                                         content: '',
  9.                                         labels: '',
  10.                                         address: '',
  11.                                         lat: 0,
  12.                                         lng: 0,
  13.                                         images: null,
  14.                                         isopen: false
  15.                                 },
  16.                                 imageList: [],
  17.                                 header: {},
  18.                                 formdata: {},
  19.                                 rules: {
  20.                                         username: [{
  21.                                                 required: true,
  22.                                                 min: 2,
  23.                                                 message: '姓名不应低于2个字',
  24.                                                 trigger: 'blur,change'
  25.                                         }],
  26.                                         mobile: [{
  27.                                                         required: true,
  28.                                                         message: '请输入手机号',
  29.                                                         trigger: ['change', 'blur'],
  30.                                                 },
  31.                                                 {
  32.                                                         // 自定义验证函数,见上说明
  33.                                                         validator: (rule, value, callback) => {
  34.                                                                 // 上面有说,返回true表示校验通过,返回false表示不通过
  35.                                                                 // uni.$u.test.mobile()就是返回true或者false的
  36.                                                                 return uni.$u.test.mobile(value);
  37.                                                         },
  38.                                                         message: '手机号码不正确',
  39.                                                         // 触发器可以同时用blur和change
  40.                                                         trigger: ['change', 'blur'],
  41.                                                 }
  42.                                         ],
  43.                                         content: [{
  44.                                                 required: true,
  45.                                                 min: 10,
  46.                                                 message: '事件描述不少于10个字',
  47.                                                 trigger: 'blur,change'
  48.                                         }],
  49.                                         labels: [{
  50.                                                 required: true,
  51.                                                 message: '请选择事件标签',
  52.                                                 trigger: 'blur,change'
  53.                                         }],
  54.                                         address: [{
  55.                                                 required: true,
  56.                                                 message: '请选择地理位置',
  57.                                                 trigger: 'blur,change'
  58.                                         }],
  59.                                         images: [{
  60.                                                 required: true,
  61.                                                 message: '请上传图片',
  62.                                                 trigger: 'blur,change'
  63.                                         }]
  64.                                 },
  65.                         };
  66.                 },
  67.                 // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
  68.                 onReady() {
  69.                         this.$refs.uForm.setRules(this.rules);
  70.                         this.header = {
  71.                                 token: this.vuex_token || '',
  72.                                 uid: this.vuex_user.id || 0
  73.                         }
  74.                         let isObj = this.$u.test.object(this.vuex_config.upload.multipart)
  75.                         if (isObj) {
  76.                                 this.formdata = this.vuex_config.upload.multipart;
  77.                         }
  78.                 },
  79.                 methods: {
  80.                         submit() {
  81.                                 this.$refs.uForm.validate(valid => {
  82.                                         if (valid) {
  83.                                                 this.$refs.uUpload.upload();
  84.                                                 this.$u.api.submitReport(this.form).then(res => {
  85.                                                         this.$u.toast(res.msg);
  86.                                                         if (res.code) {
  87.                                                                 setTimeout(() => {
  88.                                                                         this.$u.route({
  89.                                                                                 type: 'redirectTo',
  90.                                                                                 url: '/pages/user/report/list'
  91.                                                                         })
  92.                                                                 }, 1500);
  93.                                                         }
  94.                                                 });
  95.                                         }
  96.                                 });
  97.                         },
  98.                         chooseDizhi() {
  99.                                 let that = this;
  100.                                 uni.chooseLocation({
  101.                                         success: function(res) {
  102.                                                 that.form['address'] = res.address;
  103.                                                 that.form['lat'] = res.latitude;
  104.                                                 that.form['lng'] = res.longitude;
  105.                                         },
  106.                                         fail: function(res) {
  107.                                                 uni.getSetting({
  108.                                                         success(setting) {
  109.                                                                 if (setting.authSetting != undefined && !setting.authSetting[
  110.                                                                                 'scope.userLocation']) {
  111.                                                                         uni.showModal({
  112.                                                                                 content: "检测到您没打开获取位置权限,是否去设置打开?",
  113.                                                                                 confirmText: "确认",
  114.                                                                                 cancelText: "取消",
  115.                                                                                 success: (modal) => {
  116.                                                                                         if (modal.confirm) {
  117.                                                                                                 uni.openSetting()
  118.                                                                                         }
  119.                                                                                 }
  120.                                                                         })
  121.                                                                 }
  122.                                                         }
  123.                                                 })
  124.                                         }
  125.                                 })
  126.                         },
  127.                         successUpload(e) {
  128.                                 this.uploadChanges(e)
  129.                         },
  130.                         removeUpload(index, lists, name) {
  131.                                 this.uploadChanges(lists)
  132.                         },
  133.                         errorUpload(e) {
  134.                                 this.$u.toast('上传失败了!');
  135.                         },
  136.                         uploadChanges(e) {
  137.                                 let urls = [];
  138.                                 e.map(item => {
  139.                                         //编辑时,已存在的,response不存在
  140.                                         if (!item.response) {
  141.                                                 urls.push(item.url)
  142.                                         } else if (item.response.code) {
  143.                                                 urls.push(item.response.data.url);
  144.                                         }
  145.                                 });
  146.                                 let value = urls.join(',');
  147.                                 this.form.images = value;
  148.                         },
  149.                 }
  150.         };
  151. </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文件。

在相应位置添加如下代码:
  1. {field: 'username', title: __('Username'), operate: 'LIKE'},
  2. {field: 'mobile', title: __('Mobile'), operate: 'LIKE'},
复制代码
在表格中增加“username”和“mobile”两显示列。

2.修改web后端Report.php文件。
用 “HBuilder X”编辑器, 打开 web根目录/application/admin/controller/keesuishoupai/Report.php文件。查找如下代码:
  1. $row->visible(['id','user_id','level','content','images','isopen','address','status','solvetime']);
复制代码

此段代码修改为:
  1. $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 文件。
在相应位置添加如下代码:
  1. <tr>
  2. <td>姓名</td>
  3. <td> {$row.username|htmlentities}</td>
  4. </tr>
  5. <tr>
  6. <td>手机号</td>
  7. <td> {$row.mobile|htmlentities}</td>
  8. </tr>
复制代码

4.修改web后端report.php文件。
用 “HBuilder X”编辑器, 打开 web根目录/application/admin/lang/zh-cn/keesuishoupai/report.php文件。
在相应位置添加如下代码:
  1. 'Username'       => '姓名',
  2. 'Mobile'         => '手机号',
复制代码





您需要登录后才可以回帖 登录 | 注册
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。