页面接口推介

This commit is contained in:
仲么了
2023-07-31 09:00:30 +08:00
parent 863d30ee61
commit 77b4ff6f88
30 changed files with 928 additions and 652 deletions

View File

@@ -87,3 +87,26 @@ export const queryTopologyDiagram = (devId) => {
}) })
} }
// 设备扫码移交
export const transferDevice = (id) => {
return request({
url: '/cs-device-boot/deviceUser/transfer',
method: 'POST',
data: {
eid:id,
},
})
}
// 设备删除
export const deleteDevice = (id) => {
return request({
url: '/cs-device-boot/deviceUser/delete',
method: 'POST',
data: {
eid:id,
},
})
}

View File

@@ -1,5 +1,5 @@
import request from '../js/request'; import request from '../js/request'
import config from '../js/config'; import config from '../js/config'
export function addEngineering(params) { export function addEngineering(params) {
return request({ return request({
@@ -9,10 +9,9 @@ export function addEngineering(params) {
header: { header: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); })
} }
export function auditEngineering(params) { export function auditEngineering(params) {
return request({ return request({
url: '/cs-device-boot/engineering/auditEngineering', url: '/cs-device-boot/engineering/auditEngineering',
@@ -21,7 +20,7 @@ export function auditEngineering(params) {
header: { header: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); })
} }
export function queryEngineering(params) { export function queryEngineering(params) {
@@ -32,5 +31,20 @@ export function queryEngineering(params) {
header: { header: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); })
}
// 删除工程
export function deleteEngineering(id) {
return request({
url: '/cs-device-boot/engineering/auditEngineering',
method: 'post',
data: {
id: id,
status: 0,
},
header: {
'Content-Type': 'application/json',
},
})
} }

View File

@@ -11,6 +11,17 @@ export function addAppProject(params, files) {
formData: params, formData: params,
}) })
} }
// 修改项目
export function updateAppProject(params, files) {
return uni.uploadFile({
url: config.domain + '/cs-device-boot/project/auditAppProject', //仅为示例,非真实的接口地址
files: files,
header: {
Authorization: uni.getStorageSync('access_token'),
},
formData: params,
})
}
export function getProjectList(params) { export function getProjectList(params) {
return request({ return request({
@@ -23,6 +34,18 @@ export function getProjectList(params) {
}) })
} }
// 删除项目
export function deleteProject(id) {
return request({
url: '/cs-device-boot/project/auditAppProject',
method: 'post',
data: {
id,
status: 0,
},
})
}
// 查询拓扑图 // 查询拓扑图
export function queryTopologyDiagramPage(params) { export function queryTopologyDiagramPage(params) {

View File

@@ -1,7 +1,7 @@
const debug = false // true 是连地服务端本地false 是连接线上 const debug = false // true 是连地服务端本地false 是连接线上
const development = { const development = {
domain: 'http://192.168.1.139:10215', domain: 'http://192.168.1.115:10215',
} }
const production = { const production = {

View File

@@ -200,25 +200,42 @@ const prePage = () => {
} }
const loginSuccess = (data) => { const loginSuccess = (data) => {
console.log(data); console.log(data)
uni.setStorageSync('access_token', data.token_type + ' ' + data.access_token) uni.setStorageSync('access_token', data.token_type + ' ' + data.access_token)
uni.setStorageSync('refresh_token', data.refresh_token) uni.setStorageSync('refresh_token', data.refresh_token)
let strings = data.access_token.split('.') //截取token获取载体 let strings = data.access_token.split('.') //截取token获取载体
console.log(escape,atob); console.log(escape, atob)
var userInfo = JSON.parse(decodeURIComponent(escape(atob(strings[1].replace(/-/g, '+').replace(/_/g, '/'))))) var userInfo = JSON.parse(decodeURIComponent(escape(atob(strings[1].replace(/-/g, '+').replace(/_/g, '/')))))
userInfo.authorities = userInfo.authorities[0] userInfo.authorities = userInfo.authorities[0]
uni.setStorageSync('userInfo', userInfo) uni.setStorageSync('userInfo', userInfo)
console.log('reLaunch'); console.log('reLaunch')
queryDictDataCache().then((res) => { queryDictDataCache().then((res) => {
uni.setStorageSync(cacheKey.dictData, res.data) uni.setStorageSync(cacheKey.dictData, res.data)
uni.reLaunch({ uni.reLaunch({
url: '/pages/index/index', url: '/pages/index/index',
fail: (err) => { fail: (err) => {
console.log(err); console.log(err)
} },
}) })
}) })
} }
/**
* 只针对列表页的刷新
* @param {*} number
* @param {*} time
*/
const refreshPrePage = (number = 1, time = 1500) => {
let pages = getCurrentPages()
let prePage = pages[pages.length - number - 1]
if (prePage && time) {
prePage.$vm.store.reload()
setTimeout(() => {
uni.navigateBack({
delta: number,
})
}, time)
}
}
export default { export default {
validatePhoneNumber, validatePhoneNumber,
@@ -230,4 +247,5 @@ export default {
loadConfig, loadConfig,
prePage, prePage,
loginSuccess, loginSuccess,
refreshPrePage,
} }

View File

@@ -47,7 +47,7 @@ export default {
}).catch((err) => { }).catch((err) => {
console.log(err) console.log(err)
}) })
}, 200); }, 1000);
} }
} }
} }

View File

@@ -7,36 +7,34 @@
<view class="loading" v-if="loading"> <view class="loading" v-if="loading">
<zero-loading v-if="loading"></zero-loading> <zero-loading v-if="loading"></zero-loading>
</view> </view>
<template v-else> <slot name="body"></slot>
<slot name="body"></slot>
</template>
</template> </template>
</view> </view>
</template> </template>
<script > <script>
export default { export default {
name: 'Cn-page', name: 'Cn-page',
props: { props: {
loading: { loading: {
type: Boolean, type: Boolean,
default: false default: false,
}, },
showLoginMsk: Boolean, showLoginMsk: Boolean,
noPadding: Boolean, noPadding: Boolean,
}, },
data () { data() {
return { return {
login: false, login: false,
} }
}, },
created () { created() {
this.login = uni.getStorageSync('Authorization') this.login = uni.getStorageSync('Authorization')
}, },
} }
</script> </script>
<style lang='scss'> <style lang="scss">
.Cn-page { .Cn-page {
box-sizing: border-box; box-sizing: border-box;
padding-bottom: calc(30rpx + env(safe-area-inset-bottom)); padding-bottom: calc(30rpx + env(safe-area-inset-bottom));

View File

@@ -2,8 +2,8 @@
"name" : "灿能物联", "name" : "灿能物联",
"appid" : "__UNI__88BC25B", "appid" : "__UNI__88BC25B",
"description" : "", "description" : "",
"versionName" : "1.0.3", "versionName" : "1.0.4",
"versionCode" : 102, "versionCode" : 103,
"transformPx" : false, "transformPx" : false,
/* 5+App */ /* 5+App */
"app-plus" : { "app-plus" : {
@@ -132,7 +132,7 @@
"/api" : { "/api" : {
"https" : true, "https" : true,
// "target" : "https://china.indpecker.com", // "target" : "https://china.indpecker.com",
"target" : "http://192.168.1.13:10215", "target" : "http://192.168.1.115:10215",
"changOrigin" : true, "changOrigin" : true,
"pathRewrite" : { "pathRewrite" : {
"/api" : "" "/api" : ""

View File

@@ -1,7 +1,8 @@
{ {
"dependencies": { "dependencies": {
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"html2canvas": "^1.4.1", "html2canvas": "1.0.0-rc.4",
"image-tools": "^1.4.0",
"mqtt": "3.0.0", "mqtt": "3.0.0",
"pinyin-pro": "^3.13.2", "pinyin-pro": "^3.13.2",
"qs": "^6.11.2", "qs": "^6.11.2",

View File

@@ -1,444 +1,448 @@
{ {
"pages": [ "pages": [
//pages数组中第一项表示应用启动页参考https://uniapp.dcloud.io/collocation/pages //pages数组中第一项表示应用启动页参考https://uniapp.dcloud.io/collocation/pages
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationBarTitleText": "灿能电力" "navigationBarTitleText": "灿能电力"
} }
},
{
"path": "pages/index/message",
"style": {
"navigationBarTitleText": "消息"
}
},
{
"path": "pages/index/mine",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/mine/agreement",
"style": {
"navigationBarTitleText": "用户协议"
}
},
{
"path": "pages/mine/policy",
"style": {
"navigationBarTitleText": "个人信息保护政策"
}
},
{
"path": "pages/user/login",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/user/forget",
"style": {
"navigationBarTitleText": "忘记密码"
}
},
{
"path": "pages/user/register",
"style": {
"navigationBarTitleText": "快速注册"
}
},
{
"path": "pages/user/changePwd",
"style": {
"navigationBarTitleText": "修改密码"
}
},
{
"path": "pages/user/changePhone",
"style": {
"navigationBarTitleText": "修改手机号"
}
},
{
"path": "pages/mine/setup",
"style": {
"navigationBarTitleText": "设置"
}
},
{
"path": "pages/mine/setupMessage",
"style": {
"navigationBarTitleText": "消息配置"
}
},
{
"path": "pages/mine/system",
"style": {
"navigationBarTitleText": "系统介绍"
}
},
{
"path": "pages/mine/company",
"style": {
"navigationBarTitleText": "公司介绍"
}
},
{
"path": "pages/mine/about",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "pages/mine/upgrade",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "pages/mine/message",
"style": {
"navigationBarTitleText": "个人消息"
}
},
{
"path": "pages/device/list",
"style": {
"navigationBarTitleText": "设备列表"
}
},
{
"path": "pages/device/new",
"style": {
"navigationBarTitleText": "新设备"
}
},
{
"path": "pages/device/APF/detail",
"style": {
"navigationBarTitleText": "APF 设备名称 + 型号"
}
},
{
"path": "pages/device/DVR/detail",
"style": {
"navigationBarTitleText": "DVR 设备名称 + 型号"
}
},
{
"path": "pages/device/APF/record",
"style": {
"navigationBarTitleText": "操作记录"
}
},
{
"path": "pages/device/DVR/record",
"style": {
"navigationBarTitleText": "操作记录"
}
},
{
"path": "pages/device/APF/report",
"style": {
"navigationBarTitleText": "告警情况",
"navigationStyle": "custom"
}
},
{
"path": "pages/device/DVR/report",
"style": {
"navigationBarTitleText": "告警情况",
"navigationStyle": "custom"
}
},
{
"path": "pages/device/APF/about",
"style": {
"navigationBarTitleText": "关于"
}
},
{
"path": "pages/device/DVR/about",
"style": {
"navigationBarTitleText": "关于"
}
},
{
"path": "pages/gateway/list",
"style": {
"navigationBarTitleText": "网关列表"
}
},
{
"path": "pages/gateway/new",
"style": {
"navigationBarTitleText": "添加网关"
}
},
{
"path": "pages/gateway/newDevice",
"style": {
"navigationBarTitleText": "通过网关添加设备"
}
},
{
"path": "pages/message/incident",
"style": {
"navigationBarTitleText": "暂态事件"
}
},
{
"path": "pages/message/incidentDetail",
"style": {
"navigationBarTitleText": "暂态事件详情"
}
},
{
"path": "pages/message/term",
"style": {
"navigationBarTitleText": "终端状态消息"
}
},
{
"path": "pages/message/termList",
"style": {
"navigationBarTitleText": "异常终端列表"
}
},
{
"path": "pages/message/termDetail",
"style": {
"navigationBarTitleText": "异常终端详情"
}
},
{
"path": "pages/message/report",
"style": {
"navigationBarTitleText": "稳态越限"
}
},
{
"path": "pages/message/system",
"style": {
"navigationBarTitleText": "系统消息"
}
},
{
"path": "pages/device/transfer",
"style": {
"navigationBarTitleText": "移交"
}
},
{
"path": "pages/home/feedback",
"style": {
"navigationBarTitleText": "提交反馈"
}
},
{
"path": "pages/message/feedback",
"style": {
"navigationBarTitleText": "反馈列表"
}
},
{
"path": "pages/mine/feedback",
"style": {
"navigationBarTitleText": "提交反馈"
}
},
{
"path": "pages/device/user",
"style": {
"navigationBarTitleText": "子用户"
}
},
{
"path": "pages/mine/user",
"style": {
"navigationBarTitleText": "子用户"
}
},
{
"path": "pages/mine/userDetail",
"style": {
"navigationBarTitleText": "用户设备"
}
},
{
"path": "pages/user/basic",
"style": {
"navigationBarTitleText": "个人信息"
}
},
{
"path": "pages/user/head",
"style": {
"navigationBarTitleText": "更换头像"
}
},
{
"path": "pages/user/changeName",
"style": {
"navigationBarTitleText": "修改昵称"
}
},
{
"path": "pages/project/list",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/project/new",
"style": {
"navigationBarTitleText": "新增项目"
}
},
{
"path": "pages/engineering/new",
"style": {
"navigationBarTitleText": "新增工程"
}
},
{
"path": "pages/engineering/list",
"style": {
"navigationBarTitleText": "工程列表",
"navigationStyle": "custom"
}
},
{
"path": "pages/engineering/detail",
"style": {
"navigationBarTitleText": "工程详情"
}
},
{
"path": "pages/user/erweima",
"style": {
"navigationBarTitleText": "我的二维码"
}
},
{
"path": "pages/project/detail",
"style": {
"navigationBarTitleText": "项目详情"
}
},
{
"path": "pages/gateway/detail",
"style": {
"navigationBarTitleText": "网关详情"
}
},
{
"path": "pages/message/reportList",
"style": {
"navigationBarTitleText": "越限监测点列表"
}
},
{
"path": "pages/message/reportDetail",
"style": {
"navigationBarTitleText": "越限监测点详情"
}
},
{
"path": "pages/project/transfer",
"style": {
"navigationBarTitleText": "项目移交"
}
},
{
"path": "pages/mine/audit",
"style": {
"navigationBarTitleText": "角色升级审核"
}
},
{
"path": "pages/zhuanzhi/warning",
"style": {
"navigationBarTitleText": "报警设备"
}
},
{
"path": "pages/message/feedbackDetail",
"style": {
"navigationBarTitleText": "反馈详情"
}
},
{
"path": "pages/home/service",
"style": {
"navigationBarTitleText": "联系客服"
}
},
{
"path": "pages/mine/book",
"style": {
"navigationBarTitleText": "使用手册"
}
},
{
"path": "pages/mine/database",
"style": {
"navigationBarTitleText": "资料库"
}
},
{
"path": "pages/mine/result",
"style": {
"navigationBarTitleText": "操作成功"
}
}
],
"tabBar": {
"color": "#979797",
"selectedColor": "#376cf3",
"borderStyle": "black",
"backgroundColor": "#fff",
"spacing": "5px",
"iconWidth": "20px",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "static/index.png",
"selectedIconPath": "static/index2.png",
"text": "首页"
},
{
"pagePath": "pages/index/message",
"iconPath": "static/notice.png",
"selectedIconPath": "static/notice2.png",
"text": "消息"
},
{
"pagePath": "pages/index/mine",
"iconPath": "static/mine.png",
"selectedIconPath": "static/mine2.png",
"text": "个人"
}
]
}, },
{ "globalStyle": {
"path": "pages/index/message", "navigationBarTextStyle": "black",
"style": { "navigationBarTitleText": "灿能电力",
"navigationBarTitleText": "消息" "navigationBarBackgroundColor": "#ffffff",
} "backgroundColor": "#f3f4f5"
}, // #ifdef H5
{ ,
"path": "pages/index/mine",
"style": {
"navigationStyle": "custom" "navigationStyle": "custom"
} // #endif
}, },
{ "uniIdRouter": {},
"path": "pages/mine/agreement", "easycom": {
"style": { "autoscan": true,
"navigationBarTitleText": "用户协议" "custom": {
} "^rc-(.*)": "@/components/Cn-$1/Cn-$1.vue"
}
}, },
{ "condition": {
"path": "pages/mine/policy", //模式配置,仅开发期间生效
"style": { "current": 0, //当前激活的模式list 的索引项)
"navigationBarTitleText": "个人信息保护政策" "list": []
}
},
{
"path": "pages/user/login",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/user/forget",
"style": {
"navigationBarTitleText": "忘记密码"
}
},
{
"path": "pages/user/register",
"style": {
"navigationBarTitleText": "快速注册"
}
},
{
"path": "pages/user/changePwd",
"style": {
"navigationBarTitleText": "修改密码"
}
},
{
"path": "pages/user/changePhone",
"style": {
"navigationBarTitleText": "修改手机号"
}
},
{
"path": "pages/mine/setup",
"style": {
"navigationBarTitleText": "设置"
}
},
{
"path": "pages/mine/setupMessage",
"style": {
"navigationBarTitleText": "消息配置"
}
},
{
"path": "pages/mine/system",
"style": {
"navigationBarTitleText": "系统介绍"
}
},
{
"path": "pages/mine/company",
"style": {
"navigationBarTitleText": "公司介绍"
}
},
{
"path": "pages/mine/about",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "pages/mine/upgrade",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "pages/mine/message",
"style": {
"navigationBarTitleText": "个人消息"
}
},
{
"path": "pages/device/list",
"style": {
"navigationBarTitleText": "设备列表"
}
},
{
"path": "pages/device/new",
"style": {
"navigationBarTitleText": "新设备"
}
},
{
"path": "pages/device/APF/detail",
"style": {
"navigationBarTitleText": "APF 设备名称 + 型号"
}
},
{
"path": "pages/device/DVR/detail",
"style": {
"navigationBarTitleText": "DVR 设备名称 + 型号"
}
},
{
"path": "pages/device/APF/record",
"style": {
"navigationBarTitleText": "操作记录"
}
},
{
"path": "pages/device/DVR/record",
"style": {
"navigationBarTitleText": "操作记录"
}
},
{
"path": "pages/device/APF/report",
"style": {
"navigationBarTitleText": "告警情况",
"navigationStyle": "custom"
}
},
{
"path": "pages/device/DVR/report",
"style": {
"navigationBarTitleText": "告警情况",
"navigationStyle": "custom"
}
},
{
"path": "pages/device/APF/about",
"style": {
"navigationBarTitleText": "关于"
}
},
{
"path": "pages/device/DVR/about",
"style": {
"navigationBarTitleText": "关于"
}
},
{
"path": "pages/gateway/list",
"style": {
"navigationBarTitleText": "网关列表"
}
},
{
"path": "pages/gateway/new",
"style": {
"navigationBarTitleText": "添加网关"
}
},
{
"path": "pages/gateway/newDevice",
"style": {
"navigationBarTitleText": "通过网关添加设备"
}
},
{
"path": "pages/message/incident",
"style": {
"navigationBarTitleText": "暂态事件"
}
},
{
"path": "pages/message/incidentDetail",
"style": {
"navigationBarTitleText": "暂态事件详情"
}
},
{
"path": "pages/message/term",
"style": {
"navigationBarTitleText": "终端状态消息"
}
},
{
"path": "pages/message/termList",
"style": {
"navigationBarTitleText": "异常终端列表"
}
},
{
"path": "pages/message/termDetail",
"style": {
"navigationBarTitleText": "异常终端详情"
}
},
{
"path": "pages/message/report",
"style": {
"navigationBarTitleText": "稳态越限"
}
},
{
"path": "pages/message/system",
"style": {
"navigationBarTitleText": "系统消息"
}
},
{
"path": "pages/device/transfer",
"style": {
"navigationBarTitleText": "移交"
}
},
{
"path": "pages/home/feedback",
"style": {
"navigationBarTitleText": "提交反馈"
}
},
{
"path": "pages/message/feedback",
"style": {
"navigationBarTitleText": "反馈列表"
}
},
{
"path": "pages/mine/feedback",
"style": {
"navigationBarTitleText": "提交反馈"
}
},
{
"path": "pages/device/user",
"style": {
"navigationBarTitleText": "子用户"
}
},
{
"path": "pages/mine/user",
"style": {
"navigationBarTitleText": "子用户"
}
},
{
"path": "pages/mine/userDetail",
"style": {
"navigationBarTitleText": "用户设备"
}
},
{
"path": "pages/user/basic",
"style": {
"navigationBarTitleText": "个人信息"
}
},
{
"path": "pages/user/head",
"style": {
"navigationBarTitleText": "更换头像"
}
},
{
"path": "pages/user/changeName",
"style": {
"navigationBarTitleText": "修改昵称"
}
},
{
"path": "pages/project/list",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/project/new",
"style": {
"navigationBarTitleText": "新增项目"
}
},
{
"path": "pages/engineering/new",
"style": {
"navigationBarTitleText": "新增工程"
}
},
{
"path": "pages/engineering/list",
"style": {
"navigationBarTitleText": "工程列表",
"navigationStyle": "custom"
}
},
{
"path": "pages/engineering/detail",
"style": {
"navigationBarTitleText": "工程详情"
}
},
{
"path": "pages/user/erweima",
"style": {
"navigationBarTitleText": "我的二维码"
}
},
{
"path": "pages/project/detail",
"style": {
"navigationBarTitleText": "项目详情"
}
},
{
"path": "pages/gateway/detail",
"style": {
"navigationBarTitleText": "网关详情"
}
},
{
"path": "pages/message/reportList",
"style": {
"navigationBarTitleText": "越限监测点列表"
}
},
{
"path": "pages/message/reportDetail",
"style": {
"navigationBarTitleText": "越限监测点详情"
}
},
{
"path": "pages/project/transfer",
"style": {
"navigationBarTitleText": "项目移交"
}
},
{
"path": "pages/mine/audit",
"style": {
"navigationBarTitleText": "角色升级审核"
}
},
{
"path": "pages/zhuanzhi/warning",
"style": {
"navigationBarTitleText": "报警设备"
}
},
{
"path": "pages/message/feedbackDetail",
"style": {
"navigationBarTitleText": "反馈详情"
}
},
{
"path": "pages/home/service",
"style": {
"navigationBarTitleText": "联系客服"
}
},
{
"path": "pages/mine/book",
"style": {
"navigationBarTitleText": "使用手册"
}
},
{
"path": "pages/mine/database",
"style": {
"navigationBarTitleText": "资料库"
}
} }
],
"tabBar": {
"color": "#979797",
"selectedColor": "#376cf3",
"borderStyle": "black",
"backgroundColor": "#fff",
"spacing": "5px",
"iconWidth": "20px",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "static/index.png",
"selectedIconPath": "static/index2.png",
"text": "首页"
},
{
"pagePath": "pages/index/message",
"iconPath": "static/notice.png",
"selectedIconPath": "static/notice2.png",
"text": "消息"
},
{
"pagePath": "pages/index/mine",
"iconPath": "static/mine.png",
"selectedIconPath": "static/mine2.png",
"text": "个人"
}
]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "灿能电力",
"navigationBarBackgroundColor": "#ffffff",
"backgroundColor": "#f3f4f5"
// #ifdef H5
,
"navigationStyle": "custom"
// #endif
},
"uniIdRouter": {},
"easycom": {
"autoscan": true,
"custom": {
"^rc-(.*)": "@/components/Cn-$1/Cn-$1.vue"
}
},
"condition": {
//模式配置,仅开发期间生效
"current": 0, //当前激活的模式list 的索引项)
"list": [
]
}
} }

View File

@@ -2,7 +2,7 @@
<Cn-page :loading='loading'> <Cn-page :loading='loading'>
<view slot='body'> <view slot='body'>
<view class='about'> <view class='about'>
<view class='about-title'>盛弘APF</view> <view class='about-title'>灿能APF</view>
<view class='about-text'>杋器码0000000</view> <view class='about-text'>杋器码0000000</view>
<view class='about-text'>软件版本1.0.0</view> <view class='about-text'>软件版本1.0.0</view>
<view class='about-text'>使用期限永久使用</view> <view class='about-text'>使用期限永久使用</view>

View File

@@ -5,7 +5,7 @@
<view class="detail-header"> <view class="detail-header">
<Cn-htmlToImg domId="header" @renderFinish="renderFinish"> <Cn-htmlToImg domId="header" @renderFinish="renderFinish">
<view class="header" ref="header" @click="previewImg"> <view class="header" ref="header" @click="previewImg">
<image :src="deviceInfo.filePath" style="width: 375px" mode="widthFix" /> <img :src="deviceInfo.filePath" style="width: 375px" mode="widthFix" />
<view <view
class="point" class="point"
:style="{ left: item.lat + 'px', top: item.lng + 'px' }" :style="{ left: item.lat + 'px', top: item.lng + 'px' }"
@@ -94,6 +94,10 @@
:content="content" :content="content"
@trigger="trigger" @trigger="trigger"
/> />
<uni-popup ref="share" type="share" :safe-area="false">
<uni-popup-share title="分享到" ></uni-popup-share>
<view style="height: 40rpx;background: #fff;"></view>
</uni-popup>
</view> </view>
</view> </view>
</Cn-page> </Cn-page>
@@ -104,10 +108,10 @@ import xieBo from './comp/xieBo.vue'
import power from './comp/power.vue' import power from './comp/power.vue'
import oscillogram from './comp/oscillogram.vue' import oscillogram from './comp/oscillogram.vue'
import IO from './comp/IO.vue' import IO from './comp/IO.vue'
import { queryTopologyDiagram } from '@/common/api/device' import { queryTopologyDiagram, deleteDevice } from '@/common/api/device'
import { MQTT_IP, MQTT_OPTIONS } from '@/common/js/mqtt.js' import { MQTT_IP, MQTT_OPTIONS } from '@/common/js/mqtt.js'
import mqtt from 'mqtt/dist/mqtt.js' import mqtt from 'mqtt/dist/mqtt.js'
import { base64ToPath } from 'image-tools'
export default { export default {
components: { components: {
basic, basic,
@@ -158,7 +162,7 @@ export default {
timer: null, timer: null,
devId: '', devId: '',
dictData: [], dictData: [],
isMaster: 0, isPrimaryUser: 0,
userInfo: {}, userInfo: {},
} }
}, },
@@ -185,9 +189,18 @@ export default {
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
content: '确定删除该设备吗?', content: '确定删除该设备吗?',
success: function (res) { success: (res) => {
if (res.confirm) { if (res.confirm) {
console.log('用户点击确定') console.log('用户点击确定')
deleteDevice(this.devId).then((res) => {
uni.showToast({
title: '删除成功',
icon: 'none',
})
setTimeout(() => {
uni.navigateBack()
}, 1500)
})
} else if (res.cancel) { } else if (res.cancel) {
console.log('用户点击取消') console.log('用户点击取消')
} }
@@ -248,10 +261,7 @@ export default {
iconPath: '/static/delate.png', iconPath: '/static/delate.png',
text: '报表', text: '报表',
}, },
{
iconPath: '/static/table.png',
text: '删除',
},
{ {
iconPath: '/static/feedback.png', iconPath: '/static/feedback.png',
text: '反馈', text: '反馈',
@@ -290,8 +300,11 @@ export default {
}, 500) }, 500)
} else { } else {
uni.hideLoading() uni.hideLoading()
uni.previewImage({ base64ToPath(this.img).then((res) => {
urls: [this.img], console.log(res)
uni.previewImage({
urls: [res],
})
}) })
} }
}, },
@@ -328,7 +341,7 @@ export default {
console.log('连接断开') console.log('连接断开')
}) })
.on('message', (topic, message) => { .on('message', (topic, message) => {
console.log('接收推送信息:', message.toString()) console.log('接收推送信息:', message.toString().length)
if (!message.toString()) { if (!message.toString()) {
return return
} }
@@ -369,12 +382,12 @@ export default {
this.userInfo = uni.getStorageSync(this.$cacheKey.userInfo) this.userInfo = uni.getStorageSync(this.$cacheKey.userInfo)
this.devId = options.id this.devId = options.id
this.isMaster = options.isMaster this.isPrimaryUser = options.isPrimaryUser
this.content.splice(0, 0, { if (this.isPrimaryUser == 1) {
iconPath: '/static/transfer.png', this.content.splice(0, 0, {
text: '移交', iconPath: '/static/delate.png',
text: '删除',
}) })
if (this.isMaster == 1) {
this.content.splice(0, 0, { this.content.splice(0, 0, {
iconPath: '/static/transfer.png', iconPath: '/static/transfer.png',
text: '移交', text: '移交',

View File

@@ -5,7 +5,7 @@
<uni-forms> <uni-forms>
<uni-forms-item label="设备识别码"> <uni-forms-item label="设备识别码">
<view style="display: flex"> <view style="display: flex">
<uni-easyinput type="number" v-model="formData.nDid" placeholder="请输入设备识别码" /> <uni-easyinput type="text" v-model="formData.nDid" placeholder="请输入设备识别码" />
<uni-icons <uni-icons
type="camera" type="camera"
color="#007aff" color="#007aff"

View File

@@ -3,7 +3,7 @@
<view slot="body"> <view slot="body">
<view class="transfer"> <view class="transfer">
<!-- <div class="transfer-img" ref="qrCodeUrl" /> --> <!-- <div class="transfer-img" ref="qrCodeUrl" /> -->
<uqrcode ref="uqrcode" canvas-id="qrcode" :value="devId" :options="{ margin: 10 }"></uqrcode> <uqrcode ref="uqrcode" canvas-id="qrcode" :value="content" :options="{ margin: 10 }"></uqrcode>
<canvas id="qrcode" width="200" height="200"></canvas> <canvas id="qrcode" width="200" height="200"></canvas>
<view class="transfer-text">请让接收人员扫码接收</view> <view class="transfer-text">请让接收人员扫码接收</view>
<view class="transfer-btn"> <view class="transfer-btn">
@@ -24,23 +24,22 @@ export default {
data() { data() {
return { return {
loading: false, loading: false,
devId: '', content: '',
} }
}, },
methods: { methods: {
back() { back() {
uni.navigateBack({ this.$util.refreshPrePage(2)
delta: 1,
})
}, },
home() { home() {
uni.switchTab({ this.$util.refreshPrePage(2)
url: '/pages/index/index',
})
}, },
}, },
onLoad(options) { onLoad(options) {
this.devId = options.id this.content = JSON.stringify({
type: 'transferDevice',
id: options.id,
})
}, },
} }
</script> </script>

View File

@@ -76,6 +76,8 @@
</template> </template>
<script> <script>
import list from '../../common/js/list' import list from '../../common/js/list'
import { deleteEngineering } from '../../common/api/engineering'
export default { export default {
mixins: [list], mixins: [list],
data() { data() {
@@ -95,6 +97,10 @@ export default {
iconPath: '/static/share.png', iconPath: '/static/share.png',
text: '编辑', text: '编辑',
}, },
{
iconPath: '/static/delate.png',
text: '删除',
},
], ],
navHeight: 0, navHeight: 0,
navMenuActive: 0, navMenuActive: 0,
@@ -113,6 +119,21 @@ export default {
uni.navigateTo({ uni.navigateTo({
url: '/pages/engineering/new?engineering=' + encodeURIComponent(JSON.stringify(this.engineering)), url: '/pages/engineering/new?engineering=' + encodeURIComponent(JSON.stringify(this.engineering)),
}) })
} else if (e.item.text == '删除') {
uni.showModal({
title: '提示',
content: '删除工程后不可恢复,是否继续?',
success: (res) => {
if (res.confirm) {
deleteEngineering(this.engineering.id).then((res) => {
this.$util.toast('删除成功')
this.$util.refreshPrePage()
})
} else if (res.cancel) {
console.log('用户点击取消')
}
},
})
} }
}, },
navMenuClick(index) { navMenuClick(index) {

View File

@@ -77,7 +77,7 @@ export default {
console.log(this.$util.prePage()) console.log(this.$util.prePage())
}, },
methods: { methods: {
toJSON(){}, toJSON() {},
areaChange(e) { areaChange(e) {
if (e.detail.value.length) { if (e.detail.value.length) {
this.formData.province = e.detail.value[0].value this.formData.province = e.detail.value[0].value
@@ -119,17 +119,11 @@ export default {
if (this.formData.id) { if (this.formData.id) {
await auditEngineering(this.formData) await auditEngineering(this.formData)
this.$util.toast('工程修改成功') this.$util.toast('工程修改成功')
let pages = getCurrentPages() this.$util.refreshPrePage(2)
let prePage = pages[pages.length -3]
console.log(prePage);
prePage.$vm.store.reload()
setTimeout(() => {
uni.navigateBack({ delta: 2 })
}, 1500)
} else { } else {
await addEngineering(this.formData) await addEngineering(this.formData)
this.$util.prePage().store?.reload()
this.$util.toast('工程创建成功') this.$util.toast('工程创建成功')
this.$util.refreshPrePage()
} }
}, },
}, },

View File

@@ -113,7 +113,7 @@ export default {
}) })
}, },
}, },
created() { created() {
this.init() this.init()
}, },
mounted() { mounted() {
@@ -134,29 +134,34 @@ export default {
}, 1000) }, 1000)
}, },
methods: { methods: {
async init(){ async init() {
let engineering = uni.getStorageSync('engineering') let engineering = uni.getStorageSync('engineering')
let res = await queryEngineering() let res = await queryEngineering()
this.engineeringList = res.data this.engineeringList = res.data
if (this.engineeringList.length === 0) { if (this.engineeringList.length === 0) {
return return
} }
if (!engineering) { if (!engineering) {
uni.setStorageSync('engineering', res.data[0]) uni.setStorageSync('engineering', res.data[0])
this.select.engineeringName = res.data[0].name this.select.engineeringName = res.data[0].name
this.select.engineeringId = res.data[0].id this.select.engineeringId = res.data[0].id
} else { } else {
this.select.engineeringName = engineering.name if (this.engineeringList.findIndex((item) => item.id === engineering.id) === -1) {
this.select.engineeringId = engineering.id uni.setStorageSync('engineering', res.data[0])
} this.select.engineeringName = res.data[0].name
this.getProjectList() this.select.engineeringId = res.data[0].id
this.getDeviceList() }else{
this.select.engineeringName = engineering.name
this.select.engineeringId = engineering.id
}
}
this.getProjectList()
this.getDeviceList()
}, },
getDeviceList() { getDeviceList() {
this.store.params.pageSize = 999 this.store.params.pageSize = 999
this.store.params.engineerId = this.select.engineeringId this.store.params.engineerId = this.select.engineeringId
this.store.reload() this.store.reload()
}, },
getProjectList() { getProjectList() {
getProjectList({ getProjectList({
@@ -278,7 +283,7 @@ export default {
}, },
jump(item) { jump(item) {
uni.navigateTo({ uni.navigateTo({
url: '/pages/device/APF/detail?id=' + item.equipmentId url: '/pages/device/APF/detail?id=' + item.equipmentId + '&isPrimaryUser=' + item.isPrimaryUser,
}) })
}, },
}, },

View File

@@ -6,7 +6,7 @@
<div class="header-item-label">正常设备</div> <div class="header-item-label">正常设备</div>
</div> </div>
<div class="header-item"> <div class="header-item">
<div class="header-item-value">{{ devCount.alarmLineCount || 0 }}</div> <div class="header-item-value" @click="jump('alarmLineDevs')">{{ devCount.alarmLineCount || 0 }}</div>
<div class="header-item-label">报警设备</div> <div class="header-item-label">报警设备</div>
</div> </div>
<div class="header-item"> <div class="header-item">
@@ -65,10 +65,15 @@ export default {
url: '/pages/gateway/new', url: '/pages/gateway/new',
}) })
}, },
jump(item) { jump(type) {
uni.navigateTo({ switch (key) {
url: '/pages/device/APF/detail', case value:
})
break;
default:
break;
}
}, },
}, },
} }

View File

@@ -11,37 +11,19 @@
<view class="message-nav-label">反馈</view> <view class="message-nav-label">反馈</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view <view class="message-nav" @click="jump('report')">
class="message-nav"
@click="jump('report')"
v-if="
userInfo.authorities == '4' || userInfo.authorities == '5' || userInfo.authorities == 'tourist'
"
>
<image mode="aspectFill" class="message-nav-icon" src="/static/report.png" /> <image mode="aspectFill" class="message-nav-icon" src="/static/report.png" />
<view class="message-nav-label">稳态越限</view> <view class="message-nav-label">稳态越限</view>
<uni-badge text="3"></uni-badge> <uni-badge text="3"></uni-badge>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view <view class="message-nav" @click="jump('incident')">
class="message-nav"
@click="jump('incident')"
v-if="
userInfo.authorities == '4' || userInfo.authorities == '5' || userInfo.authorities == 'tourist'
"
>
<image mode="aspectFill" class="message-nav-icon" src="/static/incident.png" /> <image mode="aspectFill" class="message-nav-icon" src="/static/incident.png" />
<view class="message-nav-label">暂态事件</view> <view class="message-nav-label">暂态事件</view>
<uni-badge text="2"></uni-badge> <uni-badge text="2"></uni-badge>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view <view class="message-nav" @click="jump('term')">
class="message-nav"
@click="jump('term')"
v-if="
userInfo.authorities == '4' || userInfo.authorities == '5' || userInfo.authorities == 'tourist'
"
>
<image mode="aspectFill" class="message-nav-icon" src="/static/term.png" /> <image mode="aspectFill" class="message-nav-icon" src="/static/term.png" />
<view class="message-nav-label">终端状态</view> <view class="message-nav-label">终端状态</view>
<uni-badge text="1"></uni-badge> <uni-badge text="1"></uni-badge>

View File

@@ -36,20 +36,12 @@
<view class="mine-nav-label">扫一扫</view> <view class="mine-nav-label">扫一扫</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view class="mine-nav" @click="jump('engineering')" v-if="userInfo.authorities === 'engineering_user' || userInfo.authorities === 'app_vip_user'"> <view class="mine-nav" @click="jump('engineering')">
<image mode="aspectFill" class="mine-nav-icon" src="/static/project.png" /> <image mode="aspectFill" class="mine-nav-icon" src="/static/project.png" />
<view class="mine-nav-label">工程管理</view> <view class="mine-nav-label">工程管理</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
</view> </view>
<view <view class="mine-nav" @click="jump('project')">
class="mine-nav"
@click="jump('project')"
v-if="
userInfo.authorities === 'app_vip_user' ||
userInfo.authorities === 'engineering_user' ||
userInfo.authorities === 'market_user'
"
>
<image mode="aspectFill" class="mine-nav-icon" src="/static/project.png" /> <image mode="aspectFill" class="mine-nav-icon" src="/static/project.png" />
<view class="mine-nav-label">项目管理</view> <view class="mine-nav-label">项目管理</view>
<uni-icons type="forward" color="#aaa" size="20"></uni-icons> <uni-icons type="forward" color="#aaa" size="20"></uni-icons>
@@ -57,12 +49,6 @@
<view <view
class="mine-nav" class="mine-nav"
@click="jump('gateway')" @click="jump('gateway')"
v-if="
userInfo.authorities === 'app_vip_user' ||
userInfo.authorities === 'engineering_user' ||
userInfo.authorities == 5 ||
userInfo.authorities === 'market_user'
"
style="border-bottom: none; box-shadow: 0 4rpx 8rpx #e7e7e74c" style="border-bottom: none; box-shadow: 0 4rpx 8rpx #e7e7e74c"
> >
<image mode="aspectFill" class="mine-nav-icon" src="/static/gateway.png" /> <image mode="aspectFill" class="mine-nav-icon" src="/static/gateway.png" />
@@ -94,6 +80,7 @@
<script> <script>
import { roleUpdate } from '@/common/api/user' import { roleUpdate } from '@/common/api/user'
import { transferDevice } from '@/common/api/device'
export default { export default {
data() { data() {
return { return {
@@ -114,6 +101,12 @@ export default {
case 'app_vip_user': case 'app_vip_user':
roleName = 'VIP用户' roleName = 'VIP用户'
break break
case 'market_user':
roleName = '营销用户'
break
case 'operation_manager':
roleName = '运维管理员'
break
} }
return roleName return roleName
}, },
@@ -146,9 +139,18 @@ export default {
switch (type) { switch (type) {
case 'scan': case 'scan':
uni.scanCode({ uni.scanCode({
success: function (res) { success: (res) => {
console.log('条码类型:' + res.scanType) console.log('条码类型:' + res.scanType)
console.log('条码内容:' + res.result) console.log('条码内容:' + res.result)
let content = JSON.parse(res.result)
switch (content.type) {
case 'transferDevice':
this.transferDevice(content.id)
break
default:
break
}
}, },
}) })
break break
@@ -187,6 +189,11 @@ export default {
break break
} }
}, },
transferDevice(id) {
transferDevice(id).then((res) => {
uni.navigateTo({ url: '/pages/mine/result?type=transferDevice&id=' + id })
})
},
}, },
onShow() { onShow() {
this.userInfo = uni.getStorageSync(this.$cacheKey.userInfo) this.userInfo = uni.getStorageSync(this.$cacheKey.userInfo)

90
pages/mine/result.vue Normal file
View File

@@ -0,0 +1,90 @@
<template>
<Cn-page :loading="loading">
<view slot="body">
<view class="about">
<image src="/static/success.png" class="logo"></image>
<view class="name">{{ text }}</view>
<view class="btn-wrap">
<navigator open-type="navigateBack" hover-class="none" class="btn"> 返回 </navigator>
<view class="btn ml20" @click="look"> 查看 </view>
</view>
</view>
</view>
</Cn-page>
</template>
<script>
export default {
data() {
return {
loading: false,
type: '',
}
},
computed: {
text() {
let str = ''
switch (this.type) {
case 'transferDevice':
str = '移交成功'
break
default:
str = '操作成功'
break
}
return str
},
},
onLoad(options) {
this.type = options.type
this.id = options.id
},
methods: {
look() {
switch (this.type) {
case 'transferDevice':
uni.navigateTo({
url: '/pages/device/APF/detail?id=' + this.id,
})
break
default:
break
}
},
},
}
</script>
<style lang="scss">
.about {
box-sizing: border-box;
padding: 34rpx;
padding-top: 200rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.logo {
height: 120rpx;
width: 120rpx;
}
.name {
margin-top: 80rpx;
font-size: 40rpx;
font-weight: 700;
color: #333;
}
.version {
margin-top: 20rpx;
font-size: 38rpx;
color: #333;
}
.btn-wrap {
margin-top: 150rpx;
display: flex;
justify-content: space-between;
width: 100%;
}
}
</style>

View File

@@ -99,7 +99,12 @@
</template> </template>
<script> <script>
import list from '../../common/js/list' import list from '../../common/js/list'
import { queryTopologyDiagramPage, deleteAppTopologyDiagram, addAppTopologyDiagram } from '../../common/api/project' import {
queryTopologyDiagramPage,
deleteAppTopologyDiagram,
addAppTopologyDiagram,
deleteProject,
} from '../../common/api/project'
export default { export default {
mixins: [list], mixins: [list],
data() { data() {
@@ -178,6 +183,21 @@ export default {
uni.navigateTo({ uni.navigateTo({
url: '/pages/project/new?project=' + encodeURIComponent(JSON.stringify(this.project)), url: '/pages/project/new?project=' + encodeURIComponent(JSON.stringify(this.project)),
}) })
} else if (e.item.text == '删除') {
uni.showModal({
title: '提示',
content: '删除项目后不可恢复,是否继续?',
success: (res) => {
if (res.confirm) {
deleteProject(this.project.id).then((res) => {
this.$util.toast('删除成功')
this.$util.refreshPrePage()
})
} else if (res.cancel) {
console.log('用户点击取消')
}
},
})
} }
}, },
navMenuClick(index) { navMenuClick(index) {
@@ -233,16 +253,20 @@ export default {
iconPath: '/static/share.png', iconPath: '/static/share.png',
text: '编辑', text: '编辑',
}) })
this.content.push({
iconPath: '/static/delate.png',
text: '删除',
})
this.content.push({
iconPath: '/static/transfer.png',
text: '移交',
})
this.content.push({
iconPath: '/static/share.png',
text: '分享',
})
if (userInfo.authorities == '3') { if (userInfo.authorities == '3') {
this.content.push({
iconPath: '/static/transfer.png',
text: '移交',
})
} else if (userInfo.authorities == '4') { } else if (userInfo.authorities == '4') {
this.content.push({
iconPath: '/static/share.png',
text: '分享',
})
} }
setTimeout(() => { setTimeout(() => {
// 获取nav高度 // 获取nav高度

View File

@@ -88,7 +88,9 @@
<view <view
class="temp-list-item" class="temp-list-item"
:class="{ :class="{
'temp-list-item-active': formData.tempFiles.some((item2) => item2.id === item.id), 'temp-list-item-active': formData.tempFiles.some(
(item2) => item2.id === item.id || item2.topoId === item.id,
),
}" }"
v-for="(item, index) in tempList" v-for="(item, index) in tempList"
@click="chooseTempItem(item)" @click="chooseTempItem(item)"
@@ -104,7 +106,7 @@
</template> </template>
<script> <script>
import { pinyin } from 'pinyin-pro' import { pinyin } from 'pinyin-pro'
import { addAppProject } from '../../common/api/project' import { addAppProject, updateAppProject } from '../../common/api/project'
import { getTopoTemplate } from '../../common/api/device' import { getTopoTemplate } from '../../common/api/device'
import { queryEngineering } from '@/common/api/engineering.js' import { queryEngineering } from '@/common/api/engineering.js'
export default { export default {
@@ -125,7 +127,7 @@ export default {
}, },
engineeringList: [], engineeringList: [],
tempList: [], tempList: [],
project: '', project: null,
} }
}, },
computed: { computed: {
@@ -150,6 +152,9 @@ export default {
}, },
onLoad(options) { onLoad(options) {
if (options.project) { if (options.project) {
uni.setNavigationBarTitle({
title: '编辑项目',
})
this.project = JSON.parse(decodeURIComponent(options.project)) this.project = JSON.parse(decodeURIComponent(options.project))
console.log(this.project) console.log(this.project)
for (let key in this.formData) { for (let key in this.formData) {
@@ -172,6 +177,20 @@ export default {
getTopoTemplate().then((res) => { getTopoTemplate().then((res) => {
console.log(res) console.log(res)
this.tempList = res.data this.tempList = res.data
if (this.project) {
this.project.topologyDiagramPaths.forEach((item) => {
if (this.tempList.some((item2) => item2.id === item.topoId)) {
this.formData.tempFiles.push(item)
} else {
this.formData.files.push({
url: item.filePath,
extname: item.name.split('.')[1],
name: item.name,
...item,
})
}
})
}
}) })
}, },
methods: { methods: {
@@ -179,8 +198,10 @@ export default {
this.formData.tempFiles.splice(index, 1) this.formData.tempFiles.splice(index, 1)
}, },
chooseTempItem(item) { chooseTempItem(item) {
if (this.formData.tempFiles.some((item2) => item2.id === item.id)) { if (this.formData.tempFiles.some((item2) => item2.id === item.id || item2.topoId === item.id)) {
this.formData.tempFiles = this.formData.tempFiles.filter((item2) => item2.id !== item.id) this.formData.tempFiles = this.formData.tempFiles.filter(
(item2) => item2.id !== item.id && item2.topoId !== item.id,
)
} else { } else {
this.formData.tempFiles.push(item) this.formData.tempFiles.push(item)
} }
@@ -243,27 +264,33 @@ export default {
uri: item.url, uri: item.url,
}) })
} }
this.formData.topoIds = this.formData.tempFiles.map((item) => item.id) this.formData.topoIds = this.formData.tempFiles.map((item) => (item.topoId ? item.topoId : item.id))
let data = JSON.parse(JSON.stringify(this.formData)) let data = JSON.parse(JSON.stringify(this.formData))
delete data.files delete data.files
addAppProject(data, arr).then((res) => { let res = {}
console.warn(res) if (this.project) {
if (res.length === 1) { data.id = this.project.id
this.$util.toast(res[0].message) res = await updateAppProject(data, arr)
return } else {
} res = await addAppProject(data, arr)
console.log(res) }
let result = JSON.parse(res[1].data) console.log(res)
if (result.code === 'A0000') { if (res.length === 1) {
this.$util.toast('项目创建成功') this.$util.toast(res[0].message)
this.$util.prePage().store?.reload() return
setTimeout(() => { }
uni.navigateBack({ delta: 1 }) let result = JSON.parse(res[1].data)
}, 1500) if (result.code === 'A0000') {
if (this.project) {
this.$util.toast('项目修改成功')
this.$util.refreshPrePage(2)
} else { } else {
this.$util.toast(result.message) this.$util.toast('项目创建成功')
this.$util.refreshPrePage()
} }
}) } else {
this.$util.toast(result.message)
}
}, },
}, },
} }

View File

@@ -1,11 +1,15 @@
<template> <template>
<Cn-page :loading='loading'> <Cn-page :loading="loading">
<view slot='body'> <view slot="body">
<view class='transfer'> <view class="transfer">
<image class="transfer-img" src="/static/transfer.png" mode="scaleToFill" /> <!-- <div class="transfer-img" ref="qrCodeUrl" /> -->
<uqrcode ref="uqrcode" canvas-id="qrcode" :value="content" :options="{ margin: 10 }"></uqrcode>
<canvas id="qrcode" width="200" height="200"></canvas>
<view class="transfer-text">请让接收人员扫码接收</view> <view class="transfer-text">请让接收人员扫码接收</view>
<view class="transfer-btn"> <view class="transfer-btn">
<button class="transfer-btn-item" style="background-color:#fff;color:#111" @click="back">返回</button> <button class="transfer-btn-item" style="background-color: #fff; color: #111" @click="back">
返回
</button>
<button class="transfer-btn-item ml20" @click="home">转移成功</button> <button class="transfer-btn-item ml20" @click="home">转移成功</button>
</view> </view>
</view> </view>
@@ -13,27 +17,33 @@
</Cn-page> </Cn-page>
</template> </template>
<script> <script>
// import QRCode from 'qrcodejs2'
// import UQRCode from '@/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js';
export default { export default {
data () { data() {
return { return {
loading: false loading: false,
content: '',
} }
}, },
methods: { methods: {
back () { back() {
uni.navigateBack({ this.$util.refreshPrePage(2)
delta: 1
})
}, },
home () { home() {
uni.switchTab({ this.$util.refreshPrePage(2)
url: '/pages/index/index' },
}) },
} onLoad(options) {
} this.content = JSON.stringify({
type: 'transferProject',
id: options.id,
})
},
} }
</script> </script>
<style lang='scss'> <style lang="scss">
.transfer { .transfer {
padding: 200rpx 34rpx 0; padding: 200rpx 34rpx 0;
display: flex; display: flex;
@@ -41,9 +51,6 @@ export default {
align-items: center; align-items: center;
.transfer-img { .transfer-img {
width: 500rpx;
height: 500rpx;
background: $uni-theme-blue ;
} }
.transfer-text { .transfer-text {

View File

@@ -40,11 +40,11 @@
<view class="login-box-tips"> <view class="login-box-tips">
<view style="color: #999">说明密码长度为6-18</view> <view style="color: #999">说明密码长度为6-18</view>
</view> </view>
<view class="login-box-tips"> <!-- <view class="login-box-tips">
<view style="color: #999">点击提交即表示同意</view> <view style="color: #999">点击提交即表示同意</view>
<navigator url="/pages/mine/agreement" hover-class="none">用户协议</navigator> <navigator url="/pages/mine/agreement" hover-class="none">用户协议</navigator>
<navigator url="/pages/mine/policy" hover-class="none">个人信息保护政策</navigator> <navigator url="/pages/mine/policy" hover-class="none">个人信息保护政策</navigator>
</view> </view> -->
</view> </view>
</view> </view>
</Cn-page> </Cn-page>

View File

@@ -21,7 +21,7 @@
<view class="login-box-input-img"></view> <view class="login-box-input-img"></view>
</view> --> </view> -->
<view class="login-box-input mt40"> <view class="login-box-input mt40">
<input class="login-box-input-main" v-model="yzmForm.code" placeholder="手机验证码" /> <input class="login-box-input-main" v-model="yzmForm.code" placeholder="手机验证码" />
<view <view
class="ml40" class="ml40"
style="font-size: 28rpx; color: #666; width: 200rpx; text-align: center" style="font-size: 28rpx; color: #666; width: 200rpx; text-align: center"
@@ -33,7 +33,12 @@
</template> </template>
<template v-else> <template v-else>
<view class="login-box-input mt100"> <view class="login-box-input mt100">
<input class="login-box-input-main" maxlength="11" v-model="phone" placeholder="请输入账号" /> <input
class="login-box-input-main"
maxlength="11"
v-model="phone"
placeholder="请输入手机号"
/>
</view> </view>
<view class="login-box-input mt40"> <view class="login-box-input mt40">
<input <input
@@ -59,7 +64,9 @@
<navigator url="/pages/user/register" hover-class="none">快速注册</navigator> <navigator url="/pages/user/register" hover-class="none">快速注册</navigator>
</view> </view>
<view class="login-box-tips"> <view class="login-box-tips">
<view style="color: #999">点击登录即表示同意</view> <view style="color: #999"
><checkbox :checked="checkbox" @click="checkbox = !checkbox" /> 我已阅读并同意</view
>
<navigator url="/pages/mine/agreement" hover-class="none">用户协议</navigator> <navigator url="/pages/mine/agreement" hover-class="none">用户协议</navigator>
<navigator url="/pages/mine/policy" hover-class="none">个人信息保护政策</navigator> <navigator url="/pages/mine/policy" hover-class="none">个人信息保护政策</navigator>
</view> </view>
@@ -76,16 +83,17 @@ import { sm3Digest } from '@/common/js/sm3.js'
export default { export default {
data() { data() {
return { return {
checkbox: false,
loading: false, loading: false,
loginType: 'pwd', loginType: 'pwd',
phone:'13999999999', phone: '',
pwdForm: { pwdForm: {
pwd: '', pwd: '',
imgCode: '', imgCode: '',
}, },
yzmForm: { yzmForm: {
code: '', code: '123456789',
imgCode: '123456789', imgCode: '',
}, },
waitTime: 0, waitTime: 0,
tenantId: '', tenantId: '',
@@ -123,6 +131,9 @@ export default {
}) })
}, },
login() { login() {
if (!this.checkbox) {
return this.$util.toast('请先阅读并同意用户协议和个人信息保护政策!')
}
console.log(this.loginType) console.log(this.loginType)
if (this.loginType == 'pwd') { if (this.loginType == 'pwd') {
this.pwdLogin() this.pwdLogin()
@@ -134,9 +145,9 @@ export default {
if (!this.phone && !this.pwdForm.pwd) { if (!this.phone && !this.pwdForm.pwd) {
return this.$util.toast('请填写登录信息!') return this.$util.toast('请填写登录信息!')
} }
console.log(this.phone); console.log(this.phone)
let loginName = encrypt(this.phone) let loginName = encrypt(this.phone)
console.log(loginName); console.log(loginName)
gongkey({ loginName }).then((response) => { gongkey({ loginName }).then((response) => {
let publicKey = response.data let publicKey = response.data
let sm3Pwd = sm3Digest(this.pwdForm.pwd) let sm3Pwd = sm3Digest(this.pwdForm.pwd)
@@ -167,7 +178,8 @@ export default {
onLoad(o) { onLoad(o) {
// 移除所有的缓存 // 移除所有的缓存
// uni.clearStorageSync() // uni.clearStorageSync()
uni.removeStorageSync('access_token') uni.removeStorageSync(this.$cacheKey.access_token)
uni.removeStorageSync(this.$cacheKey.engineering)
}, },
} }
</script> </script>
@@ -269,6 +281,7 @@ export default {
margin-top: 60rpx; margin-top: 60rpx;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center;
font-size: 20rpx; font-size: 20rpx;
} }
} }

View File

@@ -20,9 +20,11 @@
</view> </view>
</uni-forms-item> </uni-forms-item>
</uni-forms> </uni-forms>
<button type="default" class="submit-btn" @click="firstSubmit">下一步</button> <button type="default" class="submit-btn" @click="firstSubmit">注册</button>
<view class="login-box-tips"> <view class="login-box-tips">
<view style="color: #999">点击提交即表示同意</view> <view style="color: #999"
><checkbox :checked="checkbox" @click="checkbox = !checkbox" /> 我已阅读并同意</view
>
<navigator url="/pages/mine/agreement" hover-class="none">用户协议</navigator> <navigator url="/pages/mine/agreement" hover-class="none">用户协议</navigator>
<navigator url="/pages/mine/policy" hover-class="none">个人信息保护政策</navigator> <navigator url="/pages/mine/policy" hover-class="none">个人信息保护政策</navigator>
</view> </view>
@@ -52,6 +54,7 @@ export default {
name: 'jiaban', name: 'jiaban',
data() { data() {
return { return {
checkbox:false,
step: 1, step: 1,
loading: false, loading: false,
waitTime: 0, waitTime: 0,
@@ -129,6 +132,9 @@ export default {
}) })
}, },
firstSubmit() { firstSubmit() {
if (!this.checkbox) {
return this.$util.toast('请先阅读并同意用户协议和个人信息保护政策!')
}
this.$refs.form.validate().then((valid, errors) => { this.$refs.form.validate().then((valid, errors) => {
apiRegister({ apiRegister({
phone: this.formData.phone, phone: this.formData.phone,
@@ -182,6 +188,7 @@ export default {
margin-top: 60rpx; margin-top: 60rpx;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center;
font-size: 20rpx; font-size: 20rpx;
} }

39
pnpm-lock.yaml generated
View File

@@ -4,7 +4,8 @@ specifiers:
'@types/html5plus': ^1.0.2 '@types/html5plus': ^1.0.2
'@types/uni-app': ^1.4.4 '@types/uni-app': ^1.4.4
crypto-js: ^4.1.1 crypto-js: ^4.1.1
html2canvas: ^1.4.1 html2canvas: 1.0.0-rc.4
image-tools: ^1.4.0
mqtt: 3.0.0 mqtt: 3.0.0
pinyin-pro: ^3.13.2 pinyin-pro: ^3.13.2
qs: ^6.11.2 qs: ^6.11.2
@@ -12,7 +13,8 @@ specifiers:
dependencies: dependencies:
crypto-js: 4.1.1 crypto-js: 4.1.1
html2canvas: 1.4.1 html2canvas: 1.0.0-rc.4
image-tools: 1.4.0
mqtt: 3.0.0 mqtt: 3.0.0
pinyin-pro: 3.13.2 pinyin-pro: 3.13.2
qs: 6.11.2 qs: 6.11.2
@@ -84,8 +86,8 @@ packages:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: false dev: false
/base64-arraybuffer/1.0.2: /base64-arraybuffer/0.2.0:
resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} resolution: {integrity: sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==}
engines: {node: '>= 0.6.0'} engines: {node: '>= 0.6.0'}
dev: false dev: false
@@ -172,10 +174,10 @@ packages:
resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==}
dev: false dev: false
/css-line-break/2.1.0: /css-line-break/1.1.1:
resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} resolution: {integrity: sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==}
dependencies: dependencies:
utrie: 1.0.2 base64-arraybuffer: 0.2.0
dev: false dev: false
/csstype/3.1.2: /csstype/3.1.2:
@@ -367,18 +369,21 @@ packages:
xtend: 4.0.2 xtend: 4.0.2
dev: false dev: false
/html2canvas/1.4.1: /html2canvas/1.0.0-rc.4:
resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} resolution: {integrity: sha512-5sJ+oM3FfNFpGVbMQkJFDl1WH5Sa293l2koMEZWbaehJ3dWHty4mSrmZtfWlWDoLckfGojZS9aZ7Zk3uFouyPw==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
dependencies: dependencies:
css-line-break: 2.1.0 css-line-break: 1.1.1
text-segmentation: 1.0.3
dev: false dev: false
/ieee754/1.2.1: /ieee754/1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: false dev: false
/image-tools/1.4.0:
resolution: {integrity: sha512-TKtvJ6iUwM0mfaD4keMnk1ENHFC470QEjBfA3IlvKdEOufzvWbjbaoNcoyYq6HlViF8+d5tOS1ooE6j7CHf1lQ==}
dev: false
/inflight/1.0.6: /inflight/1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies: dependencies:
@@ -668,12 +673,6 @@ packages:
safe-buffer: 5.2.1 safe-buffer: 5.2.1
dev: false dev: false
/text-segmentation/1.0.3:
resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==}
dependencies:
utrie: 1.0.2
dev: false
/through2-filter/3.0.0: /through2-filter/3.0.0:
resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==} resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==}
dependencies: dependencies:
@@ -733,12 +732,6 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: false dev: false
/utrie/1.0.2:
resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==}
dependencies:
base64-arraybuffer: 1.0.2
dev: false
/vconsole/3.15.1: /vconsole/3.15.1:
resolution: {integrity: sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==} resolution: {integrity: sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==}
dependencies: dependencies:

8
readme Normal file
View File

@@ -0,0 +1,8 @@
工程用户
13999999999
营销用户
13888888888
VIP用户
13333333333
运维管理元
njcnyw

BIN
static/success.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB