qingyiay
2023-07-12 f52085a9bc8c61cf7097426d7a6b2985d890da68
增加用户隐私协议,验质增加字段,优化ws
7个文件已修改
1个文件已添加
359 ■■■■ 已修改文件
App.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/publicInterface.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/driver-page/driver-index/bill-of-lading-details/weighDetail/weighDetail.vue 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/PrivacyAgreementText/PrivacyAgreementText.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/login.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/register/register.vue 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar-page/index-tabbar/index-tabbar.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
App.vue
@@ -10,17 +10,19 @@
        },
        onShow() {
            console.log('appvue显示');
            if (!this.globalisconnect && !this.globalisUploadimg) {
                this.$store.dispatch('websocketInit')
                this.changeisconnect(false);
                console.log('appvue的ws');
            if (!this.globalisconnect && !this.globalisUploadimg && this.globalisLogin) {
                if (!this.is_open_socket) {
                    this.$store.dispatch('websocketInit')
                    this.changeisconnect(false);
                    console.log('appvue的ws');
                }
            }
        },
        methods: {
            ...mapMutations(['changeisconnect'])
        },
        computed: {
            ...mapState(['globalisconnect', 'globalisUploadimg', 'globalisLogin'])
            ...mapState(['globalisconnect', 'globalisUploadimg', 'globalisLogin', 'is_open_socket'])
        }
    };
</script>
api/publicInterface.js
@@ -59,7 +59,9 @@
    idCard,
    carNo,
    carImg,
    drivingImg
    drivingImg,
    vehicleColour,
    bodyOfCarJpg
}) {
    uni.showLoading({ title: '加载中...' })
    return new Promise((resolve, reject) => {
pages.json
@@ -225,7 +225,16 @@
            }
        }
    ],
        ,{
            "path" : "pages/login/PrivacyAgreementText/PrivacyAgreementText",
            "style" :
            {
                "navigationBarTitleText": "",
                "enablePullDownRefresh": false
            }
        }
    ],
    "subPackages": [{
            "root": "pages/register",
            "pages": [{
pages/driver-page/driver-index/bill-of-lading-details/weighDetail/weighDetail.vue
@@ -68,6 +68,30 @@
                        v-model="item.num"></u--input>
                </view>
            </view>
            <view class="notice-num">
                <view class="num-text">
                    <u--text text=" 不合格品名"
                        size='32'></u--text>
                </view>
                <view class="num-input">
                    <u--input placeholder="请输入 不合格品名"
                        border="bottom"
                        clearable
                        v-model="item.unqualifiedBreed"></u--input>
                </view>
            </view>
            <view class="notice-num">
                <view class="num-text">
                    <u--text text=" 不合格重量"
                        size='32'></u--text>
                </view>
                <view class="num-input">
                    <u--input placeholder="请输入不合格重量"
                        border="bottom"
                        clearable
                        v-model="item.unqualifiedWeight"></u--input>
                </view>
            </view>
            <view class="level"
                v-if='!flag'>
                <view class=""
@@ -82,16 +106,29 @@
            </view>
            <view class="level"
                v-if='item.modifygoodsName||flag'>
                <view style="width: 220rpx;">
                    <u--text text="品名与规格修改"
                <view style="width: 200rpx;">
                    <u--text text="品名与规格"
                        size='32'></u--text>
                </view>
                <view v-if="showWeighCopy[i].modifyProductName||item.breed&&item.spec">
                    <u-tag :text="!flag?showWeighCopy[i].modifyProductName:item.breed+item.spec"
                        v-if="showWeighCopy[i].modifyProductName"
                        plain
                        @click="productNamePopoverShow(i)"></u-tag>
                </view>
            </view>
            <view class=""
                style="margin-top: 8rpx;">
                <u-upload :fileList="item.fileList"
                    deletable
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :name="i"
                    multiple
                    :maxCount="4"
                    width="250"
                    height="150"
                    :previewFullImage="true">
                </u-upload>
            </view>
            <!-- 物资明细 -->
            <u-action-sheet :actions="goodsList"
@@ -123,6 +160,7 @@
</template>
<script>
    import { BaseUrl } from '@/api/publicInterface.js';
    import { onlineurl } from '@/api/request.js'
    export default {
        data() {
@@ -147,26 +185,23 @@
                havedInput: false,
                flag: false,
                orderCode: null,
                modifyProductName: null,
                // 是否修改
                isModify: false
                isModify: false,
                // 上传图片
                fileList1: [],
            };
        },
        computed: {
            roleType() {
                return uni.getStorageSync('roleType')
            }
            },
        },
        onLoad(params) {
            this.orderPlanId = params.orderPlanId ? params.orderPlanId : ''
            this.flag = params.flag ? params.flag : false
        },
        onShow() {
            this.orderPlanId = params.orderPlanId ? params.orderPlanId : '';
            this.flag = params.flag ? params.flag : false;
            this.roleType === 1 ? this.GetOrderPlan() : this.getTakeCoal()
            if (this.orderCode) {
                this.getMaterialDetailByOrderCode()
            }
            this.getJcProductList()
        },
        methods: {
@@ -184,8 +219,8 @@
                            return {
                                ...v,
                                modifyProductName: '',
                                modifygoodsName: ''
                                modifygoodsName: '',
                                fileList: []
                            }
                        })
                        this.showWeighCopy = JSON.parse(JSON.stringify(this.showWeigh))
@@ -240,7 +275,9 @@
                    return {
                        ...v,
                        breed: this.showWeighCopy[i].modifyProductName ? this.showWeighCopy[i].breed : v.breed,
                        spec: this.showWeighCopy[i].modifyProductName ? this.showWeighCopy[i].spec : v.spec
                        spec: this.showWeighCopy[i].modifyProductName ? this.showWeighCopy[i].spec : v.spec,
                        inspectionJpg: v.fileList.join(',')
                    }
                })
                this.$reqPost('updateTmTaskCoalItem', this.showWeigh, 'json').then(
@@ -296,7 +333,52 @@
            discountInputHandle(value, index, clean) {
                this.showWeigh[index].cinderWeight = Number(value)
                this.showWeigh[index].weight = (clean - (Number(value)).toFixed(2));
            }
            },
            // 删除图片
            deletePic(event) {
                this.showWeigh[event.name].fileList.splice(event.index, 1);
                // this[`fileList${event.name}`].splice(event.index, 1);
            },
            // 新增图片
            async afterRead(event) {
                // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
                let lists = [].concat(event.file);
                let fileListLen = this.showWeigh[event.name].fileList.length;
                lists.map(item => {
                    this.showWeigh[event.name].fileList.push({
                        ...item,
                        status: 'uploading',
                        message: '上传中'
                    });
                });
                for (let i = 0; i < lists.length; i++) {
                    const result = await this.uploadFilePromise(lists[i].url, event.name);
                    let item = this.showWeigh[event.name].fileList[fileListLen];
                    this.showWeigh[event.name].fileList.splice(
                        fileListLen,
                        1,
                        Object.assign(item, {
                            status: 'success',
                            message: '上传成功',
                            url: result
                        })
                    );
                    fileListLen++;
                }
            },
            uploadFilePromise(url, num) {
                return new Promise((resolve, reject) => {
                    let a = uni.uploadFile({
                        url: BaseUrl + '/admin/sys-file/uploadUnToken',
                        filePath: url,
                        name: 'file',
                        formData: {},
                        success: res => {
                            resolve(`${BaseUrl}${JSON.parse(res.data).data.url}`);
                        }
                    });
                });
            },
        },
    }
</script>
pages/login/PrivacyAgreementText/PrivacyAgreementText.vue
New file
@@ -0,0 +1,123 @@
<template>
    <view class="main">
        <view class="title">
            隐私协议
        </view>
        <view class="illustrate">
            欢迎使用无人值守小程序。我们非常重视您的隐私,因此制定了以下隐私政策,以明确说明我
            们如何收集、使用和保护您的个人信息。请您在使用我们的应用程序前仔细阅读和理解以下
            隐私政策:
        </view>
        <view class="">
            <h2 class="section">1.个人信息的收集和使用</h2>
            <p class="section-detail">
                当您使用我们的应用程序时,我们需要收集您的一些个人信息,包括但不限于以下内容</p>
            <ul class="section-detail">
                <li style="color: rgb(84, 84, 84);font-weight: bold;">
                    1.1&nbsp;&nbsp;用户账户信息:用于用户注册、登录和个人信息管理,包括用户名、密码、和电话号码等。</li>
                <li>1.2&nbsp;&nbsp;用户的个人信息:包括但不限于用户的<text
                        style="color: rgb(84, 84, 84);font-weight: bold;">姓名、地址、出生日期、性别、身份证号码
                    </text>等,这些信息可以帮助我们更好地提供商品和服务</li>
                <li>1.3&nbsp;&nbsp;设备信息:我们需要访问您的设备信息,包括设备型号、操作系统版本、唯一设备
                    标识符等,以便我们更好地为您提供服务。</li>
                <li>1.4&nbsp;&nbsp;位置信息:我们需要获取您的位置信息,以便我们可以更好地为您提供服务</li>
                <li>1.5&nbsp;&nbsp;网络信息:我们需要收集一些与您的互联网连接有关的信息,<text
                        style="color: rgb(84, 84, 84);font-weight: bold;">包括但不限于您的IP
                        地址、浏览器类型、ISP等</text></li>
                <li>1.6&nbsp;&nbsp;相机和相册权限:我们需要访问您的相机和相册权限,以便您可以拍照、上传照片
                    等,以便我们更好地为您提供服务。</li>
            </ul>
        </view>
        <view class="">
            <h2 class="section">2.个人信息的使用和分享</h2>
            <p class="section-detail">2.1&nbsp;&nbsp;我们收集您的个人信息主要是为了向您提供更好的服务和优化您的使用体验。我们会严格保
                护您的个人信息,并不会将您的个人信息出售给第三方。我们可能会将您的个人信息分享给
                我们的关联公司或服务提供商,以便为您提供更好的服务。
                除非法律法规另有规定,否则我们不会将您的个人信息用于任何其他用途,也不会将您的个
                人信息透露给任何第三方。</p>
        </view>
        <view class="">
            <h2 class="section">3.个人信息的安全保护</h2>
            <view class="section-detail">
                <p>3.1&nbsp;&nbsp;我们会采取一定的安全措施来保护您的个人信息不被未经授权的访问、使用或泄露。我们将
                    使用技术措施和管理措施来确保您的个人信息的安全性。</p>
                <p>3.2&nbsp;&nbsp;我们会采取以下安全措施来保护您的个人信息:</p>
                <p>3.3&nbsp;&nbsp;我们会对您的个人信息进行加密处理,以保障信息的安全性</p>
                <p>3.4&nbsp;&nbsp;我们会定期检查我们的系统,以确保您的个人信息不会遭到未经授权的访问、使用或泄露。</p>
                <p>3.5&nbsp;&nbsp;我们会限制访问您个人信息的人员范围,并要求这些人员遵守保密义务</p>
                <p>我们会采用防火墙、反病毒软件和其他安全措施,以保护我们的系统和您的个人信息不受到
                    恶意攻击和病毒感染。</p>
                <p>3.6&nbsp;&nbsp;尽管我们已经采取了相应的安全措施来保护您的个人信息,但由于技术限制和风险,我们不
                    能保证您的个人信息不会被未经授权的访问、使用或泄露。在发生此类事件时,我们将采取
                    适当的措施来减少损失。</p>
            </view>
        </view>
        <view class="">
            <h2 class="section">4.年龄限制</h2>
            <p class="section-detail">
                4.1&nbsp;&nbsp;我们的应用程序只适用于年满18岁的用户。如果您未满18岁,请不要使用我们的应用程序。
                如果我们发现您是未满18岁的用户,我们将立即删除您的个人信息。
            </p>
        </view>
        <view class="">
            <h2 class="section">5.隐私政策的修改</h2>
            <p class="section-detail">
                5.1&nbsp;&nbsp;我们可能会根据需要更新或修改本隐私政策。如果我们对本隐私政策进行了重大更改,我们
                将在应用程序中发布通知或以其他方式通知您。在我们发布修改通知后,您继续使用我们的
                应用程序,即表示您同意接受修改后的隐私政策
            </p>
        </view>
        <view class="">
            <h2 class="section">6.联系我们</h2>
            <p class="section-detail">
                6.1&nbsp;&nbsp;如果您对本隐私政策有任何疑问或意见,请通过应用程序内的联系方式与我们联系。我们将
                尽快回复您并解决您的问题。
            </p>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            }
        },
        methods: {
        }
    }
</script>
<style lang="scss"
    scoped>
    .main {
        margin: 18rpx;
        padding-bottom: 30rpx;
        letter-spacing: 4rpx;
        .title {
            width: 100%;
            text-align: center;
            margin: 0 auto;
            font-size: 56rpx;
            font-weight: bold;
            color: rgb(84, 84, 84);
        }
        .illustrate {
            margin-bottom: 20rpx;
        }
        .section {
            font-size: 40rpx;
            color: rgb(84, 84, 84);
            font-weight: bold;
        }
        .section-detail {
            color: rgb(83, 83, 83);
        }
    }
</style>
pages/login/login.vue
@@ -57,6 +57,21 @@
                @confirm="bindWxConfirm"
                @cancel="bindWxCancel"></u-modal>
        </view>
        <!-- 注册同意获取隐私信息 -->
        <view class="privacy">
            <u-modal :show="privacyShow"
                :title="privacyTitle"
                showCancelButton
                @confirm="privacyConfirm"
                @cancel="privacyCancel"
                confirmText="同意"
                cancelText="不同意">
                <view class="slot-content"
                    @click="PrivacyAgreementHandle">
                    <rich-text :nodes="PrivacyAgreement"></rich-text>
                </view>
            </u-modal>
        </view>
    </view>
</template>
@@ -75,7 +90,10 @@
                bindWxModelTitle: '提示',
                bindWxContent: '如果已拥有系统账号,可以直接跳转绑定微信页面',
                appid: "",
                secret: ""
                secret: "",
                privacyShow: false,
                privacyTitle: "注意",
                PrivacyAgreement: `<p>注册即代表您同意我们用户隐私协议</p><p  class='PrivacyAgreement'>点击查看用户隐私协议</p>`
            };
        },
        components: {
@@ -169,12 +187,23 @@
            openPopup() {
                console.log('打开了');
            },
            registerClick() {
            privacyConfirm() {
                uni.navigateTo({
                    url: '/pages/register/register'
                });
            },
            // 此方法只进行绑定测试,后期通过扫码解决
            privacyCancel() {
                this.privacyShow = false
            },
            registerClick() {
                this.privacyShow = true
            },
            PrivacyAgreementHandle() {
                uni.navigateTo({
                    url: '/pages/login/PrivacyAgreementText/PrivacyAgreementText'
                })
            },
            // 此方法只进行绑定测试,已经通过扫码解决
            jumpBindBack() {
                uni.navigateTo({
                    url: '/pages/bindBackground/bindBackground'
@@ -187,6 +216,10 @@
<style lang="scss">
    @import 'index.scss';
    .PrivacyAgreement {
        color: rgb(60, 156, 255)
    }
    .login {
        // height: 100vh;
        // display: flex;
pages/register/register.vue
@@ -120,8 +120,25 @@
                        width="250"
                        height="150"
                        :previewFullImage="true">
                        <!-- <image src="https://cdn.uviewui.com/uview/demo/upload/positive.png"
                        mode="widthFix" style="width: 250px;height: 150px;"></image> -->
                    </u-upload>
                </u-form-item>
                <u-form-item prop="bodyOfCarJpg"
                    label="车辆细节照片"
                    labelWidth="20%"
                    borderBottom
                    v-if="radiovalue1 == '司机'"
                    required
                    @click="beforeRead">
                    <u-upload :fileList="fileList3"
                        deletable
                        @afterRead="afterRead"
                        @delete="deletePic"
                        name="3"
                        multiple
                        :maxCount="3"
                        width="250"
                        height="150"
                        :previewFullImage="true">
                    </u-upload>
                </u-form-item>
                <u-form-item prop="drivingImg"
@@ -141,8 +158,6 @@
                        width="250"
                        height="150"
                        :previewFullImage="true">
                        <!-- <image src="https://cdn.uviewui.com/uview/demo/upload/positive.png"
                        mode="widthFix" style="width: 250px;height: 150px;"></image> -->
                    </u-upload>
                </u-form-item>
                <u-form-item label="推荐人账号"
@@ -175,8 +190,7 @@
</template>
<script>
    import { apiRegister } from '@/api/publicInterface.js';
    import { BaseUrl } from '@/api/publicInterface.js';
    import { apiRegister, BaseUrl } from '@/api/publicInterface.js';
    import { mapMutations } from 'vuex';
    export default {
        // onLoad: function() {
@@ -197,14 +211,10 @@
        // 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
        onReady() {
            this.$refs.regesterFormRef.setRules(this.rules);
            // this.$refs.regesterFormRef.validate().then(res => {}).catch(err => {
            //   console.log(err);
            // })
        },
        onLoad(params) {
            if (params) {
                this.registerFormModel.openId = params.code;
                console.log('页面加载', this.registerFormModel.openId);
            }
        },
        data() {
@@ -225,10 +235,13 @@
                    drivingImg: '',
                    tuiJianMa: '',
                    confirmPassword: '',
                    vehicleColour: ''
                    vehicleColour: '',
                    bodyOfCarJpg: ''
                },
                fileList1: [],
                fileList2: [],
                fileList3: [],
                carBody: [],
                rules: {
                    name: {
                        type: 'string',
@@ -317,6 +330,12 @@
                        message: '请上传车辆图片',
                        trigger: ['blur', 'change']
                    },
                    bodyOfCarJpg: {
                        type: 'string',
                        required: true,
                        message: '请上传车辆图片',
                        trigger: ['blur', 'change']
                    },
                    drivingImg: {
                        type: 'string',
                        required: true,
@@ -340,10 +359,13 @@
                    },
                    {
                        name: '绿色',
                        disabled: 'lvse'
                        value: 'lvse'
                    },
                    {
                        name: '蓝色',
                        value: 'lanse'
                    }
                ],
                radiovalue2: '黄色',
                beforeChangeValue: '',
                // 更换角色弹框
                editRoleModelShow: false,
@@ -483,6 +505,11 @@
                            } else if (num == 2) {
                                this.registerFormModel.drivingImg = JSON.parse(res.data).data.url;
                                resolve(`${BaseUrl}${JSON.parse(res.data).data.url}`);
                            } else if (num == 3) {
                                let imageUrl = JSON.parse(res.data).data.url
                                this.carBody.push(imageUrl)
                                this.registerFormModel.bodyOfCarJpg = this.carBody.join(',')
                                resolve(`${BaseUrl}${JSON.parse(res.data).data.url}`);
                            }
                        }
                    });
pages/tabbar-page/index-tabbar/index-tabbar.vue
@@ -155,6 +155,7 @@
                        } else {
                            this.changeinfraredStatus(false);
                            this.changeWeigh(nowWeighObj.weigh);
                            let warningState = nowWeighObj.warning == 1
                            this.changeWarning(warningState)
                        }
                    }