diff --git a/gasStation-uni/api/login.js b/gasStation-uni/api/login.js
new file mode 100644
index 000000000..ef9d46b0c
--- /dev/null
+++ b/gasStation-uni/api/login.js
@@ -0,0 +1,47 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ const data = {
+ username,
+ password,
+ code,
+ uuid
+ }
+ return request({
+ 'url': '/login',
+ headers: {
+ isToken: false
+ },
+ 'method': 'post',
+ 'data': data
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ 'url': '/getInfo',
+ 'method': 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ 'url': '/logout',
+ 'method': 'post'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ 'url': '/captchaImage',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
diff --git a/gasStation-uni/api/system/user.js b/gasStation-uni/api/system/user.js
new file mode 100644
index 000000000..d9614079b
--- /dev/null
+++ b/gasStation-uni/api/system/user.js
@@ -0,0 +1,41 @@
+import upload from '@/utils/upload'
+import request from '@/utils/request'
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: '/system/user/profile/updatePwd',
+ method: 'put',
+ params: data
+ })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+ return request({
+ url: '/system/user/profile',
+ method: 'get'
+ })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+ return request({
+ url: '/system/user/profile',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+ return upload({
+ url: '/system/user/profile/avatar',
+ name: data.name,
+ filePath: data.filePath
+ })
+}
diff --git a/gasStation-uni/config.js b/gasStation-uni/config.js
new file mode 100644
index 000000000..1db645be2
--- /dev/null
+++ b/gasStation-uni/config.js
@@ -0,0 +1,29 @@
+// 应用全局配置
+module.exports = {
+ // baseUrl: 'https://vue.ruoyi.vip/prod-api',
+ baseUrl: 'http://192.168.0.196:8081/',
+ // baseUrl: 'http://192.168.1.5:8002/cdJdc',
+
+ imagesUrl: 'http://www.nuoyunr.com/lananRsc',
+ // 应用信息
+ appInfo: {
+ // 应用名称
+ name: "ruoyi-app",
+ // 应用版本
+ version: "1.1.0",
+ // 应用logo
+ logo: "http://www.nuoyunr.com/lananRsc/logo.png'",
+ // 官方网站
+ site_url: "http://ruoyi.vip",
+ // 政策协议
+ agreements: [{
+ title: "隐私政策",
+ url: "https://ruoyi.vip/protocol.html"
+ },
+ {
+ title: "用户服务协议",
+ url: "https://ruoyi.vip/protocol.html"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/gasStation-uni/package.json b/gasStation-uni/package.json
new file mode 100644
index 000000000..ffb1f8c80
--- /dev/null
+++ b/gasStation-uni/package.json
@@ -0,0 +1,10 @@
+{
+ "dependencies": {
+ "@dcloudio/uni-ui": "^1.4.28",
+ "uview-ui": "^2.0.36"
+ },
+ "devDependencies": {
+ "sass": "^1.69.5",
+ "sass-loader": "^10.4.1"
+ }
+}
diff --git a/gasStation-uni/pages/index/index.vue b/gasStation-uni/pages/index/index.vue
index ec5a238df..161982e31 100644
--- a/gasStation-uni/pages/index/index.vue
+++ b/gasStation-uni/pages/index/index.vue
@@ -90,6 +90,9 @@
一键加油
+
+
+
diff --git a/gasStation-uni/request/index.js b/gasStation-uni/request/index.js
new file mode 100644
index 000000000..63015bbf3
--- /dev/null
+++ b/gasStation-uni/request/index.js
@@ -0,0 +1,42 @@
+// 同时发送异步代码的次数
+let ajaxTimes = 0;
+export const request = (params) => {
+ var openid = wx.getStorageSync("openid") || '';
+ let header = {
+ ...params.header
+ };
+
+ let urls;
+ if (params.url.indexOf('?')) {
+ urls = params.url
+ } else {
+ urls = params.url
+ }
+
+
+
+ // 定义公共的url
+ // const baseUrl="https://jfsc.lmweixin.com/";
+ const baseUrl = "http://192.168.1.159:8080/";
+ return new Promise((resolve, reject) => {
+ wx.request({
+ ...params,
+ header: header,
+
+ url: baseUrl + urls,
+ success: (result) => {
+ resolve(result.data);
+ },
+ fail: (err) => {
+ reject(err);
+ },
+ complete: () => {
+ ajaxTimes--;
+ if (ajaxTimes === 0) {
+ // 关闭正在等待的图标
+ wx.hideLoading();
+ }
+ }
+ });
+ })
+}
\ No newline at end of file
diff --git a/gasStation-uni/uni.scss b/gasStation-uni/uni.scss
index 1c39e7248..8a438a325 100644
--- a/gasStation-uni/uni.scss
+++ b/gasStation-uni/uni.scss
@@ -19,7 +19,6 @@ $uni-color-primary: #007aff;
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;
-
/* 文字基本颜色 */
$uni-text-color:#333;//基本色
$uni-text-color-inverse:#fff;//反色
diff --git a/gasStation-uni/utils/auth.js b/gasStation-uni/utils/auth.js
new file mode 100644
index 000000000..9a7cc04c5
--- /dev/null
+++ b/gasStation-uni/utils/auth.js
@@ -0,0 +1,13 @@
+const TokenKey = 'App-Token'
+
+export function getToken() {
+ return uni.getStorageSync(TokenKey)
+}
+
+export function setToken(token) {
+ return uni.setStorageSync(TokenKey, token)
+}
+
+export function removeToken() {
+ return uni.removeStorageSync(TokenKey)
+}
diff --git a/gasStation-uni/utils/common.js b/gasStation-uni/utils/common.js
new file mode 100644
index 000000000..00d4137d5
--- /dev/null
+++ b/gasStation-uni/utils/common.js
@@ -0,0 +1,54 @@
+/**
+* 显示消息提示框
+* @param content 提示的标题
+*/
+export function toast(content) {
+ uni.showToast({
+ icon: 'none',
+ title: content
+ })
+}
+
+/**
+* 显示模态弹窗
+* @param content 提示的标题
+*/
+export function showConfirm(content) {
+ return new Promise((resolve, reject) => {
+ uni.showModal({
+ title: '提示',
+ content: content,
+ cancelText: '取消',
+ confirmText: '确定',
+ success: function(res) {
+ resolve(res)
+ }
+ })
+ })
+}
+
+/**
+* 参数处理
+* @param params 参数
+*/
+export function tansParams(params) {
+ let result = ''
+ for (const propName of Object.keys(params)) {
+ const value = params[propName]
+ var part = encodeURIComponent(propName) + "="
+ if (value !== null && value !== "" && typeof (value) !== "undefined") {
+ if (typeof value === 'object') {
+ for (const key of Object.keys(value)) {
+ if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
+ let params = propName + '[' + key + ']'
+ var subPart = encodeURIComponent(params) + "="
+ result += subPart + encodeURIComponent(value[key]) + "&"
+ }
+ }
+ } else {
+ result += part + encodeURIComponent(value) + "&"
+ }
+ }
+ }
+ return result
+}
\ No newline at end of file
diff --git a/gasStation-uni/utils/constant.js b/gasStation-uni/utils/constant.js
new file mode 100644
index 000000000..8becd84fa
--- /dev/null
+++ b/gasStation-uni/utils/constant.js
@@ -0,0 +1,8 @@
+const constant = {
+ avatar: 'vuex_avatar',
+ name: 'vuex_name',
+ roles: 'vuex_roles',
+ permissions: 'vuex_permissions'
+ }
+
+ export default constant
diff --git a/gasStation-uni/utils/errorCode.js b/gasStation-uni/utils/errorCode.js
new file mode 100644
index 000000000..d2111ee10
--- /dev/null
+++ b/gasStation-uni/utils/errorCode.js
@@ -0,0 +1,6 @@
+export default {
+ '401': '认证失败,无法访问系统资源',
+ '403': '当前操作没有权限',
+ '404': '访问资源不存在',
+ 'default': '系统未知错误,请反馈给管理员'
+}
diff --git a/gasStation-uni/utils/permission.js b/gasStation-uni/utils/permission.js
new file mode 100644
index 000000000..17969f2f1
--- /dev/null
+++ b/gasStation-uni/utils/permission.js
@@ -0,0 +1,51 @@
+import store from '@/store'
+
+/**
+ * 字符权限校验
+ * @param {Array} value 校验值
+ * @returns {Boolean}
+ */
+export function checkPermi(value) {
+ if (value && value instanceof Array && value.length > 0) {
+ const permissions = store.getters && store.getters.permissions
+ const permissionDatas = value
+ const all_permission = "*:*:*"
+
+ const hasPermission = permissions.some(permission => {
+ return all_permission === permission || permissionDatas.includes(permission)
+ })
+
+ if (!hasPermission) {
+ return false
+ }
+ return true
+ } else {
+ console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
+ return false
+ }
+}
+
+/**
+ * 角色权限校验
+ * @param {Array} value 校验值
+ * @returns {Boolean}
+ */
+export function checkRole(value) {
+ if (value && value instanceof Array && value.length > 0) {
+ const roles = store.getters && store.getters.roles
+ const permissionRoles = value
+ const super_admin = "admin"
+
+ const hasRole = roles.some(role => {
+ return super_admin === role || permissionRoles.includes(role)
+ })
+
+ if (!hasRole) {
+ return false
+ }
+ return true
+ } else {
+ console.error(`need roles! Like checkRole="['admin','editor']"`)
+ return false
+ }
+}
\ No newline at end of file
diff --git a/gasStation-uni/utils/privacyPolicy.js b/gasStation-uni/utils/privacyPolicy.js
new file mode 100644
index 000000000..df3caf494
--- /dev/null
+++ b/gasStation-uni/utils/privacyPolicy.js
@@ -0,0 +1,347 @@
+let str = `
+
+ ASD隐私政策
+
+
+ 生效日期:2023年5月1日
+
+
+ ASD(以下或称“我们”)非常注重保护用户(“您”)的个人信息及隐私,我们深知个人信息对您的重要性,并将按照法律法规要求和业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。我们希望通过本隐私政策向您清晰地介绍在使用我们的产品/服务时,我们如何处理您的个人信息,以及我们为您提供的访问、更正、删除和保护这些信息的方式。
+
+
+ 本政策将帮助您了解以下内容:
+
+
+ 一、我们如何收集和使用您的个人信息
+
+
+ 二、我们如何共享、转让、公开披露您的个人信息
+
+
+ 三、我们如何保存和保护您的个人信息
+
+
+ 四、您如何管理您的个人信息
+
+
+ 五、通知和修订
+
+
+ 六、如何联系我们
+
+
+
+
+
+ 【特别提示】请您在使用我们提供的各项产品/服务前,仔细阅读并充分理解本《隐私政策》(重点内容我们已将字体加粗请您特别关注)并作出相应选择。一旦您使用或继续使用我们的产品/服务时,即意味着您同意我们按照本隐私政策处理您的相关信息。
+
+
+ 如对本隐私政策有任何疑问,您可以通过本隐私政策“如何联系我们”中提供的方式与我们联系)。
+
+
+ ASD的产品/服务是由***有限公司(注册地址:***)及其关联方提供者通过下述途径向您提供的产品/服务:包括但不限于ASD小程序等。针对某些特定的产品/服务,我们还将制定单独的隐私政策,向您说明这些产品/服务的特殊政策。如相关特定的隐私政策与本隐私政策有不一致之处,适用该特定隐私政策。
+
+
+ 本政策所称的ASD及其关联方是指***有限公司的相关关联公司的单称或合称。
+
+
+ 请您注意,本政策不适用于您通过我们的产品/服务而接入的其他第三方产品/服务(“其他第三方”,包括您的交易相对方、任何第三方网站以及第三方服务提供者等),具体规定请参照该第三方的隐私政策或类似声明。
+
+
+ 一、我们如何收集和使用您的个人信息
+
+
+ 在您使用我们的产品/服务时,您需要/可以选择授权我们收集和使用个人信息的场景包括:
+
+
+ 1、为了向您提供我们产品/服务的基本功能,您需要授权我们收集、使用必要信息的情形,如您拒绝提供必要信息,您将无法正常使用我们的产品/服务;
+
+
+ 2、为了向您提供我们产品/服务的拓展功能,您可以选择授权我们收集、使用信息的情形,如您拒绝提供前述信息,您将无法正常使用相关附加功能或无法实现我们拟达到的功能效果,但并不会影响您正常使用我们产品/服务的基本功能。
+
+
+ (一)您需要授权我们收集和使用个人信息的场景
+
+
+ 我们会遵循正当、合法、必要的原则,出于本政策所述的下列目的收集和使用您的个人信息。
+
+
+ 1、帮助您成为我们的用户
+
+
+ 为遵守法律法规的要求,以及向您提供更便捷的服务,在您注册成为ASD用户时,您需要至少提供手机号码以创建ASD账号,并完善相关的网络身份识别信息(如头像、昵称及登录密码等);如果您仅需使用浏览等功能,您无需注册成为我们的用户以及提供上述信息。
+
+
+ 2、向您提供基于地理位置的信息展示
+
+
+ 为了向您提供周边商家及周边抽奖活动,提升我们的服务表现、效率和功能,经您授权我们会收集您在使用我们服务过程中产生的相关信息,包括:
+
+
+ (1)位置信息。当您通过系统授权开启移动设备的定位功能并使用基于位置提供的服务时,我们会收集和使用您的位置信息以便为您推荐周边的服务(例如您不需要手动输入所在地理位置就可获得相关服务,估算商家与您之间的实际距离方便您进行消费决策,为您推荐附近的服务品类和优惠信息等)。我们会使用GPS技术获取您的位置信息(准确度会有所不同) 。您可以在移动设备的系统中关闭定位服务停止我们对您所在位置信息的收集,但可能因此无法使用我们基于地理位置为您提供的服务,或者无法达到相关服务的预期效果。
+
+
+ (2)日志信息。当您使用我们提供的产品/服务时,我们会收集您的交易、分享等信息并作为有关网络日志进行保存,其中包括您的访问日期和时间、网络请求等。
+
+
+ 3、为您提供绑定儿童的功能
+
+
+ 您在ASD上使用绑定儿童服务时,您需要根据所选择的服务类型提供联系人信息(姓名、性别、电话号码等)、地址信息等。
+
+
+ 您可能需要根据有关法律规定和相关方要求提供您的实名身份信息(包括但不限于您的身份证、军官证、护照、驾驶证、学生证等载明您身份的证件照片、复印件、号码等)、联系人信息(姓名、性别、电话号码等)等。
+
+
+ 您在ASD上做的测试信息属于敏感信息,请您谨慎向他人展示或对外提供。
+
+
+ 4、为您提供设备推荐功能
+
+
+ 当您在ASD上测试完成后,您需要提供地址信息等,以便于您查看附近的设备。
+
+
+ 5、帮助您完成支付
+
+
+ 您在ASD上进行订单支付时,您可以选择微信支付进行支付。我们需要收集您的ASD对账信息及其他法律要求的必要信息并与这些合作机构共享,以确认您的支付指令并帮助您完成支付。
+
+
+ (二)您可以选择授权我们收集和使用个人信息的场景
+
+
+ 为向您提供个性化、便捷的服务,您可以选择使用我们提供的拓展功能,我们会在符合法律规定并根据您具体授权的情况下收集并使用如下信息。这类信息将在您选择的具体功能和业务场景中进行收集,如果您不提供这些信息,不会影响您使用基本功能。
+
+
+ 1、基于运动与健身授权的拓展功能
+
+
+ 当您使用步数统计、走路抽奖等功能时,我们会申请获取您的运动与健身权限。在您开启相关权限后,我们会访问您的运动与健身权限,帮助您完成步数统计、走路抽奖等功能。拒绝授权将无法使用上述服务,但不会影响ASD其他功能的正常使用。
+
+
+ (三)征得同意的例外
+
+
+ 请您知悉,以下情形中,我们收集、使用个人信息无需征得您的授权同意:
+
+
+ 1、为订立、履行个人作为一方当事人的合同所必需,或者按照依法制定的劳动规章制度和依法签订的集体合同实施人力资源管理所必需;
+
+
+ 2、为履行法定职责或者法定义务所必需;
+
+
+ 3、为应对突发公共卫生事件,或者紧急情况下为保护自然人的生命健康和财产安全所必需;
+
+
+ 4、为公共利益实施新闻报道、舆论监督等行为,在合理的范围内处理个人信息;
+
+
+ 5、依照本法规定在合理的范围内处理个人自行公开或者其他已经合法公开的个人信息;
+
+
+ 6、法律法规规定的其他情形。
+
+
+ 请注意,单独或与其他信息相结合无法识别您的身份或者与您直接建立联系的信息,不属于个人信息。如果我们将单独无法与任何特定个人建立联系的信息与其他信息结合用于识别自然人个人身份,或者将其与个人信息结合使用,则在结合使用期间,此类信息将被视为个人信息。
+
+
+ (四)个人信息的使用规则
+
+
+ 为满足您的个性化需求,维护、改进我们的产品或服务质量,我们会在符合法律规定并根据您具体授权的情况下使用如下信息:
+
+
+ 1、我们可能会收集您的订单信息、位置信息等,以及将您在ASD上使用某项服务中提供的信息与来自其他服务中的信息结合起来,进行综合统计、分析以形成用户画像,
+
+
+ 2、我们可能会收集您在参与产品/服务调查时主动向我们提供的信息,以及您与我们的关联方、合作伙伴之间互动时提供的相关信息,以便于您追踪订单情况以及我们优化客户服务的质量与流程。
+
+
+ 3、我们可能将业务中收集的个人信息用于统计分析和改进运营,将已经去标识化无法识别您身份且不能复原的信息用于建立数据库并进行商业化利用。例如通过您所在的位置、偏好等进行统计分析,从而改进我们的产品、服务或营销计划;又如为改进我们系统而进行的技术改造、网络维护、故障排除、内部政策与流程制定、生成内部报告等。
+
+
+ (五)设备权限调用
+
+
+ 为确保相关业务功能的正常实现,我们需要根据具体的使用场景调用对应的必要权限,并在调用前向您弹窗询问
+
+
+ 您可以在设备的设置中选择关闭部分或者全部权限,这可能导致对应的业务功能无法实现或者无法达到预期效果。
+
+
+ 三、我们如何共享、转让、公开披露您的个人信息
+
+
+ (一)共享
+
+
+ 在我们向您提供产品/服务时,我们会采取严格的安全措施,由我们所完成的产品/服务中我们不会与ASD以外的任何公司、组织和个人共享您的个人信息。但请您知悉,我们提供的产品/服务大多是无法单独完成的,因此我们可能会与我们的关联公司以及其他合作商等第三方共享或委托其处理您的部分个人信息,以保障和优化我们为您提供的产品/服务,此类情况包括:
+
+
+ 1、提供平台服务。我们可能会作为电子商务平台向您提供产品/服务,如您在我们的平台上使用商家或其他合作方提供的产品/服务,我们可能会与相应产品/服务的提供方共享您的必要个人信息,以便于您能够正常使用相应的浏览、交易、支付等功能。
+
+
+ 2、提供统一管理服务。如您使用我们的账号登录和使用我们关联公司和其他第三方所提供的产品/服务,我们可能会共享您的个人信息。我们只会共享必要的个人信息以便向您提供一致化的服务和统一管理,例如在我们的产品/服务内查看订单并进行管理,如果我们共享您的个人敏感信息或者关联方改变个人信息的使用目的,将再次征求您的授权同意。
+
+
+ 3、提供必要的合作服务。仅为实现本政策中声明的目的,我们的某些服务将由业务合作伙伴提供。为保障为您提供的服务顺利完成,我们可能会将您的个人信息共享给我们的合作伙伴,包括配送业务、技术服务、支付服务、金融业务服务等的供应商、服务合作商、第三方商家等,其中可能包括您的联络信息、订单信息、支付信息、地址信息等。
+
+
+ 4、除了上述情况外,我们如果对其他任何公司、组织和个人共享您的个人信息,会再次征求您的明确同意或授权。
+
+
+ 请您知悉,我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,对我们仅为实现本政策中声明的目的与之共享个人信息的公司、组织和个人,我们会与其签署严格的信息保护和保密协定,要求他们遵守协议并采取相关的安全措施来保护您的个人信息。
+
+
+ (二)转让
+
+
+ 随着我们业务的发展,我们及我们的关联方有可能进行合并、收购、重组、资产转让或类似的交易,如涉及个人信息的转让,我们会要求受让您个人信息的公司、组织继续接受本隐私政策的约束,否则,我们将要求该公司、组织重新征求您的授权同意。
+
+
+ 除了上述情况,我们不会未经您的明确同意将您的个人信息进行转让。
+
+
+ (三)公开披露
+
+
+ 我们仅会在以下情况下,且采取符合业界标准的安全防护措施的前提下,才可能公开披露您的个人信息:
+
+
+ 1、根据您的需求,在您明确同意的披露方式下披露您所指定的个人信息;
+
+
+ 2、根据法律、法规的要求、强制性的行政执法或司法要求所必须提供您个人信息的情况下,我们可能会依据所要求的个人信息类型和披露方式公开披露您的个人信息。在符合法律法规的前提下,当我们收到上述披露信息的请求时,我们会要求必须出具与之相应的法律文件,如传票或调查函。
+
+
+ (四)共享、转让、公开披露个人信息时事先征得授权同意的例外
+
+
+ 以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:
+
+
+ 1、与国家安全、国防安全有关的;
+
+
+ 2、与公共安全、公共卫生、重大公共利益有关的;
+
+
+ 3、与犯罪侦查、起诉、审判和判决执行等有关的;
+
+
+ 4、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;
+
+
+ 5、其他维护公共利益的情形,例如您的信用评价信息需要被公开/共享;
+
+
+ 6、您自行向社会公众公开的个人信息;
+
+
+ 7、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。但是您明确拒绝或者处理该信息侵害您重大利益的除外;
+
+
+ 8、其他依法规定可以无需征得授权的情况。
+
+
+ 根据法律规定,共享、转让、公开披露经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,我们对此类数据的处理将无需另行向您通知并征得您的同意。
+
+
+ 四、我们如何保存和保护您的个人信息
+
+
+ (一)个人信息的保存
+
+
+ 1、保存期限:我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非法律法规有强制的留存要求,例如《中华人民共和国电子商务法》要求商品和服务信息、交易信息保存时间自交易完成之日起不少于三年。我们判断个人信息的存储期限主要参考以下标准并以其中较长者为准:完成与您相关的交易目的、维护相应交易及业务记录,以应对您可能的查询或投诉;保证我们为您提供服务的安全和质量;您是否同意更长的留存期间;是否存在关于保留期限的其他特别约定或法律法规规定。
+
+
+ 在超出保留期间后,我们会根据适用法律的要求删除您的个人信息,或使其匿名化处理。在您主动注销账号时,我们将根据法律法规的要求进行数据处理。
+
+
+ 2、保存地域:我们在中华人民共和国境内收集和产生的个人信息,将存储在中国境内,但以下情形除外:
+
+
+ (1)法律法规有明确规定的;
+
+
+ (2)单独征得您的授权同意;
+
+
+ (3)您主动发起的跨境预定、下单、交易等个人行为。
+
+
+ 在上述情形中,我们会根据法律法规要求履行相应流程和义务,并要求数据接收方按照不低于本隐私政策以及其他相关的安全保密措施来处理个人信息。
+
+
+ 3、终止运营:如果发生终止运营等情形,我们将会至少提前30天通知您,并在终止运营后对您的个人信息根据法律法规的要求进行处理。
+
+
+ (二)个人信息的保护措施
+
+
+ 1、数据安全措施
+
+
+ 为保障您的信息安全,我们努力采取各种符合业界标准的物理、电子和管理方面的安全措施来保护您的个人信息,建立数据分类分级制度、数据安全管理规范、数据安全开发规范来管理规范个人信息的存储和使用。ASD通过信息接触者保密协议、监控和审计机制来对数据进行全面安全控制,防止您的个人信息遭到未经授权访问、公开披露、使用、修改、损坏或丢失。
+
+
+ 2、请您知悉并理解,互联网并非绝对安全的环境,我们强烈建议您通过安全方式、使用复杂密码,协助我们保证您的账号安全。如您发现自己的个人信息泄密,尤其是您的账号或密码发生泄露,请您立即根据本隐私政策中提供的联系方式联络我们,以便我们采取相应措施。
+
+
+ 3、安全事件
+
+
+ 在不幸发生个人信息安全事件后,我们会立即成立专项应急小组,启动应急预案,防止安全事件扩大,并按照法律法规的要求及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。
+
+
+ 五、您如何管理您的个人信息
+
+
+ 您对您的个人信息享有以下权利。根据法律法规要求,在特定情形下,除您另有安排,您的近亲属为了自身的合法、正当利益,可以对您的相关个人信息行使以下权利。
+
+
+ (一)您有权访问、更正、删除您的个人信息,法律法规规定的例外情况除外。您可以通过以下方式管理您的信息:
+
+
+ 个人信息查阅与管理:您可以通过“我的”-“设置”,进行个人信息的查阅与管理。
+
+
+ 地址信息——您可以通过“我的”-“设置”中随时添加、更改、删除您的收货地址信息(包括收货人姓名、性别、收货地址、电话号码等)。
+
+
+ 请您知悉,根据法律法规的要求及不同信息的技术条件需要,我们可能无法立即从系统中完全删除您所希望删除的相应信息,在此之前,我们将根据法规要求对相应信息仅进行存储并采取必要的安全保护措施方面的处理。
+
+
+ 如果您无法通过上述链接管理这些个人信息,您可以随时通过本隐私政策中提供的反馈方式联系我们。我们将在15天内回复您的访问请求。
+
+
+ 七、通知和修订
+
+
+ 为给您提供更好的服务,我们的业务将不时变化,本隐私政策也将随之调整,对我们的基本情况、您的个人信息的处理目的方式种类和保存期限、您管理个人信息的方式、我们的联系方式发生变更的,我们会进行及时更新。未经您明确同意,我们不会削减您依据本隐私政策所应享有的权利。
+
+
+ 我们会通过在我们网站、移动端上发出更新版本或以其他方式提醒您相关内容的更新,也请您访问我们以便及时了解最新的隐私政策。在前述情况下,若您继续使用我们的服务,即表示同意接受修订后的本政策并受之约束。
+
+
+ 八、如何联系我们
+
+
+ 您可以通过以下方式与我们联系,我们将在15天内答复您的请求;
+
+
+ 1、您可以联系ASD的客服电话进行反馈******。
+
+
+ 2、我们还设立了专门的个人信息保护团队,您可以联系我们的个人信息保护负责人邮箱 ******.com
+
+
+
+
+`
+export {
+ str
+}
diff --git a/gasStation-uni/utils/request.js b/gasStation-uni/utils/request.js
new file mode 100644
index 000000000..e2010c82e
--- /dev/null
+++ b/gasStation-uni/utils/request.js
@@ -0,0 +1,70 @@
+import store from '@/store'
+import config from '@/config'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { toast, showConfirm, tansParams } from '@/utils/common'
+
+let timeout = 10000
+const baseUrl = config.baseUrl
+
+const request = config => {
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false
+ config.header = config.header || {}
+ if (getToken() && !isToken) {
+ config.header['Authorization'] = 'Bearer ' + getToken()
+ }
+ // get请求映射params参数
+ if (config.params) {
+ let url = config.url + '?' + tansParams(config.params)
+ url = url.slice(0, -1)
+ config.url = url
+ }
+ return new Promise((resolve, reject) => {
+ uni.request({
+ method: config.method || 'get',
+ timeout: config.timeout || timeout,
+ url: config.baseUrl || baseUrl + config.url,
+ data: config.data,
+ header: config.header,
+ dataType: 'json'
+ }).then(response => {
+ // debugger
+ let res = response
+
+ const code = res.data.code || 200
+ const msg = errorCode[code] || res.data.msg || errorCode['default']
+ if (code === 401) {
+ showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
+ if (res.confirm) {
+ store.dispatch('LogOut').then(res => {
+ uni.reLaunch({ url: '/pages/login/login' })
+ })
+ }
+ })
+ reject('无效的会话,或者会话已过期,请重新登录。')
+ } else if (code === 500) {
+ toast(msg)
+ reject('500')
+ } else if (code !== 200) {
+ toast(msg)
+ reject(code)
+ }
+ resolve(res.data)
+ })
+ .catch(error => {
+ let { message } = error
+ if (message === 'Network Error') {
+ message = '后端接口连接异常'
+ } else if (message.includes('timeout')) {
+ message = '系统接口请求超时'
+ } else if (message.includes('Request failed with status code')) {
+ message = '系统接口' + message.substr(message.length - 3) + '异常'
+ }
+ toast(message)
+ reject(error)
+ })
+ })
+}
+
+export default request
diff --git a/gasStation-uni/utils/share.js b/gasStation-uni/utils/share.js
new file mode 100644
index 000000000..155328158
--- /dev/null
+++ b/gasStation-uni/utils/share.js
@@ -0,0 +1,31 @@
+export default {
+ data() {
+ return {
+ //设置默认的分享参数
+ share: {
+ title: '机动车管家',
+ path: '/pages/detection/detection',
+
+ }
+ }
+ },
+ onShareAppMessage(res) {
+ return {
+ title: this.share.title,
+ path: this.share.path,
+
+ success(res) {
+ uni.showToast({
+ title: '分享成功'
+ })
+ },
+ fail(res) {
+ uni.showToast({
+ title: '分享失败',
+ icon: 'none'
+ })
+ }
+ }
+ },
+ onShareTimeline() {},
+}
diff --git a/gasStation-uni/utils/storage.js b/gasStation-uni/utils/storage.js
new file mode 100644
index 000000000..dd5c38bbf
--- /dev/null
+++ b/gasStation-uni/utils/storage.js
@@ -0,0 +1,33 @@
+import constant from './constant'
+
+// 存储变量名
+let storageKey = 'storage_data'
+
+// 存储节点变量名
+let storageNodeKeys = [constant.avatar, constant.name, constant.roles, constant.permissions]
+
+// 存储的数据
+let storageData = uni.getStorageSync(storageKey) || {}
+
+const storage = {
+ set: function(key, value) {
+ if (storageNodeKeys.indexOf(key) != -1) {
+ let tmp = uni.getStorageSync(storageKey)
+ tmp = tmp ? tmp : {}
+ tmp[key] = value
+ uni.setStorageSync(storageKey, tmp)
+ }
+ },
+ get: function(key) {
+ return storageData[key] || ""
+ },
+ remove: function(key) {
+ delete storageData[key]
+ uni.setStorageSync(storageKey, storageData)
+ },
+ clean: function() {
+ uni.removeStorageSync(storageKey)
+ }
+}
+
+export default storage
diff --git a/gasStation-uni/utils/upload.js b/gasStation-uni/utils/upload.js
new file mode 100644
index 000000000..740387e9e
--- /dev/null
+++ b/gasStation-uni/utils/upload.js
@@ -0,0 +1,70 @@
+import store from '@/store'
+import config from '@/config'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { toast, showConfirm, tansParams } from '@/utils/common'
+
+let timeout = 10000
+const baseUrl = config.baseUrl
+
+const upload = config => {
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false
+ config.header = config.header || {}
+ if (getToken() && !isToken) {
+ config.header['Authorization'] = 'Bearer ' + getToken()
+ }
+ // get请求映射params参数
+ if (config.params) {
+ let url = config.url + '?' + tansParams(config.params)
+ url = url.slice(0, -1)
+ config.url = url
+ }
+ return new Promise((resolve, reject) => {
+ uni.uploadFile({
+ timeout: config.timeout || timeout,
+ url: baseUrl + config.url,
+ filePath: config.filePath,
+ name: config.name || 'file',
+ header: config.header,
+ formData: config.formData,
+ success: (res) => {
+ let result = JSON.parse(res.data)
+ const code = result.code || 200
+ const msg = errorCode[code] || result.msg || errorCode['default']
+ if (code === 200) {
+ resolve(result)
+ } else if (code == 401) {
+ showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
+ if (res.confirm) {
+ store.dispatch('LogOut').then(res => {
+ uni.reLaunch({ url: '/pages/login/login' })
+ })
+ }
+ })
+ reject('无效的会话,或者会话已过期,请重新登录。')
+ } else if (code === 500) {
+ toast(msg)
+ reject('500')
+ } else if (code !== 200) {
+ toast(msg)
+ reject(code)
+ }
+ },
+ fail: (error) => {
+ let { message } = error
+ if (message == 'Network Error') {
+ message = '后端接口连接异常'
+ } else if (message.includes('timeout')) {
+ message = '系统接口请求超时'
+ } else if (message.includes('Request failed with status code')) {
+ message = '系统接口' + message.substr(message.length - 3) + '异常'
+ }
+ toast(message)
+ reject(error)
+ }
+ })
+ })
+}
+
+export default upload